1function searchDebounce(fn,wait=300){let t;return(...args)=>{clearTimeout(t),t=setTimeout(()=>fn.apply(this,args),wait)}}if(!customElements.get("predictive-search")){class PredictiveSearch extends HTMLElement{constructor(){super(),this.cachedResults={},this.input=this.querySelector(".js-search-input"),this.productTypeSelect=this.querySelector(".js-search-product-types"),this.productTypeInput=this.querySelector("#product_type_input"),this.resetBtn=this.querySelector(".js-search-reset"),this.results=this.querySelector(".js-search-results"),this.overlay=this.querySelector(".js-search-overlay"),this.statusEl=this.querySelector(".js-search-status"),this.loadingText=this.getAttribute("data-loading-text")||"Loading...",this.input&&this.addListeners()}disconnectedCallback(){this.close()}addListeners(){this.input.addEventListener("focus",this.handleFocus.bind(this)),this.input.addEventListener("input",searchDebounce(this.handleInput.bind(this),300)),this.productTypeSelect&&this.productTypeSelect.addEventListener("change",this.handleProductTypeChange.bind(this));const form=this.querySelector(".search");form&&form.addEventListener("submit",this.handleSubmit.bind(this))}getQuery(){return this.input?this.input.value.trim():""}handleSubmit(evt){(!this.getQuery().length||this.querySelector('.predictive-search__item[aria-selected="true"]:not(.js-submit)'))&&evt.preventDefault()}handleInput(){this.input.setAttribute("value",this.input.value);const searchTerm=this.getQuery();if(!searchTerm.length){this.close();return}this.getResults(searchTerm)}handleProductTypeChange(evt){this.productTypeInput&&(this.productTypeInput.value=evt.detail?evt.detail.selectedValue:evt.target.value);const query=this.getQuery();query.length>0&&this.getResults(query)}handleFocus(){const searchTerm=this.getQuery();searchTerm.length&&(this.getAttribute("results")==="true"?this.open():this.getResults(searchTerm))}handleKeydown(evt){if(!(evt.target.matches&&evt.target.matches(".tablist__tab")))switch(evt.key){case"ArrowUp":case"ArrowDown":evt.preventDefault(),this.hasAttribute("open")&&this.handleResultsNav(evt.key);break;case"Enter":this.selectOption();break;case"Escape":this.close();const modal=document.querySelector(".search-modal");modal&&modal.classList.contains("is-open")&&window.closeSearchModal&&window.closeSearchModal();break}}handleKeyup(){this.getQuery().length||this.close()}handleResultsNav(key){const selectedResult=this.querySelector('[role="tabpanel"]:not([hidden]) [aria-selected="true"]'),allResults=this.querySelectorAll('[role="tabpanel"]:not([hidden]) .predictive-search__item'),fallbackResults=allResults.length?allResults:this.querySelectorAll(".predictive-search__item");let resultToSelect=fallbackResults[0];if(key==="ArrowUp"){if(!selectedResult)return;resultToSelect=selectedResult.previousElementSibling||fallbackResults[fallbackResults.length-1]}else key==="ArrowDown"&&selectedResult&&(resultToSelect=selectedResult.nextElementSibling||fallbackResults[0]);if(this.statusEl&&(this.statusEl.textContent=""),resultToSelect){if(resultToSelect===selectedResult)return;resultToSelect.setAttribute("aria-selected","true"),selectedResult&&selectedResult.setAttribute("aria-selected","false"),this.setLiveRegionText(resultToSelect.textContent),this.input.setAttribute("aria-activedescendant",resultToSelect.id)}}selectOption(){const selectedResult=this.querySelector('[aria-selected="true"] > .js-search-link');selectedResult&&selectedResult.click()}async getResults(searchTerm){this.setLiveRegionLoadingState();let searchFields="title,product_type,variants.title,vendor";window.theme&&window.theme.settings&&(window.theme.settings.pSearchIncludeSkus&&(searchFields+=",variants.sku"),window.theme.settings.pSearchIncludeTags&&(searchFields+=",tag"));let searchParams="";this.productTypeInput&&this.productTypeInput.value!==""?searchParams=`q=product_type:${encodeURIComponent(this.productTypeInput.value)} AND ${encodeURIComponent(searchTerm)}`:searchParams=`q=${encodeURIComponent(searchTerm)}`;const limit=window.theme&&window.theme.settings&&window.theme.settings.pSearchLimit||4,limitScope=window.theme&&window.theme.settings&&window.theme.settings.pSearchLimitScope||"each";searchParams+=`&${encodeURIComponent("resources[type]")}=product`,searchParams+=`&${encodeURIComponent("resources[limit]")}=${limit}`,searchParams+=`&${encodeURIComponent("resources[limit_scope]")}=${limitScope}`,searchParams+=`&${encodeURIComponent("resources[options][fields]")}=${searchFields}`,searchParams+="§ion_id=predictive-search";const queryKey=searchParams.replace(" ","-").toLowerCase();if(this.cachedResults[queryKey]){this.renderResults(this.cachedResults[queryKey]);return}try{const fetchUrl=`${window.theme&&window.theme.routes&&window.theme.routes.predictiveSearch||"/search/suggest"}?${searchParams}`;
1console.log("Predictive search URL:",fetchUrl);const response=await fetch(fetchUrl);if(!response.ok)throw new Error(response.status);const responseText=await response.text();console.log("Predictive search response length:",responseText.length);const tmpl=document.createElement("template");tmpl.innerHTML=responseText;const resultsEl=tmpl.content.querySelector("#shopify-section-predictive-search");if(console.log("Results element found:",!!resultsEl),resultsEl){const resultsMarkup=resultsEl.innerHTML.replace(/psearch/g,this.input.id);console.log("Results markup length:",resultsMarkup.length),this.cachedResults[queryKey]=resultsMarkup,this.renderResults(resultsMarkup)}else console.log("No results element found in response"),this.close()}catch(error){this.close(),console.error("Predictive search error:",error)}}setLiveRegionLoadingState(){this.setLiveRegionText(this.loadingText)}setLiveRegionText(statusText){this.statusEl&&(this.statusEl.setAttribute("aria-hidden","false"),this.statusEl.textContent=statusText,setTimeout(()=>{this.statusEl.setAttribute("aria-hidden","true")},1e3))}renderResults(resultsMarkup){this.results&&(this.results.innerHTML=resultsMarkup),this.setAttribute("results",!0),this.open()}open(){this.overlay&&this.overlay.classList.add("is-visible"),this.resetBtn&&this.getQuery().length&&(this.resetBtn.hidden=!1),this.input&&this.input.setAttribute("aria-expanded","true"),this.setAttribute("open",""),document.body.classList.add("overlay-predictive-search"),this.keydownHandler=this.keydownHandler||this.handleKeydown.bind(this),this.keyupHandler=this.keyupHandler||this.handleKeyup.bind(this),this.resetBtnClickHandler=this.resetBtnClickHandler||this.close.bind(this),this.overlayClickHandler=this.overlayClickHandler||this.close.bind(this),this.addEventListener("keydown",this.keydownHandler),this.addEventListener("keyup",this.keyupHandler),this.resetBtn&&this.resetBtn.addEventListener("click",this.resetBtnClickHandler),this.overlay&&this.overlay.addEventListener("click",this.overlayClickHandler)}close(evt){evt&&this.resetBtn&&evt.target===this.resetBtn&&(this.input&&(this.input.value=""),this.removeAttribute("results"),this.input&&this.input.focus()),this.results&&!this.getQuery().length&&(this.results.innerHTML="",this.removeAttribute("results"));const selected=this.querySelector('.predictive-search__item[aria-selected="true"]');selected&&selected.setAttribute("aria-selected","false"),this.removeAttribute("open"),this.resetBtn&&(this.resetBtn.hidden=!0),this.overlay&&this.overlay.classList.remove("is-visible"),this.input&&(this.input.setAttribute("aria-activedescendant",""),this.input.setAttribute("aria-expanded","false")),document.body.classList.remove("overlay-predictive-search"),this.removeEventListener("keydown",this.keydownHandler),this.resetBtn&&this.resetBtn.removeEventListener("click",this.resetBtnClickHandler),this.overlay&&this.overlay.removeEventListener("click",this.overlayClickHandler)}}customElements.define("predictive-search",PredictiveSearch)}if(!customElements.get("tabbed-content")){class TabbedContent extends HTMLElement{constructor(){super(),this.tabs=this.querySelectorAll('[role="tab"]'),this.panels=this.querySelectorAll('[role="tabpanel"]'),this.tabs.length&&this.addListeners()}
1addListeners(){this.tabs.forEach(tab=>{tab.addEventListener("click",this.handleTabClick.bind(this)),tab.addEventListener("keydown",this.handleTabKeydown.bind(this))})}handleTabClick(evt){const clickedTab=evt.currentTarget;this.selectTab(clickedTab)}handleTabKeydown(evt){const tabsArray=Array.from(this.tabs),currentIndex=tabsArray.indexOf(evt.currentTarget);let newIndex;switch(evt.key){case"ArrowLeft":newIndex=currentIndex-1,newIndex<0&&(newIndex=tabsArray.length-1),tabsArray[newIndex].focus(),this.selectTab(tabsArray[newIndex]),evt.preventDefault();break;case"ArrowRight":newIndex=currentIndex+1,newIndex>=tabsArray.length&&(newIndex=0),tabsArray[newIndex].focus(),this.selectTab(tabsArray[newIndex]),evt.preventDefault();break;case"Home":tabsArray[0].focus(),this.selectTab(tabsArray[0]),evt.preventDefault();break;case"End":tabsArray[tabsArray.length-1].focus(),this.selectTab(tabsArray[tabsArray.length-1]),evt.preventDefault();break}}selectTab(selectedTab){this.tabs.forEach(tab=>{tab.setAttribute("aria-selected","false"),tab.setAttribute("tabindex","-1")}),selectedTab.setAttribute("aria-selected","true"),selectedTab.setAttribute("tabindex","0"),this.panels.forEach(panel=>{panel.setAttribute("hidden","")});const panelId=selectedTab.getAttribute("aria-controls"),selectedPanel=this.querySelector(`#${panelId}`);selectedPanel&&selectedPanel.removeAttribute("hidden")}}customElements.define("tabbed-content",TabbedContent)}(function(){let searchModal=null,searchOverlay=null,searchInput=null,searchTrigger=null;function setPageInert(on){["#MainContent","#shopify-section-footer","#shopify-section-announcement-bar",".main_header > header","#menu"].forEach(sel=>{const el=document.querySelector(sel);el&&(el.inert=on)})}function openSearchModal(){searchModal&&(searchTrigger=document.activeElement,setPageInert(!0),searchModal.classList.add("is-open"),searchOverlay.classList.add("is-visible"),document.body.classList.add("search-modal-open"),document.dispatchEvent(new CustomEvent("search-modal:open")),setTimeout(()=>{searchInput&&searchInput.focus()},100))}function closeSearchModal(){searchModal&&(searchModal.classList.remove("is-open"),searchOverlay.classList.remove("is-visible"),document.body.classList.remove("search-modal-open"),document.body.classList.remove("overlay-predictive-search"),setPageInert(!1),searchTrigger&&typeof searchTrigger.focus=="function"&&document.body.contains(searchTrigger)&&searchTrigger.focus(),searchTrigger=null,document.dispatchEvent(new CustomEvent("search-modal:close")))}window.openSearchModal=openSearchModal,window.closeSearchModal=closeSearchModal,document.addEventListener("DOMContentLoaded",function(){searchModal=document.querySelector(".search-modal"),searchOverlay=document.querySelector(".search-modal-overlay"),searchInput=searchModal?searchModal.querySelector(".js-search-input"):null,document.querySelectorAll("[data-search-trigger], .btn.search__mobile, .header_right .btn:has(.icon-search)").forEach(trigger=>{trigger.addEventListener("click",function(e){e.preventDefault(),openSearchModal()})});const closeBtn=searchModal?searchModal.querySelector(".search-modal__close"):null;closeBtn&&closeBtn.addEventListener("click",closeSearchModal),searchOverlay&&searchOverlay.addEventListener("click",closeSearchModal),document.addEventListener("keydown",function(e){e.key==="Escape"&&searchModal&&searchModal.classList.contains("is-open")&&closeSearchModal()}),document.addEventListener("click",function(e){if(!searchModal||!searchModal.classList.contains("is-open"))return;const isClickInsideModal=searchModal.contains(e.target),isClickOnTrigger=e.target.closest("[data-search-trigger]");!isClickInsideModal&&!isClickOnTrigger&&closeSearchModal()})})})(); 2//# sourceMappingURL=/cdn/shop/t/283/assets/predictive-search.js.map?v=169489856290228236041788975798
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.