1!function(){"use strict";class t extends window.theme.DeferredMedia{constructor(){super()}loadContent(){super.loadContent(),Shopify.loadFeatures([{name:"model-viewer-ui",version:"1.0",onLoad:this.setupModelViewerUI.bind(this)}])}setupModelViewerUI(t){t||(this.modelViewerUI=new Shopify.ModelViewerUI(this.querySelector("model-viewer")))}}window.ProductModel={loadShopifyXR(){Shopify.loadFeatures([{name:"shopify-xr",version:"1.0",onLoad:this.setupShopifyXR.bind(this)}])},setupShopifyXR(t){t||(window.ShopifyXR?(document.querySelectorAll('[id^="ProductJSON-"]').forEach((t=>{window.ShopifyXR.addModels(JSON.parse(t.textContent)),t.remove()})),window.ShopifyXR.setupXRElements()):document.addEventListener("shopify_xr_initialized",(()=>this.setupShopifyXR())))}},window.addEventListener("DOMContentLoaded",(()=>{window.ProductModel&&window.ProductModel.loadShopifyXR()})),customElements.get("product-info")||customElements.define("product-info",class extends HTMLElement{quantityInput=void 0;quantityForm=void 0;onVariantChangeUnsubscriber=void 0;cartUpdateUnsubscriber=void 0;abortController=void 0;pendingRequestUrl=null;preProcessHtmlCallbacks=[];postProcessHtmlCallbacks=[];currentVariant=null;constructor(){super(),this.quantityInput=this.querySelector("[data-quantity-input]"),this.productImages=this.querySelector("product-images"),this.productMediaList=this.querySelector("[data-product-media-list]"),this.variantImageScroll="true"===this.getAttribute("data-variant-image-scroll"),this.productFormWrapper=this.querySelector("[data-form-wrapper]"),this.productForm=this.querySelector("product-form")}connectedCallback(){this.initializeProductSwapUtility();try{const t=this.dataset.productHandle;window.Shopify?.Products?.recordRecentlyViewed&&(t?window.Shopify.Products.recordRecentlyViewed({handle:t}):window.Shopify.Products.recordRecentlyViewed())}catch(t){console.warn("Recently viewed recording error:",t)}this.onVariantChangeUnsubscriber=subscribe(theme.PUB_SUB_EVENTS.optionValueSelectionChange,this.handleOptionValueChange.bind(this)),this.initQuantityHandlers(),this.initProductNotificationHandlers(),this.dispatchEvent(new CustomEvent("theme:product-info:loaded",{bubbles:!0})),this.variantOptionImages=this.querySelectorAll("[data-variant-option-image]"),this.variantOptionImages.length>1&&this.optionImagesWidth(),this.updatePreorderState(),this.checkLiveCartInfo(),this.checkLiveCartInfoCallback=()=>this.checkLiveCartInfo(),document.addEventListener("theme:cart-drawer:close",this.checkLiveCartInfoCallback)}checkLiveCartInfo(){const t=this.productForm?.variantIdInput,e=t?t.value:null;if(!e)return;const i=this.quantityInput?parseInt(this.quantityInput.value,10):1,r=`${theme.routes.root}products/${this.dataset.productHandle}?section_id=api-live-cart-info&variant=${e}`;fetch(r).then((t=>t.text())).then((t=>{const e=(new DOMParser).parseFromString(t,"text/html"),r=Number(e.querySelector("[data-item-count-for-variant]").innerHTML),a=e.querySelector("[data-max-inventory]").innerHTML,o=Number(a),n=Boolean(i+r>o),s=""!==a&&n,u=""!==a&&r===o?"form":"cart",d=this.querySelector("[data-product-form]");d&&(d.setAttribute("data-max-inventory-reached",s),d.setAttribute("data-error-message-position",u))})).catch((t=>{console.warn("Failed to check live cart info:",t)}))}addPreProcessCallback(t){this.preProcessHtmlCallbacks.push(t)}initQuantityHandlers(){this.quantityInput&&(this.quantityForm=this.querySelector(".product-form__quantity"),this.quantityForm&&(this.setQuantityBoundaries(),this.quantityInput.addEventListener("change",(()=>this.updateButtonPrice())),this.quantityInput.addEventListener("change",(()=>this.checkLiveCartInfo())),this.dataset.originalSection||(this.cartUpdateUnsubscriber=subscribe(theme.PUB_SUB_EVENTS.cartUpdate,this.fetchQuantityRules.bind(this)))))}disconnectedCallback(){this.onVariantChangeUnsubscriber(),this.cartUpdateUnsubscriber?.(),document.removeEventListener("theme:cart-drawer:close",this.checkLiveCartInfoCallback)}initializeProductSwapUtility(){this.postProcessHtmlCallbacks.push((t=>{window?.Shopify?.PaymentButton?.init(),window?.ProductModel?.loadShopifyXR(),this.optionImagesWidth(t)}))}optionImagesWidth(t=this){const e=t.querySelectorAll("[data-variant-option-image]");if(e.length>1){let t=0;requestAnimationFrame((()=>{e.forEach((e=>{const i=e.clientWidth;i>t&&(t=i)})),e.forEach((e=>{const i=e.closest("[data-variant-buttons]");i&&i.style?.setProperty("--option-image-width",t+"px")}))}
1))}}handleOptionValueChange({data:{event:t,target:e,selectedOptionValues:i}}){if(!this.contains(t.target))return;this.resetProductFormState();const r=e.dataset.productUrl||this.pendingRequestUrl||this.dataset.url;this.pendingRequestUrl=r;const a=this.dataset.url!==r,o="true"===this.dataset.updateUrl&&a;this.renderProductInfo({requestUrl:this.buildRequestUrlWithParams(r,i,o),targetId:e.id,callback:a?this.handleSwapProduct(r,o):this.handleUpdateProductInfo(r)})}resetProductFormState(){this.productForm?.toggleSubmitButton(!0)}handleSwapProduct(t,e){return i=>{this.productModal?.remove();const r=e?"product-info[id^='MainProduct']":"product-info",a=this.getSelectedVariant(i.querySelector(r));this.updateURL(t,a?.id),e?(document.querySelector("head title").innerHTML=i.querySelector("head title").innerHTML,HTMLUpdateUtility.viewTransition(document.querySelector("main"),i.querySelector("main"),this.preProcessHtmlCallbacks,this.postProcessHtmlCallbacks)):HTMLUpdateUtility.viewTransition(this,i.querySelector("product-info"),this.preProcessHtmlCallbacks,this.postProcessHtmlCallbacks),requestAnimationFrame((()=>this.optionImagesWidth()))}}renderProductInfo({requestUrl:t,targetId:e,callback:i}){this.abortController?.abort(),this.abortController=new AbortController,fetch(t,{signal:this.abortController.signal}).then((t=>t.text())).then((t=>{this.pendingRequestUrl=null;const e=(new DOMParser).parseFromString(t,"text/html");i(e)})).then((()=>{document.querySelector(`#${e}`)?.focus()})).catch((t=>{"AbortError"===t.name?console.log("Fetch aborted by user"):console.error(t)}))}getSelectedVariant(t){const e=t.querySelector("variant-selects [data-selected-variant]")?.innerHTML;return e?JSON.parse(e):null}buildRequestUrlWithParams(t,e,i=!1){const r=[];return!i&&r.push(`section_id=${this.sectionId}`),e.length&&r.push(`option_values=${e.join(",")}`),`${t}?${r.join("&")}`}updateOptionValues(t){const e=t.querySelector("variant-selects");e&&HTMLUpdateUtility.viewTransition(this.variantSelectors,e,this.preProcessHtmlCallbacks)}showSoldoutNotificationButton(t){this.productFormWrapper.classList.contains("show-product-notification")&&(t?this.productFormWrapper.classList.add("variant--soldout"):this.productFormWrapper.classList.remove("variant--soldout"))}updatePreorderState(t=this){this.submitButton=t.querySelector(`#ProductSubmitButton-${this.sectionId}`),this.isPreorder="true"===this.submitButton?.dataset.preorder,this.preorderInput=this.querySelector("[data-product-preorder]"),this.preorderInput&&(this.preorderInput.disabled=!this.isPreorder)}handleUpdateProductInfo(t){return e=>{const i=this.getSelectedVariant(e);if(this.pickupAvailability?.update(i),this.updateOptionValues(e),this.updateURL(t,i?.id),this.updateVariantInputs(i?.id),!i)return void this.setUnavailable();this.updatePreorderState(e);const r=!this.submitButton||this.submitButton.hasAttribute("disabled");this.isPreorder&&!r?(this.productForm?.toggleSubmitButton(!1,window.theme.strings.preOrder),this.showSoldoutNotificationButton(!1)):r?(this.productForm?.toggleSubmitButton(!0,window.theme.strings.soldOut),this.showSoldoutNotificationButton(!0)):(this.productForm?.toggleSubmitButton(!1,window.theme.strings.addToCart),this.showSoldoutNotificationButton(!1)),this.updateMedia(i?.featured_media?.id);const a=(t,i=(t=>!1))=>{const r=e.getElementById(`${t}-${this.sectionId}`),a=this.querySelector(`#${t}-${this.dataset.section}`);r&&a&&(a.innerHTML=r.innerHTML,a.classList.toggle("hidden",i(r)))};a("Price"),a("Sku",(({classList:t})=>t.contains("hidden"))),a("Inventory"),a("Volume"),a("Price-Per-Item",(({classList:t})=>t.contains("hidden"))),a("CartBar"),a("Preorder"),a("Badges"),this.updateQuantityRules(this.sectionId,e),this.querySelector(`#Quantity-Rules-${this.dataset.section}`)?.classList.remove("hidden"),this.querySelector(`#Volume-Note-${this.dataset.section}`)?.classList.remove("hidden"),this.updateButtonPrice(),this.optionImagesWidth(),publish(theme.PUB_SUB_EVENTS.variantChange,{data:{sectionId:this.sectionId,html:e,variant:i}})}}updateVariantInputs(t){this.querySelectorAll(`#product-form-${this.dataset.section}, #product-form-installment-${this.dataset.section}`).forEach((e=>{const i=e.querySelector('input[name="id"]');i.value=t??"",i.dispatchEvent(new Event("change",{bubbles:!0}))}
1))}updateURL(t,e){this.querySelector("share-button")?.updateUrl(`${window.theme.routes.shop_url}${t}${e?`?variant=${e}`:""}`),"false"!==this.dataset.updateUrl&&window.history.replaceState({},"",`${t}${e?`?variant=${e}`:""}`)}setUnavailable(){this.productForm?.toggleSubmitButton(!0,window.theme.strings.unavailable),this.showSoldoutNotificationButton(!1);const t=["price","Inventory","Sku","Price-Per-Item","Volume-Note","Volume","Quantity-Rules"].map((t=>`#${t}-${this.dataset.section}`)).join(", ");document.querySelectorAll(t).forEach((({classList:t})=>t.add("hidden")))}updateMedia(t){if(!t)return;const e=this.querySelector(`[data-image-id="${t}"]`);if(!e)return;const i=e.getAttribute("data-media-id"),r=!window.theme.isMobile();e.dispatchEvent(new CustomEvent("theme:media:select",{bubbles:!0,detail:{id:i}})),requestAnimationFrame((()=>{if(r&&!this.productImages.hasAttribute("data-fader-desktop")&&this.variantImageScroll){const t=e.getBoundingClientRect().top;document.dispatchEvent(new CustomEvent("theme:tooltip:close",{bubbles:!1,detail:{hideTransition:!1}})),window.theme.scrollTo(t)}r||this.productImages.hasAttribute("data-fader-mobile")||this.productMediaList.scrollTo({left:e.offsetLeft})}))}setQuantityBoundaries(){const t={cartQuantity:this.quantityInput.dataset.cartQuantity?parseInt(this.quantityInput.dataset.cartQuantity):0,min:this.quantityInput.dataset.min?parseInt(this.quantityInput.dataset.min):1,max:this.quantityInput.dataset.max?parseInt(this.quantityInput.dataset.max):null,step:this.quantityInput.step?parseInt(this.quantityInput.step):1};let e=t.min;const i=null===t.max?t.max:t.max-t.cartQuantity;null!==i&&(e=Math.min(e,i)),t.cartQuantity>=t.min&&(e=Math.min(e,t.step)),this.quantityInput.min=e,i?this.quantityInput.max=i:this.quantityInput.removeAttribute("max"),this.quantityInput.value=e,publish(theme.PUB_SUB_EVENTS.quantityUpdate,void 0),this.updateButtonPrice()}fetchQuantityRules(){const t=this.productForm?.variantIdInput?.value;if(t)return this.querySelector(".quantity__rules-cart .loading__spinner").classList.remove("hidden"),fetch(`${this.dataset.url}?variant=${t}§ion_id=${this.dataset.section}`).then((t=>t.text())).then((t=>{const e=(new DOMParser).parseFromString(t,"text/html");this.updateQuantityRules(this.dataset.section,e)})).catch((t=>{console.warn("Failed to fetch quantity rules:",t)})).finally((()=>{this.querySelector(".quantity__rules-cart .loading__spinner")?.classList.add("hidden")}))}updateQuantityRules(t,e){if(!this.quantityInput)return;this.setQuantityBoundaries();const i=e.getElementById(`Quantity-Form-${t}`),r=["[data-quantity-input]","[data-quantity-rules]","[data-quantity-label]"];for(let t of r){const e=this.quantityForm.querySelector(t),r=i.querySelector(t);if(e&&r)if("[data-quantity-input]"===t){const t=["data-cart-quantity","data-min","data-max","step"];for(let i of t){const t=r.getAttribute(i);null!==t?e.setAttribute(i,t):e.removeAttribute(i)}}else e.innerHTML=r.innerHTML}this.updateButtonPrice()}updateButtonPrice(){const t=this.querySelector("[data-product-price]");if(!t)return;const e=this.getSelectedVariant(this)||null;if(!e)return;const i=this.quantityInput&&parseInt(this.quantityInput.value||"1",10)||1,r=e.price||0,a=e.compare_at_price||0,o=r*i,n=a>r?a*i:0,s=0===o?window.theme.strings.free:window.theme.formatMoney(o,theme.moneyFormat);let u=s;if(n){u=`${s} <s>${window.theme.formatMoney(n,theme.moneyFormat)}</s>`}t.innerHTML=u}initProductNotificationHandlers(){const t=this.querySelector("product-notification");if(!t)return;const e=t.closest("popup-component")?.querySelector("[data-popup-open]");this.querySelectorAll("[data-notification-popup-button]")?.forEach((t=>{t.addEventListener("click",(t=>{t.preventDefault(),e.dispatchEvent(new Event("click"))}))}))}get productModal(){return document.querySelector(`#ProductModal-${this.dataset.section}`)}get pickupAvailability(){return this.querySelector("pickup-availability")}get variantSelectors(){return this.querySelector("variant-selects")}get relatedProducts(){const t=SectionId.getIdForSection(SectionId.parseId(this.sectionId),"related-products");return document.querySelector(`product-recommendations[data-section-id^="${t}"]`)}get quickOrderList(){const t=SectionId.getIdForSection(SectionId.parseId(this.sectionId),"quick_order_list");return document.querySelector(`quick-order-list[data-id^="${t}"]`)}get sectionId(){return this.dataset.originalSection||this.dataset.section}}),customElements.get("product-model")||customElements.define("product-model",t)}();
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.