{
  "version": 3,
  "sources": ["/cdn/shop/t/37/assets/variant-picker.js?bt_rev=20260728_purchase_layout"],
  "sourcesContent": ["/* eslint-disable max-len */\n/**\n * Dependencies:\n * - Custom select component\n * - Fetch cache (theme.fetchCache)\n * - Quickbuy content transformer (theme.quickBuy.convertToQuickBuyContent)\n *\n * Required translation strings:\n * - noStock\n * - noVariant\n */\n\nif (!customElements.get('variant-picker')) {\n  class VariantPicker extends HTMLElement {\n    constructor() {\n      super();\n      this.quickBuyContainer = this.closest('.js-quickbuy');\n      this.featuredProductContainer = this.closest('.cc-featured-product');\n      this.section = this.quickBuyContainer\n                     || this.featuredProductContainer\n                     || this.closest('.shopify-section');\n      this.optionSelectors = this.querySelectorAll('.option-selector:not(.option-selector--custom)');\n      this.productAvailable = this.classList.contains('variant-picker--product-available');\n      this.variant = this.getVariantData();\n      this.variantRequestId = 0;\n\n      this.addListeners();\n      this.updateVariantContent();\n      if (!this.quickBuyContainer && !this.featuredProductContainer) {\n        setTimeout(this.applySearchParams.bind(this), 0);\n      }\n      this.setAttribute('loaded', '');\n    }\n\n    addListeners() {\n      this.boundHandleVariantChange = this.handleVariantChange.bind(this);\n      this.addEventListener('change', this.boundHandleVariantChange);\n\n      this.boundHandleLabelMouseEnter = this.handleLabelMouseEnter.bind(this);\n      this.querySelectorAll('.opt-label, .custom-select__option').forEach((el) => {\n        el.addEventListener('mouseenter', this.boundHandleLabelMouseEnter);\n        el.addEventListener('touchstart', this.boundHandleLabelMouseEnter, { passive: true, once: true });\n        el.addEventListener('mouseleave', VariantPicker.handleLabelMouseLeave);\n      });\n    }\n\n    removeListeners() {\n      this.removeEventListener('change', this.boundHandleVariantChange);\n      this.querySelectorAll('.opt-label, .custom-select__option').forEach((el) => {\n        el.removeEventListener('mouseenter', this.boundHandleLabelMouseEnter);\n        el.removeEventListener('touchstart', this.boundHandleLabelMouseEnter);\n        el.removeEventListener('mouseleave', VariantPicker.handleLabelMouseLeave);\n      });\n    }\n\n    /**\n     * Update parts of this component that require JS to display correctly.\n     */\n    updateVariantContent() {\n      this.updateStatusClasses();\n      this.updateAddToCartButton();\n      this.updateSwatchLabel();\n      this.updateAvailability();\n    }\n\n    getProductForm() {\n      return this.section.querySelector('.js-product-form');\n    }\n\n    /**\n     * Handles 'mouseenter' events on option labels. Preloads links.\n     * @param {object} evt - Event object.\n     */\n    handleLabelMouseEnter(evt) {\n      const label = evt.currentTarget;\n      if (label.dataset.preloaded) return; // Preload completed\n      if (label.dataset.preloadTimeout) return; // Preload waiting\n      if (label.matches('.opt-btn:checked + .opt-label, [aria-selected=\"true\"]')) return; // Already selected\n\n      // Build option array if clicked\n      const input = label.htmlFor ? document.getElementById(label.htmlFor) : label;\n      const optionIds = this.getSelectedOptionIds();\n      const inputOptionIndex = Array.from(this.optionSelectors).indexOf(input.closest('.option-selector'));\n      optionIds[inputOptionIndex] = input.dataset.valueId;\n\n      // If all options are selected\n      if (optionIds.indexOf(null) === -1) {\n        // Wait to predict click-intent and preload link\n        label.dataset.preloadTimeout = setTimeout(() => {\n          label.dataset.preloaded = true;\n          label.removeAttribute('data-preload-timeout');\n          const combinedProductUrl = input.dataset.productUrl;\n          const url = this.constructVariantUrl(\n            combinedProductUrl,\n            optionIds,\n            input.dataset.variantId\n          );\n          theme.fetchCache.preload(url.toString());\n        }, 250);\n      }\n    }\n\n    /**\n     * Handles 'mouseleave' events on option labels. Cancels link preload if in/out fast.\n     * @param {object} evt - Event object.\n     */\n    static handleLabelMouseLeave(evt) {\n      const label = evt.currentTarget;\n      clearTimeout(label.dataset.preloadTimeout);\n      label.removeAttribute('data-preload-timeout');\n    }\n\n    /**\n     * Create a URL for fetching a product or variant.\n     * @param {string} combinedProductUrl - URL for a combined product. Optional.\n     * @param {Array} optionIds - Selected option IDs to include in the URL. Optional.\n     * @param {string} variantId - Variant ID to use if not a combined product. Optional.\n     * @returns {URL} Variant URL\n     */\n    constructVariantUrl(combinedProductUrl, optionIds, variantId) {\n      let url = null;\n      if (combinedProductUrl) {\n        url = new URL(combinedProductUrl, window.location.origin);\n        url.searchParams.set('option_values', optionIds.join(','));\n      } else {\n        url = new URL(this.dataset.url, window.location.origin);\n      }\n      const sectionIds = [this.dataset.sectionId];\n      if (!this.quickBuyContainer && !this.featuredProductContainer) {\n        document.querySelectorAll('.cc-variant-dependent-section [data-section-id]').forEach((e) => {\n          if (e.closest('.rte')) return;\n          sectionIds.push(e.dataset.sectionId);\n        });\n      }\n      url.searchParams.set('sections', sectionIds.join(','));\n      if (combinedProductUrl || !variantId || optionIds.includes(null)) {\n        url.searchParams.set('option_values', optionIds.join(','));\n      } else {\n        url.searchParams.set('variant', variantId);\n      }\n      return url;\n    }\n\n    /**\n     * Handles 'change' events on the variant picker element.\n     * @param {object} evt - Event object.\n     */\n    handleVariantChange(evt) {\n      const selectedOptionIds = this.getSelectedOptionIds();\n\n      // Immediately update swatch label\n      this.updateSwatchLabel();\n\n      // Construct new variant URL and fetch it, using theme cache\n      const combinedProductUrl = evt.target.dataset.productUrl || evt.detail?.productUrl;\n      const variantId = evt.target.dataset.variantId || evt.detail?.variantId;\n      const url = this.constructVariantUrl(combinedProductUrl, selectedOptionIds, variantId);\n      this.variantRequestId += 1;\n      const currentRequestId = this.variantRequestId;\n\n      theme.fetchCache.fetch(url.toString())\n        .then((responseText) => {\n          if (currentRequestId !== this.variantRequestId) return;\n\n          const responseData = JSON.parse(responseText);\n\n          // Update content\n          Object.entries(responseData).forEach(([section, htmlStr]) => {\n            const html = new DOMParser().parseFromString(htmlStr, 'text/html');\n            const sectionId = `shopify-section-${section}`;\n            let target = this.section;\n            let newContent = html.getElementById(sectionId);\n\n            if (this.section.id !== sectionId) {\n              if (!this.quickBuyContainer) {\n                target = document.getElementById(sectionId);\n              } else {\n                const quickBuyTemplate = html.getElementById('quick-buy-template')?.content.querySelector('.js-product');\n                if (quickBuyTemplate) newContent = quickBuyTemplate;\n              }\n            }\n\n            this.updateContent(target, newContent, combinedProductUrl);\n          });\n\n          // Restore focus\n          if (!evt.detail?.noFocus) {\n            document.querySelector(`#${evt.target.id}-button, input#${evt.target.id}`)?.focus();\n          }\n\n          // Update URL and announce changes\n          const newVariantPicker = this.section.querySelector('variant-picker');\n          setTimeout(() => newVariantPicker.announceChange(), 10);\n        });\n    }\n\n    /**\n     * Announces the current variant after a variant change.\n     */\n    announceChange() {\n      const selectedOptionIds = this.getSelectedOptionIds();\n      if (!selectedOptionIds.includes(null)) {\n        this.updateUrl();\n      }\n\n      this.dispatchEvent(new CustomEvent('on:variant:change', {\n        bubbles: true,\n        detail: {\n          form: this.getProductForm(),\n          variant: this.variant,\n          selectedOptions: this.getSelectedOptions()\n        }\n      }));\n    }\n\n    /**\n     * Replace content when the variant or product changes.\n     * @param {Element} target - Target container for replacing content within.\n     * @param {document} newContent - New content containing elements to use.\n     * @param {boolean} productChange - Product is changing.\n     */\n    updateContent(target, newContent, productChange) {\n      // If something's not right, do nothing\n      if (!target || !newContent) return;\n\n      // Preselection - only update certain option value attributes\n      if (this.getSelectedOptions().indexOf(null) !== -1 && !productChange) {\n        target.querySelectorAll('.js-option[data-value-id]').forEach((input) => {\n          const newInput = newContent.querySelector(`.js-option[data-value-id=\"${input.dataset.valueId}\"]`);\n          input.className = newInput.className;\n          if (newInput.dataset.variantId) {\n            input.dataset.variantId = newInput.dataset.variantId;\n          } else {\n            delete input.dataset.variantId;\n          }\n          if (input.classList.contains('custom-select__option')) {\n            input.innerHTML = newInput.innerHTML;\n          }\n        });\n        this.updateStatusClasses();\n        return;\n      }\n\n      let replaceSelector = '[data-dynamic-variant-content]';\n      if (productChange) {\n        replaceSelector += ', [data-dynamic-product-content]';\n      }\n      const toReplaceList = target.querySelectorAll(replaceSelector);\n\n      toReplaceList.forEach((toReplace) => {\n        const replaceWith = toReplace.dataset.dynamicVariantContent\n          ? newContent.querySelector(`[data-dynamic-variant-content=\"${CSS.escape(toReplace.dataset.dynamicVariantContent)}\"]`)\n          : newContent.querySelector(`[data-dynamic-product-content=\"${CSS.escape(toReplace.dataset.dynamicProductContent)}\"]`);\n        if (!replaceWith) return;\n\n        // Dispatch 'on:variant:before-replace-element' event before replacing element\n        document.dispatchEvent(new CustomEvent('on:variant:before-replace-element', {\n          bubbles: true,\n          detail: {\n            toReplace,\n            replaceWith\n          }\n        }));\n\n        // If in quick buy, content needs mutating\n        if (this.quickBuyContainer && theme.quickBuy) {\n          theme.quickBuy.convertToQuickBuyContent(\n            replaceWith,\n            this.quickBuyContainer.dataset.productUrl\n          );\n        }\n\n        // Transfer basic input values\n        toReplace.querySelectorAll('input[id]:not([type=\"hidden\"]), select[id]').forEach((sourceInput) => {\n          if (sourceInput.matches('.custom-select__native')) {\n            const customSelectId = sourceInput.id.replace('-native', '');\n            const targetInput = replaceWith.querySelector(`#${CSS.escape(customSelectId)}`);\n            const option = targetInput.querySelector(`.js-option[data-value=\"${CSS.escape(sourceInput.value)}\"]`);\n            setTimeout(() => {\n              targetInput.selectOption(option);\n            }, 0);\n          } else {\n            const targetInput = replaceWith.querySelector(`#${CSS.escape(sourceInput.id)}`);\n            if (!targetInput) return;\n            if (sourceInput.type === 'radio' || sourceInput.type === 'checkbox') {\n              targetInput.toggleAttribute('checked', sourceInput.checked);\n            } else {\n              targetInput.value = sourceInput.value;\n            }\n          }\n        });\n\n        // Replace content\n        const isIdInput = replaceWith.matches('input[name=\"id\"]');\n        if (isIdInput) {\n          // Update ID input - preserving listeners\n          [...replaceWith.attributes].forEach(\n            (attr) => toReplace.setAttribute(attr.name, attr.value)\n          );\n          toReplace.value = replaceWith.value;\n          // Defer change event until all forms are accurate\n          setTimeout(() => {\n            toReplace.dispatchEvent(new Event('change', { bubbles: true }));\n          }, 0);\n        } else {\n          // Remember toReplace becomes detached\n          toReplace.replaceWith(replaceWith);\n        }\n\n        // Do not mistake input value changes for variant changes - remove listeners\n        replaceWith.querySelectorAll('variant-picker').forEach((el) => el.removeListeners());\n\n        // Set values of any unselected <custom-select> elements again\n        // A fetched variant may not appear selected\n        const selectedOptionIds = this.getSelectedOptionIds();\n        selectedOptionIds.forEach((optionId) => {\n          const toSelect = replaceWith.querySelector(`.option-selector .custom-select__option[data-value-id=\"${optionId}\"]:not([aria-selected=\"true\"])`);\n          if (toSelect) {\n            setTimeout(() => {\n              toSelect.closest('custom-select').selectOption(toSelect);\n            }, 0);\n          }\n        });\n\n        // Update variant picker after potential changes are applied\n        setTimeout(() => {\n          replaceWith.querySelectorAll('variant-picker').forEach((el) => {\n            el.addListeners();\n            el.updateVariantContent();\n          });\n        }, 10);\n      });\n    }\n\n    /**\n     * Set status classes to help with styling.\n     */\n    updateStatusClasses() {\n      const selectedOpts = this.getSelectedOptionIds();\n      const nullCount = selectedOpts.filter((x) => x === null).length;\n      const isSingleNullAtEnd = nullCount === 1 && selectedOpts[selectedOpts.length - 1] === null;\n      this.classList.toggle('variant-picker--preselection', nullCount > 0);\n      this.classList.toggle('variant-picker--pre-last-selection', nullCount > 0 && !isSingleNullAtEnd);\n    }\n\n    /**\n     * Copies the selected value into a swatch label. (Required for pre-selection.)\n     */\n    updateSwatchLabel() {\n      this.querySelectorAll('.option-selector:has(.js-color-text)').forEach((option) => {\n        const label = option.querySelector('.js-color-text');\n        const input = option.querySelector('.js-option:is(:checked, [aria-selected=\"true\"])');\n        label.textContent = input ? input.value : '';\n      });\n    }\n\n    /**\n     * Updates the availability status in option selectors.\n     */\n    updateAvailability() {\n      if (this.dataset.availability === 'prune') {\n        const toChange = this.querySelectorAll('.js-option.is-unavailable:is(:checked, [aria-selected=\"true\"])');\n        toChange.forEach((selected) => {\n          const toSelect = selected.closest('.option-selector').querySelector('.js-option:not(.is-unavailable, [data-value=\"\"])');\n          if (toSelect) {\n            setTimeout(() => {\n              if (toSelect.closest('custom-select')) {\n                toSelect.closest('custom-select').selectOption(toSelect);\n              } else {\n                toSelect.click();\n              }\n            }, 20); // Trigger after any updateContent logic has occurred\n          }\n        });\n      }\n    }\n\n    /**\n     * Updates the \"Add to Cart\" button label and disabled state.\n     */\n    updateAddToCartButton() {\n      const productForm = this.getProductForm();\n      if (!productForm) return;\n\n      this.addBtn = productForm.querySelector('[name=\"add\"]');\n\n      // Product not available\n      if (!this.productAvailable) {\n        this.addBtn.disabled = true;\n        this.setAddToCartButtonText(theme.strings.noStock);\n        return;\n      }\n\n      // Preselection\n      if (this.getSelectedOptions().indexOf(null) !== -1) {\n        if (this.addBtn.dataset.preselectionDisabled === 'true') {\n          this.addBtn.disabled = true;\n          this.setAddToCartButtonText(this.addBtn.dataset.preselectionText);\n        } else {\n          this.addBtn.disabled = false;\n          this.setAddToCartButtonText(this.addBtn.dataset.addToCartText);\n        }\n        return;\n      }\n\n      // No variant\n      if (!this.variant) {\n        this.addBtn.disabled = true;\n        this.setAddToCartButtonText(theme.strings.noVariant);\n        return;\n      }\n\n      // Sold out\n      if (!this.variant.available) {\n        this.addBtn.disabled = true;\n        this.setAddToCartButtonText(theme.strings.noStock);\n        return;\n      }\n\n      // Add to cart\n      this.addBtn.disabled = false;\n      this.setAddToCartButtonText(this.addBtn.dataset.addToCartText);\n    }\n\n    /**\n     * Updates the button label without removing PDP price markup.\n     * @param {string} text - Button label.\n     */\n    setAddToCartButtonText(text) {\n      const label = this.addBtn.querySelector('[data-add-to-cart-label]');\n      if (label) {\n        label.textContent = text;\n      } else {\n        this.addBtn.textContent = text;\n      }\n    }\n\n    /**\n     * Updates the url with the selected variant id.\n     */\n    updateUrl() {\n      if (this.dataset.updateUrl === 'false') return;\n      const url = this.variant ? `${this.dataset.url}?variant=${this.variant.id}` : this.dataset.url;\n      window.history.replaceState({ }, '', url);\n    }\n\n    /**\n     * Gets the variant data for a product.\n     * @returns {?object}\n     */\n    getVariantData() {\n      const dataEl = this.section.querySelector('variant-picker [type=\"application/json\"]');\n      return dataEl ? JSON.parse(dataEl.textContent) : null;\n    }\n\n    /**\n     * Get the selected values from a list of variant options.\n     * @returns {Array} Array of selected option values, value is null if not selected.\n     */\n    getSelectedOptions() {\n      const selectedOptions = [];\n\n      this.optionSelectors.forEach((selector) => {\n        if (selector.dataset.selectorType === 'dropdown') {\n          const selected = selector.querySelector('.custom-select__option[aria-selected=\"true\"]');\n          selectedOptions.push(selected && selected.dataset.value !== '' ? selected.dataset.value : null);\n        } else {\n          const selected = selector.querySelector('input:checked');\n          selectedOptions.push(selected ? selected.value : null);\n        }\n      });\n\n      return selectedOptions;\n    }\n\n    /**\n     * Get the selected option value ids from a list of variant options.\n     * @returns {Array} Array of selected option value ids, value is null if not selected.\n     */\n    getSelectedOptionIds() {\n      const selectedOptionIds = [];\n\n      this.optionSelectors.forEach((selector) => {\n        if (selector.dataset.selectorType === 'dropdown') {\n          const selected = selector.querySelector('.custom-select__option[aria-selected=\"true\"]');\n          selectedOptionIds.push(selected && selected.dataset.value !== '' ? selected.dataset.valueId : null);\n        } else {\n          const selected = selector.querySelector('input:checked');\n          selectedOptionIds.push(selected ? selected.dataset.valueId : null);\n        }\n      });\n\n      return selectedOptionIds;\n    }\n\n    /**\n     * Apply search parameters (set by product card swatches).\n     */\n    applySearchParams() {\n      const searchParams = new URLSearchParams(window.location.search);\n\n      Array.from(searchParams.keys()).forEach((key) => {\n        const value = searchParams.get(key);\n        const optionSelectors = Array.from(this.optionSelectors);\n        const matchingOptionSelector = optionSelectors.find((x) => x.dataset.option === key);\n        if (!matchingOptionSelector) return;\n\n        if (matchingOptionSelector.dataset.selectorType === 'dropdown') {\n          const colorOptionDropdown = matchingOptionSelector.querySelector(`.custom-select__option[data-value=\"${CSS.escape(value)}\"]:not([aria-selected=\"true\"])`);\n          if (colorOptionDropdown) {\n            const customSelect = colorOptionDropdown.closest('custom-select');\n            const convertEvent = (evt) => {\n              evt.detail.noFocus = true;\n              customSelect.dispatchEvent(\n                new CustomEvent('change', { bubbles: true, cancelable: false, detail: evt.detail })\n              );\n            };\n            customSelect.addEventListener('change', convertEvent, { once: true });\n            customSelect.selectOption(colorOptionDropdown);\n          }\n        } else {\n          const matchingInput = matchingOptionSelector.querySelector(`input[value=\"${CSS.escape(value)}\"]:not(:checked)`);\n          if (matchingInput) {\n            const matchingOptionValue = matchingOptionSelector.querySelector('.option-selector__label-value');\n            if (matchingOptionValue) {\n              matchingOptionSelector.querySelector('.option-selector__label-value').textContent = value;\n            }\n            matchingInput.checked = true;\n            matchingInput.dispatchEvent(\n              new CustomEvent('change', { bubbles: true, cancelable: false, detail: { noFocus: true } })\n            );\n          }\n        }\n      });\n    }\n  }\n\n  customElements.define('variant-picker', VariantPicker);\n}\n"],
  "mappings": "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",
  "names": []
}
