{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/atelea-product-card.js?atl_v=5"],
  "sourcesContent": ["/* Atelea product-card entrypoint for price, badges and cart feedback. */\n// Bump module revisions with exporter changes; see docs/components/atelea-collection.md.\n\nimport { morph } from '@theme/morph';\nimport { StandardEvents } from '@shopify/events';\nimport { syncCardMediaFromProductSelect } from './atelea-product-card-media.js?v=5';\nimport {\n  hideTooltip,\n  initProductCardSwatches,\n  startProductCardSwatches,\n  updateVariantColorName,\n} from './atelea-product-card-swatches.js?v=6';\n\nconst SWATCH_SELECTOR = 'input[type=\"radio\"][data-option-name]';\nconst CARD_SELECTOR = 'product-card';\nconst CARD_ADD_SELECTOR =\n  '.atelea-collection-card__add-to-cart, .atelea-cart-card__add-to-cart';\nconst activeCollectionAddButtons = new Set();\n\n/**\n * Home cards render one price container, while Horizon targets the second one.\n *\n * @param {import('@shopify/events').ProductSelectEvent} event\n */\nfunction updateSingleCardPrice(event) {\n  if (!(event.target instanceof Element)) return;\n\n  const card = event.target.closest(CARD_SELECTOR);\n  if (!(card instanceof HTMLElement)) return;\n\n  const priceContainers = card.querySelectorAll(\"product-price [ref='priceContainer']\");\n  if (priceContainers.length !== 1 || !event.promise) return;\n\n  event.promise\n    .then(({ detail }) => {\n      const newPrice = detail?.html?.querySelector(\"product-price [ref='priceContainer']\");\n      if (!newPrice) return;\n\n      morph(priceContainers[0], newPrice);\n      const variantId = event.detail?.variantId;\n      if (variantId) card.dataset.ateleaPriceVariantId = variantId;\n      delete card.dataset.ateleaLocalVariantId;\n      delete card.dataset.ateleaPendingVariantId;\n    })\n    .catch((error) => {\n      delete card.dataset.ateleaPendingVariantId;\n      if (error?.name !== 'AbortError') {\n        console.warn('[atelea-product-card] Price update failed:', error);\n      }\n    });\n}\n\n/**\n * Keeps the native gallery badge in sync with the selected card variant.\n *\n * @param {import('@shopify/events').ProductSelectEvent} event\n */\nfunction updateVariantBadge(event) {\n  if (!(event.target instanceof Element)) return;\n\n  const card = event.target.closest(CARD_SELECTOR);\n  if (!(card instanceof HTMLElement) || !event.promise) return;\n\n  event.promise\n    .then(({ variant, detail }) => {\n      if (!detail?.html) return;\n\n      const badge = card.querySelector('.product-badges__badge');\n      const wrapper = badge?.closest('.product-badges');\n      if (!(badge instanceof HTMLElement) || !(wrapper instanceof HTMLElement)) return;\n\n      const labels = card.querySelector('[data-atelea-badge-labels]');\n      if (!(labels instanceof HTMLElement)) return;\n\n      const checkedOptions = detail.html.querySelectorAll(`${SWATCH_SELECTOR}:checked`);\n      const unavailableOption = [...checkedOptions].some(\n        (input) => input.getAttribute('data-option-available') === 'false'\n      );\n      const resource = detail.resource;\n      const resourceAvailability =\n        typeof resource?.available === 'boolean' ? resource.available : undefined;\n      const variantAvailability =\n        typeof variant?.availableForSale === 'boolean' ? variant.availableForSale : undefined;\n      const available = unavailableOption\n        ? false\n        : resourceAvailability ?? variantAvailability ?? true;\n      const price = Number(resource?.price);\n      const compareAtPrice = Number(resource?.compare_at_price ?? resource?.compareAtPrice);\n      const isSale = available && Number.isFinite(price) && compareAtPrice > price;\n      const state = available ? (isSale ? 'sale' : '') : 'sold-out';\n\n      if (state === '') {\n        wrapper.hidden = true;\n        return;\n      }\n\n      const label = state === 'sale'\n        ? labels.dataset.ateleaSaleLabel\n        : labels.dataset.ateleaSoldOutLabel;\n\n      if (!label) return;\n\n      badge.textContent = label;\n      badge.classList.toggle('color-custom-badge-sale', state === 'sale');\n      badge.classList.toggle('color-custom-badge-sold-out', state === 'sold-out');\n      wrapper.hidden = false;\n    })\n    .catch((error) => {\n      if (error?.name !== 'AbortError') {\n        console.warn('[atelea-product-card] Badge update failed:', error);\n      }\n    });\n}\n\nfunction clearCardAddLoaders() {\n  activeCollectionAddButtons.forEach((button) => {\n    if (!(button instanceof HTMLButtonElement)) return;\n\n    button.dataset.ateleaLoading = 'false';\n    button.setAttribute('aria-busy', 'false');\n  });\n  activeCollectionAddButtons.clear();\n}\n\nfunction setupCardAddFeedback() {\n  document.addEventListener(\n    'click',\n    (event) => {\n      const target = event.target instanceof Element ? event.target : null;\n      const button = target?.closest(CARD_ADD_SELECTOR);\n      if (!(button instanceof HTMLButtonElement) || button.disabled) return;\n\n      button.dataset.ateleaLoading = 'true';\n      button.setAttribute('aria-busy', 'true');\n      activeCollectionAddButtons.add(button);\n    },\n    true\n  );\n\n  document.addEventListener(StandardEvents.cartError, clearCardAddLoaders);\n  document.addEventListener(\n    StandardEvents.cartLinesUpdate,\n    /** @param {import('@shopify/events').CartLinesUpdateEvent} event */\n    (event) => {\n      event.promise\n        ?.then(({ detail }) => {\n          if (detail?.source === 'product-form-component') clearCardAddLoaders();\n        })\n        .catch(clearCardAddLoaders);\n    }\n  );\n}\n\nwindow.addEventListener('resize', hideTooltip);\nwindow.addEventListener('scroll', hideTooltip, { capture: true, passive: true });\nwindow.matchMedia('(min-width: 1100px)').addEventListener(\n  'change',\n  () => initProductCardSwatches(document)\n);\nsetupCardAddFeedback();\ndocument.addEventListener(StandardEvents.productSelect, updateSingleCardPrice);\ndocument.addEventListener(StandardEvents.productSelect, updateVariantBadge);\ndocument.addEventListener(StandardEvents.productSelect, updateVariantColorName);\ndocument.addEventListener(StandardEvents.productSelect, syncCardMediaFromProductSelect);\n\n// The swatches do not exist at DOMContentLoaded \u2014 Horizon upgrades the custom element later.\ncustomElements.whenDefined('swatches-variant-picker-component').then(() =>\n  startProductCardSwatches()\n);\n\n// The theme editor re-renders a section without reloading the page.\ndocument.addEventListener('shopify:section:load', (event) => {\n  if (event.target instanceof Element) startProductCardSwatches(event.target);\n});\n"],
  "mappings": "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",
  "names": []
}
