/*! Copyright (c) Safe As Milk. All rights reserved. */class NestedMenu extends HTMLElement{#activeRow;#boundClickRow;#boundMouseEnterRow;#boundMouseLeaveMenu;#boundMouseMoveDocument;#lastDelayLoc;#mouseLocs;#timeoutId;static#MOUSE_LOCS_TRACKED=3;static#DELAY=300;constructor(){super(),this.menu=this.querySelector("ul"),this.rows=Array.from(this.menu.querySelectorAll(":scope > li")),this.submenus=Array.from(this.menu.querySelectorAll(":scope > li > header-details-disclosure")),this.tolerance=this.getAttribute("tolerance")||0,this.submenuDirection=this.getAttribute("submenu-direction")||"right",this.#activeRow=null,this.#mouseLocs=[],this.#lastDelayLoc=null,this.#timeoutId=null,this.#boundMouseLeaveMenu=this.#mouseleaveMenu.bind(this),this.#boundMouseEnterRow=this.#mouseenterRow.bind(this),this.#boundClickRow=this.#clickRow.bind(this),this.#boundMouseMoveDocument=this.#mousemoveDocument.bind(this)}connectedCallback(){window.matchMedia&&!window.matchMedia("(any-hover: hover)").matches||(setTimeout(()=>{this.submenus.forEach(submenu=>{submenu.disableListeners()})}),this.menu.addEventListener("mouseleave",this.#boundMouseLeaveMenu),this.rows.forEach(row=>{row.addEventListener("mouseenter",this.#boundMouseEnterRow),row.addEventListener("click",this.#boundClickRow)}),document.addEventListener("mousemove",this.#boundMouseMoveDocument))}disconnectedCallback(){window.matchMedia&&!window.matchMedia("(any-hover: hover)").matches||(this.menu.removeEventListener("mouseleave",this.#boundMouseLeaveMenu),this.rows.forEach(row=>{row.removeEventListener("mouseenter",this.#boundMouseEnterRow),row.removeEventListener("click",this.#boundClickRow)}),document.removeEventListener("mousemove",this.#boundMouseMoveDocument))}#mousemoveDocument(e){this.#mouseLocs.push({x:e.pageX,y:e.pageY}),this.#mouseLocs.length>NestedMenu.#MOUSE_LOCS_TRACKED&&this.#mouseLocs.shift()}#mouseleaveMenu(){this.#timeoutId&&clearTimeout(this.#timeoutId),this.#possiblyDeactivate(this.#activeRow,NestedMenu.#DELAY)}#mouseenterRow(e){this.#timeoutId&&clearTimeout(this.#timeoutId),this.#possiblyActivate(e.target)}#clickRow(e){this.activate(e.target)}static openSubmenu(row){if(!row)return;const submenu=row.querySelector("header-details-disclosure");submenu&&submenu.mouseEnterListener()}static closeSubmenu(row){if(!row)return;const submenu=row.querySelector("header-details-disclosure");submenu&&submenu.mouseLeaveListener()}activate(row){row!==this.#activeRow&&(this.#activeRow&&NestedMenu.closeSubmenu(this.#activeRow),NestedMenu.openSubmenu(row),this.#activeRow=row)}#possiblyActivate(row){const delay=this.#activationDelay();delay?this.#timeoutId=setTimeout(()=>{this.#possiblyActivate(row)},delay):this.activate(row)}#possiblyDeactivate(row,initialDelay){const delay=initialDelay??this.#activationDelay();delay?this.#timeoutId=setTimeout(()=>{this.#possiblyDeactivate(row)},delay):(NestedMenu.closeSubmenu(row),this.#activeRow=null)}#activationDelay(){if(!this.#activeRow||!this.rows.includes(this.#activeRow))return 0;const offset={top:this.menu.getBoundingClientRect().top+window.scrollY,left:this.menu.getBoundingClientRect().left+window.scrollX},upperLeft={x:offset.left,y:offset.top-this.tolerance},upperRight={x:offset.left+this.menu.offsetWidth,y:upperLeft.y},lowerLeft={x:offset.left,y:offset.top+this.menu.offsetHeight+this.tolerance},lowerRight={x:offset.left+this.menu.offsetWidth,y:lowerLeft.y},loc=this.#mouseLocs[this.#mouseLocs.length-1];let prevLoc=this.#mouseLocs[0];if(!loc||(prevLoc||(prevLoc=loc),prevLoc.xlowerRight.x||prevLoc.ylowerRight.y)||this.#lastDelayLoc&&loc.x===this.#lastDelayLoc.x&&loc.y===this.#lastDelayLoc.y)return 0;function slope(a,b){return(b.y-a.y)/(b.x-a.x)}let decreasingCorner=upperRight,increasingCorner=lowerRight;this.submenuDirection==="left"?(decreasingCorner=lowerLeft,increasingCorner=upperLeft):this.submenuDirection==="below"&&(decreasingCorner=lowerRight,increasingCorner=lowerLeft);const decreasingSlope=slope(loc,decreasingCorner),increasingSlope=slope(loc,increasingCorner),prevDecreasingSlope=slope(prevLoc,decreasingCorner),prevIncreasingSlope=slope(prevLoc,increasingCorner);return decreasingSlopeprevIncreasingSlope?(this.#lastDelayLoc=loc,NestedMenu.#DELAY):(this.#lastDelayLoc=null,0)}}customElements.define("nested-menu",NestedMenu); //# sourceMappingURL=/cdn/shop/t/100/assets/nested-menu.js.map?v=53243661712293410791751575324