{
  "version": 3,
  "sources": ["/cdn/shop/t/70/assets/product-form-ab-v4.js?rev=20261001ab2"],
  "sourcesContent": ["if (!customElements.get('product-form')) {\n  customElements.define(\n    'product-form',\n    class ProductForm extends HTMLElement {\n      constructor() {\n        super();\n        this.dataset.productFormVersion = '2026-10-01-ab-v3';\n\n        this.form = this.querySelector('form');\n        this.variantIdInput.disabled = false;\n        this.form.addEventListener('submit', this.onSubmitHandler.bind(this));\n        this.cart = document.querySelector('cart-notification') || document.querySelector('cart-drawer');\n        this.submitButton = this.querySelector('[type=\"submit\"]');\n        this.submitButtonText = this.submitButton.querySelector('span');\n\n        if (document.querySelector('cart-drawer')) this.submitButton.setAttribute('aria-haspopup', 'dialog');\n\n        this.hideErrors = this.dataset.hideErrors === 'true';\n        this.checkoutIntent = null;\n      }\n\n      requestCheckout(triggerButton, source = 'buy_now') {\n        this.dataset.lastCheckoutSource = source;\n        if (this.submitButton.getAttribute('aria-disabled') === 'true') return false;\n        if (triggerButton?.disabled || triggerButton?.getAttribute('aria-disabled') === 'true') return false;\n\n        this.checkoutIntent = { triggerButton, source };\n\n        if (triggerButton) {\n          triggerButton.disabled = true;\n          triggerButton.setAttribute('aria-disabled', 'true');\n          triggerButton.setAttribute('aria-busy', 'true');\n          triggerButton.classList.add('loading');\n        }\n\n        this.form.requestSubmit(this.submitButton);\n        this.dataset.lastCheckoutResult = 'submitted';\n        return true;\n      }\n\n      onSubmitHandler(evt) {\n        evt.preventDefault();\n        this.dataset.lastSubmitIntent = this.checkoutIntent?.source || 'add_to_cart';\n        if (this.submitButton.getAttribute('aria-disabled') === 'true') return;\n\n        const checkoutIntent = this.checkoutIntent;\n        const eventSource =\n          checkoutIntent?.source ||\n          (this.closest('[data-product-purchase-enhancements]') ? 'main_add_to_cart' : 'product-form');\n\n        this.handleErrorMessage();\n\n        this.submitButton.setAttribute('aria-disabled', true);\n        this.submitButton.classList.add('loading');\n        this.querySelector('.loading__spinner').classList.remove('hidden');\n\n        const config = fetchConfig('javascript');\n        config.headers['X-Requested-With'] = 'XMLHttpRequest';\n        delete config.headers['Content-Type'];\n\n        const formData = new FormData(this.form);\n        if (this.cart) {\n          formData.append(\n            'sections',\n            this.cart.getSectionsToRender().map((section) => section.id)\n          );\n          formData.append('sections_url', window.location.pathname);\n          this.cart.setActiveElement(document.activeElement);\n        }\n        config.body = formData;\n\n        const variantId = formData.get('id');\n        const quantity = parseInt(formData.get('quantity')) || 1;\n        const linesUpdateDeferred = this.createCartLinesUpdateEvent(variantId, quantity);\n\n        fetch(`${routes.cart_add_url}`, config)\n          .then((response) => response.json())\n          .then(async (response) => {\n            if (response.status) {\n              publish(PUB_SUB_EVENTS.cartError, {\n                source: eventSource,\n                productVariantId: variantId,\n                errors: response.errors || response.description,\n                message: response.message,\n              });\n              this.handleErrorMessage(response.description);\n              this.dispatchCartErrorEvent(response.description || response.message, 'INVALID');\n              if (checkoutIntent) this.focusPurchaseError();\n              linesUpdateDeferred?.reject(new Error(response.description || response.message));\n\n              const soldOutMessage = this.submitButton.querySelector('.sold-out-message');\n              if (!soldOutMessage) return;\n              this.submitButton.setAttribute('aria-disabled', true);\n              this.submitButtonText.classList.add('hidden');\n              soldOutMessage.classList.remove('hidden');\n              this.error = true;\n              return;\n            }\n\n            this.resolveCartLinesUpdate(linesUpdateDeferred);\n\n            const startMarker = CartPerformance.createStartingMarker('add:wait-for-subscribers');\n            if (!this.error) {\n              try {\n                await publish(PUB_SUB_EVENTS.cartUpdate, {\n                  source: eventSource,\n                  productVariantId: variantId,\n                  cartData: response,\n                });\n              } catch (eventError) {\n                console.error(eventError);\n              } finally {\n                CartPerformance.measureFromMarker('add:wait-for-subscribers', startMarker);\n              }\n            }\n            this.error = false;\n\n            if (checkoutIntent) {\n              if (linesUpdateDeferred?.promise) {\n                await Promise.race([\n                  linesUpdateDeferred.promise.catch(() => undefined),\n                  new Promise((resolve) => window.setTimeout(resolve, 1500)),\n                ]);\n              }\n              window.location.assign('/checkout');\n              return;\n            }\n\n            if (!this.cart) {\n              window.location = window.routes.cart_url;\n              return;\n            }\n\n            const quickAddModal = this.closest('quick-add-modal');\n            if (quickAddModal) {\n              document.body.addEventListener(\n                'modalClosed',\n                () => {\n                  setTimeout(() => {\n                    CartPerformance.measure(\"add:paint-updated-sections\", () => {\n                      this.cart.renderContents(response);\n                    });\n                  });\n                },\n                { once: true }\n              );\n              quickAddModal.hide(true);\n            } else {\n              CartPerformance.measure(\"add:paint-updated-sections\", () => {\n                this.cart.renderContents(response);\n              });\n            }\n          })\n          .catch((e) => {\n            console.error(e);\n            this.handleErrorMessage(e.message || 'Network error');\n            this.dispatchCartErrorEvent(e.message || 'Network error', 'SERVICE_UNAVAILABLE');\n            if (checkoutIntent) this.focusPurchaseError();\n            linesUpdateDeferred?.reject(e);\n          })\n          .finally(() => {\n            this.submitButton.classList.remove('loading');\n            if (this.cart && this.cart.classList.contains('is-empty')) this.cart.classList.remove('is-empty');\n            if (!this.error) this.submitButton.removeAttribute('aria-disabled');\n            this.querySelector('.loading__spinner').classList.add('hidden');\n            this.releaseCheckoutIntent(checkoutIntent);\n\n            CartPerformance.measureFromEvent(\"add:user-action\", evt);\n          });\n      }\n\n      releaseCheckoutIntent(intent) {\n        if (!intent || this.checkoutIntent !== intent) return;\n\n        const { triggerButton } = intent;\n        if (triggerButton) {\n          triggerButton.disabled = false;\n          triggerButton.removeAttribute('aria-disabled');\n          triggerButton.removeAttribute('aria-busy');\n          triggerButton.classList.remove('loading');\n        }\n\n        this.checkoutIntent = null;\n      }\n\n      focusPurchaseError() {\n        const wrapper = this.querySelector('.product-form__error-message-wrapper');\n        if (!wrapper) return;\n\n        wrapper.tabIndex = -1;\n        wrapper.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        wrapper.focus({ preventScroll: true });\n      }\n\n      handleErrorMessage(errorMessage = false) {\n        if (this.hideErrors) return;\n\n        this.errorMessageWrapper =\n          this.errorMessageWrapper || this.querySelector('.product-form__error-message-wrapper');\n        if (!this.errorMessageWrapper) return;\n        this.errorMessage = this.errorMessage || this.errorMessageWrapper.querySelector('.product-form__error-message');\n\n        this.errorMessageWrapper.toggleAttribute('hidden', !errorMessage);\n\n        if (errorMessage) {\n          this.errorMessage.textContent = errorMessage;\n        }\n      }\n\n      toggleSubmitButton(disable = true, text) {\n        if (disable) {\n          this.submitButton.setAttribute('disabled', 'disabled');\n          if (text) this.submitButtonText.textContent = text;\n        } else {\n          this.submitButton.removeAttribute('disabled');\n          this.submitButtonText.textContent = window.variantStrings.addToCart;\n        }\n      }\n\n      createCartLinesUpdateEvent(variantId, quantity) {\n        const { CartLinesUpdateEvent } = window.StandardEvents || {};\n        if (!CartLinesUpdateEvent) return null;\n\n        const deferred = CartLinesUpdateEvent.createPromise();\n        this.dispatchEvent(\n          new CartLinesUpdateEvent({\n            action: 'add',\n            context: 'product',\n            lines: [{ merchandiseId: variantId, quantity }],\n            promise: deferred.promise,\n          })\n        );\n        return deferred;\n      }\n\n      resolveCartLinesUpdate(deferred) {\n        if (!deferred) return;\n        const { CartLinesUpdateEvent } = window.StandardEvents || {};\n        if (!CartLinesUpdateEvent) return;\n\n        const pendingCartDataPromise = typeof CartItems !== 'undefined'\n          ? CartItems.fetchCartData()\n          : fetch(`${routes.cart_url}.json`).then((response) => response.json());\n\n        pendingCartDataPromise\n          .then((cart) => {\n            if (!cart?.currency) return deferred.reject(new Error('Missing currency in cart response'));\n            deferred.resolve({ cart: CartLinesUpdateEvent.createCartFromAjaxResponse(cart) });\n          })\n          .catch((e) => deferred.reject(e));\n      }\n\n      dispatchCartErrorEvent(message, code) {\n        const { CartErrorEvent } = window.StandardEvents || {};\n        if (!CartErrorEvent) return;\n        this.dispatchEvent(new CartErrorEvent({ error: message, code }));\n      }\n\n      get variantIdInput() {\n        return this.form.querySelector('[name=id]');\n      }\n    }\n  );\n}\n"],
  "mappings": "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",
  "names": []
}
