1const CatNavigationManager=(()=>{const config={selectors:{header:".theme__header",collectionNavWrapper:".js-collection-nav-wrapper",searchField:"#fs-search-field",searchFieldValue:"#search-field-value",announcementWrapper:".announcement__wrapper",collectionTextContent:".collection__text-content"},classes:{headerHidden:"header-hidden",atTop:"at-top",headerHiddenFallback:"header-hidden-fallback",stickyActive:"sticky-active"},cssProperties:{headerHeight:"--header-height",collectionNavWrapperHeight:"--collection-nav-wrapper-height",searchHeight:"--search-height",announcementHeight:"--announcement-height",stickyThreshold:"--sticky-threshold"},thresholds:{scroll:50,top:40}};let lastScrollY=0,isScrollingDown=!1,stickyThreshold=0,originalNavPosition=0,isInitialized=!1,hasUserScrolled=!1,resizeHandler=null,cachedHeaderHeight=0,isKeyboardOpen=!1,lastViewportHeight=window.innerHeight,isIgnoringScroll=!1,$header,$collectionNavWrapper,$searchField,$searchFieldValue,$collectionTextContent;function initializeElements(){return $header=document.querySelector(config.selectors.header),$collectionNavWrapper=document.querySelector(config.selectors.collectionNavWrapper),$searchField=document.querySelector(config.selectors.searchField),$searchFieldValue=document.querySelector(config.selectors.searchFieldValue),$collectionTextContent=document.querySelector(config.selectors.collectionTextContent),$header?!0:(console.warn("CatNavigationManager: Header element not found - navigation disabled"),!1)}const isCollectionPage=document.body?.classList.contains("template-collection")??!1,isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<=window.theme?.sizes?.medium;let ticking=!1;function setCSSProperty(property,value){document.documentElement?.style?.setProperty(property,value)}function getElementHeight(element){return element?.offsetHeight??0}function getElementRect(element){return!element||typeof element.getBoundingClientRect!="function"?null:element.getBoundingClientRect()}function setupKeyboardDetection(){isMobile&&(document.addEventListener("focusin",e=>{(e.target?.tagName==="INPUT"||e.target?.tagName==="TEXTAREA")&&(isIgnoringScroll=!0,setTimeout(()=>{isKeyboardOpen||(isIgnoringScroll=!1)},300))}),document.addEventListener("focusout",e=>{(e.target?.tagName==="INPUT"||e.target?.tagName==="TEXTAREA")&&setTimeout(()=>{isIgnoringScroll=!1,isKeyboardOpen=!1},500)}),window.visualViewport?.addEventListener?window.visualViewport.addEventListener("resize",()=>{const currentHeight=window.visualViewport.height,heightDifference=lastViewportHeight-currentHeight;heightDifference>150?(isKeyboardOpen=!0,isIgnoringScroll=!0,isInitialized&&updateHeights()):heightDifference<-150&&setTimeout(()=>{isKeyboardOpen=!1,isIgnoringScroll=!1,isInitialized&&updateHeights()},300),lastViewportHeight=currentHeight}):window.addEventListener("resize",()=>{const currentHeight=window.innerHeight,heightDifference=lastViewportHeight-currentHeight;heightDifference>150?(isKeyboardOpen=!0,isIgnoringScroll=!0,isInitialized&&updateHeights()):heightDifference<-150&&setTimeout(()=>{isKeyboardOpen=!1,isIgnoringScroll=!1,isInitialized&&updateHeights()},300),lastViewportHeight=currentHeight}))}function calculateStickyThreshold(){stickyThreshold=10;const imageNavigation=document.getElementById("image-navigation");imageNavigation&&(stickyThreshold=stickyThreshold+getElementHeight(imageNavigation));const collectionDescription=document.querySelector(".collection__text-content .rte");collectionDescription&&(stickyThreshold=stickyThreshold+getElementHeight(collectionDescription));const collectionHero=document.querySelector(".collection__hero");collectionHero&&(stickyThreshold=stickyThreshold+getElementHeight(collectionHero)),setCSSProperty(config.cssProperties.stickyThreshold,`${stickyThreshold}px`)}function measureOriginalPositions(){if(!document.body)return;if(isMobile){const savedScrollY=window.scrollY;if(originalNavPosition===0){const originalBodyClasses2=document.body.className;document.body.classList.remove(config.classes.stickyActive),document.body.classList.remove(config.classes.headerHiddenFallback),document.body.classList.add(config.classes.atTop),document.body.offsetHeight,isCollectionPage&&$collectionNavWrapper?originalNavPosition=(getElementRect($collectionNavWrapper)?.bottom??0)-savedScrollY:!isCollectionPage&&$searchField?originalNavPosition=(getElementRect($searchField)?.top??0)-savedScrollY:!isCollectionPage&&$collectionNavWrapper&&(originalNavPosition=(getElementRect($collectionNavWrapper)?.bottom??0)-savedScrollY),originalNavPosition<50&&(originalNavPosition=80),document.body.className=originalBodyClasses2}return}const originalBodyClasses=document.body.className;document.body.classList.remove(config.classes.stickyActive),document.body.classList.remove(config.classes.headerHiddenFallback),document.body.classList.add(config.classes.atTop),document.body.offsetHeight;const colTextContentRect=getElementRect($collectionTextContent),headerRect=getElementRect($header);isCollectionPage&&$collectionNavWrapper?originalNavPosition=(colTextContentRect?.bottom??headerRect?.bottom??0)+window.scrollY:!isCollectionPage&&$searchField?originalNavPosition=(getElementRect($searchField)?.top??0)+window.scrollY:!isCollectionPage&&$collectionNavWrapper&&(originalNavPosition=(getElementRect($collectionNavWrapper)?.bottom??0)+window.scrollY),document.body.className=originalBodyClasses}function updateHeights(){if(cachedHeaderHeight=getElementHeight($header),setCSSProperty(config.cssProperties.headerHeight,`${cachedHeaderHeight}px`),setCSSProperty(config.cssProperties.collectionNavWrapperHeight,`${getElementHeight($collectionNavWrapper)}px`),$searchField&&$searchFieldValue){const searchFieldStyle=getComputedStyle($searchField),searchFieldValueStyle=getComputedStyle($searchFieldValue),marginBottom=parseInt(searchFieldValueStyle.getPropertyValue("margin-bottom"))||0,paddingTop=parseInt(searchFieldStyle.getPropertyValue("padding-top"))||0,searchHeight=getElementRect($searchFieldValue)?.height??0;setCSSProperty(config.cssProperties.searchHeight,`${searchHeight+marginBottom+paddingTop}px`)}else setCSSProperty(config.cssProperties.searchHeight,"0px");const desktopAnnouncement=document.querySelector(".announcement__wrapper.desktop"),mobileAnnouncement=document.querySelector(".announcement__wrapper.mobile");let activeAnnouncementHeight=0;const checkIfVisible=element=>{if(!element)return!1;const computedStyle=getComputedStyle(element);return!(computedStyle.opacity==="0"||computedStyle.transform.includes("translateY(-100%)")||parseFloat(computedStyle.height)<=1)};mobileAnnouncement&&checkIfVisible(mobileAnnouncement,"Mobile")?activeAnnouncementHeight=getElementHeight(mobileAnnouncement):desktopAnnouncement&&checkIfVisible(desktopAnnouncement,"Desktop")&&(activeAnnouncementHeight=getElementHeight(desktopAnnouncement)),setCSSProperty(config.cssProperties.announcementHeight,`${activeAnnouncementHeight}px`),calculateStickyThreshold(),measureOriginalPositions()}function handleScroll(){if(isIgnoringScroll||!$header||document.documentElement.hasAttribute("data-scroll-locked"))return;const currentScrollY=window.scrollY,scrollDifference=currentScrollY-lastScrollY;Math.abs(scrollDifference)>5&&(isScrollingDown=scrollDifference>0);const announcementHeight=parseInt(document.documentElement.style.getPropertyValue("--announcement-height"))||config.thresholds.top,dynamicThreshold=Math.max(announcementHeight-5,config.thresholds.top);if(currentScrollY<=dynamicThreshold){$header.classList.remove(config.classes.headerHidden),document.body?.classList.add(config.classes.atTop),document.body?.classList.remove(config.classes.stickyActive,config.classes.headerHiddenFallback),lastScrollY=currentScrollY;return}document.body?.classList.remove(config.classes.atTop);const headerHeight=cachedHeaderHeight||(cachedHeaderHeight=getElementHeight($header));if(currentScrollY<originalNavPosition-headerHeight-20&&!isScrollingDown){document.body?.classList.remove(config.classes.stickyActive,config.classes.headerHiddenFallback),$header.classList.remove(config.classes.headerHidden),lastScrollY=currentScrollY;return}const hasPassedCollectionContent=currentScrollY>stickyThreshold;let shouldActivateSticky=!1;if(hasPassedCollectionContent)if(Math.abs(currentScrollY-stickyThreshold)<10){const headerRect=getElementRect($header);if(isCollectionPage&&$collectionNavWrapper){const navRect=getElementRect($collectionNavWrapper);shouldActivateSticky=headerRect&&navRect&&navRect.top<=headerRect.bottom}else if(!isCollectionPage&&$searchField){const searchRect=getElementRect($searchField);shouldActivateSticky=headerRect&&searchRect&&searchRect.top<=headerRect.bottom}}else shouldActivateSticky=isCollectionPage&&$collectionNavWrapper||!isCollectionPage&&$searchField;shouldActivateSticky?(document.body?.classList.add(config.classes.stickyActive),isScrollingDown&¤tScrollY>stickyThreshold+headerHeight+config.thresholds.scroll?($header.classList.add(config.classes.headerHidden),document.body?.classList.add(config.classes.headerHiddenFallback)):isScrollingDown||($header.classList.remove(config.classes.headerHidden),document.body?.classList.remove(config.classes.headerHiddenFallback))):(document.body?.classList.remove(config.classes.stickyActive,config.classes.headerHiddenFallback),$header.classList.remove(config.classes.headerHidden)),lastScrollY=currentScrollY}function throttledScrollHandler(){ticking||(requestAnimationFrame(()=>{hasUserScrolled||(hasUserScrolled=!0,initializeCatNav()),handleScroll(),ticking=!1}),ticking=!0)}function warmUp(){isInitialized||initializeCatNav()}function initializeCatNav(){isInitialized||(updateHeights(),resizeHandler=()=>{isInitialized&&updateHeights()},document.addEventListener?.("theme:resize:width",resizeHandler),document.addEventListener?.("theme:resize:height",resizeHandler),document.addEventListener?.("theme:announcement:loaded",resizeHandler),isInitialized=!0)}
1function init(){return initializeElements()?(setupKeyboardDetection(),document.addEventListener?.("scroll",throttledScrollHandler,{passive:!0}),!0):!1}function remeasure(){isInitialized&&updateHeights(),calculateStickyThreshold()}function destroy(){window.removeEventListener?.("scroll",throttledScrollHandler),resizeHandler&&(document.removeEventListener?.("theme:resize:width",resizeHandler),document.removeEventListener?.("theme:resize:height",resizeHandler),document.removeEventListener?.("theme:announcement:loaded",resizeHandler)),isInitialized=!1,hasUserScrolled=!1,isIgnoringScroll=!1,isKeyboardOpen=!1,resizeHandler=null,cachedHeaderHeight=0}return{init,destroy,config,calculateStickyThreshold,warmUp,remeasure}})();function scheduleCatNavWarmUp(){const run=()=>{typeof window.requestIdleCallback=="function"?window.requestIdleCallback(()=>CatNavigationManager.warmUp(),{timeout:1200}):setTimeout(()=>CatNavigationManager.warmUp(),200)};document.readyState==="complete"?run():window.addEventListener("load",run,{once:!0})}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",()=>{try{CatNavigationManager.init(),CatNavigationManager.calculateStickyThreshold(),scheduleCatNavWarmUp()}catch(error){console.error("CatNavigationManager: Fatal initialization error:",error)}});else try{CatNavigationManager.init(),CatNavigationManager.calculateStickyThreshold(),scheduleCatNavWarmUp()}catch(error){console.error("CatNavigationManager: Fatal initialization error:",error)}window.addEventListener("pageshow",event=>{if(event&&event.persisted)try{CatNavigationManager.remeasure()}catch(error){console.debug("CatNavigationManager: remeasure on pageshow failed:",error)}}); 2//# sourceMappingURL=/cdn/shop/t/1044/assets/cat-nav.js.map?v=17766936925677105151789137807
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.