@data-slot/select 0.2.135 → 0.2.137
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 +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`top`,`bottom`],n=[`start`,`center`,`end`],r=[`item-aligned`,`popper`],i=`@data-slot/select`;function a(a,o={}){let s=(0,e.reuseRootBinding)(a,i,`[@data-slot/select] createSelect() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(s)return s;let c=(0,e.getPart)(a,`select-trigger`),l=(0,e.getPart)(a,`select-content`),u=(0,e.getPart)(a,`select-value`),d=(0,e.getPart)(a,`select-positioner`),f=d&&l&&d.contains(l)?d:null,p=(0,e.getPart)(a,`select-portal`),ee=p&&f&&p.contains(f)?p:null;if(!c||!l)throw Error(`Select requires trigger and content slots`);let te=o.defaultValue??(0,e.getDataString)(a,`defaultValue`)??null,ne=o.defaultOpen??(0,e.getDataBool)(a,`defaultOpen`)??!1,re=o.placeholder??(0,e.getDataString)(a,`placeholder`)??(u?(0,e.getDataString)(u,`placeholder`):void 0)??``,m=o.disabled??(0,e.getDataBool)(a,`disabled`)??!1,ie=o.required??(0,e.getDataBool)(a,`required`)??!1,ae=o.name??(0,e.getDataString)(a,`name`)??null,oe=o.onValueChange,se=o.onOpenChange,h=(t,n)=>(0,e.getDataEnum)(l,t,n)??(f?(0,e.getDataEnum)(f,t,n):void 0)??(0,e.getDataEnum)(a,t,n),g=t=>(0,e.getDataNumber)(l,t)??(f?(0,e.getDataNumber)(f,t):void 0)??(0,e.getDataNumber)(a,t),ce=t=>(0,e.getDataBool)(l,t)??(f?(0,e.getDataBool)(f,t):void 0)??(0,e.getDataBool)(a,t),_=o.position??h(`position`,r)??`item-aligned`,le=o.side??h(`side`,t)??`bottom`,ue=o.align??h(`align`,n)??`start`,de=o.sideOffset??g(`sideOffset`)??4,fe=o.alignOffset??g(`alignOffset`)??0,v=o.avoidCollisions??ce(`avoidCollisions`)??!0,y=o.collisionPadding??g(`collisionPadding`)??8,b=o.lockScroll??(0,e.getDataBool)(a,`lockScroll`)??!0,x=o.highlightItemOnHover??(0,e.getDataBool)(a,`highlightItemOnHover`)??!0,S=!1,C=te,w=null,T=-1,E=``,D=null,O=!1,k=0,A=0,j=``,M=!1,N=[],P=[],F=[],I=new Map,L=null,R=!1,z=(0,e.createPortalLifecycle)({content:l,root:a,wrapperSlot:f?void 0:`select-positioner`,container:f??void 0,mountTarget:f?ee??f:void 0}),B=!1,V=!0,H=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,U=e=>e.pointerType!==`touch`,pe=(0,e.ensureId)(c,`select-trigger`),me=(0,e.ensureId)(l,`select-content`);c.setAttribute(`role`,`combobox`),c.setAttribute(`aria-haspopup`,`listbox`),c.setAttribute(`aria-controls`,me),c.hasAttribute(`type`)||c.setAttribute(`type`,`button`),l.setAttribute(`role`,`listbox`),l.setAttribute(`aria-labelledby`,pe),l.tabIndex=-1;let W=document.querySelector(`label[for="${CSS.escape(pe)}"]`);if(W){let t=(0,e.ensureId)(W,`select-label`),n=c.getAttribute(`aria-labelledby`);c.setAttribute(`aria-labelledby`,n?`${n} ${t}`:t),N.push((0,e.on)(W,`click`,e=>{e.preventDefault(),m||Z(!S)}))}m&&(c.setAttribute(`aria-disabled`,`true`),c.setAttribute(`data-disabled`,``),c instanceof HTMLButtonElement&&(c.disabled=!0)),ie&&c.setAttribute(`aria-required`,`true`),ae&&(L=document.createElement(`input`),L.type=`hidden`,L.name=ae,L.value=C??``,a.appendChild(L));let he=()=>{P=(0,e.getParts)(l,`select-item`);for(let t of P)t.setAttribute(`role`,`option`),t.hasAttribute(`data-disabled`)||t.hasAttribute(`disabled`)?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`),t.tabIndex=-1,t.dataset.value===C?((0,e.setAria)(t,`selected`,!0),t.setAttribute(`data-selected`,``)):((0,e.setAria)(t,`selected`,!1),t.removeAttribute(`data-selected`));F=P.filter(e=>!H(e)),I=new Map(F.map((e,t)=>[e,t]));let t=(0,e.getParts)(l,`select-group`);for(let n of t){n.setAttribute(`role`,`group`);let t=(0,e.getPart)(n,`select-label`);if(t){let r=(0,e.ensureId)(t,`select-label`);n.setAttribute(`aria-labelledby`,r)}}},ge=()=>(0,e.getPart)(l,`select-viewport`),_e=()=>ge()??l,ve=()=>{l.setAttribute(`data-position`,_),l.setAttribute(`data-align-trigger`,_===`item-aligned`?`true`:`false`);let e=ge();e&&e.setAttribute(`data-position`,_)},ye=(e,t,n)=>{let r=0,i=e;for(;i&&i!==l;){r+=i.offsetTop;let e=i.offsetParent;if(!(e instanceof HTMLElement)){r=NaN;break}i=e}return i===l&&Number.isFinite(r)?r:e.getBoundingClientRect().top-t.top+n.scrollTop},be=(e,t,n)=>{let r=T>=0?F[T]:void 0,i=P.find(e=>e.dataset.value===C)??r??F[0],a=e.left,o,s=0,c=e.height;return i?(s=ye(i,t,n),c=i.getBoundingClientRect().height||i.offsetHeight||e.height,o=e.top+e.height/2-c/2-s):o=e.top,{x:a,y:o,alignItem:i,itemTopInContent:s,itemHeight:c}},G=()=>{let n=z.container,r=a.ownerDocument.defaultView??window,i=c.getBoundingClientRect(),o=_e();l.style.minWidth=`${i.width}px`;let s=(0,e.measurePopupContentRect)(l),u,d=`bottom`;if(_===`item-aligned`){let e=be(i,s,o);u={x:e.x,y:e.y};let t=i.top+i.height/2,n=y,a=r.innerHeight-s.height-y,c=e=>v?a<n?n:Math.min(Math.max(e,n),a):e,l=y,f=r.innerWidth-s.width-y;if(u.x=(e=>v?f<l?l:Math.min(Math.max(e,l),f):e)(u.x),e.alignItem){let n=Math.max(0,o.scrollHeight-o.clientHeight),r=n=>e.itemTopInContent+e.itemHeight/2-(t-n);if(n>0){u.y=c(t-s.height/2);let i=Math.min(Math.max(r(u.y),0),n);o.scrollTop=i,u.y=c(t-(e.itemTopInContent-i+e.itemHeight/2)),i=Math.min(Math.max(r(u.y),0),n),o.scrollTop=i,u.y=c(t-(e.itemTopInContent-i+e.itemHeight/2))}else o.scrollTop=0,u.y=c(e.y)}else o.scrollTop=0,u.y=c(e.y);d=u.y<i.top?`top`:`bottom`}else{let n=(0,e.computeFloatingPosition)({anchorRect:i,contentRect:s,side:le,align:ue,sideOffset:de,alignOffset:fe,avoidCollisions:v,collisionPadding:y,allowedSides:t});u={x:n.x,y:n.y},d=n.side}let f=_===`item-aligned`?`center`:ue,p=(0,e.computeFloatingTransformOrigin)({side:d,align:f,anchorRect:i,popupX:u.x,popupY:u.y});b?(n.style.position=`fixed`,n.style.top=`0px`,n.style.left=`0px`,n.style.transform=`translate3d(${u.x}px, ${u.y}px, 0)`):(n.style.position=`absolute`,n.style.top=`0px`,n.style.left=`0px`,n.style.transform=`translate3d(${u.x+r.scrollX}px, ${u.y+r.scrollY}px, 0)`),n.style.setProperty(`--transform-origin`,p),n.style.willChange=`transform`,n.style.margin=`0`,ve(),l.setAttribute(`data-side`,d),l.setAttribute(`data-align`,f),n!==l&&(n.setAttribute(`data-side`,d),n.setAttribute(`data-align`,f))},K=(0,e.createPositionSync)({observedElements:[c,l],isActive:()=>S,ancestorScroll:b,onUpdate:G,ignoreScrollTarget:e=>e instanceof Node&&l.contains(e)}),q=(t,n=!0,r=!0)=>{let i=_e();for(let a=0;a<F.length;a++){let o=F[a];a===t?(o.setAttribute(`data-highlighted`,``),r&&(0,e.ensureItemVisibleInContainer)(o,i),n&&o.focus()):o.removeAttribute(`data-highlighted`)}T=t},J=()=>{for(let e of P)e.removeAttribute(`data-highlighted`);T=-1},xe=()=>{J(),(0,e.focusElement)(l)},Y=e=>{a.setAttribute(`data-state`,e),c.setAttribute(`data-state`,e),l.setAttribute(`data-state`,e),e===`open`?(a.setAttribute(`data-open`,``),c.setAttribute(`data-open`,``),l.setAttribute(`data-open`,``),a.removeAttribute(`data-closed`),c.removeAttribute(`data-closed`),l.removeAttribute(`data-closed`)):(a.setAttribute(`data-closed`,``),c.setAttribute(`data-closed`,``),l.setAttribute(`data-closed`,``),a.removeAttribute(`data-open`),c.removeAttribute(`data-open`),l.removeAttribute(`data-open`))},Se=()=>{requestAnimationFrame(()=>{w&&document.contains(w)?(0,e.focusElement)(w):c&&document.contains(c)&&(0,e.focusElement)(c),w=null})},Ce=()=>{B||(z.restore(),l.hidden=!0,V?Se():w=null)},X=(0,e.createPresenceLifecycle)({element:l,onExitComplete:Ce}),we=()=>{if(u)if(C===null)u.textContent=re,c.setAttribute(`data-placeholder`,``);else{let e=P.find(e=>e.dataset.value===C);u.textContent=e?.dataset.label??e?.textContent?.trim()??C,c.removeAttribute(`data-placeholder`)}},Z=(t,n={})=>{let{skipFocusRestore:r=!1,immediate:i=!1}=n;if(S!==t&&!(m&&t)){if(t){let t=M;M=!1,V=!0,w=document.activeElement,S=!0,(0,e.setAria)(c,`expanded`,!0),z.mount(),l.hidden=!1,Y(`open`),X.enter(),b&&!R&&((0,e.lockScroll)(),R=!0),he(),O=!1;let n=F.findIndex(e=>e.dataset.value===C);n>=0?q(n,!1,!1):J(),K.start(),G(),K.update(),requestAnimationFrame(()=>{if(S&&(G(),K.update(),t&&x&&j!==`touch`&&(k!==0||A!==0))){let e=document.elementFromPoint(k,A)?.closest?.(`[data-slot="select-item"]`);if(e&&!H(e)&&l.contains(e)){let t=I.get(e);t!==void 0&&q(t,!0,!1)}}}),l.focus()}else S=!1,M=!1,k=0,A=0,j=``,(0,e.setAria)(c,`expanded`,!1),Y(`closed`),J(),E=``,O=!1,V=!r,R&&=((0,e.unlockScroll)(),!1),K.stop(),i?(X.cleanup(),Ce()):X.exit();(0,e.emit)(a,`select:open-change`,{open:S}),se?.(S)}},Q=(t,n=!1)=>{if(C===t&&!n)return;let r=C;C=t,L&&(L.value=t??``),t===null?a.removeAttribute(`data-value`):a.setAttribute(`data-value`,t);for(let n of P)n.dataset.value===t?((0,e.setAria)(n,`selected`,!0),n.setAttribute(`data-selected`,``)):((0,e.setAria)(n,`selected`,!1),n.removeAttribute(`data-selected`));we(),!n&&r!==t&&((0,e.emit)(a,`select:change`,{value:t}),oe?.(t))},Te=e=>{if(H(e))return;let t=e.dataset.value;t!==void 0&&(Q(t),Z(!1,{immediate:!0}))},Ee=e=>{let t=F.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),O=!0,q(T===-1?0:Math.min(T+1,t-1));break;case`ArrowUp`:e.preventDefault(),O=!0,q(T===-1?t-1:Math.max(T-1,0));break;case`Home`:e.preventDefault(),O=!0,q(0);break;case`End`:e.preventDefault(),O=!0,q(t-1);break;case`Enter`:case` `:e.preventDefault(),T>=0&&Te(F[T]);break;case`Tab`:Z(!1,{skipFocusRestore:!0});break;case`Escape`:e.preventDefault(),Z(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),De(e.key.toLowerCase()))}},De=e=>{D&&clearTimeout(D),D=setTimeout(()=>{E=``},500),E+=e;let t=F.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(E));if(t===-1&&E.length===1){let n=T+1;for(let r=0;r<F.length;r++){let i=(n+r)%F.length;if((F[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(O=!0,q(t))};(0,e.setAria)(c,`expanded`,!1),l.hidden=!0,ve(),Y(`closed`),he(),Q(C,!0),N.push((0,e.on)(c,`pointerdown`,e=>{k=e.clientX,A=e.clientY,j=e.pointerType,M=!0}),(0,e.on)(c,`click`,()=>{m||Z(!S)}),(0,e.on)(c,`keydown`,e=>{if(!m)switch(e.key){case`Enter`:case` `:case`ArrowDown`:case`ArrowUp`:e.preventDefault(),M=!1,Z(!0);break}})),N.push((0,e.on)(l,`keydown`,Ee),(0,e.on)(l,`click`,e=>{let t=e.target.closest?.(`[data-slot="select-item"]`);t&&Te(t)}),(0,e.on)(l,`pointermove`,e=>{if(!x||!U(e))return;let t=e.target.closest?.(`[data-slot="select-item"]`);if(!(O&&(O=!1,t&&I.get(t)===T)))if(t&&!H(t)){let e=I.get(t);e!==void 0&&e!==T&&q(e,!0)}else xe()}),(0,e.on)(l,`pointerleave`,e=>{!x||!U(e)||O||xe()})),N.push((0,e.createDismissLayer)({root:a,isOpen:()=>S,onDismiss:()=>Z(!1),closeOnClickOutside:!0,closeOnEscape:!1})),N.push((0,e.on)(a,`select:set`,e=>{let t=e.detail;t?.value!==void 0&&Q(t.value),t?.open!==void 0&&Z(t.open)}));let $={get value(){return C},get isOpen(){return S},select:e=>Q(e),open:()=>Z(!0),close:()=>Z(!1),destroy:()=>{B=!0,D&&clearTimeout(D),K.stop(),X.cleanup(),z.cleanup(),R&&=((0,e.unlockScroll)(),!1),N.forEach(e=>e()),N.length=0,L&&L.parentNode&&L.parentNode.removeChild(L),(0,e.clearRootBinding)(a,i,$)}};return(0,e.setRootBinding)(a,i,$),ne&&Z(!0),$}function o(t=document){let n=[];for(let r of(0,e.getRoots)(t,`select`))(0,e.hasRootBinding)(r,i)||n.push(a(r));return n}exports.create=o,exports.createSelect=a;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`top`,`bottom`],n=[`start`,`center`,`end`],r=[`item-aligned`,`popper`],i=`@data-slot/select`;function a(a,o={}){let s=(0,e.reuseRootBinding)(a,i,`[@data-slot/select] createSelect() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(s)return s;let c=(0,e.getPart)(a,`select-trigger`),l=(0,e.getPart)(a,`select-content`),u=(0,e.getPart)(a,`select-value`),d=(0,e.getPart)(a,`select-positioner`),f=d&&l&&d.contains(l)?d:null,p=(0,e.getPart)(a,`select-portal`),ee=p&&f&&p.contains(f)?p:null;if(!c||!l)throw Error(`Select requires trigger and content slots`);let te=o.defaultValue??(0,e.getDataString)(a,`defaultValue`)??null,ne=o.defaultOpen??(0,e.getDataBool)(a,`defaultOpen`)??!1,re=o.placeholder??(0,e.getDataString)(a,`placeholder`)??(u?(0,e.getDataString)(u,`placeholder`):void 0)??``,m=o.disabled??(0,e.getDataBool)(a,`disabled`)??!1,ie=o.required??(0,e.getDataBool)(a,`required`)??!1,ae=o.name??(0,e.getDataString)(a,`name`)??null,oe=o.onValueChange,se=o.onOpenChange,h=(t,n)=>(0,e.getDataEnum)(l,t,n)??(f?(0,e.getDataEnum)(f,t,n):void 0)??(0,e.getDataEnum)(a,t,n),g=t=>(0,e.getDataNumber)(l,t)??(f?(0,e.getDataNumber)(f,t):void 0)??(0,e.getDataNumber)(a,t),ce=t=>(0,e.getDataBool)(l,t)??(f?(0,e.getDataBool)(f,t):void 0)??(0,e.getDataBool)(a,t),_=o.position??h(`position`,r)??`item-aligned`,le=o.side??h(`side`,t)??`bottom`,ue=o.align??h(`align`,n)??`start`,de=o.sideOffset??g(`sideOffset`)??4,fe=o.alignOffset??g(`alignOffset`)??0,v=o.avoidCollisions??ce(`avoidCollisions`)??!0,y=o.collisionPadding??g(`collisionPadding`)??8,b=o.lockScroll??(0,e.getDataBool)(a,`lockScroll`)??!0,x=o.highlightItemOnHover??(0,e.getDataBool)(a,`highlightItemOnHover`)??!0,S=!1,C=te,w=null,T=-1,E=``,D=null,O=!1,k=0,A=0,j=``,M=!1,N=[],P=[],F=[],I=new Map,L=null,R=!1,z=(0,e.createPortalLifecycle)({content:l,root:a,wrapperSlot:f?void 0:`select-positioner`,container:f??void 0,mountTarget:f?ee??f:void 0}),B=!1,V=!0,H=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,pe=e=>e.pointerType!==`touch`,U=(0,e.ensureId)(c,`select-trigger`),me=(0,e.ensureId)(l,`select-content`);c.setAttribute(`role`,`combobox`),c.setAttribute(`aria-haspopup`,`listbox`),c.setAttribute(`aria-controls`,me),c.hasAttribute(`type`)||c.setAttribute(`type`,`button`),l.setAttribute(`role`,`listbox`),l.setAttribute(`aria-labelledby`,U),l.tabIndex=-1;let W=document.querySelector(`label[for="${CSS.escape(U)}"]`);if(W){let t=(0,e.ensureId)(W,`select-label`),n=c.getAttribute(`aria-labelledby`);c.setAttribute(`aria-labelledby`,n?`${n} ${t}`:t),N.push((0,e.on)(W,`click`,e=>{e.preventDefault(),m||Z(!S)}))}m&&(c.setAttribute(`aria-disabled`,`true`),c.setAttribute(`data-disabled`,``),c instanceof HTMLButtonElement&&(c.disabled=!0)),ie&&c.setAttribute(`aria-required`,`true`),ae&&(L=document.createElement(`input`),L.type=`hidden`,L.name=ae,L.value=C??``,a.appendChild(L));let he=()=>{P=(0,e.getParts)(l,`select-item`);for(let t of P)t.setAttribute(`role`,`option`),t.hasAttribute(`data-disabled`)||t.hasAttribute(`disabled`)?t.setAttribute(`aria-disabled`,`true`):t.removeAttribute(`aria-disabled`),t.tabIndex=-1,t.dataset.value===C?((0,e.setAria)(t,`selected`,!0),t.setAttribute(`data-selected`,``)):((0,e.setAria)(t,`selected`,!1),t.removeAttribute(`data-selected`));F=P.filter(e=>!H(e)),I=new Map(F.map((e,t)=>[e,t]));let t=(0,e.getParts)(l,`select-group`);for(let n of t){n.setAttribute(`role`,`group`);let t=(0,e.getPart)(n,`select-label`);if(t){let r=(0,e.ensureId)(t,`select-label`);n.setAttribute(`aria-labelledby`,r)}}},ge=()=>(0,e.getPart)(l,`select-viewport`),_e=()=>ge()??l,ve=()=>{l.setAttribute(`data-position`,_),l.setAttribute(`data-align-trigger`,_===`item-aligned`?`true`:`false`);let e=ge();e&&e.setAttribute(`data-position`,_)},ye=(e,t,n,r)=>{let i=0,a=e;for(;a&&a!==t;){i+=a.offsetTop;let e=a.offsetParent;if(!(e instanceof HTMLElement)){i=NaN;break}e!==t&&(i+=e.clientTop),a=e}return a===t&&Number.isFinite(i)?i:e.getBoundingClientRect().top-n-t.clientTop+r},be=(e,t,n)=>ye(e,l,t.top,n.scrollTop),xe=(e,t,n)=>{let r=T>=0?F[T]:void 0,i=P.find(e=>e.dataset.value===C)??r??F[0],a=e.left,o,s=0,c=e.height;return i?(s=be(i,t,n),c=i.getBoundingClientRect().height||i.offsetHeight||e.height,o=e.top+e.height/2-l.clientTop-s-c/2):o=e.top,{x:a,y:o,alignItem:i,itemTopInContent:s,itemHeight:c}},G=()=>{let n=z.container,r=a.ownerDocument.defaultView??window,i=c.getBoundingClientRect(),o=_e();l.style.minWidth=`${i.width}px`;let s=(0,e.measurePopupContentRect)(l),u,d=`bottom`;if(_===`item-aligned`){let e=xe(i,s,o);u={x:e.x,y:e.y};let t=i.top+i.height/2,n=y,a=r.innerHeight-s.height-y,c=e=>v?a<n?n:Math.min(Math.max(e,n),a):e,f=y,p=r.innerWidth-s.width-y;if(u.x=(e=>v?p<f?f:Math.min(Math.max(e,f),p):e)(u.x),e.alignItem){let n=Math.max(0,o.scrollHeight-o.clientHeight),r=e=>t-(e+l.clientTop),i=t=>e.itemTopInContent+e.itemHeight/2-r(t);if(n>0){u.y=c(t-s.height/2);let r=Math.min(Math.max(i(u.y),0),n);o.scrollTop=r,u.y=c(t-(l.clientTop+e.itemTopInContent-r+e.itemHeight/2)),r=Math.min(Math.max(i(u.y),0),n),o.scrollTop=r,u.y=c(t-(l.clientTop+e.itemTopInContent-r+e.itemHeight/2))}else o.scrollTop=0,u.y=c(e.y)}else o.scrollTop=0,u.y=c(e.y);d=u.y<i.top?`top`:`bottom`}else{let n=(0,e.computeFloatingPosition)({anchorRect:i,contentRect:s,side:le,align:ue,sideOffset:de,alignOffset:fe,avoidCollisions:v,collisionPadding:y,allowedSides:t});u={x:n.x,y:n.y},d=n.side}let f=_===`item-aligned`?`center`:ue,p=(0,e.computeFloatingTransformOrigin)({side:d,align:f,anchorRect:i,popupX:u.x,popupY:u.y});b?(n.style.position=`fixed`,n.style.top=`0px`,n.style.left=`0px`,n.style.transform=`translate3d(${u.x}px, ${u.y}px, 0)`):(n.style.position=`absolute`,n.style.top=`0px`,n.style.left=`0px`,n.style.transform=`translate3d(${u.x+r.scrollX}px, ${u.y+r.scrollY}px, 0)`),n.style.setProperty(`--transform-origin`,p),n.style.willChange=`transform`,n.style.margin=`0`,ve(),l.setAttribute(`data-side`,d),l.setAttribute(`data-align`,f),n!==l&&(n.setAttribute(`data-side`,d),n.setAttribute(`data-align`,f))},K=(0,e.createPositionSync)({observedElements:[c,l],isActive:()=>S,ancestorScroll:b,onUpdate:G,ignoreScrollTarget:e=>e instanceof Node&&l.contains(e)}),q=(t,n=!0,r=!0)=>{let i=_e();for(let a=0;a<F.length;a++){let o=F[a];a===t?(o.setAttribute(`data-highlighted`,``),r&&(0,e.ensureItemVisibleInContainer)(o,i),n&&o.focus()):o.removeAttribute(`data-highlighted`)}T=t},J=()=>{for(let e of P)e.removeAttribute(`data-highlighted`);T=-1},Se=()=>{J(),(0,e.focusElement)(l)},Y=e=>{a.setAttribute(`data-state`,e),c.setAttribute(`data-state`,e),l.setAttribute(`data-state`,e),e===`open`?(a.setAttribute(`data-open`,``),c.setAttribute(`data-open`,``),l.setAttribute(`data-open`,``),a.removeAttribute(`data-closed`),c.removeAttribute(`data-closed`),l.removeAttribute(`data-closed`)):(a.setAttribute(`data-closed`,``),c.setAttribute(`data-closed`,``),l.setAttribute(`data-closed`,``),a.removeAttribute(`data-open`),c.removeAttribute(`data-open`),l.removeAttribute(`data-open`))},Ce=()=>{requestAnimationFrame(()=>{w&&document.contains(w)?(0,e.focusElement)(w):c&&document.contains(c)&&(0,e.focusElement)(c),w=null})},we=()=>{B||(z.restore(),l.hidden=!0,V?Ce():w=null)},X=(0,e.createPresenceLifecycle)({element:l,onExitComplete:we}),Te=()=>{if(u)if(C===null)u.textContent=re,c.setAttribute(`data-placeholder`,``);else{let e=P.find(e=>e.dataset.value===C);u.textContent=e?.dataset.label??e?.textContent?.trim()??C,c.removeAttribute(`data-placeholder`)}},Z=(t,n={})=>{let{skipFocusRestore:r=!1,immediate:i=!1}=n;if(S!==t&&!(m&&t)){if(t){let t=M;M=!1,V=!0,w=document.activeElement,S=!0,(0,e.setAria)(c,`expanded`,!0),z.mount(),l.hidden=!1,Y(`open`),X.enter(),b&&!R&&((0,e.lockScroll)(),R=!0),he(),O=!1;let n=F.findIndex(e=>e.dataset.value===C);n>=0?q(n,!1,!1):J(),K.start(),G(),K.update(),requestAnimationFrame(()=>{if(S&&(G(),K.update(),t&&x&&j!==`touch`&&(k!==0||A!==0))){let e=document.elementFromPoint(k,A)?.closest?.(`[data-slot="select-item"]`);if(e&&!H(e)&&l.contains(e)){let t=I.get(e);t!==void 0&&q(t,!0,!1)}}}),l.focus()}else S=!1,M=!1,k=0,A=0,j=``,(0,e.setAria)(c,`expanded`,!1),Y(`closed`),J(),E=``,O=!1,V=!r,R&&=((0,e.unlockScroll)(),!1),K.stop(),i?(X.cleanup(),we()):X.exit();(0,e.emit)(a,`select:open-change`,{open:S}),se?.(S)}},Q=(t,n=!1)=>{if(C===t&&!n)return;let r=C;C=t,L&&(L.value=t??``),t===null?a.removeAttribute(`data-value`):a.setAttribute(`data-value`,t);for(let n of P)n.dataset.value===t?((0,e.setAria)(n,`selected`,!0),n.setAttribute(`data-selected`,``)):((0,e.setAria)(n,`selected`,!1),n.removeAttribute(`data-selected`));Te(),!n&&r!==t&&((0,e.emit)(a,`select:change`,{value:t}),oe?.(t))},Ee=e=>{if(H(e))return;let t=e.dataset.value;t!==void 0&&(Q(t),Z(!1,{immediate:!0}))},De=e=>{let t=F.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),O=!0,q(T===-1?0:Math.min(T+1,t-1));break;case`ArrowUp`:e.preventDefault(),O=!0,q(T===-1?t-1:Math.max(T-1,0));break;case`Home`:e.preventDefault(),O=!0,q(0);break;case`End`:e.preventDefault(),O=!0,q(t-1);break;case`Enter`:case` `:e.preventDefault(),T>=0&&Ee(F[T]);break;case`Tab`:Z(!1,{skipFocusRestore:!0});break;case`Escape`:e.preventDefault(),Z(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),Oe(e.key.toLowerCase()))}},Oe=e=>{D&&clearTimeout(D),D=setTimeout(()=>{E=``},500),E+=e;let t=F.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(E));if(t===-1&&E.length===1){let n=T+1;for(let r=0;r<F.length;r++){let i=(n+r)%F.length;if((F[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(O=!0,q(t))};(0,e.setAria)(c,`expanded`,!1),l.hidden=!0,ve(),Y(`closed`),he(),Q(C,!0),N.push((0,e.on)(c,`pointerdown`,e=>{k=e.clientX,A=e.clientY,j=e.pointerType,M=!0}),(0,e.on)(c,`click`,()=>{m||Z(!S)}),(0,e.on)(c,`keydown`,e=>{if(!m)switch(e.key){case`Enter`:case` `:case`ArrowDown`:case`ArrowUp`:e.preventDefault(),M=!1,Z(!0);break}})),N.push((0,e.on)(l,`keydown`,De),(0,e.on)(l,`click`,e=>{let t=e.target.closest?.(`[data-slot="select-item"]`);t&&Ee(t)}),(0,e.on)(l,`pointermove`,e=>{if(!x||!pe(e))return;let t=e.target.closest?.(`[data-slot="select-item"]`);if(!(O&&(O=!1,t&&I.get(t)===T)))if(t&&!H(t)){let e=I.get(t);e!==void 0&&e!==T&&q(e,!0)}else Se()}),(0,e.on)(l,`pointerleave`,e=>{!x||!pe(e)||O||Se()})),N.push((0,e.createDismissLayer)({root:a,isOpen:()=>S,onDismiss:()=>Z(!1),closeOnClickOutside:!0,closeOnEscape:!1})),N.push((0,e.on)(a,`select:set`,e=>{let t=e.detail;t?.value!==void 0&&Q(t.value),t?.open!==void 0&&Z(t.open)}));let $={get value(){return C},get isOpen(){return S},select:e=>Q(e),open:()=>Z(!0),close:()=>Z(!1),destroy:()=>{B=!0,D&&clearTimeout(D),K.stop(),X.cleanup(),z.cleanup(),R&&=((0,e.unlockScroll)(),!1),N.forEach(e=>e()),N.length=0,L&&L.parentNode&&L.parentNode.removeChild(L),(0,e.clearRootBinding)(a,i,$)}};return(0,e.setRootBinding)(a,i,$),ne&&Z(!0),$}function o(t=document){let n=[];for(let r of(0,e.getRoots)(t,`select`))(0,e.hasRootBinding)(r,i)||n.push(a(r));return n}exports.create=o,exports.createSelect=a;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{clearRootBinding as e,computeFloatingPosition as t,computeFloatingTransformOrigin as n,createDismissLayer as r,createPortalLifecycle as i,createPositionSync as a,createPresenceLifecycle as o,emit as s,ensureId as c,ensureItemVisibleInContainer as l,focusElement as u,getDataBool as d,getDataEnum as f,getDataNumber as ee,getDataString as p,getPart as m,getParts as te,getRoots as h,hasRootBinding as g,lockScroll as ne,measurePopupContentRect as re,on as _,reuseRootBinding as ie,setAria as v,setRootBinding as ae,unlockScroll as oe}from"@data-slot/core";const se=[`top`,`bottom`],ce=[`start`,`center`,`end`],le=[`item-aligned`,`popper`],y=`@data-slot/select`;function b(h,g={}){let b=ie(h,y,`[@data-slot/select] createSelect() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(b)return b;let x=m(h,`select-trigger`),S=m(h,`select-content`),C=m(h,`select-value`),ue=m(h,`select-positioner`),w=ue&&S&&ue.contains(S)?ue:null,de=m(h,`select-portal`),fe=de&&w&&de.contains(w)?de:null;if(!x||!S)throw Error(`Select requires trigger and content slots`);let pe=g.defaultValue??p(h,`defaultValue`)??null,me=g.defaultOpen??d(h,`defaultOpen`)??!1,he=g.placeholder??p(h,`placeholder`)??(C?p(C,`placeholder`):void 0)??``,T=g.disabled??d(h,`disabled`)??!1,ge=g.required??d(h,`required`)??!1,_e=g.name??p(h,`name`)??null,ve=g.onValueChange,ye=g.onOpenChange,be=(e,t)=>f(S,e,t)??(w?f(w,e,t):void 0)??f(h,e,t),xe=e=>ee(S,e)??(w?ee(w,e):void 0)??ee(h,e),Se=e=>d(S,e)??(w?d(w,e):void 0)??d(h,e),E=g.position??be(`position`,le)??`item-aligned`,Ce=g.side??be(`side`,se)??`bottom`,we=g.align??be(`align`,ce)??`start`,Te=g.sideOffset??xe(`sideOffset`)??4,Ee=g.alignOffset??xe(`alignOffset`)??0,D=g.avoidCollisions??Se(`avoidCollisions`)??!0,O=g.collisionPadding??xe(`collisionPadding`)??8,k=g.lockScroll??d(h,`lockScroll`)??!0,De=g.highlightItemOnHover??d(h,`highlightItemOnHover`)??!0,A=!1,j=pe,M=null,N=-1,P=``,F=null,I=!1,L=0,R=0,Oe=``,z=!1,B=[],V=[],H=[],U=new Map,W=null,G=!1,K=i({content:S,root:h,wrapperSlot:w?void 0:`select-positioner`,container:w??void 0,mountTarget:w?fe??w:void 0}),ke=!1,Ae=!0,q=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,je=e=>e.pointerType!==`touch`,Me=c(x,`select-trigger`),Ne=c(S,`select-content`);x.setAttribute(`role`,`combobox`),x.setAttribute(`aria-haspopup`,`listbox`),x.setAttribute(`aria-controls`,Ne),x.hasAttribute(`type`)||x.setAttribute(`type`,`button`),S.setAttribute(`role`,`listbox`),S.setAttribute(`aria-labelledby`,Me),S.tabIndex=-1;let Pe=document.querySelector(`label[for="${CSS.escape(Me)}"]`);if(Pe){let e=c(Pe,`select-label`),t=x.getAttribute(`aria-labelledby`);x.setAttribute(`aria-labelledby`,t?`${t} ${e}`:e),B.push(_(Pe,`click`,e=>{e.preventDefault(),T||Z(!A)}))}T&&(x.setAttribute(`aria-disabled`,`true`),x.setAttribute(`data-disabled`,``),x instanceof HTMLButtonElement&&(x.disabled=!0)),ge&&x.setAttribute(`aria-required`,`true`),_e&&(W=document.createElement(`input`),W.type=`hidden`,W.name=_e,W.value=j??``,h.appendChild(W));let Fe=()=>{V=te(S,`select-item`);for(let e of V)e.setAttribute(`role`,`option`),e.hasAttribute(`data-disabled`)||e.hasAttribute(`disabled`)?e.setAttribute(`aria-disabled`,`true`):e.removeAttribute(`aria-disabled`),e.tabIndex=-1,e.dataset.value===j?(v(e,`selected`,!0),e.setAttribute(`data-selected`,``)):(v(e,`selected`,!1),e.removeAttribute(`data-selected`));H=V.filter(e=>!q(e)),U=new Map(H.map((e,t)=>[e,t]));let e=te(S,`select-group`);for(let t of e){t.setAttribute(`role`,`group`);let e=m(t,`select-label`);if(e){let n=c(e,`select-label`);t.setAttribute(`aria-labelledby`,n)}}},Ie=()=>m(S,`select-viewport`),Le=()=>Ie()??S,Re=()=>{S.setAttribute(`data-position`,E),S.setAttribute(`data-align-trigger`,E===`item-aligned`?`true`:`false`);let e=Ie();e&&e.setAttribute(`data-position`,E)},ze=(e,t,n)=>{let r=0,i=e;for(;i&&i!==S;){r+=i.offsetTop;let e=i.offsetParent;if(!(e instanceof HTMLElement)){r=NaN;break}i=e}return i===S&&Number.isFinite(r)?r:e.getBoundingClientRect().top-t.top+n.scrollTop},Be=(e,t,n)=>{let r=N>=0?H[N]:void 0,i=V.find(e=>e.dataset.value===j)??r??H[0],a=e.left,o,s=0,c=e.height;return i?(s=ze(i,t,n),c=i.getBoundingClientRect().height||i.offsetHeight||e.height,o=e.top+e.height/2-c/2-s):o=e.top,{x:a,y:o,alignItem:i,itemTopInContent:s,itemHeight:c}},Ve=()=>{let e=K.container,r=h.ownerDocument.defaultView??window,i=x.getBoundingClientRect(),a=Le();S.style.minWidth=`${i.width}px`;let o=re(S),s,c=`bottom`;if(E===`item-aligned`){let e=Be(i,o,a);s={x:e.x,y:e.y};let t=i.top+i.height/2,n=O,l=r.innerHeight-o.height-O,u=e=>D?l<n?n:Math.min(Math.max(e,n),l):e,d=O,f=r.innerWidth-o.width-O;if(s.x=(e=>D?f<d?d:Math.min(Math.max(e,d),f):e)(s.x),e.alignItem){let n=Math.max(0,a.scrollHeight-a.clientHeight),r=n=>e.itemTopInContent+e.itemHeight/2-(t-n);if(n>0){s.y=u(t-o.height/2);let i=Math.min(Math.max(r(s.y),0),n);a.scrollTop=i,s.y=u(t-(e.itemTopInContent-i+e.itemHeight/2)),i=Math.min(Math.max(r(s.y),0),n),a.scrollTop=i,s.y=u(t-(e.itemTopInContent-i+e.itemHeight/2))}else a.scrollTop=0,s.y=u(e.y)}else a.scrollTop=0,s.y=u(e.y);c=s.y<i.top?`top`:`bottom`}else{let e=t({anchorRect:i,contentRect:o,side:Ce,align:we,sideOffset:Te,alignOffset:Ee,avoidCollisions:D,collisionPadding:O,allowedSides:se});s={x:e.x,y:e.y},c=e.side}let l=E===`item-aligned`?`center`:we,u=n({side:c,align:l,anchorRect:i,popupX:s.x,popupY:s.y});k?(e.style.position=`fixed`,e.style.top=`0px`,e.style.left=`0px`,e.style.transform=`translate3d(${s.x}px, ${s.y}px, 0)`):(e.style.position=`absolute`,e.style.top=`0px`,e.style.left=`0px`,e.style.transform=`translate3d(${s.x+r.scrollX}px, ${s.y+r.scrollY}px, 0)`),e.style.setProperty(`--transform-origin`,u),e.style.willChange=`transform`,e.style.margin=`0`,Re(),S.setAttribute(`data-side`,c),S.setAttribute(`data-align`,l),e!==S&&(e.setAttribute(`data-side`,c),e.setAttribute(`data-align`,l))},J=a({observedElements:[x,S],isActive:()=>A,ancestorScroll:k,onUpdate:Ve,ignoreScrollTarget:e=>e instanceof Node&&S.contains(e)}),Y=(e,t=!0,n=!0)=>{let r=Le();for(let i=0;i<H.length;i++){let a=H[i];i===e?(a.setAttribute(`data-highlighted`,``),n&&l(a,r),t&&a.focus()):a.removeAttribute(`data-highlighted`)}N=e},He=()=>{for(let e of V)e.removeAttribute(`data-highlighted`);N=-1},Ue=()=>{He(),u(S)},We=e=>{h.setAttribute(`data-state`,e),x.setAttribute(`data-state`,e),S.setAttribute(`data-state`,e),e===`open`?(h.setAttribute(`data-open`,``),x.setAttribute(`data-open`,``),S.setAttribute(`data-open`,``),h.removeAttribute(`data-closed`),x.removeAttribute(`data-closed`),S.removeAttribute(`data-closed`)):(h.setAttribute(`data-closed`,``),x.setAttribute(`data-closed`,``),S.setAttribute(`data-closed`,``),h.removeAttribute(`data-open`),x.removeAttribute(`data-open`),S.removeAttribute(`data-open`))},Ge=()=>{requestAnimationFrame(()=>{M&&document.contains(M)?u(M):x&&document.contains(x)&&u(x),M=null})},Ke=()=>{ke||(K.restore(),S.hidden=!0,Ae?Ge():M=null)},X=o({element:S,onExitComplete:Ke}),qe=()=>{if(C)if(j===null)C.textContent=he,x.setAttribute(`data-placeholder`,``);else{let e=V.find(e=>e.dataset.value===j);C.textContent=e?.dataset.label??e?.textContent?.trim()??j,x.removeAttribute(`data-placeholder`)}},Z=(e,t={})=>{let{skipFocusRestore:n=!1,immediate:r=!1}=t;if(A!==e&&!(T&&e)){if(e){let e=z;z=!1,Ae=!0,M=document.activeElement,A=!0,v(x,`expanded`,!0),K.mount(),S.hidden=!1,We(`open`),X.enter(),k&&!G&&(ne(),G=!0),Fe(),I=!1;let t=H.findIndex(e=>e.dataset.value===j);t>=0?Y(t,!1,!1):He(),J.start(),Ve(),J.update(),requestAnimationFrame(()=>{if(A&&(Ve(),J.update(),e&&De&&Oe!==`touch`&&(L!==0||R!==0))){let e=document.elementFromPoint(L,R)?.closest?.(`[data-slot="select-item"]`);if(e&&!q(e)&&S.contains(e)){let t=U.get(e);t!==void 0&&Y(t,!0,!1)}}}),S.focus()}else A=!1,z=!1,L=0,R=0,Oe=``,v(x,`expanded`,!1),We(`closed`),He(),P=``,I=!1,Ae=!n,G&&=(oe(),!1),J.stop(),r?(X.cleanup(),Ke()):X.exit();s(h,`select:open-change`,{open:A}),ye?.(A)}},Q=(e,t=!1)=>{if(j===e&&!t)return;let n=j;j=e,W&&(W.value=e??``),e===null?h.removeAttribute(`data-value`):h.setAttribute(`data-value`,e);for(let t of V)t.dataset.value===e?(v(t,`selected`,!0),t.setAttribute(`data-selected`,``)):(v(t,`selected`,!1),t.removeAttribute(`data-selected`));qe(),!t&&n!==e&&(s(h,`select:change`,{value:e}),ve?.(e))},Je=e=>{if(q(e))return;let t=e.dataset.value;t!==void 0&&(Q(t),Z(!1,{immediate:!0}))},Ye=e=>{let t=H.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),I=!0,Y(N===-1?0:Math.min(N+1,t-1));break;case`ArrowUp`:e.preventDefault(),I=!0,Y(N===-1?t-1:Math.max(N-1,0));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&&Je(H[N]);break;case`Tab`:Z(!1,{skipFocusRestore:!0});break;case`Escape`:e.preventDefault(),Z(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),Xe(e.key.toLowerCase()))}},Xe=e=>{F&&clearTimeout(F),F=setTimeout(()=>{P=``},500),P+=e;let t=H.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(P));if(t===-1&&P.length===1){let n=N+1;for(let r=0;r<H.length;r++){let i=(n+r)%H.length;if((H[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(I=!0,Y(t))};v(x,`expanded`,!1),S.hidden=!0,Re(),We(`closed`),Fe(),Q(j,!0),B.push(_(x,`pointerdown`,e=>{L=e.clientX,R=e.clientY,Oe=e.pointerType,z=!0}),_(x,`click`,()=>{T||Z(!A)}),_(x,`keydown`,e=>{if(!T)switch(e.key){case`Enter`:case` `:case`ArrowDown`:case`ArrowUp`:e.preventDefault(),z=!1,Z(!0);break}})),B.push(_(S,`keydown`,Ye),_(S,`click`,e=>{let t=e.target.closest?.(`[data-slot="select-item"]`);t&&Je(t)}),_(S,`pointermove`,e=>{if(!De||!je(e))return;let t=e.target.closest?.(`[data-slot="select-item"]`);if(!(I&&(I=!1,t&&U.get(t)===N)))if(t&&!q(t)){let e=U.get(t);e!==void 0&&e!==N&&Y(e,!0)}else Ue()}),_(S,`pointerleave`,e=>{!De||!je(e)||I||Ue()})),B.push(r({root:h,isOpen:()=>A,onDismiss:()=>Z(!1),closeOnClickOutside:!0,closeOnEscape:!1})),B.push(_(h,`select:set`,e=>{let t=e.detail;t?.value!==void 0&&Q(t.value),t?.open!==void 0&&Z(t.open)}));let $={get value(){return j},get isOpen(){return A},select:e=>Q(e),open:()=>Z(!0),close:()=>Z(!1),destroy:()=>{ke=!0,F&&clearTimeout(F),J.stop(),X.cleanup(),K.cleanup(),G&&=(oe(),!1),B.forEach(e=>e()),B.length=0,W&&W.parentNode&&W.parentNode.removeChild(W),e(h,y,$)}};return ae(h,y,$),me&&Z(!0),$}function x(e=document){let t=[];for(let n of h(e,`select`))g(n,y)||t.push(b(n));return t}export{x as create,b as createSelect};
|
|
1
|
+
import{clearRootBinding as e,computeFloatingPosition as t,computeFloatingTransformOrigin as n,createDismissLayer as r,createPortalLifecycle as i,createPositionSync as a,createPresenceLifecycle as o,emit as s,ensureId as c,ensureItemVisibleInContainer as l,focusElement as u,getDataBool as d,getDataEnum as f,getDataNumber as ee,getDataString as p,getPart as m,getParts as te,getRoots as h,hasRootBinding as g,lockScroll as ne,measurePopupContentRect as re,on as _,reuseRootBinding as ie,setAria as v,setRootBinding as ae,unlockScroll as oe}from"@data-slot/core";const se=[`top`,`bottom`],ce=[`start`,`center`,`end`],le=[`item-aligned`,`popper`],y=`@data-slot/select`;function b(h,g={}){let b=ie(h,y,`[@data-slot/select] createSelect() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(b)return b;let x=m(h,`select-trigger`),S=m(h,`select-content`),C=m(h,`select-value`),ue=m(h,`select-positioner`),w=ue&&S&&ue.contains(S)?ue:null,de=m(h,`select-portal`),fe=de&&w&&de.contains(w)?de:null;if(!x||!S)throw Error(`Select requires trigger and content slots`);let pe=g.defaultValue??p(h,`defaultValue`)??null,me=g.defaultOpen??d(h,`defaultOpen`)??!1,he=g.placeholder??p(h,`placeholder`)??(C?p(C,`placeholder`):void 0)??``,T=g.disabled??d(h,`disabled`)??!1,ge=g.required??d(h,`required`)??!1,_e=g.name??p(h,`name`)??null,ve=g.onValueChange,ye=g.onOpenChange,E=(e,t)=>f(S,e,t)??(w?f(w,e,t):void 0)??f(h,e,t),D=e=>ee(S,e)??(w?ee(w,e):void 0)??ee(h,e),be=e=>d(S,e)??(w?d(w,e):void 0)??d(h,e),O=g.position??E(`position`,le)??`item-aligned`,xe=g.side??E(`side`,se)??`bottom`,Se=g.align??E(`align`,ce)??`start`,Ce=g.sideOffset??D(`sideOffset`)??4,we=g.alignOffset??D(`alignOffset`)??0,Te=g.avoidCollisions??be(`avoidCollisions`)??!0,k=g.collisionPadding??D(`collisionPadding`)??8,Ee=g.lockScroll??d(h,`lockScroll`)??!0,De=g.highlightItemOnHover??d(h,`highlightItemOnHover`)??!0,A=!1,j=pe,M=null,N=-1,P=``,F=null,I=!1,L=0,R=0,Oe=``,z=!1,B=[],V=[],H=[],U=new Map,W=null,G=!1,K=i({content:S,root:h,wrapperSlot:w?void 0:`select-positioner`,container:w??void 0,mountTarget:w?fe??w:void 0}),ke=!1,Ae=!0,q=e=>e.hasAttribute(`disabled`)||e.hasAttribute(`data-disabled`)||e.getAttribute(`aria-disabled`)===`true`,je=e=>e.pointerType!==`touch`,Me=c(x,`select-trigger`),Ne=c(S,`select-content`);x.setAttribute(`role`,`combobox`),x.setAttribute(`aria-haspopup`,`listbox`),x.setAttribute(`aria-controls`,Ne),x.hasAttribute(`type`)||x.setAttribute(`type`,`button`),S.setAttribute(`role`,`listbox`),S.setAttribute(`aria-labelledby`,Me),S.tabIndex=-1;let Pe=document.querySelector(`label[for="${CSS.escape(Me)}"]`);if(Pe){let e=c(Pe,`select-label`),t=x.getAttribute(`aria-labelledby`);x.setAttribute(`aria-labelledby`,t?`${t} ${e}`:e),B.push(_(Pe,`click`,e=>{e.preventDefault(),T||Z(!A)}))}T&&(x.setAttribute(`aria-disabled`,`true`),x.setAttribute(`data-disabled`,``),x instanceof HTMLButtonElement&&(x.disabled=!0)),ge&&x.setAttribute(`aria-required`,`true`),_e&&(W=document.createElement(`input`),W.type=`hidden`,W.name=_e,W.value=j??``,h.appendChild(W));let Fe=()=>{V=te(S,`select-item`);for(let e of V)e.setAttribute(`role`,`option`),e.hasAttribute(`data-disabled`)||e.hasAttribute(`disabled`)?e.setAttribute(`aria-disabled`,`true`):e.removeAttribute(`aria-disabled`),e.tabIndex=-1,e.dataset.value===j?(v(e,`selected`,!0),e.setAttribute(`data-selected`,``)):(v(e,`selected`,!1),e.removeAttribute(`data-selected`));H=V.filter(e=>!q(e)),U=new Map(H.map((e,t)=>[e,t]));let e=te(S,`select-group`);for(let t of e){t.setAttribute(`role`,`group`);let e=m(t,`select-label`);if(e){let n=c(e,`select-label`);t.setAttribute(`aria-labelledby`,n)}}},Ie=()=>m(S,`select-viewport`),Le=()=>Ie()??S,Re=()=>{S.setAttribute(`data-position`,O),S.setAttribute(`data-align-trigger`,O===`item-aligned`?`true`:`false`);let e=Ie();e&&e.setAttribute(`data-position`,O)},ze=(e,t,n,r)=>{let i=0,a=e;for(;a&&a!==t;){i+=a.offsetTop;let e=a.offsetParent;if(!(e instanceof HTMLElement)){i=NaN;break}e!==t&&(i+=e.clientTop),a=e}return a===t&&Number.isFinite(i)?i:e.getBoundingClientRect().top-n-t.clientTop+r},Be=(e,t,n)=>ze(e,S,t.top,n.scrollTop),Ve=(e,t,n)=>{let r=N>=0?H[N]:void 0,i=V.find(e=>e.dataset.value===j)??r??H[0],a=e.left,o,s=0,c=e.height;return i?(s=Be(i,t,n),c=i.getBoundingClientRect().height||i.offsetHeight||e.height,o=e.top+e.height/2-S.clientTop-s-c/2):o=e.top,{x:a,y:o,alignItem:i,itemTopInContent:s,itemHeight:c}},He=()=>{let e=K.container,r=h.ownerDocument.defaultView??window,i=x.getBoundingClientRect(),a=Le();S.style.minWidth=`${i.width}px`;let o=re(S),s,c=`bottom`;if(O===`item-aligned`){let e=Ve(i,o,a);s={x:e.x,y:e.y};let t=i.top+i.height/2,n=k,l=r.innerHeight-o.height-k,u=e=>Te?l<n?n:Math.min(Math.max(e,n),l):e,d=k,f=r.innerWidth-o.width-k;if(s.x=(e=>Te?f<d?d:Math.min(Math.max(e,d),f):e)(s.x),e.alignItem){let n=Math.max(0,a.scrollHeight-a.clientHeight),r=e=>t-(e+S.clientTop),i=t=>e.itemTopInContent+e.itemHeight/2-r(t);if(n>0){s.y=u(t-o.height/2);let r=Math.min(Math.max(i(s.y),0),n);a.scrollTop=r,s.y=u(t-(S.clientTop+e.itemTopInContent-r+e.itemHeight/2)),r=Math.min(Math.max(i(s.y),0),n),a.scrollTop=r,s.y=u(t-(S.clientTop+e.itemTopInContent-r+e.itemHeight/2))}else a.scrollTop=0,s.y=u(e.y)}else a.scrollTop=0,s.y=u(e.y);c=s.y<i.top?`top`:`bottom`}else{let e=t({anchorRect:i,contentRect:o,side:xe,align:Se,sideOffset:Ce,alignOffset:we,avoidCollisions:Te,collisionPadding:k,allowedSides:se});s={x:e.x,y:e.y},c=e.side}let l=O===`item-aligned`?`center`:Se,u=n({side:c,align:l,anchorRect:i,popupX:s.x,popupY:s.y});Ee?(e.style.position=`fixed`,e.style.top=`0px`,e.style.left=`0px`,e.style.transform=`translate3d(${s.x}px, ${s.y}px, 0)`):(e.style.position=`absolute`,e.style.top=`0px`,e.style.left=`0px`,e.style.transform=`translate3d(${s.x+r.scrollX}px, ${s.y+r.scrollY}px, 0)`),e.style.setProperty(`--transform-origin`,u),e.style.willChange=`transform`,e.style.margin=`0`,Re(),S.setAttribute(`data-side`,c),S.setAttribute(`data-align`,l),e!==S&&(e.setAttribute(`data-side`,c),e.setAttribute(`data-align`,l))},J=a({observedElements:[x,S],isActive:()=>A,ancestorScroll:Ee,onUpdate:He,ignoreScrollTarget:e=>e instanceof Node&&S.contains(e)}),Y=(e,t=!0,n=!0)=>{let r=Le();for(let i=0;i<H.length;i++){let a=H[i];i===e?(a.setAttribute(`data-highlighted`,``),n&&l(a,r),t&&a.focus()):a.removeAttribute(`data-highlighted`)}N=e},Ue=()=>{for(let e of V)e.removeAttribute(`data-highlighted`);N=-1},We=()=>{Ue(),u(S)},Ge=e=>{h.setAttribute(`data-state`,e),x.setAttribute(`data-state`,e),S.setAttribute(`data-state`,e),e===`open`?(h.setAttribute(`data-open`,``),x.setAttribute(`data-open`,``),S.setAttribute(`data-open`,``),h.removeAttribute(`data-closed`),x.removeAttribute(`data-closed`),S.removeAttribute(`data-closed`)):(h.setAttribute(`data-closed`,``),x.setAttribute(`data-closed`,``),S.setAttribute(`data-closed`,``),h.removeAttribute(`data-open`),x.removeAttribute(`data-open`),S.removeAttribute(`data-open`))},Ke=()=>{requestAnimationFrame(()=>{M&&document.contains(M)?u(M):x&&document.contains(x)&&u(x),M=null})},qe=()=>{ke||(K.restore(),S.hidden=!0,Ae?Ke():M=null)},X=o({element:S,onExitComplete:qe}),Je=()=>{if(C)if(j===null)C.textContent=he,x.setAttribute(`data-placeholder`,``);else{let e=V.find(e=>e.dataset.value===j);C.textContent=e?.dataset.label??e?.textContent?.trim()??j,x.removeAttribute(`data-placeholder`)}},Z=(e,t={})=>{let{skipFocusRestore:n=!1,immediate:r=!1}=t;if(A!==e&&!(T&&e)){if(e){let e=z;z=!1,Ae=!0,M=document.activeElement,A=!0,v(x,`expanded`,!0),K.mount(),S.hidden=!1,Ge(`open`),X.enter(),Ee&&!G&&(ne(),G=!0),Fe(),I=!1;let t=H.findIndex(e=>e.dataset.value===j);t>=0?Y(t,!1,!1):Ue(),J.start(),He(),J.update(),requestAnimationFrame(()=>{if(A&&(He(),J.update(),e&&De&&Oe!==`touch`&&(L!==0||R!==0))){let e=document.elementFromPoint(L,R)?.closest?.(`[data-slot="select-item"]`);if(e&&!q(e)&&S.contains(e)){let t=U.get(e);t!==void 0&&Y(t,!0,!1)}}}),S.focus()}else A=!1,z=!1,L=0,R=0,Oe=``,v(x,`expanded`,!1),Ge(`closed`),Ue(),P=``,I=!1,Ae=!n,G&&=(oe(),!1),J.stop(),r?(X.cleanup(),qe()):X.exit();s(h,`select:open-change`,{open:A}),ye?.(A)}},Q=(e,t=!1)=>{if(j===e&&!t)return;let n=j;j=e,W&&(W.value=e??``),e===null?h.removeAttribute(`data-value`):h.setAttribute(`data-value`,e);for(let t of V)t.dataset.value===e?(v(t,`selected`,!0),t.setAttribute(`data-selected`,``)):(v(t,`selected`,!1),t.removeAttribute(`data-selected`));Je(),!t&&n!==e&&(s(h,`select:change`,{value:e}),ve?.(e))},Ye=e=>{if(q(e))return;let t=e.dataset.value;t!==void 0&&(Q(t),Z(!1,{immediate:!0}))},Xe=e=>{let t=H.length;if(t!==0)switch(e.key){case`ArrowDown`:e.preventDefault(),I=!0,Y(N===-1?0:Math.min(N+1,t-1));break;case`ArrowUp`:e.preventDefault(),I=!0,Y(N===-1?t-1:Math.max(N-1,0));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&&Ye(H[N]);break;case`Tab`:Z(!1,{skipFocusRestore:!0});break;case`Escape`:e.preventDefault(),Z(!1);break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),Ze(e.key.toLowerCase()))}},Ze=e=>{F&&clearTimeout(F),F=setTimeout(()=>{P=``},500),P+=e;let t=H.findIndex(e=>(e.textContent?.trim().toLowerCase()||``).startsWith(P));if(t===-1&&P.length===1){let n=N+1;for(let r=0;r<H.length;r++){let i=(n+r)%H.length;if((H[i].textContent?.trim().toLowerCase()||``).startsWith(e)){t=i;break}}}t!==-1&&(I=!0,Y(t))};v(x,`expanded`,!1),S.hidden=!0,Re(),Ge(`closed`),Fe(),Q(j,!0),B.push(_(x,`pointerdown`,e=>{L=e.clientX,R=e.clientY,Oe=e.pointerType,z=!0}),_(x,`click`,()=>{T||Z(!A)}),_(x,`keydown`,e=>{if(!T)switch(e.key){case`Enter`:case` `:case`ArrowDown`:case`ArrowUp`:e.preventDefault(),z=!1,Z(!0);break}})),B.push(_(S,`keydown`,Xe),_(S,`click`,e=>{let t=e.target.closest?.(`[data-slot="select-item"]`);t&&Ye(t)}),_(S,`pointermove`,e=>{if(!De||!je(e))return;let t=e.target.closest?.(`[data-slot="select-item"]`);if(!(I&&(I=!1,t&&U.get(t)===N)))if(t&&!q(t)){let e=U.get(t);e!==void 0&&e!==N&&Y(e,!0)}else We()}),_(S,`pointerleave`,e=>{!De||!je(e)||I||We()})),B.push(r({root:h,isOpen:()=>A,onDismiss:()=>Z(!1),closeOnClickOutside:!0,closeOnEscape:!1})),B.push(_(h,`select:set`,e=>{let t=e.detail;t?.value!==void 0&&Q(t.value),t?.open!==void 0&&Z(t.open)}));let $={get value(){return j},get isOpen(){return A},select:e=>Q(e),open:()=>Z(!0),close:()=>Z(!1),destroy:()=>{ke=!0,F&&clearTimeout(F),J.stop(),X.cleanup(),K.cleanup(),G&&=(oe(),!1),B.forEach(e=>e()),B.length=0,W&&W.parentNode&&W.parentNode.removeChild(W),e(h,y,$)}};return ae(h,y,$),me&&Z(!0),$}function x(e=document){let t=[];for(let n of h(e,`select`))g(n,y)||t.push(b(n));return t}export{x as create,b as createSelect};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-slot/select",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.137",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -36,6 +36,6 @@
|
|
|
36
36
|
],
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@data-slot/core": "0.2.
|
|
39
|
+
"@data-slot/core": "0.2.137"
|
|
40
40
|
}
|
|
41
41
|
}
|