{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/elc-base-theme/src/Breakpoints.ts","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/elc-service-view-names/src/index.ts","webpack:///./node_modules/elc-service/node_modules/elc-universal-utils/src/UniversalUtils.ts","webpack:///./node_modules/elc-service/node_modules/elc-universal-utils/src/BrowserStorage.ts","webpack:///./node_modules/elc-universal-utils/src/UniversalUtils.ts","webpack:///./node_modules/elc-universal-utils/src/BrowserStorage.ts","webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/react-is/index.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./src/index.ts","webpack:///./src/internal/constants/Vto.ts","webpack:///./src/internal/constants/VtoSkinCare.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack:///./node_modules/@loadable/component/dist/loadable.esm.js","webpack:///./node_modules/elc-service/src/Service.ts","webpack:///./src/service-setup/VtoService.ts","webpack:///./src/service-setup/ConfigStore.tsx","webpack:///./src/service-setup/ServiceBusController.ts","webpack:///./node_modules/elc-service/src/ViewController.ts","webpack:///./src/internal/controllers/VtoBaseController.ts","webpack:///./src/internal/controllers/VtoViewController.ts","webpack:///./src/internal/controllers/VtoSkinCareViewController.ts","webpack:///./node_modules/elc-service/src/Decorators.ts","webpack:///./node_modules/elc-service/src/Api.ts","webpack:///./src/api/QuizApiSdk.ts","webpack:///./src/internal/domain/entities/VtoQuiz.ts","webpack:///./src/internal/repositories/QuizApiRepository.ts","webpack:///./src/service-setup/diContainer.tsx","webpack:///external \"ElcServiceBus\"","webpack:///external {\"root\":[\"ElcRuntime\",\"HypoContainer\"],\"commonjs2\":\"HypoContainer\",\"commonjs\":\"HypoContainer\",\"amd\":\"HypoContainer\"}","webpack:///external {\"root\":[\"ElcRuntime\",\"mobx\"],\"commonjs2\":\"mobx\",\"commonjs\":\"mobx\",\"amd\":\"mobx\"}","webpack:///external {\"root\":[\"ElcRuntime\",\"mobxReact\"],\"commonjs2\":\"mobx-react\",\"commonjs\":\"mobx-react\",\"amd\":\"mobx-react\"}","webpack:///external {\"root\":[\"ElcRuntime\",\"React\"],\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack:///external {\"root\":[\"ElcRuntime\",\"ReactDom\"],\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack:///external {\"root\":[\"ElcRuntime\",\"styled5\"],\"commonjs2\":\"styled-components\",\"commonjs\":\"styled-components\",\"amd\":\"styled-components\"}"],"names":["root","factory","exports","module","require","define","amd","a","i","window","__WEBPACK_EXTERNAL_MODULE_elc_service_bus__","__WEBPACK_EXTERNAL_MODULE_hypo_container__","__WEBPACK_EXTERNAL_MODULE_mobx__","__WEBPACK_EXTERNAL_MODULE_mobx_react__","__WEBPACK_EXTERNAL_MODULE_react__","__WEBPACK_EXTERNAL_MODULE_react_dom__","__WEBPACK_EXTERNAL_MODULE_styled_components__","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","jsonpScriptSrc","__webpack_require__","p","original_jsonpScriptSrc","patchJsonpScriptSrc","replaceSrc","Error","newSrc","apply","this","arguments","e","console","error","l","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","jsonpArray","oldJsonpFunction","slice","s","_arrayLikeToArray","arr","len","arr2","Array","_arrayWithHoles","isArray","_assertThisInitialized","self","ReferenceError","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","configurable","writable","_createClass","protoProps","staticProps","_defineProperty","obj","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_inherits","subClass","superClass","constructor","_iterableToArrayLimit","iterator","_arr","_n","_d","_e","_s","_i","next","done","_nonIterableRest","_typeof","assertThisInitialized","_possibleConstructorReturn","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","_slicedToArray","arrayLikeToArray","_unsupportedIterableToArray","minLen","toString","from","test","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","AsyncIterator","PromiseImpl","invoke","record","result","__await","then","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","state","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","keys","reverse","pop","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","Breakpoints","desktop","largeScreen","extraLargeScreen","breakpoint","brp","code","placeholders","reduce","acc","holder","idx","g","PRODUCT_GRID","PRODUCT_SHADE_PICKER","PRODUCT_CTA","CONTENT_BLOCK","VTO","VTO_SKIN_CARE","SERVICE_VIEW_CLASSNAME","SERVICE_VIEW_RENDERED_ATTRIBUTE","global","BrowserStorage","eraseCookie","cookie","setCookie","daysOrDate","expires","expirationDate","Date","now","toUTCString","getCookie","nameEQ","ca","split","substring","indexOf","getItem","storageKey","setItem","removeItem","storagePolling","callBack","storageValue","setInterval","latestValue","setupServiceInfo","serviceInfo","rest","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","FORWARD_REF_STATICS","render","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","concat","targetStatics","sourceStatics","b","for","f","h","k","q","v","w","x","y","z","u","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","__rest","propertyIsEnumerable","__decorate","decorators","desc","Reflect","decorate","__awaiter","thisArg","_arguments","P","adopt","fulfilled","step","rejected","vtoService","register","Events","FoundationShadeTypes","FoundationPairShadeTypes","IFRAME_MIN_WIDTH","IFRAME_MAX_WIDTH","TIMEOUT_VALUE","IFRAME_EXTRA_PADDING","IFRAME_RATIO","COMPARE_BUTTON_HEIGHT","SKIN_SMOOTH_STRENGTH","PIE_CHART_DEFAULT_VALUE","CUSTOM_SLIDES_TO_SHOW","CUSTOM_SLIDES_TO_SCROLL","VTO_GUID","NO_SCROLL_CLASS","VTO_ACTIVE_CLASS","VTO_DISCLOSE_PARAM","VTO_OPEN_PARAM","VTO_MATCHES_COOKIE_NAME","FaceConcerns","EyeConcerns","OtherConcerns","QuizApiConcerns","IFRAME_MIN_HEIGHT","SKIN_CARE_MODE","FACE_CONCERN_PARAM","EYE_CONCERN_PARAM","SKIN_TYPE_PARAM","SKIN_TYPE_VALUE","DEFAULT_LOCALE","DRUPAL_API_TOKEN","DRUPAL_API_FIELDS","SKU_ITEM","PRODUCT_ITEM","REVISION_TAG_COOKIE","LOCALE_COOKIE","SCROLL_TIMEOUT","OFFSET_HEIGHT","SCROLL_BEHAVIOR_SMOOTH","SCROLL_BLOCK_START","EDITORIAL_NODE_KEY","blockPositionMapping","freeze","productGrid","crosssellNode","extraCareNode","skinDiagramNode","skincareRegimenNode","skinTipsNode","skinCareEditorialNode","_objectWithoutPropertiesLoose","source","excluded","sourceKeys","_extends","assign","_inheritsLoose","invariant","condition","framesToPop","createContext","resolveConstructor","requireAsync","Component","Consumer","extractor","__chunkExtractor","identity","createLoadable","_ref","_ref$resolve","_render","onLoad","loadable","loadableConstructor","options","cache","_getCacheKey","cacheKey","InnerLoadable","_React$Component","_this","loading","requireSync","ssr","loadSync","addChunk","chunkName","isReady","_proto","componentDidMount","mounted","loadAsync","triggerOnLoad","componentDidUpdate","prevProps","prevState","componentWillUnmount","safeSetState","nextState","callback","setState","_this2","loadedModule","Loadable","getCacheKey","JSON","stringify","getCache","setCache","_this3","_this$props","forwardedRef","suspense","_this$props2","propFallback","fallback","_this$state","cachedResult","ref","EnhancedInnerLoadable","forwardRef","preload","load","lazy","resolveComponent","_createLoadable","_createLoadable$1","current","children","loadable$1","lazy$1","loadable$2","lib","version","serviceInitializer","componentsRegistry","cachedComponentsRegistry","isStarted","ServiceRegistry","start","getView","registerView","setViewInCache","getViewFromCache","componentName","viewController","appConfig","diContainer","vtoViewController","vtoSkinCareViewController","config","updateConfig","isLoading","setSSRState","dataState","setId","id","btoa","unescape","encodeURIComponent","bodyElementClass","body","classList","eventListenerIdentifiers","isVtoDisclosed","loadVto","apiUrl","apiKey","querySelector","getElementsByTagName","vtoScript","parentNode","insertBefore","getIframeDimension","imageContainerWidth","innerWidth","offsetWidth","imageContainerModifiedWidth","Vto","iframeWidth","iframeHeight","handleVtoResize","vtoFoundationFeature","hasLipVto","iframe","getElementById","maxHeight","innerHeight","compareOverlayOffset","style","height","screen","getVtoParams","bottomPanelOffsetY","isDesktop","language","getVtoApiConfig","isVtoFoundationEnabled","autoOpen","showCloseBtnOnLauncher","isVtoFoundationMultiIds","productIdList","skinSmoothStrength","width","filterPerfectMatches","perfectMatchResults","vtoFoundationShadeValues","entries","perfectMatchAccumulator","label","skuId","shadeLabel","BEST","vtoFoundationPerfectMatchText","updateShadeEntity","perfectMatches","perfectMatchSkuIds","product","shades","shade","parentSku","perfectShadeLabel","changeToPerfect","resetPerfect","showNameInsideShadeCircle","selectPerfectSku","GET_SKUS","skuData","handleShadeSelect","productId","resetShadeProps","isVtoMakeupEnabled","removeVtoEventListeners","eventListenerIdentifier","YMK","removeEventListener","toggleBodyClasses","hasBodyClasses","isMobile","bodyClasses","add","remove","checkVtoDisclose","vtoDiscloseParam","getQueryParam","searchKey","search","location","URLSearchParams","updateProduct","vtoConfig","vtoFeature","foundation","features","vtoFoundation","vtoMakeup","isVtoShadeGridEnabled","isVtoOpened","isVtoLoaded","isVtoFoundationOverlayOpened","selectedPairShadeName","activeTab","skusWithCrossSell","isMatchSaved","openVtoOnLoad","checkVtoOpenOnLoad","initVto","initialize","translations","vtoIframeRef","toggleProductImageSection","vtoShadeGridProps","selectedSku","isVtoFoundationMultiIdsEnabled","selectedSkuId","getVtoPerfectMatchText","vtoFoundationPairText","getVtoPairText","togglePerfectShades","loadPairProduct","addVtoEventListeners","addEventListener","handleEventListenerCallbacks","LOADING","VTO_LOADING","LOADED","handleVtoLoadedEvent","OPENED","handleVtoOpenedEvent","CLOSED","handleVtoClosedEvent","SKIN_SHADE_FOUND","handleVtoSkinShadeFoundEvent","CAMERA_CLOSED","VTO_CAMERA_CLOSED","CAMERA_FAILED","VTO_CAMERA_FAILED","CAMERA_OPENED","VTO_CAMERA_OPENED","COMPARE","VTO_COMPARE","COMPARE_DISABLED","VTO_COMPARE_DISABLED","ENGINE_CLOSED","VTO_ENGINE_CLOSED","KISS_DETECTED","VTO_KISS_DETECTED","PHOTO_LOADED","VTO_PHOTO_LOADED","PHOTO_SAVED","VTO_PHOTO_SAVED","RESET","VTO_RESET","VIDEO_LOADED","VTO_VIDEO_LOADED","SHADE_FINDER_STARTED","handleVtoShadeFinderStartedEvent","SHADE_FINDER_COMPLETED","VTO_SHADE_FINDER_COMPLETED","SHADE_FINDER_CANCELLED","VTO_SHADE_FINDER_CANCELLED","ZOOM","VTO_ZOOM","isVtoFoundationOverlayEnabled","closeVtoFoundationOverlay","VTO_OPENED","toggleVtoOpenedState","reInitVto","VTO_LOADED","updateVtoLoadedState","toggleVtoShadeGrid","applyMakeupBySku","isShadeGridEnabled","VTO_SHADE_FINDER_STARTED","vtoShadeResult","readableRecommendations","setSaveMatch","VTO_SKIN_SHADE_FOUND","foundationShadeFilter","VTO_CLOSED","isOpened","updateVtoFoundationOverlayState","isEnabled","isLoaded","onVtoTabClick","dataset","tab","VTO_PAIR_SHADE_GRID_OPENED","setPairProduct","pairProduct","setSelectedPairSkuId","selectedPairSkuId","setSelectedPairShadeName","shadeName","setSkusWithCrossSell","skus","getShadesFromCrossSellProduct","selectedCrossSell","crossSellSku","find","sku","sortPerfectLabels","orderedPerfectLabels","coolerLabel","lighterLabel","bestLabel","darkerLabel","warmerLabel","labelA","labelB","filter","crossSellCategory","defaultSku","skuIds","map","parentProduct","vtoReInitTimeout","hasChildNodes","closeEngine","close","openVto","ymkAsyncInit","declareVtoCallback","vtoParams","init","openVtoFoundation","showVtoFoundationOverlay","isOverlayOpened","handleVtoUnmount","onPairShadeSelect","selectedPairShade","selectedPairSku","VTO_PAIR_SHADE_SELECTED","vtoMakeupApply","payload","vtoFoundationOverlayToggled","updateSelectedSku","isSaved","saveMatches","shadeMatches","getShadeMatches","bestSku","selectedShade","setBestShade","setVtoMatchCookie","VTO_MATCH_SAVED","removeMatches","cookieName","shadeMatchCookie","parse","VTO_MATCH_REMOVED","has","selectedPairShades","activeTabs","activeTabContent","selectedPairSizeValue","pairProductLargeImages","pairProductUrl","perfectShades","pairShades","allShades","sizes","media","large","productUrl","isOverlayEnabled","isMultiIdsEnabled","open","shadeTypes","shadeTypeValues","matchType","newShadeMatches","PRODUCT_SHADE_SELECTED","VTO_FOUNDATION_OVERLAY_TOGGLED","isVtoSkinCareEnabled","isVtoSkinCareCtaEnabled","isVtoSkinCareOpened","isVtoSkinAnalysisFinished","isVtoSkinCareResultInProgress","isVtoSkinCareResultSectionEnabled","skinCareProductList","isResultCtaFixed","isSkinCareNodeResultEnabled","skinCareResultProductItems","skinCareResultProductBenefitTypes","skinCareResultNodeBlocks","vtoSkinCareRef","vtoSkinCareQuizId","isVtoResultEnabled","skinCareEditorialNodeId","vtoSkinCareConfig","vtoSkinCare","vtoSkinCareFeature","skincare","quizApiRepository","serviceNames","editorialNodeId","updateVtoSkinCareState","enabled","loaded","handleScroll","initVtoSkinCare","declareVtoSkincareCallback","toggleVtoSkinCareCtaState","VTO_SKIN_CARE_OPENED","toggleVtoSkinCareOpenedState","toggleVtoSkinAnalysisState","isFinished","toggleVtoSkinResultProgress","toggleSkinCareResultSection","toggleResultCtaFixedPosition","isFixed","enableSkinCareNodeResult","vtoSkinCareStartOver","showVtoSkinCareResult","scrollToVtoSkinCare","processVtoProductResult","filterVtoSkinConcernScores","updateQuizApiResult","preprocessSkinCareProductResult","vtoSkinCareHandlers","handleVtoSkinCareOpenedEvent","VTO_SKIN_CARE_CAMERA_OPENED","VTO_SKIN_CARE_CAMERA_FAILED","VTO_SKIN_CARE_CAMERA_CLOSED","VTO_SKIN_CARE_LOADING","VTO_SKIN_CARE_LOADED","VTO_SKIN_CARE_VIDEO_LOADED","SKIN_ANALYSIS_STARTED","handleVtoSkinAnalysisStartedEvent","SKIN_ANALYSIS_FINISHED","handleVtoSkinAnalysisFinishedEvent","SKIN_BACK_TO_DETECTING","VTO_SKIN_BACK_TO_DETECTING","handleVtoSkinCareClosedEvent","getForeheadAndLowerFaceWrinkleAvg","vtoSkinConcernScores","wrinkleForehead","wrinkleLowerFace","existsAndFaceArrayIsLessThanTwo","skinConcern","FaceArray","getFaceConcernKey","existsAndEyeConcernArrayIsLessThanOne","EyeArray","getEyeConcernKey","debounce","handleSeeResultButtonOnScroll","getBoundingClientRect","bottom","vtoSkinCareNodesLoaded","VTO_SKIN_CARE_RESULT_LOADED","vtoSkinCareResultLoaded","productGridRef","observeProductGrid","onProductGridLoaded","mutationList","mutationObserver","mutation","preprocessSkinCareNodeResult","disconnect","scrollIntoView","behavior","block","vtoSkinCareParams","getVtoSkinCareParams","openSkincare","addVtoSkinCareEventListeners","getIframeHeight","availableHeight","stickyHeight","VTO_SKIN_CARE_CLOSED","VTO_SKIN_ANALYSIS_STARTED","VTO_SKIN_ANALYSIS_FINISHED","getSkincareRecommendationList","vtoSkinCareProductIds","vtoSkinCareBenefitTypes","category","linesAndWrinkles","sortedSkinConcernScores","sort","queryParams","getQueryParams","quizApiQuery","skinConcernScores","faceConcernKey","eyeConcernKey","getQuizApiResult","vtoQuizResult","updateProductSource","preprocessProductIDs","preprocessBenefitTypes","finalProductIds","productIds","finalBenefitTypes","productBenefitTypes","skinCareContentResultPromises","skinCareContentResultKeys","pushResultNodesToPromise","pushEditorialNodeToPromise","handleSkinCareContentResults","getNodeContent","skinCareContentResultKey","index","site","elcContentApi","params","revision_tag","locale","node","field","getData","rendered","productType","item","benefitTypes","benefitTypeValue","replace","toLowerCase","translationKey","newBenefitTypeValue","timeoutValue","debounceTimeout","productGridContainer","childList","subtree","MutationObserver","observe","getDecorators","container","lazyInject","resourceName","sbGetter","resource","propertyDescriptor","AUTHORIZATION_HEADER_NAME","configStore","apiBasePath","param","quizId","url","httpTransport","post","response","businessUnitId","header","addGlobalHeaders","headerName","removeGlobalHeader","bearerToken","addHeader","removeHeader","vtoQuiz","VtoQuiz","product_benefit_type","product_id","Number","crosssell_content_1","extra_care","skin_diagrams","skincare_regimen","tips","quizApiResult","quizApiSdk","vtoQuizApiId","paramString","getStringifyParam","loadQuizApiData","getQuizDataByQuizId","setQuizApiResult","results","fromJson","serviceBusController","setConfig","configJSON","VtoService","HttpTransport"],"mappings":"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","file":"bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"ElcServiceBus\"), require(\"HypoContainer\"), require(\"mobx\"), require(\"mobx-react\"), require(\"react\"), require(\"react-dom\"), require(\"styled-components\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"ElcServiceBus\", \"HypoContainer\", \"mobx\", \"mobx-react\", \"react\", \"react-dom\", \"styled-components\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"ElcServiceBus\"), require(\"HypoContainer\"), require(\"mobx\"), require(\"mobx-react\"), require(\"react\"), require(\"react-dom\"), require(\"styled-components\")) : factory(root[\"ElcServiceBus\"], root[\"ElcRuntime\"][\"HypoContainer\"], root[\"ElcRuntime\"][\"mobx\"], root[\"ElcRuntime\"][\"mobxReact\"], root[\"ElcRuntime\"][\"React\"], root[\"ElcRuntime\"][\"ReactDom\"], root[\"ElcRuntime\"][\"styled5\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE_elc_service_bus__, __WEBPACK_EXTERNAL_MODULE_hypo_container__, __WEBPACK_EXTERNAL_MODULE_mobx__, __WEBPACK_EXTERNAL_MODULE_mobx_react__, __WEBPACK_EXTERNAL_MODULE_react__, __WEBPACK_EXTERNAL_MODULE_react_dom__, __WEBPACK_EXTERNAL_MODULE_styled_components__) {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"bundle\": 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"elc-service-vto-common~31ecd969\":\"elc-service-vto-common~31ecd969\",\"Vto\":\"Vto\",\"VtoSkinCare\":\"VtoSkinCare\"}[chunkId]||chunkId) + \".\" + {\"elc-service-vto-common~31ecd969\":\"1eaa05b6991404763c94\",\"Vto\":\"3ea27d8cd5acab94e571\",\"VtoSkinCare\":\"8c0227842fd4fe2d79ae\"}[chunkId] + \".bundle.js\"\n \t}\n \t// WebpackRequireFrom - monkey-patching\n \tif (typeof jsonpScriptSrc === 'function') {\n \t var original_jsonpScriptSrc = jsonpScriptSrc;\n \t function patchJsonpScriptSrc () {\n \t try {\n \t if (typeof replaceSrc !== \"function\") {\n \t throw new Error(\"WebpackRequireFrom: 'replaceSrc' is not a function or not available at runtime. See https://github.com/agoldis/webpack-require-from#troubleshooting\");\n \t }\n \t var newSrc = replaceSrc(original_jsonpScriptSrc.apply(this, arguments));\n \t if (!newSrc || typeof newSrc !== 'string') {\n \t throw new Error(\"WebpackRequireFrom: 'replaceSrc' does not return string. See https://github.com/agoldis/webpack-require-from#troubleshooting\");\n \t }\n \t return newSrc;\n \t } catch (e) {\n \t if (!false) {\n \t console.error(e);\n \t }\n \t return original_jsonpScriptSrc.apply(this, arguments);\n \t }\n \t }\n \t jsonpScriptSrc = patchJsonpScriptSrc\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n \t// WebpackRequireFrom\n \tObject.defineProperty(__webpack_require__, \"p\", {\n \t get: function () {\n \treturn \"elc-service-vto/\";\n \t }\n \t})\n\n \tvar jsonpArray = window[\"__LOADABLE_LOADED_CHUNKS__\"] = window[\"__LOADABLE_LOADED_CHUNKS__\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","export interface IBreakpoints {\n [key: string]: number;\n}\n\nexport const layoutPageContentWidth: number = 1260;\n\nexport const Breakpoints: IBreakpoints = {\n desktop: 768,\n largeScreen: 1024,\n extraLargeScreen: 1200\n};\n\nexport const breakpoint = (brp: string) => (\n code: TemplateStringsArray,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...placeholders: any[]\n) => {\n // interleave the code with the placeholders\n let result = placeholders.reduce((acc, holder, idx) => `${acc}${code[idx]}${holder}`, '');\n\n // add the code literal\n result = `${result}${code[code.length - 1]}`;\n\n return `@media(min-width: ${Breakpoints[brp]}px) {${result}}`;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export const OFFERS_TO_DISPLAY = 'offers-to-display';\nexport const ORDER_ERROR_MESSAGE = 'order-error-message';\nexport const PAYMENT_METHODS = 'payment-methods';\nexport const PAYMENT_INFORMATION = 'payment-information';\nexport const FORGOT_PASSWORD = 'forgot-password';\nexport const RESET_PASSWORD = 'reset-password';\nexport const AUTOMATIC_OFFERS = 'automatic-offers';\nexport const THRESHOLD_MESSAGES = 'threshold-messages';\nexport const MANUAL_OFFER = 'manual-offer';\nexport const ORDER_CONFIRMATION_COMPONENT = 'order-confirmation-component';\nexport const PASSWORD_STRENGTH = 'password-strength';\nexport const SAVE_FOR_LATER_LIST = 'save-for-later-list';\nexport const SIGN_IN_FORM = 'sign-in-form';\n\nexport const SIGN_UP_FORM = 'sign-up-form';\nexport const CHANGE_PASSWORD = 'change-password';\nexport const CHANGE_EMAIL = 'change-email';\nexport const EMAIL_VERIFICATION = 'email-verification';\nexport const CONFIRM_REGISTRATION = 'confirm-registration';\n\nexport const ADDRESS_FORM = 'address-form';\nexport const ADDRESS_LIST = 'address-list';\nexport const FORMATTED_ADDRESS = 'formatted-address';\nexport const RETURN_USER_EMAIL = 'return-user-email';\nexport const USER_PROFILE = 'user-profile';\nexport const USER_EMAIL = 'user-email';\nexport const USER_EMAIL_WITH_OPT_IN = 'user-email-with-opt-in';\nexport const SIGN_OUT_LINK = 'sign-out-link';\nexport const CART_ITEMS = 'cart-items';\nexport const CART_ORDER_SUMMARY = 'cart-order-summary';\nexport const CART_MERGE = 'cart-merge';\nexport const ACCOUNT_INFO = 'account-info';\nexport const PRODUCT_GRID = 'product-grid';\nexport const PRODUCT_FULL = 'product-full';\nexport const PRODUCT_FULL_ORDERABLE = 'product-full-orderable';\nexport const CART_OVERLAY = 'cart-overlay';\nexport const CART_ICON_BUTTON = 'cart-icon-button';\nexport const ACCOUNT_OVERLAY = 'account-overlay';\nexport const ORDER_HISTORY = 'order-history';\nexport const ORDER_DETAILS = 'order-details';\nexport const ORDER_HISTORY_COUNTER_BUTTONS = 'order-history-counter-buttons';\nexport const ORDER_HISTORY_TEMPORARY_MODULE = 'order-history-temporary-module';\nexport const ACCOUNT_INFO_LINK = 'account-info-link';\nexport const SIGN_IN_NAV_LINK = 'sign-in-nav-link';\n\nexport const EMAIL_OPT_IN = 'email-opt-in';\nexport const VIEW_EMAIL_OPT_IN = 'view-email-opt-in';\nexport const HELPFUL_LINKS = 'helpful-links';\n\nexport const ACCOUNT_LANDING_SCREEN = 'account-landing-screen';\nexport const SIGN_UP_SCREEN = 'sign-up-screen';\nexport const SIGN_IN_SCREEN = 'sign-in-screen';\nexport const ORDER_CONFIRMATION_SCREEN = 'order-confirmation-screen';\nexport const ORDER_ASSOCIATION_SCREEN = 'order-association-screen';\nexport const EXTERNAL_PAYMENT_ERROR_SCREEN = 'external-payment-error-screen';\nexport const PAYMENT_SCREEN = 'payment-screen';\nexport const PAYMENT_NAME = 'payment-name';\nexport const PAYMENT_ICON = 'payment-icon';\nexport const CHECKOUT_HEADER = 'checkout-header';\nexport const CHECKOUT_FOOTER = 'checkout-footer';\nexport const SHIPPING_SCREEN = 'shipping-screen';\nexport const SHOPPING_BAG_PAGE = 'shopping-bag-page';\nexport const PRODUCT_BRIEF = 'product-brief';\nexport const PRODUCT_QUICKVIEW = 'product-quickview';\nexport const SHIPPING_METHODS = 'shipping-methods';\nexport const ELC_CHECKOUT = 'elc-checkout';\nexport const ELC_ACCOUNT = 'elc-account';\nexport const STYLEGUIDE = 'style-guide';\nexport const PRODUCT_NOTIFY_ME = 'product-notify-me';\nexport const CHOICE_OF_SKUS_LIST = 'choice-of-skus-list';\nexport const PRODUCT_CROSS_SELL = 'product-cross-sell';\nexport const PRODUCT_ADD_TO_BAG = 'product-add-to-bag';\nexport const PRODUCT_SHADESVIEW = 'product-shadesview';\nexport const PRODUCT_SIZE_PICKER = 'product-size-picker';\nexport const PRODUCT_QUANTITY_SELECTOR = 'product-quantity-selector';\nexport const PRODUCT_SHADE_PICKER = 'product-shade-picker';\nexport const PRODUCT_MEDIA_CAROUSEL_NAV = 'product-media-carousel-nav';\nexport const PRODUCT_SHADE_PICKER_BUTTON = 'product-shade-picker-button';\nexport const PRODUCT_RATING = 'product-rating';\nexport const PRODUCT_RATING_WRAPPER = 'product-rating-wrapper';\nexport const PRODUCT_REVIEWS = 'product-reviews';\nexport const PRODUCT_CTA = 'product-cta';\nexport const PRODUCT_SHADES_SIDEBAR = 'product-shades-sidebar';\n\nexport const CONTENT_BLOCK = 'content-block';\nexport const BASIC_TOUT = 'elc-basic-tout-v1';\nexport const VIDEO_TOUT_YOUTUBE = 'elc-video-tout-youtube-v1';\nexport const VTO_FOUNDATION_OVERLAY = 'elc-vto-foundation-overlay-v1';\n\nexport const OLAPIC_WIDGET = 'ugc-olapic-widget';\n\nexport const VTO = 'vto';\nexport const VTO_SKIN_CARE = 'vto-skin-care';\n\nexport const STORES = 'stores';\nexport const STORES_DIRECTORY = 'stores-directory';\nexport const SEARCH_RESULTS = 'search-results';\nexport const SEARCH_GNAV_INPUT_FIELD = 'search-gnav-input-field';\nexport const VOICE_SEARCH = 'voice-search';\nexport const STORE_DETAILS = 'store-details';\nexport const FIND_IN_STORE_BUTTON = 'find-in-store-button';\nexport const FIND_IN_STORE_MODAL = 'find-in-store-modal';\nexport const PICK_UP_IN_STORE = 'pick-up-in-store';\n\nexport const STYLEGUIDE_TYPOGRAPHY = 'styleguide-typography';\nexport const STYLEGUIDE_BUTTONS = 'styleguide-buttons';\nexport const STYLEGUIDE_INPUTS = 'styleguide-inputs';\nexport const STYLEGUIDE_COMPONENTS = 'styleguide-components';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from 'elc-service-bus';\nimport { LoadableComponent } from '@loadable/component';\n\nexport const SERVICE_VIEW_CLASSNAME = 'elc-service-view-renderer';\nexport const SERVICE_VIEW_RENDERED_ATTRIBUTE = 'data-rendered-view';\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport type RegisteredComponent = () => Promise<{\n ['default']: React.ComponentType;\n}>;\n\nexport interface IComponent {\n componentName: string;\n component: LoadableComponent;\n viewController?(): IComponentViewController;\n}\n\nexport interface IComponentRegistry {\n [key: string]: IComponent;\n}\nexport interface ICachedComponentsRegistry {\n [key: string]: React.ComponentType;\n}\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IViewControllerData {\n [key: string]: any;\n}\n\nexport type ViewControllerLoadedMethod = (...args: any[]) => Promise;\n\nexport interface IComponentViewController {\n id?: string;\n loaded?: ViewControllerLoadedMethod;\n data?: IViewControllerData;\n dataState?: IViewControllerData;\n configMergeStrategy?: Function;\n initialize?(...args: any[]): void;\n handleState?(...args: any[]): void;\n setSSRState(data: IViewControllerData): void;\n setId(id: string): void;\n isLoading: boolean;\n}\n\nexport interface IServiceRegistryComponent {\n isLazy?: boolean;\n views?: string[];\n events?: string[];\n queries?: string[];\n name: string;\n version: string;\n isStarted: boolean;\n serviceBusController?: any;\n componentsRegistry: IComponentRegistry;\n cachedComponentsRegistry: ICachedComponentsRegistry;\n serviceInitializer: any;\n start(appConfig: any): Promise;\n register?(): void;\n getView(componentName: string): IComponent | undefined;\n setViewInCache(componentName: string, component: React.ComponentType): void;\n getViewFromCache(componentName: string): React.ComponentType;\n registerView(\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => object\n ): void;\n}\n\ninterface IServiceRegistry {\n [key: string]: IServiceRegistryComponent;\n}\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n}\n\ninterface IComponentRenderer {\n init(initialMarkup?: string): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\n\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n ComponentRenderer: IComponentRenderer;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n versions: IObjectOfStrings;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n versions: IObjectOfStrings;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window =\n (isWebRendered && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n window;\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from 'elc-service-bus';\nimport { LoadableComponent } from '@loadable/component';\n\nexport const SERVICE_VIEW_CLASSNAME = 'elc-service-view-renderer';\nexport const SERVICE_VIEW_RENDERED_ATTRIBUTE = 'data-rendered-view';\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\nexport type RegisteredComponent = () => Promise<{\n ['default']: React.ComponentType;\n}>;\n\nexport interface IComponent {\n componentName: string;\n component: LoadableComponent;\n viewController?(): IComponentViewController;\n}\n\nexport interface IComponentRegistry {\n [key: string]: IComponent;\n}\nexport interface ICachedComponentsRegistry {\n [key: string]: React.ComponentType;\n}\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IViewControllerData {\n [key: string]: any;\n}\n\nexport type ViewControllerLoadedMethod = (...args: any[]) => Promise;\n\nexport interface IComponentViewController {\n id?: string;\n loaded?: ViewControllerLoadedMethod;\n data?: IViewControllerData;\n dataState?: IViewControllerData;\n configMergeStrategy?: Function;\n initialize?(...args: any[]): void;\n handleState?(...args: any[]): void;\n setSSRState(data: IViewControllerData): void;\n setId(id: string): void;\n isLoading: boolean;\n}\n\nexport interface IServiceRegistryComponent {\n isLazy?: boolean;\n views?: string[];\n events?: string[];\n queries?: string[];\n name: string;\n version: string;\n isStarted: boolean;\n serviceBusController?: any;\n componentsRegistry: IComponentRegistry;\n cachedComponentsRegistry: ICachedComponentsRegistry;\n serviceInitializer: any;\n start(appConfig: any): Promise;\n register?(): void;\n getView(componentName: string): IComponent | undefined;\n setViewInCache(componentName: string, component: React.ComponentType): void;\n getViewFromCache(componentName: string): React.ComponentType;\n registerView(\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => object\n ): void;\n}\n\ninterface IServiceRegistry {\n [key: string]: IServiceRegistryComponent;\n}\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n}\n\ninterface IComponentRenderer {\n init(initialMarkup?: string): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\n\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n ComponentRenderer: IComponentRenderer;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window =\n (isWebRendered && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","//tslint:disable:export-name\nexport { VtoService } from './service-setup/VtoService';\nimport { diContainer, serviceNames } from './service-setup/diContainer';\nimport { setupServiceInfo } from 'elc-universal-utils';\n\ndiContainer.get(serviceNames.vtoService).register();\n\nsetupServiceInfo(__serviceInfo__);\n","export const IFRAME_MIN_WIDTH = 300;\r\nexport const IFRAME_MAX_WIDTH = 600;\r\nexport const TIMEOUT_VALUE = 500;\r\nexport const IFRAME_EXTRA_PADDING = 30;\r\nexport const IFRAME_RATIO = 1.22;\r\nexport const COMPARE_BUTTON_HEIGHT = 225;\r\nexport const SKIN_SMOOTH_STRENGTH = 50;\r\nexport const PIE_CHART_DEFAULT_VALUE = 1;\r\nexport const CUSTOM_SLIDES_TO_SHOW = 5;\r\nexport const CUSTOM_SLIDES_TO_SCROLL = 5;\r\nexport const VTO_GUID = 'guid';\r\nexport const NO_SCROLL_CLASS = 'no-scroll';\r\nexport const VTO_ACTIVE_CLASS = 'vto-active';\r\nexport const VTO_DISCLOSE_PARAM = 'vto_disclose';\r\nexport const VTO_OPEN_PARAM = 'vto_open';\r\nexport const VTO_MATCHES_COOKIE_NAME = 'vtoMatches';\r\n\r\nexport enum Events {\r\n CAMERA_CLOSED = 'cameraClosed',\r\n CAMERA_FAILED = 'cameraFailed',\r\n CAMERA_OPENED = 'cameraOpened',\r\n COMPARE = 'compare',\r\n COMPARE_DISABLED = 'compareDisabled',\r\n CLOSED = 'closed',\r\n ENGINE_CLOSED = 'engineClosed',\r\n LOADED = 'loaded',\r\n LOADING = 'loading',\r\n KISS_DETECTED = 'kissDetected',\r\n OPENED = 'opened',\r\n PHOTO_LOADED = 'photoLoaded',\r\n PHOTO_SAVED = 'photoSaved',\r\n RESET = 'reset',\r\n VIDEO_LOADED = 'videoLoaded',\r\n SHADE_FINDER_STARTED = 'shadeFinderStarted',\r\n SHADE_FINDER_COMPLETED = 'shadeFinderCompleted',\r\n SHADE_FINDER_CANCELLED = 'shadeFinderCancelled',\r\n SKIN_SHADE_FOUND = 'skinShadeFound',\r\n ZOOM = 'zoom'\r\n}\r\n\r\nexport enum FoundationShadeTypes {\r\n COOLER = 'cooler',\r\n LIGHTER = 'lighter',\r\n BEST = 'best',\r\n DARKER = 'darker',\r\n WARMER = 'warmer'\r\n}\r\n\r\nexport enum FoundationPairShadeTypes {\r\n CASUAL = 'casualPair',\r\n BEST = 'bestPair',\r\n GLAM = 'glamPair'\r\n}\r\n","export const IFRAME_MIN_HEIGHT = 500;\r\nexport const SKIN_CARE_MODE = 'capture';\r\nexport const FACE_CONCERN_PARAM = 'face_concern';\r\nexport const EYE_CONCERN_PARAM = 'eye_concern';\r\nexport const SKIN_TYPE_PARAM = 'skin_type';\r\nexport const SKIN_TYPE_VALUE = 'Normal / Combo';\r\nexport const DEFAULT_LOCALE = 'en_US';\r\nexport const DRUPAL_API_TOKEN = '0709040f8da71ca45eceb1ab8f2d8c5a';\r\nexport const DRUPAL_API_FIELDS = '+rendered,+attached';\r\nexport const SKU_ITEM = 'sku';\r\nexport const PRODUCT_ITEM = 'product';\r\nexport const REVISION_TAG_COOKIE = 'ELC_SITE_TAG';\r\nexport const LOCALE_COOKIE = 'LOCALE';\r\nexport const SCROLL_TIMEOUT = 100;\r\nexport const OFFSET_HEIGHT = 50;\r\nexport const SCROLL_BEHAVIOR_SMOOTH = 'smooth';\r\nexport const SCROLL_BLOCK_START = 'start';\r\nexport const EDITORIAL_NODE_KEY = 'skinCareEditorialNode';\r\n\r\nexport enum Events {\r\n CAMERA_CLOSED = 'cameraClosed',\r\n CAMERA_FAILED = 'cameraFailed',\r\n CAMERA_OPENED = 'cameraOpened',\r\n CLOSED = 'closed',\r\n LOADED = 'loaded',\r\n LOADING = 'loading',\r\n OPENED = 'opened',\r\n VIDEO_LOADED = 'videoLoaded',\r\n SKIN_ANALYSIS_STARTED = 'skinAnalysisStarted',\r\n SKIN_ANALYSIS_FINISHED = 'skinAnalysisFinished',\r\n SKIN_BACK_TO_DETECTING = 'skinBackToDetecting'\r\n}\r\n\r\nexport enum FaceConcerns {\r\n linesAndWrinkles = 'lines_and_wrinkles',\r\n spot = 'spot',\r\n texture = 'texture',\r\n redness = 'redness'\r\n}\r\n\r\nexport enum EyeConcerns {\r\n wrinkleEyes = 'wrinkle_eyes',\r\n darkCircle = 'dark_circle'\r\n}\r\n\r\nexport enum OtherConcerns {\r\n wrinkleForehead = 'wrinkle_forehead',\r\n wrinkleLowerFace = 'wrinkle_lower_face'\r\n}\r\n\r\nexport enum QuizApiConcerns {\r\n linesAndWrinkles = 'Lines and Wrinkles',\r\n spot = 'Dark Spots',\r\n texture = 'Uneven Texture',\r\n redness = 'Irritation/Redness',\r\n wrinkleEyes = 'Fewer Lines/ Wrinkles',\r\n darkCircle = 'Brighten Dark Circles'\r\n}\r\n\r\nexport const blockPositionMapping: {\r\n [key: string]: string;\r\n} = Object.freeze({\r\n productGrid: 'productGridPosition',\r\n crosssellNode: 'crosssellNodePosition',\r\n extraCareNode: 'extraCareNodePosition',\r\n skinDiagramNode: 'skinDiagramNodePosition',\r\n skincareRegimenNode: 'skinCareRegimenNodePosition',\r\n skinTipsNode: 'skinTipsNodePosition',\r\n skinCareEditorialNode: 'skinCareEditorialNodePosition'\r\n});\r\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import React from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\n/* eslint-disable import/prefer-default-export */\nfunction invariant(condition, message) {\n if (condition) return;\n var error = new Error(\"loadable: \" + message);\n error.framesToPop = 1;\n error.name = 'Invariant Violation';\n throw error;\n}\nfunction warn(message) {\n // eslint-disable-next-line no-console\n console.warn(\"loadable: \" + message);\n}\n\nvar Context = /*#__PURE__*/\nReact.createContext();\n\nvar LOADABLE_REQUIRED_CHUNKS_KEY = '__LOADABLE_REQUIRED_CHUNKS__';\nfunction getRequiredChunkKey(namespace) {\n return \"\" + namespace + LOADABLE_REQUIRED_CHUNKS_KEY;\n}\n\nvar sharedInternals = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getRequiredChunkKey: getRequiredChunkKey,\n invariant: invariant,\n Context: Context\n});\n\nfunction resolveConstructor(ctor) {\n if (typeof ctor === 'function') {\n return {\n requireAsync: ctor\n };\n }\n\n return ctor;\n}\n\nvar withChunkExtractor = function withChunkExtractor(Component) {\n return function (props) {\n return React.createElement(Context.Consumer, null, function (extractor) {\n return React.createElement(Component, Object.assign({\n __chunkExtractor: extractor\n }, props));\n });\n };\n};\n\nvar identity = function identity(v) {\n return v;\n};\n\nfunction createLoadable(_ref) {\n var _ref$resolve = _ref.resolve,\n resolve = _ref$resolve === void 0 ? identity : _ref$resolve,\n _render = _ref.render,\n onLoad = _ref.onLoad;\n\n function loadable(loadableConstructor, options) {\n if (options === void 0) {\n options = {};\n }\n\n var ctor = resolveConstructor(loadableConstructor);\n var cache = {};\n\n function _getCacheKey(props) {\n if (options.cacheKey) {\n return options.cacheKey(props);\n }\n\n if (ctor.resolve) {\n return ctor.resolve(props);\n }\n\n return null;\n }\n\n var InnerLoadable =\n /*#__PURE__*/\n function (_React$Component) {\n _inheritsLoose(InnerLoadable, _React$Component);\n\n InnerLoadable.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n var cacheKey = _getCacheKey(props);\n\n return _extends({}, state, {\n cacheKey: cacheKey,\n loading: state.loading || state.cacheKey !== cacheKey\n });\n };\n\n function InnerLoadable(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n result: null,\n error: null,\n loading: true,\n cacheKey: _getCacheKey(props)\n };\n _this.promise = null;\n invariant(!props.__chunkExtractor || ctor.requireSync, 'SSR requires `@loadable/babel-plugin`, please install it'); // Server-side\n\n if (props.__chunkExtractor) {\n // This module has been marked with no SSR\n if (options.ssr === false) {\n return _assertThisInitialized(_this);\n } // We run load function, we assume that it won't fail and that it\n // triggers a synchronous loading of the module\n\n\n ctor.requireAsync(props)[\"catch\"](function () {}); // So we can require now the module synchronously\n\n _this.loadSync();\n\n props.__chunkExtractor.addChunk(ctor.chunkName(props));\n\n return _assertThisInitialized(_this);\n } // Client-side with `isReady` method present (SSR probably)\n // If module is already loaded, we use a synchronous loading\n // Only perform this synchronous loading if the component has not\n // been marked with no SSR, else we risk hydration mismatches\n\n\n if (options.ssr !== false && ctor.isReady && ctor.isReady(props)) {\n _this.loadSync();\n }\n\n return _this;\n }\n\n var _proto = InnerLoadable.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.mounted = true;\n\n if (this.state.loading) {\n this.loadAsync();\n } else if (!this.state.error) {\n this.triggerOnLoad();\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Component is reloaded if the cacheKey has changed\n if (prevState.cacheKey !== this.state.cacheKey) {\n this.promise = null;\n this.loadAsync();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n if (this.mounted) {\n this.setState(nextState, callback);\n }\n };\n\n _proto.triggerOnLoad = function triggerOnLoad() {\n var _this2 = this;\n\n if (onLoad) {\n setTimeout(function () {\n onLoad(_this2.state.result, _this2.props);\n });\n }\n };\n\n _proto.loadSync = function loadSync() {\n if (!this.state.loading) return;\n\n try {\n var loadedModule = ctor.requireSync(this.props);\n var result = resolve(loadedModule, {\n Loadable: Loadable\n });\n this.state.result = result;\n this.state.loading = false;\n } catch (error) {\n this.state.error = error;\n }\n };\n\n _proto.getCacheKey = function getCacheKey() {\n return _getCacheKey(this.props) || JSON.stringify(this.props);\n };\n\n _proto.getCache = function getCache() {\n return cache[this.getCacheKey()];\n };\n\n _proto.setCache = function setCache(value) {\n cache[this.getCacheKey()] = value;\n };\n\n _proto.loadAsync = function loadAsync() {\n var _this3 = this;\n\n if (!this.promise) {\n var _this$props = this.props,\n __chunkExtractor = _this$props.__chunkExtractor,\n forwardedRef = _this$props.forwardedRef,\n props = _objectWithoutPropertiesLoose(_this$props, [\"__chunkExtractor\", \"forwardedRef\"]);\n\n this.promise = ctor.requireAsync(props).then(function (loadedModule) {\n var result = resolve(loadedModule, {\n Loadable: Loadable\n });\n\n if (options.suspense) {\n _this3.setCache(result);\n }\n\n _this3.safeSetState({\n result: resolve(loadedModule, {\n Loadable: Loadable\n }),\n loading: false\n }, function () {\n return _this3.triggerOnLoad();\n });\n })[\"catch\"](function (error) {\n _this3.safeSetState({\n error: error,\n loading: false\n });\n });\n }\n\n return this.promise;\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n forwardedRef = _this$props2.forwardedRef,\n propFallback = _this$props2.fallback,\n __chunkExtractor = _this$props2.__chunkExtractor,\n props = _objectWithoutPropertiesLoose(_this$props2, [\"forwardedRef\", \"fallback\", \"__chunkExtractor\"]);\n\n var _this$state = this.state,\n error = _this$state.error,\n loading = _this$state.loading,\n result = _this$state.result;\n\n if (options.suspense) {\n var cachedResult = this.getCache();\n if (!cachedResult) throw this.loadAsync();\n return _render({\n loading: false,\n fallback: null,\n result: cachedResult,\n options: options,\n props: _extends({}, props, {\n ref: forwardedRef\n })\n });\n }\n\n if (error) {\n throw error;\n }\n\n var fallback = propFallback || options.fallback || null;\n\n if (loading) {\n return fallback;\n }\n\n return _render({\n loading: loading,\n fallback: fallback,\n result: result,\n options: options,\n props: _extends({}, props, {\n ref: forwardedRef\n })\n });\n };\n\n return InnerLoadable;\n }(React.Component);\n\n var EnhancedInnerLoadable = withChunkExtractor(InnerLoadable);\n var Loadable = React.forwardRef(function (props, ref) {\n return React.createElement(EnhancedInnerLoadable, Object.assign({\n forwardedRef: ref\n }, props));\n }); // In future, preload could use ``\n\n Loadable.preload = function (props) {\n ctor.requireAsync(props);\n };\n\n Loadable.load = function (props) {\n return ctor.requireAsync(props);\n };\n\n return Loadable;\n }\n\n function lazy(ctor, options) {\n return loadable(ctor, _extends({}, options, {\n suspense: true\n }));\n }\n\n return {\n loadable: loadable,\n lazy: lazy\n };\n}\n\nfunction resolveComponent(loadedModule, _ref) {\n var Loadable = _ref.Loadable;\n // eslint-disable-next-line no-underscore-dangle\n var Component = loadedModule.__esModule ? loadedModule[\"default\"] : loadedModule[\"default\"] || loadedModule;\n hoistNonReactStatics(Loadable, Component, {\n preload: true\n });\n return Component;\n}\n\n/* eslint-disable no-use-before-define, react/no-multi-comp */\n\nvar _createLoadable =\n/*#__PURE__*/\ncreateLoadable({\n resolve: resolveComponent,\n render: function render(_ref) {\n var Component = _ref.result,\n props = _ref.props;\n return React.createElement(Component, props);\n }\n}),\n loadable = _createLoadable.loadable,\n lazy = _createLoadable.lazy;\n\n/* eslint-disable no-use-before-define, react/no-multi-comp */\n\nvar _createLoadable$1 =\n/*#__PURE__*/\ncreateLoadable({\n onLoad: function onLoad(result, props) {\n if (result && props.forwardedRef) {\n if (typeof props.forwardedRef === 'function') {\n props.forwardedRef(result);\n } else {\n props.forwardedRef.current = result;\n }\n }\n },\n render: function render(_ref) {\n var result = _ref.result,\n loading = _ref.loading,\n props = _ref.props;\n\n if (!loading && props.children) {\n return props.children(result);\n }\n\n return null;\n }\n}),\n loadable$1 = _createLoadable$1.loadable,\n lazy$1 = _createLoadable$1.lazy;\n\n/* eslint-disable no-underscore-dangle, camelcase */\nvar BROWSER = typeof window !== 'undefined';\nfunction loadableReady(done, _temp) {\n if (done === void 0) {\n done = function done() {};\n }\n\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$namespace = _ref.namespace,\n namespace = _ref$namespace === void 0 ? '' : _ref$namespace;\n\n if (!BROWSER) {\n warn('`loadableReady()` must be called in browser only');\n done();\n return Promise.resolve();\n }\n\n var requiredChunks = null;\n\n if (BROWSER) {\n var dataElement = document.getElementById(getRequiredChunkKey(namespace));\n\n if (dataElement) {\n requiredChunks = JSON.parse(dataElement.textContent);\n }\n }\n\n if (!requiredChunks) {\n warn('`loadableReady()` requires state, please use `getScriptTags` or `getScriptElements` server-side');\n done();\n return Promise.resolve();\n }\n\n var resolved = false;\n return new Promise(function (resolve) {\n window.__LOADABLE_LOADED_CHUNKS__ = window.__LOADABLE_LOADED_CHUNKS__ || [];\n var loadedChunks = window.__LOADABLE_LOADED_CHUNKS__;\n var originalPush = loadedChunks.push.bind(loadedChunks);\n\n function checkReadyState() {\n if (requiredChunks.every(function (chunk) {\n return loadedChunks.some(function (_ref2) {\n var chunks = _ref2[0];\n return chunks.indexOf(chunk) > -1;\n });\n })) {\n if (!resolved) {\n resolved = true;\n resolve();\n done();\n }\n }\n }\n\n loadedChunks.push = function () {\n originalPush.apply(void 0, arguments);\n checkReadyState();\n };\n\n checkReadyState();\n });\n}\n\n/* eslint-disable no-underscore-dangle */\nvar loadable$2 = loadable;\nloadable$2.lib = loadable$1;\nvar lazy$2 = lazy;\nlazy$2.lib = lazy$1;\nvar __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = sharedInternals;\n\nexport default loadable$2;\nexport { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, lazy$2 as lazy, loadableReady };\n","import loadable from '@loadable/component';\nimport {\n root,\n ICachedComponentsRegistry,\n IComponentRegistry,\n IComponentViewController,\n RegisteredComponent\n} from 'elc-universal-utils';\nimport { ServiceBusController } from './ServiceBusController';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type IAppConfig = any;\nexport type ServiceInitializer = (config: IAppConfig) => ServiceBusController | void;\n\nexport abstract class Service {\n public name: string;\n public version: string;\n public serviceBusController: ServiceBusController;\n public componentsRegistry: IComponentRegistry = {};\n public cachedComponentsRegistry: ICachedComponentsRegistry = {};\n protected serviceInitializer: ServiceInitializer;\n public isStarted: boolean = false;\n constructor(name: string, version: string, serviceInitializer: ServiceInitializer) {\n this.name = name;\n this.version = version;\n this.serviceInitializer = serviceInitializer;\n }\n public async start(appConfig: IAppConfig) {\n if (!this.isStarted) {\n this.serviceInitializer(appConfig);\n this.isStarted = true;\n }\n }\n\n public register = () => {\n root.ServiceRegistry = root.ServiceRegistry || {};\n root.ServiceRegistry[this.name] = Object.assign(root.ServiceRegistry[this.name] || {}, {\n start: this.start,\n name: this.name,\n version: this.version,\n getView: this.getView,\n registerView: this.registerView,\n setViewInCache: this.setViewInCache,\n getViewFromCache: this.getViewFromCache,\n serviceInitializer: this.serviceInitializer,\n componentsRegistry: this.componentsRegistry,\n cachedComponentsRegistry: this.cachedComponentsRegistry,\n isStarted: this.isStarted\n });\n };\n\n public getView = (componentName: string) => {\n return this.componentsRegistry[componentName];\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setViewInCache = (componentName: string, component: React.ComponentType) => {\n this.cachedComponentsRegistry[componentName] = component;\n };\n\n public getViewFromCache = (componentName: string) => {\n return this.cachedComponentsRegistry[componentName];\n };\n\n public registerView = (\n componentName: string,\n component: RegisteredComponent,\n viewController?: () => IComponentViewController\n ) => {\n this.componentsRegistry[componentName] = {\n componentName,\n component: loadable(component),\n viewController\n };\n };\n}\n","import { diContainer, serviceNames } from './diContainer';\nimport { Service, ServiceInitializer } from 'elc-service';\nimport { VTO, VTO_SKIN_CARE } from 'elc-service-view-names';\n\nconst { name, version } = __serviceInfo__;\n\nexport class VtoService extends Service {\n constructor(serviceInitializer: ServiceInitializer) {\n super(name, version, serviceInitializer);\n\n this.registerView(\n VTO,\n () =>\n import(\n /* webpackChunkName: 'Vto' */\n '../exported/vto/Vto'\n ),\n // @ts-ignore\n () => diContainer.get(serviceNames.vtoViewController)\n );\n\n this.registerView(\n VTO_SKIN_CARE,\n () =>\n import(\n /* webpackChunkName: 'VtoSkinCare' */\n '../exported/vto-skin-care/VtoSkinCare'\n ),\n // @ts-ignore\n () => diContainer.get(serviceNames.vtoSkinCareViewController)\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { observable, action } from 'mobx';\n\nexport class ConfigStore {\n @observable public config: any = {};\n\n constructor(config: any) {\n this.updateConfig(config);\n }\n\n @action\n public updateConfig(config: any) {\n this.config = { ...config };\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class ServiceBusController {\n constructor() {}\n}\n","import { observable } from 'mobx';\nimport {\n IComponentViewController,\n IViewControllerData,\n ViewControllerLoadedMethod\n} from 'elc-universal-utils';\n\nexport class ViewController implements IComponentViewController {\n public id?: string;\n public dataState?: IViewControllerData;\n public data?: IViewControllerData;\n public loaded?: ViewControllerLoadedMethod;\n public configMergeStrategy?: Function;\n @observable public isLoading: boolean = true;\n\n public setSSRState = (data?: IViewControllerData) => {\n this.dataState = data;\n };\n\n public setId = (id?: string) => {\n this.id = id && btoa(unescape(encodeURIComponent(id)));\n };\n}\n","import { computed, action, observable } from 'mobx';\nimport { ViewController } from 'elc-service';\nimport { root } from 'elc-universal-utils';\nimport { Breakpoints } from 'elc-base-theme';\nimport * as VtoConstants from '../constants/Vto';\nimport { query, serviceQueries } from 'elc-service-bus';\nimport {\n IVtoConfig,\n IProduct,\n IVtoEventListenerResult,\n IVtoFoundationShadeLabels,\n IVtoFoundationPerfectMatches,\n IProductSku\n} from '../interfaces/IVto';\nimport { IVtoSkinConcernScores } from '../interfaces/IVtoSkinCare';\nimport { IFeature } from '../constants/Features';\n\nexport interface IVtoApiMethods {\n init({}): void;\n open(liveCam: boolean, image: object | null, detectSkin: boolean): void;\n closeEngine(): void;\n close(): void;\n applyMakeupBySku(skuId: string): void;\n addEventListener(\n event: string,\n callback: (result: IVtoEventListenerResult | IVtoSkinConcernScores) => void\n ): number;\n removeEventListener(listenerId: number): void;\n openSkincare(skincareMode: string): void;\n getSkincareRecommendationList({}): void;\n}\n\nexport interface IVtoWindow extends Window {\n ymkAsyncInit(): void;\n YMK: IVtoApiMethods;\n}\n\ndeclare let window: IVtoWindow;\n\nexport class VtoBaseController extends ViewController {\n @observable public product: IProduct;\n public isVtoFoundationEnabled: boolean;\n public isVtoMakeupEnabled: boolean;\n public vtoFoundationPerfectMatchText: IVtoFoundationShadeLabels;\n public handleShadeSelect: (name: string, productId: string) => void;\n public bodyElementClass: DOMTokenList = document.body.classList;\n public eventListenerIdentifiers: number[] = [];\n public iframeWidth: number;\n public iframeHeight: number;\n public vtoConfig: IVtoConfig;\n public isVtoDisclosed: boolean = false;\n public isVtoFoundationMultiIds: boolean;\n public productIdList: string[];\n\n @computed\n get vtoFeature() {\n return this.vtoConfig && this.vtoConfig.vtoFeature;\n }\n\n @computed\n get vtoFoundationFeature() {\n return this.vtoFeature && this.vtoFeature.foundation;\n }\n\n @computed\n public get getVtoApiConfig() {\n if (!this.vtoConfig || !this.vtoConfig.features) {\n return;\n }\n\n if (this.isVtoFoundationEnabled) {\n return this.vtoConfig.features.vtoFoundation;\n }\n\n return this.vtoConfig.features.vtoMakeup;\n }\n\n public loadVto = (apiUrl: string, apiKey: string) => {\n if (!!document.querySelector(`script[src=\"${apiUrl}${apiKey}\"]`)) {\n return;\n }\n const script = document.getElementsByTagName('script')[0];\n const vtoScript = document.createElement('script');\n vtoScript.type = 'text/javascript';\n vtoScript.async = true;\n vtoScript.src = `${apiUrl}${apiKey}`;\n if (script !== undefined && script.parentNode !== null) {\n script.parentNode.insertBefore(vtoScript, script);\n }\n };\n\n public getIframeDimension = () => {\n // Get image container width\n const imageContainer: HTMLElement | null =\n window.innerWidth >= Breakpoints.desktop\n ? document.querySelector('.js-left-sticky-column') ||\n document.querySelector('.js-left-column-section')\n : document.querySelector('.js-product-full');\n const imageContainerWidth = (imageContainer as HTMLElement).offsetWidth;\n\n // Reduce extra padding for larger screens\n const imageContainerModifiedWidth =\n window.innerWidth >= Breakpoints.desktop\n ? imageContainerWidth - VtoConstants.IFRAME_EXTRA_PADDING\n : imageContainerWidth;\n\n let iframeWidth = imageContainerModifiedWidth;\n\n // Set max width if the container exceeds max width\n if (imageContainerModifiedWidth > VtoConstants.IFRAME_MAX_WIDTH) {\n iframeWidth = VtoConstants.IFRAME_MAX_WIDTH;\n }\n\n // Set min width if the container width is lesser than the min width\n if (imageContainerModifiedWidth < VtoConstants.IFRAME_MIN_WIDTH) {\n iframeWidth = VtoConstants.IFRAME_MIN_WIDTH;\n }\n // Calculate height using VTO ratio\n const iframeHeight = iframeWidth * VtoConstants.IFRAME_RATIO;\n\n return {\n iframeWidth,\n iframeHeight\n };\n };\n\n public handleVtoResize = (reset: boolean) => {\n const hasLipVto = this.vtoFoundationFeature && this.vtoFoundationFeature.hasLipVto;\n if (hasLipVto) {\n const iframe = document.getElementById('YMK-module-iframe');\n const maxHeight = window.innerHeight;\n const compareOverlayOffset =\n this.vtoFoundationFeature && this.vtoFoundationFeature.compareOverlayOffset;\n\n if (iframe && compareOverlayOffset) {\n iframe.style.height = reset\n ? `${screen.height}px`\n : `${maxHeight - compareOverlayOffset}px`;\n }\n }\n };\n\n public getVtoParams = () => {\n const compareOverlayOffset =\n this.vtoFoundationFeature && this.vtoFoundationFeature.compareOverlayOffset;\n const bottomPanelOffsetY = compareOverlayOffset || VtoConstants.COMPARE_BUTTON_HEIGHT;\n const isDesktop = window.innerWidth >= Breakpoints.desktop;\n const { iframeWidth, iframeHeight } = this.getIframeDimension();\n const { language } = this.getVtoApiConfig;\n this.iframeWidth = iframeWidth;\n this.iframeHeight = iframeHeight;\n\n if (this.isVtoFoundationEnabled) {\n return {\n autoOpen: false,\n showCloseBtnOnLauncher: true,\n bottomPanelOffsetY: bottomPanelOffsetY,\n ...(this.isVtoFoundationMultiIds && {\n productIdList: this.productIdList\n }),\n ...(language && { language })\n };\n }\n\n return {\n autoOpen: true,\n skinSmoothStrength: VtoConstants.SKIN_SMOOTH_STRENGTH,\n showCloseBtnOnLauncher: !this.isVtoDisclosed,\n width: isDesktop ? iframeWidth : '',\n height: isDesktop ? iframeHeight : '',\n ...(language && { language })\n };\n };\n\n public filterPerfectMatches = (perfectMatchResults: IVtoFoundationPerfectMatches) => {\n const vtoFoundationShadeValues = Object.values(VtoConstants.FoundationShadeTypes);\n\n return Object.entries(perfectMatchResults).reduce(\n (perfectMatchAccumulator, [label, skuId]) => {\n // VTO sends us the best shade in the name of \"guid\"\n const shadeLabel =\n label === VtoConstants.VTO_GUID\n ? VtoConstants.FoundationShadeTypes.BEST\n : (label as VtoConstants.FoundationShadeTypes);\n if (vtoFoundationShadeValues.indexOf(shadeLabel) > -1) {\n perfectMatchAccumulator[skuId] = this.vtoFoundationPerfectMatchText[shadeLabel];\n }\n\n return perfectMatchAccumulator;\n },\n {} as IVtoFoundationPerfectMatches\n );\n };\n\n public updateShadeEntity = (perfectMatches: IVtoFoundationPerfectMatches) => {\n const perfectMatchSkuIds = Object.keys(perfectMatches);\n this.product.shades.forEach((shade) => {\n if (shade.parentSku && perfectMatchSkuIds.indexOf(shade.parentSku.skuId) > -1) {\n const perfectShadeLabel = perfectMatches[shade.parentSku.skuId];\n shade.changeToPerfect && shade.changeToPerfect(perfectShadeLabel);\n } else {\n shade.resetPerfect && shade.resetPerfect();\n shade.showNameInsideShadeCircle && shade.showNameInsideShadeCircle();\n }\n });\n };\n\n public selectPerfectSku = async (result?: IVtoFoundationPerfectMatches) => {\n // VTO sends us the best shade in the name of \"guid\"\n const skuId = result && result[VtoConstants.VTO_GUID];\n if (skuId) {\n const skuData = await query(serviceQueries.GET_SKUS, [skuId]);\n const { shades } = skuData[skuId];\n if (this.handleShadeSelect) {\n this.handleShadeSelect(shades[0].name, this.product.productId);\n }\n }\n };\n\n public resetShadeProps = () => {\n if (this.isVtoMakeupEnabled) {\n return;\n }\n\n this.product.shades.forEach((shade) => shade.resetPerfect && shade.resetPerfect());\n };\n\n public removeVtoEventListeners = () => {\n if (!this.eventListenerIdentifiers.length) {\n return;\n }\n\n this.eventListenerIdentifiers.forEach((eventListenerIdentifier) =>\n window.YMK.removeEventListener(eventListenerIdentifier)\n );\n this.eventListenerIdentifiers = [];\n };\n\n public toggleBodyClasses = (hasBodyClasses: boolean) => {\n const isMobile = window.innerWidth < Breakpoints.desktop;\n const bodyClasses = [VtoConstants.NO_SCROLL_CLASS, VtoConstants.VTO_ACTIVE_CLASS];\n isMobile && hasBodyClasses\n ? this.bodyElementClass.add(...bodyClasses)\n : this.bodyElementClass.remove(...bodyClasses);\n };\n\n public checkVtoDisclose = () => {\n const vtoDiscloseParam = this.getQueryParam(VtoConstants.VTO_DISCLOSE_PARAM);\n this.isVtoDisclosed = vtoDiscloseParam !== null;\n };\n\n public getQueryParam = (searchKey: string) => {\n const search = (root.location).search;\n const urlParams = new URLSearchParams(search);\n\n return urlParams.get(searchKey);\n };\n\n @action\n public updateProduct = (product: IProduct) => {\n this.product = product;\n };\n}\n","import * as React from 'react';\nimport { observable, action, computed } from 'mobx';\n\nimport {\n ICrossSellCategory,\n IProduct,\n IProductSku,\n IShade,\n ISku,\n IVtoEventListenerResult,\n IVtoFoundationPairShadeLabels,\n IVtoFoundationPerfectMatches,\n IVtoFoundationShadeLabels\n} from '../interfaces/IVto';\nimport { IVtoServiceConfig, IVtoTranslations } from '../../exported/vto/Vto';\nimport { emit, events, on, query, serviceQueries } from 'elc-service-bus';\nimport { root, BrowserStorage } from 'elc-universal-utils';\nimport * as VtoConstants from '../constants/Vto';\nimport { VtoBaseController, IVtoWindow } from './VtoBaseController';\nimport { IFeature } from '../constants/Features';\n\ndeclare let window: IVtoWindow;\n\ninterface IVtoInitializeController {\n config: IVtoServiceConfig;\n vtoIframeRef: React.RefObject;\n translations: IVtoTranslations;\n}\n\nexport class VtoViewController extends VtoBaseController {\n @observable public isVtoShadeGridEnabled: boolean = false;\n @observable public isVtoOpened: boolean = false;\n @observable public isVtoLoaded: boolean = false;\n @observable public isVtoFoundationOverlayOpened: boolean = false;\n @observable public pairProduct?: IProduct;\n @observable public selectedPairSkuId: string;\n @observable public selectedPairShadeName: string = '';\n @observable private selectedSku: ISku;\n @observable public activeTab: string = 'tab-1';\n @observable public skusWithCrossSell: ISku[] = [];\n @observable public isMatchSaved: boolean = false;\n\n public translations: IVtoTranslations;\n public vtoFoundationPairText: IVtoFoundationPairShadeLabels;\n\n private togglePerfectShades?: (hidden: boolean) => void;\n private toggleProductImageSection: (isHidden: boolean) => void;\n private selectedSkuId: string;\n private vtoReInitTimeout: number;\n private vtoIframeRef: React.RefObject;\n private vtoShadeResult?: IVtoFoundationPerfectMatches;\n\n constructor() {\n super();\n this.checkVtoDisclose();\n }\n\n public openVtoOnLoad = () => {\n const checkVtoOpenOnLoad = this.checkVtoOpenOnLoad();\n if (checkVtoOpenOnLoad) {\n this.initVto();\n }\n };\n\n private checkVtoOpenOnLoad(): boolean {\n const params = new URLSearchParams(root.location.search);\n\n return params.has(VtoConstants.VTO_OPEN_PARAM);\n }\n\n @action\n public initialize = (props: IVtoInitializeController) => {\n const { config, translations, vtoIframeRef } = props;\n const {\n toggleProductImageSection,\n vtoConfig,\n vtoShadeGridProps,\n isVtoMakeupEnabled,\n isVtoFoundationEnabled,\n selectedSku,\n product,\n handleShadeSelect,\n productIdList\n } = config;\n this.vtoConfig = vtoConfig;\n this.isVtoMakeupEnabled = !!isVtoMakeupEnabled;\n this.isVtoFoundationEnabled = !!isVtoFoundationEnabled;\n this.isVtoFoundationMultiIds = !!this.isVtoFoundationMultiIdsEnabled;\n this.selectedSkuId = selectedSku.skuId;\n this.selectedSku = selectedSku;\n this.product = product;\n this.productIdList = productIdList || [product.productId];\n this.translations = translations;\n this.vtoIframeRef = vtoIframeRef;\n this.vtoFoundationPerfectMatchText = this.getVtoPerfectMatchText();\n this.vtoFoundationPairText = this.getVtoPairText();\n\n if (handleShadeSelect) {\n this.handleShadeSelect = handleShadeSelect;\n }\n if (vtoShadeGridProps) {\n this.togglePerfectShades = vtoShadeGridProps.togglePerfectShades;\n }\n if (toggleProductImageSection) {\n this.toggleProductImageSection = toggleProductImageSection;\n this.toggleProductImageSection(false);\n }\n this.loadPairProduct();\n this.addVtoEventListeners();\n };\n\n @computed\n get data() {\n return {\n isVtoShadeGridEnabled: this.isVtoShadeGridEnabled,\n isVtoFoundationOverlayOpened: this.isVtoFoundationOverlayOpened,\n isVtoOpened: this.isVtoOpened,\n pairProduct: this.pairProduct,\n selectedPairSku: this.selectedPairSku,\n selectedPairShade: this.selectedPairShade,\n selectedPairShades: this.selectedPairShades,\n activeTabs: this.activeTabContent,\n selectedPairSizeValue: this.selectedPairSizeValue,\n pairProductLargeImages: this.pairProductLargeImages,\n pairProductUrl: this.pairProductUrl,\n isMatchSaved: this.isMatchSaved\n };\n }\n\n private getVtoPerfectMatchText = () => {\n return Object.values(VtoConstants.FoundationShadeTypes).reduce((acc, value) => {\n const key = `${value}Label` as keyof IVtoTranslations;\n\n return {\n ...acc,\n [value]: this.translations[key]\n };\n }, {} as IVtoFoundationShadeLabels);\n };\n\n private getVtoPairText = () => {\n return Object.values(VtoConstants.FoundationPairShadeTypes).reduce((acc, value) => {\n const key = `${value}Label` as keyof IVtoTranslations;\n\n return {\n ...acc,\n [value]: this.translations[key]\n };\n }, {} as IVtoFoundationPairShadeLabels);\n };\n\n private addVtoEventListeners = () => {\n if (typeof window.YMK !== 'object' || this.eventListenerIdentifiers.length) {\n return;\n }\n Object.values(VtoConstants.Events).forEach((event) => {\n const eventListenerIdentifier = window.YMK.addEventListener(event, (result) =>\n this.handleEventListenerCallbacks[event](result as IVtoEventListenerResult)\n );\n this.eventListenerIdentifiers.push(eventListenerIdentifier);\n });\n };\n\n private handleEventListenerCallbacks: {\n [key in VtoConstants.Events]: (result: IVtoEventListenerResult) => void;\n } = {\n [VtoConstants.Events.LOADING]: () => emit(events.VTO_LOADING),\n [VtoConstants.Events.LOADED]: () => this.handleVtoLoadedEvent(),\n [VtoConstants.Events.OPENED]: () => this.handleVtoOpenedEvent(),\n [VtoConstants.Events.CLOSED]: () => this.handleVtoClosedEvent(),\n [VtoConstants.Events.SKIN_SHADE_FOUND]: (result) => {\n this.handleVtoSkinShadeFoundEvent(result);\n this.handleVtoResize(false);\n },\n [VtoConstants.Events.CAMERA_CLOSED]: () => emit(events.VTO_CAMERA_CLOSED),\n [VtoConstants.Events.CAMERA_FAILED]: () => emit(events.VTO_CAMERA_FAILED),\n [VtoConstants.Events.CAMERA_OPENED]: () => emit(events.VTO_CAMERA_OPENED),\n [VtoConstants.Events.COMPARE]: () => emit(events.VTO_COMPARE),\n [VtoConstants.Events.COMPARE_DISABLED]: () => emit(events.VTO_COMPARE_DISABLED),\n [VtoConstants.Events.ENGINE_CLOSED]: () => emit(events.VTO_ENGINE_CLOSED),\n [VtoConstants.Events.KISS_DETECTED]: () => emit(events.VTO_KISS_DETECTED),\n [VtoConstants.Events.PHOTO_LOADED]: () => emit(events.VTO_PHOTO_LOADED),\n [VtoConstants.Events.PHOTO_SAVED]: () => emit(events.VTO_PHOTO_SAVED),\n [VtoConstants.Events.RESET]: () => {\n emit(events.VTO_RESET);\n this.handleVtoResize(true);\n },\n [VtoConstants.Events.VIDEO_LOADED]: () => emit(events.VTO_VIDEO_LOADED),\n [VtoConstants.Events.SHADE_FINDER_STARTED]: () => this.handleVtoShadeFinderStartedEvent(),\n [VtoConstants.Events.SHADE_FINDER_COMPLETED]: () => emit(events.VTO_SHADE_FINDER_COMPLETED),\n [VtoConstants.Events.SHADE_FINDER_CANCELLED]: () => emit(events.VTO_SHADE_FINDER_CANCELLED),\n [VtoConstants.Events.ZOOM]: () => emit(events.VTO_ZOOM)\n };\n\n private handleVtoOpenedEvent = () => {\n if (this.isVtoFoundationEnabled && this.isVtoFoundationOverlayEnabled) {\n this.closeVtoFoundationOverlay();\n }\n if (this.isVtoMakeupEnabled) {\n this.toggleProductImageSection(true);\n }\n emit(events.VTO_OPENED);\n this.toggleVtoOpenedState(true);\n this.toggleBodyClasses(true);\n window.addEventListener('resize', this.reInitVto);\n };\n\n private handleVtoLoadedEvent = () => {\n emit(events.VTO_LOADED);\n this.updateVtoLoadedState(true);\n if (this.isVtoMakeupEnabled) {\n this.toggleVtoShadeGrid(true);\n if (this.selectedSkuId) {\n window.YMK.applyMakeupBySku(this.selectedSkuId);\n }\n }\n };\n\n private handleVtoShadeFinderStartedEvent = () => {\n const isShadeGridEnabled = false;\n emit(events.VTO_SHADE_FINDER_STARTED);\n this.toggleVtoShadeGrid(isShadeGridEnabled);\n };\n\n private handleVtoSkinShadeFoundEvent = (result: IVtoEventListenerResult) => {\n this.vtoShadeResult = result.readableRecommendations && result.readableRecommendations[0];\n this.setSaveMatch(false);\n emit(events.VTO_SKIN_SHADE_FOUND);\n this.foundationShadeFilter();\n this.toggleVtoShadeGrid(true);\n this.togglePerfectShades && this.togglePerfectShades(true);\n this.selectPerfectSku(this.vtoShadeResult);\n };\n\n private handleVtoClosedEvent = () => {\n emit(events.VTO_CLOSED);\n this.toggleVtoOpenedState(false);\n this.toggleBodyClasses(false);\n this.toggleProductImageSection(false);\n this.toggleVtoShadeGrid(false);\n this.resetShadeProps();\n this.togglePerfectShades && this.togglePerfectShades(false);\n this.updateVtoLoadedState(false);\n window.removeEventListener('resize', this.reInitVto);\n if (this.isVtoDisclosed) {\n this.initVto();\n }\n };\n\n @action\n public toggleVtoOpenedState = (isOpened: boolean) => {\n this.isVtoOpened = isOpened;\n };\n\n private closeVtoFoundationOverlay = () => {\n this.updateVtoFoundationOverlayState(false);\n };\n\n @action\n public toggleVtoShadeGrid = (isEnabled: boolean) => {\n this.isVtoShadeGridEnabled = isEnabled;\n };\n\n @action\n public updateVtoLoadedState = (isLoaded: boolean) => {\n this.isVtoLoaded = isLoaded;\n };\n\n @action\n public onVtoTabClick = (event: React.MouseEvent) => {\n const target = event.target;\n this.activeTab = target.dataset.tab || '';\n\n if (this.activeTab === 'tab-1' && this.togglePerfectShades) {\n this.togglePerfectShades(true);\n } else if (this.activeTab === 'tab-2') {\n emit(events.VTO_PAIR_SHADE_GRID_OPENED);\n } else if (this.activeTab === 'tab-3' && this.togglePerfectShades) {\n this.togglePerfectShades(false);\n }\n };\n\n @action\n public setPairProduct = (product: IProduct) => {\n this.pairProduct = product;\n };\n\n @action\n public setSelectedPairSkuId = (skuId: string) => {\n this.selectedPairSkuId = skuId;\n };\n\n @action\n public setSelectedPairShadeName = (shadeName: string) => {\n this.selectedPairShadeName = shadeName;\n };\n @action\n public setSkusWithCrossSell = (skus: ISku[]) => {\n this.skusWithCrossSell = skus;\n };\n\n @computed\n public get selectedPairSku() {\n if (!this.pairProduct) {\n return;\n }\n\n return (\n this.pairProduct.skus.find((sku) => sku.skuId === this.selectedPairSkuId) ||\n this.pairProduct.skus[0]\n );\n }\n\n @computed\n public get selectedPairShade() {\n return (\n this.selectedPairSku &&\n this.selectedPairSku.shades.find((shade) => shade.name === this.selectedPairShadeName)\n );\n }\n\n @computed\n public get selectedPairShades() {\n let selectedCrossSell =\n this.skusWithCrossSell[0] && this.skusWithCrossSell[0].crossSellCategory;\n if (\n this.selectedSku &&\n this.selectedSku.crossSellCategory &&\n this.selectedSku.crossSellCategory.length\n ) {\n selectedCrossSell = this.selectedSku.crossSellCategory;\n }\n\n if (!this.pairProduct || !selectedCrossSell) {\n return [];\n }\n\n return this.getShadesFromCrossSellProduct(selectedCrossSell);\n }\n\n private getShadesFromCrossSellProduct = (selectedCrossSell: ICrossSellCategory[]) => {\n return selectedCrossSell.reduce((acc: IShade[], value: ICrossSellCategory) => {\n const crossSellSku =\n this.pairProduct && this.pairProduct.skus.find((sku) => sku.skuId === value.skuId);\n if (crossSellSku && crossSellSku.shades[0]) {\n acc.push(crossSellSku.shades[0]);\n }\n\n return acc;\n }, []);\n };\n\n @computed\n get activeTabContent() {\n return {\n perfectShades: this.activeTab === 'tab-1',\n pairShades: this.activeTab === 'tab-2',\n allShades: this.activeTab === 'tab-3'\n };\n }\n\n @computed\n get selectedPairSizeValue() {\n return (\n (this.selectedPairSku &&\n this.selectedPairSku.sizes &&\n this.selectedPairSku.sizes[0].value) ||\n ''\n );\n }\n\n @computed\n get pairProductLargeImages() {\n if (!this.pairProduct || !this.selectedPairSku) {\n return [];\n }\n\n return this.selectedPairSku.media.large.concat(this.pairProduct.media.large);\n }\n\n @computed\n get pairProductUrl() {\n if (!this.pairProduct) {\n return '';\n }\n\n return `${this.pairProduct.productUrl}${\n this.selectedPairShade ? `?shade=${this.selectedPairShade.name}` : ''\n }`;\n }\n\n @computed\n get isVtoFoundationOverlayEnabled() {\n return this.vtoFoundationFeature && this.vtoFoundationFeature.isOverlayEnabled;\n }\n\n @computed\n get isVtoFoundationMultiIdsEnabled() {\n return this.vtoFoundationFeature && this.vtoFoundationFeature.isMultiIdsEnabled;\n }\n\n public sortPerfectLabels = (a: IShade, b: IShade) => {\n const orderedPerfectLabels = [\n this.translations.coolerLabel,\n this.translations.lighterLabel,\n this.translations.bestLabel,\n this.translations.darkerLabel,\n this.translations.warmerLabel\n ];\n\n if (a.perfectShadeLabel && b.perfectShadeLabel && orderedPerfectLabels) {\n const labelA = orderedPerfectLabels.indexOf(a.perfectShadeLabel);\n const labelB = orderedPerfectLabels.indexOf(b.perfectShadeLabel);\n\n if (labelA < labelB) {\n return -1;\n }\n\n if (labelA > labelB) {\n return 1;\n }\n }\n\n return 0;\n };\n\n private loadPairProduct = async () => {\n const skusWithCrossSell = this.product.skus.filter(\n (sku) => !!(sku.crossSellCategory && sku.crossSellCategory.length)\n );\n const defaultSku = skusWithCrossSell[0];\n const skuIds = skusWithCrossSell.reduce((acc: string[], current: ISku) => {\n if (current.crossSellCategory) {\n current.crossSellCategory.map((sku) => {\n acc.push(sku.skuId);\n });\n }\n\n return acc;\n }, []);\n\n if (defaultSku) {\n const skuData = await query(serviceQueries.GET_SKUS, skuIds);\n\n //asumming there's only one pair product match\n const pairProduct = Object.values(skuData)[0].parentProduct;\n this.setSkusWithCrossSell(skusWithCrossSell);\n this.setPairProduct(pairProduct);\n }\n };\n\n private foundationShadeFilter = () => {\n if (this.vtoShadeResult) {\n const perfectMatches = this.filterPerfectMatches(this.vtoShadeResult);\n this.updateShadeEntity(perfectMatches);\n }\n };\n\n private reInitVto = () => {\n if (this.vtoReInitTimeout) {\n clearTimeout(this.vtoReInitTimeout);\n }\n\n this.vtoReInitTimeout = setTimeout(() => {\n const { iframeWidth } = this.getIframeDimension();\n const vtoIframeRef = this.vtoIframeRef && this.vtoIframeRef.current;\n if (iframeWidth !== this.iframeWidth && vtoIframeRef && vtoIframeRef.hasChildNodes()) {\n window.YMK.closeEngine();\n window.YMK.close();\n this.openVto();\n }\n }, VtoConstants.TIMEOUT_VALUE);\n };\n\n public initVto = () => {\n if (typeof window.ymkAsyncInit !== 'function') {\n const { apiUrl, apiKey } = this.getVtoApiConfig;\n this.loadVto(apiUrl, apiKey);\n this.declareVtoCallback();\n }\n this.openVto();\n };\n\n private declareVtoCallback = () => {\n window.ymkAsyncInit = () => {\n if (typeof window.YMK !== 'undefined') {\n const vtoParams = this.getVtoParams();\n window.YMK.init(vtoParams);\n this.openVtoFoundation();\n this.addVtoEventListeners();\n }\n };\n };\n\n private openVtoFoundation() {\n if (this.isVtoFoundationEnabled) {\n this.isVtoFoundationOverlayEnabled\n ? this.showVtoFoundationOverlay()\n : window.YMK.open(true, null, true);\n }\n }\n\n private openVto = () => {\n this.toggleVtoOpenedState(true);\n this.toggleBodyClasses(true);\n window.ymkAsyncInit();\n };\n\n private showVtoFoundationOverlay = () => {\n this.updateVtoFoundationOverlayState(true);\n };\n\n @action\n public updateVtoFoundationOverlayState = (isOverlayOpened: boolean) => {\n this.isVtoFoundationOverlayOpened = isOverlayOpened;\n };\n\n public handleVtoUnmount = () => {\n this.handleVtoClosedEvent();\n this.removeVtoEventListeners();\n };\n\n @action\n public onPairShadeSelect = (shadeName: string) => {\n const selectedPairShade =\n this.pairProduct && this.pairProduct.shades.find((shade) => shade.name === shadeName);\n const selectedPairSku = selectedPairShade && selectedPairShade.parentSku;\n\n if (this.isVtoLoaded && selectedPairSku) {\n this.setSelectedPairSkuId(selectedPairSku.skuId);\n this.setSelectedPairShadeName(shadeName);\n emit(events.VTO_PAIR_SHADE_SELECTED);\n window.YMK.applyMakeupBySku(selectedPairSku.skuId);\n }\n };\n\n @on(events.PRODUCT_SHADE_SELECTED)\n public vtoMakeupApply = (payload: { skuId: string }) => {\n if (this.isVtoLoaded) {\n window.YMK.applyMakeupBySku(payload.skuId);\n }\n };\n\n @on(events.VTO_FOUNDATION_OVERLAY_TOGGLED)\n public vtoFoundationOverlayToggled = (payload: { isOverlayOpened: boolean }) => {\n this.updateVtoFoundationOverlayState(payload.isOverlayOpened);\n this.toggleVtoOpenedState(false);\n this.toggleBodyClasses(false);\n };\n\n @action\n public updateSelectedSku = (sku: ISku) => {\n this.selectedSku = sku;\n };\n\n @action\n public setSaveMatch = (isSaved: boolean) => {\n this.isMatchSaved = isSaved;\n };\n\n public saveMatches = () => {\n const shadeMatches = this.getShadeMatches();\n if (!shadeMatches) {\n return;\n }\n\n const bestSku = this.product.skus.find(\n (sku) => sku.skuId === shadeMatches[VtoConstants.FoundationShadeTypes.BEST]\n );\n\n if (!bestSku) {\n return;\n }\n\n bestSku.selectedShade.setBestShade();\n this.setSaveMatch(true);\n this.setVtoMatchCookie(shadeMatches);\n emit(events.VTO_MATCH_SAVED);\n };\n\n private getShadeMatches() {\n if (!this.vtoShadeResult) {\n return null;\n }\n const shadeTypes = VtoConstants.FoundationShadeTypes;\n const shadeTypeValues = Object.values(shadeTypes);\n\n return Object.entries(this.vtoShadeResult).reduce((acc, [type, skuId]) => {\n const matchType =\n type === VtoConstants.VTO_GUID\n ? shadeTypes.BEST\n : (type as VtoConstants.FoundationShadeTypes);\n\n if (shadeTypeValues.indexOf(matchType) > -1) {\n return { ...acc, [matchType]: skuId };\n }\n\n return acc;\n }, {} as IVtoFoundationPerfectMatches);\n }\n\n private setVtoMatchCookie(shadeMatches: IVtoFoundationPerfectMatches) {\n const cookieName = VtoConstants.VTO_MATCHES_COOKIE_NAME;\n const shadeMatchCookie = BrowserStorage.getItem(cookieName);\n let newShadeMatches = {};\n\n if (shadeMatchCookie) {\n newShadeMatches = JSON.parse(shadeMatchCookie);\n }\n\n BrowserStorage.setItem(\n cookieName,\n JSON.stringify({ ...newShadeMatches, [this.product.productId]: shadeMatches })\n );\n }\n\n public removeMatches = () => {\n const cookieName = VtoConstants.VTO_MATCHES_COOKIE_NAME;\n const shadeMatchCookie = BrowserStorage.getItem(cookieName);\n if (!shadeMatchCookie) {\n return;\n }\n const shadeMatches = JSON.parse(shadeMatchCookie);\n delete shadeMatches[this.product.productId];\n BrowserStorage.setItem(cookieName, JSON.stringify(shadeMatches));\n this.setSaveMatch(false);\n emit(events.VTO_MATCH_REMOVED);\n };\n}\n","import { action, observable, computed } from 'mobx';\nimport { emit, events } from 'elc-service-bus';\nimport { BrowserStorage } from 'elc-universal-utils';\nimport { VtoBaseController, IVtoWindow } from './VtoBaseController';\nimport {\n IVtoSkinCareConfig,\n IVtoSkinCareTranslations\n} from '../../exported/vto-skin-care/VtoSkinCare';\nimport { IFeature } from '../constants/Features';\nimport * as Constants from '../constants/VtoSkinCare';\nimport {\n IVtoSkinConcernScores,\n ISkinCareProductList,\n ISite,\n IContentApiParams,\n IProductGridItem,\n IProductBenefitTypes,\n IResultNodeBlocks\n} from '../interfaces/IVtoSkinCare';\nimport { QuizApiRepository } from '../repositories/QuizApiRepository';\nimport { serviceNames, diContainer } from '../../service-setup/diContainer';\nimport { IQuizParam } from '../../api/QuizApiSdk';\nimport { VtoQuiz } from '../domain/entities/VtoQuiz';\nimport { IMutationObserver, IVtoFlag } from '../interfaces/IVto';\n\ndeclare let window: IVtoWindow;\ndeclare let site: ISite;\n\ninterface IVtoInitializeSkinCareController {\n config: IVtoSkinCareConfig;\n vtoSkinCareRef: React.RefObject;\n translations: IVtoSkinCareTranslations;\n}\n\nexport class VtoSkinCareViewController extends VtoBaseController {\n @observable public isVtoSkinCareEnabled: boolean = false;\n @observable public isVtoSkinCareCtaEnabled: boolean = true;\n @observable public isVtoSkinCareOpened: boolean = false;\n @observable public isVtoSkinAnalysisFinished: boolean = false;\n @observable public isVtoSkinCareResultInProgress: boolean = false;\n @observable public isVtoSkinCareResultSectionEnabled: boolean = false;\n @observable public skinCareProductList: ISkinCareProductList[] = [];\n @observable public quizApiQuery: IQuizParam;\n @observable public vtoQuizResult: VtoQuiz;\n @observable public isResultCtaFixed: boolean = true;\n @observable public isSkinCareNodeResultEnabled: boolean = false;\n\n public translations: IVtoSkinCareTranslations;\n public skinCareResultProductItems: IProductGridItem[] = [];\n public skinCareResultProductBenefitTypes: IProductBenefitTypes = {};\n public skinCareResultNodeBlocks: IResultNodeBlocks = {};\n\n private quizApiRepository: QuizApiRepository;\n private vtoSkinCareConfig: IFeature;\n private vtoSkinCareFeature?: IVtoFlag;\n private vtoSkinConcernScores: IVtoSkinConcernScores;\n private vtoSkinCareQuizId: string;\n private isVtoResultEnabled: boolean;\n private editorialNodeId: number;\n private vtoSkinCareProductIds: string[];\n private vtoSkinCareBenefitTypes: string[];\n private finalProductIds: string[];\n private finalBenefitTypes: string[];\n private debounceTimeout: number;\n private vtoSkinCareRef: React.RefObject;\n private skinCareContentResultPromises: Promise[];\n private skinCareContentResultKeys: string[];\n private productGridRef: React.RefObject;\n\n @action\n public initialize = (props: IVtoInitializeSkinCareController) => {\n const { config, translations, vtoSkinCareRef } = props;\n const {\n features,\n vtoSkinCareQuizId,\n isVtoResultEnabled,\n skinCareEditorialNodeId,\n vtoFeature\n } = config;\n this.vtoSkinCareConfig = features.vtoSkinCare;\n this.vtoSkinCareFeature = vtoFeature && vtoFeature.skincare;\n this.quizApiRepository = diContainer.get(serviceNames.quizApiRepository);\n this.vtoSkinCareQuizId = vtoSkinCareQuizId;\n this.isVtoResultEnabled = isVtoResultEnabled;\n this.editorialNodeId = skinCareEditorialNodeId;\n this.translations = translations;\n this.vtoSkinCareRef = vtoSkinCareRef;\n this.updateVtoSkinCareState();\n };\n\n @computed\n get data() {\n return {\n isVtoSkinCareCtaEnabled: this.isVtoSkinCareCtaEnabled,\n isVtoSkinCareEnabled: this.isVtoSkinCareEnabled,\n isVtoSkinCareOpened: this.isVtoSkinCareOpened,\n isVtoSkinAnalysisFinished: this.isVtoSkinAnalysisFinished,\n isVtoSkinCareResultInProgress: this.isVtoSkinCareResultInProgress,\n isVtoSkinCareResultSectionEnabled: this.isVtoSkinCareResultSectionEnabled,\n isResultCtaFixed: this.isResultCtaFixed,\n isSkinCareNodeResultEnabled: this.isSkinCareNodeResultEnabled\n };\n }\n\n @action\n public updateVtoSkinCareState = () => {\n this.isVtoSkinCareEnabled = !!(\n this.vtoSkinCareConfig &&\n this.vtoSkinCareConfig.enabled &&\n this.vtoSkinCareFeature &&\n this.vtoSkinCareFeature.enabled\n );\n };\n\n public loaded = async () => {\n window.addEventListener('scroll', this.handleScroll);\n };\n\n public initVtoSkinCare = () => {\n if (typeof window.ymkAsyncInit !== 'function') {\n const { apiUrl, apiKey } = this.vtoSkinCareConfig;\n this.loadVto(apiUrl, apiKey);\n this.declareVtoSkincareCallback();\n }\n window.ymkAsyncInit();\n this.toggleVtoSkinCareCtaState(false);\n emit(events.VTO_SKIN_CARE_OPENED);\n };\n\n @action\n public toggleVtoSkinCareCtaState = (isEnabled: boolean) => {\n this.isVtoSkinCareCtaEnabled = isEnabled;\n };\n\n @action\n public toggleVtoSkinCareOpenedState = (isOpened: boolean) => {\n this.isVtoSkinCareOpened = isOpened;\n };\n\n @action\n public toggleVtoSkinAnalysisState = (isFinished: boolean) => {\n this.isVtoSkinAnalysisFinished = isFinished;\n };\n\n @action\n public toggleVtoSkinResultProgress = (isEnabled: boolean) => {\n this.isVtoSkinCareResultInProgress = isEnabled;\n };\n\n @action\n public toggleSkinCareResultSection = (isEnabled: boolean) => {\n this.isVtoSkinCareResultSectionEnabled = isEnabled;\n };\n\n @action\n public toggleResultCtaFixedPosition = (isFixed: boolean) => {\n this.isResultCtaFixed = isFixed;\n };\n\n @action\n public enableSkinCareNodeResult = () => {\n this.isSkinCareNodeResultEnabled = true;\n };\n\n public vtoSkinCareStartOver = () => {\n window.YMK.close();\n this.toggleSkinCareResultSection(false);\n };\n\n public showVtoSkinCareResult = async () => {\n this.scrollToVtoSkinCare();\n this.toggleVtoSkinResultProgress(true);\n this.processVtoProductResult();\n this.filterVtoSkinConcernScores();\n await this.updateQuizApiResult();\n this.preprocessSkinCareProductResult();\n this.toggleSkinCareResultSection(true);\n this.toggleVtoSkinResultProgress(false);\n };\n\n private scrollToVtoSkinCare() {\n const vtoSkinCareRef = this.vtoSkinCareRef;\n const { SCROLL_BEHAVIOR_SMOOTH, SCROLL_BLOCK_START } = Constants;\n if (vtoSkinCareRef && vtoSkinCareRef.current) {\n vtoSkinCareRef.current.scrollIntoView({\n behavior: SCROLL_BEHAVIOR_SMOOTH,\n block: SCROLL_BLOCK_START\n });\n }\n }\n\n private declareVtoSkincareCallback() {\n window.ymkAsyncInit = () => {\n if (typeof window.YMK !== 'undefined') {\n const vtoSkinCareParams = this.getVtoSkinCareParams();\n window.YMK.init(vtoSkinCareParams);\n window.YMK.openSkincare(Constants.SKIN_CARE_MODE);\n this.addVtoSkinCareEventListeners();\n }\n };\n }\n\n private getVtoSkinCareParams() {\n const iframeHeight = this.getIframeHeight();\n const { language } = this.vtoSkinCareConfig;\n\n return {\n autoOpen: false,\n showCloseBtnOnLauncher: true,\n height: iframeHeight,\n ...(language && { language })\n };\n }\n\n private getIframeHeight() {\n const { IFRAME_MIN_HEIGHT } = Constants;\n const innerHeight = window.innerHeight;\n const stickyHeight = (this.vtoSkinCareFeature && this.vtoSkinCareFeature.stickyHeight) || 0;\n const availableHeight = innerHeight - stickyHeight;\n const iframeHeight =\n availableHeight < IFRAME_MIN_HEIGHT ? IFRAME_MIN_HEIGHT : availableHeight;\n\n return iframeHeight;\n }\n\n // TODO: SPPSELTO-3026 - Check feasibility of moving VTO event listeners to common place\n private addVtoSkinCareEventListeners() {\n if (typeof window.YMK !== 'object' || this.eventListenerIdentifiers.length) {\n return;\n }\n\n Object.values(Constants.Events).forEach((event) => {\n const eventListenerIdentifier = window.YMK.addEventListener(event, (result) => {\n this.vtoSkinCareHandlers[event](result as IVtoSkinConcernScores);\n });\n this.eventListenerIdentifiers.push(eventListenerIdentifier);\n });\n }\n\n private vtoSkinCareHandlers: {\n [key in Constants.Events]: (result: IVtoSkinConcernScores) => void;\n } = {\n [Constants.Events.OPENED]: () => this.handleVtoSkinCareOpenedEvent(),\n [Constants.Events.CAMERA_OPENED]: () => emit(events.VTO_SKIN_CARE_CAMERA_OPENED),\n [Constants.Events.CAMERA_FAILED]: () => emit(events.VTO_SKIN_CARE_CAMERA_FAILED),\n [Constants.Events.CAMERA_CLOSED]: () => emit(events.VTO_SKIN_CARE_CAMERA_CLOSED),\n [Constants.Events.LOADING]: () => emit(events.VTO_SKIN_CARE_LOADING),\n [Constants.Events.LOADED]: () => emit(events.VTO_SKIN_CARE_LOADED),\n [Constants.Events.VIDEO_LOADED]: () => emit(events.VTO_SKIN_CARE_VIDEO_LOADED),\n [Constants.Events.SKIN_ANALYSIS_STARTED]: () => this.handleVtoSkinAnalysisStartedEvent(),\n [Constants.Events.SKIN_ANALYSIS_FINISHED]: (result) =>\n this.handleVtoSkinAnalysisFinishedEvent(result),\n [Constants.Events.SKIN_BACK_TO_DETECTING]: () => emit(events.VTO_SKIN_BACK_TO_DETECTING),\n [Constants.Events.CLOSED]: () => this.handleVtoSkinCareClosedEvent()\n };\n\n private handleVtoSkinCareOpenedEvent() {\n emit(events.VTO_SKIN_CARE_OPENED);\n this.toggleVtoSkinCareOpenedState(true);\n }\n\n private handleVtoSkinCareClosedEvent() {\n emit(events.VTO_SKIN_CARE_CLOSED);\n this.toggleVtoSkinCareCtaState(true);\n this.toggleVtoSkinCareOpenedState(false);\n this.toggleVtoSkinAnalysisState(false);\n this.removeVtoEventListeners();\n }\n\n private handleVtoSkinAnalysisStartedEvent() {\n emit(events.VTO_SKIN_ANALYSIS_STARTED);\n this.toggleVtoSkinAnalysisState(false);\n }\n\n private handleVtoSkinAnalysisFinishedEvent(result: IVtoSkinConcernScores) {\n this.vtoSkinConcernScores = result;\n emit(events.VTO_SKIN_ANALYSIS_FINISHED);\n this.toggleVtoSkinAnalysisState(true);\n }\n\n private processVtoProductResult() {\n window.YMK.getSkincareRecommendationList((skinCareProductList: ISkinCareProductList[]) => {\n this.vtoSkinCareProductIds = [];\n this.vtoSkinCareBenefitTypes = [];\n Object.values(skinCareProductList).forEach((value) => {\n this.vtoSkinCareProductIds.push(value.productId);\n this.vtoSkinCareBenefitTypes.push(value.category);\n });\n });\n }\n\n // Refer https://confluence.esteeonline.com/display/GSBA/EL+YouCam+Skincare+VTO for this logic\n private filterVtoSkinConcernScores() {\n const vtoSkinConcernScores = { ...this.vtoSkinConcernScores };\n const { FaceConcerns } = Constants;\n\n vtoSkinConcernScores[\n FaceConcerns.linesAndWrinkles\n ] = this.getForeheadAndLowerFaceWrinkleAvg(vtoSkinConcernScores);\n\n const sortedSkinConcernScores = Object.entries(vtoSkinConcernScores).sort(function (a, b) {\n return b[1] - a[1];\n });\n\n const queryParams = this.getQueryParams(sortedSkinConcernScores);\n\n this.quizApiQuery = { queryParams: queryParams };\n }\n\n private getForeheadAndLowerFaceWrinkleAvg = (vtoSkinConcernScores: IVtoSkinConcernScores) => {\n const { OtherConcerns } = Constants;\n\n return (\n (vtoSkinConcernScores[OtherConcerns.wrinkleForehead] +\n vtoSkinConcernScores[OtherConcerns.wrinkleLowerFace]) /\n 2\n );\n };\n\n private getQueryParams(skinConcernScores: [string, number][]) {\n const {\n FACE_CONCERN_PARAM,\n EYE_CONCERN_PARAM,\n SKIN_TYPE_PARAM,\n SKIN_TYPE_VALUE,\n QuizApiConcerns\n } = Constants;\n\n return skinConcernScores.reduce(\n (acc, [skinConcern, score]) => {\n if (this.existsAndFaceArrayIsLessThanTwo(skinConcern, acc[FACE_CONCERN_PARAM])) {\n const faceConcernKey = this.getFaceConcernKey(skinConcern);\n\n acc[FACE_CONCERN_PARAM].push(\n QuizApiConcerns[faceConcernKey as keyof typeof QuizApiConcerns]\n );\n\n return acc;\n }\n\n if (\n this.existsAndEyeConcernArrayIsLessThanOne(skinConcern, acc[EYE_CONCERN_PARAM])\n ) {\n const eyeConcernKey = this.getEyeConcernKey(skinConcern);\n\n acc[EYE_CONCERN_PARAM].push(\n QuizApiConcerns[eyeConcernKey as keyof typeof QuizApiConcerns]\n );\n\n return acc;\n }\n\n return acc;\n },\n {\n [FACE_CONCERN_PARAM]: Array(),\n [EYE_CONCERN_PARAM]: Array(),\n [SKIN_TYPE_PARAM]: SKIN_TYPE_VALUE\n }\n );\n }\n\n private existsAndFaceArrayIsLessThanTwo = (skinConcern: string, FaceArray: string[]) => {\n const faceConcernValues = Object.values(Constants.FaceConcerns);\n\n return (\n faceConcernValues.indexOf(skinConcern as Constants.FaceConcerns) !== -1 &&\n FaceArray.length < 2\n );\n };\n\n private getFaceConcernKey = (skinConcern: string) => {\n const { FaceConcerns } = Constants;\n const faceConcernKeys = Object.keys(FaceConcerns);\n\n return faceConcernKeys.find(\n (key) => FaceConcerns[key as keyof typeof FaceConcerns] === skinConcern\n );\n };\n\n private existsAndEyeConcernArrayIsLessThanOne = (skinConcern: string, EyeArray: string[]) => {\n const eyeConcernValues = Object.values(Constants.EyeConcerns);\n\n return (\n eyeConcernValues.indexOf(skinConcern as Constants.EyeConcerns) !== -1 &&\n EyeArray.length < 1\n );\n };\n\n private getEyeConcernKey = (skinConcern: string) => {\n const { EyeConcerns } = Constants;\n const eyeConcernKeys = Object.keys(EyeConcerns);\n\n return eyeConcernKeys.find(\n (key) => EyeConcerns[key as keyof typeof EyeConcerns] === skinConcern\n );\n };\n\n private async updateQuizApiResult() {\n const vtoQuizResult: VtoQuiz[] = await this.quizApiRepository.getQuizApiResult(\n this.quizApiQuery,\n this.vtoSkinCareQuizId\n );\n this.vtoQuizResult = {} as VtoQuiz;\n if (vtoQuizResult.length === 0) {\n return;\n }\n this.vtoQuizResult = { ...vtoQuizResult[0] };\n }\n\n private preprocessSkinCareProductResult() {\n this.updateProductSource();\n this.preprocessProductIDs();\n this.preprocessBenefitTypes();\n }\n\n private updateProductSource() {\n this.finalProductIds = this.isVtoResultEnabled\n ? this.vtoSkinCareProductIds\n : this.vtoQuizResult.productIds\n ? this.vtoQuizResult.productIds.split(',')\n : [];\n this.finalBenefitTypes = this.isVtoResultEnabled\n ? this.vtoSkinCareBenefitTypes\n : this.vtoQuizResult.productBenefitTypes\n ? this.vtoQuizResult.productBenefitTypes.split(',')\n : [];\n }\n\n private async preprocessSkinCareNodeResult() {\n this.skinCareContentResultPromises = [];\n this.skinCareContentResultKeys = [];\n this.pushResultNodesToPromise();\n this.pushEditorialNodeToPromise();\n const data = await Promise.all(this.skinCareContentResultPromises);\n this.handleSkinCareContentResults(data);\n }\n\n private pushResultNodesToPromise() {\n Object.entries(this.vtoQuizResult).forEach(([key, value]) => {\n if (typeof value === 'number' && !this.skinCareResultNodeBlocks[key]) {\n this.skinCareContentResultPromises.push(this.getNodeContent(value));\n this.skinCareContentResultKeys.push(key);\n }\n });\n }\n\n private pushEditorialNodeToPromise() {\n const { EDITORIAL_NODE_KEY } = Constants;\n if (this.editorialNodeId && !this.skinCareResultNodeBlocks[EDITORIAL_NODE_KEY]) {\n this.skinCareContentResultPromises.push(this.getNodeContent(this.editorialNodeId));\n this.skinCareContentResultKeys.push(EDITORIAL_NODE_KEY);\n }\n }\n\n private handleSkinCareContentResults(data: string[]) {\n this.skinCareContentResultKeys.forEach((skinCareContentResultKey, index) => {\n this.skinCareResultNodeBlocks[skinCareContentResultKey] = data[index];\n });\n this.enableSkinCareNodeResult();\n }\n\n private async getNodeContent(value: number) {\n if (typeof site.elcContentApi === 'undefined') {\n return '';\n }\n const {\n DEFAULT_LOCALE,\n DRUPAL_API_TOKEN,\n DRUPAL_API_FIELDS,\n REVISION_TAG_COOKIE,\n LOCALE_COOKIE\n } = Constants;\n const params: IContentApiParams = {\n revision_tag: BrowserStorage.getCookie(REVISION_TAG_COOKIE) || '',\n locale: BrowserStorage.getCookie(LOCALE_COOKIE) || DEFAULT_LOCALE,\n node: value,\n key: DRUPAL_API_TOKEN,\n field: DRUPAL_API_FIELDS\n };\n const data = await site.elcContentApi.getData(params, true);\n\n return data.rendered;\n }\n\n private preprocessProductIDs() {\n const { SKU_ITEM, PRODUCT_ITEM } = Constants;\n const productType = this.isVtoResultEnabled ? SKU_ITEM : PRODUCT_ITEM;\n this.skinCareResultProductItems = this.finalProductIds.reduce(\n (acc: IProductGridItem[], item: string) => {\n acc.push({ type: productType, params: { id: item } });\n\n return acc;\n },\n []\n );\n }\n\n private preprocessBenefitTypes() {\n const benefitTypes = this.finalBenefitTypes.reduce((acc, value, index) => {\n const benefitTypeValue = value\n .replace(/ |_/gi, '')\n .toLowerCase() as keyof IVtoSkinCareTranslations;\n const translations = this.translations;\n const translationKey = Object.keys(translations).find(\n (key) => key.toLowerCase().indexOf(benefitTypeValue) !== -1\n ) as keyof IVtoSkinCareTranslations;\n\n const newBenefitTypeValue =\n typeof translationKey !== 'undefined'\n ? translations[translationKey]\n : benefitTypeValue;\n\n return { ...acc, [this.finalProductIds[index]]: newBenefitTypeValue };\n }, {} as IProductBenefitTypes);\n\n this.skinCareResultProductBenefitTypes = benefitTypes;\n }\n\n private handleScroll = () => {\n this.debounce(this.handleSeeResultButtonOnScroll, Constants.SCROLL_TIMEOUT);\n };\n\n private debounce(callback: () => void, timeoutValue: number) {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(callback, timeoutValue);\n }\n\n private handleSeeResultButtonOnScroll = () => {\n const vtoSkinCareRef = this.vtoSkinCareRef && this.vtoSkinCareRef.current;\n if (!vtoSkinCareRef) {\n return;\n }\n const offset = vtoSkinCareRef.getBoundingClientRect().bottom + Constants.OFFSET_HEIGHT;\n const isFixed = offset > screen.height;\n this.toggleResultCtaFixedPosition(isFixed);\n };\n\n public handleUnmount() {\n window.removeEventListener('scroll', this.handleScroll);\n }\n\n public vtoSkinCareNodesLoaded = () => {\n emit(events.VTO_SKIN_CARE_RESULT_LOADED);\n };\n\n public vtoSkinCareResultLoaded = (productGridRef: React.RefObject) => {\n this.productGridRef = productGridRef;\n this.observeProductGrid();\n };\n\n private observeProductGrid() {\n const productGridContainer = this.productGridRef.current;\n if (productGridContainer === null) {\n return;\n }\n const mutationObserver: IMutationObserver = new MutationObserver(this.onProductGridLoaded);\n const config = {\n childList: true,\n subtree: true\n };\n\n mutationObserver.observe(productGridContainer, config);\n }\n\n private onProductGridLoaded = (\n mutationList: MutationRecord[],\n mutationObserver: IMutationObserver\n ) => {\n mutationList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n this.preprocessSkinCareNodeResult();\n mutationObserver.disconnect();\n }\n });\n };\n}\n","import { Container } from 'hypo-container';\nexport const getDecorators = (container: Container) => ({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lazyInject: (name?: string) => (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target: any,\n key: string,\n descriptor?: PropertyDescriptor\n ) => {\n const resourceName = name || key;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sbGetter = function(this: any) {\n const resource = container.get(resourceName);\n if (!resource) {\n throw new Error(`The requested ${resourceName} does not exists`);\n }\n\n return resource;\n };\n let propertyDescriptor = descriptor || {};\n if (!descriptor) {\n propertyDescriptor = {\n get: sbGetter\n };\n Object.defineProperty(target, key, propertyDescriptor);\n } else {\n propertyDescriptor.get = sbGetter;\n }\n }\n});\n","import { HeaderType, HeaderObject } from 'elc-universal-utils';\n\nexport const AUTHORIZATION_HEADER_NAME = 'AuthorizationToken';\nexport const BUSINESS_UNIT_HEADER_NAME = 'Business-Unit';\n\nexport interface IError {\n status: number;\n}\nexport interface IDataMapperOperations {\n [key: string]: Function | undefined;\n request?(request: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n }): {};\n response?(response: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n }): {};\n}\nexport interface IDataMappings {\n [key: string]: IDataMapperOperations;\n}\nexport interface IResponse {\n data: T;\n reponseHeaders: Headers;\n}\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n returnAsPlainText?: boolean;\n}\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\nexport interface IRequestOptions {\n debounceInterval?: number;\n bypassCache?: boolean;\n}\nexport interface IHttpTransport {\n addGlobalHeaders(header: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n delete(payload: string | IPayload): Promise>;\n post(payload: IPayload): Promise>;\n patch(payload: IPayload): Promise>;\n put(payload: IPayload): Promise>;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise>;\n}\nexport interface IDataMapper {\n // eslint-disable-next-line @typescript-eslint/ban-types\n mapRequest(name: string, request: Object): {};\n // eslint-disable-next-line @typescript-eslint/ban-types\n mapResponse(name: string, response: Object): {};\n dataMappings?: IDataMappings;\n}\n\nexport interface IConfig {\n cartId?: string;\n httpTransport: IHttpTransport;\n dataMapper?: IDataMapper;\n businessUnitId?: string;\n drupalDomain?: string;\n}\n\nexport class Api {\n protected bearerToken: string;\n protected httpTransport: IHttpTransport;\n protected businessUnitId: string | undefined;\n\n constructor(configStore: IConfig) {\n this.httpTransport = configStore.httpTransport;\n this.businessUnitId = configStore.businessUnitId;\n }\n\n public addHeader(header: HeaderObject) {\n this.httpTransport.addGlobalHeaders(header);\n }\n\n public removeHeader(headerName: HeaderType) {\n this.httpTransport.removeGlobalHeader(headerName);\n }\n\n public setBearerToken(bearerToken: string) {\n if (bearerToken) {\n this.addHeader({\n [AUTHORIZATION_HEADER_NAME]: `${bearerToken}`\n });\n } else {\n this.removeHeader(AUTHORIZATION_HEADER_NAME);\n }\n }\n}\n","import { Api, IConfig } from 'elc-service';\r\n\r\nexport interface IQuizResult {\r\n data: IVtoQuizData;\r\n}\r\n\r\nexport interface IVtoQuizData {\r\n quizId: string;\r\n results: IQuizResultData[];\r\n}\r\n\r\nexport interface IQuizResultData {\r\n product_benefit_type: string;\r\n product_id: string;\r\n crosssell_content_1: number;\r\n extra_care: number;\r\n skin_diagrams: number;\r\n skincare_regimen: number;\r\n tips: number;\r\n}\r\n\r\nexport interface IQuizParam {\r\n queryParams: {\r\n face_concern: string[];\r\n eye_concern: string[];\r\n skin_type: string;\r\n };\r\n}\r\n\r\nexport class QuizApiSdk extends Api {\r\n private apiBasePath: string;\r\n\r\n constructor(configStore: IConfig) {\r\n super(configStore);\r\n this.apiBasePath = 'stardust-foundation-quiz-v0';\r\n }\r\n\r\n public async getQuizDataByQuizId(param: IQuizParam, quizId: string): Promise {\r\n const url = `/${this.apiBasePath}/quiz/${quizId}/query`;\r\n const response: IQuizResult = await this.httpTransport.post({\r\n url: url,\r\n body: param\r\n });\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { IQuizResultData } from '../../../api/QuizApiSdk';\r\n\r\nexport class VtoQuiz {\r\n public productBenefitTypes: string;\r\n public productIds: string;\r\n public crosssellNode: number;\r\n public extraCareNode: number;\r\n public skinDiagramNode: number;\r\n public skincareRegimenNode: number;\r\n public skinTipsNode: number;\r\n\r\n public static fromJson(data: IQuizResultData): VtoQuiz {\r\n const vtoQuiz = new VtoQuiz();\r\n vtoQuiz.productBenefitTypes = data.product_benefit_type;\r\n vtoQuiz.productIds = data.product_id;\r\n vtoQuiz.crosssellNode = Number(data.crosssell_content_1);\r\n vtoQuiz.extraCareNode = Number(data.extra_care);\r\n vtoQuiz.skinDiagramNode = Number(data.skin_diagrams);\r\n vtoQuiz.skincareRegimenNode = Number(data.skincare_regimen);\r\n vtoQuiz.skinTipsNode = Number(data.tips);\r\n\r\n return vtoQuiz;\r\n }\r\n}\r\n","import { diContainer, serviceNames } from '../../service-setup/diContainer';\r\nimport { QuizApiSdk, IQuizParam, IQuizResultData } from '../../api/QuizApiSdk';\r\nimport { VtoQuiz } from '../domain/entities/VtoQuiz';\r\n\r\nexport interface IQuizApiResult {\r\n [key: string]: VtoQuiz[];\r\n}\r\n\r\nexport class QuizApiRepository {\r\n private quizApiSdk: QuizApiSdk;\r\n private quizApiResult: IQuizApiResult = {};\r\n\r\n constructor() {\r\n this.quizApiSdk = diContainer.get(serviceNames.quizApiSdk);\r\n }\r\n\r\n public async getQuizApiResult(param: IQuizParam, vtoQuizApiId: string) {\r\n const paramString = this.getStringifyParam(param);\r\n const resultKey = Object.keys(this.quizApiResult).find(key => key === paramString);\r\n if (!resultKey) {\r\n await this.loadQuizApiData(param, vtoQuizApiId);\r\n }\r\n\r\n return this.quizApiResult[paramString];\r\n }\r\n\r\n private async loadQuizApiData(param: IQuizParam, vtoQuizApiId: string) {\r\n const data = await this.quizApiSdk.getQuizDataByQuizId(param, vtoQuizApiId);\r\n this.setQuizApiResult(data.results, param);\r\n }\r\n\r\n private setQuizApiResult(data: IQuizResultData[], param: IQuizParam) {\r\n const paramString = this.getStringifyParam(param);\r\n this.quizApiResult[paramString] = data.map(result => VtoQuiz.fromJson(result));\r\n }\r\n\r\n private getStringifyParam(param: IQuizParam) {\r\n return JSON.stringify(param);\r\n }\r\n}\r\n","//tslint:disable:export-name\nimport { Container } from 'hypo-container';\nimport { VtoService } from './VtoService';\nimport { ConfigStore } from './ConfigStore';\nimport { ServiceBusController } from './ServiceBusController';\nimport { VtoViewController } from '../internal/controllers/VtoViewController';\nimport { VtoSkinCareViewController } from '../internal/controllers/VtoSkinCareViewController';\nimport { getDecorators } from 'elc-service';\nimport { QuizApiSdk } from '../api/QuizApiSdk';\nimport { QuizApiRepository } from '../internal/repositories/QuizApiRepository';\nimport { root } from 'elc-universal-utils';\n\nexport const diContainer = new Container();\nexport const serviceNames = {\n vtoService: 'VTO_SERVICE',\n configStore: 'CONFIG_STORE',\n serviceBusController: 'SERVICE_BUS_CONTROLLER',\n vtoViewController: 'VTO_VIEW_CONTROLLER',\n vtoSkinCareViewController: 'VTO_SKIN_CARE_CONTROLLER',\n httpTransport: 'HTTP_TRANSPORT',\n quizApiSdk: 'QUIZ_API_SDK',\n quizApiRepository: 'QUIZ_API_REPOSITORY'\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setConfig = (configJSON: any) => {\n diContainer.config = configJSON;\n};\n\ndiContainer\n .register(\n serviceNames.configStore,\n diContainer.factory(c => new ConfigStore(c.config))\n )\n .register(serviceNames.vtoService, c => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new VtoService((config: any) => {\n setConfig(config);\n\n return c.get(serviceNames.serviceBusController);\n });\n })\n .register(serviceNames.serviceBusController, () => new ServiceBusController())\n .register(serviceNames.vtoViewController, c => new VtoViewController())\n .register(serviceNames.vtoSkinCareViewController, c => new VtoSkinCareViewController())\n .register(serviceNames.httpTransport, c => {\n return root.HttpTransport;\n })\n .register(serviceNames.quizApiSdk, c => {\n return new QuizApiSdk({ httpTransport: c.get(serviceNames.httpTransport) });\n })\n .register(serviceNames.quizApiRepository, c => {\n return new QuizApiRepository();\n });\n\nconst { lazyInject } = getDecorators(diContainer);\n\nexport { lazyInject };\n","module.exports = __WEBPACK_EXTERNAL_MODULE_elc_service_bus__;","module.exports = __WEBPACK_EXTERNAL_MODULE_hypo_container__;","module.exports = __WEBPACK_EXTERNAL_MODULE_mobx__;","module.exports = __WEBPACK_EXTERNAL_MODULE_mobx_react__;","module.exports = __WEBPACK_EXTERNAL_MODULE_react__;","module.exports = __WEBPACK_EXTERNAL_MODULE_react_dom__;","module.exports = __WEBPACK_EXTERNAL_MODULE_styled_components__;"],"sourceRoot":""}