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.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.submitButton=this.querySelector('[type="submit"]'),this.submitButtonText=this.submitButton?.querySelector(".product-form__submit-label")||this.submitButton?.querySelector("span"),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true"}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"),this.querySelector(".loading__spinner").classList.remove("hidden");const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const submittedQuantity=this.getSubmittedQuantity(),formData=new FormData(this.form);if(submittedQuantity){const quantityInput=this.form.querySelector('[name="quantity"]');quantityInput&&(quantityInput.value=submittedQuantity,quantityInput.setAttribute("value",submittedQuantity)),formData.set("quantity",submittedQuantity)}this.cart&&(formData.append("sections",this.cart.getSectionsToRender().map(section=>section.id)),formData.append("sections_url",window.location.pathname),this.cart.setActiveElement(document.activeElement)),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,message:response.message}),this.handleErrorMessage(response.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}const startMarker=CartPerformance.createStartingMarker("add:wait-for-subscribers");this.error||publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productVariantId:formData.get("id"),cartData:response}).then(()=>{CartPerformance.measureFromMarker("add:wait-for-subscribers",startMarker)}),this.dispatchEvent(new CustomEvent("product-form:added",{bubbles:!0,detail:{productVariantId:formData.get("id"),cartData:response}})),Array.from(new Set([this.closest("sticky-product-cta.is-sheet-open"),...document.querySelectorAll(`sticky-product-cta.is-sheet-open${this.dataset.sectionId?`[data-section="${this.dataset.sectionId}"]`:""}`)].filter(Boolean))).forEach(stickyProductCta=>{if(typeof stickyProductCta.closeSheet=="function"){stickyProductCta.closeSheet();return}stickyProductCta.classList.remove("is-sheet-open"),stickyProductCta.querySelector(".pdp-sticky-cta__sheet")?.setAttribute("aria-hidden","true"),document.documentElement.classList.remove("pdp-sticky-cta-lock"),document.body.classList.remove("pdp-sticky-cta-lock")}),this.error=!1;const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{CartPerformance.measure("add:paint-updated-sections",()=>{this.cart.renderContents(response)})})},{once:!0}),quickAddModal.hide(!0)):CartPerformance.measure("add:paint-updated-sections",()=>{this.cart.renderContents(response)})}).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"),this.querySelector(".loading__spinner").classList.add("hidden"),CartPerformance.measureFromEvent("add:user-action",evt)})}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)}getSubmittedQuantity(){const quantityInput=this.form.querySelector('[name="quantity"]'),rawQuantity=this.form.querySelector("[data-quantity-display]")?.textContent?.trim()||quantityInput?.value,quantity=Number.parseInt(rawQuantity,10);return!Number.isFinite(quantity)||quantity<1?null:String(quantity)}get variantIdInput(){return this.form.querySelector("[name=id]")}}); 2//# sourceMappingURL=/cdn/shop/t/13/assets/product-form.js.map?v=165910798303945349031786690926
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.