1if(!customElements.get("variant-picker")){class VariantPicker extends HTMLElement{constructor(){super(),this.quickBuyContainer=this.closest(".js-quickbuy"),this.featuredProductContainer=this.closest(".cc-featured-product"),this.section=this.quickBuyContainer||this.featuredProductContainer||this.closest(".shopify-section"),this.optionSelectors=this.querySelectorAll(".option-selector:not(.option-selector--custom)"),this.productAvailable=this.classList.contains("variant-picker--product-available"),this.variant=this.getVariantData(),this.variantRequestId=0,this.addListeners(),this.updateVariantContent(),!this.quickBuyContainer&&!this.featuredProductContainer&&setTimeout(this.applySearchParams.bind(this),0),this.setAttribute("loaded","")}addListeners(){this.boundHandleVariantChange=this.handleVariantChange.bind(this),this.addEventListener("change",this.boundHandleVariantChange),this.boundHandleLabelMouseEnter=this.handleLabelMouseEnter.bind(this),this.querySelectorAll(".opt-label, .custom-select__option").forEach(el=>{el.addEventListener("mouseenter",this.boundHandleLabelMouseEnter),el.addEventListener("touchstart",this.boundHandleLabelMouseEnter,{passive:!0,once:!0}),el.addEventListener("mouseleave",VariantPicker.handleLabelMouseLeave)})}removeListeners(){this.removeEventListener("change",this.boundHandleVariantChange),this.querySelectorAll(".opt-label, .custom-select__option").forEach(el=>{el.removeEventListener("mouseenter",this.boundHandleLabelMouseEnter),el.removeEventListener("touchstart",this.boundHandleLabelMouseEnter),el.removeEventListener("mouseleave",VariantPicker.handleLabelMouseLeave)})}updateVariantContent(){this.updateStatusClasses(),this.updateAddToCartButton(),this.updateSwatchLabel(),this.updateAvailability()}getProductForm(){return this.section.querySelector(".js-product-form")}handleLabelMouseEnter(evt){const label=evt.currentTarget;if(label.dataset.preloaded||label.dataset.preloadTimeout||label.matches('.opt-btn:checked + .opt-label, [aria-selected="true"]'))return;const input=label.htmlFor?document.getElementById(label.htmlFor):label,optionIds=this.getSelectedOptionIds(),inputOptionIndex=Array.from(this.optionSelectors).indexOf(input.closest(".option-selector"));optionIds[inputOptionIndex]=input.dataset.valueId,optionIds.indexOf(null)===-1&&(label.dataset.preloadTimeout=setTimeout(()=>{label.dataset.preloaded=!0,label.removeAttribute("data-preload-timeout");const combinedProductUrl=input.dataset.productUrl,url=this.constructVariantUrl(combinedProductUrl,optionIds,input.dataset.variantId);theme.fetchCache.preload(url.toString())},250))}static handleLabelMouseLeave(evt){const label=evt.currentTarget;clearTimeout(label.dataset.preloadTimeout),label.removeAttribute("data-preload-timeout")}constructVariantUrl(combinedProductUrl,optionIds,variantId){let url=null;combinedProductUrl?(url=new URL(combinedProductUrl,window.location.origin),url.searchParams.set("option_values",optionIds.join(","))):url=new URL(this.dataset.url,window.location.origin);const sectionIds=[this.dataset.sectionId];return!this.quickBuyContainer&&!this.featuredProductContainer&&document.querySelectorAll(".cc-variant-dependent-section [data-section-id]").forEach(e=>{e.closest(".rte")||sectionIds.push(e.dataset.sectionId)}),url.searchParams.set("sections",sectionIds.join(",")),combinedProductUrl||!variantId||optionIds.includes(null)?url.searchParams.set("option_values",optionIds.join(",")):url.searchParams.set("variant",variantId),url}handleVariantChange(evt){const selectedOptionIds=this.getSelectedOptionIds();this.updateSwatchLabel();const combinedProductUrl=evt.target.dataset.productUrl||evt.detail?.productUrl,variantId=evt.target.dataset.variantId||evt.detail?.variantId,url=this.constructVariantUrl(combinedProductUrl,selectedOptionIds,variantId);this.variantRequestId+=1;const currentRequestId=this.variantRequestId;theme.fetchCache.fetch(url.toString()).then(responseText=>{if(currentRequestId!==this.variantRequestId)return;const responseData=JSON.parse(responseText);Object.entries(responseData).forEach(([section,htmlStr])=>{const html=new DOMParser().parseFromString(htmlStr,"text/html"),sectionId=`shopify-section-${section}`;let target=this.section,newContent=html.getElementById(sectionId);if(this.section.id!==sectionId)if(!this.quickBuyContainer)target=document.getElementById(sectionId);else{const quickBuyTemplate=html.getElementById("quick-buy-template")?.content.querySelector(".js-product");quickBuyTemplate&&(newContent=quickBuyTemplate)}this.updateContent(target,newContent,combinedProductUrl)}),evt.detail?.noFocus||document.querySelector(`#${evt.target.id}-button, input#${evt.target.id}`)?.focus();const newVariantPicker=this.section.querySelector("variant-picker");setTimeout(()=>newVariantPicker.announceChange(),10)})}
1announceChange(){this.getSelectedOptionIds().includes(null)||this.updateUrl(),this.dispatchEvent(new CustomEvent("on:variant:change",{bubbles:!0,detail:{form:this.getProductForm(),variant:this.variant,selectedOptions:this.getSelectedOptions()}}))}updateContent(target,newContent,productChange){if(!target||!newContent)return;if(this.getSelectedOptions().indexOf(null)!==-1&&!productChange){target.querySelectorAll(".js-option[data-value-id]").forEach(input=>{const newInput=newContent.querySelector(`.js-option[data-value-id="${input.dataset.valueId}"]`);input.className=newInput.className,newInput.dataset.variantId?input.dataset.variantId=newInput.dataset.variantId:delete input.dataset.variantId,input.classList.contains("custom-select__option")&&(input.innerHTML=newInput.innerHTML)}),this.updateStatusClasses();return}let replaceSelector="[data-dynamic-variant-content]";productChange&&(replaceSelector+=", [data-dynamic-product-content]"),target.querySelectorAll(replaceSelector).forEach(toReplace=>{const replaceWith=toReplace.dataset.dynamicVariantContent?newContent.querySelector(`[data-dynamic-variant-content="${CSS.escape(toReplace.dataset.dynamicVariantContent)}"]`):newContent.querySelector(`[data-dynamic-product-content="${CSS.escape(toReplace.dataset.dynamicProductContent)}"]`);if(!replaceWith)return;document.dispatchEvent(new CustomEvent("on:variant:before-replace-element",{bubbles:!0,detail:{toReplace,replaceWith}})),this.quickBuyContainer&&theme.quickBuy&&theme.quickBuy.convertToQuickBuyContent(replaceWith,this.quickBuyContainer.dataset.productUrl),toReplace.querySelectorAll('input[id]:not([type="hidden"]), select[id]').forEach(sourceInput=>{if(sourceInput.matches(".custom-select__native")){const customSelectId=sourceInput.id.replace("-native",""),targetInput=replaceWith.querySelector(`#${CSS.escape(customSelectId)}`),option=targetInput.querySelector(`.js-option[data-value="${CSS.escape(sourceInput.value)}"]`);setTimeout(()=>{targetInput.selectOption(option)},0)}else{const targetInput=replaceWith.querySelector(`#${CSS.escape(sourceInput.id)}`);if(!targetInput)return;
1sourceInput.type==="radio"||sourceInput.type==="checkbox"?targetInput.toggleAttribute("checked",sourceInput.checked):targetInput.value=sourceInput.value}}),replaceWith.matches('input[name="id"]')?([...replaceWith.attributes].forEach(attr=>toReplace.setAttribute(attr.name,attr.value)),toReplace.value=replaceWith.value,setTimeout(()=>{toReplace.dispatchEvent(new Event("change",{bubbles:!0}))},0)):toReplace.replaceWith(replaceWith),replaceWith.querySelectorAll("variant-picker").forEach(el=>el.removeListeners()),this.getSelectedOptionIds().forEach(optionId=>{const toSelect=replaceWith.querySelector(`.option-selector .custom-select__option[data-value-id="${optionId}"]:not([aria-selected="true"])`);toSelect&&setTimeout(()=>{toSelect.closest("custom-select").selectOption(toSelect)},0)}),setTimeout(()=>{replaceWith.querySelectorAll("variant-picker").forEach(el=>{el.addListeners(),el.updateVariantContent()})},10)})}updateStatusClasses(){const selectedOpts=this.getSelectedOptionIds(),nullCount=selectedOpts.filter(x=>x===null).length,isSingleNullAtEnd=nullCount===1&&selectedOpts[selectedOpts.length-1]===null;this.classList.toggle("variant-picker--preselection",nullCount>0),this.classList.toggle("variant-picker--pre-last-selection",nullCount>0&&!isSingleNullAtEnd)}updateSwatchLabel(){this.querySelectorAll(".option-selector:has(.js-color-text)").forEach(option=>{const label=option.querySelector(".js-color-text"),input=option.querySelector('.js-option:is(:checked, [aria-selected="true"])');label.textContent=input?input.value:""})}updateAvailability(){this.dataset.availability==="prune"&&this.querySelectorAll('.js-option.is-unavailable:is(:checked, [aria-selected="true"])').forEach(selected=>{const toSelect=selected.closest(".option-selector").querySelector('.js-option:not(.is-unavailable, [data-value=""])');toSelect&&setTimeout(()=>{toSelect.closest("custom-select")?toSelect.closest("custom-select").selectOption(toSelect):toSelect.click()},20)})}updateAddToCartButton(){const productForm=this.getProductForm();if(productForm){if(this.addBtn=productForm.querySelector('[name="add"]'),!this.productAvailable){this.addBtn.disabled=!0,this.addBtn.textContent=theme.strings.noStock;return}if(this.getSelectedOptions().indexOf(null)!==-1){this.addBtn.dataset.preselectionDisabled==="true"?(this.addBtn.disabled=!0,this.addBtn.textContent=this.addBtn.dataset.preselectionText):(this.addBtn.disabled=!1,this.addBtn.textContent=this.addBtn.dataset.addToCartText);return}if(!this.variant){this.addBtn.disabled=!0,this.addBtn.textContent=theme.strings.noVariant;return}if(!this.variant.available){this.addBtn.disabled=!0,this.addBtn.textContent=theme.strings.noStock;return}this.addBtn.disabled=!1,this.addBtn.textContent=this.addBtn.dataset.addToCartText}}updateUrl(){if(this.dataset.updateUrl==="false")return;const url=this.variant?`${this.dataset.url}?variant=${this.variant.id}`:this.dataset.url;window.history.replaceState({},"",url)}getVariantData(){const dataEl=this.section.querySelector('variant-picker [type="application/json"]');return dataEl?JSON.parse(dataEl.textContent):null}getSelectedOptions(){const selectedOptions=[];return this.optionSelectors.forEach(selector=>{if(selector.dataset.selectorType==="dropdown"){const selected=selector.querySelector('.custom-select__option[aria-selected="true"]');selectedOptions.push(selected&&selected.dataset.value!==""?selected.dataset.value:null)}else{const selected=selector.querySelector("input:checked");selectedOptions.push(selected?selected.value:null)}}),selectedOptions}getSelectedOptionIds(){const selectedOptionIds=[];return this.optionSelectors.forEach(selector=>{if(selector.dataset.selectorType==="dropdown"){const selected=selector.querySelector('.custom-select__option[aria-selected="true"]');selectedOptionIds.push(selected&&selected.dataset.value!==""?selected.dataset.valueId:null)}else{const selected=selector.querySelector("input:checked");selectedOptionIds.push(selected?selected.dataset.valueId:null)}}),selectedOptionIds}applySearchParams(){const searchParams=new URLSearchParams(window.location.search);
1Array.from(searchParams.keys()).forEach(key=>{const value=searchParams.get(key),matchingOptionSelector=Array.from(this.optionSelectors).find(x=>x.dataset.option===key);if(matchingOptionSelector)if(matchingOptionSelector.dataset.selectorType==="dropdown"){const colorOptionDropdown=matchingOptionSelector.querySelector(`.custom-select__option[data-value="${CSS.escape(value)}"]:not([aria-selected="true"])`);if(colorOptionDropdown){const customSelect=colorOptionDropdown.closest("custom-select"),convertEvent=evt=>{evt.detail.noFocus=!0,customSelect.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1,detail:evt.detail}))};customSelect.addEventListener("change",convertEvent,{once:!0}),customSelect.selectOption(colorOptionDropdown)}}else{const matchingInput=matchingOptionSelector.querySelector(`input[value="${CSS.escape(value)}"]:not(:checked)`);matchingInput&&(matchingOptionSelector.querySelector(".option-selector__label-value")&&(matchingOptionSelector.querySelector(".option-selector__label-value").textContent=value),matchingInput.checked=!0,matchingInput.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1,detail:{noFocus:!0}})))}})}}customElements.define("variant-picker",VariantPicker)} 2//# sourceMappingURL=/cdn/shop/t/170/assets/variant-picker.js.map?v=6973538738462793251789021507
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.