1customElements.get("search-drawer")||customElements.define("search-drawer",class extends DrawerElement{get shouldAppendToBody(){return!1}get input(){return this.querySelector('input[type="search"]')}get focusElement(){return this.querySelector('input[type="search"]')}}),customElements.get("search-typed")||customElements.define("search-typed",class extends BaseElement{constructor(){super(),Motion.inView(this,this.init.bind(this))}connectedCallback(){super.connectedCallback();const input=this.input;if(!input)return;const hide=this.hide.bind(this);["pointerdown","input"].forEach(event=>this.on(input,event,hide))}get input(){return this.closest("form")?.querySelector('input[type="search"]')}get startDelay(){return this.hasAttribute("data-delay")?parseFloat(this.getAttribute("data-delay")):0}hide(){this.parentElement.hasAttribute("hidden")||this.parentElement.setAttribute("hidden","")}async init(){this.initialized||(this.initialized=!0,this.insertCursor(),await this.start(this.getAttribute("data-first-text"),this.startDelay),setTimeout(async()=>{await this.reset(),await this.start(this.getAttribute("data-last-text"),0)},600))}async start(text,delay){if(this.textContent=text,!this.scrollWidth){this.style.removeProperty("width"),this.cursor.classList.add("blink");return}await Motion.animate(this,{width:[0,`${this.scrollWidth}px`]},{duration:1,delay}).finished,this.cursor.classList.add("blink")}async reset(){this.cursor.classList.remove("blink"),this.scrollWidth&&await Motion.animate(this,{width:0},{duration:.25}).finished}insertCursor(){this.cursor||(this.cursor=document.createElement("span"),this.cursor.className="typed-cursor",this.cursor.setAttribute("aria-hidden",!0),this.cursor.textContent="|",this.parentElement.insertBefore(this.cursor,this.nextSibling))}}),customElements.get("predictive-search")||customElements.define("predictive-search",class extends BaseElementMixin(HTMLFormElement){constructor(){super(),this.cachedMap=new Map}connectedCallback(){super.connectedCallback(),this.focusElement=this.input,this.on(this.resetButton,"click",this.clear.bind(this)),this.on(this.input,"input",theme.utils.debounce(this.onChange.bind(this),300)),this.on(this.input,"focus",this.onFocus.bind(this)),this.on(document,"keydown",this.onKeydown.bind(this))}disconnectedCallback(){super.disconnectedCallback(),this.renderAbortController?.abort()}get input(){return this.querySelector('input[type="search"]')}get resetButton(){return this.querySelector('button[type="reset"]')}get dropdownParent(){return this.closest(".collection")||this.closest(".search-inline")}onFocus(){this.dropdownParent&&(this.open(),this.getQuery().length!==0&&this.renderSection(this.buildUrl().toString()))}onKeydown(event){event.key==="Escape"&&(!this.dropdownParent||!document.body.classList.contains("predictive-search-open")||(this.close(),this.input.blur()))}open(){this.dropdownParent&&document.body.classList.add("predictive-search-open")}close(){document.body.classList.remove("predictive-search-open")}clear(event=null){event&&event.preventDefault(),this.input.value="",this.input.focus(),this.removeAttribute("results")}getQuery(){return this.input.value.trim()}buildUrl(){const url=new URL(`${theme.routes.shop_url}${theme.routes.predictive_search_url}`);return url.searchParams.set("q",this.getQuery()),url.searchParams.set("resources[limit]",this.hasAttribute("data-limit")?parseInt(this.getAttribute("data-limit")):3),url.searchParams.set("resources[limit_scope]","each"),url.searchParams.set("section_id",theme.utils.sectionId(this)),url}onChange(){if(this.getQuery().length===0){this.clear();return}this.open();const url=this.buildUrl().toString();this.renderSection(url)}renderUnsupportedHint(){if(!theme.strings.searchUnsupportedLocale?.length){this.close(),this.removeAttribute("results");return}const id="PredictiveSearchResults-"+theme.utils.sectionId(this),target=document.getElementById(id);if(target){target.replaceChildren();const p=document.createElement("p");p.className="predictive-search__hint text-sm leading-tight",p.textContent=theme.strings.searchUnsupportedLocale,target.appendChild(p)}this.setAttribute("results","")}renderSection(url){if(!theme.config.predictiveSearch){this.renderUnsupportedHint();return}
1this.cachedMap.has(url)?this.renderSectionFromCache(url):this.renderSectionFromFetch(url)}renderSectionFromCache(url){const responseText=this.cachedMap.get(url);this.renderSearchResults(responseText),this.setAttribute("results","")}renderSectionFromFetch(url){this.renderAbortController?.abort(),this.renderAbortController=new AbortController,this.setAttribute("loading",""),fetch(url,{signal:this.renderAbortController.signal}).then(response=>{if(!response.ok)throw new Error(`Predictive search ${response.status}`);return response.text()}).then(responseText=>{this.renderSearchResults(responseText),this.cachedMap.set(url,responseText),this.cachedMap.size>30&&this.cachedMap.delete(this.cachedMap.keys().next().value),this.removeAttribute("loading"),this.setAttribute("results","")}).catch(error=>{if(error.message.includes("417")){theme.config.predictiveSearch=!1,this.removeAttribute("loading"),this.renderUnsupportedHint();return}error.name!=="AbortError"&&console.error(error)})}renderSearchResults(responseText){const id="PredictiveSearchResults-"+theme.utils.sectionId(this),target=document.getElementById(id);if(!target)return;const parsed=new DOMParser().parseFromString(responseText,"text/html").getElementById(id);parsed&&target.replaceChildren(...parsed.childNodes)}},{extends:"form"}),customElements.get("predictive-search-overlay")||customElements.define("predictive-search-overlay",class extends OverlayElement{connectedCallback(){super.connectedCallback(),this.on(this,"click",this.onClick)}onClick(){setTimeout(()=>{document.body.classList.remove("predictive-search-open")})}}),customElements.get("voice-search")||customElements.define("voice-search",class extends MagnetButton{constructor(){super(),this.SpeechRecognition=window.SpeechRecognition||window.webkitSpeechRecognition}connectedCallback(){if(super.connectedCallback(),!!this.SpeechRecognition&&(this.input=this.closest("form")?.querySelector('input[type="search"]'),!!this.input)){if(theme.config.hasSessionStorage&&window.sessionStorage.getItem(`${theme.settings.themeName}:voice-unavailable`)){this.setAttribute("hidden","");return}this.syncMicrophonePermission(),this.on(this,"click",this.onClick.bind(this))}}disconnectedCallback(){super.disconnectedCallback(),this.recognition?.abort?.()}async syncMicrophonePermission(){try{const status=await navigator.permissions.query({name:"microphone"}),sync=()=>this.toggleAttribute("hidden",status.state==="denied"||this.unavailable===!0);sync(),this.on(status,"change",sync)}catch{this.removeAttribute("hidden")}}onClick(event){if(event.preventDefault(),this.listening){this.recognition?.stop();return}this.recognition=new this.SpeechRecognition,this.recognition.lang=document.documentElement.lang||"en",this.recognition.interimResults=!1,this.recognition.maxAlternatives=1,this.recognition.addEventListener("result",this.onResult.bind(this)),this.recognition.addEventListener("end",this.onEnd.bind(this)),this.recognition.addEventListener("error",this.onEnd.bind(this)),this.listening=!0,this.classList.add("listening"),this.recognition.start()}onResult(event){const transcript=Array.from(event.results).map(result=>result[0].transcript).join("");this.input.value=transcript,this.input.focus(),this.input.dispatchEvent(new Event("input",{bubbles:!0}))}onEnd(event){this.listening=!1,this.classList.remove("listening"),event.error==="service-not-allowed"&&this.markUnavailable()}markUnavailable(){this.unavailable=!0,theme.config.hasSessionStorage&&window.sessionStorage.setItem(`${theme.settings.themeName}:voice-unavailable`,"true"),this.closest("form")?.querySelector("[data-voice-unavailable]")?.removeAttribute("hidden"),this.setAttribute("hidden","")}},{extends:"button"}); 2//# sourceMappingURL=/cdn/shop/t/38/assets/search.js.map?v=39802489162528207491785597263
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.