{"version":3,"sources":["webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./assets/javascripts/modules/utils/ObserverIntersection.js","webpack:///./assets/javascripts/modules/components/PdpFixedBarComponent.js","webpack:///./assets/javascripts/modules/components/ChatComponent.js","webpack:///./assets/javascripts/modules/utils/ChatUtils.js"],"names":["__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","factory","undefined","call","exports","__webpack_require__","module","OldCookies","window","Cookies","api","noConflict","extend","i","result","arguments","length","attributes","key","init","converter","value","document","path","defaults","expires","Date","setMilliseconds","getMilliseconds","toUTCString","JSON","stringify","test","e","write","encodeURIComponent","String","replace","decodeURIComponent","escape","stringifiedAttributes","attributeName","cookie","cookies","split","rdecode","parts","slice","join","this","json","charAt","name","read","parse","set","get","getJSON","apply","remove","withConverter","Observer","selector","margin","conf","cb","_classCallCheck","observablesSelector","observables","querySelectorAll","IntersectionObserver","console","debug","rootMargin","Math","floor","outerHeight","observer","root","threshold","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","Symbol","iterator","next","done","observable","observe","err","return","warn","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","PdpFixedBarComponent","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","selecetedSizeClass","showFormClass","fixedBarNotifyClass","fixedBarChatClass","showSizesClass","showBarClass","pdpLiveChatClass","isCtaOnView","Component","fixedBar","navBar","mainSizeRow","toBagBtn","toBagBtnOnFixedBar","btnNotifyMe","btnNotifyMeOnFixedBar","sizesIntoFixedBar","unavailable","formNotifyMe","blockNotifyMe","selectedBtnSize","outOfStock","hideStickyBarBlock","closeSizesBtn","liveChat","ctaBlock","closeZoomCta","liveChatSalesforce","barEl","querySelector","SELECTORS","notifyClass","classList","add","bool","formBlock","showClass","click","_this2","target","entries","entry","intersectionRatio","showFixedBar","observeHideStickyBar","obj","unobserve","_this3","isMobile","mainNav","scrollOpt","top","offsetTop","offsetHeight","left","behavior","scrollTo","_this4","sizes","closeLayerBtn","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","addEventListener","showSizesOnBar","liveChatEl","eventName","evt","createEvent","initEvent","dispatchEvent","chatClass","$","_this5","mainNotifyCta","stickyCta","handlerDesk","scrollToForm","removeEventListener","_this6","sizeNotSelected","message","dataset","errorMessage","matchMedia","matches","log","minMax","viewport","isViewport","_this7","mq","ctaObserver","observeCta","connectObserver","addListener","initFixedBar","ctaNotifyMeHandler","ctaToBagHandler","sizesIntoFixedBarHandler","setFixedBarNotifyMe","myName","constructor","ChatComponent","chatBtns","chatContainer","hide","liveChatRaiseClass","ctx","forEach","btn","CLASSES","show","liveChatButton","$on","ChatUtils","chatButton","preventDefault","stopPropagation","event","raiseChatButton","bindEvents","script","getValue","moduleLoader","loadExternalScript","then","subjects","chatLabelSubject","chatLabelSubjectOptionOD","chatLabelSubjectOptionRR","chatLabelSubjectOptionFi","chatLabelSubjectOptionCS","chatLabelSubjectOptionPAv","chatLabelSubjectOptionSt","chatLabelSubjectOptionTA","addToObject","options","selectors","chatLabelOnline","chatLabelSubjectOptionPP","ctaClasses","ctaClassesDefault","setEnvironment","updatePath","initializeChat","runsNewChat","setChatButtonPosition","resize","scroll","on","setTimeout","action","newsletterBar","hasClass","newsletterBarHeight","chatOffset","width","css","parseInt","TrackingComponent","defaultSelectors","allSelectors","assign","hasOwnProperty","setValue","cookieKey","hideCookieKey","labelName","noValue","toRet","tagName","toLowerCase","property","index","temp","prop","ps","gslbBaseURL","embedded_svc","settings","displayHelpButton","language","liveChatLanguage","directToButtonRouting","prechatFormData","fallbackRouting","personalStylistSnapConfig","buttonIdSnapIn","country","website","toUpperCase","prechatFields","Primary_Language__c","Country__c","website_iso_country_code__c","LiveChat_Brand__c","chatBrand","LiveChat_Path1__c","location","href","readCookie","COOKIE_CONSTANTS","PATH_1","LiveChat_Path2__c","PATH_2","LiveChat_Path3__c","PATH_3","LiveChat_Path4__c","PATH_4","LiveChat_Path5__c","PATH_5","FirstName","customerFirstName","LastName","customerLastName","Email","customerEmail","LiveChat_Subject__c","prepopulatedPrechatFields","defaultAssistiveText","defaultMinimizedText","disabledMinimizedText","chatLabelOffline","enabledFeatures","entryFeature","addEventHandler","data","isAgentAvailable","actions","deleteChat","personalStylistBanner","contains","chatDock","pdpFixedBar","urlEnvironmentSF","urlEnvironmentSnapIn","chatOrgId","buttonNameSnapIn","baseLiveAgentContentURL","deploymentId","deploymentIdSnapIn","buttonId","baseLiveAgentURL","eswLiveAgentDevName","isOfflineSupportEnabled","initESW","pathName","pathname","shiftPathCookies","writeCookie","MutationObserver","records","record","list","addedNodes","_typeof","nodeType","getAttribute","classes","includes","startButton","bindPSChat","prechatObserver","applyArrowDownStyles","chatEnding","sizeNode","childList","subtree","div","manipulatePrechat","errorPrechat","fieldList","chatLabelStart","chatLabelStartDiv","createElement","innerHTML","insertBefore","firstChild","overrideLabels","hidePrechatFields","firstName","lastName","setAttribute","createSubjectSelect","createPrivacyCheckbox","createStartButton","applyPreChatStyle","chatLabelName","closest","chatLabelLastname","chatLabelEmail","hidingFields","#LiveChat_Path1__c","#LiveChat_Path2__c","#LiveChat_Path3__c","#LiveChat_Path4__c","#LiveChat_Path5__c","#LiveChat_Brand__c","#website_iso_country_code__c","#Country__c","#Primary_Language__c","#Type","#LiveChat_Subject__c","preselSubject","chatPreselectedSubject","subjectDiv","selectDiv","selectDivLabel","append","subjectSelect","subjectClassesDefault","subjectClasses","classArr","Array","isArray","cls","Option","targetSelect","checkboxDiv","checkbox","label","chatLabelPrivacy","fakeSubmit","chatLabelCTA","buttonWrapper","bindStartChat","startChat","setIntervalBtn","setInterval","style","clearInterval","startChatLink","fakeBtn","privacyInput","checked","checkForm","el","previousElementSibling","pass","fields","#FirstName","type","#LastName","fieldName","input","push","cleanFieldError","setFieldError","emailInput","subjectInput","inputBox","chatLabelLengthError","errorUl","errorLi","appendChild","errorBox","element","applyElStyle","shadowRoot","element2","styleID","styleSourceDiv","innerText","styleDiv","trim","shadowDomEl","endChatContainer","endChatMessage","endChatText","endChatContent","cloneNode","downloadBtn","saveBtn","deleteChatBtn","setupPersonalStylistDelayedPopup","personalStylistPopUpTriggerTime","closeBtn","personalStylistCloseBtn","triggerIn","personalStylistStartChat","customerLoggedIn","chatLabelSubjectOptionPS","personalStylistStartWhatsApp","template","chatLabelSubjectOptionPay","liveChatShowFidelity","SIZE","PATH","cookieName","start","indexOf","end","unescape","substring","cookieValue","__webpack_exports__"],"mappings":"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","file":"components-ChatComponent.chunks.js","sourcesContent":["/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","export default class Observer {\n  constructor(selector, margin, conf, cb) {\n    let observablesSelector = selector || '.observe';\n    const observables = document.querySelectorAll(observablesSelector);\n\n    if (!window.IntersectionObserver) {\n      console.warn('IntersectionObserver not supported');\n      for (let el of observables) {\n        cb(el);\n      }\n    } else {\n      console.debug('IntersectionObserver supported');\n      const rootMargin = margin || Math.floor(window.outerHeight / 3);\n      const observer = new IntersectionObserver(cb, conf || {\n        root: null,\n        rootMargin: `${rootMargin}px 0px`,\n        threshold: 0.0\n      });\n\n      for (let observable of observables) {\n        observer.observe(observable);\n      }\n    }\n  }\n}","import Component from '../abstracts/Component';\nimport Observer from \"../utils/ObserverIntersection\";\n\nexport default class PdpFixedBarComponent extends Component {\n\n    get SELECTORS() {\n        return {\n            fixedBar: '#jsFixedBar',\n            navBar:'#main-nav',\n            mainSizeRow: '.c-sizes-row',\n            toBagBtn: '.jsToBagBtn',\n            toBagBtnOnFixedBar: '.jsStickyToBag',\n            btnNotifyMe: '.jsNotifyMeBtn',\n            btnNotifyMeOnFixedBar : '.jsStickyNotifyMe',\n            sizesIntoFixedBar:'#jsFixedBar .c-s-r__size',\n            unavailable: '[data-unavailable=\"true\"]',\n            formNotifyMe:'#jsNotifyMeForm',\n            blockNotifyMe: '.c-pdp-notifyme',\n            selectedBtnSize : '.selected-size',\n            outOfStock: '[data-out-of-stock=\"true\"]',\n            hideStickyBarBlock: '[data-is-hide-sticky-bar=\"true\"]',\n            closeSizesBtn: '.jsCloseSizesFb',\n            liveChat: '.live-chat[data-on-pdp-hide=\"true\"]',\n            ctaBlock: '.c-pdp__cta-block',\n            closeZoomCta: '#jsCloseZoom',\n            liveChatSalesforce: '.embeddedServiceHelpButton.livechat-button',\n        };\n    }\n    constructor() {\n        super();\n        this.selecetedSizeClass = 'selected-size';\n        this.showFormClass = 'show-form';\n        this.fixedBarNotifyClass = 'notify-bar-mode';\n        this.fixedBarChatClass = 'show-live-chat';\n        this.showSizesClass = 'show-sizes';\n        this.showBarClass = 'show-bar';\n        this.pdpLiveChatClass ='on-pdp';\n        this.isCtaOnView = true;\n    }\n    setFixedBarNotifyMe(){\n        let barEl = document.querySelector(this.SELECTORS.fixedBar);\n        let notifyClass = this.fixedBarNotifyClass;\n        barEl.classList.add(notifyClass);\n    }\n    showForm(bool){\n        let formBlock = document.querySelector(this.SELECTORS.blockNotifyMe);\n        let showClass = this.showFormClass;\n        if(!bool){\n            formBlock.classList.remove(showClass);\n        }else{\n            formBlock.classList.add(showClass);\n        }\n    }\n    triggerMainToBag(){\n        const ctaEl = document.querySelectorAll(this.SELECTORS.toBagBtn);\n        ctaEl.click();\n    }\n    sizeNotSelected(){\n        let sizes = document.querySelectorAll(this.SELECTORS.selectedBtnSize);\n        if(sizes.length <= 0){\n            return true;\n        }else{\n            return false;\n        }\n    }\n    observeCta() {\n      const target = document.querySelector(this.SELECTORS.ctaBlock);\n      let handler = (entries)=>{\n        for (let entry of entries) {\n          if(entry.intersectionRatio > 0) {\n            this.showFixedBar(false);\n            this.isCtaOnView = true;\n          } else if (entry.intersectionRatio === 0) {\n            this.isCtaOnView = false;\n            this.showFixedBar(true);\n            this.observeHideStickyBar();\n          }\n        }\n      }\n      const observer = new IntersectionObserver(handler);\n      //return observer obj with target to be listened by media query & switched by connectObserver()\n      return {\n        observer:observer,\n        target:target,\n      }\n    }\n    connectObserver(obj, bool = true){\n      let observer = obj.observer;\n      let target = obj.target;\n      if (target == null) return;\n      if (bool) {\n        observer.observe(target);\n      } else {\n        observer.unobserve(target);\n      }\n    }\n    observeHideStickyBar() {\n      new Observer(this.SELECTORS.hideStickyBarBlock, 10, null, (entries, observer)=>{\n        for (let entry of entries) {\n          if (entry.intersectionRatio > 0) {\n            this.showFixedBar(false);\n          } else if (entry.intersectionRatio === 0) {\n            if (this.isCtaOnView == false || this.isMobile()) {\n              this.showFixedBar(true);\n            }\n          }\n        }\n      });\n    }\n    scrollToForm(){\n        const mainNav = document.querySelector(this.SELECTORS.navBar);\n        const sizesRow = document.querySelector(this.SELECTORS.mainSizeRow);\n        const fromTop = sizesRow.offsetTop -  mainNav.offsetHeight;\n        const scrollOpt = {\n            top:fromTop,\n            left:0,\n            behavior: 'smooth'\n        }\n        window.scrollTo(scrollOpt);\n    }\n    sizesIntoFixedBarHandler(){\n        const sizes = document.querySelectorAll(this.SELECTORS.sizesIntoFixedBar);\n        let closeLayerBtn = document.querySelector(this.SELECTORS.closeSizesBtn);\n\n        for (let size of sizes){\n            size.addEventListener('click',()=>{\n                this.showSizesOnBar(false);\n            })\n        }\n        closeLayerBtn.addEventListener('click',()=>{\n            this.showSizesOnBar(false);\n        })\n    }\n    showSizesOnBar(bool){\n        const fixedBar = document.querySelector(this.SELECTORS.fixedBar);\n\n        const showSizesClass = this.showSizesClass;\n        if(bool){\n            fixedBar.classList.add(showSizesClass);\n        }else{\n            fixedBar.classList.remove(showSizesClass);\n        }\n    }\n    showFixedBar(bool){\n        const fixedBar = document.querySelector(this.SELECTORS.fixedBar);\n        const showBarClass = this.showBarClass;\n        const pdpLiveChatClass = this.pdpLiveChatClass;\n        const liveChatEl = document.querySelector(this.SELECTORS.liveChat);\n        if (liveChatEl == null) {\n          const liveChatEl = document.querySelector(this.SELECTORS.liveChatSalesforce);\n        }\n        if(bool){\n            fixedBar.classList.add(showBarClass);\n            if (liveChatEl != null) {\n              liveChatEl.classList.add(pdpLiveChatClass);\n            }\n            // event launch\n            var eventName = 'showFixedBar';\n            var evt = document.createEvent(\"Events\");\n            evt.initEvent(eventName, true, true);\n            document.dispatchEvent(evt);\n        }else if(!bool){\n            fixedBar.classList.remove(showBarClass);\n            if (liveChatEl != null) {\n              liveChatEl.classList.remove(pdpLiveChatClass);\n            }\n            // event launch\n            var eventName = 'hideFixedBar';\n            var evt = document.createEvent(\"Events\");\n            evt.initEvent(eventName, true, true);\n            document.dispatchEvent(evt);\n        }\n    }\n    showChatFixedBar(){\n      let barEl = document.querySelector(this.SELECTORS.fixedBar);\n      if(barEl){\n        let chatClass = this.fixedBarChatClass;\n        if($('button.helpButtonEnabled').length > 0){\n          barEl.classList.add(chatClass);\n        } else {\n    \t    barEl.classList.remove(chatClass);\n        }\n      }\n    }\n    ctaNotifyMeHandler(){\n        const mainNotifyCta = document.querySelector(this.SELECTORS.btnNotifyMe);\n        const closeZoomCta = document.querySelector(this.SELECTORS.closeZoomCta);\n        const stickyCta = document.querySelector(this.SELECTORS.btnNotifyMeOnFixedBar);\n        let handlerDesk = ()=>{\n            mainNotifyCta.click();\n            this.scrollToForm();\n            closeZoomCta.click();\n        };\n        let handlerMobile = ()=>{\n            this.showSizesOnBar(true);\n            //if(this.sizeNotSelected()){\n            //    this.showSizesOnBar(true);\n            //}else{\n            //    mainNotifyCta.click();\n            //}\n        }\n        stickyCta.addEventListener('click',handlerDesk);\n        if(this.isMobile()){\n            stickyCta.removeEventListener('click',handlerDesk);\n            stickyCta.addEventListener('click',handlerMobile);\n        }\n    }\n    ctaToBagHandler(){\n        const ctaEl = document.querySelector(this.SELECTORS.toBagBtnOnFixedBar);\n        ctaEl.addEventListener('click',()=>{\n            if(this.sizeNotSelected()){\n                this.showSizesOnBar(true);\n            }\n        });\n    }\n    setSizeErrorMessage(message){\n        let mainSizeRow = document.querySelector(this.SELECTORS.mainSizeRow);\n        mainSizeRow.dataset.errorMessage = message;\n    }\n    isMobile() {\n      let isMobile = false;\n      try {\n        let mq = window.matchMedia('(max-width: 767px)');\n        isMobile = mq.matches;\n      } catch(e) {\n        this.log(\"window.matchMedia function not available\");\n      }\n      return isMobile;\n    }\n    isViewport(minMax,viewport){\n        let mq = window.matchMedia(`(${minMax}-width:${viewport}px)`);\n        let isViewport = mq.matches;\n        return isViewport;\n    }\n    initFixedBar() {\n      let mq = window.matchMedia('(max-width:767px)');\n      let ctaObserver = this.observeCta();\n\n      if (mq.matches) {\n        window.scrollTo({top: 0, behavior: 'smooth'});\n        this.showFixedBar(true);\n        this.observeHideStickyBar();\n        this.connectObserver(ctaObserver, false);\n      } else {\n        this.connectObserver(ctaObserver);\n      }\n\n      mq.addListener((e)=>{\n        if (e.matches) {\n          this.showFixedBar(true);\n          this.observeHideStickyBar();\n          this.connectObserver(ctaObserver, false);\n        } else {\n          this.connectObserver(ctaObserver);\n        }\n      });\n    }\n    render() {\n        if (document.querySelector(this.SELECTORS.fixedBar)) {\n            this.initFixedBar();\n            this.ctaNotifyMeHandler();\n            this.ctaToBagHandler();\n            this.sizesIntoFixedBarHandler();\n        }\n        if(document.querySelector(this.SELECTORS.outOfStock)){\n            this.setFixedBarNotifyMe();\n        }\n        let myName = this.constructor.name;\n        console.log(`[${myName}] Rendering..`);\n    }\n}\n","import Component from '../abstracts/Component';\nimport ChatUtils from '../utils/ChatUtils';\nimport PdpFixedBarComponent from '../components/PdpFixedBarComponent';\n\n/**\n Chat component\n */\nexport default class ChatComponent extends Component {\n\n  get SELECTORS() {\n    return {\n      hideStickyBarBlock: '[data-is-hide-sticky-bar=\"true\"]',\n      chatBtns: '.live-chat-personal-stylist-cta , .embeddedServiceHelpButton.livechat-button, .embeddedServiceSidebar.sidebarMinimized.modalContainer',\n      chatContainer: '.modalContainer.embeddedServiceSidebar.layout-docked.sidebarMaximized .dockableContainer'\n    }\n  }\n\n  get CLASSES() {\n    return {\n      hide: 'btn-hidden',\n      liveChatRaiseClass: 'live-chat-raise'\n    }\n  }\n\n  constructor() {\n    super();\n  }\n\n  static manageChatButtonPosition() {\n    // trigger on load\n    ChatComponent.setChatButtonPosition('load');\n    // trigger on resize\n    $(window).resize(function () {\n      ChatComponent.setChatButtonPosition('resize');\n    });\n    // trigger on scroll\n    $(window).scroll(function () {\n      ChatComponent.setChatButtonPosition('scroll');\n    });\n    // trigger on tablet and mobile\n    $('.newsletter-bottom-bar').on('click',function(){\n      setTimeout(function(){\n        ChatComponent.setChatButtonPosition('resize');\n      },500);\n    });\n  }\n\n  static setChatButtonPosition(action) {\n    // vars\n    let chatButton = $('.embeddedServiceHelpButton.livechat-button .helpButton');\n    let newsletterBar = $('.newsletter-bottom-bar ');\n\n    // check scroll\n    if (action === 'scroll' && newsletterBar.hasClass('d-none')) return false;\n    // checks selectors\n    if (chatButton.length === 0 || newsletterBar.length === 0) return false;\n    // going on\n    let newsletterBarHeight = (newsletterBar.hasClass('d-none')) ? 0 : newsletterBar.outerHeight(true);\n    // if newsletter is hidden , return\n    if (action === 'load' && newsletterBarHeight === 0) return false;\n    // try\n    let chatOffset = ($(window).width() > 767) ? 60 : 10;\n    chatButton.css('bottom', parseInt(newsletterBarHeight + chatOffset, 10) + 'px');\n\n    if($(window).width() > 767) {\n      // let personalStylistButton = $(this.SELECTORS.personalStylistButton);\n      // let stylistOffset = 115;\n      // personalStylistButton.css('bottom', parseInt(newsletterBarHeight + stylistOffset, 10) + 'px');\n    }\n  }\n\n  raiseChatButton(bool) {\n    let ctx = this;\n    \n    let chatBtns = document.querySelectorAll(this.SELECTORS.chatBtns);\n    if (chatBtns != null && chatBtns.length > 0 ) {\n      chatBtns.forEach(function(btn){\n        // show or hide\n        if (bool == true ) {\n          btn.classList.add(ctx.CLASSES.liveChatRaiseClass);\n        } else {\n          btn.classList.remove(ctx.CLASSES.liveChatRaiseClass);\n        }\n      });\n    }\n    let chatContainer = document.querySelector(ctx.SELECTORS.chatContainer);\n\n    if (chatContainer != null ) {\n\n      if (bool == true ) {\n        chatContainer.classList.add(ctx.CLASSES.liveChatRaiseClass);\n      } else {\n        chatContainer.classList.remove(ctx.CLASSES.liveChatRaiseClass);\n      }\n    }\n    \n  }\n\n  showChatButton(show) {\n    // global\n    let ctx = this;\n    // btns\n    let chatBtns = document.querySelectorAll(this.SELECTORS.chatBtns);\n    if (chatBtns != null && chatBtns.length > 0 ) {\n      chatBtns.forEach(function(btn){\n        // show or hide\n        if (show == true ) {\n          btn.classList.remove(ctx.CLASSES.hide);\n        } else {\n          btn.classList.add(ctx.CLASSES.hide);\n        }\n      });\n    }\n  }\n\n  bindEvents() {\n    // listen to events\n\n    // contact us button\n    let liveChatButton = document.querySelector('a[data-name=live-chat]');\n    // button online\n    this.$on('chatButtonEnabled', (e) => {\n      if (liveChatButton != null) {\n        liveChatButton.classList.remove('not-available');\n        liveChatButton.classList.add('available');\n        var btn = document.querySelector(ChatUtils.SELECTORS.chatButton);\n        liveChatButton.addEventListener('click', e => {\n          e.preventDefault();\n          e.stopPropagation();\n          if (btn != null) {\n            btn.click();\n          }\n        });\n      }\n    });\n    // button offline\n    this.$on('chatButtonDisabled', (e) => {\n      if (liveChatButton != null) {\n        liveChatButton.classList.add('not-available');\n        liveChatButton.classList.remove('available');\n        liveChatButton.removeEventListener('click',function(){});\n      }\n    });\n    // pdp show buttons\n    var ctx = this;\n    // on show bar i hide the button\n    document.addEventListener('showFixedBar', function (event) {\n      ctx.raiseChatButton(true);\n    }, false);\n    // on hide bar i show the button\n    document.addEventListener('hideFixedBar', function (event) {\n      ctx.raiseChatButton(false);\n    }, false);\n  }\n\n  /////\n  render() {\n    this.log('rendering...');\n    // some events\n    this.bindEvents();\n    // check if new chat is enabled\n    let chatEnabled = (document.querySelector('#chatEnabled') != null) ? document.querySelector('#chatEnabled').value : false;\n    // if is enabled let's launch it\n    if (chatEnabled == 'true') {\n      // script call\n      let script = ChatUtils.getValue('urlEnvironmentSF')+'/embeddedservice/5.0/esw.min.js';\n      // get script and initialize chat\n      this.moduleLoader.loadExternalScript(script).then(() => {\n        this.log('loading...');\n        let subjects = {\n          chatLabelSubject: '',\n          chatLabelSubjectOptionOD: 'Orders and deliveries',\n          chatLabelSubjectOptionRR: 'Refunds and Returns',\n          chatLabelSubjectOptionFi: 'Payment, promotions and Gift Cards',\n          chatLabelSubjectOptionCS: 'Comments and Suggestions',\n          chatLabelSubjectOptionPAv: 'Product information and availability',\n          chatLabelSubjectOptionSt: 'Stores',\n          chatLabelSubjectOptionTA: 'Technical assistance',\n        }\n        // if is present the config then add the PS\n        if (ChatUtils.getValue('personalStylistSnapConfig')) {\n          subjects = ChatUtils.addToObject(subjects,'chatLabelSubjectOptionPS','Personal Stylist',1);\n        }\n        if (ChatUtils.getValue('liveChatShowFidelity') == 'true') {\n          subjects = ChatUtils.addToObject(subjects,'chatLabelSubjectOptionPP','Fidelity Card',4);\n        }\n        let options = {\n          selectors: {\n            chatLabelOnline: '#chatLabelOnlineNew',\n            chatLabelSubjectOptionPP: '#chatLabelSubjectOptionPP',\n          },\n          subjects: subjects,\n          ctaClasses: ['cta','cta-primary'],\n          ctaClassesDefault: 'false'\n        }\n        // setup env\n        ChatUtils.setEnvironment(options);\n        // update cookie path\n        ChatUtils.updatePath();\n        // init the chat\n        ChatUtils.initializeChat();\n        // new chat modifier\n        ChatUtils.runsNewChat();\n      });\n    }\n  }\n}\n","/**\n * This utility class helps to manage the live chat\n */\nimport Cookies from 'js-cookie';\nimport TrackingComponent from '../components/TrackingComponent';\n\nclass ChatUtils {\n\n  constructor() {\n    this.TrackingComponent = new TrackingComponent();\n  }\n\n  // common selectors, overridable\n  get SELECTORS() {\n    return {\n      // configs\n      liveChatLanguage: '#liveChatLanguage', // live chat language\n      urlEnvironmentSF: '#urlEnvironmentSF', // main url\n      urlEnvironmentSnapIn: '#urlEnvironmentSnapIn', // snap in url\n      chatOrgId: '#chatOrgId', // salesforce id of MM\n      buttonNameSnapIn: '#buttonNameSnapIn', // button name\n      buttonIdSnapIn: '#buttonIdSnapIn', // button name\n      baseLiveAgentContentURL: '#baseLiveAgentContentURL', // live agent url\n      deploymentIdSnapIn: '#deploymentIdSnapIn', // deployment id\n      baseLiveAgentURL: '#baseLiveAgentURL', // base live agent url\n      eswLiveAgentDevName: '#eswLiveAgentDevName', // base live agent url\n      chatBrand: '#chatBrand', // brand\n      // labels\n      chatLabelOnline: '#chatLabelOnline', // chat label when online\n      chatLabelOffline: '#chatLabelOffline', // chat label when offline\n      chatLabelStart: '#chatLabelStart', // chat label start\n      chatLabelName: '#chatLabelName', // chat label name\n      chatLabelLastname: '#chatLabelLastname', // chat label name\n      chatLabelEmail: '#chatLabelEmail', // chat label name\n      chatLabelSubject: '#chatLabelSubject', // chat label subject\n      chatLabelPrivacy: '#chatLabelPrivacy', // chat label subject\n      chatLabelSubjectOptionPS: '#chatLabelSubjectOptionPS', // chat label subject\n      chatLabelSubjectOptionOD: '#chatLabelSubjectOptionOD', // chat label subject\n      chatLabelSubjectOptionPay: '#chatLabelSubjectOptionPay', // chat label subject\n      chatLabelSubjectOptionFi: '#chatLabelSubjectOptionFi', // chat label subject\n      chatLabelSubjectOptionCS: '#chatLabelSubjectOptionCS', // chat label subject\n      chatLabelSubjectOptionPAv: '#chatLabelSubjectOptionPAv', // chat label subject\n      chatLabelSubjectOptionSt: '#chatLabelSubjectOptionSt', // chat label subject\n      chatLabelSubjectOptionRR: '#chatLabelSubjectOptionRR', // chat label subject\n      chatLabelSubjectOptionTA: '#chatLabelSubjectOptionTA', // chat label subject\n      chatPreselectedSubject: '#chatPreselectedSubject', // chat preselected subject\n      chatLabelCTA: '#chatLabelCTA', // chat label subject\n      chatLabelLengthError: '#chatLabelLengthError', // chat label subject\n      // elements\n      chatDock: '.modalContainer.embeddedServiceSidebar.layout-docked.sidebarMaximized .dockableContainer',\n      chatButton: '.livechat-button > .helpButton > .uiButton',\n      chatBtns: '.live-chat-personal-stylist-cta , .embeddedServiceHelpButton.livechat-button, .embeddedServiceSidebar.sidebarMinimized.modalContainer',\n      endChatMessage: '.embeddedServiceLiveAgentStateChat .messageArea',\n      endChatContainer: '.embeddedServiceLiveAgentStateChat .endChatContainer',\n      endChatContent: '#thank-you-feedback',\n      liveChatShowFidelity: '#liveChatShowFidelity',\n      // PS ?\n      personalStylistSnapConfig: '#buttonSnapConfig_personal_stylist',\n      personalStylistPopUpTriggerTime: '#personalStylistPopUpTriggerTime',\n      personalStylistBanner: '.live-chat-personal-stylist-cta',\n      personalStylistStartChat: '.live-chat-personal-stylist-cta .start-chat',\n      personalStylistStartWhatsApp: '.live-chat-personal-stylist-cta .start-whatsapp',\n      personalStylistCloseBtn: '.live-chat-personal-stylist-cta .vex-close',\n      customerLoggedIn: '#customerLoggedIn',\n      customerFirstName: '#customerFirstName',\n      customerLastName: '#customerLastName',\n      customerEmail: '#customerEmail',\n      // extra link chat\n      startChatLink: '[data-name=live-chat] a',\n      fixedBar: '#jsFixedBar',\n    }\n  }\n\n  setEnvironment(options = false) {\n    // all default selectors\n    var defaultSelectors = this.SELECTORS;\n    // merge def selectors with override\n    if (typeof options.selectors !== 'undefined') {\n      // var allSelectors = Object.assign(options.selectors,defaultSelectors);\n      var allSelectors = Object.assign(defaultSelectors,options.selectors);\n    } else {\n      // or default assign\n      var allSelectors = defaultSelectors;\n    }\n    // loop the selectors to make them available\n    for (const key in allSelectors) {\n      if (allSelectors.hasOwnProperty(key)) {\n        // console.log(`${key}: ${allSelectors[key]}`);\n        // set value\n        this[key] = this.setValue(key,allSelectors);\n      }\n    }\n    // set the options available\n    if (typeof options !== 'undefined') {\n      this.options = options;\n    }\n    // cookie key\n    if (typeof options.cookieKey === 'undefined') {\n      this.hideCookieKey = 'ps_button_hide';\n      this.options.cookieKey = 'ps_button_hide';\n    } else {\n      this.hideCookieKey = this.options.cookieKey;\n    }\n  }\n\n  /////////////////////////\n  /*  GENERAL FUNCTIONS  */\n  /////////////////////////\n\n  // set value from selectors key\n  setValue(labelName,allSelectors,noValue = null) {\n    var selector = allSelectors[labelName];\n    if (document.querySelector(selector) != null) {\n      var toRet = document.querySelector(selector).value;\n      // but if is not an input i want to return the selector\n      if (typeof toRet == 'undefined' && document.querySelector(selector).tagName.toLowerCase() != 'input') {\n        toRet = document.querySelector(selector);\n      }\n    } else {\n      toRet = noValue;\n    }\n    //\n    return toRet;\n  }\n\n  // return a value of selectors\n  getValue(property) {\n    return this.setValue(property,this.SELECTORS);\n  }\n  addToObject(obj, key, value, index) {\n    // Create a temp object and index variable\n    var temp = {};\n    var i = 0;\n    // Loop through the original object\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        // If the indexes match, add the new item\n        if (i === index && key && value) {\n          temp[key] = value;\n        }\n        // Add the current item in the loop to the temp obj\n        temp[prop] = obj[prop];\n        // Increase the count\n        i++;\n      }\n    }\n    // If no index, add to the end\n    if (!index && key && value) {\n      temp[key] = value;\n    }\n    return temp;\n  }\n\n  /////////////////////////\n  /*       CHAT PART     */\n  /////////////////////////\n\n  // initiate the chat\n  initializeChat(ps = false) {\n    // this\n    var ctx = this;\n    // big config chunk for salesforce\n    var initESW = function(gslbBaseURL) {\n      // help btn\n      embedded_svc.settings.displayHelpButton = true;\n      // language conf fallback to en\n      var language = (ctx.liveChatLanguage != '') ? ctx.liveChatLanguage : 'en';\n      embedded_svc.settings.language = language;\n      // directbutton routing on select subject\n      embedded_svc.settings.directToButtonRouting = function(prechatFormData) {\n        // subject is the fourth field on prechat list form\n        if (prechatFormData[3].value == \"Personal Stylist\") {\n          embedded_svc.settings.fallbackRouting = [ctx.personalStylistSnapConfig,ctx.buttonIdSnapIn];\n          return ctx.personalStylistSnapConfig;\n        } else {\n          return ctx.buttonIdSnapIn;\n        }\n      }\n      // country\n      var country = document.querySelector('body').dataset.website != null ? document.querySelector('body').dataset.website.toUpperCase() : \"\";\n      // prechat fields\n      var prechatFields = {\n        Primary_Language__c: language.toUpperCase(),\n        Country__c: country,\n        website_iso_country_code__c: country,\n        LiveChat_Brand__c: ctx.chatBrand,\n        LiveChat_Path1__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_1),\n        LiveChat_Path2__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_2),\n        LiveChat_Path3__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_3),\n        LiveChat_Path4__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_4),\n        LiveChat_Path5__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_5),\n      };\n      //\n      // if is personal stylist i should update the routing\n      if(ps) {\n        // this made the PS working\n        embedded_svc.settings.fallbackRouting = [ctx.personalStylistSnapConfig,ctx.buttonIdSnapIn];\n        // adding prechat fields\n        prechatFields.FirstName = ctx.customerFirstName;\n        prechatFields.LastName = ctx.customerLastName;\n        prechatFields.Email = ctx.customerEmail;\n        prechatFields.LiveChat_Subject__c = 'Personal Stylist';\n      } else {\n        // remove if there is\n        delete embedded_svc.settings.fallbackRouting;\n      }\n      // fill prechat fields\n      embedded_svc.settings.prepopulatedPrechatFields = prechatFields;\n      // labels\n      embedded_svc.settings.defaultAssistiveText = '';\n      embedded_svc.settings.defaultMinimizedText = ctx.chatLabelOnline; // (Defaults to Chat with an Expert)\n      embedded_svc.settings.disabledMinimizedText = ctx.chatLabelOffline; // (Defaults to Agent Offline)\n      //\n      embedded_svc.settings.enabledFeatures = ['LiveAgent'];\n      embedded_svc.settings.entryFeature = 'LiveAgent';\n      // on off button\n      embedded_svc.addEventHandler('onAvailability', function(data) {\n        var eventName = (data.isAgentAvailable) ? 'chatButtonEnabled' : 'chatButtonDisabled';\n        var evt = document.createEvent(\"Events\");\n        evt.initEvent(eventName, true, true);\n        document.dispatchEvent(evt);\n      });\n      embedded_svc.addEventHandler(\"onSettingsCallCompleted\", function (data) {\n        var eventName = data.isAgentAvailable ? 'chatButtonEnabled' : 'chatButtonDisabled';\n        var evt = document.createEvent(\"Events\");\n        evt.initEvent(eventName, true, true);\n        document.dispatchEvent(evt);\n      });\n      // on chat ended by user\n      embedded_svc.addEventHandler(\"onChatEndedByChasitor\", function() {\n        ctx.TrackingComponent.actions.deleteChat();\n      });\n      // after chat is closedddd\n      embedded_svc.addEventHandler('afterDestroy', function() {\n        // if i used the PS chat\n        if (ctx.personalStylistBanner != null && ctx.personalStylistBanner.classList.contains('disappeared')) {\n          // i reinit at the destroy\n          ctx.initializeChat();\n         }\n      });\n      embedded_svc.addEventHandler('afterMaximize', function() {\n        let chatContainer = document.querySelector(ctx.SELECTORS.chatDock);\n        if (chatContainer != null ) {\n          var pdpFixedBar = document.querySelector(ctx.SELECTORS.fixedBar);\n          if (pdpFixedBar && pdpFixedBar.classList.contains('show-bar')){\n            chatContainer.classList.add(\"live-chat-raise\");\n          } else {\n            chatContainer.classList.remove(\"live-chat-raise\");\n          }\n        }\n      });\n      embedded_svc.addEventHandler('afterMinimize', function() {\n        var chatBtns = document.querySelectorAll(ctx.SELECTORS.chatBtns);\n        var pdpFixedBar = document.querySelector(ctx.SELECTORS.fixedBar);\n\n        if (chatBtns != null && chatBtns.length > 0 ) {\n          chatBtns.forEach(function(btn){\n            // show or hide\n            if (pdpFixedBar && pdpFixedBar.classList.contains('show-bar')){\n              btn.classList.add(\"live-chat-raise\");\n            } else {\n              btn.classList.remove(\"live-chat-raise\");\n            }\n          });\n        }\n\n      });\n      //\n      // console.log(embedded_svc.settings);\n      //\n      embedded_svc.init(\n        ctx.urlEnvironmentSF,\n        ctx.urlEnvironmentSnapIn,\n        gslbBaseURL,\n        ctx.chatOrgId,\n        ctx.buttonNameSnapIn,\n        {\n          baseLiveAgentContentURL: ctx.baseLiveAgentContentURL,\n          deploymentId: ctx.deploymentIdSnapIn,\n          buttonId: ctx.buttonIdSnapIn,\n          baseLiveAgentURL: ctx.baseLiveAgentURL,\n          eswLiveAgentDevName: ctx.eswLiveAgentDevName,\n          isOfflineSupportEnabled: false\n        }\n      );\n    };\n    // launch chat\n    initESW('https://service.force.com');\n  }\n\n  /////////////////////////\n  /*     COOKIES PART    */ /* legacy part */\n  /////////////////////////\n  // static\n  static get COOKIE_CONSTANTS(){\n    return {\n      SIZE: 5,\n      PATH: 'Path',\n      PATH_1: 'Path1',\n      PATH_2: 'Path2',\n      PATH_3: 'Path3',\n      PATH_4: 'Path4',\n      PATH_5: 'Path5',\n    }\n  }\n  static shiftPathCookies() {\n    for(var i = 0; i < ChatUtils.COOKIE_CONSTANTS.SIZE - 1; i++) {\n      ChatUtils.writeCookie(ChatUtils.COOKIE_CONSTANTS.PATH + (ChatUtils.COOKIE_CONSTANTS.SIZE - i), ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH + (ChatUtils.COOKIE_CONSTANTS.SIZE - i - 1 )));\n    }\n  }\n  static readCookie(cookieName) {\n    if (document.cookie.length > 0) {\n      var start = document.cookie.indexOf(cookieName + \"=\");\n      if (start != -1) {\n        start = start + cookieName.length + 1;\n        var end = document.cookie.indexOf(\";\", start);\n        if (end == -1) end = document.cookie.length;\n        return unescape(document.cookie.substring(start, end));\n      }\n      else {\n        return \"\";\n      }\n    }\n    return \"\";\n  }\n  static writeCookie(cookieName, cookieValue) {\n    document.cookie = cookieName + '=' + escape(cookieValue) + '; path=/; secure;';\n  }\n  // non static\n  updatePath(){\n    var pathName = window.location.pathname;\n    if(pathName !== ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_1)) {\n      ChatUtils.shiftPathCookies();\n      ChatUtils.writeCookie(ChatUtils.COOKIE_CONSTANTS.PATH_1, pathName);\n    }\n  }\n\n  /////////////////////////\n  /*  CHAT MANIPULATION  */\n  /////////////////////////\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // OBSERVATION PART\n  // main button observer\n  runsNewChat(){\n    var ctx = this;\n    // Dynamic init of components to be loaded\n    var $this = this;\n    // observer listener\n    function listener(records) {\n      var nodes = [];\n      records.forEach(function (record) {\n        var list = record.addedNodes;\n        var i = list.length - 1;\n        for ( ; i > -1; i-- ) {\n          // if i find a new component\n          if ( typeof list[i] == 'object' && list[i].nodeType == '1') {\n            // if i find the chat button\n            if (list[i].getAttribute('class') !== null  ) {\n              var classes = list[i].getAttribute('class').split(' ');\n              if (list[i].getAttribute('class') == 'embeddedServiceHelpButton'  || classes.includes('embeddedServiceHelpButton') ) {\n                // chat button appears + add class\n                list[i].classList.add('livechat-button');\n                // bind button start prechat\n                ctx.startButton();\n                // Personal Stylist button\n                ctx.bindPSChat();\n              }\n              // if the prechat opens i launch another observer\n              if (classes.includes('modalContainer') && classes.includes('embeddedServiceSidebar') ) {\n                // when chat window is opened\n                ctx.prechatObserver(list[i]);\n              }\n              if (classes.includes('embeddedServiceLiveAgentStateWaiting')) {\n                ctx.deleteChat(list[i]);\n              }\n              if (classes.includes('unseenMessageNotificationWrapper') || classes.includes('featureBody')) {\n                // shadow dom arrow check\n                ctx.applyArrowDownStyles();\n              }\n            }\n            if (list[i].getAttribute('class') == 'endChatContainer' ) {\n              // chat ending\n              ctx.chatEnding();\n            }\n          }\n        }\n      });\n    }\n    // define observer\n    var observer = new MutationObserver(listener);\n    // nodes to observe\n    var sizeNode = document.querySelector('body');\n    if ( typeof sizeNode != 'undefined' && sizeNode != null ) {\n      // loop to observe each node\n      observer.observe(sizeNode, { childList: true, subtree: true });\n    }\n  }\n\n  // prechat observer\n  prechatObserver(div) {\n    // Dynamic init of components to be loaded\n    var ctx = this;\n    // observer listener\n    function listener(records) {\n      var nodes = [];\n      records.forEach(function (record) {\n        var list = record.addedNodes;\n        var i = list.length - 1;\n        for ( ; i > -1; i-- ) {\n          // if i find a new component\n          if ( typeof list[i] == 'object' && list[i].nodeType == '1') {\n            // let's get the div\n            if (list[i].getAttribute('class') !== null  ) {\n              // if there is a certain class\n              var classes = list[i].getAttribute('class').split(' ');\n              if (classes.includes('prechatUI')) {\n                ctx.manipulatePrechat(div);\n              }\n              // error on sending chat\n              if (classes.includes('has-error')) {\n                ctx.errorPrechat(div,list[i]);\n                // add class on dockablecontainer\n                var container = document.querySelector(ctx.SELECTORS.chatDock);\n                container.classList.add('prechat');\n              }\n              // remove the class at the loader\n              if (classes.includes('loadingBallContainer')) {\n                // remove class on dockablecontainer\n                var container = document.querySelector(ctx.SELECTORS.chatDock);\n                container.classList.remove('prechat');\n              }\n            }\n          }\n        }\n      });\n    }\n    // define observer\n    var observer = new MutationObserver(listener);\n    // nodes to observe\n    var sizeNode = document.querySelector('.embeddedServiceSidebar');\n    if ( typeof sizeNode != 'undefined' && sizeNode != null ) {\n      // loop to observe each node\n      observer.observe(sizeNode, { childList: true, subtree: true });\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  //  MANIPULATION PART\n\n  // maniupulate the prechat html\n  manipulatePrechat(div) {\n    // remove loading class on button\n    var btn = document.querySelector(this.SELECTORS.chatButton);\n    btn.classList.remove('loading');\n\n    // add class on dockablecontainer\n    var container = document.querySelector(this.SELECTORS.chatDock);\n    container.classList.add('prechat');\n\n    // fieldlist inside prechat\n    var fieldList = div.querySelector('.fieldList');\n\n    // chat label pre-fields\n    if (this.chatLabelStart != '') {\n      var chatLabelStartDiv = document.createElement('div');\n      chatLabelStartDiv.classList.add('fieldsTitle');\n      chatLabelStartDiv.innerHTML = this.chatLabelStart;\n      // insert as first child\n      fieldList.insertBefore(chatLabelStartDiv, fieldList.firstChild);\n    }\n\n    // label override\n    this.overrideLabels(div);\n\n    // hide fields\n    this.hidePrechatFields(div);\n\n    // min-lenght fields\n    var firstName = div.querySelector('#FirstName');\n    var lastName = div.querySelector('#LastName');\n    firstName.setAttribute('minlength',3);\n    lastName.setAttribute('minlength',3);\n\n    // subject select\n    this.createSubjectSelect(div);\n\n    // privacy checbox\n    this.createPrivacyCheckbox(div);\n\n    // start button\n    this.createStartButton(div);\n\n    // callbacks called with events\n    var evt = document.createEvent(\"Events\");\n    evt.initEvent(\"prechatOpened\", true, true);\n    document.dispatchEvent(evt);\n\n    // apply style\n    this.applyPreChatStyle();\n\n  }\n\n  overrideLabels(div) {\n    // label override!!!\n    // chatLabelName\n    if (this.chatLabelName != '') {\n      if (div.querySelector('#FirstName') != null) {\n        div.querySelector('#FirstName').closest('div.uiInput').querySelector('label').innerHTML  = this.chatLabelName;\n      }\n    }\n    // chatLabelLastname\n    if (this.chatLabelLastname != '') {\n      if (div.querySelector('#LastName') != null) {\n        div.querySelector('#LastName').closest('div.uiInput').querySelector('label').innerHTML  = this.chatLabelLastname;\n      }\n    }\n    // chatLabelEmail\n    if (this.chatLabelEmail != '') {\n      if (div.querySelector('#Email') != null) {\n        div.querySelector('#Email').closest('div.uiInput').querySelector('label').innerHTML  = this.chatLabelEmail;\n      }\n    }\n  }\n\n  // hide fields in prechat\n  hidePrechatFields(div) {\n    // hiding fields = main selector : closest selector\n    var hidingFields =  {\n      '#LiveChat_Path1__c': 'div.inputText',\n      '#LiveChat_Path2__c': 'div.inputText',\n      '#LiveChat_Path3__c': 'div.inputText',\n      '#LiveChat_Path4__c': 'div.inputText',\n      '#LiveChat_Path5__c': 'div.inputText',\n      '#LiveChat_Brand__c': 'div.inputSelect',\n      '#website_iso_country_code__c': 'div.inputText',\n      '#Country__c': 'div.inputSelect',\n      '#Primary_Language__c': 'div.inputSelect',\n      '#Type': 'div.inputSelect',\n      '#LiveChat_Subject__c': 'div.inputText',\n    }\n    // loop the fields\n    for(var key in hidingFields) {\n      // check and hide\n      if (div.querySelector(key) != null) {\n        div.querySelector(key).closest(hidingFields[key]).classList.add('hidden');\n      }\n    }\n  }\n\n  // create subject select\n  createSubjectSelect(div) {\n    // check preselected subject\n    var preselSubject = document.querySelector(this.SELECTORS.chatPreselectedSubject).value;\n    if (preselSubject != '') {\n      div.querySelector('#LiveChat_Subject__c').value = preselSubject;\n      var evt = document.createEvent(\"Events\");\n      evt.initEvent(\"change\", true, true);\n      div.querySelector('#LiveChat_Subject__c').dispatchEvent(evt);\n      return;\n    }\n    // fields\n    var fieldList = div.querySelector('.fieldList');\n    // subject select\n    var subjectDiv = document.createElement('div');\n    subjectDiv.classList.add('inputSelect','embeddedServiceSidebarFormField','subjectSelect','form-group');\n    // div select\n    var selectDiv = document.createElement('div');\n    selectDiv.classList.add('uiInput','uiInput--default','uiInputSelect','uiInput--select');\n    // label\n    var selectDivLabel = document.createElement('label');\n    selectDivLabel.classList.add('uiLabel','uiLabel-left','form-element__label');\n    selectDivLabel.innerHTML = this.chatLabelSubject;\n    // append to select div\n    selectDiv.append(selectDivLabel);\n    // create select and options\n    var subjectSelect = document.createElement('select');\n    subjectSelect.setAttribute('name','subjectSelect') ;\n    subjectSelect.setAttribute('id','subjectSelect') ;\n    subjectSelect.setAttribute('placeholder',this.chatLabelSubject) ;\n    // stock classes\n    if (typeof this.options.subjectClassesDefault === 'undefined' || this.options.subjectClassesDefault !== 'false') {\n      subjectSelect.classList.add('slds-style-select','select','js-subject','mc-custom');\n    }\n    // options classes\n    if (typeof this.options.subjectClasses !== 'undefined') {\n      // check if is array and add classes\n      var classArr = this.options.subjectClasses;\n      if (Array.isArray(classArr)) {\n        // loop the classes to add them\n        classArr.forEach((cls, i) => {\n          subjectSelect.classList.add(cls);\n        });\n      }\n    }\n    // check list on options\n    if (typeof this.options.subjects !== 'undefined') {\n      for (const key in this.options.subjects) {\n        if (this.options.subjects.hasOwnProperty(key)) {\n          // set value\n          subjectSelect.options[subjectSelect.options.length] = new Option(this[key], this.options.subjects[key]);\n        }\n      }\n    }\n    // append to select div\n    selectDiv.append(subjectSelect);\n    // append to subject div\n    subjectDiv.append(selectDiv);\n    // append to fields\n    fieldList.append(subjectDiv);\n    // type or subject\n    var targetSelect = null;\n    if (div.querySelector('#LiveChat_Subject__c') != null) {\n      targetSelect = div.querySelector('#LiveChat_Subject__c');\n    } else {\n      if (div.querySelector('#Type') != null) {\n        targetSelect = div.querySelector('#Type');\n      }\n    }\n    // first val setting\n    if (subjectSelect.value !== '' && targetSelect != null) {\n      targetSelect.value = subjectSelect.value;\n      var evt = document.createEvent(\"Events\");\n      evt.initEvent(\"change\", true, true);\n      targetSelect.dispatchEvent(evt);\n    }\n    // event!\n    subjectSelect.addEventListener('change',e => {\n      // this works\n      targetSelect.value = subjectSelect.value;\n      var evt = document.createEvent(\"Events\");\n      evt.initEvent(\"change\", true, true);\n      targetSelect.dispatchEvent(evt);\n    });\n  }\n\n  createPrivacyCheckbox(div) {\n    // fields\n    var fieldList = div.querySelector('.fieldList');\n    // checkbox\n    var checkboxDiv = document.createElement('div');\n    checkboxDiv.classList.add('inputText','embeddedServiceSidebarFormField','privacyInput','custom-checkbox');\n    var checkbox = document.createElement('input');\n    checkbox.setAttribute('type','checkbox') ;\n    checkbox.setAttribute('id','privacyInput') ;\n    var label = document.createElement('label');\n    label.innerHTML = this.chatLabelPrivacy;\n    // append to checkbox div\n    checkboxDiv.append(checkbox);\n    checkboxDiv.append(label);\n    // append to fields\n    fieldList.append(checkboxDiv);\n  }\n\n  //\n  createStartButton(div) {\n    var ctx = this\n    // fake button\n    var fakeSubmit = document.createElement('a');\n    fakeSubmit.setAttribute('href','javascript:void(0)');\n    fakeSubmit.classList.add('fakeSubmit','disabled');\n    // stock class\n    if (typeof this.options.ctaClassesDefault === 'undefined' || this.options.ctaClassesDefault !== 'false') {\n      fakeSubmit.classList.add('embeddedServiceSidebarButton','uiButton--default','uiButton');\n    }\n    // options class\n    if (typeof this.options.ctaClasses !== 'undefined') {\n      // check if is array and add classes\n      var classArr = this.options.ctaClasses;\n      if (Array.isArray(classArr)) {\n        // loop the classes to add them\n        classArr.forEach((cls, i) => {\n          fakeSubmit.classList.add(cls);\n        });\n      }\n    }\n    // button inner html\n    fakeSubmit.innerHTML = this.chatLabelCTA;\n    // append button\n    var buttonWrapper = div.querySelector('.buttonWrapper');\n    buttonWrapper.querySelector('button').classList.add('hidden');\n    buttonWrapper.append(fakeSubmit);\n    // bind action\n    this.bindStartChat(div);\n    var chatContainer = document.querySelector(ctx.SELECTORS.chatDock);\n    var pdpFixedBar = document.querySelector(this.SELECTORS.fixedBar);\n    if (pdpFixedBar && pdpFixedBar.classList.contains('show-bar')){\n      chatContainer.classList.add(\"live-chat-raise\");\n    }\n\n    // go PS chat\n    if (this.personalStylistBanner != null &&\n        this.personalStylistBanner.classList.contains('disappeared') &&\n        !this.personalStylistBanner.classList.contains('launched') &&\n        !this.personalStylistBanner.classList.contains('launch_on_click')\n      ) {\n      // control class\n      this.personalStylistBanner.classList.add('launched');\n      // launch chat\n      document.querySelector('.startButton').click();\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // FUNCTIONALITY PART\n\n  // start chat button\n  startButton() {\n    var btn = document.querySelector(this.SELECTORS.chatButton);\n    btn.addEventListener('click',e => {\n      btn.classList.add('loading');\n      this.TrackingComponent.actions.startChat();\n      // reset width small trick\n      var setIntervalBtn = setInterval(function(){\n        if (btn.closest('.helpButton').style.width != '') {\n          btn.closest('.helpButton').style.width = 'auto';\n          clearInterval(setIntervalBtn);\n        }\n      }, 10);\n    });\n    // extra chat link on menus\n    if (this.startChatLink != null) {\n      this.startChatLink.addEventListener('click', e => {\n        btn.click();\n      });\n    }\n    // callbacks called with events\n    var evt = document.createEvent(\"Events\");\n    evt.initEvent(\"startChatButton\", true, true);\n    document.dispatchEvent(evt);\n  }\n  // bind the fake button to the start chat button\n  bindStartChat(div) {\n    // bind click btn\n    var fakeBtn = div.querySelector('.fakeSubmit');\n    var btn = div.querySelector('.buttonWrapper button');\n    var privacyInput = div.querySelector('#privacyInput');\n    fakeBtn.addEventListener('click', e => {\n      // check\n      if (privacyInput.checked && this.checkForm(div)) {\n        btn.click();\n        // reset eventually error\n        privacyInput.closest('.privacyInput').classList.remove('has-error');\n      } else {\n        // fallback\n        if (!privacyInput.checked) {\n          privacyInput.closest('.privacyInput').classList.add('has-error');\n        }\n      }\n    });\n    // bind enable btn\n    privacyInput.addEventListener('change', e => {\n      if (e.target.checked) {\n        fakeBtn.classList.remove('disabled');\n      } else {\n        fakeBtn.classList.add('disabled');\n      }\n    });\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // CHECKS PART\n  // error prechat\n  errorPrechat(div,el){\n    // i only care about fake fields\n    // SUBJECT\n    var subjectSelect = el.previousElementSibling.querySelector('input#LiveChat_Subject__c');\n    if (subjectSelect == null) {\n      el.previousElementSibling.querySelector('#Type');\n    }\n    if (subjectSelect != null) {\n      var subjectDiv = div.querySelector('.subjectSelect');\n      if (subjectDiv != null) {\n        subjectDiv.append(el);\n        subjectDiv.querySelector('.uiInputSelect').classList.add('has-error');\n      }\n    }\n  }\n\n  // checks form\n  checkForm(div){\n    // init\n    var pass = [];\n    // fields\n    var fields = {\n      '#FirstName': {\n        'type' : 'length',\n        'value' : 3\n      },\n      '#LastName': {\n        'type' : 'length',\n        'value' : 3\n      }\n    }\n    for (const fieldName in fields){\n      if(fields.hasOwnProperty(fieldName)){\n        // get input\n        var input = div.querySelector(fieldName);\n        // types\n        // length\n        if (fields[fieldName].type == 'length') {\n          if (input.value.length == 0 || input.value.length >= fields[fieldName].value ) {\n            // pass\n            pass.push('true');\n            // clean error if not empty\n            if (input.value.length != 0) {\n              this.cleanFieldError(input);\n            }\n          } else {\n            // no pass\n            pass.push('false');\n            // set\n            this.setFieldError(input,'length');\n          }\n        }\n      }\n    }\n    // salesforce standard fields\n    var emailInput = div.querySelector('input#Email');\n    var subjectInput = ( div.querySelector('#LiveChat_Subject__c') != null ) ? div.querySelector('#LiveChat_Subject__c') : div.querySelector('#Type');\n    // reset errorrr if subject is not empty !!!! (because the subject field is fake)\n    if (subjectInput.value != '' && div.querySelector('.subjectSelect .uiInputSelect') != null ) {\n      div.querySelector('.subjectSelect .uiInputSelect').classList.remove('has-error');\n    }\n    // if one of the 2 field is empty i want to trigger the salesforce validation\n    if (emailInput.value == '' || subjectInput.value == '') {\n      return true;\n    }\n    // return true if i dont find fals in pass array\n    return !pass.includes('false');\n  }\n\n  // set the error field\n  setFieldError(div,type) {\n    if (div != null) {\n      // set error classes\n      div.classList.add('has-error');\n      div.closest('.uiInput').classList.add('has-error');\n      var label = '';\n      // adding error ul\n      var inputBox = div.closest('.embeddedServiceSidebarFormField');\n      // check\n      if (inputBox.querySelector('ul.uiInputDefaultError')) return;\n      // label\n      if (type == 'length') {\n        label = this.chatLabelLengthError;\n      }\n      // create ul\n      var errorUl = document.createElement('ul');\n      errorUl.classList.add('uiInput','uiInputDefaultError','has-error','uiInput--default','uiInput--input');\n      var errorLi = document.createElement('li');\n      errorLi.setAttribute('class','form-element__help');\n      errorLi.innerHTML = label;\n      errorUl.appendChild(errorLi);\n      // append error\n      inputBox.append(errorUl);\n    }\n  }\n\n  // clean the error from field\n  cleanFieldError(div) {\n    // remove class\n    div.classList.remove('has-error');\n    // box\n    var inputBox = div.closest('.embeddedServiceSidebarFormField');\n    // find error box\n    var errorBox = inputBox.querySelector('ul.uiInputDefaultError');\n    if (errorBox != null) {\n      errorBox.remove();\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // SHADOW DOM HACKS\n\n  applyArrowDownStyles() {\n    //\n    let element = document.querySelector('.modalContainer.embeddedServiceSidebar .embeddedServiceLiveAgentStateChatInputFooter.chasitorInputWrapper embeddedservice-chat-unseen-message-notification')\n    // check 1\n    if (element === null) return false;\n    this.applyElStyle('#arrowDownStyle',element);\n    // other shadow dom elems\n    if (element.shadowRoot !== null) {\n      let element2 = element.shadowRoot.querySelector(' lightning-button-icon');\n      if (element2 !== null) this.applyElStyle('#arrowDownStyle2',element2);\n    }\n  }\n\n  applyPreChatStyle() {\n    // console.log('applyPreChatStyle');\n    // headerChatStyle\n    let element = document.querySelector('.modalContainer.embeddedServiceSidebar.layout-docked.sidebarMaximized .dockableContainer embeddedservice-chat-header')\n    if (element !== null)  this.applyElStyle('#headerChatStyle',element);\n  }\n\n  applyElStyle(styleID,element) {\n    let styleSourceDiv = document.querySelector(styleID);\n    if (styleSourceDiv === null) return false;\n    let style = styleSourceDiv.innerText;\n    let styleDiv = document.createElement( 'style' );\n    // console.log('chatstyle',styleID,style.trim());\n    styleDiv.innerHTML = style.trim();\n    let shadowDomEl = element.shadowRoot;\n    // console.log('shadowDomEl' , shadowDomEl);\n    // console.log('shadowDomEl' , shadowDomEl.constructor);\n    if (shadowDomEl !== null && shadowDomEl.constructor.name === 'ShadowRoot') {\n      // console.log('shadowDomEl.constructor.name',shadowDomEl.constructor.name);\n      shadowDomEl.appendChild( styleDiv )\n    } else {\n      console.log(' no shadow dom ')\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // ENDING PART\n  // chat ending\n  chatEnding() {\n    // vars\n    var endChatContainer = document.querySelector(this.SELECTORS.endChatContainer);\n    var endChatMessage = document.querySelector(this.SELECTORS.endChatMessage);\n    // if i find the wrapper i append the endchat\n    if (endChatContainer != null) {\n      var endChatContent = document.querySelector(this.SELECTORS.endChatContent);\n      var endChatText = endChatContent.cloneNode(true);\n      endChatText.classList.remove('d-none');\n      // insert as first child\n      endChatContainer.insertBefore(endChatText, endChatContainer.firstChild);\n      // add class\n      endChatMessage.classList.add('chatEnded');\n    }\n    // save transcription\n    var downloadBtn = document.querySelector(this.SELECTORS.endChatContainer+' .container-feedback .btn-download a');\n    if (downloadBtn != null) {\n      downloadBtn.addEventListener('click', () => {\n        var saveBtn = document.querySelector(this.SELECTORS.endChatContainer+' .saveTranscriptButton');\n        if (saveBtn != null) {\n          saveBtn.click();\n        }\n      });\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // DELETE CHAT BEFORE START\n\n  deleteChat(deleteChatBtn) {\n    deleteChatBtn.addEventListener('click', e => {\n      this.TrackingComponent.actions.deleteChat();\n    });\n  }\n\n  /////////////////////////\n  /*  PERSONAL STYLIST   */\n  /////////////////////////\n  // bind PS chat\n  bindPSChat() {\n    // PS part\n    var ctx = this;\n    if (this.personalStylistSnapConfig != null) {\n      // PS Chat binded\n      // check cookie and launch PS\n      if(Cookies.get(this.hideCookieKey) == 'undefined' || !Cookies.get(this.hideCookieKey)){\n        // launch ps chat bind\n        this.setupPersonalStylistDelayedPopup(this.personalStylistPopUpTriggerTime);\n      }\n      // set cookie  on close to avoid show button\n      var closeBtn = this.personalStylistCloseBtn;\n      if ( closeBtn != null ) {\n        closeBtn.addEventListener('click', () => {\n          Cookies.set(ctx.hideCookieKey, 'true', {\n            path: '/'\n          });\n          // hide button\n          ctx.personalStylistBanner.classList.add('disappeared','hidden');\n        });\n      }\n    }\n  }\n\n  // display PS button\n  setupPersonalStylistDelayedPopup(triggerIn){\n    var ctx = this;\n    // click start chat button\n    var chatButton = document.querySelector(this.SELECTORS.chatButton);\n    // if there is the start chat button , i bind the start chat\n    if (this.personalStylistStartChat != null) {\n      this.personalStylistStartChat.addEventListener('click',e => {\n         e.stopPropagation();\n        // init chat\n        // if is logged in\n        if (this.customerLoggedIn === 'true') {\n           ctx.initializeChat(true);\n        } else {\n          // if not i set the preselected subject\n          document.querySelector(this.SELECTORS.chatPreselectedSubject).value = this.options.subjects.chatLabelSubjectOptionPS;\n          // hide button\n          ctx.personalStylistBanner.classList.add('launch_on_click');\n        }\n        // click start chat button\n        chatButton.click();\n        // remove PS banner\n        // hide button\n        ctx.personalStylistBanner.classList.add('disappeared','hidden');\n        // put cookie\n        Cookies.set(ctx.hideCookieKey, 'true', {\n          path: '/'\n        });\n      });\n    }\n    // if there is the banner i want to show it\n    if (this.personalStylistBanner != null) {\n      // button appears if there are buttons to start chat or whatsapp\n      setTimeout(()=> {\n        if((ctx.personalStylistStartWhatsApp != null || ctx.personalStylistStartChat != null ) && chatButton.classList.contains('helpButtonEnabled') ) {\n          // if is mobile and is PDP\n          let mq = window.matchMedia('(max-width:767px)');\n          if (mq.matches && document.querySelector('body').dataset.template == \"t-product\" ) {\n            ctx.personalStylistBanner.classList.add('btn-hidden');\n          }\n          ctx.personalStylistBanner.classList.remove('d-none');\n        }\n      }, triggerIn);\n      // hide push on disable button\n      document.addEventListener('chatButtonDisabled', () => {\n        ctx.personalStylistBanner.classList.add('d-none');\n      });\n      // show push on enable button\n      document.addEventListener('chatButtonEnabled', () => {\n        setTimeout(()=> {\n          if((ctx.personalStylistStartWhatsApp != null || ctx.personalStylistStartChat != null ) && chatButton.classList.contains('helpButtonEnabled') ) {\n            // if is mobile and is PDP\n            let mq = window.matchMedia('(max-width:767px)');\n            if (mq.matches && document.querySelector('body').dataset.template == \"t-product\" ) {\n              ctx.personalStylistBanner.classList.add('btn-hidden');\n            }\n            ctx.personalStylistBanner.classList.remove('d-none');\n          }\n        }, triggerIn);\n      });\n      // prechatOpened\n      document.addEventListener('prechatOpened', () => {\n        // if the preselected subject is filled, i reset it so the next time is not preselected\n        if (document.querySelector(ctx.SELECTORS.chatPreselectedSubject).value != '') {\n          document.querySelector(ctx.SELECTORS.chatPreselectedSubject).value = '';\n        }\n      });\n    }\n  }\n\n}\n\nexport default new ChatUtils();\n"],"sourceRoot":""}