@data-slot/dropdown-menu 0.2.121 → 0.2.122
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 +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -52,6 +52,8 @@ controller.toggle();
|
|
|
52
52
|
controller.destroy();
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
+
`createDropdownMenu(root)` is idempotent per root. Calling it again for the same element returns the existing controller; destroy it first if you need to rebind with different options.
|
|
56
|
+
|
|
55
57
|
## Slots
|
|
56
58
|
|
|
57
59
|
| Slot | Description |
|
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
|
|
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;
|
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`];function
|
|
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};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-slot/dropdown-menu",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.122",
|
|
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.
|
|
38
|
+
"@data-slot/core": "0.2.122"
|
|
39
39
|
}
|
|
40
40
|
}
|