@data-slot/dropdown-menu 0.2.42 → 0.2.44

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`top`,`right`,`bottom`,`left`],n=[`start`,`center`,`end`];function r(r,a={}){let o=(0,e.getPart)(r,`dropdown-menu-trigger`),s=(0,e.getPart)(r,`dropdown-menu-content`);if(!o||!s)throw Error(`DropdownMenu requires trigger and content slots`);let c=a.defaultOpen??(0,e.getDataBool)(r,`defaultOpen`)??!1,l=a.onOpenChange,u=a.onSelect,d=a.closeOnClickOutside??(0,e.getDataBool)(r,`closeOnClickOutside`)??!0,f=a.closeOnEscape??(0,e.getDataBool)(r,`closeOnEscape`)??!0,p=a.closeOnSelect??(0,e.getDataBool)(r,`closeOnSelect`)??!0,m=a.side??(0,e.getDataEnum)(s,`side`,t)??(0,e.getDataEnum)(r,`side`,t)??`bottom`,h=a.align??(0,e.getDataEnum)(s,`align`,n)??(0,e.getDataEnum)(r,`align`,n)??`start`,g=a.sideOffset??(0,e.getDataNumber)(s,`sideOffset`)??(0,e.getDataNumber)(r,`sideOffset`)??4,_=a.alignOffset??(0,e.getDataNumber)(s,`alignOffset`)??(0,e.getDataNumber)(r,`alignOffset`)??0,v=a.avoidCollisions??(0,e.getDataBool)(s,`avoidCollisions`)??(0,e.getDataBool)(r,`avoidCollisions`)??!0,y=a.collisionPadding??(0,e.getDataNumber)(s,`collisionPadding`)??(0,e.getDataNumber)(r,`collisionPadding`)??8,b=a.lockScroll??(0,e.getDataBool)(r,`lockScroll`)??!0,x=!1,S=null,C=-1,w=``,T=null,E=!1,D=[],O=!1,k=(0,e.createPortalLifecycle)({content:s,root:r}),A=[],j=[],M=new Map,N=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,P=(0,e.ensureId)(o,`dropdown-menu-trigger`),F=(0,e.ensureId)(s,`dropdown-menu-content`);o.setAttribute(`aria-haspopup`,`menu`),o.setAttribute(`aria-controls`,F),s.setAttribute(`role`,`menu`),s.setAttribute(`aria-labelledby`,P),s.tabIndex=-1;let I=()=>{A=(0,e.getParts)(s,`dropdown-menu-item`);for(let e of A)e.setAttribute(`role`,`menuitem`),e.hasAttribute(`data-disabled`)||e.hasAttribute(`disabled`)?e.setAttribute(`aria-disabled`,`true`):e.removeAttribute(`aria-disabled`),e.tabIndex=-1;j=A.filter(e=>!N(e)),M=new Map(j.map((e,t)=>[e,t]))},L=()=>{let t=r.ownerDocument.defaultView??window,n=(0,e.computeFloatingPosition)({anchorRect:o.getBoundingClientRect(),contentRect:s.getBoundingClientRect(),side:m,align:h,sideOffset:g,alignOffset:_,avoidCollisions:v,collisionPadding:y});b?(s.style.position=`fixed`,s.style.top=`${n.y}px`,s.style.left=`${n.x}px`):(s.style.position=`absolute`,s.style.top=`${n.y+t.scrollY}px`,s.style.left=`${n.x+t.scrollX}px`),s.style.margin=`0`,s.setAttribute(`data-side`,n.side),s.setAttribute(`data-align`,n.align)},R=(0,e.createPositionSync)({observedElements:[o,s],isActive:()=>x,ancestorScroll:b,onUpdate:L}),z=(t,n=!0)=>{for(let r=0;r<j.length;r++){let i=j[r];r===t?(i.setAttribute(`data-highlighted`,``),(0,e.ensureItemVisibleInContainer)(i,s),n&&i.focus()):i.removeAttribute(`data-highlighted`)}C=t},B=()=>{for(let e of A)e.removeAttribute(`data-highlighted`);C=-1},V=e=>{r.setAttribute(`data-state`,e),s.setAttribute(`data-state`,e)},H=t=>{x!==t&&(t?(S=document.activeElement,x=!0,(0,e.setAria)(o,`expanded`,!0),k.mount(),s.hidden=!1,V(`open`),b&&!O&&((0,e.lockScroll)(),O=!0),I(),E=!1,B(),R.start(),L(),R.update(),s.focus()):(x=!1,(0,e.setAria)(o,`expanded`,!1),k.restore(),s.hidden=!0,V(`closed`),B(),w=``,E=!1,O&&=((0,e.unlockScroll)(),!1),R.stop(),requestAnimationFrame(()=>{S&&document.contains(S)?S.focus():o&&document.contains(o)&&o.focus(),S=null})),(0,e.emit)(r,`dropdown-menu:change`,{open:x}),l?.(x))},U=t=>{if(N(t))return;let n=t.dataset.value||t.textContent?.trim()||``;(0,e.emit)(r,`dropdown-menu:select`,{value:n}),u?.(n),p&&H(!1)},W=e=>{let t=j.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),E=!0,z(C===-1?0:(C+1)%t);break;case`ArrowUp`:e.preventDefault(),E=!0,z(C===-1?t-1:(C-1+t)%t);break;case`Home`:e.preventDefault(),E=!0,z(0);break;case`End`:e.preventDefault(),E=!0,z(t-1);break;case`Enter`:case` `:e.preventDefault(),C>=0&&U(j[C]);break;case`Tab`:H(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),G(e.key.toLowerCase()))}},G=e=>{T&&clearTimeout(T),T=setTimeout(()=>{w=``},500),w+=e;let t=j.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(w));if(t===-1&&w.length===1){let n=C+1;for(let r=0;r<j.length;r++){let i=(n+r)%j.length;if((j[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(E=!0,z(t))};return(0,e.setAria)(o,`expanded`,!1),s.hidden=!0,V(`closed`),D.push((0,e.on)(o,`click`,()=>H(!x)),(0,e.on)(o,`keydown`,e=>{(e.key===`Enter`||e.key===` `||e.key===`ArrowDown`)&&!x&&(e.preventDefault(),H(!0))})),D.push((0,e.on)(s,`keydown`,W),(0,e.on)(s,`click`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);t&&U(t)}),(0,e.on)(s,`pointermove`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);if(!(E&&(E=!1,t&&M.get(t)===C)))if(t&&!N(t)){let e=M.get(t);e!==void 0&&e!==C&&z(e,!1)}else B()}),(0,e.on)(s,`pointerleave`,()=>{E||B()})),D.push((0,e.createDismissLayer)({root:r,isOpen:()=>x,onDismiss:()=>H(!1),closeOnClickOutside:d,closeOnEscape:f})),D.push((0,e.on)(r,`dropdown-menu:set`,e=>{let t=e.detail,n;t?.open===void 0?t?.value!==void 0&&(n=t.value):n=t.open,typeof n==`boolean`&&H(n)})),c&&H(!0),{open:()=>H(!0),close:()=>H(!1),toggle:()=>H(!x),get isOpen(){return x},destroy:()=>{T&&clearTimeout(T),R.stop(),k.cleanup(),O&&=((0,e.unlockScroll)(),!1),D.forEach(e=>e()),D.length=0,i.delete(r)}}}const i=new WeakSet;function a(t=document){let n=[];for(let a of(0,e.getRoots)(t,`dropdown-menu`))i.has(a)||(i.add(a),n.push(r(a)));return n}exports.create=a,exports.createDropdownMenu=r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`top`,`right`,`bottom`,`left`],n=[`start`,`center`,`end`];function r(r,a={}){let o=(0,e.getPart)(r,`dropdown-menu-trigger`),s=(0,e.getPart)(r,`dropdown-menu-content`);if(!o||!s)throw Error(`DropdownMenu requires trigger and content slots`);let c=a.defaultOpen??(0,e.getDataBool)(r,`defaultOpen`)??!1,l=a.onOpenChange,u=a.onSelect,d=a.closeOnClickOutside??(0,e.getDataBool)(r,`closeOnClickOutside`)??!0,f=a.closeOnEscape??(0,e.getDataBool)(r,`closeOnEscape`)??!0,p=a.closeOnSelect??(0,e.getDataBool)(r,`closeOnSelect`)??!0,m=a.side??(0,e.getDataEnum)(s,`side`,t)??(0,e.getDataEnum)(r,`side`,t)??`bottom`,h=a.align??(0,e.getDataEnum)(s,`align`,n)??(0,e.getDataEnum)(r,`align`,n)??`start`,g=a.sideOffset??(0,e.getDataNumber)(s,`sideOffset`)??(0,e.getDataNumber)(r,`sideOffset`)??4,_=a.alignOffset??(0,e.getDataNumber)(s,`alignOffset`)??(0,e.getDataNumber)(r,`alignOffset`)??0,v=a.avoidCollisions??(0,e.getDataBool)(s,`avoidCollisions`)??(0,e.getDataBool)(r,`avoidCollisions`)??!0,y=a.collisionPadding??(0,e.getDataNumber)(s,`collisionPadding`)??(0,e.getDataNumber)(r,`collisionPadding`)??8,b=a.lockScroll??(0,e.getDataBool)(r,`lockScroll`)??!0,x=!1,S=null,C=-1,w=``,T=null,E=!1,D=[],O=!1,k=(0,e.createPortalLifecycle)({content:s,root:r,wrapperSlot:`dropdown-menu-positioner`}),A=!1,j=[],M=[],N=new Map,P=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,F=(0,e.ensureId)(o,`dropdown-menu-trigger`),I=(0,e.ensureId)(s,`dropdown-menu-content`);o.setAttribute(`aria-haspopup`,`menu`),o.setAttribute(`aria-controls`,I),s.setAttribute(`role`,`menu`),s.setAttribute(`aria-labelledby`,F),s.tabIndex=-1;let L=()=>{j=(0,e.getParts)(s,`dropdown-menu-item`);for(let e of j)e.setAttribute(`role`,`menuitem`),e.hasAttribute(`data-disabled`)||e.hasAttribute(`disabled`)?e.setAttribute(`aria-disabled`,`true`):e.removeAttribute(`aria-disabled`),e.tabIndex=-1;M=j.filter(e=>!P(e)),N=new Map(M.map((e,t)=>[e,t]))},R=()=>{let t=k.container,n=r.ownerDocument.defaultView??window,i=(0,e.computeFloatingPosition)({anchorRect:o.getBoundingClientRect(),contentRect:s.getBoundingClientRect(),side:m,align:h,sideOffset:g,alignOffset:_,avoidCollisions:v,collisionPadding:y});b?(t.style.position=`fixed`,t.style.top=`0px`,t.style.left=`0px`,t.style.transform=`translate3d(${i.x}px, ${i.y}px, 0)`):(t.style.position=`absolute`,t.style.top=`0px`,t.style.left=`0px`,t.style.transform=`translate3d(${i.x+n.scrollX}px, ${i.y+n.scrollY}px, 0)`),t.style.willChange=`transform`,t.style.margin=`0`,s.setAttribute(`data-side`,i.side),s.setAttribute(`data-align`,i.align),t!==s&&(t.setAttribute(`data-side`,i.side),t.setAttribute(`data-align`,i.align))},z=(0,e.createPositionSync)({observedElements:[o,s],isActive:()=>x,ancestorScroll:b,onUpdate:R}),B=(t,n=!0)=>{for(let r=0;r<M.length;r++){let i=M[r];r===t?(i.setAttribute(`data-highlighted`,``),(0,e.ensureItemVisibleInContainer)(i,s),n&&i.focus()):i.removeAttribute(`data-highlighted`)}C=t},V=()=>{for(let e of j)e.removeAttribute(`data-highlighted`);C=-1},H=e=>{r.setAttribute(`data-state`,e),s.setAttribute(`data-state`,e),e===`open`?(r.setAttribute(`data-open`,``),s.setAttribute(`data-open`,``),r.removeAttribute(`data-closed`),s.removeAttribute(`data-closed`)):(r.setAttribute(`data-closed`,``),s.setAttribute(`data-closed`,``),r.removeAttribute(`data-open`),s.removeAttribute(`data-open`))},U=()=>{requestAnimationFrame(()=>{S&&document.contains(S)?S.focus():o&&document.contains(o)&&o.focus(),S=null})},W=(0,e.createPresenceLifecycle)({element:s,onExitComplete:()=>{A||(k.restore(),s.hidden=!0,U())}}),G=t=>{x!==t&&(t?(S=document.activeElement,x=!0,(0,e.setAria)(o,`expanded`,!0),k.mount(),s.hidden=!1,H(`open`),W.enter(),b&&!O&&((0,e.lockScroll)(),O=!0),L(),E=!1,V(),z.start(),R(),z.update(),s.focus()):(x=!1,(0,e.setAria)(o,`expanded`,!1),H(`closed`),V(),w=``,E=!1,O&&=((0,e.unlockScroll)(),!1),z.stop(),W.exit()),(0,e.emit)(r,`dropdown-menu:change`,{open:x}),l?.(x))},K=t=>{if(P(t))return;let n=t.dataset.value||t.textContent?.trim()||``;(0,e.emit)(r,`dropdown-menu:select`,{value:n}),u?.(n),p&&G(!1)},q=e=>{let t=M.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),E=!0,B(C===-1?0:(C+1)%t);break;case`ArrowUp`:e.preventDefault(),E=!0,B(C===-1?t-1:(C-1+t)%t);break;case`Home`:e.preventDefault(),E=!0,B(0);break;case`End`:e.preventDefault(),E=!0,B(t-1);break;case`Enter`:case` `:e.preventDefault(),C>=0&&K(M[C]);break;case`Tab`:G(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),J(e.key.toLowerCase()))}},J=e=>{T&&clearTimeout(T),T=setTimeout(()=>{w=``},500),w+=e;let t=M.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(w));if(t===-1&&w.length===1){let n=C+1;for(let r=0;r<M.length;r++){let i=(n+r)%M.length;if((M[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(E=!0,B(t))};return(0,e.setAria)(o,`expanded`,!1),s.hidden=!0,H(`closed`),D.push((0,e.on)(o,`click`,()=>G(!x)),(0,e.on)(o,`keydown`,e=>{(e.key===`Enter`||e.key===` `||e.key===`ArrowDown`)&&!x&&(e.preventDefault(),G(!0))})),D.push((0,e.on)(s,`keydown`,q),(0,e.on)(s,`click`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);t&&K(t)}),(0,e.on)(s,`pointermove`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);if(!(E&&(E=!1,t&&N.get(t)===C)))if(t&&!P(t)){let e=N.get(t);e!==void 0&&e!==C&&B(e,!1)}else V()}),(0,e.on)(s,`pointerleave`,()=>{E||V()})),D.push((0,e.createDismissLayer)({root:r,isOpen:()=>x,onDismiss:()=>G(!1),closeOnClickOutside:d,closeOnEscape:f})),D.push((0,e.on)(r,`dropdown-menu:set`,e=>{let t=e.detail,n;t?.open===void 0?t?.value!==void 0&&(n=t.value):n=t.open,typeof n==`boolean`&&G(n)})),c&&G(!0),{open:()=>G(!0),close:()=>G(!1),toggle:()=>G(!x),get isOpen(){return x},destroy:()=>{A=!0,T&&clearTimeout(T),z.stop(),W.cleanup(),k.cleanup(),O&&=((0,e.unlockScroll)(),!1),D.forEach(e=>e()),D.length=0,i.delete(r)}}}const i=new WeakSet;function a(t=document){let n=[];for(let a of(0,e.getRoots)(t,`dropdown-menu`))i.has(a)||(i.add(a),n.push(r(a)));return n}exports.create=a,exports.createDropdownMenu=r;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{computeFloatingPosition as e,createDismissLayer as t,createPortalLifecycle as n,createPositionSync as r,emit as i,ensureId as a,ensureItemVisibleInContainer as o,getDataBool as s,getDataEnum as c,getDataNumber as l,getPart as u,getParts as d,getRoots as f,lockScroll as ee,on as p,setAria as m,unlockScroll as h}from"@data-slot/core";const g=[`top`,`right`,`bottom`,`left`],_=[`start`,`center`,`end`];function v(f,v={}){let b=u(f,`dropdown-menu-trigger`),x=u(f,`dropdown-menu-content`);if(!b||!x)throw Error(`DropdownMenu requires trigger and content slots`);let te=v.defaultOpen??s(f,`defaultOpen`)??!1,ne=v.onOpenChange,re=v.onSelect,ie=v.closeOnClickOutside??s(f,`closeOnClickOutside`)??!0,S=v.closeOnEscape??s(f,`closeOnEscape`)??!0,C=v.closeOnSelect??s(f,`closeOnSelect`)??!0,w=v.side??c(x,`side`,g)??c(f,`side`,g)??`bottom`,T=v.align??c(x,`align`,_)??c(f,`align`,_)??`start`,E=v.sideOffset??l(x,`sideOffset`)??l(f,`sideOffset`)??4,D=v.alignOffset??l(x,`alignOffset`)??l(f,`alignOffset`)??0,O=v.avoidCollisions??s(x,`avoidCollisions`)??s(f,`avoidCollisions`)??!0,k=v.collisionPadding??l(x,`collisionPadding`)??l(f,`collisionPadding`)??8,A=v.lockScroll??s(f,`lockScroll`)??!0,j=!1,M=null,N=-1,P=``,F=null,I=!1,L=[],R=!1,z=n({content:x,root:f}),B=[],V=[],H=new Map,U=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,W=a(b,`dropdown-menu-trigger`),G=a(x,`dropdown-menu-content`);b.setAttribute(`aria-haspopup`,`menu`),b.setAttribute(`aria-controls`,G),x.setAttribute(`role`,`menu`),x.setAttribute(`aria-labelledby`,W),x.tabIndex=-1;let K=()=>{B=d(x,`dropdown-menu-item`);for(let e of B)e.setAttribute(`role`,`menuitem`),e.hasAttribute(`data-disabled`)||e.hasAttribute(`disabled`)?e.setAttribute(`aria-disabled`,`true`):e.removeAttribute(`aria-disabled`),e.tabIndex=-1;V=B.filter(e=>!U(e)),H=new Map(V.map((e,t)=>[e,t]))},q=()=>{let t=f.ownerDocument.defaultView??window,n=e({anchorRect:b.getBoundingClientRect(),contentRect:x.getBoundingClientRect(),side:w,align:T,sideOffset:E,alignOffset:D,avoidCollisions:O,collisionPadding:k});A?(x.style.position=`fixed`,x.style.top=`${n.y}px`,x.style.left=`${n.x}px`):(x.style.position=`absolute`,x.style.top=`${n.y+t.scrollY}px`,x.style.left=`${n.x+t.scrollX}px`),x.style.margin=`0`,x.setAttribute(`data-side`,n.side),x.setAttribute(`data-align`,n.align)},J=r({observedElements:[b,x],isActive:()=>j,ancestorScroll:A,onUpdate:q}),Y=(e,t=!0)=>{for(let n=0;n<V.length;n++){let r=V[n];n===e?(r.setAttribute(`data-highlighted`,``),o(r,x),t&&r.focus()):r.removeAttribute(`data-highlighted`)}N=e},X=()=>{for(let e of B)e.removeAttribute(`data-highlighted`);N=-1},Z=e=>{f.setAttribute(`data-state`,e),x.setAttribute(`data-state`,e)},Q=e=>{j!==e&&(e?(M=document.activeElement,j=!0,m(b,`expanded`,!0),z.mount(),x.hidden=!1,Z(`open`),A&&!R&&(ee(),R=!0),K(),I=!1,X(),J.start(),q(),J.update(),x.focus()):(j=!1,m(b,`expanded`,!1),z.restore(),x.hidden=!0,Z(`closed`),X(),P=``,I=!1,R&&=(h(),!1),J.stop(),requestAnimationFrame(()=>{M&&document.contains(M)?M.focus():b&&document.contains(b)&&b.focus(),M=null})),i(f,`dropdown-menu:change`,{open:j}),ne?.(j))},$=e=>{if(U(e))return;let t=e.dataset.value||e.textContent?.trim()||``;i(f,`dropdown-menu:select`,{value:t}),re?.(t),C&&Q(!1)},ae=e=>{let t=V.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),I=!0,Y(N===-1?0:(N+1)%t);break;case`ArrowUp`:e.preventDefault(),I=!0,Y(N===-1?t-1:(N-1+t)%t);break;case`Home`:e.preventDefault(),I=!0,Y(0);break;case`End`:e.preventDefault(),I=!0,Y(t-1);break;case`Enter`:case` `:e.preventDefault(),N>=0&&$(V[N]);break;case`Tab`:Q(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),oe(e.key.toLowerCase()))}},oe=e=>{F&&clearTimeout(F),F=setTimeout(()=>{P=``},500),P+=e;let t=V.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(P));if(t===-1&&P.length===1){let n=N+1;for(let r=0;r<V.length;r++){let i=(n+r)%V.length;if((V[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(I=!0,Y(t))};return m(b,`expanded`,!1),x.hidden=!0,Z(`closed`),L.push(p(b,`click`,()=>Q(!j)),p(b,`keydown`,e=>{(e.key===`Enter`||e.key===` `||e.key===`ArrowDown`)&&!j&&(e.preventDefault(),Q(!0))})),L.push(p(x,`keydown`,ae),p(x,`click`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);t&&$(t)}),p(x,`pointermove`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);if(!(I&&(I=!1,t&&H.get(t)===N)))if(t&&!U(t)){let e=H.get(t);e!==void 0&&e!==N&&Y(e,!1)}else X()}),p(x,`pointerleave`,()=>{I||X()})),L.push(t({root:f,isOpen:()=>j,onDismiss:()=>Q(!1),closeOnClickOutside:ie,closeOnEscape:S})),L.push(p(f,`dropdown-menu:set`,e=>{let t=e.detail,n;t?.open===void 0?t?.value!==void 0&&(n=t.value):n=t.open,typeof n==`boolean`&&Q(n)})),te&&Q(!0),{open:()=>Q(!0),close:()=>Q(!1),toggle:()=>Q(!j),get isOpen(){return j},destroy:()=>{F&&clearTimeout(F),J.stop(),z.cleanup(),R&&=(h(),!1),L.forEach(e=>e()),L.length=0,y.delete(f)}}}const y=new WeakSet;function b(e=document){let t=[];for(let n of f(e,`dropdown-menu`))y.has(n)||(y.add(n),t.push(v(n)));return t}export{b as create,v as createDropdownMenu};
1
+ import{computeFloatingPosition as e,createDismissLayer as t,createPortalLifecycle as n,createPositionSync as r,createPresenceLifecycle as i,emit as a,ensureId as o,ensureItemVisibleInContainer as s,getDataBool as c,getDataEnum as l,getDataNumber as u,getPart as d,getParts as ee,getRoots as f,lockScroll as p,on as m,setAria as h,unlockScroll as g}from"@data-slot/core";const _=[`top`,`right`,`bottom`,`left`],v=[`start`,`center`,`end`];function y(f,y={}){let x=d(f,`dropdown-menu-trigger`),S=d(f,`dropdown-menu-content`);if(!x||!S)throw Error(`DropdownMenu requires trigger and content slots`);let te=y.defaultOpen??c(f,`defaultOpen`)??!1,C=y.onOpenChange,ne=y.onSelect,re=y.closeOnClickOutside??c(f,`closeOnClickOutside`)??!0,ie=y.closeOnEscape??c(f,`closeOnEscape`)??!0,w=y.closeOnSelect??c(f,`closeOnSelect`)??!0,T=y.side??l(S,`side`,_)??l(f,`side`,_)??`bottom`,E=y.align??l(S,`align`,v)??l(f,`align`,v)??`start`,D=y.sideOffset??u(S,`sideOffset`)??u(f,`sideOffset`)??4,ae=y.alignOffset??u(S,`alignOffset`)??u(f,`alignOffset`)??0,oe=y.avoidCollisions??c(S,`avoidCollisions`)??c(f,`avoidCollisions`)??!0,se=y.collisionPadding??u(S,`collisionPadding`)??u(f,`collisionPadding`)??8,O=y.lockScroll??c(f,`lockScroll`)??!0,k=!1,A=null,j=-1,M=``,N=null,P=!1,F=[],I=!1,L=n({content:S,root:f,wrapperSlot:`dropdown-menu-positioner`}),R=!1,z=[],B=[],V=new Map,H=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,U=o(x,`dropdown-menu-trigger`),W=o(S,`dropdown-menu-content`);x.setAttribute(`aria-haspopup`,`menu`),x.setAttribute(`aria-controls`,W),S.setAttribute(`role`,`menu`),S.setAttribute(`aria-labelledby`,U),S.tabIndex=-1;let G=()=>{z=ee(S,`dropdown-menu-item`);for(let e of z)e.setAttribute(`role`,`menuitem`),e.hasAttribute(`data-disabled`)||e.hasAttribute(`disabled`)?e.setAttribute(`aria-disabled`,`true`):e.removeAttribute(`aria-disabled`),e.tabIndex=-1;B=z.filter(e=>!H(e)),V=new Map(B.map((e,t)=>[e,t]))},K=()=>{let t=L.container,n=f.ownerDocument.defaultView??window,r=e({anchorRect:x.getBoundingClientRect(),contentRect:S.getBoundingClientRect(),side:T,align:E,sideOffset:D,alignOffset:ae,avoidCollisions:oe,collisionPadding:se});O?(t.style.position=`fixed`,t.style.top=`0px`,t.style.left=`0px`,t.style.transform=`translate3d(${r.x}px, ${r.y}px, 0)`):(t.style.position=`absolute`,t.style.top=`0px`,t.style.left=`0px`,t.style.transform=`translate3d(${r.x+n.scrollX}px, ${r.y+n.scrollY}px, 0)`),t.style.willChange=`transform`,t.style.margin=`0`,S.setAttribute(`data-side`,r.side),S.setAttribute(`data-align`,r.align),t!==S&&(t.setAttribute(`data-side`,r.side),t.setAttribute(`data-align`,r.align))},q=r({observedElements:[x,S],isActive:()=>k,ancestorScroll:O,onUpdate:K}),J=(e,t=!0)=>{for(let n=0;n<B.length;n++){let r=B[n];n===e?(r.setAttribute(`data-highlighted`,``),s(r,S),t&&r.focus()):r.removeAttribute(`data-highlighted`)}j=e},Y=()=>{for(let e of z)e.removeAttribute(`data-highlighted`);j=-1},X=e=>{f.setAttribute(`data-state`,e),S.setAttribute(`data-state`,e),e===`open`?(f.setAttribute(`data-open`,``),S.setAttribute(`data-open`,``),f.removeAttribute(`data-closed`),S.removeAttribute(`data-closed`)):(f.setAttribute(`data-closed`,``),S.setAttribute(`data-closed`,``),f.removeAttribute(`data-open`),S.removeAttribute(`data-open`))},ce=()=>{requestAnimationFrame(()=>{A&&document.contains(A)?A.focus():x&&document.contains(x)&&x.focus(),A=null})},Z=i({element:S,onExitComplete:()=>{R||(L.restore(),S.hidden=!0,ce())}}),Q=e=>{k!==e&&(e?(A=document.activeElement,k=!0,h(x,`expanded`,!0),L.mount(),S.hidden=!1,X(`open`),Z.enter(),O&&!I&&(p(),I=!0),G(),P=!1,Y(),q.start(),K(),q.update(),S.focus()):(k=!1,h(x,`expanded`,!1),X(`closed`),Y(),M=``,P=!1,I&&=(g(),!1),q.stop(),Z.exit()),a(f,`dropdown-menu:change`,{open:k}),C?.(k))},$=e=>{if(H(e))return;let t=e.dataset.value||e.textContent?.trim()||``;a(f,`dropdown-menu:select`,{value:t}),ne?.(t),w&&Q(!1)},le=e=>{let t=B.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),P=!0,J(j===-1?0:(j+1)%t);break;case`ArrowUp`:e.preventDefault(),P=!0,J(j===-1?t-1:(j-1+t)%t);break;case`Home`:e.preventDefault(),P=!0,J(0);break;case`End`:e.preventDefault(),P=!0,J(t-1);break;case`Enter`:case` `:e.preventDefault(),j>=0&&$(B[j]);break;case`Tab`:Q(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),ue(e.key.toLowerCase()))}},ue=e=>{N&&clearTimeout(N),N=setTimeout(()=>{M=``},500),M+=e;let t=B.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(M));if(t===-1&&M.length===1){let n=j+1;for(let r=0;r<B.length;r++){let i=(n+r)%B.length;if((B[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(P=!0,J(t))};return h(x,`expanded`,!1),S.hidden=!0,X(`closed`),F.push(m(x,`click`,()=>Q(!k)),m(x,`keydown`,e=>{(e.key===`Enter`||e.key===` `||e.key===`ArrowDown`)&&!k&&(e.preventDefault(),Q(!0))})),F.push(m(S,`keydown`,le),m(S,`click`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);t&&$(t)}),m(S,`pointermove`,e=>{let t=e.target.closest?.(`[data-slot="dropdown-menu-item"]`);if(!(P&&(P=!1,t&&V.get(t)===j)))if(t&&!H(t)){let e=V.get(t);e!==void 0&&e!==j&&J(e,!1)}else Y()}),m(S,`pointerleave`,()=>{P||Y()})),F.push(t({root:f,isOpen:()=>k,onDismiss:()=>Q(!1),closeOnClickOutside:re,closeOnEscape:ie})),F.push(m(f,`dropdown-menu:set`,e=>{let t=e.detail,n;t?.open===void 0?t?.value!==void 0&&(n=t.value):n=t.open,typeof n==`boolean`&&Q(n)})),te&&Q(!0),{open:()=>Q(!0),close:()=>Q(!1),toggle:()=>Q(!k),get isOpen(){return k},destroy:()=>{R=!0,N&&clearTimeout(N),q.stop(),Z.cleanup(),L.cleanup(),I&&=(g(),!1),F.forEach(e=>e()),F.length=0,b.delete(f)}}}const b=new WeakSet;function x(e=document){let t=[];for(let n of f(e,`dropdown-menu`))b.has(n)||(b.add(n),t.push(y(n)));return t}export{x as create,y as createDropdownMenu};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-slot/dropdown-menu",
3
- "version": "0.2.42",
3
+ "version": "0.2.44",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.cjs",
@@ -39,6 +39,6 @@
39
39
  ],
40
40
  "license": "MIT",
41
41
  "dependencies": {
42
- "@data-slot/core": "0.2.42"
42
+ "@data-slot/core": "0.2.44"
43
43
  }
44
44
  }