{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/anchored-popover.js?cb=20260407-7"],
  "sourcesContent": ["import { Component } from '@theme/component';\nimport { debounce, requestIdleCallback } from '@theme/utilities';\n\n/**\n * A custom element that manages the popover + popover trigger relationship for anchoring.\n * Calculates the trigger position and inlines custom properties on the popover element\n * that can be consumed by CSS for positioning.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} popover \u2013 The popover element.\n * @property {HTMLElement} trigger \u2013 The popover trigger element.\n *\n * @extends Component<Refs>\n *\n * @example\n * ```html\n * <anchored-popover-component data-close-on-resize>\n *   <button data-ref=\"trigger\" popovertarget=\"menu\">Open Menu</button>\n *   <div data-ref=\"popover\" id=\"menu\" popover>Menu content</div>\n * </anchored-popover-component>\n * ```\n *\n * @property {string[]} requiredRefs - Required refs: 'popover' and 'trigger'\n * @property {number} [interaction_delay] - The delay in milliseconds for the hover interaction\n * @property {string} [data-close-on-resize] - When present, closes popover on window resize\n * @property {string} [data-hover-triggered] - When present, makes the popover function via pointerenter/leave\n * @property {number | null} [popoverTrigger] - The timeout for the popover trigger\n */\nexport class AnchoredPopoverComponent extends Component {\n  requiredRefs = ['popover', 'trigger'];\n  interaction_delay = 200;\n  #popoverTrigger = /** @type {number | null} */ (null);\n\n  #onTriggerEnter = () => {\n    const { trigger, popover } = this.refs;\n    trigger.dataset.hoverActive = 'true';\n    if (!popover.matches(':popover-open')) {\n      this.#popoverTrigger = setTimeout(() => {\n        if (trigger.matches('[data-hover-active]')) popover.showPopover();\n      }, this.interaction_delay);\n    }\n  };\n\n  #onTriggerLeave = () => {\n    const { trigger, popover } = this.refs;\n    delete trigger.dataset.hoverActive;\n    if (this.#popoverTrigger) clearTimeout(this.#popoverTrigger);\n    if (popover.matches(':popover-open')) {\n      this.#popoverTrigger = setTimeout(() => {\n        popover.hidePopover();\n      }, this.interaction_delay);\n    }\n  };\n\n  #onPopoverEnter = () => {\n    if (this.#popoverTrigger) clearTimeout(this.#popoverTrigger);\n  };\n\n  #onPopoverLeave = () => {\n    const { popover } = this.refs;\n    this.#popoverTrigger = setTimeout(() => {\n      popover.hidePopover();\n    }, this.interaction_delay);\n  };\n\n  /**\n   * Updates the popover position by calculating trigger element bounds\n   * and setting CSS custom properties on the popover element.\n   */\n  #updatePosition = async () => {\n    const { popover, trigger } = this.refs;\n    if (!popover || !trigger) return;\n    const positions = trigger.getBoundingClientRect();\n    popover.style.setProperty('--anchor-top', `${positions.top}`);\n    popover.style.setProperty('--anchor-right', `${window.innerWidth - positions.right}`);\n    popover.style.setProperty('--anchor-bottom', `${window.innerHeight - positions.bottom}`);\n    popover.style.setProperty('--anchor-left', `${positions.left}`);\n    popover.style.setProperty('--anchor-height', `${positions.height}`);\n    popover.style.setProperty('--anchor-width', `${positions.width}`);\n  };\n\n  /**\n   * Debounced resize handler that optionally closes the popover\n   * when the window is resized, based on the data-close-on-resize attribute.\n   */\n  #resizeListener = debounce(() => {\n    const popover = /** @type {HTMLElement} */ (this.refs.popover);\n    if (popover && popover.matches(':popover-open')) {\n      popover.hidePopover();\n    }\n  }, 100);\n\n  /**\n   * Component initialization - sets up event listeners for resize and popover toggle events.\n   */\n  connectedCallback() {\n    super.connectedCallback();\n    const { popover, trigger } = this.refs;\n    if (this.dataset.closeOnResize) {\n      popover.addEventListener('beforetoggle', (event) => {\n        const evt = /** @type {ToggleEvent} */ (event);\n        window[evt.newState === 'open' ? 'addEventListener' : 'removeEventListener']('resize', this.#resizeListener);\n      });\n    }\n    if (this.dataset.hoverTriggered) {\n      trigger.addEventListener('pointerenter', this.#onTriggerEnter);\n      trigger.addEventListener('pointerleave', this.#onTriggerLeave);\n      popover.addEventListener('pointerenter', this.#onPopoverEnter);\n      popover.addEventListener('pointerleave', this.#onPopoverLeave);\n    }\n    if (!CSS.supports('position-anchor: --trigger')) {\n      popover.addEventListener('beforetoggle', () => {\n        this.#updatePosition();\n      });\n      requestIdleCallback(() => {\n        this.#updatePosition();\n      });\n    }\n  }\n\n  /**\n   * Component cleanup - removes resize event listener.\n   */\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    window.removeEventListener('resize', this.#resizeListener);\n  }\n}\n\nif (!customElements.get('anchored-popover-component')) {\n  customElements.define('anchored-popover-component', AnchoredPopoverComponent);\n}\n"],
  "mappings": "AAAA,OAAS,cAAiB,mBAC1B,OAAS,SAAU,wBAA2B,mBA2BvC,aAAM,iCAAiC,SAAU,CACtD,aAAe,CAAC,UAAW,SAAS,EACpC,kBAAoB,IACpB,gBAAgD,KAEhD,gBAAkB,IAAM,CACtB,KAAM,CAAE,QAAS,OAAQ,EAAI,KAAK,KAClC,QAAQ,QAAQ,YAAc,OACzB,QAAQ,QAAQ,eAAe,IAClC,KAAK,gBAAkB,WAAW,IAAM,CAClC,QAAQ,QAAQ,qBAAqB,GAAG,QAAQ,YAAY,CAClE,EAAG,KAAK,iBAAiB,EAE7B,EAEA,gBAAkB,IAAM,CACtB,KAAM,CAAE,QAAS,OAAQ,EAAI,KAAK,KAClC,OAAO,QAAQ,QAAQ,YACnB,KAAK,iBAAiB,aAAa,KAAK,eAAe,EACvD,QAAQ,QAAQ,eAAe,IACjC,KAAK,gBAAkB,WAAW,IAAM,CACtC,QAAQ,YAAY,CACtB,EAAG,KAAK,iBAAiB,EAE7B,EAEA,gBAAkB,IAAM,CAClB,KAAK,iBAAiB,aAAa,KAAK,eAAe,CAC7D,EAEA,gBAAkB,IAAM,CACtB,KAAM,CAAE,OAAQ,EAAI,KAAK,KACzB,KAAK,gBAAkB,WAAW,IAAM,CACtC,QAAQ,YAAY,CACtB,EAAG,KAAK,iBAAiB,CAC3B,EAMA,gBAAkB,SAAY,CAC5B,KAAM,CAAE,QAAS,OAAQ,EAAI,KAAK,KAClC,GAAI,CAAC,SAAW,CAAC,QAAS,OAC1B,MAAM,UAAY,QAAQ,sBAAsB,EAChD,QAAQ,MAAM,YAAY,eAAgB,GAAG,UAAU,GAAG,EAAE,EAC5D,QAAQ,MAAM,YAAY,iBAAkB,GAAG,OAAO,WAAa,UAAU,KAAK,EAAE,EACpF,QAAQ,MAAM,YAAY,kBAAmB,GAAG,OAAO,YAAc,UAAU,MAAM,EAAE,EACvF,QAAQ,MAAM,YAAY,gBAAiB,GAAG,UAAU,IAAI,EAAE,EAC9D,QAAQ,MAAM,YAAY,kBAAmB,GAAG,UAAU,MAAM,EAAE,EAClE,QAAQ,MAAM,YAAY,iBAAkB,GAAG,UAAU,KAAK,EAAE,CAClE,EAMA,gBAAkB,SAAS,IAAM,CAC/B,MAAM,QAAsC,KAAK,KAAK,QAClD,SAAW,QAAQ,QAAQ,eAAe,GAC5C,QAAQ,YAAY,CAExB,EAAG,GAAG,EAKN,mBAAoB,CAClB,MAAM,kBAAkB,EACxB,KAAM,CAAE,QAAS,OAAQ,EAAI,KAAK,KAC9B,KAAK,QAAQ,eACf,QAAQ,iBAAiB,eAAiB,OAAU,CAElD,OADwC,MAC7B,WAAa,OAAS,mBAAqB,qBAAqB,EAAE,SAAU,KAAK,eAAe,CAC7G,CAAC,EAEC,KAAK,QAAQ,iBACf,QAAQ,iBAAiB,eAAgB,KAAK,eAAe,EAC7D,QAAQ,iBAAiB,eAAgB,KAAK,eAAe,EAC7D,QAAQ,iBAAiB,eAAgB,KAAK,eAAe,EAC7D,QAAQ,iBAAiB,eAAgB,KAAK,eAAe,GAE1D,IAAI,SAAS,4BAA4B,IAC5C,QAAQ,iBAAiB,eAAgB,IAAM,CAC7C,KAAK,gBAAgB,CACvB,CAAC,EACD,oBAAoB,IAAM,CACxB,KAAK,gBAAgB,CACvB,CAAC,EAEL,CAKA,sBAAuB,CACrB,MAAM,qBAAqB,EAC3B,OAAO,oBAAoB,SAAU,KAAK,eAAe,CAC3D,CACF,CAEK,eAAe,IAAI,4BAA4B,GAClD,eAAe,OAAO,6BAA8B,wBAAwB",
  "names": []
}
