UNPKG

dumogu-dropdown-menu

Version:
8 lines (7 loc) 4.54 kB
/*! * dumogu-dropdown-menu v0.0.2 * Copyright 2025 wuzhanggui https://github.com/wurencaideli * Licensed under MIT */ "use strict";function t(t,n){t.classList.add(n)}class n{isMounted=!1;isDestroyed=!1;constructor(){}destroy(){this.isDestroyed=!0}mount(){this.isMounted=!0}unmount(){this.isMounted=!1}}exports.DumoguDropdownMenu=class extends n{#t;#n;#e;#o=!1;#i="";#r;#s;#a=!1;#d={};#h=[0,0];#u=[0,0];#p=0;#_=0;constructor(n={}){super();const e=document.createElement("div"),o=document.createElement("div"),i=document.createElement("div");t(e,"dumogu-dropdown-menu-body"),t(o,"dumogu-dropdown-menu-body-container"),t(i,"dumogu-dropdown-menu-body-container-target"),e.appendChild(o),o.appendChild(i),this.#t=e,this.#n=o,this.#e=i,this.#l(),this.content=n.content,this.area=n.area,this.show=n.show}set dropdownMenuEl(t){this.#t=t}get dropdownMenuEl(){return this.#t}set dropdownMenuContainerEl(t){this.#n=t}get dropdownMenuContainerEl(){return this.#n}set dropdownMenuContainerTargetEl(t){this.#e=t}get dropdownMenuContainerTargetEl(){return this.#e}set show(t){this.isDestroyed||(this.#o=t,t&&!this.isMounted?(this.mount(),this.#m(),setTimeout(()=>{this.#c()},16)):(this.#m(),this.#c()))}get show(){return this.#o}set content(t){this.#i=t,this.#w()}get content(){return this.#i}set isTransitioning(t){this.#a=t,this.#g()}get isTransitioning(){return this.#a}set area(t={}){this.#d=t,this.#h=t.start||[],this.#u=t.end||[],this.#p=t.width||0,this.#_=t.height||0}get area(){return this.#d}mount(){this.isDestroyed||(super.mount(),this.#m(),document.body.appendChild(this.#t))}unmount(){var t;this.isDestroyed||(super.unmount(),(t=this.#t)&&t.parentNode&&t.parentNode.removeChild(t))}destroy(){this.isDestroyed||(this.#y(),this.unmount(),this.content=void 0,super.destroy(),this.#t=void 0,this.#n=void 0,this.#e=void 0)}update(){this.#m()}#c(){if(this.isDestroyed)return;const n=this.#t;var e;this.#o?t(n,"show"):(e="show",n.classList.remove(e))}#w(){if(this.isDestroyed)return;const t=this.#e;let n=this.#i||"";"string"!=typeof n?(n.forEach||(n=[n]),t.innerHTML="",n.forEach(n=>{t.appendChild(n)})):t.innerHTML=n}#g(){this.#a||this.#o||this.unmount()}#E(t){t&&"transform"===t.propertyName&&t.target===this.#n&&(this.isTransitioning=!0)}#M(t){t&&"transform"===t.propertyName&&t.target===this.#n&&(this.isTransitioning=!1)}#l(){const t=this.#n,n=this;n.#r=function(t){n.#E(t)},n.#s=function(t){n.#M(t)},t.addEventListener("transitionstart",n.#r),t.addEventListener("transitionend",n.#s)}#y(){const t=this.#n;t.removeEventListener("transitionstart",this.#r),t.removeEventListener("transitionend",this.#s)}#m(){if(this.isDestroyed)return;if(!this.#o)return;const t=this.#n,n=this.#e,e=this.#f();switch(t.style.width=e.containerWidth+"px",t.style.height=e.containerHeight+"px",t.style.left=e.transformX+"px",t.style.top=e.transformY+"px",n.style.position="absolute",n.style.top="initial",n.style.right="initial",n.style.bottom="initial",n.style.left="initial",!0){case"left"==e.x&&"top"==e.y:n.style.right="0px",n.style.bottom="0px",t.style.transformOrigin="right bottom";break;case"right"==e.x&&"top"==e.y:n.style.bottom="0px",n.style.left="0px",t.style.transformOrigin="left bottom";break;case"right"==e.x&&"bottom"==e.y:n.style.top="0px",n.style.left="0px",t.style.transformOrigin="left top";break;case"left"==e.x&&"bottom"==e.y:n.style.top="0px",n.style.right="0px",t.style.transformOrigin="right top"}}#C(){const t=this.#h,n=this.#u,e=window.innerHeight;let o="left";window.innerWidth-n[0]>t[0]&&(o="right");let i="top";return e-n[1]>t[1]&&(i="bottom"),{x:o,y:i}}#x(){const t=this.#h,n=this.#u,e=this.#p,o=this.#_,i=window.innerHeight,r=window.innerWidth,s=this.#C();let a="",d=Math.abs(e/o),h=0;return"left"===s.x&&"top"===s.y&&(h=Math.abs(n[0]/t[1])),"right"===s.x&&"top"===s.y&&(h=Math.abs((r-t[0])/t[1])),"left"===s.x&&"bottom"===s.y&&(h=Math.abs(n[0]/(i-t[1]))),"right"===s.x&&"bottom"===s.y&&(h=Math.abs((r-t[0])/(i-t[1]))),a=d>h?"y":"x",{...s,ratio:a}}#f(){const t=this.#h,n=this.#u,e=window.innerHeight,o=window.innerWidth,i=this.#x();let r=0,s=0,a=0,d=0;return"left"===i.x&&"top"===i.y&&("x"==i.ratio?(r=t[0],s=n[1]):(r=n[0],s=t[1])),"right"===i.x&&"top"===i.y&&("x"==i.ratio?(r=o-n[0],s=n[1]):(r=o-t[0],s=t[1]),d=o-r),"left"===i.x&&"bottom"===i.y&&("x"==i.ratio?(r=t[0],s=e-t[1]):(r=n[0],s=e-n[1]),a=e-s),"right"===i.x&&"bottom"===i.y&&("x"==i.ratio?(r=o-n[0],s=e-t[1]):(r=o-t[0],s=e-n[1]),d=o-r,a=e-s),{...i,containerWidth:r,containerHeight:s,transformX:d,transformY:a}}}; //# sourceMappingURL=dumogu-dropdown-menu.cjs.js.map