{
  "version": 3,
  "sources": ["/cdn/shop/t/13/assets/product-form.js?custom_v=10"],
  "sourcesContent": ["/**\n *  * Product Form Component - Handles product purchasing and variant selection\n  * Manages form submission, cart updates, and variant-specific UI changes\n   */\n\n// Here is a random comment to force the version to update again\n// And another random comment\n\n   import { Component } from \"./component-base.js\";\n   import { updateCartBubble } from \"./utilities.js\";\n   import { AddToCartComponent } from \"./add-to-cart.js\";\n   import { VariantSelectorComponent } from \"./variant-selector.js?preorder_release=1\";\n   import { QuantitySelectorComponent } from \"./quantity-selector.js\";\n   import { ProductMediaComponent } from \"./product-media.js\";\n   import { ThemeBus } from \"./events-bus.js\";\n   import { EVENTS } from \"./event-constants.js\";\n   \n \n/**\n * Initializes the product form component and its dependencies\n * Should be called on product template pages\n */\nexport async function initProductForm() {\n\n  /**\n   * Product form component that handles variant selection and cart operations\n   * @extends Component\n   */\n  class ProductFormComponent extends Component {\n    requiredRefs = [\n      \"variantId\",\n      \"liveRegion\",\n      \"errorMessage\",\n      \"price\",\n      \"comparePrice\",\n      \"addToCartButton\",\n      \"addToCartButtonContainer\"\n    ];\n\n    connectedCallback() {\n      super.connectedCallback();\n      this.validateRefs();\n\n      const quantityInput = this.querySelector(\n        'quantity-selector-component input[name=\"quantity\"]'\n      );\n      if (quantityInput) this.refs.quantityInput = quantityInput;\n\n      // Attach to the actual form to ensure preventDefault always runs\n      this.formEl = this.querySelector('form');\n      if (this.formEl) this.formEl.addEventListener('submit', this.#handleSubmit, { capture: true });\n      // Removed bubbling fallback to avoid double submission\n      // Bus-based variant handling only\n      ThemeBus.addEventListener(EVENTS.variantChange, this.#handleVariantChangeFromBus);\n      \n      // Handle initial compare price visibility\n      this.#updateComparePriceVisibility();\n\n      // Ensure cart data is loaded\n      this.#ensureCartData();\n    }\n\n    disconnectedCallback() {\n      super.disconnectedCallback();\n      if (this.formEl) this.formEl.removeEventListener('submit', this.#handleSubmit);\n      // Bus-based variant handling only\n      ThemeBus.removeEventListener(EVENTS.variantChange, this.#handleVariantChangeFromBus);\n    }\n\n    /**\n     * Updates compare price visibility based on current state\n     */\n    #updateComparePriceVisibility() {\n      if (!this.refs.comparePrice) return;\n      \n      const comparePriceText = this.refs.comparePrice.textContent.trim();\n      \n      // If compare price is empty, hide it\n      // The Liquid template only renders content if compare_at_price exists and should be shown\n      if (!comparePriceText) {\n        this.refs.comparePrice.classList.add('hidden');\n      } else {\n        this.refs.comparePrice.classList.remove('hidden');\n      }\n    }\n\n    /**\n     * Updates the cart data from Shopify's cart.js endpoint\n     */\n    async #updateCartData() {\n      try {\n        const response = await fetch('/cart.js');\n        if (!response.ok) throw new Error('Failed to fetch cart');\n        \n        const cartData = await response.json();\n        window.__cart = cartData;\n        updateCartBubble();\n      } catch (error) {\n        console.error('[ProductForm] Error fetching cart:', error);\n      }\n    }\n\n    /**\n     * Ensures cart data is loaded on page load\n     */\n    async #ensureCartData() {\n      if (!window.__cart || !window.__cart.items) {\n        await this.#updateCartData();\n      }\n    }\n\n    /**\n     * Handles form submission and adds product to cart\n     * @param {Event} event - The form submit event\n     */\n    #handleSubmit = async (event) => {\n      event.preventDefault();\n\n      const form = this.querySelector(\"form\");\n      if (!form) return;\n\n      // Check if we need to block due to cart maximum\n      const variantId = parseInt(this.refs.variantId.value);\n      const requestedQuantity = parseInt(this.refs.quantityInput?.value || 1);\n\n      if (!this.#canAddToCart(variantId, requestedQuantity)) {\n        return; // Error message already shown by #canAddToCart\n      }\n\n      const formData = new FormData(form);\n      formData.set(\"quantity\", requestedQuantity);\n\n    const productJson = document.getElementById(\"product-json\");\n    const productData = productJson ? JSON.parse(productJson.textContent) : null;\n    const selectedVariant = productData?.variants?.find(v => String(v.id) === String(variantId));\n\n    const isPreorder =\n      selectedVariant?.preorder?.enabled &&\n      selectedVariant.inventory_quantity <= 0 &&\n      selectedVariant.inventory_policy === \"continue\";\n\n    function formatUkDate(dateValue) {\n      if (!dateValue) return \"\";\n\n      const parts = dateValue.split(\"-\");\n      if (parts.length !== 3) return dateValue;\n\n      return `${parts[2]}/${parts[1]}/${parts[0]}`;\n    }\n\n    if (isPreorder) {\n      formData.set(\"properties[Pre-order]\", \" \");\n\n      if (selectedVariant.preorder.message) {\n        formData.set(\n          \"properties[Estimated shipping]\",\n          selectedVariant.preorder.message\n        );\n      }\n    }\n\n      this.refs.addToCartButton.querySelector(\".button-spinner\")?.classList.remove(\"hidden\");\n      this.refs.addToCartButton.disabled = true;\n      this.refs.addToCartButtonContainer?.setLoading?.();\n\n      try {\n        const response = await fetch(\"/cart/add.js\", {\n          method: \"POST\",\n          headers: { Accept: \"application/json\" },\n          body: formData,\n        });\n        const result = await response.json();\n\n        if (result.status && result.status !== 200) {\n          this.#setLiveRegionText(result.message || \"Error adding to cart\");\n          this.refs.addToCartButtonContainer?.enable?.();\n          return;\n        }\n\n        this.refs.addToCartButtonContainer?.setSuccess?.();\n        this.#setLiveRegionText(\"Added to cart\");\n\n        // Short delay to show success, then fetch cart and update\n        setTimeout(async () => {\n          // Fetch the full cart to get updated quantities\n          await this.#updateCartData();\n\n          // Small delay to ensure cart data is set\n          setTimeout(() => {\n            // Now dispatch events\n            ThemeBus.dispatchEvent(new Event(EVENTS.cartUpdated));\n            ThemeBus.dispatchEvent(new Event(EVENTS.cartItemAdded));\n\n        if (this.refs.quantityInput) {\n          this.refs.quantityInput.value = 1;\n          this.refs.quantityInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n        }\n          }, 100);\n        }, 500);\n      } catch (error) {\n        this.#setLiveRegionText(\"Add to cart failed\");\n        this.refs.addToCartButtonContainer?.enable?.();\n      }\n    };\n\n    /**\n     * Checks if the variant can be added to cart based on inventory and cart quantity\n     * @param {number} variantId - The variant ID\n     * @param {number} requestedQuantity - The quantity to add\n     * @returns {boolean} Whether the add to cart should proceed\n     */\n    #canAddToCart(variantId, requestedQuantity) {\n      try {\n        const productJson = document.getElementById('product-json');\n        if (!productJson) return true; // If no product data, allow (backend will handle)\n\n        const productData = JSON.parse(productJson.textContent);\n        const variant = productData.variants.find(v => v.id === variantId);\n\n        if (!variant) return true;\n\n        // Check if inventory is managed and tracked\n        if (variant.inventory_management !== 'shopify' || variant.inventory_policy !== 'deny') {\n          return true; // Allow if not tracking or allowing backorders\n        }\n\n        const inventoryQuantity = variant.inventory_quantity || 0;\n        const quantityInCart = this.#getQuantityInCart(variantId);\n        const remainingQuantity = inventoryQuantity - quantityInCart;\n\n        if (remainingQuantity <= 0) {\n          // Show error message\n          this.#setLiveRegionText(\"Maximum quantity already in cart\");\n          return false;\n        }\n\n        if (requestedQuantity > remainingQuantity) {\n          // Show error message with available quantity\n          this.#setLiveRegionText(`Only ${remainingQuantity} available (${quantityInCart} already in cart)`);\n          return false;\n        }\n\n        return true;\n      } catch (error) {\n        console.error('[ProductForm] Error checking cart quantity:', error);\n        return true; // Allow on error\n      }\n    }\n\n    /**\n     * Handles variant selection changes and updates UI accordingly\n     * @param {CustomEvent} event - The variant change event\n     */\n    #handleVariantChange = (event) => {\n      const variant = event.detail.variant;\n      if (!variant) {\n  this.refs.variantId.value = '';\n  const fallback = event.detail.fallbackVariant;\n  if (this.refs.price && fallback) {\n    this.refs.price.textContent = this.#formatMoney(fallback.price);\n  }\n  if (this.refs.comparePrice && fallback) {\n    if (fallback.compare_at_price && fallback.compare_at_price > fallback.price) {\n      this.refs.comparePrice.textContent = this.#formatMoney(fallback.compare_at_price);\n      this.refs.comparePrice.classList.remove('hidden');\n    } else {\n      this.refs.comparePrice.classList.add('hidden');\n      this.refs.comparePrice.textContent = '';\n    }\n  }\n  this.refs.addToCartButtonContainer?.disable?.();\n  return;\n}\n\n//\n\n      this.refs.variantId.value = variant.id;\n      this.currentInventory = variant.inventory_quantity;\n\n      const continueSelling = variant.inventory_policy === \"continue\";\n      const inventoryManagement = variant.inventory_management;\n\n      // Set inventory limit (not accounting for cart - we check at submission instead)\n      let inventoryLimit;\n      if (continueSelling || inventoryManagement !== 'shopify') {\n        inventoryLimit = Infinity;\n      } else {\n        inventoryLimit = variant.inventory_quantity || 0;\n      }\n\n      if (!variant.available && !continueSelling) {\n        this.refs.addToCartButtonContainer?.disable?.();\n      } else {\n        this.refs.addToCartButtonContainer?.enable?.();\n      }\n\n      if (this.refs.price) {\n        this.refs.price.textContent = this.#formatMoney(variant.price);\n      }\n\n      if (this.refs.comparePrice) {\n        if (variant.compare_at_price && variant.compare_at_price > variant.price) {\n          // Always set content first, then remove hidden class\n          this.refs.comparePrice.textContent = this.#formatMoney(variant.compare_at_price);\n          this.refs.comparePrice.classList.remove('hidden');\n        } else {\n          // Add hidden class and clear content\n          this.refs.comparePrice.classList.add('hidden');\n          this.refs.comparePrice.textContent = '';\n        }\n      }\n\n      const isPreorder =\n        variant.preorder &&\n        variant.preorder.enabled &&\n        variant.inventory_quantity <= 0 &&\n        variant.inventory_policy === \"continue\";\n\n      this.#updatePreorderUi(variant, isPreorder);\n\n      ThemeBus.dispatchEvent(\n        new CustomEvent(EVENTS.variantInventory, {\n          detail: { max: inventoryLimit, preorder: isPreorder }\n        })\n      );\n\n      ThemeBus.dispatchEvent(new CustomEvent(EVENTS.variantOutOfStock, { detail: { variant } }));\n\n      // Update URL with selected variant\n      const url = new URL(window.location.href);\n      url.searchParams.set(\"variant\", variant.id);\n      window.history.replaceState({}, \"\", url);\n    };\n\n    #handleVariantChangeFromBus = (event) => {\n      // Reuse same logic\n      this.#handleVariantChange(event);\n    };\n\n    /**\n     * Gets the quantity of a variant already in the cart\n     * @param {number} variantId - The variant ID to check\n     * @returns {number} The quantity in cart\n     */\n    #getQuantityInCart(variantId) {\n      if (!window.__cart || !window.__cart.items) return 0;\n\n      const cartItem = window.__cart.items.find(item => item.variant_id == variantId);\n      return cartItem ? cartItem.quantity : 0;\n    }\n\n    /**\n     * Updates the screen reader accessible live region and shows visual feedback for errors\n     * @param {string} text - The text to announce\n     */\n    #setLiveRegionText(text) {\n      // Update screen reader live region (always hidden)\n      if (this.refs.liveRegion) {\n      this.refs.liveRegion.textContent = text;\n    }\n\n      // Show error messages visually in the dedicated error div\n      if (!this.refs.errorMessage) return;\n\n      const isError = text.toLowerCase().includes('maximum') ||\n                      text.toLowerCase().includes('only') ||\n                      text.toLowerCase().includes('error') ||\n                      text.toLowerCase().includes('failed');\n\n      if (isError) {\n        this.refs.errorMessage.textContent = text;\n        this.refs.errorMessage.classList.remove('hidden');\n\n        // Auto-hide after 5 seconds\n        setTimeout(() => {\n          this.refs.errorMessage.classList.add('hidden');\n          this.refs.errorMessage.textContent = '';\n        }, 5000);\n      } else {\n        // Hide error message for success messages\n        this.refs.errorMessage.classList.add('hidden');\n        this.refs.errorMessage.textContent = '';\n      }\n    }\n\n    /**\n     * Formats money using Shopify's currency settings\n     * @param {number} cents - Price in cents\n     * @returns {string} Formatted price string\n     */\n    #updatePreorderUi(variant, isPreorder) {\n      const button = this.refs.addToCartButton;\n      const buttonText = button?.querySelector(\"span\");\n\n      if (!button || !buttonText) return;\n\n      if (!this.defaultAddToCartText) {\n        this.defaultAddToCartText = buttonText.textContent.trim();\n      }\n\n      let messageEl = this.querySelector(\"[data-preorder-message]\");\n\n      if (!messageEl) {\n        messageEl = document.createElement(\"div\");\n        messageEl.setAttribute(\"data-preorder-message\", \"\");\n        messageEl.className = \"text-sm mt-2\";\n        this.refs.addToCartButtonContainer?.after(messageEl);\n      }\n\n      if (isPreorder) {\n        buttonText.textContent = variant.preorder.button_text || \"Pre-order now\";\n\n        let message = variant.preorder.message || \"\";\n\n        messageEl.textContent = message\n          ? `Dispatching from: ${message}`\n          : \"\";\n\n        messageEl.classList.remove(\"hidden\");\n      } else {\n        buttonText.textContent = this.defaultAddToCartText;\n        messageEl.textContent = \"\";\n        messageEl.classList.add(\"hidden\");\n      }\n    }\n\n    #formatMoney(cents) {\n      const currency = window.shopCurrency || \"GBP\";\n      const locale = window.shopLocale || \"en-GB\";\n\n      return new Intl.NumberFormat(locale, {\n        style: \"currency\",\n        currency,\n      }).format(cents / 100);\n    }\n  }\n\n  if (!customElements.get(\"product-form-component\")) {\n    customElements.define(\"product-form-component\", ProductFormComponent);\n  }\n}\n\n// Auto-initialize when module loads\ninitProductForm();\n"],
  "mappings": "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",
  "names": []
}
