vlist 2.7.2 → 3.0.0-next.1
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.github.md +144 -35
- package/README.md +76 -34
- package/dist/config.d.ts +10 -2
- package/dist/config.js +1 -1
- package/dist/constants.d.ts +2 -12
- package/dist/core/adapter.d.ts +7 -1
- package/dist/core/create.d.ts +16 -4
- package/dist/core/scroll-source.d.ts +5 -0
- package/dist/core/scroll.d.ts +3 -1
- package/dist/core/types.d.ts +7 -2
- package/dist/index.d.ts +0 -3
- package/dist/index.js +1 -1
- package/dist/internals.js +1 -1
- package/dist/native.d.ts +11 -0
- package/dist/native.js +1 -0
- package/dist/plugins/autosize/plugin.d.ts +1 -1
- package/dist/plugins/masonry/renderer.d.ts +3 -1
- package/dist/plugins/scrollbar/scrollbar.d.ts +17 -3
- package/dist/plugins/table/renderer.d.ts +3 -1
- package/dist/size.json +1 -1
- package/dist/synthetic.d.ts +4 -8
- package/dist/synthetic.js +1 -1
- package/dist/types.d.ts +2 -26
- package/dist/vlist-table.css +1 -1
- package/dist/vlist.css +1 -1
- package/package.json +6 -1
- package/dist/plugins/scale/index.d.ts +0 -2
- package/dist/plugins/scale/plugin.d.ts +0 -7
package/dist/synthetic.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function Be(e){let t=e.querySelectorAll("a[href],button,input,select,textarea,[tabindex]");for(let n=0;n<t.length;n++)t[n].setAttribute("tabindex","-1")}function Pe(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function ct(e,t,n,r){let l=n?`${t} ${t}--horizontal`:t,u=n?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",i=n?"position:relative;height:100%;overflow-anchor:none":"position:relative;width:100%;overflow-anchor:none",d=' role="list"';if(r)d+=` aria-label="${r.replace(/"/g,""")}"`;if(n)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${l}"><div class="${t}-viewport" style="${u}" tabindex="-1"><div class="${t}-content" style="${i}"${d}></div></div></div>`);let T=e.lastElementChild,x=T.firstElementChild,F=x.firstElementChild,I=document.createElement("div");return I.className=`${t}-live`,I.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",I.setAttribute("aria-live","polite"),I.setAttribute("aria-atomic","true"),I.setAttribute("role","status"),T.appendChild(I),{root:T,viewport:x,content:F,liveRegion:I}}var Ce=3,ut="vlist";var We=16000000,le=150,Ee=1,pe=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,dt=300,mt=2,ft=1.5,pt=0.25,bt=0.75;var Ae="__placeholder_";var Me={top:0,right:0,bottom:0,left:0},vt=(e)=>{if(e==null)return Me;if(typeof e==="number")return e===0?Me:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[u,i]=e;return u===0&&i===0?Me:{top:u,right:i,bottom:u,left:i}}let[t,n,r,l]=e;return t===0&&n===0&&r===0&&l===0?Me:{top:t,right:n,bottom:r,left:l}},gt=(e,t)=>t?e.left+e.right:e.top+e.bottom,ht=(e,t)=>t?e.top+e.bottom:e.left+e.right;function St(e){let t={visibleIndices:new Int32Array(e),visibleOffsets:new Float64Array(e),visibleSizes:new Float64Array(e),visibleCount:0,startIndex:0,totalSize:0,capacity:e,scrollPosition:0,prevScrollPosition:0,scrollDirection:0,baseOffset:0,prevBaseOffset:0,containerSize:0,crossSize:0,totalItems:0,prevRangeStart:0,prevRangeEnd:-1,renderPending:!1,initialized:!1,destroyed:!1,prevAriaTotal:-1,resizeCapacity(n,r,l=Ce){if(r<=0||n<=0)return;let u=Math.ceil(n/r)+l*2;if(u<=t.capacity)return;let i=u+8,d=new Int32Array(i),T=new Float64Array(i),x=new Float64Array(i);d.set(t.visibleIndices),T.set(t.visibleOffsets),x.set(t.visibleSizes),t.visibleIndices=d,t.visibleOffsets=T,t.visibleSizes=x,t.capacity=i},clear(){t.visibleCount=0,t.startIndex=0}};return t}var $t=(e,t)=>{let n=t;return{getOffset:(r)=>r*e,getSize:(r)=>e,indexAtOffset:(r)=>{if(n===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(r/e),n-1))},getTotalSize:()=>n*e,getTotal:()=>n,rebuild:(r)=>{n=r},isVariable:()=>!1}},Ut=(e,t)=>{let n=t,r=new Float64Array(0),l=(i)=>{n=i,r=new Float64Array(i+1),r[0]=0;for(let d=0;d<i;d++)r[d+1]=r[d]+e(d)};l(t);let u=(i)=>{if(n===0)return 0;if(i<=0)return 0;if(i>=r[n])return n-1;let d=0,T=n-1;while(d<T){let x=d+T+1>>>1;if(r[x]<=i)d=x;else T=x-1}return d};return{getOffset:(i)=>{if(i<=0)return 0;if(i>=n)return r[n];return r[i]},getSize:(i)=>e(i),indexAtOffset:(i)=>u(i),getTotalSize:()=>r[n]??0,getTotal:()=>n,rebuild:(i)=>l(i),isVariable:()=>!0}},ze=(e,t)=>{if(typeof e==="number")return $t(e,t);return Ut(e,t)};function Et(e){let t=[],n=`${e}-item`,r=document.createElement("div");return r.className=n,{acquire(){if(t.length>0)return t.pop();return r.cloneNode(!1)},release(l){if(l.className=n,l.removeAttribute("style"),l.removeAttribute("id"),l.removeAttribute("role"),l.removeAttribute("aria-selected"),l.removeAttribute("aria-posinset"),l.removeAttribute("aria-setsize"),l.removeAttribute("data-index"),l.removeAttribute("data-id"),l.textContent="",t.length<100)t.push(l)},get size(){return t.length},clear(){t.length=0}}}function yt(e){let{state:t,viewport:n,isX:r,wheelEnabled:l,onFrame:u,onIdle:i}=e,d=e.idleTimeout||le,T=e.scrollTarget??n,x=null,F=null;function I(){let c=r?n.scrollLeft:n.scrollTop;if(Math.abs(c-t.scrollPosition)<0.5)return;t.prevScrollPosition=t.scrollPosition,t.scrollPosition=c,t.scrollDirection=c>t.prevScrollPosition?1:c<t.prevScrollPosition?-1:0,u(),w()}function v(c){let H;if(r){if(Math.abs(c.deltaX)>Math.abs(c.deltaY))return;let b=n.scrollLeft,P=n.scrollWidth-n.clientWidth;if(H=Math.max(0,Math.min(b+c.deltaY*Ee,P)),Math.abs(H-b)<1)return;c.preventDefault(),n.scrollLeft=H}else{let b=n.scrollWidth>n.clientWidth;if(b&&Math.abs(c.deltaX)>Math.abs(c.deltaY))return;if(b&&c.deltaX!==0)c.preventDefault(),n.scrollLeft+=c.deltaX;let P=n.scrollTop,M=n.scrollHeight-n.clientHeight;if(H=Math.max(0,Math.min(P+c.deltaY*Ee,M)),Math.abs(H-P)<1)return;c.preventDefault(),n.scrollTop=H}t.prevScrollPosition=t.scrollPosition,t.scrollPosition=H,t.scrollDirection=H>t.prevScrollPosition?1:-1,u(),w()}function w(){if(x!==null)clearTimeout(x);x=setTimeout(()=>{x=null,t.scrollDirection=0,i()},d)}function _(){if(F!==null)cancelAnimationFrame(F),F=null}function k(c,H,b,P=pe,M){_();let a=t.scrollPosition,S=typeof c==="function"?c:()=>c,R=S();if(Math.abs(R-a)<1){if(b)b(R);else if(r)n.scrollLeft=R;else n.scrollTop=R;M?.();return}let C=performance.now();function z(p){R=S();let B=p-C,y=Math.min(B/H,1),E=a+(R-a)*P(y);if(b)b(E);else if(r)n.scrollLeft=E;else n.scrollTop=E;if(!b)t.scrollPosition=E;if(u(),y<1)F=requestAnimationFrame(z);else F=null,w(),M?.()}F=requestAnimationFrame(z)}return{attach(){if(T.addEventListener("scroll",I,{passive:!0}),l)T.addEventListener("wheel",v,{passive:!1})},detach(){if(T.removeEventListener("scroll",I),l)T.removeEventListener("wheel",v);if(_(),x!==null)clearTimeout(x),x=null},cancelScroll:_,smoothScrollTo:k}}function be(e,t,n){if(e<t)return t;if(e>n)return n;return e}function xt(e){let{state:t,viewport:n,content:r,isX:l,wheelEnabled:u,onFrame:i,onIdle:d,mainAxisPadding:T}=e,x=e.idleTimeout||le,F=e.runwayFactor??mt,I=e.wrap??null,v=I!==null,w=e.scrollTarget??n,_=0,k=0,c=0,H=null,b=null;function P(){return l?n.scrollLeft:n.scrollTop}function M(h){if(l)n.scrollLeft=h;else n.scrollTop=h}function a(h){let f=v?h:be(h,0,k);t.prevScrollPosition=t.scrollPosition,t.scrollPosition=f,t.scrollDirection=f>t.prevScrollPosition?1:f<t.prevScrollPosition?-1:0;let L=_/2;if(v){t.baseOffset=f-L,M(L);return}let A=be(f-L,0,c);t.baseOffset=A,M(be(f-A,0,_))}function S(h){a(h),i(),B()}function R(){let h=P(),f=t.baseOffset+h;if(Math.abs(f-t.scrollPosition)<0.5)return;if(t.prevScrollPosition=t.scrollPosition,t.scrollPosition=f,t.scrollDirection=f>t.prevScrollPosition?1:f<t.prevScrollPosition?-1:0,C(h),v)z();i(),B()}function C(h){let f=_*pt,L=_*bt,A=_/2;if(v){if(h>=f&&h<=L)return;t.baseOffset=t.scrollPosition-A,M(A);return}if(c<=0)return;let O=t.baseOffset,K=h<f&&O>0,Q=h>L&&O<c;if(!K&&!Q)return;let G=t.scrollPosition,X=be(G-A,0,c);if(X===O)return;t.baseOffset=X,M(be(G-X,0,_))}function z(){let h=I.lapSize();if(h<=0)return;let f=t.scrollPosition-I.home(),L=Math.trunc(f/h);if(Math.abs(L)<I.thresholdLaps)return;let A=L*h;t.scrollPosition-=A,t.prevScrollPosition-=A,t.baseOffset-=A}function p(h){let f;if(l)if(Math.abs(h.deltaX)>Math.abs(h.deltaY)){if(!v)return;f=h.deltaX}else f=h.deltaY;else{let K=n.scrollWidth>n.clientWidth;if(K&&Math.abs(h.deltaX)>Math.abs(h.deltaY))return;if(K&&h.deltaX!==0)h.preventDefault(),n.scrollLeft+=h.deltaX;f=h.deltaY}let L=t.scrollPosition,A=L+f*Ee,O=v?A:be(A,0,k);if(Math.abs(O-L)<1)return;if(h.preventDefault(),S(O),v)z()}function B(){if(H!==null)clearTimeout(H);H=setTimeout(()=>{H=null,t.scrollDirection=0,d()},x)}function y(){if(b!==null)cancelAnimationFrame(b),b=null}function E(h,f,L,A=pe,O){y();let K=t.scrollPosition,Q=typeof h==="function"?h:()=>h,G=Q();if(Math.abs(G-K)<1){S(G),O?.();return}let X=performance.now();function te(q){G=Q();let ne=Math.min((q-X)/f,1);if(a(K+(G-K)*A(ne)),i(),ne<1)b=requestAnimationFrame(te);else b=null,B(),O?.()}b=requestAnimationFrame(te)}function N(h){let f=t.containerSize,L=h+T,A=f*F,O=v?A:Math.min(L,A);_=Math.max(0,O-f),k=Math.max(0,L-f),c=Math.max(0,L-O),t.totalSize=h,r.style[l?"width":"height"]=O+"px",a(t.scrollPosition)}return{attach(){if(w.addEventListener("scroll",R,{passive:!0}),u)w.addEventListener("wheel",p,{passive:!1})},detach(){if(w.removeEventListener("scroll",R),u)w.removeEventListener("wheel",p);if(y(),H!==null)clearTimeout(H),H=null},cancelScroll:y,smoothScrollTo:E,setLogical:S,getLogical(){return t.scrollPosition},getMaxLogical(){return k},refresh:N}}function Kt(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let r=t<=0?0:t,l=e.indexAtOffset(r),u=r-e.getOffset(l);return{index:l,offsetPx:u>0?u:0}}function Yt(e,t){let n=Xt(e,t);return e.getOffset(n.index)+n.offsetPx}function Xt(e,t){let n=e.getTotal();if(n<=0)return{index:0,offsetPx:0};let{index:r,offsetPx:l}=t;if(r<0)return{index:0,offsetPx:0};if(r>n-1)r=n-1;while(l>0&&r<n-1){let u=e.getSize(r);if(l<u)break;l-=u,r++}while(l<0&&r>0)r--,l+=e.getSize(r);if(l<0)l=0;return{index:r,offsetPx:l}}function Tt(e){let{sizeCache:t,getPixel:n,setPixel:r,getContainerSize:l}=e;function u(){let d=t.getTotalSize()-l();return d>0?d:0}function i(d){if(d<=0)return 0;let T=u();return d>T?T:d}return{getLogical(){return Kt(t,n())},setLogical(d){r(i(Yt(t,d)))},getPixelEquivalent(){return n()},setPixelEquivalent(d){r(i(d))},getMaxPixelEquivalent:u,scrollByPx(d){r(i(n()+d))}}}var ye=[],Gt={calculate:ye,commit:ye,afterScroll:ye,idle:ye,resize:ye};function It(e){if(e.length===0)return Gt;let t=[],n=[],r=[],l=[],u=[];for(let i=0;i<e.length;i++){let d=e[i].hooks;if(d===void 0)continue;if(d.onCalculate!==void 0)t.push(d.onCalculate);if(d.onCommit!==void 0)n.push(d.onCommit);if(d.onAfterScroll!==void 0)r.push(d.onAfterScroll);if(d.onIdle!==void 0)l.push(d.onIdle);if(d.onResize!==void 0)u.push(d.onResize)}return{calculate:t,commit:n,afterScroll:r,idle:l,resize:u}}function Lt(e,t){for(let n=0;n<e.length;n++)e[n](t)}function Pt(e,t){for(let n=0;n<e.length;n++)e[n](t)}function $e(e,t,n){for(let r=0;r<e.length;r++)e[r](t,n)}function Ct(e){for(let t=0;t<e.length;t++)e[t]()}function At(e,t,n){for(let r=0;r<e.length;r++)e[r](t,n)}function Mt(e,t,n,r,l,u,i,d){let T=r!==0||l!==0;return{prefix:e,selectedClass:`${e}-item--selected`,focusedClass:`${e}-item--focused`,placeholderClass:`${e}-item--placeholder`,replacedClass:`${e}-item--replaced`,translateProp:t?"translateX(":"translateY(",sizeProp:t?"width":"height",itemRole:"listitem",interactive:!1,startPadding:n,gap:i,hasCrossPad:T,crossStartProp:T?t?"top":"left":"",crossEndProp:T?t?"bottom":"right":"",crossStartVal:T?r+"px":"",crossEndVal:T?l+"px":"",oddClass:u,emitter:d??null,indexMap:null,ariaTotalFn:null}}function qt(e,t,n,r,l){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:u,containerSize:i,totalItems:d}=e,T=l??0;e.totalSize=t.getTotalSize();let x=t.indexAtOffset(T>0?Math.max(0,u-T):u),F=t.indexAtOffset(u+i);if(F<d-1)F++;x=Math.max(0,x),F=Math.min(d-1,Math.max(0,F));let I=Math.max(0,x-n),v=Math.min(d-1,F+n),w=Math.ceil(i/1)+n*2+10,_=v-I+1,k=Math.min(_,e.capacity,w);if(I===e.prevRangeStart&&v===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=k,e.startIndex=I;for(let c=0;c<k;c++){let H=I+c;e.visibleIndices[c]=H,e.visibleOffsets[c]=t.getOffset(H),e.visibleSizes[c]=t.getSize(H)}return Lt(r.calculate,e),e.prevRangeStart=I,e.prevRangeEnd=v,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var Y={selected:!1,focused:!1};function Zt(e,t,n){for(let r=0;r<t;r++)if(e[r]===n)return!0;return!1}function jt(e,t){if(t<=1)return!0;let n=e[0];for(let r=1;r<t;r++){let l=e[r];if(l!==n+1)return!1;n=l}return!0}function Jt(e,t,n,r,l,u,i,d,T,x){let F=T?null:l(),{visibleCount:I,visibleIndices:v}=e,w=i.ariaTotalFn?i.ariaTotalFn():e.totalItems,_=i.interactive?String(w):"",k=i.interactive&&w!==e.prevAriaTotal,c=null,H=i.indexMap;for(let b=0;b<I;b++){let P=v[b],M=H?H(P):P,a=e.visibleOffsets[b],S=e.visibleSizes[b],R=T?T(P):F[P];if(x)x(M,Y);else Y.selected=!1,Y.focused=!1;let C=u.get(P),z=C;if(C===void 0){let p=t.acquire();if(R!==void 0){let E;try{E=r(R,M,Y)}catch(N){if(i.emitter)i.emitter.emit("error",{error:N instanceof Error?N:Error(String(N)),context:`template:render:${M}`});t.release(p);continue}if(typeof E==="string")p.innerHTML=E;else p.textContent="",p.appendChild(E);Be(p)}if(p.setAttribute("role",i.itemRole),p.setAttribute("data-index",String(M)),i.interactive)p.id=i.prefix+"-item-"+P,p.setAttribute("aria-posinset",String(M+1)),p.setAttribute("aria-setsize",_);if(R!==void 0){let E=String(R.id);if(p.setAttribute("data-id",E),E.startsWith(Ae))p.classList.add(i.placeholderClass)}if(i.hasCrossPad)p.style.setProperty(i.crossStartProp,i.crossStartVal),p.style.setProperty(i.crossEndProp,i.crossEndVal);if(x){if(p.classList.toggle(i.selectedClass,Y.selected),p.classList.toggle(i.focusedClass,Y.focused),Y.selected)p.setAttribute("aria-selected","true");else p.removeAttribute("aria-selected");p._lastSelected=Y.selected,p._lastFocused=Y.focused}if(i.oddClass)p.classList.toggle(i.oddClass,(P&1)===1);let B=a-e.baseOffset+i.startPadding;p.style.transform=i.translateProp+B+"px)",p._lastOffset=B;let y=S-i.gap;if(p.style[i.sizeProp]=y+"px",p._lastSize=y,p._lastItem=R,u.set(P,p),c===null)c=document.createDocumentFragment();c.appendChild(p)}else{if(k)C.setAttribute("aria-setsize",_);if(R!==void 0&&z._lastItem!==R){let y=C.getAttribute("data-id"),E=String(R.id),N;try{N=r(R,M,Y)}catch(h){if(i.emitter)i.emitter.emit("error",{error:h instanceof Error?h:Error(String(h)),context:`template:render:${M}`});continue}if(typeof N==="string")C.innerHTML=N;else C.textContent="",C.appendChild(N);if(Be(C),C.setAttribute("data-id",E),z._lastItem=R,y!==E){let h=y!==null&&y.startsWith(Ae),f=E.startsWith(Ae);if(h!==f)C.classList.toggle(i.placeholderClass,f);if(h&&!f)C.classList.add(i.replacedClass),setTimeout(()=>{C.classList.remove(i.replacedClass)},300)}}if(x){if(z._lastSelected!==Y.selected){if(C.classList.toggle(i.selectedClass,Y.selected),Y.selected)C.setAttribute("aria-selected","true");else C.removeAttribute("aria-selected");z._lastSelected=Y.selected}if(z._lastFocused!==Y.focused)C.classList.toggle(i.focusedClass,Y.focused),z._lastFocused=Y.focused}let p=a-e.baseOffset+i.startPadding;if(z._lastOffset!==p)C.style.transform=i.translateProp+p+"px)",z._lastOffset=p;let B=S-i.gap;if(z._lastSize!==B)C.style[i.sizeProp]=B+"px",z._lastSize=B}}if(c!==null)n.appendChild(c);if(I>0&&jt(v,I)){let b=v[0],P=v[I-1];for(let[M,a]of u)if(M<b||M>P)a.remove(),t.release(a),u.delete(M)}else for(let[b,P]of u)if(!Zt(v,I,b))P.remove(),t.release(P),u.delete(b);if(i.interactive)e.prevAriaTotal=e.totalItems;Pt(d.commit,e)}function Ue(e,t,n,r,l,u,i,d,T,x,F,I){if(qt(e,t,n,x,T.startPadding))Jt(e,r,l,u,i,d,T,x,F,I)}var Ke=()=>{let e={},t=(u,i)=>{if(!e[u])e[u]=new Set;return e[u].add(i),()=>n(u,i)},n=(u,i)=>{e[u]?.delete(i)};return{on:t,off:n,emit:(u,i)=>{e[u]?.forEach((d)=>{try{d(i)}catch(T){console.error(`[vlist] Error in event handler for "${String(u)}":`,T)}})},clear:(u)=>{if(u)delete e[u];else for(let i in e)delete e[i]}}};var zt=2,wt=(e=0)=>({velocity:0,sampleCount:0}),_t=(e,t)=>{let n=performance.now(),r=e._lt??n,l=e._lp??t,u=n-r;if(e._lp=t,e._lt=n,u===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(u>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-l)/u,e.sampleCount=Math.min(e.sampleCount+1,5),e};function Qt(e){let{item:t}=e;if(t.height!==void 0&&typeof t.height==="number"){if(!Number.isFinite(t.height)||t.height<=0)throw Error(`vlist: item.height must be a positive number, got ${t.height}`)}if(t.width!==void 0&&typeof t.width==="number"){if(!Number.isFinite(t.width)||t.width<=0)throw Error(`vlist: item.width must be a positive number, got ${t.width}`)}if(t.estimatedHeight!==void 0){if(!Number.isFinite(t.estimatedHeight)||t.estimatedHeight<=0)throw Error(`vlist: item.estimatedHeight must be a positive number, got ${t.estimatedHeight}`)}if(t.estimatedWidth!==void 0){if(!Number.isFinite(t.estimatedWidth)||t.estimatedWidth<=0)throw Error(`vlist: item.estimatedWidth must be a positive number, got ${t.estimatedWidth}`)}if(t.gap!==void 0){if(typeof t.gap!=="number"||!Number.isFinite(t.gap)||t.gap<0)throw Error(`vlist: item.gap must be a non-negative number, got ${t.gap}`)}if(e.overscan!==void 0){if(typeof e.overscan!=="number"||!Number.isFinite(e.overscan)||e.overscan<0)throw Error(`vlist: overscan must be a non-negative number, got ${e.overscan}`)}if(e.scroll?.runway!==void 0){if(typeof e.scroll.runway!=="number"||!Number.isFinite(e.scroll.runway)||e.scroll.runway<=0)throw Error(`vlist: scroll.runway must be a positive number, got ${e.scroll.runway}`)}}function en(e,t){let n=e==="horizontal"?"x":"y";if(t.some((l)=>l.name==="grid"))return{primary:n,cross:n==="x"?"y":"x"};return{primary:n}}function tn(e,t){let n=en(e.orientation,t),r=n.primary==="x",l=vt(e.padding);return{axis:n,hasCrossAxis:n.cross!==void 0,overscan:e.overscan??Ce,reverse:e.reverse??!1,classPrefix:e.classPrefix??ut,mainAxisPadding:gt(l,r),crossAxisPadding:ht(l,r),startPadding:r?l.left:l.top,endPadding:r?l.right:l.bottom,crossPadStart:r?l.top:l.left,crossPadEnd:r?l.bottom:l.right,striped:e.item.striped||!1,gap:e.item.gap??0}}function nn(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function on(e){let t=[...e];return t.sort((n,r)=>(n.priority??50)-(r.priority??50)),t}function rn(e){let t=new Set;for(let n of e){if(t.has(n.name))throw Error(`[vlist] Duplicate plugin: ${n.name}`);t.add(n.name)}for(let n of e)if(n.conflicts){for(let r of n.conflicts)if(t.has(r))throw Error(`[vlist] Plugin "${n.name}" conflicts with "${r}"`)}}function Ht(e,t=[],n){Qt(e);let r=tn(e,t),l=r.axis.primary==="x",u=e.scroll?.mode==="bounded"||!!n,i=nn(e,l),d=r.gap,T=d>0?typeof i==="function"?(m)=>i(m)+d:i+d:i,x=typeof i==="number"?i:20,F=e.items?.length??0,I=r.striped?`${r.classPrefix}-item--odd`:"",v=Ke(),w=Mt(r.classPrefix,l,r.startPadding,r.crossPadStart,r.crossPadEnd,I,d,v),_=t.length>0?on(t):t;if(t.length>0)rn(_);let k=Pe(e.container),c=ct(k,r.classPrefix,l,e.ariaLabel);if(e.scroll?.scrollbar==="none")c.viewport.classList.add(`${r.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")c.viewport.classList.add(`${r.classPrefix}-viewport--gutter-stable`);let b=ze(T,F);if(d>0){let m=b.getTotalSize;b.getTotalSize=()=>{let o=m();return o>0?o-d:0}}let P=Et(r.classPrefix),M=Math.ceil(4096/x)+r.overscan*2+8,a=St(M);a.totalItems=F;let S=e.items??[],R=()=>S,C=new Map,z=wt(),p={velocity:0,reliable:!1},B={range:{start:0,end:-1}},y={scrollPosition:0,direction:"down"},E={scrollPosition:0},N=-1,h=-1,f=-1,L=null,A=It(_),O=new Map,K=[],Q=[],G=[],X=null,te=null,q=null,ne=null,ue=null,j=null,s=null,D=null,Z=null,U=null,oe=null,de=!1,Xe=!1,ve=null,Ge=0,qe=0,Ze=null,je=null,Je=null,_e=null,He=null,Re=null,xe=null,ee=null,me=null;a.containerSize=l?c.viewport.clientWidth:c.viewport.clientHeight,a.crossSize=l?c.viewport.clientHeight:c.viewport.clientWidth;let Te=Tt({sizeCache:b,getPixel:()=>te?te():a.scrollPosition,setPixel:(m)=>{if(q)q(m);else if(l)c.viewport.scrollLeft=m;else c.viewport.scrollTop=m},getContainerSize:()=>a.containerSize});if(t.length>0){let m={dom:c,sizeCache:b,scroll:Te,pool:P,config:r,emitter:v,template:e.item.template,registerMethod(o,g){O.set(o,g)},getMethod(o){return O.get(o)},registerClickHandler(o){K.push(o)},registerKeydownHandler(o){Q.push(o)},registerDestroyHandler(o){G.push(o)},enableListboxRole(){let o=c.content.getAttribute("role");if(!o||o==="list")c.content.setAttribute("role","listbox"),c.content.setAttribute("tabindex","0");w.itemRole="option",w.interactive=!0},setSizeConfig(o){let g=ze(o,a.totalItems),V=O.get("_setSizeCacheBase");if(V){let W=b.rebuild;Object.assign(b,g),b.rebuild=W,V(g.rebuild)}else Object.assign(b,g)},setScrollFns(o,g){te=o,q=g},setBoundedWrap(o){me=o},cancelScroll(){ce?.cancelScroll()},setVirtualTotalFn(o){X=o,w.ariaTotalFn=o},setIndexMapFn(o){w.indexMap=o},getItems:R,getItem(o){return j?j(o):S[o]},getState(){return a},rebuildSizeCache(){b.rebuild(a.totalItems)},updateContentSize(o){if(ee){ee.refresh(o);return}a.totalSize=o,c.content.style[l?"width":"height"]=o+r.mainAxisPadding+"px"},setRenderFn(o,g){ne=o,ue=g},renderIfNeeded(){ge()},forceRender(){ae()},setGetItemFn(o){j=o},setItemStateFn(o){s=o},getItemStateFn(){return s},get rawSizeSpec(){return i},scrollTo(o){if(q)q(o);else if(l)c.viewport.scrollLeft=o;else c.viewport.scrollTop=o},shiftScroll(o){if(ee?.shiftBy)ee.shiftBy(o);else m.scrollTo(a.scrollPosition+o)},smoothScrollTo(o,g,V,W){if(_e)_e(o,g,q??void 0,V,W);else m.scrollTo(typeof o==="function"?o():o)},disableDefaultScroll(){de=!0},disableDefaultResize(){Xe=!0},setScrollTarget(o){ve=o},setScrollToPosFn(o){He=o},setScrollToIndexFn(o){Re=o},onScrollFrame:De,onScrollIdle:Ie,removeItemById(o){if(D)return D(o);let g=S.findIndex((V)=>V.id===o);if(g===-1)return-1;return S.splice(g,1),a.totalItems=S.length,b.rebuild(a.totalItems),se(),g},insertItemAt(o,g){if(Z){Z(o,g);return}S.splice(g,0,o),a.totalItems=S.length,b.rebuild(a.totalItems),se()},setRemoveItemFn(o){D=o},setInsertItemFn(o){Z=o},setUpdateItemFn(o){U=o},setGetIndexByIdFn(o){oe=o},getRenderedElement(o){let g=O.get("_getRenderedElement");if(g)return g(o);return C.get(o)??null},setNavConfig(o){if(o.ud!==void 0)Ge=o.ud;if(o.lr!==void 0)qe=o.lr;if(o.scrollIndex)Ze=o.scrollIndex;if(o.navigate)je=o.navigate;if(o.total)Je=o.total},getNavConfig:(()=>{let o={ud:0,lr:0,scrollIndex:null,navigate:null,total:null};return()=>(o.ud=Ge,o.lr=qe,o.scrollIndex=Ze,o.navigate=je,o.total=Je,o)})()};for(let o of _)if(o.setup)try{o.setup(m)}catch(g){v.emit("error",{error:g instanceof Error?g:Error(String(g)),context:`plugin:setup:${o.name}`})}}let Oe=r.classPrefix+"--scrolling",fe=!1,Vt=e.scroll?.idleTimeout??le;function Qe(){if(y.scrollPosition=Te.getPixelEquivalent(),l)y.direction=a.scrollDirection>0?"right":"left";else y.direction=a.scrollDirection>0?"down":"up";if(v.emit("scroll",y),_t(z,a.scrollPosition),p.velocity=z.velocity,p.reliable=z.sampleCount>=zt,v.emit("velocity:change",p),a.startIndex!==N||a.prevRangeEnd!==h)N=a.startIndex,h=a.prevRangeEnd,B.range.start=a.startIndex,B.range.end=a.prevRangeEnd,v.emit("range:change",B)}let et=!1;function se(){if(ne)return;let m=b.getTotalSize();if(ee){ee.refresh(m);return}if(c.content.style[l?"width":"height"]=m+r.mainAxisPadding+"px",!et&&m>We)et=!0,v.emit("error",{error:Error(`Content size (${m}px) exceeds browser limit (${We}px). Enable bounded scroll (scroll: { mode: "bounded" }) for large datasets.`),context:"content:size:overflow"})}function tt(){if(!xe)return;if((X?X():S.length)===0)return;let o=xe;xe=null,Ve.scrollToIndex(o.index,o.alignOrOptions)}function ge(){if(tt(),ne)ne();else Ue(a,b,r.overscan,P,c.content,e.item.template,R,C,w,A,j,s)}function De(){if(!fe)fe=!0,c.root.classList.add(Oe);if(ge(),$e(A.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==f)f=a.scrollPosition,Qe()}function Ie(){if(fe)fe=!1,c.root.classList.remove(Oe);a.scrollDirection=0,Ct(A.idle),p.velocity=0,p.reliable=!1,v.emit("velocity:change",p),E.scrollPosition=Te.getPixelEquivalent(),v.emit("scroll:idle",E)}function ae(){if(tt(),a.renderPending=!0,ue)ue();else Ue(a,b,r.overscan,P,c.content,e.item.template,R,C,w,A,j,s);if($e(A.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==f){if(f=a.scrollPosition,Qe(),L!==null)clearTimeout(L);L=setTimeout(Ie,Vt)}}let nt=de?!1:e.scroll?.wheel!==!1,ce;if(de&&(u||me))throw Error(`vlist: page() is not compatible with ${me?"the carousel plugin":'scroll: { mode: "bounded" }'} — bounded page-mode scrolling is not implemented yet.`);if(u||me)ee=(n??xt)({state:a,sizeCache:b,viewport:c.viewport,content:c.content,isX:l,wheelEnabled:nt,idleTimeout:e.scroll?.idleTimeout??le,...ve?{scrollTarget:ve}:{},mainAxisPadding:r.mainAxisPadding,...e.scroll?.runway!==void 0?{runwayFactor:Math.max(ft,e.scroll.runway)}:{},...me?{wrap:me}:{},onFrame:De,onIdle:Ie}),ce=ee,te=()=>a.scrollPosition,q=(m)=>ee.setLogical(m);else ce=yt({state:a,viewport:c.viewport,isX:l,wheelEnabled:nt,idleTimeout:e.scroll?.idleTimeout??le,...ve?{scrollTarget:ve}:{},onFrame:De,onIdle:Ie});_e=ce.smoothScrollTo;function Fe(m){let g=m.target.closest("[data-index]");if(!g)return null;let V=parseInt(g.getAttribute("data-index"),10);if(Number.isNaN(V))return null;let W=O.get("_layoutToDataIndex"),J;if(W){let re=W(V);if(re<0)return null;let Se=O.get("_getItem");J=Se?Se(re):j?j(re):S[re]}else J=j?j(V):S[V];if(J===void 0)return null;return{item:J,index:V}}function ot(m){for(let g=0;g<K.length;g++)K[g](m);let o=Fe(m);if(o)v.emit("item:click",{item:o.item,index:o.index,event:m})}function rt(m){let o=Fe(m);if(o)v.emit("item:dblclick",{item:o.item,index:o.index,event:m})}function it(m){let o=Fe(m);if(o)v.emit("item:contextmenu",{item:o.item,index:o.index,event:m})}function lt(m){let o=m.target?.tagName;if((o==="INPUT"||o==="TEXTAREA"||o==="SELECT")&&!((m.ctrlKey||m.metaKey)&&(m.key==="f"||m.key==="F")))return;for(let g=0;g<Q.length;g++)Q[g](m)}if(c.content.addEventListener("click",ot),c.content.addEventListener("dblclick",rt),c.content.addEventListener("contextmenu",it),Q.length>0)c.root.addEventListener("keydown",lt);let Ne=null;if(!Xe)setTimeout(()=>{if(a.destroyed)return;Ne=new ResizeObserver((o)=>{for(let g of o){let{width:V,height:W}=g.contentRect,J=l?V:W,re=l?W:V;if(Math.abs(J-a.containerSize)<1&&Math.abs(re-a.crossSize)<1)continue;if(a.containerSize=J,a.crossSize=re,a.resizeCapacity(J,x,r.overscan),ee)ee.refresh(b.getTotalSize());ae(),At(A.resize,V,W),v.emit("resize",{width:V,height:W})}}),Ne.observe(c.viewport)},0);a.resizeCapacity(a.containerSize,x,r.overscan),se(),a.initialized=!0;let he=null;if(e.defer)he=requestAnimationFrame(()=>{if(he=null,!a.destroyed)ge()});else ge();if(!de)ce.attach();let Ve={get element(){return c.root},get items(){return S},get total(){return X?X():S.length},setItems(m){S=[...m],a.totalItems=S.length,b.rebuild(a.totalItems),se(),ae()},appendItems(m){S.push(...m),a.totalItems=S.length,b.rebuild(a.totalItems),se(),ae()},prependItems(m){S.unshift(...m),a.totalItems=S.length,b.rebuild(a.totalItems),se(),ae()},updateItem(m,o){if(U){if(!U(m,o))return}else{let g=S.findIndex((V)=>V.id===m);if(g===-1)return;S[g]={...S[g],...o}}ae()},insertItem(m,o){if(Z)Z(m,o??a.totalItems);else{if(o===void 0)S.push(m);else S.splice(o,0,m);a.totalItems=S.length,b.rebuild(a.totalItems),se()}ae()},removeItem(m){if(D){if(D(m)<0)return}else{let o=S.findIndex((g)=>g.id===m);if(o===-1)return;S.splice(o,1),a.totalItems=S.length,b.rebuild(a.totalItems),se()}ae()},removeItems(m){if(D){let W=0;for(let J of m)if(D(J)>=0)W++;if(W>0)ae();return W}let o=new Set(m),g=S.length;S=S.filter((W)=>!o.has(W.id));let V=g-S.length;if(V>0)a.totalItems=S.length,b.rebuild(a.totalItems),se(),a.renderPending=!0,ge();return V},getItemAt(m){if(w.indexMap)return S[m];return j?j(m):S[m]},getIndexById(m){if(oe)return oe(m);return S.findIndex((o)=>o.id===m)},scrollToIndex(m,o="start"){let g=X?X():S.length;if(g===0){xe={index:m,alignOrOptions:o};return}let V=Math.max(0,Math.min(m,g-1)),W=typeof o==="string"?o:o.align??"start",J=typeof o==="object"?o.behavior:void 0,re=typeof o==="object"?o.duration:void 0,Se=typeof o==="object"?o.easing:void 0;if(Re&&Re(V,W,J,re,Se)!==!1)return;let ke=b.getOffset(V),st=b.getSize(V),Le=a.containerSize,kt=b.getTotalSize(),at=r.mainAxisPadding,Bt=Math.max(0,kt+at-Le),ie;if(He)ie=He(V,b,Le,g,W);else{let Wt=r.startPadding;switch(W){case"center":ie=Wt+ke-(Le-st)/2;break;case"end":ie=ke+st+at-Le;break;default:ie=ke}ie=Math.max(0,Math.min(ie,Bt))}if(J==="smooth")ce.smoothScrollTo(ie,re??dt,q??void 0,Se);else if(q)q(ie);else if(l)c.viewport.scrollLeft=ie;else c.viewport.scrollTop=ie},getScrollPosition(){return Te.getPixelEquivalent()},on:v.on.bind(v),off:v.off.bind(v),destroy(){if(a.destroyed)return;if(a.destroyed=!0,fe)fe=!1,c.root.classList.remove(Oe);if(he!==null)cancelAnimationFrame(he),he=null;if(L!==null)clearTimeout(L),L=null;ce.detach(),Ne?.disconnect(),c.content.removeEventListener("click",ot),c.content.removeEventListener("dblclick",rt),c.content.removeEventListener("contextmenu",it),c.root.removeEventListener("keydown",lt);let m=[];for(let o of G)try{o()}catch(g){m.push(g instanceof Error?g:Error(String(g)))}for(let o of _)if(o.destroy)try{o.destroy()}catch(g){m.push(g instanceof Error?g:Error(String(g)))}for(let[,o]of C)o.remove();if(C.clear(),P.clear(),c.root.remove(),v.emit("destroy",void 0),v.clear(),m.length>0)for(let o of m)console.error("vlist: error during destroy:",o)}};for(let[m,o]of O)Ve[m]=o;return Ve}var Ot=1,Dt=2;var Rt=(e)=>1-(1-e)**3;function Ft({getMax:e,onChange:t=()=>{},onFinish:n,axis:r="y",reducedMotion:l}){let u=0,i=0,d=null,T=0,x=0,F=0,I=0,v=0,w=null,_=0,k=0,c=0,H=0,b=400,P=Rt,M=()=>c,a=0.006,S=(y)=>Math.max(0,Math.min(e(),y)),R=(y,E)=>r==="y"?E:y,C=(y,E)=>r==="y"?y:E;function z(y){let E=S(y);if(E!==u)u=E,t(u);return E!==y}function p(){v=0,i=d===null?0:5}function B(y){p(),z(y)}return{get position(){return u},get state(){return i},get velocity(){return v},get active(){return i===3||i===4},begin(y,E,N,h){if(d!==null){p();return}p(),d=y,T=F=R(E,N),x=C(E,N),I=h,i=1},move(y,E,N,h){if(y!==d||i!==1&&i!==2)return!1;let f=R(E,N);if(i===1){let O=Math.abs(f-T),K=Math.abs(C(E,N)-x);if(Math.max(O,K)<6)return!1;if(K>O*1.2)return p(),!1;if(O<K*1.2)return!1;i=2}let L=F-f,A=h-I;if(A>0){let O=Math.max(-3,Math.min(3,L/A));v=A>80?0:O*v<0?O:0.65*O+0.35*v}if(F=f,I=h,z(u+L))v=0;return!0},end(y,E){if(y!==d)return;if(d=null,i===2&&!l()&&E-I<=80&&Math.abs(v)>=0.02)w=null,i=3;else v=0,i=0},cancel:p,reset(){d=null,p()},jump:B,shiftBy(y){k+=y,H+=y,z(u+y)},by(y){p();let E=u;return z(u+y),u!==E},smooth(y,E=400,N=Rt){if(p(),H=0,M=typeof y==="function"?y:()=>y,d!==null||l()||E<=0){z(M());return}b=E,P=N,k=u,c=S(M()+H),w=null,i=4},resize(){p(),z(u)},tick(y){if(i!==3&&i!==4)return;if(w===null){if(w=y,i===4)_=y;return}let E=y-w;if(E<=0)return;if(w=y,E>100){if(i===4)z(S(M()+H)),i=0,n?.();else p();return}if(i===4){c=S(M()+H);let f=Math.min(1,(y-_)/b);if(z(k+(c-k)*P(f)),f===1)i=0,n?.();return}let N=Math.exp(-a*E),h=z(u+v*(1-N)/a);if(v*=N,h||Math.abs(v)<0.02)v=0,i=0}}}var we=(e)=>e.pointerType==="touch"||e.pointerType==="pen";function Ye(e){if(e.closest("textarea,select,[contenteditable]:not([contenteditable=false])"))return!0;let t=e.closest("input");return!!t&&!/^(button|submit|reset|checkbox|radio|image)$/.test(t.type)}function Nt(e){let{state:t,viewport:n,content:r,isX:l,onFrame:u,onIdle:i,mainAxisPadding:d}=e,T=n.parentElement??n,x=n.ownerDocument.defaultView,F=n.ownerDocument,I=x.matchMedia("(prefers-reduced-motion: reduce)"),v=0,w=null,_=null,k=!1,c=!1,H=-1,b=-1,P=null,M=null,a=!1,S=!1,R=!1,C=!1,z,p=new Set;function B(s){let D=t.scrollPosition;if(t.prevScrollPosition=D,t.scrollPosition=t.baseOffset=s,t.scrollDirection=s>D?1:s<D?-1:0,!c)u()}function y(){if(_=null,f.active||f.state===Dt||f.state===Ot)return;t.scrollDirection=0,i()}function E(){if(!k)return;if(_!==null)clearTimeout(_);_=setTimeout(y,e.idleTimeout||le)}function N(){if(k&&w===null&&f.active)w=requestAnimationFrame(h)}function h(s){if(w=null,f.tick(s),f.active)N();else E()}let f=Ft({axis:l?"x":"y",getMax:()=>v,reducedMotion:()=>I.matches,onChange:B,onFinish(){let s=z;z=void 0,s?.()}});function L(){if(z=void 0,w!==null)cancelAnimationFrame(w),w=null;if(f.cancel(),_!==null)clearTimeout(_),_=null}function A(){if(L(),f.reset(),C&&P!==null&&n.hasPointerCapture(P))n.releasePointerCapture(P);C=!1,p.clear(),P=M=null,a=S=R=!1,E()}function O(s){if(!we(s))return;if(s.isPrimary){if(p.size)A();p.clear()}if(p.add(s.pointerId),p.size>1){R=!0,L();return}if(!(s.target instanceof Element)||Ye(s.target)){L();return}P=s.pointerId,a=!1,S=f.active,M=null,L(),f.begin(s.pointerId,s.clientX,s.clientY,s.timeStamp)}function K(s){if(!we(s)||s.target instanceof Node&&n.contains(s.target))return;if(s.isPrimary&&p.size)A();else if(p.size)p.add(s.pointerId),R=!0,L()}function Q(s){if(!we(s)||R)return;if(f.move(s.pointerId,s.clientX,s.clientY,s.timeStamp)){if(a=!0,!C)n.setPointerCapture(s.pointerId),C=!0;if(s.cancelable)s.preventDefault()}}function G(s){if(!we(s)||!p.has(s.pointerId))return;let D=s.type==="pointercancel";if(D)L();if(P===s.pointerId){if(!D&&!R&&(a||S))M=s.pointerId;if(C&&n.hasPointerCapture(s.pointerId))n.releasePointerCapture(s.pointerId);C=!1,P=null,a=S=!1}if(f.end(s.pointerId,s.timeStamp),p.delete(s.pointerId),!p.size){if(R||D)f.reset();R=!1}N(),E()}function X(s){let D=s.pointerId;if(s.detail!==0&&M!==null&&(D===M||D===void 0))M=null,s.preventDefault(),s.stopImmediatePropagation()}function te(s){if(s.ctrlKey||s.defaultPrevented||!(s.target instanceof Element)||Ye(s.target))return;let D=s.deltaMode===1?16:s.deltaMode===2?t.containerSize:1,Z=l?s.deltaX:s.deltaY,U=l?s.deltaY:s.deltaX,oe=l?n.scrollHeight>n.clientHeight:n.scrollWidth>n.clientWidth;if(oe&&Math.abs(U)>Math.abs(Z))return;if(oe&&U!==0)if(s.preventDefault(),l)n.scrollTop+=U*D;else n.scrollLeft+=U*D;let de=l&&!oe&&Z===0?U:Z;if(L(),f.by(de*D))s.preventDefault();E()}function q(s){if(s.defaultPrevented||s.ctrlKey||s.metaKey||s.altKey||!(s.target instanceof Element)||Ye(s.target))return;if((s.key===" "||s.key==="Enter")&&s.target.closest("button,summary,a,input"))return;let D=e.sizeCache,Z=D.getSize(D.indexAtOffset(f.position)),U;if(s.key===(l?"ArrowRight":"ArrowDown"))U=f.position+Z;if(s.key===(l?"ArrowLeft":"ArrowUp"))U=f.position-Z;if(s.key==="PageDown"||s.key===" ")U=f.position+t.containerSize*(s.shiftKey&&s.key===" "?-1:1);if(s.key==="PageUp")U=f.position-t.containerSize;if(s.key==="Home")U=0;if(s.key==="End")U=v;if(U!==void 0)s.preventDefault(),ue(U)}function ne(){if(F.hidden)A()}function ue(s){let D=f.position;if(L(),f.jump(s),D===f.position)B(f.position);E()}function j(s){let D=H!==t.containerSize||b!==t.crossSize,Z=s!==t.totalSize||D;if(H=t.containerSize,b=t.crossSize,t.totalSize=s,v=Math.max(0,s+d-t.containerSize),Z){if(c=!0,D)L(),f.resize();else f.shiftBy(0);B(f.position),c=!1}}return{setLogical:ue,refresh:j,shiftBy(s){if(t.totalSize=e.sizeCache.getTotalSize(),v=Math.max(0,t.totalSize+d-t.containerSize),f.shiftBy(s),!f.active)E()},cancelScroll(){L(),E()},getLogical:()=>t.scrollPosition,getMaxLogical:()=>v,smoothScrollTo(s,D,Z,U=pe,oe){if(L(),f.smooth(s,D,U),z=oe,!f.active)z=void 0,oe?.(),E();else N()},attach(){if(k)return;if(k=!0,n.style.overflowX=l?"hidden":"auto",n.style.overflowY=l?"auto":"hidden",n.style.touchAction=l?"pan-y pinch-zoom":"pan-x pinch-zoom",n.style.overflowAnchor="none",r.style[l?"width":"height"]="100%",r.style.overflow="clip",r.style.overflowAnchor="none",n.addEventListener("pointerdown",O),x.addEventListener("pointerdown",K),n.addEventListener("pointermove",Q,{passive:!1}),x.addEventListener("pointerup",G),x.addEventListener("pointercancel",G),n.addEventListener("click",X,!0),e.wheelEnabled)n.addEventListener("wheel",te,{passive:!1});T.addEventListener("keydown",q),x.addEventListener("blur",A),F.addEventListener("visibilitychange",ne),I.addEventListener("change",A),N()},detach(){if(k=!1,A(),_!==null)clearTimeout(_),_=null;n.removeEventListener("pointerdown",O),x.removeEventListener("pointerdown",K),n.removeEventListener("pointermove",Q),x.removeEventListener("pointerup",G),x.removeEventListener("pointercancel",G),n.removeEventListener("click",X,!0),n.removeEventListener("wheel",te),T.removeEventListener("keydown",q),x.removeEventListener("blur",A),F.removeEventListener("visibilitychange",ne),I.removeEventListener("change",A),n.style.overflowX=n.style.overflowY=n.style.touchAction=n.style.overflowAnchor="",r.style.overflow=r.style.overflowAnchor=""}}}function Qn(e,t=[]){if(e.scroll?.mode==="synthetic"){if(e.orientation==="horizontal"&&getComputedStyle(Pe(e.container)).direction==="rtl")throw Error("RTL horizontal lists are not supported with synthetic mode in this release; use native mode");for(let n of t)if(n.name==="page"||n.name==="carousel"||n.name==="sortable")throw Error(`${n.name} is not supported with synthetic mode in this release`)}return Ht(e,t,e.scroll?.mode==="synthetic"?Nt:void 0)}export{Qn as createVList};
|
|
1
|
+
var Ie=3,ut="vlist";var ce=150;var Te=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,ct=300;var Le="__placeholder_";var mt=1,ft=2;var dt=(e)=>1-(1-e)**3;function pt({getMax:e,onChange:t=()=>{},onFinish:o,axis:l="y",reducedMotion:i}){let u=0,r=0,d=null,S=0,y=0,R=0,I=0,v=0,L=null,H=0,O=0,p=0,F=0,h=400,A=dt,C=()=>p,a=0.006,b=(x)=>Math.max(0,Math.min(e(),x)),M=(x,g)=>l==="y"?g:x,T=(x,g)=>l==="y"?x:g;function P(x){let g=b(x);if(g!==u)u=g,t(u);return g!==x}function m(){v=0,r=d===null?0:5}function W(x){m(),P(x)}return{get position(){return u},get state(){return r},get velocity(){return v},get active(){return r===3||r===4},begin(x,g,w,B){if(d!==null){m();return}m(),d=x,S=R=M(g,w),y=T(g,w),I=B,r=1},move(x,g,w,B){if(x!==d||r!==1&&r!==2)return!1;let E=M(g,w);if(r===1){let K=Math.abs(E-S),X=Math.abs(T(g,w)-y);if(Math.max(K,X)<6)return!1;if(X>K*1.2)return m(),!1;if(K<X*1.2)return!1;r=2}let D=R-E,N=B-I;if(N>0){let K=Math.max(-3,Math.min(3,D/N));v=N>80?0:K*v<0?K:0.65*K+0.35*v}if(R=E,I=B,P(u+D))v=0;return!0},end(x,g){if(x!==d)return;if(d=null,r===2&&!i()&&g-I<=80&&Math.abs(v)>=0.02)L=null,r=3;else v=0,r=0},cancel:m,reset(){d=null,m()},jump:W,shiftBy(x){O+=x,F+=x,P(u+x)},by(x){m();let g=u;return P(u+x),u!==g},smooth(x,g=400,w=dt){if(m(),F=0,C=typeof x==="function"?x:()=>x,d!==null||i()||g<=0){P(C());return}h=g,A=w,O=u,p=b(C()+F),L=null,r=4},resize(){m(),P(u)},tick(x){if(r!==3&&r!==4)return;if(L===null){if(L=x,r===4)H=x;return}let g=x-L;if(g<=0)return;if(L=x,g>100){if(r===4)P(b(C()+F)),r=0,o?.();else m();return}if(r===4){p=b(C()+F);let E=Math.min(1,(x-H)/h);if(P(O+(p-O)*A(E)),E===1)r=0,o?.();return}let w=Math.exp(-a*g),B=P(u+v*(1-w)/a);if(v*=w,B||Math.abs(v)<0.02)v=0,r=0}}}var Ce=(e)=>e.pointerType==="touch"||e.pointerType==="pen";function Ne(e){if(e.closest("textarea,select,[contenteditable]:not([contenteditable=false])"))return!0;let t=e.closest("input");return!!t&&!/^(button|submit|reset|checkbox|radio|image)$/.test(t.type)}function bt(e){let{state:t,viewport:o,content:l,isX:i,onFrame:u,onIdle:r,mainAxisPadding:d}=e,S=o.parentElement??o,y=o.ownerDocument.defaultView,R=o.ownerDocument,I=y.matchMedia("(prefers-reduced-motion: reduce)"),v=0,L=null,H=null,O=!1,p=!1,F=-1,h=-1,A=null,C=null,a=!1,b=!1,M=!1,T=!1,P,m=new Set;function W(s){let z=t.scrollPosition;if(t.prevScrollPosition=z,t.scrollPosition=t.baseOffset=s,t.scrollDirection=s>z?1:s<z?-1:0,!p)u()}function x(){if(H=null,E.active||E.state===ft||E.state===mt)return;t.scrollDirection=0,r()}function g(){if(!O)return;if(H!==null)clearTimeout(H);H=setTimeout(x,e.idleTimeout||ce)}function w(){if(O&&L===null&&E.active)L=requestAnimationFrame(B)}function B(s){if(L=null,E.tick(s),E.active)w();else g()}let E=pt({axis:i?"x":"y",getMax:()=>v,reducedMotion:()=>I.matches,onChange:W,onFinish(){let s=P;P=void 0,s?.()}});function D(){if(P=void 0,L!==null)cancelAnimationFrame(L),L=null;if(E.cancel(),H!==null)clearTimeout(H),H=null}function N(){if(D(),E.reset(),T&&A!==null&&o.hasPointerCapture(A))o.releasePointerCapture(A);T=!1,m.clear(),A=C=null,a=b=M=!1,g()}function K(s){if(!Ce(s))return;if(s.isPrimary){if(m.size)N();m.clear()}if(m.add(s.pointerId),m.size>1){M=!0,D();return}if(!(s.target instanceof Element)||Ne(s.target)){D();return}A=s.pointerId,a=!1,b=E.active,C=null,D(),E.begin(s.pointerId,s.clientX,s.clientY,s.timeStamp)}function X(s){if(!Ce(s)||s.target instanceof Node&&o.contains(s.target))return;if(s.isPrimary&&m.size)N();else if(m.size)m.add(s.pointerId),M=!0,D()}function re(s){if(!Ce(s)||M)return;if(E.move(s.pointerId,s.clientX,s.clientY,s.timeStamp)){if(a=!0,!T)o.setPointerCapture(s.pointerId),T=!0;if(s.cancelable)s.preventDefault()}}function ie(s){if(!Ce(s)||!m.has(s.pointerId))return;let z=s.type==="pointercancel";if(z)D();if(A===s.pointerId){if(!z&&!M&&(a||b))C=s.pointerId;if(T&&o.hasPointerCapture(s.pointerId))o.releasePointerCapture(s.pointerId);T=!1,A=null,a=b=!1}if(E.end(s.pointerId,s.timeStamp),m.delete(s.pointerId),!m.size){if(M||z)E.reset();M=!1}w(),g()}function Y(s){let z=s.pointerId;if(s.detail!==0&&C!==null&&(z===C||z===void 0))C=null,s.preventDefault(),s.stopImmediatePropagation()}function Q(s){if(s.ctrlKey||s.defaultPrevented||!(s.target instanceof Element)||Ne(s.target))return;let z=s.deltaMode===1?16:s.deltaMode===2?t.containerSize:1,G=i?s.deltaX:s.deltaY,k=i?s.deltaY:s.deltaX,Z=i?o.scrollHeight>o.clientHeight:o.scrollWidth>o.clientWidth;if(Z&&Math.abs(k)>Math.abs(G))return;if(Z&&k!==0)if(s.preventDefault(),i)o.scrollTop+=k*z;else o.scrollLeft+=k*z;let fe=i&&!Z&&G===0?k:G;if(D(),E.by(fe*z))s.preventDefault();g()}function de(s){if(s.defaultPrevented||s.ctrlKey||s.metaKey||s.altKey||!(s.target instanceof Element)||Ne(s.target))return;if((s.key===" "||s.key==="Enter")&&s.target.closest("button,summary,a,input"))return;let z=e.sizeCache,G=z.getSize(z.indexAtOffset(E.position)),k;if(s.key===(i?"ArrowRight":"ArrowDown"))k=E.position+G;if(s.key===(i?"ArrowLeft":"ArrowUp"))k=E.position-G;if(s.key==="PageDown"||s.key===" ")k=E.position+t.containerSize*(s.shiftKey&&s.key===" "?-1:1);if(s.key==="PageUp")k=E.position-t.containerSize;if(s.key==="Home")k=0;if(s.key==="End")k=v;if(k!==void 0)s.preventDefault(),ee(k)}function se(){if(R.hidden)N()}function ee(s){let z=E.position;if(D(),E.jump(s),z===E.position)W(E.position);g()}function me(s){let z=F!==t.containerSize||h!==t.crossSize,G=s!==t.totalSize||z;if(F=t.containerSize,h=t.crossSize,t.totalSize=s,v=Math.max(0,s+d-t.containerSize),G){if(p=!0,z)D(),E.resize();else E.shiftBy(0);W(E.position),p=!1}}return{setLogical:ee,refresh:me,shiftBy(s){if(t.totalSize=e.sizeCache.getTotalSize(),v=Math.max(0,t.totalSize+d-t.containerSize),E.shiftBy(s),!E.active)g()},cancelScroll(){D(),g()},getLogical:()=>t.scrollPosition,getMaxLogical:()=>v,smoothScrollTo(s,z,G,k=Te,Z){if(D(),E.smooth(s,z,k),P=Z,!E.active)P=void 0,Z?.(),g();else w()},attach(){if(O)return;if(O=!0,o.style.overflowX=i?"hidden":"auto",o.style.overflowY=i?"auto":"hidden",o.style.touchAction=i?"pan-y pinch-zoom":"pan-x pinch-zoom",o.style.overflowAnchor="none",l.style[i?"width":"height"]="100%",l.style.overflow="clip",l.style.overflowAnchor="none",o.addEventListener("pointerdown",K),y.addEventListener("pointerdown",X),o.addEventListener("pointermove",re,{passive:!1}),y.addEventListener("pointerup",ie),y.addEventListener("pointercancel",ie),o.addEventListener("click",Y,!0),e.wheelEnabled)o.addEventListener("wheel",Q,{passive:!1});S.addEventListener("keydown",de),y.addEventListener("blur",N),R.addEventListener("visibilitychange",se),I.addEventListener("change",N),w()},detach(){if(O=!1,N(),H!==null)clearTimeout(H),H=null;o.removeEventListener("pointerdown",K),y.removeEventListener("pointerdown",X),o.removeEventListener("pointermove",re),y.removeEventListener("pointerup",ie),y.removeEventListener("pointercancel",ie),o.removeEventListener("click",Y,!0),o.removeEventListener("wheel",Q),S.removeEventListener("keydown",de),y.removeEventListener("blur",N),R.removeEventListener("visibilitychange",se),I.removeEventListener("change",N),o.style.overflowX=o.style.overflowY=o.style.touchAction=o.style.overflowAnchor="",l.style.overflow=l.style.overflowAnchor=""}}}var Pe={top:0,right:0,bottom:0,left:0},vt=(e)=>{if(e==null)return Pe;if(typeof e==="number")return e===0?Pe:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[u,r]=e;return u===0&&r===0?Pe:{top:u,right:r,bottom:u,left:r}}let[t,o,l,i]=e;return t===0&&o===0&&l===0&&i===0?Pe:{top:t,right:o,bottom:l,left:i}},gt=(e,t)=>t?e.left+e.right:e.top+e.bottom,ht=(e,t)=>t?e.top+e.bottom:e.left+e.right;function St(e){let t={visibleIndices:new Int32Array(e),visibleOffsets:new Float64Array(e),visibleSizes:new Float64Array(e),visibleCount:0,startIndex:0,totalSize:0,capacity:e,scrollPosition:0,prevScrollPosition:0,scrollDirection:0,baseOffset:0,prevBaseOffset:0,containerSize:0,crossSize:0,totalItems:0,prevRangeStart:0,prevRangeEnd:-1,renderPending:!1,initialized:!1,destroyed:!1,prevAriaTotal:-1,resizeCapacity(o,l,i=Ie){if(l<=0||o<=0)return;let u=Math.ceil(o/l)+i*2;if(u<=t.capacity)return;let r=u+8,d=new Int32Array(r),S=new Float64Array(r),y=new Float64Array(r);d.set(t.visibleIndices),S.set(t.visibleOffsets),y.set(t.visibleSizes),t.visibleIndices=d,t.visibleOffsets=S,t.visibleSizes=y,t.capacity=r},clear(){t.visibleCount=0,t.startIndex=0}};return t}var kt=(e,t)=>{let o=t;return{getOffset:(l)=>l*e,getSize:(l)=>e,indexAtOffset:(l)=>{if(o===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(l/e),o-1))},getTotalSize:()=>o*e,getTotal:()=>o,rebuild:(l)=>{o=l},isVariable:()=>!1}},Dt=(e,t)=>{let o=t,l=new Float64Array(0),i=(r)=>{o=r,l=new Float64Array(r+1),l[0]=0;for(let d=0;d<r;d++)l[d+1]=l[d]+e(d)};i(t);let u=(r)=>{if(o===0)return 0;if(r<=0)return 0;if(r>=l[o])return o-1;let d=0,S=o-1;while(d<S){let y=d+S+1>>>1;if(l[y]<=r)d=y;else S=y-1}return d};return{getOffset:(r)=>{if(r<=0)return 0;if(r>=o)return l[o];return l[r]},getSize:(r)=>e(r),indexAtOffset:(r)=>u(r),getTotalSize:()=>l[o]??0,getTotal:()=>o,rebuild:(r)=>i(r),isVariable:()=>!0}},Ae=(e,t)=>{if(typeof e==="number")return kt(e,t);return Dt(e,t)};function xt(e){let t=[],o=`${e}-item`,l=document.createElement("div");return l.className=o,{acquire(){if(t.length>0)return t.pop();return l.cloneNode(!1)},release(i){if(i.className=o,i.removeAttribute("style"),i.removeAttribute("id"),i.removeAttribute("role"),i.removeAttribute("aria-selected"),i.removeAttribute("aria-posinset"),i.removeAttribute("aria-setsize"),i.removeAttribute("data-index"),i.removeAttribute("data-id"),i.textContent="",t.length<100)t.push(i)},get size(){return t.length},clear(){t.length=0}}}function Be(e){let t=e.querySelectorAll("a[href],button,input,select,textarea,[tabindex]");for(let o=0;o<t.length;o++)t[o].setAttribute("tabindex","-1")}function Ke(e){if(typeof e==="string"){let t=document.querySelector(e);if(!t)throw Error(`[vlist] Container not found: ${e}`);return t}return e}function Et(e,t,o,l){let i=o?`${t} ${t}--horizontal`:t,u=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",r=o?"position:relative;height:100%;overflow-anchor:none":"position:relative;width:100%;overflow-anchor:none",d=' role="list"';if(l)d+=` aria-label="${l.replace(/"/g,""")}"`;if(o)d+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${i}"><div class="${t}-viewport" style="${u}" tabindex="-1"><div class="${t}-content" style="${r}"${d}></div></div></div>`);let S=e.lastElementChild,y=S.firstElementChild,R=y.firstElementChild,I=document.createElement("div");return I.className=`${t}-live`,I.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",I.setAttribute("aria-live","polite"),I.setAttribute("aria-atomic","true"),I.setAttribute("role","status"),S.appendChild(I),{root:S,viewport:y,content:R,liveRegion:I}}function yt(e){let{state:t,viewport:o,isX:l,onFrame:i,onIdle:u}=e,r=e.idleTimeout||ce,d=null,S=null;function y(L=l?o.scrollLeft:o.scrollTop){t.prevScrollPosition=t.scrollPosition,t.scrollPosition=L,t.scrollDirection=L>t.prevScrollPosition?1:L<t.prevScrollPosition?-1:0,i(),R()}function R(){if(d!==null)clearTimeout(d);d=setTimeout(()=>{d=null,t.scrollDirection=0,u()},r)}function I(){if(S!==null)cancelAnimationFrame(S),S=null}function v(L,H,O,p=Te,F){I();let h=t.scrollPosition,A=typeof L==="function"?L:()=>L,C=A();if(Math.abs(C-h)<1){if(O)O(C);else if(l)o.scrollLeft=C;else o.scrollTop=C;F?.();return}let a=performance.now();function b(M){C=A();let T=M-a,P=Math.min(T/H,1),m=h+(C-h)*p(P);if(O)O(m);else if(l)o.scrollLeft=m;else o.scrollTop=m;if(!O)y(m);if(P<1)S=requestAnimationFrame(b);else S=null,F?.()}S=requestAnimationFrame(b)}return{attach(){},detach(){if(I(),d!==null)clearTimeout(d),d=null},cancelScroll:I,smoothScrollTo:v,commitScroll:y}}function Vt(e,t){if(e.getTotal()<=0)return{index:0,offsetPx:0};let l=t<=0?0:t,i=e.indexAtOffset(l),u=l-e.getOffset(i);return{index:i,offsetPx:u>0?u:0}}function Ft(e,t){let o=Nt(e,t);return e.getOffset(o.index)+o.offsetPx}function Nt(e,t){let o=e.getTotal();if(o<=0)return{index:0,offsetPx:0};let{index:l,offsetPx:i}=t;if(l<0)return{index:0,offsetPx:0};if(l>o-1)l=o-1;while(i>0&&l<o-1){let u=e.getSize(l);if(i<u)break;i-=u,l++}while(i<0&&l>0)l--,i+=e.getSize(l);if(i<0)i=0;return{index:l,offsetPx:i}}function It(e){let{sizeCache:t,getPixel:o,setPixel:l,getContainerSize:i}=e;function u(){let d=t.getTotalSize()+e.padding-i();return d>0?d:0}function r(d){if(d<=0)return 0;let S=u();return d>S?S:d}return{getLogical(){return Vt(t,o())},setLogical(d){l(r(Ft(t,d)))},getPixelEquivalent(){return o()},setPixelEquivalent(d){l(r(d))},getMaxPixelEquivalent:u,getRenderOrigin:e.getRenderOrigin,scrollByPx(d){l(r(o()+d))}}}var Se=[],Bt={calculate:Se,commit:Se,afterScroll:Se,idle:Se,resize:Se};function Tt(e){if(e.length===0)return Bt;let t=[],o=[],l=[],i=[],u=[];for(let r=0;r<e.length;r++){let d=e[r].hooks;if(d===void 0)continue;if(d.onCalculate!==void 0)t.push(d.onCalculate);if(d.onCommit!==void 0)o.push(d.onCommit);if(d.onAfterScroll!==void 0)l.push(d.onAfterScroll);if(d.onIdle!==void 0)i.push(d.onIdle);if(d.onResize!==void 0)u.push(d.onResize)}return{calculate:t,commit:o,afterScroll:l,idle:i,resize:u}}function Lt(e,t){for(let o=0;o<e.length;o++)e[o](t)}function Ct(e,t){for(let o=0;o<e.length;o++)e[o](t)}function $e(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function Pt(e){for(let t=0;t<e.length;t++)e[t]()}function At(e,t,o){for(let l=0;l<e.length;l++)e[l](t,o)}function zt(e,t,o,l,i,u,r,d){let S=l!==0||i!==0;return{prefix:e,selectedClass:`${e}-item--selected`,focusedClass:`${e}-item--focused`,placeholderClass:`${e}-item--placeholder`,replacedClass:`${e}-item--replaced`,translateProp:t?"translateX(":"translateY(",sizeProp:t?"width":"height",itemRole:"listitem",interactive:!1,startPadding:o,gap:r,hasCrossPad:S,crossStartProp:S?t?"top":"left":"",crossEndProp:S?t?"bottom":"right":"",crossStartVal:S?l+"px":"",crossEndVal:S?i+"px":"",oddClass:u,emitter:d??null,indexMap:null,ariaTotalFn:null}}function Kt(e,t,o,l,i){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:u,containerSize:r,totalItems:d}=e,S=i??0;e.totalSize=t.getTotalSize();let y=t.indexAtOffset(S>0?Math.max(0,u-S):u),R=t.indexAtOffset(u+r);if(R<d-1)R++;y=Math.max(0,y),R=Math.min(d-1,Math.max(0,R));let I=Math.max(0,y-o),v=Math.min(d-1,R+o),L=Math.ceil(r/1)+o*2+10,H=v-I+1,O=Math.min(H,e.capacity,L);if(I===e.prevRangeStart&&v===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=O,e.startIndex=I;for(let p=0;p<O;p++){let F=I+p;e.visibleIndices[p]=F,e.visibleOffsets[p]=t.getOffset(F),e.visibleSizes[p]=t.getSize(F)}return Lt(l.calculate,e),e.prevRangeStart=I,e.prevRangeEnd=v,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var U={selected:!1,focused:!1};function $t(e,t,o){for(let l=0;l<t;l++)if(e[l]===o)return!0;return!1}function Gt(e,t){if(t<=1)return!0;let o=e[0];for(let l=1;l<t;l++){let i=e[l];if(i!==o+1)return!1;o=i}return!0}function Ut(e,t,o,l,i,u,r,d,S,y){let R=S?null:i(),{visibleCount:I,visibleIndices:v}=e,L=r.ariaTotalFn?r.ariaTotalFn():e.totalItems,H=r.interactive?String(L):"",O=r.interactive&&L!==e.prevAriaTotal,p=null,F=r.indexMap;for(let h=0;h<I;h++){let A=v[h],C=F?F(A):A,a=e.visibleOffsets[h],b=e.visibleSizes[h],M=S?S(A):R[A];if(y)y(C,U);else U.selected=!1,U.focused=!1;let T=u.get(A),P=T;if(T===void 0){let m=t.acquire();if(M!==void 0){let g;try{g=l(M,C,U)}catch(w){if(r.emitter)r.emitter.emit("error",{error:w instanceof Error?w:Error(String(w)),context:`template:render:${C}`});t.release(m);continue}if(typeof g==="string")m.innerHTML=g;else m.textContent="",m.appendChild(g);Be(m)}if(m.setAttribute("role",r.itemRole),m.setAttribute("data-index",String(C)),r.interactive)m.id=r.prefix+"-item-"+A,m.setAttribute("aria-posinset",String(C+1)),m.setAttribute("aria-setsize",H);if(M!==void 0){let g=String(M.id);if(m.setAttribute("data-id",g),g.startsWith(Le))m.classList.add(r.placeholderClass)}if(r.hasCrossPad)m.style.setProperty(r.crossStartProp,r.crossStartVal),m.style.setProperty(r.crossEndProp,r.crossEndVal);if(y){if(m.classList.toggle(r.selectedClass,U.selected),m.classList.toggle(r.focusedClass,U.focused),U.selected)m.setAttribute("aria-selected","true");else m.removeAttribute("aria-selected");m._lastSelected=U.selected,m._lastFocused=U.focused}if(r.oddClass)m.classList.toggle(r.oddClass,(A&1)===1);let W=a-e.baseOffset+r.startPadding;m.style.transform=r.translateProp+W+"px)",m._lastOffset=W;let x=b-r.gap;if(m.style[r.sizeProp]=x+"px",m._lastSize=x,m._lastItem=M,u.set(A,m),p===null)p=document.createDocumentFragment();p.appendChild(m)}else{if(O)T.setAttribute("aria-setsize",H);if(M!==void 0&&P._lastItem!==M){let x=T.getAttribute("data-id"),g=String(M.id),w;try{w=l(M,C,U)}catch(B){if(r.emitter)r.emitter.emit("error",{error:B instanceof Error?B:Error(String(B)),context:`template:render:${C}`});continue}if(typeof w==="string")T.innerHTML=w;else T.textContent="",T.appendChild(w);if(Be(T),T.setAttribute("data-id",g),P._lastItem=M,x!==g){let B=x!==null&&x.startsWith(Le),E=g.startsWith(Le);if(B!==E)T.classList.toggle(r.placeholderClass,E);if(B&&!E)T.classList.add(r.replacedClass),setTimeout(()=>{T.classList.remove(r.replacedClass)},300)}}if(y){if(P._lastSelected!==U.selected){if(T.classList.toggle(r.selectedClass,U.selected),U.selected)T.setAttribute("aria-selected","true");else T.removeAttribute("aria-selected");P._lastSelected=U.selected}if(P._lastFocused!==U.focused)T.classList.toggle(r.focusedClass,U.focused),P._lastFocused=U.focused}let m=a-e.baseOffset+r.startPadding;if(P._lastOffset!==m)T.style.transform=r.translateProp+m+"px)",P._lastOffset=m;let W=b-r.gap;if(P._lastSize!==W)T.style[r.sizeProp]=W+"px",P._lastSize=W}}if(p!==null)o.appendChild(p);if(I>0&&Gt(v,I)){let h=v[0],A=v[I-1];for(let[C,a]of u)if(C<h||C>A)a.remove(),t.release(a),u.delete(C)}else for(let[h,A]of u)if(!$t(v,I,h))A.remove(),t.release(A),u.delete(h);if(r.interactive)e.prevAriaTotal=e.totalItems;Ct(d.commit,e)}function Ge(e,t,o,l,i,u,r,d,S,y,R,I){if(Kt(e,t,o,y,S.startPadding))Ut(e,l,i,u,r,d,S,y,R,I)}var Ue=()=>{let e={},t=(u,r)=>{if(!e[u])e[u]=new Set;return e[u].add(r),()=>o(u,r)},o=(u,r)=>{e[u]?.delete(r)};return{on:t,off:o,emit:(u,r)=>{e[u]?.forEach((d)=>{try{d(r)}catch(S){console.error(`[vlist] Error in event handler for "${String(u)}":`,S)}})},clear:(u)=>{if(u)delete e[u];else for(let r in e)delete e[r]}}};var Mt=2,wt=(e=0)=>({velocity:0,sampleCount:0}),_t=(e,t)=>{let o=performance.now(),l=e._lt??o,i=e._lp??t,u=o-l;if(e._lp=t,e._lt=o,u===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(u>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(t-i)/u,e.sampleCount=Math.min(e.sampleCount+1,5),e};function Wt(e){let{item:t}=e;if(t.height!==void 0&&typeof t.height==="number"){if(!Number.isFinite(t.height)||t.height<=0)throw Error(`vlist: item.height must be a positive number, got ${t.height}`)}if(t.width!==void 0&&typeof t.width==="number"){if(!Number.isFinite(t.width)||t.width<=0)throw Error(`vlist: item.width must be a positive number, got ${t.width}`)}if(t.estimatedHeight!==void 0){if(!Number.isFinite(t.estimatedHeight)||t.estimatedHeight<=0)throw Error(`vlist: item.estimatedHeight must be a positive number, got ${t.estimatedHeight}`)}if(t.estimatedWidth!==void 0){if(!Number.isFinite(t.estimatedWidth)||t.estimatedWidth<=0)throw Error(`vlist: item.estimatedWidth must be a positive number, got ${t.estimatedWidth}`)}if(t.gap!==void 0){if(typeof t.gap!=="number"||!Number.isFinite(t.gap)||t.gap<0)throw Error(`vlist: item.gap must be a non-negative number, got ${t.gap}`)}if(e.overscan!==void 0){if(typeof e.overscan!=="number"||!Number.isFinite(e.overscan)||e.overscan<0)throw Error(`vlist: overscan must be a non-negative number, got ${e.overscan}`)}let o=e.scroll;if(o?.mode!==void 0||o?.runway!==void 0)throw Error('vlist 3.0: scroll.mode and scroll.runway were removed; bounded mode is gone. Use "vlist" for huge lists or "vlist/native" for native scrolling.')}function qt(e,t){let o=e==="horizontal"?"x":"y";if(t.some((i)=>i.name==="grid"))return{primary:o,cross:o==="x"?"y":"x"};return{primary:o}}function Xt(e,t){let o=qt(e.orientation,t),l=o.primary==="x",i=vt(e.padding);return{axis:o,hasCrossAxis:o.cross!==void 0,overscan:e.overscan??Ie,reverse:e.reverse??!1,classPrefix:e.classPrefix??ut,mainAxisPadding:gt(i,l),crossAxisPadding:ht(i,l),startPadding:l?i.left:i.top,endPadding:l?i.right:i.bottom,crossPadStart:l?i.top:i.left,crossPadEnd:l?i.bottom:i.right,striped:e.item.striped||!1,gap:e.item.gap??0}}function Yt(e,t){if(t)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function Zt(e){let t=[...e];return t.sort((o,l)=>(o.priority??50)-(l.priority??50)),t}function jt(e){let t=new Set;for(let o of e){if(t.has(o.name))throw Error(`[vlist] Duplicate plugin: ${o.name}`);t.add(o.name)}for(let o of e)if(o.conflicts){for(let l of o.conflicts)if(t.has(l))throw Error(`[vlist] Plugin "${o.name}" conflicts with "${l}"`)}}function Jt(e,t=[]){return Qt(e,t,bt)}function Qt(e,t=[],o,l){if(Wt(e),o){if(typeof e.scroll?.scrollbar==="string")throw Error('vlist 3.0: scroll.scrollbar strings require "vlist/native"; use the scrollbar() plugin with "vlist".');if(e.orientation==="horizontal"&&getComputedStyle(Ke(e.container)).direction==="rtl")throw Error('vlist: RTL horizontal lists require createVList from "vlist/native"');for(let c of t)if(c.name==="carousel"||c.name==="sortable")throw Error(`vlist: ${c.name} requires createVList from "vlist/native"`)}let i=Xt(e,t),u=i.axis.primary==="x",r=Yt(e,u),d=i.gap,S=d>0?typeof r==="function"?(c)=>r(c)+d:r+d:r,y=typeof r==="number"?r:20,R=e.items?.length??0,I=i.striped?`${i.classPrefix}-item--odd`:"",v=Ue(),L=zt(i.classPrefix,u,i.startPadding,i.crossPadStart,i.crossPadEnd,I,d,v),H=t.length>0?Zt(t):t;if(t.length>0)jt(H);let O=Ke(e.container),p=Et(O,i.classPrefix,u,e.ariaLabel);if(e.scroll?.scrollbar==="none")p.viewport.classList.add(`${i.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")p.viewport.classList.add(`${i.classPrefix}-viewport--gutter-stable`);let h=Ae(S,R);if(d>0){let c=h.getTotalSize;h.getTotalSize=()=>{let n=c();return n>0?n-d:0}}let A=xt(i.classPrefix),C=Math.ceil(4096/y)+i.overscan*2+8,a=St(C);a.totalItems=R;let b=e.items??[],M=()=>b,T=new Map,P=wt(),m={velocity:0,reliable:!1},W={range:{start:0,end:-1}},x={scrollPosition:0,direction:"down"},g={scrollPosition:0},w=-1,B=-1,E=-1,D=null,N=Tt(H),K=new Map,X=[],re=[],ie=[],Y=null,Q=null,de,se,ee=null,me=null,s=null,z=null,G=null,k=null,Z=null,fe=null,ae=!1,We=!1,pe=null,qe=0,Xe=0,Ye=null,Ze=null,je=null,ze=null,Me=null,we=null,xe=null,j=null,be=null;a.containerSize=u?p.viewport.clientWidth:p.viewport.clientHeight,a.crossSize=u?p.viewport.clientHeight:p.viewport.clientWidth;function _e(c){if(Q)Q(c);else{if(u)p.viewport.scrollLeft=c;else p.viewport.scrollTop=c;se?.()}}let Je=It({sizeCache:h,getPixel:()=>a.scrollPosition,setPixel:_e,getRenderOrigin:()=>a.baseOffset,getContainerSize:()=>a.containerSize,padding:i.mainAxisPadding});if(t.length>0){let c={dom:p,sizeCache:h,scroll:Je,pool:A,config:i,emitter:v,template:e.item.template,registerMethod(n,f){K.set(n,f)},getMethod(n){return K.get(n)},registerClickHandler(n){X.push(n)},registerKeydownHandler(n){re.push(n)},registerDestroyHandler(n){ie.push(n)},enableListboxRole(){let n=p.content.getAttribute("role");if(!n||n==="list")p.content.setAttribute("role","listbox"),p.content.setAttribute("tabindex","0");L.itemRole="option",L.interactive=!0},setSizeConfig(n){let f=Ae(n,a.totalItems),_=K.get("_setSizeCacheBase");if(_){let V=h.rebuild;Object.assign(h,f),h.rebuild=V,_(f.rebuild)}else Object.assign(h,f)},setScrollSource(n){Q=n.write,de=n.onContentSize,ae=!0},commitScroll(n){se(n)},setBoundedWrap(n){be=n},cancelScroll(){le?.cancelScroll()},setVirtualTotalFn(n){Y=n,L.ariaTotalFn=n},setIndexMapFn(n){L.indexMap=n},getItems:M,getItem(n){return s?s(n):b[n]},getState(){return a},rebuildSizeCache(){h.rebuild(a.totalItems)},updateContentSize:et,setRenderFn(n,f){ee=n,me=f},renderIfNeeded(){ve()},forceRender(){ne()},setGetItemFn(n){s=n},setItemStateFn(n){z=n},getItemStateFn(){return z},get rawSizeSpec(){return r},scrollTo:_e,shiftScroll(n){if(j?.shiftBy)j.shiftBy(n);else c.scrollTo(a.scrollPosition+n)},smoothScrollTo(n,f,_,V){if(ze)ze(n,f,Q??void 0,_,V);else c.scrollTo(typeof n==="function"?n():n)},disableDefaultResize(){We=!0},setScrollTarget(n){pe=n},setScrollToPosFn(n){Me=n},setScrollToIndexFn(n){we=n},onScrollFrame:Oe,onScrollIdle:Ee,removeItemById(n){if(G)return G(n);let f=b.findIndex((_)=>_.id===n);if(f===-1)return-1;return b.splice(f,1),a.totalItems=b.length,h.rebuild(a.totalItems),te(),f},insertItemAt(n,f){if(k){k(n,f);return}b.splice(f,0,n),a.totalItems=b.length,h.rebuild(a.totalItems),te()},setRemoveItemFn(n){G=n},setInsertItemFn(n){k=n},setUpdateItemFn(n){Z=n},setGetIndexByIdFn(n){fe=n},getRenderedElement(n){let f=K.get("_getRenderedElement");if(f)return f(n);return T.get(n)??null},setNavConfig(n){if(n.ud!==void 0)qe=n.ud;if(n.lr!==void 0)Xe=n.lr;if(n.scrollIndex)Ye=n.scrollIndex;if(n.navigate)Ze=n.navigate;if(n.total)je=n.total},getNavConfig:(()=>{let n={ud:0,lr:0,scrollIndex:null,navigate:null,total:null};return()=>(n.ud=qe,n.lr=Xe,n.scrollIndex=Ye,n.navigate=Ze,n.total=je,n)})()};for(let n of H)if(n.setup)try{n.setup(c)}catch(f){v.emit("error",{error:f instanceof Error?f:Error(String(f)),context:`plugin:setup:${n.name}`})}}let He=i.classPrefix+"--scrolling",ue=!1,Re=e.scroll?.idleTimeout??ce;function Qe(){if(x.scrollPosition=a.scrollPosition,u)x.direction=a.scrollDirection>0?"right":"left";else x.direction=a.scrollDirection>0?"down":"up";if(v.emit("scroll",x),_t(P,a.scrollPosition),m.velocity=P.velocity,m.reliable=P.sampleCount>=Mt,v.emit("velocity:change",m),a.startIndex!==w||a.prevRangeEnd!==B)w=a.startIndex,B=a.prevRangeEnd,W.range.start=a.startIndex,W.range.end=a.prevRangeEnd,v.emit("range:change",W)}function et(c,n=!0){if(j){if(n)j.refresh(c);return}a.totalSize=c;let f=c+i.mainAxisPadding;if(de?.(f),n)p.content.style[u?"width":"height"]=f+"px"}function te(){let c=ee?a.totalSize:h.getTotalSize();if(et(c,!ee),j||ee)return;l?.onContentSize(c,v)}function tt(){if(!xe)return;if((Y?Y():b.length)===0)return;let n=xe;xe=null,Ve.scrollToIndex(n.index,n.alignOrOptions)}function ve(){if(tt(),ee)ee();else Ge(a,h,i.overscan,A,p.content,e.item.template,M,T,L,N,s,z)}function Oe(){if(!ue)ue=!0,p.root.classList.add(He);if(ve(),$e(N.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==E)E=a.scrollPosition,Qe()}function Ee(){if(ue)ue=!1,p.root.classList.remove(He);a.scrollDirection=0,Pt(N.idle),m.velocity=0,m.reliable=!1,v.emit("velocity:change",m),g.scrollPosition=a.scrollPosition,v.emit("scroll:idle",g)}function ne(){if(tt(),a.renderPending=!0,me)me();else Ge(a,h,i.overscan,A,p.content,e.item.template,M,T,L,N,s,z);if($e(N.afterScroll,a.scrollPosition,a.scrollDirection),a.scrollPosition!==E){if(E=a.scrollPosition,Qe(),D!==null)clearTimeout(D);D=setTimeout(Ee,Re)}}let nt=ae?!1:e.scroll?.wheel!==!1,le;if(ae&&be)throw Error("vlist: page() is not compatible with the carousel plugin — bounded page-mode scrolling is not implemented yet.");if(!ae&&(o||be))j=(o??l.wrap)({state:a,sizeCache:h,viewport:p.viewport,content:p.content,isX:u,wheelEnabled:nt,idleTimeout:Re,...pe?{scrollTarget:pe}:{},mainAxisPadding:i.mainAxisPadding,...be?{wrap:be}:{},onFrame:Oe,onIdle:Ee}),le=j,Q=(c)=>j.setLogical(c);else{let c=(ae?yt:l.native)({state:a,viewport:p.viewport,isX:u,wheelEnabled:nt,idleTimeout:Re,...pe?{scrollTarget:pe}:{},onFrame:Oe,onIdle:Ee});le=c,se=c.commitScroll}ze=le.smoothScrollTo;function ke(c){let f=c.target.closest("[data-index]");if(!f)return null;let _=parseInt(f.getAttribute("data-index"),10);if(Number.isNaN(_))return null;let V=K.get("_layoutToDataIndex"),q;if(V){let J=V(_);if(J<0)return null;let he=K.get("_getItem");q=he?he(J):s?s(J):b[J]}else q=s?s(_):b[_];if(q===void 0)return null;return{item:q,index:_}}function ot(c){for(let f=0;f<X.length;f++)X[f](c);let n=ke(c);if(n)v.emit("item:click",{item:n.item,index:n.index,event:c})}function rt(c){let n=ke(c);if(n)v.emit("item:dblclick",{item:n.item,index:n.index,event:c})}function it(c){let n=ke(c);if(n)v.emit("item:contextmenu",{item:n.item,index:n.index,event:c})}function lt(c){let n=c.target?.tagName;if((n==="INPUT"||n==="TEXTAREA"||n==="SELECT")&&!((c.ctrlKey||c.metaKey)&&(c.key==="f"||c.key==="F")))return;for(let f=0;f<re.length;f++)re[f](c)}if(p.content.addEventListener("click",ot),p.content.addEventListener("dblclick",rt),p.content.addEventListener("contextmenu",it),re.length>0)p.root.addEventListener("keydown",lt);let De=null;if(!We)setTimeout(()=>{if(a.destroyed)return;De=new ResizeObserver((n)=>{for(let f of n){let{width:_,height:V}=f.contentRect,q=u?_:V,J=u?V:_;if(Math.abs(q-a.containerSize)<1&&Math.abs(J-a.crossSize)<1)continue;if(a.containerSize=q,a.crossSize=J,a.resizeCapacity(q,y,i.overscan),j)j.refresh(h.getTotalSize());ne(),At(N.resize,_,V),v.emit("resize",{width:_,height:V})}}),De.observe(p.viewport)},0);a.resizeCapacity(a.containerSize,y,i.overscan),te(),a.initialized=!0;let ge=null;if(e.defer)ge=requestAnimationFrame(()=>{if(ge=null,!a.destroyed)ve()});else ve();if(!ae)le.attach();let Ve={get element(){return p.root},get items(){return b},get total(){return Y?Y():b.length},setItems(c){b=[...c],a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},appendItems(c){b.push(...c),a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},prependItems(c){b.unshift(...c),a.totalItems=b.length,h.rebuild(a.totalItems),te(),ne()},updateItem(c,n){if(Z){if(!Z(c,n))return}else{let f=b.findIndex((_)=>_.id===c);if(f===-1)return;b[f]={...b[f],...n}}ne()},insertItem(c,n){if(k)k(c,n??a.totalItems);else{if(n===void 0)b.push(c);else b.splice(n,0,c);a.totalItems=b.length,h.rebuild(a.totalItems),te()}ne()},removeItem(c){if(G){if(G(c)<0)return}else{let n=b.findIndex((f)=>f.id===c);if(n===-1)return;b.splice(n,1),a.totalItems=b.length,h.rebuild(a.totalItems),te()}ne()},removeItems(c){if(G){let V=0;for(let q of c)if(G(q)>=0)V++;if(V>0)ne();return V}let n=new Set(c),f=b.length;b=b.filter((V)=>!n.has(V.id));let _=f-b.length;if(_>0)a.totalItems=b.length,h.rebuild(a.totalItems),te(),a.renderPending=!0,ve();return _},getItemAt(c){if(L.indexMap)return b[c];return s?s(c):b[c]},getIndexById(c){if(fe)return fe(c);return b.findIndex((n)=>n.id===c)},scrollToIndex(c,n="start"){let f=Y?Y():b.length;if(f===0){xe={index:c,alignOrOptions:n};return}let _=Math.max(0,Math.min(c,f-1)),V=typeof n==="string"?n:n.align??"start",q=typeof n==="object"?n.behavior:void 0,J=typeof n==="object"?n.duration:void 0,he=typeof n==="object"?n.easing:void 0;if(we&&we(_,V,q,J,he)!==!1)return;let Fe=h.getOffset(_),st=h.getSize(_),ye=a.containerSize,Ht=h.getTotalSize(),at=i.mainAxisPadding,Rt=Math.max(0,Ht+at-ye),oe;if(Me)oe=Me(_,h,ye,f,V);else{let Ot=i.startPadding;switch(V){case"center":oe=Ot+Fe-(ye-st)/2;break;case"end":oe=Fe+st+at-ye;break;default:oe=Fe}oe=Math.max(0,Math.min(oe,Rt))}if(q==="smooth")le.smoothScrollTo(oe,J??ct,Q??void 0,he);else _e(oe)},getScrollPosition(){return Je.getPixelEquivalent()},on:v.on.bind(v),off:v.off.bind(v),destroy(){if(a.destroyed)return;if(a.destroyed=!0,ue)ue=!1,p.root.classList.remove(He);if(ge!==null)cancelAnimationFrame(ge),ge=null;if(D!==null)clearTimeout(D),D=null;le.detach(),De?.disconnect(),p.content.removeEventListener("click",ot),p.content.removeEventListener("dblclick",rt),p.content.removeEventListener("contextmenu",it),p.root.removeEventListener("keydown",lt);let c=[];for(let n of ie)try{n()}catch(f){c.push(f instanceof Error?f:Error(String(f)))}for(let n of H)if(n.destroy)try{n.destroy()}catch(f){c.push(f instanceof Error?f:Error(String(f)))}for(let[,n]of T)n.remove();if(T.clear(),A.clear(),p.root.remove(),v.emit("destroy",void 0),v.clear(),c.length>0)for(let n of c)console.error("vlist: error during destroy:",n)}};for(let[c,n]of K)Ve[c]=n;return Ve}export{Jt as createVList};
|
package/dist/types.d.ts
CHANGED
|
@@ -291,36 +291,12 @@ export interface ScrollConfig {
|
|
|
291
291
|
* Useful for carousels, wizards, and circular navigation.
|
|
292
292
|
*/
|
|
293
293
|
wrap?: boolean;
|
|
294
|
-
/**
|
|
295
|
-
|
|
296
|
-
*
|
|
297
|
-
* - *omitted* — Custom scrollbar (default), native scrollbar hidden via CSS
|
|
298
|
-
* - `'native'` — Browser native scrollbar
|
|
299
|
-
* - `'none'` — No scrollbar at all (native hidden, custom not created)
|
|
300
|
-
* - `ScrollbarOptions` — Custom scrollbar with fine-tuning options
|
|
301
|
-
*/
|
|
302
|
-
scrollbar?: "native" | "none" | ScrollbarOptions;
|
|
294
|
+
/** Options consumed by vlist/config; use scrollbar() with the core factory. */
|
|
295
|
+
scrollbar?: ScrollbarOptions;
|
|
303
296
|
/** External scroll element for window scrolling */
|
|
304
297
|
element?: Window;
|
|
305
298
|
/** Scroll idle detection timeout in ms (default: 150) */
|
|
306
299
|
idleTimeout?: number;
|
|
307
|
-
/**
|
|
308
|
-
* Scroll model (RFC-012). `"native"` (default) sizes the content element to
|
|
309
|
-
* the full virtual size — simple, but hits the browser's ~16.7M px limit.
|
|
310
|
-
* `"bounded"` sizes the content to a viewport-multiple runway and rebases a
|
|
311
|
-
* logical origin near the edges, supporting unbounded item counts without
|
|
312
|
-
* compressing the scroll space.
|
|
313
|
-
*/
|
|
314
|
-
mode?: "native" | "bounded";
|
|
315
|
-
/**
|
|
316
|
-
* Runway size as a multiple of the viewport, used only with
|
|
317
|
-
* `mode: "bounded"` (default 2). The bounded content element is sized to
|
|
318
|
-
* `viewport × runway` (capped at the real virtual size). Larger values mean
|
|
319
|
-
* more native-scroll headroom and less frequent rebasing, at the cost of a
|
|
320
|
-
* bigger content element. Clamped up to a minimum of 1.5 so native scroll and
|
|
321
|
-
* touch momentum always have some room.
|
|
322
|
-
*/
|
|
323
|
-
runway?: number;
|
|
324
300
|
}
|
|
325
301
|
/** Custom scrollbar fine-tuning options */
|
|
326
302
|
export interface ScrollbarOptions {
|
package/dist/vlist-table.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.vlist--table{display:flex;flex-direction:column;overflow:hidden;min-height:inherit}.vlist--table .vlist-viewport{flex:1;min-height:0;height:auto;overflow:auto}.vlist--table .vlist-table-header{position:static}.vlist--table .vlist-scrollbar__hover{top:var(--vlist-table-header-height,0px);height:calc(100% - var(--vlist-table-header-height,0px))}.vlist--table .vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:block;width:0}.vlist--table .vlist-content{contain:layout style}.vlist-table-header{position:absolute;top:0;left:0;right:0;z-index:5;overflow:hidden;display:flex;align-items:stretch;box-sizing:border-box;will-change:scroll-position;contain:layout style;background-color:var(--vlist-bg,#ffffff);border-bottom:1px solid var(--vlist-border,#e5e7eb);font-weight:600;font-size:0.8125rem;letter-spacing:0.01em;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-scroll{position:relative;display:flex;align-items:stretch;height:100%;min-width:100%;flex-shrink:0}.vlist-table-header-cell{position:relative;display:flex;align-items:center;height:100%;box-sizing:border-box;flex-shrink:0;user-select:none;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);border-right:1px solid transparent;transition:background-color 0.15s ease}.vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,rgba(0,0,0,0.04))}.vlist-table-header-cell--sortable{cursor:pointer}.vlist-table-header-cell--sortable:active{background-color:var(--vlist-bg-selected,rgba(59,130,246,0.12))}.vlist-table-header-cell--center{justify-content:center}.vlist-table-header-cell--right{justify-content:flex-end}.vlist-table-header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;pointer-events:none}.vlist-table-header-sort{margin-left:4px;flex-shrink:0;opacity:0;font-size:0.7em;transition:opacity 0.15s ease;pointer-events:none;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-resize{position:absolute;top:0;right:-3px;bottom:0;width:5px;cursor:col-resize;z-index:2;touch-action:none;opacity:0;transition:opacity 0.15s ease}.vlist-table-header-resize::after{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;transform:translateX(-50%);background-color:var(--vlist-border,#e5e7eb);transition:background-color 0.15s ease}.vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}.vlist-table-header-cell:hover .vlist-table-header-resize{opacity:1}.vlist-table-header-resize--active{opacity:1}.vlist-table-header-resize--active::after{background-color:var(--vlist-border-selected,#3b82f6)}.vlist--col-resizing,.vlist--col-resizing *{cursor:col-resize !important;user-select:none !important}.vlist-table-row{position:absolute;top:0;left:0;display:flex;box-sizing:border-box;contain:content;border-bottom:none;background-color:var(--vlist-bg,#ffffff);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration,150ms) var(--vlist-transition-timing,ease-in-out);will-change:transform}.vlist--scrolling .vlist-table-row{transition:none}.vlist-table-row.vlist-item--odd{background:var( --vlist-bg-striped,var(--vlist-bg-hover,rgba(0,0,0,0.02)) )}.vlist--selectable .vlist-table-row{cursor:pointer}.vlist--selectable .vlist-table-row:hover{background-color:var(--vlist-bg-hover,rgba(0,0,0,0.04))}.vlist-table-row.vlist-item--selected{background-color:var(--vlist-bg-selected,rgba(59,130,246,0.12))}.vlist-table-row.vlist-item--odd.vlist-item--selected{background:var(--vlist-bg-selected,rgba(59,130,246,0.12))}.vlist--selectable .vlist-table-row.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover,rgba(59,130,246,0.18))}.vlist--selectable .vlist-table-row.vlist-item--odd.vlist-item--selected:hover{background:var(--vlist-bg-selected-hover,rgba(59,130,246,0.18))}.vlist-table-row.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-table-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);font-size:0.875rem;color:var(--vlist-text,#111827)}.vlist-table-cell--center{text-align:center;justify-content:center}.vlist-table-cell--right{text-align:right;justify-content:flex-end}.vlist--table-row-borders .vlist-table-row{border-bottom:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-cell{border-right:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-header-cell{border-right-color:var(--vlist-border,#e5e7eb)}.vlist-table-group-header{display:flex;align-items:center;background-color:var(--vlist-group-header-bg,#f3f4f6);cursor:default}.vlist-table-group-header-content{display:flex;align-items:center;gap:12px;padding:0 16px;height:100%;background:var(--vlist-group-header-bg,#f3f4f6)}.vlist--table-row-borders .vlist-table-group-header{border-bottom:1px solid var(--vlist-border)}.vlist--table.vlist--grouped .vlist-sticky-header{order:1;z-index:4;border-bottom:none}.vlist--table.vlist--grouped .vlist-sticky-header .sticky-group{display:flex;font-size:0.8125rem;padding:0 16px;align-items:center;gap:12px;height:100%;color:var(--vlist-text-muted,#9ca3af)}.vlist--table.vlist--grouped .vlist-viewport{order:2}[data-theme-mode="dark"] .vlist-table-header,.dark .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-cell:hover,.dark .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,rgba(255,255,255,0.06))}[data-theme-mode="dark"] .vlist-table-header-resize::after,.dark .vlist-table-header-resize::after{background-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-resize:hover::after,.dark .vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}[data-theme-mode="dark"] .vlist-table-group-header,.dark .vlist-table-group-header{background-color:var(--vlist-group-header-bg,#1f2937)}[data-theme-mode="dark"] .vlist-table-group-header-content,.dark .vlist-table-group-header-content{color:var(--vlist-text-muted,#9ca3af)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,rgba(255,255,255,0.06))}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header-resize::after{background-color:var(--vlist-border,#374151)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-group-header{background-color:var(--vlist-group-header-bg,#1f2937)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-group-header-content{color:var(--vlist-text-muted,#9ca3af)}}.vlist-table-row.vlist-item--placeholder .vlist-table-cell{color:transparent}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>*{color:transparent;background-color:var(--vlist-border,#e5e7eb);border-radius:4px;animation:vlist-placeholder-pulse 2s ease-in-out infinite;line-height:1;min-width:1em}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>.vlist-table-cell-skeleton{display:inline-block;width:60%;height:0.8em}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>*>*{visibility:hidden}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>*[style]{background:var(--vlist-border,#e5e7eb) !important;color:transparent !important}[data-theme-mode="dark"] .vlist--table-row-borders .vlist-table-group-header,.dark .vlist--table-row-borders .vlist-table-group-header{border-top-color:var(--vlist-border,#374151)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist--table-row-borders .vlist-table-group-header{border-top-color:var(--vlist-border,#374151)}}
|
|
1
|
+
.vlist--table{display:flex;flex-direction:column;overflow:hidden;min-height:inherit}.vlist--table .vlist-viewport{flex:1;min-height:0;height:auto;overflow:auto}.vlist--table .vlist-table-header{position:static}.vlist--table .vlist-scrollbar__hover{top:var(--vlist-table-header-height,0px);height:calc(100% - var(--vlist-table-header-height,0px))}.vlist--table .vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:block;width:0}.vlist--table .vlist-content{contain:layout style}.vlist-table-header{position:absolute;top:0;left:0;right:0;z-index:5;overflow:hidden;display:flex;align-items:stretch;box-sizing:border-box;will-change:scroll-position;contain:layout style;background-color:var(--vlist-bg,#ffffff);border-bottom:1px solid var(--vlist-border,#e5e7eb);font-weight:600;font-size:0.8125rem;letter-spacing:0.01em;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-scroll{position:relative;display:flex;align-items:stretch;height:100%;min-width:100%;flex-shrink:0}.vlist-table-header-scroll:dir(rtl){flex-direction:row-reverse}.vlist-table-header-cell{position:relative;display:flex;align-items:center;height:100%;box-sizing:border-box;flex-shrink:0;user-select:none;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);border-right:1px solid transparent;transition:background-color 0.15s ease}.vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,rgba(0,0,0,0.04))}.vlist-table-header-cell--sortable{cursor:pointer}.vlist-table-header-cell--sortable:active{background-color:var(--vlist-bg-selected,rgba(59,130,246,0.12))}.vlist-table-header-cell--center{justify-content:center}.vlist-table-header-cell--right{justify-content:flex-end}.vlist-table-header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;pointer-events:none}.vlist-table-header-sort{margin-left:4px;flex-shrink:0;opacity:0;font-size:0.7em;transition:opacity 0.15s ease;pointer-events:none;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-resize{position:absolute;top:0;right:-3px;bottom:0;width:5px;cursor:col-resize;z-index:2;touch-action:none;opacity:0;transition:opacity 0.15s ease}.vlist-table-header-resize::after{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;transform:translateX(-50%);background-color:var(--vlist-border,#e5e7eb);transition:background-color 0.15s ease}.vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}.vlist-table-header-cell:hover .vlist-table-header-resize{opacity:1}.vlist-table-header-resize--active{opacity:1}.vlist-table-header-resize--active::after{background-color:var(--vlist-border-selected,#3b82f6)}.vlist--col-resizing,.vlist--col-resizing *{cursor:col-resize !important;user-select:none !important}.vlist-table-row{position:absolute;top:0;left:0;display:flex;box-sizing:border-box;contain:content;border-bottom:none;background-color:var(--vlist-bg,#ffffff);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration,150ms) var(--vlist-transition-timing,ease-in-out);will-change:transform}.vlist--scrolling .vlist-table-row{transition:none}.vlist-table-row.vlist-item--odd{background:var( --vlist-bg-striped,var(--vlist-bg-hover,rgba(0,0,0,0.02)) )}.vlist--selectable .vlist-table-row{cursor:pointer}.vlist--selectable .vlist-table-row:hover{background-color:var(--vlist-bg-hover,rgba(0,0,0,0.04))}.vlist-table-row.vlist-item--selected{background-color:var(--vlist-bg-selected,rgba(59,130,246,0.12))}.vlist-table-row.vlist-item--odd.vlist-item--selected{background:var(--vlist-bg-selected,rgba(59,130,246,0.12))}.vlist--selectable .vlist-table-row.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover,rgba(59,130,246,0.18))}.vlist--selectable .vlist-table-row.vlist-item--odd.vlist-item--selected:hover{background:var(--vlist-bg-selected-hover,rgba(59,130,246,0.18))}.vlist-table-row.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-table-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);font-size:0.875rem;color:var(--vlist-text,#111827)}.vlist-table-cell--center{text-align:center;justify-content:center}.vlist-table-cell--right{text-align:right;justify-content:flex-end}.vlist--table-row-borders .vlist-table-row{border-bottom:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-cell{border-right:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-header-cell{border-right-color:var(--vlist-border,#e5e7eb)}.vlist-table-group-header{display:flex;align-items:center;background-color:var(--vlist-group-header-bg,#f3f4f6);cursor:default}.vlist-table-group-header-content{display:flex;align-items:center;gap:12px;padding:0 16px;height:100%;background:var(--vlist-group-header-bg,#f3f4f6)}.vlist--table-row-borders .vlist-table-group-header{border-bottom:1px solid var(--vlist-border)}.vlist--table.vlist--grouped .vlist-sticky-header{order:1;z-index:4;border-bottom:none}.vlist--table.vlist--grouped .vlist-sticky-header .sticky-group{display:flex;font-size:0.8125rem;padding:0 16px;align-items:center;gap:12px;height:100%;color:var(--vlist-text-muted,#9ca3af)}.vlist--table.vlist--grouped .vlist-viewport{order:2}[data-theme-mode="dark"] .vlist-table-header,.dark .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-cell:hover,.dark .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,rgba(255,255,255,0.06))}[data-theme-mode="dark"] .vlist-table-header-resize::after,.dark .vlist-table-header-resize::after{background-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-resize:hover::after,.dark .vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}[data-theme-mode="dark"] .vlist-table-group-header,.dark .vlist-table-group-header{background-color:var(--vlist-group-header-bg,#1f2937)}[data-theme-mode="dark"] .vlist-table-group-header-content,.dark .vlist-table-group-header-content{color:var(--vlist-text-muted,#9ca3af)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,rgba(255,255,255,0.06))}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header-resize::after{background-color:var(--vlist-border,#374151)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-group-header{background-color:var(--vlist-group-header-bg,#1f2937)}:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist-table-group-header-content{color:var(--vlist-text-muted,#9ca3af)}}.vlist-table-row.vlist-item--placeholder .vlist-table-cell{color:transparent}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>*{color:transparent;background-color:var(--vlist-border,#e5e7eb);border-radius:4px;animation:vlist-placeholder-pulse 2s ease-in-out infinite;line-height:1;min-width:1em}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>.vlist-table-cell-skeleton{display:inline-block;width:60%;height:0.8em}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>*>*{visibility:hidden}.vlist-table-row.vlist-item--placeholder .vlist-table-cell>*[style]{background:var(--vlist-border,#e5e7eb) !important;color:transparent !important}[data-theme-mode="dark"] .vlist--table-row-borders .vlist-table-group-header,.dark .vlist--table-row-borders .vlist-table-group-header{border-top-color:var(--vlist-border,#374151)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]) .vlist--table-row-borders .vlist-table-group-header{border-top-color:var(--vlist-border,#374151)}}
|
package/dist/vlist.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}:root{--vlist-scrollbar-width:8px;--vlist-scrollbar-track-color:transparent;--vlist-scrollbar-radius:4px;--vlist-custom-scrollbar-width:8px;--vlist-custom-scrollbar-track-color:transparent;--vlist-custom-scrollbar-radius:4px;--vlist-custom-scrollbar-padding-top:2px;--vlist-custom-scrollbar-padding-right:2px;--vlist-custom-scrollbar-padding-bottom:2px;--vlist-custom-scrollbar-padding-left:2px;--vlist-custom-scrollbar-min-thumb-size:15px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out;--vlist-bg:#ffffff;--vlist-bg-hover:rgba(0,0,0,0.04);--vlist-bg-striped:rgba(0,0,0,0.02);--vlist-bg-selected:rgba(59,130,246,0.12);--vlist-bg-selected-hover:rgba(59,130,246,0.18);--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#f3f4f6;--vlist-scrollbar-thumb-color:#d1d5db;--vlist-scrollbar-thumb-hover-color:#9ca3af;--vlist-custom-scrollbar-thumb-color:rgba(0,0,0,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(0,0,0,0.3);--vlist-placeholder-bg:rgba(0,0,0,0.2);--vlist-placeholder-bg-strong:rgba(0,0,0,0.24)}[data-theme-mode="dark"]{--vlist-bg:#111827;--vlist-bg-hover:rgba(255,255,255,0.06);--vlist-bg-striped:rgba(255,255,255,0.02);--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.28);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#1e2433;--vlist-scrollbar-thumb-color:#4b5563;--vlist-scrollbar-thumb-hover-color:#6b7280;--vlist-custom-scrollbar-thumb-color:rgba(255,255,255,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(255,255,255,0.3);--vlist-placeholder-bg:rgba(255,255,255,0.3);--vlist-placeholder-bg-strong:rgba(255,255,255,0.35)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]){--vlist-bg:#111827;--vlist-bg-hover:rgba(255,255,255,0.06);--vlist-bg-striped:rgba(255,255,255,0.02);--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.28);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#1e2433;--vlist-scrollbar-thumb-color:#4b5563;--vlist-scrollbar-thumb-hover-color:#6b7280;--vlist-custom-scrollbar-thumb-color:rgba(255,255,255,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(255,255,255,0.3);--vlist-placeholder-bg:rgba(255,255,255,0.3);--vlist-placeholder-bg-strong:rgba(255,255,255,0.35)}}.dark{--vlist-bg:#111827;--vlist-bg-hover:rgba(255,255,255,0.06);--vlist-bg-striped:rgba(255,255,255,0.02);--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.28);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#1e2433;--vlist-scrollbar-thumb-color:#4b5563;--vlist-scrollbar-thumb-hover-color:#6b7280;--vlist-custom-scrollbar-thumb-color:rgba(255,255,255,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(255,255,255,0.3);--vlist-placeholder-bg:rgba(255,255,255,0.3);--vlist-placeholder-bg-strong:rgba(255,255,255,0.35)}.vlist{position:relative;width:100%;height:100%;box-sizing:border-box;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);color-scheme:light;border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}[data-theme-mode="dark"] .vlist,.dark .vlist{color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]) .vlist{color-scheme:dark}}.vlist:focus,.vlist:focus-visible,.vlist-content:focus,.vlist-content:focus-visible{outline:none}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-color:var(--vlist-scrollbar-thumb-color) var(--vlist-scrollbar-track-color)}@supports (-moz-appearance:none) and (scrollbar-width:1px){.vlist-viewport{scrollbar-width:var(--vlist-scrollbar-width)}}.vlist-viewport::-webkit-scrollbar{width:var(--vlist-scrollbar-width);height:var(--vlist-scrollbar-width)}.vlist-viewport::-webkit-scrollbar-track{background:var(--vlist-scrollbar-track-color)}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb-color);border-radius:var(--vlist-scrollbar-radius)}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover-color)}.vlist-content{position:relative;width:100%;contain:layout style}.vlist-item,.vlist-group-header{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;background-color:var(--vlist-bg);cursor:default;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item,.vlist--settling .vlist-item,.vlist--scrolling .vlist-group-header,.vlist--settling .vlist-group-header{transition:none}.vlist--selectable .vlist-item{cursor:pointer}.vlist--selectable .vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item.vlist-item--odd{background:var(--vlist-bg-striped)}.vlist-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item.vlist-item--odd.vlist-item--selected{background:var(--vlist-bg-selected)}.vlist-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item.vlist-item--odd.vlist-item--selected:hover{background:var(--vlist-bg-selected-hover)}.vlist-item.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:vlist-fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--placeholder *:not(:has(*)){color:transparent;background-color:var(--vlist-placeholder-bg);border-radius:4px;width:fit-content;line-height:1.2;transform:scaleY(0.8)}.vlist-item--placeholder:is(strong,b,h1,h2,h3,h4):not(:has(*)){background-color:var(--vlist-placeholder-bg-strong)}.vlist-item.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:var(--vlist-custom-scrollbar-padding-top);right:var(--vlist-custom-scrollbar-padding-right);bottom:var(--vlist-custom-scrollbar-padding-bottom);width:var(--vlist-custom-scrollbar-width);background-color:var(--vlist-custom-scrollbar-track-color);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar__hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar__hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar__thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-custom-scrollbar-thumb-color);border-radius:var(--vlist-custom-scrollbar-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar__thumb:hover{background-color:var(--vlist-custom-scrollbar-thumb-hover-color)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar__thumb{background-color:var(--vlist-custom-scrollbar-thumb-hover-color)}.vlist-group-header{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);z-index:1;overflow:hidden}.vlist-group-header:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{left:0;right:0;background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-item,.vlist--horizontal .vlist-group-header{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none}.vlist-scrollbar--horizontal{top:auto;left:var(--vlist-custom-scrollbar-padding-left);right:var(--vlist-custom-scrollbar-padding-right);bottom:var(--vlist-custom-scrollbar-padding-bottom);width:auto;height:var(--vlist-custom-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar__thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--gutter{padding-right:calc( var(--vlist-custom-scrollbar-padding-right) + var(--vlist-custom-scrollbar-width) + var(--vlist-custom-scrollbar-padding-left) )}.vlist--horizontal .vlist-viewport--gutter{padding-right:0;padding-bottom:calc( var(--vlist-custom-scrollbar-padding-bottom) + var(--vlist-custom-scrollbar-width) + var(--vlist-custom-scrollbar-padding-top) )}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--no-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--gutter-stable{scrollbar-gutter:stable}.vlist-sort-ghost{opacity:0.85;box-shadow:0 4px 16px rgba(0,0,0,0.18);cursor:grabbing}.vlist-item--drag-source{opacity:0 !important;pointer-events:none}.vlist--sorting{cursor:grabbing;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.vlist--sorting *{cursor:inherit !important}.vlist-item--kb-sorting{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;background-color:var(--vlist-bg-selected);z-index:1}
|
|
1
|
+
@keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}:root{--vlist-scrollbar-width:8px;--vlist-scrollbar-track-color:transparent;--vlist-scrollbar-radius:4px;--vlist-custom-scrollbar-track-color:transparent;--vlist-custom-scrollbar-padding-top:2px;--vlist-custom-scrollbar-padding-right:2px;--vlist-custom-scrollbar-padding-bottom:2px;--vlist-custom-scrollbar-padding-left:2px;--vlist-custom-scrollbar-min-thumb-size:15px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out;--vlist-bg:#ffffff;--vlist-bg-hover:rgba(0,0,0,0.04);--vlist-bg-striped:rgba(0,0,0,0.02);--vlist-bg-selected:rgba(59,130,246,0.12);--vlist-bg-selected-hover:rgba(59,130,246,0.18);--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#f3f4f6;--vlist-scrollbar-thumb-color:#d1d5db;--vlist-scrollbar-thumb-hover-color:#9ca3af;--vlist-custom-scrollbar-thumb-color:rgba(0,0,0,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(0,0,0,0.3);--vlist-placeholder-bg:rgba(0,0,0,0.2);--vlist-placeholder-bg-strong:rgba(0,0,0,0.24)}[data-theme-mode="dark"]{--vlist-bg:#111827;--vlist-bg-hover:rgba(255,255,255,0.06);--vlist-bg-striped:rgba(255,255,255,0.02);--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.28);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#1e2433;--vlist-scrollbar-thumb-color:#4b5563;--vlist-scrollbar-thumb-hover-color:#6b7280;--vlist-custom-scrollbar-thumb-color:rgba(255,255,255,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(255,255,255,0.3);--vlist-placeholder-bg:rgba(255,255,255,0.3);--vlist-placeholder-bg-strong:rgba(255,255,255,0.35)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]):not([data-theme-mode="dark"]){--vlist-bg:#111827;--vlist-bg-hover:rgba(255,255,255,0.06);--vlist-bg-striped:rgba(255,255,255,0.02);--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.28);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#1e2433;--vlist-scrollbar-thumb-color:#4b5563;--vlist-scrollbar-thumb-hover-color:#6b7280;--vlist-custom-scrollbar-thumb-color:rgba(255,255,255,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(255,255,255,0.3);--vlist-placeholder-bg:rgba(255,255,255,0.3);--vlist-placeholder-bg-strong:rgba(255,255,255,0.35)}}.dark{--vlist-bg:#111827;--vlist-bg-hover:rgba(255,255,255,0.06);--vlist-bg-striped:rgba(255,255,255,0.02);--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.28);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-focus-ring:#3b82f6;--vlist-group-header-bg:#1e2433;--vlist-scrollbar-thumb-color:#4b5563;--vlist-scrollbar-thumb-hover-color:#6b7280;--vlist-custom-scrollbar-thumb-color:rgba(255,255,255,0.2);--vlist-custom-scrollbar-thumb-hover-color:rgba(255,255,255,0.3);--vlist-placeholder-bg:rgba(255,255,255,0.3);--vlist-placeholder-bg-strong:rgba(255,255,255,0.35)}.vlist{position:relative;width:100%;height:100%;box-sizing:border-box;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);color-scheme:light;border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}[data-theme-mode="dark"] .vlist,.dark .vlist{color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]) .vlist{color-scheme:dark}}.vlist:focus,.vlist:focus-visible,.vlist-content:focus,.vlist-content:focus-visible{outline:none}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-color:var(--vlist-scrollbar-thumb-color) var(--vlist-scrollbar-track-color)}@supports (-moz-appearance:none) and (scrollbar-width:1px){.vlist-viewport{scrollbar-width:var(--vlist-scrollbar-width)}}.vlist-viewport::-webkit-scrollbar{width:var(--vlist-scrollbar-width);height:var(--vlist-scrollbar-width)}.vlist-viewport::-webkit-scrollbar-track{background:var(--vlist-scrollbar-track-color)}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb-color);border-radius:var(--vlist-scrollbar-radius)}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover-color)}.vlist-content{position:relative;width:100%;contain:layout style}.vlist-item,.vlist-group-header{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;background-color:var(--vlist-bg);cursor:default;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item,.vlist--settling .vlist-item,.vlist--scrolling .vlist-group-header,.vlist--settling .vlist-group-header{transition:none}.vlist--selectable .vlist-item{cursor:pointer}.vlist--selectable .vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item.vlist-item--odd{background:var(--vlist-bg-striped)}.vlist-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item.vlist-item--odd.vlist-item--selected{background:var(--vlist-bg-selected)}.vlist-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item.vlist-item--odd.vlist-item--selected:hover{background:var(--vlist-bg-selected-hover)}.vlist-item.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:vlist-fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--placeholder *:not(:has(*)){color:transparent;background-color:var(--vlist-placeholder-bg);border-radius:4px;width:fit-content;line-height:1.2;transform:scaleY(0.8)}.vlist-item--placeholder:is(strong,b,h1,h2,h3,h4):not(:has(*)){background-color:var(--vlist-placeholder-bg-strong)}.vlist-item.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar:focus-visible{outline:2px solid currentColor;outline-offset:-2px;opacity:1;pointer-events:auto}.vlist-scrollbar{position:absolute;top:var(--vlist-custom-scrollbar-padding-top);right:var(--vlist-custom-scrollbar-padding-right);bottom:var(--vlist-custom-scrollbar-padding-bottom);width:var(--vlist-custom-scrollbar-width);background-color:var(--vlist-custom-scrollbar-track-color);opacity:0;transition:opacity 0.2s ease-out;touch-action:none;z-index:10;pointer-events:none}.vlist-scrollbar__hover{position:absolute;top:0;right:0;height:100%;z-index:9;touch-action:none;pointer-events:auto}.vlist-scrollbar__hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar__thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-custom-scrollbar-thumb-color);border-radius:var(--vlist-custom-scrollbar-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar__thumb:hover{background-color:var(--vlist-custom-scrollbar-thumb-hover-color)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar__thumb{background-color:var(--vlist-custom-scrollbar-thumb-hover-color)}@media (forced-colors:active){.vlist-scrollbar{forced-color-adjust:none;background-color:Canvas}.vlist-scrollbar__thumb{background-color:CanvasText}.vlist-scrollbar__thumb:hover,.vlist-scrollbar--dragging .vlist-scrollbar__thumb{background-color:Highlight}.vlist-scrollbar:focus-visible{outline-color:Highlight}}.vlist-group-header{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);z-index:1;overflow:hidden}.vlist-group-header:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{left:0;right:0;background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-item,.vlist--horizontal .vlist-group-header{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none}.vlist-scrollbar--horizontal{top:auto;left:var(--vlist-custom-scrollbar-padding-left);right:var(--vlist-custom-scrollbar-padding-right);bottom:var(--vlist-custom-scrollbar-padding-bottom);width:auto;height:var(--vlist-custom-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar__thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--gutter{padding-right:calc( var(--vlist-custom-scrollbar-padding-right) + var(--vlist-custom-scrollbar-width) + var(--vlist-custom-scrollbar-padding-left) )}.vlist--horizontal .vlist-viewport--gutter{padding-right:0;padding-bottom:calc( var(--vlist-custom-scrollbar-padding-bottom) + var(--vlist-custom-scrollbar-width) + var(--vlist-custom-scrollbar-padding-top) )}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--no-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--gutter-stable{scrollbar-gutter:stable}.vlist-sort-ghost{opacity:0.85;box-shadow:0 4px 16px rgba(0,0,0,0.18);cursor:grabbing}.vlist-item--drag-source{opacity:0 !important;pointer-events:none}.vlist--sorting{cursor:grabbing;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.vlist--sorting *{cursor:inherit !important}.vlist-item--kb-sorting{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;background-color:var(--vlist-bg-selected);z-index:1}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vlist",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-next.1",
|
|
4
4
|
"description": "Lightweight, high-performance virtual list with zero dependencies",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Floor IO",
|
|
@@ -39,6 +39,11 @@
|
|
|
39
39
|
"import": "./dist/synthetic.js",
|
|
40
40
|
"default": "./dist/synthetic.js"
|
|
41
41
|
},
|
|
42
|
+
"./native": {
|
|
43
|
+
"types": "./dist/native.d.ts",
|
|
44
|
+
"import": "./dist/native.js",
|
|
45
|
+
"default": "./dist/native.js"
|
|
46
|
+
},
|
|
42
47
|
"./config": {
|
|
43
48
|
"types": "./dist/config.d.ts",
|
|
44
49
|
"import": "./dist/config.js",
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { VListItem } from "../../types";
|
|
2
|
-
import type { VListPlugin } from "../../core/types";
|
|
3
|
-
export interface ScalePluginConfig {
|
|
4
|
-
force?: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare function scale<T extends VListItem = VListItem>(_config?: ScalePluginConfig): VListPlugin<T>;
|
|
7
|
-
//# sourceMappingURL=plugin.d.ts.map
|