{
  "version": 3,
  "sources": ["/cdn/shop/t/125/assets/cart-drawer.js?chv=5"],
  "sourcesContent": ["import { DialogComponent } from '@theme/dialog';\nimport { StandardEvents } from '@shopify/events';\n\nconst OPEN_SUPPRESSION_MS = 900;\nlet cartUpsellsAssetsPromise;\nlet cartRewardsStylesPromise;\n\nfunction loadStylesheetOnce(id, href) {\n  if (!href) return Promise.resolve();\n\n  const requestedUrl = new URL(href, document.baseURI).href;\n  const deferredStylesheet = Array.from(\n    document.querySelectorAll('link[data-ch-deferred-stylesheet]')\n  ).find((link) => link instanceof HTMLLinkElement && link.href === requestedUrl);\n  const existing = document.getElementById(id) || deferredStylesheet;\n  if (existing instanceof HTMLLinkElement) {\n    if (existing.sheet && existing.rel === 'stylesheet') return Promise.resolve();\n\n    return new Promise((resolve) => {\n      existing.id = id;\n      existing.addEventListener('load', resolve, { once: true });\n      existing.addEventListener('error', resolve, { once: true });\n      existing.rel = 'stylesheet';\n      existing.removeAttribute('as');\n      existing.removeAttribute('fetchpriority');\n    });\n  }\n\n  return new Promise((resolve) => {\n    const link = document.createElement('link');\n    link.id = id;\n    link.rel = 'stylesheet';\n    link.href = href;\n    link.addEventListener('load', resolve, { once: true });\n    link.addEventListener('error', resolve, { once: true });\n    document.head.append(link);\n  });\n}\n\n/**\n * A custom element that manages a cart drawer.\n *\n * @extends {DialogComponent}\n */\nclass CartDrawerComponent extends DialogComponent {\n  #hasWrappedCloseDialog = false;\n  #isLoadingEnhancements = false;\n  #isClosing = false;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    if (!this.#hasWrappedCloseDialog) {\n      const closeDialog = this.closeDialog;\n      this.closeDialog = async () => {\n        if (this.#isClosing) return;\n\n        this.#isClosing = true;\n        this.#suppressOpen();\n        this.refs.dialog.removeAttribute('data-ch-cart-sidecar-settled');\n\n        try {\n          await closeDialog();\n        } finally {\n          this.#isClosing = false;\n        }\n      };\n      this.#hasWrappedCloseDialog = true;\n    }\n\n    document.addEventListener(StandardEvents.cartLinesUpdate, this.#handleStandardCartAdd);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    document.removeEventListener(StandardEvents.cartLinesUpdate, this.#handleStandardCartAdd);\n  }\n\n  /** @param {import('@shopify/events').CartLinesUpdateEvent} event */\n  #handleStandardCartAdd = (event) => {\n    if (event.action !== 'add') return;\n    if (event.detail?.suppressDrawerOpen === true) return;\n    event.promise\n      .then(({ userErrors }) => {\n        const source = typeof event.detail?.source === 'string' ? event.detail.source : undefined;\n        if (!userErrors?.length) this.#maybeOpen(source);\n      })\n      .catch(() => {});\n  };\n\n  /** @param {string | undefined} source */\n  #maybeOpen(source) {\n\n    if (\n      source === 'ch-cart-upsells' ||\n      source === 'ch-cart-rewards' ||\n      source === 'ch-product-upsells-free-gift'\n    ) return;\n    if (source === 'product-form-component' && document.querySelector('ch-cart-success-notification')) return;\n    if (this.#isOpenSuppressed()) return;\n\n    if (this.hasAttribute('auto-open')) {\n      this.showDialog();\n    }\n  }\n\n  #suppressOpen(duration = OPEN_SUPPRESSION_MS) {\n    const suppressUntil = Date.now() + duration;\n    this.dataset.chCartSuppressOpenUntil = String(suppressUntil);\n    this.refs.dialog.dataset.chCartSuppressOpenUntil = String(suppressUntil);\n  }\n\n  #isOpenSuppressed() {\n    const { dialog } = this.refs;\n    const suppressUntil = Number(dialog.dataset.chCartSuppressOpenUntil || this.dataset.chCartSuppressOpenUntil || 0);\n\n    return (\n      Date.now() < suppressUntil ||\n      this.#isClosing ||\n      dialog.classList.contains('dialog-closing')\n    );\n  }\n\n  #hasCartUpsells() {\n    return Boolean(this.refs.dialog?.querySelector('ch-cart-upsells'));\n  }\n\n  #hasCartRewards() {\n    return this.refs.dialog?.classList.contains('cart-drawer__dialog--with-rewards') === true;\n  }\n\n  #loadCartRewardsStyles() {\n    if (!this.#hasCartRewards()) return Promise.resolve();\n\n    if (!cartRewardsStylesPromise) {\n      cartRewardsStylesPromise = loadStylesheetOnce(\n        'ch-cart-rewards-css',\n        this.dataset.chCartRewardsCss || ''\n      );\n    }\n\n    return cartRewardsStylesPromise;\n  }\n\n  #loadCartUpsellsAssets() {\n    if (!this.#hasCartUpsells()) return Promise.resolve();\n\n    if (!cartUpsellsAssetsPromise) {\n      const cssPromise = loadStylesheetOnce('ch-cart-upsells-css', this.dataset.chCartUpsellsCss || '');\n      const scriptPromise = customElements.get('ch-cart-upsells')\n        ? Promise.resolve()\n        : import(this.dataset.chCartUpsellsScript || '');\n\n      cartUpsellsAssetsPromise = Promise.all([cssPromise, scriptPromise]).catch((error) => {\n        cartUpsellsAssetsPromise = undefined;\n        console.error('Failed to load cart upsells assets:', error);\n      });\n    }\n\n    return cartUpsellsAssetsPromise;\n  }\n\n  #loadCartEnhancements() {\n    return Promise.all([this.#loadCartRewardsStyles(), this.#loadCartUpsellsAssets()]);\n  }\n\n  #resetCartItemsScroll() {\n    requestAnimationFrame(() => {\n      const cartItems = this.refs.dialog?.querySelector('.cart-drawer__items');\n      if (cartItems instanceof HTMLElement) cartItems.scrollTop = 0;\n    });\n  }\n\n  showDialog() {\n    if (this.#isOpenSuppressed()) return;\n    this.refs.dialog.removeAttribute('data-ch-cart-sidecar-settled');\n    if (!this.#hasCartUpsells() && !this.#hasCartRewards()) {\n      super.showDialog();\n      this.#resetCartItemsScroll();\n      return;\n    }\n\n    if (this.#isLoadingEnhancements) return;\n\n    this.#isLoadingEnhancements = true;\n    this.#loadCartEnhancements().finally(() => {\n      this.#isLoadingEnhancements = false;\n      if (!this.#isOpenSuppressed()) {\n        super.showDialog();\n        this.#resetCartItemsScroll();\n      }\n    });\n  }\n\n  open() {\n    this.showDialog();\n\n    /**\n     * Close cart drawer when installments CTA is clicked to avoid overlapping dialogs\n     */\n    customElements.whenDefined('shopify-payment-terms').then(() => {\n      const installmentsContent = document.querySelector('shopify-payment-terms')?.shadowRoot;\n      const cta = installmentsContent?.querySelector('#shopify-installments-cta');\n      cta?.addEventListener('click', this.closeDialog, { once: true });\n    });\n  }\n\n  close() {\n    this.closeDialog();\n  }\n}\n\nif (!customElements.get('cart-drawer-component')) {\n  customElements.define('cart-drawer-component', CartDrawerComponent);\n}\n"],
  "mappings": "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",
  "names": []
}
