@floor/vlist 0.5.5 → 0.5.6

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.
@@ -1 +1,1045 @@
1
- var{defineProperty:lj,getOwnPropertyNames:A2,getOwnPropertyDescriptor:E2}=Object,F2=Object.prototype.hasOwnProperty;var _J=new WeakMap,L2=(J)=>{var X=_J.get(J),$;if(X)return X;if(X=lj({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")A2(J).map((j)=>!F2.call(X,j)&&lj(X,j,{get:()=>J[j],enumerable:!($=E2(J,j))||$.enumerable}));return _J.set(J,X),X};var O2=(J,X)=>{for(var $ in X)lj(J,$,{get:X[$],enumerable:!0,configurable:!0,set:(j)=>X[$]=()=>j})};var GJ=(J,X)=>()=>(J&&(X=J(J=0)),X);var aj=200,Hj=50,EJ=15,FJ=2,LJ=50,oj=16000000;var OJ=(J,X,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil($/J.getHeight(0));let Y=0,Q=0,q=X;while(q<j&&Q<$)Q+=J.getHeight(q),Y++,q++;return Math.max(1,Y)},nj=(J,X,$)=>{if($===0)return 0;if(!J.isVariable())return Math.floor(X/J.getHeight(0));let j=0,Y=0;for(let Q=$-1;Q>=0;Q--){let q=J.getHeight(Q);if(Y+q>X)break;Y+=q,j++}return Math.max(j,1)},ij=(J,X,$)=>{if($===0)return 0;let j=Math.floor(X),Y=X-j,Q=Math.max(0,Math.min(j,$-1));return J.getOffset(Q)+Y*J.getHeight(Q)};var Fj=(J,X)=>{let $=X.getTotalHeight(),j=$>oj,Y=j?oj:$,Q=$>0?Y/$:1;return{isCompressed:j,actualHeight:$,virtualHeight:Y,ratio:Q}},zJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;if(!Y.isCompressed){let W=$.indexAtOffset(J),N=$.indexAtOffset(J+X);if(N<j-1)N++;return Q.start=Math.max(0,W),Q.end=Math.min(j-1,Math.max(0,N)),Q}let{virtualHeight:q}=Y,E=J/q*j,_=Math.floor(E),U=OJ($,Math.max(0,_),X,j),F=Math.ceil(E)+U,b=q-X-J;if(b<=X&&b>=-1){let W=nj($,X,j),N=Math.max(0,j-W),M=Math.max(0,Math.min(1,1-b/X));_=Math.floor(_+(N-_)*M),F=b<=1?j-1:Math.min(j-1,_+U)}return Q.start=Math.max(0,_),Q.end=Math.min(j-1,Math.max(0,F)),Q},fj=(J,X,$,j,Y,Q,q)=>{if(!Q.isCompressed||j===0)return $.getOffset(J);let{virtualHeight:Z}=Q,E=Z-Y,_=E-X;if(_<=Y&&_>=-1){if(X>=E-1){let k=$.getTotalHeight()-$.getOffset(J);return Y-k}let O=nj($,Y,j),b=Math.max(0,j-O),N=X/Z*j,M=Math.max(0,Math.min(1,1-_/Y)),A=$.getOffset(J)-$.getOffset(b),L=$.getOffset(J)-ij($,N,j);return L+(A-L)*M}let F=X/Z*j;return $.getOffset(J)-ij($,F,j)},PJ=(J,X,$,j,Y,Q="start")=>{if(j===0)return 0;let q;if(Y.isCompressed){if(Q==="end"&&J===j-1)return Math.max(0,Y.virtualHeight-$);q=J/j*Y.virtualHeight}else q=X.getOffset(J);let Z=X.getHeight(J);switch(Q){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let E=Y.virtualHeight-$;return Math.max(0,Math.min(q,E))};var tj=()=>{};var Tj=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var bJ={};O2(bJ,{createGridRenderer:()=>ej});var p2=(J=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:(Q)=>{if(X.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-row"),Q.removeAttribute("data-col"),X.push(Q)},clear:()=>{X.length=0}}},ej=(J,X,$,j,Y,Q,q,Z)=>{let E=p2(),_=new Map,U=Q,F=!1,O=null,b=0,W="",N=(z)=>{if(O&&b===z)return O;return O=Fj(z,$),b=z,O},M={selected:!1,focused:!1},A=(z,R)=>{return M.selected=z,M.focused=R,M},L=`${Y}-item ${Y}-grid-item`,k=`${Y}-item--selected`,G=`${Y}-item--focused`,y=(z,R)=>{if(typeof R==="string")z.innerHTML=R;else z.replaceChildren(R)},B=(z,R,u)=>{z.classList.toggle(k,R),z.classList.toggle(G,u)},T=(z,R)=>{let u=j.getRow(z);if(R){let h=R.totalItems,c=N(h);if(c.isCompressed)return fj(u,R.scrollTop,$,h,R.containerHeight,c,R.rangeStart)}return $.getOffset(u)},V=(z,R,u)=>{let h=z.dataset.id?.startsWith("__group_header"),c=h?0:j.getCol(R),a=h?0:j.getColumnOffset(c,U),Xj;if(F){let Bj=j.getRow(R),x=0,Yj=new Set;for(let n=0;n<R;n++){let $j=j.getRow(n);if($j<Bj&&!Yj.has($j)){let t=$.getHeight(n);x+=t,Yj.add($j)}}Xj=x}else Xj=T(R,u);z.style.transform=`translate(${Math.round(a)}px, ${Math.round(Xj)}px)`},w=(z,R)=>{let u=z.dataset.id?.startsWith("__group_header"),h=u?U:j.getColumnWidth(U),c;if(F||u)c=$.getHeight(R)-j.gap;else{let a=j.getRow(R);c=$.getHeight(a)-j.gap}z.style.width=`${h}px`,z.style.height=`${c}px`},g=(z,R,u,h,c)=>{let a=E.acquire(),Xj=A(u,h);if(a.className=L,a.dataset.index=String(z),a.dataset.id=String(R.id),a.dataset.row=String(j.getRow(z)),a.dataset.col=String(j.getCol(z)),a.ariaSelected=String(u),Z)a.id=`${Z}-item-${z}`;if(q)W=String(q()),a.setAttribute("aria-setsize",W),a.setAttribute("aria-posinset",String(z+1));w(a,z);let Bj=X(R,z,Xj);return y(a,Bj),B(a,u,h),V(a,z,c),a},o=(z,R,u,h,c)=>{if(R.start===0&&z.length>0)F=Tj(z[0]);for(let[x,Yj]of _)if(x<R.start||x>R.end)Yj.element.remove(),E.release(Yj.element),_.delete(x);let a=!1;if(q){let x=String(q());a=x!==W,W=x}let Xj=document.createDocumentFragment(),Bj=[];for(let x=R.start;x<=R.end;x++){let Yj=x-R.start,n=z[Yj];if(!n){console.warn(`⚠️ RENDER: Missing item at index ${x} (range: ${R.start}-${R.end}, items.length: ${z.length})`);continue}let $j=u.has(n.id),t=x===h,Jj=_.get(x);if(Jj){let C=Jj.element.dataset.id,S=String(n.id);if(C!==S){let e=A($j,t),m=X(n,x,e);y(Jj.element,m),Jj.element.dataset.id=S,Jj.element.dataset.row=String(j.getRow(x)),Jj.element.dataset.col=String(j.getCol(x)),w(Jj.element,x)}if(B(Jj.element,$j,t),Jj.element.ariaSelected=String($j),V(Jj.element,x,c),a)Jj.element.setAttribute("aria-setsize",W)}else{let C=g(x,n,$j,t,c);Xj.appendChild(C),Bj.push({index:x,element:C})}}if(Bj.length>0){J.appendChild(Xj);for(let{index:x,element:Yj}of Bj)_.set(x,{index:x,element:Yj})}},d=(z)=>{for(let[R,u]of _)V(u.element,R,z)},jj=(z,R,u,h)=>{let c=_.get(z);if(c){let a=A(u,h),Xj=X(R,z,a);y(c.element,Xj),B(c.element,u,h),c.element.dataset.id=String(R.id),c.element.ariaSelected=String(u),w(c.element,z)}},i=(z,R,u)=>{let h=_.get(z);if(h)B(h.element,R,u)},H=(z)=>{return _.get(z)?.element},v=(z)=>{if(Math.abs(z-U)<1)return;U=z;for(let[R,u]of _)w(u.element,R),V(u.element,R)},I=()=>{for(let[,z]of _)z.element.remove(),E.release(z.element);_.clear()};return{render:o,updatePositions:d,updateItem:jj,updateItemClasses:i,getElement:H,updateContainerWidth:v,clear:I,destroy:()=>{I(),E.clear()}}};var jJ=GJ(()=>{tj()});var z2=0,zj=5,P2=100,sj=2,b2=(J=0)=>{let X=Array(zj);for(let $=0;$<zj;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},k2=(J,X)=>{let $=performance.now(),j=$-J.lastTime;if(j===0)return J;if(j>P2){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let Q=J.samples[0];return Q.position=X,Q.time=$,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=X,J.lastTime=$,J}let Y=J.samples[J.sampleIndex];if(Y.position=X,Y.time=$,J.sampleIndex=(J.sampleIndex+1)%zj,J.sampleCount=Math.min(J.sampleCount+1,zj),J.sampleCount>=sj){let Q=(J.sampleIndex-J.sampleCount+zj)%zj,q=J.samples[Q],Z=X-q.position,E=$-q.time;J.velocity=E>0?Math.abs(Z)/E:0}return J.lastPosition=X,J.lastTime=$,J},MJ=(J,X)=>{if(typeof J==="number"){let Q=X;return{getOffset:(q)=>q*J,getHeight:()=>J,indexAtOffset:(q)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(q/J),Q-1))},getTotalHeight:()=>Q*J,getTotal:()=>Q,rebuild:(q)=>{Q=q},isVariable:()=>!1}}let $=X,j=new Float64Array(0),Y=(Q)=>{$=Q,j=new Float64Array(Q+1),j[0]=0;for(let q=0;q<Q;q++)j[q+1]=j[q]+J(q)};return Y(X),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return j[$];return j[Q]},getHeight:(Q)=>J(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=j[$])return $-1;let q=0,Z=$-1;while(q<Z){let E=q+Z+1>>>1;if(j[E]<=Q)q=E;else Z=E-1}return q},getTotalHeight:()=>j[$]??0,getTotal:()=>$,rebuild:(Q)=>Y(Q),isVariable:()=>!0}},y2=()=>{let J={},X=(Q,q)=>{if(!J[Q])J[Q]=new Set;return J[Q].add(q),()=>$(Q,q)},$=(Q,q)=>{J[Q]?.delete(q)};return{on:X,off:$,emit:(Q,q)=>{J[Q]?.forEach((Z)=>{try{Z(q)}catch(E){console.error(`[vlist] Error in "${Q}" handler:`,E)}})},clear:()=>{for(let Q in J)delete J[Q]}}},H2=(J)=>{if(typeof J==="string"){let X=document.querySelector(J);if(!X)throw Error(`[vlist/builder] Container not found: ${J}`);return X}return J},T2=(J,X,$,j)=>{let Y=document.createElement("div");if(Y.className=X,j)Y.classList.add(`${X}--horizontal`);if(Y.setAttribute("role","listbox"),Y.setAttribute("tabindex","0"),$)Y.setAttribute("aria-label",$);if(j)Y.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${X}-viewport`,j)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let q=document.createElement("div");if(q.className=`${X}-content`,q.style.position="relative",j)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${X}-items`,Z.style.position="relative",j)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),Q.appendChild(q),Y.appendChild(Q),J.appendChild(Y),{root:Y,viewport:Q,content:q,items:Z}},R2=(J=100)=>{let X=[];return{acquire:()=>{let $=X.pop();if($)return $;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:($)=>{if(X.length<J)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),X.push($)},clear:()=>{X.length=0}}},w2=(J,X,$,j,Y)=>{if(j===0||X===0){Y.start=0,Y.end=0;return}let Q=$.indexAtOffset(J),q=$.indexAtOffset(J+X);if(q<j-1)q++;Y.start=Math.max(0,Q),Y.end=Math.min(j-1,Math.max(0,q))},v2=(J,X,$,j)=>{if($===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X)},C2=(J,X,$,j,Y)=>{if(j===0)return 0;let Q=Math.max(0,Math.min(J,j-1)),q=X.getOffset(Q),Z=X.getHeight(Q),E=Math.max(0,X.getTotalHeight()-$),_;switch(Y){case"center":_=q-($-Z)/2;break;case"end":_=q-$+Z;break;default:_=q}return Math.max(0,Math.min(_,E))},S2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,f2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},rj=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let X=J.direction==="horizontal",$=X?"width":"height",j=X?J.item.width:J.item.height;if(j==null)throw Error(`[vlist/builder] item.${$} is required${X?" when direction is 'horizontal'":""}`);if(typeof j==="number"&&j<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof j!=="number"&&typeof j!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(X&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let Y=new Map,Q=!1,q={use(Z){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return Y.set(Z.name,Z),q},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,I2(J,Y,X,j)}};return q};function I2(J,X,$,j){let{item:Y,items:Q,overscan:q=3,classPrefix:Z="vlist",ariaLabel:E,reverse:_=!1,scroll:U}=J,F=U?.wheel??!0,O=U?.wrap??!1,b=_,W=`${Z}-${z2++}`,N=j,M=$?typeof Y.height==="number"?Y.height:void 0:typeof Y.width==="number"?Y.width:void 0,A=Y.template,L={overscan:q,classPrefix:Z,reverse:b,wrap:O,horizontal:$,ariaIdPrefix:W},k=Array.from(X.values()).sort((K,D)=>(K.priority??50)-(D.priority??50)),G=new Set(k.map((K)=>K.name));for(let K of k)if(K.conflicts){for(let D of K.conflicts)if(G.has(D))throw Error(`[vlist/builder] ${K.name} and ${D} cannot be combined`)}if($){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(b){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true");if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with reverse: true")}let y=H2(J.container),B=T2(y,Z,E,$),T=y2(),V=Q?[...Q]:[],w=MJ(N,V.length),g=R2(),o=B.viewport.clientHeight,d=B.viewport.clientWidth,jj=!1,i=!1,H=0,v=null,I=null,p=b2(0),z={start:0,end:0},R={start:0,end:0},u={start:-1,end:-1},h={viewportState:{scrollTop:0,containerHeight:o,totalHeight:w.getTotalHeight(),actualHeight:w.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},c=new Map,a={selected:!1,focused:!1},Xj=`${Z}-item`,Bj="",x=new Map,Yj=()=>{x.clear();for(let K=0;K<V.length;K++){let D=V[K];if(D)x.set(D.id,K)}};Yj();let n=null,$j=()=>n?n.getTotal():V.length,t=[],Jj=[],C=[],S=[],s=[],e=[],m=new Map,Qj=()=>{return $?B.viewport.scrollLeft:B.viewport.scrollTop},qj=(K)=>{if($)B.viewport.scrollLeft=K;else B.viewport.scrollTop=K},Mj=(K=2)=>{let D=w.getTotalHeight();return H+o>=D-K},Uj=!1,Kj,_j,Zj=(K,D,P,f,r)=>{w2(K,D,P,f,r)},Gj=(K,D,P,f,r)=>{return C2(K,D,P,f,r)},Wj=(K,D)=>{if(typeof D==="string")K.innerHTML=D;else K.replaceChildren(D)},Ej=(K,D)=>{let P=Math.round(w.getOffset(D));if($)K.style.transform=`translateX(${P}px)`;else K.style.transform=`translateY(${P}px)`},eJ=(K,D)=>{let P=g.acquire();if(P.className=Xj,$){if(P.style.width=`${w.getHeight(K)}px`,M!=null)P.style.height=`${M}px`}else P.style.height=`${w.getHeight(K)}px`;return P.dataset.index=String(K),P.dataset.id=String(D.id),P.ariaSelected="false",P.id=`${W}-item-${K}`,Bj=String($j()),P.setAttribute("aria-setsize",Bj),P.setAttribute("aria-posinset",String(K+1)),Wj(P,A(D,K,a)),Ej(P,K),P},bj=()=>{let K=`${w.getTotalHeight()}px`;if($)B.content.style.width=K;else B.content.style.height=K},xj=new Set,mj=-1,j2=()=>{if(jj)return;let K=$j();if(Zj(H,o,w,K,z),v2(z,q,K,R),R.start===u.start&&R.end===u.end)return;let D=String(K),P=D!==Bj;Bj=D;for(let[l,Dj]of c)if(l<R.start||l>R.end)Dj.remove(),g.release(Dj),c.delete(l);let f=document.createDocumentFragment(),r=[];for(let l=R.start;l<=R.end;l++){let Dj=n?n.getItem(l):V[l];if(!Dj)continue;let Vj=c.get(l);if(Vj){let Aj=Vj.dataset.id,Cj=String(Dj.id);if(Aj!==Cj)if(Wj(Vj,A(Dj,l,a)),Vj.dataset.id=Cj,$)Vj.style.width=`${w.getHeight(l)}px`;else Vj.style.height=`${w.getHeight(l)}px`;Ej(Vj,l);let Sj=xj.has(Dj.id),M2=l===mj;if(Vj.classList.toggle(`${Z}-item--selected`,Sj),Vj.classList.toggle(`${Z}-item--focused`,M2),Vj.ariaSelected=Sj?"true":"false",P)Vj.setAttribute("aria-setsize",Bj)}else{let Aj=eJ(l,Dj),Cj=xj.has(Dj.id),Sj=l===mj;if(Cj)Aj.classList.add(`${Z}-item--selected`),Aj.ariaSelected="true";if(Sj)Aj.classList.add(`${Z}-item--focused`);f.appendChild(Aj),r.push({index:l,element:Aj})}}if(r.length>0){B.items.appendChild(f);for(let{index:l,element:Dj}of r)c.set(l,Dj)}u.start=R.start,u.end=R.end,h.lastRenderRange.start=R.start,h.lastRenderRange.end=R.end,h.viewportState.scrollTop=H,h.viewportState.visibleRange.start=z.start,h.viewportState.visibleRange.end=z.end,h.viewportState.renderRange.start=R.start,h.viewportState.renderRange.end=R.end,T.emit("range:change",{range:{start:R.start,end:R.end}})},J2=()=>{u.start=-1,u.end=-1,Kj()};Kj=j2,_j=J2;let kj=()=>{if(jj)return;let K=Qj(),D=K>=H?"down":"up";if(p=k2(p,K),!B.root.classList.contains(`${Z}--scrolling`))B.root.classList.add(`${Z}--scrolling`);H=K,Kj(),T.emit("scroll",{scrollTop:K,direction:D}),T.emit("velocity:change",{velocity:p.velocity,reliable:p.sampleCount>=sj});for(let P=0;P<t.length;P++)t[P](K,D);if(I)clearTimeout(I);I=setTimeout(()=>{B.root.classList.remove(`${Z}--scrolling`),p.velocity=0,p.sampleCount=0,T.emit("velocity:change",{velocity:0,reliable:!1})},U?.idleTimeout??150)},wj=null,Oj=B.viewport;if(Oj.addEventListener("scroll",kj,{passive:!0}),$&&F)wj=(K)=>{if(K.deltaX)return;K.preventDefault(),B.viewport.scrollLeft+=K.deltaY},B.viewport.addEventListener("wheel",wj);B.viewport.classList.add(`${Z}-viewport--custom-scrollbar`);let UJ=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=n?.getItem(f)??V[f];if(r){if(r.__groupHeader)return;T.emit("item:click",{item:r,index:f,event:K})}}}for(let f=0;f<Jj.length;f++)Jj[f](K)},Q2=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=n?.getItem(f)??V[f];if(r){if(r.__groupHeader)return;T.emit("item:dblclick",{item:r,index:f,event:K})}}}},WJ=(K)=>{for(let D=0;D<C.length;D++)C[D](K)};B.items.addEventListener("click",UJ),B.items.addEventListener("dblclick",Q2),B.root.addEventListener("keydown",WJ);let gj=!0,$2=()=>d,X2=()=>o,dj=new ResizeObserver((K)=>{if(jj)return;for(let D of K){let P=D.contentRect.height,f=D.contentRect.width,r=$?f:P;if(d=f,Math.abs(r-o)>1){if(o=r,h.viewportState.containerHeight=r,i)bj(),Kj(),T.emit("resize",{height:P,width:f})}if(i)for(let l=0;l<S.length;l++)S[l](f,P)}});if(gj)dj.observe(B.viewport);let Nj={get dom(){return B},get heightCache(){return w},get emitter(){return T},get config(){return L},get rawConfig(){return J},get renderer(){return{render:(K,D,P,f,r)=>{xj=P,mj=f,_j()},updateItemClasses:(K,D,P)=>{let f=c.get(K);if(!f)return;f.classList.toggle(`${Z}-item--selected`,D),f.classList.toggle(`${Z}-item--focused`,P),f.ariaSelected=D?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(K)=>c.get(K)??null,clear:()=>{},destroy:()=>{}}},set renderer(K){},get dataManager(){return n},set dataManager(K){n=K},get scrollController(){return cj},set scrollController(K){cj=K},state:h,getContainerWidth(){return d},afterScroll:t,clickHandlers:Jj,keydownHandlers:C,resizeHandlers:S,contentSizeHandlers:s,destroyHandlers:e,methods:m,replaceTemplate(K){A=K},replaceRenderer(K){},replaceDataManager(K){n=K},replaceScrollController(K){cj=K},getItemsForRange(K){let D=[];for(let P=K.start;P<=K.end;P++){let f=n?n.getItem(P):V[P];if(f)D.push(f)}return D},getAllLoadedItems(){if(n){let K=n.getTotal(),D=[];for(let P=0;P<K;P++){let f=n.getItem(P);if(f)D.push(f)}return D}return[...V]},getVirtualTotal(){return $j()},getCachedCompression(){return{isCompressed:!1,actualHeight:w.getTotalHeight(),virtualHeight:w.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:H,totalItems:$j(),containerHeight:o,rangeStart:R.start}},renderIfNeeded(){Kj()},forceRender(){_j()},getRenderFns(){return{renderIfNeeded:Kj,forceRender:_j}},setRenderFns(K,D){Kj=K,_j=D},setVirtualTotalFn(K){$j=K},rebuildHeightCache(K){w.rebuild(K??$j())},setHeightConfig(K){w=MJ(K,$j())},updateContentSize(K){let D=`${K}px`;if($)B.content.style.width=D;else B.content.style.height=D},updateCompressionMode(){},setVisibleRangeFn(K){Zj=K},setScrollToPosFn(K){Gj=K},setPositionElementFn(K){Ej=K},setScrollFns(K,D){Qj=K,qj=(P)=>{D(P),kj()}},setScrollTarget(K){Oj.removeEventListener("scroll",kj),Oj=K,Oj.addEventListener("scroll",kj,{passive:!0})},getScrollTarget(){return Oj},setContainerDimensions(K){$2=K.width,X2=K.height,d=K.width(),o=K.height(),h.viewportState.containerHeight=o},disableViewportResize(){if(gj)gj=!1,dj.unobserve(B.viewport)}};n={getState:()=>({total:V.length,cached:V.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>V.length,getCached:()=>V.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(K)=>V[K],getItemById:(K)=>{let D=x.get(K);return D!==void 0?V[D]:void 0},getIndexById:(K)=>x.get(K)??-1,isItemLoaded:(K)=>K>=0&&K<V.length&&V[K]!==void 0,getItemsInRange:(K,D)=>{let P=[],f=Math.max(0,K),r=Math.min(D,V.length-1);for(let l=f;l<=r;l++)P.push(V[l]);return P},setTotal:(K)=>{},setItems:(K,D=0,P)=>{if(D===0&&(P!==void 0||V.length===0))V=[...K];else{let f=D+K.length;if(V.length<f)V.length=f;for(let r=0;r<K.length;r++)V[D+r]=K[r]}if(Yj(),i){w.rebuild($j()),bj(),Nj.updateCompressionMode();for(let f=0;f<s.length;f++)s[f]();_j()}},updateItem:(K,D)=>{let P=x.get(K);if(P===void 0)return!1;let f=V[P];if(!f)return!1;if(V[P]={...f,...D},D.id!==void 0&&D.id!==K)x.delete(K),x.set(D.id,P);let r=c.get(P);if(r)Wj(r,A(V[P],P,a)),r.dataset.id=String(V[P].id);return!0},removeItem:(K)=>{let D=x.get(K);if(D===void 0)return!1;if(V.splice(D,1),Yj(),i){w.rebuild($j()),bj(),Nj.updateCompressionMode();for(let P=0;P<s.length;P++)s[P]();_j()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{V=[],x.clear()},reset:()=>{if(V=[],x.clear(),i)w.rebuild(0),bj(),_j()}};let cj={getScrollTop:()=>Qj(),scrollTo:(K)=>{qj(K),H=K,Kj()},scrollBy:(K)=>{let D=Qj()+K;qj(D),H=D,Kj()},isAtTop:()=>H<=2,isAtBottom:(K=2)=>Mj(K),getScrollPercentage:()=>{let K=w.getTotalHeight(),D=Math.max(0,K-o);return D>0?H/D:0},getVelocity:()=>p.velocity,isTracking:()=>p.sampleCount>=sj,isScrolling:()=>B.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>Uj,isWindowMode:()=>!1,updateContainerHeight:(K)=>{o=K},destroy:()=>{}},NJ=new Map;for(let K of k)if(K.methods)for(let D of K.methods){let P=NJ.get(D);if(P)throw Error(`[vlist/builder] Method "${D}" is registered by both "${P}" and "${K.name}"`);NJ.set(D,K.name)}for(let K of k)K.setup(Nj);if(i=!0,Nj.state.isInitialized=!0,bj(),Kj(),b&&V.length>0){let K=Gj(V.length-1,w,o,V.length,"end");qj(K),H=K,Kj()}let q2=(K)=>{Nj.dataManager.setItems(K,0,K.length)},K2=b?(K)=>{let D=Mj(2),P=V.length;if(Nj.dataManager.setItems(K,P),D&&V.length>0){let f=Gj(V.length-1,w,o,V.length,"end");qj(f),H=f,Kj()}}:(K)=>{let D=V.length;Nj.dataManager.setItems(K,D)},Y2=b?(K)=>{let D=Qj(),P=w.getTotalHeight(),f=[...V];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...f],0);let l=w.getTotalHeight()-P;if(l>0)qj(D+l),H=D+l}:(K)=>{let D=[...V];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...D],0)},Z2=(K,D)=>{Nj.dataManager.updateItem(K,D)},B2=(K)=>{Nj.dataManager.removeItem(K)},U2=async()=>{if(Nj.dataManager.reload)await Nj.dataManager.reload()},vj=()=>{if(v!==null)cancelAnimationFrame(v),v=null},W2=(K,D,P)=>{if(vj(),Math.abs(D-K)<1){qj(D),H=D,Kj();return}let f=performance.now(),r=(l)=>{let Dj=l-f,Vj=Math.min(Dj/P,1),Aj=K+(D-K)*S2(Vj);if(qj(Aj),H=Aj,Kj(),Vj<1)v=requestAnimationFrame(r);else v=null};v=requestAnimationFrame(r)},DJ=(K,D)=>{let{align:P,behavior:f,duration:r}=f2(D),l=$j(),Dj=K;if(O&&l>0)Dj=(Dj%l+l)%l;let Vj=Gj(Dj,w,o,l,P);if(f==="smooth")W2(Qj(),Vj,r);else vj(),qj(Vj)},N2=(K,D)=>{let P=x.get(K)??Nj.dataManager.getIndexById(K);if(P>=0)DJ(P,D)},D2=()=>Qj(),V2=(K,D)=>{return T.on(K,D)},_2=(K,D)=>{T.off(K,D)},G2=()=>{if(jj)return;if(jj=!0,Nj.state.isDestroyed=!0,B.items.removeEventListener("click",UJ),B.root.removeEventListener("keydown",WJ),Oj.removeEventListener("scroll",kj),dj.disconnect(),wj)B.viewport.removeEventListener("wheel",wj);if(I)clearTimeout(I);for(let K=0;K<e.length;K++)e[K]();for(let K of k)if(K.destroy)K.destroy();vj();for(let[,K]of c)K.remove(),g.release(K);c.clear(),g.clear(),T.clear(),B.root.remove()},VJ={get element(){return B.root},get items(){if(m.has("_getItems"))return m.get("_getItems")();return V},get total(){if(m.has("_getTotal"))return m.get("_getTotal")();return $j()},setItems:m.has("setItems")?m.get("setItems"):q2,appendItems:m.has("appendItems")?m.get("appendItems"):K2,prependItems:m.has("prependItems")?m.get("prependItems"):Y2,updateItem:m.has("updateItem")?m.get("updateItem"):Z2,removeItem:m.has("removeItem")?m.get("removeItem"):B2,reload:m.has("reload")?m.get("reload"):U2,scrollToIndex:m.has("scrollToIndex")?m.get("scrollToIndex"):DJ,scrollToItem:m.has("scrollToItem")?m.get("scrollToItem"):N2,cancelScroll:m.has("cancelScroll")?m.get("cancelScroll"):vj,getScrollPosition:m.has("getScrollPosition")?m.get("getScrollPosition"):D2,on:V2,off:_2,destroy:G2};for(let[K,D]of m){if(K==="setItems"||K==="appendItems"||K==="prependItems"||K==="updateItem"||K==="removeItem"||K==="reload"||K==="scrollToIndex"||K==="scrollToItem"||K==="cancelScroll"||K==="getScrollPosition")continue;VJ[K]=D}return VJ}var AJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),$=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},Q=(W)=>{if(W<=0)return 0;if(!j)return Math.ceil(W/X);let N=0,M=0,A=0;for(let L=0;L<W;L++)if(j(L)){if(A++,M>0)N++,M=0;N++,M=0}else if(M++,M>=X)N++,M=0;if(M>0)N++;return N},q=(W)=>{return Y.row=Z(W),Y.col=E(W),Y},Z=(W)=>{if(!j)return Math.floor(W/X);let N=0,M=0;for(let A=0;A<=W;A++)if(j(A)){if(M>0)N++,M=0;if(A===W)return N;N++,M=0}else{if(A===W)return N;if(M++,M>=X)N++,M=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${N}`),N},E=(W)=>{if(!j)return W%X;if(j(W))return 0;let N=0;for(let M=0;M<=W;M++)if(j(M))N=0;else{if(M===W)return N;if(N++,N>=X)N=0}return N},_=(W,N,M)=>{if(M<=0)return{start:0,end:-1};if(!j){let y=Math.max(0,W*X),B=Math.min(M-1,(N+1)*X-1);return{start:y,end:B}}let A=-1,L=-1,k=0,G=0;for(let y=0;y<M;y++){if(j(y)){if(G>0)k++,G=0;if(k>=W&&k<=N){if(A===-1)A=y;L=y}k++,G=0}else{if(k>=W&&k<=N){if(A===-1)A=y;L=y}if(G++,G>=X)k++,G=0}if(k>N&&G===0)break}if(A===-1)return{start:0,end:-1};return{start:A,end:L}},U=(W,N,M)=>{if(N<0||N>=X)return-1;let A=W*X+N;if(A<0||A>=M)return-1;return A},F=(W)=>{let N=(X-1)*$;return Math.max(0,(W-N)/X)};return{get columns(){return X},get gap(){return $},update:(W)=>{if(W.columns!==void 0)X=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)$=W.gap;if(W.isHeaderFn!==void 0)j=W.isHeaderFn},getTotalRows:Q,getPosition:q,getRow:Z,getCol:E,getItemRange:_,getItemIndex:U,getColumnWidth:F,getColumnOffset:(W,N)=>{let M=F(N);return W*(M+$)}}};jJ();var kJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;let q=$.indexAtOffset(J),Z=$.indexAtOffset(J+X);if(Z<j-1)Z++;return Q.start=Math.max(0,q),Q.end=Math.min(j-1,Math.max(0,Z)),Q},yJ=(J,X,$,j)=>{if($===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X),j},HJ=(J,X,$,j,Y,Q)=>{if(j===0)return 0;let q=Math.max(0,Math.min(J,j-1)),Z=X.getOffset(q),E=X.getHeight(q),_=X.getTotalHeight(),U=Math.max(0,_-$),F;switch(Q){case"center":F=Z-$/2+E/2;break;case"end":F=Z-$+E;break;case"start":default:F=Z;break}return Math.max(0,Math.min(F,U))};var JJ=(J,X,$,j,Y,Q=kJ)=>{return Q(J.scrollTop,J.containerHeight,X,$,Y,J.visibleRange),yJ(J.visibleRange,j,$,J.renderRange),J.totalHeight=Y.virtualHeight,J.actualHeight=Y.actualHeight,J.isCompressed=Y.isCompressed,J.compressionRatio=Y.ratio,J},Lj=(J,X,$,j,Y="start",Q,q=HJ)=>{return q(J,X,$,j,Q,Y)};var TJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,$=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:Q,config:q,rawConfig:Z}=j,{classPrefix:E}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let _=Z.items?.some((G)=>G.__groupHeader===!0),U={columns:J.columns,gap:J.gap??0};if(_)U.isHeaderFn=(G)=>{let y=j.dataManager.getItem(G);return!!(y&&y.__groupHeader===!0)};X=AJ(U);let F=X.gap;j.setVirtualTotalFn(()=>{let G=j.dataManager.getTotal();return X.getTotalRows(G)});let O=Z.item,b=q.horizontal?O.width:O.height,W={containerWidth:j.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof b==="function")j.setHeightConfig((G)=>{let y=W.containerWidth-2,B=(W.columns-1)*W.gap,T=(y-B)/W.columns,V={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:T,row:X.getRow(G),column:X.getCol(G),totalRows:X.getTotalRows(j.dataManager.getTotal()),totalColumns:W.columns};return b(G,V)+W.gap});else if(F>0)j.setHeightConfig(b+F);j.rebuildHeightCache(),Y.root.classList.add(`${E}--grid`);let N=j.getContainerWidth(),M=Z.item.template,A=()=>{$=ej(Y.items,M,j.heightCache,X,E,N,()=>j.dataManager.getTotal(),q.ariaIdPrefix),j.replaceRenderer($)};A(),j.methods.set("_getGridLayout",()=>X),j.methods.set("_getGridConfig",()=>U),j.methods.set("_replaceGridRenderer",(G)=>{$=G}),j.methods.set("_updateGridLayoutForGroups",(G)=>{X.update({isHeaderFn:G});let y=j.dataManager.getTotal(),B=0;for(let T=0;T<y;T++)if(X.getCol(T)===0){let V=j.heightCache.getHeight(T);B+=V}j.heightCache.getTotalHeight=()=>B,j.dom.content.style.height=`${B}px`,A()}),j.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");U.columns=G.columns}if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");U.gap=G.gap}if(X)X.update(U);let y=j.getContainerWidth();if(W.containerWidth=y,W.columns=U.columns,W.gap=U.gap??0,$)$.updateContainerWidth(y);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let B=0;B<j.contentSizeHandlers.length;B++)j.contentSizeHandlers[B]();if($)$.clear();j.forceRender()});let L=()=>{if(j.state.isDestroyed)return;let G=j.scrollController.getScrollTop(),y=j.state.viewportState.containerHeight,B=j.getVirtualTotal(),T={start:0,end:0};if(B===0||y===0)T.start=0,T.end=0;else{T.start=Math.max(0,j.heightCache.indexAtOffset(G));let v=j.heightCache.indexAtOffset(G+y);if(v<B-1)v++;T.end=Math.min(B-1,Math.max(0,v))}let V=q.overscan??3,w={start:Math.max(0,T.start-V),end:Math.min(B-1,T.end+V)};j.state.viewportState.scrollTop=G,j.state.viewportState.visibleRange=T,j.state.viewportState.renderRange=w;let g=j.state.lastRenderRange,o=j.state.viewportState.isCompressed;if(w.start===g.start&&w.end===g.end){if(o)$.updatePositions(j.getCompressionContext());return}let d=j.dataManager.getTotal(),jj=X.getItemRange(w.start,w.end,d),i=j.dataManager.getItemsInRange(jj.start,jj.end),H=o?j.getCompressionContext():void 0;$.render(i,jj,new Set,-1,H),j.state.lastRenderRange={...w},Q.emit("range:change",{range:w})},k=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},L()};if(j.setRenderFns(L,k),j.resizeHandlers.push((G,y)=>{if($)$.updateContainerWidth(G)}),j.methods.set("scrollToIndex",(G,y)=>{let B=Math.floor(G/J.columns),{align:T,behavior:V}=u2(y),w=j.dataManager.getState(),g=X.getTotalRows(w.total),o=Math.max(0,Math.min(B,g-1)),d=Lj(o,j.heightCache,j.state.viewportState.containerHeight,g,T,j.getCachedCompression());if(V==="smooth")j.scrollController.scrollTo(d);else j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if($)$.destroy(),$=null;Y.root.classList.remove(`${E}--grid`)})},destroy(){if($)$.destroy(),$=null}}},QJ=300,u2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:QJ};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??QJ};return{align:"start",behavior:"auto",duration:QJ}};var $J=(J,X)=>{let $=0,j=J.length-1;while($<j){let Y=$+j+1>>>1;if(J[Y].headerLayoutIndex<=X)$=Y;else j=Y-1}return $},RJ=(J,X)=>{let $=0,j=J.length-1;while($<j){let Y=$+j+1>>>1;if(J[Y].firstDataIndex<=X)$=Y;else j=Y-1}return $},wJ=(J,X)=>{if(J===0)return[];let $=[],j=X(0),Y=0,Q=0;for(let q=1;q<J;q++){let Z=X(q);if(Z!==j){let E=q-Y;$.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:E}),Q=Q+1+E,j=Z,Y=q}}return $.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:J-Y}),$},XJ=(J,X)=>{if(J.length===0||X.length===0)return[];let $=J.length+X.length,j=Array($),Y=0;for(let Q of X){j[Y]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},Y++;for(let q=0;q<Q.count;q++)j[Y]=J[Q.firstDataIndex+q],Y++}return j},qJ=(J,X)=>{let $=typeof X==="number"?(j)=>X:X;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return $(Y.dataIndex)}},vJ=(J,X)=>{let $=wJ(J,X.getGroupForIndex),j=J+$.length,Y=X.headerHeight;return{get totalEntries(){return j},get groupCount(){return $.length},get groups(){return $},getEntry:(O)=>{if($.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let b=$J($,O),W=$[b];if(O===W.headerLayoutIndex)return{type:"header",group:W};let N=O-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+N,group:W}},layoutToDataIndex:(O)=>{if($.length===0)return O;let b=$J($,O),W=$[b];if(O===W.headerLayoutIndex)return-1;let N=O-W.headerLayoutIndex-1;return W.firstDataIndex+N},dataToLayoutIndex:(O)=>{if($.length===0)return O;let b=RJ($,O),W=$[b],N=O-W.firstDataIndex;return W.headerLayoutIndex+1+N},getGroupAtLayoutIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=$J($,O);return $[b]},getGroupAtDataIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=RJ($,O);return $[b]},getHeaderHeight:typeof Y==="number"?(O)=>Y:(O)=>{let b=$[O];if(!b)return 0;return Y(b.key,O)},rebuild:(O)=>{$=wJ(O,X.getGroupForIndex),j=O+$.length}}};var CJ=(J,X,$,j,Y)=>{let Q=document.createElement("div");Q.className=`${Y}-sticky-header`,Q.setAttribute("role","presentation"),Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.top="0",Q.style.left="0",Q.style.right="0",Q.style.zIndex="5",Q.style.pointerEvents="none",Q.style.willChange="transform",Q.style.overflow="hidden",J.insertBefore(Q,J.firstChild);let q=-1,Z=!1,E=0,_=(N)=>{if(N===q)return;q=N;let M=X.groups;if(N<0||N>=M.length){Q.textContent="";return}let A=M[N],L=j.headerTemplate(A.key,A.groupIndex),k=X.getHeaderHeight(N);if(Q.style.height=`${k}px`,typeof L==="string")Q.innerHTML=L;else Q.replaceChildren(L)},U=(N)=>{let M=X.groups;if(M.length===0){O();return}let A=0;for(let B=M.length-1;B>=0;B--)if($.getOffset(M[B].headerLayoutIndex)<=N){A=B;break}let L=$.getOffset(M[0].headerLayoutIndex);if(N<L){O();return}if(!Z)F();_(A);let k=X.getHeaderHeight(A),G=0,y=A+1;if(y<M.length){let T=$.getOffset(M[y].headerLayoutIndex)-N;if(T<k)G=T-k}if(G!==E)E=G,Q.style.transform=G===0?"":`translateY(${Math.round(G)}px)`},F=()=>{if(Z)return;Z=!0,Q.style.display=""},O=()=>{if(!Z)return;Z=!1,Q.style.display="none",q=-1,E=0,Q.style.transform=""},b=()=>{let N=q;if(q=-1,N>=0)_(N)},W=()=>{Q.remove(),q=-1,Z=!1};return Q.style.display="none",{update:U,refresh:b,show:F,hide:O,destroy:W}};var SJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let X=null,$=null,j=[],Y=[];return{name:"withGroups",priority:10,setup(Q){let{dom:q,config:Z,rawConfig:E}=Q,{classPrefix:_}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");if(Z.reverse)throw Error("[vlist/builder] withGroups cannot be used with reverse: true");let F=E.item.height;j=E.items?[...E.items]:[];let O=j.length,b={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};X=vJ(O,b),Y=XJ(j,X.groups);let W=qJ(X,F);Q.setHeightConfig(W),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length);let N=E.item.template,{headerTemplate:M}=J,A=(B,T,V)=>{if(Tj(B))return M(B.groupKey,B.groupIndex);return N(B,T,V)},L=Q.methods.get("_getGridLayout"),k=Q.methods.get("_replaceGridRenderer"),G=Q.methods.get("_updateGridLayoutForGroups");if(L&&k){if(G)G((w)=>{let g=Y[w];return!!(g&&Tj(g))});let{createGridRenderer:B}=(jJ(),L2(bJ)),T=L(),V=B(q.items,A,Q.heightCache,T,_,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),Z.ariaIdPrefix);k(V)}else Q.replaceTemplate(A);if(q.root.classList.add(`${_}--grouped`),J.sticky!==!1){$=CJ(q.root,X,Q.heightCache,{...b,sticky:b.sticky??!1},_);let B=$;Q.afterScroll.push((T,V)=>{B.update(T)}),$.update(Q.scrollController.getScrollTop())}let y=()=>{if(!X)return;X.rebuild(j.length),Y=XJ(j,X.groups);let B=qJ(X,F);if(Q.setHeightConfig(B),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length),$)$.refresh()};Q.methods.set("setItems",(B)=>{j=[...B],y()}),Q.methods.set("appendItems",(B)=>{j=[...j,...B],y()}),Q.methods.set("prependItems",(B)=>{j=[...B,...j],y()}),Q.methods.set("removeItem",(B)=>{j=j.filter((T)=>T.id!==B),y()}),Q.methods.set("scrollToIndex",(B,T)=>{let V=X.dataToLayoutIndex(B),{align:w,behavior:g}=h2(T),o=Q.dataManager.getTotal(),d=Lj(V,Q.heightCache,Q.state.viewportState.containerHeight,o,w,Q.getCachedCompression());if(g==="smooth")Q.scrollController.scrollTo(d);else Q.scrollController.scrollTo(d)}),Q.methods.set("_getItems",()=>j),Q.methods.set("_getTotal",()=>j.length),Q.destroyHandlers.push(()=>{if($)$.destroy(),$=null;q.root.classList.remove(`${_}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},KJ=300,h2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:KJ};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??KJ};return{align:"start",behavior:"auto",duration:KJ}};var fJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),YJ=(J,X,$)=>{if($==="none")return J;let j=new Set(J.selected);if($==="single"){if(j.clear(),X.length>0)j.add(X[0])}else for(let Y of X)j.add(Y);return{...J,selected:j}},ZJ=(J,X)=>{let $=new Set(J.selected);for(let j of X)$.delete(j);return{...J,selected:$}},Ij=(J,X,$)=>{if($==="none")return J;if(J.selected.has(X))return ZJ(J,[X]);else return YJ(J,[X],$)},IJ=(J,X,$)=>{if($!=="multiple")return J;return{...J,selected:new Set(X.map((j)=>j.id))}},pJ=(J)=>({...J,selected:new Set}),uJ=(J,X)=>{return J.focusedIndex=X,J},hJ=(J,X,$=!0)=>{if(X===0)return J;let j=J.focusedIndex-1;if(j<0)j=$?X-1:0;return J.focusedIndex=j,J},xJ=(J,X,$=!0)=>{if(X===0)return J;let j=J.focusedIndex+1;if(j>=X)j=$?0:X-1;return J.focusedIndex=j,J},mJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=0,J},gJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=X-1,J};var pj=(J)=>{return Array.from(J.selected)},uj=(J,X)=>{let $=[];for(let j of J.selected){let Y=X(j);if(Y)$.push(Y)}return $};var BJ=(J)=>{let X=J?.mode??"single",$=J?.initial,j=fJ($),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:q,emitter:Z,config:E}=Q,{classPrefix:_,ariaIdPrefix:U}=E;if(X==="none"){Q.methods.set("select",()=>{}),Q.methods.set("deselect",()=>{}),Q.methods.set("toggleSelect",()=>{}),Q.methods.set("selectAll",()=>{}),Q.methods.set("clearSelection",()=>{}),Q.methods.set("getSelected",()=>[]),Q.methods.set("getSelectedItems",()=>[]),Q.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:F,forceRender:O}=Q.getRenderFns(),b=()=>{Q.dom.items.querySelectorAll("[data-index]").forEach((k)=>{let G=k,y=G.dataset.id;if(y!==void 0){let B=/^\d+$/.test(y)?parseInt(y,10):y,T=j.selected.has(B),w=parseInt(G.dataset.index??"-1",10)===j.focusedIndex;G.classList.toggle(`${_}-item--selected`,T),G.classList.toggle(`${_}-item--focused`,w),G.ariaSelected=T?"true":"false"}})},W=()=>{if(Q.state.isDestroyed)return;F(),b()},N=()=>{if(Q.state.isDestroyed)return;O(),b()};Q.setRenderFns(W,N);let M=()=>{b(),Z.emit("selection:change",{selected:pj(j),items:uj(j,(L)=>Q.dataManager.getItemById(L))})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${_}-live-region`,Y.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",q.root.appendChild(Y);let A=Y;Z.on("selection:change",({selected:L})=>{let k=L.length;if(k===0)A.textContent="";else if(k===1)A.textContent="1 item selected";else A.textContent=`${k} items selected`}),Q.clickHandlers.push((L)=>{if(Q.state.isDestroyed)return;let G=L.target.closest("[data-index]");if(!G)return;let y=parseInt(G.dataset.index??"-1",10);if(y<0)return;let B=Q.dataManager.getItem(y);if(!B)return;Z.emit("item:click",{item:B,index:y,event:L}),j=uJ(j,y),q.root.setAttribute("aria-activedescendant",`${U}-item-${y}`),j=Ij(j,B.id,X),M()}),Q.keydownHandlers.push((L)=>{if(Q.state.isDestroyed)return;let k=Q.dataManager.getTotal(),G=j.focusedIndex,y=!1,B=!1,T=j;switch(L.key){case"ArrowUp":T=hJ(j,k),y=!0,B=!0;break;case"ArrowDown":T=xJ(j,k),y=!0,B=!0;break;case"Home":T=mJ(j,k),y=!0,B=!0;break;case"End":T=gJ(j,k),y=!0,B=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let V=Q.dataManager.getItem(j.focusedIndex);if(V)T=Ij(j,V.id,X);y=!0}break}if(y){L.preventDefault(),j=T;let V=j.focusedIndex;if(V>=0){let w=Q.dataManager.getState(),g=Lj(V,Q.heightCache,Q.state.viewportState.containerHeight,w.total,"center",Q.getCachedCompression());Q.scrollController.scrollTo(g),q.root.setAttribute("aria-activedescendant",`${U}-item-${V}`)}else q.root.removeAttribute("aria-activedescendant");if(B){let{selected:w}=j;if(G>=0&&G!==V){let g=Q.dataManager.getItem(G);if(g)Q.renderer.updateItemClasses(G,w.has(g.id),!1)}if(V>=0){let g=Q.dataManager.getItem(V);if(g)Q.renderer.updateItemClasses(V,w.has(g.id),!0)}}else N(),Z.emit("selection:change",{selected:pj(j),items:uj(j,(w)=>Q.dataManager.getItemById(w))})}}),Q.methods.set("select",(...L)=>{j=YJ(j,L,X),M()}),Q.methods.set("deselect",(...L)=>{j=ZJ(j,L),M()}),Q.methods.set("toggleSelect",(L)=>{j=Ij(j,L,X),M()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;let L=Q.getAllLoadedItems();j=IJ(j,L,X),M()}),Q.methods.set("clearSelection",()=>{j=pJ(j);let{renderRange:L,isCompressed:k}=Q.state.viewportState,G=Q.getItemsForRange(L),y=k?Q.getCompressionContext():void 0;Q.renderer.render(G,L,j.selected,j.focusedIndex,y),Z.emit("selection:change",{selected:[],items:[]})}),Q.methods.set("getSelected",()=>{return pj(j)}),Q.methods.set("getSelectedItems",()=>{return uj(j,(L)=>Q.dataManager.getItemById(L))}),Q.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove()})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var Rj=(J,X,$={},j="vlist",Y=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:E=!0,hoverZoneWidth:_=16,showOnViewportEnter:U=!0}=$,F=0,O=0,b=0,W=0,N=!1,M=!1,A=0,L=0,k=0,G=null,y=!1,B=null,T=null,V=Y?"width":"height",w=Y?"translateX":"translateY",g=Y?(t)=>t.clientX:(t)=>t.clientY,o=Y?"left":"top",d=document.createElement("div"),jj=document.createElement("div"),i=E?document.createElement("div"):null,H=()=>{if(d.className=`${j}-scrollbar`,jj.className=`${j}-scrollbar-thumb`,Y)d.classList.add(`${j}-scrollbar--horizontal`);if(d.appendChild(jj),J.appendChild(d),i){if(i.className=`${j}-scrollbar-hover`,Y)i.classList.add(`${j}-scrollbar-hover--horizontal`),i.style.height=`${_}px`;else i.style.width=`${_}px`;J.appendChild(i)}},v=()=>{if(G)clearTimeout(G),G=null},I=()=>{if(!Q)return;v(),G=setTimeout(z,q)},p=()=>{if(F<=O)return;if(v(),!y)d.classList.add(`${j}-scrollbar--visible`),y=!0;if(Q&&!N&&!M)I()},z=()=>{if(N||M)return;d.classList.remove(`${j}-scrollbar--visible`),y=!1},R=(t,Jj)=>{F=t,O=Jj;let C=F>O;if(d.style.display=C?"":"none",!C){z();return}let S=O/F;b=Math.max(Z,S*O),jj.style[V]=`${b}px`,W=O-b,u(k)},u=(t)=>{if(k=t,F<=O||W<=0)return;let Jj=F-O,S=Math.min(1,Math.max(0,t/Jj))*W;jj.style.transform=`${w}(${S}px)`},h=(t)=>{if(t.target===jj)return;let Jj=d.getBoundingClientRect(),s=g(t)-Jj[o]-b/2,m=Math.max(0,Math.min(s,W))/W,Qj=F-O,qj=m*Qj;X(qj),p()},c=(t)=>{t.preventDefault(),t.stopPropagation(),N=!0,A=g(t),L=k,v(),d.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",a),document.addEventListener("mouseup",Xj)},a=(t)=>{if(!N)return;let Jj=g(t)-A,C=W>0?Jj/W:0,S=F-O,s=C*S,e=Math.max(0,Math.min(L+s,S)),Qj=e/S*W;if(jj.style.transform=`${w}(${Qj}px)`,T=e,B===null)B=requestAnimationFrame(()=>{if(T!==null)X(T);B=null})},Xj=()=>{if(N=!1,B!==null)cancelAnimationFrame(B),B=null;if(T!==null)X(T),T=null;if(d.classList.remove(`${j}-scrollbar--dragging`),Q&&!M)I();document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj)},Bj=()=>{if(U)p()},x=()=>{if(!N){if(M=!1,Q)I()}},Yj=()=>{M=!0,v(),p()},n=()=>{if(M=!1,!N&&Q)I()},$j=()=>{if(v(),B!==null)cancelAnimationFrame(B),B=null;if(d.removeEventListener("click",h),d.removeEventListener("mouseenter",Yj),d.removeEventListener("mouseleave",n),jj.removeEventListener("mousedown",c),J.removeEventListener("mouseenter",Bj),J.removeEventListener("mouseleave",x),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj),i){if(i.removeEventListener("mouseenter",Yj),i.removeEventListener("mouseleave",n),i.parentNode)i.parentNode.removeChild(i)}if(d.parentNode)d.parentNode.removeChild(d)};if(H(),d.addEventListener("click",h),d.addEventListener("mouseenter",Yj),d.addEventListener("mouseleave",n),jj.addEventListener("mousedown",c),J.addEventListener("mouseenter",Bj),J.addEventListener("mouseleave",x),i)i.addEventListener("mouseenter",Yj),i.addEventListener("mouseleave",n);return{show:p,hide:z,updateBounds:R,updatePosition:u,isVisible:()=>y,destroy:$j}};var dJ=(J)=>{let X=null;return{name:"withScrollbar",priority:30,setup($){let{dom:j,config:Y}=$,{classPrefix:Q,horizontal:q}=Y;if(X=Rj(j.viewport,(_)=>$.scrollController.scrollTo(_),J??{},Q,q),!j.viewport.classList.contains(`${Q}-viewport--custom-scrollbar`))j.viewport.classList.add(`${Q}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();X.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let E=X;$.afterScroll.push((_,U)=>{E.updatePosition(_),E.show()}),$.resizeHandlers.push((_,U)=>{if(E){let F=$.getCachedCompression();E.updateBounds(F.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(E){let _=$.getCachedCompression();E.updateBounds(_.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(E)E.destroy()})},destroy(){if(X)X.destroy(),X=null}}};tj();var cJ=()=>{let J=null,X=0,$=!1;return{name:"withCompression",priority:20,setup(j){let{dom:Y,config:Q}=j,{classPrefix:q,horizontal:Z}=Q,E=()=>{let U=j.getVirtualTotal(),F=Fj(U,j.heightCache);if(F.isCompressed&&!$){$=!0,j.scrollController.enableCompression(F),j.updateContentSize(F.virtualHeight),j.setScrollFns(()=>X,(N)=>{X=N});let O=Y.viewport,b=(N)=>{N.preventDefault();let M=F.virtualHeight-j.state.viewportState.containerHeight;X=Math.max(0,Math.min(X+N.deltaY,M)),j.scrollController.scrollTo(X)};if(O.addEventListener("wheel",b,{passive:!1}),j.destroyHandlers.push(()=>{O.removeEventListener("wheel",b)}),!Y.viewport.querySelector(`.${q}-scrollbar-track`)){if(J=Rj(Y.viewport,(M)=>j.scrollController.scrollTo(M),{},q,Z),!Y.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))Y.viewport.classList.add(`${q}-viewport--custom-scrollbar`);J.updateBounds(F.virtualHeight,j.state.viewportState.containerHeight);let N=J;j.afterScroll.push((M,A)=>{if(N)N.updatePosition(M),N.show()}),j.resizeHandlers.push((M,A)=>{if(N){let L=j.getCachedCompression();N.updateBounds(L.virtualHeight,j.state.viewportState.containerHeight)}})}}else if(!F.isCompressed&&$)$=!1,j.scrollController.disableCompression(),j.updateContentSize(F.actualHeight);else if(F.isCompressed)j.scrollController.updateConfig({compression:F}),j.updateContentSize(F.virtualHeight);if(J)J.updateBounds(F.virtualHeight,j.state.viewportState.containerHeight);j.state.cachedCompression={state:F,totalItems:U}};j.updateCompressionMode=E;let _=j.getCachedCompression.bind(j);j.getCachedCompression=()=>{if(j.state.cachedCompression)return j.state.cachedCompression.state;return _()},j.setVisibleRangeFn((U,F,O,b,W)=>{let N=Fj(b,O);zJ(U,F,O,b,N,W)}),j.setScrollToPosFn((U,F,O,b,W)=>{let N=Fj(b,F);return PJ(U,F,O,b,N,W)}),j.setPositionElementFn((U,F)=>{let O=j.getVirtualTotal(),b=Fj(O,j.heightCache);if(b.isCompressed){let W=Math.round(fj(F,j.scrollController.getScrollTop(),j.heightCache,O,j.state.viewportState.containerHeight,b)),N=j.config.horizontal;U.style.transform=N?`translateX(${W}px)`:`translateY(${W}px)`}else{let W=Math.round(j.heightCache.getOffset(F)),N=j.config.horizontal;U.style.transform=N?`translateX(${W}px)`:`translateY(${W}px)`}}),E(),j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null})},destroy(){if(J)J.destroy(),J=null}}};var lJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(J){J.methods.set("getScrollSnapshot",()=>{let X=J.scrollController.getScrollTop(),$=J.getCachedCompression(),j=J.getVirtualTotal(),Y=J.methods.get("getSelected"),Q=Y&&Y().length>0?Y():void 0;if(j===0){let _={index:0,offsetInItem:0};if(Q)_.selectedIds=Q;return _}let q,Z;if($.isCompressed){let U=X/$.virtualHeight*j;q=Math.max(0,Math.min(Math.floor(U),j-1)),Z=(U-q)*J.heightCache.getHeight(q)}else q=J.heightCache.indexAtOffset(X),Z=X-J.heightCache.getOffset(q);Z=Math.max(0,Z);let E={index:q,offsetInItem:Z};if(Q)E.selectedIds=Q;return E}),J.methods.set("restoreScroll",(X)=>{let{index:$,offsetInItem:j,selectedIds:Y}=X,Q=J.getCachedCompression(),q=J.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),E;if(Q.isCompressed){let U=J.heightCache.getHeight(Z),F=U>0?j/U:0;E=(Z+F)/q*Q.virtualHeight}else E=J.heightCache.getOffset(Z)+j;let _=Math.max(0,Q.virtualHeight-J.state.viewportState.containerHeight);if(E=Math.max(0,Math.min(E,_)),J.scrollController.scrollTo(E),Y&&Y.length>0){let U=J.methods.get("select");if(U)U(...Y)}})}}};var sJ=(J={})=>{let{chunkSize:X=100,maxCachedItems:$=5000,evictionBuffer:j=200,onEvict:Y}=J,Q=new Map,q=0,Z=0,E=(H)=>{let v=Q.get(H);if(!v)v={items:Array(X),count:0,lastAccess:Date.now()},Q.set(H,v);else v.lastAccess=Date.now();return v},_=(H)=>{return Math.floor(H/X)},U=(H)=>{return H%X},F=()=>q,O=(H)=>{q=H},b=(H)=>{if(H<0||H>=q)return;let v=_(H),I=Q.get(v);if(!I)return;return I.items[U(H)]},W=(H)=>{if(H<0||H>=q)return!1;let v=_(H),I=Q.get(v);if(!I)return!1;return I.items[U(H)]!==void 0},N=(H,v)=>{let I=_(H),p=E(I),z=U(H),R=p.items[z]===void 0;if(p.items[z]=v,R)p.count++,Z++;if(H>=q)q=H+1},M=(H,v)=>{for(let I=0;I<v.length;I++){let p=v[I];if(p!==void 0)N(H+I,p)}},A=(H)=>{if(H<0||H>=q)return!1;let v=_(H),I=Q.get(v);if(!I)return!1;let p=U(H);if(I.items[p]===void 0)return!1;if(I.items[p]=void 0,I.count--,Z--,I.count===0)Q.delete(v);return!0},L=(H,v)=>{let I=[];for(let p=H;p<=v&&p<q;p++)I.push(b(p));return I},k=(H,v)=>{for(let I=H;I<=v&&I<q;I++)if(!W(I))return!1;return!0},G=()=>{let H=[],v=null,I=Array.from(Q.keys()).sort((p,z)=>p-z);for(let p of I){let z=Q.get(p);if(!z)continue;let R=p*X;for(let u=0;u<X;u++){let h=R+u;if(h>=q)break;if(z.items[u]!==void 0)if(v===null)v={start:h,end:h};else if(h===v.end+1)v.end=h;else H.push(v),v={start:h,end:h};else if(v!==null)H.push(v),v=null}}if(v!==null)H.push(v);return H},y=(H,v)=>{let I=[],p=null;for(let z=H;z<=v&&z<q;z++)if(!W(z))if(p===null)p={start:z,end:z};else p.end=z;else if(p!==null)I.push(p),p=null;if(p!==null)I.push(p);return I},B=(H)=>{return Q.has(H)},T=(H)=>{let v=Q.get(H);if(v)v.lastAccess=Date.now()},V=(H,v)=>{if(H>v||Q.size===0)return;let I=Date.now(),p=_(Math.max(0,H)),z=_(Math.min(q-1,v));for(let R=p;R<=z;R++){let u=Q.get(R);if(u)u.lastAccess=I}},w=(H,v)=>{if(Z<=$)return 0;let I=Math.max(0,H-j),p=Math.min(q-1,v+j),z=_(I),R=_(p),u=0,h=[];for(let[c,a]of Q)if(c<z||c>R)u+=a.count,h.push(c),Z-=a.count,Q.delete(c);if(u>0&&Y)Y(u,h);return u},g=()=>{if(Z<=$)return 0;let H=Array.from(Q.entries()).sort(([,p],[,z])=>p.lastAccess-z.lastAccess),v=0,I=[];for(let[p,z]of H){if(Z<=$)break;v+=z.count,Z-=z.count,I.push(p),Q.delete(p)}if(v>0&&Y)Y(v,I);return v},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:Q.size,chunkSize:X,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},d=()=>Z,jj=()=>{Q.clear(),Z=0};return{chunkSize:X,maxCachedItems:$,getTotal:F,setTotal:O,get:b,has:W,set:N,setRange:M,delete:A,getRange:L,isRangeLoaded:k,getLoadedRanges:G,findUnloadedRanges:y,getChunkIndex:_,isChunkLoaded:B,touchChunk:T,touchChunksForRange:V,evictDistant:w,evictToLimit:g,getStats:o,getCachedCount:d,clear:jj,reset:()=>{jj(),q=0}}},x2=(J)=>{if(J.length===0)return[];let X=[...J].sort((j,Y)=>j.start-Y.start),$=[{...X[0]}];for(let j=1;j<X.length;j++){let Y=X[j],Q=$[$.length-1];if(Y.start<=Q.end+1)Q.end=Math.max(Q.end,Y.end);else $.push({...Y})}return $},rJ=(J,X,$)=>{let j=Math.floor(J.start/$)*$,Y=Math.ceil((J.end+1)/$)*$-1,Q={start:j,end:Y};if(X.length===0)return[Q];let q=[],Z=x2(X),E=Q.start;for(let _ of Z){if(_.end<E)continue;if(_.start>Q.end)break;if(_.start>E)q.push({start:E,end:Math.min(_.start-1,Q.end)});if(E=_.end+1,E>Q.end)break}if(E<=Q.end)q.push({start:E,end:Q.end});return q};var aJ=(J={})=>{let{enabled:X=!0,maskCharacter:$="█",randomVariance:j=!0,maxSampleSize:Y=20,customGenerator:Q}=J,q=null,Z=!1,E=0,_=(A)=>{if(!X||Z||A.length===0)return;let L=new Map,k=new Map,G=Math.min(A.length,Y);for(let y=0;y<G;y++){let B=A[y];if(!B||typeof B!=="object")continue;for(let[T,V]of Object.entries(B)){if(T.startsWith("_")||T==="id")continue;if(!k.has(T))k.set(T,{lengths:[],types:new Set});let w=k.get(T),g=Array.isArray(V)?"array":typeof V;if(w.types.add(g),typeof V==="string")w.lengths.push(V.length);else if(V!==null&&V!==void 0)w.lengths.push(String(V).length)}}for(let[y,B]of k){if(B.lengths.length===0)continue;let T=Math.min(...B.lengths),V=Math.max(...B.lengths),w=Math.round(B.lengths.reduce((o,d)=>o+d,0)/B.lengths.length),g="string";if(B.types.has("number")&&B.types.size===1)g="number";else if(B.types.has("boolean")&&B.types.size===1)g="boolean";else if(B.types.has("array"))g="array";else if(B.types.has("object")&&!B.types.has("string"))g="object";L.set(y,{minLength:T,maxLength:V,avgLength:w,type:g})}q=L,Z=!0},U=()=>Z,F=(A)=>{let L=A.avgLength;if(j&&A.minLength!==A.maxLength){if(L=Math.floor(Math.random()*(A.maxLength-A.minLength+1)+A.minLength),Math.random()<0.3)L=Math.max(1,L+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,L))},O=(A)=>{if(Q)return{...Q(A),["_isPlaceholder"]:!0};let L={id:`__placeholder_${E++}`,["_isPlaceholder"]:!0,_index:A};if(!q||q.size===0)return L.label=$.repeat(12),L;for(let[k,G]of q)switch(G.type){case"string":L[k]=F(G);break;case"number":L[k]=0;break;case"boolean":L[k]=!1;break;case"array":L[k]=[];break;case"object":L[k]={};break;default:L[k]=F(G)}return L};return{analyzeStructure:_,hasAnalyzedStructure:U,generate:O,generateRange:(A,L)=>{let k=[];for(let G=A;G<=L;G++)k.push(O(G));return k},isPlaceholder:(A)=>{if(!A||typeof A!=="object")return!1;return A._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,E=0}}},hj=(J)=>{if(!J||typeof J!=="object")return!1;return J._isPlaceholder===!0};var m2=50,oJ=(J={})=>{let{adapter:X,initialItems:$,initialTotal:j,storage:Y,placeholder:Q,pageSize:q=m2,onStateChange:Z,onItemsLoaded:E,onItemsEvicted:_}=J,U=sJ({...Y,onEvict:(C,S)=>{_?.(C),G()}}),F=null,O=()=>{if(!F)F=aJ(Q);return F},b=new Map,W=!1,N,M=!0,A,L=[],k=new Map,G=()=>{Z?.(jj())},y=()=>{b.clear();let C=U.getLoadedRanges();for(let S of C)for(let s=S.start;s<=S.end;s++){let e=U.get(s);if(e&&!hj(e))b.set(e.id,s)}},B=(C,S)=>{if(!hj(S))b.set(S.id,C)},T=(C)=>{b.delete(C)},V=(C,S)=>{return`${C}-${S}`},w=()=>U.getTotal(),g=()=>U.getCachedCount(),o=()=>W,d=()=>M,jj=()=>({total:U.getTotal(),cached:U.getCachedCount(),isLoading:W,pendingRanges:L,error:N,hasMore:M,cursor:A}),i=()=>U,H=()=>O(),v=(C)=>{let S=U.get(C);if(S!==void 0)return S;if(C>=0&&C<U.getTotal())return O().generate(C);return},I=(C)=>{let S=b.get(C);if(S===void 0)return;return U.get(S)},p=(C)=>{return b.get(C)??-1},z=(C)=>{let S=U.get(C);return S!==void 0&&!hj(S)},R=(C,S)=>{let s=[],e=U.getTotal(),m=0,Qj=0;U.touchChunksForRange(C,Math.min(S,e-1));for(let qj=C;qj<=S&&qj<e;qj++){let Mj=U.get(qj);if(Mj!==void 0)s.push(Mj),m++;else s.push(O().generate(qj)),Qj++}return s},u=(C)=>{U.setTotal(C),M=U.getCachedCount()<C,G()},h=(C,S=0,s)=>{if(F&&!F.hasAnalyzedStructure()&&C.length>0)F.analyzeStructure(C);for(let e=0;e<C.length;e++){let m=C[e];if(m!==void 0){let Qj=S+e;U.set(Qj,m),B(Qj,m)}}if(s!==void 0)U.setTotal(s);else if(S+C.length>U.getTotal())U.setTotal(S+C.length);M=U.getCachedCount()<U.getTotal(),E?.(C,S,U.getTotal()),G()},c=(C,S)=>{let s=b.get(C);if(s===void 0)return!1;let e=U.get(s);if(!e)return!1;let m={...e,...S};if(U.set(s,m),S.id!==void 0&&S.id!==C)T(C),B(s,m);return G(),!0},a=(C)=>{let S=b.get(C);if(S===void 0)return!1;U.delete(S),T(C);let s=U.getTotal();if(s>0)U.setTotal(s-1);return G(),!0},Xj=async(C,S)=>{if(!X)return;let s=V(C,S);if(k.has(s))return;let e=U.getLoadedRanges(),m=rJ({start:C,end:S},e,U.chunkSize);if(m.length===0)return;let Qj=U.chunkSize,qj=[];for(let Uj of m){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,Pj=V(Gj,Wj);if(!qj.some((Ej)=>Ej.start===Gj)&&!k.has(Pj))qj.push({start:Gj,end:Wj})}}let Mj=[];for(let Uj of m){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,Pj=V(Gj,Wj);if(k.has(Pj)){let Ej=k.get(Pj);if(!Mj.includes(Ej))Mj.push(Ej)}}}for(let Uj of qj){let Kj=V(Uj.start,Uj.end),_j=(async()=>{L.push(Uj),W=!0,N=void 0,G();try{let Zj=Uj.end-Uj.start+1,Gj={offset:Uj.start,limit:Zj,cursor:void 0},Wj=await X.read(Gj);if(h(Wj.items,Uj.start,Wj.total),Wj.cursor)A=Wj.cursor;if(Wj.hasMore!==void 0)M=Wj.hasMore;else if(Wj.total!==void 0)M=U.getCachedCount()<Wj.total}catch(Zj){N=Zj instanceof Error?Zj:Error(String(Zj))}finally{k.delete(Kj),L=L.filter((Zj)=>Zj.start!==Uj.start||Zj.end!==Uj.end),W=k.size>0,G()}})();k.set(Kj,_j),Mj.push(_j)}await Promise.all(Mj)},Bj=async(C,S)=>{if(U.isRangeLoaded(C,S))return;await Xj(C,S)},x=async()=>{if(!X)return;await Xj(0,q-1)},Yj=async()=>{if(!X||W||!M)return!1;let C=U.getCachedCount(),S=U.getTotal(),s=C,e=Math.min(s+q-1,S>0?S-1:s+q-1);if(s>=S&&S>0)return M=!1,!1;return await Xj(s,e),U.getCachedCount()>C},n=async()=>{if(U.clear(),b.clear(),F)F.clear();A=void 0,M=!0,N=void 0,G(),await x()},$j=(C,S)=>{if(U.evictDistant(C,S)>0)y()},t=()=>{U.clear(),b.clear(),A=void 0,N=void 0,L=[],W=!1,G()},Jj=()=>{if(U.reset(),b.clear(),F)F.clear();A=void 0,M=!0,N=void 0,L=[],W=!1,G()};if($&&$.length>0)h($,0,j??$.length);else if(j!==void 0)U.setTotal(j);return{getState:jj,getTotal:w,getCached:g,getIsLoading:o,getHasMore:d,getStorage:i,getPlaceholders:H,getItem:v,getItemById:I,getIndexById:p,isItemLoaded:z,getItemsInRange:R,setTotal:u,setItems:h,updateItem:c,removeItem:a,loadRange:Xj,ensureRange:Bj,loadInitial:x,loadMore:Yj,reload:n,evictDistant:$j,clear:t,reset:Jj}};var nJ=(J)=>{let{adapter:X,loading:$}=J,j=$?.cancelThreshold??EJ,Y=$?.preloadThreshold??FJ,Q=$?.preloadAhead??LJ;return{name:"withData",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,E=q.config.reverse,_=q.config.overscan,U=oJ({adapter:X,pageSize:Hj,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=JJ(q.state.viewportState,q.heightCache,q.getVirtualTotal(),_,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(A,L,k)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:A,total:k})}});q.replaceDataManager(U);let F=null,O=null,b=0,W=()=>{if(O){let A=O;O=null,q.dataManager.ensureRange(A.start,A.end).catch((L)=>{Z.emit("error",{error:L,context:"ensureRange"})})}};q.afterScroll.push((A,L)=>{if(q.state.isDestroyed)return;let k=q.scrollController.getVelocity(),y=q.scrollController.isTracking()&&k<=j;if(O&&b>j&&k<=j){let V=O;O=null,q.dataManager.ensureRange(V.start,V.end).catch((w)=>{Z.emit("error",{error:w,context:"ensureRange"})})}if(b=k,y&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(E){if(A<aj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Hj}),q.dataManager.loadMore().catch((V)=>{Z.emit("error",{error:V,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-A-q.state.viewportState.containerHeight<aj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Hj}),q.dataManager.loadMore().catch((w)=>{Z.emit("error",{error:w,context:"loadMore"})})}let{renderRange:B}=q.state.viewportState;if(!F||B.start!==F.start||B.end!==F.end)if(F={start:B.start,end:B.end},y){O=null;let{start:V,end:w}=B,g=q.getVirtualTotal();if(k>Y)if(L==="down")w=Math.min(B.end+Q,g-1);else V=Math.max(B.start-Q,0);q.dataManager.ensureRange(V,w).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}else O={start:B.start,end:B.end}});let N=200,M=null;q.afterScroll.push((A,L)=>{if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,W()},N)}),q.destroyHandlers.push(()=>{if(M!==null)clearTimeout(M),M=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:Hj}),q.dataManager.loadInitial().catch((A)=>{Z.emit("error",{error:A,context:"loadInitial"})})}}};var iJ=()=>{let J=null;return{name:"withWindow",priority:5,setup(X){let{dom:$,state:j,config:Y,emitter:Q}=X;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let _=$.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-_.left);else return Math.max(0,-_.top)},(_)=>{let U=$.viewport.getBoundingClientRect();if(Y.horizontal){let F=U.left+window.scrollX;window.scrollTo(F+_,window.scrollY)}else{let F=U.top+window.scrollY;window.scrollTo(window.scrollX,F+_)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,E=()=>{let{innerWidth:_,innerHeight:U}=window,F=Y.horizontal?_:U,O=Y.horizontal?Z:q;if(Math.abs(F-O)<=1)return;q=U,Z=_,j.viewportState.containerHeight=U,Q.emit("resize",{width:_,height:U});for(let b=0;b<X.resizeHandlers.length;b++)X.resizeHandlers[b](_,U);X.renderIfNeeded()};window.addEventListener("resize",E,{passive:!0}),J=()=>{window.removeEventListener("resize",E)},X.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var tJ=(J)=>{let X=rj(J);if(J.scroll?.element===window)X=X.use(iJ());if(J.adapter)X=X.use(nJ({adapter:J.adapter,...J.loading&&{loading:J.loading}}));if(J.layout==="grid"){if(!J.grid)throw Error("[vlist/builder] grid configuration is required when layout is 'grid'");if(!J.grid.columns||J.grid.columns<1)throw Error("[vlist/builder] grid.columns must be a positive integer >= 1");let Q={columns:J.grid.columns};if(J.grid.gap!==void 0)Q.gap=J.grid.gap;X=X.use(TJ(Q))}if(J.groups){if(J.direction==="horizontal")throw Error("[vlist/builder] horizontal direction cannot be combined with groups");let Q={getGroupForIndex:J.groups.getGroupForIndex,headerHeight:typeof J.groups.headerHeight==="function"?J.groups.headerHeight("",0):J.groups.headerHeight,headerTemplate:J.groups.headerTemplate};if(J.groups.sticky!==void 0)Q.sticky=J.groups.sticky;X=X.use(SJ(Q))}let $=J.selection?.mode||"none";if($!=="none"){let Q={mode:$};if(J.selection?.initial!==void 0)Q.initial=J.selection.initial;X=X.use(BJ(Q))}else X=X.use(BJ({mode:"none"}));X=X.use(cJ());let j=J.scroll?.scrollbar||J.scrollbar;if(j!=="none"){let Q=typeof j==="object"?j:{};X=X.use(dJ(Q))}X=X.use(lJ());let Y=X.build();return Y.update=(Q)=>{if(Q.grid&&Y.updateGrid)Y.updateGrid(Q.grid);if(Q.selectionMode!==void 0&&Y.setSelectionMode)Y.setSelectionMode(Q.selectionMode);if(Q.itemHeight!==void 0)console.warn("[vlist] Updating itemHeight via update() is not yet supported with the builder pattern. Please recreate the instance or use the full API from 'vlist/full'.");if(Q.overscan!==void 0)console.warn("[vlist] Updating overscan via update() is not yet supported with the builder pattern.")},Y};function B6(J,X){let $=tJ({...X.config,container:J});if(X.onInstance)X.onInstance($);return{update(j){if(j.config.items)$.setItems(j.config.items);if(j.onInstance)j.onInstance($)},destroy(){$.destroy()}}}function U6(J,X,$){return J.on(X,$)}export{B6 as vlist,U6 as onVListEvent};
1
+ var{defineProperty:lj,getOwnPropertyNames:A2,getOwnPropertyDescriptor:E2}=Object,F2=Object.prototype.hasOwnProperty;
2
+ var _J=new WeakMap,L2=(J)=>{var X=_J.get(J),$;
3
+ if(X)return X;
4
+ if(X=lj({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")A2(J).map((j)=>!F2.call(X,j)&&lj(X,j,{get:()=>J[j],enumerable:!($=E2(J,j))||$.enumerable}));
5
+ return _J.set(J,X),X};
6
+ var O2=(J,X)=>{for(var $ in X)lj(J,$,{get:X[$],enumerable:!0,configurable:!0,set:(j)=>X[$]=()=>j})};
7
+ var GJ=(J,X)=>()=>(J&&(X=J(J=0)),X);
8
+ var aj=200,Hj=50,EJ=15,FJ=2,LJ=50,oj=16000000;
9
+ var OJ=(J,X,$,j)=>{if(j===0)return 0;
10
+ if(!J.isVariable())return Math.ceil($/J.getHeight(0));
11
+ let Y=0,Q=0,q=X;
12
+ while(q<j&&Q<$)Q+=J.getHeight(q),Y++,q++;
13
+ return Math.max(1,Y)},nj=(J,X,$)=>{if($===0)return 0;
14
+ if(!J.isVariable())return Math.floor(X/J.getHeight(0));
15
+ let j=0,Y=0;
16
+ for(let Q=$-1;
17
+ Q>=0;
18
+ Q--){let q=J.getHeight(Q);
19
+ if(Y+q>X)break;
20
+ Y+=q,j++}
21
+ return Math.max(j,1)},ij=(J,X,$)=>{if($===0)return 0;
22
+ let j=Math.floor(X),Y=X-j,Q=Math.max(0,Math.min(j,$-1));
23
+ return J.getOffset(Q)+Y*J.getHeight(Q)};
24
+ var Fj=(J,X)=>{let $=X.getTotalHeight(),j=$>oj,Y=j?oj:$,Q=$>0?Y/$:1;
25
+ return{isCompressed:j,actualHeight:$,virtualHeight:Y,ratio:Q}},zJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;
26
+ if(!Y.isCompressed){let W=$.indexAtOffset(J),N=$.indexAtOffset(J+X);
27
+ if(N<j-1)N++;
28
+ return Q.start=Math.max(0,W),Q.end=Math.min(j-1,Math.max(0,N)),Q}
29
+ let{virtualHeight:q}=Y,E=J/q*j,_=Math.floor(E),U=OJ($,Math.max(0,_),X,j),F=Math.ceil(E)+U,b=q-X-J;
30
+ if(b<=X&&b>=-1){let W=nj($,X,j),N=Math.max(0,j-W),M=Math.max(0,Math.min(1,1-b/X));
31
+ _=Math.floor(_+(N-_)*M),F=b<=1?j-1:Math.min(j-1,_+U)}
32
+ return Q.start=Math.max(0,_),Q.end=Math.min(j-1,Math.max(0,F)),Q},fj=(J,X,$,j,Y,Q,q)=>{if(!Q.isCompressed||j===0)return $.getOffset(J);
33
+ let{virtualHeight:Z}=Q,E=Z-Y,_=E-X;
34
+ if(_<=Y&&_>=-1){if(X>=E-1){let k=$.getTotalHeight()-$.getOffset(J);
35
+ return Y-k}
36
+ let O=nj($,Y,j),b=Math.max(0,j-O),N=X/Z*j,M=Math.max(0,Math.min(1,1-_/Y)),A=$.getOffset(J)-$.getOffset(b),L=$.getOffset(J)-ij($,N,j);
37
+ return L+(A-L)*M}
38
+ let F=X/Z*j;
39
+ return $.getOffset(J)-ij($,F,j)},PJ=(J,X,$,j,Y,Q="start")=>{if(j===0)return 0;
40
+ let q;
41
+ if(Y.isCompressed){if(Q==="end"&&J===j-1)return Math.max(0,Y.virtualHeight-$);
42
+ q=J/j*Y.virtualHeight}
43
+ else q=X.getOffset(J);
44
+ let Z=X.getHeight(J);
45
+ switch(Q){case"center":q-=($-Z)/2;
46
+ break;
47
+ case"end":q-=$-Z;
48
+ break}
49
+ let E=Y.virtualHeight-$;
50
+ return Math.max(0,Math.min(q,E))};
51
+ var tj=()=>{};
52
+ var Tj=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};
53
+ var bJ={};
54
+ O2(bJ,{createGridRenderer:()=>ej});
55
+ var p2=(J=200)=>{let X=[];
56
+ return{acquire:()=>{let Q=X.pop();
57
+ if(Q)return Q;
58
+ let q=document.createElement("div");
59
+ return q.setAttribute("role","option"),q},release:(Q)=>{if(X.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-row"),Q.removeAttribute("data-col"),X.push(Q)},clear:()=>{X.length=0}}},ej=(J,X,$,j,Y,Q,q,Z)=>{let E=p2(),_=new Map,U=Q,F=!1,O=null,b=0,W="",N=(z)=>{if(O&&b===z)return O;
60
+ return O=Fj(z,$),b=z,O},M={selected:!1,focused:!1},A=(z,R)=>{return M.selected=z,M.focused=R,M},L=`${Y}-item ${Y}-grid-item`,k=`${Y}-item--selected`,G=`${Y}-item--focused`,y=(z,R)=>{if(typeof R==="string")z.innerHTML=R;
61
+ else z.replaceChildren(R)},B=(z,R,u)=>{z.classList.toggle(k,R),z.classList.toggle(G,u)},T=(z,R)=>{let u=j.getRow(z);
62
+ if(R){let h=R.totalItems,c=N(h);
63
+ if(c.isCompressed)return fj(u,R.scrollTop,$,h,R.containerHeight,c,R.rangeStart)}
64
+ return $.getOffset(u)},V=(z,R,u)=>{let h=z.dataset.id?.startsWith("__group_header"),c=h?0:j.getCol(R),a=h?0:j.getColumnOffset(c,U),Xj;
65
+ if(F){let Bj=j.getRow(R),x=0,Yj=new Set;
66
+ for(let n=0;
67
+ n<R;
68
+ n++){let $j=j.getRow(n);
69
+ if($j<Bj&&!Yj.has($j)){let t=$.getHeight(n);
70
+ x+=t,Yj.add($j)}}
71
+ Xj=x}
72
+ else Xj=T(R,u);
73
+ z.style.transform=`translate(${Math.round(a)}
74
+ px, ${Math.round(Xj)}
75
+ px)`},w=(z,R)=>{let u=z.dataset.id?.startsWith("__group_header"),h=u?U:j.getColumnWidth(U),c;
76
+ if(F||u)c=$.getHeight(R)-j.gap;
77
+ else{let a=j.getRow(R);
78
+ c=$.getHeight(a)-j.gap}
79
+ z.style.width=`${h}
80
+ px`,z.style.height=`${c}
81
+ px`},g=(z,R,u,h,c)=>{let a=E.acquire(),Xj=A(u,h);
82
+ if(a.className=L,a.dataset.index=String(z),a.dataset.id=String(R.id),a.dataset.row=String(j.getRow(z)),a.dataset.col=String(j.getCol(z)),a.ariaSelected=String(u),Z)a.id=`${Z}-item-${z}`;
83
+ if(q)W=String(q()),a.setAttribute("aria-setsize",W),a.setAttribute("aria-posinset",String(z+1));
84
+ w(a,z);
85
+ let Bj=X(R,z,Xj);
86
+ return y(a,Bj),B(a,u,h),V(a,z,c),a},o=(z,R,u,h,c)=>{if(R.start===0&&z.length>0)F=Tj(z[0]);
87
+ for(let[x,Yj]of _)if(x<R.start||x>R.end)Yj.element.remove(),E.release(Yj.element),_.delete(x);
88
+ let a=!1;
89
+ if(q){let x=String(q());
90
+ a=x!==W,W=x}
91
+ let Xj=document.createDocumentFragment(),Bj=[];
92
+ for(let x=R.start;
93
+ x<=R.end;
94
+ x++){let Yj=x-R.start,n=z[Yj];
95
+ if(!n){console.warn(`⚠️ RENDER: Missing item at index ${x} (range: ${R.start}-${R.end}, items.length: ${z.length})`);
96
+ continue}
97
+ let $j=u.has(n.id),t=x===h,Jj=_.get(x);
98
+ if(Jj){let C=Jj.element.dataset.id,S=String(n.id);
99
+ if(C!==S){let e=A($j,t),m=X(n,x,e);
100
+ y(Jj.element,m),Jj.element.dataset.id=S,Jj.element.dataset.row=String(j.getRow(x)),Jj.element.dataset.col=String(j.getCol(x)),w(Jj.element,x)}
101
+ if(B(Jj.element,$j,t),Jj.element.ariaSelected=String($j),V(Jj.element,x,c),a)Jj.element.setAttribute("aria-setsize",W)}
102
+ else{let C=g(x,n,$j,t,c);
103
+ Xj.appendChild(C),Bj.push({index:x,element:C})}}
104
+ if(Bj.length>0){J.appendChild(Xj);
105
+ for(let{index:x,element:Yj}
106
+ of Bj)_.set(x,{index:x,element:Yj})}},d=(z)=>{for(let[R,u]of _)V(u.element,R,z)},jj=(z,R,u,h)=>{let c=_.get(z);
107
+ if(c){let a=A(u,h),Xj=X(R,z,a);
108
+ y(c.element,Xj),B(c.element,u,h),c.element.dataset.id=String(R.id),c.element.ariaSelected=String(u),w(c.element,z)}},i=(z,R,u)=>{let h=_.get(z);
109
+ if(h)B(h.element,R,u)},H=(z)=>{return _.get(z)?.element},v=(z)=>{if(Math.abs(z-U)<1)return;
110
+ U=z;
111
+ for(let[R,u]of _)w(u.element,R),V(u.element,R)},I=()=>{for(let[,z]of _)z.element.remove(),E.release(z.element);
112
+ _.clear()};
113
+ return{render:o,updatePositions:d,updateItem:jj,updateItemClasses:i,getElement:H,updateContainerWidth:v,clear:I,destroy:()=>{I(),E.clear()}}};
114
+ var jJ=GJ(()=>{tj()});
115
+ var z2=0,zj=5,P2=100,sj=2,b2=(J=0)=>{let X=Array(zj);
116
+ for(let $=0;
117
+ $<zj;
118
+ $++)X[$]={position:0,time:0};
119
+ return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},k2=(J,X)=>{let $=performance.now(),j=$-J.lastTime;
120
+ if(j===0)return J;
121
+ if(j>P2){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;
122
+ let Q=J.samples[0];
123
+ return Q.position=X,Q.time=$,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=X,J.lastTime=$,J}
124
+ let Y=J.samples[J.sampleIndex];
125
+ if(Y.position=X,Y.time=$,J.sampleIndex=(J.sampleIndex+1)%zj,J.sampleCount=Math.min(J.sampleCount+1,zj),J.sampleCount>=sj){let Q=(J.sampleIndex-J.sampleCount+zj)%zj,q=J.samples[Q],Z=X-q.position,E=$-q.time;
126
+ J.velocity=E>0?Math.abs(Z)/E:0}
127
+ return J.lastPosition=X,J.lastTime=$,J},MJ=(J,X)=>{if(typeof J==="number"){let Q=X;
128
+ return{getOffset:(q)=>q*J,getHeight:()=>J,indexAtOffset:(q)=>{if(Q===0||J===0)return 0;
129
+ return Math.max(0,Math.min(Math.floor(q/J),Q-1))},getTotalHeight:()=>Q*J,getTotal:()=>Q,rebuild:(q)=>{Q=q},isVariable:()=>!1}}
130
+ let $=X,j=new Float64Array(0),Y=(Q)=>{$=Q,j=new Float64Array(Q+1),j[0]=0;
131
+ for(let q=0;
132
+ q<Q;
133
+ q++)j[q+1]=j[q]+J(q)};
134
+ return Y(X),{getOffset:(Q)=>{if(Q<=0)return 0;
135
+ if(Q>=$)return j[$];
136
+ return j[Q]},getHeight:(Q)=>J(Q),indexAtOffset:(Q)=>{if($===0)return 0;
137
+ if(Q<=0)return 0;
138
+ if(Q>=j[$])return $-1;
139
+ let q=0,Z=$-1;
140
+ while(q<Z){let E=q+Z+1>>>1;
141
+ if(j[E]<=Q)q=E;
142
+ else Z=E-1}
143
+ return q},getTotalHeight:()=>j[$]??0,getTotal:()=>$,rebuild:(Q)=>Y(Q),isVariable:()=>!0}},y2=()=>{let J={},X=(Q,q)=>{if(!J[Q])J[Q]=new Set;
144
+ return J[Q].add(q),()=>$(Q,q)},$=(Q,q)=>{J[Q]?.delete(q)};
145
+ return{on:X,off:$,emit:(Q,q)=>{J[Q]?.forEach((Z)=>{try{Z(q)}
146
+ catch(E){console.error(`[vlist] Error in "${Q}" handler:`,E)}})},clear:()=>{for(let Q in J)delete J[Q]}}},H2=(J)=>{if(typeof J==="string"){let X=document.querySelector(J);
147
+ if(!X)throw Error(`[vlist/builder] Container not found: ${J}`);
148
+ return X}
149
+ return J},T2=(J,X,$,j)=>{let Y=document.createElement("div");
150
+ if(Y.className=X,j)Y.classList.add(`${X}--horizontal`);
151
+ if(Y.setAttribute("role","listbox"),Y.setAttribute("tabindex","0"),$)Y.setAttribute("aria-label",$);
152
+ if(j)Y.setAttribute("aria-orientation","horizontal");
153
+ let Q=document.createElement("div");
154
+ if(Q.className=`${X}-viewport`,j)Q.style.overflowX="auto",Q.style.overflowY="hidden";
155
+ else Q.style.overflow="auto";
156
+ Q.style.height="100%",Q.style.width="100%";
157
+ let q=document.createElement("div");
158
+ if(q.className=`${X}-content`,q.style.position="relative",j)q.style.height="100%";
159
+ else q.style.width="100%";
160
+ let Z=document.createElement("div");
161
+ if(Z.className=`${X}-items`,Z.style.position="relative",j)Z.style.height="100%";
162
+ else Z.style.width="100%";
163
+ return q.appendChild(Z),Q.appendChild(q),Y.appendChild(Q),J.appendChild(Y),{root:Y,viewport:Q,content:q,items:Z}},R2=(J=100)=>{let X=[];
164
+ return{acquire:()=>{let $=X.pop();
165
+ if($)return $;
166
+ let j=document.createElement("div");
167
+ return j.setAttribute("role","option"),j},release:($)=>{if(X.length<J)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),X.push($)},clear:()=>{X.length=0}}},w2=(J,X,$,j,Y)=>{if(j===0||X===0){Y.start=0,Y.end=0;
168
+ return}
169
+ let Q=$.indexAtOffset(J),q=$.indexAtOffset(J+X);
170
+ if(q<j-1)q++;
171
+ Y.start=Math.max(0,Q),Y.end=Math.min(j-1,Math.max(0,q))},v2=(J,X,$,j)=>{if($===0){j.start=0,j.end=0;
172
+ return}
173
+ j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X)},C2=(J,X,$,j,Y)=>{if(j===0)return 0;
174
+ let Q=Math.max(0,Math.min(J,j-1)),q=X.getOffset(Q),Z=X.getHeight(Q),E=Math.max(0,X.getTotalHeight()-$),_;
175
+ switch(Y){case"center":_=q-($-Z)/2;
176
+ break;
177
+ case"end":_=q-$+Z;
178
+ break;
179
+ default:_=q}
180
+ return Math.max(0,Math.min(_,E))},S2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,f2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};
181
+ if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};
182
+ return{align:"start",behavior:"auto",duration:300}},rj=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");
183
+ if(!J.item)throw Error("[vlist/builder] item configuration is required");
184
+ let X=J.direction==="horizontal",$=X?"width":"height",j=X?J.item.width:J.item.height;
185
+ if(j==null)throw Error(`[vlist/builder] item.${$} is required${X?" when direction is 'horizontal'":""}`);
186
+ if(typeof j==="number"&&j<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);
187
+ if(typeof j!=="number"&&typeof j!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);
188
+ if(!J.item.template)throw Error("[vlist/builder] item.template is required");
189
+ if(X&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");
190
+ let Y=new Map,Q=!1,q={use(Z){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");
191
+ return Y.set(Z.name,Z),q},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");
192
+ return Q=!0,I2(J,Y,X,j)}};
193
+ return q};
194
+ function I2(J,X,$,j){let{item:Y,items:Q,overscan:q=3,classPrefix:Z="vlist",ariaLabel:E,reverse:_=!1,scroll:U}=J,F=U?.wheel??!0,O=U?.wrap??!1,b=_,W=`${Z}-${z2++}`,N=j,M=$?typeof Y.height==="number"?Y.height:void 0:typeof Y.width==="number"?Y.width:void 0,A=Y.template,L={overscan:q,classPrefix:Z,reverse:b,wrap:O,horizontal:$,ariaIdPrefix:W},k=Array.from(X.values()).sort((K,D)=>(K.priority??50)-(D.priority??50)),G=new Set(k.map((K)=>K.name));
195
+ for(let K of k)if(K.conflicts){for(let D of K.conflicts)if(G.has(D))throw Error(`[vlist/builder] ${K.name} and ${D} cannot be combined`)}
196
+ if($){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");
197
+ if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}
198
+ if(b){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true");
199
+ if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with reverse: true")}
200
+ let y=H2(J.container),B=T2(y,Z,E,$),T=y2(),V=Q?[...Q]:[],w=MJ(N,V.length),g=R2(),o=B.viewport.clientHeight,d=B.viewport.clientWidth,jj=!1,i=!1,H=0,v=null,I=null,p=b2(0),z={start:0,end:0},R={start:0,end:0},u={start:-1,end:-1},h={viewportState:{scrollTop:0,containerHeight:o,totalHeight:w.getTotalHeight(),actualHeight:w.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},c=new Map,a={selected:!1,focused:!1},Xj=`${Z}-item`,Bj="",x=new Map,Yj=()=>{x.clear();
201
+ for(let K=0;
202
+ K<V.length;
203
+ K++){let D=V[K];
204
+ if(D)x.set(D.id,K)}};
205
+ Yj();
206
+ let n=null,$j=()=>n?n.getTotal():V.length,t=[],Jj=[],C=[],S=[],s=[],e=[],m=new Map,Qj=()=>{return $?B.viewport.scrollLeft:B.viewport.scrollTop},qj=(K)=>{if($)B.viewport.scrollLeft=K;
207
+ else B.viewport.scrollTop=K},Mj=(K=2)=>{let D=w.getTotalHeight();
208
+ return H+o>=D-K},Uj=!1,Kj,_j,Zj=(K,D,P,f,r)=>{w2(K,D,P,f,r)},Gj=(K,D,P,f,r)=>{return C2(K,D,P,f,r)},Wj=(K,D)=>{if(typeof D==="string")K.innerHTML=D;
209
+ else K.replaceChildren(D)},Ej=(K,D)=>{let P=Math.round(w.getOffset(D));
210
+ if($)K.style.transform=`translateX(${P}
211
+ px)`;
212
+ else K.style.transform=`translateY(${P}
213
+ px)`},eJ=(K,D)=>{let P=g.acquire();
214
+ if(P.className=Xj,$){if(P.style.width=`${w.getHeight(K)}
215
+ px`,M!=null)P.style.height=`${M}
216
+ px`}
217
+ else P.style.height=`${w.getHeight(K)}
218
+ px`;
219
+ return P.dataset.index=String(K),P.dataset.id=String(D.id),P.ariaSelected="false",P.id=`${W}-item-${K}`,Bj=String($j()),P.setAttribute("aria-setsize",Bj),P.setAttribute("aria-posinset",String(K+1)),Wj(P,A(D,K,a)),Ej(P,K),P},bj=()=>{let K=`${w.getTotalHeight()}
220
+ px`;
221
+ if($)B.content.style.width=K;
222
+ else B.content.style.height=K},xj=new Set,mj=-1,j2=()=>{if(jj)return;
223
+ let K=$j();
224
+ if(Zj(H,o,w,K,z),v2(z,q,K,R),R.start===u.start&&R.end===u.end)return;
225
+ let D=String(K),P=D!==Bj;
226
+ Bj=D;
227
+ for(let[l,Dj]of c)if(l<R.start||l>R.end)Dj.remove(),g.release(Dj),c.delete(l);
228
+ let f=document.createDocumentFragment(),r=[];
229
+ for(let l=R.start;
230
+ l<=R.end;
231
+ l++){let Dj=n?n.getItem(l):V[l];
232
+ if(!Dj)continue;
233
+ let Vj=c.get(l);
234
+ if(Vj){let Aj=Vj.dataset.id,Cj=String(Dj.id);
235
+ if(Aj!==Cj)if(Wj(Vj,A(Dj,l,a)),Vj.dataset.id=Cj,$)Vj.style.width=`${w.getHeight(l)}
236
+ px`;
237
+ else Vj.style.height=`${w.getHeight(l)}
238
+ px`;
239
+ Ej(Vj,l);
240
+ let Sj=xj.has(Dj.id),M2=l===mj;
241
+ if(Vj.classList.toggle(`${Z}-item--selected`,Sj),Vj.classList.toggle(`${Z}-item--focused`,M2),Vj.ariaSelected=Sj?"true":"false",P)Vj.setAttribute("aria-setsize",Bj)}
242
+ else{let Aj=eJ(l,Dj),Cj=xj.has(Dj.id),Sj=l===mj;
243
+ if(Cj)Aj.classList.add(`${Z}-item--selected`),Aj.ariaSelected="true";
244
+ if(Sj)Aj.classList.add(`${Z}-item--focused`);
245
+ f.appendChild(Aj),r.push({index:l,element:Aj})}}
246
+ if(r.length>0){B.items.appendChild(f);
247
+ for(let{index:l,element:Dj}
248
+ of r)c.set(l,Dj)}
249
+ u.start=R.start,u.end=R.end,h.lastRenderRange.start=R.start,h.lastRenderRange.end=R.end,h.viewportState.scrollTop=H,h.viewportState.visibleRange.start=z.start,h.viewportState.visibleRange.end=z.end,h.viewportState.renderRange.start=R.start,h.viewportState.renderRange.end=R.end,T.emit("range:change",{range:{start:R.start,end:R.end}})},J2=()=>{u.start=-1,u.end=-1,Kj()};
250
+ Kj=j2,_j=J2;
251
+ let kj=()=>{if(jj)return;
252
+ let K=Qj(),D=K>=H?"down":"up";
253
+ if(p=k2(p,K),!B.root.classList.contains(`${Z}--scrolling`))B.root.classList.add(`${Z}--scrolling`);
254
+ H=K,Kj(),T.emit("scroll",{scrollTop:K,direction:D}),T.emit("velocity:change",{velocity:p.velocity,reliable:p.sampleCount>=sj});
255
+ for(let P=0;
256
+ P<t.length;
257
+ P++)t[P](K,D);
258
+ if(I)clearTimeout(I);
259
+ I=setTimeout(()=>{B.root.classList.remove(`${Z}--scrolling`),p.velocity=0,p.sampleCount=0,T.emit("velocity:change",{velocity:0,reliable:!1})},U?.idleTimeout??150)},wj=null,Oj=B.viewport;
260
+ if(Oj.addEventListener("scroll",kj,{passive:!0}),$&&F)wj=(K)=>{if(K.deltaX)return;
261
+ K.preventDefault(),B.viewport.scrollLeft+=K.deltaY},B.viewport.addEventListener("wheel",wj);
262
+ B.viewport.classList.add(`${Z}-viewport--custom-scrollbar`);
263
+ let UJ=(K)=>{let P=K.target.closest("[data-index]");
264
+ if(P){let f=parseInt(P.dataset.index??"-1",10);
265
+ if(f>=0){let r=n?.getItem(f)??V[f];
266
+ if(r){if(r.__groupHeader)return;
267
+ T.emit("item:click",{item:r,index:f,event:K})}}}
268
+ for(let f=0;
269
+ f<Jj.length;
270
+ f++)Jj[f](K)},Q2=(K)=>{let P=K.target.closest("[data-index]");
271
+ if(P){let f=parseInt(P.dataset.index??"-1",10);
272
+ if(f>=0){let r=n?.getItem(f)??V[f];
273
+ if(r){if(r.__groupHeader)return;
274
+ T.emit("item:dblclick",{item:r,index:f,event:K})}}}},WJ=(K)=>{for(let D=0;
275
+ D<C.length;
276
+ D++)C[D](K)};
277
+ B.items.addEventListener("click",UJ),B.items.addEventListener("dblclick",Q2),B.root.addEventListener("keydown",WJ);
278
+ let gj=!0,$2=()=>d,X2=()=>o,dj=new ResizeObserver((K)=>{if(jj)return;
279
+ for(let D of K){let P=D.contentRect.height,f=D.contentRect.width,r=$?f:P;
280
+ if(d=f,Math.abs(r-o)>1){if(o=r,h.viewportState.containerHeight=r,i)bj(),Kj(),T.emit("resize",{height:P,width:f})}
281
+ if(i)for(let l=0;
282
+ l<S.length;
283
+ l++)S[l](f,P)}});
284
+ if(gj)dj.observe(B.viewport);
285
+ let Nj={get dom(){return B},get heightCache(){return w},get emitter(){return T},get config(){return L},get rawConfig(){return J},get renderer(){return{render:(K,D,P,f,r)=>{xj=P,mj=f,_j()},updateItemClasses:(K,D,P)=>{let f=c.get(K);
286
+ if(!f)return;
287
+ f.classList.toggle(`${Z}-item--selected`,D),f.classList.toggle(`${Z}-item--focused`,P),f.ariaSelected=D?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(K)=>c.get(K)??null,clear:()=>{},destroy:()=>{}}},set renderer(K){},get dataManager(){return n},set dataManager(K){n=K},get scrollController(){return cj},set scrollController(K){cj=K},state:h,getContainerWidth(){return d},afterScroll:t,clickHandlers:Jj,keydownHandlers:C,resizeHandlers:S,contentSizeHandlers:s,destroyHandlers:e,methods:m,replaceTemplate(K){A=K},replaceRenderer(K){},replaceDataManager(K){n=K},replaceScrollController(K){cj=K},getItemsForRange(K){let D=[];
288
+ for(let P=K.start;
289
+ P<=K.end;
290
+ P++){let f=n?n.getItem(P):V[P];
291
+ if(f)D.push(f)}
292
+ return D},getAllLoadedItems(){if(n){let K=n.getTotal(),D=[];
293
+ for(let P=0;
294
+ P<K;
295
+ P++){let f=n.getItem(P);
296
+ if(f)D.push(f)}
297
+ return D}
298
+ return[...V]},getVirtualTotal(){return $j()},getCachedCompression(){return{isCompressed:!1,actualHeight:w.getTotalHeight(),virtualHeight:w.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:H,totalItems:$j(),containerHeight:o,rangeStart:R.start}},renderIfNeeded(){Kj()},forceRender(){_j()},getRenderFns(){return{renderIfNeeded:Kj,forceRender:_j}},setRenderFns(K,D){Kj=K,_j=D},setVirtualTotalFn(K){$j=K},rebuildHeightCache(K){w.rebuild(K??$j())},setHeightConfig(K){w=MJ(K,$j())},updateContentSize(K){let D=`${K}
299
+ px`;
300
+ if($)B.content.style.width=D;
301
+ else B.content.style.height=D},updateCompressionMode(){},setVisibleRangeFn(K){Zj=K},setScrollToPosFn(K){Gj=K},setPositionElementFn(K){Ej=K},setScrollFns(K,D){Qj=K,qj=(P)=>{D(P),kj()}},setScrollTarget(K){Oj.removeEventListener("scroll",kj),Oj=K,Oj.addEventListener("scroll",kj,{passive:!0})},getScrollTarget(){return Oj},setContainerDimensions(K){$2=K.width,X2=K.height,d=K.width(),o=K.height(),h.viewportState.containerHeight=o},disableViewportResize(){if(gj)gj=!1,dj.unobserve(B.viewport)}};
302
+ n={getState:()=>({total:V.length,cached:V.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>V.length,getCached:()=>V.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(K)=>V[K],getItemById:(K)=>{let D=x.get(K);
303
+ return D!==void 0?V[D]:void 0},getIndexById:(K)=>x.get(K)??-1,isItemLoaded:(K)=>K>=0&&K<V.length&&V[K]!==void 0,getItemsInRange:(K,D)=>{let P=[],f=Math.max(0,K),r=Math.min(D,V.length-1);
304
+ for(let l=f;
305
+ l<=r;
306
+ l++)P.push(V[l]);
307
+ return P},setTotal:(K)=>{},setItems:(K,D=0,P)=>{if(D===0&&(P!==void 0||V.length===0))V=[...K];
308
+ else{let f=D+K.length;
309
+ if(V.length<f)V.length=f;
310
+ for(let r=0;
311
+ r<K.length;
312
+ r++)V[D+r]=K[r]}
313
+ if(Yj(),i){w.rebuild($j()),bj(),Nj.updateCompressionMode();
314
+ for(let f=0;
315
+ f<s.length;
316
+ f++)s[f]();
317
+ _j()}},updateItem:(K,D)=>{let P=x.get(K);
318
+ if(P===void 0)return!1;
319
+ let f=V[P];
320
+ if(!f)return!1;
321
+ if(V[P]={...f,...D},D.id!==void 0&&D.id!==K)x.delete(K),x.set(D.id,P);
322
+ let r=c.get(P);
323
+ if(r)Wj(r,A(V[P],P,a)),r.dataset.id=String(V[P].id);
324
+ return!0},removeItem:(K)=>{let D=x.get(K);
325
+ if(D===void 0)return!1;
326
+ if(V.splice(D,1),Yj(),i){w.rebuild($j()),bj(),Nj.updateCompressionMode();
327
+ for(let P=0;
328
+ P<s.length;
329
+ P++)s[P]();
330
+ _j()}
331
+ return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{V=[],x.clear()},reset:()=>{if(V=[],x.clear(),i)w.rebuild(0),bj(),_j()}};
332
+ let cj={getScrollTop:()=>Qj(),scrollTo:(K)=>{qj(K),H=K,Kj()},scrollBy:(K)=>{let D=Qj()+K;
333
+ qj(D),H=D,Kj()},isAtTop:()=>H<=2,isAtBottom:(K=2)=>Mj(K),getScrollPercentage:()=>{let K=w.getTotalHeight(),D=Math.max(0,K-o);
334
+ return D>0?H/D:0},getVelocity:()=>p.velocity,isTracking:()=>p.sampleCount>=sj,isScrolling:()=>B.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>Uj,isWindowMode:()=>!1,updateContainerHeight:(K)=>{o=K},destroy:()=>{}},NJ=new Map;
335
+ for(let K of k)if(K.methods)for(let D of K.methods){let P=NJ.get(D);
336
+ if(P)throw Error(`[vlist/builder] Method "${D}" is registered by both "${P}" and "${K.name}"`);
337
+ NJ.set(D,K.name)}
338
+ for(let K of k)K.setup(Nj);
339
+ if(i=!0,Nj.state.isInitialized=!0,bj(),Kj(),b&&V.length>0){let K=Gj(V.length-1,w,o,V.length,"end");
340
+ qj(K),H=K,Kj()}
341
+ let q2=(K)=>{Nj.dataManager.setItems(K,0,K.length)},K2=b?(K)=>{let D=Mj(2),P=V.length;
342
+ if(Nj.dataManager.setItems(K,P),D&&V.length>0){let f=Gj(V.length-1,w,o,V.length,"end");
343
+ qj(f),H=f,Kj()}}:(K)=>{let D=V.length;
344
+ Nj.dataManager.setItems(K,D)},Y2=b?(K)=>{let D=Qj(),P=w.getTotalHeight(),f=[...V];
345
+ Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...f],0);
346
+ let l=w.getTotalHeight()-P;
347
+ if(l>0)qj(D+l),H=D+l}:(K)=>{let D=[...V];
348
+ Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...D],0)},Z2=(K,D)=>{Nj.dataManager.updateItem(K,D)},B2=(K)=>{Nj.dataManager.removeItem(K)},U2=async()=>{if(Nj.dataManager.reload)await Nj.dataManager.reload()},vj=()=>{if(v!==null)cancelAnimationFrame(v),v=null},W2=(K,D,P)=>{if(vj(),Math.abs(D-K)<1){qj(D),H=D,Kj();
349
+ return}
350
+ let f=performance.now(),r=(l)=>{let Dj=l-f,Vj=Math.min(Dj/P,1),Aj=K+(D-K)*S2(Vj);
351
+ if(qj(Aj),H=Aj,Kj(),Vj<1)v=requestAnimationFrame(r);
352
+ else v=null};
353
+ v=requestAnimationFrame(r)},DJ=(K,D)=>{let{align:P,behavior:f,duration:r}=f2(D),l=$j(),Dj=K;
354
+ if(O&&l>0)Dj=(Dj%l+l)%l;
355
+ let Vj=Gj(Dj,w,o,l,P);
356
+ if(f==="smooth")W2(Qj(),Vj,r);
357
+ else vj(),qj(Vj)},N2=(K,D)=>{let P=x.get(K)??Nj.dataManager.getIndexById(K);
358
+ if(P>=0)DJ(P,D)},D2=()=>Qj(),V2=(K,D)=>{return T.on(K,D)},_2=(K,D)=>{T.off(K,D)},G2=()=>{if(jj)return;
359
+ if(jj=!0,Nj.state.isDestroyed=!0,B.items.removeEventListener("click",UJ),B.root.removeEventListener("keydown",WJ),Oj.removeEventListener("scroll",kj),dj.disconnect(),wj)B.viewport.removeEventListener("wheel",wj);
360
+ if(I)clearTimeout(I);
361
+ for(let K=0;
362
+ K<e.length;
363
+ K++)e[K]();
364
+ for(let K of k)if(K.destroy)K.destroy();
365
+ vj();
366
+ for(let[,K]of c)K.remove(),g.release(K);
367
+ c.clear(),g.clear(),T.clear(),B.root.remove()},VJ={get element(){return B.root},get items(){if(m.has("_getItems"))return m.get("_getItems")();
368
+ return V},get total(){if(m.has("_getTotal"))return m.get("_getTotal")();
369
+ return $j()},setItems:m.has("setItems")?m.get("setItems"):q2,appendItems:m.has("appendItems")?m.get("appendItems"):K2,prependItems:m.has("prependItems")?m.get("prependItems"):Y2,updateItem:m.has("updateItem")?m.get("updateItem"):Z2,removeItem:m.has("removeItem")?m.get("removeItem"):B2,reload:m.has("reload")?m.get("reload"):U2,scrollToIndex:m.has("scrollToIndex")?m.get("scrollToIndex"):DJ,scrollToItem:m.has("scrollToItem")?m.get("scrollToItem"):N2,cancelScroll:m.has("cancelScroll")?m.get("cancelScroll"):vj,getScrollPosition:m.has("getScrollPosition")?m.get("getScrollPosition"):D2,on:V2,off:_2,destroy:G2};
370
+ for(let[K,D]of m){if(K==="setItems"||K==="appendItems"||K==="prependItems"||K==="updateItem"||K==="removeItem"||K==="reload"||K==="scrollToIndex"||K==="scrollToItem"||K==="cancelScroll"||K==="getScrollPosition")continue;
371
+ VJ[K]=D}
372
+ return VJ}
373
+ var AJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),$=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},Q=(W)=>{if(W<=0)return 0;
374
+ if(!j)return Math.ceil(W/X);
375
+ let N=0,M=0,A=0;
376
+ for(let L=0;
377
+ L<W;
378
+ L++)if(j(L)){if(A++,M>0)N++,M=0;
379
+ N++,M=0}
380
+ else if(M++,M>=X)N++,M=0;
381
+ if(M>0)N++;
382
+ return N},q=(W)=>{return Y.row=Z(W),Y.col=E(W),Y},Z=(W)=>{if(!j)return Math.floor(W/X);
383
+ let N=0,M=0;
384
+ for(let A=0;
385
+ A<=W;
386
+ A++)if(j(A)){if(M>0)N++,M=0;
387
+ if(A===W)return N;
388
+ N++,M=0}
389
+ else{if(A===W)return N;
390
+ if(M++,M>=X)N++,M=0}
391
+ return console.warn(`⚠️ getRow(${W}) fell through - returning ${N}`),N},E=(W)=>{if(!j)return W%X;
392
+ if(j(W))return 0;
393
+ let N=0;
394
+ for(let M=0;
395
+ M<=W;
396
+ M++)if(j(M))N=0;
397
+ else{if(M===W)return N;
398
+ if(N++,N>=X)N=0}
399
+ return N},_=(W,N,M)=>{if(M<=0)return{start:0,end:-1};
400
+ if(!j){let y=Math.max(0,W*X),B=Math.min(M-1,(N+1)*X-1);
401
+ return{start:y,end:B}}
402
+ let A=-1,L=-1,k=0,G=0;
403
+ for(let y=0;
404
+ y<M;
405
+ y++){if(j(y)){if(G>0)k++,G=0;
406
+ if(k>=W&&k<=N){if(A===-1)A=y;
407
+ L=y}
408
+ k++,G=0}
409
+ else{if(k>=W&&k<=N){if(A===-1)A=y;
410
+ L=y}
411
+ if(G++,G>=X)k++,G=0}
412
+ if(k>N&&G===0)break}
413
+ if(A===-1)return{start:0,end:-1};
414
+ return{start:A,end:L}},U=(W,N,M)=>{if(N<0||N>=X)return-1;
415
+ let A=W*X+N;
416
+ if(A<0||A>=M)return-1;
417
+ return A},F=(W)=>{let N=(X-1)*$;
418
+ return Math.max(0,(W-N)/X)};
419
+ return{get columns(){return X},get gap(){return $},update:(W)=>{if(W.columns!==void 0)X=Math.max(1,Math.floor(W.columns));
420
+ if(W.gap!==void 0)$=W.gap;
421
+ if(W.isHeaderFn!==void 0)j=W.isHeaderFn},getTotalRows:Q,getPosition:q,getRow:Z,getCol:E,getItemRange:_,getItemIndex:U,getColumnWidth:F,getColumnOffset:(W,N)=>{let M=F(N);
422
+ return W*(M+$)}}};
423
+ jJ();
424
+ var kJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;
425
+ let q=$.indexAtOffset(J),Z=$.indexAtOffset(J+X);
426
+ if(Z<j-1)Z++;
427
+ return Q.start=Math.max(0,q),Q.end=Math.min(j-1,Math.max(0,Z)),Q},yJ=(J,X,$,j)=>{if($===0)return j.start=0,j.end=-1,j;
428
+ return j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X),j},HJ=(J,X,$,j,Y,Q)=>{if(j===0)return 0;
429
+ let q=Math.max(0,Math.min(J,j-1)),Z=X.getOffset(q),E=X.getHeight(q),_=X.getTotalHeight(),U=Math.max(0,_-$),F;
430
+ switch(Q){case"center":F=Z-$/2+E/2;
431
+ break;
432
+ case"end":F=Z-$+E;
433
+ break;
434
+ case"start":default:F=Z;
435
+ break}
436
+ return Math.max(0,Math.min(F,U))};
437
+ var JJ=(J,X,$,j,Y,Q=kJ)=>{return Q(J.scrollTop,J.containerHeight,X,$,Y,J.visibleRange),yJ(J.visibleRange,j,$,J.renderRange),J.totalHeight=Y.virtualHeight,J.actualHeight=Y.actualHeight,J.isCompressed=Y.isCompressed,J.compressionRatio=Y.ratio,J},Lj=(J,X,$,j,Y="start",Q,q=HJ)=>{return q(J,X,$,j,Q,Y)};
438
+ var TJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");
439
+ let X=null,$=null;
440
+ return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:Q,config:q,rawConfig:Z}=j,{classPrefix:E}=q;
441
+ if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");
442
+ if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");
443
+ let _=Z.items?.some((G)=>G.__groupHeader===!0),U={columns:J.columns,gap:J.gap??0};
444
+ if(_)U.isHeaderFn=(G)=>{let y=j.dataManager.getItem(G);
445
+ return!!(y&&y.__groupHeader===!0)};
446
+ X=AJ(U);
447
+ let F=X.gap;
448
+ j.setVirtualTotalFn(()=>{let G=j.dataManager.getTotal();
449
+ return X.getTotalRows(G)});
450
+ let O=Z.item,b=q.horizontal?O.width:O.height,W={containerWidth:j.getContainerWidth(),columns:X.columns,gap:X.gap};
451
+ if(typeof b==="function")j.setHeightConfig((G)=>{let y=W.containerWidth-2,B=(W.columns-1)*W.gap,T=(y-B)/W.columns,V={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:T,row:X.getRow(G),column:X.getCol(G),totalRows:X.getTotalRows(j.dataManager.getTotal()),totalColumns:W.columns};
452
+ return b(G,V)+W.gap});
453
+ else if(F>0)j.setHeightConfig(b+F);
454
+ j.rebuildHeightCache(),Y.root.classList.add(`${E}--grid`);
455
+ let N=j.getContainerWidth(),M=Z.item.template,A=()=>{$=ej(Y.items,M,j.heightCache,X,E,N,()=>j.dataManager.getTotal(),q.ariaIdPrefix),j.replaceRenderer($)};
456
+ A(),j.methods.set("_getGridLayout",()=>X),j.methods.set("_getGridConfig",()=>U),j.methods.set("_replaceGridRenderer",(G)=>{$=G}),j.methods.set("_updateGridLayoutForGroups",(G)=>{X.update({isHeaderFn:G});
457
+ let y=j.dataManager.getTotal(),B=0;
458
+ for(let T=0;
459
+ T<y;
460
+ T++)if(X.getCol(T)===0){let V=j.heightCache.getHeight(T);
461
+ B+=V}
462
+ j.heightCache.getTotalHeight=()=>B,j.dom.content.style.height=`${B}
463
+ px`,A()}),j.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");
464
+ U.columns=G.columns}
465
+ if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");
466
+ U.gap=G.gap}
467
+ if(X)X.update(U);
468
+ let y=j.getContainerWidth();
469
+ if(W.containerWidth=y,W.columns=U.columns,W.gap=U.gap??0,$)$.updateContainerWidth(y);
470
+ j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();
471
+ for(let B=0;
472
+ B<j.contentSizeHandlers.length;
473
+ B++)j.contentSizeHandlers[B]();
474
+ if($)$.clear();
475
+ j.forceRender()});
476
+ let L=()=>{if(j.state.isDestroyed)return;
477
+ let G=j.scrollController.getScrollTop(),y=j.state.viewportState.containerHeight,B=j.getVirtualTotal(),T={start:0,end:0};
478
+ if(B===0||y===0)T.start=0,T.end=0;
479
+ else{T.start=Math.max(0,j.heightCache.indexAtOffset(G));
480
+ let v=j.heightCache.indexAtOffset(G+y);
481
+ if(v<B-1)v++;
482
+ T.end=Math.min(B-1,Math.max(0,v))}
483
+ let V=q.overscan??3,w={start:Math.max(0,T.start-V),end:Math.min(B-1,T.end+V)};
484
+ j.state.viewportState.scrollTop=G,j.state.viewportState.visibleRange=T,j.state.viewportState.renderRange=w;
485
+ let g=j.state.lastRenderRange,o=j.state.viewportState.isCompressed;
486
+ if(w.start===g.start&&w.end===g.end){if(o)$.updatePositions(j.getCompressionContext());
487
+ return}
488
+ let d=j.dataManager.getTotal(),jj=X.getItemRange(w.start,w.end,d),i=j.dataManager.getItemsInRange(jj.start,jj.end),H=o?j.getCompressionContext():void 0;
489
+ $.render(i,jj,new Set,-1,H),j.state.lastRenderRange={...w},Q.emit("range:change",{range:w})},k=()=>{if(j.state.isDestroyed)return;
490
+ j.state.lastRenderRange={start:-1,end:-1},L()};
491
+ if(j.setRenderFns(L,k),j.resizeHandlers.push((G,y)=>{if($)$.updateContainerWidth(G)}),j.methods.set("scrollToIndex",(G,y)=>{let B=Math.floor(G/J.columns),{align:T,behavior:V}=u2(y),w=j.dataManager.getState(),g=X.getTotalRows(w.total),o=Math.max(0,Math.min(B,g-1)),d=Lj(o,j.heightCache,j.state.viewportState.containerHeight,g,T,j.getCachedCompression());
492
+ if(V==="smooth")j.scrollController.scrollTo(d);
493
+ else j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());
494
+ j.destroyHandlers.push(()=>{if($)$.destroy(),$=null;
495
+ Y.root.classList.remove(`${E}--grid`)})},destroy(){if($)$.destroy(),$=null}}},QJ=300,u2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:QJ};
496
+ if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??QJ};
497
+ return{align:"start",behavior:"auto",duration:QJ}};
498
+ var $J=(J,X)=>{let $=0,j=J.length-1;
499
+ while($<j){let Y=$+j+1>>>1;
500
+ if(J[Y].headerLayoutIndex<=X)$=Y;
501
+ else j=Y-1}
502
+ return $},RJ=(J,X)=>{let $=0,j=J.length-1;
503
+ while($<j){let Y=$+j+1>>>1;
504
+ if(J[Y].firstDataIndex<=X)$=Y;
505
+ else j=Y-1}
506
+ return $},wJ=(J,X)=>{if(J===0)return[];
507
+ let $=[],j=X(0),Y=0,Q=0;
508
+ for(let q=1;
509
+ q<J;
510
+ q++){let Z=X(q);
511
+ if(Z!==j){let E=q-Y;
512
+ $.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:E}),Q=Q+1+E,j=Z,Y=q}}
513
+ return $.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:J-Y}),$},XJ=(J,X)=>{if(J.length===0||X.length===0)return[];
514
+ let $=J.length+X.length,j=Array($),Y=0;
515
+ for(let Q of X){j[Y]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},Y++;
516
+ for(let q=0;
517
+ q<Q.count;
518
+ q++)j[Y]=J[Q.firstDataIndex+q],Y++}
519
+ return j},qJ=(J,X)=>{let $=typeof X==="number"?(j)=>X:X;
520
+ return(j)=>{let Y=J.getEntry(j);
521
+ if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);
522
+ return $(Y.dataIndex)}},vJ=(J,X)=>{let $=wJ(J,X.getGroupForIndex),j=J+$.length,Y=X.headerHeight;
523
+ return{get totalEntries(){return j},get groupCount(){return $.length},get groups(){return $},getEntry:(O)=>{if($.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};
524
+ let b=$J($,O),W=$[b];
525
+ if(O===W.headerLayoutIndex)return{type:"header",group:W};
526
+ let N=O-W.headerLayoutIndex-1;
527
+ return{type:"item",dataIndex:W.firstDataIndex+N,group:W}},layoutToDataIndex:(O)=>{if($.length===0)return O;
528
+ let b=$J($,O),W=$[b];
529
+ if(O===W.headerLayoutIndex)return-1;
530
+ let N=O-W.headerLayoutIndex-1;
531
+ return W.firstDataIndex+N},dataToLayoutIndex:(O)=>{if($.length===0)return O;
532
+ let b=RJ($,O),W=$[b],N=O-W.firstDataIndex;
533
+ return W.headerLayoutIndex+1+N},getGroupAtLayoutIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};
534
+ let b=$J($,O);
535
+ return $[b]},getGroupAtDataIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};
536
+ let b=RJ($,O);
537
+ return $[b]},getHeaderHeight:typeof Y==="number"?(O)=>Y:(O)=>{let b=$[O];
538
+ if(!b)return 0;
539
+ return Y(b.key,O)},rebuild:(O)=>{$=wJ(O,X.getGroupForIndex),j=O+$.length}}};
540
+ var CJ=(J,X,$,j,Y)=>{let Q=document.createElement("div");
541
+ Q.className=`${Y}-sticky-header`,Q.setAttribute("role","presentation"),Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.top="0",Q.style.left="0",Q.style.right="0",Q.style.zIndex="5",Q.style.pointerEvents="none",Q.style.willChange="transform",Q.style.overflow="hidden",J.insertBefore(Q,J.firstChild);
542
+ let q=-1,Z=!1,E=0,_=(N)=>{if(N===q)return;
543
+ q=N;
544
+ let M=X.groups;
545
+ if(N<0||N>=M.length){Q.textContent="";
546
+ return}
547
+ let A=M[N],L=j.headerTemplate(A.key,A.groupIndex),k=X.getHeaderHeight(N);
548
+ if(Q.style.height=`${k}
549
+ px`,typeof L==="string")Q.innerHTML=L;
550
+ else Q.replaceChildren(L)},U=(N)=>{let M=X.groups;
551
+ if(M.length===0){O();
552
+ return}
553
+ let A=0;
554
+ for(let B=M.length-1;
555
+ B>=0;
556
+ B--)if($.getOffset(M[B].headerLayoutIndex)<=N){A=B;
557
+ break}
558
+ let L=$.getOffset(M[0].headerLayoutIndex);
559
+ if(N<L){O();
560
+ return}
561
+ if(!Z)F();
562
+ _(A);
563
+ let k=X.getHeaderHeight(A),G=0,y=A+1;
564
+ if(y<M.length){let T=$.getOffset(M[y].headerLayoutIndex)-N;
565
+ if(T<k)G=T-k}
566
+ if(G!==E)E=G,Q.style.transform=G===0?"":`translateY(${Math.round(G)}
567
+ px)`},F=()=>{if(Z)return;
568
+ Z=!0,Q.style.display=""},O=()=>{if(!Z)return;
569
+ Z=!1,Q.style.display="none",q=-1,E=0,Q.style.transform=""},b=()=>{let N=q;
570
+ if(q=-1,N>=0)_(N)},W=()=>{Q.remove(),q=-1,Z=!1};
571
+ return Q.style.display="none",{update:U,refresh:b,show:F,hide:O,destroy:W}};
572
+ var SJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");
573
+ if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");
574
+ if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");
575
+ let X=null,$=null,j=[],Y=[];
576
+ return{name:"withGroups",priority:10,setup(Q){let{dom:q,config:Z,rawConfig:E}=Q,{classPrefix:_}=Z;
577
+ if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");
578
+ if(Z.reverse)throw Error("[vlist/builder] withGroups cannot be used with reverse: true");
579
+ let F=E.item.height;
580
+ j=E.items?[...E.items]:[];
581
+ let O=j.length,b={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};
582
+ X=vJ(O,b),Y=XJ(j,X.groups);
583
+ let W=qJ(X,F);
584
+ Q.setHeightConfig(W),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length);
585
+ let N=E.item.template,{headerTemplate:M}=J,A=(B,T,V)=>{if(Tj(B))return M(B.groupKey,B.groupIndex);
586
+ return N(B,T,V)},L=Q.methods.get("_getGridLayout"),k=Q.methods.get("_replaceGridRenderer"),G=Q.methods.get("_updateGridLayoutForGroups");
587
+ if(L&&k){if(G)G((w)=>{let g=Y[w];
588
+ return!!(g&&Tj(g))});
589
+ let{createGridRenderer:B}=(jJ(),L2(bJ)),T=L(),V=B(q.items,A,Q.heightCache,T,_,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),Z.ariaIdPrefix);
590
+ k(V)}
591
+ else Q.replaceTemplate(A);
592
+ if(q.root.classList.add(`${_}--grouped`),J.sticky!==!1){$=CJ(q.root,X,Q.heightCache,{...b,sticky:b.sticky??!1},_);
593
+ let B=$;
594
+ Q.afterScroll.push((T,V)=>{B.update(T)}),$.update(Q.scrollController.getScrollTop())}
595
+ let y=()=>{if(!X)return;
596
+ X.rebuild(j.length),Y=XJ(j,X.groups);
597
+ let B=qJ(X,F);
598
+ if(Q.setHeightConfig(B),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length),$)$.refresh()};
599
+ Q.methods.set("setItems",(B)=>{j=[...B],y()}),Q.methods.set("appendItems",(B)=>{j=[...j,...B],y()}),Q.methods.set("prependItems",(B)=>{j=[...B,...j],y()}),Q.methods.set("removeItem",(B)=>{j=j.filter((T)=>T.id!==B),y()}),Q.methods.set("scrollToIndex",(B,T)=>{let V=X.dataToLayoutIndex(B),{align:w,behavior:g}=h2(T),o=Q.dataManager.getTotal(),d=Lj(V,Q.heightCache,Q.state.viewportState.containerHeight,o,w,Q.getCachedCompression());
600
+ if(g==="smooth")Q.scrollController.scrollTo(d);
601
+ else Q.scrollController.scrollTo(d)}),Q.methods.set("_getItems",()=>j),Q.methods.set("_getTotal",()=>j.length),Q.destroyHandlers.push(()=>{if($)$.destroy(),$=null;
602
+ q.root.classList.remove(`${_}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},KJ=300,h2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:KJ};
603
+ if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??KJ};
604
+ return{align:"start",behavior:"auto",duration:KJ}};
605
+ var fJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),YJ=(J,X,$)=>{if($==="none")return J;
606
+ let j=new Set(J.selected);
607
+ if($==="single"){if(j.clear(),X.length>0)j.add(X[0])}
608
+ else for(let Y of X)j.add(Y);
609
+ return{...J,selected:j}},ZJ=(J,X)=>{let $=new Set(J.selected);
610
+ for(let j of X)$.delete(j);
611
+ return{...J,selected:$}},Ij=(J,X,$)=>{if($==="none")return J;
612
+ if(J.selected.has(X))return ZJ(J,[X]);
613
+ else return YJ(J,[X],$)},IJ=(J,X,$)=>{if($!=="multiple")return J;
614
+ return{...J,selected:new Set(X.map((j)=>j.id))}},pJ=(J)=>({...J,selected:new Set}),uJ=(J,X)=>{return J.focusedIndex=X,J},hJ=(J,X,$=!0)=>{if(X===0)return J;
615
+ let j=J.focusedIndex-1;
616
+ if(j<0)j=$?X-1:0;
617
+ return J.focusedIndex=j,J},xJ=(J,X,$=!0)=>{if(X===0)return J;
618
+ let j=J.focusedIndex+1;
619
+ if(j>=X)j=$?0:X-1;
620
+ return J.focusedIndex=j,J},mJ=(J,X)=>{if(X===0)return J;
621
+ return J.focusedIndex=0,J},gJ=(J,X)=>{if(X===0)return J;
622
+ return J.focusedIndex=X-1,J};
623
+ var pj=(J)=>{return Array.from(J.selected)},uj=(J,X)=>{let $=[];
624
+ for(let j of J.selected){let Y=X(j);
625
+ if(Y)$.push(Y)}
626
+ return $};
627
+ var BJ=(J)=>{let X=J?.mode??"single",$=J?.initial,j=fJ($),Y=null;
628
+ return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:q,emitter:Z,config:E}=Q,{classPrefix:_,ariaIdPrefix:U}=E;
629
+ if(X==="none"){Q.methods.set("select",()=>{}),Q.methods.set("deselect",()=>{}),Q.methods.set("toggleSelect",()=>{}),Q.methods.set("selectAll",()=>{}),Q.methods.set("clearSelection",()=>{}),Q.methods.set("getSelected",()=>[]),Q.methods.set("getSelectedItems",()=>[]),Q.methods.set("setSelectionMode",()=>{});
630
+ return}
631
+ let{renderIfNeeded:F,forceRender:O}=Q.getRenderFns(),b=()=>{Q.dom.items.querySelectorAll("[data-index]").forEach((k)=>{let G=k,y=G.dataset.id;
632
+ if(y!==void 0){let B=/^\d+$/.test(y)?parseInt(y,10):y,T=j.selected.has(B),w=parseInt(G.dataset.index??"-1",10)===j.focusedIndex;
633
+ G.classList.toggle(`${_}-item--selected`,T),G.classList.toggle(`${_}-item--focused`,w),G.ariaSelected=T?"true":"false"}})},W=()=>{if(Q.state.isDestroyed)return;
634
+ F(),b()},N=()=>{if(Q.state.isDestroyed)return;
635
+ O(),b()};
636
+ Q.setRenderFns(W,N);
637
+ let M=()=>{b(),Z.emit("selection:change",{selected:pj(j),items:uj(j,(L)=>Q.dataManager.getItemById(L))})};
638
+ Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${_}-live-region`,Y.style.cssText="position:absolute;
639
+ width:1px;
640
+ height:1px;
641
+ padding:0;
642
+ margin:-1px;
643
+ overflow:hidden;
644
+ clip:rect(0,0,0,0);
645
+ white-space:nowrap;
646
+ border:0",q.root.appendChild(Y);
647
+ let A=Y;
648
+ Z.on("selection:change",({selected:L})=>{let k=L.length;
649
+ if(k===0)A.textContent="";
650
+ else if(k===1)A.textContent="1 item selected";
651
+ else A.textContent=`${k} items selected`}),Q.clickHandlers.push((L)=>{if(Q.state.isDestroyed)return;
652
+ let G=L.target.closest("[data-index]");
653
+ if(!G)return;
654
+ let y=parseInt(G.dataset.index??"-1",10);
655
+ if(y<0)return;
656
+ let B=Q.dataManager.getItem(y);
657
+ if(!B)return;
658
+ Z.emit("item:click",{item:B,index:y,event:L}),j=uJ(j,y),q.root.setAttribute("aria-activedescendant",`${U}-item-${y}`),j=Ij(j,B.id,X),M()}),Q.keydownHandlers.push((L)=>{if(Q.state.isDestroyed)return;
659
+ let k=Q.dataManager.getTotal(),G=j.focusedIndex,y=!1,B=!1,T=j;
660
+ switch(L.key){case"ArrowUp":T=hJ(j,k),y=!0,B=!0;
661
+ break;
662
+ case"ArrowDown":T=xJ(j,k),y=!0,B=!0;
663
+ break;
664
+ case"Home":T=mJ(j,k),y=!0,B=!0;
665
+ break;
666
+ case"End":T=gJ(j,k),y=!0,B=!0;
667
+ break;
668
+ case" ":case"Enter":if(j.focusedIndex>=0){let V=Q.dataManager.getItem(j.focusedIndex);
669
+ if(V)T=Ij(j,V.id,X);
670
+ y=!0}
671
+ break}
672
+ if(y){L.preventDefault(),j=T;
673
+ let V=j.focusedIndex;
674
+ if(V>=0){let w=Q.dataManager.getState(),g=Lj(V,Q.heightCache,Q.state.viewportState.containerHeight,w.total,"center",Q.getCachedCompression());
675
+ Q.scrollController.scrollTo(g),q.root.setAttribute("aria-activedescendant",`${U}-item-${V}`)}
676
+ else q.root.removeAttribute("aria-activedescendant");
677
+ if(B){let{selected:w}=j;
678
+ if(G>=0&&G!==V){let g=Q.dataManager.getItem(G);
679
+ if(g)Q.renderer.updateItemClasses(G,w.has(g.id),!1)}
680
+ if(V>=0){let g=Q.dataManager.getItem(V);
681
+ if(g)Q.renderer.updateItemClasses(V,w.has(g.id),!0)}}
682
+ else N(),Z.emit("selection:change",{selected:pj(j),items:uj(j,(w)=>Q.dataManager.getItemById(w))})}}),Q.methods.set("select",(...L)=>{j=YJ(j,L,X),M()}),Q.methods.set("deselect",(...L)=>{j=ZJ(j,L),M()}),Q.methods.set("toggleSelect",(L)=>{j=Ij(j,L,X),M()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;
683
+ let L=Q.getAllLoadedItems();
684
+ j=IJ(j,L,X),M()}),Q.methods.set("clearSelection",()=>{j=pJ(j);
685
+ let{renderRange:L,isCompressed:k}=Q.state.viewportState,G=Q.getItemsForRange(L),y=k?Q.getCompressionContext():void 0;
686
+ Q.renderer.render(G,L,j.selected,j.focusedIndex,y),Z.emit("selection:change",{selected:[],items:[]})}),Q.methods.set("getSelected",()=>{return pj(j)}),Q.methods.set("getSelectedItems",()=>{return uj(j,(L)=>Q.dataManager.getItemById(L))}),Q.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove()})},destroy(){if(Y&&Y.parentNode)Y.remove();
687
+ Y=null}}};
688
+ var Rj=(J,X,$={},j="vlist",Y=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:E=!0,hoverZoneWidth:_=16,showOnViewportEnter:U=!0}=$,F=0,O=0,b=0,W=0,N=!1,M=!1,A=0,L=0,k=0,G=null,y=!1,B=null,T=null,V=Y?"width":"height",w=Y?"translateX":"translateY",g=Y?(t)=>t.clientX:(t)=>t.clientY,o=Y?"left":"top",d=document.createElement("div"),jj=document.createElement("div"),i=E?document.createElement("div"):null,H=()=>{if(d.className=`${j}-scrollbar`,jj.className=`${j}-scrollbar-thumb`,Y)d.classList.add(`${j}-scrollbar--horizontal`);
689
+ if(d.appendChild(jj),J.appendChild(d),i){if(i.className=`${j}-scrollbar-hover`,Y)i.classList.add(`${j}-scrollbar-hover--horizontal`),i.style.height=`${_}
690
+ px`;
691
+ else i.style.width=`${_}
692
+ px`;
693
+ J.appendChild(i)}},v=()=>{if(G)clearTimeout(G),G=null},I=()=>{if(!Q)return;
694
+ v(),G=setTimeout(z,q)},p=()=>{if(F<=O)return;
695
+ if(v(),!y)d.classList.add(`${j}-scrollbar--visible`),y=!0;
696
+ if(Q&&!N&&!M)I()},z=()=>{if(N||M)return;
697
+ d.classList.remove(`${j}-scrollbar--visible`),y=!1},R=(t,Jj)=>{F=t,O=Jj;
698
+ let C=F>O;
699
+ if(d.style.display=C?"":"none",!C){z();
700
+ return}
701
+ let S=O/F;
702
+ b=Math.max(Z,S*O),jj.style[V]=`${b}
703
+ px`,W=O-b,u(k)},u=(t)=>{if(k=t,F<=O||W<=0)return;
704
+ let Jj=F-O,S=Math.min(1,Math.max(0,t/Jj))*W;
705
+ jj.style.transform=`${w}(${S}
706
+ px)`},h=(t)=>{if(t.target===jj)return;
707
+ let Jj=d.getBoundingClientRect(),s=g(t)-Jj[o]-b/2,m=Math.max(0,Math.min(s,W))/W,Qj=F-O,qj=m*Qj;
708
+ X(qj),p()},c=(t)=>{t.preventDefault(),t.stopPropagation(),N=!0,A=g(t),L=k,v(),d.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",a),document.addEventListener("mouseup",Xj)},a=(t)=>{if(!N)return;
709
+ let Jj=g(t)-A,C=W>0?Jj/W:0,S=F-O,s=C*S,e=Math.max(0,Math.min(L+s,S)),Qj=e/S*W;
710
+ if(jj.style.transform=`${w}(${Qj}
711
+ px)`,T=e,B===null)B=requestAnimationFrame(()=>{if(T!==null)X(T);
712
+ B=null})},Xj=()=>{if(N=!1,B!==null)cancelAnimationFrame(B),B=null;
713
+ if(T!==null)X(T),T=null;
714
+ if(d.classList.remove(`${j}-scrollbar--dragging`),Q&&!M)I();
715
+ document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj)},Bj=()=>{if(U)p()},x=()=>{if(!N){if(M=!1,Q)I()}},Yj=()=>{M=!0,v(),p()},n=()=>{if(M=!1,!N&&Q)I()},$j=()=>{if(v(),B!==null)cancelAnimationFrame(B),B=null;
716
+ if(d.removeEventListener("click",h),d.removeEventListener("mouseenter",Yj),d.removeEventListener("mouseleave",n),jj.removeEventListener("mousedown",c),J.removeEventListener("mouseenter",Bj),J.removeEventListener("mouseleave",x),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj),i){if(i.removeEventListener("mouseenter",Yj),i.removeEventListener("mouseleave",n),i.parentNode)i.parentNode.removeChild(i)}
717
+ if(d.parentNode)d.parentNode.removeChild(d)};
718
+ if(H(),d.addEventListener("click",h),d.addEventListener("mouseenter",Yj),d.addEventListener("mouseleave",n),jj.addEventListener("mousedown",c),J.addEventListener("mouseenter",Bj),J.addEventListener("mouseleave",x),i)i.addEventListener("mouseenter",Yj),i.addEventListener("mouseleave",n);
719
+ return{show:p,hide:z,updateBounds:R,updatePosition:u,isVisible:()=>y,destroy:$j}};
720
+ var dJ=(J)=>{let X=null;
721
+ return{name:"withScrollbar",priority:30,setup($){let{dom:j,config:Y}=$,{classPrefix:Q,horizontal:q}=Y;
722
+ if(X=Rj(j.viewport,(_)=>$.scrollController.scrollTo(_),J??{},Q,q),!j.viewport.classList.contains(`${Q}-viewport--custom-scrollbar`))j.viewport.classList.add(`${Q}-viewport--custom-scrollbar`);
723
+ let Z=$.getCachedCompression();
724
+ X.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);
725
+ let E=X;
726
+ $.afterScroll.push((_,U)=>{E.updatePosition(_),E.show()}),$.resizeHandlers.push((_,U)=>{if(E){let F=$.getCachedCompression();
727
+ E.updateBounds(F.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(E){let _=$.getCachedCompression();
728
+ E.updateBounds(_.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(E)E.destroy()})},destroy(){if(X)X.destroy(),X=null}}};
729
+ tj();
730
+ var cJ=()=>{let J=null,X=0,$=!1;
731
+ return{name:"withCompression",priority:20,setup(j){let{dom:Y,config:Q}=j,{classPrefix:q,horizontal:Z}=Q,E=()=>{let U=j.getVirtualTotal(),F=Fj(U,j.heightCache);
732
+ if(F.isCompressed&&!$){$=!0,j.scrollController.enableCompression(F),j.updateContentSize(F.virtualHeight),j.setScrollFns(()=>X,(N)=>{X=N});
733
+ let O=Y.viewport,b=(N)=>{N.preventDefault();
734
+ let M=F.virtualHeight-j.state.viewportState.containerHeight;
735
+ X=Math.max(0,Math.min(X+N.deltaY,M)),j.scrollController.scrollTo(X)};
736
+ if(O.addEventListener("wheel",b,{passive:!1}),j.destroyHandlers.push(()=>{O.removeEventListener("wheel",b)}),!Y.viewport.querySelector(`.${q}-scrollbar-track`)){if(J=Rj(Y.viewport,(M)=>j.scrollController.scrollTo(M),{},q,Z),!Y.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))Y.viewport.classList.add(`${q}-viewport--custom-scrollbar`);
737
+ J.updateBounds(F.virtualHeight,j.state.viewportState.containerHeight);
738
+ let N=J;
739
+ j.afterScroll.push((M,A)=>{if(N)N.updatePosition(M),N.show()}),j.resizeHandlers.push((M,A)=>{if(N){let L=j.getCachedCompression();
740
+ N.updateBounds(L.virtualHeight,j.state.viewportState.containerHeight)}})}}
741
+ else if(!F.isCompressed&&$)$=!1,j.scrollController.disableCompression(),j.updateContentSize(F.actualHeight);
742
+ else if(F.isCompressed)j.scrollController.updateConfig({compression:F}),j.updateContentSize(F.virtualHeight);
743
+ if(J)J.updateBounds(F.virtualHeight,j.state.viewportState.containerHeight);
744
+ j.state.cachedCompression={state:F,totalItems:U}};
745
+ j.updateCompressionMode=E;
746
+ let _=j.getCachedCompression.bind(j);
747
+ j.getCachedCompression=()=>{if(j.state.cachedCompression)return j.state.cachedCompression.state;
748
+ return _()},j.setVisibleRangeFn((U,F,O,b,W)=>{let N=Fj(b,O);
749
+ zJ(U,F,O,b,N,W)}),j.setScrollToPosFn((U,F,O,b,W)=>{let N=Fj(b,F);
750
+ return PJ(U,F,O,b,N,W)}),j.setPositionElementFn((U,F)=>{let O=j.getVirtualTotal(),b=Fj(O,j.heightCache);
751
+ if(b.isCompressed){let W=Math.round(fj(F,j.scrollController.getScrollTop(),j.heightCache,O,j.state.viewportState.containerHeight,b)),N=j.config.horizontal;
752
+ U.style.transform=N?`translateX(${W}
753
+ px)`:`translateY(${W}
754
+ px)`}
755
+ else{let W=Math.round(j.heightCache.getOffset(F)),N=j.config.horizontal;
756
+ U.style.transform=N?`translateX(${W}
757
+ px)`:`translateY(${W}
758
+ px)`}}),E(),j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null})},destroy(){if(J)J.destroy(),J=null}}};
759
+ var lJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(J){J.methods.set("getScrollSnapshot",()=>{let X=J.scrollController.getScrollTop(),$=J.getCachedCompression(),j=J.getVirtualTotal(),Y=J.methods.get("getSelected"),Q=Y&&Y().length>0?Y():void 0;
760
+ if(j===0){let _={index:0,offsetInItem:0};
761
+ if(Q)_.selectedIds=Q;
762
+ return _}
763
+ let q,Z;
764
+ if($.isCompressed){let U=X/$.virtualHeight*j;
765
+ q=Math.max(0,Math.min(Math.floor(U),j-1)),Z=(U-q)*J.heightCache.getHeight(q)}
766
+ else q=J.heightCache.indexAtOffset(X),Z=X-J.heightCache.getOffset(q);
767
+ Z=Math.max(0,Z);
768
+ let E={index:q,offsetInItem:Z};
769
+ if(Q)E.selectedIds=Q;
770
+ return E}),J.methods.set("restoreScroll",(X)=>{let{index:$,offsetInItem:j,selectedIds:Y}=X,Q=J.getCachedCompression(),q=J.getVirtualTotal();
771
+ if(q===0)return;
772
+ let Z=Math.max(0,Math.min($,q-1)),E;
773
+ if(Q.isCompressed){let U=J.heightCache.getHeight(Z),F=U>0?j/U:0;
774
+ E=(Z+F)/q*Q.virtualHeight}
775
+ else E=J.heightCache.getOffset(Z)+j;
776
+ let _=Math.max(0,Q.virtualHeight-J.state.viewportState.containerHeight);
777
+ if(E=Math.max(0,Math.min(E,_)),J.scrollController.scrollTo(E),Y&&Y.length>0){let U=J.methods.get("select");
778
+ if(U)U(...Y)}})}}};
779
+ var sJ=(J={})=>{let{chunkSize:X=100,maxCachedItems:$=5000,evictionBuffer:j=200,onEvict:Y}=J,Q=new Map,q=0,Z=0,E=(H)=>{let v=Q.get(H);
780
+ if(!v)v={items:Array(X),count:0,lastAccess:Date.now()},Q.set(H,v);
781
+ else v.lastAccess=Date.now();
782
+ return v},_=(H)=>{return Math.floor(H/X)},U=(H)=>{return H%X},F=()=>q,O=(H)=>{q=H},b=(H)=>{if(H<0||H>=q)return;
783
+ let v=_(H),I=Q.get(v);
784
+ if(!I)return;
785
+ return I.items[U(H)]},W=(H)=>{if(H<0||H>=q)return!1;
786
+ let v=_(H),I=Q.get(v);
787
+ if(!I)return!1;
788
+ return I.items[U(H)]!==void 0},N=(H,v)=>{let I=_(H),p=E(I),z=U(H),R=p.items[z]===void 0;
789
+ if(p.items[z]=v,R)p.count++,Z++;
790
+ if(H>=q)q=H+1},M=(H,v)=>{for(let I=0;
791
+ I<v.length;
792
+ I++){let p=v[I];
793
+ if(p!==void 0)N(H+I,p)}},A=(H)=>{if(H<0||H>=q)return!1;
794
+ let v=_(H),I=Q.get(v);
795
+ if(!I)return!1;
796
+ let p=U(H);
797
+ if(I.items[p]===void 0)return!1;
798
+ if(I.items[p]=void 0,I.count--,Z--,I.count===0)Q.delete(v);
799
+ return!0},L=(H,v)=>{let I=[];
800
+ for(let p=H;
801
+ p<=v&&p<q;
802
+ p++)I.push(b(p));
803
+ return I},k=(H,v)=>{for(let I=H;
804
+ I<=v&&I<q;
805
+ I++)if(!W(I))return!1;
806
+ return!0},G=()=>{let H=[],v=null,I=Array.from(Q.keys()).sort((p,z)=>p-z);
807
+ for(let p of I){let z=Q.get(p);
808
+ if(!z)continue;
809
+ let R=p*X;
810
+ for(let u=0;
811
+ u<X;
812
+ u++){let h=R+u;
813
+ if(h>=q)break;
814
+ if(z.items[u]!==void 0)if(v===null)v={start:h,end:h};
815
+ else if(h===v.end+1)v.end=h;
816
+ else H.push(v),v={start:h,end:h};
817
+ else if(v!==null)H.push(v),v=null}}
818
+ if(v!==null)H.push(v);
819
+ return H},y=(H,v)=>{let I=[],p=null;
820
+ for(let z=H;
821
+ z<=v&&z<q;
822
+ z++)if(!W(z))if(p===null)p={start:z,end:z};
823
+ else p.end=z;
824
+ else if(p!==null)I.push(p),p=null;
825
+ if(p!==null)I.push(p);
826
+ return I},B=(H)=>{return Q.has(H)},T=(H)=>{let v=Q.get(H);
827
+ if(v)v.lastAccess=Date.now()},V=(H,v)=>{if(H>v||Q.size===0)return;
828
+ let I=Date.now(),p=_(Math.max(0,H)),z=_(Math.min(q-1,v));
829
+ for(let R=p;
830
+ R<=z;
831
+ R++){let u=Q.get(R);
832
+ if(u)u.lastAccess=I}},w=(H,v)=>{if(Z<=$)return 0;
833
+ let I=Math.max(0,H-j),p=Math.min(q-1,v+j),z=_(I),R=_(p),u=0,h=[];
834
+ for(let[c,a]of Q)if(c<z||c>R)u+=a.count,h.push(c),Z-=a.count,Q.delete(c);
835
+ if(u>0&&Y)Y(u,h);
836
+ return u},g=()=>{if(Z<=$)return 0;
837
+ let H=Array.from(Q.entries()).sort(([,p],[,z])=>p.lastAccess-z.lastAccess),v=0,I=[];
838
+ for(let[p,z]of H){if(Z<=$)break;
839
+ v+=z.count,Z-=z.count,I.push(p),Q.delete(p)}
840
+ if(v>0&&Y)Y(v,I);
841
+ return v},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:Q.size,chunkSize:X,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},d=()=>Z,jj=()=>{Q.clear(),Z=0};
842
+ return{chunkSize:X,maxCachedItems:$,getTotal:F,setTotal:O,get:b,has:W,set:N,setRange:M,delete:A,getRange:L,isRangeLoaded:k,getLoadedRanges:G,findUnloadedRanges:y,getChunkIndex:_,isChunkLoaded:B,touchChunk:T,touchChunksForRange:V,evictDistant:w,evictToLimit:g,getStats:o,getCachedCount:d,clear:jj,reset:()=>{jj(),q=0}}},x2=(J)=>{if(J.length===0)return[];
843
+ let X=[...J].sort((j,Y)=>j.start-Y.start),$=[{...X[0]}];
844
+ for(let j=1;
845
+ j<X.length;
846
+ j++){let Y=X[j],Q=$[$.length-1];
847
+ if(Y.start<=Q.end+1)Q.end=Math.max(Q.end,Y.end);
848
+ else $.push({...Y})}
849
+ return $},rJ=(J,X,$)=>{let j=Math.floor(J.start/$)*$,Y=Math.ceil((J.end+1)/$)*$-1,Q={start:j,end:Y};
850
+ if(X.length===0)return[Q];
851
+ let q=[],Z=x2(X),E=Q.start;
852
+ for(let _ of Z){if(_.end<E)continue;
853
+ if(_.start>Q.end)break;
854
+ if(_.start>E)q.push({start:E,end:Math.min(_.start-1,Q.end)});
855
+ if(E=_.end+1,E>Q.end)break}
856
+ if(E<=Q.end)q.push({start:E,end:Q.end});
857
+ return q};
858
+ var aJ=(J={})=>{let{enabled:X=!0,maskCharacter:$="█",randomVariance:j=!0,maxSampleSize:Y=20,customGenerator:Q}=J,q=null,Z=!1,E=0,_=(A)=>{if(!X||Z||A.length===0)return;
859
+ let L=new Map,k=new Map,G=Math.min(A.length,Y);
860
+ for(let y=0;
861
+ y<G;
862
+ y++){let B=A[y];
863
+ if(!B||typeof B!=="object")continue;
864
+ for(let[T,V]of Object.entries(B)){if(T.startsWith("_")||T==="id")continue;
865
+ if(!k.has(T))k.set(T,{lengths:[],types:new Set});
866
+ let w=k.get(T),g=Array.isArray(V)?"array":typeof V;
867
+ if(w.types.add(g),typeof V==="string")w.lengths.push(V.length);
868
+ else if(V!==null&&V!==void 0)w.lengths.push(String(V).length)}}
869
+ for(let[y,B]of k){if(B.lengths.length===0)continue;
870
+ let T=Math.min(...B.lengths),V=Math.max(...B.lengths),w=Math.round(B.lengths.reduce((o,d)=>o+d,0)/B.lengths.length),g="string";
871
+ if(B.types.has("number")&&B.types.size===1)g="number";
872
+ else if(B.types.has("boolean")&&B.types.size===1)g="boolean";
873
+ else if(B.types.has("array"))g="array";
874
+ else if(B.types.has("object")&&!B.types.has("string"))g="object";
875
+ L.set(y,{minLength:T,maxLength:V,avgLength:w,type:g})}
876
+ q=L,Z=!0},U=()=>Z,F=(A)=>{let L=A.avgLength;
877
+ if(j&&A.minLength!==A.maxLength){if(L=Math.floor(Math.random()*(A.maxLength-A.minLength+1)+A.minLength),Math.random()<0.3)L=Math.max(1,L+Math.floor(Math.random()*3)-1)}
878
+ return $.repeat(Math.max(1,L))},O=(A)=>{if(Q)return{...Q(A),["_isPlaceholder"]:!0};
879
+ let L={id:`__placeholder_${E++}`,["_isPlaceholder"]:!0,_index:A};
880
+ if(!q||q.size===0)return L.label=$.repeat(12),L;
881
+ for(let[k,G]of q)switch(G.type){case"string":L[k]=F(G);
882
+ break;
883
+ case"number":L[k]=0;
884
+ break;
885
+ case"boolean":L[k]=!1;
886
+ break;
887
+ case"array":L[k]=[];
888
+ break;
889
+ case"object":L[k]={};
890
+ break;
891
+ default:L[k]=F(G)}
892
+ return L};
893
+ return{analyzeStructure:_,hasAnalyzedStructure:U,generate:O,generateRange:(A,L)=>{let k=[];
894
+ for(let G=A;
895
+ G<=L;
896
+ G++)k.push(O(G));
897
+ return k},isPlaceholder:(A)=>{if(!A||typeof A!=="object")return!1;
898
+ return A._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,E=0}}},hj=(J)=>{if(!J||typeof J!=="object")return!1;
899
+ return J._isPlaceholder===!0};
900
+ var m2=50,oJ=(J={})=>{let{adapter:X,initialItems:$,initialTotal:j,storage:Y,placeholder:Q,pageSize:q=m2,onStateChange:Z,onItemsLoaded:E,onItemsEvicted:_}=J,U=sJ({...Y,onEvict:(C,S)=>{_?.(C),G()}}),F=null,O=()=>{if(!F)F=aJ(Q);
901
+ return F},b=new Map,W=!1,N,M=!0,A,L=[],k=new Map,G=()=>{Z?.(jj())},y=()=>{b.clear();
902
+ let C=U.getLoadedRanges();
903
+ for(let S of C)for(let s=S.start;
904
+ s<=S.end;
905
+ s++){let e=U.get(s);
906
+ if(e&&!hj(e))b.set(e.id,s)}},B=(C,S)=>{if(!hj(S))b.set(S.id,C)},T=(C)=>{b.delete(C)},V=(C,S)=>{return`${C}-${S}`},w=()=>U.getTotal(),g=()=>U.getCachedCount(),o=()=>W,d=()=>M,jj=()=>({total:U.getTotal(),cached:U.getCachedCount(),isLoading:W,pendingRanges:L,error:N,hasMore:M,cursor:A}),i=()=>U,H=()=>O(),v=(C)=>{let S=U.get(C);
907
+ if(S!==void 0)return S;
908
+ if(C>=0&&C<U.getTotal())return O().generate(C);
909
+ return},I=(C)=>{let S=b.get(C);
910
+ if(S===void 0)return;
911
+ return U.get(S)},p=(C)=>{return b.get(C)??-1},z=(C)=>{let S=U.get(C);
912
+ return S!==void 0&&!hj(S)},R=(C,S)=>{let s=[],e=U.getTotal(),m=0,Qj=0;
913
+ U.touchChunksForRange(C,Math.min(S,e-1));
914
+ for(let qj=C;
915
+ qj<=S&&qj<e;
916
+ qj++){let Mj=U.get(qj);
917
+ if(Mj!==void 0)s.push(Mj),m++;
918
+ else s.push(O().generate(qj)),Qj++}
919
+ return s},u=(C)=>{U.setTotal(C),M=U.getCachedCount()<C,G()},h=(C,S=0,s)=>{if(F&&!F.hasAnalyzedStructure()&&C.length>0)F.analyzeStructure(C);
920
+ for(let e=0;
921
+ e<C.length;
922
+ e++){let m=C[e];
923
+ if(m!==void 0){let Qj=S+e;
924
+ U.set(Qj,m),B(Qj,m)}}
925
+ if(s!==void 0)U.setTotal(s);
926
+ else if(S+C.length>U.getTotal())U.setTotal(S+C.length);
927
+ M=U.getCachedCount()<U.getTotal(),E?.(C,S,U.getTotal()),G()},c=(C,S)=>{let s=b.get(C);
928
+ if(s===void 0)return!1;
929
+ let e=U.get(s);
930
+ if(!e)return!1;
931
+ let m={...e,...S};
932
+ if(U.set(s,m),S.id!==void 0&&S.id!==C)T(C),B(s,m);
933
+ return G(),!0},a=(C)=>{let S=b.get(C);
934
+ if(S===void 0)return!1;
935
+ U.delete(S),T(C);
936
+ let s=U.getTotal();
937
+ if(s>0)U.setTotal(s-1);
938
+ return G(),!0},Xj=async(C,S)=>{if(!X)return;
939
+ let s=V(C,S);
940
+ if(k.has(s))return;
941
+ let e=U.getLoadedRanges(),m=rJ({start:C,end:S},e,U.chunkSize);
942
+ if(m.length===0)return;
943
+ let Qj=U.chunkSize,qj=[];
944
+ for(let Uj of m){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);
945
+ for(let Zj=Kj;
946
+ Zj<=_j;
947
+ Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,Pj=V(Gj,Wj);
948
+ if(!qj.some((Ej)=>Ej.start===Gj)&&!k.has(Pj))qj.push({start:Gj,end:Wj})}}
949
+ let Mj=[];
950
+ for(let Uj of m){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);
951
+ for(let Zj=Kj;
952
+ Zj<=_j;
953
+ Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,Pj=V(Gj,Wj);
954
+ if(k.has(Pj)){let Ej=k.get(Pj);
955
+ if(!Mj.includes(Ej))Mj.push(Ej)}}}
956
+ for(let Uj of qj){let Kj=V(Uj.start,Uj.end),_j=(async()=>{L.push(Uj),W=!0,N=void 0,G();
957
+ try{let Zj=Uj.end-Uj.start+1,Gj={offset:Uj.start,limit:Zj,cursor:void 0},Wj=await X.read(Gj);
958
+ if(h(Wj.items,Uj.start,Wj.total),Wj.cursor)A=Wj.cursor;
959
+ if(Wj.hasMore!==void 0)M=Wj.hasMore;
960
+ else if(Wj.total!==void 0)M=U.getCachedCount()<Wj.total}
961
+ catch(Zj){N=Zj instanceof Error?Zj:Error(String(Zj))}
962
+ finally{k.delete(Kj),L=L.filter((Zj)=>Zj.start!==Uj.start||Zj.end!==Uj.end),W=k.size>0,G()}})();
963
+ k.set(Kj,_j),Mj.push(_j)}
964
+ await Promise.all(Mj)},Bj=async(C,S)=>{if(U.isRangeLoaded(C,S))return;
965
+ await Xj(C,S)},x=async()=>{if(!X)return;
966
+ await Xj(0,q-1)},Yj=async()=>{if(!X||W||!M)return!1;
967
+ let C=U.getCachedCount(),S=U.getTotal(),s=C,e=Math.min(s+q-1,S>0?S-1:s+q-1);
968
+ if(s>=S&&S>0)return M=!1,!1;
969
+ return await Xj(s,e),U.getCachedCount()>C},n=async()=>{if(U.clear(),b.clear(),F)F.clear();
970
+ A=void 0,M=!0,N=void 0,G(),await x()},$j=(C,S)=>{if(U.evictDistant(C,S)>0)y()},t=()=>{U.clear(),b.clear(),A=void 0,N=void 0,L=[],W=!1,G()},Jj=()=>{if(U.reset(),b.clear(),F)F.clear();
971
+ A=void 0,M=!0,N=void 0,L=[],W=!1,G()};
972
+ if($&&$.length>0)h($,0,j??$.length);
973
+ else if(j!==void 0)U.setTotal(j);
974
+ return{getState:jj,getTotal:w,getCached:g,getIsLoading:o,getHasMore:d,getStorage:i,getPlaceholders:H,getItem:v,getItemById:I,getIndexById:p,isItemLoaded:z,getItemsInRange:R,setTotal:u,setItems:h,updateItem:c,removeItem:a,loadRange:Xj,ensureRange:Bj,loadInitial:x,loadMore:Yj,reload:n,evictDistant:$j,clear:t,reset:Jj}};
975
+ var nJ=(J)=>{let{adapter:X,loading:$}=J,j=$?.cancelThreshold??EJ,Y=$?.preloadThreshold??FJ,Q=$?.preloadAhead??LJ;
976
+ return{name:"withData",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,E=q.config.reverse,_=q.config.overscan,U=oJ({adapter:X,pageSize:Hj,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=JJ(q.state.viewportState,q.heightCache,q.getVirtualTotal(),_,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(A,L,k)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:A,total:k})}});
977
+ q.replaceDataManager(U);
978
+ let F=null,O=null,b=0,W=()=>{if(O){let A=O;
979
+ O=null,q.dataManager.ensureRange(A.start,A.end).catch((L)=>{Z.emit("error",{error:L,context:"ensureRange"})})}};
980
+ q.afterScroll.push((A,L)=>{if(q.state.isDestroyed)return;
981
+ let k=q.scrollController.getVelocity(),y=q.scrollController.isTracking()&&k<=j;
982
+ if(O&&b>j&&k<=j){let V=O;
983
+ O=null,q.dataManager.ensureRange(V.start,V.end).catch((w)=>{Z.emit("error",{error:w,context:"ensureRange"})})}
984
+ if(b=k,y&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(E){if(A<aj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Hj}),q.dataManager.loadMore().catch((V)=>{Z.emit("error",{error:V,context:"loadMore"})})}
985
+ else if(q.state.viewportState.totalHeight-A-q.state.viewportState.containerHeight<aj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Hj}),q.dataManager.loadMore().catch((w)=>{Z.emit("error",{error:w,context:"loadMore"})})}
986
+ let{renderRange:B}=q.state.viewportState;
987
+ if(!F||B.start!==F.start||B.end!==F.end)if(F={start:B.start,end:B.end},y){O=null;
988
+ let{start:V,end:w}=B,g=q.getVirtualTotal();
989
+ if(k>Y)if(L==="down")w=Math.min(B.end+Q,g-1);
990
+ else V=Math.max(B.start-Q,0);
991
+ q.dataManager.ensureRange(V,w).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}
992
+ else O={start:B.start,end:B.end}});
993
+ let N=200,M=null;
994
+ q.afterScroll.push((A,L)=>{if(M!==null)clearTimeout(M);
995
+ M=setTimeout(()=>{M=null,W()},N)}),q.destroyHandlers.push(()=>{if(M!==null)clearTimeout(M),M=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:Hj}),q.dataManager.loadInitial().catch((A)=>{Z.emit("error",{error:A,context:"loadInitial"})})}}};
996
+ var iJ=()=>{let J=null;
997
+ return{name:"withWindow",priority:5,setup(X){let{dom:$,state:j,config:Y,emitter:Q}=X;
998
+ $.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let _=$.viewport.getBoundingClientRect();
999
+ if(Y.horizontal)return Math.max(0,-_.left);
1000
+ else return Math.max(0,-_.top)},(_)=>{let U=$.viewport.getBoundingClientRect();
1001
+ if(Y.horizontal){let F=U.left+window.scrollX;
1002
+ window.scrollTo(F+_,window.scrollY)}
1003
+ else{let F=U.top+window.scrollY;
1004
+ window.scrollTo(window.scrollX,F+_)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerHeight=window.innerHeight;
1005
+ let{innerHeight:q,innerWidth:Z}=window,E=()=>{let{innerWidth:_,innerHeight:U}=window,F=Y.horizontal?_:U,O=Y.horizontal?Z:q;
1006
+ if(Math.abs(F-O)<=1)return;
1007
+ q=U,Z=_,j.viewportState.containerHeight=U,Q.emit("resize",{width:_,height:U});
1008
+ for(let b=0;
1009
+ b<X.resizeHandlers.length;
1010
+ b++)X.resizeHandlers[b](_,U);
1011
+ X.renderIfNeeded()};
1012
+ window.addEventListener("resize",E,{passive:!0}),J=()=>{window.removeEventListener("resize",E)},X.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};
1013
+ var tJ=(J)=>{let X=rj(J);
1014
+ if(J.scroll?.element===window)X=X.use(iJ());
1015
+ if(J.adapter)X=X.use(nJ({adapter:J.adapter,...J.loading&&{loading:J.loading}}));
1016
+ if(J.layout==="grid"){if(!J.grid)throw Error("[vlist/builder] grid configuration is required when layout is 'grid'");
1017
+ if(!J.grid.columns||J.grid.columns<1)throw Error("[vlist/builder] grid.columns must be a positive integer >= 1");
1018
+ let Q={columns:J.grid.columns};
1019
+ if(J.grid.gap!==void 0)Q.gap=J.grid.gap;
1020
+ X=X.use(TJ(Q))}
1021
+ if(J.groups){if(J.direction==="horizontal")throw Error("[vlist/builder] horizontal direction cannot be combined with groups");
1022
+ let Q={getGroupForIndex:J.groups.getGroupForIndex,headerHeight:typeof J.groups.headerHeight==="function"?J.groups.headerHeight("",0):J.groups.headerHeight,headerTemplate:J.groups.headerTemplate};
1023
+ if(J.groups.sticky!==void 0)Q.sticky=J.groups.sticky;
1024
+ X=X.use(SJ(Q))}
1025
+ let $=J.selection?.mode||"none";
1026
+ if($!=="none"){let Q={mode:$};
1027
+ if(J.selection?.initial!==void 0)Q.initial=J.selection.initial;
1028
+ X=X.use(BJ(Q))}
1029
+ else X=X.use(BJ({mode:"none"}));
1030
+ X=X.use(cJ());
1031
+ let j=J.scroll?.scrollbar||J.scrollbar;
1032
+ if(j!=="none"){let Q=typeof j==="object"?j:{};
1033
+ X=X.use(dJ(Q))}
1034
+ X=X.use(lJ());
1035
+ let Y=X.build();
1036
+ return Y.update=(Q)=>{if(Q.grid&&Y.updateGrid)Y.updateGrid(Q.grid);
1037
+ if(Q.selectionMode!==void 0&&Y.setSelectionMode)Y.setSelectionMode(Q.selectionMode);
1038
+ if(Q.itemHeight!==void 0)console.warn("[vlist] Updating itemHeight via update() is not yet supported with the builder pattern. Please recreate the instance or use the full API from 'vlist/full'.");
1039
+ if(Q.overscan!==void 0)console.warn("[vlist] Updating overscan via update() is not yet supported with the builder pattern.")},Y};
1040
+ function B6(J,X){let $=tJ({...X.config,container:J});
1041
+ if(X.onInstance)X.onInstance($);
1042
+ return{update(j){if(j.config.items)$.setItems(j.config.items);
1043
+ if(j.onInstance)j.onInstance($)},destroy(){$.destroy()}}}
1044
+ function U6(J,X,$){return J.on(X,$)}
1045
+ export{B6 as vlist,U6 as onVListEvent};