1customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){if(super(),this.form=this.querySelector("form"),this.variantIdInput.disabled=!1,this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.submitButton=this.querySelector('[type="submit"]'),this.submitButtonText=this.submitButton.querySelector("span"),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true",this.isLoadingBundle=!1,this.hasCheckedUrlParameter=!1,this.isCheckingUrlParameter=!1,this.isInitialized=!1,this.bundleHandlersInitialized=!1,this.isInitialized){console.log("ProductForm already initialized, skipping...");return}if(this.hasAttribute("data-bundle-fetched")){console.log("ProductForm from bundle-fetched content, skipping initialization");return}this.initializeBundleHandlers(),this.initializeQuantityHandlers(),this.initializeOptionNavigation(),this.initializeCompatibilityFiltering(),this.initializePopupHandlers(),window.addEventListener("popstate",this.handlePopState.bind(this)),this.isInitialized=!0,console.log("ProductForm initialized successfully")}initializeBundleHandlers(){if(console.log("initializeBundleHandlers called"),this.bundleHandlersInitialized){console.log("Bundle handlers already initialized, skipping");return}const bundleOptions=document.querySelectorAll(".product__bundle-option-input"),productConfig=document.querySelector(".product__config");if(console.log("Bundle options found:",bundleOptions.length),bundleOptions.length===0){console.log("No bundle options found, returning");return}this.bundleHandlersInitialized=!0;const hasBundleMode=productConfig?.classList.contains("product__config--bundle-mode");console.log("Has bundle mode:",hasBundleMode),hasBundleMode&&(console.log("Setting product config display to none (bundle mode)"),productConfig.style.display="none",this.updateButtonStates(),this.hasCheckedUrlParameter||(this.hasCheckedUrlParameter=!0,this.checkBundleUrlParameter())),bundleOptions.forEach(option=>{const newOption=option.cloneNode(!0),wasChecked=newOption.checked;newOption.checked=!1,option.parentNode.replaceChild(newOption,option),newOption.checked=wasChecked}),document.querySelectorAll(".product__bundle-option-input").forEach(option=>{option.addEventListener("change",event=>{event.target.checked&&this.handleBundleSelection(event.target.dataset.productHandle)})})}checkBundleUrlParameter(){if(this.isCheckingUrlParameter){console.log("URL parameter check already in progress, skipping...");return}this.isCheckingUrlParameter=!0;const bundleParam=new URLSearchParams(window.location.search).get("bundle");if(bundleParam&&window.bundleProducts&&window.bundleProducts[bundleParam]){const bundleOption=document.querySelector(`input[data-product-handle="${bundleParam}"]`);bundleOption&&!bundleOption.checked?(console.log("Auto-selecting bundle from URL parameter:",bundleParam),bundleOption.checked=!0,setTimeout(()=>{this.handleBundleSelection(bundleParam),this.isCheckingUrlParameter=!1},100)):this.isCheckingUrlParameter=!1}else this.isCheckingUrlParameter=!1}handleBundleSelection(productHandle){const bundleData2=window.bundleProducts[productHandle];if(!bundleData2)return;if(this.isLoadingBundle){console.log("Bundle loading already in progress, skipping...");return}this.isLoadingBundle=!0,console.log("Starting bundle selection for:",productHandle),this.updateBundleUrl(productHandle);const productConfig=document.querySelector(".product__config");if(productConfig){console.log("Showing product config for bundle selection"),productConfig.style.display="block";const firstOption=productConfig.querySelector(".product__config-option:first-child");firstOption&&(productConfig.querySelectorAll(".product__config-option").forEach(option=>{option.classList.remove("active")}),firstOption.classList.add("active"),console.log("Set first option as active"))}this.loadBundleProduct(bundleData2)}updateBundleUrl(productHandle){const url=new URL(window.location);url.searchParams.set("bundle",productHandle),window.history.pushState({bundle:productHandle},"",url.toString())}loadBundleProduct(bundleData2){window.variant_list=[],console.log("Loading bundle product via AJAX:",bundleData2.title),this.fetchProductSections(bundleData2).then(()=>{console.log("Bundle product loaded successfully via AJAX. Variant list now contains:",window.variant_list.length,"variants")}).catch(error=>{console.error("Error loading bundle product via AJAX:",error),this.loadBundleVariantsManual(bundleData2),this.reinitializeHandlers()}).finally(()=>{this.isLoadingBundle=!1,console.log("Bundle loading completed, flag reset")})}async fetchProductSections(bundleData){try{const response=await fetch(`${bundleData.url}?section_id=main-product&bundle_context=true`);if(!response.ok)throw new Error(`HTTP error! status: ${response.status}`);const html=await response.text(),parser=new DOMParser,doc=parser.parseFromString(html,"text/html"),sourceProductConfig=doc.querySelector(".product__config");if(!sourceProductConfig)throw new Error("Product config section not found in response");const targetProductConfig=document.querySelector(".product__config");if(!targetProductConfig)throw new Error("Target product config not found");console.log("Replacing product config content with fetched HTML...");const bundleSelection=sourceProductConfig.querySelector(".product__bundle-selection");bundleSelection&&(console.log("Removing bundle selection from fetched content to prevent loops"),bundleSelection.remove());const productFormScripts=doc.querySelectorAll('script[src*="product-form.js"]');
1productFormScripts.forEach(script2=>script2.remove());const productFormElements=doc.querySelectorAll("product-form");console.log("Found",productFormElements.length,"product-form elements, preventing their initialization"),productFormElements.forEach(el=>{el.removeAttribute("is"),el.setAttribute("data-bundle-fetched","true")});const hasBundle=targetProductConfig.classList.contains("product__config--bundle-mode");console.log("About to replace innerHTML..."),targetProductConfig.innerHTML=sourceProductConfig.innerHTML,console.log("innerHTML replaced, bundle mode preserved:",hasBundle),hasBundle&&targetProductConfig.classList.add("product__config--bundle-mode");const scripts=doc.querySelectorAll("script");scripts.forEach(script=>{if(script.textContent.includes("variant_list.push")&&!script.textContent.includes("bundleProducts")&&!script.textContent.includes("bundle")&&!script.textContent.includes("ProductForm")&&!script.textContent.includes("product-form")&&!script.src.includes("product-form.js"))try{eval(script.textContent)}catch(e){console.warn("Error executing variant script:",e)}}),this.updateFormForBundle(bundleData),console.log("About to reinitialize handlers..."),this.reinitializeHandlers(),console.log("Successfully loaded product sections via AJAX");const configAfterReinit=document.querySelector(".product__config");configAfterReinit&&(console.log("Forcing config to display: block"),configAfterReinit.style.display="block",console.log("Final config display:",configAfterReinit.style.display),console.log("Final config visibility:",window.getComputedStyle(configAfterReinit).display))}catch(error){throw console.error("Error in fetchProductSections:",error),error}}formatPrice(price){return window.Shopify&&window.Shopify.formatMoney?window.Shopify.formatMoney(price):`$${(price/100).toFixed(2)}`}loadBundleVariantsManual(bundleData2){console.log("Using manual variant loading as fallback...");let variantContainer=document.querySelector(".product__config-option-values-list");if(console.log("Variant container found:",!!variantContainer),!variantContainer){console.log("Creating variant container structure...");const productConfig=document.querySelector(".product__config");if(productConfig){const variantSection=document.createElement("div");variantSection.className="product__config-options";const variantOption=document.createElement("div");variantOption.className="product__config-option active",variantOption.innerHTML=` 2 <div class="product__config-option-header"> 3 <div class="product__config-option-icon"> 4 <svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 5 <path d="M1 5L5 9L13 1" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 6 </svg> 7 </div> 8 <p class="product__config-option-name h4">1. Select ${bundleData2.options&&bundleData2.options.length>0?bundleData2.options[0]:"Variant"}</p> 9 <div class="product__config-option-caret"> 10 <svg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 11 <path d="M1 1L5 5L9 1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 12 </svg> 13 </div> 14 <p class="product__config-option-selected"></p> 15 </div> 16 <div class="product__config-option-values"> 17 <div class="product__config-option-values-list"></div> 18 <div class="product__config-option-footer"> 19 <p class="product__config-option-footer-clear">Clear</p> 20 </div> 21 </div> 22 `,variantSection.appendChild(variantOption);const firstChild=productConfig.firstElementChild;productConfig.insertBefore(variantSection,firstChild),variantContainer=productConfig.querySelector(".product__config-option-values-list"),console.log("Created variant container:",!!variantContainer)}}if(!variantContainer){console.error("Still could not find or create variant container");return}variantContainer.innerHTML="",console.log("Cleared variant container, about to process",bundleData2.variants.length,"variants"),bundleData2.variants.forEac
22h((variant,index)=>{console.log(`Processing variant ${index+1}:`,variant.title,"ID:",variant.id);const variantData={id:variant.id.toString(),title:variant.title,sku:variant.sku,featured_image:variant.featured_image||bundleData2.featured_image,price:variant.price.toString(),compare_at_price:variant.compare_at_price.toString(),product:{id:bundleData2.id.toString(),title:bundleData2.title,featured_image:bundleData2.featured_image},options:variant.options,option_names:bundleData2.options};window.variant_list.push(variantData),console.log(`Added variant ${index+1} to global list. Total now:`,window.variant_list.length)}),console.log("All variants added to global list. Total:",window.variant_list.length),bundleData2.variants.forEach((variant,index)=>{console.log(`Creating DOM element for variant ${index+1}:`,variant.title);try{const variantElement=this.createVariantElement(variant,bundleData2);variantContainer.appendChild(variantElement),console.log(`Successfully added variant ${index+1} to DOM`)}catch(error){console.error(`Error creating variant ${index+1}:`,error)}}),console.log("Variant container now has",variantContainer.children.length,"child elements"),Array.from(variantContainer.children).forEach((child,index)=>{const variantId=child.querySelector(".product__config-option-value-input")?.dataset.variantId,variantTitle=child.querySelector(".product__config-option-value-name")?.textContent;console.log(`DOM variant ${index+1}: ID=${variantId}, Title=${variantTitle}`)}),console.log("Before reinitialization - window.variant_list exists:",!!window.variant_list),console.log("Before reinitialization - variant_list length:",window.variant_list?.length||0),this.initializeQuantityHandlers(),console.log("After reinitialization, variant_list has:",window.variant_list.length,"variants")}loadBundleAccessories(bundleData2){if(!bundleData2.accessories||bundleData2.accessories.length===0)return;document.querySelectorAll(".product__config-option:not(:first-child)").forEach(container=>{const accessoryList=container.querySelector(".accessory-items");accessoryList&&(accessoryList.innerHTML="")})}updateFormForBundle(bundleData2){const productIdInput=this.form.querySelector('input[name="id"]');if(productIdInput&&bundleData2.variants.length>0){const firstAvailableVariant=bundleData2.variants.find(v=>v.available)||bundleData2.variants[0];productIdInput.value=firstAvailableVariant.id}}reinitializeHandlers(){console.log("Starting reinitializeHandlers...");const configBefore=document.querySelector(".product__config");configBefore&&console.log("Config display before handlers:",configBefore.style.display),console.log("Reinitializing quantity handlers..."),this.initializeQuantityHandlers(),console.log("Reinitializing option navigation..."),this.initializeOptionNavigation(),console.log("Reinitializing popup handlers..."),this.initializePopupHandlers(),console.log("Reinitializing compatibility filtering..."),this.initializeCompatibilityFiltering(),console.log("Updating button states..."),this.updateButtonStates();const configAfter=document.querySelector(".product__config");configAfter&&console.log("Config display after handlers:",configAfter.style.display),console.log("Finished reinitializeHandlers")}updateButtonStates(){const productConfig=document.querySelector(".product__config");if(!productConfig)return;const quantityInputs=productConfig.querySelectorAll(".quantity__input"),hasAnyQuantity=Array.from(quantityInputs).some(input=>parseInt(input.value,10)>0),addToCartButton=productConfig.querySelector(".product__config-add-to-cart"),addToQuoteButton=productConfig.querySelector(".product__config-quote-button");addToCartButton&&(addToCartButton.disabled=!hasAnyQuantity),addToQuoteButton&&(addToQuoteButton.disabled=!hasAnyQuantity)}initializePopupHandlers(){document.querySelectorAll(".popup-quantity").forEach(input=>{const variantId=input.dataset.variantId,mainQuantityInput=document.querySelector(`.product__config-option-values-list .quantity__input[name="quantity-${variantId}"]`);input.value=mainQuantityInput?.value||0,input.addEventListener("change",event=>{mainQuantityInput&&(mainQuantityInput.value=event.target.value,mainQuantityInput.dispatchEvent(new Event("change")))}),mainQuantityInput&&mainQuantityInput.addEventListener("change",event=>{input.value=event.target.value})}),document.querySelectorAll(".popup-add-to-cart").forEach(button=>{const popupQuantityInput=button.closest(".product__config-option-value-popup-detail
22s").querySelector(".popup-quantity");if(popupQuantityInput){const updateButtonState=()=>{const quantity=parseInt(popupQuantityInput.value,10);button.disabled=quantity<=0};updateButtonState(),popupQuantityInput.addEventListener("change",updateButtonState);const variantId=popupQuantityInput.dataset.variantId,mainQuantityInput=document.querySelector(`.product__config-option-values-list .quantity__input[name="quantity-${variantId}"]`);mainQuantityInput&&mainQuantityInput.addEventListener("change",event=>{popupQuantityInput.value=event.target.value,updateButtonState()})}button.addEventListener("click",event=>{const variantId=event.currentTarget.dataset.variantId,popupQuantity=document.querySelector(`.popup-quantity[data-variant-id="${variantId}"]`),mainQuantityInput=document.querySelector(`.product__config-option-values-list .quantity__input[name="quantity-${variantId}"]`),checkbox=document.querySelector(`.product__config-option-value-input[data-variant-id="${variantId}"]`);if(popupQuantity&&mainQuantityInput&&checkbox){const newQuantity=parseInt(popupQuantity.value,10);if(newQuantity<=0)return;button.classList.add("loading"),button.disabled=!0,mainQuantityInput.value=newQuantity,mainQuantityInput.dispatchEvent(new Event("change")),checkbox.checked=!0;const popup=event.currentTarget.closest(".product__config-option-value-popup"),cartUpdateListener=()=>{popup.classList.remove("active"),button.classList.remove("loading"),button.disabled=!1,document.removeEventListener("cart:updated",cartUpdateListener)};document.addEventListener("cart:updated",cartUpdateListener,{once:!0}),setTimeout(()=>{popup.classList.contains("active")&&(popup.classList.remove("active"),button.classList.remove("loading"),button.disabled=!1)},700);const submitButton=document.querySelector(".product__config-add-to-cart");submitButton&&submitButton.click()}})}),document.querySelectorAll(".product__config-option-value-popup-close").forEach(button=>{button.addEventListener("click",event=>{event.currentTarget.closest(".product__config-option-value-popup").classList.remove("active")})}),document.querySelectorAll(".product__config-option-value-popup").forEach(popup=>{popup.addEventListener("click",event=>{event.target===popup&&popup.classList.remove("active")})}),document.querySelectorAll(".product__config-option-value-accessory-button").forEach(button=>{button.addEventListener("click",event=>{event.currentTarget.closest(".product__config-option-value").querySelector(".product__config-option-value-popup").classList.add("active")})})}initializeCompatibilityFiltering(){const variantInputs=document.querySelectorAll('.product__config-option-value-input[data-type="main"]'),accessoryContainers=document.querySelectorAll(".product__config-option:not(:first-child)");if(variantInputs.length===0||accessoryContainers.length===0)return;variantInputs.forEach(input=>{input.addEventListener("change",()=>{this.updateCompatibleAccessories()})}),document.querySelectorAll(".product__config-option:first-child .quantity__input").forEach(input=>{input.addEventListener("change",()=>{this.updateCompatibleAccessories()})}),this.updateCompatibleAccessories()}updateCompatibleAccessories(){const selectedVariantSkus=Array.from(document.querySelectorAll(".product__config-option:first-child .quantity__input")).filter(input=>parseInt(input.value,10)>0).map(input=>{const variantId=input.name.replace("quantity-",""),variant=window.variant_list.find(v=>v.id==variantId);if(!variant)return null;let compatibleSku=null;if(variant.options&&variant.option_names){const skuOptionIndex=variant.option_names.findIndex(name=>name&&name.toLowerCase().includes("compatible")&&name.toLowerCase().includes("sku"));skuOptionIndex>=0&&variant.options[skuOptionIndex]?compatibleSku=variant.options[skuOptionIndex]:compatibleSku=variant.sku}else compatibleSku=variant.sku;return compatibleSku}).filter(Boolean);if(selectedVariantSkus.length===0){this.showAllAccessories();return}document.querySelectorAll(".accessory-items .product__config-option-value").forEach(accessory=>{const accessoryInput=accessory.querySelector(".product__config-option-value-input");if(!accessoryInput)return;const accessoryId=accessoryInput.dataset.variantId,accessoryVariant=window.variant_list.find(v=>v.id==accessoryId);if(!accessoryVariant)return;let hasCompatibleOption=!1,accessorySku=null;if(accessoryVariant.options&&accessoryVariant.option_names){const compatibleOptionIndex=accessoryVariant.option_names.findIndex(name=>name&&name.toLowerCase().includes("compatible")&&name.toLowerCase().includes("sku"));compatibleOptionIndex>=0&&(hasCompatibleOption=!0,accessorySku=accessoryVariant.options[compatibleOptionIndex])}if(!hasCompatibleOption){accessory.classList.remove("hidden");return}if(!accessorySku){accessory.classList.remove("hidden");return}const isCompatible=selectedVariantSkus.some(sku=>sku===accessorySku);if(accessory.classList.toggle("hidden",!isCompatible),!isCompatible){accessoryInput.checked&&(accessoryInput.checked=!1);const quantityInput=accessory.querySelector(".quantity__input");quantityInput&&parseInt(quantityInput.value)>0&&(quantityInput.value=0,quantityInput.dispatchEvent(new Event("change")))}}),document.querySelectorAll(".product__config-option:not(:first-child)").forEach(section=>{const accessoryContainer=section.querySelector(".accessory-items");if(!accessoryContainer)return;const allAccessories=accessoryContainer.querySelectorAll(".product__config-option-value");
22Array.from(allAccessories).every(item=>item.classList.contains("hidden"))?section.classList.add("none-compatible"):section.classList.remove("none-compatible")}),this.updateButtonStates()}showAllAccessories(){document.querySelectorAll(".accessory-items .product__config-option-value").forEach(accessory=>{accessory.classList.remove("hidden")})}initializeOptionNavigation(){const configOptions=document.querySelectorAll(".product__config-option"),nextButtons=document.querySelectorAll(".product__config-option-next-step"),optionHeaders=document.querySelectorAll(".product__config-option-header"),setActiveOption=targetOption=>{configOptions.forEach(option=>{option.classList.remove("active")}),targetOption.classList.add("active")};nextButtons.forEach(button=>{button.addEventListener("click",event=>{const nextOption=event.target.closest(".product__config-option").nextElementSibling;nextOption&&nextOption.classList.contains("product__config-option")&&(setActiveOption(nextOption),nextOption.scrollIntoView({behavior:"auto"})),setTimeout(()=>{document.body.classList.add("header--hidden")},1)})}),optionHeaders.forEach(header=>{header.addEventListener("click",event=>{const targetOption=event.target.closest(".product__config-option");setActiveOption(targetOption),targetOption.scrollIntoView({behavior:"auto"}),setTimeout(()=>{document.body.classList.add("header--hidden")},1)})})}initializeQuantityHandlers(){const quantityInputs=document.querySelectorAll(".quantity__input"),checkboxes=document.querySelectorAll(".product__config-option-value-input"),updateOptionState=section=>{if(!section)return;const hasSelections=Array.from(section.querySelectorAll(".quantity__input")).some(input=>parseInt(input.value,10)>0);section.classList.toggle("has-selections",hasSelections);const selectedDisplay=section.querySelector(".product__config-option-selected");if(selectedDisplay){const selectedItems=Array.from(section.querySelectorAll(".quantity__input")).filter(input=>parseInt(input.value,10)>0).map(input=>{const variantId=input.name.replace("quantity-",""),variantLabel=section.querySelector(`label[for="option-${variantId}"]`),quantity=parseInt(input.value,10);return quantity>1?`${variantLabel.textContent} (${quantity})`:variantLabel.textContent});selectedDisplay.textContent=selectedItems.join(", ")}};checkboxes.forEach(checkbox=>{checkbox.addEventListener("change",event=>{const variantId=event.target.dataset.variantId,quantityInput=document.querySelector(`[name="quantity-${variantId}"]`);if(quantityInput){quantityInput.value=event.target.checked?1:0;const section=event.target.closest(".product__config-option");updateOptionState(section),this.updateButtonStates()}})}),quantityInputs.forEach(input=>{const handleQuantityChange=event=>{const quantity=parseInt(event.target.value,10)||0;if(event.target.name&&event.target.name.startsWith("quantity-")){const variantId=event.target.name.replace("quantity-",""),checkbox=document.querySelector(`input[data-variant-id="${variantId}"]`);checkbox&&(checkbox.checked=quantity>0);const section=event.target.closest(".product__config-option");updateOptionState(section)}event.target.closest(".product__config-simple")&&event.target.closest(".product__config-simple").classList.toggle("has-selections",quantity>0),this.updateButtonStates()};input.addEventListener("change",handleQuantityChange),input.addEventListener("input",handleQuantityChange)}),document.querySelectorAll(".product__config-option-footer-clear").forEach(clearButton=>{clearButton.addEventListener("click",()=>{const section=clearButton.closest(".product__config-option");section.querySelectorAll(".quantity__input").forEach(input=>{input.value=0}),section.querySelectorAll(".product__config-option-value-input").forEach(checkbox=>{checkbox.checked=!1}),updateOptionState(section),this.updateButtonStates()})}),document.querySelectorAll(".product__config-option").forEach(updateOptionState);const simpleConfig=document.querySelector(".product__config-simple");if(simpleConfig){const simpleQuantityInput=simpleConfig.querySelector(".quantity__input");if(simpleQuantityInput){const quantity=parseInt(simpleQuantityInput.value,10)||0;simpleConfig.classList.toggle("has-selections",quantity>0)}}this.updateButtonStates()}onSubmitHandler(evt){if(evt.preventDefault(),this.submitButton.getAttribute("aria-disabled")==="true")return;this.handleErrorMessage(),this.submitButton.setAttribute("aria-disabled",!0),this.submitButton.classList.add("loading");const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData=new FormData(this.form);if(this.cart&&(formData.append("sections",this.cart.getSectionsToRender().map(section=>section.id)),formData.append("sections_url",window.location.pathname),this.cart.setActiveElement(document.activeElement)),document.querySelector(".product__config-option-value-input"))document.querySelectorAll(".product__config-option-value-input:checked").forEach((input,index)=>{let variantId=input.value,quantityInput=document.querySelector(`[name="quantity-${variantId}"]`);quantityInput&&(formData.append(`items[${index}][id]`,variantId),formData.append(`items[${index}][quantity]`,parseInt(quantityInput.value)))}),formData.delete("id");else{const simpleQuantityInput=document.querySelector(".product__config-simple .quantity__input");if(simpleQuantityInput){const quantity=parseInt(simpleQuantityInput.value,10)||1;formData.set("quantity",quantity)}}config.body=formData,fetch(`${routes.cart_add_url}`,config).then(response2=>response2.json()).then(response2=>{if(response2.status){publish(PUB_SUB_EVENTS.cartError,{source:"product-form",productVariantId:formData.get("id"),errors:response2.errors||response2.description,message:response2.message}),this.handleErrorMessage(response2.description);const soldOutMessage=this.submitButton.querySelector(".sold-out-message");if(!soldOutMessage)return;this.submitButton.setAttribute("aria-disabled",!0),this.submitButtonText.classList.add("hidden"),soldOutMessage.classList.remove("hidden"),this.error=!0;return}else if(!this.cart){window.location=window.routes.cart_url;return}this.error||publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productVariantId:formData.get("id"),cartData:response2}),this.error=!1;const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{this.cart.renderContents(response2)})},{once:!0}),quickAddModal.hide(!0)):this.cart.renderContents(response2)}).catch(e=>{console.error(e)}).finally(()=>{this.submitButton.classList.remove("loading"),this.cart&&this.cart.classList.contains("is-empty")&&this.cart.classList.remove("is-empty"),this.error||this.submitButton.removeAttribute("aria-disabled")})}handleErrorMessage(errorMessage=!1){this.hideErrors||(this.errorMessageWrapper=this.errorMessageWrapper||this.querySelector(".product-form__error-message-wrapper"),this.errorMessageWrapper&&(this.errorMessage=this.errorMessage||this.errorMessageWrapper.querySelector(".product-form__error-message"),this.errorMessageWrapper.toggleAttribute("hidden",!errorMessage),errorMessage&&(this.errorMessage.textContent=errorMessage)))}toggleSubmitButton(disable=!0,text){disable?(this.submitButton.setAttribute("disabled","disabled"),text&&(this.submitButtonText.textContent=text)):(this.submitButton.removeAttribute("disabled"),this.submitButtonText.textContent=window.variantStrings.addToCart)}get variantIdInput(){return this.form.querySelector("[name=id]")}
22handlePopState(){const bundleParam=new URLSearchParams(window.location.search).get("bundle");if(bundleParam&&window.bundleProducts&&window.bundleProducts[bundleParam]){const bundleOption=document.querySelector(`input[data-product-handle="${bundleParam}"]`);bundleOption&&(bundleOption.checked=!0,this.handleBundleSelection(bundleParam))}else{document.querySelectorAll(".product__bundle-option-input").forEach(option=>option.checked=!1);const productConfig=document.querySelector(".product__config");productConfig&&productConfig.classList.contains("product__config--bundle-mode")&&(productConfig.style.display="none")}}createVariantElement(variant,bundleData2){const variantDiv=document.createElement("div");return variantDiv.className="product__config-option-value",variantDiv.innerHTML=` 23 <div class="product__config-option-value-inner"> 24 <input 25 type="checkbox" 26 class="product__config-option-value-input" 27 id="option-${variant.id}" 28 name="options[${variant.id}]" 29 value="${variant.id}" 30 data-variant-id="${variant.id}" 31 data-variant-price="${this.formatPrice(variant.price)}" 32 data-variant-available="${variant.available}" 33 data-type="main" 34 > 35 <div class="product__config-option-value-thumbnail"> 36 ${variant.featured_image||bundleData2.featured_image?`<img src="${variant.featured_image||bundleData2.featured_image}" alt="${variant.title}" width="300" height="300">`:""} 37 </div> 38 </div> 39 <label for="option-${variant.id}" class="product__config-option-value-name text-body"> 40 ${variant.title} 41 </label> 42 43 <div class="product__config-option-value-price" data-price-for="${variant.id}"> 44 <div class="text-body price product__price"> 45 <span class="price-item price-item--regular">${this.formatPrice(variant.price)}</span> 46 </div> 47 </div> 48 <div class="product__config-option-quantity"> 49 <input class="quantity__input" type="number" name="quantity-${variant.id}" value="0" min="0"> 50 <button class="product__config-option-value-accessory-button button--text">More Info</button> 51 </div> 52 `,variantDiv}}),(function(){const productDetailsTabs=document.querySelectorAll(".product__details-tab-button"),productDetailsTabContents=document.querySelectorAll(".product__details-tab-content");function resetTabContents(){productDetailsTabContents.forEach(content=>{content.classList.remove("active")}
52),productDetailsTabs.forEach(tab=>{tab.classList.remove("active")})}productDetailsTabs&&productDetailsTabs.forEach((tab,index)=>{tab.addEventListener("click",function(){resetTabContents(),tab.classList.add("active"),productDetailsTabContents[index].classList.add("active")})})})(),(function(){if(window.bundleProducts=window.bundleProducts||{},window.bundleInitialized){console.log("Bundle functionality already initialized, skipping...");return}window.bundleInitialized=!0,document.addEventListener("DOMContentLoaded",function(){const productForm=document.querySelector("product-form");if(productForm&&!productForm.hasHandledInitialBundle){productForm.hasHandledInitialBundle=!0;const bundleParam=new URLSearchParams(window.location.search).get("bundle");bundleParam&&window.bundleProducts[bundleParam]&&setTimeout(()=>{const bundleOption=document.querySelector(`input[data-product-handle="${bundleParam}"]`);bundleOption&&!bundleOption.checked&&(console.log("DOM ready: Auto-selecting bundle option:",bundleParam),bundleOption.checked=!0,bundleOption.dispatchEvent(new Event("change")))},200)}}),window.location.search.includes("debug=bundle")&&(console.log("Bundle products available:",window.bundleProducts),document.addEventListener("change",function(e){e.target.classList.contains("product__bundle-option-input")&&console.log("Bundle selection changed:",{handle:e.target.dataset.productHandle,productId:e.target.dataset.productId,checked:e.target.checked})}))})(); 53//# sourceMappingURL=/cdn/shop/t/15/assets/product-form.js.map?v=155093810078163468301770862216
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.