{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/announcement-bar.js?cb=23999"],
  "sourcesContent": ["import { Component } from '@theme/component';\n\n/**\n * Announcement banner custom element that allows fading between content.\n * Based on the Slideshow component.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} slideshowContainer\n * @property {HTMLElement[]} [slides]\n * @property {HTMLButtonElement} [previous]\n * @property {HTMLButtonElement} [next]\n *\n * @extends {Component<Refs>}\n */\nexport class AnnouncementBar extends Component {\n  #current = 0;\n\n  /**\n   * The interval ID for automatic playback.\n   * @type {number|undefined}\n   */\n  #interval = undefined;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.addEventListener('mouseenter', this.suspend);\n    this.addEventListener('mouseleave', this.resume);\n    this.addEventListener('countdown:end', this.#handleCountdownEnd);\n    document.addEventListener('visibilitychange', this.#handleVisibilityChange);\n\n    this.#update();\n    this.play();\n  }\n\n  next() {\n    this.current += 1;\n  }\n\n  previous() {\n    this.current -= 1;\n  }\n\n  /**\n   * Starts automatic slide playback.\n   * @param {number} [interval] - The time interval in seconds between slides.\n   */\n  play(interval = this.autoplayInterval) {\n    if (!this.autoplay) return;\n\n    this.paused = false;\n\n    this.#interval = setInterval(() => {\n      if (this.matches(':hover') || document.hidden) return;\n\n      this.next();\n    }, interval);\n  }\n\n  /**\n   * Pauses automatic slide playback.\n   */\n  pause() {\n    this.paused = true;\n    this.suspend();\n  }\n\n  get paused() {\n    return this.hasAttribute('paused');\n  }\n\n  set paused(paused) {\n    this.toggleAttribute('paused', paused);\n  }\n\n  /**\n   * Suspends automatic slide playback.\n   */\n  suspend() {\n    clearInterval(this.#interval);\n    this.#interval = undefined;\n  }\n\n  /**\n   * Resumes automatic slide playback if autoplay is enabled.\n   */\n  resume() {\n    if (!this.autoplay || this.paused) return;\n\n    this.pause();\n    this.play();\n  }\n\n  get autoplay() {\n    return Boolean(this.autoplayInterval);\n  }\n\n  get autoplayInterval() {\n    const interval = this.getAttribute('autoplay');\n    const value = parseInt(`${interval}`, 10);\n\n    if (Number.isNaN(value)) return undefined;\n\n    return value * 1000;\n  }\n\n  get current() {\n    return this.#current;\n  }\n\n  set current(current) {\n    this.#current = current;\n\n    let relativeIndex = current % (this.refs.slides ?? []).length;\n    if (relativeIndex < 0) {\n      relativeIndex += (this.refs.slides ?? []).length;\n    }\n\n    this.refs.slides?.forEach((slide, index) => {\n      slide.setAttribute('aria-hidden', `${index !== relativeIndex}`);\n    });\n  }\n\n  /**\n   * Pause the slideshow when the page is hidden.\n   */\n  #handleVisibilityChange = () => (document.hidden ? this.pause() : this.resume());\n\n  /**\n   * Removes an announcement once its countdown ends.\n   * @param {Event} event\n   */\n  #handleCountdownEnd = (event) => {\n    const slide = event.target instanceof Element ? event.target.closest('[ref=\"slides[]\"]') : null;\n    if (!slide) return;\n\n    const removedIndex = (this.refs.slides ?? []).indexOf(/** @type {HTMLElement} */ (slide));\n    slide.remove();\n    this.updatedCallback();\n    this.#update(removedIndex);\n  };\n\n  /**\n   * Keeps the bar in step with the announcements left: shows one of them,\n   * stops rotating when only one remains, and hides the bar when none do.\n   * @param {number} [fallbackIndex] - The slide to show if none is visible.\n   */\n  #update(fallbackIndex = 0) {\n    const slides = this.refs.slides ?? [];\n\n    if (slides.length === 0) {\n      this.suspend();\n      this.closest('.shopify-section')?.setAttribute('hidden', '');\n      return;\n    }\n\n    if (slides.length === 1) {\n      this.suspend();\n      this.removeAttribute('autoplay');\n      this.removeAttribute('aria-live');\n      this.querySelector('slideshow-arrows')?.remove();\n    }\n\n    const visibleIndex = slides.findIndex((slide) => slide.getAttribute('aria-hidden') === 'false');\n    this.current = visibleIndex === -1 ? fallbackIndex : visibleIndex;\n  }\n}\n\nif (!customElements.get('announcement-bar-component')) {\n  customElements.define('announcement-bar-component', AnnouncementBar);\n}\n\n/**\n * Counts down to a Unix timestamp and emits `countdown:end` when it is reached.\n *\n * @typedef {object} CountdownRefs\n * @property {HTMLElement} days\n * @property {HTMLElement} hours\n * @property {HTMLElement} minutes\n * @property {HTMLElement} seconds\n *\n * @extends {Component<CountdownRefs>}\n */\nexport class CountdownTimer extends Component {\n  requiredRefs = ['days', 'hours', 'minutes', 'seconds'];\n\n  /** @type {number|undefined} */\n  #timeout = undefined;\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#tick();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    clearTimeout(this.#timeout);\n  }\n\n  get endsAt() {\n    return parseInt(`${this.getAttribute('ends-at')}`, 10) * 1000;\n  }\n\n  #tick = () => {\n    clearTimeout(this.#timeout);\n    if (Number.isNaN(this.endsAt)) return;\n\n    const remaining = Math.max(0, this.endsAt - Date.now());\n    const total = Math.ceil(remaining / 1000);\n    const { days, hours, minutes, seconds } = this.refs;\n\n    days.textContent = `${Math.floor(total / 86400)}`;\n    days.parentElement?.toggleAttribute('hidden', total < 86400);\n    hours.textContent = pad(Math.floor((total % 86400) / 3600));\n    minutes.textContent = pad(Math.floor((total % 3600) / 60));\n    seconds.textContent = pad(total % 60);\n\n    if (remaining === 0) {\n      this.dispatchEvent(new CustomEvent('countdown:end', { bubbles: true }));\n      return;\n    }\n\n    // Wake up on the next whole second so the display stays in step with the clock.\n    this.#timeout = setTimeout(this.#tick, remaining % 1000 || 1000);\n  };\n}\n\n/**\n * @param {number} value\n */\nconst pad = (value) => `${value}`.padStart(2, '0');\n\nif (!customElements.get('countdown-timer-component')) {\n  customElements.define('countdown-timer-component', CountdownTimer);\n}\n"],
  "mappings": "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",
  "names": []
}
