1const RECENTLY_VIEWED_KEY="recently-viewed-products",RECENTLY_VIEWED_MAX=20;customElements.get("featured-collection-tabs")||customElements.define("featured-collection-tabs",class extends HTMLElement{constructor(){super(),this.tabButtons=[],this.tabContents=[],this.currentTab=null,this.sectionId=this.dataset.sectionId,this.externalNavPrev=null,this.externalNavNext=null,this.activeSlider=null,this.boundSwiperEvents=null,this.swiperCheckInterval=null,this.emptyTabs=new Set,this.pendingTabs=new Set}connectedCallback(){if(this.tabButtons=this.querySelectorAll("[data-tab]"),this.tabContents=this.querySelectorAll("[data-tab-content]"),this.externalNavPrev=this.querySelector("[data-external-nav-prev]"),this.externalNavNext=this.querySelector("[data-external-nav-next]"),this.tabButtons.length>0){this.addEventListeners();const activeButton=this.querySelector("[data-tab].active");activeButton&&(this.currentTab=activeButton.dataset.tab),this.externalNavPrev&&this.externalNavNext&&(this.initExternalNav(),this.bindToActiveSlider(),this.setupSliderObserver())}else if(this.tabContents.length>0){const activeContent=this.querySelector("[data-tab-content].active");activeContent&&(this.currentTab=activeContent.dataset.tabContent)}this.handleSliderReplaced=this.handleSliderReplaced.bind(this),this.addEventListener("slider:replaced",this.handleSliderReplaced),this.handleSliderEmpty=this.handleSliderEmpty.bind(this),this.addEventListener("slider:empty",this.handleSliderEmpty),!!this.querySelector("product-recommendations, recently-viewed-products")?(this.tabContents.forEach(content=>{content.querySelector("product-recommendations, recently-viewed-products")&&this.pendingTabs.add(content.dataset.tabContent)}),this.setupDynamicEmptyCheck()):this.checkEmptyTabs()}setupSliderObserver(){this.sliderObserver=new MutationObserver(mutations=>{for(const mutation of mutations)for(const node of mutation.addedNodes)if(node.nodeName==="SLIDESHOW-SECTION"){setTimeout(()=>this.bindToActiveSlider(),100);return}}),this.tabContents.forEach(content=>{this.sliderObserver.observe(content,{childList:!0,subtree:!0})})}setupDynamicEmptyCheck(){this.emptyCheckDebounce=null,this.emptyContentObserver=new MutationObserver(()=>{this.pendingTabs.size>0||(this.emptyCheckDebounce&&clearTimeout(this.emptyCheckDebounce),this.emptyCheckDebounce=setTimeout(()=>{this.checkEmptyTabs()},1e3))}),this.tabContents.forEach(content=>{this.emptyContentObserver.observe(content,{childList:!0,subtree:!0})}),this.emptyFallbackTimeout=setTimeout(()=>{this.pendingTabs.clear(),this.checkEmptyTabs()},1e4)}handleSliderReplaced(event){const tabContent=event.target.closest("[data-tab-content]");if(tabContent){const tabId=tabContent.dataset.tabContent;this.pendingTabs.delete(tabId),this.emptyTabs.has(tabId)&&(this.emptyTabs.delete(tabId),this.showTabButton(tabId),this.showSection(),(this.currentTab===null||this.emptyTabs.has(this.currentTab))&&this.switchToTab(tabId))}this.externalNavPrev&&this.externalNavNext&&this.querySelector(`[data-tab-content="${this.currentTab}"]`)?.contains(event.target)&&this.bindToActiveSlider()}initExternalNav(){this.externalNavPrev.addEventListener("click",()=>this.handleNavClick("prev")),this.externalNavNext.addEventListener("click",()=>this.handleNavClick("next")),this.externalNavPrev.addEventListener("keydown",e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.handleNavClick("prev"))}),this.externalNavNext.addEventListener("keydown",e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.handleNavClick("next"))})}handleNavClick(direction){const swiper=this.querySelector(`[data-tab-content="${this.currentTab}"]`)?.querySelector("slideshow-section")?.swiper;swiper&&(direction==="prev"?swiper.slidePrev():swiper.slideNext(),this.updateNavState(swiper))}bindToActiveSlider(){this.unbindSwiperEvents(),this.swiperCheckInterval&&(clearInterval(this.swiperCheckInterval),this.swiperCheckInterval=null);const activeContent=this.querySelector(`[data-tab-content="${this.currentTab}"]`);if(!activeContent)return;const slider=activeContent.querySelector("slideshow-section");if(!slider)return;this.activeSlider=slider;const tryAttach=()=>slider.swiper?(this.swiperCheckInterval&&(clearInterval(this.swiperCheckInterval),this.swiperCheckInterval=null),this.attachSwiperEvents(slider.swiper),!0):!1;tryAttach()||(this.swiperCheckInterval=setInterval(tryAttach,50),setTimeout(()=>{this.swiperCheckInterval&&(clearInterval(this.swiperCheckInterval),this.swiperCheckInterval=null)},1e4))}attachSwiperEvents(swiper){this.updateNavState(swiper),this.boundSwiperEvents={slideChange:()=>this.updateNavState(swiper),reachBeginning:()=>this.updateNavState(swiper),reachEnd:()=>this.updateNavState(swiper)},swiper.on("slideChange",this.boundSwiperEvents.slideChange),swiper.on("reachBeginning",this.boundSwiperEvents.reachBeginning),swiper.on("reachEnd",this.boundSwiperEvents.reachEnd)}unbindSwiperEvents(){if(!this.activeSlider?.swiper||!this.boundSwiperEvents)return;const swiper=this.activeSlider.swiper;swiper.off("slideChange",this.boundSwiperEvents.slideChange),swiper.off("reachBeginning",this.boundSwiperEvents.reachBeginning),swiper.off("reachEnd",this.boundSwiperEvents.reachEnd),this.boundSwiperEvents=null}updateNavState(swiper){if(!this.externalNavPrev||!this.externalNavNext)return;const isBeginning=swiper.isBeginning,isEnd=swiper.isEnd;this.externalNavPrev.classList.toggle("is-disabled",isBeginning),this.externalNavNext.classList.toggle("is-disabled",isEnd),this.externalNavPrev.setAttribute("aria-disabled",isBeginning),this.externalNavNext.setAttribute("aria-disabled",isEnd)}addEventListeners(){this.tabButtons.forEach(button=>{button.addEventListener("click",e=>this.handleTabClick(e)),button.addEventListener("keydown",e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.handleTabClick(e))})})}handleTabClick(event){const tabId=event.currentTarget.dataset.tab;tabId!==this.currentTab&&this.switchToTab(tabId)}switchToTab(tabId){this.tabButtons.forEach(btn=>btn.classList.remove("active"));const targetButton=this.querySelector(`[data-tab="${tabId}"]`);targetButton&&targetButton.classList.add("active"),this.tabContents.forEac
1h(content=>{content.dataset.tabContent===tabId?content.classList.add("active"):content.classList.remove("active")}),this.currentTab=tabId,this.reinitializeSliders(tabId),this.externalNavPrev&&this.externalNavNext&&this.bindToActiveSlider()}isTabEmpty(tabId){if(this.pendingTabs.has(tabId))return!1;const content=this.querySelector(`[data-tab-content="${tabId}"]`);if(!content)return!0;const container=content.querySelector("[data-swiper-container]");return container?container.querySelectorAll("[data-swiper-slide]").length===0:!0}getFirstNonEmptyTab(){for(const button of this.tabButtons){const tabId=button.dataset.tab;if(!this.emptyTabs.has(tabId))return tabId}return null}checkEmptyTabs(){if(this.emptyFallbackTimeout&&(clearTimeout(this.emptyFallbackTimeout),this.emptyFallbackTimeout=null),this.tabButtons.forEach(button=>{const tabId=button.dataset.tab;this.emptyTabs.has(tabId)||this.isTabEmpty(tabId)&&(this.emptyTabs.add(tabId),this.hideTabButton(tabId))}),this.tabButtons.length===0&&this.tabContents.forEach(content=>{const tabId=content.dataset.tabContent;this.emptyTabs.has(tabId)||this.isTabEmpty(tabId)&&this.emptyTabs.add(tabId)}),this.currentTab&&this.emptyTabs.has(this.currentTab)){const nextTab=this.getFirstNonEmptyTab();nextTab?this.switchToTab(nextTab):this.hideSection()}}handleSliderEmpty(event){const tabContent=event.target.closest("[data-tab-content]");if(!tabContent)return;const tabId=tabContent.dataset.tabContent;if(this.pendingTabs.delete(tabId),this.emptyTabs.add(tabId),this.hideTabButton(tabId),tabId===this.currentTab){const nextTab=this.getFirstNonEmptyTab();nextTab?this.switchToTab(nextTab):this.pendingTabs.size===0&&this.hideSection()}}hideTabButton(tabId){const button=this.querySelector(`[data-tab="${tabId}"]`);button&&(button.style.display="none")}hideSection(){if(this.pendingTabs.size>0)return;const section=this.parentElement?.closest("[data-section-id]");section&&(section.style.display="none")}showTabButton(tabId){const button=this.querySelector(`[data-tab="${tabId}"]`);button&&(button.style.display="")}showSection(){const section=this.parentElement?.closest("[data-section-id]");section&&(section.style.display="")}reinitializeSliders(tabId){const activeContent=this.querySelector(`[data-tab-content="${tabId}"]`);if(!activeContent)return;
1activeContent.querySelectorAll("slideshow-section").forEach(slider=>{slider.swiper&&(slider.swiper.slideTo(0,0),slider.swiper.update()),window.dispatchEvent(new Event("resize"))})}disconnectedCallback(){this.unbindSwiperEvents(),this.swiperCheckInterval&&(clearInterval(this.swiperCheckInterval),this.swiperCheckInterval=null),this.sliderObserver&&(this.sliderObserver.disconnect(),this.sliderObserver=null),this.emptyContentObserver&&(this.emptyContentObserver.disconnect(),this.emptyContentObserver=null),this.emptyCheckDebounce&&clearTimeout(this.emptyCheckDebounce),this.emptyFallbackTimeout&&clearTimeout(this.emptyFallbackTimeout),this.handleSliderReplaced&&this.removeEventListener("slider:replaced",this.handleSliderReplaced),this.handleSliderEmpty&&this.removeEventListener("slider:empty",this.handleSliderEmpty),this.tabButtons.forEach(button=>{button.removeEventListener("click",this.handleTabClick),button.removeEventListener("keydown",this.handleTabClick)})}}),customElements.get("recently-viewed-products")||customElements.define("recently-viewed-products",class extends HTMLElement{constructor(){super(),this.loaded=!1,this.sectionId=this.dataset.sectionId,this.limit=parseInt(this.dataset.limit,10)||8,this.currentProduct=this.dataset.currentProduct}connectedCallback(){this.loadRecentlyViewed()}getRecentlyViewed(){try{const stored=localStorage.getItem(RECENTLY_VIEWED_KEY);return stored?JSON.parse(stored):[]}catch{return[]}}async loadRecentlyViewed(){if(this.loaded)return;const filteredHandles=this.getRecentlyViewed().filter(handle=>handle!==this.currentProduct).slice(0,this.limit);if(filteredHandles.length===0){this.handleNoProducts(),this.loaded=!0;return}try{const products=await this.fetchProducts(filteredHandles);products.length>0?this.renderProducts(products):this.handleNoProducts(),this.loaded=!0}catch(error){console.error("Error loading recently viewed products:",error),this.handleNoProducts(),this.loaded=!0}}async fetchProducts(handles){const fetchPromises=handles.map(async handle=>{try{const url=`${window.Shopify.routes.root}products/${handle}?section_id=product-card-fragment`,response=await fetch(url);if(response.ok&&!response.redirected){const html=await response.text();if(html.includes("product-card-fragment"))return{handle,html}}}catch{return null}return null}),valid=(await Promise.all(fetchPromises)).filter(r=>r!==null),validHandles=new Set(valid.map(r=>r.handle)),invalidHandles=handles.filter(h=>!validHandles.has(h));return invalidHandles.length>0&&this.removeFromStorage(invalidHandles),valid}removeFromStorage(handlesToRemove){try{const stored=localStorage.getItem(RECENTLY_VIEWED_KEY);if(!stored)return;const viewed=JSON.parse(stored),removeSet=new Set(handlesToRemove),filtered=viewed.filter(h=>!removeSet.has(h));localStorage.setItem(RECENTLY_VIEWED_KEY,JSON.stringify(filtered))}catch{}}renderProducts(products){const container=this.querySelector("[data-swiper-container]");container&&(container.innerHTML="",products.forEach((product,index)=>{const cardContent=new DOMParser().parseFromString(product.html,"text/html").querySelector(".product-card-fragment");if(cardContent){const slide=document.createElement("div");slide.setAttribute("data-swiper-slide","");const wrapper=document.createElement("div");wrapper.className="wt-slider__card-wrapper",wrapper.style.setProperty("--animation-order",index+1),wrapper.innerHTML=cardContent.innerHTML,slide.appendChild(wrapper),container.appendChild(slide)}}),this.initializeSlider())}handleNoProducts(){const slider=this.querySelector("slideshow-section");slider&&slider.classList.add("wt-featured-collection__empty"),this.dispatchEvent(new CustomEvent("slider:empty",{bubbles:!0}))}initializeSlider(){const slider=this.querySelector("slideshow-section");slider&&(typeof slider.swiperDestroy=="function"&&slider.swiperDestroy(),typeof slider.swiperInitilize=="function"&&slider.swiperInitilize()),window.dispatchEvent(new Event("resize")),requestAnimationFrame(()=>{this.dispatchEvent(new CustomEvent("slider:replaced",{bubbles:!0}))})}});function trackRecentlyViewed(productHandle){if(productHandle)try{let viewed=[];const stored=localStorage.getItem(RECENTLY_VIEWED_KEY);stored&&(viewed=JSON.parse(stored)),viewed=viewed.filter(handle=>handle!==productHandle),viewed.unshift(productHandle),viewed=viewed.slice(0,20),localStorage.setItem(RECENTLY_VIEWED_KEY,JSON.stringify(viewed))}catch(error){console.error("Error tracking recently viewed product:",error)}}document.addEventListener("DOMContentLoaded",()=>{const productHandle=document.querySelector("[data-product-handle]");productHandle&&trackRecentlyViewed(productHandle.dataset.productHandle)}),window.trackRecentlyViewed=trackRecentlyViewed; 2//# sourceMappingURL=/cdn/shop/t/2/assets/featured-collection-tabs.js.map?v=82839227676040831501774318916
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.