@data-slot/dropdown-menu 0.2.122 → 0.2.124

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