{"version":3,"file":"main.js","mappings":"sKAKA,QAAe,EAAEA,EAAwBC,EAAQC,KAM/C,MAAMC,EAOJC,YAAYC,EAASC,EAAU,CAAC,GAC9BC,KAAKC,KAAO,YACZD,KAAKE,iBAAmB,cACxBF,KAAKD,QAAUA,EACfC,KAAKF,QAAUL,EAAEK,EACnB,CAKAK,OAEA,CAEAC,WAIE,OAHAJ,KAAKK,WAAaL,KAAKK,WAAaL,KAAKK,WAAaL,KAAKM,mBAGtDN,KAAKK,aAAeL,KAAKK,WAAWE,QAIG,SAAnCP,KAAKK,WAAWG,IAAI,WAC/B,CAEAF,gBACE,OAAON,KAAKS,eAAeT,KAAKF,QAClC,CAEAW,eAAeC,GACb,MAAMC,EAAoB,GAAGX,KAAKH,YAAYe,UAAUC,gCACxD,IAAIC,EAAGC,EAAIC,EAuCX,GApCAD,EAAKtB,EAAEO,KAAKH,YAAYe,UAAUP,WAAYK,GAE1CK,EAAGR,QAELQ,EAAGE,MAAK,CAACC,EAAKC,KAGZ,IAFAA,EAAM1B,EAAE0B,GAGNL,EAAIK,EAAIT,SAGHI,EAAEP,QAJI,CASX,GAAIO,EAAE,KAAOJ,EAAO,GAAI,CACtBM,EAASG,EACT,KACF,CAGA,GAAIL,EAAEM,GAAGT,GACP,MAGFQ,EAAML,CACR,CAEA,GAAIE,EACF,OAAO,CACT,KAKCA,EAAQ,CACX,MAAMK,EAAUX,EAAOA,SAASY,QAAQX,GACxC,OAAIU,EAAQd,OACHP,KAAKS,eAAeY,QAG7B,CACF,CAEA,OAAOL,CACT,CAOAO,qBACE,MAAMZ,EAAoBX,KAAKH,YAAYe,UAAUC,wBAC/CC,EAAId,KAAKF,QAAQY,SAASY,QAAQX,GAExC,OAAOG,EAAEP,OAASO,EAAI,IACxB,CAOAU,OAAOC,GACLA,EAAKC,QAAQ,GAAG1B,KAAKC,UAErB0B,QAAQH,IAAII,MAAMD,QAASF,EAC7B,CAOAI,YAAYJ,GACVA,EAAKC,QAAQ,GAAG1B,KAAKC,UAErB0B,QAAQG,MAAMF,MAAM,KAAMH,EAC5B,CAOAM,cAAcN,GACZA,EAAKC,QAAQ,GAAG1B,KAAKC,UAErB0B,QAAQK,KAAKJ,MAAM,KAAMH,EAC3B,EAQF,OALA7B,EAAUgB,UAAY,CACpBP,WAAY,cACZQ,wBAAyB,kDAGpBjB,CACR,EAnJD,C,QAmJWF,O,uBCxJX,IAAIuC,EAAM,CACT,iBAAkB,CACjB,KACA,IACA,KAED,wBAAyB,CACxB,KACA,KAED,uBAAwB,CACvB,KACA,IACA,GAED,2BAA4B,CAC3B,KACA,IACA,IAED,qBAAsB,CACrB,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,sBAAuB,CACtB,KACA,KAED,iBAAkB,CACjB,MAED,eAAgB,CACf,IACA,KAED,WAAY,CACX,KACA,KAED,8BAA+B,CAC9B,IACA,KAED,YAAa,CACZ,KACA,IACA,KAED,mBAAoB,CACnB,KACA,IACA,KAED,wBAAyB,CACxB,KACA,KAED,iCAAkC,CACjC,KACA,KAED,kCAAmC,CAClC,KACA,KAED,iBAAkB,CACjB,KACA,KAED,aAAc,CACb,KACA,GAED,6BAA8B,CAC7B,KACA,KAED,2BAA4B,CAC3B,KACA,IACA,KAED,qBAAsB,CACrB,KACA,KAED,iBAAkB,CACjB,KACA,KAED,oBAAqB,CACpB,KACA,IACA,KAED,wBAAyB,CACxB,KACA,IACA,KAED,oBAAqB,CACpB,KACA,KAED,qBAAsB,CACrB,KACA,KAED,sBAAuB,CACtB,KACA,IAED,mBAAoB,CACnB,KACA,KAED,yBAA0B,CACzB,KACA,KAED,cAAe,CACd,KACA,KAED,wBAAyB,CACxB,KACA,KAED,kBAAmB,CAClB,KACA,IACA,KAED,WAAY,CACX,KACA,IACA,KAED,yBAA0B,CACzB,KACA,IAED,yBAA0B,CACzB,KACA,MAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIC,EAAI,IAAIC,MAAM,uBAAyBP,EAAM,KAEjD,MADAM,EAAEE,KAAO,mBACHF,CACP,IAGD,IAAIG,EAAMX,EAAIE,GAAMU,EAAKD,EAAI,GAC7B,OAAON,QAAQQ,IAAIF,EAAIG,MAAM,GAAGd,IAAIG,EAAoBK,IAAID,MAAK,WAChE,OAAOJ,EAAoBS,EAC5B,GACD,CACAX,EAAoBc,KAAO,WAAa,OA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","sources":["webpack://kitchensink-tool/./assets/src/js/components/component.js","webpack://kitchensink-tool/./assets/src/js/components/ lazy ^\\.\\/.*\\.js$ namespace object","webpack://kitchensink-tool/./assets/src/js/global/init/ready.js","webpack://kitchensink-tool/./assets/src/js/global/init/focusable.js","webpack://kitchensink-tool/./assets/src/js/global/init/scroll.js","webpack://kitchensink-tool/./assets/src/js/global/init/detect.js","webpack://kitchensink-tool/./assets/src/js/global/init/viewport.js","webpack://kitchensink-tool/./assets/src/js/global/init/backtotop.js","webpack://kitchensink-tool/./assets/src/js/global/init/form-inputs.js","webpack://kitchensink-tool/./assets/src/js/global/init/lightbox.js","webpack://kitchensink-tool/./assets/src/js/global/init/fone.js","webpack://kitchensink-tool/./assets/src/js/utils/tracking.js","webpack://kitchensink-tool/./assets/src/js/global/init/goal-tracking.js","webpack://kitchensink-tool/./assets/src/js/global/init/data-event-layer.js","webpack://kitchensink-tool/./assets/src/js/global/init/salesforce-live-agent.js","webpack://kitchensink-tool/./assets/src/js/global/setup/jquery/special-event-isloaded.js","webpack://kitchensink-tool/./assets/src/js/global/setup/jquery/aria-toggle.js","webpack://kitchensink-tool/./assets/src/js/global/setup/jquery/save-form.js","webpack://kitchensink-tool/./assets/src/js/global/setup/pointer-event.js","webpack://kitchensink-tool/./assets/src/js/global/index.js","webpack://kitchensink-tool/./assets/src/js/global/setup/jquery.js","webpack://kitchensink-tool/./assets/src/js/main.js","webpack://kitchensink-tool/./assets/src/js/utils/emitter.js","webpack://kitchensink-tool/./assets/src/js/utils/feature.js","webpack://kitchensink-tool/./assets/src/js/utils/functions.js","webpack://kitchensink-tool/./assets/src/js/utils/component.js","webpack://kitchensink-tool/./assets/src/js/utils/index.js","webpack://kitchensink-tool/./assets/src/js/utils/breakpoints.js","webpack://kitchensink-tool/./assets/src/js/utils/modules.js","webpack://kitchensink-tool/./assets/src/js/utils/transition-end.js"],"sourcesContent":["/**\r\n * Component base class\r\n *\r\n * @module components\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n /*\r\n * Component base class.\r\n */\r\n class Component {\r\n /**\r\n * Constructor\r\n * \r\n * @param {HTMLElement} element \r\n * @param {Object} [options]\r\n */\r\n constructor(element, options = {}) {\r\n this.name = 'component';\r\n this.initializedClass = 'initialized';\r\n this.options = options;\r\n this.element = $(element);\r\n }\r\n \r\n /**\r\n * Component main init\r\n */\r\n init() {\r\n // to be overrided\r\n }\r\n\r\n isMobile() {\r\n this.mobileFlag = this.mobileFlag ? this.mobileFlag : this.getMobileFlag();\r\n\r\n // if the mobileFlag element is absent, consider is as mobile\r\n if (!this.mobileFlag || !this.mobileFlag.length) {\r\n return false;\r\n }\r\n\r\n return !(this.mobileFlag.css('display') === 'none');\r\n }\r\n\r\n getMobileFlag() {\r\n return this._getMobileFlag(this.element);\r\n }\r\n\r\n _getMobileFlag(parent) {\r\n const componentSelector = `${this.constructor.selectors.parentComponentSelector}, body`;\r\n let p, el, elFlag;\r\n \r\n // find all flags inside parent\r\n el = $(this.constructor.selectors.mobileFlag, parent);\r\n\r\n if (el.length) {\r\n // look for flag that is NOT inside another components\r\n el.each((idx, _el) => {\r\n _el = $(_el);\r\n\r\n while (true) {\r\n p = _el.parent();\r\n\r\n // no parent, this should not happen\r\n if (!p.length) {\r\n break;\r\n }\r\n\r\n // p is the context element, use it\r\n if (p[0] === parent[0]) {\r\n elFlag = _el;\r\n break;\r\n }\r\n\r\n // p is inside another component inside the context element, don't use\r\n if (p.is(componentSelector)) {\r\n break;\r\n }\r\n\r\n _el = p;\r\n }\r\n\r\n if (elFlag) {\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n // if no flag was found, traverse up and look again\r\n if (!elFlag) {\r\n const _parent = parent.parent().closest(componentSelector);\r\n if (_parent.length) {\r\n return this._getMobileFlag(_parent);\r\n }\r\n \r\n return undefined;\r\n }\r\n\r\n return elFlag;\r\n }\r\n\r\n /**\r\n * Get parent component.\r\n * \r\n * @return {HTMLElement}\r\n */\r\n getParentComponent() {\r\n const componentSelector = this.constructor.selectors.parentComponentSelector;\r\n const p = this.element.parent().closest(componentSelector);\r\n \r\n return p.length ? p : null;\r\n }\r\n\r\n /**\r\n * Write log message to console\r\n * \r\n * @param {...any}\r\n */\r\n log(...args) {\r\n args.unshift(`${this.name}: `);\r\n // eslint-disable-next-line no-console\r\n console.log.apply(console, args);\r\n }\r\n\r\n /**\r\n * Write error message to console\r\n * \r\n * @param {...any}\r\n */\r\n logError(...args) {\r\n args.unshift(`${this.name}: `);\r\n // eslint-disable-next-line no-console\r\n console.error.apply(null, args);\r\n }\r\n\r\n /**\r\n * Write warning message to console\r\n * \r\n * @param {...any}\r\n */\r\n logWarning(...args) {\r\n args.unshift(`${this.name}: `);\r\n // eslint-disable-next-line no-console\r\n console.warn.apply(null, args);\r\n }\r\n }\r\n\r\n Component.selectors = {\r\n mobileFlag: '.mobileFlag',\r\n parentComponentSelector: '.component, .component-fluid, [data-component]'\r\n };\r\n\r\n return Component;\r\n})(jQuery, window);","var map = {\n\t\"./accordion.js\": [\n\t\t9821,\n\t\t995,\n\t\t821\n\t],\n\t\"./ajax-search-base.js\": [\n\t\t8600,\n\t\t600\n\t],\n\t\"./ajax-search-mvc.js\": [\n\t\t2001,\n\t\t600,\n\t\t1\n\t],\n\t\"./ajax-search-product.js\": [\n\t\t9016,\n\t\t600,\n\t\t16\n\t],\n\t\"./auto-complete.js\": [\n\t\t4752,\n\t\t752\n\t],\n\t\"./card-focus-visible.js\": [\n\t\t5620,\n\t\t620\n\t],\n\t\"./cards-carousel.js\": [\n\t\t6375,\n\t\t375\n\t],\n\t\"./component.js\": [\n\t\t2336\n\t],\n\t\"./counter.js\": [\n\t\t674,\n\t\t674\n\t],\n\t\"./cvp.js\": [\n\t\t7593,\n\t\t593\n\t],\n\t\"./floating-action-button.js\": [\n\t\t303,\n\t\t303\n\t],\n\t\"./gmap.js\": [\n\t\t8161,\n\t\t216,\n\t\t161\n\t],\n\t\"./header-main.js\": [\n\t\t4360,\n\t\t216,\n\t\t360\n\t],\n\t\"./interactive-gmap.js\": [\n\t\t9952,\n\t\t952\n\t],\n\t\"./language-location-locator.js\": [\n\t\t8123,\n\t\t123\n\t],\n\t\"./language-location-selector.js\": [\n\t\t3994,\n\t\t994\n\t],\n\t\"./main-hero.js\": [\n\t\t6835,\n\t\t835\n\t],\n\t\"./media.js\": [\n\t\t1005,\n\t\t5\n\t],\n\t\"./multi-content-teasers.js\": [\n\t\t7552,\n\t\t552\n\t],\n\t\"./notification-banner.js\": [\n\t\t2900,\n\t\t216,\n\t\t900\n\t],\n\t\"./office-finder.js\": [\n\t\t1864,\n\t\t864\n\t],\n\t\"./preloader.js\": [\n\t\t2278,\n\t\t278\n\t],\n\t\"./product-list.js\": [\n\t\t6132,\n\t\t995,\n\t\t132\n\t],\n\t\"./related-products.js\": [\n\t\t5909,\n\t\t995,\n\t\t909\n\t],\n\t\"./search-field.js\": [\n\t\t2215,\n\t\t215\n\t],\n\t\"./search-filter.js\": [\n\t\t9897,\n\t\t897\n\t],\n\t\"./search-filters.js\": [\n\t\t2076,\n\t\t76\n\t],\n\t\"./search-sort.js\": [\n\t\t8479,\n\t\t479\n\t],\n\t\"./showcase-carousel.js\": [\n\t\t4866,\n\t\t866\n\t],\n\t\"./slider.js\": [\n\t\t6637,\n\t\t637\n\t],\n\t\"./solution-teasers.js\": [\n\t\t3354,\n\t\t354\n\t],\n\t\"./tab-scroll.js\": [\n\t\t2450,\n\t\t216,\n\t\t450\n\t],\n\t\"./tab.js\": [\n\t\t6421,\n\t\t995,\n\t\t891\n\t],\n\t\"./tabbed-faq-search.js\": [\n\t\t8066,\n\t\t66\n\t],\n\t\"./tristate-checkbox.js\": [\n\t\t4421,\n\t\t421\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 2342;\nmodule.exports = webpackAsyncContext;","/**\r\n * Handle DOM ready state (and beforeunload) on highest priority.\r\n * This should run first.\r\n */\r\nimport emitter from '../../utils/emitter';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let initialized = false;\r\n \r\n return () => {\r\n if (initialized) {\r\n // do not runs more then once\r\n return;\r\n }\r\n\r\n // jQuery DOM Ready event\r\n $(() => {\r\n emitter.fire('global-ready');\r\n\r\n // add -ready class\r\n window.requestAnimationFrame(() => {\r\n $('html').addClass('-ready');\r\n });\r\n });\r\n\r\n // before unload\r\n window.addEventListener('beforeunload', function(event) {\r\n $('html').removeClass('-ready');\r\n emitter.fire('global-unloading');\r\n });\r\n };\r\n\r\n})(jQuery, window);","/**\r\n * Prevent focus on Skip To Main CTA if the last thing that get the focus is the Cookie Consent\r\n */\r\nimport { focusableChildren } from '../../utils/functions';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n return async () => {\r\n let lastFocusElement = null;\r\n\r\n document.addEventListener('focusin', (ev) => {\r\n const elConsent = document.getElementById('onetrust-consent-sdk');\r\n if (elConsent && (lastFocusElement && (lastFocusElement === elConsent || elConsent.contains(lastFocusElement)))) {\r\n if (ev.target.nodeName === 'A' && ev.target.classList.contains('skip-main')) {\r\n const focusables = focusableChildren(document.body);\r\n const focusable = focusables.find(f => {\r\n if (f.classList.contains('skip-main') || f.id == 'main') {\r\n return false;\r\n }\r\n \r\n return true;\r\n });\r\n \r\n if (focusable) {\r\n focusable.focus();\r\n }\r\n }\r\n }\r\n\r\n lastFocusElement = ev.target;\r\n });\r\n };\r\n})(jQuery, window);","/**\r\n * Detect page scrolling, add `-scrolled` class to `` when the page is scrolled (scrollTop > 0).\r\n */\r\nimport emitter from '../../utils/emitter';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let passiveIfSupported = false;\r\n let initialized = false;\r\n let scrolling = false;\r\n let scrollendTimeout = null;\r\n let triggerTimeout = null;\r\n\r\n // detect passive feature\r\n try {\r\n const options = {\r\n // This function will be called when the browser attempts to access the passive property.\r\n get passive() { \r\n passiveIfSupported = {\r\n passive: true\r\n };\r\n return false;\r\n }\r\n };\r\n\r\n window.addEventListener('test', null, options);\r\n window.removeEventListener('test', null, options);\r\n } catch(err) {\r\n // ignore\r\n }\r\n\r\n return async () => {\r\n if (initialized) {\r\n // do not runs more then once\r\n return;\r\n }\r\n\r\n const $body = $('body');\r\n initialized = true;\r\n\r\n const updateScrolledClass = async () => {\r\n $body.toggleClass('-scrolled', window.pageYOffset > 0);\r\n };\r\n\r\n \r\n //const scrolled = utilities.debounce(() => {\r\n const scrolled = async () => {\r\n if (triggerTimeout) {\r\n window.cancelAnimationFrame(triggerTimeout);\r\n triggerTimeout = null;\r\n }\r\n \r\n triggerTimeout = window.requestAnimationFrame(() => {\r\n if (scrollendTimeout) {\r\n window.clearTimeout(scrollendTimeout);\r\n scrollendTimeout = null;\r\n }\r\n\r\n updateScrolledClass();\r\n \r\n if (!scrolling) {\r\n scrolling = true;\r\n\r\n emitter.fire('scrollstart', {\r\n scrollTop: $(window).scrollTop()\r\n });\r\n }\r\n\r\n scrollendTimeout = window.setTimeout(() => {\r\n scrollendTimeout = null;\r\n if (scrolling) {\r\n scrolling = false;\r\n emitter.fire('scrollend', {\r\n scrollTop: $(window).scrollTop()\r\n });\r\n }\r\n }, 100);\r\n\r\n emitter.fire('scroll', {\r\n scrollTop: $(window).scrollTop()\r\n });\r\n });\r\n };\r\n //}, 13);\r\n\r\n window.addEventListener('scroll', function(event) {\r\n scrolled();\r\n }, passiveIfSupported );\r\n\r\n // initial update on DOM ready\r\n $(() => {\r\n updateScrolledClass();\r\n });\r\n };\r\n\r\n})(jQuery, window);","/**\r\n * Dectect browser feature and add necessary class to ``\r\n */\r\nimport feature from '../../utils/feature';\r\nimport { isExperienceEditorMode } from '../../utils/functions';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let initialized = false;\r\n \r\n return async () => {\r\n if (initialized) {\r\n // do not runs more then once\r\n return;\r\n }\r\n\r\n const $html = $('html');\r\n initialized = true;\r\n\r\n if (feature.noHover) {\r\n $html.addClass('-no-hover');\r\n }\r\n\r\n if (isExperienceEditorMode()) {\r\n $html.addClass('-sc-edit-mode');\r\n }\r\n };\r\n\r\n})(jQuery, window);","/**\r\n * Workaround to handle mobile phones where the browser toolbar (bottom) and address bar (top) can shrink and grow,\r\n * causing components that are using 100vh to have inaccurate height.\r\n */\r\nimport functions from '../../utils/functions';\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let initialized = false;\r\n\r\n return () => {\r\n if (initialized) {\r\n // do not runs more then once\r\n return;\r\n }\r\n\r\n // helper to measure 100vh\r\n const div = $('
').css({\r\n 'position': 'absolute',\r\n 'left': '-100%',\r\n 'top': 0,\r\n 'pointer-events': 'none',\r\n 'width': '1px',\r\n //'min-height': '100vh',\r\n 'min-height': '-webkit-fill-available',\r\n 'z-index': -1,\r\n 'role': 'presentation',\r\n 'aria-hidden': 'true'\r\n });\r\n div.appendTo('body');\r\n\r\n // for browsers that don't support fill-available or -moz-available for height/min-height\r\n if (div[0].style['min-height'] !== '100vh' && div[0].style['min-height'] !== '-webkit-fill-available') {\r\n div[0].style['min-height'] = '100vh';\r\n }\r\n\r\n const setHeight = () => {\r\n const doc = document.documentElement;\r\n doc.style.setProperty('--viewport-height', `${window.innerHeight}px`);\r\n doc.style.setProperty('--viewport-height-min', `${Math.min(window.innerHeight, div.height())}px`);\r\n };\r\n\r\n window.addEventListener('orientationchange', setHeight);\r\n window.addEventListener('resize', functions.debounce(setHeight));\r\n\r\n setHeight();\r\n };\r\n\r\n})(jQuery, window);","/**\r\n * Back To Top interaction.\r\n *\r\n * Note that we are not using anchor #hash because we want to preserve the #hash for permalink.\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n return async () => {\r\n $('#back-to-top').on('click', ev => {\r\n ev.preventDefault();\r\n\r\n // if preloader exists, scroll to header, otherwise scroll to very top\r\n const elPreloader = $('#page').siblings('.preloader');\r\n if (elPreloader.length) {\r\n $('html, body').scrollTop(window.innerHeight);\r\n }\r\n else {\r\n $('html, body').scrollTop(0);\r\n }\r\n });\r\n };\r\n})(jQuery, window);","/**\r\n * Form Inputs interactions.\r\n *\r\n */\r\nimport feature from '../../utils/feature';\r\nimport functions from '../../utils/functions';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n\r\n // ----\r\n // upload input functionality ----\r\n const uploaderFieldClass = 'js-file-upload-wrapper';\r\n const uploaderFieldSelector = `.${uploaderFieldClass}`;\r\n const uploaderFieldEntryClass = 'js-file-upload-entry';\r\n const uploaderFieldEntrySelector = `.${uploaderFieldEntryClass}`;\r\n const uploaderFieldRemoveClass = 'js-file-upload-remove';\r\n const uploaderFieldRemoveSelector = `.${uploaderFieldRemoveClass}`;\r\n const uploaderFieldFileSelectedClass = '-file-selected';\r\n const uploaderFieldDisabledClass = 'file-upload-disabled';\r\n const uploaderFieldInputWrapperSelector = '.file-upload-hide';\r\n\r\n // list of file input being watched\r\n let uploadDisabledWatchList = $();\r\n\r\n // observer config\r\n const uploadObserverConfig = {\r\n attributes: true, \r\n attributeFilter: ['disabled']\r\n };\r\n\r\n // observer\r\n const uploadObserver = new MutationObserver((mutationsList, observer) => {\r\n mutationsList.forEach(entry => {\r\n if (entry.type === 'attributes' && entry.attributeName === 'disabled') {\r\n $(entry.target).closest(uploaderFieldInputWrapperSelector).toggleClass(uploaderFieldDisabledClass, entry.target.disabled);\r\n }\r\n });\r\n });\r\n\r\n /**\r\n * Watch file input disabled attribute changes.\r\n * \r\n * @param {HTMLElement} [context]\r\n */\r\n const watchUploadDisabled = async (context) => {\r\n context = context || window.document;\r\n $(':input[type=\"file\"]', context)\r\n .not(uploadDisabledWatchList).each((idx, el) => {\r\n uploadDisabledWatchList = uploadDisabledWatchList.add(el);\r\n uploadObserver.observe(el, uploadObserverConfig);\r\n })\r\n .end()\r\n .each((idx, el) => {\r\n $(el).closest(uploaderFieldInputWrapperSelector).toggleClass(uploaderFieldDisabledClass, el.disabled);\r\n });\r\n };\r\n\r\n /**\r\n * File input global watch for styling.\r\n */\r\n const initUpload = async () => {\r\n $(uploaderFieldSelector).off('.aggrekoFiledInput');\r\n $(uploaderFieldSelector).parent().off('.aggrekoFiledInput');\r\n\r\n $(uploaderFieldSelector).on('focusin.aggrekoFiledInput focusout.aggrekoFiledInput', ':input[type=\"file\"]', (ev) => {\r\n const t = $(ev.currentTarget);\r\n t.closest(uploaderFieldSelector).toggleClass('-focus', ev.type === 'focusin');\r\n });\r\n\r\n $(uploaderFieldSelector).on('input.aggrekoFiledInput', ':input[type=\"file\"]', (ev) => {\r\n const t = $(ev.currentTarget);\r\n updateUploadValue(t);\r\n });\r\n\r\n $(uploaderFieldSelector).parent().on('click.aggrekoFiledInput', uploaderFieldRemoveSelector, (ev) => {\r\n const t = $(ev.currentTarget);\r\n removeUploadValue(t);\r\n });\r\n\r\n if (!feature.noHover) {\r\n $(uploaderFieldSelector).on('mouseenter.aggrekoFiledInput mouseleave.aggrekoFiledInput', (ev) => {\r\n const t = $(ev.currentTarget);\r\n t.toggleClass('-hover', ev.type === 'mouseenter');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Update Custom file upload's uploaded file info.\r\n * \r\n * @param {HTMLElement} el \r\n * @returns \r\n */\r\n const updateUploadValue = (el) => {\r\n const val = el.val();\r\n let elInfo = el.closest(uploaderFieldSelector).siblings(uploaderFieldEntrySelector);\r\n let fileName = val.split(/[/\\\\]/).pop();\r\n\r\n if (!val) {\r\n if (elInfo.length) {\r\n elInfo.remove();\r\n }\r\n el.closest(uploaderFieldSelector).removeClass(uploaderFieldFileSelectedClass);\r\n return;\r\n }\r\n\r\n if (!elInfo.length) {\r\n elInfo = $('')\r\n .addClass(uploaderFieldEntryClass)\r\n .append(``, '')\r\n .insertAfter(el.closest(uploaderFieldSelector));\r\n }\r\n\r\n elInfo.find('span').last().text(fileName);\r\n el.closest(uploaderFieldSelector).addClass(uploaderFieldFileSelectedClass);\r\n };\r\n\r\n /**\r\n * Clear Custom file upload's uploaded file info.\r\n * \r\n * @param {HTMLElement} el \r\n * @returns \r\n */\r\n const removeUploadValue = (el) => {\r\n const entry = el.closest(uploaderFieldEntrySelector);\r\n const field = entry.siblings(uploaderFieldSelector);\r\n\r\n field.find(':input[type=\"file\"]').each((idx, inp) => {\r\n inp.value = null;\r\n updateUploadValue($(inp));\r\n\r\n // fire focus then blur to trigger validation\r\n inp.focus();\r\n inp.blur();\r\n\r\n // return the focus\r\n inp.focus();\r\n });\r\n };\r\n // #upload input functionality\r\n // ----\r\n\r\n // ----\r\n // textarea input functionality\r\n const textareaWrapperSelector = '.js-textarea-wrapper';\r\n const textareaSelector = 'textarea[data-val-length-max]';\r\n const textareaLengthErrorClass = '-max-length-error';\r\n const textareaHasValidationClass = 'has-max-length-validation';\r\n const textareaRemainingLengthAttr = 'data-max-length-remaining';\r\n const textareaLengthValAttr = 'val-length-max';\r\n\r\n // input event handler (debounced)\r\n const _onTextareaInput = functions.debounce(ev => {\r\n updateTextarea(ev.currentTarget);\r\n }, 150);\r\n\r\n /**\r\n * Init textarea, watch for input changes\r\n */\r\n const initTextarea = async () => {\r\n $(textareaWrapperSelector).off('.aggrekoTextareaInput');\r\n $(textareaWrapperSelector).on('input.aggrekoTextareaInput', textareaSelector, _onTextareaInput);\r\n };\r\n\r\n /**\r\n * Update remaining characters\r\n * \r\n * @param {HTMLElement} el \r\n */\r\n const updateTextarea = (el) => {\r\n el = $(el);\r\n const l = el[0].value.length;\r\n const maxlength = Number(el.data(textareaLengthValAttr)) || 0;\r\n const r = maxlength - l;\r\n\r\n el.closest(textareaWrapperSelector).each((idx, elem) => {\r\n $(elem).attr(textareaRemainingLengthAttr, r);\r\n $(elem).toggleClass(textareaLengthErrorClass, r < 0);\r\n });\r\n };\r\n\r\n /**\r\n * Setup textarea remaining characters functionality.\r\n * \r\n * @param {HTMLElement} [context]\r\n */\r\n const setupTextarea = async (context) => {\r\n context = context || window.document;\r\n $(textareaWrapperSelector, context).find(textareaSelector).each(function() {\r\n $(this).closest(textareaWrapperSelector).addClass(textareaHasValidationClass);\r\n \r\n updateTextarea(this);\r\n });\r\n };\r\n // #textarea input functionality \r\n // ----\r\n \r\n // public interface\r\n const api = () => {\r\n initUpload();\r\n initTextarea();\r\n watchUploadDisabled();\r\n setupTextarea();\r\n };\r\n\r\n // public interface to be used on dynamic content (e.g. forms rendered by AJAX)\r\n api.initForm = (context) => {\r\n watchUploadDisabled(context);\r\n setupTextarea(context);\r\n };\r\n\r\n return api;\r\n})(jQuery, window);","/**\r\n * Lightbox.\r\n *\r\n * Features:\r\n * - Detect clicks on `TRIGGER_SELECTOR` (`.popup-anchor`) and open target element specified in `href` attribute.\r\n * \r\n * Notes:\r\n * - This is using Bootstrap Modal. But we should avoid using Bootstrap way to setup the modal for consistency.\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n let initialized = false;\r\n let BootstrapModal = null;\r\n\r\n const TRIGGER_SELECTOR = '.popup-anchor';\r\n const TRIGGER_TARGET_DATA_KEY = 'lightbox-target-id';\r\n const TRIGGER_MODAL_DATA_KEY = 'lightbox-target-modal';\r\n const TRIGGER_TARGET_DATA_ATTRIBUTE = 'data-modal-target';\r\n const STATIC_MODAL_CLASS = '-modal';\r\n const ON_LOAD_OPEN_POPUP_BY_HASH = false;\r\n\r\n const DEFAULT_MODAL_OPTIONS = {\r\n backdrop: true,\r\n keyboard: true,\r\n focus: true\r\n };\r\n \r\n /**\r\n * Initialize events\r\n */\r\n const initEvents = () => {\r\n $(window.document).on('click.lightBox', TRIGGER_SELECTOR, (ev) => {\r\n const popupId = openPopupFrom($(ev.currentTarget));\r\n if (popupId) {\r\n window.location = `#${popupId}`;\r\n ev.preventDefault();\r\n }\r\n });\r\n\r\n // Try to focus first input element on the popup after is has been shown.\r\n window.document.addEventListener('shown.bs.modal', (ev) => {\r\n if (ev.target) {\r\n try {\r\n const inp = $('form', ev.target).not(':hidden').find(':input').not(':hidden, :disabled, [readonly]');\r\n if (inp.length) {\r\n inp.get(0).focus();\r\n }\r\n }\r\n catch (err) {\r\n //\r\n }\r\n }\r\n });\r\n\r\n if (ON_LOAD_OPEN_POPUP_BY_HASH) {\r\n maybeOpenPopupHash();\r\n }\r\n };\r\n\r\n /**\r\n * Check current URL hash, if it refers to a popup, open it.\r\n * \r\n * @returns {string} ID of the popup\r\n */\r\n const maybeOpenPopupHash = () => {\r\n if (window.location.hash) {\r\n const elPopup = getPopupTargetFromUrl(window.location.hash);\r\n\r\n if (!elPopup.length) {\r\n return false;\r\n }\r\n\r\n if (!elPopup.is('.modal')) {\r\n return false;\r\n }\r\n\r\n return showPopupForm(elPopup);\r\n }\r\n };\r\n\r\n /**\r\n * Get popup element from a specific element.\r\n * \r\n * @param {HTMLElement} el \r\n * @returns {HTMLElement}\r\n */\r\n const getPopupTargetFromElement = (el) => {\r\n let tmp;\r\n \r\n // get ID selector from href\r\n tmp = el.prop('href') || '';\r\n if (tmp) {\r\n return getPopupTargetFromUrl(tmp);\r\n }\r\n // try to get from `TRIGGER_TARGET_DATA_ATTRIBUTE` attribute\r\n else if ((tmp = el.attr(TRIGGER_TARGET_DATA_ATTRIBUTE))) {\r\n return getPopupTargetFromUrl(tmp);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n /**\r\n * Get popup element from URL string.\r\n * \r\n * @param {String} url \r\n * @returns {HTMLElement}\r\n */\r\n const getPopupTargetFromUrl = (url) => {\r\n let target;\r\n let arr;\r\n \r\n if (url) {\r\n arr = url.split('#');\r\n if (arr.length > 1 && arr[arr.length-1] !== '') {\r\n target = `#${arr[arr.length-1]}`;\r\n target = $(target);\r\n }\r\n }\r\n\r\n if (!target || !target.length) {\r\n return false;\r\n }\r\n\r\n // use first one on multiple match\r\n return target.first();\r\n };\r\n\r\n /**\r\n * Get modal options from popup element.\r\n * \r\n * @param {HTMLElement} el \r\n * @returns {Object}\r\n */\r\n const getModalOptions = (el) => {\r\n const options = DEFAULT_MODAL_OPTIONS;\r\n\r\n if (el.hasClass(STATIC_MODAL_CLASS)) {\r\n options.backdrop = 'static';\r\n options.keyboard = false;\r\n }\r\n\r\n return options;\r\n };\r\n\r\n /**\r\n * Open popup from a specific element.\r\n * \r\n * @param {HTMLElement} el \r\n * @returns {String} Popup element ID\r\n */\r\n const openPopupFrom = (el) => {\r\n const elPopup = getPopupTargetFromElement(el);\r\n\r\n if (!elPopup.length) {\r\n return false;\r\n }\r\n\r\n return showPopupForm(elPopup);\r\n };\r\n\r\n /**\r\n * Show popup.\r\n * \r\n * @param {HTMLElement} elPopup \r\n * @param {HTMLElement} elTrigger \r\n * @returns {String} Popup element ID\r\n */\r\n const showPopupForm = (elPopup, elTrigger) => {\r\n const elPopupId = elPopup.attr('id');\r\n let modal;\r\n\r\n if (elTrigger) {\r\n if (elTrigger.data(TRIGGER_TARGET_DATA_KEY) !== elPopupId) {\r\n elTrigger.data(TRIGGER_TARGET_DATA_KEY, elPopupId);\r\n elTrigger.removeData(TRIGGER_MODAL_DATA_KEY);\r\n }\r\n\r\n modal = elTrigger.data(TRIGGER_MODAL_DATA_KEY);\r\n }\r\n \r\n if (!modal) {\r\n const modalOptions = getModalOptions(elPopup);\r\n modal = new BootstrapModal(elPopup, modalOptions);\r\n\r\n if (elTrigger) {\r\n elTrigger.data(TRIGGER_MODAL_DATA_KEY, modal);\r\n }\r\n }\r\n\r\n modal.show();\r\n return elPopupId;\r\n };\r\n \r\n // Public interface and default initializer\r\n const api = () => {\r\n if (initialized) {\r\n return;\r\n }\r\n\r\n initialized = true;\r\n\r\n import(/* webpackPreload: true */ 'bootstrap/js/dist/modal').then(({default: _}) => {\r\n BootstrapModal = _;\r\n initEvents();\r\n });\r\n };\r\n\r\n api.openPopupFrom = openPopupFrom;\r\n \r\n return api;\r\n})(jQuery, window);","/**\r\n * Fone Dynamic Fone fix\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let initialized = false;\r\n \r\n return async () => {\r\n if (initialized) {\r\n // do not runs more then once\r\n return;\r\n }\r\n\r\n initialized = true;\r\n\r\n if (typeof window._ctq !== 'undefined' && Array.isArray(window._ctq)) {\r\n window._ctq.forEach(entry => {\r\n if (Array.isArray(entry) && entry[0] === 'onNumberAvailable' && typeof entry[1] === 'function') {\r\n const orgCallback = entry[1];\r\n\r\n entry[1] = (...args) => {\r\n // temporariliy assign $ with local context jQuery\r\n var tmp$ = window.$;\r\n window.$ = $;\r\n\r\n // call the original function\r\n orgCallback.apply(this, args);\r\n\r\n // revert global $ variable\r\n window.$ = tmp$;\r\n };\r\n }\r\n });\r\n }\r\n };\r\n\r\n})(jQuery, window);","export default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n const sendScTracking = async (goalID) => {\r\n const API_URL = '/sc/api/Analytics/TriggerAnalyticsGoal';\r\n \r\n \r\n $.ajax({\r\n url: API_URL,\r\n cache: false,\r\n type: 'POST',\r\n dataType: 'json',\r\n data: { id: goalID },\r\n // for testing\r\n /*\r\n success: (resp) => {\r\n console.log(`Goal was successfully triggered, with goalid:${goalID}`);\r\n },\r\n error: () => {\r\n console.log(`Error sending tracking request, goalid:${goalID}`);\r\n }\r\n */\r\n });\r\n };\r\n\r\n return {\r\n sendScTracking\r\n };\r\n})(jQuery, window);","import tracking from '../../utils/tracking';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n const GENERIC_CLASS = 'scAnalyticsGoals';\r\n const GENERIC_ATTR_KEY = 'data-sc-goal-id';\r\n\r\n return () => {\r\n $(() => {\r\n $(window.document).on('click', `.${GENERIC_CLASS}`, (ev) => {\r\n const t = ev.currentTarget;\r\n const goalID = t.getAttribute(GENERIC_ATTR_KEY);\r\n \r\n if (goalID) {\r\n tracking.sendScTracking(goalID);\r\n }\r\n });\r\n });\r\n };\r\n})(jQuery, window);","export default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n const ATTR_LAYER = 'data-event-layer';\r\n const ATTR_KEY = 'data-event-key';\r\n const ATTR_VALUE = 'data-event-value';\r\n\r\n /**\r\n * Click handler.\r\n * \r\n * @param {Element} element \r\n * @returns \r\n */\r\n const clickHandler = (element) => {\r\n const el = $(element);\r\n const elLayer = el.closest(`[${ATTR_LAYER}]`);\r\n const elLayerValue = elLayer.length ? (elLayer.attr(ATTR_LAYER) || '').trim() : '';\r\n\r\n // cancel if the clicked element is not a descendent of [data-event-layer] element or\r\n // [data-event-layer] attribute value is missing.\r\n if (!elLayer || !elLayerValue ) {\r\n return;\r\n }\r\n\r\n // traverse up\r\n const elParents = el.parentsUntil(elLayer);\r\n\r\n let trackData = {\r\n 'event': elLayerValue\r\n };\r\n\r\n // counter\r\n let c = 0;\r\n\r\n // temporary variables to hold data-event-key and data-event-value attributes value.\r\n let tmpKey = '';\r\n let tmpValue = '';\r\n\r\n for (let i = 0; i < elParents.length; i++) {\r\n const p = elParents.eq(i);\r\n const k = (p.attr(ATTR_KEY) || '').trim();\r\n const v = (p.attr(ATTR_VALUE) || '').trim();\r\n\r\n // wrong implemantation\r\n if ((tmpValue && v) || (tmpKey && k)) {\r\n tmpValue = tmpKey = '';\r\n }\r\n // wrong implemantion\r\n else if (!tmpValue && k) {\r\n tmpValue = tmpKey = '';\r\n }\r\n // find a valid data-event-value first\r\n else if (!tmpValue && v) {\r\n tmpValue = v;\r\n }\r\n // if we have a value, find the key\r\n else if (tmpValue && !tmpKey && k) {\r\n tmpKey = k;\r\n }\r\n\r\n if (tmpValue && tmpKey) {\r\n c++;\r\n trackData[tmpKey] = tmpValue;\r\n tmpValue = tmpKey = '';\r\n }\r\n }\r\n\r\n // only push to datalayer if we have at least one data besides the 'event'\r\n if (c > 0) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(trackData);\r\n }\r\n };\r\n\r\n return () => {\r\n $(() => {\r\n $(window.document).on('click', `[${ATTR_LAYER}] a`, (ev) => {\r\n clickHandler(ev.currentTarget);\r\n });\r\n\r\n // ------------------------------------------------\r\n // ----- data layer on sc form submit success -----\r\n //\r\n // @DEV NOTE: Use window.jQuery because we must reference to jQuery from Sitecore Form\r\n if (typeof window.jQuery !== 'undefined') {\r\n // global hook into ajaxSend to check if it is an sc form submission.\r\n window.jQuery(window.document).on('ajaxSend', (event, jqxhr, settings) => {\r\n // console.log('ajaxSend fired');\r\n \r\n if (settings.url.match(/\\/formbuilder/)) {\r\n // patch the converters to intercept text script response from server.\r\n if (typeof settings.converters !== 'undefined' && typeof settings.converters['text script'] !== 'undefined' && typeof settings.converters['text script org'] === 'undefined') {\r\n // parse submit URL to get Form ID, find the form element and get the Form Type\r\n var objUrl = new URL(settings.url);\r\n var params = objUrl.searchParams;\r\n var formId = params.get('fxb.FormItemId');\r\n //var formPrefix = params.get('fxb.HtmlPrefix');\r\n var frm = $('form[id$=\"_'+formId+'\"]');\r\n \r\n // if the form is found and it has form type\r\n if (frm && frm.length && frm.attr('data-form-type')) {\r\n // backup original text script converter handler\r\n settings.converters['text script org'] = settings.converters['text script'];\r\n // new text script converter handler\r\n settings.converters['text script'] = function(text) {\r\n //debugger;\r\n // check if it is a redirect submit action\r\n if (text.match(/window\\.location\\s*=/)) {\r\n // delay redirect submit action\r\n window.__aggScFormRedirects = window.__aggScFormRedirects || {};\r\n window.__aggScFormRedirects[formId] = {\r\n orgHandler: settings.converters['text script org'],\r\n orgText: text,\r\n formType: frm.attr('data-form-type')\r\n };\r\n }\r\n else {\r\n // call original\r\n settings.converters['text script org'].call(window, text);\r\n }\r\n };\r\n }\r\n }\r\n }\r\n });\r\n\r\n // all forms with Form Type are customized to fire `sc-forms-submit-success` event\r\n window.document.addEventListener('sc-forms-submit-success', (ev) => {\r\n if (ev && ev.detail && ev.detail.formId) {\r\n // get the form ID\r\n let formId = ev.detail.formId.toLowerCase().replace(/^\\{+/, '').replace(/\\}$/, '');\r\n\r\n // if this form ID has redirect submit action delayed\r\n if (formId && typeof window.__aggScFormRedirects !== 'undefined' && typeof window.__aggScFormRedirects[formId] !== 'undefined') {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event' : 'formSubmission',\r\n 'formType' : window.__aggScFormRedirects[formId]['formType']\r\n });\r\n\r\n window.__aggScFormRedirects[formId]['orgHandler'].call(window, window.__aggScFormRedirects[formId]['orgText']);\r\n }\r\n // either this form doesn't have redirect submit action delayed or\r\n // server returns HTML which can contain server side error message or other content.\r\n else {\r\n // check if the HTML is a form and contains server side error\r\n //\r\n \r\n // find the form\r\n let elForm = window.document.querySelector(`form[id$=_${formId}]`);\r\n // find form error message (server side validation) element\r\n let elErrors = elForm ? elForm.querySelector(`:scope .validation-summary-errors`) : null;\r\n // get form type\r\n let formType = elForm ? elForm.getAttribute('data-form-type') || '' : '';\r\n // get error message\r\n let txtErrors = null;\r\n\r\n if (elErrors) {\r\n txtErrors = (elErrors.textContent || '').trim();\r\n }\r\n\r\n // if not error and form type defined\r\n if (!txtErrors && formType) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event' : 'formSubmission',\r\n 'formType' : formType\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // --\r\n });\r\n };\r\n})(jQuery, window);\r\n","import emitter from '../../utils/emitter';\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n // ready, afterDestroy, afterMinimize, afterMaximize\r\n const HOOK_FUNCTIONS = ['onButtonStatusChange', 'onHelpButtonClick', 'hideHelpButton', 'showHelpButton'];\r\n \r\n class SalesforceLiveAgent {\r\n constructor() {\r\n this._initialized = false;\r\n this._isLiveChatAvailable = null;\r\n this._svc = null;\r\n\r\n this._waitReady();\r\n }\r\n\r\n getInstance() {\r\n return this._svc;\r\n }\r\n \r\n _waitReady() {\r\n if (typeof window.embedded_svc === 'undefined') {\r\n window.setTimeout(this._waitReady.bind(this), 200);\r\n }\r\n\r\n emitter.fire('livechat-ready');\r\n this._ready();\r\n }\r\n\r\n _ready() {\r\n if (this._initialized) {\r\n return;\r\n }\r\n\r\n this._initialized = true;\r\n\r\n this._svc = window.embedded_svc;\r\n\r\n this._bindEvents();\r\n this._hook();\r\n }\r\n\r\n _hook() {\r\n if (!this._svc || this._eventsHook) {\r\n return;\r\n }\r\n\r\n this._eventsHook = true;\r\n\r\n const svc = this._svc;\r\n\r\n // make sure it has all target functions\r\n for (let i = 0; i < HOOK_FUNCTIONS.length; i++) {\r\n if (typeof svc[HOOK_FUNCTIONS[i]] !== 'function') {\r\n // console.log(`SalesforceLiveAgent init error, ${HOOK_FUNCTIONS[i]} is not a function.`)\r\n return false;\r\n }\r\n }\r\n\r\n // hook into the original function\r\n for (let i = 0; i < HOOK_FUNCTIONS.length; i++) {\r\n this._hookLiveChatFunction(svc, HOOK_FUNCTIONS[i]);\r\n }\r\n }\r\n\r\n _bindEvents() {\r\n if (!this._svc || this._eventsBound) {\r\n return;\r\n }\r\n\r\n this._eventsBound = true;\r\n }\r\n\r\n /**\r\n * Hook into the original function.\r\n * \r\n * @param {Object} svc Salesforce Live Agent instance (window.embedded_svc)\r\n * @param {String} name Function name\r\n */\r\n _hookLiveChatFunction(svc, name) {\r\n if (typeof svc[name] === 'function' && typeof svc[`__aggreko_hook_org_${name}`] === 'undefined') {\r\n svc[`__aggreko_hook_org_${name}`] = svc[name];\r\n\r\n svc[name] = (...args) => {\r\n // call our function\r\n this._liveChatAvailabilityChanged(svc);\r\n\r\n // call and return with original function result\r\n //console.log('_hookLiveChatFunction', name, args);\r\n return svc[`__aggreko_hook_org_${name}`].apply(svc, args);\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Custom function that run before the original callback function.\r\n * \r\n * @param {Object} svc Salesforce Live Agent instance (window.embedded_svc)\r\n */\r\n _liveChatAvailabilityChanged(svc) {\r\n var b = (svc && typeof svc.isButtonDisabled !== 'undefined' && svc.isButtonDisabled !== true);\r\n var c = (svc && typeof svc.componentLoaded !== 'undefined' && svc.componentLoaded !== true);\r\n c = c && (svc && typeof svc.componentInitInProgress !== 'undefined' && svc.componentInitInProgress !== true);\r\n\r\n // console.log('bbbccc', b, c, svc.componentInitInProgress, svc.componentLoaded);\r\n\r\n //if (this._isLiveChatAvailable !== b) {\r\n this._isLiveChatAvailable = b;\r\n\r\n // simply emit the event, to be consumed by component JS.\r\n emitter.fire('livechat-availability-change', {\r\n available: this._isLiveChatAvailable,\r\n initInProgress: c\r\n });\r\n //}\r\n }\r\n }\r\n\r\n let instance = null;\r\n\r\n const init = () => {\r\n if (!instance) {\r\n instance = new SalesforceLiveAgent();\r\n }\r\n return instance;\r\n };\r\n\r\n return init;\r\n \r\n})(jQuery, window);","/**\r\n * jQuery window `isloaded` special event.\r\n * \r\n * This works for window object only. The difference with 'load' event is that,\r\n * binding 'isloaded' after window is loaded will trigger the handler immediately.\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let windowLoadEventObj = null;\r\n let windowIsLoaded = false;\r\n let skipSetup = false;\r\n\r\n /**\r\n * Check if the specified object is a Window\r\n * \r\n * @param {Object} obj \r\n * @returns \r\n */\r\n const isWindow = obj => obj !== null && obj === obj.window;\r\n\r\n /**\r\n * Window onload event handler\r\n * \r\n * @param {Event} ev \r\n */\r\n const windowLoadHandler = (ev) => {\r\n windowIsLoaded = true;\r\n windowLoadEventObj = ev;\r\n trigger(createEvent('isloaded', windowLoadEventObj), window);\r\n };\r\n\r\n /**\r\n * Bind to window.onload event\r\n */\r\n const setupOnce = () => {\r\n if (!skipSetup) {\r\n skipSetup = true;\r\n\r\n window.addEventListener('load', windowLoadHandler, true);\r\n }\r\n };\r\n\r\n /**\r\n * Create event\r\n * \r\n * @param {string} type \r\n * @param {Event} origEvent \r\n * @returns \r\n */\r\n const createEvent = (type, origEvent) => {\r\n const e = $.extend(\r\n new $.Event(),\r\n origEvent,\r\n {\r\n type: type,\r\n isSimulated: true,\r\n timeStamp: Date.now()\r\n }\r\n );\r\n\r\n return e;\r\n };\r\n\r\n /**\r\n * Trigger event on the specified element.\r\n * \r\n * @param {Event} event \r\n * @param {HTMLElement} elem \r\n */\r\n const trigger = (event, elem) => {\r\n $.event.trigger(event, null, elem);\r\n };\r\n\r\n return () => {\r\n setupOnce();\r\n\r\n $.event.special.isloaded = {\r\n // runs on every binding\r\n add: function(handler) {\r\n if (isWindow(this)) {\r\n // already loaded, just trigger the event, \r\n // otherwise windowLoadHandler() will trigger it after window load event\r\n if (windowIsLoaded) {\r\n window.setTimeout(() => {\r\n trigger(createEvent('isloaded', windowLoadEventObj), this);\r\n });\r\n }\r\n }\r\n else {\r\n // eslint-disable-next-line no-console\r\n console.warn('isloaded only works for window object.');\r\n }\r\n }\r\n };\r\n };\r\n\r\n})(jQuery, window);","/**\r\n * Add 'ariaToggle', 'ariaShow' and 'ariaHide' plugins.\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n let initialized = false;\r\n\r\n const toggleAria = (element, show) => {\r\n if (show == null) {\r\n show = !$(element).is(':visible');\r\n }\r\n\r\n if (show) {\r\n $(this).removeAttr('aria-hidden');\r\n }\r\n else {\r\n $(this).attr('aria-hidden', 'true');\r\n }\r\n };\r\n\r\n return () => {\r\n if (initialized) {\r\n return;\r\n }\r\n\r\n initialized = true;\r\n \r\n ['toggle', 'show', 'hide'].forEach(name => {\r\n const orig = $.fn[name];\r\n const ariaName = 'aria' + name.substr(0, 1).toUpperCase() + name.substr(1);\r\n \r\n $.fn[ariaName] = function() {\r\n if (name === 'show' || name === 'hide') {\r\n if (name === 'show') {\r\n $(this).removeAttr('aria-hidden');\r\n }\r\n else {\r\n $(this).attr('aria-hidden', 'true');\r\n }\r\n \r\n return orig.apply(this, arguments);\r\n }\r\n \r\n // toggle\r\n if (typeof arguments[0] === 'boolean') {\r\n $(this).each(function() {\r\n toggleAria(this, arguments[0]);\r\n });\r\n \r\n return orig.apply(this, arguments);\r\n }\r\n else {\r\n $(this).each(function() {\r\n toggleAria(this);\r\n });\r\n \r\n return orig.apply(this, arguments);\r\n }\r\n };\r\n });\r\n };\r\n})(jQuery, window);","/**\r\n * Add 'ariaToggle', 'ariaShow' and 'ariaHide' plugins.\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n 'use strict';\r\n\r\n const DATA_KEY = 'save-form-storage-id';\r\n const DATA_KEY_VALUE_PREFIX = '__form-storage-';\r\n\r\n /**\r\n * Whether or not a object has the specified property as its own property.\r\n * \r\n * @param {Object} obj\r\n * @param {String} prop\r\n * @return {Boolean}\r\n */\r\n const objectHasOwnProperty = (obj, prop) => {\r\n return Object.prototype.hasOwnProperty.call(obj, prop);\r\n };\r\n\r\n let guid = 1;\r\n let dataStorage = {};\r\n\r\n function saveForm(form) {\r\n let data = [];\r\n let storageId = $(form).data(DATA_KEY);\r\n\r\n if (!storageId) {\r\n storageId = DATA_KEY_VALUE_PREFIX + guid++;\r\n $(form).data(DATA_KEY, storageId);\r\n }\r\n\r\n data = $(':input', form).map((idx, elem) => {\r\n if (elem.nodeName === 'SELECT') {\r\n if (elem.multiple) {\r\n return {\r\n elem: elem,\r\n checkedOptions: $('option:checked', elem).get()\r\n };\r\n }\r\n else {\r\n return {\r\n elem: elem,\r\n selectedIndex: elem.selectedIndex\r\n };\r\n }\r\n }\r\n // do not save password && file input\r\n else if (elem.nodeName === 'INPUT' && elem.type === 'password') {\r\n return {\r\n elem: elem,\r\n value: ''\r\n };\r\n }\r\n else if (elem.nodeName === 'INPUT' && elem.type === 'file') {\r\n return { };\r\n }\r\n else if (elem.nodeName === 'INPUT' && (elem.type === 'checkbox' || elem.type === 'radio')) {\r\n return {\r\n elem: elem,\r\n checked: elem.checked\r\n };\r\n }\r\n else {\r\n return {\r\n elem: elem,\r\n value: elem.value\r\n };\r\n }\r\n }).get();\r\n\r\n dataStorage[storageId] = data;\r\n \r\n return data;\r\n }\r\n\r\n function restoreForm(form) {\r\n let data;\r\n let storageId = $(form).data(DATA_KEY);\r\n\r\n if (!storageId) {\r\n return;\r\n }\r\n\r\n data = dataStorage[storageId];\r\n\r\n if (!data || !Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n const inputs = $(':input', form).get();\r\n\r\n data.forEach(entry => {\r\n const elem = entry.elem;\r\n if (elem) {\r\n const idx = inputs.indexOf(elem);\r\n\r\n if (idx >= 0) {\r\n inputs.splice(idx, 1);\r\n\r\n if (objectHasOwnProperty(entry, 'checked')) {\r\n elem.checked = entry.checked;\r\n }\r\n else if (objectHasOwnProperty(entry, 'checkedOptions')) {\r\n const checkeds = entry.checkedOptions;\r\n\r\n $('option', elem).each(function() {\r\n this.selected = checkeds.includes(this);\r\n });\r\n }\r\n else if (objectHasOwnProperty(entry, 'selectedIndex')) {\r\n elem.selectedIndex = entry.selectedIndex;\r\n }\r\n else if (objectHasOwnProperty(entry, 'value')) {\r\n elem.value = entry.value;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n \r\n $.fn['saveForm'] = function() {\r\n return this.each(function() {\r\n saveForm(this);\r\n });\r\n };\r\n\r\n $.fn['restoreForm'] = function() {\r\n return this.each(function() {\r\n restoreForm(this);\r\n });\r\n };\r\n})(jQuery, window);","/**\r\n * Pointer Event setup.\r\n * Load Pointer Event polyfill on browsers without native support.\r\n * \r\n * This needs to run in highest priority (not within DOM ready or async)\r\n */\r\nexport default () => {\r\n if (!window.PointerEvent) {\r\n import('pepjs');\r\n }\r\n};","// init scripts\r\nimport ready from './init/ready';\r\nimport focusable from './init/focusable';\r\nimport scroll from './init/scroll';\r\nimport detect from './init/detect';\r\nimport viewport from './init/viewport';\r\nimport backtotop from './init/backtotop';\r\nimport forminputs from './init/form-inputs';\r\nimport lightbox from './init/lightbox';\r\nimport fone from './init/fone';\r\nimport goalTracking from './init/goal-tracking';\r\nimport dataEventLayer from './init/data-event-layer';\r\nimport salesforceLiveAgent from './init/salesforce-live-agent';\r\n\r\n// setup scripts\r\nimport jquery from './setup/jquery';\r\nimport pointerEvent from './setup/pointer-event';\r\n/**\r\n * Global initialization.\r\n *\r\n * This has to run after as early as possible, *after* DOM ready.\r\n */\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n /**\r\n * Global initialization\r\n */\r\n const init = () => {\r\n ready();\r\n focusable();\r\n viewport();\r\n scroll();\r\n detect();\r\n backtotop();\r\n forminputs();\r\n lightbox();\r\n fone();\r\n goalTracking();\r\n dataEventLayer();\r\n window._aggrekoLiveChat = salesforceLiveAgent();\r\n };\r\n\r\n /**\r\n * Global setup\r\n * \r\n * This contains only critical setup and that to runs right after main JS is loaded\r\n */\r\n const setup = () => {\r\n pointerEvent();\r\n jquery();\r\n };\r\n\r\n return {\r\n init,\r\n setup\r\n };\r\n})(jQuery, window);\r\n","/**\r\n * jQuery setup.\r\n * \r\n * This needs to run in highest priority (not within DOM ready or async)\r\n */\r\nimport specialEventIsLoaded from './jquery/special-event-isloaded';\r\nimport ariaVisibilityPlugins from './jquery/aria-toggle';\r\n\r\n// plugins\r\nimport './jquery/save-form';\r\n\r\nexport default () => {\r\n // setup 'isloaded' (for window only) special event\r\n specialEventIsLoaded();\r\n ariaVisibilityPlugins();\r\n};","// global initializer\r\nimport global from './global';\r\n\r\n// utilities\r\nimport utils from './utils';\r\n\r\n// prevent error on global script using condition like `if ($) {...}`\r\nif (typeof window.$ === 'undefined') {\r\n window.$ = false;\r\n}\r\n\r\n// must run first in sync\r\nglobal.setup();\r\n\r\n// main initialization\r\n(async ($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n $(function() {\r\n // invoke global initialization\r\n global.init();\r\n\r\n // invoke all components initialization\r\n const context = window.document;\r\n utils.component.invoke(context);\r\n });\r\n})(jQuery, window);","/**\r\n * Global emitter\r\n */\r\nimport {globalEvent as emitter} from '@billjs/event-emitter';\r\nexport default emitter;","/**\r\n * Browser features detection\r\n */\r\n\r\n/**\r\n * Detect hover\r\n * \r\n * @returns {Boolean}\r\n */\r\nconst canHover = () => {\r\n return !(!window.matchMedia('(hover: hover)').matches || ('ontouchstart' in window) );\r\n};\r\n\r\nexport default {\r\n noHover: !canHover()\r\n};","/**\r\n * Utility functions\r\n */\r\n\r\nconst RE_REGEX_CHAR = /[\\\\^$.*+?()[\\]{}|]/g;\r\n\r\n/**\r\n * Determine if application is in Experience Editor mode. \r\n * \r\n * @returns {Boolean}\r\n */\r\nexport const isExperienceEditorMode = () => {\r\n return typeof window.Sitecore !== 'undefined' && typeof window.Sitecore.WebEditSettings !== 'undefined' && window.Sitecore.WebEditSettings.editing;\r\n};\r\n\r\nexport const focusableChildren = (element) => {\r\n var focusables = [\r\n 'a',\r\n 'button',\r\n 'input',\r\n 'textarea',\r\n 'select',\r\n 'details',\r\n '[tabindex]',\r\n '[contenteditable=\"true\"]'\r\n ].map(function (selector) {\r\n return selector + ':not([tabindex^=\"-\"])';\r\n }).join(', ');\r\n\r\n if (!element) {\r\n element = document.body;\r\n }\r\n else if (typeof element === 'object' && element.jquery) {\r\n element = element[0];\r\n }\r\n else if (typeof jQuery !== 'undefined') {\r\n element = jQuery(element);\r\n if (element.length) {\r\n element = element[0];\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n\r\n if (typeof element.querySelectorAll !== 'function') {\r\n return [];\r\n }\r\n\r\n\r\n return [...element.querySelectorAll(focusables)].filter(elem => {\r\n if (elem.getAttribute('disabled') === null && !elem.classList.contains('disabled') && elem.style['display'] !== 'none' && elem.getClientRects().length > 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n};\r\n\r\nexport const focusableChildrenAll = (element) => {\r\n var focusables = [\r\n 'a',\r\n 'button',\r\n 'input',\r\n 'textarea',\r\n 'select',\r\n 'details',\r\n '[tabindex]',\r\n '[contenteditable=\"true\"]'\r\n ].join(', ');\r\n\r\n if (!element) {\r\n element = document.body;\r\n }\r\n else if (typeof element === 'object' && element.jquery) {\r\n element = element[0];\r\n }\r\n else if (typeof jQuery !== 'undefined') {\r\n element = jQuery(element);\r\n if (element.length) {\r\n element = element[0];\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n\r\n if (typeof element.querySelectorAll !== 'function') {\r\n return [];\r\n }\r\n\r\n return [...element.querySelectorAll(focusables)];\r\n};\r\n\r\n/**\r\n * A simple debounce util\r\n * \r\n * @param {Function} cb \r\n * @param {Integer} threshold \r\n * @returns {Function}\r\n */\r\nexport const debounce = (cb, threshold = 200) => {\r\n let timerId;\r\n let cbArgs = null;\r\n\r\n function clearTimer() {\r\n if (timerId) {\r\n window.clearTimeout(timerId);\r\n timerId = null;\r\n }\r\n }\r\n\r\n function setTimer() {\r\n clearTimer();\r\n timerId = window.setTimeout(runIt, threshold);\r\n }\r\n\r\n function runIt() {\r\n clearTimer();\r\n cb.apply(null, cbArgs);\r\n }\r\n\r\n function debounced(...args) {\r\n cbArgs = args;\r\n setTimer();\r\n }\r\n\r\n debounced.cancel = () => {\r\n clearTimer();\r\n };\r\n\r\n return debounced;\r\n};\r\n\r\n\r\n/**\r\n * Whether or not a object has the specified property as its own property.\r\n * \r\n * @param {Object} obj\r\n * @param {String} prop\r\n * @return {Boolean}\r\n */\r\nexport const objectHasOwnProperty = (obj, prop) => {\r\n return Object.prototype.hasOwnProperty.call(obj, prop);\r\n};\r\n\r\nexport default {\r\n /**\r\n * A simple debounce util\r\n * \r\n * @param {Function} cb \r\n * @param {Integer} threshold \r\n * @returns {Function}\r\n */\r\n debounce: (cb, threshold = 200) => {\r\n let timerId;\r\n let cbArgs = null;\r\n\r\n function clearTimer() {\r\n if (timerId) {\r\n window.clearTimeout(timerId);\r\n timerId = null;\r\n }\r\n }\r\n\r\n function setTimer() {\r\n clearTimer();\r\n timerId = window.setTimeout(runIt, threshold);\r\n }\r\n\r\n function runIt() {\r\n clearTimer();\r\n cb.apply(null, cbArgs);\r\n }\r\n\r\n function debounced(...args) {\r\n cbArgs = args;\r\n setTimer();\r\n }\r\n\r\n debounced.cancel = () => {\r\n clearTimer();\r\n };\r\n\r\n return debounced;\r\n },\r\n\r\n animationFrame: (cb) => {\r\n let timerId;\r\n let cbArgs = null;\r\n\r\n function clearTimer() {\r\n if (timerId) {\r\n window.cancelAnimationFrame(timerId);\r\n timerId = null;\r\n }\r\n }\r\n\r\n function setTimer() {\r\n clearTimer();\r\n timerId = window.requestAnimationFrame(runIt);\r\n }\r\n\r\n function runIt() {\r\n clearTimer();\r\n cb.apply(null, cbArgs);\r\n }\r\n\r\n function debounced(...args) {\r\n cbArgs = args;\r\n setTimer();\r\n }\r\n\r\n return debounced;\r\n },\r\n\r\n /**\r\n * Remove duplication from and return as new array.\r\n * \r\n * @param {Array} arr \r\n * @returns {Array}\r\n */\r\n uniqueArray: (arr) => {\r\n return arr.filter(function (el, index, arr) {\r\n return index === arr.indexOf(el);\r\n });\r\n },\r\n\r\n reRegexChar: RE_REGEX_CHAR,\r\n\r\n escapeRegex: str => str.replace(RE_REGEX_CHAR, '\\\\$&'),\r\n\r\n /**\r\n * Group array items into a array of specified chunk size.\r\n * \r\n * @param {Array} arr \r\n * @param {Integer} size Chunk size, must be integer value greater then 1.\r\n * @return {Array}\r\n */\r\n chunkArray: (arr, size) => {\r\n try {\r\n size = Math.floor(Number(size));\r\n }\r\n catch (err) {\r\n size = 0;\r\n }\r\n\r\n if (size && size > 1) {\r\n const res = [];\r\n for (let i = 0; i < arr.length; i += size) {\r\n const chunk = arr.slice(i, i + size);\r\n res.push(chunk);\r\n }\r\n return res;\r\n }\r\n\r\n return arr;\r\n },\r\n\r\n focusableChildren: focusableChildren,\r\n\r\n focusableChildrenAll: focusableChildrenAll,\r\n\r\n isExperienceEditorMode: isExperienceEditorMode,\r\n\r\n objectHasOwnProperty: objectHasOwnProperty\r\n};","/**\r\n * Component tools\r\n */\r\nimport { EventEmitter } from '@billjs/event-emitter';\r\nimport utility from './functions';\r\nimport BaseComponent from '../components/component';\r\n\r\nexport const getComponent = (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n /**\r\n * Get component instance\r\n * \r\n * @param {jQuery|HTMLElement} element\r\n * @param {String} [key] \r\n * @return {BaseComponent|null} component instance\r\n */\r\n return function getComponent(element, key) {\r\n const el = $(element);\r\n\r\n if (!key) {\r\n key = el.attr('data-component');\r\n }\r\n\r\n if (!key) {\r\n return null;\r\n }\r\n \r\n if (el.is(`[data-component=\"${key}\"]`)) {\r\n const inst = el.data(key);\r\n if (inst instanceof BaseComponent) {\r\n return inst;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n})(jQuery, window);\r\n\r\n\r\nexport const queryComponents = (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n /**\r\n * Query components under specific context (exclusive).\r\n * \r\n * @param {String} [key]\r\n * @param {jQuery|HTMLElement|string} context \r\n */\r\n return function queryComponents(key, element) {\r\n let el = $(element || document.body);\r\n let elems;\r\n\r\n if (typeof key === 'string' && key) {\r\n elems = el.find(`[data-component=\"${key}\"]`);\r\n }\r\n else {\r\n elems = el.find(`[data-component]`);\r\n }\r\n\r\n elems = elems\r\n .map((idx, elem) => {\r\n const name = $(elem).attr('data-component');\r\n if (!name) {\r\n return null;\r\n }\r\n\r\n const inst = getComponent(elem, name);\r\n if (!inst) {\r\n return null;\r\n }\r\n\r\n return {\r\n elem,\r\n inst,\r\n name\r\n };\r\n })\r\n .get()\r\n .filter(v => v !== null);\r\n\r\n return elems;\r\n };\r\n})(jQuery, window);\r\n\r\nexport const waitInnerComponentsInitialized = (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n function stillLoading(obj) {\r\n obj.comps = obj.comps.filter((idx, elem) => {\r\n const inst = getComponent(elem);\r\n if (inst) {\r\n if (inst.element && inst.initializedClass) {\r\n return !inst.element.hasClass(inst.initializedClass);\r\n }\r\n\r\n return false;\r\n }\r\n \r\n return true;\r\n });\r\n\r\n return obj.comps.length;\r\n }\r\n\r\n /**\r\n * Wait all compoments under a specific element initialized.\r\n * \r\n * @param {jQuery|HTMLElement} element\r\n * @param {String[]} names \r\n */\r\n return function waitInnerComponentsInitialized(element, names = []) {\r\n return new Promise((resolve, reject) => {\r\n const el = $(element);\r\n let allComps = $(`[data-component]`, el);\r\n\r\n if (names) {\r\n if (typeof names === 'string') {\r\n names = [names];\r\n }\r\n if (Array.isArray(names) && names.length) {\r\n allComps = allComps.filter((idx, elem) => {\r\n return names.includes($(elem).attr('data-component'));\r\n });\r\n }\r\n }\r\n\r\n const obj = {\r\n comps: allComps\r\n };\r\n \r\n const checkLoading = () => {\r\n if (stillLoading(obj)) {\r\n window.setTimeout(() => {\r\n checkLoading();\r\n }, 1);\r\n }\r\n else {\r\n resolve(true);\r\n }\r\n };\r\n\r\n try {\r\n checkLoading();\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n \r\n };\r\n})(jQuery, window);\r\n\r\n\r\nexport default (($, /* eslint-disable */ window, undefined /* eslint-enable */) => {\r\n const SELECTORS = 'selectors';\r\n const baseSelectors = BaseComponent[SELECTORS] || {};\r\n\r\n let loadedComponents = {};\r\n let loaders = {};\r\n\r\n /**\r\n * Extends a Component Class selectors, make it inherits from Base Class\r\n * \r\n * @param {Class} componentClass \r\n */\r\n const extendSelectors = (componentClass) => {\r\n const selectors = componentClass[SELECTORS] || {};\r\n componentClass[SELECTORS] = $.extend(true, {}, baseSelectors, selectors);\r\n };\r\n\r\n /**\r\n * Make Component Class selectors readonly.\r\n * \r\n * @param {Class} componentClass \r\n */\r\n const protectSelectors = (componentClass) => {\r\n if (componentClass[SELECTORS]) {\r\n const descriptor = Object.getOwnPropertyDescriptor(componentClass, SELECTORS);\r\n if (!descriptor.configurable || !descriptor.writable) {\r\n return;\r\n }\r\n }\r\n\r\n const selectors = componentClass.selectors || {};\r\n delete componentClass.selectors;\r\n\r\n Object.defineProperty(componentClass, SELECTORS, {\r\n value: selectors,\r\n configurable: false,\r\n writable: false,\r\n enumerable: true\r\n });\r\n };\r\n\r\n\r\n /**\r\n * Load a component\r\n *\r\n * @param {String} name Component Name\r\n * @returns {Promise}\r\n */\r\n const loadComponent = async (name) => {\r\n if (typeof loadedComponents[name] !== 'undefined') {\r\n return loadedComponents[name];\r\n }\r\n\r\n let needLoad = false;\r\n\r\n if (typeof loaders[name] === 'undefined') {\r\n loaders[name] = new EventEmitter();\r\n needLoad = true;\r\n }\r\n\r\n const ret = new Promise((resolve, reject) => {\r\n loaders[name].on('loaded', (ev) => {\r\n resolve(ev.data);\r\n });\r\n loaders[name].on('error', (ev) => {\r\n reject(ev.data);\r\n });\r\n });\r\n\r\n if (needLoad) {\r\n try {\r\n import(`../components/${name}.js`)\r\n .then(({ default: componentClass }) => {\r\n\r\n if (typeof componentClass === 'function') {\r\n extendSelectors(componentClass);\r\n protectSelectors(componentClass);\r\n loadedComponents[name] = componentClass;\r\n } else {\r\n // the imported value is not a function, means it is not a class\r\n loadedComponents[name] = false;\r\n }\r\n\r\n window.setTimeout(() => {\r\n loaders[name].fire('loaded', componentClass);\r\n });\r\n })\r\n .catch(err => {\r\n window.setTimeout(() => {\r\n loaders[name].fire('error', err);\r\n });\r\n });\r\n }\r\n catch (err) {\r\n // load error, stop trying to load it\r\n loadedComponents[name] = false;\r\n\r\n window.setTimeout(() => {\r\n loaders[name].fire('error', err);\r\n });\r\n }\r\n }\r\n\r\n return ret;\r\n };\r\n\r\n /**\r\n * Init specific component against given component elements (jQuery elements).\r\n * \r\n * @param {String} name \r\n * @param {HTMLElement[]} components \r\n */\r\n const initComponents = async (name, components) => {\r\n loadComponent(name)\r\n .then(componentClass => {\r\n if (componentClass) {\r\n components.filter(`[data-component=\"${name}\"]`).each(async (idx, elem) => {\r\n let component = getComponent(elem, name);\r\n\r\n if (!component) {\r\n // try to create instance\r\n try {\r\n component = new componentClass(elem);\r\n\r\n } catch (err) {\r\n component = null;\r\n\r\n // ignore\r\n // eslint-disable-next-line no-console\r\n console.log(err);\r\n }\r\n\r\n // execute component init script\r\n if (component) {\r\n try {\r\n component.init();\r\n $(elem).data(name, component);\r\n }\r\n catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.log(err);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n })\r\n .catch(err => {\r\n // ignore\r\n // eslint-disable-next-line no-console\r\n console.warn('error loading component', name, err);\r\n });\r\n };\r\n\r\n return {\r\n /**\r\n * Invoke all components initialization for specific context\r\n * \r\n * @param {HTMLElement} [context] initialization context\r\n */\r\n invoke: context => {\r\n context = context || window.document || null;\r\n\r\n // query all elements with `data-component` attribute\r\n const components = $(`[data-component]`, context);\r\n\r\n // remove duplicates\r\n const componentNames = utility.uniqueArray(components.map((idx, elem) => {\r\n var s = ($(elem).data('component') || '').trim();\r\n return s ? s : null;\r\n }).get());\r\n\r\n // for each component:\r\n // - try to import the component JS, if it doesn't exist or failed, ignore.\r\n // - find all elements of this component then create instance for each of them.\r\n componentNames.forEach(name => {\r\n initComponents(name, components);\r\n });\r\n },\r\n\r\n getComponent: getComponent,\r\n queryComponents: queryComponents,\r\n waitInnerComponentsInitialized: waitInnerComponentsInitialized\r\n };\r\n})(jQuery, window);","import component from './component';\r\n// import patchSlickCarousel from './patch-slick-carousel';\r\nimport breakpoints from './breakpoints';\r\nimport emitter from './emitter';\r\nimport modules from './modules';\r\nimport functions from './functions';\r\nimport feature from './feature';\r\n// import tabStorage from './tab-storage';\r\nimport transitionEnd from './transition-end';\r\n\r\nexport default {\r\n component,\r\n emitter,\r\n // tabStorage,\r\n feature,\r\n transitionEnd,\r\n // patchSlickCarousel,\r\n ...breakpoints,\r\n ...functions,\r\n ...modules\r\n};\r\n","// ---- DEV NOTE: must match with CSS (scss/main/_variables.scss and scss/inc/mixins) ----- //\r\nexport default {\r\n breakpoints: {\r\n bs: {\r\n 'xs': 0,\r\n 'sm': 576,\r\n 'md': 768,\r\n 'lg': 992,\r\n 'xl': 1200,\r\n 'xxl': 1400\r\n },\r\n aggreko: {\r\n 'small': 576,\r\n 'medium': 992,\r\n 'medium-large': 1200,\r\n 'large': 1400,\r\n 'larger': 1630\r\n }\r\n }\r\n};","/**\r\n * Modules loader\r\n *\r\n * Load non-critical module, i.e. JS lib that needed by some (but not all) components.\r\n * @example\r\n * import utils from '../utils';\r\n * utils.modules.load('splide').then(Splide => {\r\n * // Splide is the imported module\r\n * }).catch(err => {\r\n * console.error(err);\r\n * })\r\n */\r\nimport {EventEmitter} from '@billjs/event-emitter';\r\n\r\n/**\r\n * Keep loaded modules list\r\n *\r\n * @type Object\r\n */\r\nconst loadedModules = {};\r\n\r\n/**\r\n * Available modules list and how to import them.\r\n *\r\n * @type Object\r\n */\r\nconst availableModules = {\r\n 'splide': () => {\r\n return import('@splidejs/splide');\r\n },\r\n 'plyr': () => {\r\n return import('plyr');\r\n },\r\n 'handlebars': {\r\n 'import': () => {\r\n return import('handlebars/dist/handlebars.js');\r\n },\r\n 'afterImport': (TheModule) => {\r\n return import('./handlebars')\r\n .then(({default: __}) => {\r\n __.setup(TheModule);\r\n });\r\n }\r\n } \r\n};\r\n\r\n/**\r\n * List of individual module loader.\r\n * @type {Array }\r\n */\r\nconst loaders = {};\r\n\r\n/**\r\n * Load a module\r\n *\r\n * @param {String} moduleName Module Name\r\n * @returns\r\n */\r\nconst loadModule = async (moduleName) => {\r\n if (typeof availableModules[moduleName] === 'undefined') {\r\n throw new Error(`${moduleName} is not available`);\r\n }\r\n\r\n if (typeof loadedModules[moduleName] !== 'undefined') {\r\n return loadedModules[moduleName];\r\n }\r\n\r\n const _module = availableModules[moduleName];\r\n let importer, afterImport;\r\n\r\n if (typeof _module === 'function') {\r\n importer = _module;\r\n }\r\n else if (typeof _module['import'] === 'function') {\r\n importer = _module['import'];\r\n afterImport = _module['afterImport'];\r\n }\r\n\r\n if (!importer) {\r\n throw new Error(`${moduleName} is not correctly defined.`);\r\n }\r\n \r\n var needLoad = false;\r\n\r\n if (typeof loaders[moduleName] === 'undefined') {\r\n loaders[moduleName] = new EventEmitter();\r\n needLoad = true;\r\n }\r\n\r\n const ret = new Promise((resolve, reject) => {\r\n loaders[moduleName].on('loaded', (ev) => {\r\n resolve(ev.data);\r\n });\r\n loaders[moduleName].on('error', (ev) => {\r\n reject(ev.data);\r\n });\r\n });\r\n\r\n if (needLoad) {\r\n try {\r\n importer()\r\n .then(({default: TheModule}) => {\r\n loadedModules[moduleName] = TheModule;\r\n\r\n if (typeof afterImport === 'function') {\r\n afterImport(TheModule).then(() => {\r\n window.setTimeout(() => {\r\n loaders[moduleName].fire('loaded', TheModule);\r\n });\r\n });\r\n }\r\n else {\r\n window.setTimeout(() => {\r\n loaders[moduleName].fire('loaded', TheModule);\r\n });\r\n }\r\n })\r\n .catch(err => {\r\n window.setTimeout(() => {\r\n loaders[moduleName].fire('error', err);\r\n });\r\n });\r\n }\r\n catch (err) {\r\n window.setTimeout(() => {\r\n loaders[moduleName].fire('error', err);\r\n });\r\n }\r\n }\r\n\r\n return ret;\r\n};\r\n\r\n/**\r\n * Get (or load if has not been loaded yet) a Module.\r\n *\r\n * @param {String} name Module Name\r\n * @returns\r\n */\r\nexport const getModule = async (name) => {\r\n return new Promise((resolve, reject) => {\r\n if (typeof availableModules[name] === 'undefined') {\r\n reject(new Error(`${name} is not available`));\r\n return;\r\n }\r\n\r\n loadModule(name)\r\n .then((TheModule) => {\r\n resolve(TheModule);\r\n })\r\n .catch(err => {\r\n reject(err);\r\n });\r\n });\r\n};\r\n\r\n\r\nexport default {\r\n modules: {\r\n load: getModule\r\n }\r\n};","/**\r\n * transitionEnd wrapper\r\n */\r\nexport default ((window) => {\r\n 'use strict';\r\n\r\n let eventName;\r\n const durationPadding = 5;\r\n \r\n /**\r\n * Get transition-duration CSS value from a specified element.\r\n * Returns 0 if undefined.\r\n * If the specified element has multiple transitions, return the first one.\r\n * \r\n * @param {HTMLElement} element \r\n * @returns {Float}\r\n */\r\n const getTransitionDurationFromElement = element => {\r\n if (!element) {\r\n return 0;\r\n }\r\n\r\n // get transition-duration of the element\r\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\r\n\r\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\r\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\r\n\r\n // return 0 if element or transition duration is not found\r\n if (!floatTransitionDuration && !floatTransitionDelay) {\r\n return 0;\r\n }\r\n\r\n // of multiple durations are defined, take the first\r\n transitionDuration = transitionDuration.split(',')[0];\r\n transitionDelay = transitionDelay.split(',')[0];\r\n\r\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * 1000;\r\n };\r\n\r\n /**\r\n * Determine transitionEnd event name.\r\n * \r\n * @returns String\r\n */\r\n const getTransitionEndEventName = () => {\r\n // get from cache\r\n if (eventName !== undefined) {\r\n return eventName;\r\n }\r\n\r\n eventName = '';\r\n\r\n try {\r\n const transitions = {\r\n transition: 'transitionend',\r\n WebkitTransition: 'webkitTransitionEnd',\r\n MozTransition: 'transitionend',\r\n OTransition: 'oTransitionEnd otransitionend',\r\n };\r\n\r\n for (let t in transitions) {\r\n if (window.document.body.style[t] !== undefined) {\r\n eventName = transitions[t];\r\n break;\r\n }\r\n }\r\n }\r\n catch (err) {\r\n eventName = '';\r\n }\r\n\r\n return eventName;\r\n };\r\n\r\n\r\n /**\r\n * TransitionEnd class.\r\n * Wrap functionality and provide method to 'unbind' the event.\r\n */\r\n class TransitionEnd {\r\n constructor(element, callback, fallbackDuration) {\r\n this.element = element;\r\n this.callback = callback;\r\n this.fallbackDuration = Number.parseFloat(fallbackDuration) || 0;\r\n this.eventName = getTransitionEndEventName();\r\n\r\n this.fallbackTimeout = null;\r\n this.handled = false;\r\n this.handler = this._handler.bind(this);\r\n\r\n this.listen();\r\n \r\n }\r\n\r\n /**\r\n * Execute callback.\r\n */\r\n _handler() {\r\n // bail if the callback is already executed or has been aborted.\r\n if (this.handled) {\r\n this.cleanUp();\r\n return;\r\n }\r\n\r\n // run the callback asynchronously\r\n (async (callback) => {\r\n if (typeof callback === 'function') {\r\n callback.apply(this.element);\r\n }\r\n })(this.callback);\r\n\r\n // clean up\r\n this.cleanUp();\r\n }\r\n\r\n /**\r\n * Setup the event\r\n */\r\n listen() {\r\n let duration;\r\n\r\n try {\r\n duration = getTransitionDurationFromElement(this.element);\r\n }\r\n catch (err) {\r\n duration = this.fallbackDuration;\r\n }\r\n\r\n duration += durationPadding;\r\n\r\n // try addEventListener\r\n try {\r\n if (this.eventName) {\r\n this.element.addEventListener(this.eventName, this.handler, false);\r\n }\r\n } catch (err) {\r\n // ignore\r\n }\r\n\r\n // ensure the callback is always called\r\n this.fallbackTimeout = window.setTimeout(() => {\r\n // try dispatchEvent\r\n try {\r\n if (this.eventName && window.Event) {\r\n this.element.dispatchEvent(new window.Event(this.eventName));\r\n }\r\n } catch (err) {\r\n // otherwise, just execute the callback\r\n this.handler();\r\n }\r\n }, duration);\r\n }\r\n\r\n /**\r\n * Clean up\r\n */\r\n cleanUp() {\r\n this.handled = true;\r\n\r\n if (this.handler) {\r\n try {\r\n this.element.removeEventListener(this.eventName, this.handler);\r\n }\r\n catch (err) {\r\n // ignore\r\n }\r\n\r\n this.handler = null;\r\n }\r\n\r\n if (this.fallbackTimeout) {\r\n window.clearTimeout(this.fallbackTimeout);\r\n this.fallbackTimeout = null;\r\n }\r\n }\r\n\r\n /**\r\n * Abort\r\n */\r\n cancel() {\r\n this.cleanUp();\r\n }\r\n }\r\n\r\n return (element, callback, fallbackDuration) => {\r\n const el = element[0] || element;\r\n const inst = new TransitionEnd(el, callback, fallbackDuration);\r\n return {\r\n abort: inst.cancel.bind(inst)\r\n };\r\n };\r\n})(window);"],"names":["$","window","undefined","Component","constructor","element","options","this","name","initializedClass","init","isMobile","mobileFlag","getMobileFlag","length","css","_getMobileFlag","parent","componentSelector","selectors","parentComponentSelector","p","el","elFlag","each","idx","_el","is","_parent","closest","getParentComponent","log","args","unshift","console","apply","logError","error","logWarning","warn","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","all","slice","keys","Object","module","exports","emitter","requestAnimationFrame","addClass","addEventListener","event","removeClass","async","lastFocusElement","document","ev","elConsent","getElementById","contains","target","nodeName","classList","focusable","body","find","f","focus","passiveIfSupported","initialized","scrolling","scrollendTimeout","triggerTimeout","passive","removeEventListener","err","$body","updateScrolledClass","toggleClass","pageYOffset","cancelAnimationFrame","clearTimeout","scrollTop","setTimeout","scrolled","$html","feature","div","appendTo","style","setHeight","doc","documentElement","setProperty","innerHeight","Math","min","height","functions","on","preventDefault","siblings","uploaderFieldSelector","uploaderFieldEntrySelector","uploaderFieldFileSelectedClass","uploaderFieldDisabledClass","uploaderFieldInputWrapperSelector","uploadDisabledWatchList","uploadObserverConfig","attributes","attributeFilter","uploadObserver","MutationObserver","mutationsList","observer","forEach","entry","type","attributeName","disabled","watchUploadDisabled","context","not","add","observe","end","updateUploadValue","val","elInfo","fileName","split","pop","remove","append","insertAfter","last","text","textareaWrapperSelector","textareaSelector","_onTextareaInput","updateTextarea","currentTarget","l","value","r","Number","data","elem","attr","setupTextarea","api","off","t","inp","blur","initUpload","initTextarea","initForm","BootstrapModal","TRIGGER_TARGET_DATA_KEY","TRIGGER_MODAL_DATA_KEY","DEFAULT_MODAL_OPTIONS","backdrop","keyboard","openPopupFrom","elPopup","tmp","prop","url","arr","first","getPopupTargetFromUrl","getPopupTargetFromElement","showPopupForm","elTrigger","elPopupId","modal","removeData","modalOptions","hasClass","getModalOptions","show","default","_","popupId","location","get","_ctq","Array","isArray","orgCallback","tmp$","sendScTracking","goalID","ajax","cache","dataType","getAttribute","tracking","ATTR_LAYER","elLayer","elLayerValue","trim","elParents","parentsUntil","trackData","c","tmpKey","tmpValue","i","eq","k","v","dataLayer","push","clickHandler","jQuery","jqxhr","settings","match","converters","formId","URL","searchParams","frm","__aggScFormRedirects","orgHandler","orgText","formType","call","detail","toLowerCase","replace","elForm","querySelector","elErrors","txtErrors","textContent","HOOK_FUNCTIONS","SalesforceLiveAgent","_initialized","_isLiveChatAvailable","_svc","_waitReady","getInstance","embedded_svc","bind","_ready","_bindEvents","_hook","_eventsHook","svc","_hookLiveChatFunction","_eventsBound","_liveChatAvailabilityChanged","b","isButtonDisabled","componentLoaded","componentInitInProgress","available","initInProgress","instance","windowLoadEventObj","windowIsLoaded","skipSetup","windowLoadHandler","trigger","createEvent","origEvent","extend","Event","isSimulated","timeStamp","Date","now","special","isloaded","handler","toggleAria","removeAttr","orig","fn","ariaName","substr","toUpperCase","arguments","DATA_KEY","objectHasOwnProperty","obj","prototype","hasOwnProperty","guid","dataStorage","form","storageId","multiple","checkedOptions","selectedIndex","checked","saveForm","inputs","indexOf","splice","checkeds","selected","includes","restoreForm","PointerEvent","ready","viewport","detect","backtotop","lightbox","fone","_aggrekoLiveChat","setup","global","utils","noHover","matchMedia","matches","RE_REGEX_CHAR","isExperienceEditorMode","Sitecore","WebEditSettings","editing","focusableChildren","focusables","selector","join","jquery","querySelectorAll","filter","getClientRects","focusableChildrenAll","debounce","cb","threshold","timerId","cbArgs","clearTimer","runIt","debounced","cancel","animationFrame","uniqueArray","index","reRegexChar","escapeRegex","str","chunkArray","size","floor","res","chunk","getComponent","key","inst","queryComponents","elems","waitInnerComponentsInitialized","names","reject","allComps","comps","checkLoading","stillLoading","SELECTORS","baseSelectors","loadedComponents","loaders","invoke","components","needLoad","ret","componentClass","extendSelectors","descriptor","getOwnPropertyDescriptor","configurable","writable","defineProperty","enumerable","protectSelectors","fire","catch","loadComponent","component","initComponents","transitionEnd","breakpoints","bs","aggreko","modules","loadedModules","availableModules","TheModule","__","getModule","moduleName","_module","importer","afterImport","loadModule","load","eventName","TransitionEnd","callback","fallbackDuration","parseFloat","transitions","transition","WebkitTransition","MozTransition","OTransition","getTransitionEndEventName","fallbackTimeout","handled","_handler","listen","cleanUp","duration","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","floatTransitionDelay","getTransitionDurationFromElement","dispatchEvent","abort"],"sourceRoot":""}