1class FacetShort extends HTMLSelectElement{constructor(){super(),this.initMotionInView(),this.addEventListener("change",this.onSelectChange.bind(this))}get options(){return this.getElementsByTagName("option")}get fakeSelectElement(){return this.previousElementSibling}initMotionInView(){FoxTheme.Motion.inView(this,this.calcSelectWidth.bind(this),{margin:"200px 0px 200px 0px"})}calcSelectWidth(){const selectStyle=window.getComputedStyle(this),selectedOptionText=this.options[this.selectedIndex].text,textElement=this.createTextElement(selectedOptionText,selectStyle);document.body.appendChild(textElement);const selectWidth=textElement.offsetWidth;textElement.remove(),this.style.setProperty("--width",`${selectWidth+22}px`)}createTextElement(text,style){const textElement=document.createElement("span");return textElement.style.fontFamily=style.fontFamily,textElement.style.fontSize=style.fontSize,textElement.style.fontWeight=style.fontWeight,textElement.style.visibility="hidden",textElement.style.position="absolute",textElement.innerHTML=text,textElement}onSelectChange(event){this.calcSelectWidth(),this.updateFormParams(event)}updateFormParams(event){const form=this.getClosestFacetForm()||this.getFirstFacetForm();if(form){const url=new URL(window.location.href);url.searchParams.set("sort_by",event.target.value),url.searchParams.set("section_id",FoxTheme.utils.getSectionId(form)),url.searchParams.delete("page"),form.renderSection(url.toString(),event)}}getClosestFacetForm(){return this.closest('form[is="facet-form"]')}getFirstFacetForm(){return document.querySelector('form[is="facet-form"]')}}customElements.define("facet-short",FacetShort,{extends:"select"});class PriceRange extends HTMLElement{constructor(){super(),this.minRangeInput=this.querySelector('input[type="range"]:first-child'),this.maxRangeInput=this.querySelector('input[type="range"]:last-child'),this.minPriceInput=this.querySelector('input[name="filter.v.price.gte"]'),this.maxPriceInput=this.querySelector('input[name="filter.v.price.lte"]'),this.minPriceInput.addEventListener("focus",this.minPriceInput.select),this.maxPriceInput.addEventListener("focus",this.maxPriceInput.select),this.minPriceInput.addEventListener("change",this.handleInputMinChange.bind(this)),this.maxPriceInput.addEventListener("change",this.handleInputMaxChange.bind(this)),this.minRangeInput.addEventListener("change",this.handleRangeMinChange.bind(this)),this.maxRangeInput.addEventListener("change",this.handleRangeMaxChange.bind(this)),this.minRangeInput.addEventListener("input",this.handleRangeMinInput.bind(this)),this.maxRangeInput.addEventListener("input",this.handleRangeMaxInput.bind(this))}handleInputMinChange(event){event.preventDefault(),event.target.value=Math.max(Math.min(parseInt(event.target.value),parseInt(this.maxPriceInput.value||event.target.max)-1),event.target.min),this.minRangeInput.value=event.target.value,this.minRangeInput.parentElement.style.setProperty("--range-min",`${parseInt(this.minRangeInput.value)/parseInt(this.minRangeInput.max)*100}%`)}handleInputMaxChange(event){event.preventDefault(),event.target.value=Math.min(Math.max(parseInt(event.target.value),parseInt(this.minPriceInput.value||event.target.min)+1),event.target.max),this.maxRangeInput.value=event.target.value,this.maxRangeInput.parentElement.style.setProperty("--range-max",`${parseInt(this.maxRangeInput.value)/parseInt(this.maxRangeInput.max)*100}%`)}handleRangeMinChange(event){event.stopPropagation(),this.minPriceInput.value=event.target.value,this.minPriceInput.dispatchEvent(new Event("change",{bubbles:!0}))}handleRangeMaxChange(event){event.stopPropagation(),this.maxPriceInput.value=event.target.value,this.maxPriceInput.dispatchEvent(new Event("change",{bubbles:!0}))}handleRangeMinInput(event){event.target.value=Math.min(parseInt(event.target.value),parseInt(this.maxPriceInput.value||event.target.max)-1),event.target.parentElement.style.setProperty("--range-min",`${parseInt(event.target.value)/parseInt(event.target.max)*100}%`),this.minPriceInput.value=event.target.value}handleRangeMaxInput(event){event.target.value=Math.max(parseInt(event.target.value),parseInt(this.minPriceInput.value||event.target.min)+1),event.target.parentElement.style.setProperty("--range-max",`${parseInt(event.target.value)/parseInt(event.target.max)*100}%`),this.maxPriceInput.value=event.target.value}}customElements.define("price-range",PriceRange);class FacetForm extends HTMLFormElement{constructor(){super(),this.dirty=!1,this.cachedMap=new Map,this.addEventListener("change",this.onFormChange),this.addEventListener("submit",this.onFormSubmit)}onFormChange(){this.dirty=!0,this.dispatchEvent(new Event("submit",{cancelable:!0}))}onFormSubmit(event){if(event.preventDefault(),!this.dirty)return;const url=this.buildUrl().toString();this.renderSection(url,event)}buildUrl(){const searchParams=new URLSearchParams(new FormData(this)),url=new URL(this.action);
1return url.search="",searchParams.forEach((value,key)=>url.searchParams.append(key,value)),["page","filter.v.price.gte","filter.v.price.lte"].forEach(item=>{url.searchParams.get(item)===""&&url.searchParams.delete(item)}),url.searchParams.set("section_id",FoxTheme.utils.getSectionId(this)),url}updateURLHash(url){const clonedUrl=new URL(url);clonedUrl.searchParams.delete("section_id"),history.replaceState({},"",clonedUrl.toString())}beforeRenderSection(){const container=document.getElementById("ProductGridContainer"),loadings=document.querySelectorAll("[data-facet-loading]"),translateY=FoxTheme.config.motionReduced?0:50;FoxTheme.Motion.timeline([[container,{y:translateY,opacity:0},{duration:0}]]),setTimeout(()=>{const target=document.querySelector(".collection");window.scrollTo({top:target.getBoundingClientRect().top+window.scrollY-95,behavior:FoxTheme.config.motionReduced?"auto":"smooth"}),loadings&&loadings.forEach(loading=>{loading.classList.add("btn--loading")})},100)}afterRenderSection(){const container=document.getElementById("ProductGridContainer"),items=container.querySelectorAll(".product-card"),loadings=document.querySelectorAll("[data-facet-loading]"),translateY=FoxTheme.config.motionReduced?0:50;FoxTheme.Motion.timeline([[container,{y:[translateY,0],opacity:[0,1]}],[items,{y:[translateY,0],opacity:[0,1],visibility:["hidden","visible"]},{duration:.5,delay:FoxTheme.config.motionReduced?0:FoxTheme.Motion.stagger(.1)}
1]]),loadings&&loadings.forEach(loading=>{loading.classList.remove("btn--loading")}),document.dispatchEvent(new CustomEvent("collection:rerendered"))}renderSection(url,event){this.cachedMap.has(url)?this.renderSectionFromCache(url,event):this.renderSectionFromFetch(url,event),this.hasAttribute("data-history")&&this.updateURLHash(url),this.dirty=!1}renderSectionFromFetch(url,event){this.beforeRenderSection();const start=performance.now();fetch(url).then(response=>response.text()).then(responseText=>{const execution=performance.now()-start;setTimeout(()=>{this.renderFilters(responseText,event),this.renderFiltersActive(responseText),this.renderProductGridContainer(responseText),this.renderProductCount(responseText),this.renderSortBy(responseText),this.renderSortByMobile(responseText),FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.facetUpdate,{responseText}),this.cachedMap.set(url,responseText),this.afterRenderSection()},execution>250?0:250)})}renderSectionFromCache(url,event){this.beforeRenderSection(),setTimeout(()=>{const responseText=this.cachedMap.get(url);this.renderFilters(responseText,event),this.renderFiltersActive(responseText),this.renderProductGridContainer(responseText),this.renderProductCount(responseText),this.renderSortBy(responseText),this.renderSortByMobile(responseText),FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.facetUpdate,{responseText}),this.afterRenderSection()},250)}renderFilters(responseText,event){const facetElements=new DOMParser().parseFromString(responseText,"text/html").querySelectorAll("#FacetFiltersContainer [data-filter], #MobileFacetFiltersContainer [data-filter]"),matchesIndex=element=>{const jsFilter=event?event.target.closest("[data-filter]"):void 0;return jsFilter?element.dataset.index===jsFilter.dataset.index:!1};Array.from(facetElements).filter(element=>!matchesIndex(element)).forEach(element=>{const filter=document.querySelector(`[data-filter][data-index="${element.dataset.index}"]`);filter!==null&&(filter.tagName==="DETAILS"?filter.querySelector("summary + *").innerHTML=element.querySelector("summary + *").innerHTML:filter.innerHTML=element.innerHTML)})}renderFiltersActive(responseText){const id="FacetFiltersActive";if(document.getElementById(id)===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html");document.getElementById(id).innerHTML=parsedHTML.getElementById(id)&&parsedHTML.getElementById(id).innerHTML}renderProductGridContainer(responseText){const id="ProductGridContainer";if(document.getElementById(id)===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html");document.getElementById(id).innerHTML=parsedHTML.getElementById(id)&&parsedHTML.getElementById(id).innerHTML;const layoutSwitcher=document.querySelector("#ProductGridWrapper layout-switcher");layoutSwitcher&&layoutSwitcher.onButtonClick(layoutSwitcher.querySelector(".btn--active"))}renderProductCount(responseText){const id="ProductCount";if(document.getElementById(id)===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html");document.getElementById(id).innerHTML=parsedHTML.getElementById(id)&&parsedHTML.getElementById(id).innerHTML}renderSortBy(responseText){const id="SortByContainer";if(document.getElementById(id)===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html");document.getElementById(id).innerHTML=parsedHTML.getElementById(id)&&parsedHTML.getElementById(id).innerHTML}renderSortByMobile(responseText){const id="SortByContainerMobile";if(document.getElementById(id)===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html");document.getElementById(id).innerHTML=parsedHTML.getElementById(id)&&parsedHTML.getElementById(id).innerHTML}}customElements.define("facet-form",FacetForm,{extends:"form"});class FacetRemove extends HTMLAnchorElement{constructor(){super(),this.addEventListener("click",this.onClick)}onClick(event){const form=this.closest('form[is="facet-form"]')||document.querySelector('form[is="facet-form"]');if(form){event.preventDefault();const url=new URL(this.href);
1url.searchParams.set("section_id",FoxTheme.utils.getSectionId(form)),form.renderSection(url.toString(),event)}}}customElements.define("facet-remove",FacetRemove,{extends:"a"});class FacetCount extends HTMLElement{constructor(){super()}facetUpdateUnsubscriber=void 0;connectedCallback(){this.facetUpdateUnsubscriber=FoxTheme.pubsub.subscribe(FoxTheme.pubsub.PUB_SUB_EVENTS.facetUpdate,this.onFacetUpdate.bind(this))}disconnectedCallback(){this.facetUpdateUnsubscriber&&this.facetUpdateUnsubscriber()}get itemCount(){return parseInt(this.innerText.replace(/\D/g,""))}onFacetUpdate(event){const facetCount=new DOMParser().parseFromString(event.responseText,"text/html").querySelector("facet-count");this.innerText=facetCount&&facetCount.innerHTML,this.hidden=this.itemCount===0}}customElements.define("facet-count",FacetCount);class LoadMoreButton extends HTMLButtonElement{constructor(){super(),this.onClickHandler=this.onClick.bind(this)}connectedCallback(){this.addEventListener("click",this.onClickHandler),this.getAttribute("type")=="infinite"&&FoxTheme.Motion.inView(this,this.onClickHandler,{margin:"200px 0px 200px 0px"})}disconnectedCallback(){this.removeEventListener("click",this.onClickHandler)}onClick(){if(this.classList.contains("btn--loading"))return;this.loadingState();const url=this.setUrl().toString();fetch(url).then(response=>response.text()).then(responseText=>{this.renderPagination(responseText),this.renderProductGridContainer(responseText)})}renderPagination(responseText){const productGridContainer=document.getElementById("ProductGridContainer");if(productGridContainer===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html"),pagination=productGridContainer.querySelector(".pagination"),source=parsedHTML.querySelector(".pagination");source?pagination.innerHTML=source.innerHTML:pagination.remove()}renderProductGridContainer(responseText){const productGridContainer=document.getElementById("ProductGridContainer");if(productGridContainer===null)return;const parsedHTML=new DOMParser().parseFromString(responseText,"text/html"),productList=productGridContainer.querySelector(".products-list"),gridList=productGridContainer.querySelector("grid-list"),source=parsedHTML.querySelector(".products-list");source&&productList&&(source.querySelectorAll(".card").forEach(item=>{productList.appendChild(item)}),gridList&&gridList.reload())}setUrl(){const url=new URL(this.getAttribute("action"));return url.searchParams.set("section_id",FoxTheme.utils.getSectionId(this)),url}loadingState(){this.classList.add("pointer-events-none"),this.classList.add("btn--loading")}}customElements.define("load-more-button",LoadMoreButton,{extends:"button"});class LayoutSwitcher extends HTMLElement{constructor(){super(),this.cookieName="sleektheme:collection-layout",this.initLayoutMode(),this.buttons.forEach(button=>{button.addEventListener("click",this.onButtonClick.bind(this))})}get buttons(){return this.querySelectorAll("button")}onButtonClick(event){const target=event.target?event.target:event;this.changeLayout(target,target.dataset.layoutMode)}initLayoutMode(){if(FoxTheme.config.hasLocalStorage){const layoutMode=window.localStorage.getItem(this.cookieName);if(layoutMode!==null){const target=this.querySelector(`button[data-layout-mode="${layoutMode}"]`);target&&this.changeLayout(target,layoutMode)}}}changeLayout(target,layoutMode){const productGrid=document.getElementById("ProductsList");if(!productGrid)return;["f-grid-1-cols","f-grid-2-cols"].forEach(removed=>{productGrid.classList.remove(removed)});let addedClass="";switch(layoutMode){case"grid-1":addedClass="f-grid-1-cols";break;case"grid-2":addedClass="f-grid-2-cols";break}productGrid.classList.add(addedClass),this.buttons.forEach(button=>{button.classList.remove("btn--active")}),target.classList.add("btn--active"),FoxTheme.config.hasLocalStorage&&window.localStorage.setItem(this.cookieName,layoutMode)}}customElements.define("layout-switcher",LayoutSwitcher); 2//# sourceMappingURL=/cdn/shop/t/3/assets/facets.js.map?v=107541151745716596901770385317
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.