PageSourceSearch

https://www.avontic.com/cdn/shop/t/164/assets/avontic-conversion-system.js?v=113399510342972262151791557317

js avontic.com collected 2026-10-09 22:42:54 UTC 29,517 bytes, 2 lines download raw bytes

1(()=>{const clean=value=>String(value||"").slice(0,160),publish=(name,payload={})=>window.AvonticAnalytics?.track?.(name,payload)===!0;if(!window.AvonticConversionIntelligence){window.AvonticConversionIntelligence={publish},document.addEventListener("click",event=>{const tracked=event.target.closest("[data-av-event]");tracked&&publish(clean(tracked.dataset.avEvent),{product:clean(tracked.dataset.avProduct),source_product:clean(tracked.dataset.avSourceProduct),label:clean(tracked.textContent.trim())});const tab=event.target.closest("[data-ph-tab]");tab&&publish("performance_hall_tab",{index:clean(tab.dataset.phTab),label:clean(tab.textContent.trim())});const performanceCta=event.target.closest(".av-ph__cta");performanceCta&&publish("performance_hall_product_click",{label:clean(performanceCta.textContent.trim())})});const observeSections=()=>{if(!("IntersectionObserver"in window))return;const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{!entry.isIntersecting||entry.target.dataset.avViewed==="true"||(entry.target.dataset.avViewed="true",publish("section_view",{section:clean(entry.target.dataset.avSection||entry.target.id||entry.target.className)}),observer.unobserve(entry.target))})},{threshold:.3});document.querySelectorAll("[data-av-section],.av-ph,.av-code,.av-command,.av-bundle").forEach(section=>observer.observe(section))};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",observeSections,{once:!0}):observeSections()}if(customElements.get("avontic-fit-finder"))return;const normalizeText=value=>String(value||"").normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim(),normalizeIdentifier=value=>String(value||"").toUpperCase().replace(/[^A-Z0-9]/g,""),asArray=value=>Array.isArray(value)?value:value==null?[]:[value],replaceToken=(text,token,value)=>String(text||"").split(token).join(String(value));class AvonticFitFinder extends HTMLElement{connectedCallback(){if(this.dataset.ready!=="true"){this.dataset.ready="true",this.dialog=this.querySelector("[data-fit-dialog]"),this.shade=this.querySelector("[data-fit-shade]"),this.closeButton=this.querySelector("[data-fit-close]"),this.searchForm=this.querySelector("[data-fit-search-form]"),this.searchInput=this.querySelector("[data-fit-search]"),this.listbox=this.querySelector("[data-fit-listbox]"),this.family=this.querySelector("[data-fit-family]"),this.model=this.querySelector("[data-fit-model]"),this.spec=this.querySelector("[data-fit-spec]"),this.status=this.querySelector("[data-fit-status]"),this.resultsRegion=this.querySelector("[data-fit-results]"),this.catalogRegion=this.querySelector("[data-fit-catalog]"),this.catalogResults=this.querySelector("[data-fit-catalog-results]"),this.allResultsLink=this.querySelector("[data-fit-all-results]"),this.browse=this.querySelector("[data-fit-browse]"),this.profileLabels=[...this.querySelectorAll("[data-avontic-profile-label]")],this.profileLabels.forEac
1h(label=>{label.dataset.emptyLabel=label.textContent.trim()}),this.cards=new Map([...this.querySelectorAll("[data-fit-card]")].map(card=>{card.querySelectorAll("[data-fit-card-link]").forEach(link=>{link.dataset.baseHref=link.getAttribute("href")});const note=card.querySelector("[data-fit-card-note]");return note&&(note.dataset.originalNote=note.textContent),[card.dataset.routeId,card]}));try{this.config=JSON.parse(this.querySelector("[data-fit-config]")?.textContent||"{}")}catch{this.config={}}this.routes=asArray(this.config.routes).filter(route=>route&&this.cards.has(String(route.id))),this.text=this.config.text||{},this.catalog=this.config.catalog||{},this.catalogCache=new Map,this.catalogControllers={},this.activeSuggestion=-1,this.suggestions=[],this.buildIndex(),this.bindEvents(),this.fill(this.family,this.unique(this.routes.map(route=>route.family)),this.text.familyPlaceholder),this.syncProfile(window.AvonticDeviceProfile?.get?.()),window.location.hash==="#avontic-fit-finder"&&requestAnimationFrame(()=>this.open(document.activeElement))}}disconnectedCallback(){this.abortController?.abort(),Object.values(this.catalogControllers||{}).forEach(controller=>controller?.abort()),window.clearTimeout(this.catalogSuggestionTimer)}buildIndex(){this.identifierIndex=new Map,this.routeIndex=new Map(this.routes.map(route=>[String(route.id),route])),this.deviceSuggestions=[],this.routes.forEach(route=>{const aliases=String(route.aliases||"").split(/[|,\n]/).map(alias=>alias.trim()).filter(Boolean);route._search=normalizeText([route.family,route.model,route.spec,route.product?.title,route.product?.handle,...aliases].join(" ")),this.deviceSuggestions.push({type:"route",value:route.model,label:route.model,meta:`${route.family} \xB7 ${route.spec}`,routeIds:[String(route.id)],search:route._search}),asArray(route.matches).forEach(mapping=>{asArray(mapping?.numbers).forEach(number=>{const identifier=normalizeIdentifier(number);if(!identifier)return;this.identifierIndex.has(identifier)||this.identifierIndex.set(identifier,{type:"identifier",value:identifier,label:identifier,meta:mapping.label||route.model,routeIds:[],productHandles:[],optionLabels:{},search:""});const indexed=this.identifierIndex.get(identifier),productHandle=String(route.product?.handle||route.id);indexed.productHandles.includes(productHandle)||(indexed.productHandles.push(productHandle),indexed.routeIds.push(String(route.id)),indexed.optionLabels[String(route.id)]=mapping.label||route.model),indexed.search=normalizeText([identifier,indexed.meta,route.family,route.model,route.spec,route.product?.title].join(" "))})})});const seenRouteKeys=new Set;this.deviceSuggestions=this.deviceSuggestions.filter(item=>{const key=`${normalizeText(item.label)}|${normalizeText(item.meta)}`;return seenRouteKeys.has(key)?!1:(seenRouteKeys.add(key),!0)}),this.identifierSuggestions=[...this.identifierIndex.values()].sort((a,b)=>a.value.localeCompare(b.value,void 0,{numeric:!0})),this.allSuggestions=[...this.deviceSuggestions,...this.identifierSuggestions]}bindEvents(){this.abortController?.abort(),this.abortController=new AbortController;const{signal}=this.abortController;document.addEventListener("click",event=>{const opener=event.target.closest("[data-fit-open]");if(opener){event.preventDefault(),this.open(opener);return}this.contains(event.target)||this.closeSuggestions()},{signal}),this.closeButton?.addEventListener("click",()=>this.close(),{signal}),this.shade?.addEventListener("click",()=>this.close(),{signal}),this.searchForm?.addEventListener("submit",event=>this.submitSearch(event),{signal}),this.searchInput?.addEventListener("focus",()=>this.showSuggestions(this.searchInput.value),{signal}),this.searchInput?.addEventListener("click",()=>this.showSuggestions(this.searchInput.value),{signal}),this.searchInput?.addEventListener("input",()=>{const rawQuery=this.searchInput.value;this.showSuggestions(rawQuery),this.hideResults(),this.hideCatalogResults(),this.status.textContent=this.text.initialStatus||"",window.clearTimeout(this.catalogSuggestionTimer),normalizeText(rawQuery).length>=2&&(this.catalogSuggestionTimer=window.setTimeout(()=>this.showCatalogSuggestions(rawQuery),275))},{signal}),this.searchInput?.addEventListener("keydown",event=>this.searchKeys(event),{signal}),this.listbox?.addEventListener("mousedown",event=>event.preventDefault(),{signal}),this.listbox?.addEventListener("click",event=>{const option=event.target.closest('[role="option"]');option&&this.chooseSuggestion(Number(option.dataset.suggestionIndex))},{signal}),this.family?.addEventListener("change",()=>this.familyChanged(),{signal}),this.model?.addEventListener("change",()=>this.modelChanged(),{signal}),this.spec?.addEventListener("change",()=>this.browseResults(),{signal}),this.dialog?.addEventListener("keydown",event=>this.dialogKeys(event),{signal}),document.addEventListener("avontic:device-profile:ready",event=>this.syncProfile(event.detail?.state),{signal}),document.addEventListener("avontic:device-profile:change",event=>this.syncProfile(event.detail?.state),{signal})}syncProfile(state){const active=state?.active||window.AvonticDeviceProfile?.getActive?.();
1this.profileLabels.forEach(label=>{label.textContent=active?.label?replaceToken(this.text.profileUsing||"Using __DEVICE__","__DEVICE__",active.label):label.dataset.emptyLabel||"",label.dataset.hasDevice=active?.label?"true":"false"})}routeDevice(route,overrides={}){if(!route?.family||!route?.model)return null;const label=String(overrides.label||route.model).trim(),keySource=overrides.key||`${route.family}-${label}`;return{key:`finder-${normalizeText(keySource).replace(/\s+/g,"-")}`,label,family:route.family,model:String(overrides.model||label),fitGroup:String(overrides.fitGroup||route.model),code:String(overrides.code||"")}}setExplicitProfile(device,reason){if(!device?.label||typeof window.AvonticDeviceProfile?.setActive!="function")return;const state=window.AvonticDeviceProfile.setActive(device,{source:"my-device-finder",reason});this.syncProfile(state)}unique(values){return[...new Set(values.filter(Boolean))].sort((a,b)=>a.localeCompare(b,void 0,{numeric:!0}))}fill(select,values,placeholder){if(!select)return;select.replaceChildren();const emptyOption=document.createElement("option");emptyOption.value="",emptyOption.textContent=placeholder||"",select.append(emptyOption),values.forEach(value=>{const option=document.createElement("option");option.value=value,option.textContent=value,select.append(option)})}suggestionScore(item,query,identifierQuery){if(!query)return item.type==="route"?10:5;if(item.type==="identifier"&&item.value===identifierQuery)return 1e3;if(item.type==="identifier"&&item.value.startsWith(identifierQuery))return 900;const label=normalizeText(item.label);if(label===query)return 850;if(label.startsWith(query))return 700;if(item.search.includes(query))return 500;const words=query.split(" ").filter(Boolean);return words.length&&words.every(word=>this.searchContainsWord(item.search,word))?350:-1}searchContainsWord(search,word){return/^[0-9]+$/.test(word)?String(search||"").split(" ").includes(word):String(search||"").includes(word)}showSuggestions(rawQuery){const query=normalizeText(rawQuery),identifierQuery=normalizeIdentifier(rawQuery);this.suggestions=this.allSuggestions.map(item=>({item,score:this.suggestionScore(item,query,identifierQuery)})).filter(entry=>entry.score>=0).sort((a,b)=>b.score-a.score||a.item.label.localeCompare(b.item.label,void 0,{numeric:!0})).map(entry=>entry.item).slice(0,10),this.renderSuggestionList()}renderSuggestionList(){if(this.listbox.replaceChildren(),this.activeSuggestion=-1,this.searchInput.removeAttribute("aria-activedescendant"),!this.suggestions.length){this.closeSuggestions();return}const fragment=document.createDocumentFragment();this.suggestions.forEach((suggestion,index)=>{const option=document.createElement("div");option.id=`${this.listbox.id}-option-${index}`,option.className="av-fit__option",option.setAttribute("role","option"),option.setAttribute("aria-selected","false"),option.dataset.suggestionIndex=String(index);const value=document.createElement("strong");value.textContent=suggestion.label;const meta=document.createElement("span");meta.textContent=suggestion.meta||this.text.suggestionHint||"";const type=document.createElement("small");type.textContent=suggestion.type==="identifier"?this.text.identifierHint||"":suggestion.type==="catalog"?this.text.catalogSuggestionHint||"Live catalog":this.text.suggestionHint||"",option.append(value,meta,type),fragment.append(option)}),this.listbox.append(fragment),this.listbox.hidden=!1,this.searchInput.setAttribute("aria-expanded","true")}async showCatalogSuggestions(rawQuery){const requestedQuery=normalizeText(rawQuery);if(!(!requestedQuery||requestedQuery!==normalizeText(this.searchInput?.value)))try{const products=await this.fetchCatalog(rawQuery,"suggestion");if(requestedQuery!==normalizeText(this.searchInput?.value))return;const existing=new Set(this.suggestions.map(item=>item.product?.handle||item.value)),catalogSuggestions=products.filter(product=>!existing.has(product.handle||product.title)).slice(0,Math.max(0,10-this.suggestions.length)).map(product=>({type:"catalog",value:product.title,label:product.title,meta:[product.type,this.formatPrice(product.price)].filter(
1Boolean).join(" \xB7 "),product}));if(!catalogSuggestions.length)return;this.suggestions.push(...catalogSuggestions),this.renderSuggestionList()}catch(error){error?.name!=="AbortError"&&publish("av_global_finder_catalog_error",{source:"suggestion"})}}closeSuggestions(){!this.listbox||!this.searchInput||(this.listbox.hidden=!0,this.searchInput.setAttribute("aria-expanded","false"),this.searchInput.removeAttribute("aria-activedescendant"),this.activeSuggestion=-1)}setActiveSuggestion(index){this.suggestions.length&&(this.activeSuggestion=(index+this.suggestions.length)%this.suggestions.length,[...this.listbox.querySelectorAll('[role="option"]')].forEach((option,optionIndex)=>{const isActive=optionIndex===this.activeSuggestion;option.setAttribute("aria-selected",isActive?"true":"false"),option.classList.toggle("is-active",isActive),isActive&&(this.searchInput.setAttribute("aria-activedescendant",option.id),option.scrollIntoView({block:"nearest"}))}))}searchKeys(event){event.key==="ArrowDown"?(event.preventDefault(),this.listbox.hidden&&this.showSuggestions(this.searchInput.value),this.setActiveSuggestion(this.activeSuggestion+1)):event.key==="ArrowUp"?(event.preventDefault(),this.listbox.hidden&&this.showSuggestions(this.searchInput.value),this.setActiveSuggestion(this.activeSuggestion-1)):event.key==="Enter"&&!this.listbox.hidden&&this.activeSuggestion>=0?(event.preventDefault(),this.chooseSuggestion(this.activeSuggestion)):event.key==="Escape"&&!this.listbox.hidden&&(event.preventDefault(),event.stopPropagation(),this.closeSuggestions())}chooseSuggestion(index){const suggestion=this.suggestions[index];if(suggestion)if(this.searchInput.value=suggestion.value,this.closeSuggestions(),suggestion.type==="identifier"){this.renderResults(suggestion.routeIds,suggestion.value,suggestion.optionLabels),this.status.textContent=replaceToken(this.text.exactStatus,"__MODEL__",suggestion.value);const exactRoute=this.routeIndex.get(String(suggestion.routeIds[0])),exactLabel=String(suggestion.meta||exactRoute?.model||suggestion.value).trim();this.setExplicitProfile(this.routeDevice(exactRoute,{key:`${exactRoute?.family||""}-${exactLabel}-${suggestion.value}`,label:`${exactLabel} (${suggestion.value})`,model:exactLabel,fitGroup:Object.values(suggestion.optionLabels||{})[0]||exactRoute?.model||"",code:suggestion.value}),"exact-identifier-suggestion"),publish("av_global_finder_match",{query:clean(suggestion.value),match_type:"exact_identifier",result_count:suggestion.routeIds.length})}else if(suggestion.type==="catalog")this.hideResults(),this.renderCatalogProducts([suggestion.product],suggestion.value),this.setCatalogStatus(1),publish("av_global_finder_match",{query:clean(suggestion.value),match_type:"live_catalog",result_count:1});else{this.hideCatalogResults(),this.renderResults(suggestion.routeIds),this.setResultStatus(suggestion.routeIds.length);const selectedRoute=this.routeIndex.get(String(suggestion.routeIds[0]));this.setExplicitProfile(this.routeDevice(selectedRoute),"explicit-route-suggestion"),publish("av_global_finder_match",{query:clean(suggestion.value),match_type:"device_route",result_count:suggestion.routeIds.length})}}async submitSearch(event){event?.preventDefault();const rawQuery=this.searchInput.value.trim(),query=normalizeText(rawQuery),identifier=normalizeIdentifier(rawQuery);if(!rawQuery){this.showSuggestions(""),this.hideCatalogResults(),this.status.textContent=this.text.initialStatus||"";return}if(this.identifierIndex.has(identifier)){const exact=this.identifierIndex.get(identifier);this.searchInput.value=exact.value,this.closeSuggestions(),this.hideCatalogResults(),this.renderResults(exact.routeIds,exact.value,exact.optionLabels),this.status.textContent=replaceToken(this.text.exactStatus,"__MODEL__",exact.value),publish("av_global_finder_search",{query:clean(rawQuery),result_count:exact.routeIds.length,exact:!0});return}const routeIds=this.routes.filter(route=>{if(!query)return!1;const words=query.split(" ").filter(Boolean);return route._search.includes(query)||words.length>0&&words.every(word=>this.searchContainsWord(route._search,word))}).map(route=>String(route.id));this.closeSuggestions(),this.renderResults(routeIds),this.hideCatalogResults(),this.updateAllResultsLink(rawQuery),this.status.textContent=this.text.searchingStatus||"";try{const products=await this.fetchCatalog(rawQuery,"search");if(normalizeText(rawQuery)!==normalizeText(this.searchInput?.value))return;const curatedHandles=new Set(routeIds.map(routeId=>
1this.routeIndex.get(String(routeId))?.product?.handle).filter(Boolean)),catalogProducts=products.filter(product=>!curatedHandles.has(product.handle));this.renderCatalogProducts(catalogProducts,rawQuery),routeIds.length&&catalogProducts.length?this.setCombinedStatus(routeIds.length,catalogProducts.length):catalogProducts.length?this.setCatalogStatus(catalogProducts.length):routeIds.length?this.setResultStatus(routeIds.length):this.status.textContent=this.text.noMatchStatus||"",publish("av_global_finder_search",{query:clean(rawQuery),result_count:routeIds.length+catalogProducts.length,curated_count:routeIds.length,catalog_count:catalogProducts.length,exact:!1})}catch(error){if(error?.name==="AbortError")return;routeIds.length?this.status.textContent=this.text.catalogUnavailableStatus||"Verified routes are shown. Live catalog search is temporarily unavailable; use the full-results link to continue.":this.status.textContent=this.text.noMatchStatus||"",publish("av_global_finder_catalog_error",{source:"search",query:clean(rawQuery)})}}hideResults(){this.cards.forEach(card=>{card.hidden=!0})}hideCatalogResults(){this.catalogRegion&&(this.catalogRegion.hidden=!0),this.catalogResults?.replaceChildren(),this.allResultsLink&&(this.allResultsLink.hidden=!0)}async fetchCatalog(rawQuery,requestType="search"){const query=String(rawQuery||"").trim(),cacheKey=normalizeText(query);if(!cacheKey)return[];if(this.catalogCache.has(cacheKey))return this.catalogCache.get(cacheKey);this.catalogControllers[requestType]?.abort();const controller=new AbortController;this.catalogControllers[requestType]=controller;const endpoint=this.catalog.searchUrl||`${window.Shopify?.routes?.root||"/"}search/suggest.json`,url=new URL(endpoint,window.location.origin);url.pathname.endsWith(".json")||(url.pathname=`${url.pathname.replace(/\/$/,"")}.json`),url.searchParams.set("q",query),url.searchParams.set("resources[type]","product"),url.searchParams.set("resources[limit]",String(this.catalog.limit||10)),url.searchParams.set("resources[limit_scope]","each"),url.searchParams.set("resources[options][unavailable_products]","last"),url.searchParams.set("resources[options][fields]","title,product_type,tag,body,variants.title,variants.sku,vendor");const response=await window.fetch(url.toString(),{signal:controller.signal,credentials:"same-origin",headers:{Accept:"application/json"}});if(!response.ok)throw new Error(`Predictive search failed with ${response.status}`);const payload=await response.json(),products=asArray(payload?.resources?.results?.products||payload?.resources?.products).map(product=>this.normalizeCatalogProduct(product)).filter(product=>product&&this.isRelevantCatalogProduct(product,query));return this.catalogCache.set(cacheKey,products),products}normalizeCatalogProduct(product){if(!product?.title||!product?.url)return null;const featuredImage=product.featured_image,image=(featuredImage&&typeof featuredImage=="object"?featuredImage.url:featuredImage)||(typeof product.image=="object"?product.image?.url:product.image)||"",url=new URL(product.url,window.location.origin),productHandle=product.handle||url.pathname.split("/products/")[1]?.split("/")[0]||"";return{title:String(product.title),url:`${url.pathname}${url.search}${url.hash}`,handle:String(productHandle),type:String(product.type||product.product_type||""),vendor:String(product.vendor||""),price:product.price,image:String(image||""),matchedVariant:url.searchParams.has("variant")}}isRelevantCatalogProduct(product,rawQuery=""){const text=normalizeText([product.title,product.type,product.vendor].join(" ")),query=normalizeText(rawQuery);if(/(?:watch (?:storage|display|collector|travel|winder|rotator)|storage (?:box|case)|jewelry|sunglass|eyeglass|glasses|watch box|watch collection case)/.test(text))return!1;const watchIntent=/(?:watch|smartwatch|garmin|fitbit)/.test(query),tabletIntent=/(?:ipad|tablet|galaxy tab|surface|tab s|tab a|sm x|sm t)/.test(query),phoneIntent=/(?:iphone|phone|galaxy s[0-9]|galaxy z|z fold|z flip|pixel|motorola|moto|razr)/.test(query);if(watchIntent&&!/(?:watch|smartwatch|garmin|fitbit)/.test(text)||tabletIntent&&!/(?:ipad|tablet|galaxy tab|surface|tab s|tab a|sm x|sm t)/.test(text)||phoneIntent&&!/(?:iphone|phone|galaxy s[
10-9]|galaxy z|z fold|z flip|pixel|motorola|moto|razr)/.test(text))return!1;const modelNumbers=query.split(" ").filter(word=>/^[0-9]{1,4}$/.test(word)),productTokens=text.split(" ");if(modelNumbers.length&&!modelNumbers.every(number=>productTokens.includes(number))&&!product.matchedVariant)return!1;const device=/(?:iphone|ipad|galaxy|samsung|surface|pixel|motorola|moto|apple watch|smartwatch|fitbit|garmin|watch|tablet|phone|device|charging)/,accessory=/(?:case|cover|band|strap|screen|protector|charger|charging|stand|keyboard|mount|holder|sleeve|guard|shield|armor|glass|dock|hub|cable|adapter|pencil)/;return device.test(text)&&accessory.test(text)}renderCatalogProducts(products,rawQuery){if(!this.catalogRegion||!this.catalogResults)return;this.catalogResults.replaceChildren(),this.updateAllResultsLink(rawQuery);const fragment=document.createDocumentFragment();products.forEach(product=>{const card=document.createElement("article");card.className="av-fit__catalog-card";const media=document.createElement("a");if(media.className="av-fit__catalog-media",media.href=product.url,media.dataset.avEvent="fit_catalog_product_click",media.dataset.avProduct=product.handle,media.setAttribute("aria-label",product.title),product.image){const image=document.createElement("img");image.src=product.image,image.alt=product.title,image.loading="lazy",media.append(image)}else{const fallback=document.createElement("span");fallback.textContent="A",fallback.setAttribute("aria-hidden","true"),media.append(fallback)}const content=document.createElement("div"),badge=document.createElement("p");badge.textContent=this.text.catalogBadge||"";const title=document.createElement("h3"),titleLink=document.createElement("a");titleLink.href=product.url,titleLink.textContent=product.title,titleLink.dataset.avEvent="fit_catalog_product_click",titleLink.dataset.avProduct=product.handle,title.append(titleLink);const price=document.createElement("strong");price.textContent=this.formatPrice(product.price),price.textContent||(price.hidden=!0);const meta=document.createElement("small");meta.textContent=[product.type,product.vendor].filter(Boolean).join(" \xB7 ");const note=document.createElement("span");note.className="av-fit__catalog-note",note.textContent=this.text.catalogProductNote||"Open the product to confirm and select your exact device, size, and finish.";const cta=document.createElement("a");cta.className="av-fit__catalog-cta",cta.href=product.url,cta.dataset.avEvent="fit_catalog_product_click",cta.dataset.avProduct=product.handle,cta.textContent=`${this.text.catalogCta||"View product"} \u2192`,content.append(badge,title,price,meta,note,cta),card.append(media,content),fragment.append(card)}),this.catalogResults.append(fragment),this.catalogRegion.hidden=!products.length&&!this.allResultsLink?.href,products.length&&this.catalogRegion.scrollIntoView({behavior:"smooth",block:"nearest"})}updateAllResultsLink(rawQuery){if(!this.allResultsLink||!rawQuery)return;const searchUrl=new URL(this.catalog.fullSearchUrl||"/search",window.location.origin);searchUrl.searchParams.set("q",rawQuery),searchUrl.searchParams.set("type","product"),this.allResultsLink.href=`${searchUrl.pathname}${searchUrl.search}`,this.allResultsLink.hidden=!1}formatPrice(value){if(value==null||value==="")return"";const raw=String(value).trim();if(/[^0-9.,\s-]/.test(raw))return raw;const amount=Number(raw.replace(/,/g,""));if(!Number.isFinite(amount))return raw;try{return new Intl.NumberFormat(document.documentElement.lang||void 0,{style:"currency",currency:this.catalog.currency||"USD"}).format(amount)}catch{return raw}}renderResults(routeIds,modelIdentifier="",optionLabels={}){const activeIds=new Set(routeIds.map(String));this.cards.forEach((card,routeId)=>{const isActive=activeIds.has(String(routeId));if(card.hidden=!isActive,!isActive)return;card.querySelectorAll("[data-fit-card-link]").forEach(link=>{const baseHref=link.dataset.baseHref||link.getAttribute("href");if(!modelIdentifier){link.setAttribute("href",baseHref);return}const url=new URL(baseHref,window.location.origin);url.searchParams.set("model",modelIdentifier),link.setAttribute("href",`${url.pathname}${url.search}${url.hash}`)});const note=card.querySelector("[data-fit-card-note]");if(!note)return;const optionLabel=optionLabels[String(routeId)];note.textContent=optionLabel?replaceToken(this.text.modelMatchNote,"__OPTION__",optionLabel):note.dataset.originalNote||""}),routeIds.length&&this.resultsRegion?.scrollIntoView({behavior:"smooth",block:"nearest"})}setResultStatus(count){let message=replaceToken(this.text.resultStatus,"__COUNT__",count);message=replaceToken(message,"__PLURAL__",count===1?"":"s"),this.status.textContent=message}setCatalogStatus(count){let message=replaceToken(this.text.catalogStatus,"__COUNT__",count);message=replaceToken(message,"__PLURAL__",count===1?"":"es"),this.status.textContent=message}setCombinedStatus(verifiedCount,catalogCount){let message=replaceToken(this.text.combinedStatus,"__VERIFIED__",verifiedCount);message=replaceToken(message,"__VERIFIED_PLURAL__",verifiedCount===1?"":"s"),message=replaceToken(message,"__CATALOG__",catalogCount),message=replaceToken(message,"__CATALOG_PLURAL__",catalogCount===1?"":"es"),this.status.textContent=message}familyChanged(){const family=this.family.value,matchingRoutes=this.routes.filter(route=>route.family===family);this.fill(this.model,this.unique(matchingRoutes.map(route=>route.model)),this.text.modelPlaceholder),this.fill(this.spec,[],this.text.specPlaceholder),this.model.disabled=!family,this.spec.disabled=!0,this.hideResults(),this.hideCatalogResults(),this.status.textContent=family?this.text.familyStatus:this.text.initialStatus,publish("fit_family_selected",{family:clean(family)})}modelChanged(){const family=this.family.value,model=this.model.value,matchingRoutes=this.routes.filter(route=>route.family===family&&route.model===model);this.fill(this.spec,this.unique(matchingRoutes.map(route=>route.spec)),this.text.specPlaceholder),this.spec.disabled=!model,this.hideResults(),this.hideCatalogResults(),this.status.textContent=model?this.text.modelStatus:this.text.familyStatus,publish("fit_model_selected",{family:clean(family),model:clean(model)})}browseResults(){const family=this.family.value,model=this.model.value,spec=this.spec.value,routeIds=this.routes.filter(route=>route.family===family&&route.model===model&&route.spec===spec).map(route=>String(route.id));if(this.renderResults(routeIds),this.hideCatalogResults(),routeIds.length){this.setResultStatus(routeIds.length);const selectedRoute=this.routeIndex.get(String(routeIds[0]));this.setExplicitProfile(this.routeDevice(selectedRoute,{key:`${family}-${model}`,label:model,model,fitGroup:model}),"complete-three-step-browse")}else this.status.textContent=this.text.emptyStatus||"";publish("fit_route_completed",{family:clean(family),model:clean(model),spec:clean(spec),result_count:routeIds.length})}open(opener){!this.dialog||!this.shade||(this.lastFocused=opener||document.activeElement,this.dialog.hidden=!1,this.shade.hidden=!1,requestAnimationFrame(()=>this.classList.add("is-open")),document.documentElement.classList.add("av-fit-lock"),document.querySelectorAll("[data-fit-open]").forEach(button=>button.setAttribute("aria-expanded","true")),this.searchInput?.focus(),this.showSuggestions(this.searchInput?.value||""),publish("fit_finder_opened",{source:clean(opener?.className||opener?.tagName)}))}close(){this.classList.contains("is-open")&&(this.classList.remove("is-open"),this.closeSuggestions(),this.dialog.hidden=!0,this.shade.hidden=!0,document.documentElement.classList.remove("av-fit-lock"),document.querySelectorAll("[data-fit-open]").forEach(button=>
1button.setAttribute("aria-expanded","false")),this.lastFocused?.focus?.())}dialogKeys(event){if(event.key==="Escape"){this.close();return}if(event.key!=="Tab"||!this.classList.contains("is-open"))return;const focusable=[...this.dialog.querySelectorAll("button,input,select,summary,a[href]")].filter(element=>!element.disabled&&!element.closest("[hidden]")),first=focusable[0],last=focusable[focusable.length-1];!first||!last||(event.shiftKey&&document.activeElement===first?(event.preventDefault(),last.focus()):!event.shiftKey&&document.activeElement===last&&(event.preventDefault(),first.focus()))}}customElements.define("avontic-fit-finder",AvonticFitFinder)})();
2//# sourceMappingURL=/cdn/shop/t/164/assets/avontic-conversion-system.js.map?v=113399510342972262151791557317

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.