flexipop
Version:
2 lines (1 loc) • 4.87 kB
JavaScript
"use strict";var X=Object.defineProperty;var Y=(n,e,t)=>e in n?X(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var o=(n,e,t)=>Y(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k="bottom",z=10,B=({reference:n,popper:e})=>{if(!n||!e)throw new Error("Reference or popper element is null or undefined");const t=new WeakMap,s=c=>(t.has(c)||t.set(c,c.getBoundingClientRect()),t.get(c)),a=s(e),i=s(n);return{popperHeight:a.height,popperWidth:a.width,refHeight:i.height,refWidth:i.width,refLeft:i.left,refTop:i.top,refRight:i.right}},C=(n,e,t,s)=>{const a=t,i=s-(t+e);return a>=(n-e)/2&&i>=(n-e)/2},U=(n,e,t,s)=>(n-e)/2<=t&&t+n/2+e/2<=s,V=(n,e,t,s,a)=>t>a-s?e()?window.innerHeight-a:t-a:n()?0:t+s,L=(n,e,t,s)=>n<=s&&t-n<=e,f=(n,e,t,s)=>t<=s&&-n<=e,N=(n,e,t,s,a,i)=>{const c=a-t-i,r=t-s,d=t+i-s+(a-t-i),l=c>=0?a-s:r>=0?t-s:t;return n()?0:e()?d:l},_=(n,e,t,s)=>n<=t&&e-n-s>=n,$=(n,e)=>n>=e,q=({placement:n,refWidth:e,refTop:t,refLeft:s,refHeight:a,popperWidth:i,popperHeight:c,windowHeight:r,windowWidth:d,offsetDistance:l})=>{const E=d-s-e,h=s,x=r-t-a,j=t,y=()=>V(()=>f(t,a,c,r),()=>L(t,a,c,r),t,a,c),P=()=>N(()=>_(s,d,i,e),()=>$(s,i),s,i,d,e),g=()=>C(i,e,s,d)?s+e/2-i/2:P(),A=()=>U(c,a,t,r)?t+a/2-c/2:y(),F=()=>s+i<=d?s:P(),I=()=>s+e-i>=0?s+e-i:P(),T=()=>t+c<=r?t:y(),D=()=>t+a-c>=0?t+a-c:y();let m=0,u=0;const R=t-c-l,b=t+a+l,v=s-i-l,w=s+e+l,p=j>=c+l,O=x>=c+l,S=h>=i+l,M=E>=i+l;switch(n.startsWith("top")?u=p?R:O?b:Math.max(R,b):n.startsWith("bottom")?u=O?b:p?R:Math.max(b):n.startsWith("left")?m=S?v:M?w:Math.max(v,w):n.startsWith("right")&&(m=M?w:S?v:Math.max(w,v)),n){case"bottom":case"bottom-middle":case"top":case"top-middle":m=g();break;case"left":case"left-middle":case"right":case"right-middle":u=A();break;case"bottom-start":case"top-start":m=F();break;case"bottom-end":case"top-end":m=I();break;case"left-start":case"right-start":u=T();break;case"left-end":case"right-end":u=D();break}return{x:m,y:u}};class G{constructor(e,t,s={}){o(this,"reference");o(this,"popper");o(this,"offsetDistance");o(this,"placement");o(this,"disableOnResize");o(this,"disableOnScroll");o(this,"onUpdate");o(this,"isWindowEventsRegistered");o(this,"validateElements",()=>{if(!(this.reference instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(this.popper instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(typeof this.offsetDistance!="number")throw new Error("OffsetDistance must be a number")});o(this,"setPopperStyleProperty",(e,t)=>{this.popper.style.setProperty("--fx-popper-placement-x",`${e}px`),this.popper.style.setProperty("--fx-popper-placement-y",`${t}px`)});o(this,"setInitialStyles",()=>{this.popper.style.setProperty("--fx-popper-placement-x",""),this.popper.style.setProperty("--fx-popper-placement-y","")});o(this,"initPlacement",()=>{var h;this.validateElements(),this.setInitialStyles();const e=window.innerWidth,t=window.innerHeight,{popperHeight:s,popperWidth:a,refHeight:i,refWidth:c,refLeft:r,refTop:d}=B({reference:this.reference,popper:this.popper}),{x:l,y:E}=q({placement:this.placement,refWidth:c,refTop:d,refLeft:r,popperWidth:a,refHeight:i,popperHeight:s,windowHeight:t,windowWidth:e,offsetDistance:this.offsetDistance});this.setPopperStyleProperty(l,E),(h=this.onUpdate)==null||h.call(this,{x:l,y:E,placement:this.placement})});o(this,"removeWindowEvents",()=>{this.isWindowEventsRegistered&&(!this.disableOnResize&&window.removeEventListener("resize",this.updatePosition),!this.disableOnScroll&&window.removeEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!1)});o(this,"attachWindowEvent",()=>{this.isWindowEventsRegistered&&this.removeWindowEvents(),this.disableOnResize||window.addEventListener("resize",this.updatePosition),this.disableOnScroll||window.addEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!0});o(this,"resetPosition",()=>{this.setInitialStyles()});o(this,"updatePosition",()=>{this.initPlacement(),this.attachWindowEvent()});o(this,"cleanupEvents",()=>{this.setInitialStyles(),this.removeWindowEvents()});const{offsetDistance:a=z,placement:i=k,eventEffect:c={},onUpdate:r}=s;if(!(e instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(t instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(s.offsetDistance&&typeof s.offsetDistance!="number")throw new Error("OffsetDistance must be a number");const{disableOnResize:d,disableOnScroll:l}=c;this.isWindowEventsRegistered=!1,this.reference=e,this.popper=t,this.offsetDistance=a,this.placement=i,this.disableOnResize=d||!1,this.disableOnScroll=l||!1,this.onUpdate=r}setOptions({placement:e,offsetDistance:t}){this.placement=e,this.offsetDistance=t||this.offsetDistance,this.initPlacement(),this.attachWindowEvent()}}exports.CreatePopper=G;