{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/layered-slideshow.js?v=99078667042736475191790720035"],
  "sourcesContent": ["import { Component } from '@theme/component';\nimport { getDirectionMultiplier, isMobileBreakpoint, mediaQueryLarge } from '@theme/utilities';\n\n/**\n * @typedef {Object} LayeredSlideshowRefs\n * @property {HTMLElement} container\n * @property {HTMLElement[]} tabs\n * @property {HTMLElement[]} panels\n */\n\n/**\n * @typedef {Object} DragState\n * @property {number} target\n * @property {number} start\n * @property {number} max\n * @property {number} activeSize - The resolved pixel size of the active panel at drag start\n * @property {1 | -1} directionMultiplier - Converts the physical pointer delta into a logical one\n * @property {boolean} left\n * @property {boolean} [dragging]\n * @property {boolean} [prevent]\n * @property {number} [progress]\n */\n\nconst DRAG_THRESHOLD = 5;\nconst MAX_DRAG_WIDTH_RATIO = 0.8;\nconst DRAG_COMPLETE_THRESHOLD = 0.5;\nconst INACTIVE_SIZE = 56; // Px size of inactive tabs on desktop\nconst INACTIVE_MOBILE_SIZE = 44; // Px size of inactive tabs on mobile\nconst FOCUSABLE_SELECTOR =\n  'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/** @extends {Component<LayeredSlideshowRefs>} */\nexport class LayeredSlideshowComponent extends Component {\n  requiredRefs = ['container'];\n  #active = 0;\n  /** @type {DragState | null} */\n  #drag = null;\n  /** @type {AbortController | null} */\n  #abort = null;\n  #isMobile = false;\n  /** @type {ResizeObserver | null} */\n  #heightObserver = null;\n  /** @type {MutationObserver | null} */\n  #contentObserver = null;\n  /** @type {ResizeObserver | null} */\n  #containerObserver = null;\n\n  /** @returns {number} The inactive tab size in pixels based on current viewport */\n  get #inactiveSize() {\n    return this.#isMobile ? INACTIVE_MOBILE_SIZE : INACTIVE_SIZE;\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    const { tabs } = this.refs;\n    if (!tabs?.length) return;\n\n    this.#active = Math.max(\n      0,\n      tabs.findIndex((t) => t.getAttribute('aria-selected') === 'true')\n    );\n\n    this.#isMobile = isMobileBreakpoint();\n    mediaQueryLarge.addEventListener('change', this.#handleMediaQueryChange);\n\n    this.#containerObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        if (entry.contentBoxSize) {\n          // Use contentBoxSize if available for better precision, or fallback to contentRect\n          const boxSize = entry.contentBoxSize[0];\n          const isMobile = this.#isMobile;\n\n          let size;\n          if (boxSize) {\n            size = isMobile ? boxSize.blockSize : boxSize.inlineSize;\n          } else {\n            size = isMobile ? entry.contentRect.height : entry.contentRect.width;\n          }\n\n          this.#updateGridSizes(size);\n        }\n      }\n    });\n    this.#containerObserver.observe(this.refs.container);\n\n    this.#updateActiveTab();\n    this.#setupEventListeners();\n    this.#observeContentHeight();\n  }\n\n  #setupEventListeners() {\n    this.#abort?.abort();\n    this.#abort = new AbortController();\n    const opts = { signal: this.#abort.signal };\n    const { container, tabs } = this.refs;\n\n    this.addEventListener('keydown', (e) => this.#handleKeydown(e), opts);\n\n    for (const [i, tab] of tabs.entries()) {\n      tab.addEventListener('click', (e) => this.#handleTabClick(e, i), opts);\n      tab.addEventListener('focus', (e) => this.#handleTabFocus(e, i), opts);\n    }\n\n    this.#setupPanelFocusManagement(opts);\n\n    if (!this.#isMobile) {\n      container.addEventListener('pointerdown', (e) => this.#startDrag(e), opts);\n      container.addEventListener('click', (e) => this.#preventClickDuringDrag(e), { ...opts, capture: true });\n    }\n  }\n\n  #handleKeydown(/** @type {KeyboardEvent} */ e) {\n    const target = /** @type {HTMLElement} */ (e.target);\n    if (target.getAttribute('role') !== 'tab') return;\n\n    const { tabs } = this.refs;\n    if (!tabs) return;\n\n    const i = tabs.indexOf(target);\n    // Horizontal arrows follow reading direction; vertical (mobile) arrows don't mirror.\n    const directionMultiplier = this.#isMobile ? 1 : getDirectionMultiplier(this);\n    const navMap = {\n      [this.#isMobile ? 'ArrowUp' : 'ArrowLeft']: -1 * directionMultiplier,\n      [this.#isMobile ? 'ArrowDown' : 'ArrowRight']: 1 * directionMultiplier,\n      Home: -i,\n      End: tabs.length - 1 - i,\n    };\n\n    const offset = navMap[e.key];\n    if (offset !== undefined) {\n      e.preventDefault();\n      const nextIndex = (i + offset + tabs.length) % tabs.length;\n      tabs[nextIndex]?.focus();\n      this.#activate(nextIndex);\n    }\n  }\n\n  #handleTabClick(/** @type {MouseEvent} */ e, /** @type {number} */ index) {\n    e.preventDefault();\n    this.#activate(index);\n  }\n\n  #handleTabFocus(/** @type {FocusEvent} */ e, /** @type {number} */ index) {\n    const target = /** @type {HTMLElement} */ (e.target);\n    if (target.matches(':focus-visible')) {\n      this.#activate(index);\n    }\n  }\n\n  /**\n   * @param {AddEventListenerOptions & { signal: AbortSignal }} opts\n   */\n  #setupPanelFocusManagement(opts) {\n    const { panels } = this.refs;\n    if (!panels) return;\n\n    for (const [index, panel] of panels.entries()) {\n      panel.addEventListener('keydown', (event) => this.#handlePanelKeydown(event, index), opts);\n    }\n  }\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {number} index\n   */\n  #handlePanelKeydown(event, index) {\n    if (event.key !== 'Tab') return;\n\n    const { panels } = this.refs;\n    const panel = /** @type {HTMLElement} */ (event.currentTarget);\n    const focusable = this.#getFocusableElements(panel);\n    const firstFocusable = focusable[0];\n    const lastFocusable = focusable[focusable.length - 1];\n\n    if (event.shiftKey) {\n      const isAtStart =\n        (firstFocusable && document.activeElement === firstFocusable) ||\n        (!focusable.length && document.activeElement === panel);\n      if (isAtStart && index > 0) {\n        event.preventDefault();\n        this.#activate(index - 1);\n        this.#focusPanelEdge(index - 1, 'end');\n      }\n      return;\n    }\n\n    const isAtEnd =\n      (lastFocusable && document.activeElement === lastFocusable) ||\n      (!focusable.length && document.activeElement === panel);\n\n    if (isAtEnd && panels && index < panels.length - 1) {\n      event.preventDefault();\n      this.#activate(index + 1);\n      this.#focusPanelEdge(index + 1, 'start');\n    }\n  }\n\n  /**\n   * @param {number} index\n   * @param {'start' | 'end'} [position]\n   */\n  #focusPanelEdge(index, position = 'start') {\n    const panel = this.refs.panels?.[index];\n    if (!panel) return;\n\n    const focusable = this.#getFocusableElements(panel);\n    const target = position === 'end' ? focusable[focusable.length - 1] : focusable[0];\n\n    requestAnimationFrame(() => (target ?? panel).focus());\n  }\n\n  /**\n   * @param {HTMLElement} panel\n   * @returns {HTMLElement[]}\n   */\n  #getFocusableElements(panel) {\n    return Array.from(panel.querySelectorAll(FOCUSABLE_SELECTOR))\n      .filter((el) => !el.closest('[inert]'))\n      .map((el) => /** @type {HTMLElement} */ (el));\n  }\n\n  #preventClickDuringDrag(/** @type {MouseEvent} */ e) {\n    const target = /** @type {HTMLElement} */ (e.target);\n    if (this.#drag?.prevent && target.closest('[role=\"tab\"]')) {\n      e.stopImmediatePropagation();\n      e.preventDefault();\n    }\n  }\n\n  #handleMediaQueryChange = () => {\n    const wasMobile = this.#isMobile;\n    this.#isMobile = isMobileBreakpoint();\n\n    if (wasMobile !== this.#isMobile) {\n      const { container } = this.refs;\n      container.setAttribute('data-instant-transitions', '');\n\n      this.#clearHeightStyles();\n      // Re-calculate height first so grid calculation has correct container dimensions\n      this.#observeContentHeight();\n      this.#updateActiveTab();\n      this.#setupEventListeners();\n\n      requestAnimationFrame(() => {\n        container.removeAttribute('data-instant-transitions');\n      });\n    }\n  };\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abort?.abort();\n    this.#heightObserver?.disconnect();\n    this.#heightObserver = null;\n    this.#contentObserver?.disconnect();\n    this.#contentObserver = null;\n    this.#containerObserver?.disconnect();\n    this.#containerObserver = null;\n    mediaQueryLarge.removeEventListener('change', this.#handleMediaQueryChange);\n  }\n\n  /**\n   * Public method to select a slide by index\n   * @param {number} index\n   * @param {{ instant?: boolean }} [options]\n   */\n  select(index, { instant = false } = {}) {\n    this.#activate(index, instant);\n  }\n\n  /**\n   * @param {number} index\n   * @param {boolean} [instant]\n   */\n  #activate(index, instant = false) {\n    const { container, tabs } = this.refs;\n    if (!tabs || index === this.#active || index < 0 || index >= tabs.length) return;\n\n    if (instant) {\n      container.setAttribute('data-instant-transitions', '');\n    }\n\n    this.#active = index;\n    this.#updateActiveTab();\n\n    if (instant) {\n      // Double rAF to ensure layout is fully settled before re-enabling transitions\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          container.removeAttribute('data-instant-transitions');\n        });\n      });\n    }\n  }\n\n  #updateActiveTab() {\n    const { tabs, panels } = this.refs;\n\n    for (const [i, tab] of tabs?.entries() ?? []) {\n      const isActive = i === this.#active;\n      tab.setAttribute('aria-selected', String(isActive));\n      tab.setAttribute('tabindex', isActive ? '0' : '-1');\n    }\n\n    for (const [i, panel] of panels?.entries() ?? []) {\n      const isActive = i === this.#active;\n      panel.toggleAttribute('inert', !isActive);\n      panel.setAttribute('tabindex', isActive ? '0' : '-1');\n\n      const video = panel.querySelector('video');\n      if (video) {\n        isActive ? video.play() : video.pause();\n      }\n    }\n\n    this.#updateGridSizes();\n  }\n\n  /**\n   * @param {number} [containerSize] - Override container size (used during viewport switch)\n   */\n  #updateGridSizes(containerSize) {\n    const { container, tabs } = this.refs;\n    if (!tabs) return;\n    const inactiveSize = this.#inactiveSize;\n    const size =\n      containerSize ??\n      (this.#isMobile ? container.getBoundingClientRect().height : container.getBoundingClientRect().width);\n    const activeSize = size - inactiveSize * (tabs.length - 1);\n    const sizes = tabs.map((_, i) => (i === this.#active ? `${activeSize}px` : `${inactiveSize}px`));\n    container.style.setProperty('--active-tab', sizes.join(' '));\n  }\n\n  /**\n   * @param {PointerEvent} event\n   */\n  #startDrag(event) {\n    if (this.#isMobile) return;\n\n    const { tabs } = this.refs;\n    if (!tabs) return;\n\n    const eventTarget = /** @type {HTMLElement} */ (event.target);\n    const tab = eventTarget.closest('[role=\"tab\"]');\n    if (tab) {\n      const i = tabs.indexOf(/** @type {HTMLElement} */ (tab));\n      if (i === this.#active) return;\n      const target = i > this.#active ? i + 1 : i;\n      if (target >= tabs.length) return;\n\n      this.#initializeDrag(event, target);\n    } else {\n      this.#initializeDrag(event);\n    }\n  }\n\n  /**\n   * @param {PointerEvent} event\n   * @param {number} [initialTarget]\n   */\n  #initializeDrag(event, initialTarget) {\n    const { container, tabs } = this.refs;\n    if (!tabs) return;\n\n    // Calculate active size from container dimensions\n    const containerWidth = container.getBoundingClientRect().width;\n    const inactiveSize = this.#inactiveSize;\n    const activeSize = containerWidth - inactiveSize * (tabs.length - 1);\n\n    this.#drag = {\n      target: initialTarget ?? -1,\n      start: event.clientX,\n      max: containerWidth * MAX_DRAG_WIDTH_RATIO,\n      activeSize,\n      directionMultiplier: getDirectionMultiplier(this),\n      left: initialTarget !== undefined ? initialTarget > this.#active : false,\n    };\n\n    const ac = new AbortController();\n    const opts = { signal: ac.signal };\n\n    document.addEventListener('pointermove', (e) => this.#handleDrag(e), opts);\n    document.addEventListener('pointerup', () => this.#endDrag(ac), opts);\n    document.addEventListener('pointercancel', () => this.#endDrag(ac), opts);\n\n    event.preventDefault();\n  }\n\n  /**\n   * @param {PointerEvent} event\n   */\n  #handleDrag(event) {\n    if (!this.#drag) return;\n\n    const { container, tabs } = this.refs;\n    if (!container || !tabs) return;\n\n    // Logical delta: positive always means dragging toward the previous tab in reading order.\n    const delta = (event.clientX - this.#drag.start) * this.#drag.directionMultiplier;\n    const move = Math.abs(delta);\n\n    if (!this.#drag.dragging && move >= DRAG_THRESHOLD) {\n      if (this.#drag.target === -1) {\n        if (delta > 0 && this.#active > 0) {\n          this.#drag.target = this.#active - 1;\n          this.#drag.left = false;\n        } else if (delta < 0 && this.#active < tabs.length - 1) {\n          this.#drag.target = this.#active + 1;\n          this.#drag.left = true;\n        } else {\n          return;\n        }\n      }\n      this.#drag.dragging = true;\n      container.setAttribute('data-dragging', '');\n    }\n\n    if (!this.#drag.dragging) return;\n\n    const correct = this.#drag.left ? delta < 0 : delta > 0;\n    const progress = correct ? Math.min(move / this.#drag.max, 1) : 0;\n\n    const inactiveSize = this.#inactiveSize;\n    const activeSize = this.#drag.activeSize;\n    const range = activeSize - inactiveSize;\n    const sizes = tabs.map((_, i) => {\n      if (i === this.#active) {\n        const active = Math.max(inactiveSize, activeSize - range * progress);\n        return `${active}px`;\n      }\n      if (i === this.#drag?.target) {\n        const drag = inactiveSize + range * progress;\n        return `${drag}px`;\n      }\n      return `${inactiveSize}px`;\n    });\n\n    container.style.setProperty('--active-tab', sizes.join(' '));\n    this.#drag.progress = progress;\n  }\n\n  /**\n   * @param {AbortController} ac\n   */\n  #endDrag(ac) {\n    if (!this.#drag) return;\n\n    const { container } = this.refs;\n    container?.removeAttribute('data-dragging');\n\n    if (this.#drag.dragging) {\n      this.#drag.prevent = true;\n      setTimeout(() => (this.#drag = null), 100);\n\n      if (this.#drag.progress && this.#drag.progress >= DRAG_COMPLETE_THRESHOLD) {\n        this.#activate(this.#drag.target);\n      } else {\n        this.#updateActiveTab();\n      }\n    } else {\n      this.#drag = null;\n    }\n\n    ac.abort();\n  }\n\n  #observeContentHeight() {\n    const { panels } = this.refs;\n\n    this.#heightObserver?.disconnect();\n    this.#heightObserver = new ResizeObserver(() => this.#syncHeight());\n\n    this.#contentObserver?.disconnect();\n    this.#contentObserver = new MutationObserver(() => this.#syncHeight());\n\n    for (const panel of panels ?? []) {\n      const content = panel.querySelector('.layered-slideshow__content');\n      const inner = content?.querySelector('.group-block-content');\n\n      // Observe all relevant elements for resize\n      if (inner) this.#heightObserver.observe(inner);\n      if (content) this.#heightObserver.observe(content);\n\n      // Observe content for DOM mutations (new blocks, text changes)\n      const target = inner ?? content;\n      if (target) {\n        this.#contentObserver.observe(target, {\n          childList: true,\n          subtree: true,\n          characterData: true,\n        });\n      }\n    }\n\n    this.#syncHeight();\n  }\n\n  #syncHeight() {\n    const { container } = this.refs;\n    const contentHeight = this.#getMaxContentHeight();\n    const isAuto = container.getAttribute('size') === 'auto';\n\n    if (this.#isMobile) {\n      this.#syncMobileHeight(contentHeight, isAuto);\n    } else {\n      this.#syncDesktopHeight(contentHeight, isAuto);\n    }\n  }\n\n  /**\n   * @param {number} contentHeight\n   * @param {boolean} isAuto\n   */\n  #syncDesktopHeight(contentHeight, isAuto) {\n    const { container } = this.refs;\n\n    if (isAuto) {\n      // Auto mode: fit to content height\n      let minHeightTemp = Math.max(contentHeight, 150);\n      container.style.height = `${minHeightTemp}px`;\n      this.style.minHeight = `${minHeightTemp}px`;\n    } else {\n      // Temporarily clear inline style to measure CSS-defined min-height\n      const savedMinHeight = this.style.minHeight;\n      this.style.minHeight = '';\n      const cssMinHeight = parseFloat(getComputedStyle(this).minHeight) || 0;\n      this.style.minHeight = savedMinHeight;\n\n      // Only set inline heights when content exceeds CSS min-height\n      if (contentHeight > cssMinHeight) {\n        this.style.minHeight = `${contentHeight}px`;\n        container.style.height = `${contentHeight}px`;\n      } else {\n        this.style.minHeight = '';\n        container.style.height = '';\n      }\n    }\n  }\n\n  /**\n   * @param {number} contentHeight\n   * @param {boolean} isAuto\n   */\n  #syncMobileHeight(contentHeight, isAuto) {\n    const { container, tabs } = this.refs;\n    if (!container || !tabs) return;\n\n    const containerStyles = getComputedStyle(container);\n    const inactiveStackHeight = (tabs.length - 1) * this.#inactiveSize;\n\n    let minPanelHeight;\n\n    if (isAuto) {\n      // Auto mode: fit to content height with reasonable minimum\n      minPanelHeight = 150;\n    } else {\n      // CSS variable is set on component, try reading from container (inherited) or component directly\n      const inheritedValue = containerStyles.getPropertyValue('--layered-panel-height-mobile');\n      const componentValue = getComputedStyle(this).getPropertyValue('--layered-panel-height-mobile');\n      minPanelHeight = parseFloat(inheritedValue || componentValue) || 260;\n    }\n\n    const requiredActiveHeight = Math.max(minPanelHeight, contentHeight);\n\n    container.style.setProperty('--active-panel-height', `${requiredActiveHeight}px`);\n    container.style.height = `${requiredActiveHeight + inactiveStackHeight}px`;\n  }\n\n  #clearHeightStyles() {\n    const { container } = this.refs;\n\n    this.style.minHeight = '';\n    container.style.height = '';\n    container.style.removeProperty('--active-panel-height');\n  }\n\n  #getMaxContentHeight() {\n    const { panels } = this.refs;\n    let max = 0;\n\n    for (const panel of panels ?? []) {\n      const content = panel.querySelector('.layered-slideshow__content');\n      if (!content) continue;\n\n      const inner = /** @type {HTMLElement} */ (content.querySelector('.group-block-content') ?? content);\n\n      // Temporarily set height to auto for accurate measurement\n      // This is needed because height: 100% collapses when parent has no height\n      const savedHeight = inner.style.height;\n      inner.style.height = 'auto';\n\n      const styles = getComputedStyle(content);\n      const paddingTop = parseFloat(styles.paddingBlockStart || styles.paddingTop) || 0;\n      const paddingBottom = parseFloat(styles.paddingBlockEnd || styles.paddingBottom) || 0;\n\n      const height = (inner.scrollHeight || 0) + paddingTop + paddingBottom;\n      if (height > max) max = height;\n\n      // Restore original height\n      inner.style.height = savedHeight;\n    }\n\n    return max;\n  }\n}\n\ncustomElements.define('layered-slideshow-component', LayeredSlideshowComponent);\n"],
  "mappings": "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",
  "names": []
}
