@data-slot/dropdown-menu 0.2.30 → 0.2.32
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
|
-
|
|
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;
|
package/dist/index.js
CHANGED
|
@@ -1 +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};
|
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.32",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -24,9 +24,6 @@
|
|
|
24
24
|
"scripts": {
|
|
25
25
|
"build": "tsdown"
|
|
26
26
|
},
|
|
27
|
-
"devDependencies": {
|
|
28
|
-
"@data-slot/core": "workspace:*"
|
|
29
|
-
},
|
|
30
27
|
"repository": {
|
|
31
28
|
"type": "git",
|
|
32
29
|
"url": "https://github.com/bejamas/data-slot",
|
|
@@ -40,5 +37,8 @@
|
|
|
40
37
|
"vanilla",
|
|
41
38
|
"data-slot"
|
|
42
39
|
],
|
|
43
|
-
"license": "MIT"
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@data-slot/core": "workspace:*"
|
|
43
|
+
}
|
|
44
44
|
}
|
|
File without changes
|
|
File without changes
|