{
  "version": 3,
  "sources": ["/cdn/shop/t/30/assets/component-subscribe-and-save.js?sas_v=202607081446"],
  "sourcesContent": ["class SubscribeAndSaveBlock extends HTMLElement {\n  connectedCallback() {\n    if (this.initialized) return;\n\n    this.initialized = true;\n    this.isBusy = false;\n    this.variants = this.parseMainVariants();\n    this.currentVariantInput = this.querySelector('[data-current-variant-id]');\n    this.optionCards = Array.from(this.querySelectorAll('[data-subscribe-and-save-card]'));\n    this.purchaseOptionInputs = Array.from(this.querySelectorAll('[data-subscribe-and-save-purchase-option]'));\n    this.frequencyToggle = this.querySelector('[data-subscribe-and-save-frequency-toggle]');\n    this.frequencyPanel = this.querySelector('[data-subscribe-and-save-frequency-panel]');\n    this.frequencyOptions = Array.from(this.querySelectorAll('[data-subscribe-and-save-frequency-option]'));\n    this.householdButtons = Array.from(this.querySelectorAll('[data-subscribe-and-save-household-option]'));\n    this.recommendedLabel = this.querySelector('[data-subscribe-and-save-recommended-label]');\n    this.badge = this.querySelector('[data-subscribe-and-save-badge]');\n    this.priceCompare = this.querySelector('[data-subscribe-and-save-compare]');\n    this.priceCurrent = this.querySelector('[data-subscribe-and-save-current-price]');\n    this.oncePrice = this.querySelector('[data-subscribe-and-save-once-price]');\n    this.description = this.querySelector('[data-subscribe-and-save-description]');\n    this.summary = this.querySelector('[data-subscribe-and-save-summary]');\n    this.summaryToday = this.querySelector('[data-subscribe-and-save-summary-today]');\n    this.summaryFutureLabel = this.querySelector('[data-subscribe-and-save-summary-future-label]');\n    this.summaryRefill = this.querySelector('[data-subscribe-and-save-summary-refill]');\n    this.ctaButton = this.querySelector('[data-subscribe-and-save-cta]');\n    this.ctaText = this.querySelector('[data-subscribe-and-save-cta-text]');\n    this.errorRegion = this.querySelector('[data-subscribe-and-save-error]');\n    this.subscribeOption = this.querySelector('.subscribe-and-save__option--subscribe');\n    this.onetimeOption = this.querySelector('.subscribe-and-save__option--onetime');\n    this.trustSlider = this.querySelector('[data-subscribe-and-save-trust-slider]');\n    this.trustTrack = this.querySelector('[data-subscribe-and-save-trust-track]');\n    this.trustSlides = Array.from(this.querySelectorAll('[data-subscribe-and-save-trust-slide]'));\n    this.trustDots = Array.from(this.querySelectorAll('[data-subscribe-and-save-trust-dot]'));\n    this.trustIndex = 0;\n    this.pdpRoot = this.closest('pdp-main-product, pdp-main-product-new-page');\n    this.stickyButton = this.pdpRoot?.querySelector('[data-pdp-sticky-add-to-cart]') || null;\n    this.controlsStickyButton = Boolean(this.stickyButton && !this.pdpRoot?.querySelector('[data-buy-buttons-block]'));\n\n    this.selectedPlan = this.dataset.initialPlan === 'once' ? 'once' : 'subscription';\n    this.selectedHousehold =\n      this.householdButtons.find((button) => button.classList.contains('is-active'))?.dataset.householdValue ||\n      this.householdButtons[0]?.dataset.householdValue ||\n      '';\n    this.currentVariant = this.getVariantById(this.getCurrentVariantId()) || this.getDatasetVariant();\n\n    this.onOptionCardClick = this.handleOptionCardClick.bind(this);\n    this.onOptionCardKeydown = this.handleOptionCardKeydown.bind(this);\n    this.onPurchaseOptionChange = this.handlePurchaseOptionChange.bind(this);\n    this.onFrequencyToggleClick = this.handleFrequencyToggleClick.bind(this);\n    this.onFrequencyOptionChange = this.handleFrequencyOptionChange.bind(this);\n    this.onHouseholdButtonClick = this.handleHouseholdButtonClick.bind(this);\n    this.onCtaClick = this.handleCtaClick.bind(this);\n    this.onVariantInputChange = this.handleVariantInputChange.bind(this);\n    this.onStickyClick = this.handleStickyClick.bind(this);\n    this.onTrustDotClick = this.handleTrustDotClick.bind(this);\n    this.onTrustPointerEnter = this.stopTrustAutoplay.bind(this);\n    this.onTrustPointerLeave = this.startTrustAutoplay.bind(this);\n\n    this.optionCards.forEach((card) => {\n      card.addEventListener('click', this.onOptionCardClick);\n      card.addEventListener('keydown', this.onOptionCardKeydown);\n    });\n    this.purchaseOptionInputs.forEach((input) => input.addEventListener('change', this.onPurchaseOptionChange));\n    this.frequencyToggle?.addEventListener('click', this.onFrequencyToggleClick);\n    this.frequencyOptions.forEach((input) => input.addEventListener('change', this.onFrequencyOptionChange));\n    this.householdButtons.forEach((button) => button.addEventListener('click', this.onHouseholdButtonClick));\n    this.currentVariantInput?.addEventListener('change', this.onVariantInputChange);\n    this.ctaButton?.addEventListener('click', this.onCtaClick);\n\n    if (this.controlsStickyButton) {\n      this.stickyButton.addEventListener('click', this.onStickyClick, { capture: true });\n    }\n\n    this.setupTrustSlider();\n    this.applyHouseholdRecommendation(this.getSelectedHouseholdButton(), { sync: false });\n    this.syncUI();\n  }\n\n  disconnectedCallback() {\n    this.optionCards?.forEach((card) => {\n      card.removeEventListener('click', this.onOptionCardClick);\n      card.removeEventListener('keydown', this.onOptionCardKeydown);\n    });\n    this.purchaseOptionInputs?.forEach((input) => input.removeEventListener('change', this.onPurchaseOptionChange));\n    this.frequencyToggle?.removeEventListener('click', this.onFrequencyToggleClick);\n    this.frequencyOptions?.forEach((input) => input.removeEventListener('change', this.onFrequencyOptionChange));\n    this.householdButtons?.forEach((button) => button.removeEventListener('click', this.onHouseholdButtonClick));\n    this.currentVariantInput?.removeEventListener('change', this.onVariantInputChange);\n    this.ctaButton?.removeEventListener('click', this.onCtaClick);\n\n    if (this.controlsStickyButton && this.stickyButton) {\n      this.stickyButton.removeEventListener('click', this.onStickyClick, { capture: true });\n    }\n\n    this.teardownTrustSlider();\n  }\n\n  setupTrustSlider() {\n    if (!(this.trustSlider instanceof HTMLElement) || !(this.trustTrack instanceof HTMLElement)) return;\n    if (this.trustSlides.length <= 1) return;\n\n    this.trustDots.forEach((dot) => dot.addEventListener('click', this.onTrustDotClick));\n    this.trustSlider.addEventListener('mouseenter', this.onTrustPointerEnter);\n    this.trustSlider.addEventListener('mouseleave', this.onTrustPointerLeave);\n    this.trustSlider.addEventListener('focusin', this.onTrustPointerEnter);\n    this.trustSlider.addEventListener('focusout', this.onTrustPointerLeave);\n\n    this.setTrustSlide(0);\n    this.startTrustAutoplay();\n  }\n\n  teardownTrustSlider() {\n    this.stopTrustAutoplay();\n    this.trustDots?.forEach((dot) => dot.removeEventListener('click', this.onTrustDotClick));\n    this.trustSlider?.removeEventListener('mouseenter', this.onTrustPointerEnter);\n    this.trustSlider?.removeEventListener('mouseleave', this.onTrustPointerLeave);\n    this.trustSlider?.removeEventListener('focusin', this.onTrustPointerEnter);\n    this.trustSlider?.removeEventListener('focusout', this.onTrustPointerLeave);\n  }\n\n  handleTrustDotClick(event) {\n    const dot = event.currentTarget;\n    if (!(dot instanceof HTMLElement)) return;\n\n    const index = Number.parseInt(dot.dataset.index || '', 10);\n    if (Number.isNaN(index)) return;\n\n    this.setTrustSlide(index);\n    this.restartTrustAutoplay();\n  }\n\n  setTrustSlide(index) {\n    if (!(this.trustTrack instanceof HTMLElement) || this.trustSlides.length === 0) return;\n\n    const slideCount = this.trustSlides.length;\n    this.trustIndex = ((index % slideCount) + slideCount) % slideCount;\n    this.trustTrack.style.transform = `translateX(-${this.trustIndex * 100}%)`;\n\n    this.trustDots.forEach((dot, dotIndex) => {\n      const isActive = dotIndex === this.trustIndex;\n      dot.classList.toggle('is-active', isActive);\n      dot.setAttribute('aria-current', isActive ? 'true' : 'false');\n    });\n  }\n\n  startTrustAutoplay() {\n    if (this.trustSlides.length <= 1 || this.trustAutoplayTimer) return;\n    if (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) return;\n\n    this.trustAutoplayTimer = window.setInterval(() => {\n      this.setTrustSlide(this.trustIndex + 1);\n    }, 4000);\n  }\n\n  stopTrustAutoplay() {\n    if (!this.trustAutoplayTimer) return;\n\n    window.clearInterval(this.trustAutoplayTimer);\n    this.trustAutoplayTimer = null;\n  }\n\n  restartTrustAutoplay() {\n    this.stopTrustAutoplay();\n    this.startTrustAutoplay();\n  }\n\n  parseMainVariants() {\n    const script = this.querySelector('[data-subscribe-and-save-main-variants-json]');\n    if (!script) return [];\n\n    try {\n      const parsed = JSON.parse(script.textContent || '[]');\n      return Array.isArray(parsed) ? parsed : [];\n    } catch (error) {\n      console.error(error);\n      return [];\n    }\n  }\n\n  getDatasetVariant() {\n    const id = Number.parseInt(this.dataset.mainVariantId || '', 10);\n    const price = Number.parseInt(this.dataset.mainPriceCents || '0', 10);\n    const compareAtPrice = Number.parseInt(this.dataset.mainCompareCents || '0', 10);\n\n    return {\n      id,\n      available: this.dataset.mainAvailable === 'true',\n      price: Number.isNaN(price) ? 0 : price,\n      compare_at_price: Number.isNaN(compareAtPrice) ? 0 : compareAtPrice,\n    };\n  }\n\n  getCurrentVariantId() {\n    const inputId = Number.parseInt(this.currentVariantInput?.value || '', 10);\n    if (!Number.isNaN(inputId)) return inputId;\n\n    const rootId = Number.parseInt(this.pdpRoot?.currentVariantId || '', 10);\n    if (!Number.isNaN(rootId)) return rootId;\n\n    const datasetId = Number.parseInt(this.dataset.mainVariantId || '', 10);\n    return Number.isNaN(datasetId) ? null : datasetId;\n  }\n\n  getVariantById(variantId) {\n    if (!variantId) return null;\n    return this.variants.find((variant) => String(variant.id) === String(variantId)) || null;\n  }\n\n  handleVariantInputChange() {\n    this.currentVariant = this.getVariantById(this.getCurrentVariantId()) || this.getDatasetVariant();\n    this.syncUI();\n  }\n\n  handleOptionCardClick(event) {\n    const card = event.currentTarget;\n    if (!(card instanceof HTMLElement)) return;\n    if (card.getAttribute('aria-disabled') === 'true') return;\n\n    const interactiveTarget = event.target instanceof HTMLElement\n      ? event.target.closest('button, input, select, textarea, a')\n      : null;\n\n    if (interactiveTarget && interactiveTarget !== card) return;\n\n    this.selectPlan(card.dataset.subscribeAndSaveCard === 'once' ? 'once' : 'subscription');\n  }\n\n  handleOptionCardKeydown(event) {\n    if (event.target instanceof HTMLElement && event.target.closest('button, input, select, textarea, a')) return;\n    if (event.key !== 'Enter' && event.key !== ' ') return;\n\n    event.preventDefault();\n    this.handleOptionCardClick(event);\n  }\n\n  handlePurchaseOptionChange(event) {\n    const value = event.target?.dataset.subscribeAndSavePurchaseOption;\n    this.selectPlan(value === 'subscription' ? 'subscription' : 'once');\n  }\n\n  handleFrequencyToggleClick(event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!(this.frequencyPanel instanceof HTMLElement) || !(this.frequencyToggle instanceof HTMLElement)) return;\n\n    const isOpen = !this.frequencyPanel.hidden;\n\n    this.frequencyPanel.hidden = isOpen;\n    this.frequencyToggle.setAttribute('aria-expanded', String(!isOpen));\n  }\n\n  handleFrequencyOptionChange(event) {\n    event.stopPropagation();\n    this.selectedPlan = 'subscription';\n    this.clearError();\n    this.syncHouseholdSelectionToFrequency();\n    this.syncUI();\n  }\n\n  handleHouseholdButtonClick(event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    const button = event.currentTarget;\n    if (!(button instanceof HTMLElement)) return;\n\n    this.applyHouseholdRecommendation(button, { sync: false });\n    this.selectPlan('subscription');\n  }\n\n  handleCtaClick(event) {\n    event.preventDefault();\n    this.addSelectionToCart({ redirectToCheckout: false });\n  }\n\n  handleStickyClick(event) {\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    this.addSelectionToCart({ redirectToCheckout: false });\n  }\n\n  selectPlan(plan) {\n    if (plan === 'subscription' && !this.hasSubscriptionOptions()) return;\n\n    this.selectedPlan = plan === 'once' ? 'once' : 'subscription';\n    this.clearError();\n    this.syncUI();\n  }\n\n  hasSubscriptionOptions() {\n    return this.frequencyOptions.length > 0;\n  }\n\n  getSelectedFrequencyOption() {\n    return this.frequencyOptions.find((input) => input.checked) || this.frequencyOptions[0] || null;\n  }\n\n  getSelectedHouseholdButton() {\n    return (\n      this.householdButtons.find((button) => button.dataset.householdValue === this.selectedHousehold) ||\n      this.householdButtons.find((button) => button.classList.contains('is-active')) ||\n      this.householdButtons[0] ||\n      null\n    );\n  }\n\n  normalizeMatch(value) {\n    return String(value || '').trim().toLowerCase();\n  }\n\n  frequencyOptionMatches(option, rawMatch) {\n    const match = this.normalizeMatch(rawMatch);\n    if (!match || !(option instanceof HTMLInputElement)) return false;\n\n    const sellingPlanId = this.normalizeMatch(option.dataset.sellingPlanId || option.value);\n    const planMonths = this.normalizeMatch(option.dataset.planMonths);\n    const frequencyLabel = this.normalizeMatch(option.dataset.frequencyLabel);\n\n    if (sellingPlanId === match || planMonths === match) return true;\n\n    if (/^\\d+$/.test(match)) {\n      return new RegExp(`(^|\\\\D)${match}(\\\\D|$)`).test(frequencyLabel);\n    }\n\n    return frequencyLabel.includes(match);\n  }\n\n  findFrequencyOptionByMatch(match) {\n    return this.frequencyOptions.find((option) => this.frequencyOptionMatches(option, match)) || null;\n  }\n\n  applyHouseholdRecommendation(button, { sync = true } = {}) {\n    if (!(button instanceof HTMLElement)) return false;\n\n    this.selectedHousehold = button.dataset.householdValue || '';\n    this.updateHouseholdButtons();\n\n    const matchingOption = this.findFrequencyOptionByMatch(button.dataset.planMatch);\n\n    if (matchingOption instanceof HTMLInputElement) {\n      matchingOption.checked = true;\n    }\n\n    if (sync) this.syncUI();\n    return matchingOption instanceof HTMLInputElement;\n  }\n\n  syncHouseholdSelectionToFrequency() {\n    const selectedOption = this.getSelectedFrequencyOption();\n    if (!(selectedOption instanceof HTMLInputElement)) return;\n\n    const currentButton = this.getSelectedHouseholdButton();\n    if (currentButton instanceof HTMLElement && this.frequencyOptionMatches(selectedOption, currentButton.dataset.planMatch)) {\n      this.updateHouseholdButtons();\n      return;\n    }\n\n    const matchingButton = this.householdButtons.find((button) =>\n      this.frequencyOptionMatches(selectedOption, button.dataset.planMatch)\n    );\n\n    if (matchingButton instanceof HTMLElement) {\n      this.selectedHousehold = matchingButton.dataset.householdValue || '';\n    }\n\n    this.updateHouseholdButtons();\n  }\n\n  updateHouseholdButtons() {\n    this.householdButtons.forEach((button) => {\n      const isActive = button.dataset.householdValue === this.selectedHousehold;\n      button.classList.toggle('is-active', isActive);\n      button.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n    });\n  }\n\n  getSelectedSellingPlanId() {\n    const option = this.getSelectedFrequencyOption();\n    const sellingPlanId = Number.parseInt(option?.dataset.sellingPlanId || option?.value || '', 10);\n    return Number.isNaN(sellingPlanId) ? null : sellingPlanId;\n  }\n\n  isSubscriptionSelected() {\n    return this.selectedPlan === 'subscription';\n  }\n\n  hasValidSubscriptionSelection() {\n    if (!this.isSubscriptionSelected()) return true;\n\n    return Boolean(this.getSelectedSellingPlanId() && this.getRefillVariantId());\n  }\n\n  getMainVariantId() {\n    const variantId = Number.parseInt(this.currentVariant?.id || '', 10);\n    if (!Number.isNaN(variantId)) return variantId;\n\n    return this.getCurrentVariantId();\n  }\n\n  getRefillVariantId() {\n    const refillVariantId = Number.parseInt(this.dataset.refillVariantId || '', 10);\n    return Number.isNaN(refillVariantId) ? null : refillVariantId;\n  }\n\n  getRefillQuantity() {\n    const option = this.getSelectedFrequencyOption();\n    const optionQuantity = Number.parseInt(option?.dataset.refillQuantity || '', 10);\n    if (!Number.isNaN(optionQuantity) && optionQuantity > 0) return optionQuantity;\n\n    const fallbackQuantity = Number.parseInt(this.dataset.refillQuantity || '1', 10);\n    return Number.isNaN(fallbackQuantity) ? 1 : Math.max(1, fallbackQuantity);\n  }\n\n  getRefillPriceCents() {\n    const option = this.getSelectedFrequencyOption();\n    const price = Number.parseInt(option?.dataset.refillPriceCents || '0', 10);\n    return Number.isNaN(price) ? 0 : price;\n  }\n\n  getFrequencyLabel() {\n    const option = this.getSelectedFrequencyOption();\n    return (option?.dataset.frequencyLabel || '').trim();\n  }\n\n  getMainPriceCents() {\n    const price = Number(this.currentVariant?.price ?? this.dataset.mainPriceCents ?? 0);\n    return Number.isFinite(price) ? price : 0;\n  }\n\n  getMainCompareCents() {\n    const compareAtPrice = Number(this.currentVariant?.compare_at_price ?? this.dataset.mainCompareCents ?? 0);\n    return Number.isFinite(compareAtPrice) ? compareAtPrice : 0;\n  }\n\n  getDiscountAmountCents() {\n    const discount = Number.parseInt(this.dataset.discountAmountCents || '0', 10);\n    return Number.isNaN(discount) ? 0 : Math.max(0, discount);\n  }\n\n  getDiscountPercent() {\n    const percent = Number(this.dataset.discountPercent || '0');\n    if (!Number.isFinite(percent)) return 0;\n    return Math.max(0, Math.min(100, percent));\n  }\n\n  getSubscriptionFixedPriceCents() {\n    const price = Number.parseInt(this.dataset.subscriptionFixedPriceCents || '0', 10);\n    return Number.isNaN(price) ? 0 : Math.max(0, price);\n  }\n\n  getSubscriptionMainPriceCents() {\n    const mainPrice = this.getMainPriceCents();\n    let mode = this.dataset.subscriptionPriceMode || 'percent';\n    const amountDiscount = this.getDiscountAmountCents();\n    const percentDiscount = this.getDiscountPercent();\n    const fixedPrice = this.getSubscriptionFixedPriceCents();\n\n    if (mode === 'amount' && amountDiscount <= 0) {\n      mode = 'percent';\n    } else if (mode === 'fixed' && fixedPrice <= 0) {\n      mode = 'percent';\n    }\n\n    if (mode === 'fixed') {\n      if (fixedPrice > 0) return fixedPrice;\n    }\n\n    if (mode === 'percent') {\n      const effectivePercent = percentDiscount > 0 ? percentDiscount : 20;\n      return Math.max(0, Math.round((mainPrice * (100 - effectivePercent)) / 100));\n    }\n\n    return Math.max(0, mainPrice - amountDiscount);\n  }\n\n  getTodayPriceCents() {\n    return this.isSubscriptionSelected() ? this.getSubscriptionMainPriceCents() : this.getMainPriceCents();\n  }\n\n  getDiscountCents() {\n    return Math.max(0, this.getMainPriceCents() - this.getSubscriptionMainPriceCents());\n  }\n\n  getRefillPercent() {\n    const option = this.getSelectedFrequencyOption();\n    const percent = Number.parseInt(option?.dataset.refillPercent || '0', 10);\n    return Number.isNaN(percent) ? 0 : percent;\n  }\n\n  getMainDiscountPercent() {\n    const mainPrice = this.getMainPriceCents();\n    const discount = this.getDiscountCents();\n    if (mainPrice <= 0 || discount <= 0) return 0;\n\n    return Math.round((discount / mainPrice) * 100);\n  }\n\n  getDisplayPercent() {\n    return this.getMainDiscountPercent();\n  }\n\n  fillTemplate(template, replacements) {\n    return Object.entries(replacements).reduce((value, [key, replacement]) => {\n      return value.split(`{${key}}`).join(replacement ?? '');\n    }, template || '');\n  }\n\n  getTemplateReplacements() {\n    const discount = this.getDiscountCents();\n    const displayPercent = this.getDisplayPercent();\n\n    return {\n      amount: this.formatMoney(discount),\n      percent: String(displayPercent),\n      percent_label: `${displayPercent}%`,\n      price: this.formatMoney(this.getRefillPriceCents()),\n      plan: this.getFrequencyLabel(),\n      interval: this.getFrequencyLabel(),\n      quantity: String(this.getRefillQuantity()),\n      subscription_price: this.formatMoney(this.getSubscriptionMainPriceCents()),\n      compare_price: this.formatMoney(this.getMainPriceCents()),\n    };\n  }\n\n  syncUI() {\n    const subscriptionSelected = this.isSubscriptionSelected();\n    const mainPrice = this.getMainPriceCents();\n    const subscriptionMainPrice = this.getSubscriptionMainPriceCents();\n    const discount = this.getDiscountCents();\n    const refillPrice = this.getRefillPriceCents();\n    const isAvailable = Boolean(this.currentVariant?.available);\n    const hasValidSubscription = this.hasValidSubscriptionSelection();\n    const disabled = this.isBusy || !isAvailable || !hasValidSubscription;\n    const replacements = this.getTemplateReplacements();\n\n    this.optionCards.forEach((card) => {\n      if (!(card instanceof HTMLElement)) return;\n\n      const isSubscriptionCard = card.dataset.subscribeAndSaveCard === 'subscription';\n      const isSelected = isSubscriptionCard === subscriptionSelected;\n      card.classList.toggle('is-selected', isSelected);\n      card.setAttribute('aria-pressed', isSelected ? 'true' : 'false');\n    });\n\n    this.subscribeOption?.classList.toggle('is-selected', subscriptionSelected);\n    this.onetimeOption?.classList.toggle('is-selected', !subscriptionSelected);\n\n    this.purchaseOptionInputs.forEach((input) => {\n      const isSubscribe = input.dataset.subscribeAndSavePurchaseOption === 'subscription';\n      input.checked = isSubscribe === subscriptionSelected;\n    });\n\n    if (this.summary instanceof HTMLElement) {\n      this.summary.hidden = !subscriptionSelected;\n    }\n\n    const displayPercent = this.getDisplayPercent();\n\n    if (this.badge instanceof HTMLElement) {\n      const badgeTemplate = this.dataset.badgeTemplate || '';\n      this.badge.hidden = displayPercent <= 0 || !badgeTemplate;\n      if (!this.badge.hidden) {\n        this.badge.textContent = this.fillTemplate(badgeTemplate, replacements);\n      }\n    }\n\n    if (this.description instanceof HTMLElement) {\n      this.description.textContent = this.fillTemplate(this.dataset.subscriptionDescriptionTemplate || '', replacements);\n    }\n\n    if (this.recommendedLabel instanceof HTMLElement) {\n      this.recommendedLabel.textContent = this.fillTemplate(\n        this.dataset.recommendedDeliveryTemplate || 'Recommended delivery: {plan}',\n        replacements\n      );\n    }\n\n    if (this.priceCurrent instanceof HTMLElement) {\n      this.priceCurrent.textContent = this.formatMoney(subscriptionMainPrice);\n    }\n\n    if (this.priceCompare instanceof HTMLElement) {\n      const shouldShowCompare = this.dataset.showSubscriptionComparePrice !== 'false' && discount > 0;\n      this.priceCompare.hidden = !shouldShowCompare;\n      this.priceCompare.textContent = shouldShowCompare ? this.formatMoney(mainPrice) : '';\n    }\n\n    if (this.oncePrice instanceof HTMLElement) {\n      this.oncePrice.textContent = this.formatMoney(mainPrice);\n    }\n\n    if (this.summaryToday instanceof HTMLElement) {\n      this.summaryToday.textContent = this.formatMoney(this.getTodayPriceCents());\n    }\n\n    if (this.summaryFutureLabel instanceof HTMLElement) {\n      this.summaryFutureLabel.textContent = this.fillTemplate(this.dataset.summaryFutureTemplate || '', replacements);\n    }\n\n    if (this.summaryRefill instanceof HTMLElement) {\n      this.summaryRefill.textContent = this.formatMoney(refillPrice);\n    }\n\n    const ctaText = `${this.dataset.ctaLabel || 'Add to cart'} - ${this.formatMoney(this.getTodayPriceCents())}`;\n\n    if (this.ctaText instanceof HTMLElement) {\n      this.ctaText.textContent = ctaText;\n    }\n\n    if (this.ctaButton instanceof HTMLButtonElement) {\n      this.ctaButton.disabled = disabled;\n    }\n\n    if (this.controlsStickyButton && this.stickyButton instanceof HTMLButtonElement) {\n      this.stickyButton.disabled = disabled;\n      this.stickyButton.textContent = ctaText;\n    }\n  }\n\n  shouldLinkSubscriptionItems() {\n    return this.dataset.linkSubscriptionItems !== 'false';\n  }\n\n  createLinkedGroupId() {\n    if (typeof this.pdpRoot?.createLinkedAddonGroupId === 'function') {\n      return this.pdpRoot.createLinkedAddonGroupId();\n    }\n\n    if (window.crypto?.randomUUID) return `sas-${window.crypto.randomUUID()}`;\n    return `sas-${Date.now()}-${Math.random().toString(16).slice(2, 10)}`;\n  }\n\n  buildLinkedProperties({ group, role, removeLinkedRoles = [] }) {\n    const properties = {\n      _offer_source: `${this.dataset.context || 'pdp'}-subscribe-and-save`,\n      _offer_group: group,\n      _offer_role: role,\n    };\n\n    if (removeLinkedRoles.length > 0) {\n      properties._offer_remove_linked_roles = removeLinkedRoles.join(',');\n    }\n\n    return properties;\n  }\n\n  getSelectedAddons() {\n    return typeof this.pdpRoot?.getSelectedAddons === 'function' ? this.pdpRoot.getSelectedAddons() : [];\n  }\n\n  buildCartItems() {\n    const mainVariantId = this.getMainVariantId();\n    const shouldAddSubscriptionRefill = this.isSubscriptionSelected();\n    const shouldLinkSubscription =\n      shouldAddSubscriptionRefill &&\n      this.shouldLinkSubscriptionItems() &&\n      Boolean(this.getRefillVariantId() && this.getSelectedSellingPlanId());\n    const linkedGroupId = shouldLinkSubscription ? this.createLinkedGroupId() : '';\n    const mainRemoveRoles = [];\n    const items = [];\n    const mainItem = {\n      id: mainVariantId,\n      quantity: 1,\n    };\n\n    if (shouldLinkSubscription) {\n      mainRemoveRoles.push('subscription_refill');\n    }\n\n    if (linkedGroupId && mainRemoveRoles.length > 0) {\n      mainItem.properties = this.buildLinkedProperties({\n        group: linkedGroupId,\n        role: 'main',\n        removeLinkedRoles: mainRemoveRoles,\n      });\n    }\n\n    items.push(mainItem);\n\n    if (shouldAddSubscriptionRefill) {\n      const refillVariantId = this.getRefillVariantId();\n      const sellingPlanId = this.getSelectedSellingPlanId();\n\n      if (refillVariantId && sellingPlanId) {\n        const refillProperties = {\n          _subscribe_and_save_frequency: this.getFrequencyLabel(),\n        };\n\n        if (shouldLinkSubscription && linkedGroupId) {\n          Object.assign(\n            refillProperties,\n            this.buildLinkedProperties({\n              group: linkedGroupId,\n              role: 'subscription_refill',\n              removeLinkedRoles: ['main'],\n            })\n          );\n        }\n\n        items.push({\n          id: refillVariantId,\n          quantity: this.getRefillQuantity(),\n          selling_plan: sellingPlanId,\n          properties: refillProperties,\n        });\n      }\n    }\n\n    return items;\n  }\n\n  async addSelectionToCart({ redirectToCheckout = false } = {}) {\n    if (this.isBusy) return;\n\n    this.currentVariant = this.getVariantById(this.getCurrentVariantId()) || this.getDatasetVariant();\n\n    if (!this.currentVariant?.id || !this.currentVariant.available) {\n      this.showError(this.dataset.unavailableText || 'This product is currently unavailable.');\n      this.syncUI();\n      return;\n    }\n\n    if (!this.hasValidSubscriptionSelection()) {\n      this.showError(this.dataset.subscriptionUnavailableText || 'Select a valid subscription plan.');\n      this.syncUI();\n      return;\n    }\n\n    this.clearError();\n    this.isBusy = true;\n    this.syncUI();\n\n    const items = this.buildCartItems();\n    const discountCode = (this.dataset.discountCode || '').trim();\n    const isSubscription = this.isSubscriptionSelected();\n    const sectionIds = Array.from(document.querySelectorAll('cart-items-component[data-section-id]'))\n      .map((item) => item.getAttribute('data-section-id') || '')\n      .filter(Boolean);\n    const requestBody = { items };\n\n    if (sectionIds.length > 0) {\n      requestBody.sections = sectionIds.join(',');\n      requestBody.sections_url = window.location.pathname;\n    }\n\n    try {\n      const response = await fetch(this.getCartAddUrl(), {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: 'application/json',\n          'X-Requested-With': 'XMLHttpRequest',\n        },\n        body: JSON.stringify(requestBody),\n      });\n      const data = await response.json().catch(() => ({}));\n\n      if (!response.ok || data.status) {\n        throw new Error(data.description || data.message || this.dataset.unavailableText || 'Unable to add to cart.');\n      }\n\n      let cartUpdateResource = data;\n\n      if (isSubscription && discountCode) {\n        await this.applyDiscountCode(discountCode);\n        cartUpdateResource = { ...data, sections: {} };\n      }\n\n      const totalQuantity = items.reduce((sum, item) => sum + Number(item.quantity || 0), 0);\n\n      this.dispatchCartUpdate(cartUpdateResource, totalQuantity);\n\n      if (redirectToCheckout) {\n        window.location.href = this.getCheckoutUrl(isSubscription ? discountCode : '');\n      } else {\n        this.openCartDrawer();\n      }\n    } catch (error) {\n      console.error(error);\n      this.showError(error instanceof Error ? error.message : this.dataset.unavailableText || 'Unable to add to cart.');\n    } finally {\n      this.isBusy = false;\n      this.syncUI();\n    }\n  }\n\n  async applyDiscountCode(code) {\n    try {\n      await fetch(`/discount/${encodeURIComponent(code)}`, {\n        method: 'GET',\n        credentials: 'same-origin',\n      });\n    } catch (error) {\n      console.warn(error);\n    }\n  }\n\n  dispatchCartUpdate(resource, quantity) {\n    this.dispatchEvent(\n      new CustomEvent('cart:update', {\n        bubbles: true,\n        detail: {\n          resource,\n          sourceId: this.id,\n          data: {\n            source: this.dataset.context || 'subscribe-and-save',\n            itemCount: quantity,\n            variantId: String(this.currentVariant?.id || ''),\n            sections: resource.sections || {},\n          },\n        },\n      })\n    );\n  }\n\n  openCartDrawer() {\n    const cartDrawer = document.querySelector('cart-drawer-component');\n    if (!(cartDrawer instanceof HTMLElement)) return;\n\n    if (typeof cartDrawer.open === 'function') {\n      cartDrawer.open();\n      return;\n    }\n\n    if (typeof cartDrawer.showDialog === 'function') {\n      cartDrawer.showDialog();\n    }\n  }\n\n  getCartAddUrl() {\n    return this.dataset.cartAddUrl || window.Theme?.routes?.cart_add_url || '/cart/add.js';\n  }\n\n  getCheckoutUrl(discountCode = '') {\n    const checkoutUrl = this.dataset.buyNowUrl || '/checkout';\n    if (!discountCode) return checkoutUrl;\n\n    const separator = checkoutUrl.includes('?') ? '&' : '?';\n    return `${checkoutUrl}${separator}discount=${encodeURIComponent(discountCode)}`;\n  }\n\n  formatMoney(cents) {\n    const normalizedCents = Number.isFinite(Number(cents)) ? Number(cents) : 0;\n    const currency = this.dataset.currencyCode || 'EUR';\n    const locale = this.dataset.locale || document.documentElement.lang || 'en';\n\n    try {\n      return new Intl.NumberFormat(locale, {\n        style: 'currency',\n        currency,\n        currencyDisplay: this.dataset.showCurrencyCode === 'true' ? 'code' : 'symbol',\n      }).format(normalizedCents / 100);\n    } catch (error) {\n      return `${(normalizedCents / 100).toFixed(2)} ${currency}`.trim();\n    }\n  }\n\n  showError(message) {\n    if (!(this.errorRegion instanceof HTMLElement)) return;\n\n    this.errorRegion.textContent = message;\n    this.errorRegion.hidden = false;\n  }\n\n  clearError() {\n    if (!(this.errorRegion instanceof HTMLElement)) return;\n\n    this.errorRegion.textContent = '';\n    this.errorRegion.hidden = true;\n  }\n}\n\nif (!customElements.get('subscribe-and-save-block')) {\n  customElements.define('subscribe-and-save-block', SubscribeAndSaveBlock);\n}\n"],
  "mappings": "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",
  "names": []
}
