{
  "version": 3,
  "sources": ["/cdn/shop/t/66/assets/cart-drawer.js?cb=16427"],
  "sourcesContent": ["/**\n * Loads a script.\n * @param {string} src - Url of script to load.\n * @returns {Promise}\n */\nfunction loadScript(src) {\n  return new Promise((resolve, reject) => {\n    const s = document.createElement('script');\n    s.src = src;\n    s.onload = resolve;\n    s.onerror = reject;\n    document.body.appendChild(s);\n  });\n}\n\n/* global DetailsDisclosure, trapFocus, removeTrapFocus */\n\nif (!customElements.get('cart-drawer-disclosure')) {\n  class CartDrawerDisclosure extends DetailsDisclosure {\n    constructor() {\n      super();\n      this.openBtn = this.querySelector('summary');\n      this.closeBtn = this.querySelector('.js-close');\n      this.overlay = document.getElementById('cart-drawer').querySelector('.overlay');\n    }\n\n    /**\n     * Handles 'click' events on the custom element.\n     * @param {object} evt - Event object.\n     */\n    handleClick(evt) {\n      if (!evt.target.matches('.js-close')) return;\n      this.close();\n    }\n\n    /**\n     * Opens the details element.\n     */\n    open() {\n      this.overlay.classList.add('is-visible');\n      super.open();\n      trapFocus(this);\n\n      // Create event handler variables (so the bound event listeners can be removed).\n      this.clickHandler = this.clickHandler || this.handleClick.bind(this);\n      this.keyupHandler = (evt) => evt.key === 'Escape' && this.close();\n\n      // Add event listeners (for while disclosure is open).\n      this.addEventListener('click', this.clickHandler);\n      this.addEventListener('keyup', this.keyupHandler);\n      this.overlay.addEventListener('click', this.clickHandler);\n    }\n\n    /**\n     * Closes the details element.\n     */\n    close() {\n      this.overlay.classList.remove('is-visible');\n      super.close();\n      removeTrapFocus(this.openBtn);\n\n      this.removeEventListener('click', this.clickHandler);\n      this.removeEventListener('keyup', this.keyupHandler);\n      this.overlay.removeEventListener('click', this.clickHandler);\n    }\n  }\n\n  customElements.define('cart-drawer-disclosure', CartDrawerDisclosure);\n}\n\n/* global SideDrawer */\n\nif (!customElements.get('cart-drawer')) {\n  class CartDrawer extends SideDrawer {\n    constructor() {\n      super();\n\n      this.cartSummary = this.querySelector('.cart-drawer__summary');\n      this.init();\n      this.bindEvents();\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener('dispatch:cart-drawer:refresh', this.refreshHandler);\n      document.removeEventListener('on:bfcache:load-restore', this.refreshHandler);\n      document.removeEventListener('dispatch:cart-drawer:open', this.openDrawerViaEventHandler);\n      document.removeEventListener('dispatch:cart-drawer:close', this.closeDrawerViaEventHandler);\n\n      if (Shopify.designMode) {\n        document.removeEventListener('shopify:section:select', this.sectionSelectHandler);\n        document.removeEventListener('shopify:section:deselect', this.sectionDeselectHandler);\n      }\n\n      if (this.dcbLoadedHandler) {\n        document.removeEventListener('shopify:payment_button:loaded', this.dcbLoadedHandler);\n      }\n    }\n\n    init() {\n      const cartIcon = document.getElementById('cart-icon');\n      if (cartIcon) {\n        cartIcon.setAttribute('role', 'button');\n        cartIcon.setAttribute('aria-haspopup', 'dialog');\n\n        cartIcon.addEventListener('click', (evt) => {\n          evt.preventDefault();\n          this.open(cartIcon);\n        });\n\n        cartIcon.addEventListener('keydown', (evt) => {\n          if (evt.key !== ' ') return;\n          evt.preventDefault();\n          this.open(cartIcon);\n        });\n      }\n    }\n\n    bindEvents() {\n      if (Shopify.designMode) {\n        this.sectionSelectHandler = this.handleSectionSelect.bind(this);\n        this.sectionDeselectHandler = this.handleSectionDeselect.bind(this);\n        document.addEventListener('shopify:section:select', this.sectionSelectHandler);\n        document.addEventListener('shopify:section:deselect', this.sectionDeselectHandler);\n      }\n\n      this.openDrawerViaEventHandler = this.handleDrawerOpenViaEvent.bind(this);\n      this.closeDrawerViaEventHandler = this.close.bind(this, null);\n      document.addEventListener('dispatch:cart-drawer:open', this.openDrawerViaEventHandler);\n      document.addEventListener('dispatch:cart-drawer:close', this.closeDrawerViaEventHandler);\n\n      if (this.cartSummary.classList.contains('cart-drawer--checkout--sticky-true')) {\n        this.dcbLoadedHandler = this.dcbLoadedHandler || CartDrawer.recalculateCssVarHeights;\n        document.addEventListener('shopify:payment_button:loaded', this.dcbLoadedHandler);\n      }\n\n      this.refreshHandler = this.refresh.bind(this);\n      document.addEventListener('dispatch:cart-drawer:refresh', this.refreshHandler);\n      document.addEventListener('on:bfcache:load-restore', this.refreshHandler);\n    }\n\n    /**\n     * Handle when the section is selected in the Theme Editor\n     * @param {object} evt - Event object.\n     */\n    handleSectionSelect(evt) {\n      if (evt.target === this.closest('.shopify-section')) this.open();\n    }\n\n    /**\n     * Handle when the section is de-selected in the Theme Editor\n     * @param {object} evt - Event object.\n     */\n    handleSectionDeselect(evt) {\n      if (evt.target === this.closest('.shopify-section')) this.close();\n    }\n\n    /**\n     * Handle when the drawer is opened via an event\n     * @param {object} evt - Event object.\n     */\n    handleDrawerOpenViaEvent(evt) {\n      this.open(evt.detail ? evt.detail.opener : null);\n    }\n\n    /**\n     * Opens the drawer.\n     * @param {Element} [opener] - Element that triggered opening of the drawer.\n     * @param {Element} [elementToFocus] - Element to focus after drawer opened.\n     */\n    open(opener, elementToFocus) {\n      // Get the quick add drawer web component, if it's currently open and close it\n      const quickAddDrawer = document.querySelector('quick-add-drawer[aria-hidden=\"false\"]');\n      const overlay = document.querySelector('.js-overlay.is-visible');\n\n      if (quickAddDrawer) {\n        if (overlay) overlay.style.transitionDelay = '200ms';\n        quickAddDrawer.close();\n      }\n\n      // If the cart drawer is open, wait a few ms for a more optimal ux/animation\n      setTimeout(() => {\n        super.open(opener, elementToFocus, () => {\n          if (this.cartSummary.classList.contains('cart-drawer--checkout--sticky-true')) {\n            CartDrawer.recalculateCssVarHeights();\n          }\n        });\n\n        if (this.cartSummary.classList.contains('cart-drawer--checkout--sticky-true')) {\n          CartDrawer.recalculateCssVarHeights();\n        }\n\n        if (overlay) overlay.style.transitionDelay = '';\n      }, quickAddDrawer ? 200 : 0);\n    }\n\n    /**\n     * Attempts to refresh any cart items (if present). Failing that, it refreshes the entire cart\n     * drawer\n     * @param {boolean} [dontRefreshCartItems=false] - Prevents the refresh of cart items, and does\n     * a straight refresh of the whole cart\n     */\n    async refresh(dontRefreshCartItems) {\n      try {\n        const cartItems = this.querySelector('cart-items');\n        if (cartItems && !dontRefreshCartItems) {\n          cartItems.refresh();\n        } else {\n          const response = this.getSectionsToRender().map((section) => section.section);\n          const cartResponse = await fetch(`?sections=${response.join(',')}`);\n          const sections = await cartResponse.json();\n          this.renderContents({ sections }, false);\n          CartDrawer.recalculateCssVarHeights();\n        }\n      } catch (error) {\n        console.log(error); // eslint-disable-line\n        this.dispatchEvent(new CustomEvent('on:cart:error', {\n          bubbles: true,\n          detail: {\n            error: this.errorMsg?.textContent\n          }\n        }));\n      }\n    }\n\n    /**\n     * Renders the contents of the specified sections to update.\n     * @param {object} data - Cart data object.\n     * @param {boolean} [openDrawer=true] - Open the cart drawer after rendering sections.\n     */\n    async renderContents(data, openDrawer = true) {\n      if (!this.scriptsLoaded) {\n        if (!document.querySelector(`script[src=\"${theme.scripts.cartItems}\"]`)) {\n          await loadScript(theme.scripts.cartItems);\n        }\n\n        if (!document.querySelector(`script[src=\"${theme.scripts.shippingCalculator}\"]`) && this.dataset.shippingCalculator) {\n          await loadScript(theme.scripts.countryProvinceSelector);\n          await loadScript(theme.scripts.shippingCalculator);\n        }\n\n        this.scriptsLoaded = true;\n      }\n\n      this.getSectionsToRender().forEach((section) => {\n        const el = document.getElementById(section.id);\n        if (el) {\n          el.innerHTML = CartDrawer.getElementHTML(\n            data.sections[section.section],\n            section.selector\n          );\n        }\n      });\n\n      if (openDrawer && this.getAttribute('open') === null) {\n        setTimeout(() => this.open());\n      }\n    }\n\n    /**\n     * Returns an array of objects containing required section details.\n     * @returns {Array}\n     */\n    getSectionsToRender() {\n      return [\n        {\n          id: 'cart-drawer',\n          section: this.closest('.shopify-section').id.replace('shopify-section-', ''),\n          selector: 'cart-drawer'\n        },\n        {\n          id: 'cart-icon-bubble',\n          section: 'cart-icon-bubble',\n          selector: '.shopify-section'\n        }\n      ];\n    }\n\n    /**\n     * Dispatches an event to recalculate the data-css-var-heights on the page. Useful for\n     * updating the height of the sticky cart buttons\n     */\n    static recalculateCssVarHeights() {\n      window.requestAnimationFrame(() => {\n        document.dispatchEvent(new CustomEvent('on:css-var-height:update'));\n      });\n    }\n\n    /**\n     * Gets the innerHTML of an element.\n     * @param {string} html - Section HTML.\n     * @param {string} selector - CSS selector for the element.\n     * @returns {string}\n     */\n    static getElementHTML(html, selector) {\n      const tmpl = document.createElement('template');\n      tmpl.innerHTML = html;\n\n      return tmpl.content.querySelector(selector).innerHTML;\n    }\n  }\n\n  customElements.define('cart-drawer', CartDrawer);\n}\n"],
  "mappings": "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",
  "names": []
}
