@flexilla/alpine-dropdown 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -9
- package/dist/cdn.js +125 -114
- package/dist/cdn.min.js +1 -1
- package/dist/module.cjs.js +125 -114
- package/dist/module.esm.js +125 -114
- package/package.json +5 -3
- package/src/index.d.ts +7 -0
package/dist/cdn.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var J=Object.defineProperty,Q=(n,e,t)=>e in n?J(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e,t)=>Q(n,typeof e!="symbol"?e+"":e,t),V=Object.defineProperty,X=(n,e,t)=>e in n?V(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,l=(n,e,t)=>X(n,typeof e!="symbol"?e+"":e,t),Y="bottom",Z=({reference:n,popper:e})=>{if(!n||!e)throw new Error("Reference or popper element is null or undefined");let t=new WeakMap,i=r=>(t.has(r)||t.set(r,r.getBoundingClientRect()),t.get(r)),o=i(e),s=i(n);return{popperHeight:o.height,popperWidth:o.width,refHeight:s.height,refWidth:s.width,refLeft:s.left,refTop:s.top,refRight:s.right}},_=Object.defineProperty,ee=(n,e,t)=>e in n?_(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,m=(n,e,t)=>ee(n,typeof e!="symbol"?e+"":e,t),te=(n,e,t,i)=>{let o=t,s=i-(t+e);return o>=(n-e)/2&&s>=(n-e)/2},ne=(n,e,t,i)=>(n-e)/2<=t&&t+n/2+e/2<=i,ie=(n,e,t,i,o)=>t>o-i?e()?window.innerHeight-o:t-o:n()?0:t+i,se=(n,e,t,i)=>n<=i&&t-n<=e,oe=(n,e,t,i)=>t<=i&&-n<=e,re=(n,e,t,i,o,s)=>{let r=o-t-s,a=t-i,c=t+s-i+(o-t-s),p=r>=0?o-i:a>=0?t-i:t;return n()?0:e()?c:p},ae=(n,e,t,i)=>n<=t&&e-n-i>=n,le=(n,e)=>n>=e,he=({placement:n,refWidth:e,refTop:t,refLeft:i,refHeight:o,popperWidth:s,popperHeight:r,windowHeight:a,windowWidth:c,offsetDistance:p})=>{let d=c-i-e,f=i,E=a-t-o,g=t,w=()=>ie(()=>oe(t,o,r,a),()=>se(t,o,r,a),t,o,r),y=()=>re(()=>ae(i,c,s,e),()=>le(i,s),i,s,c,e),I=()=>te(s,e,i,c)?i+e/2-s/2:y(),C=()=>ne(r,o,t,a)?t+o/2-r/2:w(),T=()=>i+s<=c?i:y(),O=()=>i+e-s>=0?i+e-s:y(),L=()=>t+r<=a?t:w(),N=()=>t+o-r>=0?t+o-r:w(),u=0,v=0,M=t-r-p,D=t+o+p,H=i-s-p,k=i+e+p,R=g>=r+p,$=E>=r+p,A=f>=s+p,K=d>=s+p;switch(n.startsWith("top")?v=R?M:$?D:Math.max(M,D):n.startsWith("bottom")?v=$?D:R?M:Math.max(D):n.startsWith("left")?u=A?H:K?k:Math.max(H,k):n.startsWith("right")&&(u=K?k:A?H:Math.max(k,H)),n){case"bottom":case"bottom-middle":case"top":case"top-middle":u=I();break;case"left":case"left-middle":case"right":case"right-middle":v=C();break;case"bottom-start":case"top-start":u=T();break;case"bottom-end":case"top-end":u=O();break;case"left-start":case"right-start":v=L();break;case"left-end":case"right-end":v=N();break}return{x:u,y:v}},x=class{constructor(e,t,i={}){m(this,"reference"),m(this,"popper"),m(this,"offsetDistance"),m(this,"placement"),m(this,"disableOnResize"),m(this,"disableOnScroll"),m(this,"onUpdate"),m(this,"isWindowEventsRegistered"),m(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")}),m(this,"setPopperStyleProperty",(d,f)=>{this.popper.style.setProperty("--fx-popper-placement-x",`${d}px`),this.popper.style.setProperty("--fx-popper-placement-y",`${f}px`)}),m(this,"setInitialStyles",()=>{this.popper.style.setProperty("--fx-popper-placement-x",""),this.popper.style.setProperty("--fx-popper-placement-y","")}),m(this,"initPlacement",()=>{var d;this.validateElements(),this.setInitialStyles();let f=window.innerWidth,E=window.innerHeight,{popperHeight:g,popperWidth:w,refHeight:y,refWidth:I,refLeft:C,refTop:T}=Z({reference:this.reference,popper:this.popper}),{x:O,y:L}=he({placement:this.placement,refWidth:I,refTop:T,refLeft:C,popperWidth:w,refHeight:y,popperHeight:g,windowHeight:E,windowWidth:f,offsetDistance:this.offsetDistance});this.setPopperStyleProperty(O,L),(d=this.onUpdate)==null||d.call(this,{x:O,y:L,placement:this.placement})}),m(this,"removeWindowEvents",()=>{this.isWindowEventsRegistered&&(!this.disableOnResize&&window.removeEventListener("resize",this.updatePosition),!this.disableOnScroll&&window.removeEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!1)}),m(this,"attachWindowEvent",()=>{this.isWindowEventsRegistered&&this.removeWindowEvents(),this.disableOnResize||window.addEventListener("resize",this.updatePosition),this.disableOnScroll||window.addEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!0}),m(this,"resetPosition",()=>{this.setInitialStyles()}),m(this,"updatePosition",()=>{this.initPlacement(),this.attachWindowEvent()}),m(this,"cleanupEvents",()=>{this.setInitialStyles(),this.removeWindowEvents()});let{offsetDistance:o=10,placement:s=Y,eventEffect:r={},onUpdate:a}=i;if(!(e instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(t instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(i.offsetDistance&&typeof i.offsetDistance!="number")throw new Error("OffsetDistance must be a number");let{disableOnResize:c,disableOnScroll:p}=r;this.isWindowEventsRegistered=!1,this.reference=e,this.popper=t,this.offsetDistance=o,this.placement=s,this.disableOnResize=c||!1,this.disableOnScroll=p||!1,this.onUpdate=a}setOptions({placement:e,offsetDistance:t}){this.placement=e,this.offsetDistance=t||this.offsetDistance,this.initPlacement(),this.attachWindowEvent()}},ce=(n,e=document.body)=>e.querySelector(n),z=(n,e)=>{for(let[t,i]of Object.entries(e))n.setAttribute(t,i)},de=({element:n,callback:e,type:t,keysCheck:i})=>{let o=getComputedStyle(n),s=o.transition;if(s!=="none"&&s!==""&&!i.includes(s)){let r="transitionend",a=()=>{n.removeEventListener(r,a),e()};n.addEventListener(r,a,{once:!0})}else e()},pe=({element:n,callback:e})=>{de({element:n,callback:e,type:"transition",keysCheck:["all 0s ease 0s","all"]})},b=({state:n,trigger:e,popper:t})=>{z(t,{"data-state":n}),z(e,{"aria-expanded":`${n}`})},W=class{constructor({trigger:e,content:t,options:i={}}){l(this,"triggerElement"),l(this,"contentElement"),l(this,"triggerStrategy"),l(this,"placement"),l(this,"offsetDistance"),l(this,"preventFromCloseOutside"),l(this,"preventFromCloseInside"),l(this,"options"),l(this,"defaultState"),l(this,"popper"),l(this,"eventEffect"),l(this,"getElement",s=>typeof s=="string"?ce(s):s instanceof HTMLElement?s:void 0),l(this,"handleDocumentClick",s=>{this.contentElement.getAttribute("data-state")==="open"&&(!this.triggerElement.contains(s.target)&&!this.preventFromCloseInside&&!this.preventFromCloseOutside?this.hide():!this.triggerElement.contains(s.target)&&!this.contentElement.contains(s.target)&&!this.preventFromCloseOutside?this.hide():!this.triggerElement.contains(s.target)&&!this.contentElement.contains(s.target)&&!this.preventFromCloseOutside?this.hide():!this.triggerElement.contains(s.target)&&this.contentElement.contains(s.target)&&!this.preventFromCloseInside&&this.hide())}),l(this,"handleKeyDown",s=>{s.preventDefault(),this.triggerStrategy!=="hover"&&s.key==="Escape"&&this.contentElement.getAttribute("data-state")==="open"&&(this.preventFromCloseOutside||this.hide())}),l(this,"toggleStateOnClick",()=>{(this.contentElement.dataset.state||"close")==="close"?(this.show(),this.triggerStrategy==="hover"&&this.addEventOnMouseEnter()):this.hide()}),l(this,"hideOnMouseLeaseTrigger",()=>{setTimeout(()=>{this.contentElement.matches(":hover")||this.hide()},150)}),l(this,"hideOnMouseLeave",()=>{setTimeout(()=>{this.triggerElement.matches(":hover")||this.hide()},150)}),l(this,"addEventOnMouseEnter",()=>{this.triggerElement.addEventListener("mouseleave",this.hideOnMouseLeaseTrigger),this.contentElement.addEventListener("mouseleave",this.hideOnMouseLeave)}),l(this,"showOnMouseEnter",()=>{this.show(),this.addEventOnMouseEnter()}),l(this,"setShowOptions",({placement:s,offsetDistance:r})=>{var a,c,p,d;this.popper.setOptions({placement:s,offsetDistance:r}),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(c=(a=this.options).beforeShow)==null||c.call(a),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(d=(p=this.options).onShow)==null||d.call(p)}),l(this,"setPopperOptions",({placement:s,offsetDistance:r})=>{this.popper.setOptions({placement:s,offsetDistance:r})}),l(this,"cleanup",()=>{this.triggerElement.removeEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.removeEventListener("mouseenter",this.showOnMouseEnter)});var o;if(this.contentElement=this.getElement(t),this.triggerElement=this.getElement(e),!(this.triggerElement instanceof HTMLElement))throw new Error("Trigger element must be a valid HTML element");if(!(this.contentElement instanceof HTMLElement))throw new Error("Content element must be a valid HTML element");this.options=i,this.triggerStrategy=this.options.triggerStrategy||"click",this.placement=this.options.placement||"bottom",this.offsetDistance=this.options.offsetDistance||6,this.preventFromCloseOutside=this.options.preventFromCloseOutside||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||!1,this.defaultState=this.options.defaultState||"close",this.eventEffect=(o=this.options.popper)==null?void 0:o.eventEffect,this.popper=new x(this.triggerElement,this.contentElement,{placement:this.placement,offsetDistance:this.offsetDistance,eventEffect:this.eventEffect}),this.initInstance()}onToggleState(e){var t,i;(i=(t=this.options).onToggle)==null||i.call(t,{isHidden:e})}show(){var e,t,i,o;this.popper.updatePosition(),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(t=(e=this.options).beforeShow)==null||t.call(e),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(o=(i=this.options).onShow)==null||o.call(i)}hide(){var e,t;(t=(e=this.options).beforeHide)==null||t.call(e),b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),this.triggerStrategy==="click"&&document.removeEventListener("click",this.handleDocumentClick),document.removeEventListener("keydown",this.handleKeyDown),this.triggerStrategy==="hover"&&(this.triggerElement.removeEventListener("mouseleave",this.hideOnMouseLeaseTrigger),this.contentElement.removeEventListener("mouseleave",this.hideOnMouseLeave)),pe({element:this.contentElement,callback:()=>{var i,o;this.onToggleState(!0),this.popper.cleanupEvents(),(o=(i=this.options).onHide)==null||o.call(i)}})}initInstance(){b({state:this.defaultState,popper:this.contentElement,trigger:this.triggerElement}),this.defaultState==="open"?this.show():b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}},P=(n,e=document.body)=>e.querySelector(n),j=(n,e=document.body)=>Array.from(e.querySelectorAll(n)),me=n=>typeof n=="string"?P(n):n,ge=({containerElement:n,targetChildren:e="a:not([disabled]), button:not([disabled])",direction:t})=>{let i=!1,o=me(n)||document.body,s=typeof e=="string"?j(e,o):e,r=a=>{if(a.preventDefault(),o.focus(),s.length===0)return;let c=a.key,p=document.activeElement,d=s.findIndex(g=>g===p);if(d===-1){c==="ArrowUp"||c==="ArrowLeft"?s[s.length-1].focus():s[0].focus();return}let f=g=>g>0?g-1:s.length-1,E=g=>g<s.length-1?g+1:0;switch(c){case"ArrowDown":a.preventDefault(),d=E(d);break;case"ArrowRight":break;case"ArrowUp":a.preventDefault(),d=f(d);break;case"ArrowLeft":break;case"Home":a.preventDefault(),d=0;break;case"End":a.preventDefault(),d=s.length-1;break;default:return}s[d]!==p&&s[d].focus()};return{make:()=>{i||(document.addEventListener("keydown",r),i=!0)},destroy:()=>{i&&(document.removeEventListener("keydown",r),i=!1)}}},U=(n,e,t)=>{let i=new CustomEvent(e,{detail:t});n.dispatchEvent(i)},S=class{static initGlobalRegistry(){window.$flexillaInstances||(window.$flexillaInstances={})}static register(e,t,i){return this.initGlobalRegistry(),window.$flexillaInstances[e]||(window.$flexillaInstances[e]=[]),this.getInstance(e,t)||(window.$flexillaInstances[e].push({element:t,instance:i}),i)}static getInstance(e,t){var i,o;return this.initGlobalRegistry(),(o=(i=window.$flexillaInstances[e])==null?void 0:i.find(s=>s.element===t))==null?void 0:o.instance}static removeInstance(e,t){this.initGlobalRegistry(),window.$flexillaInstances[e]&&(window.$flexillaInstances[e]=window.$flexillaInstances[e].filter(i=>i.element!==t))}},F=class G{constructor(e,t={}){h(this,"triggerElement"),h(this,"contentElement"),h(this,"options"),h(this,"OverlayInstance"),h(this,"navigationKeys"),h(this,"triggerStrategy"),h(this,"placement"),h(this,"offsetDistance"),h(this,"preventFromCloseOutside"),h(this,"preventFromCloseInside"),h(this,"defaultState"),h(this,"onToggle",({isHidden:r})=>{var a,c;(c=(a=this.options).onToggle)==null||c.call(a,{isHidden:r})}),h(this,"beforeShow",()=>{this.contentElement.focus(),this.navigationKeys.make()}),h(this,"beforeHide",()=>{this.contentElement.blur(),this.navigationKeys.destroy()}),h(this,"onShow",()=>{var r,a;U(this.contentElement,"dropdown-show",{isHidden:!1}),(a=(r=this.options).onShow)==null||a.call(r)}),h(this,"onHide",()=>{var r,a;U(this.contentElement,"dropdown-hide",{isHidden:!0}),(a=(r=this.options).onHide)==null||a.call(r)}),h(this,"show",()=>{this.OverlayInstance.show()}),h(this,"hide",()=>{this.OverlayInstance.hide()}),h(this,"setShowOptions",({placement:r,offsetDistance:a})=>{this.OverlayInstance.setShowOptions({placement:r,offsetDistance:a})}),h(this,"cleanup",()=>{this.OverlayInstance.cleanup(),S.removeInstance("dropdown",this.contentElement)});let i=typeof e=="string"?P(e):e;if(!(i instanceof HTMLElement))throw new Error("Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement");if(!i.id)throw new Error("Dropdown content element must have an 'id' attribute for trigger association");this.contentElement=i;let o=S.getInstance("dropdown",this.contentElement);if(o)return o;let s=`[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;if(this.triggerElement=P(s),!(this.triggerElement instanceof HTMLElement))throw new Error(`No valid trigger element found. Ensure a trigger element exists with attributes: data-dropdown-trigger and data-dropdown-id="${this.contentElement.id}"`);this.options=t,this.triggerStrategy=this.options.triggerStrategy||this.contentElement.dataset.triggerStrategy||"click",this.placement=this.options.placement||this.contentElement.dataset.placement||"bottom-start",this.offsetDistance=this.options.offsetDistance||parseInt(`${this.contentElement.dataset.offsetDistance}`)|6,this.preventFromCloseOutside=this.options.preventFromCloseOutside||this.contentElement.hasAttribute("data-prevent-close-outside")||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||this.contentElement.hasAttribute("data-prevent-close-inside")||!1,this.defaultState=this.options.defaultState||this.contentElement.dataset.defaultState||"close",this.OverlayInstance=new W({trigger:this.triggerElement,content:this.contentElement,options:{placement:this.placement,offsetDistance:this.offsetDistance,triggerStrategy:this.triggerStrategy,preventFromCloseOutside:this.preventFromCloseOutside,preventCloseFromInside:this.preventFromCloseInside,defaultState:this.defaultState,beforeShow:this.beforeShow,beforeHide:this.beforeHide,onShow:this.onShow,onHide:this.onHide,onToggle:({isHidden:r})=>{this.onToggle({isHidden:r})},popper:this.options.popper}}),this.navigationKeys=ge({containerElement:this.contentElement,targetChildren:"a:not([disabled]), button:not([disabled])",direction:"up-down"}),S.register("dropdown",this.contentElement,this)}static init(e,t={}){new G(e,t)}};h(F,"autoInit",(n="[data-fx-dropdown]")=>{let e=j(n);for(let t of e)new F(t)});var q=F;function fe(n){n.directive("dropdown",(e,{},{cleanup:t})=>{let i=new q(e);t(()=>{i.cleanup()})})}var B=fe;document.addEventListener("alpine:init",()=>{B(window.Alpine)});})();
|
|
1
|
+
(()=>{var J=Object.defineProperty,Q=(n,e,t)=>e in n?J(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e,t)=>Q(n,typeof e!="symbol"?e+"":e,t),V=Object.defineProperty,X=(n,e,t)=>e in n?V(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,m=(n,e,t)=>X(n,typeof e!="symbol"?e+"":e,t),Y="bottom",Z=({reference:n,popper:e})=>{if(!n||!e)throw new Error("Reference or popper element is null or undefined");let t=new WeakMap,i=o=>(t.has(o)||t.set(o,o.getBoundingClientRect()),t.get(o)),r=i(e),s=i(n);return{popperHeight:r.height,popperWidth:r.width,refHeight:s.height,refWidth:s.width,refLeft:s.left,refTop:s.top,refRight:s.right}},_=(n,e,t,i)=>{let r=t,s=i-(t+e);return r>=(n-e)/2&&s>=(n-e)/2},ee=(n,e,t,i)=>(n-e)/2<=t&&t+n/2+e/2<=i,te=(n,e,t,i,r)=>t>r-i?e()?window.innerHeight-r:t-r:n()?0:t+i,ne=(n,e,t,i)=>n<=i&&t-n<=e,ie=(n,e,t,i)=>t<=i&&-n<=e,se=(n,e,t,i,r,s)=>{let o=r-t-s,a=t-i,c=t+s-i+(r-t-s),p=o>=0?r-i:a>=0?t-i:t;return n()?0:e()?c:p},oe=(n,e,t,i)=>n<=t&&e-n-i>=n,re=(n,e)=>n>=e,ae=({placement:n,refWidth:e,refTop:t,refLeft:i,refHeight:r,popperWidth:s,popperHeight:o,windowHeight:a,windowWidth:c,offsetDistance:p})=>{let d=c-i-e,f=i,E=a-t-r,g=t,w=()=>te(()=>ie(t,r,o,a),()=>ne(t,r,o,a),t,r,o),y=()=>se(()=>oe(i,c,s,e),()=>re(i,s),i,s,c,e),I=()=>_(s,e,i,c)?i+e/2-s/2:y(),T=()=>ee(o,r,t,a)?t+r/2-o/2:w(),C=()=>i+s<=c?i:y(),O=()=>i+e-s>=0?i+e-s:y(),D=()=>t+o<=a?t:w(),N=()=>t+r-o>=0?t+r-o:w(),v=0,u=0,M=t-o-p,L=t+r+p,k=i-s-p,H=i+e+p,R=g>=o+p,$=E>=o+p,A=f>=s+p,K=d>=s+p;switch(n.startsWith("top")?u=R?M:$?L:Math.max(M,L):n.startsWith("bottom")?u=$?L:R?M:Math.max(L):n.startsWith("left")?v=A?k:K?H:Math.max(k,H):n.startsWith("right")&&(v=K?H:A?k:Math.max(H,k)),n){case"bottom":case"bottom-middle":case"top":case"top-middle":v=I();break;case"left":case"left-middle":case"right":case"right-middle":u=T();break;case"bottom-start":case"top-start":v=C();break;case"bottom-end":case"top-end":v=O();break;case"left-start":case"right-start":u=D();break;case"left-end":case"right-end":u=N();break}return{x:v,y:u}},x=class{constructor(e,t,i={}){m(this,"reference"),m(this,"popper"),m(this,"offsetDistance"),m(this,"placement"),m(this,"disableOnResize"),m(this,"disableOnScroll"),m(this,"onUpdate"),m(this,"isWindowEventsRegistered"),m(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")}),m(this,"setPopperStyleProperty",(d,f)=>{this.popper.style.setProperty("--fx-popper-placement-x",`${d}px`),this.popper.style.setProperty("--fx-popper-placement-y",`${f}px`)}),m(this,"setInitialStyles",()=>{this.popper.style.setProperty("--fx-popper-placement-x",""),this.popper.style.setProperty("--fx-popper-placement-y","")}),m(this,"initPlacement",()=>{var d;this.validateElements(),this.setInitialStyles();let f=window.innerWidth,E=window.innerHeight,{popperHeight:g,popperWidth:w,refHeight:y,refWidth:I,refLeft:T,refTop:C}=Z({reference:this.reference,popper:this.popper}),{x:O,y:D}=ae({placement:this.placement,refWidth:I,refTop:C,refLeft:T,popperWidth:w,refHeight:y,popperHeight:g,windowHeight:E,windowWidth:f,offsetDistance:this.offsetDistance});this.setPopperStyleProperty(O,D),(d=this.onUpdate)==null||d.call(this,{x:O,y:D,placement:this.placement})}),m(this,"removeWindowEvents",()=>{this.isWindowEventsRegistered&&(!this.disableOnResize&&window.removeEventListener("resize",this.updatePosition),!this.disableOnScroll&&window.removeEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!1)}),m(this,"attachWindowEvent",()=>{this.isWindowEventsRegistered&&this.removeWindowEvents(),this.disableOnResize||window.addEventListener("resize",this.updatePosition),this.disableOnScroll||window.addEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!0}),m(this,"resetPosition",()=>{this.setInitialStyles()}),m(this,"updatePosition",()=>{this.initPlacement(),this.attachWindowEvent()}),m(this,"cleanupEvents",()=>{this.setInitialStyles(),this.removeWindowEvents()});let{offsetDistance:r=10,placement:s=Y,eventEffect:o={},onUpdate:a}=i;if(!(e instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(t instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(i.offsetDistance&&typeof i.offsetDistance!="number")throw new Error("OffsetDistance must be a number");let{disableOnResize:c,disableOnScroll:p}=o;this.isWindowEventsRegistered=!1,this.reference=e,this.popper=t,this.offsetDistance=r,this.placement=s,this.disableOnResize=c||!1,this.disableOnScroll=p||!1,this.onUpdate=a}setOptions({placement:e,offsetDistance:t}){this.placement=e,this.offsetDistance=t||this.offsetDistance,this.initPlacement(),this.attachWindowEvent()}},le=Object.defineProperty,he=(n,e,t)=>e in n?le(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,l=(n,e,t)=>he(n,typeof e!="symbol"?e+"":e,t),ce=(n,e=document.body)=>e.querySelector(n),z=(n,e)=>{for(let[t,i]of Object.entries(e))n.setAttribute(t,i)},de=({element:n,callback:e,type:t,keysCheck:i})=>{let r=getComputedStyle(n),s=r.transition;if(s!=="none"&&s!==""&&!i.includes(s)){let o="transitionend",a=()=>{n.removeEventListener(o,a),e()};n.addEventListener(o,a,{once:!0})}else e()},pe=({element:n,callback:e})=>{de({element:n,callback:e,type:"transition",keysCheck:["all 0s ease 0s","all"]})},b=({state:n,trigger:e,popper:t})=>{let i=n==="open";z(t,{"data-state":n}),z(e,{"aria-expanded":`${i}`})},P=class{constructor({trigger:e,content:t,options:i={}}){l(this,"triggerElement"),l(this,"contentElement"),l(this,"triggerStrategy"),l(this,"placement"),l(this,"offsetDistance"),l(this,"preventFromCloseOutside"),l(this,"preventFromCloseInside"),l(this,"options"),l(this,"defaultState"),l(this,"popper"),l(this,"eventEffect"),l(this,"getElement",s=>typeof s=="string"?ce(s):s instanceof HTMLElement?s:void 0),l(this,"handleDocumentClick",s=>{this.contentElement.getAttribute("data-state")==="open"&&(!this.triggerElement.contains(s.target)&&!this.preventFromCloseInside&&!this.preventFromCloseOutside?this.hide():!this.triggerElement.contains(s.target)&&!this.contentElement.contains(s.target)&&!this.preventFromCloseOutside?this.hide():!this.triggerElement.contains(s.target)&&!this.contentElement.contains(s.target)&&!this.preventFromCloseOutside?this.hide():!this.triggerElement.contains(s.target)&&this.contentElement.contains(s.target)&&!this.preventFromCloseInside&&this.hide())}),l(this,"handleKeyDown",s=>{s.preventDefault(),this.triggerStrategy!=="hover"&&s.key==="Escape"&&this.contentElement.getAttribute("data-state")==="open"&&(this.preventFromCloseOutside||this.hide())}),l(this,"toggleStateOnClick",()=>{(this.contentElement.dataset.state||"close")==="close"?(this.show(),this.triggerStrategy==="hover"&&this.addEventOnMouseEnter()):this.hide()}),l(this,"hideOnMouseLeaseTrigger",()=>{setTimeout(()=>{this.contentElement.matches(":hover")||this.hide()},150)}),l(this,"hideOnMouseLeave",()=>{setTimeout(()=>{this.triggerElement.matches(":hover")||this.hide()},150)}),l(this,"addEventOnMouseEnter",()=>{this.triggerElement.addEventListener("mouseleave",this.hideOnMouseLeaseTrigger),this.contentElement.addEventListener("mouseleave",this.hideOnMouseLeave)}),l(this,"showOnMouseEnter",()=>{this.show(),this.addEventOnMouseEnter()}),l(this,"setShowOptions",({placement:s,offsetDistance:o})=>{var a,c,p,d;this.popper.setOptions({placement:s,offsetDistance:o}),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(c=(a=this.options).beforeShow)==null||c.call(a),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(d=(p=this.options).onShow)==null||d.call(p)}),l(this,"setPopperOptions",({placement:s,offsetDistance:o})=>{this.popper.setOptions({placement:s,offsetDistance:o||this.offsetDistance})}),l(this,"setPopperTrigger",(s,o)=>{this.cleanup(),this.popper.setOptions({placement:o.placement||this.placement,offsetDistance:o.offsetDistance||this.offsetDistance}),this.triggerElement=s,this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}),l(this,"cleanup",()=>{this.triggerElement.removeEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.removeEventListener("mouseenter",this.showOnMouseEnter)});var r;if(this.contentElement=this.getElement(t),this.triggerElement=this.getElement(e),!(this.triggerElement instanceof HTMLElement))throw new Error("Trigger element must be a valid HTML element");if(!(this.contentElement instanceof HTMLElement))throw new Error("Content element must be a valid HTML element");this.options=i,this.triggerStrategy=this.options.triggerStrategy||"click",this.placement=this.options.placement||"bottom",this.offsetDistance=this.options.offsetDistance||6,this.preventFromCloseOutside=this.options.preventFromCloseOutside||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||!1,this.defaultState=this.options.defaultState||"close",this.eventEffect=(r=this.options.popper)==null?void 0:r.eventEffect,this.popper=new x(this.triggerElement,this.contentElement,{placement:this.placement,offsetDistance:this.offsetDistance,eventEffect:this.eventEffect}),this.initInstance()}onToggleState(e){var t,i;(i=(t=this.options).onToggle)==null||i.call(t,{isHidden:e})}show(){var e,t,i,r;this.popper.updatePosition(),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(t=(e=this.options).beforeShow)==null||t.call(e),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(r=(i=this.options).onShow)==null||r.call(i)}hide(){var e,t;(t=(e=this.options).beforeHide)==null||t.call(e),b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),this.triggerStrategy==="click"&&document.removeEventListener("click",this.handleDocumentClick),document.removeEventListener("keydown",this.handleKeyDown),this.triggerStrategy==="hover"&&(this.triggerElement.removeEventListener("mouseleave",this.hideOnMouseLeaseTrigger),this.contentElement.removeEventListener("mouseleave",this.hideOnMouseLeave)),pe({element:this.contentElement,callback:()=>{var i,r;this.onToggleState(!0),this.popper.cleanupEvents(),(r=(i=this.options).onHide)==null||r.call(i)}})}initInstance(){b({state:this.defaultState,popper:this.contentElement,trigger:this.triggerElement}),this.defaultState==="open"?this.show():b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}},W=(n,e=document.body)=>e.querySelector(n),j=(n,e=document.body)=>Array.from(e.querySelectorAll(n)),me=n=>typeof n=="string"?W(n):n,ge=({containerElement:n,targetChildren:e="a:not([disabled]), button:not([disabled])",direction:t})=>{let i=!1,r=me(n)||document.body,s=typeof e=="string"?j(e,r):e,o=a=>{if(a.preventDefault(),r.focus(),s.length===0)return;let c=a.key,p=document.activeElement,d=s.findIndex(g=>g===p);if(d===-1){c==="ArrowUp"||c==="ArrowLeft"?s[s.length-1].focus():s[0].focus();return}let f=g=>g>0?g-1:s.length-1,E=g=>g<s.length-1?g+1:0;switch(c){case"ArrowDown":a.preventDefault(),d=E(d);break;case"ArrowRight":break;case"ArrowUp":a.preventDefault(),d=f(d);break;case"ArrowLeft":break;case"Home":a.preventDefault(),d=0;break;case"End":a.preventDefault(),d=s.length-1;break;default:return}s[d]!==p&&s[d].focus()};return{make:()=>{i||(document.addEventListener("keydown",o),i=!0)},destroy:()=>{i&&(document.removeEventListener("keydown",o),i=!1)}}},U=(n,e,t)=>{let i=new CustomEvent(e,{detail:t});n.dispatchEvent(i)},S=class{static initGlobalRegistry(){window.$flexillaInstances||(window.$flexillaInstances={})}static register(e,t,i){return this.initGlobalRegistry(),window.$flexillaInstances[e]||(window.$flexillaInstances[e]=[]),this.getInstance(e,t)||(window.$flexillaInstances[e].push({element:t,instance:i}),i)}static getInstance(e,t){var i,r;return this.initGlobalRegistry(),(r=(i=window.$flexillaInstances[e])==null?void 0:i.find(s=>s.element===t))==null?void 0:r.instance}static removeInstance(e,t){this.initGlobalRegistry(),window.$flexillaInstances[e]&&(window.$flexillaInstances[e]=window.$flexillaInstances[e].filter(i=>i.element!==t))}},F=class G{constructor(e,t={}){h(this,"triggerElement"),h(this,"contentElement"),h(this,"options"),h(this,"OverlayInstance"),h(this,"navigationKeys"),h(this,"triggerStrategy"),h(this,"placement"),h(this,"offsetDistance"),h(this,"preventFromCloseOutside"),h(this,"preventFromCloseInside"),h(this,"defaultState"),h(this,"onToggle",({isHidden:o})=>{var a,c;(c=(a=this.options).onToggle)==null||c.call(a,{isHidden:o})}),h(this,"beforeShow",()=>{this.contentElement.focus(),this.navigationKeys.make()}),h(this,"beforeHide",()=>{this.contentElement.blur(),this.navigationKeys.destroy()}),h(this,"onShow",()=>{var o,a;U(this.contentElement,"dropdown-show",{isHidden:!1}),(a=(o=this.options).onShow)==null||a.call(o)}),h(this,"onHide",()=>{var o,a;U(this.contentElement,"dropdown-hide",{isHidden:!0}),(a=(o=this.options).onHide)==null||a.call(o)}),h(this,"show",()=>{this.OverlayInstance.show()}),h(this,"hide",()=>{this.OverlayInstance.hide()}),h(this,"setShowOptions",({placement:o,offsetDistance:a})=>{this.OverlayInstance.setShowOptions({placement:o,offsetDistance:a})}),h(this,"setOptions",({placement:o,offsetDistance:a})=>{this.OverlayInstance.setPopperOptions({placement:o,offsetDistance:a})}),h(this,"setPopperTrigger",(o,a)=>{this.OverlayInstance.setPopperTrigger(o,a)}),h(this,"cleanup",()=>{this.OverlayInstance.cleanup(),S.removeInstance("dropdown",this.contentElement)});let i=typeof e=="string"?W(e):e;if(!(i instanceof HTMLElement))throw new Error("Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement");if(!i.id)throw new Error("Dropdown content element must have an 'id' attribute for trigger association");this.contentElement=i;let r=S.getInstance("dropdown",this.contentElement);if(r)return r;let s=`[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;if(this.triggerElement=W(s),!(this.triggerElement instanceof HTMLElement))throw new Error(`No valid trigger element found. Ensure a trigger element exists with attributes: data-dropdown-trigger and data-dropdown-id="${this.contentElement.id}"`);this.options=t,this.triggerStrategy=this.options.triggerStrategy||this.contentElement.dataset.triggerStrategy||"click",this.placement=this.options.placement||this.contentElement.dataset.placement||"bottom-start",this.offsetDistance=this.options.offsetDistance||parseInt(`${this.contentElement.dataset.offsetDistance}`)|6,this.preventFromCloseOutside=this.options.preventFromCloseOutside||this.contentElement.hasAttribute("data-prevent-close-outside")||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||this.contentElement.hasAttribute("data-prevent-close-inside")||!1,this.defaultState=this.options.defaultState||this.contentElement.dataset.defaultState||"close",this.OverlayInstance=new P({trigger:this.triggerElement,content:this.contentElement,options:{placement:this.placement,offsetDistance:this.offsetDistance,triggerStrategy:this.triggerStrategy,preventFromCloseOutside:this.preventFromCloseOutside,preventCloseFromInside:this.preventFromCloseInside,defaultState:this.defaultState,beforeShow:this.beforeShow,beforeHide:this.beforeHide,onShow:this.onShow,onHide:this.onHide,onToggle:({isHidden:o})=>{this.onToggle({isHidden:o})},popper:this.options.popper}}),this.navigationKeys=ge({containerElement:this.contentElement,targetChildren:"a:not([disabled]), button:not([disabled])",direction:"up-down"}),S.register("dropdown",this.contentElement,this)}static init(e,t={}){new G(e,t)}};h(F,"autoInit",(n="[data-fx-dropdown]")=>{let e=j(n);for(let t of e)new F(t)});var q=F;function fe(n){n.directive("dropdown",(e,{},{cleanup:t})=>{let i=new q(e);t(()=>{i.cleanup()})})}var B=fe;document.addEventListener("alpine:init",()=>{B(window.Alpine)});})();
|
package/dist/module.cjs.js
CHANGED
|
@@ -26,12 +26,12 @@ module.exports = __toCommonJS(module_exports);
|
|
|
26
26
|
// ../../node_modules/@flexilla/dropdown/dist/dropdown.js
|
|
27
27
|
var j = Object.defineProperty;
|
|
28
28
|
var q = (s, e, t) => e in s ? j(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
29
|
-
var
|
|
29
|
+
var a = (s, e, t) => q(s, typeof e != "symbol" ? e + "" : e, t);
|
|
30
30
|
var B = Object.defineProperty;
|
|
31
31
|
var N = (s, e, t) => e in s ? B(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
32
|
+
var d = (s, e, t) => N(s, typeof e != "symbol" ? e + "" : e, t);
|
|
33
|
+
var V = "bottom";
|
|
34
|
+
var X = ({ reference: s, popper: e }) => {
|
|
35
35
|
if (!s || !e)
|
|
36
36
|
throw new Error("Reference or popper element is null or undefined");
|
|
37
37
|
const t = /* @__PURE__ */ new WeakMap(), n = (r) => (t.has(r) || t.set(r, r.getBoundingClientRect()), t.get(r)), o = n(e), i = n(s);
|
|
@@ -45,24 +45,21 @@ var Q = ({ reference: s, popper: e }) => {
|
|
|
45
45
|
refRight: i.right
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
-
var V = Object.defineProperty;
|
|
49
|
-
var X = (s, e, t) => e in s ? V(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
50
|
-
var p = (s, e, t) => X(s, typeof e != "symbol" ? e + "" : e, t);
|
|
51
48
|
var Y = (s, e, t, n) => {
|
|
52
49
|
const o = t, i = n - (t + e);
|
|
53
50
|
return o >= (s - e) / 2 && i >= (s - e) / 2;
|
|
54
51
|
};
|
|
55
|
-
var
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
const r = o - t - i,
|
|
61
|
-
return s() ? 0 : e() ?
|
|
52
|
+
var J = (s, e, t, n) => (s - e) / 2 <= t && t + s / 2 + e / 2 <= n;
|
|
53
|
+
var Q = (s, e, t, n, o) => t > o - n ? e() ? window.innerHeight - o : t - o : s() ? 0 : t + n;
|
|
54
|
+
var Z = (s, e, t, n) => s <= n && t - s <= e;
|
|
55
|
+
var _ = (s, e, t, n) => t <= n && -s <= e;
|
|
56
|
+
var ee = (s, e, t, n, o, i) => {
|
|
57
|
+
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i), p = r >= 0 ? o - n : h >= 0 ? t - n : t;
|
|
58
|
+
return s() ? 0 : e() ? g : p;
|
|
62
59
|
};
|
|
63
|
-
var
|
|
64
|
-
var
|
|
65
|
-
var
|
|
60
|
+
var te = (s, e, t, n) => s <= t && e - s - n >= s;
|
|
61
|
+
var ne = (s, e) => s >= e;
|
|
62
|
+
var se = ({
|
|
66
63
|
placement: s,
|
|
67
64
|
refWidth: e,
|
|
68
65
|
refTop: t,
|
|
@@ -70,27 +67,27 @@ var oe = ({
|
|
|
70
67
|
refHeight: o,
|
|
71
68
|
popperWidth: i,
|
|
72
69
|
popperHeight: r,
|
|
73
|
-
windowHeight:
|
|
74
|
-
windowWidth:
|
|
75
|
-
offsetDistance:
|
|
70
|
+
windowHeight: h,
|
|
71
|
+
windowWidth: g,
|
|
72
|
+
offsetDistance: p
|
|
76
73
|
}) => {
|
|
77
|
-
const c =
|
|
78
|
-
() =>
|
|
79
|
-
() =>
|
|
74
|
+
const c = g - n - e, f = n, v = h - t - o, m = t, w = () => Q(
|
|
75
|
+
() => _(t, o, r, h),
|
|
76
|
+
() => Z(t, o, r, h),
|
|
80
77
|
t,
|
|
81
78
|
o,
|
|
82
79
|
r
|
|
83
|
-
), y = () =>
|
|
84
|
-
() =>
|
|
85
|
-
() =>
|
|
80
|
+
), y = () => ee(
|
|
81
|
+
() => te(n, g, i, e),
|
|
82
|
+
() => ne(n, i),
|
|
86
83
|
n,
|
|
87
84
|
i,
|
|
88
|
-
|
|
85
|
+
g,
|
|
89
86
|
e
|
|
90
|
-
), H = () => Y(i, e, n,
|
|
87
|
+
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () => J(r, o, t, h) ? t + o / 2 - r / 2 : w(), C = () => n + i <= g ? n : y(), O = () => n + e - i >= 0 ? n + e - i : y(), L = () => t + r <= h ? t : w(), G = () => t + o - r >= 0 ? t + o - r : w();
|
|
91
88
|
let u = 0, E = 0;
|
|
92
|
-
const M = t - r -
|
|
93
|
-
switch (s.startsWith("top") ? E =
|
|
89
|
+
const M = t - r - p, k = t + o + p, D = n - i - p, I = n + e + p, W = m >= r + p, F = v >= r + p, R = f >= i + p, $ = c >= i + p;
|
|
90
|
+
switch (s.startsWith("top") ? E = W ? M : F ? k : Math.max(M, k) : s.startsWith("bottom") ? E = F ? k : W ? M : Math.max(k) : s.startsWith("left") ? u = R ? D : $ ? I : Math.max(D, I) : s.startsWith("right") && (u = $ ? I : R ? D : Math.max(I, D)), s) {
|
|
94
91
|
case "bottom":
|
|
95
92
|
case "bottom-middle":
|
|
96
93
|
case "top":
|
|
@@ -101,11 +98,11 @@ var oe = ({
|
|
|
101
98
|
case "left-middle":
|
|
102
99
|
case "right":
|
|
103
100
|
case "right-middle":
|
|
104
|
-
E =
|
|
101
|
+
E = T();
|
|
105
102
|
break;
|
|
106
103
|
case "bottom-start":
|
|
107
104
|
case "top-start":
|
|
108
|
-
u =
|
|
105
|
+
u = C();
|
|
109
106
|
break;
|
|
110
107
|
case "bottom-end":
|
|
111
108
|
case "top-end":
|
|
@@ -122,7 +119,7 @@ var oe = ({
|
|
|
122
119
|
}
|
|
123
120
|
return { x: u, y: E };
|
|
124
121
|
};
|
|
125
|
-
var
|
|
122
|
+
var ie = class {
|
|
126
123
|
/**
|
|
127
124
|
* Flexilla Popper
|
|
128
125
|
* @param reference
|
|
@@ -142,51 +139,51 @@ var re = class {
|
|
|
142
139
|
* @param {Function} [options.onUpdate] - Callback function when position updates
|
|
143
140
|
*/
|
|
144
141
|
constructor(e, t, n = {}) {
|
|
145
|
-
|
|
142
|
+
d(this, "reference"), d(this, "popper"), d(this, "offsetDistance"), d(this, "placement"), d(this, "disableOnResize"), d(this, "disableOnScroll"), d(this, "onUpdate"), d(this, "isWindowEventsRegistered"), d(this, "validateElements", () => {
|
|
146
143
|
if (!(this.reference instanceof HTMLElement))
|
|
147
144
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
148
145
|
if (!(this.popper instanceof HTMLElement))
|
|
149
146
|
throw new Error("Invalid HTMLElement for Popper");
|
|
150
147
|
if (typeof this.offsetDistance != "number")
|
|
151
148
|
throw new Error("OffsetDistance must be a number");
|
|
152
|
-
}),
|
|
149
|
+
}), d(this, "setPopperStyleProperty", (c, f) => {
|
|
153
150
|
this.popper.style.setProperty("--fx-popper-placement-x", `${c}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${f}px`);
|
|
154
|
-
}),
|
|
151
|
+
}), d(this, "setInitialStyles", () => {
|
|
155
152
|
this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
|
|
156
|
-
}),
|
|
153
|
+
}), d(this, "initPlacement", () => {
|
|
157
154
|
var c;
|
|
158
155
|
this.validateElements(), this.setInitialStyles();
|
|
159
|
-
const f = window.innerWidth, v = window.innerHeight, { popperHeight:
|
|
156
|
+
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } = X({ reference: this.reference, popper: this.popper }), { x: O, y: L } = se(
|
|
160
157
|
{
|
|
161
158
|
placement: this.placement,
|
|
162
159
|
refWidth: H,
|
|
163
|
-
refTop:
|
|
164
|
-
refLeft:
|
|
160
|
+
refTop: C,
|
|
161
|
+
refLeft: T,
|
|
165
162
|
popperWidth: w,
|
|
166
163
|
refHeight: y,
|
|
167
|
-
popperHeight:
|
|
164
|
+
popperHeight: m,
|
|
168
165
|
windowHeight: v,
|
|
169
166
|
windowWidth: f,
|
|
170
167
|
offsetDistance: this.offsetDistance
|
|
171
168
|
}
|
|
172
169
|
);
|
|
173
170
|
this.setPopperStyleProperty(O, L), (c = this.onUpdate) == null || c.call(this, { x: O, y: L, placement: this.placement });
|
|
174
|
-
}),
|
|
171
|
+
}), d(this, "removeWindowEvents", () => {
|
|
175
172
|
this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
|
|
176
|
-
}),
|
|
173
|
+
}), d(this, "attachWindowEvent", () => {
|
|
177
174
|
this.isWindowEventsRegistered && this.removeWindowEvents(), this.disableOnResize || window.addEventListener("resize", this.updatePosition), this.disableOnScroll || window.addEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = true;
|
|
178
|
-
}),
|
|
175
|
+
}), d(this, "resetPosition", () => {
|
|
179
176
|
this.setInitialStyles();
|
|
180
|
-
}),
|
|
177
|
+
}), d(this, "updatePosition", () => {
|
|
181
178
|
this.initPlacement(), this.attachWindowEvent();
|
|
182
|
-
}),
|
|
179
|
+
}), d(this, "cleanupEvents", () => {
|
|
183
180
|
this.setInitialStyles(), this.removeWindowEvents();
|
|
184
181
|
});
|
|
185
182
|
const {
|
|
186
183
|
offsetDistance: o = 10,
|
|
187
|
-
placement: i =
|
|
184
|
+
placement: i = V,
|
|
188
185
|
eventEffect: r = {},
|
|
189
|
-
onUpdate:
|
|
186
|
+
onUpdate: h
|
|
190
187
|
} = n;
|
|
191
188
|
if (!(e instanceof HTMLElement))
|
|
192
189
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
@@ -194,8 +191,8 @@ var re = class {
|
|
|
194
191
|
throw new Error("Invalid HTMLElement for Popper");
|
|
195
192
|
if (n.offsetDistance && typeof n.offsetDistance != "number")
|
|
196
193
|
throw new Error("OffsetDistance must be a number");
|
|
197
|
-
const { disableOnResize:
|
|
198
|
-
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize =
|
|
194
|
+
const { disableOnResize: g, disableOnScroll: p } = r;
|
|
195
|
+
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll = p || false, this.onUpdate = h;
|
|
199
196
|
}
|
|
200
197
|
/**
|
|
201
198
|
* Updates popper configuration and recalculates position
|
|
@@ -208,6 +205,9 @@ var re = class {
|
|
|
208
205
|
this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
|
|
209
206
|
}
|
|
210
207
|
};
|
|
208
|
+
var oe = Object.defineProperty;
|
|
209
|
+
var re = (s, e, t) => e in s ? oe(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
210
|
+
var l = (s, e, t) => re(s, typeof e != "symbol" ? e + "" : e, t);
|
|
211
211
|
var ae = (s, e = document.body) => e.querySelector(s);
|
|
212
212
|
var A = (s, e) => {
|
|
213
213
|
for (const [t, n] of Object.entries(e))
|
|
@@ -221,10 +221,10 @@ var le = ({
|
|
|
221
221
|
}) => {
|
|
222
222
|
const o = getComputedStyle(s), i = o.transition;
|
|
223
223
|
if (i !== "none" && i !== "" && !n.includes(i)) {
|
|
224
|
-
const r = "transitionend",
|
|
225
|
-
s.removeEventListener(r,
|
|
224
|
+
const r = "transitionend", h = () => {
|
|
225
|
+
s.removeEventListener(r, h), e();
|
|
226
226
|
};
|
|
227
|
-
s.addEventListener(r,
|
|
227
|
+
s.addEventListener(r, h, { once: true });
|
|
228
228
|
} else
|
|
229
229
|
e();
|
|
230
230
|
};
|
|
@@ -240,10 +240,11 @@ var he = ({
|
|
|
240
240
|
});
|
|
241
241
|
};
|
|
242
242
|
var b = ({ state: s, trigger: e, popper: t }) => {
|
|
243
|
+
const n = s === "open";
|
|
243
244
|
A(t, {
|
|
244
245
|
"data-state": s
|
|
245
246
|
}), A(e, {
|
|
246
|
-
"aria-expanded": `${
|
|
247
|
+
"aria-expanded": `${n}`
|
|
247
248
|
});
|
|
248
249
|
};
|
|
249
250
|
var ce = class {
|
|
@@ -253,43 +254,47 @@ var ce = class {
|
|
|
253
254
|
* @param {string | HTMLElement} params.trigger - The trigger element selector or HTMLElement
|
|
254
255
|
* @param {string | HTMLElement} params.content - The content element selector or HTMLElement
|
|
255
256
|
* @param {OverlayOptions} [params.options] - Configuration options for the overlay
|
|
256
|
-
* @throws {Error} When trigger or content elements are invalid
|
|
257
257
|
*/
|
|
258
258
|
constructor({ trigger: e, content: t, options: n = {} }) {
|
|
259
|
-
|
|
259
|
+
l(this, "triggerElement"), l(this, "contentElement"), l(this, "triggerStrategy"), l(this, "placement"), l(this, "offsetDistance"), l(this, "preventFromCloseOutside"), l(this, "preventFromCloseInside"), l(this, "options"), l(this, "defaultState"), l(this, "popper"), l(this, "eventEffect"), l(this, "getElement", (i) => typeof i == "string" ? ae(i) : i instanceof HTMLElement ? i : void 0), l(this, "handleDocumentClick", (i) => {
|
|
260
260
|
this.contentElement.getAttribute("data-state") === "open" && (!this.triggerElement.contains(i.target) && !this.preventFromCloseInside && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(i.target) && !this.contentElement.contains(i.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(i.target) && !this.contentElement.contains(i.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(i.target) && this.contentElement.contains(i.target) && !this.preventFromCloseInside && this.hide());
|
|
261
|
-
}),
|
|
261
|
+
}), l(this, "handleKeyDown", (i) => {
|
|
262
262
|
i.preventDefault(), this.triggerStrategy !== "hover" && i.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
|
|
263
|
-
}),
|
|
263
|
+
}), l(this, "toggleStateOnClick", () => {
|
|
264
264
|
(this.contentElement.dataset.state || "close") === "close" ? (this.show(), this.triggerStrategy === "hover" && this.addEventOnMouseEnter()) : this.hide();
|
|
265
|
-
}),
|
|
265
|
+
}), l(this, "hideOnMouseLeaseTrigger", () => {
|
|
266
266
|
setTimeout(() => {
|
|
267
267
|
this.contentElement.matches(":hover") || this.hide();
|
|
268
268
|
}, 150);
|
|
269
|
-
}),
|
|
269
|
+
}), l(this, "hideOnMouseLeave", () => {
|
|
270
270
|
setTimeout(() => {
|
|
271
271
|
this.triggerElement.matches(":hover") || this.hide();
|
|
272
272
|
}, 150);
|
|
273
|
-
}),
|
|
273
|
+
}), l(this, "addEventOnMouseEnter", () => {
|
|
274
274
|
this.triggerElement.addEventListener("mouseleave", this.hideOnMouseLeaseTrigger), this.contentElement.addEventListener("mouseleave", this.hideOnMouseLeave);
|
|
275
|
-
}),
|
|
275
|
+
}), l(this, "showOnMouseEnter", () => {
|
|
276
276
|
this.show(), this.addEventOnMouseEnter();
|
|
277
|
-
}),
|
|
278
|
-
var
|
|
277
|
+
}), l(this, "setShowOptions", ({ placement: i, offsetDistance: r }) => {
|
|
278
|
+
var h, g, p, c;
|
|
279
279
|
this.popper.setOptions({
|
|
280
280
|
placement: i,
|
|
281
281
|
offsetDistance: r
|
|
282
|
-
}), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (
|
|
282
|
+
}), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (g = (h = this.options).beforeShow) == null || g.call(h), b({
|
|
283
283
|
state: "open",
|
|
284
284
|
popper: this.contentElement,
|
|
285
285
|
trigger: this.triggerElement
|
|
286
|
-
}), this.onToggleState(false), (c = (
|
|
287
|
-
}),
|
|
286
|
+
}), this.onToggleState(false), (c = (p = this.options).onShow) == null || c.call(p);
|
|
287
|
+
}), l(this, "setPopperOptions", ({ placement: i, offsetDistance: r }) => {
|
|
288
288
|
this.popper.setOptions({
|
|
289
289
|
placement: i,
|
|
290
|
-
offsetDistance: r
|
|
290
|
+
offsetDistance: r || this.offsetDistance
|
|
291
291
|
});
|
|
292
|
-
}),
|
|
292
|
+
}), l(this, "setPopperTrigger", (i, r) => {
|
|
293
|
+
this.cleanup(), this.popper.setOptions({
|
|
294
|
+
placement: r.placement || this.placement,
|
|
295
|
+
offsetDistance: r.offsetDistance || this.offsetDistance
|
|
296
|
+
}), this.triggerElement = i, this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
297
|
+
}), l(this, "cleanup", () => {
|
|
293
298
|
this.triggerElement.removeEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.removeEventListener("mouseenter", this.showOnMouseEnter);
|
|
294
299
|
});
|
|
295
300
|
var o;
|
|
@@ -297,7 +302,7 @@ var ce = class {
|
|
|
297
302
|
throw new Error("Trigger element must be a valid HTML element");
|
|
298
303
|
if (!(this.contentElement instanceof HTMLElement))
|
|
299
304
|
throw new Error("Content element must be a valid HTML element");
|
|
300
|
-
this.options = n, this.triggerStrategy = this.options.triggerStrategy || "click", this.placement = this.options.placement || "bottom", this.offsetDistance = this.options.offsetDistance || 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || false, this.preventFromCloseInside = this.options.preventCloseFromInside || false, this.defaultState = this.options.defaultState || "close", this.eventEffect = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new
|
|
305
|
+
this.options = n, this.triggerStrategy = this.options.triggerStrategy || "click", this.placement = this.options.placement || "bottom", this.offsetDistance = this.options.offsetDistance || 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || false, this.preventFromCloseInside = this.options.preventCloseFromInside || false, this.defaultState = this.options.defaultState || "close", this.eventEffect = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new ie(
|
|
301
306
|
this.triggerElement,
|
|
302
307
|
this.contentElement,
|
|
303
308
|
{
|
|
@@ -353,42 +358,42 @@ var ce = class {
|
|
|
353
358
|
}), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
354
359
|
}
|
|
355
360
|
};
|
|
356
|
-
var
|
|
361
|
+
var P = (s, e = document.body) => e.querySelector(s);
|
|
357
362
|
var U = (s, e = document.body) => Array.from(e.querySelectorAll(s));
|
|
358
|
-
var
|
|
359
|
-
var
|
|
363
|
+
var pe = (s) => typeof s == "string" ? P(s) : s;
|
|
364
|
+
var de = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
360
365
|
let n = false;
|
|
361
|
-
const o =
|
|
362
|
-
if (
|
|
366
|
+
const o = pe(s) || document.body, i = typeof e == "string" ? U(e, o) : e, r = (h) => {
|
|
367
|
+
if (h.preventDefault(), o.focus(), i.length === 0)
|
|
363
368
|
return;
|
|
364
|
-
const
|
|
365
|
-
let c = i.findIndex((
|
|
369
|
+
const g = h.key, p = document.activeElement;
|
|
370
|
+
let c = i.findIndex((m) => m === p);
|
|
366
371
|
if (c === -1) {
|
|
367
|
-
|
|
372
|
+
g === "ArrowUp" || g === "ArrowLeft" ? i[i.length - 1].focus() : i[0].focus();
|
|
368
373
|
return;
|
|
369
374
|
}
|
|
370
|
-
const f = (
|
|
371
|
-
switch (
|
|
375
|
+
const f = (m) => m > 0 ? m - 1 : i.length - 1, v = (m) => m < i.length - 1 ? m + 1 : 0;
|
|
376
|
+
switch (g) {
|
|
372
377
|
case "ArrowDown":
|
|
373
|
-
|
|
378
|
+
h.preventDefault(), c = v(c);
|
|
374
379
|
break;
|
|
375
380
|
case "ArrowRight":
|
|
376
381
|
break;
|
|
377
382
|
case "ArrowUp":
|
|
378
|
-
|
|
383
|
+
h.preventDefault(), c = f(c);
|
|
379
384
|
break;
|
|
380
385
|
case "ArrowLeft":
|
|
381
386
|
break;
|
|
382
387
|
case "Home":
|
|
383
|
-
|
|
388
|
+
h.preventDefault(), c = 0;
|
|
384
389
|
break;
|
|
385
390
|
case "End":
|
|
386
|
-
|
|
391
|
+
h.preventDefault(), c = i.length - 1;
|
|
387
392
|
break;
|
|
388
393
|
default:
|
|
389
394
|
return;
|
|
390
395
|
}
|
|
391
|
-
i[c] !==
|
|
396
|
+
i[c] !== p && i[c].focus();
|
|
392
397
|
};
|
|
393
398
|
return {
|
|
394
399
|
make: () => {
|
|
@@ -399,7 +404,7 @@ var pe = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:
|
|
|
399
404
|
}
|
|
400
405
|
};
|
|
401
406
|
};
|
|
402
|
-
var
|
|
407
|
+
var z = (s, e, t) => {
|
|
403
408
|
const n = new CustomEvent(e, { detail: t });
|
|
404
409
|
s.dispatchEvent(n);
|
|
405
410
|
};
|
|
@@ -430,52 +435,58 @@ var S = class S2 {
|
|
|
430
435
|
* @throws {Error} If provided elements are not valid HTMLElements
|
|
431
436
|
*/
|
|
432
437
|
constructor(e, t = {}) {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
438
|
+
a(this, "triggerElement");
|
|
439
|
+
a(this, "contentElement");
|
|
440
|
+
a(this, "options");
|
|
441
|
+
a(this, "OverlayInstance");
|
|
442
|
+
a(this, "navigationKeys");
|
|
443
|
+
a(this, "triggerStrategy");
|
|
444
|
+
a(this, "placement");
|
|
445
|
+
a(this, "offsetDistance");
|
|
446
|
+
a(this, "preventFromCloseOutside");
|
|
447
|
+
a(this, "preventFromCloseInside");
|
|
448
|
+
a(this, "defaultState");
|
|
449
|
+
a(this, "onToggle", ({ isHidden: e2 }) => {
|
|
445
450
|
var t2, n2;
|
|
446
451
|
(n2 = (t2 = this.options).onToggle) == null || n2.call(t2, { isHidden: e2 });
|
|
447
452
|
});
|
|
448
|
-
|
|
453
|
+
a(this, "beforeShow", () => {
|
|
449
454
|
this.contentElement.focus(), this.navigationKeys.make();
|
|
450
455
|
});
|
|
451
|
-
|
|
456
|
+
a(this, "beforeHide", () => {
|
|
452
457
|
this.contentElement.blur(), this.navigationKeys.destroy();
|
|
453
458
|
});
|
|
454
|
-
|
|
459
|
+
a(this, "onShow", () => {
|
|
455
460
|
var e2, t2;
|
|
456
|
-
|
|
461
|
+
z(this.contentElement, "dropdown-show", {
|
|
457
462
|
isHidden: false
|
|
458
463
|
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
459
464
|
});
|
|
460
|
-
|
|
465
|
+
a(this, "onHide", () => {
|
|
461
466
|
var e2, t2;
|
|
462
|
-
|
|
467
|
+
z(this.contentElement, "dropdown-hide", {
|
|
463
468
|
isHidden: true
|
|
464
469
|
}), (t2 = (e2 = this.options).onHide) == null || t2.call(e2);
|
|
465
470
|
});
|
|
466
|
-
|
|
471
|
+
a(this, "show", () => {
|
|
467
472
|
this.OverlayInstance.show();
|
|
468
473
|
});
|
|
469
|
-
|
|
474
|
+
a(this, "hide", () => {
|
|
470
475
|
this.OverlayInstance.hide();
|
|
471
476
|
});
|
|
472
|
-
|
|
477
|
+
a(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
|
|
473
478
|
this.OverlayInstance.setShowOptions({ placement: e2, offsetDistance: t2 });
|
|
474
479
|
});
|
|
475
|
-
|
|
480
|
+
a(this, "setOptions", ({ placement: e2, offsetDistance: t2 }) => {
|
|
481
|
+
this.OverlayInstance.setPopperOptions({ placement: e2, offsetDistance: t2 });
|
|
482
|
+
});
|
|
483
|
+
a(this, "setPopperTrigger", (e2, t2) => {
|
|
484
|
+
this.OverlayInstance.setPopperTrigger(e2, t2);
|
|
485
|
+
});
|
|
486
|
+
a(this, "cleanup", () => {
|
|
476
487
|
this.OverlayInstance.cleanup(), x.removeInstance("dropdown", this.contentElement);
|
|
477
488
|
});
|
|
478
|
-
const n = typeof e == "string" ?
|
|
489
|
+
const n = typeof e == "string" ? P(e) : e;
|
|
479
490
|
if (!(n instanceof HTMLElement))
|
|
480
491
|
throw new Error(
|
|
481
492
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
@@ -487,7 +498,7 @@ var S = class S2 {
|
|
|
487
498
|
if (o)
|
|
488
499
|
return o;
|
|
489
500
|
const i = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
490
|
-
if (this.triggerElement =
|
|
501
|
+
if (this.triggerElement = P(i), !(this.triggerElement instanceof HTMLElement))
|
|
491
502
|
throw new Error(`No valid trigger element found. Ensure a trigger element exists with attributes: data-dropdown-trigger and data-dropdown-id="${this.contentElement.id}"`);
|
|
492
503
|
this.options = t, this.triggerStrategy = this.options.triggerStrategy || this.contentElement.dataset.triggerStrategy || "click", this.placement = this.options.placement || this.contentElement.dataset.placement || "bottom-start", this.offsetDistance = this.options.offsetDistance || parseInt(`${this.contentElement.dataset.offsetDistance}`) | 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || this.contentElement.hasAttribute("data-prevent-close-outside") || false, this.preventFromCloseInside = this.options.preventCloseFromInside || this.contentElement.hasAttribute("data-prevent-close-inside") || false, this.defaultState = this.options.defaultState || this.contentElement.dataset.defaultState || "close", this.OverlayInstance = new ce({
|
|
493
504
|
trigger: this.triggerElement,
|
|
@@ -508,7 +519,7 @@ var S = class S2 {
|
|
|
508
519
|
},
|
|
509
520
|
popper: this.options.popper
|
|
510
521
|
}
|
|
511
|
-
}), this.navigationKeys =
|
|
522
|
+
}), this.navigationKeys = de({
|
|
512
523
|
containerElement: this.contentElement,
|
|
513
524
|
targetChildren: "a:not([disabled]), button:not([disabled])",
|
|
514
525
|
direction: "up-down"
|
|
@@ -524,17 +535,17 @@ var S = class S2 {
|
|
|
524
535
|
new S2(e, t);
|
|
525
536
|
}
|
|
526
537
|
};
|
|
527
|
-
|
|
538
|
+
a(S, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
528
539
|
const t = U(e);
|
|
529
540
|
for (const n of t)
|
|
530
541
|
new S(n);
|
|
531
542
|
});
|
|
532
|
-
var
|
|
543
|
+
var K = S;
|
|
533
544
|
|
|
534
545
|
// src/index.js
|
|
535
546
|
function Dropdown(Alpine) {
|
|
536
547
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
537
|
-
const dropdown_ = new
|
|
548
|
+
const dropdown_ = new K(el);
|
|
538
549
|
cleanup(() => {
|
|
539
550
|
dropdown_.cleanup();
|
|
540
551
|
});
|