{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/header-menu.js?vsype=yfmwt"],
  "sourcesContent": ["import { Component } from '@theme/component';\nimport { debounce, onDocumentReady } from '@theme/utilities';\nimport { MegaMenuHoverEvent } from '@theme/events';\n\nconst SHORT_ACTIVATE_DELAY = 0;\nconst LONG_ACTIVATE_DELAY = 250;\nconst DEACTIVATE_DELAY = 350;\n\n/**\n * A custom element that manages a header menu.\n *\n * @typedef {Object} State\n * @property {HTMLElement | null} activeItem - The currently active menu item.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} overflowMenu - The overflow menu.\n * @property {HTMLElement[]} [submenu] - The submenu in each respective menu item.\n *\n * @extends {Component<Refs>}\n */\nclass HeaderMenu extends Component {\n  requiredRefs = ['overflowMenu'];\n\n  #abortController = new AbortController();\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.overflowMenu?.addEventListener('pointerleave', () => this.#debouncedDeactivate(), {\n      signal: this.#abortController.signal,\n    });\n\n    onDocumentReady(this.#preloadImages);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abortController.abort();\n  }\n\n  /**\n   * @type {State}\n   */\n  #state = {\n    activeItem: null,\n  };\n\n  /**\n   * Time to allow for a closing animation between initiating a deactivation and actually deactivating the active item.\n   * @returns {number}\n   */\n  get animationDelay() {\n    const value = this.dataset.animationDelay;\n    return value ? parseInt(value, 10) : 0;\n  }\n\n  /**\n   * Get the overflow menu\n   */\n  get overflowMenu() {\n    return /** @type {HTMLElement | null} */ (this.refs.overflowMenu?.shadowRoot?.querySelector('[part=\"overflow\"]'));\n  }\n\n  /**\n   * Whether the overflow menu is hovered\n   * @returns {boolean}\n   */\n  get overflowHovered() {\n    return this.refs.overflowMenu?.matches(':hover') ?? false;\n  }\n\n  /**\n   * Activate the selected menu item immediately\n   * @param {PointerEvent | FocusEvent} event\n   */\n  activate = (event) => {\n    this.#debouncedDeactivate.cancel();\n    this.#shortDebouncedActivateHandler.cancel();\n    this.#longDebouncedActivateHandler.cancel();\n\n    if (this.#state.activeItem) {\n      this.#shortDebouncedActivateHandler(event);\n    } else {\n      this.#longDebouncedActivateHandler(event);\n    }\n  };\n\n  /**\n   * Activate the selected menu item with a delay\n   * @param {PointerEvent | FocusEvent} event\n   */\n  #activateHandler = (event) => {\n    this.#debouncedDeactivate.cancel();\n\n    this.dispatchEvent(new MegaMenuHoverEvent());\n\n    this.removeAttribute('data-animating');\n\n    if (!(event.target instanceof Element)) return;\n\n    let item = findMenuItem(event.target);\n\n    if (!item || item == this.#state.activeItem) return;\n\n    const isDefaultSlot = event.target.slot === '';\n\n    this.dataset.overflowExpanded = (!isDefaultSlot).toString();\n\n    const previouslyActiveItem = this.#state.activeItem;\n\n    if (previouslyActiveItem) {\n      previouslyActiveItem.ariaExpanded = 'false';\n    }\n\n    this.#state.activeItem = item;\n    this.ariaExpanded = 'true';\n    item.ariaExpanded = 'true';\n\n    let submenu = findSubmenu(item);\n    let overflowMenuHeight = this.overflowMenu?.offsetHeight ?? 0;\n\n    if (!submenu && !isDefaultSlot) {\n      submenu = this.overflowMenu;\n    }\n\n    const submenuHeight = submenu ? Math.max(submenu.offsetHeight, overflowMenuHeight) : 0;\n\n    this.style.setProperty('--submenu-height', `${submenuHeight}px`);\n  };\n\n  #shortDebouncedActivateHandler = debounce(this.#activateHandler, SHORT_ACTIVATE_DELAY);\n  #longDebouncedActivateHandler = debounce(this.#activateHandler, LONG_ACTIVATE_DELAY);\n\n  /**\n   * Deactivate the active item after a delay\n   * @param {PointerEvent | FocusEvent} event\n   */\n  deactivate(event) {\n    this.#shortDebouncedActivateHandler.cancel();\n    this.#longDebouncedActivateHandler.cancel();\n\n    if (!(event.target instanceof Element)) return;\n\n    const item = findMenuItem(event.target);\n\n    // Make sure the item to be deactivated is still the active one. Ideally\n    // we cancelled the debounce before the item was changed, but just in case.\n    if (item === this.#state.activeItem) {\n      this.#debouncedDeactivate();\n    }\n  }\n\n  /**\n   * Deactivate the active item immediately\n   * @param {HTMLElement | null} [item]\n   */\n  #deactivate = (item = this.#state.activeItem) => {\n    if (!item || item != this.#state.activeItem) return;\n    if (this.overflowHovered) return;\n\n    this.style.setProperty('--submenu-height', '0px');\n    this.dataset.overflowExpanded = 'false';\n\n    this.#state.activeItem = null;\n    this.ariaExpanded = 'false';\n    item.ariaExpanded = 'false';\n    item.setAttribute('data-animating', '');\n\n    setTimeout(() => {\n      item.removeAttribute('data-animating');\n    }, this.animationDelay);\n  };\n\n  /**\n   * Deactivate the active item after a delay\n   * @param {PointerEvent | FocusEvent} event\n   */\n  #debouncedDeactivate = debounce(this.#deactivate, DEACTIVATE_DELAY);\n\n  /**\n   * Preload images that are set to load lazily.\n   */\n  #preloadImages = () => {\n    const images = this.querySelectorAll('img[loading=\"lazy\"]');\n    images?.forEach((image) => image.removeAttribute('loading'));\n  };\n}\n\nif (!customElements.get('header-menu')) {\n  customElements.define('header-menu', HeaderMenu);\n}\n\n/**\n * Find the closest menu item.\n * @param {Element | null | undefined} element\n * @returns {HTMLElement | null}\n */\nfunction findMenuItem(element) {\n  if (!(element instanceof Element)) return null;\n\n  if (element?.matches('[slot=\"more\"')) {\n    // Select the first overflowing menu item when hovering over the \"More\" item\n    return findMenuItem(element.parentElement?.querySelector('[slot=\"overflow\"]'));\n  }\n\n  return element?.querySelector('[role=\"menuitem\"]');\n}\n\n/**\n * Find the closest submenu.\n * @param {Element | null | undefined} element\n * @returns {HTMLElement | null}\n */\nfunction findSubmenu(element) {\n  const submenu = element?.parentElement?.querySelector('[ref=\"submenu[]\"]');\n  return submenu instanceof HTMLElement ? submenu : null;\n}\n"],
  "mappings": "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",
  "names": []
}
