class PredictiveSearch extends SearchForm{constructor(){super(),this.cachedResults={},this.predictiveSearchResults=this.querySelector("[data-predictive-search]"),this.allPredictiveSearchInstances=document.querySelectorAll("predictive-search"),this.isOpen=!1,this.abortController=new AbortController,this.searchTerm="",this.extension="",this.limit=this.dataset.limit||6,this.limitScope=this.dataset.limitScope||"each",this.hasAttribute("extended-search")&&(this.extension="-extended"),this.setupEventListeners()}setupEventListeners(){this.input.form.addEventListener("submit",this.onFormSubmit.bind(this)),this.input.addEventListener("focus",this.onFocus.bind(this)),this.addEventListener("focusout",this.onFocusOut.bind(this)),this.addEventListener("keyup",this.onKeyup.bind(this)),this.addEventListener("keydown",this.onKeydown.bind(this)),window.addEventListener("resize",this.onWindowScroll.bind(this))}getQuery(){return this.input.value.trim()}onChange(){super.onChange();const newSearchTerm=this.getQuery(),lastSearchContainer=document.getElementById("last-search"),headerSearch=document.querySelector(".header__search");if((!this.searchTerm||!newSearchTerm.startsWith(this.searchTerm))&&this.querySelector("#predictive-search-results-groups-wrapper")?.remove(),this.updateSearchForTerm(this.searchTerm,newSearchTerm),this.searchTerm=newSearchTerm,!this.searchTerm.length){this.close(!0);return}lastSearchContainer&&(lastSearchContainer.style.display="none"),headerSearch.classList.remove("last-search-overlay"),this.getSearchResults(this.searchTerm)}onFormSubmit(event){(!this.getQuery().length||this.querySelector('[aria-selected="true"] a'))&&event.preventDefault()}onFormReset(event){super.onFormReset(event),super.shouldResetForm()&&(this.searchTerm="",this.abortController.abort(),this.abortController=new AbortController,this.closeResults(!0))}onFocus(){const currentSearchTerm=this.getQuery();currentSearchTerm.length&&(this.searchTerm!==currentSearchTerm?this.onChange():this.getAttribute("results")==="true"?this.open():this.getSearchResults(this.searchTerm))}onFocusOut(){setTimeout(()=>{const hasOverlay=document.querySelector(".header__search").classList.contains("last-search-overlay");hasOverlay?!this.contains(document.activeElement)&&hasOverlay&&!this.hasAttribute("open")&&!this.hasAttribute("quick-add-enabled")&&this.close():!this.contains(document.activeElement)&&!this.hasAttribute("quick-add-enabled")&&this.close()})}onKeyup(event){switch(this.getQuery().length||this.close(!0),event.preventDefault(),event.code){case"ArrowUp":this.switchOption("up");break;case"ArrowDown":this.switchOption("down");break;case"Enter":this.selectOption();break}}onKeydown(event){(event.code==="ArrowUp"||event.code==="ArrowDown")&&event.preventDefault()}updateSearchForTerm(previousTerm,newTerm){const searchForTextElement=this.querySelector("[data-predictive-search-search-for-text]"),currentButtonText=searchForTextElement?.innerText;if(currentButtonText){if(currentButtonText.match(new RegExp(previousTerm,"g")).length>1)return;const newButtonText=currentButtonText.replace(previousTerm,newTerm);searchForTextElement.innerText=newButtonText}}switchOption(direction){if(!this.getAttribute("open"))return;const moveUp=direction==="up",selectedElement=this.querySelector('[aria-selected="true"]'),allVisibleElements=Array.from(this.querySelectorAll("li, button.predictive-search__item")).filter(element=>element.offsetParent!==null);let activeElementIndex=0;if(moveUp&&!selectedElement)return;let selectedElementIndex=-1,i=0;for(;selectedElementIndex===-1&&i<=allVisibleElements.length;)allVisibleElements[i]===selectedElement&&(selectedElementIndex=i),i++;if(this.statusElement.textContent="",!moveUp&&selectedElement?activeElementIndex=selectedElementIndex===allVisibleElements.length-1?0:selectedElementIndex+1:moveUp&&(activeElementIndex=selectedElementIndex===0?allVisibleElements.length-1:selectedElementIndex-1),activeElementIndex===selectedElementIndex)return;const activeElement=allVisibleElements[activeElementIndex];activeElement.setAttribute("aria-selected",!0),selectedElement&&selectedElement.setAttribute("aria-selected",!1),this.input.setAttribute("aria-activedescendant",activeElement.id)}selectOption(){const selectedOption=this.querySelector('[aria-selected="true"] a, button[aria-selected="true"]');selectedOption&&selectedOption.click()}getSearchResults(searchTerm){const queryKey=searchTerm.replace(" ","-").toLowerCase();if(this.setLiveRegionLoadingState(),this.cachedResults[queryKey]){this.renderSearchResults(this.cachedResults[queryKey]);return}fetch(`${routes.predictive_search_url}?q=${encodeURIComponent(searchTerm)}§ion_id=predictive-search${this.extension}&resources[fields]=title,product_type,variants.title,vendor,variants.sku&resources[limit]=${this.limit}&resources[limit_scope]=${this.limitScope}`,{signal:this.abortController.signal}).then(response=>{if(!response.ok){var error=new Error(response.status);throw this.close(),error}return response.text()}).then(text=>{const resultsMarkup=new DOMParser().parseFromString(text,"text/html").querySelector("#shopify-section-predictive-search"+this.extension).innerHTML;this.allPredictiveSearchInstances.forEach(predictiveSearchInstance=>{predictiveSearchInstance.cachedResults[queryKey]=resultsMarkup}),this.renderSearchResults(resultsMarkup)}).catch(error=>{if(error?.code!==20)throw this.close(),error})}setLiveRegionLoadingState(){this.statusElement=this.statusElement||this.querySelector(".predictive-search-status"),this.loadingText=this.loadingText||this.getAttribute("data-loading-text"),this.setLiveRegionText(this.loadingText),this.setAttribute("loading",!0)}setLiveRegionText(statusText){this.statusElement.setAttribute("aria-hidden","false"),this.statusElement.textContent=statusText,setTimeout(()=>{this.statusElement.setAttribute("aria-hidden","true")},1e3)}renderSearchResults(resultsMarkup){this.predictiveSearchResults.innerHTML=resultsMarkup,this.setAttribute("results",!0),this.setLiveRegionResults(),this.open()}setLiveRegionResults(){this.removeAttribute("loading"),this.setLiveRegionText(this.querySelector("[data-predictive-search-live-region-count-value]").textContent)}getResultsMaxHeight(){return this.resultsMaxHeight=window.innerHeight-document.querySelector(".section-header").getBoundingClientRect().bottom,this.resultsMaxHeight}open(){this.predictiveSearchResults.style.maxHeight=`${this.getResultsMaxHeight()}px`,this.setAttribute("open",!0),this.input.setAttribute("aria-expanded",!0),this.isOpen=!0}close(clearSearchTerm=!1){this.closeResults(clearSearchTerm),this.isOpen=!1}closeResults(clearSearchTerm=!1){clearSearchTerm&&(this.input.value="",this.removeAttribute("results"));const selected=this.querySelector('[aria-selected="true"]');selected&&selected.setAttribute("aria-selected",!1),this.input.setAttribute("aria-activedescendant",""),this.removeAttribute("loading"),this.removeAttribute("open"),this.input.setAttribute("aria-expanded",!1),this.resultsMaxHeight=!1,this.predictiveSearchResults.removeAttribute("style")}onWindowScroll(){this.predictiveSearchResults.style.maxHeight=`${this.getResultsMaxHeight()}px`}}customElements.define("predictive-search",PredictiveSearch);class LastSearch extends HTMLElement{constructor(){super(),this.lastSearchContainer=document.getElementById("last-search"),this.predictiveSearchContainer=document.getElementsByTagName("predictive-search"),this.headerSearch=document.querySelector(".header__search"),this.searchInput=document.getElementById("Search-In-Modal"),this.searchForm=document.getElementsByClassName("search search-modal__form"),this.saveButton=document.getElementsByClassName("search__button"),this.termsLimit=this.dataset.termsLimit||3,this.searchForm[0].addEventListener("submit",event=>{this.saveSearch()}),this.searchForm[0].addEventListener("click",()=>{this.showLastSearch()}),document.addEventListener("click",event=>{this.toggleLastSearch(event)}),this.loadSearches()}showLastSearch(){const lastSearchStorage=localStorage.getItem("lastSearch");lastSearchStorage===""||lastSearchStorage==="[]"||lastSearchStorage===null||(this.lastSearchContainer.style.display="block")}toggleLastSearch(event){const target=event.target,inputForm=this.searchInput,iconSearch=document.querySelector(".modal__toggle-open.icon.icon-search"),lastSearchContainer=this.lastSearchContainer,lastSearchStorage=localStorage.getItem("lastSearch");(target===inputForm||target===iconSearch||target===lastSearchContainer)&&!(lastSearchStorage===null||lastSearchStorage===""||lastSearchStorage==="[]")?(this.loadSearches(),this.lastSearchContainer.style.display="block",this.headerSearch.classList.add("last-search-overlay")):(this.lastSearchContainer.style.display="none",this.headerSearch.classList.remove("last-search-overlay"),this.searchInput.value===""&&event.target.classList.contains("last-search-overlay")&&!document.querySelector("predictive-search").hasAttribute("open")&&document.querySelector(".search-modal .modal-overlay").click())}saveSearch(){const searchText=this.searchInput.value;if(!searchText)return;if(!this.checkIfExist(searchText)){let searches=JSON.parse(localStorage.getItem("lastSearch"))||[];searches.push(searchText),localStorage.setItem("lastSearch",JSON.stringify(searches)),this.loadSearches(),this.lastSearchContainer.style.display="none",this.headerSearch.classList.remove("last-search-overlay")}}checkIfExist(searchText){return(JSON.parse(localStorage.getItem("lastSearch"))||[]).some(search=>search===searchText)}loadSearches(){let searches=JSON.parse(localStorage.getItem("lastSearch"))||[];this.lastSearchContainer.innerHTML="",searches.reverse().slice(0,this.termsLimit).forEach((search,index)=>{const searchItem=document.createElement("div"),searchLink=document.createElement("a"),deleteButton=document.createElement("button");searchItem.classList.add("search-item"),searchLink.classList.add("link"),searchLink.setAttribute("href",`/search?q=${search}`),deleteButton.classList.add("reset__button","field__button"),searchLink.textContent=search,deleteButton.innerHTML=``,deleteButton.addEventListener("click",event=>this.deleteSearch(event,index)),searchItem.appendChild(searchLink),searchItem.appendChild(deleteButton),this.lastSearchContainer.appendChild(searchItem)})}deleteSearch(event,index){event.preventDefault(),event.stopPropagation();const lastSearchStorage=localStorage.getItem("lastSearch"),isStorageWithData=lastSearchStorage===null||lastSearchStorage===""||lastSearchStorage==="[]";let searches=JSON.parse(localStorage.getItem("lastSearch"))||[];searches.splice(index,1),localStorage.setItem("lastSearch",JSON.stringify(searches)),this.loadSearches(),isStorageWithData&&(this.lastSearchContainer.style.display="none",this.headerSearch.classList.remove("last-search-overlay"))}}customElements.define("last-search",LastSearch); //# sourceMappingURL=/cdn/shop/t/365/assets/predictive-search.js.map?v=108892398484316810721753250033