{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./Components/form/assets/scripts/modules/Module.js","webpack:///./Components/form/assets/scripts/form.js","webpack:///(webpack)/buildin/global.js","webpack:///./Components/form/assets/scripts/modules/utils.js","webpack:///./Components/form/assets/scripts/modules/Validators.js","webpack:///./Components/form/assets/scripts/modules/ModuleFormValidator.js","webpack:///./node_modules/tooltip.js/dist/esm/tooltip.js","webpack:///./Components/form/assets/scripts/modules/ModuleTooltips.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","isBrowser","window","document","navigator","timeoutDuration","longerTimeoutBrowsers","length","userAgent","indexOf","debounce","Promise","fn","called","resolve","then","scheduled","setTimeout","isFunction","functionToCheck","toString","getStyleComputedProperty","element","nodeType","css","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","test","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","side","arguments","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","parseInt","getWindowSizes","height","width","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","descriptor","configurable","writable","protoProps","staticProps","obj","_extends","assign","source","getClientRect","offsets","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","data","ends","slice","prop","findIndex","cur","match","forEach","console","warn","enabled","update","this","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","event","callback","scrollParents","isBody","push","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","index","concat","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","hide","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","setAttribute","onLoad","modifierOptions","Popper","_this","requestAnimationFrame","jquery","Utils","global","PopperUtils","Module","constructor","dom","$el","site","w","ModulesForm","require","FormValidator","Tooltips","Modules","g","Function","cleanJson","inputStringJson","sanitized","JSON","parse","isEmptyField","content","isEmailFormat","isPhoneNumber","countryCode","regexPhone","isFileTypeMatching","type","acceptedTypes","arrayAcceptedTypes","matching","acceptedType","isWebAddress","super","errors","validators","entityMap","init","jQuery","originalTitle","title","form","inputs","querySelectorAll","hasFileInputs","formPosition","offsetTop","optionalLabel","dataset","dataGtm","gtminfo","dataGa4","getAttribute","submitLabel","submitLabelDone","submitLabelProcessing","submitLabelError","presetArray","getPresetArray","countryFromCookie","checkForCookie","handleUTMFields","handleOptionals","handleLabels","handleSubmit","handleRegionSelect","prefillCountryField","handleFilesFields","handleA11yRadioFields","handleA11yFilesFields","applyFormPreset","addIdToFields","countryInCookie","cookie","updateCTA","ctaBtn","innerHTML","classList","add","remove","preset","getElementById","id","checked","matchParam","location","href","field","fieldData","getUTMParameter","theParameter","params","substr","decodeURIComponent","UTMCampaign","UTMMedium","UTMSource","UTMContent","UTMTerm","from","formField","noOptionalMsg","label","innerText","count","subLabel","display","preventDefault","resetSummaryPanel","removeInlineErrors","resetPageTitle","formUrl","protocol","hostname","pathname","errorList","validateForm","showSummary","showInlineErrors","updatePageTitle","addGtm","addGa4","autoScroll","resetdropDowntoEnabled","dataObj","FormData","$","serialize","ajaxOptions","url","contentType","processData","itemId","ajax","done","textStatus","jqXHR","data_gtm","dataLayer","hasConfirmationPage","confirmationPage","confirmationMessage","emptyFields","fail","errorThrown","resetRecaptcha","status","responseJSON","ModelState","errorMessages","gtm","fieldKey","substring","message","Message","reset","selectedCountry","countryField","selectedIndex","dispatchEvent","Event","getErrorMessage","item","category","json","errorMessage","jsonData","empty","invalid","wrongType","tooLarge","radioName","countrySelected","requiredItems","textOnly","hasAttribute","validity","badInput","rangeUnderflow","rangeOverflow","stepMismatch","valueMissing","checkValidity","textLength","required","files","accept","size","sizeCap","grecaptcha","error","createErrorLink","scrollTo","focus","preventScroll","createErrorMessage","newError","createElement","className","fieldPosition","fieldUpload","fieldNode","fieldType","appendChild","insertBefore","newListItem","newLink","newSpan","countrySelect","regionSelect","regionWrapper","regionLabel","originalOptions","option","optgroup","placeholder","outerHTML","removeBtn","targetSpan","uploadBtn","updateFileSFieldMessage","handleRemoveFilesBtns","input","button","fileSize","ellipsName","ellipsis","number","toFixed","filesBtn","keyCode","click","radioLabel","previousElementSibling","join","dataGtmCleanJson","ga4StringParsed","isArray","thisModule","scrollingLinks","doScrolling","getElementYPosition","elementY","duration","startingY","pageYOffset","diff","timestamp","time","percent","DEFAULT_OPTIONS","container","delay","template","trigger","arrowSelector","innerSelector","Tooltip","_initialiseProps","events","_isOpen","_popperOptions","_setEventListeners","allowHtml","tooltipGenerator","tooltipNode","childNodes","random","titleNode","_addTitleContent","textContent","_isOpening","_tooltipNode","visibility","popperInstance","_create","_findContainer","_append","popperOptions","_events","func","_hide","_this2","directEvents","oppositeEvents","evt","usedByTooltip","_scheduleShow","_scheduleHide","closeOnClickOutside","_this3","computedDelay","show","_showTimeout","_show","_this4","clearTimeout","_setTooltipNodeEvent","_clearTitleContent","lastTitle","_this5","dispose","_dispose","toggle","updateTitleContent","_updateTitleContent","relatedreference","toElement","relatedTarget","evt2","relatedreference2","ModuleTooltips","tooltip","tooltipPlacement","handleTooltip","handleClose","closeBtn","blur","activeElement"],"mappings":"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","file":"components.form.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\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 isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\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\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\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 window = element.ownerDocument.defaultView;\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) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\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 if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', '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 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 = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.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 parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\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], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\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 try {\n if (isIE(10)) {\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 } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\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(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\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 fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\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 = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 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 = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\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 && !fixedPosition ? 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 excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\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 var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\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 * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\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 padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\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 * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\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 window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\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 // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\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.
\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, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n 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 data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\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; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys 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.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : 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 getWindow(reference).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 getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\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, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n 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: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\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 var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\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 // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\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.
\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 var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\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 conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\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.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (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, data.positionFixed);\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\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\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 // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\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.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at 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 * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has 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 each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points 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 conjunction 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 * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\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 your 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 information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For 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 * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\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.
\n * By default, it is set to no-op.
\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 * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the 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 && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\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 * Schedules 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.
\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","export default class Module {\r\n\tconstructor(el) {\r\n\t\tthis.dom = {\r\n\t\t\tel: el,\r\n\t\t\t$el: el,\r\n\t\t\tbody: document.querySelector('body'),\r\n\t\t\thtml: document.querySelector('html'),\r\n\t\t\tsite: document.querySelector('#site'),\r\n\t\t\tw: window,\r\n\t\t};\r\n\t}\r\n}\r\n","var ModulesForm = {\r\n\tModule: require('./modules/Module'),\r\n\tFormValidator: require('./modules/ModuleFormValidator'),\r\n\tTooltips: require('./modules/ModuleTooltips'),\r\n};\r\n\r\nwindow.Modules = { ...window.Modules, ...ModulesForm };\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export function returnFileSize(number) {\r\n\tif (number < 1024) {\r\n\t\treturn number + 'bytes';\r\n\t} else if (number >= 1024 && number < 1048576) {\r\n\t\treturn (number / 1024).toFixed(1) + 'KB';\r\n\t} else if (number >= 1048576) {\r\n\t\treturn (number / 1048576).toFixed(1) + 'MB';\r\n\t}\r\n}\r\n\r\nexport function cleanJson(inputStringJson) {\r\n\tlet sanitized = inputStringJson\r\n\t\t.replace(/\\\\n/g, '\\\\n')\r\n\t\t.replace(/\\\\'/g, \"\\\\'\")\r\n\t\t.replace(/\\\\\"/g, '\\\\\"')\r\n\t\t.replace(/\\\\&/g, '\\\\&')\r\n\t\t.replace(/\\\\r/g, '\\\\r')\r\n\t\t.replace(/\\\\t/g, '\\\\t')\r\n\t\t.replace(/\\\\b/g, '\\\\b')\r\n\t\t.replace(/\\\\f/g, '\\\\f');\r\n\r\n\t// remove non-printable and other non-valid JSON chars\r\n\tsanitized = sanitized.replace(/[\\u0000-\\u0019]+/g, '');\r\n\treturn JSON.parse(sanitized);\r\n}\r\n\r\nexport function ellipsis(length, el) {\r\n\tif (el.length > length) {\r\n\t\tfor (let i = length; i > 0; i--) {\r\n\t\t\tif (\r\n\t\t\t\tel.charAt(i - 1) != ',' ||\r\n\t\t\t\tel.charAt(i - 1) != '.' ||\r\n\t\t\t\tel.charAt(i - 1) != ';'\r\n\t\t\t) {\r\n\t\t\t\treturn el.substr(0, i) + (el.length > length ? '...' : '');\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\treturn el;\r\n\t}\r\n}\r\n","export function isEmptyField(content) {\r\n\tif (typeof content === 'string' && content.trim().length > 0) {\r\n\t\treturn false;\r\n\t} else if (typeof content === 'number') {\r\n\t\treturn false;\r\n\t} else {\r\n\t\treturn true;\r\n\t}\r\n}\r\n\r\nexport function isTextOnly(content) {\r\n\tconst regexFirstLastName = /^[A-zÀ-ÖØ-öø-ÿ\\s'-.]+$/;\r\n\treturn regexFirstLastName.test(content);\r\n}\r\n\r\nexport function isNumbersOnly(content) {\r\n\tconst regexNumbersOnly = /^[0-9]+$/;\r\n\treturn regexNumbersOnly.test(content);\r\n}\r\n\r\nexport function isEmailFormat(content) {\r\n\tconst regexEmail = /^[\\w.%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/;\r\n\treturn regexEmail.test(content);\r\n}\r\n\r\nexport function isPhoneNumber(content, countryCode) {\r\n\tlet regexPhone;\r\n\tif (\r\n\t\tcountryCode.toLowerCase() === 'ca' ||\r\n\t\tcountryCode.toLowerCase() === 'us'\r\n\t) {\r\n\t\tregexPhone = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/;\r\n\t} else {\r\n\t\tregexPhone = /^[\\+]?\\d{3,20}$/;\r\n\t}\r\n\treturn regexPhone.test(content);\r\n}\r\n\r\n// * This method will validate the files by comparing the mime types of the files\r\n// * So in the input element we need a mime type in the accept field\r\n// * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types for valid types\r\nexport function isFileTypeMatching(type, acceptedTypes) {\r\n\tconst arrayAcceptedTypes = acceptedTypes.replace(/\\s/g, '').split(',');\r\n\tlet matching = false;\r\n\tarrayAcceptedTypes.forEach((acceptedType) => {\r\n\t\tif (type === acceptedType) {\r\n\t\t\tmatching = true;\r\n\t\t}\r\n\t});\r\n\treturn matching;\r\n}\r\n\r\nexport function isWebAddress(content) {\r\n\tconst regexURL = /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/;\r\n\treturn regexURL.test(content);\r\n}\r\n","/* eslint-disable prefer-destructuring */\r\n/* eslint-disable no-redeclare */\r\n/* eslint-disable no-lonely-if */\r\n/* eslint-disable no-shadow */\r\n/* eslint-disable eqeqeq */\r\n/* eslint-disable no-var */\r\n/* eslint-disable vars-on-top */\r\n/* eslint-disable no-prototype-builtins */\r\n/* eslint-disable block-scoped-var */\r\n/* eslint-disable no-plusplus */\r\n/* eslint-disable spaced-comment */\r\n/* eslint-disable prefer-template */\r\n/* eslint-disable no-restricted-globals */\r\n/* eslint-disable no-else-return */\r\n/* eslint-disable no-useless-return */\r\n/* eslint-disable no-unused-expressions */\r\n/* eslint-disable no-useless-escape */\r\n/* eslint-disable prefer-const */\r\n/* eslint-disable default-case */\r\nimport Module from './Module';\r\n\r\nimport { returnFileSize, cleanJson, ellipsis } from './utils';\r\nimport {\r\n\tisEmptyField,\r\n\tisTextOnly,\r\n\tisEmailFormat,\r\n\tisPhoneNumber,\r\n\tisFileTypeMatching,\r\n\tisWebAddress,\r\n} from './Validators';\r\n\r\n// TODO\r\n//* [✔] Pass the error messages from a data-attribute so that webmasters could change them\r\n//* [✔] Implement the date validation\r\n//* [✔] Convert the forEach to provide support to IE11\r\n//* [✔] Improve the phone validation to match the pattern of different countries\r\n//* [✔] Pass the error field type in the array to customize the position of the error\r\n// [] Find a way to only use FormData instead of serialize\r\n// [] Refactor the ajax call to vanilla solution\r\n// [] Add validation or limit for zipcode\r\n\r\nexport default class FormValidator extends Module {\r\n\tconstructor(el) {\r\n\t\tsuper(el);\r\n\r\n\t\tthis.errors = [];\r\n\t\tthis.validators = [];\r\n\r\n\t\tthis.entityMap = {\r\n\t\t\t'&': '&',\r\n\t\t\t'<': '<',\r\n\t\t\t'>': '>',\r\n\t\t\t'\"': '"',\r\n\t\t\t\"'\": ''',\r\n\t\t\t'/': '/',\r\n\t\t\t'`': '`',\r\n\t\t\t'=': '=',\r\n\t\t};\r\n\t}\r\n\r\n\tinit() {\r\n\t\tif (window.jQuery) {\r\n\t\t\tif (this.dom.el instanceof jQuery) {\r\n\t\t\t\tthis.dom.el = this.dom.el[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.originalTitle = document.title;\r\n\r\n\t\tthis.form = this.dom.el.querySelector('form');\r\n\t\tthis.inputs = this.dom.el.querySelectorAll('input');\r\n\r\n\t\tthis.hasFileInputs =\r\n\t\t\tthis.form.querySelectorAll('input[type=file]').length > 0;\r\n\t\tthis.formPosition = this.form.offsetTop;\r\n\r\n\t\tthis.optionalLabel = this.dom.el.dataset.optionalLabel;\r\n\t\tthis.dataGtm = this.dom.el.dataset.gtminfo;\r\n\t\tthis.dataGa4 = this.dom.el.getAttribute('data-ga4-form-error');\r\n\t\tthis.submitLabel =\r\n\t\t\tthis.dom.el.getAttribute('data-submit-label') || 'Submit';\r\n\t\tthis.submitLabelDone =\r\n\t\t\tthis.dom.el.getAttribute('data-submit-label-done') || 'Done';\r\n\t\tthis.submitLabelProcessing =\r\n\t\t\tthis.dom.el.getAttribute('data-submit-label-processing') || 'Processing';\r\n\t\tthis.submitLabelError =\r\n\t\t\tthis.dom.el.getAttribute('data-submit-label-error') || 'Error';\r\n\r\n\t\tthis.presetArray = this.getPresetArray();\r\n\t\tthis.countryFromCookie = this.checkForCookie();\r\n\r\n\t\tthis.handleUTMFields();\r\n\t\tthis.handleOptionals();\r\n\t\tthis.handleLabels();\r\n\t\tthis.handleSubmit();\r\n\t\tthis.handleRegionSelect();\r\n\t\tthis.prefillCountryField();\r\n\t\tthis.handleFilesFields();\r\n\t\tthis.handleA11yRadioFields();\r\n\t\tthis.handleA11yFilesFields();\r\n\t\tthis.applyFormPreset();\r\n\t\tthis.addIdToFields();\r\n\t}\r\n\r\n\tcheckForCookie() {\r\n\t\tlet countryInCookie = document.cookie.match(\r\n\t\t\t/^(?:.*\\;\\s?)?bmg-localization(?:\\-fallback)?\\=[^\\;]*country\\_code=([^\\;\\|]+)/i\r\n\t\t);\r\n\t\tif (countryInCookie && countryInCookie.length > 0) {\r\n\t\t\treturn countryInCookie[1].toLowerCase();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateCTA(state) {\r\n\t\tlet ctaBtn = this.form.querySelector('.cta');\r\n\t\tswitch (state) {\r\n\t\t\tcase 'processing':\r\n\t\t\t\tctaBtn.innerHTML = `\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t${this.submitLabelProcessing}`;\r\n\t\t\t\tctaBtn.classList.add('cta__processing');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'processed':\r\n\t\t\t\tctaBtn.innerHTML = `\r\n \r\n \r\n ${this.submitLabelDone}`;\r\n\t\t\t\tctaBtn.classList.remove('cta__processing');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'error':\r\n\t\t\t\tctaBtn.innerHTML = `\r\n \r\n \r\n ${this.submitLabelError}`;\r\n\t\t\t\tctaBtn.classList.remove('cta__processing');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'submit':\r\n\t\t\t\tctaBtn.innerHTML = this.submitLabel;\r\n\t\t\t\tctaBtn.classList.remove('cta__processing');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tapplyFormPreset() {\r\n\t\tthis.presetArray.forEach((preset) => {\r\n\t\t\tlet el = document.getElementById(preset.id);\r\n\t\t\tif (el) {\r\n\t\t\t\tif (el.type === 'checkbox') {\r\n\t\t\t\t\tel.checked = preset.value === '1';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.value = preset.value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetPresetArray() {\r\n\t\tlet matchParam = window.location.href.match(\r\n\t\t\t/\\?(?:.*\\&)?formpreset\\=([^\\&]+)/i\r\n\t\t);\r\n\t\tif (matchParam && matchParam.length > 1) {\r\n\t\t\tlet presetArray = [];\r\n\t\t\tlet fields = matchParam[1].split('|');\r\n\t\t\tfields.forEach((field) => {\r\n\t\t\t\tlet fieldData = field.split('^');\r\n\t\t\t\tif (fieldData.length > 1) {\r\n\t\t\t\t\tpresetArray.push({\r\n\t\t\t\t\t\tid: fieldData[0],\r\n\t\t\t\t\t\tvalue: fieldData[1],\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn presetArray;\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tgetUTMParameter(theParameter) {\r\n\t\tlet params = window.location.search.substr(1).split('&');\r\n\t\tfor (var i = 0; i < params.length; i++) {\r\n\t\t\tlet p = params[i].split('=');\r\n\t\t\tif (p[0] == theParameter) {\r\n\t\t\t\treturn decodeURIComponent(p[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\thandleUTMFields() {\r\n\t\tlet UTMCampaign = this.form.querySelector('input[id=UTMCampaign]');\r\n\t\tlet UTMMedium = this.form.querySelector('input[id=UTMMedium]');\r\n\t\tlet UTMSource = this.form.querySelector('input[id=UTMSource]');\r\n\t\tlet UTMContent = this.form.querySelector('input[id=UTMContent]');\r\n\t\tlet UTMTerm = this.form.querySelector('input[id=UTMTerm]');\r\n\r\n\t\tif (UTMCampaign) {\r\n\t\t\tUTMCampaign.value = this.getUTMParameter('utm_campaign');\r\n\t\t}\r\n\t\tif (UTMMedium) {\r\n\t\t\tUTMMedium.value = this.getUTMParameter('utm_medium');\r\n\t\t}\r\n\t\tif (UTMSource) {\r\n\t\t\tUTMSource.value = this.getUTMParameter('utm_source');\r\n\t\t}\r\n\t\tif (UTMContent) {\r\n\t\t\tUTMContent.value = this.getUTMParameter('utm_content');\r\n\t\t}\r\n\t\tif (UTMTerm) {\r\n\t\t\tUTMTerm.value = this.getUTMParameter('utm_term');\r\n\t\t}\r\n\t}\r\n\r\n\thandleOptionals() {\r\n\t\tconst formFields = Array.from(this.form.querySelectorAll('.form__field'));\r\n\r\n\t\tformFields.forEach((formField) => {\r\n\t\t\tif (formField.dataset.noOptionalMsg) {\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tconst label = formField.querySelector('.field__label');\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlet required = formField.querySelector('[required]');\r\n\t\t\t\t\t!required ? (label.innerText += ` ${this.optionalLabel}`) : '';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\thandleLabels() {\r\n\t\tconst labels = Array.from(this.form.querySelectorAll('label'));\r\n\r\n\t\tlabels.forEach((label) => {\r\n\t\t\tconst count = label.innerText.length;\r\n\t\t\tlet subLabel = label.querySelector('.field__hint');\r\n\t\t\tif (count > 35 && subLabel) {\r\n\t\t\t\tsubLabel.style.display = 'inline-block';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\thandleSubmit() {\r\n\t\t// Prevent the native validation but only if the JS is loaded\r\n\t\tthis.form.setAttribute('novalidate', true);\r\n\r\n\t\tthis.form.addEventListener('submit', (e) => {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\t//Clean the errors messages\r\n\t\t\tthis.resetSummaryPanel();\r\n\t\t\tthis.removeInlineErrors();\r\n\t\t\tthis.resetPageTitle();\r\n\r\n\t\t\t// If the field for formsource exist, set its value to the current page url (pathname)\r\n\t\t\tlet formUrl = this.form.querySelector('input[id=formUrl]');\r\n\t\t\tif (formUrl) {\r\n\t\t\t\tformUrl.value =\r\n\t\t\t\t\tlocation.protocol + '//' + location.hostname + location.pathname;\r\n\t\t\t}\r\n\r\n\t\t\t// Check all the validations\r\n\t\t\tlet errorList = this.validateForm();\r\n\r\n\t\t\t// If needed prevent the submit then display all the errors\r\n\t\t\tif (errorList.length !== 0) {\r\n\t\t\t\tthis.showSummary(errorList, this.formPosition);\r\n\t\t\t\tthis.showInlineErrors(errorList);\r\n\t\t\t\tthis.updatePageTitle(errorList);\r\n\t\t\t\tthis.addGtm(errorList);\r\n\t\t\t\tthis.addGa4(errorList);\r\n\t\t\t\tthis.autoScroll();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis.resetdropDowntoEnabled();\r\n\t\t\tthis.updateCTA('processing');\r\n\r\n\t\t\tlet dataObj = this.hasFileInputs\r\n\t\t\t\t? new FormData(this.form)\r\n\t\t\t\t: $(this.form).serialize();\r\n\r\n\t\t\tlet ajaxOptions = {\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\turl: this.form.getAttribute('action'),\r\n\t\t\t\tdata: dataObj,\r\n\t\t\t\tcontentType: false,\r\n\t\t\t\tprocessData: false,\r\n\t\t\t\titemId: this.form.getAttribute('item'),\r\n\t\t\t};\r\n\t\t\tif (!this.hasFileInputs) {\r\n\t\t\t\tajaxOptions.contentType =\r\n\t\t\t\t\t'application/x-www-form-urlencoded; charset=UTF-8';\r\n\t\t\t}\r\n\r\n\t\t\t// Make the API call\r\n\t\t\t$.ajax(ajaxOptions)\r\n\t\t\t\t.done((data, textStatus, jqXHR) => {\r\n\t\t\t\t\tthis.updateCTA('processed');\r\n\r\n\t\t\t\t\t// Deprecated\r\n\t\t\t\t\tif (data.data_gtm) {\r\n\t\t\t\t\t\tfor (let i = 0; i < data.data_gtm.length; i++) {\r\n\t\t\t\t\t\t\twindow.dataLayer.push(data.data_gtm[i]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet hasConfirmationPage = this.dom.el.dataset.confirmationPage;\r\n\t\t\t\t\tlet confirmationMessage = this.dom.el.querySelector(\r\n\t\t\t\t\t\t'.confirmationMessage'\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tthis.emptyFields();\r\n\r\n\t\t\t\t\tif (hasConfirmationPage) {\r\n\t\t\t\t\t\twindow.location = hasConfirmationPage;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.form.style.display = 'none';\r\n\t\t\t\t\t\tconfirmationMessage.style.display = 'block';\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.fail((jqXHR, textStatus, errorThrown) => {\r\n\t\t\t\t\tthis.updateCTA('submit');\r\n\t\t\t\t\tthis.resetRecaptcha();\r\n\t\t\t\t\tif (jqXHR.status == 400 && jqXHR.responseJSON != null) {\r\n\t\t\t\t\t\tlet errorList = [];\r\n\t\t\t\t\t\tif (typeof jqXHR.responseJSON.ModelState !== 'undefined') {\r\n\t\t\t\t\t\t\tlet errorMessages = jqXHR.responseJSON.ModelState;\r\n\t\t\t\t\t\t\tfor (var key in errorMessages) {\r\n\t\t\t\t\t\t\t\tif (errorMessages.hasOwnProperty(key)) {\r\n\t\t\t\t\t\t\t\t\tif (key == 'dataGtm') {\r\n\t\t\t\t\t\t\t\t\t\tlet gtm = JSON.parse(errorMessages[key]);\r\n\t\t\t\t\t\t\t\t\t\tfor (var i = 0; i < gtm.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\t\twindow.dataLayer.push(gtm[i]);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tlet modelState = errorMessages[key];\r\n\t\t\t\t\t\t\t\t\t\tlet fieldKey = key;\r\n\t\t\t\t\t\t\t\t\t\tif (key.indexOf('data.') > -1) {\r\n\t\t\t\t\t\t\t\t\t\t\tfieldKey =\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey.substring(5).charAt(0).toLowerCase() +\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey.substring(5).substring(1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\t\t\t\tfield: fieldKey,\r\n\t\t\t\t\t\t\t\t\t\t\tmessage: errorMessages[key],\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlet errorMessages = jqXHR.responseJSON;\r\n\r\n\t\t\t\t\t\t\tfor (var key in errorMessages) {\r\n\t\t\t\t\t\t\t\tif (errorMessages.hasOwnProperty(key)) {\r\n\t\t\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\t\t\tfield: key.charAt(0).toLowerCase() + key.substring(1),\r\n\t\t\t\t\t\t\t\t\t\tmessage: errorMessages[key],\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (errorList.length !== 0) {\r\n\t\t\t\t\t\t\tthis.showSummary(errorList, this.formPosition);\r\n\t\t\t\t\t\t\tthis.showInlineErrors(errorList);\r\n\t\t\t\t\t\t\tthis.updatePageTitle(errorList);\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (jqXHR.responseJSON) {\r\n\t\t\t\t\t\t\tif (jqXHR.responseJSON.Message) {\r\n\t\t\t\t\t\t\t\tthis.showSummary([\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tfield: null,\r\n\t\t\t\t\t\t\t\t\t\tmessage: jqXHR.responseJSON.Message,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\r\n\temptyFields() {\r\n\t\tthis.form.reset();\r\n\t\tvar formSpans = this.form.querySelectorAll('span.field__info');\r\n\t\tformSpans.forEach(function (element) {\r\n\t\t\telement.innerHTML = '';\r\n\t\t});\r\n\t}\r\n\r\n\tselectedCountry() {\r\n\t\tlet countryField = this.form.querySelector('select[data-type=\"country\"]');\r\n\t\tif (countryField) {\r\n\t\t\treturn countryField.options[countryField.selectedIndex].value;\r\n\t\t} else return 'no country field in this form';\r\n\t}\r\n\r\n\tprefillCountryField() {\r\n\t\tif (this.countryFromCookie) {\r\n\t\t\tlet countryField = this.form.querySelector('select[data-type=\"country\"]');\r\n\t\t\tfor (let i = 0; i < countryField.length; ++i) {\r\n\t\t\t\tif (countryField.options[i].value === this.countryFromCookie) {\r\n\t\t\t\t\tcountryField.value = this.countryFromCookie;\r\n\t\t\t\t\tcountryField.dispatchEvent(new Event('change'));\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetErrorMessage(item, category) {\r\n\t\tconst json = item.dataset.errorMessage;\r\n\t\tif (!json) {\r\n\t\t\treturn 'No error message defined';\r\n\t\t} else {\r\n\t\t\tlet jsonData = JSON.parse(json);\r\n\t\t\tswitch (category) {\r\n\t\t\t\tcase 'empty':\r\n\t\t\t\t\treturn jsonData.empty ? jsonData.empty : 'No error message defined';\r\n\t\t\t\tcase 'invalid':\r\n\t\t\t\t\treturn jsonData.invalid\r\n\t\t\t\t\t\t? jsonData.invalid\r\n\t\t\t\t\t\t: 'No error message defined';\r\n\t\t\t\tcase 'wrongType':\r\n\t\t\t\t\treturn jsonData.wrongType\r\n\t\t\t\t\t\t? jsonData.wrongType\r\n\t\t\t\t\t\t: 'No error message defined';\r\n\t\t\t\tcase 'tooLarge':\r\n\t\t\t\t\treturn jsonData.tooLarge\r\n\t\t\t\t\t\t? jsonData.tooLarge\r\n\t\t\t\t\t\t: 'No error message defined';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvalidateForm() {\r\n\t\t// Will loop over all the inputs, selects and textareas to run the appropriate text\r\n\t\tlet errorList = [];\r\n\t\tlet radioName = [];\r\n\r\n\t\tlet countrySelected = this.selectedCountry();\r\n\t\tlet requiredItems = this.form.querySelectorAll('input, select, textarea');\r\n\r\n\t\tfor (let i = 0; i < requiredItems.length; i++) {\r\n\t\t\tlet item = requiredItems[i];\r\n\t\t\tlet textOnly = item.dataset.textOnly === 'true';\r\n\t\t\tswitch (item.type) {\r\n\t\t\t\tcase 'text': {\r\n\t\t\t\t\tif (isEmptyField(item.value)) {\r\n\t\t\t\t\t\tif (item.hasAttribute('required')) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (textOnly && !isTextOnly(item.value)) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'email': {\r\n\t\t\t\t\tif (isEmptyField(item.value)) {\r\n\t\t\t\t\t\tif (item.hasAttribute('required')) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (!isEmailFormat(item.value)) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'number': {\r\n\t\t\t\t\tif (isEmptyField(item.value)) {\r\n\t\t\t\t\t\tif (item.hasAttribute('required')) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (item.validity.badInput) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\titem.validity.rangeUnderflow ||\r\n\t\t\t\t\t\titem.validity.rangeOverflow ||\r\n\t\t\t\t\t\titem.validity.stepMismatch\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'tel': {\r\n\t\t\t\t\tif (item.hasAttribute('required')) {\r\n\t\t\t\t\t\tif (item.validity.valueMissing) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// We could run test matching a pattern depending of the country selected\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\titem.value.length !== 0 &&\r\n\t\t\t\t\t\t!isPhoneNumber(item.value, countrySelected)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.name,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'url': {\r\n\t\t\t\t\tif (isEmptyField(item.value)) {\r\n\t\t\t\t\t\tif (item.hasAttribute('required')) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (!isWebAddress(item.value)) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'date': {\r\n\t\t\t\t\tif (item.validity.valueMissing) {\r\n\t\t\t\t\t\tif (item.hasAttribute('required')) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (!item.checkValidity()) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'select-one': {\r\n\t\t\t\t\tif (item.hasAttribute('required') && item.selectedIndex === 0) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'textarea': {\r\n\t\t\t\t\tif (item.hasAttribute('required') && !item.textLength) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t} else if (!item.checkValidity()) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'radio': {\r\n\t\t\t\t\tif (item.required) {\r\n\t\t\t\t\t\tif (radioName.indexOf(item.name) > -1) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tradioName.push(item.name);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tthis.form.querySelectorAll(`input[name=${item.name}]:checked`)\r\n\t\t\t\t\t\t\t\t\t.length === 0\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'file': {\r\n\t\t\t\t\tif (item.hasAttribute('required') && !item.files.length) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'empty'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t} else if (item.files.length > 0) {\r\n\t\t\t\t\t\tif (!isFileTypeMatching(item.files[0].type, item.accept)) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'wrongType'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else if (item.files[0].size > parseInt(item.dataset.sizeCap)) {\r\n\t\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'tooLarge'),\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase 'checkbox': {\r\n\t\t\t\t\tif (item.hasAttribute('required') && !item.checked) {\r\n\t\t\t\t\t\terrorList.push({\r\n\t\t\t\t\t\t\tfield: item.id,\r\n\t\t\t\t\t\t\tmessage: this.getErrorMessage(item, 'invalid'),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn errorList;\r\n\t}\r\n\r\n\tremoveInlineErrors() {\r\n\t\tArray.from(this.form.querySelectorAll('.error')).forEach((e) =>\r\n\t\t\te.parentNode.removeChild(e)\r\n\t\t);\r\n\t\tArray.from(this.form.querySelectorAll('.invalid')).forEach((e) => {\r\n\t\t\te.setAttribute('aria-invalid', false);\r\n\t\t\te.classList.remove('invalid');\r\n\t\t});\r\n\t}\r\n\r\n\tupdatePageTitle(errorList) {\r\n\t\tdocument.title = `(${errorList.length} errors) - ${this.originalTitle}`;\r\n\t}\r\n\r\n\tresetPageTitle() {\r\n\t\tdocument.title = this.originalTitle;\r\n\t}\r\n\r\n\tresetSummaryPanel() {\r\n\t\tthis.dom.el.querySelector('.errorSummary').style.display = 'none';\r\n\t\tthis.dom.el.querySelector('.errorList').innerHTML = '';\r\n\t}\r\n\r\n\tresetRecaptcha() {\r\n\t\tif (window.grecaptcha) {\r\n\t\t\twindow.grecaptcha.reset();\r\n\t\t}\r\n\t}\r\n\r\n\tshowSummary(errorList, position) {\r\n\t\tlet errorSummary = this.dom.el.querySelector('.errorSummary');\r\n\t\terrorSummary.style.display = 'block';\r\n\t\terrorList.forEach((error) => {\r\n\t\t\tthis.createErrorLink(error.message, error.field);\r\n\t\t});\r\n\t\twindow.scrollTo(0, position - 60);\r\n\t\tthis.dom.el\r\n\t\t\t.querySelector('#errorSummary-heading')\r\n\t\t\t.focus({ preventScroll: true });\r\n\t}\r\n\r\n\tshowInlineErrors(errorList) {\r\n\t\terrorList.forEach((error) => {\r\n\t\t\tthis.createErrorMessage(error.field, error.message);\r\n\t\t});\r\n\t}\r\n\r\n\tresetdropDowntoEnabled() {\r\n\t\tif (\r\n\t\t\tthis.dom.el.querySelector('#job') &&\r\n\t\t\tthis.dom.el.querySelector('#job').getAttribute('disabled') !== null\r\n\t\t) {\r\n\t\t\tthis.dom.el.querySelector('#job').removeAttribute('disabled');\r\n\t\t}\r\n\t}\r\n\r\n\t// Create a new
with the error message between the Label and the field\r\n\tcreateErrorMessage(field, message) {\r\n\t\tlet newError = document.createElement('span');\r\n\t\tnewError.className = 'error';\r\n\t\tnewError.innerHTML = message;\r\n\t\tlet fieldPosition = this.dom.el.querySelector(`[for=\"${field}\"]`);\r\n\t\tlet fieldUpload = fieldPosition.querySelector('.field__upload');\r\n\t\tconst fieldNode = this.dom.el.querySelector(`#${field}`);\r\n\t\tconst fieldType = fieldNode.type;\r\n\r\n\t\tif (fieldType === 'radio' || fieldType === 'checkbox') {\r\n\t\t\tlet legend = fieldPosition.parentElement.parentElement.querySelector(\r\n\t\t\t\t'legend'\r\n\t\t\t);\r\n\t\t\tlegend.appendChild(newError);\r\n\t\t\tfieldPosition.parentElement.classList.add('invalid');\r\n\t\t} else if (fieldPosition && fieldUpload) {\r\n\t\t\tfieldPosition.insertBefore(newError, fieldUpload);\r\n\t\t\tfieldUpload.classList.add('invalid');\r\n\t\t} else {\r\n\t\t\tfieldPosition && fieldPosition.appendChild(newError);\r\n\t\t}\r\n\t\tfieldNode.classList.add('invalid');\r\n\t\tfieldNode.setAttribute('aria-invalid', true);\r\n\t}\r\n\r\n\t// Create a new
  • with the error message linking to the field with error\r\n\tcreateErrorLink(message, field = null) {\r\n\t\tlet newListItem = document.createElement('li');\r\n\t\tif (field != null) {\r\n\t\t\tlet newLink = document.createElement('a');\r\n\t\t\tnewLink.setAttribute('href', `#${field}_anchor`);\r\n\t\t\tnewLink.innerHTML = message;\r\n\t\t\tnewListItem.appendChild(newLink);\r\n\t\t} else {\r\n\t\t\tlet newSpan = document.createElement('span');\r\n\t\t\tnewSpan.innerHTML = message;\r\n\t\t\tnewListItem.appendChild(newSpan);\r\n\t\t}\r\n\r\n\t\tthis.dom.el.querySelector('.errorList').appendChild(newListItem);\r\n\t}\r\n\r\n\thandleRegionSelect() {\r\n\t\tlet countrySelect = this.dom.el.querySelector(\r\n\t\t\t'select[data-type=\"country\"]'\r\n\t\t);\r\n\t\tlet regionSelect = this.dom.el.querySelector('select[data-type=\"region\"]');\r\n\r\n\t\tif (regionSelect) {\r\n\t\t\tlet regionWrapper = regionSelect.parentElement;\r\n\t\t\tlet regionLabel = regionWrapper.querySelector('.field__label');\r\n\r\n\t\t\tlet originalOptions = regionSelect.innerHTML;\r\n\r\n\t\t\tcountrySelect.addEventListener('change', () => {\r\n\t\t\t\tlet target = regionSelect;\r\n\t\t\t\ttarget.innerHTML = originalOptions;\r\n\t\t\t\tlet options = Array.from(target.querySelectorAll('optgroup'));\r\n\t\t\t\tlet match = 0;\r\n\t\t\t\toptions.forEach((option) => {\r\n\t\t\t\t\tlet optgroup = target.querySelector(\r\n\t\t\t\t\t\t`optgroup[label=${option.label}]`\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (countrySelect.value === option.label) {\r\n\t\t\t\t\t\ttarget.removeAttribute('disabled');\r\n\t\t\t\t\t\ttarget.setAttribute('required', true);\r\n\t\t\t\t\t\ttarget.setAttribute('aria-required', true);\r\n\t\t\t\t\t\toptgroup.removeAttribute('hidden');\r\n\t\t\t\t\t\ttarget.value = '';\r\n\t\t\t\t\t\tregionWrapper.removeAttribute('style');\r\n\t\t\t\t\t\tregionLabel.innerHTML = optgroup.dataset.label;\r\n\t\t\t\t\t\ttarget.options[0].innerText = optgroup.dataset.placeholder;\r\n\t\t\t\t\t\tmatch += 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toptgroup.outerHTML = '';\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tif (match === 0) {\r\n\t\t\t\t\ttarget.setAttribute('disabled', true);\r\n\t\t\t\t\ttarget.setAttribute('aria-required', false);\r\n\t\t\t\t\ttarget.removeAttribute('required');\r\n\t\t\t\t\ttarget.value = '';\r\n\t\t\t\t\tregionWrapper.setAttribute('style', 'display: none;');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\thandleFilesFields() {\r\n\t\tlet filesFields = Array.from(\r\n\t\t\tthis.dom.el.querySelectorAll('input[type=\"file\"]')\r\n\t\t);\r\n\t\tfilesFields.forEach((field) => {\r\n\t\t\tlet removeBtn = field.parentElement.querySelector('.field__btn--remove');\r\n\t\t\tlet targetSpan = field.parentElement.querySelector('.field__info');\r\n\t\t\tlet uploadBtn = field.parentElement.querySelector('.field__btn--upload');\r\n\r\n\t\t\tfield.addEventListener('change', () => {\r\n\t\t\t\tif (field.files.length !== 0) {\r\n\t\t\t\t\tremoveBtn.style.display = 'flex';\r\n\t\t\t\t\tuploadBtn.style.display = 'none';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tremoveBtn.style.display = 'none';\r\n\t\t\t\t\tuploadBtn.style.display = 'flex';\r\n\t\t\t\t}\r\n\t\t\t\tthis.updateFileSFieldMessage(field, targetSpan);\r\n\t\t\t});\r\n\r\n\t\t\tthis.handleRemoveFilesBtns(field, removeBtn, targetSpan);\r\n\t\t});\r\n\t}\r\n\r\n\thandleRemoveFilesBtns(input, button, target) {\r\n\t\tbutton.addEventListener('click', () => {\r\n\t\t\tinput.value = '';\r\n\t\t\tthis.updateFileSFieldMessage(input, target);\r\n\t\t\tlet event = new Event('change');\r\n\t\t\tinput.dispatchEvent(event);\r\n\t\t});\r\n\t}\r\n\r\n\tupdateFileSFieldMessage(input, target) {\r\n\t\tif (input.files.length !== 0) {\r\n\t\t\tlet fileSize = input.files[0].size;\r\n\t\t\tlet fileName = input.files[0].name;\r\n\t\t\tlet ellipsName = ellipsis(15, fileName);\r\n\t\t\ttarget.innerHTML = `${ellipsName} - ${returnFileSize(fileSize)}`;\r\n\t\t} else {\r\n\t\t\ttarget.innerHTML = `No file selected`;\r\n\t\t}\r\n\t}\r\n\r\n\t// Add keyboard functionality to the fields of type file\r\n\thandleA11yFilesFields() {\r\n\t\tlet filesBtns = Array.from(this.dom.el.querySelectorAll('.field__upload'));\r\n\t\tfilesBtns.forEach((filesBtn) => {\r\n\t\t\tfilesBtn.addEventListener('keypress', (e) => {\r\n\t\t\t\tif (e.keyCode === 32 || e.keyCode === 13) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tlet target = filesBtn.parentElement.nextElementSibling;\r\n\t\t\t\t\ttarget.click();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t// Add keyboard functionality to the fields of type radio\r\n\thandleA11yRadioFields() {\r\n\t\tlet radioLabels = Array.from(this.dom.el.querySelectorAll('.radio__btn'));\r\n\t\tradioLabels.forEach((radioLabel) => {\r\n\t\t\tradioLabel.addEventListener('keypress', (e) => {\r\n\t\t\t\tif (e.keyCode === 32 || e.keyCode === 13) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tradioLabel.previousElementSibling.checked = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\taddGtm(errorList) {\r\n\t\tif (this.dataGtm) {\r\n\t\t\tlet errorMessages = [];\r\n\t\t\terrorList.forEach((error) => {\r\n\t\t\t\terrorMessages.push(error.message);\r\n\t\t\t});\r\n\t\t\terrorMessages = errorMessages.join('|');\r\n\t\t\tthis.dataGtm = this.dataGtm.replace('%eventLabel%', errorMessages);\r\n\t\t\tconst dataGtmCleanJson = cleanJson(this.dataGtm);\r\n\t\t\twindow.dataLayer.push(dataGtmCleanJson);\r\n\t\t}\r\n\t}\r\n\r\n\taddGa4(errorList) {\r\n\t\tif (!this.dataGa4) return;\r\n\t\ttry {\r\n\t\t\tconst errorMessages = errorList\r\n\t\t\t\t.map((error) => `${error.field} - ${error.message}`)\r\n\t\t\t\t.join('|');\r\n\r\n\t\t\tthis.dataGa4 = this.dataGa4.replace('', errorMessages);\r\n\t\t\tconst ga4StringParsed = cleanJson(this.dataGa4);\r\n\t\t\tif (Array.isArray(ga4StringParsed)) {\r\n\t\t\t\tfor (let i = 0; i < ga4StringParsed.length; i++) {\r\n\t\t\t\t\twindow.dataLayer.push(ga4StringParsed[i]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twindow.dataLayer.push(ga4StringParsed);\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.warn('[ModuleFormValidator] - Error while parsing GA4 Events');\r\n\t\t}\r\n\t}\r\n\r\n\taddIdToFields() {\r\n\t\tconst fieldList = Array.from(document.querySelectorAll('.form__field'));\r\n\t\tfieldList.forEach((item) => {\r\n\t\t\tconst input = item.querySelector('input');\r\n\t\t\tif (input) {\r\n\t\t\t\titem.id = input.id + '_anchor';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tautoScroll() {\r\n\t\tlet thisModule = this;\r\n\t\tvar scrollingLinks = this.dom.el.querySelectorAll('a[href^=\"#\"]');\r\n\r\n\t\tif (!scrollingLinks) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t[].forEach.call(scrollingLinks, (element) => {\r\n\t\t\tlet target = document.getElementById(element.hash.substring(1));\r\n\r\n\t\t\tif (target) {\r\n\t\t\t\telement.addEventListener('click', (e) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tgetComputedStyle(target, null).display === 'none' ||\r\n\t\t\t\t\t\ttarget.nodeName === 'INPUT' ||\r\n\t\t\t\t\t\ttarget.nodeName === 'SELECT'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tthisModule.doScrolling(\r\n\t\t\t\t\t\t\tthisModule.getElementYPosition(target.parentElement) - 90,\r\n\t\t\t\t\t\t\t200\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthisModule.doScrolling(\r\n\t\t\t\t\t\t\tthisModule.getElementYPosition(target) - 60,\r\n\t\t\t\t\t\t\t500\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetElementYPosition(element) {\r\n\t\tvar y = element.offsetTop;\r\n\t\tvar node = element;\r\n\r\n\t\twhile (node.offsetParent && node.offsetParent != document.body) {\r\n\t\t\tnode = node.offsetParent;\r\n\t\t\ty += node.offsetTop;\r\n\t\t}\r\n\r\n\t\treturn y;\r\n\t}\r\n\r\n\tdoScrolling(elementY, duration) {\r\n\t\tvar startingY = window.pageYOffset;\r\n\t\tvar diff = elementY - startingY;\r\n\t\tvar start;\r\n\r\n\t\twindow.requestAnimationFrame(function step(timestamp) {\r\n\t\t\tif (!start) start = timestamp;\r\n\t\t\tvar time = timestamp - start;\r\n\t\t\tvar percent = Math.min(time / duration, 1);\r\n\r\n\t\t\twindow.scrollTo(0, startingY + diff * percent);\r\n\r\n\t\t\tif (time < duration) {\r\n\t\t\t\twindow.requestAnimationFrame(step);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.3.3\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 */\nimport Popper from 'popper.js';\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\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\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\nvar DEFAULT_OPTIONS = {\n container: false,\n delay: 0,\n html: false,\n placement: 'top',\n title: '',\n template: '
    ',\n trigger: 'hover focus',\n offset: 0,\n arrowSelector: '.tooltip-arrow, .tooltip__arrow',\n innerSelector: '.tooltip-inner, .tooltip__inner'\n};\n\nvar Tooltip = function () {\n /**\n * Create a new Tooltip.js instance\n * @class Tooltip\n * @param {HTMLElement} reference - The DOM node used as reference of the tooltip (it can be a jQuery element).\n * @param {Object} options\n * @param {String} options.placement='top'\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end),\n * left(-start, -end)`\n * @param {String} [options.arrowSelector='.tooltip-arrow, .tooltip__arrow'] - className used to locate the DOM arrow element in the tooltip.\n * @param {String} [options.innerSelector='.tooltip-inner, .tooltip__inner'] - className used to locate the DOM inner element in the tooltip.\n * @param {HTMLElement|String|false} options.container=false - Append the tooltip to a specific element.\n * @param {Number|Object} options.delay=0\n * Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type.\n * If a number is supplied, delay is applied to both hide/show.\n * Object structure is: `{ show: 500, hide: 100 }`\n * @param {Boolean} options.html=false - Insert HTML into the tooltip. If false, the content will inserted with `textContent`.\n * @param {String} [options.template='
    ']\n * Base HTML to used when creating the tooltip.\n * The tooltip's `title` will be injected into the `.tooltip-inner` or `.tooltip__inner`.\n * `.tooltip-arrow` or `.tooltip__arrow` will become the tooltip's arrow.\n * The outermost wrapper element should have the `.tooltip` class.\n * @param {String|HTMLElement|TitleFunction} options.title='' - Default title value if `title` attribute isn't present.\n * @param {String} [options.trigger='hover focus']\n * How tooltip is triggered - click, hover, focus, manual.\n * You may pass multiple triggers; separate them with a space. `manual` cannot be combined with any other trigger.\n * @param {Boolean} options.closeOnClickOutside=false - Close a popper on click outside of the popper and reference element. This has effect only when options.trigger is 'click'.\n * @param {String|HTMLElement} options.boundariesElement\n * The element used as boundaries for the tooltip. For more information refer to Popper.js'\n * [boundariesElement docs](https://popper.js.org/popper-documentation.html)\n * @param {Number|String} options.offset=0 - Offset of the tooltip relative to its reference. For more information refer to Popper.js'\n * [offset docs](https://popper.js.org/popper-documentation.html)\n * @param {Object} options.popperOptions={} - Popper options, will be passed directly to popper instance. For more information refer to Popper.js'\n * [options docs](https://popper.js.org/popper-documentation.html)\n * @return {Object} instance - The generated tooltip instance\n */\n function Tooltip(reference, options) {\n classCallCheck(this, Tooltip);\n\n _initialiseProps.call(this);\n\n // apply user options over default ones\n options = _extends({}, DEFAULT_OPTIONS, options);\n\n reference.jquery && (reference = reference[0]);\n\n // cache reference and options\n this.reference = reference;\n this.options = options;\n\n // get events list\n var events = typeof options.trigger === 'string' ? options.trigger.split(' ').filter(function (trigger) {\n return ['click', 'hover', 'focus'].indexOf(trigger) !== -1;\n }) : [];\n\n // set initial state\n this._isOpen = false;\n this._popperOptions = {};\n\n // set event listeners\n this._setEventListeners(reference, events, options);\n }\n\n //\n // Public methods\n //\n\n /**\n * Reveals an element's tooltip. This is considered a \"manual\" triggering of the tooltip.\n * Tooltips with zero-length titles are never displayed.\n * @method Tooltip#show\n * @memberof Tooltip\n */\n\n\n /**\n * Hides an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @method Tooltip#hide\n * @memberof Tooltip\n */\n\n\n /**\n * Hides and destroys an element’s tooltip.\n * @method Tooltip#dispose\n * @memberof Tooltip\n */\n\n\n /**\n * Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @method Tooltip#toggle\n * @memberof Tooltip\n */\n\n\n /**\n * Updates the tooltip's title content\n * @method Tooltip#updateTitleContent\n * @memberof Tooltip\n * @param {String|HTMLElement} title - The new content to use for the title\n */\n\n\n //\n // Private methods\n //\n\n createClass(Tooltip, [{\n key: '_create',\n\n\n /**\n * Creates a new tooltip node\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} reference\n * @param {String} template\n * @param {String|HTMLElement|TitleFunction} title\n * @param {Boolean} allowHtml\n * @return {HTMLElement} tooltipNode\n */\n value: function _create(reference, template, title, allowHtml) {\n // create tooltip element\n var tooltipGenerator = window.document.createElement('div');\n tooltipGenerator.innerHTML = template.trim();\n var tooltipNode = tooltipGenerator.childNodes[0];\n\n // add unique ID to our tooltip (needed for accessibility reasons)\n tooltipNode.id = 'tooltip_' + Math.random().toString(36).substr(2, 10);\n\n // set initial `aria-hidden` state to `false` (it's visible!)\n tooltipNode.setAttribute('aria-hidden', 'false');\n\n // add title to tooltip\n var titleNode = tooltipGenerator.querySelector(this.options.innerSelector);\n this._addTitleContent(reference, title, allowHtml, titleNode);\n\n // return the generated tooltip node\n return tooltipNode;\n }\n }, {\n key: '_addTitleContent',\n value: function _addTitleContent(reference, title, allowHtml, titleNode) {\n if (title.nodeType === 1 || title.nodeType === 11) {\n // if title is a element node or document fragment, append it only if allowHtml is true\n allowHtml && titleNode.appendChild(title);\n } else if (isFunction(title)) {\n // Recursively call ourself so that the return value of the function gets handled appropriately - either\n // as a dom node, a string, or even as another function.\n this._addTitleContent(reference, title.call(reference), allowHtml, titleNode);\n } else {\n // if it's just a simple text, set textContent or innerHtml depending by `allowHtml` value\n allowHtml ? titleNode.innerHTML = title : titleNode.textContent = title;\n }\n }\n }, {\n key: '_show',\n value: function _show(reference, options) {\n // don't show if it's already visible\n // or if it's not being showed\n if (this._isOpen && !this._isOpening) {\n return this;\n }\n this._isOpen = true;\n\n // if the tooltipNode already exists, just show it\n if (this._tooltipNode) {\n this._tooltipNode.style.visibility = 'visible';\n this._tooltipNode.setAttribute('aria-hidden', 'false');\n this.popperInstance.update();\n return this;\n }\n\n // get title\n var title = reference.getAttribute('title') || options.title;\n\n // don't show tooltip if no title is defined\n if (!title) {\n return this;\n }\n\n // create tooltip node\n var tooltipNode = this._create(reference, options.template, title, options.html);\n\n // Add `aria-describedby` to our reference element for accessibility reasons\n reference.setAttribute('aria-describedby', tooltipNode.id);\n\n // append tooltip to container\n var container = this._findContainer(options.container, reference);\n\n this._append(tooltipNode, container);\n\n this._popperOptions = _extends({}, options.popperOptions, {\n placement: options.placement\n });\n\n this._popperOptions.modifiers = _extends({}, this._popperOptions.modifiers, {\n arrow: _extends({}, this._popperOptions.modifiers && this._popperOptions.modifiers.arrow, {\n element: options.arrowSelector\n }),\n offset: _extends({}, this._popperOptions.modifiers && this._popperOptions.modifiers.offset, {\n offset: options.offset || this._popperOptions.modifiers && this._popperOptions.modifiers.offset && this._popperOptions.modifiers.offset.offset || options.offset\n })\n });\n\n if (options.boundariesElement) {\n this._popperOptions.modifiers.preventOverflow = {\n boundariesElement: options.boundariesElement\n };\n }\n\n this.popperInstance = new Popper(reference, tooltipNode, this._popperOptions);\n\n this._tooltipNode = tooltipNode;\n\n return this;\n }\n }, {\n key: '_hide',\n value: function _hide() /*reference, options*/{\n // don't hide if it's already hidden\n if (!this._isOpen) {\n return this;\n }\n\n this._isOpen = false;\n\n // hide tooltipNode\n this._tooltipNode.style.visibility = 'hidden';\n this._tooltipNode.setAttribute('aria-hidden', 'true');\n\n return this;\n }\n }, {\n key: '_dispose',\n value: function _dispose() {\n var _this = this;\n\n // remove event listeners first to prevent any unexpected behaviour\n this._events.forEach(function (_ref) {\n var func = _ref.func,\n event = _ref.event;\n\n _this.reference.removeEventListener(event, func);\n });\n this._events = [];\n\n if (this._tooltipNode) {\n this._hide();\n\n // destroy instance\n this.popperInstance.destroy();\n\n // destroy tooltipNode if removeOnDestroy is not set, as popperInstance.destroy() already removes the element\n if (!this.popperInstance.options.removeOnDestroy) {\n this._tooltipNode.parentNode.removeChild(this._tooltipNode);\n this._tooltipNode = null;\n }\n }\n return this;\n }\n }, {\n key: '_findContainer',\n value: function _findContainer(container, reference) {\n // if container is a query, get the relative element\n if (typeof container === 'string') {\n container = window.document.querySelector(container);\n } else if (container === false) {\n // if container is `false`, set it to reference parent\n container = reference.parentNode;\n }\n return container;\n }\n\n /**\n * Append tooltip to container\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} tooltipNode\n * @param {HTMLElement|String|false} container\n */\n\n }, {\n key: '_append',\n value: function _append(tooltipNode, container) {\n container.appendChild(tooltipNode);\n }\n }, {\n key: '_setEventListeners',\n value: function _setEventListeners(reference, events, options) {\n var _this2 = this;\n\n var directEvents = [];\n var oppositeEvents = [];\n\n events.forEach(function (event) {\n switch (event) {\n case 'hover':\n directEvents.push('mouseenter');\n oppositeEvents.push('mouseleave');\n break;\n case 'focus':\n directEvents.push('focus');\n oppositeEvents.push('blur');\n break;\n case 'click':\n directEvents.push('click');\n oppositeEvents.push('click');\n break;\n }\n });\n\n // schedule show tooltip\n directEvents.forEach(function (event) {\n var func = function func(evt) {\n if (_this2._isOpening === true) {\n return;\n }\n evt.usedByTooltip = true;\n _this2._scheduleShow(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n });\n\n // schedule hide tooltip\n oppositeEvents.forEach(function (event) {\n var func = function func(evt) {\n if (evt.usedByTooltip === true) {\n return;\n }\n _this2._scheduleHide(reference, options.delay, options, evt);\n };\n _this2._events.push({ event: event, func: func });\n reference.addEventListener(event, func);\n if (event === 'click' && options.closeOnClickOutside) {\n document.addEventListener('mousedown', function (e) {\n if (!_this2._isOpening) {\n return;\n }\n var popper = _this2.popperInstance.popper;\n if (reference.contains(e.target) || popper.contains(e.target)) {\n return;\n }\n func(e);\n }, true);\n }\n });\n }\n }, {\n key: '_scheduleShow',\n value: function _scheduleShow(reference, delay, options /*, evt */) {\n var _this3 = this;\n\n this._isOpening = true;\n // defaults to 0\n var computedDelay = delay && delay.show || delay || 0;\n this._showTimeout = window.setTimeout(function () {\n return _this3._show(reference, options);\n }, computedDelay);\n }\n }, {\n key: '_scheduleHide',\n value: function _scheduleHide(reference, delay, options, evt) {\n var _this4 = this;\n\n this._isOpening = false;\n // defaults to 0\n var computedDelay = delay && delay.hide || delay || 0;\n window.clearTimeout(this._showTimeout);\n window.setTimeout(function () {\n if (_this4._isOpen === false) {\n return;\n }\n if (!document.body.contains(_this4._tooltipNode)) {\n return;\n }\n\n // if we are hiding because of a mouseleave, we must check that the new\n // reference isn't the tooltip, because in this case we don't want to hide it\n if (evt.type === 'mouseleave') {\n var isSet = _this4._setTooltipNodeEvent(evt, reference, delay, options);\n\n // if we set the new event, don't hide the tooltip yet\n // the new event will take care to hide it if necessary\n if (isSet) {\n return;\n }\n }\n\n _this4._hide(reference, options);\n }, computedDelay);\n }\n }, {\n key: '_updateTitleContent',\n value: function _updateTitleContent(title) {\n if (typeof this._tooltipNode === 'undefined') {\n if (typeof this.options.title !== 'undefined') {\n this.options.title = title;\n }\n return;\n }\n var titleNode = this._tooltipNode.querySelector(this.options.innerSelector);\n this._clearTitleContent(titleNode, this.options.html, this.reference.getAttribute('title') || this.options.title);\n this._addTitleContent(this.reference, title, this.options.html, titleNode);\n this.options.title = title;\n this.popperInstance.update();\n }\n }, {\n key: '_clearTitleContent',\n value: function _clearTitleContent(titleNode, allowHtml, lastTitle) {\n if (lastTitle.nodeType === 1 || lastTitle.nodeType === 11) {\n allowHtml && titleNode.removeChild(lastTitle);\n } else {\n allowHtml ? titleNode.innerHTML = '' : titleNode.textContent = '';\n }\n }\n }]);\n return Tooltip;\n}();\n\n/**\n * Title function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback TitleFunction\n * @return {String} placement - The desired title.\n */\n\n\nvar _initialiseProps = function _initialiseProps() {\n var _this5 = this;\n\n this.show = function () {\n return _this5._show(_this5.reference, _this5.options);\n };\n\n this.hide = function () {\n return _this5._hide();\n };\n\n this.dispose = function () {\n return _this5._dispose();\n };\n\n this.toggle = function () {\n if (_this5._isOpen) {\n return _this5.hide();\n } else {\n return _this5.show();\n }\n };\n\n this.updateTitleContent = function (title) {\n return _this5._updateTitleContent(title);\n };\n\n this._events = [];\n\n this._setTooltipNodeEvent = function (evt, reference, delay, options) {\n var relatedreference = evt.relatedreference || evt.toElement || evt.relatedTarget;\n\n var callback = function callback(evt2) {\n var relatedreference2 = evt2.relatedreference || evt2.toElement || evt2.relatedTarget;\n\n // Remove event listener after call\n _this5._tooltipNode.removeEventListener(evt.type, callback);\n\n // If the new reference is not the reference element\n if (!reference.contains(relatedreference2)) {\n // Schedule to hide tooltip\n _this5._scheduleHide(reference, options.delay, options, evt2);\n }\n };\n\n if (_this5._tooltipNode.contains(relatedreference)) {\n // listen to mouseleave on the tooltip element to be able to hide the tooltip\n _this5._tooltipNode.addEventListener(evt.type, callback);\n return true;\n }\n\n return false;\n };\n};\n\nexport default Tooltip;\n//# sourceMappingURL=tooltip.js.map\n","import Tooltip from 'tooltip.js';\r\nimport Module from './Module';\r\n\r\nexport default class ModuleTooltips extends Module {\r\n\tinit() {\r\n\t\tthis.tooltip = this.dom.el;\r\n\t\tthis.placement = this.dom.el.dataset.tooltipPlacement\r\n\t\t\t? this.dom.el.dataset.tooltipPlacement\r\n\t\t\t: 'right';\r\n\r\n\t\tthis.tooltip.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\r\n\t\tthis.handleTooltip();\r\n\t}\r\n\r\n\thandleTooltip() {\r\n\t\tconst container = document.querySelector('body');\r\n\r\n\t\tconst instance = new Tooltip(this.tooltip, {\r\n\t\t\ttitle: this.tooltip.dataset.tooltip,\r\n\t\t\ttrigger: 'click',\r\n\t\t\tcloseOnClickOutside: true,\r\n\t\t\tplacement: this.placement,\r\n\t\t\thtml: false,\r\n\t\t\ttemplate:\r\n\t\t\t\t'
    ',\r\n\t\t\tpopperOptions: {\r\n\t\t\t\tonCreate: () => {\r\n\t\t\t\t\tthis.handleClose();\r\n\t\t\t\t},\r\n\t\t\t\tmodifiers: {\r\n\t\t\t\t\tflip: {\r\n\t\t\t\t\t\tbehavior: ['right', 'bottom', 'top'],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tpreventOverflow: {\r\n\t\t\t\t\t\tboundariesElement: container,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\thandleClose() {\r\n\t\tconst closeBtn = this.tooltip.parentElement.querySelector('.tooltip-close');\r\n\r\n\t\tthis.dom.body.querySelector('.tooltip').focus();\r\n\r\n\t\tthis.dom.body.querySelector('.tooltip').addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\r\n\t\tcloseBtn.addEventListener('click', () => {\r\n\t\t\tthis.tooltip.click();\r\n\t\t\tthis.tooltip.focus();\r\n\t\t\tthis.tooltip.blur();\r\n\t\t});\r\n\r\n\t\tcloseBtn.addEventListener('keyup', (e) => {\r\n\t\t\tif (e.keyCode === 32 || e.keyCode === 13) {\r\n\t\t\t\tthis.tooltip.click();\r\n\t\t\t\tthis.tooltip.focus();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcloseBtn.addEventListener('keydown', (e) => {\r\n\t\t\tif (document.activeElement === closeBtn && e.keyCode === 9) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n"],"sourceRoot":""}