1customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.variantIdInput.disabled=!1,this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.waitList=this.querySelector("#attn-waitlist-trigger"),this.tnSubmitBtn=this.querySelector(".tn-button-wrap button"),this.tnInfoBtn=this.querySelector(".tn-info-btn"),this.tnInfoModal=this.querySelector(".tn-info-modal"),document.querySelector(".product__info-wrapper")&&(this.atcSectionPdp=document.querySelector(".product__info-wrapper")),console.log("ProductForm constructor:"),console.log("tnSubmitBtn:",this.tnSubmitBtn),console.log("tnInfoBtn:",this.tnInfoBtn),console.log("tnInfoModal:",this.tnInfoModal),this.tnInfoBtn?.addEventListener("click",this.onTnInfoClick.bind(this)),this.tnInfoModal?.querySelector(".tn-modal-close")?.addEventListener("click",this.tnInfoClose.bind(this)),this.tnInfoModal?.querySelector(".tn-modal-close-link")?.addEventListener("click",this.tnInfoClose.bind(this)),this.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.submitButton=this.querySelector('[type="submit"]:not(.product-form__submit_tn)'),this.submitButtonText=this.submitButton.querySelector("span"),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true",this.detectSafariDesktop()}detectSafariDesktop(){const userAgent=navigator.userAgent,isSafari=/^((?!chrome|android).)*safari/i.test(userAgent),isDesktop=window.innerWidth>=768;this.isSafariDesktop=isSafari&&isDesktop}isInQuickView(){return this.closest("quick-add-modal")!==null}onTnInfoClick(evt){evt.preventDefault(),console.log("tn-info button clicked"),console.log("Safari desktop detected:",this.isSafariDesktop),console.log("In quick view:",this.isInQuickView()),console.log("Button element:",this.tnInfoBtn);let modal=null;if(this.tnInfoModal&&(modal=this.tnInfoModal,console.log("Modal found via constructor:",modal)),!modal&&this.tnInfoBtn){const buttonWrap=this.tnInfoBtn.closest(".tn-button-wrap");buttonWrap&&(modal=buttonWrap.querySelector(".tn-info-modal"),console.log("Modal found via tn-button-wrap:",modal))}if(modal||(modal=this.querySelector(".tn-info-modal"),console.log("Modal found via querySelector:",modal)),modal||(modal=document.querySelector(".tn-info-modal"),console.log("Modal found globally:",modal)),!modal){console.error("tn-info-modal not found with any strategy"),console.log("Available elements in product form:",this.innerHTML);return}if(console.log("Modal found:",modal),modal.style.display="flex",this.isSafariDesktop&&this.isInQuickView()){const quickAddModal=this.closest("quick-add-modal");quickAddModal&&quickAddModal.classList.contains("is-safari")&&(console.log("Applying Safari quick view fixes"),modal.parentElement!==quickAddModal&&(modal.setAttribute("data-original-parent",modal.parentElement.className||"original-parent"),quickAddModal.appendChild(modal)),modal.style.position="fixed",modal.style.zIndex="1001",modal.classList.add("safari-quick-view-modal"))}modal.focus();const closeBtn=modal.querySelector(".tn-modal-close");closeBtn&&trapFocus(modal,closeBtn),document.body.classList.add("tn-info-active")}tnInfoClose(evt){evt.preventDefault();let modal=null;if(this.tnInfoModal&&(modal=this.tnInfoModal),!modal&&this.tnInfoBtn){const buttonWrap=this.tnInfoBtn.closest(".tn-button-wrap");buttonWrap&&(modal=buttonWrap.querySelector(".tn-info-modal"))}if(modal||(modal=this.querySelector(".tn-info-modal")),!modal&&this.isInQuickView()){const quickAddModal=this.closest("quick-add-modal");quickAddModal&&(modal=quickAddModal.querySelector(".tn-info-modal"))}if(modal||(modal=document.querySelector(".tn-info-modal")),!modal){console.error("tn-info-modal not found for closing"),document.body.classList.remove("tn-info-active");return}if(this.isSafariDesktop&&this.isInQuickView()){const quickAddModal=this.closest("quick-add-modal");if(quickAddModal&&quickAddModal.classList.contains("is-safari")){const originalParentClass=modal.getAttribute("data-original-parent");
1if(originalParentClass&&originalParentClass!=="original-parent"){const originalParent=quickAddModal.querySelector(`.${originalParentClass}`);originalParent&&(originalParent.appendChild(modal),modal.removeAttribute("data-original-parent"))}modal.style.position="",modal.style.zIndex="",modal.classList.remove("safari-quick-view-modal")}}modal.style.display="none",document.body.classList.remove("tn-info-active")}onSubmitHandler(evt){if(evt.preventDefault(),this.submitButton.getAttribute("aria-disabled")==="true")return;this.handleErrorMessage(),this.activeSubmitButton=evt.submitter,this.activeSubmitButton.setAttribute("aria-disabled",!0),this.activeSubmitButton.classList.add("loading");const spinner=this.activeSubmitButton.querySelector(".loading__spinner");spinner&&spinner.classList.remove("hidden");const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData=new FormData(this.form);this.cart&&(formData.append("sections",this.cart.getSectionsToRender().map(section=>section.id)),formData.append("sections_url",window.location.pathname),this.cart.setActiveElement(document.activeElement)),evt.submitter.dataset.tnId&&formData.append("selling_plan",evt.submitter.dataset.tnId),config.body=formData,fetch(`${routes.cart_add_url}`,config).then(response=>response.json()).then(response=>{if(response.status){publish(PUB_SUB_EVENTS.cartError,{source:"product-form",productVariantId:formData.get("id"),errors:response.errors||response.description||response.message,message:response.message||response.description}),this.handleErrorMessage(response.message||response.description||response.errors);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:response}),this.error=!1,this.atcSectionPdp?.classList.add("added-to-cart"),setTimeout(()=>{this.atcSectionPdp?.classList.remove("added-to-cart")},4e3),this.atcSectionPdp?.classList.remove("expand-sizes");const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{this.cart.renderContents(response)})},{once:!0}),quickAddModal.hide(!0)):this.cart.renderContents(response)}).catch(error=>{console.error(error)}).finally(()=>{this.activeSubmitButton&&(this.activeSubmitButton.classList.remove("loading"),this.activeSubmitButton.removeAttribute("aria-disabled")),this.cart&&this.cart.classList.contains("is-empty")&&this.cart.classList.remove("is-empty"),document.querySelector(".main-cart-items")&&(document.querySelector(".main-cart-items").classList.remove("is-empty"),document.querySelector("#main-cart-footer").classList.remove("is-empty"),setTimeout(()=>{let quantity=document.querySelector("cart-items.main-cart-items quantity-popover [data-cart-quantity]").value;document.querySelector("cart-items.main-cart-items").updateQuantity(1,quantity)},1e3)),this.error||this.submitButton.removeAttribute("aria-disabled");const spinner2=this.activeSubmitButton.querySelector(".loading__spinner");spinner2&&spinner2.classList.add("hidden")})}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){console.log("button text:",text),disable?(this.submitButton.setAttribute("disabled","disabled"),text&&(this.submitButtonText.textContent=text),this.tnSubmitBtn&&this.tnSubmitBtn.setAttribute("disabled","disabled"),text=="Unavailable"&&this.tnSubmitBtn&&this.tnSubmitBtn.parentElement.classList.add("hidden")):(this.submitButton.removeAttribute("disabled"),this.submitButtonText.textContent=text,this.tnSubmitBtn&&this.tnSubmitBtn.removeAttribute("disabled"),text!="Unavailable"&&this.tnSubmitBtn&&this.tnSubmitBtn.parentElement.classList.remove("hidden")),text=="Sold Out"&&disable?(this.isInQuickView()||this.submitButton.classList.add("hidden"),this.waitList.classList.remove("hidden")):(this.submitButton.classList.remove("hidden"),this.waitList.classList.add("hidden"))}get variantIdInput(){return this.form.querySelector("[name=id]")}}); 2//# sourceMappingURL=/cdn/shop/t/354/assets/product-form.js.map?v=48568312533492567761776778628
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.