class HeaderSearch extends HTMLElement{constructor(){super(),this.buildProductObject(),this.cachedResults={},this.isOpen=!1,this.controller=null,this.isMobile=window.innerWidth<1025,this.buildSelectors(),this.isMobile||this.setModalPosition(),this.setupEventListeners(),this.initialRender(!1)}setModalPosition(){this.isMobile=window.innerWidth<1025;const modelData=this.getResultsMaxHeight();if(this.isMobile)this.model.style.setProperty("--modelTopPos",modelData.announcementBottom+"px"),this.model.style.setProperty("--modelMaxHeight","100vh"),this.predictiveSearchResults.style.setProperty("--productContainerMaxHeight","100%");else{const productContainerMaxHeight=window.innerHeight-modelData.modelTopPos-140;this.model.style.setProperty("--modelTopPos",modelData.modelTopPos+"px"),this.model.style.setProperty("--modelMaxHeight",modelData.modelMaxHeight+"px"),this.predictiveSearchResults.style.setProperty("--productContainerMaxHeight",productContainerMaxHeight+"px")}}buildProductObject(){const defaultConfig=window._theme.headerSearch||null;defaultConfig&&(this.defaultConfig=defaultConfig,this.defaultConfig.defaultProducts=this.defaultConfig.defaultProducts||[],this.defaultConfig.defaultProducts=this.defaultConfig.defaultProducts.map(product=>{const product_url=`/products/${product.handle}`,variants=product.variants.map((variant,index)=>{const metafieldValue=variant.metafields&&variant.metafields.custom&&variant.metafields.custom.brightperl_variant_inventory?variant.metafields.custom.brightperl_variant_inventory:"",expressShippingAllow=variant.metafields&&variant.metafields.custom&&variant.metafields.custom.allow_express_shipping?variant.metafields.custom.allow_express_shipping:"";return{...variant,available:variant.available?"1":"0",image_alt:variant.featured_image?variant.featured_image.alt:"",image_link:variant.featured_image?variant.featured_image.src:"",link:`${product_url}?variant=${variant.id}`,list_price:variant.compare_at_price?variant.compare_at_price/100:null,price:variant.price/100,quantity_total:variant.inventory_quantity||0,sku:variant.sku||"",taxable:variant.taxable?"1":"0",variant_id:variant.id,search_variant_metafields_data:{variant_metafield_69f1d8722b9c470908fa53fe850945fb:metafieldValue,variant_metafield_070071a13a8ea5aafeb0b99afa0c101f:expressShippingAllow}}});return{...product,product_id:product.id,link:`/products/${product.handle}`,image_link:product.featured_image,shopify_images:product.images||[],tags:product.tags.join("[:ATTR:]"),list_price:product.compare_at_price/100,price:product.price/100,shopify_variants:variants}}),this.defaultConfig.defaultProducts=this.defaultConfig.defaultProducts.filter(p=>p.available),delete window._theme.headerSearch)}buildSelectors(){this.model=this.querySelector("[data-ajax-search-results]"),this.input=this.querySelector("input[data-header-search]"),this.form=this.input.closest("form"),this.formResetBtn=this.form.querySelector('[type="reset"]'),this.predictiveSearchResults=this.querySelector("[data-search-products]"),this.predictiveSearchViewAllBtns=this.querySelectorAll("[data-search-view-all]"),this.overlay=document.querySelector(".wrapper-overlay"),this.closeSearchBtns=this.querySelectorAll("[data-close-search]"),this.trendingSearcheList=this.querySelectorAll("[data-list-trending-searches]"),this.brandsList=this.querySelectorAll("[data-list-brands]"),this.suggestionList=this.querySelectorAll("[data-list-suggestions]"),this.pagesList=this.querySelectorAll("[data-list-pages]"),this.noResultTextNodes=this.querySelectorAll("[data-noresult-block] span"),this.searchIcon=document.querySelector('.site-header .head-search input[name="head-search"]'),this.statusElement=this.statusElement||this.form.querySelector(".predictive-search-status")}setupEventListeners(){const self=this;this.form.addEventListener("submit",this.onFormSubmit.bind(this)),this.input.addEventListener("input",debounce(event=>{this.onChange(event)},300).bind(this)),this.form.addEventListener("reset",evt=>{this.setAttribute("data-result",!1),this.initialRender(!1),this.close(),this.controller&&this.controller.abort()}),this.closeSearchBtns.forEach(btn=>{btn.addEventListener("click",function(evt){self.close(!0)})}),this.input.addEventListener("focus",this.onFocus.bind(this)),this.addEventListener("focusout",this.onFocusOut.bind(this)),this.predictiveSearchViewAllBtns.forEach(btn=>{btn.addEventListener("click",evt=>{evt.preventDefault();const term=this.getQuery();window.location.href="/search?q="+encodeURIComponent(term)})}),this.isMobile&&this.searchIcon.addEventListener("focus",evt=>{evt.preventDefault(),this.open(),this.input.focus()}),this.isMobile||(window.onresize=debounce(evt=>{this.setModalPosition()}))}getQuery(){return this.input.value.trim()}onChange(event){this.input.removeAttribute("aria-invalid"),this.removeAttribute("data-empty");const searchTerm=this.getQuery();if(this.noResultTextNodes.forEach(elem=>elem.innerHTML='"'+searchTerm+'"'),this.form.querySelector('input[name="q"]').value=searchTerm,!searchTerm.length){this.setAttribute("data-result",!1),this.initialRender(),this.setLiveRegionText("found top trending searches & prodducts");return}this.setAttribute("data-result",!0),this.getSearchResults(searchTerm,event)}onFormSubmit(event){(!this.getQuery().length||this.querySelector('[aria-selected="true"] a'))&&event.preventDefault()}onFocus(event){this.open();const searchTerm=this.getQuery();searchTerm.length&&(this.getAttribute("results")==="true"?this.open():this.getSearchResults(searchTerm,event))}onFocusOut(evt){const isInsideModal=this.contains(evt.target),isRelatedTargetInsideModal=evt.relatedTarget?this.contains(evt.relatedTarget):!0;setTimeout(()=>{(!isInsideModal||!isRelatedTargetInsideModal)&&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()}switchOption(direction){if(!this.getAttribute("open"))return;const moveUp=direction==="up",selectedElement=this.querySelector('[aria-selected="true"]'),allElements=this.querySelectorAll("li");let activeElement=this.querySelector("li");moveUp&&!selectedElement||(this.statusElement.textContent="",!moveUp&&selectedElement?activeElement=selectedElement.nextElementSibling||allElements[0]:moveUp&&(activeElement=selectedElement.previousElementSibling||allElements[allElements.length-1]),activeElement!==selectedElement&&(activeElement.setAttribute("aria-selected",!0),selectedElement&&selectedElement.setAttribute("aria-selected",!1),this.setLiveRegionText(activeElement.textContent),this.input.setAttribute("aria-activedescendant",activeElement.id)))}selectOption(){const selectedProduct=this.querySelector('[aria-selected="true"] a, [aria-selected="true"] button');selectedProduct&&selectedProduct.click()}getSearchResults(searchTerm,event){const queryKey=searchTerm.toLowerCase();this.setLiveRegionLoadingState();const cachedRes=this.cachedResults[queryKey];if(cachedRes){cachedRes.totalItems===0?this.renderEmptyResult(cachedRes,event):this.renderSearchResults(cachedRes);return}this.controller&&this.controller.abort(),this.controller=new AbortController;const signal=this.controller.signal;this.form.setAttribute("data-loading",!0);const maxSuggestion=5,menTags=["gender_Men","GENDER_Men","Gender_Men","Gender_men","gender_men"],womenTags=["Gender_Women","gender_women","GENDER_Women","gender_Women"];let tagQuery="";const searchTerms=queryKey?queryKey.trim().toLowerCase().split(" "):[];searchTerms.includes("women")||searchTerms.includes("woman")?tagQuery="&restrictBy[snize_facet1]="+womenTags.join("|"):searchTerms.includes("men")||searchTerms.includes("man")?tagQuery="&restrictBy[snize_facet1]="+menTags.join("|"):tagQuery="";const BASE_URL="https://searchserverapi.com/getwidgets?api_key=2K7F7z9Y9V&output=jsonp&items=true&maxResults=8&suggestions=true&suggestionsMaxResults="+maxSuggestion+"&pages=true&pagesMaxResults=10&categories=true&categoryStartIndex=0&categoriesMaxResults=5"+tagQuery;fetch(`${BASE_URL}&q=${encodeURIComponent(searchTerm)}`,{signal}).then(response=>{if(!response.ok){const error=new Error(response.status);throw this.close(),error}return response.json()}).then(res=>{this.cachedResults[queryKey]=res,res.totalItems===0?this.renderEmptyResult(res,event):this.renderSearchResults(res),this.controller=null}).catch(error=>{throw error})}setLiveRegionLoadingState(){this.statusElement=this.statusElement||this.form.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)}initialRender(openModel=!0){if(!this.defaultConfig)return;this.setAttribute("data-result",!1);let trendingSearchesHtml="",productsHtml="";this.defaultConfig.defaultSuggestions.length&&(trendingSearchesHtml=this.buildSuggestionList(this.defaultConfig.defaultSuggestions)),this.defaultConfig.defaultProducts.length&&(productsHtml=this.buildProductGrid(this.defaultConfig.defaultProducts.slice(0,10),this.defaultConfig.productTypes.slice(0,10))),trendingSearchesHtml!==""&&this.trendingSearcheList.forEach(list=>{list.closest(".search-result-col-row").classList.toggle("hidden",trendingSearchesHtml===""),list.innerHTML=trendingSearchesHtml}),productsHtml!==""&&(this.predictiveSearchResults.innerHTML=productsHtml),this.predictiveSearchViewAllBtns.forEach(btn=>{btn.classList.add("hidden")}),this.form.removeAttribute("data-loading"),openModel&&this.open()}renderSearchResults(res){if(!res.totalItems||res.totalItems===0)return;this.removeAttribute("data-empty");const totalProducts=res.totalItems,brandsHtml=this.buildBrandsList(res.categories),suggestionsHtml=this.buildSuggestionList(res.suggestions),trendingSearchesHtml=this.buildSuggestionList(this.defaultConfig.defaultSuggestions),pagesHtml=this.buildPagesList(res.pages),productsHtml=this.buildProductGrid(res.items.slice(0,12));this.brandsList.forEach(list=>{list.closest(".search-result-col-row").classList.toggle("hidden",brandsHtml===""),list.innerHTML=brandsHtml}),this.suggestionList.forEach(list=>{list.closest(".search-result-col-row").classList.toggle("hidden",suggestionsHtml===""),list.innerHTML=suggestionsHtml}),this.trendingSearcheList.forEach(list=>{list.closest(".search-result-col-row").classList.toggle("hidden",trendingSearchesHtml===""),list.innerHTML=trendingSearchesHtml}),this.pagesList.forEach(list=>{list.closest(".search-result-col-row").classList.toggle("hidden",pagesHtml===""),list.innerHTML=pagesHtml}),this.predictiveSearchResults.innerHTML=productsHtml,this.setAttribute("results",!0),this.setLiveRegionResults(totalProducts),this.predictiveSearchViewAllBtns.forEach(btn=>{btn.innerHTML="View All "+totalProducts+" Products",totalProducts>8?btn.classList.remove("hidden"):btn.classList.add("hidden")}),this.form.removeAttribute("data-loading"),this.open()}renderEmptyResult(res,event){if(event&&event.type!=="focus"){const searchTerm=this.getQuery();_theme.track.trackData({event:"zero_search_dropdown",search_term:searchTerm})}this.input.setAttribute("aria-invalid",!0),this.setLiveRegionText("Sorry, nothing found for the search term "+this.getQuery()),this.setAttribute("data-empty",!0),this.initialRender(!1)}updateHtml(html,str,data){let newhtml=html;return newhtml.indexOf(str)>-1?(newhtml=newhtml.replace(str,data),this.updateHtml(newhtml,str,data)):newhtml}buildBrandsList(brands){if(!brands||brands.length===0)return"";let mainHtml='