1class VariantSelects extends HTMLElement{constructor(){super(),backgroundCheck("[data-adaptive-text]"),this.sectionId=this.dataset.section,this.dataset.block&&(this.sectionId=`${this.dataset.section}${this.dataset.block}`),this.productGallery=document.querySelector(`.product-single__gallery-${this.sectionId}`),this.initDropdownSize(),this.initColorChips(),this.initVariant(),this.addEventListener("change",this.onVariantChange)}initDropdownSize(){const dropdownList=this.querySelectorAll(".product-form__input--dropdown");let arrayList=[];for(let i=0;i<dropdownList.length;i++){const eachList=dropdownList[i].offsetWidth;arrayList.push(eachList);const MaxWidth=Math.max.apply(null,arrayList);MaxWidth>0&&(dropdownList[i].style.width=MaxWidth+"px",dropdownList[i].querySelector(".select").style.width=MaxWidth+"px")}}initVariant(){this.updateOptions(),this.updateMasterId(),this.updateVariantInput(),this.updateSoldOutVariants(),this.updateAddButton(),this.updatePickupAvailability()}onVariantChange(){this.updateOptions(),this.updateMasterId(),this.updateAddButton(),this.updatePickupAvailability(),this.removeErrorMessage(),this.currentVariant?(this.updateMedia(),this.updateURL(),this.updateVariantInput(),this.renderProductInfo(),this.updateLimitQuantity(),this.updateSoldOutVariants()):this.setUnavailable()}updateOptions(){let fieldOptions=Array.from(this.querySelectorAll(".product-meta-option"));fieldOptions=fieldOptions.map(fieldOption=>{if(fieldOption.dataset.selectorButton){const inputChecked=Array.from(fieldOption.querySelectorAll("input")).find(radio=>radio.checked),selectedColorStatus=fieldOption.querySelector(".selected-status--color");return inputChecked?(selectedColorStatus&&(selectedColorStatus.textContent=inputChecked.value),{name:inputChecked.name,value:inputChecked.value}):{name:fieldOption.querySelector("input").name,value:null}}else{const selectedIndex=fieldOption.selectedIndex,nameRegex=fieldOption.name.match(/\[(.*?)\]/);return selectedIndex?{name:nameRegex[1],value:fieldOption.value}:{name:nameRegex[1],value:null}}}),this.options=fieldOptions}updateMasterId(){this.currentVariant=this.getVariantData().find(variant=>!variant.options.map((option,index)=>this.options[index].value?this.options[index].value===option:!0).includes(!1))}initColorChips(){let fieldsetsColorRadios=Array.from(this.querySelectorAll(".product-meta-selector--color label"))||[];fieldsetsColorRadios.length&&fieldsetsColorRadios.forEach(field=>{const backgroundColor=field.querySelector(".selector-color-square").style.backgroundColor;!field.querySelector(".selector-color-square").style.backgroundImage&&!backgroundColor&&field.classList.add("single-option--no-color")})}updateMedia(){if(!this.currentVariant||!this.currentVariant.featured_media)return;const mediaGallery=document.getElementById(`MediaGallery-${this.sectionId}`);mediaGallery&&mediaGallery.setActiveMedia(`${this.sectionId}-${this.currentVariant.featured_media.id}`,this.productData.options,this.currentVariant)}updateURL(){!this.currentVariant||this.dataset.updateUrl==="false"||window.history.replaceState({},"",`${this.dataset.url}?variant=${this.currentVariant.id}`)}updateVariantInput(){document.querySelectorAll(`#product-form-${this.sectionId}, #product-form-installment`).forEach(productForm=>{const input=productForm.querySelector('input[name="id"]');input.value=this.currentVariant.id,input.dispatchEvent(new Event("change",{bubbles:!0}))})}updatePickupAvailability(){const pickUpAvailability=document.querySelector(`pickup-availability.pickup-availability--${this.sectionId}`);pickUpAvailability&&(this.currentVariant&&this.currentVariant.available?pickUpAvailability.fetchAvailability&&pickUpAvailability.fetchAvailability(this.currentVariant.id):(pickUpAvailability.removeAttribute("available"),pickUpAvailability.innerHTML=""))}removeErrorMessage(){const section=this.closest("section");if(!section)return;const productForm=section.querySelector("product-form");productForm&&productForm.handleErrorMessage()}renderProductInfo(){fetch(`${this.dataset.url}?variant=${this.currentVariant.id}§ion_id=${this.dataset.section}`).then(response=>response.text()).then(responseText=>{const priceId=`price-${this.sectionId}`,html=new DOMParser().parseFromString(responseText,"text/html"),destinationPrice=document.getElementById(priceId),sourcePrice=html.getElementById(priceId);sourcePrice&&destinationPrice&&(destinationPrice.innerHTML=sourcePrice.innerHTML);const price=document.getElementById(`price-${this.sectionId}`);price&&price.classList.remove("visibility-hidden"),this.updateAddButton()})}updateLimitQuantity(){const quantityInput=document.getElementById(`QuantityInput-${this.sectionId}`);quantityInput&&quantityInput.updateLimitQuantity(this.currentVariant)}getVariantsFromOptions(variantsArray,optionName){const availableVariants=variantsArray.filter(variant=>!variant.options.map((variantOption,optionIndex)=>{const variantName=this.productData.options[optionIndex].toLowerCase();return!!(variantName===optionName||this.options.find(opt=>variantName===opt.name.toLowerCase()&&(!opt.value||opt.value===variantOption)))}).includes(!1)),soldOutVariants=availableVariants.filter(availableVariant=>!availableVariant.available);return{availableVariants,soldOutVariants}}camelize(str){const camelStr=str.replace(/(?:^\w|[A-Z]|\b\w)/g,(letter,index)=>index===0?letter.toLowerCase():letter.toUpperCase()).replace(/\s+/g,"");return camelStr.charAt(0).toUpperCase()+camelStr.slice(1)}updateSoldOutVariants(){let variantsWithOptions=this.variantData,unavailableVariants=[];const productOptions=this.productData.options;variantsWithOptions=variantsWithOptions.filter(variant=>!variant.options.map((option,index)=>{const selectedOptionName=productOptions[index].toLowerCase();return!!this.options.find(opt=>selectedOptionName===opt.name&&(!opt.value||opt.value===option))}).includes(!1)),unavailableVariants=variantsWithOptions.filter(variant=>!variant.available);for(let index=0;
1index<productOptions.length;index++){const optionName=productOptions[index].toLowerCase(),camelizeOptionName=this.camelize(optionName),fieldOption=this.querySelector(`.product-meta-option--${camelizeOptionName}`);if(fieldOption)if(fieldOption.dataset.selectorButton){const inputOptions=Array.from(fieldOption.querySelectorAll("input"));for(let i=0;i<inputOptions.length;i++){const inputOption=inputOptions[i],value=inputOption.value;if(!value)continue;const variantsFromInput=this.variantData.filter(v=>v.options.find(opt=>opt===value)),unavailableFromInput=variantsFromInput.filter(v=>!v.available),unavailableOptions=unavailableVariants.filter(v=>v.options.find(opt=>opt===value));if(inputOption.dataset.disabled=!1,variantsFromInput.length===unavailableFromInput.length)inputOption.dataset.disabled=!0;else if(unavailableOptions.length){const availableOptions=variantsWithOptions.filter(v=>v.options.find(opt=>opt===value));unavailableOptions.length===availableOptions.length&&(inputOption.dataset.disabled=!0)}else if(unavailableFromInput.length){const variantsFromOptions=this.getVariantsFromOptions(variantsFromInput,optionName);variantsFromOptions.soldOutVariants.length&&variantsFromOptions.soldOutVariants.length===variantsFromOptions.availableVariants.length&&(inputOption.dataset.disabled=!0)}}}else{const selectOptions=Array.from(fieldOption.querySelectorAll("option"));for(let i=0;i<selectOptions.length;i++){const selectOption=selectOptions[i],value=selectOption.value;if(!value)continue;const variantsFromInput=this.variantData.filter(v=>v.options.find(opt=>opt===value)),unavailableFromInput=variantsFromInput.filter(v=>!v.available),unavailableOptions=unavailableVariants.filter(v=>v.options.find(opt=>opt===value));if(selectOption.dataset.disabled=!1,variantsFromInput.length===unavailableFromInput.length)selectOption.dataset.disabled=!0;else if(unavailableOptions.length){const availableOptions=variantsWithOptions.filter(v=>v.options.find(opt=>opt===value));unavailableOptions.length===availableOptions.length&&(selectOption.dataset.disabled=!0)}else if(unavailableFromInput.length){const variantsFromOptions=this.getVariantsFromOptions(variantsFromInput,optionName);variantsFromOptions.soldOutVariants.length&&variantsFromOptions.soldOutVariants.length===variantsFromOptions.availableVariants.length&&(selectOption.dataset.disabled=!0)}}}}}updateAddButton(){const variant=this.currentVariant,productForm=document.getElementById(`product-form-${this.sectionId}`);if(!productForm)return;const addButton=productForm.querySelector("[data-add-to-cart]"),addButtonText=productForm.querySelector("[data-add-to-cart-text]");if(!addButton)return;const variantClassSoldOut="product-form--variant-sold-out",formParentElement=productForm.closest(".product-form__buy-buttons"),productMetaPrice=formParentElement?formParentElement.querySelector("[data-product-meta-price]"):null,leftQuantityElm=productMetaPrice?productMetaPrice.querySelector("[data-left-quantity]"):null;if(productMetaPrice&&productMetaPrice.classList.add("meta-price--hidden"),!variant){addButton.setAttribute("aria-disabled",!0),addButton.setAttribute("aria-label",window.variantStrings.unavailable),addButton.setAttribute("disabled",!0),addButtonText.textContent=window.variantStrings.unavailable,productForm.classList.add(variantClassSoldOut);return}if(variant.available){if(addButton.removeAttribute("aria-disabled"),addButton.removeAttribute("disabled"),addButton.setAttribute("aria-label",window.variantStrings.addToCart),addButtonText.textContent=window.variantStrings.addToCart,productForm.classList.remove(variantClassSoldOut),productMetaPrice&&productMetaPrice.classList.remove("meta-price--hidden"),leftQuantityElm){const quantity=variant.inventory_quantity,quantityThreshold=parseInt(leftQuantityElm.dataset.quantityThreshold);if(quantity>0&&quantity<=quantityThreshold){const quantityLeft=window.variantStrings.lowStock.replace("[quantity]",quantity);leftQuantityElm.innerHTML=quantityLeft,leftQuantityElm.parentElement.classList.add("product-form__selected-status--red")}else leftQuantityElm.innerHTML=window.variantStrings.inStock,leftQuantityElm.parentElement.classList.remove("product-form__selected-status--red")}}else addButton.setAttribute("disabled",!0),addButtonText.textContent=window.variantStrings.soldOut,productForm.classList.add(variantClassSoldOut),leftQuantityElm&&(leftQuantityElm.innerHTML="")}setUnavailable(){const addButton=document.getElementById(`product-form-${this.sectionId}`).querySelector('[name="add"]'),price=document.getElementById(`price-${this.sectionId}`);addButton&&(addButton.textContent=window.variantStrings.unavailable,price&&price.classList.add("visibility-hidden"))}getVariantData(){return this.productData=this.productData||JSON.parse(this.querySelector('[type="application/json"]').textContent),this.variantData=this.variantData||this.productData.variants,this.variantData.forEach(variant=>{variant.in_stock=variant.inventory_quantity>0,variant.preorder_item=variant.inventory_quantity<=0&&variant.available===!0,variant.sold_out=variant.inventory_quantity<=0&&variant.available===!1}),this.variantData}}customElements.define("variant-selects",VariantSelects);class VariantRadios extends VariantSelects{constructor(){super()}updateOptions(){let fieldsets=Array.from(this.querySelectorAll("fieldset"));fieldsets=fieldsets.map(fieldset=>{const inputChecked=Array.from(fieldset.querySelectorAll("input")).find(radio=>radio.checked),selectedColorStatus=fieldset.querySelector(".selected-status--color");return inputChecked?(selectedColorStatus&&(selectedColorStatus.textContent=inputChecked.value),{name:inputChecked.name,value:inputChecked.value}):{name:fieldset.querySelector("input").name,value:null}}),this.options=fieldsets}}customElements.define("variant-radios",VariantRadios); 2//# sourceMappingURL=/cdn/shop/t/4/assets/variants.js.map?v=10878112394182195731691524530
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.