1(function(){const markReady=()=>document.body.classList.add("is-ready");document.readyState==="loading"?document.addEventListener("DOMContentLoaded",markReady):markReady();const SELECTORS={trigger:"[data-bundle-quick-view-trigger]",modal:"#BundleQuickViewModal",overlay:"#BundleQuickViewOverlay",contentArea:"#BundleQuickViewContent",closeBtn:"#BundleQuickViewClose",form:"#BundleQuickViewForm",mainImg:".gqv-main-img",thumbsCont:".gqv-thumbs",thumbBtn:".gqv-thumb",prevBtn:".gqv-thumb-nav.prev",nextBtn:".gqv-thumb-nav.next",pillBtn:".gqv-pill-btn",addBtn:".gqv-add-btn",price:".gqv-price-current",comparePrice:".gqv-price-compare",sku:".gqv-sku"};let currentProductData=null,currentBundleProductId=null,currentInitialQty=1;window.openBundleQuickView=function(handle,bundleProductId,initialVariantId=null,initialQty=1){if(!handle)return;currentInitialQty=parseInt(initialQty||1),currentBundleProductId=bundleProductId;const overlay=document.querySelector(SELECTORS.overlay);overlay&&overlay.parentElement!==document.body&&document.body.appendChild(overlay);const modal=document.querySelector(SELECTORS.modal),contentArea=document.querySelector(SELECTORS.contentArea);if(!modal||!overlay||!contentArea){console.error("Quick View: Modal elements not found in DOM.");return}overlay.style.display="flex",overlay.offsetHeight,modal.classList.add("is-open"),overlay.classList.add("is-open"),document.body.style.overflow="hidden",contentArea.innerHTML='<div style="display:flex;justify-content:center;align-items:center;height:400px;width:100%;"><span class="gqv-spinner"></span></div>',fetchProductContent(handle,contentArea,initialVariantId)};function closeModal(){const modal=document.querySelector(SELECTORS.modal),overlay=document.querySelector(SELECTORS.overlay),contentArea=document.querySelector(SELECTORS.contentArea);modal&&modal.classList.remove("is-open"),overlay&&overlay.classList.remove("is-open"),document.body.style.overflow="",setTimeout(()=>{overlay&&(overlay.style.display="none"),contentArea&&(contentArea.innerHTML=""),currentProductData=null},300)}document.addEventListener("click",e=>{const trigger=e.target.closest(SELECTORS.trigger);if(trigger){e.preventDefault(),e.stopPropagation();const handle=trigger.getAttribute("data-bundle-quick-view-trigger"),bundleProductId=trigger.getAttribute("data-bundle-product-id"),variantId=trigger.getAttribute("data-bundle-variant-id"),qty=trigger.getAttribute("data-bundle-qty")||1;window.openBundleQuickView(handle,bundleProductId,variantId,qty);return}const closeBtn=e.target.closest(SELECTORS.closeBtn),overlay=e.target.closest(SELECTORS.overlay);(closeBtn||overlay&&e.target===overlay)&&closeModal()});async function fetchProductContent(handle,contentArea,variantId){try{let url=`/products/${handle}`;const connector=url.includes("?")?"&":"?";url+=`${connector}section_id=bundle-quick-view-content`,variantId&&(url+=`&variant=${variantId}`);const response=await fetch(url);if(!response.ok)throw new Error("Network error");const text=await response.text();contentArea.innerHTML=text,initInteractiveElements(contentArea)}catch(err){console.error("Quick View: Fetch error",err),contentArea.innerHTML='<div style="padding: 60px; text-align: center; color: #64748b;"><h3>Error loading product</h3><p>Please try again or view the product page directly.</p></div>'}}function initInteractiveElements(container){const dataNode=container.querySelector("[data-gqv-product-json]");if(dataNode)try{currentProductData=JSON.parse(dataNode.textContent)}catch{console.error("Quick View: JSON error")}initGallery(container),initVariants(container),initQuantity(container),initConfirmSelection(container)}function initGallery(container){const mainImg=container.querySelector(SELECTORS.mainImg),thumbBtns=container.querySelectorAll(SELECTORS.thumbBtn),thumbsCont=container.querySelector(SELECTORS.thumbsCont),prev=container.querySelector(SELECTORS.prevBtn),next=container.querySelector(SELECTORS.nextBtn);mainImg&&(thumbBtns.forEach(btn=>{btn.addEventListener("click",()=>{const src=btn.getAttribute("data-src");src&&mainImg.src!==src&&updateMainImage(mainImg,src),thumbBtns.forEach(b=>b.classList.remove("is-active")),btn.classList.add("is-active")})}),prev&&thumbsCont&&prev.addEventListener("click",()=>thumbsCont.scrollBy({top:-200,behavior:"smooth"})),next&&thumbsCont&&next.addEventListener("click",()=>thumbsCont.scrollBy({top:200,behavior:"smooth"}
1)))}function initVariants(container){const wrappers=container.querySelectorAll(".gqv-option-wrapper"),inputId=container.querySelector('input[name="id"]'),skuLabel=container.querySelector(SELECTORS.sku+" span"),priceLabel=container.querySelector(SELECTORS.price),compPriceLabel=container.querySelector(SELECTORS.comparePrice),addBtn=container.querySelector(SELECTORS.addBtn),totalSpan=container.querySelector(".gqv-add-total");if(!currentProductData||wrappers.length===0)return;function update(){const selected=[...currentProductData.variants[0].options];let currentColor=null;wrappers.forEach(w=>{const idx=parseInt(w.getAttribute("data-option-index")),active=w.querySelector(".gqv-pill-btn.is-active");active&&(selected[idx]=active.getAttribute("data-value"),w.querySelector(".is-swatch")&&(currentColor=selected[idx]))}),currentColor&&reorderThumbnails(container,currentColor);const variant=currentProductData.variants.find(v=>v.options.every((opt,i)=>opt===selected[i]));if(variant){const featuredMediaId=variant.featured_media?variant.featured_media.id:variant.featured_image?variant.featured_image.id:null;currentColor&&reorderThumbnails(container,currentColor,featuredMediaId),inputId&&(inputId.value=variant.id),skuLabel&&(skuLabel.textContent=variant.sku||"N/A"),priceLabel&&(priceLabel.textContent=formatMoney(variant.price));const variantUrl=window.location.origin+"/products/"+currentProductData.handle+"?variant="+variant.id;if(container.querySelectorAll("[data-gqv-variant-link]").forEach(link=>{link.href=variantUrl}),addBtn){addBtn.disabled=!variant.available;const textSpan=addBtn.querySelector(".gqv-add-text");textSpan&&(textSpan.textContent=variant.available?"CONFIRM":"Sold Out"),totalSpan&&(totalSpan.setAttribute("data-base-price",variant.price),totalSpan.textContent="\u2014 "+formatMoney(variant.price),totalSpan.style.display=variant.available?"inline":"none")}if(compPriceLabel&&(variant.compare_at_price>variant.price?(compPriceLabel.textContent=formatMoney(variant.compare_at_price),compPriceLabel.style.display="inline-block"):compPriceLabel.style.display="none"),updateUnitPrice(container,variant),updateShippingMessage(container,variant),variant.featured_image){const mediaId=variant.featured_media?variant.featured_media.id:variant.featured_image.id;let thumb=container.querySelector(`.gqv-thumb[data-id="${mediaId}"]`);if(!thumb&&variant.featured_image.src){const baseUrl=variant.featured_image.src.split("?")[0].split("_")[0];thumb=Array.from(container.querySelectorAll(".gqv-thumb")).find(t=>{const tSrc=t.getAttribute("data-src");return tSrc&&tSrc.includes(baseUrl)})}if(thumb){const thumbSrc=thumb.getAttribute("data-src"),main=container.querySelector(SELECTORS.mainImg);thumbSrc&&main&&main.src!==thumbSrc&&updateMainImage(main,thumbSrc),container.querySelectorAll(".gqv-thumb").forEach(t=>t.classList.remove("is-active")),thumb.classList.add("is-active"),thumb.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}}}else if(addBtn){addBtn.disabled=!0;const textSpan=addBtn.querySelector(".gqv-add-text");textSpan&&(textSpan.textContent="Unavailable"),totalSpan&&(totalSpan.style.display="none")}}wrappers.forEach(w=>{const btns=w.querySelectorAll(".gqv-pill-btn"),valSpan=w.querySelector(".gqv-selected-value");btns.forEach(btn=>{btn.addEventListener("click",()=>{btns.forEach(b=>b.classList.remove("is-active")),btn.classList.add("is-active"),valSpan&&(valSpan.textContent=btn.getAttribute("data-value")),update()})})}),wrappers.length>0&&update()}function reorderThumbnails(container,colorValue,featuredMediaId){if(!colorValue)return;const thumbsCont=container.querySelector(SELECTORS.thumbsCont);if(!thumbsCont)return;const thumbs=Array.from(container.querySelectorAll(SELECTORS.thumbBtn)),colorLower=colorValue.toLowerCase().trim(),featured=[],matching=[],nonMatching=[];thumbs.forEach(thumb=>{const id=thumb.getAttribute("data-id"),alt=(thumb.getAttribute("data-alt")||"").toLowerCase().trim();featuredMediaId&&id==featuredMediaId?featured.push(thumb):alt===colorLower||alt.includes(colorLower)?matching.push(thumb):nonMatching.push(thumb)}),!(featured.length===0&&matching.length===0)&&(featured.forEach(t=>thumbsCont.appendChild(t)),matching.forEach(t=>thumbsCont.appendChild(t)),nonMatching.forEach(t=>thumbsCont.appendChild(t)),thumbsCont.scrollTo({top:0,behavior:"auto"}))}function updateShippingMessage(container,variant){const msgLabel=container.querySelector("[data-gqv-shipping-msg]"),subtitleLabel=container.querySelector("[data-gqv-shipping-subtitle]");!msgLabel||!variant||(variant.price>=5e3?(msgLabel.textContent="Shipping Included",subtitleLabel&&(subtitleLabel.textContent="No extra shipping cost",subt
1itleLabel.style.display="block")):(msgLabel.textContent="Free Shipping $50+",subtitleLabel&&(subtitleLabel.style.display="none")))}function updateUnitPrice(container,variant){const unitLabel=container.querySelector("[data-gqv-unit-each]");if(!unitLabel||!variant)return;let totalMultiplier=1;if((variant.options||[]).forEach(opt=>{const val=opt.toLowerCase();if(val.includes("pack")||val.includes("quantity")||val.includes("cantidad")||val.includes("pairs")||val.includes("pares")||val.includes("pcs")||val.includes("box")||val.includes("caja")){const parts=val.split(/[\s-]+/);for(let part of parts){const num=parseFloat(part.trim());if(!isNaN(num)&&num>0){totalMultiplier*=num;break}}}}),totalMultiplier>1){const unitPrice=variant.price/totalMultiplier;unitLabel.textContent=formatMoney(unitPrice)+" each",unitLabel.parentElement.style.display="block"}else unitLabel.textContent="",unitLabel.parentElement.style.display="none"}function formatMoney(cents){return"$"+(cents/100).toFixed(2)}function updateMainImage(imgElement,newSrc){if(!imgElement||!newSrc)return;imgElement.classList.add("is-loading");const tempImg=new Image;tempImg.onload=()=>{imgElement.src=newSrc,imgElement.classList.remove("is-loading")},tempImg.src=newSrc}function initQuantity(container){const qtyInput=container.querySelector("[data-gqv-qty-input]"),btns=container.querySelectorAll("[data-qty-change]"),totalSpan=container.querySelector(".gqv-add-total");if(qtyInput){if(qtyInput.value=currentInitialQty,totalSpan){const basePrice=parseInt(totalSpan.getAttribute("data-base-price"))||0;totalSpan.textContent="\u2014 "+formatMoney(basePrice*currentInitialQty)}btns.forEach(btn=>{btn.addEventListener("click",()=>{const change=parseInt(btn.getAttribute("data-qty-change"));let current=parseInt(qtyInput.value);const next=Math.max(1,current+change);if(qtyInput.value=next,totalSpan){const basePrice=parseInt(totalSpan.getAttribute("data-base-price"))||0;totalSpan.textContent="\u2014 "+formatMoney(basePrice*next)}})})}}function initConfirmSelection(container){const form=container.querySelector(SELECTORS.form);form&&form.addEventListener("submit",e=>{e.preventDefault();const variantInput=form.querySelector('input[name="id"]'),qtyInput=form.querySelector('input[name="quantity"]');if(!variantInput||!currentBundleProductId)return;const variantId=variantInput.value,qty=parseInt(qtyInput?.value||1),selectedVariant=currentProductData.variants.find(v=>v.id==variantId);if(!selectedVariant)return;const event=new CustomEvent("bundle:variantSelected",{detail:{bundleProductId:currentBundleProductId,variantId:selectedVariant.id,price:selectedVariant.price,compareAtPrice:selectedVariant.compare_at_price||"",sku:selectedVariant.sku,title:selectedVariant.title,qty,imageUrl:selectedVariant.featured_media?selectedVariant.featured_media.preview_image.src:null}});document.dispatchEvent(event),closeModal()})}})(); 2//# sourceMappingURL=/cdn/shop/t/106/assets/bundle-quick-view.js.map?v=34336640862515039611781628862
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.