{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/src/js/product-advisor.js","webpack:///./assets/src/js/modules/lazyload.js","webpack:///./assets/src/js/modules/tooltips.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","Date","now","advisor","initializeSlick","$","each","$this","this","slidesToShow","find","length","isSlickInitialized","slick","arrows","centerMode","draggable","infinite","mobileFirst","responsive","breakpoint","settings","swipe","touchMove","removeClass","setAdvisorHeadingToActiveStepLabel","advisorHeadingDiv","document","querySelector","activeStepBtn","label","getAttribute","textContent","reanchorPage","animate","scrollTop","onWindowResize","window","innerWidth","$tabs","show","$stepWrapper","$recommendationsWrapper","isMobile","stepBtnList","querySelectorAll","map","item","updateStepLabels","gotoStep","num","currentStep","attr","addClass","removeAttr","formatOptionHtml","option","update","Math","round","$resultWrapperDiv","append","nonMatchesHtml","totalScore","parseInt","data","score","matchDetails","noMatchDetails","isHidden","percentageMatch","percentageMatchDisplay","values","materialMatch","text","sort","isHighest","median","len","id","empty","matchCt","children","noMatchCt","matchCtDisplay","noMatchCtDisplay","updateDOM","attachTooltipEvents","addNewTooltipsToButtonGroup","btns","hasClass","outerHTML","detach","a","b","Priority","sortPriority","sortAbc","prod","match","numSteps","init","options","render","on","parent","index","toggleClass","siblings","activeElement","blur","urlOpt","replace","results","RegExp","exec","location","search","decodeURIComponent","getParameterByName","closest","getCurrentStep","addEventListener","request","XMLHttpRequest","open","onload","status","JSON","parse","responseText","send","lazyLoadHandler","lazyloadThrottleTimeout","images","clearTimeout","setTimeout","pageYOffset","Array","forEach","img","offsetTop","innerHeight","dataset","src","parentNode","classList","toString","indexOf","remove","add","removeEventListener","imageObserver","IntersectionObserver","entries","entry","isIntersecting","image","target","srcset","unobserve","rootMargin","threshold","observe","setTooltipPosition","btn","tooltip","x","offsetLeft","offsetWidth","caret","style","right","abs","removeAttribute","y","offsetHeight","left","top","hideTooltip","getElementById","hideOpenTooltips","tooltipBtns","collectedEvents","selectEventHandler","active","type","contains","toggleTooltip","showTooltip","manageTooltipEvents","event","push","addTooltipEventHandlers","addNewTooltipToButton","addTooltipsOnPageLoad"],"mappings":"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","file":"product-advisor.min.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 = 0);\n","import LazyLoad from './modules/lazyload';\nimport { addNewTooltipsToButtonGroup } from './modules/tooltips';\n\nvar Advisor = function Advisor() {\n var data = [];\n var matchCutoff = 50; // must be at least a 50% match to be returned\n var mobileBreakpoint = 768;\n var cls_selected = 'selected';\n var cls_active = 'is-active';\n var cls_advisorStepHeading = 'advisor-active-step-heading';\n var cls_hidden = 'hidden';\n var cls_option = 'advisor-step-slide';\n var cls_tab = 'filter-tabs-tab';\n var cls_step = 'advisor-step';\n var cls_stepBtn = 'step-btn';\n var cls_stepWrapper = 'advisor-step-wrapper';\n var cls_stepNav = 'advisor-step-nav';\n var cls_stepNavPrev = 'advisor-step-nav-prev';\n var cls_stepNavNext = 'advisor-step-nav-next';\n var attr_id = 'data-paId';\n var $resultWrapperDiv = $('.result-wrapper');\n var currentStep = 1;\n var noMatchDefault = '';\n var numSteps = $('.advisor-step-wrapper').length;\n var nonMatchesHtml = '';\n // var $advisorContainerDiv = $('.product-advisor-container');\n var $stepWrapper = $('.step-wrapper');\n var $recommendationsWrapper = $('.also-consider-content-wrapper');\n var $tabs = $('.filter-tabs');\n var isSlickInitialized = false;\n\n this.init = function (options) {\n // Set data source\n data = options.data;\n update();\n reanchorPage();\n }\n\n this.render = function() {\n $(`.${cls_tab} .step-btn`).on('click', function() {\n var stepNum = $(this).parent().index();\n gotoStep(stepNum);\n setAdvisorHeadingToActiveStepLabel();\n initializeSlick();\n });\n // Add event handlers to step options\n $(`.${cls_option}`).on('click', function() {\n var $this = $(this); \n $this.toggleClass(cls_selected);\n // Deselect every other sibling, except if on step 5\n if (currentStep !== numSteps) {\n $this.siblings().removeClass(cls_selected);\n }\n // Update results\n update();\n reanchorPage();\n // If option is no longer selected, remove focus\n if (!$this.hasClass(cls_selected)) {\n document.activeElement.blur();\n }\n });\n // Advisor step nav (smaller screens)\n $(`.${cls_stepNav}`).on('click', function(event) {\n var $this = $(this);\n if ($this.hasClass(cls_stepNavPrev)) {\n gotoStep(currentStep - 2);\n } else if ($this.hasClass(cls_stepNavNext)) {\n gotoStep(currentStep);\n }\n initializeSlick();\n });\n // Check params for option\n var urlOpt = getParameterByName('option');\n if (urlOpt !== '') {\n var option = $('.' + cls_option + '[' + attr_id + '=\"' + urlOpt + '\"]');\n currentStep = getCurrentStep(option) + 1;\n if (currentStep >= numSteps) {\n currentStep = 1;\n }\n option.addClass(cls_selected);\n }\n // Inits\n // Go to the next step\n gotoStep(currentStep - 1);\n setAdvisorHeadingToActiveStepLabel();\n window.addEventListener('resize', onWindowResize);\n onWindowResize();\n initializeSlick();\n };\n\n function initializeSlick() {\n $(`.${cls_step}`).each(function() {\n var $this = $(this);\n var slidesToShow = $this.find(`.${cls_option}`).length;\n if (isSlickInitialized) {\n $this.slick('setPosition');\n } else {\n $this.slick({\n arrows: true,\n centerMode: false,\n draggable: false,\n infinite: false,\n mobileFirst: true,\n slidesToShow: 2,\n responsive: [\n {\n breakpoint: 1024,\n settings: {\n slidesToShow,\n }\n },\n {\n breakpoint: 768,\n settings: {\n slidesToShow,\n }\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 4,\n }\n },\n {\n breakpoint: 480,\n settings: {\n slidesToShow: 3,\n }\n }\n ],\n swipe: false,\n touchMove: false,\n });\n }\n $this.removeClass(cls_hidden);\n });\n isSlickInitialized = true;\n }\n\n function setAdvisorHeadingToActiveStepLabel() {\n var advisorHeadingDiv = document.querySelector(`.${cls_advisorStepHeading}`);\n var activeStepBtn = document.querySelector(`.${cls_tab}.${cls_active} .${cls_stepBtn}`);\n if (activeStepBtn) {\n var label = activeStepBtn.getAttribute('aria-label');\n advisorHeadingDiv.textContent = label;\n }\n }\n\n function reanchorPage() {\n $('html, body').animate({\n scrollTop: 0,\n }, 0);\n }\n\n function onWindowResize() {\n if (window.innerWidth >= mobileBreakpoint) {\n // Assume desktop, show everything\n $tabs.show();\n $stepWrapper.show();\n $recommendationsWrapper.show();\n }\n // Set steps top position\n /* var header = document.querySelector('header');\n if (header) {\n var offsetHeight = header.offsetHeight;\n $advisorContainerDiv.css({'top': `${offsetHeight}px`});\n } */\n updateStepLabels();\n }\n\n function updateStepLabels() {\n var isMobile = window.innerWidth < mobileBreakpoint;\n var stepBtnList = document.querySelectorAll('.step-btn');\n [].map.call(stepBtnList, function(item) {\n if (isMobile) {\n item.textContent = item.getAttribute('aria-label');\n } else {\n item.textContent = item.getAttribute('data-shortlabel');\n }\n });\n }\n \n function gotoStep(num) {\n currentStep = num + 1;\n setActiveTab();\n setActivePanel();\n }\n\n function getParameterByName(name) {\n name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n var regex = new RegExp('[\\\\?&]' + name + '=([^]*)'),\n results = regex.exec(location.search);\n return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n }\n\n function getCurrentStep(option) {\n return option.closest('.advisor-step-wrapper').index() + 1;\n }\n\n function setActivePanel() {\n $('.' + cls_stepWrapper).attr('hidden', true);\n $('.' + cls_stepWrapper + ':eq(' + (currentStep - 1) + ')').removeAttr('hidden');\n }\n\n function setActiveTab() {\n $('.' + cls_tab + '.' + cls_active).removeClass(cls_active);\n $('.' + cls_tab + '.' + cls_active + ' .step-btn').attr('aria-selected', false);\n $('.' + cls_tab + ':eq(' + (currentStep - 1) + ')').addClass(cls_active);\n $('.' + cls_tab + ':eq(' + (currentStep - 1) + ') .step-btn').attr('aria-selected', true);\n }\n\n function formatOptionHtml(option) {\n return '
' + option + '
'\n }\n\n function update() {\n // Reset DOM\n reset();\n var totalScore = 0;\n // What is the total score for each selected option\n $('.' + cls_option + '.' + cls_selected).each(function() {\n totalScore += parseInt($(this).attr('data-paMaxVal'));\n });\n var p, s;\n for (var i = 0; i < data.length; i++) {\n p = data[i];\n p.score = 0;\n p.matchDetails = '';\n p.noMatchDetails = noMatchDefault;\n p.totalScore = totalScore;\n // If nothing is selected, return all\n if ($('.' + cls_option + '.' + cls_selected).length === 0) {\n p.isHidden = false;\n p.percentageMatch = 1;\n p.percentageMatchDisplay = 'N/A';\n } else {\n // Get all selected options\n $('.' + cls_option + '.' + cls_selected).each(function() {\n p.score += p.values[$(this).attr(attr_id)];\n // If we're checking material, then need to be exclusive\n p.isHidden = !materialMatch(p);\n // Wrap option w/ html formatting \n s = formatOptionHtml($(this).find('.heading-icon').text());\n if (p.values[$(this).attr(attr_id)] === 0) {\n p.noMatchDetails += s;\n } else {\n p.matchDetails += s;\n }\n });\n // Clear out noMatchDetails if no noMatches exist\n if (p.noMatchDetails === noMatchDefault) {\n p.noMatchDetails = '';\n }\n p.percentageMatch = Math.round((p.score / totalScore) * 10000)/100;\n p.percentageMatchDisplay = String(Math.round((p.score / totalScore) * 10000)/100) + '%';\n\n if (p.score === 0) {\n p.isHidden = true;\n }\n }\n }\n // Multi-dimension sort, by score and isHidden\n data.sort(sort);\n // Below 50% match, cut it off\n var isHighest = -1,\n median = matchCutoff;\n for (i = 0; i < data.length; i++) {\n p = data[i];\n if (!p.isHidden && p.percentageMatch > isHighest) {\n isHighest = p.percentageMatch;\n if (isHighest < median) {\n median = isHighest;\n }\n }\n // console.log('median: ' + median + ' best match %: ' + isHighest + '%');\n if (p.percentageMatch < median) {\n p.isHidden = true;\n }\n }\n\n // Update DOM\n var logStr = '-------\\nMatches\\n-------\\n';\n var len = 0,\n item;\n for (i = 0; i < data.length; i++) {\n p = data[i];\n item = $('.matched-result[data-product=\"' + p.id + '\"]');\n if (!p.isHidden) {\n logStr += p.name + ': ' + p.percentageMatch + '%\\n';\n item.removeClass(cls_hidden);\n // Add match/no-match to tooltips\n item.find('.match .tooltip-inner').empty().append(p.matchDetails);\n item.find('.no-match .tooltip-inner').empty().append(p.noMatchDetails);\n len++;\n } else {\n item.addClass(cls_hidden);\n }\n // Add match/no-match count to tooltip buttons\n var matchCt = item.find('.match .tooltip-inner').children('p').length;\n var noMatchCt = item.find('.no-match .tooltip-inner').children('p').length;\n var matchCtDisplay = '0';\n var noMatchCtDisplay = '0';\n if (matchCt > 0) {\n matchCtDisplay = '+' + matchCt;\n item.find('.card-features .match button').removeAttr('disabled');\n } else {\n item.find('.card-features .match button').attr('disabled', 'disabled');\n }\n if (noMatchCt > 0) {\n noMatchCtDisplay = '+' + noMatchCt;\n item.find('.card-features .no-match button').removeAttr('disabled');\n } else {\n item.find('.card-features .no-match button').attr('disabled', 'disabled');\n }\n item.find('.card-features .match button var').text(matchCtDisplay);\n item.find('.card-features .no-match button var').text(noMatchCtDisplay);\n }\n // If there's no matches\n if (len === 0) {\n logStr += 'No matches.\\n'; \n }\n updateDOM();\n LazyLoad();\n // console.log(logStr);\n }\n\n function attachTooltipEvents(item) {\n addNewTooltipsToButtonGroup({\n btns: [\n item.querySelector('.match button'),\n item.querySelector('.no-match button'),\n ],\n });\n }\n\n function updateDOM() {\n // Resort based on what's not hidden, remove the hiddens\n var p, item;\n for (var i = 0; i < data.length; i++) {\n p = data[i];\n item = $('.matched-result[data-product=\"' + p.id + '\"]');\n if (item.hasClass(cls_hidden)) {\n nonMatchesHtml += item[0].outerHTML;\n item.detach();\n } else {\n $resultWrapperDiv.append(item);\n attachTooltipEvents(item[0]);\n }\n }\n // If there are no results in \"Also consider...\" then hide that div\n // Also vice versa\n if ($('#alsoConsiderContent .matched-result').length === 0) {\n $('#alsoConsiderContent').addClass(cls_hidden);\n } else {\n $('#alsoConsiderContent').removeClass(cls_hidden);\n } \n }\n\n function reset() {\n // Readd non-matches to DOM\n $resultWrapperDiv.append(nonMatchesHtml);\n // Reset nonMatchesHtml\n nonMatchesHtml = '';\n }\n\n function sort(a,b) {\n if (a.percentageMatch < b.percentageMatch)\n return 1;\n if (a.percentageMatch > b.percentageMatch)\n return -1;\n if (a.percentageMatch === b.percentageMatch)\n // Should look at priority here\n if (a.values.Priority !== 0 || b.values.Priority !== 0) {\n return sortPriority(a,b);\n } else {\n return sortAbc(a,b);\n }\n }\n\n function sortAbc(a,b) {\n if (a.name < b.name)\n return -1;\n if (a.name > b.name)\n return 1;\n return 0;\n }\n\n function sortPriority(a,b) {\n if (a.values.Priority < b.values.Priority)\n return 1;\n if (a.values.Priority > b.values.Priority)\n return -1;\n return 0;\n }\n\n function materialMatch(prod) {\n // if there are none selected, do not use as criteria and return all\n if ($('.' + cls_step + ':eq(2) .' + cls_selected).length === 0) {\n return true;\n }\n // Otherwise check\n var match = false;\n $('.' + cls_step +':eq(2) .' + cls_selected).each(function() {\n if (prod.values[$(this).attr(attr_id)] === 1) {\n match = true;\n }\n });\n // See if match, return true/false\n return match;\n }\n return this;\n}\n// console.log('product-advisor.js, load');\nvar a = Date.now();\nvar advisor = new Advisor();\nadvisor.render();\nvar request = new XMLHttpRequest();\nrequest.open('GET', 'GetProductAdvisorData', true);\nrequest.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n var data = JSON.parse(request.responseText);\n advisor.init({\n data,\n });\n var b = Date.now();\n // console.log('product-advisor.js, init (' + ((b - a)/1000) + 's)');\n }\n};\nrequest.send();\n","const lazyLoadHandler = () => {\n let lazyloadThrottleTimeout;\n const images = document.querySelectorAll('.lazy');\n\n if (lazyloadThrottleTimeout) {\n clearTimeout(lazyloadThrottleTimeout);\n }\n\n lazyloadThrottleTimeout = setTimeout(() => {\n const scrollTop = window.pageYOffset;\n Array.prototype.forEach.call(images, (img) => {\n if (img.offsetTop < (window.innerHeight + scrollTop)) {\n if (img.dataset.src) {\n img.src = img.dataset.src;\n } else {\n const classNames = img.parentNode.classList;\n if (classNames.toString().indexOf('object-fit') === -1) {\n img.src = img.getAttribute('data-src-ie11');\n }\n }\n img.classList.remove('lazy');\n img.classList.add('image-loaded');\n }\n });\n\n if (images.length === 0) {\n document.removeEventListener('scroll', lazyLoadHandler);\n window.removeEventListener('resize', lazyLoadHandler);\n window.removeEventListener('orientationChange', lazyLoadHandler);\n }\n }, 20);\n};\n\nconst lazyload = () => {\n if ('IntersectionObserver' in window) {\n const images = document.querySelectorAll('.lazy');\n\n const options = {\n rootMargin: '100px',\n threshold: [0],\n };\n\n const imageObserver = new IntersectionObserver((entries) => {\n Array.prototype.forEach.call(entries, (entry) => {\n if (entry.isIntersecting) {\n const image = entry.target;\n let srcset = image.dataset.src;\n if (!srcset) {\n srcset = image.getAttribute('data-srcset');\n }\n if (srcset !== null) {\n image.srcset = srcset;\n image.classList.remove('lazy');\n image.classList.add('image-loaded');\n imageObserver.unobserve(image);\n }\n }\n });\n }, options);\n\n images.forEach((image) => {\n imageObserver.observe(image);\n });\n } else {\n lazyLoadHandler();\n document.addEventListener('scroll', lazyLoadHandler);\n window.addEventListener('resize', lazyLoadHandler);\n window.addEventListener('orientationChange', lazyLoadHandler);\n }\n};\n\nexport default lazyload;\n","/* eslint-disable no-console */\nconst setTooltipPosition = (btn, tooltip) => {\n let x = (btn.offsetLeft + btn.offsetWidth) - tooltip.offsetWidth;\n const caret = tooltip.querySelector('.tooltip-caret');\n if (x < 0) {\n // Offset caret\n caret.style.right = `${Math.abs(x) + 5}px`;\n // Reset x to 0\n x = 0;\n } else {\n caret.removeAttribute('style');\n }\n const y = btn.offsetTop - (tooltip.offsetHeight + 12);\n tooltip.style.left = `${x}px`;\n tooltip.style.top = `${y}px`;\n};\n\nconst hideTooltip = (target) => {\n const btn = target.closest('[data-tooltip-id]');\n if (btn === null) {\n return;\n }\n if (btn.getAttribute('disabled') !== null) {\n return;\n }\n const id = btn.getAttribute('data-tooltip-id');\n const tooltip = document.getElementById(id);\n btn.classList.remove('is-active');\n tooltip.classList.remove('show');\n};\n\nconst hideOpenTooltips = () => {\n const tooltipBtns = document.querySelectorAll('[data-tooltip-id].is-active');\n for (let i = 0; i < tooltipBtns.length; i++) { /* eslint-disable-line no-plusplus */\n hideTooltip(tooltipBtns[i]);\n }\n};\n\nconst showTooltip = (target) => {\n const btn = target.closest('[data-tooltip-id]');\n if (btn === null) {\n return;\n }\n if (btn.getAttribute('disabled') !== null) {\n return;\n }\n const id = btn.getAttribute('data-tooltip-id');\n const tooltip = document.getElementById(id);\n hideOpenTooltips();\n btn.classList.add('is-active');\n tooltip.classList.add('show');\n setTooltipPosition(btn, tooltip);\n};\n\nconst toggleTooltip = (target) => {\n const btn = target.closest('[data-tooltip-id]');\n if (btn === null) {\n return;\n }\n if (btn.getAttribute('disabled') !== null) {\n return;\n }\n const id = btn.getAttribute('data-tooltip-id');\n const tooltip = document.getElementById(id);\n if (tooltip.classList.contains('show')) {\n btn.classList.remove('is-active');\n tooltip.classList.remove('show');\n } else {\n hideOpenTooltips();\n btn.classList.add('is-active');\n tooltip.classList.add('show');\n setTooltipPosition(btn, tooltip);\n }\n};\n\nlet collectedEvents = [];\n\nconst selectEventHandler = () => {\n setTimeout(() => {\n // If click present, route to click event\n let active = collectedEvents.find(item => item.type === 'click');\n if (active) {\n toggleTooltip(active.target);\n } else {\n // Otherwise, use last event in array\n active = collectedEvents[collectedEvents.length - 1];\n if (active.type === 'mouseover' || active.type === 'focus') {\n showTooltip(active.target);\n } else if (active.type === 'mouseout' || active.type === 'blur') {\n hideTooltip(active.target);\n }\n }\n collectedEvents = [];\n }, 250);\n};\n\nconst manageTooltipEvents = (event) => {\n const { target, type } = event;\n // Ignore if button is disabled\n if (target.getAttribute('disabled')) {\n return;\n }\n if (collectedEvents.length === 0) {\n selectEventHandler();\n }\n collectedEvents.push({\n target,\n type,\n });\n};\n\nconst addTooltipEventHandlers = (btn) => {\n btn.addEventListener('click', manageTooltipEvents);\n btn.addEventListener('mouseover', manageTooltipEvents);\n btn.addEventListener('mouseout', manageTooltipEvents);\n btn.addEventListener('focus', manageTooltipEvents);\n btn.addEventListener('blur', manageTooltipEvents);\n};\n\nconst addTooltipsOnPageLoad = () => {\n const tooltipBtns = document.querySelectorAll('[data-tooltip-id]');\n if (tooltipBtns.length === 0) {\n return;\n }\n for (let i = 0; i < tooltipBtns.length; i++) { /* eslint-disable-line no-plusplus */\n addTooltipEventHandlers(tooltipBtns[i]);\n }\n};\n\nconst addNewTooltipsToButtonGroup = (options) => {\n const { btns } = options;\n if (btns.length === 0) {\n return;\n }\n for (let i = 0; i < btns.length; i++) { /* eslint-disable-line no-plusplus */\n addTooltipEventHandlers(btns[i]);\n }\n};\n\nconst addNewTooltipToButton = (options) => {\n const { btn } = options;\n addTooltipEventHandlers(btn);\n};\n\nexport {\n addNewTooltipToButton,\n addNewTooltipsToButtonGroup,\n addTooltipsOnPageLoad,\n};\n/* eslint-enable no-console */\n"],"sourceRoot":""}