1class ProductSelector extends HTMLElement{constructor(){super(),this.inputWrapper="[data-input-wrapper]",this.variants=JSON.parse(this.querySelector('[type="application/json"]').textContent),this.form=document.querySelector(`#ProductForm-${this.dataset.sectionId}`),this.purchaseOptions=document.querySelector(`#Product-Purchase-Options-${this.dataset.sectionId}`),this.productBar=document.querySelector(`#ProductBar-${this.dataset.sectionId}`),this.installmentsForm=document.querySelector(`#Product-Installments-${this.dataset.installmentsFormId}`),this.addEventListener("change",this.onVariantChange),this.updateOptions(),this.updateVariantStatuses(),this.updateVariant(),this.form.toggleAddButton(!this.currentVariant.available,"")}updateVariantStatuses(){const optionOneValue=this.querySelector(this.inputWrapper).querySelector(":checked").value,selectedOptionOneVariants=this.variants.filter(variant=>optionOneValue===variant.option1),inputWrappers=[...this.querySelectorAll(this.inputWrapper)];inputWrappers.forEach((option,index)=>{if(index===0)return;const previousOptionSelected=inputWrappers[index-1].querySelector(":checked").value,listOfAvailableOptions=selectedOptionOneVariants.filter(variant=>variant.available&&variant[`option${index}`]===previousOptionSelected).map(variantOption=>variantOption[`option${index+1}`]);[...option.querySelectorAll('input[type="radio"], option')].forEach(input=>{const inputIsDisabled=!listOfAvailableOptions.includes(input.getAttribute("value"));if(input.disabled=inputIsDisabled,input.tagName.toLowerCase()==="option"&&(input.closest("dropdown-input").querySelector(`button[data-value="${input.value}"]`).disabled=inputIsDisabled),!this.productBar)return;const inputId=input.dataset.id||input.id,productBarInput=this.productBar.querySelector(`option[data-id="${inputId}"]`);productBarInput&&(productBarInput.disabled=inputIsDisabled)})})}onVariantChange(event){if(event.target.type!=="number"&&(this.updateOptions(),this.currentVariant!==this.getVariantData())){if(this.productBarUpdateOptions(),this.updateVariant(),this.updateVariantStatuses(),this.updatePickupAvailability(),this.form.removeAttribute("data-has-selling-plan"),this.form.toggleAddButton(!1,""),this.form.handleErrorMessage(),!this.currentVariant){this.form.toggleAddButton(!0,""),this.setUnavailable();return}this.currentVariant.available||this.form.toggleAddButton(!0,window.variantStrings.soldOut),this.updateMedia(),this.updateURL(),this.updateVariantInput(),this.renderProductInfo()}}updateOptions(){this.querySelectorAll('input[type="radio"]').forEach(input=>{input.nextElementSibling.classList.toggle("is-active",input.checked)}),this.options=Array.from(this.querySelectorAll('input[type="radio"]:checked, select'),el=>({name:el.dataset.name||el.name,value:el.value}))}productBarUpdateOptions(){Array.from(this.productBar.querySelectorAll("select")).map(selector=>{selector.value=this.options.find(option=>option.name===selector.name).value})}updatePickupAvailability(){const pickUpAvailabilityNode=document.querySelector("pickup-availability");if(!(!pickUpAvailabilityNode||!this.currentVariant)){if(pickUpAvailabilityNode.dataset.variantId=this.currentVariant.id,this.currentVariant&&this.currentVariant.available){pickUpAvailabilityNode.setAttribute("available",""),pickUpAvailabilityNode.fetchAvailability(pickUpAvailabilityNode.dataset.variantId);return}pickUpAvailabilityNode.removeAttribute("available"),pickUpAvailabilityNode.innerHTML=""}}updateVariant(){this.currentVariant=this.getVariantData()}getVariantData(){return this.options.length?this.variants.find(variant=>!variant.options.map((option,index)=>this.options[index].value===option).includes(!1)):this.variants[0]}updateMedia(){if(!this.currentVariant||!this.currentVariant.featured_media)return;document.querySelector("product-media").setActiveMedia(this.currentVariant.featured_media.id)}updateURL(sellingPlanId){if(!this.currentVariant)return;const params=new URLSearchParams(window.location.search);params[params.has("variant")?"set":"append"]("variant",this.currentVariant.id),sellingPlanId?params[params.has("selling_plan")?"set":"append"]("selling_plan",sellingPlanId):params.delete("selling_plan"),window.history.replaceState({},"",`${this.dataset.url}?${params.toString()}`)}updateVariantInput(){[this.querySelector('[name="id"'),this.installmentsForm?.querySelector('[name="id"]')].forEac
1h(input=>{input&&(input.value=this.currentVariant.id,input.dispatchEvent(new Event("change",{bubbles:!0})))})}setUnavailable(){const submitButton=this.form.submitButton,price=this.querySelector(`#Product-Price-${this.dataset.sectionId}`);submitButton&&(submitButton.textContent=window.variantStrings.unavailable,price&&price.classList.add("visibility-hidden"))}renderProductInfo(){const params=new URLSearchParams(window.location.search);params[params.has("variant")?"set":"append"]("variant",this.currentVariant.id),params.append("section_id",this.dataset.sectionId),fetch(`${this.dataset.url}?${params.toString()}`).then(response=>response.text()).then(responseText=>{const html=new DOMParser().parseFromString(responseText,"text/html");[`#Product-Price-${this.dataset.sectionId}`,`#Product-Purchase-Options-${this.dataset.sectionId}`].map(liveRegionSelector=>{const destination=document.querySelector(liveRegionSelector),source=html.querySelector(liveRegionSelector);destination&&source&&(destination.classList.remove("visibility-hidden"),destination.innerHTML=source.innerHTML)})})}}customElements.define("product-selector",ProductSelector); 2//# sourceMappingURL=/cdn/shop/t/33/assets/product-selector.js.map?v=73294100914851130561686661198
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.