{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/underscore/modules/_setup.js","webpack:///./assets/src/js/modules/consumer-account/account-api.js","webpack:///./assets/src/js/utils/form-validation-utils.js","webpack:///./node_modules/underscore/modules/restArguments.js","webpack:///./node_modules/underscore/modules/isObject.js","webpack:///./node_modules/underscore/modules/isNull.js","webpack:///./node_modules/underscore/modules/isUndefined.js","webpack:///./node_modules/underscore/modules/isBoolean.js","webpack:///./node_modules/underscore/modules/isElement.js","webpack:///./node_modules/underscore/modules/_tagTester.js","webpack:///./node_modules/underscore/modules/isString.js","webpack:///./node_modules/underscore/modules/isNumber.js","webpack:///./node_modules/underscore/modules/isDate.js","webpack:///./node_modules/underscore/modules/isRegExp.js","webpack:///./node_modules/underscore/modules/isError.js","webpack:///./node_modules/underscore/modules/isSymbol.js","webpack:///./node_modules/underscore/modules/isArrayBuffer.js","webpack:///./node_modules/underscore/modules/isFunction.js","webpack:///./node_modules/underscore/modules/_hasObjectTag.js","webpack:///./node_modules/underscore/modules/_stringTagBug.js","webpack:///./node_modules/underscore/modules/isDataView.js","webpack:///./node_modules/underscore/modules/isArray.js","webpack:///./node_modules/underscore/modules/_has.js","webpack:///./node_modules/underscore/modules/isArguments.js","webpack:///./node_modules/underscore/modules/isFinite.js","webpack:///./node_modules/underscore/modules/isNaN.js","webpack:///./node_modules/underscore/modules/constant.js","webpack:///./node_modules/underscore/modules/_createSizePropertyCheck.js","webpack:///./node_modules/underscore/modules/_shallowProperty.js","webpack:///./node_modules/underscore/modules/_getByteLength.js","webpack:///./node_modules/underscore/modules/_isBufferLike.js","webpack:///./node_modules/underscore/modules/isTypedArray.js","webpack:///./node_modules/underscore/modules/_getLength.js","webpack:///./node_modules/underscore/modules/_collectNonEnumProps.js","webpack:///./node_modules/underscore/modules/keys.js","webpack:///./node_modules/underscore/modules/isEmpty.js","webpack:///./node_modules/underscore/modules/isMatch.js","webpack:///./node_modules/underscore/modules/underscore.js","webpack:///./node_modules/underscore/modules/_toBufferView.js","webpack:///./node_modules/underscore/modules/isEqual.js","webpack:///./node_modules/underscore/modules/allKeys.js","webpack:///./node_modules/underscore/modules/_methodFingerprint.js","webpack:///./node_modules/underscore/modules/isMap.js","webpack:///./node_modules/underscore/modules/isWeakMap.js","webpack:///./node_modules/underscore/modules/isSet.js","webpack:///./node_modules/underscore/modules/isWeakSet.js","webpack:///./node_modules/underscore/modules/values.js","webpack:///./node_modules/underscore/modules/pairs.js","webpack:///./node_modules/underscore/modules/invert.js","webpack:///./node_modules/underscore/modules/functions.js","webpack:///./node_modules/underscore/modules/_createAssigner.js","webpack:///./node_modules/underscore/modules/extend.js","webpack:///./node_modules/underscore/modules/extendOwn.js","webpack:///./node_modules/underscore/modules/defaults.js","webpack:///./node_modules/underscore/modules/_baseCreate.js","webpack:///./node_modules/underscore/modules/create.js","webpack:///./node_modules/underscore/modules/clone.js","webpack:///./node_modules/underscore/modules/tap.js","webpack:///./node_modules/underscore/modules/toPath.js","webpack:///./node_modules/underscore/modules/_toPath.js","webpack:///./node_modules/underscore/modules/_deepGet.js","webpack:///./node_modules/underscore/modules/get.js","webpack:///./node_modules/underscore/modules/has.js","webpack:///./node_modules/underscore/modules/identity.js","webpack:///./node_modules/underscore/modules/matcher.js","webpack:///./node_modules/underscore/modules/property.js","webpack:///./node_modules/underscore/modules/_optimizeCb.js","webpack:///./node_modules/underscore/modules/_baseIteratee.js","webpack:///./node_modules/underscore/modules/iteratee.js","webpack:///./node_modules/underscore/modules/_cb.js","webpack:///./node_modules/underscore/modules/mapObject.js","webpack:///./node_modules/underscore/modules/noop.js","webpack:///./node_modules/underscore/modules/propertyOf.js","webpack:///./node_modules/underscore/modules/times.js","webpack:///./node_modules/underscore/modules/random.js","webpack:///./node_modules/underscore/modules/now.js","webpack:///./node_modules/underscore/modules/_createEscaper.js","webpack:///./node_modules/underscore/modules/_escapeMap.js","webpack:///./node_modules/underscore/modules/escape.js","webpack:///./node_modules/underscore/modules/unescape.js","webpack:///./node_modules/underscore/modules/_unescapeMap.js","webpack:///./node_modules/underscore/modules/templateSettings.js","webpack:///./node_modules/underscore/modules/template.js","webpack:///./node_modules/underscore/modules/result.js","webpack:///./node_modules/underscore/modules/uniqueId.js","webpack:///./node_modules/underscore/modules/chain.js","webpack:///./node_modules/underscore/modules/_executeBound.js","webpack:///./node_modules/underscore/modules/partial.js","webpack:///./node_modules/underscore/modules/bind.js","webpack:///./node_modules/underscore/modules/_isArrayLike.js","webpack:///./node_modules/underscore/modules/_flatten.js","webpack:///./node_modules/underscore/modules/bindAll.js","webpack:///./node_modules/underscore/modules/memoize.js","webpack:///./node_modules/underscore/modules/delay.js","webpack:///./node_modules/underscore/modules/defer.js","webpack:///./node_modules/underscore/modules/throttle.js","webpack:///./node_modules/underscore/modules/debounce.js","webpack:///./node_modules/underscore/modules/wrap.js","webpack:///./node_modules/underscore/modules/negate.js","webpack:///./node_modules/underscore/modules/compose.js","webpack:///./node_modules/underscore/modules/after.js","webpack:///./node_modules/underscore/modules/before.js","webpack:///./node_modules/underscore/modules/once.js","webpack:///./node_modules/underscore/modules/findKey.js","webpack:///./node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack:///./node_modules/underscore/modules/findIndex.js","webpack:///./node_modules/underscore/modules/findLastIndex.js","webpack:///./node_modules/underscore/modules/sortedIndex.js","webpack:///./node_modules/underscore/modules/_createIndexFinder.js","webpack:///./node_modules/underscore/modules/indexOf.js","webpack:///./node_modules/underscore/modules/lastIndexOf.js","webpack:///./node_modules/underscore/modules/find.js","webpack:///./node_modules/underscore/modules/findWhere.js","webpack:///./node_modules/underscore/modules/each.js","webpack:///./node_modules/underscore/modules/map.js","webpack:///./node_modules/underscore/modules/_createReduce.js","webpack:///./node_modules/underscore/modules/reduce.js","webpack:///./node_modules/underscore/modules/reduceRight.js","webpack:///./node_modules/underscore/modules/filter.js","webpack:///./node_modules/underscore/modules/reject.js","webpack:///./node_modules/underscore/modules/every.js","webpack:///./node_modules/underscore/modules/some.js","webpack:///./node_modules/underscore/modules/contains.js","webpack:///./node_modules/underscore/modules/invoke.js","webpack:///./node_modules/underscore/modules/pluck.js","webpack:///./node_modules/underscore/modules/where.js","webpack:///./node_modules/underscore/modules/max.js","webpack:///./node_modules/underscore/modules/min.js","webpack:///./node_modules/underscore/modules/toArray.js","webpack:///./node_modules/underscore/modules/sample.js","webpack:///./node_modules/underscore/modules/shuffle.js","webpack:///./node_modules/underscore/modules/sortBy.js","webpack:///./node_modules/underscore/modules/_group.js","webpack:///./node_modules/underscore/modules/groupBy.js","webpack:///./node_modules/underscore/modules/indexBy.js","webpack:///./node_modules/underscore/modules/countBy.js","webpack:///./node_modules/underscore/modules/partition.js","webpack:///./node_modules/underscore/modules/size.js","webpack:///./node_modules/underscore/modules/_keyInObj.js","webpack:///./node_modules/underscore/modules/pick.js","webpack:///./node_modules/underscore/modules/omit.js","webpack:///./node_modules/underscore/modules/initial.js","webpack:///./node_modules/underscore/modules/first.js","webpack:///./node_modules/underscore/modules/rest.js","webpack:///./node_modules/underscore/modules/last.js","webpack:///./node_modules/underscore/modules/compact.js","webpack:///./node_modules/underscore/modules/flatten.js","webpack:///./node_modules/underscore/modules/difference.js","webpack:///./node_modules/underscore/modules/without.js","webpack:///./node_modules/underscore/modules/uniq.js","webpack:///./node_modules/underscore/modules/union.js","webpack:///./node_modules/underscore/modules/intersection.js","webpack:///./node_modules/underscore/modules/unzip.js","webpack:///./node_modules/underscore/modules/zip.js","webpack:///./node_modules/underscore/modules/object.js","webpack:///./node_modules/underscore/modules/range.js","webpack:///./node_modules/underscore/modules/chunk.js","webpack:///./node_modules/underscore/modules/_chainResult.js","webpack:///./node_modules/underscore/modules/mixin.js","webpack:///./node_modules/underscore/modules/underscore-array-methods.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./assets/src/js/events/site-events.js","webpack:///./assets/src/js/vendors/glide.min.js","webpack:///./assets/src/js/modules/consumer-account/login.js","webpack:///./assets/src/js/modules/swatchbook-utils.js","webpack:///./assets/src/js/modules/widen-utils.js","webpack:///./assets/src/js/modules/consumer-account/create-account.js","webpack:///./assets/src/js/modules/consumer-account/storage-actions.js","webpack:///./assets/src/js/modules/consumer-account/account-nav-icon.js","webpack:///./assets/src/js/modules/consumer-account/status-messages.js","webpack:///./assets/src/js/modules/mobile-nav-menus.js","webpack:///./assets/src/js/app.js","webpack:///./assets/src/js/utils/url-utils.js","webpack:///./assets/src/js/modules/consumer-account/account-modal.js","webpack:///./assets/src/js/modules/consumer-account/forgot-password.js","webpack:///./assets/src/js/modules/signup-form.js","webpack:///./assets/src/js/modules/consumer-account/manage-account.js","webpack:///./assets/src/js/modules/consumer-account/change-password.js","webpack:///./assets/src/js/modules/videohandler.js","webpack:///(webpack)/buildin/global.js","webpack:///./assets/src/js/modules/consumer-account/authentication.js","webpack:///./assets/src/js/modules/content-toggle.js","webpack:///./assets/src/js/modules/desktop-nav-menus.js","webpack:///./assets/src/js/modules/expanded-promo.js","webpack:///./assets/src/js/modules/filter-menus.js","webpack:///./assets/src/js/modules/gallery-modal.js","webpack:///./assets/src/js/utils/genesys-messenger-utils.js","webpack:///./assets/src/js/modules/grid-builder.js","webpack:///./assets/src/js/modules/grid-sliders.js","webpack:///./assets/src/js/modules/hero-slider.js","webpack:///./assets/src/js/modules/image-comparison-slider.js","webpack:///./assets/src/js/modules/in-page-nav.js","webpack:///./assets/src/js/modules/lazyload.js","webpack:///./assets/src/js/modules/mini-gallery/index.js","webpack:///./assets/src/js/modules/mini-gallery/gallery-slider.js","webpack:///./assets/src/js/modules/mini-gallery/preview-area.js","webpack:///./assets/src/js/modules/widen-gallery-filters.js","webpack:///./assets/src/js/modules/mini-gallery/photos-modal.js","webpack:///./assets/src/js/modules/mini-gallery/site-modal.js","webpack:///./assets/src/js/modules/mobile-nav-new.js","webpack:///./assets/src/js/modules/mobile-search.js","webpack:///./assets/src/js/modules/NEW-desktop-nav-menus.js","webpack:///./assets/src/js/modules/scroll-nav.js","webpack:///./assets/src/js/modules/gallery/site-modal.js","webpack:///./assets/src/js/modules/slide-in-nav.js","webpack:///./assets/src/js/modules/sticky-sidebar.js","webpack:///./assets/src/js/modules/swatch-cart-indicator.js","webpack:///./assets/src/js/modules/accessibility/tab-role.js","webpack:///./assets/src/js/modules/tabnav.js","webpack:///./assets/src/js/modules/tabs.js","webpack:///./assets/src/js/modules/thumbnail-gallery.js","webpack:///./assets/src/js/modules/tooltips.js","webpack:///./assets/src/js/modules/video-modal.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","VERSION","root","self","global","Function","ArrayProto","Array","ObjProto","SymbolProto","push","slice","toString","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","pow","digitalUserApi","window","digitalUserApiEndoint","addVisualization","data","callback","dealerIdParam","getParameterByName","requestUrl","userId","micrositeName","request","XMLHttpRequest","open","setRequestHeader","onload","status","onerror","console","log","send","addPhoto","imageUrl","thumbUrl","description","productLineId","productLineName","responseData","JSON","parse","responseText","stringify","addDealer","addSwatch","productLineCode","colorNumber","swatchId","widenUrl","addSwatches","callbacks","swatchlist","map","swatch","onSuccess","onError","createAccount","forgotPassword","username","getAccountData","getItemsByType","type","brandId","replace","hasAssets","login","password","rememberMe","logout","removeItemByType","id","updateAccount","updatePassword","validateByType","val","RegExp","test","addRequiredAttrs","form","inputList","querySelectorAll","length","setAttribute","clearInputValues","disableFormSubmit","submitBtn","querySelector","disabled","classList","add","enableFormSubmit","remove","init","validate","fieldList","field","isValid","required","isFormValid","getAttribute","parentNode","formatPhone","match","arr","join","substring","positionWindowAtFormElement","options","position","element","$","offset","top","animate","scrollTop","removeAllErrors","removeRequiredAttrs","removeAttribute","restArguments","func","startIndex","max","arguments","rest","index","this","args","apply","isObject","obj","isNull","isUndefined","isBoolean","isElement","nodeType","tagTester","tag","isFunction","nodelist","document","childNodes","Int8Array","hasDataViewBug","String","isIE11","Map","isDataView","getInt8","isArrayBuffer","buffer","has","isArguments","isSymbol","parseFloat","isNumber","constant","createSizePropertyCheck","getSizeProperty","collection","sizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","hash","contains","emulatedSet","nonEnumIdx","constructor","proto","prop","isEmpty","isString","isMatch","attrs","_keys","_","_wrapped","toBufferView","bufferSource","Uint8Array","byteOffset","valueOf","toJSON","eq","a","b","aStack","bStack","deepEq","className","areArrays","aCtor","bCtor","pop","isEqual","allKeys","ie11fingerprint","methods","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","concat","setMethods","values","pairs","invert","result","functions","names","sort","createAssigner","keysFunc","defaults","source","baseCreate","Ctor","props","extendOwn","clone","extend","tap","interceptor","toPath","path","deepGet","defaultValue","identity","optimizeCb","context","argCount","accumulator","baseIteratee","Infinity","cb","iteratee","mapObject","results","currentKey","noop","propertyOf","times","accum","random","min","floor","Date","getTime","createEscaper","escaper","testRegexp","replaceRegexp","string","templateSettings","evaluate","interpolate","escape","noMatch","escapes","escapeRegExp","escapeChar","bareIdentifier","text","settings","oldSettings","matcher","render","argument","variable","Error","e","template","fallback","idCounter","uniqueId","prefix","chain","instance","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","TypeError","callArgs","flatten","input","depth","strict","output","idx","j","len","hasher","memoize","cache","address","wait","setTimeout","delay","throttle","timeout","previous","later","leading","now","throttled","_now","remaining","clearTimeout","trailing","cancel","debounce","immediate","passed","debounced","_args","wrap","wrapper","negate","predicate","compose","start","after","before","memo","findKey","createPredicateIndexFinder","dir","array","low","high","mid","createIndexFinder","predicateFind","sortedIndex","item","findIndex","findLastIndex","find","findWhere","each","createReduce","reducer","initial","filter","list","reject","every","some","fromIndex","guard","indexOf","contextPath","method","pluck","where","computed","lastComputed","v","reStrSymbol","toArray","sample","last","rand","temp","shuffle","sortBy","criteria","left","right","group","behavior","partition","pass","size","keyInObj","pick","first","compact","Boolean","otherArrays","difference","uniq","isSorted","seen","arrays","intersection","argsLength","unzip","range","stop","step","ceil","chunk","count","chainResult","mixin","siteEventNames","ADD_SWATCH","ERROR_404","ON_MODAL_CLOSE","ON_MODAL_OPEN","ON_RECAPTCHA_LOAD","REMOVE_SWATCH","SITE_ERROR","dispatchSiteEvent","eventName","siteEventRegistry","forEach","event","dispatchEvent","getEventData","initSiteEvents","Event","define","y","parseInt","u","f","h","classes","direction","breakpoints","g","firstChild","nextSibling","k","HTMLElement","modify","Direction","is","O","Gaps","Clones","grow","focusAt","Peek","Sizes","width","slideWidth","_t","mutate","E","reduce","startAt","perView","gap","autoplay","hoverpause","keyboard","swipeThreshold","dragThreshold","perTouch","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","peek","ltr","rtl","slider","carousel","swipeable","dragging","cloneSlide","activeNav","activeSlide","disabledArrow","iterator","configurable","writable","assign","ReferenceError","events","hop","on","emit","_c","_e","selector","mount","Run","make","Transition","disable","Move","_o","set","_i","_d","w","H","listeners","addEventListener","removeEventListener","T","x","A","M","C","P","L","z","R","Html","track","slides","children","_r","Translate","style","transform","isType","isOffset","movement","duration","transition","enable","resolve","split","addClass","removeClass","_v","setupSlides","setupWrapper","wrapperSize","offsetWidth","reductor","marginLeft","marginRight","translate","items","collect","cloneNode","unshift","append","reverse","appendChild","insertBefore","removeChild","Resize","unbind","off","destroy","Build","typeClass","activeClass","removeClasses","move","calculate","isStart","isEnd","steps","_m","substr","Swipe","PI","passive","bindSwipeStart","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","sqrt","abs","asin","stopPropagation","end","threshold","round","unbindSwipeMove","unbindSwipeEnd","unbindSwipeStart","changedTouches","Images","dragstart","preventDefault","Anchors","_a","click","detach","draggable","attach","Controls","_n","addBindings","setActive","removeActive","removeBindings","currentTarget","Keyboard","press","keyCode","Autoplay","setInterval","time","clearInterval","Breakpoints","matchMedia","matches","__proto__","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","initialLanuch","onModalClose","onModalButtonClick","grecaptchaApi","isAuthenticated","loginUrl","myAccountUrl","score","currentScore","displayChallenge","location","launchLoginModal","onLoginSuccess","onLoginFail","onLogoutButtonClick","clearAllSwatchbookData","checkLoginStatus","body","getElementsByTagName","modalBtns","btn","removeModalEventHandlers","logoutBtns","addLogoutEventHandlers","localStorageData","getAllOfType","updateAccountIconStatus","addModalEventHandlers","toggleCreateAccountForm","isVisible","modal","getElementById","height","resetCreateAccountForm","msg","loginMessagePhoto","loginMessageDealer","loginMessageVisualization","innerHTML","overlay","openAccountModal","loginSubmitBtn","modalCloseBtn","modalForm","modalErrorMsg","remember","success","closeAccountModal","onLoginSubmit","addCreateAccountCallbacks","submitForm","swatchbookData","getItemById","getSwatchbookData","saved","getTruncatedWidenUrl","url","updateNavIcon","useLocalStorage","icon","localStorage","getItem","cart","order","saveSwatchbookItem","modalData","div","createElement","dataset","imageStory","trList","tr","innerText","encodeSwatchModalTableDataById","page","href","dateSaved","setItem","removeSwatchbookItem","at","splice","clearSwatchbook","clearOrderData","saveItem","widenUtils","getIdFromAssetUrl","setAssetCaption","removeItem","getAllSelectedSwatches","Promise","getItemsFromAccount","swatches","decodeSwatchModalTableDataById","td","rows","str","localStorageSwatchEventHandlers","label","colorName","productLine","styleId","swatchCatId","swatchCatName","swatchStyleName","newSwatch","displayMessage","addSwatchToCart","removeSwatchFromCart","updateOrderData","getUserData","clearCart","getSwatchProductUrlParams","productName","isVisualizerActive","toLowerCase","visualizerModelId","VisualizerModelId","visualizerProgamFamilyName","VisualizerProgramFamilyName","getProductDetailsPageUrl","mediaLoadOffset","mediaLoadCallback","onMediaLoadComplete","mediaLoadLimit","getDimensionsFromAssetUrl","dims","flattenMetaDataArray","getFirstMetaDataArrayValue","getAssetDescription","desc","getFilename","filename","lastIndexOf","getUrlForWidth","getProductLineId","product","productEpiReferences","getProductUrl","productUrl","getMediaItemData","onInitLoadComplete","galleryWidenQueryParams","requestMethod","encodeURIComponent","urlDataParam","additionalHeader","totalCt","total_count","itemsLoaded","MediaGalleryData","mediaItems","file_properties","format_type","external_id","imageAlt","title","metadata","fields","Product","productLineUrl","webReadyCaption","colorRange","designStyle","RoomStyle","roomType","RoomType","columnSize","active","videoFileName","posterImage","videoUrl","videoTitle","parseImageData","filters","fragment","setMediaLoadCallback","setMediaLoadCompleteCallback","updateAssetUrlDimensions","asset","urlDims","src","getVideoPosterUrl","getFileNameFromVideoEmbedUrl","passwordMatch","passIpt","passConfirmIpt","onSubmitCallbacks","removereateAccountCallbacks","disableScroll","errorMsg","existingErrorMsg","accountCreationErrorMsg","passwordStrengthErrorMsg","optInVal","passwordStrength","checked","api","getPhotoAccountIdFromWidenId","assets","removeItemFromAccount","saveItemToAccount","updateIconCss","statusMsgs","hideMessage","setMessage","showMessage","elem","parentElement","nextElementSibling","resetMobileNav","CreateAccount","ForgotPassword","FormValidationUtils","LeadForm","Login","ManageAccount","MobileNavMenus","StorageActions","SwatchbookUtils","VideoHandler","getDigitalUserId","getLoggedInStatus","getUserId","Glide","SiteModal","addTooltipsOnPageLoad","HeroSlider","ImageComparisonSlider","initComparisons","ScrollNav","scrollingNav","DesktopNavMenus","defaultSelected","header","mainMenuItem","mainSubnav","menuSelectors","menus","menuImageSelector","navToggle","subnavToggle","SlideInNav","activator","breakpoint","notActive","toggle","StickySidebar","stickyToggle","footerSelector","headerSelector","MobileSearch","searchMenu","menuToggle","toggleClass","autoplayInterval","480","1100","flipCard","close","gridItem","closeBtn","backBtn","helpPopupButtons","helpPopups","pauseAllVideos","popup","hideButton","GalleryModal","videoTemplate","galleryModalSelector","ThumbnailGallery","setupGallery","LeadFormTemplate","link","scrollTo","getBoundingClientRect","pageYOffset","documentElement","GridBuilder","doc","fixedNavOffset","mobileTopBanner","exec","decodeURIComponent","getUrlSafeHash","previousElementInFocus","getPreviousElementInFocus","onDocumentModalKeyUp","focus","zIndex","setPreviousElementInFocus","activeElement","setCookie","cname","cvalue","exdays","setTime","expires","toUTCString","cookie","getCookie","ca","charAt","runForm","compiled","signUpFormContainerElem","closeFormElem","signUpFormWrapperElem","submit","signUpForm","signUpResponse","EmailAddress","FirstName","LastName","headers","Headers","fetch","then","response","ok","json","message","firstElementChild","catch","lastElementChild","changePassword","statusMessages","changePasswordBtn","changePasswordDiv","changePasswordCancelBtn","showChangePasswordModule","hideChangePasswordModule","address2","city","country","currentPassIpt","newPassIpt","newPassConfirmIpt","newPasswordMatch","serverErrorMsg","playVideo","contentWindow","postMessage","pauseVideo","stopVideo","playing","addIframe","videoWrapper","templateProps","videoId","videoIframeSrc","iframe","contentDocument","video","listItem","stopAllVideos","getCookieValue","cookies","sessionStorage","digitalUserStr","digitalUserId","setCookieValue","date","year","getFullYear","month","getMonth","day","getDate","expiryDate","toggleContent","ariaControls","ariaExpanded","closedLabel","content","openLabel","innerDiv","offsetHeight","getComputedStyle","paddingBottom","getContentHeight","contentToggleBtns","toggleSubnav","subnav","menu","hideSubnav","toggleNavImage","navimg","img","textContent","alt","encodeURI","getButton","tagName","closeAllMenus","mainMenuItems","menuCloseTimer","closeMenuOnBodyClick","target","closest","imgWrappers","scr","defaultMenuItem","menuItem","navItems","addListeners","ExpandedPromo","onOpen","onClose","promoDiv","isOpen","toggleBtn","resetFocus","promo","modalImageTemplate","modalVideoTemplate","removeModal","modalBackdrop","closeButton","modalHandler","modalContent","loadModal","imageTemplate","prop0","prop1","newId","productDescription","productLineURL","modalLabel","imageSrc","hasVisualizerLink","visualizerUrl","visualizerProgramFamilyName","visualizerButton","videoDescription","videoIframe","addModal","chatIconDiv","display","gridTemplate","buildGrid","scrollHeight","removeGrid","grid","RESET_GLIDE_EVENT","resetGlideEvent","sliders","breakpointsGridWidth","10000","minWidth","991","767","624","449","0","getMinItemsForScreenWidth","innerWidth","ct","glideRef","updateGlideEvents","enabled","update","getVideoWrapperId","heroSlider","glide","disableAutoplay","apiLoaded","iframes","players","getPlayerById","player","playerInfo","videoData","video_id","onUpdate","onInteract","getPlayerState","addControls","YT","Player","previews","firstScriptTag","timer","error","isInViewport","rect","bottom","innerHeight","clientHeight","clientWidth","compareImages","slideReady","clicked","isTouchDevice","slideMove","slideFinish","pos","getCursorPos","slide","slideContainer","overlayWidth","getElementsByClassName","comparisonContainer","imgCompSlider","headerDiv","anchors","inPageNavDiv","mainContentDiv","footerDiv","initLoadHeaderOffset","updateAnchorOffset","getAnchorPosition","anchor","offsetTop","scrollToPosition","updateHashAfterDelay","scrollY","getDocumentHeight","anchorName","setAsActive","currentActive","urlMatch","lazyLoadHandler","lazyloadThrottleTimeout","images","imageObserver","IntersectionObserver","entries","entry","isIntersecting","image","unobserve","rootMargin","observe","GallerySlider","PreviewArea","getGalleryItemData","srcStr","galleryItems","notDupe","caption","videosrc","previewWrapper","onSlideClick","onPreviewClick","updatePhotosModal","photos","primaryImage","getPreviewData","additionalImages","addPhotosModal","onClick","parent","activeItems","previewData","previewWrapperDiv","imageTemplateVals","videoTemplateVals","getLargeImageUrl","addImage","onAssetLoaded","setPreviewData","updateWrapperHeight","addVideo","filterLists","designStyleFilter","roomTypeFilter","productLineFilter","colorRangeFilter","imagesVideosFilter","formatToKebobCase","addItemToList","filterType","inputType","filterList","inputName","isChecked","addFilterItemByName","buildFilterObjects","loaderTemplateVals","imageThumbnailTemplateVals","videoThumbnailTemplateVals","showPhotoZoom","show","imageZoomDiv","destroyVideoPlayer","getZoomImageUrl","toggleLargeModalArea","thumbnail","wrapperDiv","imageWrapper","thumbImg","thumbSrc","onLoaded","loader","largeImageLoader","zoomContainer","backgroundImage","primaryProductImg","thumbCaption","updateActiveThumbnail","selectedBtn","ezPlus","zoomType","cursor","responsive","easing","easingDuration","destroyPhotoZoom","btnImgSrc","btnImgId","thumbnailList","getActiveThumbnail","thumbWrapperDiv","thumb","modalDiv","onResize","contentHeight","updateHeight","mainContent","pageHeader","mobileMenu","toggleMenu","menuWrapper","level1Links","listWrapper2","listWrapper3","backOneLevelBtns","listWrappers","toggleMobileMenu","menuLink","el","buildSubNav","linkClicked","tabbed","currentListContent","currentListWrapper","currentIndex","clonedList","nextListWrapper","tabIndex","subMenuListWrapper","headingHTML","headingLink","insertAdjacentHTML","trim","handleBackBtnEvent","startingListWrapper","endingListWrapper","level1Link","listLevel","backOneLevelBtn","searchBtn","searchDiv","searchInput","closeSearchMenuOnBodyClick","blur","primaryItems","counter","removeColorClasses","subnavDivs","disableForMyAccoount","onMenuItemMouseEnter","onMenuItemMouseLeave","onMenuItemClick","collectedEvents","manageMenuEvents","dropdown","color","getColorClass","scrollNav","eventType","navigator","userAgent","sidebar","footer","updateSidebarDims","maxHeight","updateSidebarPosition","sidebarTop","navItemDivs","navItem","indicatorDiv","span","changeTabs","currentTabs","addTablistEvents","tabList","tabs","tabFocus","tabWrappers","tabWrapper","dropdownBtn","nav","tablist","isDropdownVisible","getTotalListItemDims","ul","listItems","toggleDropdownNav","isExpanded","visibility","setSelectedTab","addDropdown","containsSelector","tabBtns","initTabnav","tabButtons","tabPanels","collapseButtons","tab","tabButton","panel","collapse","controls","thumbToggles","thumbs0","thumbs2","leftButton","rightButton","previousElementSibling","control","thumbToggle","toggles","setTooltipPosition","tooltip","offsetLeft","caret","hideTooltip","hideOpenTooltips","tooltipBtns","selectEventHandler","toggleTooltip","showTooltip","manageTooltipEvents","addTooltipEventHandlers","addNewTooltipToButton","addNewTooltipsToButtonGroup","btns","videosWrapper","modalTitle","modalBody","videoSrc","videoLink","posterUrl","pause","currentTime"],"mappings":"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","file":"app.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","// Current version.\nexport var VERSION = '1.13.7';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","/* eslint-disable no-console */\n// import * as testData from './test-data';\nimport { getParameterByName } from '../../utils/url-utils';\n\nconst baseUrl = '';\nconst digitalUserApi = window.digitalUserApiEndoint;\n\nconst addVisualization = (data, callback) => {\n // console.log('account-api.js, addVisualization');\n // console.log(data);\n let dealerIdParam = '';\n if (getParameterByName('dealerid') !== null) {\n dealerIdParam = `?dealerid=${getParameterByName('dealerid')}`;\n }\n const requestUrl = `${digitalUserApi}/visualization/user/${window.userId}/?site=${window.micrositeName}${dealerIdParam}`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'text/plain');\n request.setRequestHeader('Accept', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (callback) {\n callback();\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(data.toString());\n};\n\nconst addPhoto = (data, callback) => {\n const {\n imageUrl,\n thumbUrl,\n description,\n productLineId,\n productLineName,\n } = data;\n const requestUrl = `${digitalUserApi}/photo`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify({\n 'user-id': window.userId,\n 'photo-url': imageUrl,\n 'thumbnail-url': thumbUrl,\n description,\n 'product-line-id': productLineId,\n 'product-line-name': productLineName,\n }));\n};\n\nconst addDealer = (data, callback) => {\n const requestUrl = `${digitalUserApi}/dealer`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify({\n 'user-id': window.userId,\n 'record-id': data['record-id'],\n 'ship-to-account': data['ship-to-account'],\n }));\n};\n\nconst addSwatch = (data, callback) => {\n const {\n productLineCode,\n colorNumber,\n swatchId,\n widenUrl,\n } = data;\n const requestUrl = `${digitalUserApi}/swatch`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify({\n 'user-id': window.userId,\n 'product-line-code': productLineCode,\n 'color-number': colorNumber,\n 'swatch-id': swatchId,\n 'widen-url': widenUrl,\n }));\n};\n\nconst addSwatches = (data, callbacks) => {\n // console.log('account-api.js, addSwatches');\n const swatchlist = data.map(swatch => ({\n 'user-id': window.userId,\n 'product-line-code': swatch.productLineCode,\n 'color-number': swatch.colorNumber,\n 'swatch-id': swatch.swatchId,\n 'widen-url': swatch.widenUrl,\n }));\n // console.log(swatchlist);\n const requestUrl = `${baseUrl}/addswatches`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify({\n data: JSON.stringify({\n swatchlist,\n }),\n }));\n};\n\nconst removeItemByType = (type, id, callback) => {\n // console.log(`account-api.js, removeItemByType: ${type}, item: ${id}`);\n let requestUrl;\n switch (type) {\n case 'location':\n requestUrl = `${digitalUserApi}/dealer`;\n break;\n case 'photo':\n requestUrl = `${digitalUserApi}/photo`;\n break;\n case 'visualization':\n requestUrl = `${digitalUserApi}/visualization`;\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/swatch`;\n break;\n default:\n break;\n }\n const request = new XMLHttpRequest();\n request.open('DELETE', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send(JSON.stringify({\n 'asset-id': id,\n }));\n};\n\nconst getItemsByType = (type, callback) => {\n let requestUrl;\n switch (type) {\n case 'location':\n requestUrl = `${digitalUserApi}/dealer/brand/${window.brandId}/user/${window.userId}`;\n break;\n case 'photo':\n requestUrl = `${digitalUserApi}/photos/user/${window.userId}`;\n break;\n case 'swatch':\n requestUrl = `${digitalUserApi}/swatches/microsite/${window.micrositeName}/user/${window.userId}`;\n break;\n case 'visualization':\n requestUrl = `${digitalUserApi}/visualizations/user/${window.userId}?site=${window.micrositeName}`;\n break;\n default:\n break;\n }\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText.replace(/\\\\\"/gi, '\\\\\"'));\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nconst getAccountData = (callback) => {\n const requestUrl = `${digitalUserApi}/account/${window.userId}`;\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nconst forgotPassword = (data, callbacks) => {\n const {\n username,\n } = data;\n const requestUrl = `${baseUrl}/forgot-password/SendPasswordResetEmail`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify({\n username,\n }));\n};\n\nconst login = (data, callbacks) => {\n const {\n username,\n password,\n rememberMe,\n } = data;\n const requestUrl = `${baseUrl}/userlogin`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify({\n data: JSON.stringify({\n 'microsite-name': window.micrositeName,\n username,\n password,\n rememberMe,\n }),\n }));\n};\n\nconst logout = (callbacks) => {\n const requestUrl = `${baseUrl}/logout`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n // request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n if (!callbacks) {\n return;\n }\n if (callbacks.onSuccess) {\n // const responseData = JSON.parse(request.responseText);\n const responseData = request.responseText;\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onError) {\n // const responseData = JSON.parse(request.responseText);\n const responseData = request.responseText;\n callbacks.onError(responseData);\n }\n };\n request.send();\n};\n\nconst updatePassword = (data, callbacks) => {\n const requestUrl = `${digitalUserApi}/password`;\n const request = new XMLHttpRequest();\n request.open('PATCH', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callbacks.onSuccess) {\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify(data));\n};\n\nconst updateAccount = (data, callbacks) => {\n const requestUrl = `${digitalUserApi}/account`;\n const request = new XMLHttpRequest();\n request.open('PATCH', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callbacks.onSuccess) {\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify(data));\n};\n\nconst createAccount = (data, callbacks) => {\n const requestUrl = `${baseUrl}/usercreateaccount`;\n const request = new XMLHttpRequest();\n request.open('POST', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callbacks.onSuccess) {\n callbacks.onSuccess(responseData);\n }\n }\n };\n request.onerror = () => {\n if (callbacks.onError) {\n const responseData = JSON.parse(request.responseText);\n callbacks.onError(responseData);\n }\n };\n request.send(JSON.stringify({\n data: JSON.stringify(data),\n }));\n};\n\nconst hasAssets = (callback) => {\n const requestUrl = `${digitalUserApi}/has-assets/${window.userId}`;\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nexport {\n addVisualization,\n addPhoto,\n addDealer,\n addSwatch,\n addSwatches,\n createAccount,\n forgotPassword,\n getAccountData,\n getItemsByType,\n hasAssets,\n login,\n logout,\n removeItemByType,\n updateAccount,\n updatePassword,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nconst validateByType = (type, val) => {\n // console.log(`${type}, ${val}`);\n let status;\n switch (type) {\n case 'text':\n status = val !== '';\n break;\n case 'phone':\n status = new RegExp(/^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/).test(val);\n break;\n case 'zipcode':\n status = new RegExp(/(^\\d{5}(-\\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$)/).test(val);\n break;\n case 'email':\n /* eslint-disable no-useless-escape */\n status = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/).test(val);\n /* eslint-enable no-useless-escape */\n break;\n case 'password':\n status = new RegExp(/^(?=.*[a-z])(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#\\$%\\^&\\*])(?=.{8,})/).test(val); /* eslint-disable-line no-useless-escape */\n break;\n case 'productcode':\n // status = new RegExp(/^\\d{7,8}[\\.]\\d{3}$/).test(val); /* eslint-disable-line no-useless-escape */\n // status = new RegExp(/^(\\d{7,8}[\\.]\\d{3}$)|(^\\d{7,8}$)/).test(val); /* eslint-disable-line no-useless-escape */\n status = new RegExp(/^(\\d{1,}$)/).test(val); /* eslint-disable-line no-useless-escape */\n break;\n default:\n break;\n }\n return status;\n};\n\n// Format phone as xxx-xxx-xxxx\nconst formatPhone = (s) => {\n if (s !== null && s !== undefined && s !== '') {\n if (s.match(new RegExp(/\\d/g) || []) !== null) {\n const arr = s.match(new RegExp(/\\d/g) || []).join('');\n return `${arr.substring(0, 3)}-${arr.substring(3, 6)}-${arr.substring(6)}`;\n }\n return s;\n }\n return s;\n};\n\nconst validate = (form) => {\n // Identify all fields with a validate attribute in form (will be on the label for the input/submit)\n const fieldList = form.querySelectorAll('[validate]');\n let field;\n let isValid;\n let required;\n let isFormValid = true;\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n field = fieldList[i];\n isValid = true;\n required = field.getAttribute('required') !== null;\n // If value is required, run against validation OR\n if (required) {\n isValid = validateByType(field.getAttribute('validate'), field.value);\n }\n // If value isn't required but value has been entered that requires validation, then run\n if (!required && field.value !== '' && field.getAttribute('validate') !== 'text') {\n isValid = validateByType(field.getAttribute('validate'), field.value);\n }\n // Mark form as invalid\n if (!isValid) {\n isFormValid = isValid;\n // Toggle error class on element label\n form.querySelector(`[for=\"${field.id}\"]`).parentNode.classList.add('ValidationFail');\n } else {\n form.querySelector(`[for=\"${field.id}\"]`).parentNode.classList.remove('ValidationFail');\n }\n }\n return isFormValid;\n};\n\nconst removeAllErrors = (form) => {\n const fieldList = form.querySelectorAll('[validate]');\n let field;\n for (let i = 0; i < fieldList.length; i++) { /* eslint-disable-line no-plusplus */\n field = fieldList[i];\n form.querySelector(`[for=\"${field.id}\"]`).parentNode.classList.remove('ValidationFail');\n }\n};\n\nconst addRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll('.o-form__input');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].setAttribute('required', 'required');\n }\n};\n\nconst removeRequiredAttrs = (form) => {\n const inputList = form.querySelectorAll('.o-form__input');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].removeAttribute('required');\n }\n};\n\nconst clearInputValues = (form) => {\n const inputList = form.querySelectorAll('.o-form__input');\n for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n inputList[i].value = '';\n }\n};\n\nconst positionWindowAtFormElement = (options) => {\n let position = 0;\n if (options.element) {\n position = $(options.element).offset().top;\n }\n if (options.position) {\n position = options.position; /* eslint-disable-line prefer-destructuring */\n }\n let offset = options.offset; /* eslint-disable-line prefer-destructuring */\n if (!offset) {\n offset = 0;\n }\n $('html, body').animate({\n scrollTop: position + offset,\n }, 250);\n};\n\nconst disableFormSubmit = (form) => {\n if (!form) return;\n const submitBtn = form.querySelector('[type=submit]');\n if (!submitBtn) return;\n submitBtn.disabled = true;\n submitBtn.classList.add('updating');\n};\n\nconst enableFormSubmit = (form) => {\n if (!form) return;\n const submitBtn = form.querySelector('[type=submit]');\n if (!submitBtn) return;\n submitBtn.disabled = false;\n submitBtn.classList.remove('updating');\n};\n\nconst init = () => {};\n\nexport {\n addRequiredAttrs,\n clearInputValues,\n disableFormSubmit,\n enableFormSubmit,\n init,\n validate,\n formatPhone,\n positionWindowAtFormElement,\n removeAllErrors,\n removeRequiredAttrs,\n validateByType,\n};\n/* eslint-enable no-console */\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","const siteEventNames = {\n ADD_SWATCH: 'addswatch',\n ERROR_404: '404error',\n ON_MODAL_CLOSE: 'onmodalclose',\n ON_MODAL_OPEN: 'onmodalopen',\n ON_RECAPTCHA_LOAD: 'onrecaptchaload',\n REMOVE_SWATCH: 'removeswatch',\n SITE_ERROR: 'siteerror',\n};\n\nconst initSiteEvents = () => {\n if (window.siteEventRegistry) {\n return;\n }\n // Init events and add them to window scope here\n window.siteEventRegistry = {};\n Object.keys(siteEventNames).forEach((key) => {\n const value = siteEventNames[key];\n siteEventRegistry[value] = {\n event: new Event(value),\n data: {},\n }\n });\n};\n\nconst getEventData = (eventName) => {\n const { siteEventRegistry } = window;\n let data = {};\n Object.keys(siteEventRegistry).forEach((key) => {\n if (key === eventName) {\n data = siteEventRegistry[key].data;\n }\n });\n return data;\n}\n\nconst dispatchSiteEvent = (eventName, data) => {\n const { siteEventRegistry } = window;\n Object.keys(siteEventRegistry).forEach((key) => {\n if (key === eventName) {\n const event = siteEventRegistry[key].event;\n siteEventRegistry[key].data = data;\n window.dispatchEvent(event);\n }\n });\n};\n\nexport {\n dispatchSiteEvent,\n getEventData,\n initSiteEvents,\n siteEventNames,\n};\n","/*!\n * Glide.js v3.3.0\n * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\n/* eslint-disable */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.Glide=e()}(this,function(){\"use strict\";var i={type:\"slider\",startAt:0,perView:1,focusAt:0,gap:10,autoplay:!1,hoverpause:!0,keyboard:!0,bound:!1,swipeThreshold:80,dragThreshold:120,perTouch:!1,touchRatio:.5,touchAngle:45,animationDuration:400,rewind:!0,rewindDuration:800,animationTimingFunc:\"cubic-bezier(.165, .840, .440, 1)\",throttle:10,direction:\"ltr\",peek:0,breakpoints:{},classes:{direction:{ltr:\"glide--ltr\",rtl:\"glide--rtl\"},slider:\"glide--slider\",carousel:\"glide--carousel\",swipeable:\"glide--swipeable\",dragging:\"glide--dragging\",cloneSlide:\"glide__slide--clone\",activeNav:\"glide__bullet--active\",activeSlide:\"glide__slide--active\",disabledArrow:\"glide__arrow--disabled\"}};var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},o=function(){function i(t,e){for(var n=0;n\":\"<\",\"<\":\">\",\"=\":\"=\"};function t(t,e){return{modify:function(t){return e.Direction.is(\"rtl\")?-t:t}}}function O(i,r,o){var s=[function(e,n){return{modify:function(t){return t+n.Gaps.value*e.index}}},function(t,e){return{modify:function(t){return t+e.Clones.grow/2}}},function(n,i){return{modify:function(t){if(0<=n.settings.focusAt){var e=i.Peek.value;return c(e)?t-e.before:t-e}return t}}},function(o,s){return{modify:function(t){var e=s.Gaps.value,n=s.Sizes.width,i=o.settings.focusAt,r=s.Sizes.slideWidth;return\"center\"===i?t-(n/2-r/2):t-r*i-e*i}}}].concat(i._t,[t]);return{mutate:function(t){for(var e=0;e\")?(o.Transition.after(function(){s.emit(\"translate.jump\"),u.set(0)}),u.set(i*n+e*n)):u.set(t.movement)}),s.on(\"destroy\",function(){u.remove()}),u},Transition:function(n,e,t){var i=!1,r={compose:function(t){var e=n.settings;return i?t+\" 0ms \"+e.animationTimingFunc:t+\" \"+this.duration+\"ms \"+e.animationTimingFunc},set:function(){var t=0\"))&&(e._o=!1,i.emit(\"run.offset\",e.move)),i.emit(\"run.after\",e.move),o.enable()}))},calculate:function(){var t=this.move,e=this.length,n=t.steps,i=t.direction,r=\"number\"==typeof y(n)&&0!==y(n);switch(i){case\">\":\">\"===n?o.index=e:this.isEnd()?o.isType(\"slider\")&&!o.settings.rewind||(this._o=!0,o.index=0):r?o.index+=Math.min(e-o.index,-y(n)):o.index++;break;case\"<\":\"<\"===n?o.index=0:this.isStart()?o.isType(\"slider\")&&!o.settings.rewind||(this._o=!0,o.index=e):r?o.index-=Math.min(o.index,y(n)):o.index--;break;case\"=\":o.index=n}},isStart:function(){return 0===o.index},isEnd:function(){return o.index===this.length},isOffset:function(t){return this._o&&this.move.direction===t}};return p(t,\"move\",{get:function(){return this._m},set:function(t){var e=t.substr(1);this._m={direction:t.substr(0,1),steps:e?y(e)?y(e):e:0}}}),p(t,\"length\",{get:function(){var t=o.settings,e=n.Html.slides.length;return o.isType(\"slider\")&&\"center\"!==t.focusAt&&t.bound?e-1-(y(t.perView)-1)+y(t.focusAt):e-1}}),p(t,\"offset\",{get:function(){return this._o}}),t},Swipe:function(d,h,v){var n=new H,p=0,m=0,g=0,i=!1,r=!!M&&{passive:!0},t={mount:function(){this.bindSwipeStart()},start:function(t){if(!i&&!d.disabled){this.disable();var e=this.touches(t);p=null,m=y(e.pageX),g=y(e.pageY),this.bindSwipeMove(),this.bindSwipeEnd(),v.emit(\"swipe.start\")}},move:function(t){if(!d.disabled){var e=d.settings,n=e.touchAngle,i=e.touchRatio,r=e.classes,o=this.touches(t),s=y(o.pageX)-m,u=y(o.pageY)-g,a=Math.abs(s<<2),c=Math.abs(u<<2),l=Math.sqrt(a+c),f=Math.sqrt(c);if(!(180*(p=Math.asin(f/l))/Math.PI\"+s))):h.Move.make(),h.Html.root.classList.remove(e.classes.dragging),this.unbindSwipeMove(),this.unbindSwipeEnd(),v.emit(\"swipe.end\")}},bindSwipeStart:function(){var e=this,t=d.settings;t.swipeThreshold&&n.on(C[0],h.Html.wrapper,function(t){e.start(t)},r),t.dragThreshold&&n.on(C[1],h.Html.wrapper,function(t){e.start(t)},r)},unbindSwipeStart:function(){n.off(C[0],h.Html.wrapper,r),n.off(C[1],h.Html.wrapper,r)},bindSwipeMove:function(){var e=this;n.on(P,h.Html.wrapper,b(function(t){e.move(t)},d.settings.throttle),r)},unbindSwipeMove:function(){n.off(P,h.Html.wrapper,r)},bindSwipeEnd:function(){var e=this;n.on(L,h.Html.wrapper,function(t){e.end(t)})},unbindSwipeEnd:function(){n.off(L,h.Html.wrapper)},touches:function(t){return-1\")),37===t.keyCode&&e.Run.make(e.Direction.resolve(\"<\"))}};return n.on([\"destroy\",\"update\"],function(){r.unbind()}),n.on(\"update\",function(){r.mount()}),n.on(\"destroy\",function(){i.destroy()}),r},Autoplay:function(e,n,t){var i=new H,r={mount:function(){this.start(),e.settings.hoverpause&&this.bind()},start:function(){var t=this;e.settings.autoplay&&f(this._i)&&(this._i=setInterval(function(){t.stop(),n.Run.make(\">\"),t.start()},this.time))},stop:function(){this._i=clearInterval(this._i)},bind:function(){var t=this;i.on(\"mouseover\",n.Html.root,function(){t.stop()}),i.on(\"mouseout\",n.Html.root,function(){t.start()})},unbind:function(){i.off([\"mouseover\",\"mouseout\"],n.Html.root)}};return p(r,\"time\",{get:function(){var t=n.Html.slides[e.index].getAttribute(\"data-glide-autoplay\");return y(t||e.settings.autoplay)}}),t.on([\"destroy\",\"update\"],function(){r.unbind()}),t.on([\"run.before\",\"pause\",\"destroy\",\"swipe.start\",\"update\"],function(){r.stop()}),t.on([\"run.after\",\"play\",\"swipe.end\"],function(){r.start()}),t.on(\"update\",function(){r.mount()}),t.on(\"destroy\",function(){i.destroy()}),r},Breakpoints:function(t,e,n){var i=new H,r=t.settings,o=E(r.breakpoints),s=a({},r),u={match:function(t){if(void 0!==window.matchMedia)for(var e in t)if(t.hasOwnProperty(e)&&window.matchMedia(\"(max-width: \"+e+\"px)\").matches)return t[e];return s}};return a(r,u.match(o)),i.on(\"resize\",window,b(function(){t.settings=h(r,u.match(o))},t.settings.throttle)),n.on(\"update\",function(){o=E(o),s=a({},r)}),n.on(\"destroy\",function(){i.off(\"resize\",window)}),u}};return function(t){function e(){return r(this,e),s(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,m),o(e,[{key:\"mount\",value:function(){var t=0 {\n event.preventDefault();\n const modalForm = document.querySelector('.acct-login-modal-form');\n const modalErrorMsg = modalForm.querySelector('.form-error-message');\n if (validate(modalForm)) {\n modalErrorMsg.classList.add('hide');\n let remember = false;\n if (document.querySelectorAll('#modalAcctRememberMe:checked').length === 1) {\n remember = true;\n }\n login(\n {\n username: document.getElementById('modalAcctUsername').value,\n password: document.getElementById('modalAcctPassword').value,\n rememberMe: remember,\n },\n {\n onSuccess: (data) => {\n // console.log(data);\n if (!data.success) {\n modalErrorMsg.classList.remove('hide');\n } else {\n window.isAuthenticated = true;\n window.userId = data['user-id'];\n checkLoginStatus(() => { /* eslint-disable-line no-use-before-define */\n if (callbacks) {\n if (callbacks.onLoginSuccess) {\n callbacks.onLoginSuccess();\n }\n }\n });\n const modal = document.querySelector(`#${loginModalId}`);\n closeAccountModal(modal);\n }\n },\n onError: () => {\n if (!callbacks) {\n return;\n }\n if (callbacks.onLoginFail) {\n callbacks.onLoginFail();\n }\n },\n },\n );\n }\n};\n\nconst onModalClose = (event, callback) => {\n if (callback) {\n callback();\n }\n};\n\nconst onModalButtonClick = (event) => {\n const {\n grecaptchaApi,\n isAuthenticated,\n loginUrl,\n myAccountUrl,\n } = window;\n if (isAuthenticated) {\n return;\n }\n event.preventDefault();\n const score = grecaptchaApi.currentScore;\n if (grecaptchaApi.displayChallenge(score)) {\n window.location = loginUrl;\n } else {\n launchLoginModal({ // eslint-disable-line no-use-before-define\n type: '',\n callbacks: {\n onLoginSuccess: () => {\n window.location = myAccountUrl;\n },\n onLoginFail: () => {},\n },\n });\n }\n};\n\nconst onLogoutButtonClick = (event) => {\n event.preventDefault();\n logout({\n onSuccess: () => {\n clearAllSwatchbookData();\n window.location = window.loginUrl;\n },\n });\n};\n\nconst addLogoutEventHandlers = () => {\n const logoutBtns = document.querySelectorAll('a[href=\"/logout\"], a[href=\"/logout/\"]');\n if (logoutBtns) {\n [].map.call(logoutBtns, btn => btn.addEventListener('click', onLogoutButtonClick));\n }\n};\n\nconst removeModalEventHandlers = () => {\n const modalBtns = document.querySelectorAll('.acct-login-modal-btn');\n // console.log('login.js, removeModalEventHandlers');\n // console.log(modalBtns);\n if (modalBtns) {\n [].map.call(modalBtns, btn => btn.removeEventListener('click', onModalButtonClick));\n }\n};\n\nconst addModalEventHandlers = () => {\n const modalBtns = document.querySelectorAll('.acct-login-modal-btn');\n // console.log('login.js, addModalEventHandlers');\n // console.log(modalBtns);\n if (modalBtns) {\n [].map.call(modalBtns, btn => btn.addEventListener('click', onModalButtonClick));\n }\n};\n\nconst checkLoginStatus = (callback) => {\n // console.log(`login.js, checkLoginStatus, isAuthenticated: ${window.isAuthenticated}`);\n const body = document.getElementsByTagName('body')[0];\n if (window.isAuthenticated) {\n body.classList.add('is-authenticated');\n removeModalEventHandlers();\n addLogoutEventHandlers();\n // Check to see if there are any swatches in localstorage\n const localStorageData = getAllOfType('swatch');\n if (localStorageData.length !== 0) {\n addSwatches(localStorageData, {\n onSuccess: () => {\n clearAllSwatchbookData();\n if (callback) {\n callback();\n updateAccountIconStatus();\n }\n },\n onError: () => {\n if (callback) {\n callback();\n }\n },\n });\n } else {\n if (callback) { /* eslint-disable-line no-lonely-if */\n callback();\n updateAccountIconStatus();\n }\n }\n } else {\n body.classList.remove('is-authenticated');\n addModalEventHandlers();\n updateAccountIconStatus();\n }\n};\n\nconst toggleCreateAccountForm = (isVisible) => {\n const modal = document.getElementById(loginModalId);\n if (isVisible) {\n modal.querySelector('.account-login-container').classList.add('hidden');\n // modal.querySelector('.login-side-column').classList.add('hidden');\n modal.querySelector('.create-account-container').classList.remove('hidden');\n // modal.querySelector('.create-account-side-column').classList.remove('hidden');\n if (modal.querySelectorAll('.login-message-wrapper').length !== 0) {\n modal.querySelector('.login-message-wrapper').classList.add('hidden');\n }\n modal.style.height = '600px';\n } else {\n modal.querySelector('.account-login-container').classList.remove('hidden');\n // modal.querySelector('.login-side-column').classList.remove('hidden');\n modal.querySelector('.create-account-container').classList.add('hidden');\n // modal.querySelector('.create-account-side-column').classList.add('hidden');\n modal.removeAttribute('style');\n if (modal.querySelectorAll('.login-message-wrapper').length !== 0) {\n modal.querySelector('.login-message-wrapper').classList.remove('hidden');\n }\n }\n};\n\nconst launchLoginModal = (options) => {\n // Reset modal\n toggleCreateAccountForm();\n resetCreateAccountForm({\n form: document.querySelector('.modal-acct-create-form'),\n });\n const {\n type,\n callbacks,\n } = options;\n const modal = document.getElementById(loginModalId);\n if (type) {\n modal.classList.add('c-modal--loginCTA');\n modal.querySelector('.login-message-wrapper').classList.remove('hidden');\n let msg = '';\n switch (type) {\n case 'photo':\n msg = window.loginMessagePhoto;\n break;\n case 'location':\n msg = window.loginMessageDealer;\n break;\n case 'visualization':\n msg = window.loginMessageVisualization;\n break;\n default:\n break;\n }\n modal.querySelector('.login-message-wrapper p').innerHTML = msg;\n } else {\n modal.classList.remove('c-modal--loginCTA');\n modal.querySelector('.login-message-wrapper').classList.add('hidden');\n modal.querySelector('.login-message-wrapper p').innerHTML = '';\n }\n const overlay = document.querySelector('#modal-overlay');\n openAccountModal(modal);\n // Submit modal form\n const loginSubmitBtn = modal.querySelector('.acct-login-modal-form .o-form__submit');\n const modalCloseBtn = modal.querySelector('#close-btn');\n // const toggleCreateAccountBtn = modal.querySelector('.create-account-btn');\n // Only run once\n if (initialLanuch) {\n initialLanuch = false;\n loginSubmitBtn.addEventListener('click', (event) => {\n onLoginSubmit(event, callbacks);\n });\n modalCloseBtn.addEventListener('click', (event) => {\n event.stopPropagation();\n onModalClose(event, callbacks.onLoginFail);\n });\n if (overlay) {\n overlay.addEventListener('click', event => onModalClose(event, callbacks.onLoginFail));\n }\n // Toggle create account form\n if (type === 'visualization' || type === 'photo') {\n // Need to account for error message as well...\n [].map.call(document.querySelectorAll('.create-account-btn, .acct-login-modal-form .form-error-message a'), btn => btn.addEventListener('click', (event) => {\n event.preventDefault();\n addCreateAccountCallbacks({\n onLoginSuccess: () => {\n callbacks.onLoginSuccess();\n closeAccountModal(modal);\n },\n onLoginFail: () => {\n // console.log('onLoginFail');\n callbacks.onLoginFail();\n },\n });\n toggleCreateAccountForm(true);\n }));\n }\n }\n};\n\nconst submitForm = (data, callbacks) => {\n login(data, callbacks);\n};\n\nconst init = () => {\n checkLoginStatus();\n};\n\nexport {\n checkLoginStatus,\n init,\n launchLoginModal,\n submitForm,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport {\n dispatchSiteEvent,\n siteEventNames,\n} from '../events/site-events';\nimport { getAccountData } from './consumer-account/account-api';\nimport { getItemsFromAccount } from './consumer-account/storage-actions';\nimport { updateAccountIconStatus } from './consumer-account/account-nav-icon';\n\nconst swatchbookLsObj = 'bali_swbk';\nlet swatchbookData;\n\nconst getItemById = (id) => {\n if (!swatchbookData) {\n swatchbookData = getSwatchbookData(); /* eslint-disable-line no-use-before-define */\n }\n const item = swatchbookData.items.find(saved => saved.id === id);\n if (item !== undefined) {\n return item;\n }\n return null;\n};\n\n// We're only saving the portion of the url AFTER springswindowfashions/\nconst getTruncatedWidenUrl = (url) => {\n if (url.indexOf('springswindowfashions/') !== -1) {\n return url.split('springswindowfashions/')[1];\n }\n return url;\n};\n\nconst encodeSwatchModalTableDataById = (id) => {\n const div = document.createElement('div');\n let s = '';\n div.classList.add('hidden');\n div.innerHTML = document.querySelector(`#${id} .image-wrapper`).dataset.imageStory;\n document.getElementsByTagName('body')[0].appendChild(div);\n const trList = div.getElementsByTagName('table')[0].querySelectorAll('tr');\n let tr;\n for (let i = 0; i < trList.length; i++) { /* eslint-disable-line no-plusplus */\n tr = trList[i];\n if (tr.querySelector('.lightbox-label')) {\n s += `${tr.querySelector('.lightbox-label').innerText},,`;\n }\n if (tr.querySelector('.lightbox-value')) {\n s += tr.querySelector('.lightbox-value').innerText;\n }\n s += ';;';\n }\n document.getElementsByTagName('body')[0].removeChild(div);\n return s;\n};\n\nconst decodeSwatchModalTableDataById = (data) => {\n const arr = data.split(';;');\n let td = [];\n let rows = '';\n let className = '';\n arr.forEach((tr) => {\n rows += '';\n td = tr.split(',,');\n td.forEach((str, index) => {\n if (index === 0 && td.length === 2) {\n className = 'lightbox-label';\n } else {\n className = 'lightbox-value';\n }\n rows += `${str}`;\n });\n rows += '';\n });\n return rows.replace(/\"/g, '"');\n};\n\nconst isEmpty = () => {\n if (swatchbookData.items.length === 0) {\n return true;\n }\n return false;\n};\n\nconst updateNavIcon = () => {\n // Do not update icon if window.useLocalStorage = false and window.isAuthenticated = false\n if (!window.useLocalStorage && !window.isAuthenticated) {\n return;\n }\n let icon = document.querySelector('.my-account-item');\n if (icon === null) {\n icon = document.querySelector('.my-favorites-item');\n }\n const addedClass = 'items-added-to-swatchbook';\n if (icon === null) {\n return;\n }\n if (isEmpty()) {\n icon.classList.remove(addedClass);\n } else {\n icon.classList.add(addedClass);\n }\n};\n\nconst getSwatchbookData = () => {\n let data = JSON.parse(window.localStorage.getItem(swatchbookLsObj));\n if (data === null) {\n // Set up an empty data object\n data = { items: [], cart: [], order: [] };\n } else {\n /* eslint-disable no-lonely-if */\n if (data.order === undefined) {\n data.order = [];\n }\n /* eslint-enable no-lonely-if */\n }\n return data;\n};\n\nconst getUserData = (callback) => {\n getAccountData(callback);\n};\n\nconst saveItem = (options) => {\n switch (options.type) {\n case 'swatch':\n break;\n case 'photo':\n options.id = window.widenUtils.getIdFromAssetUrl(options.imageUrl);\n break;\n case 'location':\n options.id = 'dealer';\n break;\n default:\n break;\n }\n if (getItemById(options.id) !== null) {\n console.log(`${options.id} already in swatchbook.`);\n return;\n }\n // Add timestamp\n options.page = window.location.href;\n options.dateSaved = Date.now();\n swatchbookData.items.push(options);\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n updateAccountIconStatus();\n\n if (options.type === 'photo' && options.description == null) {\n window.widenUtils.setAssetCaption(options.id, options.imageUrl);\n }\n};\n\nconst removeItem = (type, val) => {\n let id;\n switch (type) {\n case 'swatch':\n id = val;\n break;\n case 'photo':\n id = window.widenUtils.getIdFromAssetUrl(val);\n break;\n case 'location':\n id = val;\n break;\n case 'visualization':\n id = val;\n break;\n default:\n break;\n }\n const at = swatchbookData.items.findIndex(saved => saved.id === id);\n if (at !== undefined) {\n // Remove item\n swatchbookData.items.splice(at, 1);\n console.log(`${id} removed from swatchbook.`);\n // Update data object in storage\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n updateAccountIconStatus();\n};\n\nconst getAllOfType = (type) => {\n const data = getSwatchbookData();\n if (!data) {\n return [];\n }\n const arr = data.items.filter(item => item.type === type);\n return arr;\n};\n\nconst saveSwatchbookItem = (options) => {\n if (options.type === 'swatch') {\n options.modalData = encodeSwatchModalTableDataById(options.id);\n }\n if (getItemById(options.id) === null) {\n options.page = window.location.href;\n options.dateSaved = Date.now();\n swatchbookData.items.push(options);\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n updateNavIcon();\n }\n};\n\nconst removeSwatchbookItem = (options) => {\n let id;\n switch (options.type) {\n case 'swatch':\n id = options.value;\n break;\n case 'photo':\n id = options.value;\n break;\n default:\n break;\n }\n const at = swatchbookData.items.findIndex(saved => saved.id === id);\n if (at !== undefined) {\n // Remove item\n swatchbookData.items.splice(at, 1);\n // Update data object in storage\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n updateNavIcon();\n};\n\nconst localStorageSwatchEventHandlers = (item) => {\n if (!item) {\n return;\n }\n const id = item.getAttribute('id');\n const btn = item.querySelector('.swatchbutton');\n const label = item.querySelector('.swatchbutton--label');\n if (btn) {\n // Toggle button to remove state if in swatchbook\n if (getItemById(id) !== null) {\n btn.classList.add('is-active');\n label.innerHTML = 'Remove Swatch';\n } else {\n btn.classList.remove('is-active');\n label.innerHTML = 'Add Swatch';\n }\n // Add/remove swatch event handlers\n btn.addEventListener('click', (event) => {\n event.stopPropagation();\n // Remove\n if (btn.classList.toString().indexOf('is-active') !== -1) {\n removeSwatchbookItem({\n type: 'swatch',\n value: id,\n });\n btn.classList.remove('is-active');\n label.innerHTML = 'Add Swatch';\n dispatchSiteEvent(siteEventNames.ADD_SWATCH);\n // Add\n } else {\n const data = {\n collection: btn.getAttribute('data-collection'),\n colorName: btn.getAttribute('data-colorName'),\n colorNumber: btn.getAttribute('data-colorNumber'),\n id: btn.getAttribute('data-id'),\n imageUrl: btn.getAttribute('data-imageUrl'),\n productLine: btn.getAttribute('data-productLine'),\n productLineCode: btn.getAttribute('data-productLineCode'),\n styleId: btn.getAttribute('data-styleId'),\n swatchCatId: btn.getAttribute('data-swatchCatId'),\n swatchCatName: btn.getAttribute('data-swatchCatName'),\n swatchStyleName: btn.getAttribute('data-swatchStyleName'),\n swatchId: btn.getAttribute('data-swatchId'),\n newSwatch: btn.getAttribute('data-new-swatch'),\n displayMessage: btn.getAttribute('data-display-message'),\n type: btn.getAttribute('data-type'),\n widenUrl: getTruncatedWidenUrl(btn.getAttribute('data-imageUrl')),\n };\n saveSwatchbookItem(data);\n btn.classList.add('is-active');\n label.innerHTML = 'Remove Swatch';\n dispatchSiteEvent(siteEventNames.REMOVE_SWATCH);\n }\n });\n }\n};\n\nconst addSwatchToCart = (id) => {\n if (getSwatchbookData === null) {\n init(); /* eslint-disable-line no-use-before-define */\n }\n if (swatchbookData.cart.indexOf(id) === -1) {\n swatchbookData.cart.push(id);\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n};\n\nconst removeSwatchFromCart = (id) => {\n const at = swatchbookData.cart.findIndex(saved => saved === id);\n if (at !== -1) {\n // Remove item\n swatchbookData.cart.splice(at, 1);\n // Update data object in storage\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n }\n};\n\nconst clearSwatchbook = () => {\n if (swatchbookData === null) {\n return;\n }\n swatchbookData.items = [];\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst clearCart = () => {\n if (swatchbookData === null) {\n return;\n }\n swatchbookData.cart = [];\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst updateOrderData = (data) => {\n swatchbookData.order = data;\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst clearOrderData = () => {\n swatchbookData.cart = [];\n swatchbookData.order = [];\n window.localStorage.setItem(swatchbookLsObj, JSON.stringify(swatchbookData));\n};\n\nconst destroy = () => {\n swatchbookData = null;\n};\n\nconst clearAllSwatchbookData = () => {\n if (!swatchbookData) {\n swatchbookData = getSwatchbookData();\n }\n clearOrderData();\n clearSwatchbook();\n destroy();\n};\n\nconst getAllSelectedSwatches = () => {\n const { isAuthenticated } = window;\n const type = 'swatch';\n return new Promise((resolve) => {\n if (isAuthenticated) {\n getItemsFromAccount(type, (data) => {\n resolve(data.swatches);\n });\n } else {\n resolve(getAllOfType(type));\n }\n });\n};\n\nconst init = () => {\n swatchbookData = getSwatchbookData();\n // console.log(swatchbookData);\n if (window.useLocalStorage) {\n updateNavIcon();\n } else {\n updateAccountIconStatus();\n }\n};\n\nconst getProductDetailsPageUrl = (productLineId, callback) => {\n const requestUrl = `/GetProductDetailsUrl?productLineId=${productLineId}`;\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback(responseData.url);\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nconst getSwatchProductUrlParams = (productName, callback) => {\n // If visualizer isn't active immediately run the callback method\n if (!window.isVisualizerActive) {\n callback();\n return;\n }\n // console.log(productName.toLowerCase());\n // Pass product name (lc) to get visualization url params...\n const requestUrl = `/GetVisualizationProperties?pagename=${productName.toLowerCase()}`;\n const request = new XMLHttpRequest();\n request.open('GET', requestUrl, true);\n request.setRequestHeader('Content-type', 'application/json');\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const responseData = JSON.parse(request.responseText);\n if (callback) {\n callback({\n visualizerModelId: responseData.VisualizerModelId,\n visualizerProgamFamilyName: responseData.VisualizerProgramFamilyName,\n });\n }\n }\n };\n request.onerror = () => {\n console.log('error');\n };\n request.send();\n};\n\nexport {\n saveItem,\n removeItem,\n getAllSelectedSwatches,\n getTruncatedWidenUrl,\n saveSwatchbookItem,\n decodeSwatchModalTableDataById,\n removeSwatchbookItem,\n localStorageSwatchEventHandlers,\n addSwatchToCart,\n removeSwatchFromCart,\n getSwatchbookData,\n getItemById,\n getAllOfType,\n updateOrderData,\n getUserData,\n clearAllSwatchbookData,\n clearCart,\n clearOrderData,\n clearSwatchbook,\n getSwatchProductUrlParams,\n getProductDetailsPageUrl,\n init,\n destroy,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console, no-restricted-globals */\nimport getWidenGalleryFilterData from './widen-gallery-filters';\n\nlet mediaLoadOffset = 0;\nlet mediaLoadCallback;\nlet onMediaLoadComplete;\nlet mediaLoadLimit = 25; // Only load 25 initially to build out gallery, then switch to max allowed (100)\n\nconst setMediaLoadCallback = (callback) => {\n mediaLoadCallback = callback;\n};\n\nconst setMediaLoadCompleteCallback = (callback) => {\n onMediaLoadComplete = callback;\n};\n\nconst getDimensionsFromAssetUrl = (url) => {\n // Returns object w/ width/height or null... should be at position 6 in array\n const a = url.split('/');\n const dims = a[6];\n if (dims !== undefined) {\n if (dims.indexOf('px') !== -1 && !isNaN(parseInt(dims, 10))) {\n const b = dims.split('x');\n // Assume square, only one dimension\n if (b[1] === '') {\n b[0] = dims;\n b[1] = dims;\n }\n return {\n width: parseInt(b[0], 10),\n height: parseInt(b[1], 10),\n };\n }\n }\n return null;\n};\n\nconst updateAssetUrlDimensions = (asset) => {\n const urlDims = getDimensionsFromAssetUrl(asset.src);\n if (urlDims !== null) {\n // Check for square image\n if (asset.src.indexOf(`${urlDims.width}x`) === -1) {\n return asset.src\n .replace(`${urlDims.height}px`, `${asset.width}x${asset.height}px`);\n }\n return asset.src\n .replace(`${urlDims.width}x`, `${asset.width}x`)\n .replace(`${urlDims.height}px`, `${asset.height}px`);\n }\n return asset.src;\n};\n\nconst getIdFromAssetUrl = (url) => {\n const fragment = url.match(/springswindowfashions\\/(.*?)\\//);\n if (fragment !== null) {\n return fragment[1];\n }\n return url;\n};\n\nconst getFileNameFromVideoEmbedUrl = (url) => {\n const fragment = url.match(/([^/]+$)/);\n if (fragment !== null) {\n return fragment[1];\n }\n return url;\n};\n\nconst flattenMetaDataArray = arr => (\n arr.toString(',')\n);\n\nconst getFirstMetaDataArrayValue = (arr) => {\n if (arr.length === 0) {\n return '';\n }\n return arr[0];\n};\n\nconst getAssetDescription = (arr) => {\n const desc = getFirstMetaDataArrayValue(arr);\n if (desc !== '') {\n return desc;\n }\n return 'A room scene featuring products by Bali.';\n};\n\nconst getFilename = (filename) => {\n const name = filename;\n if (name.indexOf('.') !== -1) {\n return name.substr(0, name.lastIndexOf('.'));\n }\n return name;\n};\n\nconst getUrlForWidth = (filename, id, width) => {\n const name = getFilename(filename);\n return `https://embed.widencdn.net/img/springswindowfashions/${id}/${width}px/${name}.webp`;\n};\n\nconst getVideoPosterUrl = (filename, id) => {\n const name = getFilename(filename);\n return `https://embed.widencdn.net/poster/640/springswindowfashions/${id}/${name}`;\n};\n\nconst getProductLineId = (product) => {\n const { productEpiReferences } = window;\n if (productEpiReferences !== undefined) {\n const data = productEpiReferences.find(item => item.product === product);\n if (data !== undefined) {\n return data.productLineId;\n }\n }\n return '';\n};\n\nconst getProductUrl = (product) => {\n const { productEpiReferences } = window;\n if (productEpiReferences !== undefined) {\n const data = productEpiReferences.find(item => item.product === product);\n if (data !== undefined) {\n return data.productUrl;\n }\n }\n return '';\n};\n\nconst parseImageData = (data) => {\n // console.log(data.items);\n data.items.forEach((item) => {\n // console.log(`${item.external_id} / ${flattenMetaDataArray(item.metadata.fields.Product)}`);\n if (item.file_properties.format_type === 'image') {\n window.MediaGalleryData.mediaItems.push({\n imageUrl: getUrlForWidth(item.filename, item.external_id, 1024),\n imageAlt: '',\n filename: getFilename(item.filename),\n title: item.id,\n product: getFirstMetaDataArrayValue(item.metadata.fields.Product),\n productLineId: getProductLineId(getFirstMetaDataArrayValue(item.metadata.fields.Product)),\n productLineUrl: getProductUrl(getFirstMetaDataArrayValue(item.metadata.fields.Product)),\n id: item.external_id,\n type: 'Image',\n description: getAssetDescription(item.metadata.fields.webReadyCaption),\n productLineName: flattenMetaDataArray(item.metadata.fields.Product),\n colorRange: flattenMetaDataArray(item.metadata.fields.colorRange),\n designStyle: flattenMetaDataArray(item.metadata.fields.RoomStyle),\n roomType: flattenMetaDataArray(item.metadata.fields.RoomType),\n columnSize: 'col-xs-12 col-sm-4',\n active: false,\n });\n } else if (item.file_properties.format_type === 'video') {\n const videoFileName = item.filename.replace(/\\s/gi, '%20');\n const posterImage = `https://embed.widencdn.net/poster/640/springswindowfashions/${item.external_id}/${videoFileName}`;\n window.MediaGalleryData.mediaItems.push({\n videoUrl: `https://embed.widencdn.net/video/springswindowfashions/${item.external_id}/${videoFileName}`,\n posterImage,\n id: item.external_id,\n type: 'Video',\n title: getFirstMetaDataArrayValue(item.metadata.fields.videoTitle),\n description: getFirstMetaDataArrayValue(item.metadata.fields.description),\n productLineName: '',\n colorRange: '',\n designStyle: '',\n roomType: '',\n columnSize: 'col-xs-12 col-sm-4',\n active: false,\n });\n }\n });\n // console.log(window.MediaGalleryData.mediaItems);\n};\n\nconst getMediaItemData = (onInitLoadComplete) => {\n const { requestUrl, galleryWidenQueryParams } = window;\n const request = new XMLHttpRequest();\n let url = requestUrl;\n let requestMethod = 'POST';\n if (window.requestMethod) {\n requestMethod = window.requestMethod; /* eslint-disable-line prefer-destructuring */\n }\n const urlDataParam = `?query=${galleryWidenQueryParams}&limit=${mediaLoadLimit}&offset=${mediaLoadOffset}&expand=file_properties,metadata`;\n url = `${requestUrl}?data=${encodeURIComponent(urlDataParam)}`;\n if (window.additionalHeader) {\n url = `${requestUrl}${galleryWidenQueryParams}&limit=${mediaLoadLimit}&offset=${mediaLoadOffset}&expand=file_properties,metadata`;\n }\n request.open(requestMethod, url, true);\n request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n if (window.additionalHeader) {\n request.setRequestHeader(window.additionalHeader.name, window.additionalHeader.value);\n }\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const data = JSON.parse(request.responseText);\n const totalCt = parseInt(data.total_count, 10);\n const itemsLoaded = window.MediaGalleryData.mediaItems.length;\n if (mediaLoadOffset <= parseInt(data.total_count, 10)) {\n mediaLoadOffset += mediaLoadLimit;\n mediaLoadLimit = 100;\n parseImageData(data);\n getMediaItemData();\n }\n // Run first time only\n if (onInitLoadComplete !== undefined) {\n onInitLoadComplete();\n }\n // Run everytime\n if (mediaLoadCallback !== undefined) {\n mediaLoadCallback();\n }\n // Run last time/on complete\n if (itemsLoaded === totalCt && onMediaLoadComplete !== undefined) {\n window.MediaGalleryData.filters = getWidenGalleryFilterData(window.MediaGalleryData.mediaItems);\n onMediaLoadComplete();\n }\n }\n };\n request.onerror = () => {\n console.log(request);\n };\n request.send();\n};\n\nconst init = (callback) => {\n window.MediaGalleryData.filters = getWidenGalleryFilterData(window.MediaGalleryData.mediaItems);\n getMediaItemData(callback);\n};\n\nexport {\n getDimensionsFromAssetUrl,\n getIdFromAssetUrl,\n getMediaItemData,\n getProductUrl,\n init,\n setMediaLoadCallback,\n setMediaLoadCompleteCallback,\n updateAssetUrlDimensions,\n getVideoPosterUrl,\n getFileNameFromVideoEmbedUrl,\n};\n/* eslint-enable no-console, no-restricted-globals */\n","import { validate, validateByType, positionWindowAtFormElement, removeAllErrors } from '../../utils/form-validation-utils';\nimport { createAccount } from './account-api';\nimport { checkLoginStatus } from './login';\n\nconst addCreateAccountCallbacks = (callbacks) => {\n window.onSubmitCallbacks = callbacks;\n};\nconst removereateAccountCallbacks = () => {\n window.onSubmitCallbacks = null;\n};\n\nconst passwordMatch = (passIpt, passConfirmIpt) => {\n if (passIpt.value === passConfirmIpt.value) {\n return true;\n }\n return false;\n};\n\nconst passwordStrength = (passIpt, passConfirmIpt) => {\n if (passIpt.value === '' && passConfirmIpt.value === '') {\n return true; // ignore\n }\n if (validateByType('password', passIpt.value) && validateByType('password', passConfirmIpt.value)) {\n return true;\n }\n return false;\n};\nconst resetCreateAccountForm = (options) => {\n const { form } = options;\n const errorMsg = form.querySelector('.password-mismatch-error-message');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const passwordStrengthErrorMsg = form.querySelector('.password-strength-error-message');\n const username = form.querySelector('[name=\"acctUsername\"]');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n username.value = '';\n passIpt.value = '';\n passConfirmIpt.value = '';\n form.querySelector('[name=\"offer-opt-in\"]').checked = true;\n // Remove errors\n errorMsg.classList.add('hide');\n existingErrorMsg.classList.add('hide');\n accountCreationErrorMsg.classList.add('hide');\n passwordStrengthErrorMsg.classList.add('hide');\n removeAllErrors(form);\n};\n\n\nconst init = (options) => {\n const { form, disableScroll } = options;\n const errorMsg = form.querySelector('.password-mismatch-error-message');\n const existingErrorMsg = form.querySelector('.existing-account-error-message');\n const accountCreationErrorMsg = form.querySelector('.account-creation-error-message');\n const passwordStrengthErrorMsg = form.querySelector('.password-strength-error-message');\n const username = form.querySelector('[name=\"acctUsername\"]');\n const passIpt = form.querySelector('[name=\"acctPassword\"]');\n const passConfirmIpt = form.querySelector('[name=\"acctPasswordConfirm\"]');\n const submitBtn = form.querySelector('.o-form__submit');\n\n submitBtn.addEventListener('click', (event) => {\n event.preventDefault();\n const { onSubmitCallbacks } = window;\n passIpt.parentNode.classList.remove('ValidationFail');\n passConfirmIpt.parentNode.classList.remove('ValidationFail');\n errorMsg.classList.add('hide');\n existingErrorMsg.classList.add('hide');\n accountCreationErrorMsg.classList.add('hide');\n passwordStrengthErrorMsg.classList.add('hide');\n if (validate(form) && passwordMatch(passIpt, passConfirmIpt)) {\n // Unhecked/checked opt-in map to 0/1\n let optInVal = 0;\n if (form.querySelectorAll('[name=\"offer-opt-in\"]:checked').length === 1) {\n optInVal = 1;\n }\n createAccount(\n {\n username: username.value,\n password: passIpt.value,\n 'marketing-opt-in': optInVal,\n 'microsite-name': window.micrositeName,\n },\n {\n onSuccess: (data) => {\n if (data['user-id'] === 0 || data['user-id'] === '0') {\n existingErrorMsg.classList.remove('hide');\n } else if (data['user-id'] === -1) {\n accountCreationErrorMsg.classList.remove('hide');\n } else {\n window.isAuthenticated = true;\n window.userId = data['user-id'];\n checkLoginStatus(() => {\n if (onSubmitCallbacks) {\n onSubmitCallbacks.onLoginSuccess();\n } else {\n window.location = window.myAccountUrl;\n }\n });\n }\n },\n onError: () => {\n errorMsg.classList.remove('hide');\n if (onSubmitCallbacks) {\n onSubmitCallbacks.onLoginFail();\n }\n },\n },\n );\n } else if (!passwordMatch(passIpt, passConfirmIpt)) {\n passIpt.parentNode.classList.add('ValidationFail');\n passConfirmIpt.parentNode.classList.add('ValidationFail');\n errorMsg.classList.remove('hide');\n // Don't run if in modal\n // console.log(`create-account.js, disableScroll: ${disableScroll}`);\n if (!disableScroll) {\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n }\n } else {\n // Don't run if in modal\n if (!disableScroll) { /* eslint-disable-line no-lonely-if */\n positionWindowAtFormElement({\n element: form.parentNode,\n offset: -75,\n });\n }\n if (!passwordStrength(passIpt, passConfirmIpt)) {\n passwordStrengthErrorMsg.classList.remove('hide');\n }\n }\n });\n};\n\nexport {\n addCreateAccountCallbacks,\n removereateAccountCallbacks,\n init,\n resetCreateAccountForm,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nimport * as api from './account-api';\nimport { launchLoginModal } from './login';\n\nconst getPhotoAccountIdFromWidenId = (url, assets) => {\n const item = assets.find(asset => asset['photo-url'] === url);\n if (item !== undefined) {\n return item['photo-id'];\n }\n return null;\n};\n\nconst saveItemToAccount = (type, options, callback) => {\n // console.log({ type, options, callback });\n if (window.isAuthenticated) {\n switch (type) {\n case 'location':\n api.addDealer(options, callback);\n break;\n case 'photo':\n api.addPhoto(options, callback);\n break;\n case 'swatch':\n api.addSwatch(options, callback);\n break;\n case 'visualization':\n api.addVisualization(options, callback);\n break;\n default:\n break;\n }\n } else {\n launchLoginModal({\n type,\n callbacks: {\n onLoginSuccess: () => {\n switch (type) {\n case 'location':\n api.addDealer(options, callback);\n break;\n case 'photo':\n api.addPhoto(options, callback);\n break;\n case 'swatch':\n api.addSwatch(options, callback);\n break;\n case 'visualization':\n api.addVisualization(options, callback);\n break;\n default:\n break;\n }\n },\n onLoginFail: () => {\n // console.log('storage-actions.js, onLoginFail');\n // Fix for not having to have FQ check for success param\n if (callback && type !== 'visualization') {\n callback({\n success: false,\n });\n }\n },\n },\n });\n }\n};\n\nconst removeItemFromAccount = (type, id, callback) => {\n api.removeItemByType(type, id, callback);\n};\n\nconst getItemsFromAccount = (type, callback) => {\n api.getItemsByType(type, callback);\n};\n\nexport {\n getPhotoAccountIdFromWidenId,\n getItemsFromAccount,\n removeItemFromAccount,\n saveItemToAccount,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console, import/prefer-default-export */\nimport { hasAssets } from './account-api';\n\nconst updateIconCss = (status) => {\n const icon = document.querySelector('.topbar-section .my-account-item');\n const visibleClass = 'items-added-to-swatchbook';\n\n if (!status) {\n icon.classList.remove(visibleClass);\n } else {\n icon.classList.add(visibleClass);\n }\n};\n\nconst updateAccountIconStatus = () => {\n if (!window.isAuthenticated) {\n return;\n }\n hasAssets((data) => {\n if (data['has-assets']) {\n updateIconCss(true);\n } else {\n updateIconCss(false);\n }\n });\n};\n\nexport {\n updateAccountIconStatus,\n};\n/* eslint-enable no-console, import/prefer-default-export */\n","/* eslint-disable no-console */\nconst statusMsgs = document.querySelectorAll('.form-status-message');\n\nconst hideMessage = () => {\n for (let i = 0; i < statusMsgs.length; i++) { /* eslint-disable-line no-plusplus */\n statusMsgs[i].classList.add('hidden');\n statusMsgs[i].classList.remove('infobox-fade');\n }\n};\n\nconst showMessage = () => {\n for (let i = 0; i < statusMsgs.length; i++) { /* eslint-disable-line no-plusplus */\n statusMsgs[i].classList.remove('hidden');\n statusMsgs[i].classList.add('infobox-fade');\n }\n setTimeout(() => {\n hideMessage();\n }, 4000);\n};\n\nconst setMessage = (msg) => {\n for (let i = 0; i < statusMsgs.length; i++) { /* eslint-disable-line no-plusplus */\n statusMsgs[i].innerHTML = msg;\n }\n};\n\nexport {\n hideMessage,\n setMessage,\n showMessage,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\n\nconst resetMobileNav = () => {\n if (document.querySelector('.mobile-nav .plus-minus')) {\n [].map.call(document.querySelectorAll('.mobile-nav .plus-minus'), (item) => {\n item.classList.remove('minus');\n });\n }\n if (document.querySelector('.show-items')) {\n [].map.call(document.querySelectorAll('.show-items'), (item) => {\n item.classList.remove('show-items');\n const subnav = item.querySelector('.mobile-subnav');\n subnav.classList.add('hidden');\n });\n }\n};\n\nconst init = () => {\n if (document.querySelector('.mobile-nav .plus-minus')) {\n [].map.call(document.querySelectorAll('.mobile-nav .plus-minus'), elem => elem.addEventListener('click', (event) => {\n event.preventDefault();\n if (event.currentTarget.parentElement.nextElementSibling && !event.currentTarget.parentElement.nextElementSibling.classList.contains('hidden') && event.currentTarget.classList.contains('minus')) {\n event.currentTarget.parentElement.nextElementSibling.classList.add('hidden');\n event.currentTarget.classList.remove('minus');\n event.currentTarget.parentElement.parentElement.classList.remove('show-items');\n } else {\n [].map.call(document.querySelectorAll('.mobile-nav .plus-minus'), (item) => {\n if (!item.parentElement.nextElementSibling.classList.contains('hidden')) {\n item.parentElement.nextElementSibling.classList.add('hidden');\n item.parentElement.parentElement.classList.remove('show-items');\n }\n if (item.classList.contains('minus')) {\n item.classList.remove('minus');\n }\n });\n event.currentTarget.parentElement.parentElement.classList.add('show-items');\n event.currentTarget.parentElement.nextElementSibling.classList.remove('hidden');\n event.currentTarget.classList.add('minus');\n }\n }));\n }\n};\n\nexport {\n init,\n resetMobileNav,\n};\n/* eslint-enable no-console */\n","import * as CreateAccount from './modules/consumer-account/create-account';\nimport * as ForgotPassword from './modules/consumer-account/forgot-password';\nimport * as FormValidationUtils from './utils/form-validation-utils';\nimport * as LeadForm from './modules/signup-form';\nimport * as Login from './modules/consumer-account/login';\nimport * as ManageAccount from './modules/consumer-account/manage-account';\nimport * as MobileNavMenus from './modules/mobile-nav-menus';\nimport * as StorageActions from './modules/consumer-account/storage-actions';\nimport * as SwatchbookUtils from './modules/swatchbook-utils';\nimport * as VideoHandler from './modules/videohandler';\n\nimport {\n dispatchSiteEvent,\n initSiteEvents,\n} from './events/site-events';\n// Consumer Account includes\nimport {\n getDigitalUserId,\n getLoggedInStatus,\n getUserId,\n} from './modules/consumer-account/authentication';\n\nimport ContentToggle from './modules/content-toggle';\nimport DesktopNavMenus from './modules/desktop-nav-menus';\nimport ExpandedPromo from './modules/expanded-promo';\nimport FilterMenus from './modules/filter-menus';\nimport GalleryModal from './modules/gallery-modal';\nimport GenesysMessengerUtils from './utils/genesys-messenger-utils';\nimport Glide from './vendors/glide.min';\nimport GridBuilder from './modules/grid-builder';\nimport GridSliders from './modules/grid-sliders';\nimport HeroSlider from './modules/hero-slider';\nimport ImageComparisonSlider from './modules/image-comparison-slider';\nimport InPageNav from './modules/in-page-nav';\nimport Lazyload from './modules/lazyload';\nimport MiniGallery from './modules/mini-gallery';\nimport MobileNavNew from './modules/mobile-nav-new';\nimport MobileSearch from './modules/mobile-search';\nimport NEWDesktopNavMenus from './modules/NEW-desktop-nav-menus';\nimport ScrollNav from './modules/scroll-nav';\nimport SiteModal from './modules/gallery/site-modal';\nimport SlideInNav from './modules/slide-in-nav';\nimport StickySidebar from './modules/sticky-sidebar';\nimport SwatchCartIndicator from './modules/swatch-cart-indicator';\nimport TabRole from './modules/accessibility/tab-role';\nimport Tabnav from './modules/tabnav';\nimport Tabs from './modules/tabs';\nimport ThumbnailGallery from './modules/thumbnail-gallery';\nimport _ from 'underscore';\nimport { addTooltipsOnPageLoad } from './modules/tooltips';\nimport videoModal from './modules/video-modal';\n\nwindow.dispatchSiteEvent = dispatchSiteEvent;\nwindow.getDigitalUserId = getDigitalUserId;\nwindow.isAuthenticated = getLoggedInStatus();\nwindow.useLocalStorage = false;\nwindow.userId = getUserId();\nwindow.micrositeName = 'baliblinds';\nwindow.Glide = Glide;\nwindow.SiteModal = SiteModal;\nwindow.SwatchbookUtils = SwatchbookUtils;\nwindow.SwatchbookUtils.init();\nwindow.VideoHandler = VideoHandler;\nwindow.LeadForm = LeadForm;\n// Account methods\nwindow.Login = Login;\nwindow.Login.init();\nwindow.FormValidationUtils = FormValidationUtils;\nwindow.StorageActions = StorageActions;\nwindow.ForgotPassword = ForgotPassword;\n\nif (document.querySelector('.manage-acct-content') !== null) {\n ManageAccount.init();\n}\n// Create Account, Modal\nif (document.querySelector('.modal-acct-create-form') !== null) {\n CreateAccount.init({\n form: document.querySelector('.modal-acct-create-form'),\n disableScroll: true,\n });\n}\n// Create Account, In-Page\nif (document.querySelector('.acct-create-form') !== null) {\n CreateAccount.init({\n form: document.querySelector('.acct-create-form'),\n disableScroll: false,\n });\n}\n\n// Includes\naddTooltipsOnPageLoad();\nContentToggle();\nExpandedPromo();\nFilterMenus();\nGenesysMessengerUtils();\nGridSliders();\ninitSiteEvents();\nInPageNav();\nLazyload();\nMiniGallery();\nSwatchCartIndicator();\nTabnav();\n\n// Sliders\nHeroSlider.init();\n\n// Accessibility\nTabRole();\n\n// Image Comparison Slider - Easytouch landing page\nImageComparisonSlider.initComparisons();\n\n// Header Scolling Animations\nif (document.querySelector('.header')) {\n ScrollNav.scrollingNav('body', 'scrolled');\n ScrollNav.scrollingNav('.header', 'scrolled');\n ScrollNav.scrollingNav('.content', 'scrolled');\n}\n\n// Nav Menu Interactivity\nif (document.querySelector('.header')) {\n if (document.querySelector('.colored-nav')) {\n NEWDesktopNavMenus();\n } else {\n DesktopNavMenus.init({\n defaultSelected: '.nav--default-selected',\n header: '.header',\n mainMenuItem: '.nav-list-item',\n mainSubnav: '.nav-secondary',\n menuSelectors: '.header .nav--menu-item',\n menus: '.header .main-nav .get-started-list-item, .header .main-nav .products-list-item, .header .main-nav .dropdown-list-item',\n menuImageSelector: '.nav-image .img-wrap',\n navToggle: 'nav--active',\n subnavToggle: 'hidden',\n });\n MobileNavMenus.init({});\n }\n}\n\n// Mobile Nav Interactivity\nif (document.querySelector('.mobile-section')) {\n if (document.querySelector('.colored-nav')) {\n MobileNavNew();\n } else {\n SlideInNav.init({\n activator: '#slide-nav',\n breakpoint: 992,\n notActive: '.mobile-nav',\n selector: '.mobile-section',\n toggle: '.slide-in',\n });\n }\n}\n\n// Sticky Sidebar\nif (document.querySelector('.sticky-sidebar')) {\n StickySidebar.init({\n stickyToggle: 'fixed',\n footerSelector: '.footer',\n headerSelector: '.header',\n selector: '.sticky-sidebar',\n });\n}\n\n// Search dropdown for mobile\nif (document.querySelector('#header-search')) {\n MobileSearch.init({\n activator: '.search-icon',\n searchMenu: '#header-search',\n menuToggle: 'show-search',\n });\n}\n\n// Collapsed panels Microsite Productline page\nif (document.querySelector('#productDropdown')) {\n $('#productDropdown').click(() => {\n $('#productDropdownList').toggle();\n });\n}\n\nif (document.querySelector('#features-expand')) {\n $('#features-expand').click(() => {\n $('.features-and-benefits .row-collapse').toggleClass('show');\n $('#features-plus-minus').toggleClass('minus');\n });\n}\n\nif (document.querySelector('#product-style-expand')) {\n $('.product-styles-content .row-collapse').toggleClass('show');\n $('#product-plus-minus').toggleClass('minus');\n $('#product-style-expand').click(() => {\n $('.product-styles-container.row-collapse').toggleClass('show');\n $('#product-plus-minus').toggleClass('minus');\n });\n}\n\nif (document.querySelector('#related-products-expand')) {\n $('#related-products-expand').click(() => {\n $('.related-products-container.row-collapse').toggleClass('show');\n $('#related-plus-minus').toggleClass('minus');\n });\n}\n\n// Glide (Simple Sliders)\nif (document.querySelectorAll('.simple-slider').length > 0) {\n [].map.call(document.querySelectorAll('.simple-slider'), (slider) => {\n // Set autoplay from global param, then check to see if local setting was passed\n let autoplay = window.autoplayInterval;\n if (!autoplay) {\n autoplay = 0;\n }\n if (slider.getAttribute('data-glide-autoplay')) {\n autoplay = parseInt(slider.getAttribute('data-glide-autoplay'), 10);\n }\n // Is there more than 1 slide\n if (slider.querySelectorAll('.glide__slide').length > 1) {\n // Add glide\n const glide = new Glide(slider, {\n type: 'carousel',\n startAt: 0,\n perView: 1,\n focusAt: 'center',\n gap: 0,\n autoplay,\n hoverpause: true,\n breakpoints: {},\n });\n\n glide.mount();\n }\n });\n}\n\n// Glide Horizontal Slider Container\n// Motorization Redesign 5/25/2021 - jg\nif (document.querySelectorAll('.horizontal-slider-container').length > 0) {\n [].map.call(document.querySelectorAll('.horizontal-slider-container'), (slider) => {\n // Set autoplay from global param, then check to see if local setting was passed\n let autoplay = window.autoplayInterval;\n if (!autoplay) {\n autoplay = 0;\n }\n if (slider.getAttribute('data-glide-autoplay')) {\n autoplay = parseInt(slider.getAttribute('data-glide-autoplay'), 10);\n }\n // Is there more than 1 slide\n if (slider.querySelectorAll('.glide__slide').length > 1) {\n // Add glide\n const glide = new Glide(slider, {\n type: 'carousel',\n startAt: 0,\n perView: 4,\n focusAt: 0,\n gap: 20,\n autoplay,\n hoverpause: true,\n breakpoints: {\n 480: {\n perView: 1,\n },\n 1100: {\n perView: 2,\n gap: 10,\n },\n },\n });\n glide.mount();\n }\n });\n}\n\n// need to select the card and listen to the click on the btn. On click, should add .is-flipped to the card\nif (document.querySelectorAll('.card-container--inner .flip-card').length > 0) {\n [].map.call(document.querySelectorAll('.flip-card'), (flipCard) => {\n const btn = flipCard.querySelector('.btn');\n const close = flipCard.querySelector('.close-button');\n if (btn) {\n btn.addEventListener('click', () => {\n flipCard.classList.toggle('is-flipped');\n });\n }\n if (close) {\n close.addEventListener('click', () => {\n // checks to make sure the card if actually flipped\n if (flipCard.classList.contains('is-flipped')) {\n // removes is-flipped\n flipCard.classList.toggle('is-flipped');\n }\n });\n }\n });\n}\n\n// Interactions on product Solutions Gallery - Motorization page 6/6/21 -jg\nif (document.querySelectorAll('.product-solutions-gallery').length > 0) {\n [].map.call(document.querySelectorAll('.grid-item'), (gridItem) => {\n const modal = gridItem.nextElementSibling;\n // console.log(modal);\n const closeBtn = modal.querySelector('.close-button');\n const backBtn = modal.querySelector('.back-btn');\n\n gridItem.addEventListener('click', () => {\n if (modal.classList.contains('modal-hidden')) {\n modal.classList.toggle('modal-hidden');\n }\n });\n\n closeBtn.addEventListener('click', () => {\n modal.classList.toggle('modal-hidden');\n });\n\n backBtn.addEventListener('click', () => {\n modal.classList.toggle('modal-hidden');\n });\n\n document.addEventListener('keydown', (e) => {\n if (!modal.classList.contains('modal-hidden') && e.key === 'Escape') {\n modal.classList.toggle('modal-hidden');\n }\n });\n });\n}\n\n// Tabs\nif (document.querySelector('.tab')) {\n Tabs();\n}\n\n// Product Options Help Popup\nif (document.querySelector('.help-popup') && !document.querySelector('.product-configuration')) {\n const helpPopupButtons = document.querySelectorAll('.help-popup-button');\n const helpPopups = document.querySelectorAll('.help-popup');\n\n document.addEventListener('click', () => {\n [].map.call(helpPopups, item => item.classList.add('hide'));\n VideoHandler.pauseAllVideos();\n });\n\n [].map.call(helpPopups, item => item.addEventListener('click', event => event.stopPropagation()));\n\n [].map.call(helpPopupButtons, item => item.addEventListener('click', (event) => {\n event.stopPropagation();\n if (event.currentTarget.nextElementSibling.classList.contains('hide')) {\n [].map.call(helpPopups, popup => popup.classList.add('hide'));\n event.currentTarget.nextElementSibling.classList.remove('hide');\n } else {\n [].map.call(helpPopups, popup => popup.classList.add('hide'));\n }\n }));\n\n [].map.call(document.querySelectorAll('.help-close-button'), (item) => {\n item.addEventListener('click', (event) => {\n event.stopPropagation();\n event.currentTarget.parentElement.classList.add('hide');\n VideoHandler.pauseAllVideos();\n });\n });\n}\n\nif (document.getElementById('hide-button')) {\n const hideButton = document.getElementById('hide-button');\n hideButton.addEventListener('click', () => {\n hideButton.parentElement.classList.add('hide');\n });\n}\n\n// Remove poster image and play video when play button is pressed\nif (document.querySelector('.video-modal')) {\n console.log('video modals found');\n const videoTemplate =\n `
\n
\n \n
\n
\n
\n {{ videoIframe }}\n
\n
\n
\n
\n
`;\n GalleryModal.init({\n videoTemplate,\n galleryModalSelector: '.video-modal',\n });\n} else if (document.querySelector('.video-embed')) {\n VideoHandler.init();\n\n // Stop help videos in product style pages\n if (document.querySelector('.help-close-button')) {\n [].map.call(document.querySelectorAll('.help-close-button'), item => item.addEventListener('click', () => VideoHandler.pauseAllVideos()));\n }\n}\n\n// Carousel Thumbnail Controls\nif (document.querySelector('.thumbnail-container')) {\n ThumbnailGallery.setupGallery();\n}\n\n// Mailchimp Form\nconst template = _.template(`
\n
\n
\n
\n
\n

Let's stay in touch!

\n

Sign up to receive the latest Bali® deals, inspiration, and news in your email.
Don't worry—you can unsubscribe anytime.

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n Please enter a valid email address\n
\n \n
\n
\n
\n

Thanks for signing up!

\n

Get ready for the best in Bali deals, inspiration, and news. Check your inbox for a confirmation email.

\n
\n
\n

Oops! We're sorry.

\n

Something went wrong—Please try again later.

\n
\n
\n
\n
`);\n\nwindow.LeadFormTemplate = template;\n\nif (document.querySelectorAll('.content-link')) {\n [].map.call(document.querySelectorAll('.content-link'), link => link.addEventListener('click', (event) => {\n event.preventDefault();\n const elem = document.getElementById(event.currentTarget.getAttribute('href').replace('#', ''));\n window.scrollTo(0, ((elem.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop)) - 156));\n }));\n}\n\n// Grid Overlay for dev\nGridBuilder.init();\n\n// How to Order Modal and button Welcome Landing Page\nif (document.querySelectorAll('.how-to-order-modal').length > 0) {\n [].map.call(document.querySelectorAll('.how-to-order-btn'), (btn) => {\n const modal = btn.nextElementSibling;\n const closeBtn = modal.querySelector('.close-button');\n\n btn.addEventListener('click', () => {\n if (modal.classList.contains('modal-hidden')) {\n modal.classList.toggle('modal-hidden');\n }\n });\n\n closeBtn.addEventListener('click', () => {\n modal.classList.toggle('modal-hidden');\n });\n\n document.addEventListener('keydown', (e) => {\n if (!modal.classList.contains('modal-hidden') && e.key === 'Escape') {\n modal.classList.toggle('modal-hidden');\n }\n });\n });\n}\n\n// Add nofollow rel to Troubleshooting docs\nconst troubleshootingPage = document.querySelector('.troubleshooting-product-page');\n\nif (troubleshootingPage) {\n const docs = document.querySelectorAll('.troubleshooting-list .document-link');\n docs.forEach(doc => doc.setAttribute('rel', 'nofollow noopener'));\n}\n\nif (document.querySelector('.documents-dropdown')) {\n videoModal();\n}\n\n// Offset main-content if mobile-top-banner-area is place by adding\n// a class of .has-mobile-top-banner to .fixed-nav-offset\nconst fixedNavOffset = document.querySelector('.fixed-nav-offset');\nconst mobileTopBanner = document.querySelector('.mobile-top-banner-area');\nif (fixedNavOffset && mobileTopBanner) {\n fixedNavOffset.classList.add('has-mobile-top-banner');\n}\n","const getParameterByName = (name, url) => {\n let location = url;\n if (!location) {\n location = window.location.href;\n }\n const regex = new RegExp(`[?&]${name.replace(/[\\[\\]]/g, '\\\\$&')}(=([^&#]*)|&|#|$)`);\n const results = regex.exec(location);\n if (!results) {\n return null;\n }\n if (!results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nconst getUrlSafeHash = str => (\n str.toLowerCase().replace(/[\\s|\\/]+/g, '-').replace(/\\&/g, 'and').replace(/[^a-zA-Z0-9-]+/g, '')\n);\n\nexport {\n getParameterByName,\n getUrlSafeHash,\n};\n","/* eslint-disable no-console */\nimport { clearInputValues, removeAllErrors } from '../../utils/form-validation-utils';\n\nlet previousElementInFocus = null;\n\nconst getPreviousElementInFocus = () => (\n previousElementInFocus\n);\n\nconst setPreviousElementInFocus = (element) => {\n previousElementInFocus = element;\n};\n\nconst resetFocus = () => {\n if (getPreviousElementInFocus()) {\n getPreviousElementInFocus().focus();\n }\n};\n\nconst onDocumentModalKeyUp = (event, modal) => {\n if (event.keyCode === 27) {\n closeAccountModal(modal); /* eslint-disable-line no-use-before-define */\n }\n};\n\nconst closeAccountModal = (modal) => {\n // Clear any form values, input errors, error messages\n const form = modal.querySelector('.acct-login-modal-form');\n clearInputValues(form);\n removeAllErrors(form);\n form.querySelector('.form-error-message').classList.add('hide');\n // Remove active classes\n modal.classList.remove('modal-visible');\n modal.removeAttribute('style');\n const closeBtn = modal.querySelector('#close-btn');\n const overlay = document.querySelector('#modal-overlay');\n overlay.classList.remove('modal-visible');\n // Remove event listeners\n closeBtn.removeEventListener('click', closeAccountModal);\n overlay.removeEventListener('click', closeAccountModal);\n document.removeEventListener('keyup', onDocumentModalKeyUp);\n // Focus\n resetFocus();\n};\n\nconst openAccountModal = (modal) => {\n if (!modal) {\n return;\n }\n // Check if overlay bg exists\n let overlay = document.querySelector('#modal-overlay');\n if (!overlay) {\n const body = document.getElementsByTagName('body')[0];\n overlay = document.createElement('div');\n body.appendChild(overlay);\n overlay.setAttribute('id', 'modal-overlay');\n overlay.classList.add('c-modalOverlay');\n }\n overlay.style.zIndex = '9998';\n // Add active classes\n modal.classList.add('modal-visible');\n overlay.classList.add('modal-visible');\n const closeBtn = modal.querySelector('#close-btn');\n // Focus\n setPreviousElementInFocus(document.activeElement);\n overlay.focus();\n console.log(document.activeElement);\n // Add events\n closeBtn.addEventListener('click', () => closeAccountModal(modal));\n overlay.addEventListener('click', () => closeAccountModal(modal));\n document.addEventListener('keyup', event => onDocumentModalKeyUp(event, modal));\n};\n\nexport {\n openAccountModal,\n closeAccountModal,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console, import/prefer-default-export */\nimport { forgotPassword } from './account-api';\n\nconst submitForm = (data, callbacks) => {\n forgotPassword(data, callbacks);\n};\n\nexport {\n submitForm,\n};\n/* eslint-enable no-console, import/prefer-default-export */\n","// Lead Form - Mailchimp\nexport function setCookie(cname, cvalue, exdays) {\n const d = new Date();\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\n const expires = `expires=${d.toUTCString()}`;\n document.cookie = `${cname}=${cvalue};${expires};path=/`;\n}\n\nexport function getCookie(cname) {\n const name = `${cname}=`;\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i += 1) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n}\n\nexport const runForm = (template, delay = 6) => {\n const compiled = template();\n const d = document.createElement('div');\n d.innerHTML = compiled;\n document.body.appendChild(d.firstChild);\n\n const signUpFormContainerElem = document.getElementById('signup-form-container');\n const closeFormElem = document.getElementById('close-form');\n const signUpFormWrapperElem = document.getElementById('signup-form-wrapper');\n const submit = document.getElementById('submit-form');\n const signUpForm = document.getElementById('signup-form');\n const signUpResponse = document.getElementById('signup-response');\n\n setTimeout(() => (signUpFormContainerElem.classList.remove('hide')), (delay * 1000));\n\n signUpFormContainerElem.addEventListener('click', (event) => {\n event.stopPropagation();\n event.currentTarget.classList.add('hide');\n setCookie('signUpFormSession', true);\n }, false);\n\n closeFormElem.addEventListener('click', (event) => {\n event.stopPropagation();\n event.currentTarget.parentElement.parentElement.classList.add('hide');\n setCookie('signUpFormSession', true);\n }, false);\n\n signUpFormWrapperElem.addEventListener('click', event => (event.stopPropagation()), false);\n\n submit.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n const data = {\n EmailAddress: document.getElementById('email-address').value,\n FirstName: document.getElementById('first-name').value,\n LastName: document.getElementById('last-name').value,\n };\n\n const headers = new Headers({ 'Content-Type': 'application/json' });\n fetch('/api/signupform/signup', { method: 'POST', headers, body: JSON.stringify(data) })\n .then((response) => {\n if (response.ok) {\n return response.json();\n }\n throw new Error({ status: 'error', message: 'There was an error. Please try again later.' });\n })\n .then((json) => {\n if (json.status === 'success') {\n document.querySelector('.email-validation-error').classList.add('hide');\n signUpForm.classList.add('hide');\n signUpResponse.classList.remove('hide');\n signUpResponse.firstElementChild.classList.remove('hide');\n setCookie('BaliListMember', true, 180);\n setTimeout(() => (document.body.removeChild(signUpFormContainerElem)), 5000);\n } else if (json.status === 'validation error') {\n document.querySelector('.email-validation-error').classList.remove('hide');\n } else {\n throw new Error(json);\n }\n })\n .catch(() => {\n signUpForm.classList.add('hide');\n signUpResponse.classList.remove('hide');\n signUpResponse.lastElementChild.classList.remove('hide');\n setCookie('signUpFormSession', true);\n setTimeout(() => (document.body.removeChild(signUpFormContainerElem)), 5000);\n });\n }, false);\n};\n","/* eslint-disable no-console, import/prefer-default-export */\nimport * as changePassword from './change-password';\nimport * as statusMessages from './status-messages';\nimport { updateAccount } from './account-api';\nimport { validate, positionWindowAtFormElement, formatPhone } from '../../utils/form-validation-utils';\n\nconst init = () => {\n const changePasswordBtn = document.querySelector('.btn--change-password');\n const changePasswordDiv = document.querySelector('.change-your-password');\n const changePasswordCancelBtn = document.querySelector('.btn--cancel-change-password');\n const form = document.querySelector('.acct-manage-form');\n const submitBtn = form.querySelector('.o-form__submit');\n const errorMsg = document.querySelector('.acct-manage-form-error-message');\n // const statusMsgs = document.querySelectorAll('.form-status-message');\n\n // Format phone number\n document.getElementById('PhoneNumber').value = formatPhone(document.getElementById('PhoneNumber').value);\n\n changePasswordBtn.addEventListener('click', () => {\n changePasswordDiv.classList.remove('hide');\n changePassword.showChangePasswordModule();\n });\n\n changePasswordCancelBtn.addEventListener('click', () => {\n changePassword.hideChangePasswordModule();\n changePasswordDiv.classList.add('hide');\n });\n\n submitBtn.addEventListener('click', (event) => {\n event.preventDefault();\n if (validate(form)) {\n errorMsg.classList.add('hide');\n updateAccount(\n {\n 'user-id': window.userId,\n 'first-name': document.getElementById('FirstName').value,\n 'last-name': document.getElementById('LastName').value,\n address: document.getElementById('Address').value,\n address2: document.getElementById('Address2').value,\n city: document.getElementById('City').value,\n 'state-or-province': document.getElementById('StateOrProvince').value,\n 'postal-code': document.getElementById('PostalCode').value,\n country: document.getElementById('Country').value,\n 'phone-number': formatPhone(document.getElementById('PhoneNumber').value),\n },\n {\n onSuccess: () => {\n statusMessages.setMessage('
Your account has been updated.
');\n statusMessages.showMessage();\n },\n onError: () => {\n errorMsg.classList.remove('hide');\n positionWindowAtFormElement({\n element: errorMsg,\n offset: -233,\n });\n },\n },\n );\n } else {\n positionWindowAtFormElement({\n element: form.querySelectorAll('.ValidationFail')[0],\n offset: -75,\n });\n }\n });\n changePassword.init();\n};\n\n// const showStatusMessage = () => {\n// for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n// inputList[i].removeAttribute('required')\n// }\n// };\n\n// const hideStatusMessage = () => {\n// for (let i = 0; i < inputList.length; i++) { /* eslint-disable-line no-plusplus */\n// inputList[i].removeAttribute('required');\n// }\n// };\n\nexport {\n init,\n};\n/* eslint-enable no-console, import/prefer-default-export */\n","/* eslint-disable no-console */\nimport * as statusMessages from './status-messages';\nimport { updatePassword } from './account-api';\nimport {\n addRequiredAttrs,\n clearInputValues,\n positionWindowAtFormElement,\n removeAllErrors,\n removeRequiredAttrs,\n validate,\n} from '../../utils/form-validation-utils';\n\nconst currentPassIpt = document.getElementById('acctPassword');\nconst newPassIpt = document.getElementById('newAcctPassword');\nconst newPassConfirmIpt = document.getElementById('newAcctPasswordConfirm');\n\nconst newPasswordMatch = () => {\n if (newPassIpt.value === newPassConfirmIpt.value) {\n return true;\n }\n return false;\n};\n\nconst init = () => {\n const form = document.querySelector('.acct-password-form');\n const submitBtn = form.querySelector('.o-form__submit');\n const errorMsg = form.querySelector('.validation-error-message');\n const serverErrorMsg = form.querySelector('.server-error-message');\n\n submitBtn.addEventListener('click', (event) => {\n event.preventDefault();\n newPassIpt.parentNode.classList.remove('ValidationFail');\n newPassConfirmIpt.parentNode.classList.remove('ValidationFail');\n errorMsg.classList.add('hide');\n serverErrorMsg.classList.add('hide');\n serverErrorMsg.innerHTML = '';\n if (validate(form) && newPasswordMatch()) {\n updatePassword(\n {\n 'user-id': window.userId,\n password: newPassIpt.value,\n 'current-password': currentPassIpt.value,\n },\n {\n onSuccess: (data) => {\n if (data.success) {\n statusMessages.setMessage('
Your account has been updated.
');\n statusMessages.showMessage();\n } else {\n serverErrorMsg.classList.remove('hide');\n serverErrorMsg.innerHTML = `

${data['friendly-error-message']}

`;\n }\n },\n onError: () => {\n errorMsg.classList.remove('hide');\n },\n },\n );\n } else if (!newPasswordMatch()) {\n newPassIpt.parentNode.classList.add('ValidationFail');\n newPassConfirmIpt.parentNode.classList.add('ValidationFail');\n errorMsg.classList.remove('hide');\n positionWindowAtFormElement({\n element: form.querySelectorAll('.ValidationFail')[0],\n offset: -233,\n });\n } else {\n positionWindowAtFormElement({\n element: form.querySelectorAll('.ValidationFail')[0],\n offset: -233,\n });\n }\n });\n};\n\nconst showChangePasswordModule = () => {\n const form = document.querySelector('.acct-password-form');\n addRequiredAttrs(form);\n form.querySelector('.form-error-message').classList.add('hide');\n};\n\nconst hideChangePasswordModule = () => {\n const form = document.querySelector('.acct-password-form');\n clearInputValues(form);\n removeRequiredAttrs(form);\n removeAllErrors(form);\n};\n\nexport {\n hideChangePasswordModule,\n init,\n showChangePasswordModule,\n};\n/* eslint-enable no-console */\n","// Video Handler\n\nimport _ from 'underscore';\n\n_.templateSettings = {\n interpolate: /\\{\\{(.+?)\\}\\}/g,\n};\n\nconst videoTemplate = _.template(`\n \n `);\n\nconst playVideo = element => element.contentWindow.postMessage('{\"event\": \"command\", \"func\": \"playVideo\", \"args\": \"\"}', '*');\n\nconst pauseVideo = element => element.contentWindow.postMessage('{\"event\": \"command\", \"func\": \"pauseVideo\", \"args\": \"\"}', '*');\n\nconst stopVideo = element => element.contentWindow.postMessage('{\"event\": \"command\", \"func\": \"stopVideo\", \"args\": \"\"}', '*');\n\nconst pauseAllVideos = () => Array.prototype.map.call(document.querySelectorAll('.iframe-wrapper iframe'), playing => pauseVideo(playing));\n\nconst stopAllVideos = () => Array.prototype.map.call(document.querySelectorAll('.iframe-wrapper iframe'), playing => stopVideo(playing));\n\nconst iframeClickHandler = () => {\n Array.prototype.map.call(document.querySelectorAll('.iframe-wrapper'), (wrapper) => {\n const iframe = wrapper.firstElementChild;\n const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;\n iframeDocument.addEventListener('click', () => {\n if (wrapper.firstElementChild.classList.contains('playing')) {\n playVideo(wrapper.firstElementChild);\n } else {\n pauseVideo(wrapper.firstElementChild);\n }\n });\n });\n};\n\nconst addIframe = (event) => {\n pauseAllVideos();\n const videoWrapper = event.currentTarget;\n const templateProps = {\n videoId: '',\n videoIframeSrc: '',\n };\n templateProps.videoId = videoWrapper.id.slice(6);\n templateProps.videoIframeSrc = `https://www.youtube.com/embed/${templateProps.videoId}?rel=0&autoplay=1&enablejsapi=1`;\n const compiled = videoTemplate(templateProps);\n const d = document.createElement('div');\n d.innerHTML = compiled;\n videoWrapper.appendChild(d.firstChild);\n videoWrapper.lastElementChild.firstElementChild.id = templateProps.videoId;\n videoWrapper.lastElementChild.firstElementChild.classList.add('playing');\n iframeClickHandler();\n};\n\nconst init = () => {\n Array.prototype.map.call(document.querySelectorAll('.video-wrapper'), video => video.addEventListener('click', addIframe, false));\n // Set focus to video, should still trigger event in addition to thumbnail gallery event, which i don't want to mess with - jm (11/23/2020)\n Array.prototype.map.call(document.querySelectorAll('.video-thumbnail-list .thumbnail-item'), (listItem) => {\n listItem.addEventListener('click', () => {\n // Delay, before setting focus to new active element\n setTimeout(() => {\n // console.log('set focus after delay...');\n document.querySelector('.carousel-item.active button').focus();\n }, 1000);\n });\n });\n};\n\nexport {\n addIframe,\n init,\n playVideo,\n pauseVideo,\n stopVideo,\n pauseAllVideos,\n stopAllVideos,\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","const setCookieValue = (userId) => {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n const expiryDate = new Date(year + 1, month, day);\n document.cookie = `UserCookie=id=${userId}; expires=${expiryDate.toUTCString()};path=/; httponly; secure`;\n};\nconst getCookieValue = () => {\n const cookies = document.cookie.toString().split(';');\n let cookie;\n let arr = [];\n for (let i = 0; i < cookies.length; i++) { /* eslint-disable-line no-plusplus */\n cookie = cookies[i].toString().match(new RegExp('UserCookie', 'gi'));\n if (cookie !== null) {\n arr = cookies[i].split('=');\n return arr[2];\n }\n }\n return '';\n};\n\nconst getLoggedInStatus = () => {\n if (getCookieValue() !== '') {\n return true;\n }\n return false;\n};\n\nconst getUserId = () => (\n parseInt(getCookieValue(), 10)\n);\n\n// Retrieve digital user id for use in Usabilla survey\nconst getDigitalUserId = () => {\n const { sessionStorage, userId } = window;\n const digitalUserStr = sessionStorage.getItem('bali_userId');\n let digitalUserId = userId;\n if (digitalUserStr) {\n digitalUserId = JSON.parse(digitalUserStr).userId;\n }\n if (isNaN(digitalUserId)) { /* eslint-disable-line no-restricted-globals */\n digitalUserId = '';\n }\n return digitalUserId;\n};\n\nexport {\n getDigitalUserId,\n getLoggedInStatus,\n getUserId,\n setCookieValue,\n};\n","/* eslint-disable no-console */\nconst getContentHeight = (content) => {\n const innerDiv = content.querySelector('div:first-child');\n const height = innerDiv.offsetHeight;\n const paddingBottom = parseInt(window.getComputedStyle(innerDiv).paddingBottom, 10);\n return `${height - paddingBottom}px`;\n};\n\nconst contentToggle = () => {\n const toggleContent = (btn) => {\n const ariaControls = btn.getAttribute('aria-controls');\n const ariaExpanded = btn.getAttribute('aria-expanded');\n const closedLabel = btn.getAttribute('data-closedlabel');\n const content = document.getElementById(ariaControls);\n const openLabel = btn.getAttribute('data-openlabel');\n\n if (ariaExpanded === 'false') {\n btn.setAttribute('aria-expanded', 'true');\n if (openLabel) {\n btn.innerHTML = openLabel;\n }\n content.classList.add('expand-content');\n content.style.height = getContentHeight(content);\n } else {\n btn.setAttribute('aria-expanded', 'false');\n if (closedLabel) {\n btn.innerHTML = closedLabel;\n }\n content.classList.remove('expand-content');\n content.removeAttribute('style');\n }\n };\n\n const contentToggleBtns = document.querySelectorAll('.content-toggle-btn');\n [].map.call(contentToggleBtns, btn => btn.addEventListener('click', () => {\n toggleContent(btn);\n }));\n};\n\nexport default contentToggle;\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nconst toggleSubnav = (selector, navToggle, menuToggle) => {\n if (selector === null) {\n return;\n }\n // Add hover state to selector\n selector.classList.toggle(navToggle);\n const subnav = selector.getAttribute('data-subnav');\n if (subnav === null || subnav === '') {\n return;\n }\n const menu = document.querySelector(subnav);\n if (menu !== null) {\n menu.classList.toggle(menuToggle);\n }\n};\n\nconst hideSubnav = (selector, navToggle, menuToggle) => {\n if (selector === null) {\n return;\n }\n const subnav = selector.getAttribute('data-subnav');\n if (subnav === null || subnav === '') {\n return;\n }\n const menu = document.querySelector(subnav);\n if (menu !== null) {\n menu.classList.add(menuToggle);\n }\n};\n\nconst toggleNavImage = (selector) => {\n if (selector === null) {\n return;\n }\n const navimg = selector.getAttribute('data-navimg');\n if (navimg === null || navimg === '') {\n return;\n }\n const img = document.querySelector(navimg);\n const src = selector.getAttribute('data-imgsrc');\n const label = selector.textContent;\n if (img !== null && src !== null) {\n img.src = src;\n img.alt = `Active dropdown nav item image preview for ${label}`;\n // object-fit fallback\n if ('objectFit' in document.documentElement.style === false) {\n if (img.src) {\n img.parentNode.setAttribute('style', `background-image:url(${encodeURI(img.src)});`);\n img.parentNode.classList.add('compat-object-fit');\n }\n }\n }\n};\n\nconst getButton = (element) => {\n if (element === null) {\n return null;\n }\n if (element.tagName.toLowerCase() === 'button') {\n return element;\n }\n if (element.querySelector('button') !== null) {\n return element.querySelector('button');\n }\n return null;\n};\n\nconst addListeners = (options) => {\n const {\n menuSelectors,\n navToggle,\n subnavToggle,\n } = options;\n // For accessibility\n [].map.call(document.querySelectorAll(`${menuSelectors} button`), menuItem => menuItem.addEventListener('click', () => {\n // Hide any content for \"open\" menuItems\n const navItems = menuItem.parentNode.parentNode.querySelectorAll('.nav--menu-item');\n for (let i = 0; i < navItems.length; i++) { /* eslint-disable-line no-plusplus */\n navItems[i].classList.remove(navToggle);\n hideSubnav(\n navItems[i],\n navToggle,\n subnavToggle,\n );\n }\n // Show current menuItem content\n toggleSubnav(\n menuItem.parentNode,\n navToggle,\n subnavToggle,\n );\n if (menuItem.getAttribute('aria-expanded') === 'true' && getButton()) {\n getButton().setAttribute('aria-expanded', 'false');\n } else if (menuItem.getAttribute('aria-expanded') === 'false' && getButton()) {\n getButton().setAttribute('aria-expanded', 'true');\n }\n toggleNavImage(menuItem.parentNode);\n }));\n // Add over to button wrappers\n [].map.call(document.querySelectorAll(`${menuSelectors} button`), menuItem => menuItem.parentNode.addEventListener('mouseenter', () => {\n // Hide any content for \"open\" menuItems\n const navItems = menuItem.parentNode.parentNode.querySelectorAll('.nav--menu-item');\n for (let i = 0; i < navItems.length; i++) { /* eslint-disable-line no-plusplus */\n navItems[i].classList.remove(navToggle);\n hideSubnav(\n navItems[i],\n navToggle,\n subnavToggle,\n );\n }\n // Show current menuItem content\n toggleSubnav(\n menuItem.parentNode,\n navToggle,\n subnavToggle,\n );\n // Fix for tab-role.js override\n const subnav = document.querySelector(menuItem.parentNode.getAttribute('data-subnav'));\n if (subnav) {\n subnav.parentNode.removeAttribute('hidden');\n }\n if (menuItem.getAttribute('aria-expanded') === 'true' && getButton()) {\n getButton().setAttribute('aria-expanded', 'false');\n } else if (menuItem.getAttribute('aria-expanded') === 'false' && getButton()) {\n getButton().setAttribute('aria-expanded', 'true');\n }\n toggleNavImage(menuItem.parentNode);\n }));\n [].map.call(document.querySelectorAll(`${menuSelectors} a`), menuItem => menuItem.addEventListener('mouseenter', () => {\n toggleNavImage(menuItem.parentNode);\n }));\n};\n\nconst closeAllMenus = (options) => {\n const { mainMenuItem } = options;\n const mainMenuItems = document.querySelectorAll(mainMenuItem);\n // Set default content for each menu\n for (let i = 0; i < mainMenuItems.length; i++) { /* eslint-disable-line no-plusplus */\n mainMenuItems[i].classList.remove('is-active');\n if (mainMenuItems[i].querySelector('button') !== null) {\n mainMenuItems[i].querySelector('button').setAttribute('aria-expanded', 'false');\n }\n }\n};\n\nconst init = (options) => {\n let menuCloseTimer = 0;\n const closeMenuOnBodyClick = (event) => {\n if (event.target.closest('.nav-list-item') === null) {\n closeAllMenus(options);\n document.querySelector('body').removeEventListener('click', closeMenuOnBodyClick);\n }\n };\n // Create image element in each menu\n const {\n defaultSelected,\n mainMenuItem,\n mainSubnav,\n menuImageSelector,\n menus,\n navToggle,\n subnavToggle,\n } = options;\n const imgWrappers = document.querySelectorAll(menus);\n // Set default content for each menu\n for (let i = 0; i < imgWrappers.length; i++) { /* eslint-disable-line no-plusplus */\n const img = document.createElement('IMG');\n img.scr = '';\n img.alt = '';\n imgWrappers[i].querySelector(menuImageSelector).appendChild(img);\n const defaultMenuItem = imgWrappers[i].querySelector(`${mainSubnav} ${defaultSelected}`);\n // console.log(defaultMenuItem);\n toggleNavImage(defaultMenuItem);\n toggleSubnav(\n defaultMenuItem,\n navToggle,\n subnavToggle,\n );\n }\n [].map.call(document.querySelectorAll(`${mainMenuItem} > button`), menuItem => menuItem.addEventListener('click', () => {\n if (menuItem.parentNode.classList.contains('is-active')) {\n menuItem.parentNode.classList.remove('is-active');\n menuItem.setAttribute('aria-expanded', 'false');\n document.querySelector('body').removeEventListener('click', closeMenuOnBodyClick);\n } else {\n closeAllMenus(options);\n menuItem.parentNode.classList.add('is-active');\n menuItem.setAttribute('aria-expanded', 'true');\n document.querySelector('body').addEventListener('click', closeMenuOnBodyClick);\n }\n }));\n [].map.call(document.querySelectorAll(`${mainMenuItem} > button`), menuItem => menuItem.parentNode.addEventListener('mouseenter', () => {\n clearTimeout(menuCloseTimer);\n closeAllMenus(options);\n menuItem.parentNode.classList.add('is-active');\n menuItem.setAttribute('aria-expanded', 'true');\n document.querySelector('body').addEventListener('click', closeMenuOnBodyClick);\n }));\n [].map.call(document.querySelectorAll(`${mainMenuItem} > button`), menuItem => menuItem.parentNode.addEventListener('mouseleave', () => {\n menuCloseTimer = setTimeout(() => {\n menuItem.parentNode.classList.remove('is-active');\n menuItem.setAttribute('aria-expanded', 'false');\n document.querySelector('body').removeEventListener('click', closeMenuOnBodyClick);\n }, 750);\n }));\n addListeners(options);\n};\n\nexport default {\n init,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nclass ExpandedPromo {\n constructor(options) {\n if (!options.callbacks) {\n options.callbacks = {};\n }\n this.onOpen = options.callbacks.onOpen;\n this.onClose = options.callbacks.onClose;\n this.promoDiv = document.querySelector(`#${options.id}`);\n this.isOpen = false;\n this.previousElementInFocus = null;\n // Modal events\n this.promoDiv.querySelector('.close-btn').addEventListener('click', this.close.bind(this));\n document.addEventListener('keyup', this.onDocumentModalKeyUp.bind(this));\n // Add open to toggleBtn\n if (options.toggleBtn) {\n options.toggleBtn.addEventListener('click', this.open.bind(this));\n }\n }\n\n onDocumentModalKeyUp(event) {\n if (event.keyCode === 27 && this.isOpen) {\n this.close(); /* eslint-disable-line no-use-before-define */\n }\n }\n\n setPreviousElementInFocus(element) {\n this.previousElementInFocus = element;\n }\n\n resetFocus() {\n if (this.previousElementInFocus) {\n this.previousElementInFocus.focus();\n }\n }\n\n close() {\n this.isOpen = false;\n if (this.onClose) {\n this.onClose();\n }\n this.promoDiv.classList.remove('is-expanded');\n this.resetFocus();\n }\n\n open() {\n this.isOpen = true;\n this.promoDiv.classList.add('is-expanded');\n if (this.onOpen) {\n this.onOpen();\n }\n this.setPreviousElementInFocus(document.activeElement);\n this.promoDiv.focus();\n }\n}\n\nexport default () => {\n const onDocumentClick = (event) => {\n const { target } = event;\n const toggleBtn = target.closest('.slide-expand-promo-btn');\n if (!toggleBtn) {\n return;\n }\n const id = toggleBtn.getAttribute('aria-controls');\n let promo = new ExpandedPromo({\n id,\n callbacks: {\n onClose: () => {\n promo = null;\n },\n },\n });\n promo.open();\n };\n\n document.addEventListener('click', onDocumentClick);\n};\n/* eslint-enable no-console */\n","export default () => {\n const triggerSelector = '.filter--heading';\n document.addEventListener('click', (event) => {\n const { target } = event;\n const btn = target.closest(triggerSelector);\n if (btn) {\n event.preventDefault();\n btn.parentElement.classList.toggle('is-active');\n if (btn.parentElement.classList.contains('is-active')) {\n btn.setAttribute('aria-expanded', 'true');\n } else {\n btn.setAttribute('aria-expanded', 'false');\n }\n }\n });\n};\n","// Photo and Video Modals\nimport _ from 'underscore';\n\n_.templateSettings = {\n interpolate: /\\{\\{(.+?)\\}\\}/g,\n};\n\nlet modalImageTemplate;\n\nlet modalVideoTemplate;\n\nconst removeModal = () => {\n const modal = document.querySelector('.modal');\n const modalBackdrop = document.querySelector('.modal-backdrop');\n const closeButton = document.querySelector('.btn-close');\n if (modal.parentElement) {\n modal.parentElement.removeChild(modal);\n if (modalBackdrop) {\n modalBackdrop.parentElement.removeChild(modalBackdrop);\n }\n document.removeEventListener('click', removeModal);\n closeButton.removeEventListener('click', removeModal);\n }\n};\n\nconst modalHandler = () => {\n const modal = document.querySelector('.modal');\n const modalContent = document.querySelector('.modal-content');\n const closeButton = document.querySelector('.btn-close');\n if (modal && modalContent) {\n document.addEventListener('click', removeModal);\n modalContent.addEventListener('click', event => event.stopPropagation());\n closeButton.addEventListener('click', removeModal);\n closeButton.focus();\n }\n};\n\nconst addModal = (self) => {\n if (self.parentElement.classList.contains('image-wrapper')) {\n const { props, imageUrl } = self.parentElement.dataset;\n const [prop0, prop1] = props.split(',');\n if (prop0 === 'Image') {\n const templateProps = {\n newId: self.parentElement.id.split('-')[2],\n productLineName: prop1,\n productDescription: self.parentElement.getAttribute('data-product-description'),\n productLineId: self.parentElement.getAttribute('data-product-line-id'),\n productLineURL: self.parentElement.getAttribute('data-product-url'),\n modalLabel: self.parentElement.getAttribute('data-modal-label'),\n imageStory: self.parentElement.getAttribute('data-image-story'),\n imageSrc: imageUrl,\n imageAlt: self.parentElement.querySelector('.poster-image').getAttribute('alt'),\n };\n\n const hasVisualizerLink = self.parentElement.querySelector('.gallery-link .swatchcard--viewdetail .visualizer-link');\n\n if (hasVisualizerLink) {\n templateProps.visualizerUrl = self.parentElement.querySelector('.gallery-link .swatchcard--viewdetail .visualizer-link').getAttribute('href');\n templateProps.visualizerModelId = self.parentElement.getAttribute('data-visualizer-model-id');\n templateProps.visualizerProgramFamilyName = '';\n templateProps.colorNumber = self.parentElement.getAttribute('data-visualizer-color-number');\n }\n\n const compiled = modalImageTemplate(templateProps);\n const d = document.createElement('div');\n d.innerHTML = compiled;\n\n if (hasVisualizerLink) {\n const visualizerButton = document.createElement('a');\n visualizerButton.href = templateProps.visualizerUrl;\n visualizerButton.classList.add('visualizer-link-modal');\n visualizerButton.addEventListener('click', e => e.stopPropagation());\n visualizerButton.innerHTML = 'View in Visualizer';\n\n d.querySelector('.row').appendChild(visualizerButton);\n }\n\n self.parentElement.appendChild(d.firstChild);\n self.parentElement.firstElementChild.setAttribute('data-target', `#modal-${templateProps.newId}`);\n setTimeout(() => (modalHandler()), 300);\n }\n }\n if (self.parentElement.classList.contains('video-wrapper')) {\n const { props } = self.parentElement.dataset;\n const [prop0, prop1] = props.split(',');\n if (prop0 === 'Video') {\n const templateProps = {\n newId: self.parentElement.id.split('-')[2],\n productLineName: prop1,\n videoTitle: self.parentElement.getAttribute('data-video-title'),\n videoDescription: self.parentElement.getAttribute('data-video-description'),\n videoIframe: self.parentElement.getAttribute('data-video-iframe'),\n };\n const compiled = modalVideoTemplate(templateProps);\n const d = document.createElement('div');\n d.innerHTML = compiled;\n self.parentElement.appendChild(d.firstChild);\n self.parentElement.firstElementChild.setAttribute('data-target', `#modal-${templateProps.newId}`);\n setTimeout(() => (modalHandler()), 300);\n }\n }\n};\n\nconst loadModal = (options) => {\n const {\n imageTemplate,\n videoTemplate,\n galleryModalSelector,\n } = options;\n\n modalImageTemplate = (imageTemplate ? _.template(imageTemplate) : null);\n modalVideoTemplate = (videoTemplate ? _.template(videoTemplate) : null);\n\n Array.prototype.map.call(document.querySelectorAll(galleryModalSelector), (item, index) => {\n item.parentElement.setAttribute('id', `modal-item-${index}`);\n item.addEventListener('click', (event) => {\n while (event.currentTarget.nextElementSibling) {\n event.currentTarget.parentElement.removeChild(event.currentTarget.nextElementSibling);\n }\n addModal(event.currentTarget);\n });\n });\n};\n\n// Initialize modal and set event listeners\nconst init = (options) => {\n loadModal(options);\n window.loadModal = loadModal;\n};\n\nexport default {\n loadModal,\n init,\n};\n","import {\n // getEventData,\n siteEventNames,\n} from '../events/site-events';\n\nexport default () => {\n window.addEventListener(siteEventNames.ON_MODAL_OPEN, () => {\n // const data = getEventData(siteEventNames.ON_MODAL_OPEN);\n // Hide chat icon\n const chatIconDiv = document.getElementById('genesys-messenger');\n if (chatIconDiv) {\n chatIconDiv.style.display = 'none';\n }\n });\n window.addEventListener(siteEventNames.ON_MODAL_CLOSE, () => {\n // const data = getEventData(siteEventNames.ON_MODAL_CLOSE);\n // Show chat icon\n const chatIconDiv = document.getElementById('genesys-messenger');\n if (chatIconDiv) {\n chatIconDiv.style.display = 'block';\n }\n });\n};\n","// Grid Builder\n// Bootstrap Grid/Baseline Overlay\nimport _ from 'underscore';\n\nconst gridTemplate = _.template(`
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
`);\n\nconst buildGrid = () => {\n const compiled = gridTemplate();\n const d = document.createElement('div');\n d.innerHTML = compiled;\n document.body.appendChild(d.firstChild);\n\n // set the height of the grid container to the page\n document.querySelector('.show-grid-baseline').style.height = `${document.querySelector('.app').scrollHeight}px`;\n};\n\nconst removeGrid = () => {\n const grid = document.querySelector('.show-grid-baseline');\n document.body.removeChild(grid);\n};\n\nconst init = () => {\n window.buildGrid = buildGrid;\n window.removeGrid = removeGrid;\n};\n\nexport default {\n buildGrid,\n removeGrid,\n init,\n};\n","/* eslint-disable no-console, no-undef */\nimport Glide from '../vendors/glide.min';\n\nwindow.RESET_GLIDE_EVENT = 'reset-glide';\nwindow.resetGlideEvent = new Event(window.RESET_GLIDE_EVENT);\n\nconst gridSliders = () => {\n if (document.querySelectorAll('.grid-slider').length === 0) {\n return;\n }\n const sliders = [];\n const breakpointsFullWidth = {\n 10000: {\n perView: 1,\n focusAt: 0,\n minWidth: 1,\n },\n 0: {\n perView: 1,\n focusAt: 0,\n minWidth: 0,\n },\n };\n const breakpointsHalfWidth = {\n 10000: {\n perView: 2,\n focusAt: 0,\n minWidth: 768,\n },\n 767: {\n perView: 1,\n focusAt: 0,\n minWidth: 0,\n },\n };\n const breakpointsGridWidth = {\n 10000: {\n perView: 4,\n focusAt: 0,\n minWidth: 992,\n },\n 991: {\n perView: 3,\n focusAt: 0,\n minWidth: 768,\n },\n 767: {\n perView: 3,\n focusAt: 0,\n minWidth: 625,\n },\n 624: {\n perView: 2,\n focusAt: 0,\n minWidth: 450,\n },\n 449: {\n perView: 1,\n focusAt: 0,\n minWidth: 0,\n },\n };\n let breakpoints = breakpointsGridWidth;\n if (!document.querySelectorAll('.full-width-item').length === 0) {\n breakpoints = breakpointsFullWidth;\n } else if (!document.querySelectorAll('.half-width-item').length === 0) {\n breakpoints = breakpointsHalfWidth;\n } else {\n breakpoints = breakpointsGridWidth;\n }\n const getMinItemsForScreenWidth = () => {\n const { innerWidth } = window;\n let ct = 0;\n Object.keys(breakpoints).forEach((key) => {\n if (breakpoints[key].minWidth <= innerWidth) {\n ct = breakpoints[key].perView;\n }\n });\n return ct;\n };\n\n const init = (slider) => {\n // console.log('init');\n slider.glideRef = new Glide(slider.element, {\n autoplay: false,\n breakpoints,\n gap: 0,\n perView: 4,\n startAt: 0,\n type: 'carousel',\n });\n slider.glideRef.mount();\n };\n\n const updateGlideEvents = () => {\n sliders.forEach((slider) => {\n const { element, length } = slider;\n // Need to check what max length should be at any given breakpoint\n // console.log(`${length}/${getMinItemsForScreenWidth()}`);\n if (length > getMinItemsForScreenWidth() && !slider.enabled) {\n slider.enabled = true;\n init(slider);\n // Show navigation arrows\n element.querySelector('.gallery-grid-arrows').classList.remove('hidden');\n }\n if (length <= getMinItemsForScreenWidth() && slider.enabled) {\n // console.log('destroy');\n slider.enabled = false;\n slider.glideRef.destroy();\n slider.glideRef = null;\n // Hide navigation arrows\n element.querySelector('.gallery-grid-arrows').classList.add('hidden');\n }\n if (slider.glideRef) {\n slider.glideRef.update({ startAt: 0 });\n }\n });\n // console.log(sliders);\n };\n\n window.addEventListener('resize', () => {\n updateGlideEvents();\n });\n\n window.addEventListener(window.RESET_GLIDE_EVENT, () => {\n updateGlideEvents();\n });\n\n [].map.call(document.querySelectorAll('.grid-slider'), (slider) => {\n sliders.push({\n element: slider,\n enabled: false,\n glideRef: null,\n length: slider.querySelectorAll('.grid-slider-item').length,\n });\n });\n updateGlideEvents();\n};\n\nexport default gridSliders;\n/* eslint-enable no-console, no-undef */\n","/* eslint-disable no-console */\nimport Glide from '../vendors/glide.min';\n\nconst getVideoWrapperId = id => `ytid_${id}`;\n\nconst heroSlider = {\n glide: null,\n disableAutoplay: false,\n apiLoaded: false,\n iframes: document.querySelectorAll('.hero-slider iframe'),\n players: [],\n getPlayerById: (id) => {\n let player;\n for (let i = 0; i < heroSlider.players.length; i++) { /* eslint-disable-line no-plusplus */\n if (id === getVideoWrapperId(heroSlider.players[i].playerInfo.videoData.video_id)) {\n player = heroSlider.players[i];\n }\n }\n return player;\n },\n onUpdate: () => {\n if (!heroSlider.apiLoaded) {\n return;\n }\n for (let i = 0; i < heroSlider.players.length; i++) { /* eslint-disable-line no-plusplus */\n const slider = document.getElementById(getVideoWrapperId(heroSlider.players[i].playerInfo.videoData.video_id));\n // console.log(`${parseInt(heroSlider.glide.index, 10)}/${parseInt(slider.getAttribute('data-slideNum'), 10)}`);\n if (parseInt(heroSlider.glide.index, 10) === parseInt(slider.getAttribute('data-slideNum'), 10)) {\n heroSlider.players[i].playVideo();\n } else {\n heroSlider.players[i].pauseVideo();\n }\n }\n },\n onInteract: () => {\n if (!heroSlider.apiLoaded) {\n return;\n }\n // Pause any video\n for (let i = 0; i < heroSlider.players.length; i++) { /* eslint-disable-line no-plusplus */\n if (heroSlider.players[i].getPlayerState() === 1) {\n heroSlider.players[i].pauseVideo();\n }\n }\n },\n addControls: () => {\n let player;\n for (let i = 0; i < heroSlider.iframes.length; i++) { /* eslint-disable-line no-plusplus */\n if (heroSlider.iframes[i].id !== '') {\n player = new YT.Player(heroSlider.iframes[i].id, { /* eslint-disable-line no-undef */\n events: {\n 'onReady': function (event) { /* eslint-disable-line func-names, quote-props */\n heroSlider.apiLoaded = true;\n const id = getVideoWrapperId(event.target.playerInfo.videoData.video_id); /* eslint-disable-line prefer-destructuring */\n const slides = document.querySelectorAll('.hero-slider .glide__slides li');\n if (slides.length > 1) {\n if (parseInt(document.getElementById(id).getAttribute('data-slideNum'), 10) !== parseInt(heroSlider.glide.index, 10)) {\n heroSlider.getPlayerById(id).pauseVideo();\n }\n }\n setTimeout(() => {\n // Because glide.js duplicates the div...\n const previews = document.querySelectorAll(`[data-videoId=\"preview_${id}\"]`);\n for (let j = 0; j < previews.length; j++) { /* eslint-disable-line no-plusplus */\n previews[j].classList.add('loaded');\n }\n // document.getElementById(`preview_${id}`).classList.add('loaded');\n }, 1000);\n },\n 'onStateChange': function () { }, /* eslint-disable-line func-names, quote-props */\n },\n });\n heroSlider.players.push(player);\n }\n }\n },\n};\n\nconst init = () => {\n const slides = document.querySelectorAll('.hero-slider .glide__slides li');\n if (slides.length > 1) {\n heroSlider.glide = new Glide('.glide', {\n type: 'carousel',\n startAt: 0,\n perView: 1,\n focusAt: 'center',\n gap: 0,\n autoplay: window.autoplayInterval,\n breakpoints: {},\n });\n\n heroSlider.glide.mount();\n\n heroSlider.glide.on('run', () => {\n heroSlider.onUpdate();\n });\n heroSlider.glide.on('swipe.end', () => {\n if (!heroSlider.disableAutoplay) {\n heroSlider.glide.update({ autoplay: false });\n heroSlider.disableAutoplay = true;\n }\n heroSlider.onInteract();\n });\n }\n // YT\n const tag = document.createElement('script');\n tag.src = 'https://www.youtube.com/iframe_api';\n const firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n const timer = setInterval(() => {\n try {\n if (YT) { /* eslint-disable-line no-undef */\n clearInterval(timer);\n heroSlider.addControls();\n }\n } catch (error) {\n // error\n }\n }, 1000);\n};\n\nexport default {\n init,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\r\nfunction initComparisons() {\r\n var isTouchDevice = false; \r\n var x, i;\r\n /* Find all elements with an \"overlay\" class: */\r\n x = document.getElementsByClassName(\"img-comp-overlay\");\r\n if (x.length === 0) {\r\n return;\r\n } \r\n for (i = 0; i < x.length; i++) {\r\n /* Once for each \"overlay\" element:\r\n pass the \"overlay\" element as a parameter when executing the compareImages function: */\r\n compareImages(x[i]);\r\n }\r\n function compareImages(img) {\r\n var slideContainer, slider, img, clicked = 0, w, h;\r\n /* Get the width and height of the img element */\r\n w = img.offsetWidth;\r\n h = img.offsetHeight;\r\n /* Set the width of the img element to 50%: */\r\n img.style.height = (h / 2) + \"px\";\r\n /* Create slider: */\r\n\r\n slideContainer = document.querySelector('.img-comp-wrapper');\r\n \r\n slider = document.querySelector('.img-comp-slider');\r\n /* Insert slider */\r\n img.parentElement.insertBefore(slider, img);\r\n /* Position the slider in the middle: */\r\n slider.style.top = (h / 2) - (slider.offsetHeight / 2) + \"px\";\r\n /* Execute a function when the mouse button is pressed: */\r\n slider.addEventListener(\"mousedown\", slideReady);\r\n /* And another function when the mouse button is released: */\r\n window.addEventListener(\"mouseup\", slideFinish);\r\n /* Or touched (for touch screens: */\r\n slider.addEventListener(\"touchstart\", slideReady);\r\n /* And released (for touch screens: */\r\n window.addEventListener(\"touchend\", slideFinish);\r\n window.addEventListener(\"load\", function () {\r\n console.log('loaded');\r\n var overlayImage = document.querySelector(\".comparison-image\");\r\n var overlayWidth = overlayImage.offsetWidth;\r\n slideContainer.style.width = overlayWidth + \"px\";\r\n \r\n });\r\n\r\n function slideReady(e) {\r\n /* Prevent any other actions that may occur when moving over the image: */\r\n e.preventDefault();\r\n /* The slider is now clicked and ready to move: */\r\n clicked = 1;\r\n /* Execute a function when the slider is moved: */\r\n isTouchDevice = e.type === \"touchstart\"; \r\n window.addEventListener(isTouchDevice ? \"touchmove\" : \"mousemove\", slideMove);\r\n }\r\n function slideFinish() {\r\n /* The slider is no longer clicked: */\r\n clicked = 0;\r\n window.removeEventListener(isTouchDevice ? \"touchmove\" : \"mousemove\", slideMove);\r\n }\r\n function slideMove(e) {\r\n var pos;\r\n /* If the slider is no longer clicked, exit this function: */\r\n if (clicked == 0) return false;\r\n /* Get the cursor's x position: */\r\n e.preventDefault(); \r\n pos = getCursorPos(e)\r\n /* Prevent the slider from being positioned outside the image: */\r\n if (pos < 87) pos = 87;\r\n if (pos > (h - 50)) pos = (h - 60);\r\n /* Execute a function that will resize the overlay image according to the cursor: */\r\n slide(pos);\r\n }\r\n function getCursorPos(e) {\r\n var a, y = 0;\r\n e = e || window.event;\r\n /* Get the x positions of the image: */\r\n a = img.getBoundingClientRect();\r\n /* Calculate the cursor's x coordinate, relative to the image: */\r\n y = e.pageY - a.top;\r\n /* Consider any page scrolling: */\r\n y = y - window.pageYOffset;\r\n return y;\r\n }\r\n function slide(y) {\r\n /* Resize the image: */\r\n img.style.height = y + \"px\";\r\n /* Position the slider: */\r\n slider.style.top = img.offsetHeight - (slider.offsetHeight / 2) + \"px\";\r\n }\r\n }\r\n\r\n // Activate window activation\r\n const comparisonContainer = document.querySelector('.image-comparison-container');\r\n if (comparisonContainer) {\r\n document.addEventListener('scroll', activateComparisonSlider);\r\n }\r\n\r\n function activateComparisonSlider() {\r\n const imgCompSlider = document.querySelector('.img-comp-slider');\r\n const imgCompOverlay = document.querySelector('.img-comp-overlay');\r\n\r\n if (isInViewport(comparisonContainer)) {\r\n console.log(comparisonContainer + \"is in full view\");\r\n imgCompSlider.classList.add('img-comp-slider-animation');\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction isInViewport(element) {\r\n const rect = element.getBoundingClientRect();\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n}\r\n\r\nfunction activateComparisonSlider() {\r\n const imgCompSlider = document.querySelector('.img-comp-slider');\r\n const imgCompOverlay = document.querySelector('.img-comp-overlay');\r\n\r\n if (isInViewport(comparisonContainer)) {\r\n console.log(comparisonContainer + \"is in full view\")\r\n imgCompSlider.classList.add('img-comp-slider-animation');\r\n }\r\n}\r\n\r\nexport default {\r\n initComparisons,\r\n};\r\n","const inPageNav = () => {\n // Fixed navbar behavior\n const headerDiv = document.querySelector('.header');\n const anchors = document.querySelectorAll('.page-anchor');\n const inPageNavDiv = document.querySelector('.in-page-nav');\n const mainContentDiv = document.getElementById('main-content');\n const footerDiv = document.querySelector('.footer');\n let initLoadHeaderOffset = 24;\n if (headerDiv === null || inPageNavDiv === null) {\n return;\n }\n // const inPageNavYPos = inPageNavDiv.offsetTop;\n /* const updateOffsetHeight = () => {\n let headerFixedOffset = 0;\n const headerOffset = headerDiv.offsetHeight;\n let addFixedAtY = inPageNavYPos - headerOffset;\n // Check if header is fixed\n const headerStyles = window.getComputedStyle(headerDiv);\n if (headerStyles.getPropertyValue('position').toLowerCase() === 'fixed') {\n addFixedAtY = inPageNavYPos - headerOffset;\n }\n if (addFixedAtY <= window.scrollY) {\n headerFixedOffset = Math.min(window.scrollY - addFixedAtY, headerDiv.offsetHeight) * -1;\n inPageNavDiv.classList.add('is-fixed');\n inPageNavDiv.style.top = `${headerOffset + headerFixedOffset}px`;\n // console.log(`${headerFixedOffset}px`);\n // Slide up header and in-page nav,\n // so in-page nav is locked to top of screen\n headerDiv.style.top = `${headerFixedOffset}px`;\n } else {\n inPageNavDiv.classList.remove('is-fixed');\n inPageNavDiv.removeAttribute('style');\n headerDiv.removeAttribute('style');\n }\n }; */\n\n // Scrolling & Anchors\n const updateAnchorOffset = () => {\n const offset = `${(-inPageNavDiv.clientHeight)}px`;\n for (let i = 0; i < anchors.length; i++) { /* eslint-disable-line no-plusplus */\n anchors[i].style.top = offset;\n }\n // Reset to 0 after applying on load\n if (initLoadHeaderOffset !== 0) {\n initLoadHeaderOffset = 0;\n }\n };\n\n const getAnchorPosition = (anchor) => {\n const div = document.querySelector(`a[data-anchor-name=\"${anchor}\"]`);\n if (div) {\n if (!inPageNavDiv.classList.contains('is-fixed')) {\n return div.offsetTop - 60;\n }\n return div.offsetTop;\n }\n return 0;\n };\n\n const scrollToPosition = (pos) => {\n window.scrollTo({\n top: pos,\n behavior: 'smooth',\n });\n };\n\n const updateHashAfterDelay = (anchor) => {\n setTimeout(() => {\n window.location.hash = anchor;\n }, 250);\n };\n\n const getDocumentHeight = () => (\n footerDiv.offsetHeight + mainContentDiv.offsetHeight\n );\n\n window.addEventListener('resize', () => {\n updateAnchorOffset();\n });\n\n window.addEventListener('scroll', () => {\n // updateOffsetHeight();\n // Catch page bottom\n if ((window.innerHeight + window.scrollY >= window.getDocumentHeight()) && anchors.length > 0) {\n const anchorName = anchors[anchors.length - 1].getAttribute('data-anchor-name');\n let setAsActive = inPageNavDiv.querySelector(`[href*=\"#${anchorName}\"]`);\n if (setAsActive === null) {\n return;\n }\n setAsActive = setAsActive.parentNode;\n // If nav item is already active, return\n if (setAsActive.classList.contains('active')) {\n return;\n }\n // Remove active state\n const currentActive = inPageNavDiv.querySelector('.active');\n if (currentActive) {\n currentActive.classList.remove('active');\n }\n // Set new active and update hash\n setAsActive.classList.add('active');\n updateHashAfterDelay(anchorName);\n return;\n }\n window.updateAnchorOffset(); // Weird scope issue, so added reference to window\n for (let i = anchors.length - 1; i >= 0; i--) { /* eslint-disable-line no-plusplus */\n // console.log(`${i}. ${anchors[i].offsetTop}/${window.scrollY}`);\n if (anchors[i].offsetTop <= window.scrollY) {\n const anchorName = anchors[i].getAttribute('data-anchor-name');\n let setAsActive = inPageNavDiv.querySelector(`[href*=\"#${anchorName}\"]`);\n if (setAsActive === null) {\n return;\n }\n setAsActive = setAsActive.parentNode;\n // If nav item is already active, return\n if (setAsActive.classList.contains('active')) {\n return;\n }\n // Remove active state\n const currentActive = inPageNavDiv.querySelector('.active');\n if (currentActive) {\n currentActive.classList.remove('active');\n }\n // Set new active and update hash\n setAsActive.classList.add('active');\n updateHashAfterDelay(anchorName);\n return;\n }\n }\n });\n\n // Load\n // updateOffsetHeight();\n updateAnchorOffset();\n window.updateAnchorOffset = updateAnchorOffset;\n window.getDocumentHeight = getDocumentHeight;\n // Check to see if url is hashed and if hash matches page anchor\n if (window.location.hash) {\n const anchor = window.location.hash.substr(1);\n const pos = getAnchorPosition(anchor);\n scrollToPosition(pos);\n if (pos !== 0) {\n updateHashAfterDelay(anchor);\n }\n }\n\n // Event handlers\n [].map.call(document.querySelectorAll('a, .in-page-nav-item button'), btn => (\n btn.addEventListener('click', (event) => {\n let anchor = btn.getAttribute('href');\n if (anchor) {\n const url = window.location.href;\n const urlMatch = anchor.substring(0, anchor.indexOf('#')) === url.substr(0, url.indexOf('#'));\n if (anchor.indexOf('#') === 0 || (anchor.indexOf('#') !== -1 && urlMatch)) {\n event.preventDefault();\n anchor = anchor.substr(anchor.indexOf('#') + 1);\n const pos = getAnchorPosition(anchor);\n scrollToPosition(pos);\n if (pos !== 0) {\n updateHashAfterDelay(anchor);\n }\n }\n }\n })\n ));\n};\n\nexport default inPageNav;\n","// Lazy Load imagesVideosFilter\nconst lazyLoadHandler = () => {\n let lazyloadThrottleTimeout;\n const images = document.querySelectorAll('.lazy');\n\n if (lazyloadThrottleTimeout) {\n clearTimeout(lazyloadThrottleTimeout);\n }\n\n lazyloadThrottleTimeout = setTimeout(() => {\n const scrollTop = window.pageYOffset;\n Array.prototype.forEach.call(images, (img) => {\n if (img.offsetTop < (window.innerHeight + scrollTop)) {\n img.src = img.dataset.src;\n img.classList.remove('lazy');\n }\n });\n\n if (images.length === 0) {\n document.removeEventListener('scroll', lazyLoadHandler);\n window.removeEventListener('resize', lazyLoadHandler);\n window.removeEventListener('orientationChange', lazyLoadHandler);\n }\n }, 20);\n};\n\nconst lazyload = () => {\n if ('IntersectionObserver' in window) {\n const images = document.querySelectorAll('.lazy');\n\n const options = {\n rootMargin: '0px',\n threshold: 0,\n };\n\n const imageObserver = new IntersectionObserver((entries) => {\n Array.prototype.forEach.call(entries, (entry) => {\n if (entry.isIntersecting) {\n const image = entry.target;\n image.src = image.dataset.src;\n image.classList.remove('lazy');\n imageObserver.unobserve(image);\n }\n });\n }, options);\n\n images.forEach((image) => {\n imageObserver.observe(image);\n });\n } else {\n lazyLoadHandler();\n document.addEventListener('scroll', lazyLoadHandler);\n window.addEventListener('resize', lazyLoadHandler);\n window.addEventListener('orientationChange', lazyLoadHandler);\n }\n};\n\nexport default lazyload;\n","/* eslint-disable no-console */\nimport * as GallerySlider from './gallery-slider';\nimport * as PreviewArea from './preview-area';\nimport { addPhotosModal, updatePhotosModal } from './photos-modal';\n\nconst miniGallery = () => {\n const slider = document.querySelector('.mini-gallery');\n if (!slider) {\n return;\n }\n\n const getGalleryItemData = () => {\n const arr = [];\n let srcStr = '';\n const galleryItems = slider.querySelectorAll('.image-gallery-item button');\n for (let i = 0; i < galleryItems.length; i++) { /* eslint-disable-line no-plusplus */\n const item = galleryItems[i];\n const img = item.querySelector('img');\n const notDupe = srcStr.indexOf(img.src) === -1;\n // Dedupe slider array\n if (item.getAttribute('data-type') === 'image' && notDupe) {\n arr.push({\n alt: img.alt,\n caption: item.getAttribute('data-caption'),\n src: img.src,\n type: 'image',\n });\n srcStr = srcStr.concat(`,${img.src}`);\n } else if (item.getAttribute('data-type') === 'video' && notDupe) {\n arr.push({\n alt: img.alt,\n caption: item.getAttribute('data-caption'),\n videosrc: item.getAttribute('data-videosrc'),\n src: img.src,\n type: 'video',\n });\n srcStr = srcStr.concat(`,${img.src}`);\n }\n }\n return arr;\n };\n\n PreviewArea.init({\n previewWrapper: document.querySelector('.main-image-wrapper'),\n });\n GallerySlider.init({\n onSlideClick: (item) => {\n PreviewArea.update({\n item,\n onPreviewClick: () => {\n // Launch modal\n updatePhotosModal({\n photos: {\n primaryImage: PreviewArea.getPreviewData(),\n additionalImages: getGalleryItemData(),\n },\n });\n },\n });\n },\n slider,\n });\n addPhotosModal();\n};\n\nexport default miniGallery;\n/* eslint-enable no-console */\n","/* eslint-disable no-console, no-undef */\nimport Glide from '../../vendors/glide.min';\n\nconst removeActive = (slider) => {\n const activeItems = slider.querySelectorAll('.selected');\n for (let i = 0; i < activeItems.length; i++) { /* eslint-disable-line no-plusplus */\n activeItems[i].classList.remove('selected');\n }\n};\n\nconst setActive = (item, onClick) => {\n item.classList.add('selected');\n if (onClick) {\n onClick(item);\n }\n};\n\nconst init = (options) => {\n const { onSlideClick, slider } = options;\n let galleryItems = slider.querySelectorAll('.image-gallery-item button');\n // Is there more than 1 slide\n if (galleryItems.length > 4) {\n // Add glide\n const glide = new Glide(slider, {\n autoplay: false,\n breakpoints: {},\n gap: 10,\n perView: 4,\n startAt: 0,\n type: 'carousel',\n });\n glide.mount();\n glide.on('move', () => {\n // Catch duplicates\n const img = slider.querySelector('.selected img');\n galleryItems = slider.querySelectorAll('.image-gallery-item button');\n for (let i = 0; i < galleryItems.length; i++) { /* eslint-disable-line no-plusplus */\n if (img.src === galleryItems[i].querySelector('img').src) {\n galleryItems[i].classList.add('selected');\n }\n }\n });\n }\n\n // Need to catch items that are created by plugin after instantiation\n /* [].map.call(galleryItems, item => item.addEventListener('click', () => {\n removeActive(slider);\n setActive(item, onSlideClick);\n })); */\n const gallerySliderDiv = document.querySelector('.mini-gallery .gallery-slider');\n gallerySliderDiv.addEventListener('click', (event) => {\n const parent = event.target.closest('.image-gallery-item');\n if (parent) {\n const item = parent.querySelector('button');\n removeActive(slider);\n setActive(item, onSlideClick);\n }\n });\n // Set default active\n setActive(galleryItems[0], onSlideClick);\n};\n\nconst update = (options) => {\n const { slider } = options;\n console.log(slider);\n};\n\nexport {\n init,\n update,\n};\n/* eslint-enable no-console, no-undef */\n","/* eslint-disable no-console */\nimport _ from 'underscore';\nimport { updateAssetUrlDimensions } from '../widen-utils';\n\n_.templateSettings = {\n interpolate: /\\{\\{(.+?)\\}\\}/g,\n};\n\nlet previewData = {};\nlet previewWrapperDiv = null;\n\n\nconst imageTemplate =\n ``;\n\nconst videoThumbnailTemplate =\n ``;\n\nconst loaderTemplateVals = _.template(loaderTemplate);\nconst videoTemplateVals = _.template(videoTemplate);\nconst imageThumbnailTemplateVals = _.template(imageThumbnailTemplate);\nconst videoThumbnailTemplateVals = _.template(videoThumbnailTemplate);\n\nconst destroyPhotoZoom = () => {\n const imageZoomDiv = document.querySelector('.zoomContainer');\n if (imageZoomDiv) {\n imageZoomDiv.remove();\n }\n};\n\nconst showPhotoZoom = (show) => {\n const imageZoomDiv = document.querySelector('.zoomContainer');\n if (imageZoomDiv && show) {\n imageZoomDiv.classList.remove('hidden');\n } else if (imageZoomDiv && !show) {\n imageZoomDiv.classList.add('hidden');\n }\n};\n\nconst destroyVideoPlayer = () => {\n const videoWrapper = document.querySelector('.product-photos-modal .video-wrapper');\n if (videoWrapper) {\n videoWrapper.remove();\n }\n};\n\nconst initPhotoZoom = () => {\n // Add photo zoom/jquery\n const imageZoomDiv = document.querySelector('.zoomContainer');\n if (imageZoomDiv) {\n return;\n }\n $('#image-zoom').ezPlus({\n zoomType: 'inner',\n cursor: 'crosshair',\n responsive: 'true',\n easing: 'true',\n easingDuration: '200',\n });\n};\n\nconst getLargeImageUrl = src => (\n updateAssetUrlDimensions({\n src,\n width: 838,\n height: 486, // 558,\n })\n);\n\nconst getZoomImageUrl = src => (\n updateAssetUrlDimensions({\n src,\n width: 1676,\n height: 972, // 1116,\n })\n);\n\nconst largeImageLoader = (options) => {\n const {\n onLoaded,\n src,\n } = options;\n // Load into temp image container\n const body = document.querySelector('body');\n const img = document.createElement('img');\n img.src = src;\n img.id = 'zoomContainerImg';\n body.appendChild(img);\n // Add loader\n const wrapperDiv = document.querySelector('.product-photos-modal .product-image');\n const div = document.createElement('div');\n const compiled = loaderTemplateVals();\n div.innerHTML = compiled;\n wrapperDiv.appendChild(div.firstChild);\n img.addEventListener('load', () => {\n // On load complete, remove dummy image\n // Remove loader\n const loader = wrapperDiv.querySelector('.asset-loader');\n if (loader) {\n loader.remove();\n }\n // Remove temp image container\n document.getElementById(img.id).remove();\n onLoaded();\n });\n};\n\nconst updatePhotosModal = (options) => {\n const {\n photos,\n } = options;\n const {\n primaryImage,\n additionalImages,\n } = photos;\n const wrapperDiv = document.querySelector('.product-photos-modal');\n const primaryProductImg = wrapperDiv.querySelector('.primary-product-img');\n primaryProductImg.src = primaryImage.src;\n primaryProductImg.setAttribute('alt', primaryImage.alt);\n primaryProductImg.setAttribute('data-zoom-image', getZoomImageUrl(primaryImage.src));\n const caption = wrapperDiv.querySelector('.caption');\n caption.textContent = primaryImage.caption;\n // Clear out exsiting thumbnails\n const thumbWrapperDiv = wrapperDiv.querySelector('.product-image-thumb-content');\n thumbWrapperDiv.innerHTML = '';\n // Add new\n // Create thumb from primary image\n /* const primaryImageThumb = {\n alt: primaryImage.alt,\n caption: primaryImage.caption,\n src: updateAssetUrlDimensions({\n src: primaryImage.src,\n width: 90,\n height: 90,\n }),\n type: primaryImage.type,\n videosrc: primaryImage.videosrc,\n };\n let div = document.createElement('div');\n let compiled = '';\n if (primaryImageThumb.type === 'image') {\n compiled = imageThumbnailTemplateVals(primaryImageThumb);\n } else if (primaryImageThumb.type === 'video') {\n compiled = videoThumbnailTemplateVals(primaryImageThumb);\n }\n div.innerHTML = compiled;\n thumbWrapperDiv.appendChild(div.firstChild); */\n // Thumbnails\n additionalImages.forEach((thumb) => {\n // Resize thumb image\n thumb.src = updateAssetUrlDimensions({\n src: thumb.src,\n width: 90,\n height: 90,\n });\n let compiled = '';\n const div = document.createElement('div');\n if (thumb.type === 'image') {\n compiled = imageThumbnailTemplateVals(thumb);\n } else if (thumb.type === 'video') {\n compiled = videoThumbnailTemplateVals(thumb);\n }\n div.innerHTML = compiled;\n thumbWrapperDiv.appendChild(div.firstChild);\n });\n};\n\nconst toggleLargeModalArea = (thumbnail) => {\n const wrapperDiv = document.querySelector('.product-photos-modal');\n const imageWrapper = wrapperDiv.querySelector('.product-image');\n const videoWrapper = wrapperDiv.querySelector('.product-video');\n // Get selected image source\n const thumbImg = thumbnail.querySelector('img');\n const thumbSrc = thumbImg.src;\n const type = thumbnail.getAttribute('data-type');\n if (type === 'video') {\n imageWrapper.classList.add('hidden');\n videoWrapper.classList.remove('hidden');\n if (videoWrapper.firstChild !== null) {\n videoWrapper.firstChild.remove();\n }\n showPhotoZoom(false);\n const div = document.createElement('div');\n const compiled = videoTemplateVals({\n videosrc: thumbnail.getAttribute('data-videosrc'),\n });\n div.innerHTML = compiled;\n videoWrapper.appendChild(div.firstChild);\n } else if (type === 'image') {\n imageWrapper.classList.remove('hidden');\n videoWrapper.classList.add('hidden');\n destroyVideoPlayer();\n showPhotoZoom(true);\n // Add loader\n largeImageLoader({\n src: getZoomImageUrl(thumbSrc),\n onLoaded: () => {\n const zoomContainer = document.querySelector('.zoomWindowContainer > div');\n if (zoomContainer) {\n zoomContainer.style.backgroundImage = `url('${getZoomImageUrl(thumbSrc)}')`;\n }\n },\n });\n // Set large image props\n const primaryProductImg = wrapperDiv.querySelector('.primary-product-img');\n primaryProductImg.src = getLargeImageUrl(thumbSrc);\n primaryProductImg.setAttribute('alt', thumbImg.alt);\n }\n // Get selected image caption\n const thumbCaption = thumbnail.getAttribute('data-caption');\n const caption = wrapperDiv.querySelector('.caption');\n caption.textContent = thumbCaption;\n};\n\nconst removeSelectedState = () => {\n const thumbWrapperDiv = document.querySelector('.product-photos-modal .product-image-thumb-content');\n const selectedBtn = thumbWrapperDiv.querySelector('.selected');\n if (selectedBtn) {\n selectedBtn.classList.remove('selected');\n }\n};\n\nconst updateActiveThumbnail = (btn) => {\n removeSelectedState();\n btn.classList.add('selected');\n};\n\nconst getActiveThumbnail = (btn) => {\n const btnImgSrc = btn.querySelector('img').src;\n const btnImgId = getIdFromAssetUrl(btnImgSrc);\n const thumbnailList = document.querySelectorAll('.product-photos-modal .product-image-thumb');\n for (let i = 0; i < thumbnailList.length; i++) { /* eslint-disable-line no-plusplus */\n const thumbSrc = thumbnailList[i].querySelector('img').src;\n if (getIdFromAssetUrl(thumbSrc) === btnImgId) {\n return thumbnailList[i];\n }\n }\n return null;\n};\n\nconst addPhotosModal = () => {\n // Init modal\n const modal = new SiteModal({\n id: 'product-photos-modal',\n callbacks: {\n onOpen: () => {\n initPhotoZoom();\n },\n onClose: () => {\n destroyPhotoZoom();\n destroyVideoPlayer();\n },\n },\n });\n // Add events to in-page photos\n const inPagePhotoPreviews = document.querySelector('.product-line-hero');\n inPagePhotoPreviews.addEventListener('click', (event) => {\n const btn = event.target.closest('.photos-modal-btn');\n if (btn) {\n modal.open();\n const thumbnail = getActiveThumbnail(btn);\n // How to target active thumbail\n toggleLargeModalArea(thumbnail);\n updateActiveThumbnail(thumbnail);\n }\n });\n // Add events to modal photos\n const wrapperDiv = document.querySelector('.product-photos-modal');\n wrapperDiv.addEventListener('click', (event) => {\n const thumbnail = event.target.closest('.product-image-thumb');\n if (thumbnail) {\n toggleLargeModalArea(thumbnail);\n updateActiveThumbnail(thumbnail);\n }\n });\n};\n\nexport {\n addPhotosModal,\n updatePhotosModal,\n};\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nexport default class SiteModal {\n constructor(options) {\n if (!options.callbacks) {\n options.callbacks = {};\n }\n this.onOpen = options.callbacks.onOpen;\n this.onClose = options.callbacks.onClose;\n this.modalDiv = document.querySelector(`#${options.id}`);\n this.isOpen = false;\n this.previousElementInFocus = null;\n // Modal events\n window.addEventListener('resize', this.onResize.bind(this));\n [].map.call(this.modalDiv.querySelectorAll('.close-btn, .modal-overlay, #modal-refine-btn, .close-modal-btn'), btn => btn.addEventListener('click', this.close.bind(this)));\n document.addEventListener('keyup', this.onDocumentModalKeyUp.bind(this));\n // Add open to toggleBtn\n if (options.toggleBtn) {\n options.toggleBtn.addEventListener('click', this.open.bind(this));\n }\n }\n\n onDocumentModalKeyUp(event) {\n if (event.keyCode === 27 && this.isOpen) {\n this.close(); /* eslint-disable-line no-use-before-define */\n }\n }\n\n setPreviousElementInFocus(element) {\n this.previousElementInFocus = element;\n }\n\n resetFocus() {\n if (this.previousElementInFocus) {\n this.previousElementInFocus.focus();\n }\n }\n\n updateHeight() {\n if (!this.isOpen) {\n return;\n }\n const contentHeight = this.modalDiv.querySelector('.modal-content').offsetHeight;\n this.modalDiv.querySelector('.modal-panel').style.height = `${contentHeight + 30}px`;\n }\n\n onResize() {\n if (!this.isOpen) {\n return;\n }\n this.updateHeight();\n }\n\n close() {\n this.isOpen = false;\n if (this.onClose) {\n this.onClose();\n }\n this.modalDiv.classList.remove('modal-visible');\n this.resetFocus();\n }\n\n open() {\n this.isOpen = true;\n this.modalDiv.classList.add('modal-visible');\n if (this.onOpen) {\n this.onOpen();\n }\n this.setPreviousElementInFocus(document.activeElement);\n this.modalDiv.focus();\n this.updateHeight();\n }\n}\n/* eslint-enable no-console */\n","const mobileNavNew = () => {\n // Elements\n const mainContent = document.querySelector('#main-content');\n const pageHeader = document.querySelector('header');\n const mobileMenu = pageHeader.querySelector('.nav-wrapper-mobile');\n const toggleMenu = document.querySelector('.menu-button');\n const menuWrapper = document.querySelector('.menu-wrapper');\n const level1Links = pageHeader.querySelectorAll('.level-1 > li > button');\n // const primaryItems = pageHeader.querySelectorAll('.primary-item');\n const listWrapper2 = pageHeader.querySelector('.level-2-wrapper');\n // const subMenu2Heading = listWrapper2.querySelector('.sub-menu-title');\n const listWrapper3 = pageHeader.querySelector('.level-3-wrapper');\n // const subMenu3Heading = listWrapper3.querySelector('.sub-menu-title');\n // const subMenuWrapper2 = listWrapper2.querySelector('.sub-menu-wrapper');\n // const subMenuWrapper3 = listWrapper3.querySelector('.sub-menu-wrapper');\n const backOneLevelBtns = pageHeader.querySelectorAll('.back-one-level');\n const listWrappers = [...document.querySelectorAll('.list-wrapper')];\n const isVisibleClass = 'is-visible';\n const isActiveClass = 'is-active';\n\n const toggleMobileMenu = () => {\n menuWrapper.classList.toggle(isVisibleClass);\n mobileMenu.classList.toggle('menu-open');\n if (!menuWrapper.classList.contains('menu-open')) {\n toggleMenu.setAttribute('aria-expanded', 'true');\n } else {\n toggleMenu.setAttribute('aria-expanded', 'false');\n }\n if (!toggleMenu.classList.contains(isVisibleClass)) {\n listWrapper2.classList.remove(isVisibleClass);\n listWrapper3.classList.remove(isVisibleClass);\n const menuLinks = menuWrapper.querySelectorAll('a');\n menuLinks.forEach((menuLink) => {\n menuLink.classList.remove(isActiveClass);\n });\n }\n };\n\n toggleMenu.addEventListener('click', () => {\n toggleMobileMenu();\n });\n\n // toggle the menu closed if the focus goes outside of the menu-wrapper\n document.addEventListener('keydown', () => {\n if (menuWrapper.classList.contains(isVisibleClass) && mainContent.contains(document.activeElement)) {\n toggleMobileMenu();\n }\n });\n\n const resetFocus = (el) => {\n const timer = setTimeout(() => {\n // console.log(el);\n const elToFocus = el.querySelector('.back-one-level') || el.querySelector('.subnav-toggle');\n // console.log(elToFocus);\n elToFocus.focus();\n clearTimeout(timer);\n }, 300);\n };\n\n const buildSubNav = (e, linkClicked, tabbed) => {\n e.preventDefault();\n // get the current List Wrapper\n const currentListContent = linkClicked.nextElementSibling;\n const currentListWrapper = linkClicked.closest('.list-wrapper');\n // console.log(currentListWrapper);\n if (currentListWrapper) {\n // find the index of that wrapper in the listWrappers []\n const currentIndex = listWrappers.indexOf(currentListWrapper);\n\n // Give that clicked link the aria-expand true and the is-active class.\n linkClicked.classList.add(isActiveClass);\n linkClicked.setAttribute('aria-expanded', 'true');\n\n // clone the node from the original structure and place it into the next listWrapper\n const clonedList = currentListContent.cloneNode(true);\n\n // set the next active wrapper to the next in the array.\n const nextListWrapper = listWrappers[currentIndex + 1];\n nextListWrapper.classList.add(isVisibleClass);\n nextListWrapper.tabIndex = 0;\n // console.log(nextListWrapper);\n // clear out any contents from the next level nav\n const subMenuListWrapper = nextListWrapper.querySelector('.sub-menu-wrapper');\n subMenuListWrapper.innerHTML = '';\n subMenuListWrapper.append(clonedList);\n\n // build the heading link\n const headingHTML = nextListWrapper.querySelector('.sub-menu-title');\n headingHTML.innerHTML = '';\n const headingLink = linkClicked.dataset.link;\n headingHTML.insertAdjacentHTML('beforeend', `${linkClicked.textContent.trim()}`);\n // add the cloned node to the next level wrapper\n resetFocus(nextListWrapper);\n\n if (tabbed) {\n resetFocus(nextListWrapper);\n }\n }\n };\n\n const handleBackBtnEvent = (e) => {\n const backBtn = e.target;\n const startingListWrapper = backBtn.closest('.list-wrapper');\n const i = listWrappers.indexOf(startingListWrapper);\n // console.log(parentListWrapper);\n backBtn.tabIndex = -1;\n startingListWrapper.tabIndex = -1;\n // clear out starting List so it cant be tabbed to.\n startingListWrapper.querySelector('.sub-menu-wrapper').innerHTML = '';\n startingListWrapper.querySelector('.sub-menu-title').innerHTML = '';\n // remove the 'isVisible' Class from this .list-wrapper\n startingListWrapper.classList.remove(isVisibleClass);\n // gets the parents previous element sibling w/ the .is-active class and removes it??\n const endingListWrapper = listWrappers[i - 1];\n endingListWrapper.tabIndex = 0;\n // console.log(newActiveListWrapper);\n endingListWrapper.classList.remove(isActiveClass);\n // grab either the first btn of the newly active tab, or the first link if its a level 1 nav\n // const FirstLink = newActiveListWrapper.querySelector('.back-one-level, li');\n resetFocus(endingListWrapper);\n };\n\n // build level 2 nav on click from the level 1 nav\n level1Links.forEach((level1Link) => {\n level1Link.addEventListener('click', (e) => {\n // buildSubNavLevel2(e, e.target, false);\n // const currentListWrapper = e.target.closest('.list-wrapper');\n buildSubNav(e, e.target, false);\n });\n });\n\n // build the level 3 nav on click from the level 2 nav\n listWrapper2.addEventListener('click', (e) => {\n // buildSubNavLevel3(e, e.target, false);\n // console.log(e.target);\n if (e.target.nextElementSibling.classList.contains('sub-menu')) {\n buildSubNav(e, e.target, false);\n }\n });\n\n // builds the level 2 and level 3 nav on enter when tabbing through.\n document.addEventListener('keydown', (e) => {\n // if the user hits Enter\n if (e.keyCode === 13) {\n // if the user hits enter on the back button, we don't want to run this code to build a new nav level\n if (!e.target.classList.contains('back-one-level')) {\n const btn = e.target;\n const listLevel = btn.parentNode.parentNode;\n // console.log(listLevel, e, e.target);\n if (listLevel.classList.contains('level-1')) {\n buildSubNav(e, e.target, true);\n } else if (listLevel.classList.contains('level-2')) {\n buildSubNav(e, e.target, true);\n }\n }\n }\n });\n\n backOneLevelBtns.forEach((backOneLevelBtn) => {\n backOneLevelBtn.addEventListener('click', (e) => {\n handleBackBtnEvent(e);\n });\n backOneLevelBtn.addEventListener('keydown', (e) => {\n if (e.keyCode === 13) {\n handleBackBtnEvent(e);\n }\n });\n });\n};\n\nexport default mobileNavNew;\n","const init = (options) => {\n const {\n activator,\n menuToggle,\n searchMenu,\n } = options;\n const searchBtn = document.querySelector(activator);\n const searchDiv = document.querySelector(searchMenu);\n const searchInput = searchDiv.querySelector('.search-input');\n\n const closeSearchMenuOnBodyClick = (event) => {\n if (event.target.closest('.search-item') === null) {\n searchDiv.classList.remove(menuToggle);\n searchBtn.setAttribute('aria-expanded', 'false');\n searchInput.blur();\n document.querySelector('body').removeEventListener('click', closeSearchMenuOnBodyClick);\n }\n };\n\n searchBtn.addEventListener('click', (event) => {\n event.stopPropagation();\n if (window.innerWidth < 992) {\n searchDiv.classList.toggle(menuToggle);\n if (searchDiv.classList.contains(menuToggle)) {\n searchBtn.setAttribute('aria-expanded', 'true');\n document.querySelector('body').addEventListener('click', closeSearchMenuOnBodyClick);\n searchInput.focus();\n } else {\n searchBtn.setAttribute('aria-expanded', 'false');\n searchInput.blur();\n document.querySelector('body').removeEventListener('click', closeSearchMenuOnBodyClick);\n }\n }\n });\n};\n\nexport default {\n init,\n};\n","const NEWdesktopNavMenus = () => {\n const body = document.querySelector('body');\n const header = body.querySelector('.bali-blinds-main-section');\n const primaryItems = body.querySelectorAll('.main-nav-list .primary-item');\n\n const applyColorClasses = (items) => {\n let counter = 0;\n items.forEach((item) => {\n if (counter === 0) {\n item.classList.add('blue-500');\n } else if (counter === 1) {\n item.classList.add('red-500');\n } else if (counter === 2) {\n item.classList.add('yellow-500');\n }\n if (counter < 2) {\n counter++; /* eslint-disable-line no-plusplus */\n } else {\n counter = 0;\n }\n });\n };\n\n applyColorClasses(primaryItems);\n\n const getColorClass = (item) => {\n let color = '';\n if (item.classList.contains('blue-500')) {\n color = 'blue-500';\n } else if (item.classList.contains('red-500')) {\n color = 'red-500';\n } else if (item.classList.contains('yellow-500')) {\n color = 'yellow-500';\n }\n return color;\n };\n\n const removeColorClasses = (element) => {\n element.classList.remove('red-500', 'yellow-500', 'blue-500');\n };\n\n const closeAllMenus = () => {\n // Remove page overlay\n body.classList.remove('nav-menu-dropdown');\n const subnavDivs = document.querySelectorAll('.new-nav .subnav');\n // Set default content for each menu\n for (let i = 0; i < subnavDivs.length; i++) { /* eslint-disable-line no-plusplus */\n subnavDivs[i].classList.remove('is-active');\n if (subnavDivs[i].querySelector('button') !== null) {\n subnavDivs[i].querySelector('button').setAttribute('aria-expanded', 'false');\n }\n }\n };\n\n const closeMenuOnBodyClick = (event) => {\n if (event.target.closest('.subnav') === null) {\n closeAllMenus();\n document.querySelector('body').removeEventListener('click', closeMenuOnBodyClick);\n }\n };\n\n const disableForMyAccoount = (menuItem) => {\n const { isAuthenticated } = window;\n return menuItem.parentNode.classList.contains('icon-item-my-account') && !isAuthenticated;\n };\n\n\n const onMenuItemMouseEnter = (menuItem) => {\n closeAllMenus();\n if (disableForMyAccoount(menuItem)) {\n return;\n }\n menuItem.parentNode.classList.add('is-active');\n menuItem.setAttribute('aria-expanded', 'true');\n body.addEventListener('click', closeMenuOnBodyClick);\n body.classList.add('nav-menu-dropdown');\n };\n\n const onMenuItemMouseLeave = (menuItem) => {\n document.activeElement.blur();\n if (disableForMyAccoount(menuItem)) {\n return;\n }\n menuItem.parentNode.classList.remove('is-active');\n menuItem.setAttribute('aria-expanded', 'false');\n body.removeEventListener('click', closeMenuOnBodyClick);\n body.classList.remove('nav-menu-dropdown');\n };\n\n const onMenuItemClick = (menuItem) => {\n if (disableForMyAccoount(menuItem)) {\n return;\n }\n if (menuItem.parentNode.classList.contains('is-active')) {\n menuItem.parentNode.classList.remove('is-active');\n menuItem.setAttribute('aria-expanded', 'false');\n body.removeEventListener('click', closeMenuOnBodyClick);\n body.classList.remove('nav-menu-dropdown');\n } else {\n closeAllMenus();\n menuItem.parentNode.classList.add('is-active');\n menuItem.setAttribute('aria-expanded', 'true');\n body.addEventListener('click', closeMenuOnBodyClick);\n body.classList.add('nav-menu-dropdown');\n }\n };\n\n let collectedEvents = [];\n\n const selectEventHandler = () => {\n setTimeout(() => {\n // If click present, route to click event\n let active = collectedEvents.find(item => item.type === 'click');\n if (active) {\n active.callback(active.menuItem);\n } else {\n // Otherwise, use last event in array\n active = collectedEvents[collectedEvents.length - 1];\n if (active.type === 'mouseenter') {\n active.callback(active.menuItem);\n } else if (active.type === 'mouseleave') {\n active.callback(active.menuItem);\n }\n }\n // Otherwise chose last event handler in list\n collectedEvents = [];\n }, 100);\n };\n\n const manageMenuEvents = (menuItem, type, callback) => {\n if (collectedEvents.length === 0) {\n selectEventHandler();\n }\n collectedEvents.push({\n type,\n menuItem,\n callback,\n });\n };\n\n [].map.call(document.querySelectorAll('.subnav > button'), menuItem => (\n menuItem.addEventListener('click', (event) => {\n manageMenuEvents(menuItem, event.type, onMenuItemClick);\n })\n ));\n [].map.call(document.querySelectorAll('.subnav > button'), menuItem => (\n menuItem.parentNode.addEventListener('mouseenter', (event) => {\n manageMenuEvents(menuItem, event.type, onMenuItemMouseEnter);\n })\n ));\n [].map.call(document.querySelectorAll('.subnav > button'), menuItem => (\n menuItem.parentNode.addEventListener('mouseleave', (event) => {\n manageMenuEvents(menuItem, event.type, onMenuItemMouseLeave);\n })\n ));\n [].map.call(document.querySelectorAll('.primary-nav-list .dd-nav'), dropdown => (\n dropdown.addEventListener('mouseleave', () => {\n closeAllMenus();\n body.removeEventListener('click', closeMenuOnBodyClick);\n body.classList.remove('nav-menu-dropdown');\n })\n ));\n\n [].map.call(primaryItems, menuItem => (\n menuItem.addEventListener('mouseenter', () => {\n removeColorClasses(header);\n const color = getColorClass(menuItem);\n header.classList.add(color);\n })\n ));\n\n [].map.call(primaryItems, menuItem => (\n menuItem.addEventListener('mouseleave', () => {\n removeColorClasses(header);\n })\n ));\n\n // close menus when focus leaves header\n document.addEventListener('keydown', (e) => {\n if (e.keyCode === 9) {\n if (!header.contains(document.activeElement)) {\n closeAllMenus();\n }\n }\n });\n};\n\nexport default NEWdesktopNavMenus;\n","// Scroll navigator\n\n// Scolling navbar: when scrolling from top of page small navbar appears\nconst scrollingNav = (selector, toggle) => {\n let y;\n document.addEventListener('scroll', () => {\n y = window.pageYOffset;\n const scrollNav = document.querySelector(selector);\n if (y > 80) {\n scrollNav.classList.add(toggle);\n } else {\n scrollNav.classList.remove(toggle);\n }\n });\n};\n\nexport default {\n scrollingNav,\n};\n","/* eslint-disable no-console */\nimport {\n dispatchSiteEvent,\n siteEventNames,\n} from '../../events/site-events';\n\nexport default class SiteModal {\n constructor(options) {\n if (!options.callbacks) {\n options.callbacks = {};\n }\n this.id = options.id;\n this.onOpen = options.callbacks.onOpen;\n this.onClose = options.callbacks.onClose;\n this.modalDiv = document.querySelector(`#${options.id}`);\n this.isOpen = false;\n this.previousElementInFocus = null;\n // Modal events\n window.addEventListener('resize', this.onResize.bind(this));\n [].map.call(this.modalDiv.querySelectorAll('.close-btn, .modal-overlay, #modal-refine-btn'), btn => btn.addEventListener('click', this.close.bind(this)));\n document.addEventListener('keyup', this.onDocumentModalKeyUp.bind(this));\n // Add open to toggleBtn\n if (options.toggleBtn) {\n options.toggleBtn.addEventListener('click', this.open.bind(this));\n }\n }\n\n onDocumentModalKeyUp(event) {\n if (event.keyCode === 27 && this.isOpen) {\n this.close(); /* eslint-disable-line no-use-before-define */\n }\n }\n\n setPreviousElementInFocus(element) {\n this.previousElementInFocus = element;\n }\n\n resetFocus() {\n if (this.previousElementInFocus) {\n this.previousElementInFocus.focus();\n }\n }\n\n updateHeight() {\n if (!this.isOpen) {\n return;\n }\n const contentHeight = this.modalDiv.querySelector('.modal-content').offsetHeight;\n this.modalDiv.querySelector('.modal-panel').style.height = `${contentHeight + 30}px`;\n }\n\n onResize() {\n if (!this.isOpen) {\n return;\n }\n this.updateHeight();\n }\n\n close() {\n this.isOpen = false;\n if (this.onClose) {\n this.onClose();\n }\n this.modalDiv.classList.remove('modal-visible');\n this.resetFocus();\n dispatchSiteEvent(siteEventNames.ON_MODAL_CLOSE, { id: this.id });\n }\n\n open() {\n this.isOpen = true;\n this.modalDiv.classList.add('modal-visible');\n if (this.onOpen) {\n this.onOpen();\n }\n this.setPreviousElementInFocus(document.activeElement);\n this.modalDiv.focus();\n this.updateHeight();\n dispatchSiteEvent(siteEventNames.ON_MODAL_OPEN, { id: this.id });\n }\n}\n/* eslint-enable no-console */\n","import { resetMobileNav } from './mobile-nav-menus';\n\n// Slide In Nav\nconst removeClass = (selector, toggle) => {\n selector.classList.remove(toggle);\n};\n\nconst toggleClass = (selector, toggle) => {\n selector.classList.toggle(toggle);\n if (selector.classList.contains('slide-in')) {\n resetMobileNav();\n }\n};\n\nconst addListeners = (eventType, options) => {\n let {\n selector,\n toggle,\n activator,\n notActive,\n } = options;\n\n const {\n breakpoint,\n } = options;\n\n selector = document.querySelector(selector);\n toggle = toggle.replace(/\\W/, '');\n activator = document.querySelector(activator);\n notActive = document.querySelector(notActive);\n document.addEventListener(eventType, (event) => {\n event.stopPropagation();\n removeClass(selector, toggle);\n });\n notActive.addEventListener(eventType, (event) => {\n event.stopPropagation();\n });\n activator.addEventListener(eventType, (event) => {\n event.stopPropagation();\n toggleClass(selector, toggle);\n });\n\n window.addEventListener('resize', () => {\n if (window.innerWidth >= breakpoint) {\n removeClass(selector, toggle);\n resetMobileNav();\n }\n });\n};\n\nconst init = (options) => {\n addListeners((navigator.userAgent.match(/(iPad|iPhone)/i) ? 'touchend' : 'click'), options);\n};\n\nexport default {\n init,\n};\n","/* eslint-disable no-console */\nconst addListeners = (options) => {\n const {\n stickyToggle,\n footerSelector,\n headerSelector,\n selector,\n } = options;\n const sidebar = document.querySelector(selector);\n const parent = sidebar.parentNode;\n const footer = document.querySelector(footerSelector);\n const header = document.querySelector(headerSelector);\n const paddingOffset = 26;\n const sidebarTopMargin = 10;\n\n const updateSidebarDims = () => {\n sidebar.style.maxHeight = `${window.innerHeight - (header.clientHeight + sidebarTopMargin)}px`;\n sidebar.style.width = `${parent.clientWidth - paddingOffset}px`;\n };\n\n const updateSidebarPosition = () => {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const sidebarTop = sidebar.parentNode.getBoundingClientRect().top + scrollTop;\n // console.log(`(${sidebarTop}/${window.pageYOffset + header.clientHeight}), stickyToggle: ${sidebar.classList.contains(stickyToggle)}`);\n const footerTop = footer.getBoundingClientRect().top + scrollTop;\n // console.log(`(${footerTop - window.innerHeight}/${window.pageYOffset})`);\n if (footerTop - window.innerHeight <= window.pageYOffset) {\n sidebar.classList.remove(stickyToggle);\n sidebar.removeAttribute('style');\n sidebar.style.bottom = 0;\n return;\n }\n if (sidebarTop <= window.pageYOffset + header.clientHeight + sidebarTopMargin && sidebar.classList.contains(stickyToggle)) {\n return;\n }\n if (sidebarTop > window.pageYOffset + header.clientHeight + sidebarTopMargin && !sidebar.classList.contains(stickyToggle)) {\n return;\n }\n if (sidebarTop <= window.pageYOffset + header.clientHeight + sidebarTopMargin) {\n sidebar.classList.add(stickyToggle);\n sidebar.style.top = `${header.clientHeight + sidebarTopMargin}px`;\n updateSidebarDims();\n } else {\n sidebar.classList.remove(stickyToggle);\n sidebar.removeAttribute('style');\n }\n };\n\n window.addEventListener('scroll', () => {\n updateSidebarPosition();\n });\n\n window.addEventListener('resize', () => {\n updateSidebarPosition();\n updateSidebarDims();\n });\n\n updateSidebarPosition();\n};\n\nconst init = (options) => {\n addListeners(options);\n};\n\nexport default {\n init,\n};\n/* eslint-enable no-console */\n","import { siteEventNames } from '../events/site-events';\nimport { getAllSelectedSwatches } from './swatchbook-utils';\n\nexport default () => {\n const render = (ct) => {\n const navItemSelectors = '.main-nav-list .primary-item-free-swatches, .free-swatches-item .nav-link';\n const indicatorSelector = 'swatch-count items-added-to-swatches';\n const navItemDivs = document.querySelectorAll(navItemSelectors);\n [].map.call(navItemDivs, (navItem) => {\n const indicatorDiv = navItem.querySelector('.swatch-count');\n if (ct === 0 && indicatorDiv) {\n indicatorDiv.remove();\n } else if (ct > 0 && indicatorDiv) {\n indicatorDiv.textContent = ct;\n } else if (ct > 0 && indicatorDiv === null) {\n const span = document.createElement('span');\n span.classList = indicatorSelector;\n span.textContent = ct;\n navItem.appendChild(span);\n }\n });\n };\n\n const update = () => {\n getAllSelectedSwatches()\n .then((data) => {\n const ct = data.length;\n render(ct);\n })\n .catch((error) => {\n console.log(error);\n });\n };\n\n window.addEventListener(siteEventNames.ADD_SWATCH, update);\n window.addEventListener(siteEventNames.REMOVE_SWATCH, update);\n update();\n};\n","const tabRole = () => {\n function changeTabs(e) {\n const { target } = e;\n const parent = target.parentNode;\n const grandparent = parent.parentNode;\n const currentTabs = grandparent.querySelectorAll('[aria-controls]');\n for (let i = 0; i < currentTabs.length; i++) { /* eslint-disable-line no-plusplus */\n // Remove all current selected tabs\n currentTabs[i].setAttribute('aria-selected', false);\n // Hide all tab panels\n document.getElementById(currentTabs[i].getAttribute('aria-controls')).setAttribute('hidden', true);\n }\n // Set this tab as selected\n target.setAttribute('aria-selected', true);\n // Show the selected panel\n document.getElementById(target.getAttribute('aria-controls')).removeAttribute('hidden');\n }\n\n const addTablistEvents = (tabList) => {\n const tabs = tabList.querySelectorAll('[role=\"tab\"]');\n for (let i = 0; i < tabs.length; i++) { /* eslint-disable-line no-plusplus */\n tabs[i].addEventListener('click', changeTabs);\n }\n // Enable arrow navigation between tabs in the tab list\n let tabFocus = 0;\n tabList.addEventListener('keydown', (e) => {\n // Move right\n if (e.keyCode === 39 || e.keyCode === 37) {\n tabs[tabFocus].setAttribute('tabindex', -1);\n if (e.keyCode === 39) {\n tabFocus++; /* eslint-disable-line no-plusplus */\n // If we're at the end, go to the start\n if (tabFocus >= tabs.length) {\n tabFocus = 0;\n }\n // Move left\n } else if (e.keyCode === 37) {\n tabFocus--; /* eslint-disable-line no-plusplus */\n // If we're at the start, move to the end\n if (tabFocus < 0) {\n tabFocus = tabs.length - 1;\n }\n }\n tabs[tabFocus].setAttribute('tabindex', 0);\n tabs[tabFocus].focus();\n }\n });\n };\n\n // init\n const tabList = document.querySelectorAll('[role=\"tablist\"]');\n // Add a click event handler to each tab\n for (let i = 0; i < tabList.length; i++) { /* eslint-disable-line no-plusplus */\n addTablistEvents(tabList[i]);\n }\n};\n\nexport default tabRole;\n","/* eslint-disable no-console */\n// Get the total width of tabnav w/ labels on a single line\n// If width is greater than window.innerWidth - margins/padding\n// Convert nav to a dropdown\n// Events should work the same\n// Vice versa\n// Allow for multiple instances of .tabnav on a page\nconst initTabnav = (wrapper) => {\n const dropdownBtn = wrapper.querySelector('.dropdown-btn');\n const nav = wrapper.querySelector('.tabnav');\n const tablist = wrapper.querySelector('.tabnav ul');\n const btnHeight = 50;\n\n const isDropdownVisible = () => (\n nav.classList.contains('dropdown-nav')\n );\n\n // const isOdd = num => (\n // num % 2 === 1\n // );\n\n const getTotalListItemDims = (ul) => {\n const listItems = ul.querySelectorAll('button span');\n let height = 0;\n let width = 0;\n for (let i = 0; i < listItems.length; i++) { /* eslint-disable-line no-plusplus */\n height += listItems[i].offsetHeight;\n width += listItems[i].offsetWidth;\n }\n // if (wrapper.classList.contains('documents-dropdown')) {\n // // get half the height of the whole list and round up to the next even number\n // let offset = 0;\n // if (isOdd(listItems.length)) {\n // offset = (height / listItems.length);\n // }\n // height = (height / 2) + offset; /* eslint-disable-line prefer-destructuring */\n // }\n return {\n height: height + 3,\n width: width + ((listItems.length - 1) * 15),\n };\n };\n\n const toggleDropdownNav = () => {\n const isExpanded = dropdownBtn.getAttribute('aria-expanded') === 'true';\n dropdownBtn.setAttribute('aria-expanded', String(!isExpanded));\n if (isExpanded) {\n nav.style.height = `${btnHeight}px`;\n setTimeout(() => {\n tablist.style.visibility = 'hidden';\n }, 200);\n } else {\n tablist.removeAttribute('style');\n nav.classList.remove('focus');\n nav.style.height = `${getTotalListItemDims(tablist).height + btnHeight}px`;\n }\n };\n\n const setSelectedTab = (event) => {\n const selectedTabLabel = wrapper.querySelector('.selected-tab');\n selectedTabLabel.textContent = event.target.textContent;\n if (isDropdownVisible()) {\n toggleDropdownNav();\n }\n };\n\n const addDropdownFocus = () => {\n nav.classList.add('focus');\n };\n\n const removeDropdownFocus = () => {\n nav.classList.remove('focus');\n };\n\n const update = () => {\n const addDropdown = getTotalListItemDims(tablist).width >= wrapper.offsetWidth;\n const containsSelector = nav.classList.contains('dropdown-nav');\n if (addDropdown && !containsSelector) {\n dropdownBtn.setAttribute('aria-expanded', 'false');\n nav.classList.add('dropdown-nav');\n tablist.style.visibility = 'hidden';\n } else if (!addDropdown && containsSelector) {\n dropdownBtn.setAttribute('aria-expanded', 'false');\n nav.classList.remove('dropdown-nav');\n nav.removeAttribute('style');\n tablist.removeAttribute('style');\n }\n };\n\n dropdownBtn.addEventListener('click', toggleDropdownNav);\n dropdownBtn.addEventListener('focus', addDropdownFocus);\n dropdownBtn.addEventListener('blur', removeDropdownFocus);\n // Tabs\n const tabBtns = wrapper.querySelectorAll('[role=\"tablist\"] button');\n [].map.call(tabBtns, (btn) => {\n btn.addEventListener('click', setSelectedTab);\n });\n window.addEventListener('resize', update);\n update();\n};\n\nconst tabnav = () => {\n const tabWrappers = document.querySelectorAll('.tabbed-content-wrapper');\n [].map.call(tabWrappers, (tabWrapper) => {\n initTabnav(tabWrapper);\n });\n};\n\nexport default tabnav;\n/* eslint-enable no-console */\n","// Tabs\nconst tabs = () => {\n const tabButtons = document.querySelectorAll('.tab');\n const tabPanels = document.querySelectorAll('.tab-panel');\n const collapseButtons = document.querySelectorAll('.collapse-panel-toggle');\n // const collapsePanels = document.querySelectorAll('.collapse-panel');\n\n [].map.call(tabButtons, tab => tab.addEventListener('click', (event) => {\n [].map.call(tabButtons, (tabButton) => {\n tabButton.parentElement.classList.remove('active');\n tabButton.setAttribute('aria-expanded', 'false');\n });\n [].map.call(tabPanels, panel => panel.classList.remove('active'));\n event.currentTarget.parentElement.classList.add('active');\n event.currentTarget.setAttribute('aria-expanded', 'true');\n document.getElementById(event.currentTarget.getAttribute('data-panel')).classList.add('active');\n }));\n\n [].map.call(collapseButtons, collapse => collapse.addEventListener('click', (event) => {\n if (event.currentTarget.firstElementChild.classList.contains('minus')) {\n event.currentTarget.firstElementChild.classList.remove('minus');\n document.getElementById(event.currentTarget.getAttribute('data-collapse')).classList.remove('active');\n } else {\n // [].map.call(collapseButtons, collapseButton => collapseButton.firstElementChild.classList.remove('minus'));\n // [].map.call(collapsePanels, collapsePanel => collapsePanel.classList.remove('active'));\n event.currentTarget.firstElementChild.classList.add('minus');\n document.getElementById(event.currentTarget.getAttribute('data-collapse')).classList.add('active');\n }\n }));\n};\n\nexport default tabs;\n","// Thumbnail Gallery\nconst setupGallery = () => {\n const controls = document.querySelectorAll('.thumbnail-control');\n const thumbToggles = document.querySelectorAll('.thumbnail-item');\n let [thumbs0, , thumbs2] = document.querySelectorAll('.display-thumbnail');\n const leftButton = document.querySelector('.thumbnail-container .left');\n const rightButton = document.querySelector('.thumbnail-container .right');\n if (thumbs0.previousElementSibling !== null) {\n leftButton.classList.remove('hide');\n } else {\n leftButton.classList.add('hide');\n }\n if (thumbs2 && thumbs2.nextElementSibling !== null) {\n rightButton.classList.remove('hide');\n } else {\n rightButton.classList.add('hide');\n }\n\n Array.prototype.map.call(controls, control => control.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n if (control.classList.contains('left') && thumbs0.previousElementSibling !== null) {\n thumbs0.previousElementSibling.classList.add('display-thumbnail');\n thumbs2.classList.remove('display-thumbnail');\n [thumbs0, , thumbs2] = document.querySelectorAll('.display-thumbnail');\n if (thumbs0.previousElementSibling === null) {\n leftButton.classList.add('hide');\n } else {\n leftButton.classList.remove('hide');\n }\n if (thumbs2.nextElementSibling === null) {\n rightButton.classList.add('hide');\n } else {\n rightButton.classList.remove('hide');\n }\n }\n if (control.classList.contains('right') && thumbs2.nextElementSibling !== null) {\n thumbs0.classList.remove('display-thumbnail');\n thumbs2.nextElementSibling.classList.add('display-thumbnail');\n [thumbs0, , thumbs2] = document.querySelectorAll('.display-thumbnail');\n if (thumbs0.previousElementSibling === null) {\n leftButton.classList.add('hide');\n } else {\n leftButton.classList.remove('hide');\n }\n if (thumbs2.nextElementSibling === null) {\n rightButton.classList.add('hide');\n } else {\n rightButton.classList.remove('hide');\n }\n }\n }));\n\n Array.prototype.map.call(thumbToggles, thumbToggle => thumbToggle.addEventListener('click', () => {\n const toggles = document.querySelectorAll('.thumbnail-item');\n Array.prototype.map.call(toggles, toggle => (toggle.classList.contains('active') ? toggle.classList.remove('active') : false));\n thumbToggle.classList.add('active');\n }));\n};\n\nexport default {\n setupGallery,\n};\n","/* eslint-disable no-console */\nconst setTooltipPosition = (btn, tooltip) => {\n let x = (btn.offsetLeft + btn.offsetWidth) - tooltip.offsetWidth;\n const caret = tooltip.querySelector('.tooltip-caret');\n if (x < 0) {\n // Offset caret\n caret.style.right = `${Math.abs(x) + 5}px`;\n // Reset x to 0\n x = 0;\n } else {\n caret.removeAttribute('style');\n }\n const y = btn.offsetTop - (tooltip.offsetHeight + 12);\n tooltip.style.left = `${x}px`;\n tooltip.style.top = `${y}px`;\n};\n\nconst hideTooltip = (target) => {\n const btn = target.closest('[data-tooltip-id]');\n if (btn === null) {\n return;\n }\n if (btn.getAttribute('disabled') !== null) {\n return;\n }\n const id = btn.getAttribute('data-tooltip-id');\n const tooltip = document.getElementById(id);\n btn.classList.remove('is-active');\n tooltip.classList.remove('show');\n};\n\nconst hideOpenTooltips = () => {\n const tooltipBtns = document.querySelectorAll('[data-tooltip-id].is-active');\n for (let i = 0; i < tooltipBtns.length; i++) { /* eslint-disable-line no-plusplus */\n hideTooltip(tooltipBtns[i]);\n }\n};\n\nconst showTooltip = (target) => {\n const btn = target.closest('[data-tooltip-id]');\n if (btn === null) {\n return;\n }\n if (btn.getAttribute('disabled') !== null) {\n return;\n }\n const id = btn.getAttribute('data-tooltip-id');\n const tooltip = document.getElementById(id);\n hideOpenTooltips();\n btn.classList.add('is-active');\n tooltip.classList.add('show');\n setTooltipPosition(btn, tooltip);\n};\n\nconst toggleTooltip = (target) => {\n const btn = target.closest('[data-tooltip-id]');\n if (btn === null) {\n return;\n }\n if (btn.getAttribute('disabled') !== null) {\n return;\n }\n const id = btn.getAttribute('data-tooltip-id');\n const tooltip = document.getElementById(id);\n if (tooltip.classList.contains('show')) {\n btn.classList.remove('is-active');\n tooltip.classList.remove('show');\n } else {\n hideOpenTooltips();\n btn.classList.add('is-active');\n tooltip.classList.add('show');\n setTooltipPosition(btn, tooltip);\n }\n};\n\nlet collectedEvents = [];\n\nconst selectEventHandler = () => {\n setTimeout(() => {\n // If click present, route to click event\n let active = collectedEvents.find(item => item.type === 'click');\n if (active) {\n toggleTooltip(active.target);\n } else {\n // Otherwise, use last event in array\n active = collectedEvents[collectedEvents.length - 1];\n if (active.type === 'mouseover' || active.type === 'focus') {\n showTooltip(active.target);\n } else if (active.type === 'mouseout' || active.type === 'blur') {\n hideTooltip(active.target);\n }\n }\n collectedEvents = [];\n }, 250);\n};\n\nconst manageTooltipEvents = (event) => {\n const { target, type } = event;\n // Ignore if button is disabled\n if (target.getAttribute('disabled')) {\n return;\n }\n if (collectedEvents.length === 0) {\n selectEventHandler();\n }\n collectedEvents.push({\n target,\n type,\n });\n};\n\nconst addTooltipEventHandlers = (btn) => {\n btn.addEventListener('click', manageTooltipEvents);\n btn.addEventListener('mouseover', manageTooltipEvents);\n btn.addEventListener('mouseout', manageTooltipEvents);\n btn.addEventListener('focus', manageTooltipEvents);\n btn.addEventListener('blur', manageTooltipEvents);\n};\n\nconst addTooltipsOnPageLoad = () => {\n const tooltipBtns = document.querySelectorAll('[data-tooltip-id]');\n if (tooltipBtns.length === 0) {\n return;\n }\n for (let i = 0; i < tooltipBtns.length; i++) { /* eslint-disable-line no-plusplus */\n addTooltipEventHandlers(tooltipBtns[i]);\n }\n};\n\nconst addNewTooltipsToButtonGroup = (options) => {\n const { btns } = options;\n if (btns.length === 0) {\n return;\n }\n for (let i = 0; i < btns.length; i++) { /* eslint-disable-line no-plusplus */\n addTooltipEventHandlers(btns[i]);\n }\n};\n\nconst addNewTooltipToButton = (options) => {\n const { btn } = options;\n addTooltipEventHandlers(btn);\n};\n\nexport {\n addNewTooltipToButton,\n addNewTooltipsToButtonGroup,\n addTooltipsOnPageLoad,\n};\n/* eslint-enable no-console */\n","// uses the bootstrap modal. just swapping content out.\nimport { getVideoPosterUrl, getIdFromAssetUrl, getFileNameFromVideoEmbedUrl } from './widen-utils';\n\nconst videoModal = () => {\n const videosWrapper = document.querySelector('.documents-dropdown');\n const modal = document.querySelector('.modal');\n const modalTitle = modal.querySelector('.modal-title');\n const modalBody = modal.querySelector('.modal-body');\n\n videosWrapper.addEventListener('click', (e) => {\n if (e.target.classList.contains('video-link')) {\n modal.classList.toggle('show');\n const videoSrc = e.target.dataset.videoLink;\n const posterUrl = getVideoPosterUrl(getFileNameFromVideoEmbedUrl(videoSrc), getIdFromAssetUrl(videoSrc));\n modalBody.innerHTML = ``;\n modalTitle.innerHTML = e.target.innerText;\n }\n });\n\n modal.addEventListener('hide.bs.modal', () => {\n const video = modal.querySelector('video');\n modal.classList.toggle('show');\n video.pause();\n video.currentTime = 0;\n });\n};\n\nexport default videoModal;\n"],"sourceRoot":""}