PageSourceSearch

https://www.softprowatersystems.com/cdn/shop/t/71/assets/product.js?v=36697453082246789501766664695

js softprowatersystems.com collected 2026-09-25 23:39:38 UTC 29,618 bytes, 26 lines download raw bytes

1class customVariant extends HTMLElement{constructor(){super(),this.selected={}}connectedCallback(){if(this.variants=this.getJson("#json_prod_var"),this.options=this.getJson("#json_prod_options"),!this.variants||!this.options)return;this.setupSizeButtons(),this.setupColorRadios(),this.setupDropdowns(),this.preselectVariantById()||this.preselectColor(),this.ensurePriceSyncOnLoad()}ensurePriceSyncOnLoad(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.syncPriceOnLoad()}):setTimeout(()=>{this.syncPriceOnLoad()},100)}syncPriceOnLoad(){const variantIdEl=document.querySelector("#product-variant-id");if(!variantIdEl)return;const variantId=parseInt(variantIdEl.value,10);if(!variantId||isNaN(variantId))return;const variant=this.variants.find(v=>v.id===variantId);variant&&this.updatePriceDisplay(variant)}getJson(selector){const el=document.querySelector(selector);if(!el)return null;try{return JSON.parse(el.textContent)}catch{return null}}setupSizeButtons(){const sizeOptionName=this.options.find(opt=>{const optNameLower=opt.name.toLowerCase();return optNameLower==="size"||optNameLower==="sizes"})?.name;sizeOptionName&&this.querySelectorAll(".size-button-list .size-button").forEach(button=>{button.dataset.initialized!=="true"&&(button.dataset.initialized="true",button.addEventListener("click",()=>{const value=button.dataset.size;button.closest(".size-button-list").querySelectorAll(".size-button").forEach(b=>b.classList.remove("active")),button.classList.add("active"),this.selected[sizeOptionName]=value,this.updateSelectedVariant()}))})}setupColorRadios(){const colorOptionName=this.options.find(opt=>{const optNameLower=opt.name.toLowerCase();return optNameLower==="color"||optNameLower==="colors"})?.name;colorOptionName&&this.querySelectorAll('input[name="option_color"]').forEach(radio=>{radio.dataset.initialized!=="true"&&(radio.dataset.initialized="true",radio.addEventListener("change",()=>{const value=radio.value;this.selected[colorOptionName]=value;const labelEl=radio.closest(".color-circles-active")?.querySelector(".active-color");labelEl&&(labelEl.textContent=value),this.updateSelectedVariant()}))})}setupDropdowns(){this.querySelectorAll(".custom-select").forEach(select=>{if(select.dataset.initialized==="true")return;select.dataset.initialized="true";const trigger=select.querySelector(".select-trigger"),options=select.querySelectorAll(".option-value"),optionName=select.closest(".option-group")?.querySelector("label")?.textContent?.trim()?.replace(/:$/,"");!trigger||!optionName||(trigger.addEventListener("click",e=>{e.stopPropagation(),select.classList.toggle("open")}),options.forEach(opt=>{opt.addEventListener("click",()=>{const value=opt.dataset.value,optionName2=opt.dataset.optionName;value&&optionName2&&(trigger.innerHTML=opt.innerHTML,select.classList.remove("open"),this.selected[optionName2]=value,this.updateSelectedVariant())})}),document.addEventListener("click",e=>{select.contains(e.target)||select.classList.remove("open")}))})}preselectColor(){const preselected=this.querySelector('input[name="option_color"]:checked');preselected&&preselected.dispatchEvent(new Event("change"))}updateSelectedVariant(){if(!this.options.every(opt=>{const value=this.selected[opt.name];return value!=null&&value!==""}))return;const ordered=this.options.map(opt=>this.selected[opt.name]||null),match=this.variants.find(v=>JSON.stringify(v.options)===JSON.stringify(ordered));if(match){const variantIdEl=document.querySelector("#product-variant-id");if(!variantIdEl)return;variantIdEl.value=match.id,variantIdEl.dispatchEvent(new Event("change")),match.available?variantIdEl.removeAttribute("disabled"):variantIdEl.setAttribute("disabled","disabled"),this.updatePriceDisplay(match),this.updateButtonState(match),this.updateStockMessage(match),this.updateVariantURL(match);let matchedIndex=null;document.querySelectorAll(".main-product-image-wrapper").forEach(img=>{const ids=img.dataset.variantIds;ids&&ids.split(",").includes(String(match.id))&&(matchedIndex=img.dataset.index)}),matchedIndex===null&&(matchedIndex="0"),document.querySelectorAll(".main-product-image-wrapper").forEach(img=>{img.style.display=img.dataset.index===matchedIndex?"block":"none"}),document.querySelectorAll(".thumbnail").forEach(thumb=>{thumb.classList.toggle("active",thumb.dataset.index===matchedIndex)})}else this.updateButtonState(null)}updateStockMessage(variant){const instockEl=document.querySelector(".price-block .instock");if(!instockEl)return;let instockTextEl=instockEl.querySelector(".instock-text"),outstockTextEl=instockEl.querySelector(".outstock-text"),svgEl=instockEl.querySelector("svg");const instockText=instockEl.dataset.instockText||instockTextEl&&instockTextEl.dataset.instockText,outstockText=instockEl.dataset.outstockText||instockTextEl&&instockTextEl.dataset.outstockText,instockColor=instockEl.dataset.instockColor||instockTextEl&&instockTextEl.dataset.instockColor||"#34A853",outstockColor=instockEl.dataset.outstockColor||instockTextEl&&instockTextEl.dataset.outstockColor||"#FF0000",inventoryManagement=variant.inventory_management,inventoryPolicy=variant.inventory_policy,inventoryQuantity=variant.inventory_quantity!=null?parseInt(variant.inventory_quantity,10):0;let variantAvailable=!0;variant.available!==void 0&&variant.available!==null&&(typeof variant.available=="boolean"?variantAvailable=variant.available:typeof variant.available=="string"?variantAvailable=variant.available.toLowerCase()==="true"||variant.available==="1":variantAvailable=!!variant.available);let showInStock=!1;if(inventoryManagement==="shopify"?inventoryPolicy==="continue"?showInStock=!0:inventoryPolicy==="deny"?variant.inventory_quantity==null||variant.inventory_quantity===void 0?showInStock=variantAvailable:showInStock=inventoryQuantity>0&&variantAvailable:showInStock=variantAvailable:showInStock=variantAvailable,showInStock){if(!instockTextEl&&instockText&&(instockTextEl=document.createElement("div"),instockTextEl.className="instock-text",instockEl.appendChild(instockTextEl)),instockTextEl&&(instockTextEl.textContent=instockText||instockTextEl.textContent,instockTextEl.style.setProperty("--instock-color",instockColor),instockTextEl.style.cssText+="display: block !important; visibility: visible !important; opacity: 1 !important;"),!svgEl&&instockColor){svgEl=document.createElementNS("http://www.w3.org/2000/svg","svg"),svgEl.setAttribute("width","25"),svgEl.setAttribute("height","25"),svgEl.setAttribute("viewBox","0 0 25 25"),svgEl.setAttribute("xmlns","http://www.w3.org/2000/svg"),svgEl.style.cssText="overflow: visible; display: block;";const circle=document.createElementNS("http://www.w3.org/2000/svg","circle");circle.setAttribute("cx","12.5"),circle.setAttribute("cy","12.5"),circle.setAttribute("r","4"),circle.setAttribute("fill",instockColor),svgEl.appendChild(circle);for(let i=0;i<3;i++){const ripple=document.createElementNS("http://www.w3.org/2000/svg","circle");ripple.setAttribute("class","ripple"),ripple.setAttribute("cx","12.5"),ripple.setAttribute("cy","12.5"),ripple.setAttribute("r","4"),ripple.setAttribute("fill","none"),ripple.setAttribute("stroke",instockColor),ripple.setAttribute("stroke-width","1"),svgEl.appendChild(ripple)}instockTextEl?instockEl.insertBefore(svgEl,instockTextEl):instockEl.appendChild(svgEl)}if(svgEl){svgEl.style.cssText+="display: block !important; visibility: visible !important;";const circle=svgEl.querySelector("circle:not(.ripple)");circle&&circle.setAttribute("fill",instockColor),svgEl.querySelectorAll("circle.ripple").forEach(ripple=>{ripple.setAttribute("stroke",instockColor)})}outstockTextEl&&(outstockTextEl.style.cssText+="display: none !important; visibility: hidden !important; opacity: 0 !important;")}else if(!outstockTextEl&&outstockText&&(outstockTextEl=document.createElement("div"),outstockTextEl.className="outstock-text",instockEl.appendChild(outstockTextEl)),outstockTextEl&&(outstockTextEl.textContent=outstockText||outstockTextEl.textContent,outstockTextEl.style.setProperty("--outstock-color",outstockColor),outstockTextEl.style.cssText+="display: block !important; visibility: visible !important; opacity: 1 !important;"),instockTextEl&&(outstockTextEl?instockTextEl.style.cssText+="display: none !important; visibility: hidden !important; opacity: 0 !important;":instockTextEl.dataset.outstockText||outstockText?(instockTextEl.textContent=outstockText||instockTextEl.dataset.outstockText,instockTextEl.style.setProperty("--instock-color",outstockColor),instockTextEl.style.cssText+="display: block !important; visibility: visible !important; opacity: 1 !important;"):instockTextEl.style.cssText+="display: none !important; visibility: hidden !important;"),svgEl){svgEl.style.cssText+="display: block !important; visibility: visible !important;";const circle=svgEl.querySelector("circle:not(.ripple)");circle&&circle.setAttribute("fill",outstockColor),svgEl.querySelectorAll("circle.ripple").forEach(ripple=>{ripple.setAttribute("stroke",outstockColor)})}else if(outstockColor){svgEl=document.createElementNS("http://www.w3.org/2000/svg","svg"),svgEl.setAttribute("width","25"),svgEl.setAttribute("height","25"),svgEl.setAttribute("viewBox","0 0 25 25"),svgEl.setAttribute("xmlns","http://www.w3.org/2000/svg"),svgEl.style.cssText="overflow: visible; display: block;";const circle=document.createElementNS("http://www.w3.org/2000/svg","circle");circle.setAttribute("cx","12.5"),circle.setAttribute("cy","12.5"),circle.setAttribute("r","4"),circle.setAttribute("fill",outstockColor),svgEl.appendChild(circle);for(let i=0;i<3;i++){const ripple=document.createElementNS("http://www.w3.org/2000/svg","circle");ripple.setAttribute("class","ripple"),ripple.setAttribute("cx","12.5"),ripple.setAttribute("cy","12.5"),ripple.setAttribute("r","4"),ripple.setAttribute("fill","none"),ripple.setAttribute("stroke",outstockColor),ripple.setAttribute("stroke-width","1"),svgEl.appendChild(ripple)}outstockTextEl?instockEl.insertBefore(svgEl,outstockTextEl):instockEl.appendChild(svgEl)}}updateButtonState(variant){const button=document.querySelector('button[type="submit"].submit_add_cart');if(!button)return;const textSpan=button.querySelector("[data-atc-text-span]");if(textSpan){if(variant==null){button.setAttribute("disabled",""),textSpan.textContent="Unavailable";return}variant.available?(button.removeAttribute("disabled"),textSpan.textContent="Add to cart"):(button.setAttribute("disabled",""),textSpan.textContent="Sold out")}}preselectVariantById(){const variantIdEl=document.querySelector("#product-variant-id");if(!variantIdEl)return!1;const variantId=parseInt(variantIdEl.value,10);if(!variantId||isNaN(variantId))return!1;const variant=this.variants.find(v=>v.id===variantId);
1return variant?(this.options.forEach((opt,index)=>{const optionName=opt.name,optionValue=variant.options[index];this.selected[optionName]=optionValue}),this.options.forEach((opt,index)=>{const optionName=opt.name,optionValue=variant.options[index],radio=this.querySelector(`input[name="option_${optionName.toLowerCase()}"][value="${optionValue}"]`);radio&&(radio.checked=!0);const sizeBtn=this.querySelector(`.size-button[data-size="${optionValue}"]`);sizeBtn&&sizeBtn.classList.add("active"),this.querySelectorAll(".custom-select").forEach(select=>{const trigger=select.querySelector(".select-trigger");select.querySelectorAll(".option-value").forEach(opt2=>{opt2.dataset.value===optionValue&&(trigger.innerHTML=opt2.innerHTML)})})}),this.updateSelectedVariant(),!0):!1}updateVariantURL(variant){if(!variant||!variant.id)return;const url=new URL(window.location.href);url.searchParams.set("variant",variant.id),window.history.replaceState({path:url.toString()},"",url.toString())}updatePriceDisplay(variant){const priceEl=document.querySelector(".price-block .price"),compareEl=document.querySelector(".price-block .cprice"),saveEl=document.querySelector(".price-block .priced"),price=variant.price,compare=variant.compare_at_price;if(priceEl&&(priceEl.textContent=this.formatMoney(price).replace(/(\.00|\.0)$/g,""),priceEl.style.display=""),compare&&compare>price){if(compareEl&&(compareEl.textContent=this.formatMoney(Math.round(compare/100)*100),compareEl.style.display=""),saveEl){const discount=Math.round(100-price/compare*100);saveEl.textContent=`save ${discount}%`,saveEl.style.display=""}}else compareEl&&(compareEl.style.display="none"),saveEl&&(saveEl.style.display="none")}formatMoney(cents){const moneyFormat=window.theme&&window.theme.settings&&window.theme.settings.moneyFormat||window.CartJS&&window.CartJS.settings&&window.CartJS.settings.moneyFormat||window.Shopify&&window.Shopify.money_format;return typeof Shopify<"u"&&typeof Shopify.formatMoney=="function"?Shopify.formatMoney(cents,moneyFormat):new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}).format(cents/100)}}class PacSection extends HTMLElement{constructor(){super()}connectedCallback(){this.quantityInput=document.querySelector('quantity-inputs input[name="quantity"]'),this.quantityWrapper=document.querySelector("quantity-inputs"),this.quantityWrapper&&(this.quantityWrapper.style.display="none"),this.addEventListener("click",this.handleClick.bind(this));const defaultActive=this.querySelector(".pack.active");defaultActive&&this.setQuantityFromPack(defaultActive)}handleClick(event){const clickedPack=event.target.closest(".pack");!clickedPack||!this.contains(clickedPack)||(this.querySelectorAll(".pack").forEach(pack=>{pack.classList.remove("active")}),clickedPack.classList.add("active"),this.setQuantityFromPack(clickedPack),this.dispatchEvent(new CustomEvent("pack:change",{detail:{id:clickedPack.dataset.packId,quantity:clickedPack.querySelector("[data-packquntity]")?.dataset.packquntity},bubbles:!0})))}setQuantityFromPack(packElement){const quantity=packElement.querySelector("[data-packquntity]")?.dataset.packquntity;this.quantityInput&&quantity&&(this.quantityInput.value=quantity,this.quantityInput.dispatchEvent(new Event("change",{bubbles:!0})))}}class QuantityInputs extends HTMLElement{constructor(){super(),this.initialized=!1,this._buttonClickInProgress=!1,this._lastClickTime=0}connectedCallback(){this.initialized||(this.initialized=!0,this.input=this.querySelector('input[name="quantity"]'),this.plusBtn=this.querySelector('button[name="plus"]'),this.minusBtn=this.querySelector('button[name="minus"]'),!(!this.input||!this.plusBtn||!this.minusBtn)&&(this.plusBtn.addEventListener("click",e=>this.increment(e)),this.minusBtn.addEventListener("click",e=>this.decrement(e)),this.input.addEventListener("change",()=>this.updateButtonStates()),this.input.addEventListener("input",()=>this.updateButtonStates()),this.updateButtonStates()))}disableButtons(){this.plusBtn&&(this.plusBtn.disabled=!0,this.plusBtn.style.pointerEvents="none",this.plusBtn.style.opacity="0.6"),this.minusBtn&&(this.minusBtn.disabled=!0,this.minusBtn.style.pointerEvents="none",this.minusBtn.style.opacity="0.6")}enableButtons(){this.plusBtn&&(this.plusBtn.disabled=!1,this.plusBtn.style.pointerEvents="",this.plusBtn.style.opacity=""),this.minusBtn&&(this.minusBtn.disabled=!1,this.minusBtn.style.pointerEvents="",this.minusBtn.style.opacity="")}getMinValue(){const minValue=this.input.getAttribute("min");return minValue?parseInt(minValue,10):1}updateButtonStates(){const current=parseInt(this.input.value,10)||this.getMinValue(),minValue=this.getMinValue();current<=minValue?this.minusBtn.setAttribute("disabled","disabled"):this.minusBtn.removeAttribute("disabled")}increment(e){e?.preventDefault(),e?.stopPropagation();const now=Date.now();if(now-this._lastClickTime<300||(this._lastClickTime=now,this._buttonClickInProgress))return;this._buttonClickInProgress=!0,this.disableButtons();const current=parseInt(this.input.value,10)||this.getMinValue();this.input.value=current+1,this.input.dispatchEvent(new Event("change")),this.updateButtonStates(),setTimeout(()=>{this._buttonClickInProgress=!1,this.enableButtons()},300)}
1decrement(e){e?.preventDefault(),e?.stopPropagation();const now=Date.now();if(now-this._lastClickTime<300||(this._lastClickTime=now,this._buttonClickInProgress))return;this._buttonClickInProgress=!0,this.disableButtons();const current=parseInt(this.input.value,10)||this.getMinValue(),minValue=this.getMinValue(),newValue=Math.max(current-1,minValue);this.input.value=newValue,this.input.dispatchEvent(new Event("change")),this.updateButtonStates(),setTimeout(()=>{this._buttonClickInProgress=!1,this.enableButtons()},300)}}class GiftBlock extends HTMLElement{constructor(){super()}connectedCallback(){this.input=document.querySelector('input[name="quantity"]'),this.observeInputChanges(),this.observeVariantChange(),this.observePackChanges(),this.checkGifts()}observeInputChanges(){this.input&&(this.input.addEventListener("input",()=>this.checkGifts()),this.input.addEventListener("change",()=>this.checkGifts()))}observeVariantChange(){const variantInput=document.querySelector("#product-variant-id");variantInput&&variantInput.addEventListener("change",()=>this.checkGifts())}observePackChanges(){const pacSection=document.querySelector("pac-section");pacSection&&pacSection.addEventListener("pack:change",()=>this.checkGifts())}async fetchCartData(){try{const res=await fetch("/cart.js");if(!res.ok)throw new Error("Failed to fetch cart");const data=await res.json();return{quantity:data.items.reduce((total,item)=>total+item.quantity,0),total_price:data.items.reduce((total,item)=>total+item.quantity*item.final_price,0)}}catch{return{quantity:0,total_price:0}}}getSelectedVariantPriceFromJson(){const variantIdEl=document.querySelector("#product-variant-id"),jsonScript=document.querySelector("#json_prod_var");if(!variantIdEl||!jsonScript)return 0;try{const variantId=parseInt(variantIdEl.value),selected=JSON.parse(jsonScript.textContent).find(v=>v.id===variantId);return selected?selected.price:0}catch{return 0}}async checkGifts(){const gifts=this.querySelectorAll(".gift"),cart=await this.fetchCartData(),localQty=parseInt(this.input?.value||"0",10),selectedPrice=this.getSelectedVariantPriceFromJson(),localTotal=localQty*selectedPrice,combinedQty=localQty+cart.quantity,combinedTotal=localTotal+cart.total_price;gifts.forEach(gift=>{const giftId=gift.dataset.giftid;if(!giftId||giftId==="0")return this.lockGift(gift);const area=gift.dataset.giftarea,rule=gift.dataset.unlockrulle||"price",qtyUnlock=parseInt(gift.dataset.qtyunlock||"0",10),priceUnlock=parseInt(gift.dataset.priceunlock||"0",10);let isUnlocked=!1;area==="global"?rule==="quntity"?isUnlocked=qtyUnlock>0&&combinedQty>=qtyUnlock:rule==="price"&&(isUnlocked=priceUnlock>0&&combinedTotal>=priceUnlock):area==="local"&&(rule==="quntity"?isUnlocked=qtyUnlock>0&&localQty>=qtyUnlock:rule==="price"&&(isUnlocked=priceUnlock>0&&localTotal>=priceUnlock)),isUnlocked?this.unlockGift(gift):this.lockGift(gift)})}unlockGift(gift){gift.dataset.locked="false";const customImg=gift.dataset.giftimg?.trim(),productImg=gift.dataset.giftproductimg?.trim(),isValidUrl=url=>{if(!url||url===""||url.includes("Liquid error")||url.includes("invalid url input")||url.startsWith("?"))return!1;const pathPart=url.split("?")[0];return pathPart&&pathPart.length>0},imgSrc=isValidUrl(customImg)?customImg:isValidUrl(productImg)?productImg:null,wrapper=gift.querySelector(".gift-image");imgSrc&&wrapper?wrapper.innerHTML=`<img src="${imgSrc}" alt="Gift" onerror="this.style.display='none'; this.parentElement.innerHTML='<svg width=\\'60\\' height=\\'60\\' viewBox=\\'0 0 60 60\\' fill=\\'none\\'><rect width=\\'60\\' height=\\'60\\' fill=\\'#f0f0f0\\'/><path d=\\'M30 20v20M20 30h20\\' stroke=\\'#999\\' stroke-width=\\'2\\'/></svg><div style=\\'color: #666; font-size: 12px; margin-top: 8px;\\'>Gift Image</div>';">`:wrapper&&(wrapper.innerHTML='<svg width="60" height="60" viewB
1ox="0 0 60 60" fill="none"><rect width="60" height="60" fill="#f0f0f0"/><path d="M30 20v20M20 30h20" stroke="#999" stroke-width="2"/></svg><div style="color: #666; font-size: 12px; margin-top: 8px;">Gift Image</div>')}lockGift(gift){gift.dataset.locked="true";const wrapper=gift.querySelector(".gift-image"),maney=gift.dataset.priceunlock,customLockImg=this.dataset.lockimg?.trim();wrapper&&(customLockImg&&customLockImg!==""?wrapper.innerHTML=this.lockCustomImage(customLockImg,maney):wrapper.innerHTML=this.lockSVG(maney))}lockCustomImage(imgSrc,maney){return`<img src="${imgSrc}" alt="Locked" style="max-width: 100px; max-height: 100px;">
2            <div>Spend ${Shopify.formatMoney(maney,CartJS.settings.moneyFormat)} to unlock</div>`}lockSVG(maney){return`<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
3            <circle cx="24" cy="24" r="23.5" fill="white" stroke="black"/>
4            <path d="M30.75 34.3184H17.25C16.6533 34.3184 16.081 34.0813 15.659 33.6593C15.2371 33.2374 15 32.6651 15 32.0684V23.8184C15 23.2216 15.2371 22.6493 15.659 22.2274C16.081 21.8054 16.6533 21.5684 17.25 21.5684H30.75C31.3467 21.5684 31.919 21.8054 32.341 22.2274C32.7629 22.6493 33 23.2216 33 23.8184V32.0684C33 32.6651 32.7629 33.2374 32.341 33.6593C31.919 34.0813 31.3467 34.3184 30.75 34.3184ZM17.25 23.0684C17.0511 23.0684 16.8603 23.1474 16.7197 23.288C16.579 23.4287 16.5 23.6194 16.5 23.8184V32.0684C16.5 32.2673 16.579 32.458 16.7197 32.5987C16.8603 32.7393 17.0511 32.8184 17.25 32.8184H30.75C30.9489 32.8184 31.1397 32.7393 31.2803 32.5987C31.421 32.458 31.5 32.2673 31.5 32.0684V23.8184C31.5 23.6194 31.421 23.4287 31.2803 23.288C31.1397 23.1474 30.9489 23.0684 30.75 23.0684H17.25Z" fill="#101820"/>
5            <path d="M30 23.0684H18C17.8011 23.0684 17.6103 22.9893 17.4697 22.8487C17.329 22.708 17.25 22.5173 17.25 22.3184V17.8184C17.25 16.2271 17.8821 14.7009 19.0074 13.5757C20.1326 12.4505 21.6587 11.8184 23.25 11.8184H24.75C26.3413 11.8184 27.8674 12.4505 28.9926 13.5757C30.1179 14.7009 30.75 16.2271 30.75 17.8184V22.3184C30.75 22.5173 30.671 22.708 30.5303 22.8487C30.3897 22.9893 30.1989 23.0684 30 23.0684ZM18.75 21.5684H29.25V17.8184C29.25 16.6249 28.7759 15.4803 27.932 14.6364C27.0881 13.7925 25.9435 13.3184 24.75 13.3184H23.25C22.0565 13.3184 20.9119 13.7925 20.068 14.6364C19.2241 15.4803 18.75 16.6249 18.75 17.8184V21.5684Z" fill="#101820"/>
6            <path d="M24 28.3184C23.7033 28.3184 23.4133 28.2304 23.1666 28.0656C22.92 27.9007 22.7277 27.6665 22.6142 27.3924C22.5006 27.1183 22.4709 26.8167 22.5288 26.5257C22.5867 26.2348 22.7296 25.9675 22.9393 25.7577C23.1491 25.5479 23.4164 25.4051 23.7074 25.3472C23.9983 25.2893 24.2999 25.319 24.574 25.4325C24.8481 25.5461 25.0824 25.7383 25.2472 25.985C25.412 26.2317 25.5 26.5217 25.5 26.8184C25.5 27.2162 25.342 27.5977 25.0607 27.879C24.7794 28.1603 24.3978 28.3184 24 28.3184Z" fill="#101820"/>
7            <path d="M24.75 27.5684H23.25V30.5684H24.75V27.5684Z" fill="#101820"/>
8          </svg>
9          <div>Spend ${Shopify.formatMoney(maney,CartJS.settings.moneyFormat)} to unlock</div>
10          `}}function updateCartIconDirectly(itemCount){const cartCountBubble=document.querySelector('.cart-count-bubble span[aria-hidden="true"]'),headerCartCount=document.querySelector(".header__cart-count"),cartLinkBubble=document.querySelector(".cart-link__bubble");cartCountBubble&&(itemCount>0&&itemCount<100?cartCountBubble.textContent=itemCount:itemCount>=100?cartCountBubble.textContent="99+":cartCountBubble.textContent=""),headerCartCount&&(headerCartCount.textContent=itemCount||0),cartLinkBubble&&(itemCount>0?cartLinkBubble.classList.add("cart-link__bubble--visible"):cartLinkBubble.classList.remove("cart-link__bubble--visible"))}class AddCardProd extends HTMLElement{constructor(){super()}connectedCallback(){const form=this.querySelector("form.form_add_cartp");if(!form)return;let errorContainer=form.querySelector(".cart-error-message");if(!errorContainer){errorContainer=document.createElement("div"),errorContainer.className="cart-error-message",errorContainer.setAttribute("role","alert"),errorContainer.setAttribute("aria-live","polite"),errorContainer.style.cssText=`
11        display: none;
12        margin-top: 12px;
13        padding: 12px 16px;
14        background-color: #fff5f5;
15        border: 1px solid #feb2b2;
16        border-left: 4px solid #f56565;
17        border-radius: 6px;
18        color: #c53030;
19        font-size: 14px;
20        line-height: 1.5;
21        font-weight: 400;
22        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
23        width: 100%;
24        clear: both;
25      `;const submitBtn=form.querySelector('button[type="submit"]');if(submitBtn){let insertTarget=submitBtn.parentElement;const addCardProd=submitBtn.closest("add-card-prod");addCardProd&&addCardProd.parentNode&&(insertTarget=addCardProd),insertTarget&&insertTarget.parentNode?insertTarget.parentNode.insertBefore(errorContainer,insertTarget.nextSibling):form.appendChild(errorContainer)}else form.appendChild(errorContainer)}const showError=message=>{errorContainer.textContent=message,errorContainer.style.display="block",errorContainer.scrollIntoView({behavior:"smooth",block:"nearest"})},hideError=()=>{errorContainer.style.display="none",errorContainer.textContent=""},resetQuantity=()=>{const quantityInput=document.querySelector('quantity-inputs input[name="quantity"]');if(quantityInput){const minValue=quantityInput.getAttribute("min"),resetValue=minValue?parseInt(minValue,10):1;quantityInput.value=resetValue,quantityInput.dispatchEvent(new Event("change",{bubbles:!0}))}};form.addEventListener("submit",async e=>{e.preventDefault(),hideError();const submitBtn=form.querySelector('button[type="submit"]');submitBtn&&(submitBtn.disabled=!0);const variantInput=document.querySelector("#product-variant-id"),quantityInput=document.querySelector('quantity-inputs input[name="quantity"]'),variantId=variantInput?.value,qta=parseInt(quantityInput?.value||"1",10);if(!variantInput||variantInput.disabled||!variantId||isNaN(qta)||qta<=0){showError("Please select a valid product variant and quantity."),resetQuantity(),submitBtn&&(submitBtn.disabled=!1);return}const items=[],mainVariant=parseInt(variantId,10);if(isNaN(mainVariant)){showError("Main product variant is invali
25d."),resetQuantity(),submitBtn&&(submitBtn.disabled=!1);return}else{const mainItem={id:mainVariant,quantity:qta};items.push(mainItem)}document.querySelectorAll('.gift[data-locked="false"]').forEach(gift=>{const giftId=gift.dataset.giftid;if(giftId&&giftId!=="0"){const parsedId=parseInt(giftId,10);if(!isNaN(parsedId)){const giftItem={id:parsedId,quantity:1};items.push(giftItem)}}}),document.querySelectorAll(".product-addons__item:not(.product-addons__item--placeholder)").forEach((addon,index)=>{const checkbox=addon.querySelector(".product-addons__toggle"),addonId=addon.dataset.variantId||addon.getAttribute("data-variant-id");if(checkbox&&!checkbox.disabled&&checkbox.checked&&addonId){const parsedAddonId=parseInt(addonId,10);if(!isNaN(parsedAddonId)){const addonItem={id:parsedAddonId,quantity:1};items.push(addonItem)}}});try{const response=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items})});if(!response.ok){const errorData=await response.json();let errorMessage="Unable to add items to cart.";errorData.message?errorMessage=errorData.message:errorData.description?errorMessage=errorData.description:errorData.error&&(errorMessage=errorData.error),showError(errorMessage),resetQuantity(),submitBtn&&(submitBtn.disabled=!1);return}const result=await response.json();hideError(),typeof CartJS<"u"&&typeof CartJS.getCart=="function"?CartJS.getCart({success:cart=>{cart&&(CartJS.cart||(CartJS.cart={}),Object.keys(cart).forEach(key=>{key==="items"&&Array.isArray(cart.items)?CartJS.cart.items=cart.items:CartJS.cart[key]=cart[key]}));const cartSlide=document.querySelector("cart-slide");if(cartSlide&&typeof cartSlide.updateCartIconCount=="function"?cartSlide.updateCartIconCount(cart.item_count||0):updateCartIconDirectly(cart.item_count||0),typeof jQuery<"u"&&jQuery(document).trigger("cart.requestComplete",[cart]),cartSlide){typeof cartSlide.refreshCart=="function"&&cartSlide.refreshCart();const delay=typeof Shopify<"u"&&Shopify.designMode?500:200;setTimeout(()=>{typeof cartSlide.refreshCart=="function"&&cartSlide.refreshCart(),typeof Shopify<"u"&&Shopify.designMode&&cart&&(typeof CartJS<"u"&&(CartJS.cart=cart),typeof jQuery<"u"&&jQuery(document).trigger("cart.requestComplete",[cart])),typeof cartSlide.toggleCart=="function"&&!cartSlide.classList.contains("active")&&cartSlide.toggleCart()},delay)}}}):result&&result.item_count!==void 0?updateCartIconDirectly(result.item_count):fetch("/cart.js").then(response2=>response2.json()).then(cart=>{updateCartIconDirectly(cart.item_count||0);const cartSlide=document.querySelector("cart-slide");cartSlide&&(typeof cartSlide.refreshCart=="function"&&cartSlide.refreshCart(),typeof cartSlide.toggleCart=="function"&&!cartSlide.classList.contains("active")&&cartSlide.toggleCart())}).catch(()=>{}),resetQuantity(),submitBtn&&(submitBtn.disabled=!1)}catch{showError("An error occurred while adding items to cart. Please try again."),resetQuantity(),submitBtn&&(submitBtn.disabled=!1)}})}}document.addEventListener("DOMContentLoaded",event=>{customElements.define("custom-variant",customVariant),customElements.define("pac-section",PacSection),customElements.get("quantity-inputs")||customElements.define("quantity-inputs",QuantityInputs),customElements.get("gift-block")||customElements.define("gift-block",GiftBlock),customElements.get("add-card-prod")||customElements.define("add-card-prod",AddCardProd)});
26//# sourceMappingURL=/cdn/shop/t/71/assets/product.js.map?v=36697453082246789501766664695

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.