@floor/vlist 0.7.4 → 0.7.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 @@
1
- var $j=(U={})=>{let{chunkSize:G=100,maxCachedItems:Y=5000,evictionBuffer:N=200,onEvict:M}=U,Q=new Map,j=0,D=0,f=(q)=>{let X=Q.get(q);if(!X)X={items:Array(G),count:0,lastAccess:Date.now()},Q.set(q,X);else X.lastAccess=Date.now();return X},z=(q)=>{return Math.floor(q/G)},W=(q)=>{return q%G},y=()=>j,L=(q)=>{j=q},b=(q)=>{if(q<0||q>=j)return;let X=z(q),B=Q.get(X);if(!B)return;return B.items[W(q)]},C=(q)=>{if(q<0||q>=j)return!1;let X=z(q),B=Q.get(X);if(!B)return!1;return B.items[W(q)]!==void 0},u=(q,X)=>{let B=z(q),K=f(B),_=W(q),l=K.items[_]===void 0;if(K.items[_]=X,l)K.count++,D++;if(q>=j)j=q+1},H=(q,X)=>{for(let B=0;B<X.length;B++){let K=X[B];if(K!==void 0)u(q+B,K)}},Z=(q)=>{if(q<0||q>=j)return!1;let X=z(q),B=Q.get(X);if(!B)return!1;let K=W(q);if(B.items[K]===void 0)return!1;if(B.items[K]=void 0,B.count--,D--,B.count===0)Q.delete(X);return!0},F=(q,X)=>{let B=[];for(let K=q;K<=X&&K<j;K++)B.push(b(K));return B},V=(q,X)=>{for(let B=q;B<=X&&B<j;B++)if(!C(B))return!1;return!0},O=()=>{let q=[],X=null,B=Array.from(Q.keys()).sort((K,_)=>K-_);for(let K of B){let _=Q.get(K);if(!_)continue;let l=K*G;for(let R=0;R<G;R++){let p=l+R;if(p>=j)break;if(_.items[R]!==void 0)if(X===null)X={start:p,end:p};else if(p===X.end+1)X.end=p;else q.push(X),X={start:p,end:p};else if(X!==null)q.push(X),X=null}}if(X!==null)q.push(X);return q},h=(q,X)=>{let B=[],K=null;for(let _=q;_<=X&&_<j;_++)if(!C(_))if(K===null)K={start:_,end:_};else K.end=_;else if(K!==null)B.push(K),K=null;if(K!==null)B.push(K);return B},w=(q)=>{return Q.has(q)},k=(q)=>{let X=Q.get(q);if(X)X.lastAccess=Date.now()},A=(q,X)=>{if(q>X||Q.size===0)return;let B=Date.now(),K=z(Math.max(0,q)),_=z(Math.min(j-1,X));for(let l=K;l<=_;l++){let R=Q.get(l);if(R)R.lastAccess=B}},T=(q,X)=>{if(D<=Y)return 0;let B=Math.max(0,q-N),K=Math.min(j-1,X+N),_=z(B),l=z(K),R=0,p=[];for(let[i,qj]of Q)if(i<_||i>l)R+=qj.count,p.push(i),D-=qj.count,Q.delete(i);if(R>0&&M)M(R,p);return R},I=()=>{if(D<=Y)return 0;let q=Array.from(Q.entries()).sort(([,K],[,_])=>K.lastAccess-_.lastAccess),X=0,B=[];for(let[K,_]of q){if(D<=Y)break;X+=_.count,D-=_.count,B.push(K),Q.delete(K)}if(X>0&&M)M(X,B);return X},r=()=>{return{totalItems:j,cachedItems:D,cachedChunks:Q.size,chunkSize:G,maxCachedItems:Y,memoryEfficiency:j>0?1-D/j:1}},t=()=>D,e=()=>{Q.clear(),D=0};return{chunkSize:G,maxCachedItems:Y,getTotal:y,setTotal:L,get:b,has:C,set:u,setRange:H,delete:Z,getRange:F,isRangeLoaded:V,getLoadedRanges:O,findUnloadedRanges:h,getChunkIndex:z,isChunkLoaded:w,touchChunk:k,touchChunksForRange:A,evictDistant:T,evictToLimit:I,getStats:r,getCachedCount:t,clear:e,reset:()=>{e(),j=0}}},Uj=(U)=>{if(U.length===0)return[];let G=[...U].sort((N,M)=>N.start-M.start),Y=[{...G[0]}];for(let N=1;N<G.length;N++){let M=G[N],Q=Y[Y.length-1];if(M.start<=Q.end+1)Q.end=Math.max(Q.end,M.end);else Y.push({...M})}return Y},Xj=(U,G,Y)=>{let N=Math.floor(U.start/Y)*Y,M=Math.ceil((U.end+1)/Y)*Y-1,Q={start:N,end:M};if(G.length===0)return[Q];let j=[],D=Uj(G),f=Q.start;for(let z of D){if(z.end<f)continue;if(z.start>Q.end)break;if(z.start>f)j.push({start:f,end:Math.min(z.start-1,Q.end)});if(f=z.end+1,f>Q.end)break}if(f<=Q.end)j.push({start:f,end:Q.end});return j};var Yj=(U={})=>{let{enabled:G=!0,maskCharacter:Y="█",randomVariance:N=!0,maxSampleSize:M=20,customGenerator:Q}=U,j=null,D=!1,f=0,z=(Z)=>{if(!G||D||Z.length===0)return;let F=new Map,V=new Map,O=Math.min(Z.length,M);for(let h=0;h<O;h++){let w=Z[h];if(!w||typeof w!=="object")continue;for(let[k,A]of Object.entries(w)){if(k.startsWith("_")||k==="id")continue;if(!V.has(k))V.set(k,{lengths:[],types:new Set});let T=V.get(k),I=Array.isArray(A)?"array":typeof A;if(T.types.add(I),typeof A==="string")T.lengths.push(A.length);else if(A!==null&&A!==void 0)T.lengths.push(String(A).length)}}for(let[h,w]of V){if(w.lengths.length===0)continue;let k=Math.min(...w.lengths),A=Math.max(...w.lengths),T=Math.round(w.lengths.reduce((r,t)=>r+t,0)/w.lengths.length),I="string";if(w.types.has("number")&&w.types.size===1)I="number";else if(w.types.has("boolean")&&w.types.size===1)I="boolean";else if(w.types.has("array"))I="array";else if(w.types.has("object")&&!w.types.has("string"))I="object";F.set(h,{minLength:k,maxLength:A,avgLength:T,type:I})}j=F,D=!0},W=()=>D,y=(Z)=>{let F=Z.avgLength;if(N&&Z.minLength!==Z.maxLength){if(F=Math.floor(Math.random()*(Z.maxLength-Z.minLength+1)+Z.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return Y.repeat(Math.max(1,F))},L=(Z)=>{if(Q)return{...Q(Z),["_isPlaceholder"]:!0};let F={id:`__placeholder_${f++}`,["_isPlaceholder"]:!0,_index:Z};if(!j||j.size===0)return F.label=Y.repeat(12),F;for(let[V,O]of j)switch(O.type){case"string":F[V]=y(O);break;case"number":F[V]=0;break;case"boolean":F[V]=!1;break;case"array":F[V]=[];break;case"object":F[V]={};break;default:F[V]=y(O)}return F};return{analyzeStructure:z,hasAnalyzedStructure:W,generate:L,generateRange:(Z,F)=>{let V=[];for(let O=Z;O<=F;O++)V.push(L(O));return V},isPlaceholder:(Z)=>{if(!Z||typeof Z!=="object")return!1;return Z._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{j=null,D=!1,f=0}}},d=(U)=>{if(!U||typeof U!=="object")return!1;return U._isPlaceholder===!0},Nj=(U)=>{return U.filter((G)=>!d(G))},Fj=(U)=>{let G=0;for(let Y of U)if(Y!==void 0&&!d(Y))G++;return G},Ej=(U,G,Y)=>{let N=0;for(let M=0;M<G.length;M++){let Q=Y+M,j=U[Q];if(j===void 0||d(j)){if(U[Q]=G[M],d(j))N++}}return N};var Lj=50,Bj=(U={})=>{let{adapter:G,initialItems:Y,initialTotal:N,storage:M,placeholder:Q,pageSize:j=Lj,onStateChange:D,onItemsLoaded:f,onItemsEvicted:z}=U,W=$j({...M,onEvict:(J,$)=>{z?.(J),O()}}),y=null,L=()=>{if(!y)y=Yj(Q);return y},b=new Map,C=!1,u,H=!0,Z,F=[],V=new Map,O=()=>{D?.(e())},h=()=>{b.clear();let J=W.getLoadedRanges();for(let $ of J)for(let P=$.start;P<=$.end;P++){let E=W.get(P);if(E&&!d(E))b.set(E.id,P)}},w=(J,$)=>{if(!d($))b.set($.id,J)},k=(J)=>{b.delete(J)},A=(J,$)=>{return`${J}-${$}`},T=()=>W.getTotal(),I=()=>W.getCachedCount(),r=()=>C,t=()=>H,e=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:C,pendingRanges:F,error:u,hasMore:H,cursor:Z}),Zj=()=>W,q=()=>L(),X=(J)=>{let $=W.get(J);if($!==void 0)return $;if(J>=0&&J<W.getTotal())return L().generate(J);return},B=(J)=>{let $=b.get(J);if($===void 0)return;return W.get($)},K=(J)=>{return b.get(J)??-1},_=(J)=>{let $=W.get(J);return $!==void 0&&!d($)},l=(J,$)=>{let P=[],E=W.getTotal(),g=0,x=0;W.touchChunksForRange(J,Math.min($,E-1));for(let c=J;c<=$&&c<E;c++){let s=W.get(c);if(s!==void 0)P.push(s),g++;else P.push(L().generate(c)),x++}return P},R=(J)=>{W.setTotal(J),H=W.getCachedCount()<J,O()},p=(J,$=0,P)=>{if(y&&!y.hasAnalyzedStructure()&&J.length>0)y.analyzeStructure(J);for(let E=0;E<J.length;E++){let g=J[E];if(g!==void 0){let x=$+E;W.set(x,g),w(x,g)}}if(P!==void 0)W.setTotal(P);else if($+J.length>W.getTotal())W.setTotal($+J.length);H=W.getCachedCount()<W.getTotal(),f?.(J,$,W.getTotal()),O()},i=(J,$)=>{let P=b.get(J);if(P===void 0)return!1;let E=W.get(P);if(!E)return!1;let g={...E,...$};if(W.set(P,g),$.id!==void 0&&$.id!==J)k(J),w(P,g);return O(),!0},qj=(J)=>{let $=b.get(J);if($===void 0)return!1;W.delete($),k(J);let P=W.getTotal();if(P>0)W.setTotal(P-1);return O(),!0},Jj=async(J,$)=>{if(!G)return;let P=A(J,$);if(V.has(P))return;let E=W.getLoadedRanges(),g=Xj({start:J,end:$},E,W.chunkSize);if(g.length===0)return;let x=W.chunkSize,c=[];for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);for(let S=a;S<=n;S++){let o=S*x,m=o+x-1,Qj=A(o,m);if(!c.some((Wj)=>Wj.start===o)&&!V.has(Qj))c.push({start:o,end:m})}}let s=[];for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);for(let S=a;S<=n;S++){let o=S*x,m=o+x-1,Qj=A(o,m);if(V.has(Qj)){let Wj=V.get(Qj);if(!s.includes(Wj))s.push(Wj)}}}for(let v of c){let a=A(v.start,v.end),n=(async()=>{F.push(v),C=!0,u=void 0,O();try{let S=v.end-v.start+1,o={offset:v.start,limit:S,cursor:void 0},m=await G.read(o);if(p(m.items,v.start,m.total),m.cursor)Z=m.cursor;if(m.hasMore!==void 0)H=m.hasMore;else if(m.total!==void 0)H=W.getCachedCount()<m.total}catch(S){u=S instanceof Error?S:Error(String(S))}finally{V.delete(a),F=F.filter((S)=>S.start!==v.start||S.end!==v.end),C=V.size>0,O()}})();V.set(a,n),s.push(n)}await Promise.all(s)},Aj=async(J,$)=>{if(W.isRangeLoaded(J,$))return;await Jj(J,$)},Dj=async()=>{if(!G)return;await Jj(0,j-1)},Oj=async()=>{if(!G||C||!H)return!1;let J=W.getCachedCount(),$=W.getTotal(),P=J,E=Math.min(P+j-1,$>0?$-1:P+j-1);if(P>=$&&$>0)return H=!1,!1;return await Jj(P,E),W.getCachedCount()>J},zj=async()=>{if(W.clear(),b.clear(),y)y.clear();Z=void 0,H=!0,u=void 0,O(),await Dj()},Hj=(J,$)=>{if(W.evictDistant(J,$)>0)h()},yj=()=>{W.clear(),b.clear(),Z=void 0,u=void 0,F=[],C=!1,O()},bj=()=>{if(W.reset(),b.clear(),y)y.clear();Z=void 0,H=!0,u=void 0,F=[],C=!1,O()};if(Y&&Y.length>0)p(Y,0,N??Y.length);else if(N!==void 0)W.setTotal(N);return{getState:e,getTotal:T,getCached:I,getIsLoading:r,getHasMore:t,getStorage:Zj,getPlaceholders:q,getItem:X,getItemById:B,getIndexById:K,isItemLoaded:_,getItemsInRange:l,setTotal:R,setItems:p,updateItem:i,removeItem:qj,loadRange:Jj,ensureRange:Aj,loadInitial:Dj,loadMore:Oj,reload:zj,evictDistant:Hj,clear:yj,reset:bj}};var Vj=(U,G,Y,N,M,Q)=>{if(N===0||G===0)return Q.start=0,Q.end=-1,Q;let j=Y.indexAtOffset(U),D=Y.indexAtOffset(U+G);if(D<N-1)D++;return Q.start=Math.max(0,j),Q.end=Math.min(N-1,Math.max(0,D)),Q},wj=(U,G,Y,N)=>{if(Y===0)return N.start=0,N.end=-1,N;return N.start=Math.max(0,U.start-G),N.end=Math.min(Y-1,U.end+G),N};var Gj=(U,G,Y,N,M,Q=Vj)=>{return Q(U.scrollTop,U.containerHeight,G,Y,M,U.visibleRange),wj(U.visibleRange,N,Y,U.renderRange),U.totalHeight=M.virtualHeight,U.actualHeight=M.actualHeight,U.isCompressed=M.isCompressed,U.compressionRatio=M.ratio,U};var Kj=200,jj=50;var Mj=15,Pj=2,_j=50;var fj=(U)=>{let{adapter:G,loading:Y}=U,N=Y?.cancelThreshold??Mj,M=Y?.preloadThreshold??Pj,Q=Y?.preloadAhead??_j;return{name:"withAsync",priority:20,methods:["reload"],setup(j){let{emitter:D}=j,f=j.config.reverse,z=j.config.overscan,W=Bj({adapter:G,pageSize:jj,onStateChange:()=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.updateCompressionMode(),j.state.viewportState=Gj(j.state.viewportState,j.heightCache,j.getVirtualTotal(),z,j.getCachedCompression()),j.updateContentSize(j.state.viewportState.totalHeight),j.renderIfNeeded()},onItemsLoaded:(Z,F,V)=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.forceRender(),D.emit("load:end",{items:Z,total:V})}});j.replaceDataManager(W);let y=null,L=null,b=0,C=()=>{if(L){let Z=L;L=null,j.dataManager.ensureRange(Z.start,Z.end).catch((F)=>{D.emit("error",{error:F,context:"ensureRange"})})}};j.afterScroll.push((Z,F)=>{if(j.state.isDestroyed)return;let V=j.scrollController.getVelocity(),h=j.scrollController.isTracking()&&V<=N;if(L&&b>N&&V<=N){let A=L;L=null,j.dataManager.ensureRange(A.start,A.end).catch((T)=>{D.emit("error",{error:T,context:"ensureRange"})})}if(b=V,h&&!j.dataManager.getIsLoading()&&j.dataManager.getHasMore()){if(f){if(Z<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((A)=>{D.emit("error",{error:A,context:"loadMore"})})}else if(j.state.viewportState.totalHeight-Z-j.state.viewportState.containerHeight<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((T)=>{D.emit("error",{error:T,context:"loadMore"})})}let{renderRange:w}=j.state.viewportState;if(!y||w.start!==y.start||w.end!==y.end)if(y={start:w.start,end:w.end},h){L=null;let{start:A,end:T}=w,I=j.getVirtualTotal();if(V>M)if(F==="down")T=Math.min(w.end+Q,I-1);else A=Math.max(w.start-Q,0);j.dataManager.ensureRange(A,T).catch((r)=>{D.emit("error",{error:r,context:"ensureRange"})})}else L={start:w.start,end:w.end}});let u=200,H=null;j.afterScroll.push((Z,F)=>{if(H!==null)clearTimeout(H);H=setTimeout(()=>{H=null,C()},u)}),j.destroyHandlers.push(()=>{if(H!==null)clearTimeout(H),H=null}),D.on("load:start",()=>{j.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{j.dom.root.removeAttribute("aria-busy")}),j.methods.set("reload",async()=>{await j.dataManager.reload()}),D.emit("load:start",{offset:0,limit:jj}),j.dataManager.loadInitial().catch((Z)=>{D.emit("error",{error:Z,context:"loadInitial"})})}}};export{fj as withAsync,Ej as replacePlaceholders,Uj as mergeRanges,d as isPlaceholderItem,Nj as filterPlaceholders,$j as createSparseStorage,Yj as createPlaceholderManager,Bj as createDataManager,Fj as countRealItems,Xj as calculateMissingRanges};
1
+ var Yj=(b={})=>{let{chunkSize:Z=100,maxCachedItems:K=5000,evictionBuffer:P=200,onEvict:M}=b,U=new Map,j=0,F=0,S=(J)=>{let X=U.get(J);if(!X)X={items:Array(Z),count:0,lastAccess:Date.now()},U.set(J,X);else X.lastAccess=Date.now();return X},O=(J)=>{return Math.floor(J/Z)},q=(J)=>{return J%Z},H=()=>j,g=(J)=>{j=J},T=(J)=>{if(J<0||J>=j)return;let X=O(J),Y=U.get(X);if(!Y)return;return Y.items[q(J)]},R=(J)=>{if(J<0||J>=j)return!1;let X=O(J),Y=U.get(X);if(!Y)return!1;return Y.items[q(J)]!==void 0},v=(J,X)=>{let Y=O(J),w=S(Y),N=q(J),u=w.items[N]===void 0;if(w.items[N]=X,u)w.count++,F++;if(J>=j)j=J+1},G=(J,X)=>{for(let Y=0;Y<X.length;Y++){let w=X[Y];if(w!==void 0)v(J+Y,w)}},W=(J)=>{if(J<0||J>=j)return!1;let X=O(J),Y=U.get(X);if(!Y)return!1;let w=q(J);if(Y.items[w]===void 0)return!1;if(Y.items[w]=void 0,Y.count--,F--,Y.count===0)U.delete(X);return!0},B=(J,X)=>{let Y=[];for(let w=J;w<=X&&w<j;w++)Y.push(T(w));return Y},_=(J,X)=>{for(let Y=J;Y<=X&&Y<j;Y++)if(!R(Y))return!1;return!0},A=()=>{let J=[],X=null,Y=Array.from(U.keys()).sort((w,N)=>w-N);for(let w of Y){let N=U.get(w);if(!N)continue;let u=w*Z;for(let k=0;k<Z;k++){let h=u+k;if(h>=j)break;if(N.items[k]!==void 0)if(X===null)X={start:h,end:h};else if(h===X.end+1)X.end=h;else J.push(X),X={start:h,end:h};else if(X!==null)J.push(X),X=null}}if(X!==null)J.push(X);return J},V=(J,X)=>{let Y=[],w=null;for(let N=J;N<=X&&N<j;N++)if(!R(N))if(w===null)w={start:N,end:N};else w.end=N;else if(w!==null)Y.push(w),w=null;if(w!==null)Y.push(w);return Y},z=(J)=>{return U.has(J)},y=(J)=>{let X=U.get(J);if(X)X.lastAccess=Date.now()},E=(J,X)=>{if(J>X||U.size===0)return;let Y=Date.now(),w=O(Math.max(0,J)),N=O(Math.min(j-1,X));for(let u=w;u<=N;u++){let k=U.get(u);if(k)k.lastAccess=Y}},p=(J,X)=>{if(F<=K)return 0;let Y=Math.max(0,J-P),w=Math.min(j-1,X+P),N=O(Y),u=O(w),k=0,h=[];for(let[d,Jj]of U)if(d<N||d>u)k+=Jj.count,h.push(d),F-=Jj.count,U.delete(d);if(k>0&&M)M(k,h);return k},m=()=>{if(F<=K)return 0;let J=Array.from(U.entries()).sort(([,w],[,N])=>w.lastAccess-N.lastAccess),X=0,Y=[];for(let[w,N]of J){if(F<=K)break;X+=N.count,F-=N.count,Y.push(w),U.delete(w)}if(X>0&&M)M(X,Y);return X},t=()=>{return{totalItems:j,cachedItems:F,cachedChunks:U.size,chunkSize:Z,maxCachedItems:K,memoryEfficiency:j>0?1-F/j:1}},e=()=>F,qj=()=>{U.clear(),F=0};return{chunkSize:Z,maxCachedItems:K,getTotal:H,setTotal:g,get:T,has:R,set:v,setRange:G,delete:W,getRange:B,isRangeLoaded:_,getLoadedRanges:A,findUnloadedRanges:V,getChunkIndex:O,isChunkLoaded:z,touchChunk:y,touchChunksForRange:E,evictDistant:p,evictToLimit:m,getStats:t,getCachedCount:e,clear:qj,reset:()=>{qj(),j=0}}},wj=(b)=>{if(b.length===0)return[];let Z=[...b].sort((P,M)=>P.start-M.start),K=[{...Z[0]}];for(let P=1;P<Z.length;P++){let M=Z[P],U=K[K.length-1];if(M.start<=U.end+1)U.end=Math.max(U.end,M.end);else K.push({...M})}return K},$j=(b,Z,K)=>{let P=Math.floor(b.start/K)*K,M=Math.ceil((b.end+1)/K)*K-1,U={start:P,end:M};if(Z.length===0)return[U];let j=[],F=wj(Z),S=U.start;for(let O of F){if(O.end<S)continue;if(O.start>U.end)break;if(O.start>S)j.push({start:S,end:Math.min(O.start-1,U.end)});if(S=O.end+1,S>U.end)break}if(S<=U.end)j.push({start:S,end:U.end});return j};var Bj=(b={})=>{let{enabled:Z=!0,maskCharacter:K="█",randomVariance:P=!0,maxSampleSize:M=20,customGenerator:U}=b,j=null,F=!1,S=0,O=(W)=>{if(!Z||F||W.length===0)return;let B=new Map,_=new Map,A=Math.min(W.length,M);for(let V=0;V<A;V++){let z=W[V];if(!z||typeof z!=="object")continue;for(let[y,E]of Object.entries(z)){if(y.startsWith("_")||y==="id")continue;if(!_.has(y))_.set(y,{lengths:[],types:new Set});let p=_.get(y),m=Array.isArray(E)?"array":typeof E;if(p.types.add(m),typeof E==="string")p.lengths.push(E.length);else if(E!==null&&E!==void 0)p.lengths.push(String(E).length)}}for(let[V,z]of _){if(z.lengths.length===0)continue;let y=Math.min(...z.lengths),E=Math.max(...z.lengths),p=Math.round(z.lengths.reduce((t,e)=>t+e,0)/z.lengths.length),m="string";if(z.types.has("number")&&z.types.size===1)m="number";else if(z.types.has("boolean")&&z.types.size===1)m="boolean";else if(z.types.has("array"))m="array";else if(z.types.has("object")&&!z.types.has("string"))m="object";B.set(V,{minLength:y,maxLength:E,avgLength:p,type:m})}j=B,F=!0},q=()=>F,H=(W)=>{let B=W.avgLength;if(P&&W.minLength!==W.maxLength){if(B=Math.floor(Math.random()*(W.maxLength-W.minLength+1)+W.minLength),Math.random()<0.3)B=Math.max(1,B+Math.floor(Math.random()*3)-1)}return K.repeat(Math.max(1,B))},g=(W)=>{if(U)return{...U(W),["_isPlaceholder"]:!0};let B={id:`__placeholder_${S++}`,["_isPlaceholder"]:!0,_index:W};if(!j||j.size===0)return B.label=K.repeat(12),B;for(let[_,A]of j)switch(A.type){case"string":B[_]=H(A);break;case"number":B[_]=0;break;case"boolean":B[_]=!1;break;case"array":B[_]=[];break;case"object":B[_]={};break;default:B[_]=H(A)}return B};return{analyzeStructure:O,hasAnalyzedStructure:q,generate:g,generateRange:(W,B)=>{let _=[];for(let A=W;A<=B;A++)_.push(g(A));return _},isPlaceholder:(W)=>{if(!W||typeof W!=="object")return!1;return W._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{j=null,F=!1,S=0}}},o=(b)=>{if(!b||typeof b!=="object")return!1;return b._isPlaceholder===!0},Wj=(b)=>{return b.filter((Z)=>!o(Z))},Kj=(b)=>{let Z=0;for(let K of b)if(K!==void 0&&!o(K))Z++;return Z},zj=(b,Z,K)=>{let P=0;for(let M=0;M<Z.length;M++){let U=K+M,j=b[U];if(j===void 0||o(j)){if(b[U]=Z[M],o(j))P++}}return P};var yj=50,Gj=(b={})=>{let{adapter:Z,initialItems:K,initialTotal:P,storage:M,placeholder:U,pageSize:j=yj,onStateChange:F,onItemsLoaded:S,onItemsEvicted:O}=b,q=Yj({...M,onEvict:(Q,$)=>{O?.(Q),V()}}),H=null,g=()=>{if(!H)H=Bj(U);return H},T=new Map,R=!1,v,G=!0,W,B=[],_=0,A=new Map,V=()=>{F?.(Uj())},z=()=>{T.clear();let Q=q.getLoadedRanges();for(let $ of Q)for(let D=$.start;D<=$.end;D++){let L=q.get(D);if(L&&!o(L))T.set(L.id,D)}},y=(Q,$)=>{if(!o($))T.set($.id,Q)},E=(Q)=>{T.delete(Q)},p=(Q,$)=>{return`${Q}-${$}`},m=()=>q.getTotal(),t=()=>q.getCachedCount(),e=()=>R,qj=()=>G,Uj=()=>({total:q.getTotal(),cached:q.getCachedCount(),isLoading:R,pendingRanges:B,error:v,hasMore:G,cursor:W}),J=()=>q,X=()=>g(),Y=(Q)=>{let $=q.get(Q);if($!==void 0)return $;if(Q>=0&&Q<q.getTotal())return g().generate(Q);return},w=(Q)=>{let $=T.get(Q);if($===void 0)return;return q.get($)},N=(Q)=>{return T.get(Q)??-1},u=(Q)=>{let $=q.get(Q);return $!==void 0&&!o($)},k=(Q,$)=>{let D=[],L=q.getTotal(),l=0,x=0;q.touchChunksForRange(Q,Math.min($,L-1));for(let c=Q;c<=$&&c<L;c++){let i=q.get(c);if(i!==void 0)D.push(i),l++;else D.push(g().generate(c)),x++}return D},h=(Q)=>{q.setTotal(Q),G=q.getCachedCount()<Q,V()},d=(Q,$=0,D)=>{if(H&&!H.hasAnalyzedStructure()&&Q.length>0)H.analyzeStructure(Q);for(let L=0;L<Q.length;L++){let l=Q[L];if(l!==void 0){let x=$+L;q.set(x,l),y(x,l)}}if(D!==void 0)q.setTotal(D);else if($+Q.length>q.getTotal())q.setTotal($+Q.length);if(q.getCachedCount()>=q.getTotal()&&q.getTotal()>0)G=!1;S?.(Q,$,q.getTotal()),V()},Jj=(Q,$)=>{let D=T.get(Q);if(D===void 0)return!1;let L=q.get(D);if(!L)return!1;let l={...L,...$};if(q.set(D,l),$.id!==void 0&&$.id!==Q)E(Q),y(D,l);return V(),!0},Nj=(Q)=>{let $=T.get(Q);if($===void 0)return!1;q.delete($),E(Q);let D=q.getTotal();if(D>0)q.setTotal(D-1);return V(),!0},Qj=async(Q,$)=>{if(!Z)return;let D=p(Q,$);if(A.has(D))return;let L=q.getLoadedRanges(),l=$j({start:Q,end:$},L,q.chunkSize);if(l.length===0)return;let x=q.chunkSize,c=[];for(let f of l){let a=Math.floor(f.start/x),n=Math.floor(f.end/x);for(let C=a;C<=n;C++){let s=C*x,I=s+x-1,r=p(s,I);if(!c.some((Xj)=>Xj.start===s)&&!A.has(r))c.push({start:s,end:I})}}let i=[];for(let f of l){let a=Math.floor(f.start/x),n=Math.floor(f.end/x);for(let C=a;C<=n;C++){let s=C*x,I=s+x-1,r=p(s,I);if(A.has(r)){let Xj=A.get(r);if(!i.includes(Xj))i.push(Xj)}}}for(let f of c){let a=p(f.start,f.end),n=(async()=>{B.push(f),R=!0,v=void 0,V();try{let C=f.end-f.start+1,s={offset:f.start,limit:C,cursor:void 0},I=await Z.read(s);if(d(I.items,f.start,I.total),I.cursor)W=I.cursor;let r=f.start+I.items.length;if(r>=_){if(_=r,I.hasMore!==void 0)G=I.hasMore;else if(I.total!==void 0)G=r<I.total}}catch(C){v=C instanceof Error?C:Error(String(C))}finally{A.delete(a),B=B.filter((C)=>C.start!==f.start||C.end!==f.end),R=A.size>0,V()}})();A.set(a,n),i.push(n)}await Promise.all(i)},Hj=async(Q,$)=>{if(q.isRangeLoaded(Q,$))return;await Qj(Q,$)},bj=async()=>{if(!Z)return;await Qj(0,j-1)},Pj=async()=>{if(!Z||R||!G)return!1;let Q=q.getCachedCount(),$=q.getTotal(),D=Q,L=Math.min(D+j-1,$>0?$-1:D+j-1);if(D>=$&&$>0)return G=!1,!1;return await Qj(D,L),q.getCachedCount()>Q},Mj=async()=>{if(q.clear(),T.clear(),H)H.clear();A.clear(),B=[],R=!1,W=void 0,G=!0,_=0,v=void 0,V()},_j=(Q,$)=>{if(q.evictDistant(Q,$)>0)z()},Aj=()=>{q.clear(),T.clear(),W=void 0,v=void 0,B=[],R=!1,V()},Oj=()=>{if(q.reset(),T.clear(),H)H.clear();W=void 0,G=!0,_=0,v=void 0,B=[],R=!1,V()};if(K&&K.length>0)d(K,0,P??K.length);else if(P!==void 0)q.setTotal(P);return{getState:Uj,getTotal:m,getCached:t,getIsLoading:e,getHasMore:qj,getStorage:J,getPlaceholders:X,getItem:Y,getItemById:w,getIndexById:N,isItemLoaded:u,getItemsInRange:k,setTotal:h,setItems:d,updateItem:Jj,removeItem:Nj,loadRange:Qj,ensureRange:Hj,loadInitial:bj,loadMore:Pj,reload:Mj,evictDistant:_j,clear:Aj,reset:Oj}};var Fj=200,jj=50;var Zj=15,Vj=2,Dj=50;var Ej=(b)=>{let{adapter:Z,loading:K}=b,P=K?.cancelThreshold??Zj,M=K?.preloadThreshold??Vj,U=K?.preloadAhead??Dj;return{name:"withAsync",priority:20,methods:["reload"],setup(j){let{emitter:F}=j,S=j.config.reverse,O=Gj({adapter:Z,pageSize:jj,onStateChange:()=>{if(j.state.isInitialized){j.heightCache.rebuild(j.getVirtualTotal()),j.updateCompressionMode();let G=j.getCachedCompression();j.state.viewportState.totalHeight=G.virtualHeight,j.state.viewportState.actualHeight=G.actualHeight,j.state.viewportState.isCompressed=G.isCompressed,j.state.viewportState.compressionRatio=G.ratio,j.updateContentSize(G.virtualHeight),j.renderIfNeeded()}},onItemsLoaded:(G,W,B)=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.forceRender(),F.emit("load:end",{items:G,total:B})}});j.replaceDataManager(O);let q=null,H=null,g=0,T=()=>{if(H){let G=H;H=null,j.dataManager.ensureRange(G.start,G.end).catch((W)=>{F.emit("error",{error:W,context:"ensureRange"})})}};j.afterScroll.push((G,W)=>{if(j.state.isDestroyed)return;let B=j.scrollController.getVelocity(),A=j.scrollController.isTracking()&&B<=P;if(H&&g>P&&B<=P){let y=H;H=null,j.dataManager.ensureRange(y.start,y.end).catch((E)=>{F.emit("error",{error:E,context:"ensureRange"})})}if(g=B,A&&!j.dataManager.getIsLoading()&&j.dataManager.getHasMore()){if(S){if(G<Fj)F.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((y)=>{F.emit("error",{error:y,context:"loadMore"})})}else if(j.state.viewportState.totalHeight-G-j.state.viewportState.containerHeight<Fj)F.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((E)=>{F.emit("error",{error:E,context:"loadMore"})})}let{renderRange:V}=j.state.viewportState;if(!q||V.start!==q.start||V.end!==q.end)if(q={start:V.start,end:V.end},A){H=null;let{start:y,end:E}=V,p=j.getVirtualTotal();if(B>M)if(W==="down")E=Math.min(V.end+U,p-1);else y=Math.max(V.start-U,0);j.dataManager.ensureRange(y,E).catch((m)=>{F.emit("error",{error:m,context:"ensureRange"})})}else H={start:V.start,end:V.end}});let R=200,v=null;j.afterScroll.push((G,W)=>{if(v!==null)clearTimeout(v);v=setTimeout(()=>{v=null,T()},R)}),j.destroyHandlers.push(()=>{if(v!==null)clearTimeout(v),v=null}),F.on("load:start",()=>{j.dom.root.setAttribute("aria-busy","true")}),F.on("load:end",()=>{j.dom.root.removeAttribute("aria-busy")}),j.methods.set("reload",async()=>{q=null,H=null,j.invalidateRendered(),await j.dataManager.reload(),j.forceRender();let{renderRange:G}=j.state.viewportState;if(G.end>0)await j.dataManager.ensureRange(G.start,G.end)}),F.emit("load:start",{offset:0,limit:jj}),j.dataManager.loadInitial().catch((G)=>{F.emit("error",{error:G,context:"loadInitial"})})}}};export{Ej as withAsync,zj as replacePlaceholders,wj as mergeRanges,o as isPlaceholderItem,Wj as filterPlaceholders,Yj as createSparseStorage,Bj as createPlaceholderManager,Gj as createDataManager,Kj as countRealItems,$j as calculateMissingRanges};
@@ -1 +1 @@
1
- var KJ=0,m=5,UJ=100,Rj=2,YJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},BJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>UJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Rj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],W=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(W)/C:0}return X.lastPosition=U,X.lastTime=$,X},Tj=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,W=$-1;while(K<W){let C=K+W+1>>>1;if(Y[C]<=Q)K=C;else W=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},GJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((W)=>{try{W(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},WJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},DJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let W=document.createElement("div");if(W.className=`${U}-items`,W.style.position="relative",Y)W.style.height="100%";else W.style.width="100%";return K.appendChild(W),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:W}},VJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},_J=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},LJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},NJ=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),W=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-W)/2;break;case"end":f=K-$+W;break;default:f=K}return Math.max(0,Math.min(f,C))},MJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,AJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},bJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(W){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(W.name,W),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,EJ(X,V,U,Y)}};return K};function EJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:W="vlist",ariaLabel:C,reverse:f=!1,scroll:Yj}=X,uj=Yj?.wheel??!0,Fj=Yj?.wrap??!1,c=f,yj=`${W}-${KJ++}`,fj=Y,Cj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,t=V.template,pj={overscan:K,classPrefix:W,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:yj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),e=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(e.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(e.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(e.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(e.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let xj=WJ(X.container),_=DJ(xj,W,C,$),k=GJ(),B=Q?[...Q]:[],N=Tj(fj,B.length),jj=VJ(),F=_.viewport.clientHeight,Jj=_.viewport.clientWidth,s=!1,p=!1,O=0,x=null,l=null,I=YJ(0),Xj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},w={viewportState:{scrollTop:0,containerHeight:F,totalHeight:N.getTotalHeight(),actualHeight:N.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},v=new Map,Bj={selected:!1,focused:!1},hj=`${W}-item`,a="",z=new Map,Gj=()=>{z.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)z.set(J.id,j)}};Gj();let R=null,H=()=>R?R.getTotal():B.length,Wj=[],Dj=[],Vj=[],_j=[],r=[],Lj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},kj=(j=2)=>{let J=N.getTotalHeight();return O+F>=J-j},Zj=!1,y,T,zj=(j,J,Z,q,D)=>{_J(j,J,Z,q,D)},$j=(j,J,Z,q,D)=>{return NJ(j,J,Z,q,D)},Nj=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Qj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},gj=(j,J)=>{let Z=jj.acquire();if(Z.className=hj,$){if(Z.style.width=`${N.getHeight(j)}px`,Cj!=null)Z.style.height=`${Cj}px`}else Z.style.height=`${N.getHeight(j)}px`;if(Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${yj}-item-${j}`,a=String(H()),Z.setAttribute("aria-setsize",a),Z.setAttribute("aria-posinset",String(j+1)),String(J.id).startsWith("__placeholder_"))Z.classList.add(`${W}-item--placeholder`);return Nj(Z,t(J,j,Bj)),Qj(Z,j),Z},o=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Mj=new Set,Aj=-1,mj=()=>{if(s)return;let j=H();if(zj(O,F,N,j,Xj),LJ(Xj,K,j,E),E.start===h.start&&E.end===h.end){if(Zj)for(let[G,A]of v)Qj(A,G);return}let J=String(j),Z=J!==a;a=J;for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),jj.release(A),v.delete(G);let q=document.createDocumentFragment(),D=[];for(let G=E.start;G<=E.end;G++){let A=R?R.getItem(G):B[G];if(!A)continue;let M=v.get(G);if(M){let P=M.dataset.id,i=String(A.id);if(P!==i){let qJ=P?.startsWith("__placeholder_"),Ij=i.startsWith("__placeholder_");if(Nj(M,t(A,G,Bj)),M.dataset.id=i,$)M.style.width=`${N.getHeight(G)}px`;else M.style.height=`${N.getHeight(G)}px`;if(Ij)M.classList.add(`${W}-item--placeholder`);else M.classList.remove(`${W}-item--placeholder`);if(qJ&&!Ij)M.classList.add(`${W}-item--replaced`),setTimeout(()=>{M.classList.remove(`${W}-item--replaced`)},300)}Qj(M,G);let Uj=Mj.has(A.id),QJ=G===Aj;if(M.classList.toggle(`${W}-item--selected`,Uj),M.classList.toggle(`${W}-item--focused`,QJ),M.ariaSelected=Uj?"true":"false",Z)M.setAttribute("aria-setsize",a)}else{let P=gj(G,A),i=Mj.has(A.id),Uj=G===Aj;if(i)P.classList.add(`${W}-item--selected`),P.ariaSelected="true";if(Uj)P.classList.add(`${W}-item--focused`);q.appendChild(P),D.push({index:G,element:P})}}if(D.length>0){_.items.appendChild(q);for(let{index:G,element:A}of D)v.set(G,A)}h.start=E.start,h.end=E.end,w.lastRenderRange.start=E.start,w.lastRenderRange.end=E.end,w.viewportState.scrollTop=O,w.viewportState.visibleRange.start=Xj.start,w.viewportState.visibleRange.end=Xj.end,w.viewportState.renderRange.start=E.start,w.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},cj=()=>{h.start=-1,h.end=-1,y()};y=mj,T=cj;let n=()=>{if(s)return;let j=u(),J=j>=O?"down":"up";if(I=BJ(I,j),!_.root.classList.contains(`${W}--scrolling`))_.root.classList.add(`${W}--scrolling`);O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Rj});for(let Z=0;Z<Wj.length;Z++)Wj[Z](j,J);if(l)clearTimeout(l);l=setTimeout(()=>{_.root.classList.remove(`${W}--scrolling`),I.velocity=0,I.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Yj?.idleTimeout??150)},qj=null,g=_.viewport;if(g.addEventListener("scroll",n,{passive:!0}),$&&uj)qj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",qj);let Hj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=R?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;k.emit("item:click",{item:D,index:q,event:j})}}}for(let q=0;q<Dj.length;q++)Dj[q](j)},dj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=R?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;k.emit("item:dblclick",{item:D,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;J<Vj.length;J++)Vj[J](j)};_.items.addEventListener("click",Hj),_.items.addEventListener("dblclick",dj),_.root.addEventListener("keydown",Pj);let bj=!0,sj=()=>Jj,lj=()=>F,Ej=new ResizeObserver((j)=>{if(s)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,D=$?q:Z;if(Jj=q,Math.abs(D-F)>1){if(F=D,w.viewportState.containerHeight=D,p)o(),y(),k.emit("resize",{height:Z,width:q})}if(p)for(let G=0;G<_j.length;G++)_j[G](q,Z)}});if(bj)Ej.observe(_.viewport);let b={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return pj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,D)=>{Mj=Z,Aj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);if(!q)return;q.classList.toggle(`${W}-item--selected`,J),q.classList.toggle(`${W}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return R},set dataManager(j){R=j},get scrollController(){return Oj},set scrollController(j){Oj=j},state:w,getContainerWidth(){return Jj},afterScroll:Wj,clickHandlers:Dj,keydownHandlers:Vj,resizeHandlers:_j,contentSizeHandlers:r,destroyHandlers:Lj,methods:L,replaceTemplate(j){t=j},replaceRenderer(j){},replaceDataManager(j){R=j},replaceScrollController(j){Oj=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=R?R.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(R){let j=R.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=R.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return H()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:H(),containerHeight:F,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){H=j},rebuildHeightCache(j){N.rebuild(j??H())},setHeightConfig(j){N=Tj(j,H())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){zj=j},setScrollToPosFn(j){$j=j},setPositionElementFn(j){Qj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),n()}},setScrollTarget(j){g.removeEventListener("scroll",n),g=j,g.addEventListener("scroll",n,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){sj=j.width,lj=j.height,Jj=j.width(),F=j.height(),w.viewportState.containerHeight=F},disableViewportResize(){if(bj)bj=!1,Ej.unobserve(_.viewport)}};R={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=z.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>z.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),D=Math.min(J,B.length-1);for(let G=q;G<=D;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let D=0;D<j.length;D++)B[J+D]=j[D]}if(Gj(),p){N.rebuild(H()),o(),b.updateCompressionMode();for(let q=0;q<r.length;q++)r[q]();T()}},updateItem:(j,J)=>{let Z=z.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)z.delete(j),z.set(J.id,Z);let D=v.get(Z);if(D)Nj(D,t(B[Z],Z,Bj)),D.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=z.get(j);if(J===void 0)return!1;if(B.splice(J,1),Gj(),p){N.rebuild(H()),o(),b.updateCompressionMode();for(let Z=0;Z<r.length;Z++)r[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],z.clear()},reset:()=>{if(B=[],z.clear(),p)N.rebuild(0),o(),T()}};let Oj={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>kj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-F);return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Rj,isScrolling:()=>_.root.classList.contains(`${W}--scrolling`),updateConfig:()=>{},enableCompression:()=>{Zj=!0},disableCompression:()=>{Zj=!1},isCompressed:()=>Zj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{F=j},destroy:()=>{}},wj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=wj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);wj.set(J,j.name)}for(let j of d)j.setup(b);if(p=!0,b.state.isInitialized=!0,o(),y(),c&&B.length>0){let j=$j(B.length-1,N,F,B.length,"end");S(j),O=j,y()}let aj=(j)=>{b.dataManager.setItems(j,0,j.length)},rj=c?(j)=>{let J=kj(2),Z=B.length;if(b.dataManager.setItems(j,Z),J&&B.length>0){let q=$j(B.length-1,N,F,B.length,"end");S(q),O=q,y()}}:(j)=>{let J=B.length;b.dataManager.setItems(j,J)},oj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];b.dataManager.clear(),b.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];b.dataManager.clear(),b.dataManager.setItems([...j,...J],0)},nj=(j,J)=>{b.dataManager.updateItem(j,J)},ij=(j)=>{b.dataManager.removeItem(j)},tj=async()=>{if(b.dataManager.reload)await b.dataManager.reload()},Kj=()=>{if(x!==null)cancelAnimationFrame(x),x=null},ej=(j,J,Z)=>{if(Kj(),Math.abs(J-j)<1){S(J),O=J,y();return}let q=performance.now(),D=(G)=>{let A=G-q,M=Math.min(A/Z,1),P=j+(J-j)*MJ(M);if(S(P),O=P,y(),M<1)x=requestAnimationFrame(D);else x=null};x=requestAnimationFrame(D)},vj=(j,J)=>{let{align:Z,behavior:q,duration:D}=AJ(J),G=H(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let M=$j(A,N,F,G,Z);if(q==="smooth")ej(u(),M,D);else Kj(),S(M)},jJ=(j,J)=>{let Z=z.get(j)??b.dataManager.getIndexById(j);if(Z>=0)vj(Z,J)},JJ=()=>u(),XJ=(j,J)=>{return k.on(j,J)},ZJ=(j,J)=>{k.off(j,J)},$J=()=>{if(s)return;if(s=!0,b.state.isDestroyed=!0,_.items.removeEventListener("click",Hj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",n),Ej.disconnect(),qj)_.viewport.removeEventListener("wheel",qj);if(l)clearTimeout(l);for(let j=0;j<Lj.length;j++)Lj[j]();for(let j of d)if(j.destroy)j.destroy();Kj();for(let[,j]of v)j.remove(),jj.release(j);v.clear(),jj.clear(),k.clear(),_.root.remove()},Sj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return H()},setItems:L.has("setItems")?L.get("setItems"):aj,appendItems:L.has("appendItems")?L.get("appendItems"):rj,prependItems:L.has("prependItems")?L.get("prependItems"):oj,updateItem:L.has("updateItem")?L.get("updateItem"):nj,removeItem:L.has("removeItem")?L.get("removeItem"):ij,reload:L.has("reload")?L.get("reload"):tj,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):vj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):jJ,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):Kj,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):JJ,on:XJ,off:ZJ,destroy:$J};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;Sj[j]=J}return Sj}export{bJ as vlist};
1
+ var KJ=0,m=5,UJ=100,Rj=2,YJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},BJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>UJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Rj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],W=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(W)/C:0}return X.lastPosition=U,X.lastTime=$,X},Tj=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,W=$-1;while(K<W){let C=K+W+1>>>1;if(Y[C]<=Q)K=C;else W=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},GJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((W)=>{try{W(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},WJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},DJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let W=document.createElement("div");if(W.className=`${U}-items`,W.style.position="relative",Y)W.style.height="100%";else W.style.width="100%";return K.appendChild(W),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:W}},VJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},_J=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},LJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},NJ=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),W=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-W)/2;break;case"end":f=K-$+W;break;default:f=K}return Math.max(0,Math.min(f,C))},MJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,AJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},bJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(W){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(W.name,W),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,EJ(X,V,U,Y)}};return K};function EJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:W="vlist",ariaLabel:C,reverse:f=!1,scroll:Yj}=X,uj=Yj?.wheel??!0,Fj=Yj?.wrap??!1,c=f,yj=`${W}-${KJ++}`,fj=Y,Cj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,e=V.template,pj={overscan:K,classPrefix:W,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:yj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),jj=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(jj.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(jj.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(jj.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(jj.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let xj=WJ(X.container),_=DJ(xj,W,C,$),z=GJ(),B=Q?[...Q]:[],N=Tj(fj,B.length),s=VJ(),F=_.viewport.clientHeight,Jj=_.viewport.clientWidth,l=!1,p=!1,O=0,x=null,a=null,I=YJ(0),Xj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},v={viewportState:{scrollTop:0,containerHeight:F,totalHeight:N.getTotalHeight(),actualHeight:N.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},k=new Map,Bj={selected:!1,focused:!1},hj=`${W}-item`,r="",H=new Map,Gj=()=>{H.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)H.set(J.id,j)}};Gj();let R=null,P=()=>R?R.getTotal():B.length,Wj=[],Dj=[],Vj=[],_j=[],o=[],Lj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},kj=(j=2)=>{let J=N.getTotalHeight();return O+F>=J-j},Zj=!1,y,T,zj=(j,J,Z,q,D)=>{_J(j,J,Z,q,D)},$j=(j,J,Z,q,D)=>{return NJ(j,J,Z,q,D)},Nj=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Qj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},gj=(j,J)=>{let Z=s.acquire();if(Z.className=hj,$){if(Z.style.width=`${N.getHeight(j)}px`,Cj!=null)Z.style.height=`${Cj}px`}else Z.style.height=`${N.getHeight(j)}px`;if(Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${yj}-item-${j}`,r=String(P()),Z.setAttribute("aria-setsize",r),Z.setAttribute("aria-posinset",String(j+1)),String(J.id).startsWith("__placeholder_"))Z.classList.add(`${W}-item--placeholder`);return Nj(Z,e(J,j,Bj)),Qj(Z,j),Z},n=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Mj=new Set,Aj=-1,mj=()=>{if(l)return;let j=P();if(zj(O,F,N,j,Xj),LJ(Xj,K,j,E),E.start===h.start&&E.end===h.end){if(Zj)for(let[G,A]of k)Qj(A,G);return}let J=String(j),Z=J!==r;r=J;for(let[G,A]of k)if(G<E.start||G>E.end)A.remove(),s.release(A),k.delete(G);let q=document.createDocumentFragment(),D=[];for(let G=E.start;G<=E.end;G++){let A=R?R.getItem(G):B[G];if(!A)continue;let M=k.get(G);if(M){let w=M.dataset.id,t=String(A.id);if(w!==t){let qJ=w?.startsWith("__placeholder_"),Ij=t.startsWith("__placeholder_");if(Nj(M,e(A,G,Bj)),M.dataset.id=t,$)M.style.width=`${N.getHeight(G)}px`;else M.style.height=`${N.getHeight(G)}px`;if(Ij)M.classList.add(`${W}-item--placeholder`);else M.classList.remove(`${W}-item--placeholder`);if(qJ&&!Ij)M.classList.add(`${W}-item--replaced`),setTimeout(()=>{M.classList.remove(`${W}-item--replaced`)},300)}Qj(M,G);let Uj=Mj.has(A.id),QJ=G===Aj;if(M.classList.toggle(`${W}-item--selected`,Uj),M.classList.toggle(`${W}-item--focused`,QJ),M.ariaSelected=Uj?"true":"false",Z)M.setAttribute("aria-setsize",r)}else{let w=gj(G,A),t=Mj.has(A.id),Uj=G===Aj;if(t)w.classList.add(`${W}-item--selected`),w.ariaSelected="true";if(Uj)w.classList.add(`${W}-item--focused`);q.appendChild(w),D.push({index:G,element:w})}}if(D.length>0){_.items.appendChild(q);for(let{index:G,element:A}of D)k.set(G,A)}h.start=E.start,h.end=E.end,v.lastRenderRange.start=E.start,v.lastRenderRange.end=E.end,v.viewportState.scrollTop=O,v.viewportState.visibleRange.start=Xj.start,v.viewportState.visibleRange.end=Xj.end,v.viewportState.renderRange.start=E.start,v.viewportState.renderRange.end=E.end,z.emit("range:change",{range:{start:E.start,end:E.end}})},cj=()=>{h.start=-1,h.end=-1,y()};y=mj,T=cj;let i=()=>{if(l)return;let j=u(),J=j>=O?"down":"up";if(I=BJ(I,j),!_.root.classList.contains(`${W}--scrolling`))_.root.classList.add(`${W}--scrolling`);O=j,y(),z.emit("scroll",{scrollTop:j,direction:J}),z.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Rj});for(let Z=0;Z<Wj.length;Z++)Wj[Z](j,J);if(a)clearTimeout(a);a=setTimeout(()=>{_.root.classList.remove(`${W}--scrolling`),I.velocity=0,I.sampleCount=0,z.emit("velocity:change",{velocity:0,reliable:!1})},Yj?.idleTimeout??150)},qj=null,g=_.viewport;if(g.addEventListener("scroll",i,{passive:!0}),$&&uj)qj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",qj);let Hj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=R?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;z.emit("item:click",{item:D,index:q,event:j})}}}for(let q=0;q<Dj.length;q++)Dj[q](j)},dj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=R?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;z.emit("item:dblclick",{item:D,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;J<Vj.length;J++)Vj[J](j)};_.items.addEventListener("click",Hj),_.items.addEventListener("dblclick",dj),_.root.addEventListener("keydown",Pj);let bj=!0,sj=()=>Jj,lj=()=>F,Ej=new ResizeObserver((j)=>{if(l)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,D=$?q:Z;if(Jj=q,Math.abs(D-F)>1){if(F=D,v.viewportState.containerHeight=D,p)n(),y(),z.emit("resize",{height:Z,width:q})}if(p)for(let G=0;G<_j.length;G++)_j[G](q,Z)}});if(bj)Ej.observe(_.viewport);let b={get dom(){return _},get heightCache(){return N},get emitter(){return z},get config(){return pj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,D)=>{Mj=Z,Aj=q,T()},updateItemClasses:(j,J,Z)=>{let q=k.get(j);if(!q)return;q.classList.toggle(`${W}-item--selected`,J),q.classList.toggle(`${W}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>k.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return R},set dataManager(j){R=j},get scrollController(){return Oj},set scrollController(j){Oj=j},state:v,getContainerWidth(){return Jj},afterScroll:Wj,clickHandlers:Dj,keydownHandlers:Vj,resizeHandlers:_j,contentSizeHandlers:o,destroyHandlers:Lj,methods:L,replaceTemplate(j){e=j},replaceRenderer(j){},replaceDataManager(j){R=j},replaceScrollController(j){Oj=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=R?R.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(R){let j=R.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=R.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return P()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:P(),containerHeight:F,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},invalidateRendered(){for(let[,j]of k)j.remove(),s.release(j);k.clear()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){P=j},rebuildHeightCache(j){N.rebuild(j??P())},setHeightConfig(j){N=Tj(j,P())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){zj=j},setScrollToPosFn(j){$j=j},setPositionElementFn(j){Qj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),i()}},setScrollTarget(j){g.removeEventListener("scroll",i),g=j,g.addEventListener("scroll",i,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){sj=j.width,lj=j.height,Jj=j.width(),F=j.height(),v.viewportState.containerHeight=F},disableViewportResize(){if(bj)bj=!1,Ej.unobserve(_.viewport)}};R={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=H.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>H.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),D=Math.min(J,B.length-1);for(let G=q;G<=D;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let D=0;D<j.length;D++)B[J+D]=j[D]}if(Gj(),p){N.rebuild(P()),n(),b.updateCompressionMode();for(let q=0;q<o.length;q++)o[q]();T()}},updateItem:(j,J)=>{let Z=H.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)H.delete(j),H.set(J.id,Z);let D=k.get(Z);if(D)Nj(D,e(B[Z],Z,Bj)),D.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=H.get(j);if(J===void 0)return!1;if(B.splice(J,1),Gj(),p){N.rebuild(P()),n(),b.updateCompressionMode();for(let Z=0;Z<o.length;Z++)o[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],H.clear()},reset:()=>{if(B=[],H.clear(),p)N.rebuild(0),n(),T()}};let Oj={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>kj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-F);return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Rj,isScrolling:()=>_.root.classList.contains(`${W}--scrolling`),updateConfig:()=>{},enableCompression:()=>{Zj=!0},disableCompression:()=>{Zj=!1},isCompressed:()=>Zj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{F=j},destroy:()=>{}},wj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=wj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);wj.set(J,j.name)}for(let j of d)j.setup(b);if(p=!0,b.state.isInitialized=!0,n(),y(),c&&B.length>0){let j=$j(B.length-1,N,F,B.length,"end");S(j),O=j,y()}let aj=(j)=>{b.dataManager.setItems(j,0,j.length)},rj=c?(j)=>{let J=kj(2),Z=B.length;if(b.dataManager.setItems(j,Z),J&&B.length>0){let q=$j(B.length-1,N,F,B.length,"end");S(q),O=q,y()}}:(j)=>{let J=B.length;b.dataManager.setItems(j,J)},oj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];b.dataManager.clear(),b.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];b.dataManager.clear(),b.dataManager.setItems([...j,...J],0)},nj=(j,J)=>{b.dataManager.updateItem(j,J)},ij=(j)=>{b.dataManager.removeItem(j)},tj=async()=>{if(b.dataManager.reload)await b.dataManager.reload()},Kj=()=>{if(x!==null)cancelAnimationFrame(x),x=null},ej=(j,J,Z)=>{if(Kj(),Math.abs(J-j)<1){S(J),O=J,y();return}let q=performance.now(),D=(G)=>{let A=G-q,M=Math.min(A/Z,1),w=j+(J-j)*MJ(M);if(S(w),O=w,y(),M<1)x=requestAnimationFrame(D);else x=null};x=requestAnimationFrame(D)},vj=(j,J)=>{let{align:Z,behavior:q,duration:D}=AJ(J),G=P(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let M=$j(A,N,F,G,Z);if(q==="smooth")ej(u(),M,D);else Kj(),S(M)},jJ=(j,J)=>{let Z=H.get(j)??b.dataManager.getIndexById(j);if(Z>=0)vj(Z,J)},JJ=()=>u(),XJ=(j,J)=>{return z.on(j,J)},ZJ=(j,J)=>{z.off(j,J)},$J=()=>{if(l)return;if(l=!0,b.state.isDestroyed=!0,_.items.removeEventListener("click",Hj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",i),Ej.disconnect(),qj)_.viewport.removeEventListener("wheel",qj);if(a)clearTimeout(a);for(let j=0;j<Lj.length;j++)Lj[j]();for(let j of d)if(j.destroy)j.destroy();Kj();for(let[,j]of k)j.remove(),s.release(j);k.clear(),s.clear(),z.clear(),_.root.remove()},Sj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return P()},setItems:L.has("setItems")?L.get("setItems"):aj,appendItems:L.has("appendItems")?L.get("appendItems"):rj,prependItems:L.has("prependItems")?L.get("prependItems"):oj,updateItem:L.has("updateItem")?L.get("updateItem"):nj,removeItem:L.has("removeItem")?L.get("removeItem"):ij,reload:L.has("reload")?L.get("reload"):tj,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):vj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):jJ,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):Kj,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):JJ,on:XJ,off:ZJ,destroy:$J};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;Sj[j]=J}return Sj}export{bJ as vlist};
@@ -109,6 +109,12 @@ export interface BuilderContext<T extends VListItem = VListItem> {
109
109
  getCompressionContext(): CompressionContext;
110
110
  renderIfNeeded(): void;
111
111
  forceRender(): void;
112
+ /**
113
+ * Remove all rendered DOM elements and return them to the pool.
114
+ * Used by reload to force a full re-render from scratch, bypassing
115
+ * the ID-based optimization that skips template updates for same-ID items.
116
+ */
117
+ invalidateRendered(): void;
112
118
  /**
113
119
  * Get current render functions (for wrapping by selection/other plugins).
114
120
  * Call this BEFORE setRenderFns to capture the current functions.
@@ -13,6 +13,7 @@
13
13
  * - Near-bottom interpolation — smooth blending near the end of the list
14
14
  * - Cached compression state — recalculates only when total item count changes
15
15
  * - Smooth scroll interpolation — lerp-based wheel handling for cross-browser consistency
16
+ * - Touch scroll support — finger tracking + momentum for iOS Safari / mobile browsers
16
17
  *
17
18
  * No configuration needed — compression activates automatically when the total
18
19
  * height exceeds the browser limit, and deactivates when items are removed.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:Gj,getOwnPropertyNames:mJ,getOwnPropertyDescriptor:dJ}=Object,cJ=Object.prototype.hasOwnProperty;var xj=new WeakMap,lJ=(j)=>{var X=xj.get(j),$;if(X)return X;if(X=Gj({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")mJ(j).map((J)=>!cJ.call(X,J)&&Gj(X,J,{get:()=>j[J],enumerable:!($=dJ(j,J))||$.enumerable}));return xj.set(j,X),X};var sJ=(j,X)=>{for(var $ in X)Gj(j,$,{get:X[$],enumerable:!0,configurable:!0,set:(J)=>X[$]=()=>J})};var hj=(j,X)=>()=>(j&&(X=j(j=0)),X);var Ej=200,u2=50,dj=15,cj=2,lj=50,O2=16000000;var Y4=(j,X)=>{let $=X;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if($===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),$-1))},getTotalHeight:()=>$*j,getTotal:()=>$,rebuild:(J)=>{$=J},isVariable:()=>!1}},Z4=(j,X)=>{let $=X,J=new Float64Array(0),K=(q)=>{$=q,J=new Float64Array(q+1),J[0]=0;for(let Z=0;Z<q;Z++)J[Z+1]=J[Z]+j(Z)};K(X);let Q=(q)=>{if($===0)return 0;if(q<=0)return 0;if(q>=J[$])return $-1;let Z=0,G=$-1;while(Z<G){let B=Z+G+1>>>1;if(J[B]<=q)Z=B;else G=B-1}return Z};return{getOffset:(q)=>{if(q<=0)return 0;if(q>=$)return J[$];return J[q]},getHeight:(q)=>j(q),indexAtOffset:(q)=>Q(q),getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(q)=>K(q),isVariable:()=>!0}},sj=(j,X)=>{if(typeof j==="number")return Y4(j,X);return Z4(j,X)},Aj=(j,X,$,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil($/j.getHeight(0));let K=0,Q=0,q=X;while(q<J&&Q<$)Q+=j.getHeight(q),K++,q++;return Math.max(1,K)},r2=(j,X,$)=>{if($===0)return 0;if(!j.isVariable())return Math.floor(X/j.getHeight(0));let J=0,K=0;for(let Q=$-1;Q>=0;Q--){let q=j.getHeight(Q);if(K+q>X)break;K+=q,J++}return Math.max(J,1)},Fj=(j,X,$)=>{if($===0)return 0;let J=Math.floor(X),K=X-J,Q=Math.max(0,Math.min(J,$-1));return j.getOffset(Q)+K*j.getHeight(Q)};var M2=(j,X)=>{let $=X.getTotalHeight(),J=$>O2,K=J?O2:$,Q=$>0?K/$:1;return{isCompressed:J,actualHeight:$,virtualHeight:K,ratio:Q}},n2=(j,X,$,J,K,Q)=>{if(J===0||X===0)return Q.start=0,Q.end=-1,Q;if(!K.isCompressed){let W=$.indexAtOffset(j),U=$.indexAtOffset(j+X);if(U<J-1)U++;return Q.start=Math.max(0,W),Q.end=Math.min(J-1,Math.max(0,U)),Q}let{virtualHeight:q}=K,G=j/q*J,B=Math.floor(G),D=Aj($,Math.max(0,B),X,J),L=Math.ceil(G)+D,y=q-X-j;if(y<=X&&y>=-1){let W=r2($,X,J),U=Math.max(0,J-W),M=Math.max(0,Math.min(1,1-y/X));B=Math.floor(B+(U-B)*M),L=y<=1?J-1:Math.min(J-1,B+D)}return Q.start=Math.max(0,B),Q.end=Math.min(J-1,Math.max(0,L)),Q},aj=(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},R2=(j,X,$,J,K,Q,q)=>{if(!Q.isCompressed||J===0)return $.getOffset(j);let{virtualHeight:Z}=Q,G=Z-K,B=G-X;if(B<=K&&B>=-1){if(X>=G-1){let V=$.getTotalHeight()-$.getOffset(j);return K-V}let y=r2($,K,J),W=Math.max(0,J-y),M=X/Z*J,E=Math.max(0,Math.min(1,1-B/K)),F=$.getOffset(j)-$.getOffset(W),z=$.getOffset(j)-Fj($,M,J);return z+(F-z)*E}let D=X/Z,L=$.getTotalHeight(),O=D*L;return $.getOffset(j)-O},o2=(j,X,$,J,K,Q="start")=>{if(J===0)return 0;let q;if(K.isCompressed){if(Q==="end"&&j===J-1)return Math.max(0,K.virtualHeight-$);q=j/J*K.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 G=K.virtualHeight-$;return Math.max(0,Math.min(q,G))},rj=(j,X,$,J)=>{if($===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*$)}return X.indexAtOffset(j)},nj=(j,X)=>{if(typeof X==="number")return j*X>O2;return X.getTotalHeight()>O2},oj=(j)=>{if(j<=0)return 0;return Math.floor(O2/j)},ij=(j,X)=>{let $=M2(j,X);if(!$.isCompressed)return`No compression needed (${j} items, ${($.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${j} items, ${($.actualHeight/1e6).toFixed(1)}M px → ${($.virtualHeight/1e6).toFixed(1)}M px virtual)`};var i2=()=>{};var P2=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var _J={};sJ(_J,{createGridRenderer:()=>m2});var V4=(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}}},m2=(j,X,$,J,K,Q,q,Z)=>{let G=V4(),B=new Map,D=Q,L=!1,O=null,y=0,W="",U=(b)=>{if(O&&y===b)return O;return O=M2(b,$),y=b,O},M={selected:!1,focused:!1},E=(b,C)=>{return M.selected=b,M.focused=C,M},F=`${K}-item ${K}-grid-item`,z=`${K}-item--selected`,V=`${K}-item--focused`,H=(b,C)=>{if(typeof C==="string")b.innerHTML=C;else b.replaceChildren(C)},N=(b,C,h)=>{b.classList.toggle(z,C),b.classList.toggle(V,h)},w=(b,C)=>{let h=J.getRow(b);if(C){let m=C.totalItems,s=U(m);if(s.isCompressed)return R2(h,C.scrollTop,$,m,C.containerHeight,s,C.rangeStart)}return $.getOffset(h)},_=(b,C,h)=>{let m=b.dataset.id?.startsWith("__group_header"),s=m?0:J.getCol(C),r=m?0:J.getColumnOffset(s,D),q2;if(L){let B2=J.getRow(C),T=0,d=new Set;for(let x=0;x<C;x++){let J2=J.getRow(x);if(J2<B2&&!d.has(J2)){let i=$.getHeight(x);T+=i,d.add(J2)}}q2=T}else q2=w(C,h);b.style.transform=`translate(${Math.round(r)}px, ${Math.round(q2)}px)`},R=(b,C)=>{let h=b.dataset.id?.startsWith("__group_header"),m=h?D:J.getColumnWidth(D),s;if(L||h)s=$.getHeight(C)-J.gap;else{let r=J.getRow(C);s=$.getHeight(r)-J.gap}b.style.width=`${m}px`,b.style.height=`${s}px`},g=(b,C,h,m,s)=>{let r=G.acquire(),q2=E(h,m);if(r.className=F,r.dataset.index=String(b),r.dataset.id=String(C.id),r.dataset.row=String(J.getRow(b)),r.dataset.col=String(J.getCol(b)),r.ariaSelected=String(h),Z)r.id=`${Z}-item-${b}`;if(q)W=String(q()),r.setAttribute("aria-setsize",W),r.setAttribute("aria-posinset",String(b+1));R(r,b);let B2=X(C,b,q2);return H(r,B2),N(r,h,m),_(r,b,s),r},o=(b,C,h,m,s)=>{if(C.start===0&&b.length>0)L=P2(b[0]);for(let[T,d]of B)if(T<C.start||T>C.end)d.element.remove(),G.release(d.element),B.delete(T);let r=!1;if(q){let T=String(q());r=T!==W,W=T}let q2=document.createDocumentFragment(),B2=[];for(let T=C.start;T<=C.end;T++){let d=T-C.start,x=b[d];if(!x){console.warn(`⚠️ RENDER: Missing item at index ${T} (range: ${C.start}-${C.end}, items.length: ${b.length})`);continue}let J2=h.has(x.id),i=T===m,Q2=B.get(T);if(Q2){let v=Q2.element.dataset.id,f=String(x.id);if(v!==f){let $2=E(J2,i),l=X(x,T,$2);H(Q2.element,l),Q2.element.dataset.id=f,Q2.element.dataset.row=String(J.getRow(T)),Q2.element.dataset.col=String(J.getCol(T)),R(Q2.element,T)}if(N(Q2.element,J2,i),Q2.element.ariaSelected=String(J2),_(Q2.element,T,s),r)Q2.element.setAttribute("aria-setsize",W)}else{let v=g(T,x,J2,i,s);q2.appendChild(v),B2.push({index:T,element:v})}}if(B2.length>0){j.appendChild(q2);for(let{index:T,element:d}of B2)B.set(T,{index:T,element:d})}},c=(b)=>{for(let[C,h]of B)_(h.element,C,b)},e=(b,C,h,m)=>{let s=B.get(b);if(s){let r=E(h,m),q2=X(C,b,r);H(s.element,q2),N(s.element,h,m),s.element.dataset.id=String(C.id),s.element.ariaSelected=String(h),R(s.element,b)}},j2=(b,C,h)=>{let m=B.get(b);if(m)N(m.element,C,h)},k=(b)=>{return B.get(b)?.element},S=(b)=>{if(Math.abs(b-D)<1)return;D=b;for(let[C,h]of B)R(h.element,C),_(h.element,C)},p=()=>{for(let[,b]of B)b.element.remove(),G.release(b.element);B.clear()};return{render:o,updatePositions:c,updateItem:e,updateItemClasses:j2,getElement:k,updateContainerWidth:S,clear:p,destroy:()=>{p(),G.clear()}}};var Kj=hj(()=>{i2()});var aJ=0,H2=5,rJ=100,Mj=2,nJ=(j=0)=>{let X=Array(H2);for(let $=0;$<H2;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},oJ=(j,X)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>rJ){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 K=j.samples[j.sampleIndex];if(K.position=X,K.time=$,j.sampleIndex=(j.sampleIndex+1)%H2,j.sampleCount=Math.min(j.sampleCount+1,H2),j.sampleCount>=Mj){let Q=(j.sampleIndex-j.sampleCount+H2)%H2,q=j.samples[Q],Z=X-q.position,G=$-q.time;j.velocity=G>0?Math.abs(Z)/G:0}return j.lastPosition=X,j.lastTime=$,j},gj=(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),K=(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 K(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 G=q+Z+1>>>1;if(J[G]<=Q)q=G;else Z=G-1}return q},getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(Q)=>K(Q),isVariable:()=>!0}},iJ=()=>{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(G){console.error(`[vlist] Error in "${Q}" handler:`,G)}})},clear:()=>{for(let Q in j)delete j[Q]}}},tJ=(j)=>{if(typeof j==="string"){let X=document.querySelector(j);if(!X)throw Error(`[vlist/builder] Container not found: ${j}`);return X}return j},eJ=(j,X,$,J)=>{let K=document.createElement("div");if(K.className=X,J)K.classList.add(`${X}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),$)K.setAttribute("aria-label",$);if(J)K.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),K.appendChild(Q),j.appendChild(K),{root:K,viewport:Q,content:q,items:Z}},j4=(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}}},J4=(j,X,$,J,K)=>{if(J===0||X===0){K.start=0,K.end=0;return}let Q=$.indexAtOffset(j),q=$.indexAtOffset(j+X);if(q<J-1)q++;K.start=Math.max(0,Q),K.end=Math.min(J-1,Math.max(0,q))},$4=(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)},Q4=(j,X,$,J,K)=>{if(J===0)return 0;let Q=Math.max(0,Math.min(j,J-1)),q=X.getOffset(Q),Z=X.getHeight(Q),G=Math.max(0,X.getTotalHeight()-$),B;switch(K){case"center":B=q-($-Z)/2;break;case"end":B=q-$+Z;break;default:B=q}return Math.max(0,Math.min(B,G))},X4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,q4=(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}},mj=(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 K=new Map,Q=!1,q={use(Z){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(Z.name,Z),q},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,K4(j,K,X,J)}};return q};function K4(j,X,$,J){let{item:K,items:Q,overscan:q=3,classPrefix:Z="vlist",ariaLabel:G,reverse:B=!1,scroll:D}=j,L=D?.wheel??!0,O=D?.wrap??!1,y=B,W=`${Z}-${aJ++}`,U=J,M=$?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,E=K.template,F={overscan:q,classPrefix:Z,reverse:y,wrap:O,horizontal:$,ariaIdPrefix:W},z=Array.from(X.values()).sort((Y,A)=>(Y.priority??50)-(A.priority??50)),V=new Set(z.map((Y)=>Y.name));for(let Y of z)if(Y.conflicts){for(let A of Y.conflicts)if(V.has(A))throw Error(`[vlist/builder] ${Y.name} and ${A} cannot be combined`)}if($){if(V.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(V.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(y){if(V.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let H=tJ(j.container),N=eJ(H,Z,G,$),w=iJ(),_=Q?[...Q]:[],R=gj(U,_.length),g=j4(),o=N.viewport.clientHeight,c=N.viewport.clientWidth,e=!1,j2=!1,k=0,S=null,p=null,u=nJ(0),b={start:0,end:0},C={start:0,end:0},h={start:-1,end:-1},m={viewportState:{scrollTop:0,containerHeight:o,totalHeight:R.getTotalHeight(),actualHeight:R.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},s=new Map,r={selected:!1,focused:!1},q2=`${Z}-item`,B2="",T=new Map,d=()=>{T.clear();for(let Y=0;Y<_.length;Y++){let A=_[Y];if(A)T.set(A.id,Y)}};d();let x=null,J2=()=>x?x.getTotal():_.length,i=[],Q2=[],v=[],f=[],n=[],$2=[],l=new Map,X2=()=>{return $?N.viewport.scrollLeft:N.viewport.scrollTop},K2=(Y)=>{if($)N.viewport.scrollLeft=Y;else N.viewport.scrollTop=Y},A2=(Y=2)=>{let A=R.getTotalHeight();return k+o>=A-Y},U2=!1,Y2,_2,D2=(Y,A,P,I,t)=>{J4(Y,A,P,I,t)},G2=(Y,A,P,I,t)=>{return Q4(Y,A,P,I,t)},N2=(Y,A)=>{if(typeof A==="string")Y.innerHTML=A;else Y.replaceChildren(A)},F2=(Y,A)=>{let P=Math.round(R.getOffset(A));if($)Y.style.transform=`translateX(${P}px)`;else Y.style.transform=`translateY(${P}px)`},OJ=(Y,A)=>{let P=g.acquire();if(P.className=q2,$){if(P.style.width=`${R.getHeight(Y)}px`,M!=null)P.style.height=`${M}px`}else P.style.height=`${R.getHeight(Y)}px`;if(P.dataset.index=String(Y),P.dataset.id=String(A.id),P.ariaSelected="false",P.id=`${W}-item-${Y}`,B2=String(J2()),P.setAttribute("aria-setsize",B2),P.setAttribute("aria-posinset",String(Y+1)),String(A.id).startsWith("__placeholder_"))P.classList.add(`${Z}-item--placeholder`);return N2(P,E(A,Y,r)),F2(P,Y),P},v2=()=>{let Y=`${R.getTotalHeight()}px`;if($)N.content.style.width=Y;else N.content.style.height=Y},Dj=new Set,Wj=-1,zJ=()=>{if(e)return;let Y=J2();if(D2(k,o,R,Y,b),$4(b,q,Y,C),C.start===h.start&&C.end===h.end){if(U2)for(let[a,W2]of s)F2(W2,a);return}let A=String(Y),P=A!==B2;B2=A;for(let[a,W2]of s)if(a<C.start||a>C.end)W2.remove(),g.release(W2),s.delete(a);let I=document.createDocumentFragment(),t=[];for(let a=C.start;a<=C.end;a++){let W2=x?x.getItem(a):_[a];if(!W2)continue;let Z2=s.get(a);if(Z2){let E2=Z2.dataset.id,I2=String(W2.id);if(E2!==I2){let gJ=E2?.startsWith("__placeholder_"),uj=I2.startsWith("__placeholder_");if(N2(Z2,E(W2,a,r)),Z2.dataset.id=I2,$)Z2.style.width=`${R.getHeight(a)}px`;else Z2.style.height=`${R.getHeight(a)}px`;if(uj)Z2.classList.add(`${Z}-item--placeholder`);else Z2.classList.remove(`${Z}-item--placeholder`);if(gJ&&!uj)Z2.classList.add(`${Z}-item--replaced`),setTimeout(()=>{Z2.classList.remove(`${Z}-item--replaced`)},300)}F2(Z2,a);let a2=Dj.has(W2.id),hJ=a===Wj;if(Z2.classList.toggle(`${Z}-item--selected`,a2),Z2.classList.toggle(`${Z}-item--focused`,hJ),Z2.ariaSelected=a2?"true":"false",P)Z2.setAttribute("aria-setsize",B2)}else{let E2=OJ(a,W2),I2=Dj.has(W2.id),a2=a===Wj;if(I2)E2.classList.add(`${Z}-item--selected`),E2.ariaSelected="true";if(a2)E2.classList.add(`${Z}-item--focused`);I.appendChild(E2),t.push({index:a,element:E2})}}if(t.length>0){N.items.appendChild(I);for(let{index:a,element:W2}of t)s.set(a,W2)}h.start=C.start,h.end=C.end,m.lastRenderRange.start=C.start,m.lastRenderRange.end=C.end,m.viewportState.scrollTop=k,m.viewportState.visibleRange.start=b.start,m.viewportState.visibleRange.end=b.end,m.viewportState.renderRange.start=C.start,m.viewportState.renderRange.end=C.end,w.emit("range:change",{range:{start:C.start,end:C.end}})},bJ=()=>{h.start=-1,h.end=-1,Y2()};Y2=zJ,_2=bJ;let f2=()=>{if(e)return;let Y=X2(),A=Y>=k?"down":"up";if(u=oJ(u,Y),!N.root.classList.contains(`${Z}--scrolling`))N.root.classList.add(`${Z}--scrolling`);k=Y,Y2(),w.emit("scroll",{scrollTop:Y,direction:A}),w.emit("velocity:change",{velocity:u.velocity,reliable:u.sampleCount>=Mj});for(let P=0;P<i.length;P++)i[P](Y,A);if(p)clearTimeout(p);p=setTimeout(()=>{N.root.classList.remove(`${Z}--scrolling`),u.velocity=0,u.sampleCount=0,w.emit("velocity:change",{velocity:0,reliable:!1})},D?.idleTimeout??150)},l2=null,y2=N.viewport;if(y2.addEventListener("scroll",f2,{passive:!0}),$&&L)l2=(Y)=>{if(Y.deltaX)return;Y.preventDefault(),N.viewport.scrollLeft+=Y.deltaY},N.viewport.addEventListener("wheel",l2);let Sj=(Y)=>{let P=Y.target.closest("[data-index]");if(P){let I=parseInt(P.dataset.index??"-1",10);if(I>=0){let t=x?.getItem(I)??_[I];if(t){if(t.__groupHeader)return;w.emit("item:click",{item:t,index:I,event:Y})}}}for(let I=0;I<Q2.length;I++)Q2[I](Y)},PJ=(Y)=>{let P=Y.target.closest("[data-index]");if(P){let I=parseInt(P.dataset.index??"-1",10);if(I>=0){let t=x?.getItem(I)??_[I];if(t){if(t.__groupHeader)return;w.emit("item:dblclick",{item:t,index:I,event:Y})}}}},vj=(Y)=>{for(let A=0;A<v.length;A++)v[A](Y)};N.items.addEventListener("click",Sj),N.items.addEventListener("dblclick",PJ),N.root.addEventListener("keydown",vj);let Nj=!0,yJ=()=>c,HJ=()=>o,Vj=new ResizeObserver((Y)=>{if(e)return;for(let A of Y){let P=A.contentRect.height,I=A.contentRect.width,t=$?I:P;if(c=I,Math.abs(t-o)>1){if(o=t,m.viewportState.containerHeight=t,j2)v2(),Y2(),w.emit("resize",{height:P,width:I})}if(j2)for(let a=0;a<f.length;a++)f[a](I,P)}});if(Nj)Vj.observe(N.viewport);let V2={get dom(){return N},get heightCache(){return R},get emitter(){return w},get config(){return F},get rawConfig(){return j},get renderer(){return{render:(Y,A,P,I,t)=>{Dj=P,Wj=I,_2()},updateItemClasses:(Y,A,P)=>{let I=s.get(Y);if(!I)return;I.classList.toggle(`${Z}-item--selected`,A),I.classList.toggle(`${Z}-item--focused`,P),I.ariaSelected=A?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Y)=>s.get(Y)??null,clear:()=>{},destroy:()=>{}}},set renderer(Y){},get dataManager(){return x},set dataManager(Y){x=Y},get scrollController(){return _j},set scrollController(Y){_j=Y},state:m,getContainerWidth(){return c},afterScroll:i,clickHandlers:Q2,keydownHandlers:v,resizeHandlers:f,contentSizeHandlers:n,destroyHandlers:$2,methods:l,replaceTemplate(Y){E=Y},replaceRenderer(Y){},replaceDataManager(Y){x=Y},replaceScrollController(Y){_j=Y},getItemsForRange(Y){let A=[];for(let P=Y.start;P<=Y.end;P++){let I=x?x.getItem(P):_[P];if(I)A.push(I)}return A},getAllLoadedItems(){if(x){let Y=x.getTotal(),A=[];for(let P=0;P<Y;P++){let I=x.getItem(P);if(I)A.push(I)}return A}return[..._]},getVirtualTotal(){return J2()},getCachedCompression(){return{isCompressed:!1,actualHeight:R.getTotalHeight(),virtualHeight:R.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:k,totalItems:J2(),containerHeight:o,rangeStart:C.start}},renderIfNeeded(){Y2()},forceRender(){_2()},getRenderFns(){return{renderIfNeeded:Y2,forceRender:_2}},setRenderFns(Y,A){Y2=Y,_2=A},setVirtualTotalFn(Y){J2=Y},rebuildHeightCache(Y){R.rebuild(Y??J2())},setHeightConfig(Y){R=gj(Y,J2())},updateContentSize(Y){let A=`${Y}px`;if($)N.content.style.width=A;else N.content.style.height=A},updateCompressionMode(){},setVisibleRangeFn(Y){D2=Y},setScrollToPosFn(Y){G2=Y},setPositionElementFn(Y){F2=Y},setScrollFns(Y,A){X2=Y,K2=(P)=>{A(P),f2()}},setScrollTarget(Y){y2.removeEventListener("scroll",f2),y2=Y,y2.addEventListener("scroll",f2,{passive:!0})},getScrollTarget(){return y2},setContainerDimensions(Y){yJ=Y.width,HJ=Y.height,c=Y.width(),o=Y.height(),m.viewportState.containerHeight=o},disableViewportResize(){if(Nj)Nj=!1,Vj.unobserve(N.viewport)}};x={getState:()=>({total:_.length,cached:_.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>_.length,getCached:()=>_.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>_[Y],getItemById:(Y)=>{let A=T.get(Y);return A!==void 0?_[A]:void 0},getIndexById:(Y)=>T.get(Y)??-1,isItemLoaded:(Y)=>Y>=0&&Y<_.length&&_[Y]!==void 0,getItemsInRange:(Y,A)=>{let P=[],I=Math.max(0,Y),t=Math.min(A,_.length-1);for(let a=I;a<=t;a++)P.push(_[a]);return P},setTotal:(Y)=>{},setItems:(Y,A=0,P)=>{if(A===0&&(P!==void 0||_.length===0))_=[...Y];else{let I=A+Y.length;if(_.length<I)_.length=I;for(let t=0;t<Y.length;t++)_[A+t]=Y[t]}if(d(),j2){R.rebuild(J2()),v2(),V2.updateCompressionMode();for(let I=0;I<n.length;I++)n[I]();_2()}},updateItem:(Y,A)=>{let P=T.get(Y);if(P===void 0)return!1;let I=_[P];if(!I)return!1;if(_[P]={...I,...A},A.id!==void 0&&A.id!==Y)T.delete(Y),T.set(A.id,P);let t=s.get(P);if(t)N2(t,E(_[P],P,r)),t.dataset.id=String(_[P].id);return!0},removeItem:(Y)=>{let A=T.get(Y);if(A===void 0)return!1;if(_.splice(A,1),d(),j2){R.rebuild(J2()),v2(),V2.updateCompressionMode();for(let P=0;P<n.length;P++)n[P]();_2()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{_=[],T.clear()},reset:()=>{if(_=[],T.clear(),j2)R.rebuild(0),v2(),_2()}};let _j={getScrollTop:()=>X2(),scrollTo:(Y)=>{K2(Y),k=Y,Y2()},scrollBy:(Y)=>{let A=X2()+Y;K2(A),k=A,Y2()},isAtTop:()=>k<=2,isAtBottom:(Y=2)=>A2(Y),getScrollPercentage:()=>{let Y=R.getTotalHeight(),A=Math.max(0,Y-o);return A>0?k/A:0},getVelocity:()=>u.velocity,isTracking:()=>u.sampleCount>=Mj,isScrolling:()=>N.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{U2=!0},disableCompression:()=>{U2=!1},isCompressed:()=>U2,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{o=Y},destroy:()=>{}},fj=new Map;for(let Y of z)if(Y.methods)for(let A of Y.methods){let P=fj.get(A);if(P)throw Error(`[vlist/builder] Method "${A}" is registered by both "${P}" and "${Y.name}"`);fj.set(A,Y.name)}for(let Y of z)Y.setup(V2);if(j2=!0,V2.state.isInitialized=!0,v2(),Y2(),y&&_.length>0){let Y=G2(_.length-1,R,o,_.length,"end");K2(Y),k=Y,Y2()}let RJ=(Y)=>{V2.dataManager.setItems(Y,0,Y.length)},kJ=y?(Y)=>{let A=A2(2),P=_.length;if(V2.dataManager.setItems(Y,P),A&&_.length>0){let I=G2(_.length-1,R,o,_.length,"end");K2(I),k=I,Y2()}}:(Y)=>{let A=_.length;V2.dataManager.setItems(Y,A)},TJ=y?(Y)=>{let A=X2(),P=R.getTotalHeight(),I=[..._];V2.dataManager.clear(),V2.dataManager.setItems([...Y,...I],0);let a=R.getTotalHeight()-P;if(a>0)K2(A+a),k=A+a}:(Y)=>{let A=[..._];V2.dataManager.clear(),V2.dataManager.setItems([...Y,...A],0)},CJ=(Y,A)=>{V2.dataManager.updateItem(Y,A)},wJ=(Y)=>{V2.dataManager.removeItem(Y)},SJ=async()=>{if(V2.dataManager.reload)await V2.dataManager.reload()},s2=()=>{if(S!==null)cancelAnimationFrame(S),S=null},vJ=(Y,A,P)=>{if(s2(),Math.abs(A-Y)<1){K2(A),k=A,Y2();return}let I=performance.now(),t=(a)=>{let W2=a-I,Z2=Math.min(W2/P,1),E2=Y+(A-Y)*X4(Z2);if(K2(E2),k=E2,Y2(),Z2<1)S=requestAnimationFrame(t);else S=null};S=requestAnimationFrame(t)},Ij=(Y,A)=>{let{align:P,behavior:I,duration:t}=q4(A),a=J2(),W2=Y;if(O&&a>0)W2=(W2%a+a)%a;let Z2=G2(W2,R,o,a,P);if(I==="smooth")vJ(X2(),Z2,t);else s2(),K2(Z2)},fJ=(Y,A)=>{let P=T.get(Y)??V2.dataManager.getIndexById(Y);if(P>=0)Ij(P,A)},IJ=()=>X2(),pJ=(Y,A)=>{return w.on(Y,A)},uJ=(Y,A)=>{w.off(Y,A)},xJ=()=>{if(e)return;if(e=!0,V2.state.isDestroyed=!0,N.items.removeEventListener("click",Sj),N.root.removeEventListener("keydown",vj),y2.removeEventListener("scroll",f2),Vj.disconnect(),l2)N.viewport.removeEventListener("wheel",l2);if(p)clearTimeout(p);for(let Y=0;Y<$2.length;Y++)$2[Y]();for(let Y of z)if(Y.destroy)Y.destroy();s2();for(let[,Y]of s)Y.remove(),g.release(Y);s.clear(),g.clear(),w.clear(),N.root.remove()},pj={get element(){return N.root},get items(){if(l.has("_getItems"))return l.get("_getItems")();return _},get total(){if(l.has("_getTotal"))return l.get("_getTotal")();return J2()},setItems:l.has("setItems")?l.get("setItems"):RJ,appendItems:l.has("appendItems")?l.get("appendItems"):kJ,prependItems:l.has("prependItems")?l.get("prependItems"):TJ,updateItem:l.has("updateItem")?l.get("updateItem"):CJ,removeItem:l.has("removeItem")?l.get("removeItem"):wJ,reload:l.has("reload")?l.get("reload"):SJ,scrollToIndex:l.has("scrollToIndex")?l.get("scrollToIndex"):Ij,scrollToItem:l.has("scrollToItem")?l.get("scrollToItem"):fJ,cancelScroll:l.has("cancelScroll")?l.get("cancelScroll"):s2,getScrollPosition:l.has("getScrollPosition")?l.get("getScrollPosition"):IJ,on:pJ,off:uJ,destroy:xJ};for(let[Y,A]of l){if(Y==="setItems"||Y==="appendItems"||Y==="prependItems"||Y==="updateItem"||Y==="removeItem"||Y==="reload"||Y==="scrollToIndex"||Y==="scrollToItem"||Y==="cancelScroll"||Y==="getScrollPosition")continue;pj[Y]=A}return pj}i2();var k2=(j,X,$={},J="vlist",K=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:G=!0,hoverZoneWidth:B=16,showOnViewportEnter:D=!0}=$,L=0,O=0,y=0,W=0,U=!1,M=!1,E=0,F=0,z=0,V=null,H=!1,N=null,w=null,_=K?"width":"height",R=K?"translateX":"translateY",g=K?(i)=>i.clientX:(i)=>i.clientY,o=K?"left":"top",c=document.createElement("div"),e=document.createElement("div"),j2=G?document.createElement("div"):null,k=()=>{if(c.className=`${J}-scrollbar`,e.className=`${J}-scrollbar-thumb`,K)c.classList.add(`${J}-scrollbar--horizontal`);if(c.appendChild(e),j.appendChild(c),j2){if(j2.className=`${J}-scrollbar-hover`,K)j2.classList.add(`${J}-scrollbar-hover--horizontal`),j2.style.height=`${B}px`;else j2.style.width=`${B}px`;j.appendChild(j2)}},S=()=>{if(V)clearTimeout(V),V=null},p=()=>{if(!Q)return;S(),V=setTimeout(b,q)},u=()=>{if(L<=O)return;if(S(),!H)c.classList.add(`${J}-scrollbar--visible`),H=!0;if(Q&&!U&&!M)p()},b=()=>{if(U||M)return;c.classList.remove(`${J}-scrollbar--visible`),H=!1},C=(i,Q2)=>{L=i,O=Q2;let v=L>O;if(c.style.display=v?"":"none",!v){b();return}let f=O/L;y=Math.max(Z,f*O),e.style[_]=`${y}px`,W=O-y,h(z)},h=(i)=>{if(z=i,L<=O||W<=0)return;let Q2=L-O,f=Math.min(1,Math.max(0,i/Q2))*W;e.style.transform=`${R}(${f}px)`},m=(i)=>{if(i.target===e)return;let Q2=c.getBoundingClientRect(),n=g(i)-Q2[o]-y/2,l=Math.max(0,Math.min(n,W))/W,X2=L-O,K2=l*X2;X(K2),u()},s=(i)=>{i.preventDefault(),i.stopPropagation(),U=!0,E=g(i),F=z,S(),c.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",r),document.addEventListener("mouseup",q2)},r=(i)=>{if(!U)return;let Q2=g(i)-E,v=W>0?Q2/W:0,f=L-O,n=v*f,$2=Math.max(0,Math.min(F+n,f)),X2=$2/f*W;if(e.style.transform=`${R}(${X2}px)`,w=$2,N===null)N=requestAnimationFrame(()=>{if(w!==null)X(w);N=null})},q2=()=>{if(U=!1,N!==null)cancelAnimationFrame(N),N=null;if(w!==null)X(w),w=null;if(c.classList.remove(`${J}-scrollbar--dragging`),Q&&!M)p();document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",q2)},B2=()=>{if(D)u()},T=()=>{if(!U){if(M=!1,Q)p()}},d=()=>{M=!0,S(),u()},x=()=>{if(M=!1,!U&&Q)p()},J2=()=>{if(S(),N!==null)cancelAnimationFrame(N),N=null;if(c.removeEventListener("click",m),c.removeEventListener("mouseenter",d),c.removeEventListener("mouseleave",x),e.removeEventListener("mousedown",s),j.removeEventListener("mouseenter",B2),j.removeEventListener("mouseleave",T),document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",q2),j2){if(j2.removeEventListener("mouseenter",d),j2.removeEventListener("mouseleave",x),j2.parentNode)j2.parentNode.removeChild(j2)}if(c.parentNode)c.parentNode.removeChild(c)};if(k(),c.addEventListener("click",m),c.addEventListener("mouseenter",d),c.addEventListener("mouseleave",x),e.addEventListener("mousedown",s),j.addEventListener("mouseenter",B2),j.addEventListener("mouseleave",T),j2)j2.addEventListener("mouseenter",d),j2.addEventListener("mouseleave",x);return{show:u,hide:b,updateBounds:C,updatePosition:h,isVisible:()=>H,destroy:J2}};var tj=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup($){let{dom:J,config:K}=$,{classPrefix:Q,horizontal:q}=K;if(X=k2(J.viewport,(B)=>$.scrollController.scrollTo(B),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 G=X;$.afterScroll.push((B,D)=>{G.updatePosition(B),G.show()}),$.resizeHandlers.push((B,D)=>{if(G){let L=$.getCachedCompression();G.updateBounds(L.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(G){let B=$.getCachedCompression();G.updateBounds(B.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(G)G.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var ej=(j=0)=>{let X=[,,,,,,,,];for(let $=0;$<8;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},t2=(j,X)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>100){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 K=j.samples[j.sampleIndex];if(K.position=X,K.time=$,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let Q=(j.sampleIndex-j.sampleCount+8)%8,q=j.samples[Q],Z=X-q.position,G=$-q.time;j.velocity=G>0?Z/G:0}return j.lastPosition=X,j.lastTime=$,j},B4=(j)=>j.sampleCount>=3,jJ=(j,X={})=>{let{wheel:$=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:Q=150,onScroll:q,onIdle:Z,scrollElement:G,horizontal:B=!1}=X,D=!!G,L=0,O=0,y=D?B?window.innerWidth:window.innerHeight:B?j.clientWidth:j.clientHeight,W=X.compressed??!1,U=X.compression,M=ej(),E=!1,F=null,V=e2(()=>{let T=B?j.scrollLeft:j.scrollTop,d=T>=L?"down":"up";if(M=t2(M,T),L=T,q)q({scrollTop:L,direction:d,velocity:M.velocity});g()}),N=e2(()=>{let T=j.getBoundingClientRect(),d=B?Math.max(0,-T.left):Math.max(0,-T.top),x=d>=L?"down":"up";if(M=t2(M,d),L=d,!E)E=!0;if(q)q({scrollTop:L,direction:x,velocity:M.velocity});g()}),w=(T)=>{T.preventDefault()},_=(T)=>{if(T.deltaX)return;T.preventDefault(),j.scrollLeft+=T.deltaY},R=(T)=>{if(!W)return;T.preventDefault();let d=(B?T.deltaX||T.deltaY:T.deltaY)*J,x=L+d;if(K)x=L+d*0.3;if(x=Math.max(0,Math.min(x,O)),x!==L){let i=x>=L?"down":"up";if(M=t2(M,x),L=x,!E)E=!0;if(q)q({scrollTop:L,direction:i,velocity:M.velocity});g()}},g=()=>{if(F)clearTimeout(F);F=setTimeout(()=>{if(E=!1,M=ej(L),Z)Z()},Q)},o=(T)=>{if(W)return;if(W=!0,U=T,O=T.virtualHeight-y,D)return;if(V.cancel(),j.removeEventListener("scroll",V),!$)j.removeEventListener("wheel",w);else if(B)j.removeEventListener("wheel",_);if(B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",R,{passive:!1});let d=B?j.scrollLeft:j.scrollTop;if(d>0){let x=B?U?.actualHeight??j.scrollWidth:U?.actualHeight??j.scrollHeight;L=d/x*O}if(B)j.scrollLeft=0;else j.scrollTop=0},c=()=>{if(!W)return;if(W=!1,D){U=void 0;return}if(j.removeEventListener("wheel",R),B)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",V,{passive:!0}),!$)j.addEventListener("wheel",w,{passive:!1});else if(B)j.addEventListener("wheel",_,{passive:!1});if(U&&L>0){let d=L/O*(U.actualHeight-y);if(B)j.scrollLeft=d;else j.scrollTop=d}U=void 0},e=()=>{if(D||W)return L;return B?j.scrollLeft:j.scrollTop},j2=(T,d=!1)=>{let x=Math.max(0,Math.min(T,O||1/0));if(D){let J2=j.getBoundingClientRect();if(B){let i=J2.left+window.scrollX;window.scrollTo({left:i+x,behavior:d?"smooth":"auto"})}else{let i=J2.top+window.scrollY;window.scrollTo({top:i+x,behavior:d?"smooth":"auto"})}}else if(W){if(x===L)return;let i=x>=L?"down":"up";if(M=t2(M,x),L=x,!E)E=!0;if(q)q({scrollTop:L,direction:i,velocity:M.velocity});g()}else if(B)j.scrollTo({left:x,behavior:d?"smooth":"auto"});else j.scrollTo({top:x,behavior:d?"smooth":"auto"})},k=(T)=>{j2(e()+T)},S=()=>{return e()<=0},p=(T=0)=>{let d=e(),x=D||W?O:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return d>=x-T},u=()=>{let T=e(),d=D||W?O:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(d<=0)return 0;return Math.min(1,Math.max(0,T/d))},b=(T)=>{if(T.compression)U=T.compression,O=U.virtualHeight-y},C=()=>W,h=()=>Math.abs(M.velocity),m=()=>B4(M),s=()=>E,r=()=>D,q2=(T)=>{if(y=T,U)O=U.virtualHeight-y},B2=()=>{if(F)clearTimeout(F);if(D)N.cancel(),window.removeEventListener("scroll",N);else V.cancel(),j.removeEventListener("scroll",V),j.removeEventListener("wheel",R),j.removeEventListener("wheel",w),j.removeEventListener("wheel",_)};if(D){if(W&&U)O=U.virtualHeight-y;window.addEventListener("scroll",N,{passive:!0})}else if(W&&U){if(O=U.virtualHeight-y,B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",R,{passive:!1})}else{if(B)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",V,{passive:!0}),!$)j.addEventListener("wheel",w,{passive:!1});else if(B)j.addEventListener("wheel",_,{passive:!1})}return{getScrollTop:e,scrollTo:j2,scrollBy:k,isAtTop:S,isAtBottom:p,getScrollPercentage:u,getVelocity:h,isTracking:m,isScrolling:s,updateConfig:b,enableCompression:o,disableCompression:c,isCompressed:C,isWindowMode:r,updateContainerHeight:q2,destroy:B2}},e2=(j)=>{let X=null,$=null,J=(...K)=>{if($=K,X===null)X=requestAnimationFrame(()=>{if(X=null,$)j(...$)})};return J.cancel=()=>{if(X!==null)cancelAnimationFrame(X),X=null},J};var U4=0.65,D4=0.5,JJ=()=>{let j=null,X=0,$=!1,J=0,K=null;return{name:"withScale",priority:20,setup(Q){let{dom:q,config:Z}=Q,{classPrefix:G,horizontal:B}=Z,D=()=>{let W=Q.getVirtualTotal(),U=M2(W,Q.heightCache);if(U.isCompressed&&!$){$=!0,Q.scrollController.enableCompression(U),Q.updateContentSize(U.virtualHeight),Q.setScrollFns(()=>X,(V)=>{if(X=V,J=V,K!==null)cancelAnimationFrame(K),K=null});let M=()=>{let V=J-X;if(Math.abs(V)<D4)X=J,K=null;else X+=V*U4,K=requestAnimationFrame(M);Q.scrollController.scrollTo(X)},E=q.viewport,F=(V)=>{V.preventDefault();let N=Q.getCachedCompression().virtualHeight-Q.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+V.deltaY,N)),K===null)K=requestAnimationFrame(M)};if(E.addEventListener("wheel",F,{passive:!1}),Q.destroyHandlers.push(()=>{if(E.removeEventListener("wheel",F),K!==null)cancelAnimationFrame(K),K=null}),!q.viewport.querySelector(`.${G}-scrollbar-track`)){if(j=k2(q.viewport,(H)=>Q.scrollController.scrollTo(H),{},G,B),!q.viewport.classList.contains(`${G}-viewport--custom-scrollbar`))q.viewport.classList.add(`${G}-viewport--custom-scrollbar`);j.updateBounds(U.virtualHeight,Q.state.viewportState.containerHeight);let V=j;Q.afterScroll.push((H,N)=>{if(V)V.updatePosition(H),V.show()}),Q.resizeHandlers.push((H,N)=>{if(V){let w=Q.getCachedCompression();V.updateBounds(w.virtualHeight,Q.state.viewportState.containerHeight)}})}}else if(!U.isCompressed&&$)$=!1,Q.scrollController.disableCompression(),Q.updateContentSize(U.actualHeight);else if(U.isCompressed)Q.scrollController.updateConfig({compression:U}),Q.updateContentSize(U.virtualHeight);if(j)j.updateBounds(U.virtualHeight,Q.state.viewportState.containerHeight);Q.state.cachedCompression={state:U,totalItems:W}};Q.updateCompressionMode=D;let L=Q.getCachedCompression.bind(Q);Q.getCachedCompression=()=>{if(Q.state.cachedCompression)return Q.state.cachedCompression.state;return L()},Q.setVisibleRangeFn((W,U,M,E,F)=>{O=null,y=null;let z=M2(E,M);n2(W,U,M,E,z,F)}),Q.setScrollToPosFn((W,U,M,E,F)=>{let z=M2(E,U);return o2(W,U,M,E,z,F)});let O=null,y=null;Q.setPositionElementFn((W,U)=>{let M=Q.getVirtualTotal(),E=M2(M,Q.heightCache);if(E.isCompressed){let F=Q.scrollController.getScrollTop();if(O===null||U<y)y=U,O=Math.round(R2(U,F,Q.heightCache,M,Q.state.viewportState.containerHeight,E));let z=O+Q.heightCache.getOffset(U)-Q.heightCache.getOffset(y),V=Q.config.horizontal;W.style.transform=V?`translateX(${z}px)`:`translateY(${z}px)`}else{let F=Math.round(Q.heightCache.getOffset(U)),z=Q.config.horizontal;W.style.transform=z?`translateX(${F}px)`:`translateY(${F}px)`}}),D(),Q.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null}}};var jj=(j={})=>{let{chunkSize:X=100,maxCachedItems:$=5000,evictionBuffer:J=200,onEvict:K}=j,Q=new Map,q=0,Z=0,G=(k)=>{let S=Q.get(k);if(!S)S={items:Array(X),count:0,lastAccess:Date.now()},Q.set(k,S);else S.lastAccess=Date.now();return S},B=(k)=>{return Math.floor(k/X)},D=(k)=>{return k%X},L=()=>q,O=(k)=>{q=k},y=(k)=>{if(k<0||k>=q)return;let S=B(k),p=Q.get(S);if(!p)return;return p.items[D(k)]},W=(k)=>{if(k<0||k>=q)return!1;let S=B(k),p=Q.get(S);if(!p)return!1;return p.items[D(k)]!==void 0},U=(k,S)=>{let p=B(k),u=G(p),b=D(k),C=u.items[b]===void 0;if(u.items[b]=S,C)u.count++,Z++;if(k>=q)q=k+1},M=(k,S)=>{for(let p=0;p<S.length;p++){let u=S[p];if(u!==void 0)U(k+p,u)}},E=(k)=>{if(k<0||k>=q)return!1;let S=B(k),p=Q.get(S);if(!p)return!1;let u=D(k);if(p.items[u]===void 0)return!1;if(p.items[u]=void 0,p.count--,Z--,p.count===0)Q.delete(S);return!0},F=(k,S)=>{let p=[];for(let u=k;u<=S&&u<q;u++)p.push(y(u));return p},z=(k,S)=>{for(let p=k;p<=S&&p<q;p++)if(!W(p))return!1;return!0},V=()=>{let k=[],S=null,p=Array.from(Q.keys()).sort((u,b)=>u-b);for(let u of p){let b=Q.get(u);if(!b)continue;let C=u*X;for(let h=0;h<X;h++){let m=C+h;if(m>=q)break;if(b.items[h]!==void 0)if(S===null)S={start:m,end:m};else if(m===S.end+1)S.end=m;else k.push(S),S={start:m,end:m};else if(S!==null)k.push(S),S=null}}if(S!==null)k.push(S);return k},H=(k,S)=>{let p=[],u=null;for(let b=k;b<=S&&b<q;b++)if(!W(b))if(u===null)u={start:b,end:b};else u.end=b;else if(u!==null)p.push(u),u=null;if(u!==null)p.push(u);return p},N=(k)=>{return Q.has(k)},w=(k)=>{let S=Q.get(k);if(S)S.lastAccess=Date.now()},_=(k,S)=>{if(k>S||Q.size===0)return;let p=Date.now(),u=B(Math.max(0,k)),b=B(Math.min(q-1,S));for(let C=u;C<=b;C++){let h=Q.get(C);if(h)h.lastAccess=p}},R=(k,S)=>{if(Z<=$)return 0;let p=Math.max(0,k-J),u=Math.min(q-1,S+J),b=B(p),C=B(u),h=0,m=[];for(let[s,r]of Q)if(s<b||s>C)h+=r.count,m.push(s),Z-=r.count,Q.delete(s);if(h>0&&K)K(h,m);return h},g=()=>{if(Z<=$)return 0;let k=Array.from(Q.entries()).sort(([,u],[,b])=>u.lastAccess-b.lastAccess),S=0,p=[];for(let[u,b]of k){if(Z<=$)break;S+=b.count,Z-=b.count,p.push(u),Q.delete(u)}if(S>0&&K)K(S,p);return S},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:Q.size,chunkSize:X,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},c=()=>Z,e=()=>{Q.clear(),Z=0};return{chunkSize:X,maxCachedItems:$,getTotal:L,setTotal:O,get:y,has:W,set:U,setRange:M,delete:E,getRange:F,isRangeLoaded:z,getLoadedRanges:V,findUnloadedRanges:H,getChunkIndex:B,isChunkLoaded:N,touchChunk:w,touchChunksForRange:_,evictDistant:R,evictToLimit:g,getStats:o,getCachedCount:c,clear:e,reset:()=>{e(),q=0}}},Jj=(j)=>{if(j.length===0)return[];let X=[...j].sort((J,K)=>J.start-K.start),$=[{...X[0]}];for(let J=1;J<X.length;J++){let K=X[J],Q=$[$.length-1];if(K.start<=Q.end+1)Q.end=Math.max(Q.end,K.end);else $.push({...K})}return $},x2=(j,X,$)=>{let J=Math.floor(j.start/$)*$,K=Math.ceil((j.end+1)/$)*$-1,Q={start:J,end:K};if(X.length===0)return[Q];let q=[],Z=Jj(X),G=Q.start;for(let B of Z){if(B.end<G)continue;if(B.start>Q.end)break;if(B.start>G)q.push({start:G,end:Math.min(B.start-1,Q.end)});if(G=B.end+1,G>Q.end)break}if(G<=Q.end)q.push({start:G,end:Q.end});return q};var $j=(j={})=>{let{enabled:X=!0,maskCharacter:$="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:Q}=j,q=null,Z=!1,G=0,B=(E)=>{if(!X||Z||E.length===0)return;let F=new Map,z=new Map,V=Math.min(E.length,K);for(let H=0;H<V;H++){let N=E[H];if(!N||typeof N!=="object")continue;for(let[w,_]of Object.entries(N)){if(w.startsWith("_")||w==="id")continue;if(!z.has(w))z.set(w,{lengths:[],types:new Set});let R=z.get(w),g=Array.isArray(_)?"array":typeof _;if(R.types.add(g),typeof _==="string")R.lengths.push(_.length);else if(_!==null&&_!==void 0)R.lengths.push(String(_).length)}}for(let[H,N]of z){if(N.lengths.length===0)continue;let w=Math.min(...N.lengths),_=Math.max(...N.lengths),R=Math.round(N.lengths.reduce((o,c)=>o+c,0)/N.lengths.length),g="string";if(N.types.has("number")&&N.types.size===1)g="number";else if(N.types.has("boolean")&&N.types.size===1)g="boolean";else if(N.types.has("array"))g="array";else if(N.types.has("object")&&!N.types.has("string"))g="object";F.set(H,{minLength:w,maxLength:_,avgLength:R,type:g})}q=F,Z=!0},D=()=>Z,L=(E)=>{let F=E.avgLength;if(J&&E.minLength!==E.maxLength){if(F=Math.floor(Math.random()*(E.maxLength-E.minLength+1)+E.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,F))},O=(E)=>{if(Q)return{...Q(E),["_isPlaceholder"]:!0};let F={id:`__placeholder_${G++}`,["_isPlaceholder"]:!0,_index:E};if(!q||q.size===0)return F.label=$.repeat(12),F;for(let[z,V]of q)switch(V.type){case"string":F[z]=L(V);break;case"number":F[z]=0;break;case"boolean":F[z]=!1;break;case"array":F[z]=[];break;case"object":F[z]={};break;default:F[z]=L(V)}return F};return{analyzeStructure:B,hasAnalyzedStructure:D,generate:O,generateRange:(E,F)=>{let z=[];for(let V=E;V<=F;V++)z.push(O(V));return z},isPlaceholder:(E)=>{if(!E||typeof E!=="object")return!1;return E._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,G=0}}},z2=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},Lj=(j)=>{return j.filter((X)=>!z2(X))};var N4=50,Qj=(j={})=>{let{adapter:X,initialItems:$,initialTotal:J,storage:K,placeholder:Q,pageSize:q=N4,onStateChange:Z,onItemsLoaded:G,onItemsEvicted:B}=j,D=jj({...K,onEvict:(v,f)=>{B?.(v),V()}}),L=null,O=()=>{if(!L)L=$j(Q);return L},y=new Map,W=!1,U,M=!0,E,F=[],z=new Map,V=()=>{Z?.(e())},H=()=>{y.clear();let v=D.getLoadedRanges();for(let f of v)for(let n=f.start;n<=f.end;n++){let $2=D.get(n);if($2&&!z2($2))y.set($2.id,n)}},N=(v,f)=>{if(!z2(f))y.set(f.id,v)},w=(v)=>{y.delete(v)},_=(v,f)=>{return`${v}-${f}`},R=()=>D.getTotal(),g=()=>D.getCachedCount(),o=()=>W,c=()=>M,e=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:W,pendingRanges:F,error:U,hasMore:M,cursor:E}),j2=()=>D,k=()=>O(),S=(v)=>{let f=D.get(v);if(f!==void 0)return f;if(v>=0&&v<D.getTotal())return O().generate(v);return},p=(v)=>{let f=y.get(v);if(f===void 0)return;return D.get(f)},u=(v)=>{return y.get(v)??-1},b=(v)=>{let f=D.get(v);return f!==void 0&&!z2(f)},C=(v,f)=>{let n=[],$2=D.getTotal(),l=0,X2=0;D.touchChunksForRange(v,Math.min(f,$2-1));for(let K2=v;K2<=f&&K2<$2;K2++){let A2=D.get(K2);if(A2!==void 0)n.push(A2),l++;else n.push(O().generate(K2)),X2++}return n},h=(v)=>{D.setTotal(v),M=D.getCachedCount()<v,V()},m=(v,f=0,n)=>{if(L&&!L.hasAnalyzedStructure()&&v.length>0)L.analyzeStructure(v);for(let $2=0;$2<v.length;$2++){let l=v[$2];if(l!==void 0){let X2=f+$2;D.set(X2,l),N(X2,l)}}if(n!==void 0)D.setTotal(n);else if(f+v.length>D.getTotal())D.setTotal(f+v.length);M=D.getCachedCount()<D.getTotal(),G?.(v,f,D.getTotal()),V()},s=(v,f)=>{let n=y.get(v);if(n===void 0)return!1;let $2=D.get(n);if(!$2)return!1;let l={...$2,...f};if(D.set(n,l),f.id!==void 0&&f.id!==v)w(v),N(n,l);return V(),!0},r=(v)=>{let f=y.get(v);if(f===void 0)return!1;D.delete(f),w(v);let n=D.getTotal();if(n>0)D.setTotal(n-1);return V(),!0},q2=async(v,f)=>{if(!X)return;let n=_(v,f);if(z.has(n))return;let $2=D.getLoadedRanges(),l=x2({start:v,end:f},$2,D.chunkSize);if(l.length===0)return;let X2=D.chunkSize,K2=[];for(let U2 of l){let Y2=Math.floor(U2.start/X2),_2=Math.floor(U2.end/X2);for(let D2=Y2;D2<=_2;D2++){let G2=D2*X2,N2=G2+X2-1,S2=_(G2,N2);if(!K2.some((F2)=>F2.start===G2)&&!z.has(S2))K2.push({start:G2,end:N2})}}let A2=[];for(let U2 of l){let Y2=Math.floor(U2.start/X2),_2=Math.floor(U2.end/X2);for(let D2=Y2;D2<=_2;D2++){let G2=D2*X2,N2=G2+X2-1,S2=_(G2,N2);if(z.has(S2)){let F2=z.get(S2);if(!A2.includes(F2))A2.push(F2)}}}for(let U2 of K2){let Y2=_(U2.start,U2.end),_2=(async()=>{F.push(U2),W=!0,U=void 0,V();try{let D2=U2.end-U2.start+1,G2={offset:U2.start,limit:D2,cursor:void 0},N2=await X.read(G2);if(m(N2.items,U2.start,N2.total),N2.cursor)E=N2.cursor;if(N2.hasMore!==void 0)M=N2.hasMore;else if(N2.total!==void 0)M=D.getCachedCount()<N2.total}catch(D2){U=D2 instanceof Error?D2:Error(String(D2))}finally{z.delete(Y2),F=F.filter((D2)=>D2.start!==U2.start||D2.end!==U2.end),W=z.size>0,V()}})();z.set(Y2,_2),A2.push(_2)}await Promise.all(A2)},B2=async(v,f)=>{if(D.isRangeLoaded(v,f))return;await q2(v,f)},T=async()=>{if(!X)return;await q2(0,q-1)},d=async()=>{if(!X||W||!M)return!1;let v=D.getCachedCount(),f=D.getTotal(),n=v,$2=Math.min(n+q-1,f>0?f-1:n+q-1);if(n>=f&&f>0)return M=!1,!1;return await q2(n,$2),D.getCachedCount()>v},x=async()=>{if(D.clear(),y.clear(),L)L.clear();E=void 0,M=!0,U=void 0,V(),await T()},J2=(v,f)=>{if(D.evictDistant(v,f)>0)H()},i=()=>{D.clear(),y.clear(),E=void 0,U=void 0,F=[],W=!1,V()},Q2=()=>{if(D.reset(),y.clear(),L)L.clear();E=void 0,M=!0,U=void 0,F=[],W=!1,V()};if($&&$.length>0)m($,0,J??$.length);else if(J!==void 0)D.setTotal(J);return{getState:e,getTotal:R,getCached:g,getIsLoading:o,getHasMore:c,getStorage:j2,getPlaceholders:k,getItem:S,getItemById:p,getIndexById:u,isItemLoaded:b,getItemsInRange:C,setTotal:h,setItems:m,updateItem:s,removeItem:r,loadRange:q2,ensureRange:B2,loadInitial:T,loadMore:d,reload:x,evictDistant:J2,clear:i,reset:Q2}};var Oj=(j,X,$,J,K,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},zj=(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},$J=(j,X,$,J,K,Q)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Z=X.getOffset(q),G=X.getHeight(q),B=X.getTotalHeight(),D=Math.max(0,B-$),L;switch(Q){case"center":L=Z-$/2+G/2;break;case"end":L=Z-$+G;break;case"start":default:L=Z;break}return Math.max(0,Math.min(L,D))},QJ=(j,X,$)=>{if($&&$.isCompressed)return $.virtualHeight;return X.getTotalHeight()},XJ=(j,X)=>{return X.getTotalHeight()},qJ=(j,X)=>{return X.getOffset(j)},KJ=(j,X,$)=>{let J=Math.max(0,X-$);return Math.max(0,Math.min(j,J))};var bj=(j,X,$,J,K,Q=Oj)=>{return Q(j.scrollTop,j.containerHeight,X,$,K,j.visibleRange),zj(j.visibleRange,J,$,j.renderRange),j.totalHeight=K.virtualHeight,j.actualHeight=K.actualHeight,j.isCompressed=K.isCompressed,j.compressionRatio=K.ratio,j},b2=(j,X,$,J,K="start",Q,q=$J)=>{return q(j,X,$,J,Q,K)},YJ=(j,X)=>{return j.start===X.start&&j.end===X.end},ZJ=(j,X)=>{return j>=X.start&&j<=X.end},BJ=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var UJ=(j,X)=>{let $=[],J=[];for(let K=j.start;K<=j.end;K++)if(K<X.start||K>X.end)J.push(K);for(let K=X.start;K<=X.end;K++)if(K<j.start||K>j.end)$.push(K);return{add:$,remove:J}};i2();var DJ=(j)=>{let{adapter:X,loading:$}=j,J=$?.cancelThreshold??dj,K=$?.preloadThreshold??cj,Q=$?.preloadAhead??lj;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,G=q.config.reverse,B=q.config.overscan,D=Qj({adapter:X,pageSize:u2,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=bj(q.state.viewportState,q.heightCache,q.getVirtualTotal(),B,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(E,F,z)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:E,total:z})}});q.replaceDataManager(D);let L=null,O=null,y=0,W=()=>{if(O){let E=O;O=null,q.dataManager.ensureRange(E.start,E.end).catch((F)=>{Z.emit("error",{error:F,context:"ensureRange"})})}};q.afterScroll.push((E,F)=>{if(q.state.isDestroyed)return;let z=q.scrollController.getVelocity(),H=q.scrollController.isTracking()&&z<=J;if(O&&y>J&&z<=J){let _=O;O=null,q.dataManager.ensureRange(_.start,_.end).catch((R)=>{Z.emit("error",{error:R,context:"ensureRange"})})}if(y=z,H&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(G){if(E<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:u2}),q.dataManager.loadMore().catch((_)=>{Z.emit("error",{error:_,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-E-q.state.viewportState.containerHeight<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:u2}),q.dataManager.loadMore().catch((R)=>{Z.emit("error",{error:R,context:"loadMore"})})}let{renderRange:N}=q.state.viewportState;if(!L||N.start!==L.start||N.end!==L.end)if(L={start:N.start,end:N.end},H){O=null;let{start:_,end:R}=N,g=q.getVirtualTotal();if(z>K)if(F==="down")R=Math.min(N.end+Q,g-1);else _=Math.max(N.start-Q,0);q.dataManager.ensureRange(_,R).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}else O={start:N.start,end:N.end}});let U=200,M=null;q.afterScroll.push((E,F)=>{if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,W()},U)}),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:u2}),q.dataManager.loadInitial().catch((E)=>{Z.emit("error",{error:E,context:"loadInitial"})})}}};var WJ=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:$,state:J,config:K,emitter:Q}=X;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let B=$.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-B.left);else return Math.max(0,-B.top)},(B)=>{let D=$.viewport.getBoundingClientRect();if(K.horizontal){let L=D.left+window.scrollX;window.scrollTo(L+B,window.scrollY)}else{let L=D.top+window.scrollY;window.scrollTo(window.scrollX,L+B)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,G=()=>{let{innerWidth:B,innerHeight:D}=window,L=K.horizontal?B:D,O=K.horizontal?Z:q;if(Math.abs(L-O)<=1)return;q=D,Z=B,J.viewportState.containerHeight=D,Q.emit("resize",{width:B,height:D});for(let y=0;y<X.resizeHandlers.length;y++)X.resizeHandlers[y](B,D);X.renderIfNeeded()};window.addEventListener("resize",G,{passive:!0}),j=()=>{window.removeEventListener("resize",G)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var Pj=(j,X)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].headerLayoutIndex<=X)$=K;else J=K-1}return $},NJ=(j,X)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].firstDataIndex<=X)$=K;else J=K-1}return $},VJ=(j,X)=>{if(j===0)return[];let $=[],J=X(0),K=0,Q=0;for(let q=1;q<j;q++){let Z=X(q);if(Z!==J){let G=q-K;$.push({key:J,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:K,count:G}),Q=Q+1+G,J=Z,K=q}}return $.push({key:J,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:K,count:j-K}),$},h2=(j,X)=>{if(j.length===0||X.length===0)return[];let $=j.length+X.length,J=Array($),K=0;for(let Q of X){J[K]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},K++;for(let q=0;q<Q.count;q++)J[K]=j[Q.firstDataIndex+q],K++}return J},g2=(j,X)=>{let $=typeof X==="number"?(J)=>X:X;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return $(K.dataIndex)}},Xj=(j,X)=>{let $=VJ(j,X.getGroupForIndex),J=j+$.length,K=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 y=Pj($,O),W=$[y];if(O===W.headerLayoutIndex)return{type:"header",group:W};let U=O-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+U,group:W}},layoutToDataIndex:(O)=>{if($.length===0)return O;let y=Pj($,O),W=$[y];if(O===W.headerLayoutIndex)return-1;let U=O-W.headerLayoutIndex-1;return W.firstDataIndex+U},dataToLayoutIndex:(O)=>{if($.length===0)return O;let y=NJ($,O),W=$[y],U=O-W.firstDataIndex;return W.headerLayoutIndex+1+U},getGroupAtLayoutIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=Pj($,O);return $[y]},getGroupAtDataIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=NJ($,O);return $[y]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let y=$[O];if(!y)return 0;return K(y.key,O)},rebuild:(O)=>{$=VJ(O,X.getGroupForIndex),J=O+$.length}}};var qj=(j,X,$,J,K)=>{let Q=document.createElement("div");Q.className=`${K}-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,G=0,B=(U)=>{if(U===q)return;q=U;let M=X.groups;if(U<0||U>=M.length){Q.textContent="";return}let E=M[U],F=J.headerTemplate(E.key,E.groupIndex),z=X.getHeaderHeight(U);if(Q.style.height=`${z}px`,typeof F==="string")Q.innerHTML=F;else Q.replaceChildren(F)},D=(U)=>{let M=X.groups;if(M.length===0){O();return}let E=0;for(let N=M.length-1;N>=0;N--)if($.getOffset(M[N].headerLayoutIndex)<=U){E=N;break}let F=$.getOffset(M[0].headerLayoutIndex);if(U<F){O();return}if(!Z)L();B(E);let z=X.getHeaderHeight(E),V=0,H=E+1;if(H<M.length){let w=$.getOffset(M[H].headerLayoutIndex)-U;if(w<z)V=w-z}if(V!==G)G=V,Q.style.transform=V===0?"":`translateY(${Math.round(V)}px)`},L=()=>{if(Z)return;Z=!0,Q.style.display=""},O=()=>{if(!Z)return;Z=!1,Q.style.display="none",q=-1,G=0,Q.style.transform=""},y=()=>{let U=q;if(q=-1,U>=0)B(U)},W=()=>{Q.remove(),q=-1,Z=!1};return Q.style.display="none",{update:D,refresh:y,show:L,hide:O,destroy:W}};var GJ=(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=[],K=[];return{name:"withSections",priority:10,setup(Q){let{dom:q,config:Z,rawConfig:G}=Q,{classPrefix:B}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let L=G.item.height;J=G.items?[...G.items]:[];let O=J.length,y={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=Xj(O,y),K=h2(J,X.groups);let W=g2(X,L);Q.setHeightConfig(W),Q.rebuildHeightCache(K.length),Q.dataManager.setItems(K,0,K.length);let U=G.item.template,{headerTemplate:M}=j,E=(_,R,g)=>{if(P2(_))return M(_.groupKey,_.groupIndex);return U(_,R,g)},F=Q.methods.get("_getGridLayout"),z=Q.methods.get("_replaceGridRenderer"),V=Q.methods.get("_updateGridLayoutForGroups");if(F&&z){if(V)V((o)=>{let c=K[o];return!!(c&&P2(c))});let{createGridRenderer:_}=(Kj(),lJ(_J)),R=F(),g=_(q.items,E,Q.heightCache,R,B,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),Z.ariaIdPrefix);z(g)}else Q.replaceTemplate(E);if(q.root.classList.add(`${B}--grouped`),j.sticky!==!1){$=qj(q.root,X,Q.heightCache,{...y,sticky:y.sticky??!1},B);let _=$;Q.afterScroll.push((R,g)=>{_.update(R)}),$.update(Q.scrollController.getScrollTop())}let H=()=>{if(!X)return;X.rebuild(J.length),K=h2(J,X.groups);let _=g2(X,L);if(Q.setHeightConfig(_),Q.rebuildHeightCache(K.length),Q.dataManager.setItems(K,0,K.length),$)$.refresh()};Q.methods.set("setItems",(_)=>{J=[..._],H()}),Q.methods.set("appendItems",(_)=>{J=[...J,..._],H()}),Q.methods.set("prependItems",(_)=>{J=[..._,...J],H()}),Q.methods.set("removeItem",(_)=>{J=J.filter((R)=>R.id!==_),H()});let{animateScroll:N,cancelScroll:w}=G4(Q.scrollController,Q.renderIfNeeded);Q.methods.set("scrollToIndex",(_,R)=>{let g=X.dataToLayoutIndex(_),{align:o,behavior:c,duration:e}=M4(R),j2=Q.dataManager.getTotal(),k=b2(g,Q.heightCache,Q.state.viewportState.containerHeight,j2,o,Q.getCachedCompression());if(c==="smooth")N(Q.scrollController.getScrollTop(),k,e);else w(),Q.scrollController.scrollTo(k)}),Q.methods.set("_getItems",()=>J),Q.methods.set("_getTotal",()=>J.length),Q.destroyHandlers.push(()=>{if(L2!==null)cancelAnimationFrame(L2),L2=null;if($)$.destroy(),$=null;q.root.classList.remove(`${B}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},yj=300,_4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,L2=null,G4=(j,X)=>{let $=()=>{if(L2!==null)cancelAnimationFrame(L2),L2=null};return{animateScroll:(K,Q,q)=>{if($(),Math.abs(Q-K)<1){j.scrollTo(Q);return}let Z=performance.now(),G=(B)=>{let D=B-Z,L=Math.min(D/q,1),O=K+(Q-K)*_4(L);if(j.scrollTo(O),X(),L<1)L2=requestAnimationFrame(G);else L2=null};L2=requestAnimationFrame(G)},cancelScroll:$}},M4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:yj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??yj};return{align:"start",behavior:"auto",duration:yj}};var Yj=(j)=>{let X=Math.max(1,Math.floor(j.columns)),$=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},Q=(W)=>{if(W<=0)return 0;if(!J)return Math.ceil(W/X);let U=0,M=0,E=0;for(let F=0;F<W;F++)if(J(F)){if(E++,M>0)U++,M=0;U++,M=0}else if(M++,M>=X)U++,M=0;if(M>0)U++;return U},q=(W)=>{return K.row=Z(W),K.col=G(W),K},Z=(W)=>{if(!J)return Math.floor(W/X);let U=0,M=0;for(let E=0;E<=W;E++)if(J(E)){if(M>0)U++,M=0;if(E===W)return U;U++,M=0}else{if(E===W)return U;if(M++,M>=X)U++,M=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${U}`),U},G=(W)=>{if(!J)return W%X;if(J(W))return 0;let U=0;for(let M=0;M<=W;M++)if(J(M))U=0;else{if(M===W)return U;if(U++,U>=X)U=0}return U},B=(W,U,M)=>{if(M<=0)return{start:0,end:-1};if(!J){let H=Math.max(0,W*X),N=Math.min(M-1,(U+1)*X-1);return{start:H,end:N}}let E=-1,F=-1,z=0,V=0;for(let H=0;H<M;H++){if(J(H)){if(V>0)z++,V=0;if(z>=W&&z<=U){if(E===-1)E=H;F=H}z++,V=0}else{if(z>=W&&z<=U){if(E===-1)E=H;F=H}if(V++,V>=X)z++,V=0}if(z>U&&V===0)break}if(E===-1)return{start:0,end:-1};return{start:E,end:F}},D=(W,U,M)=>{if(U<0||U>=X)return-1;let E=W*X+U;if(E<0||E>=M)return-1;return E},L=(W)=>{let U=(X-1)*$;return Math.max(0,(W-U)/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:G,getItemRange:B,getItemIndex:D,getColumnWidth:L,getColumnOffset:(W,U)=>{let M=L(U);return W*(M+$)}}};Kj();var MJ=(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:K,emitter:Q,config:q,rawConfig:Z}=J,{classPrefix:G}=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 B=Z.items?.some((V)=>V.__groupHeader===!0),D={columns:j.columns,gap:j.gap??0};if(B)D.isHeaderFn=(V)=>{let H=J.dataManager.getItem(V);return!!(H&&H.__groupHeader===!0)};X=Yj(D);let L=X.gap;J.setVirtualTotalFn(()=>{let V=J.dataManager.getTotal();return X.getTotalRows(V)});let O=Z.item,y=q.horizontal?O.width:O.height,W={containerWidth:J.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof y==="function")J.setHeightConfig((V)=>{let H=W.containerWidth-2,N=(W.columns-1)*W.gap,w=(H-N)/W.columns,_={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:w,row:X.getRow(V),column:X.getCol(V),totalRows:X.getTotalRows(J.dataManager.getTotal()),totalColumns:W.columns};return y(V,_)+W.gap});else if(L>0)J.setHeightConfig(y+L);J.rebuildHeightCache(),K.root.classList.add(`${G}--grid`);let U=J.getContainerWidth(),M=Z.item.template,E=()=>{$=m2(K.items,M,J.heightCache,X,G,U,()=>J.dataManager.getTotal(),q.ariaIdPrefix),J.replaceRenderer($)};E(),J.methods.set("_getGridLayout",()=>X),J.methods.set("_getGridConfig",()=>D),J.methods.set("_replaceGridRenderer",(V)=>{$=V}),J.methods.set("_updateGridLayoutForGroups",(V)=>{X.update({isHeaderFn:V});let H=J.dataManager.getTotal(),N=0;for(let w=0;w<H;w++)if(X.getCol(w)===0){let _=J.heightCache.getHeight(w);N+=_}J.heightCache.getTotalHeight=()=>N,J.dom.content.style.height=`${N}px`,E()}),J.methods.set("updateGrid",(V)=>{if(V.columns!==void 0){if(!Number.isInteger(V.columns)||V.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");D.columns=V.columns}if(V.gap!==void 0){if(V.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");D.gap=V.gap}if(X)X.update(D);let H=J.getContainerWidth();if(W.containerWidth=H,W.columns=D.columns,W.gap=D.gap??0,$)$.updateContainerWidth(H);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let N=0;N<J.contentSizeHandlers.length;N++)J.contentSizeHandlers[N]();if($)$.clear();J.forceRender()});let F=()=>{if(J.state.isDestroyed)return;let V=J.scrollController.getScrollTop(),H=J.state.viewportState.containerHeight,N=J.getVirtualTotal(),w={start:0,end:0};if(N===0||H===0)w.start=0,w.end=0;else{w.start=Math.max(0,J.heightCache.indexAtOffset(V));let S=J.heightCache.indexAtOffset(V+H);if(S<N-1)S++;w.end=Math.min(N-1,Math.max(0,S))}let _=q.overscan??3,R={start:Math.max(0,w.start-_),end:Math.min(N-1,w.end+_)};J.state.viewportState.scrollTop=V,J.state.viewportState.visibleRange=w,J.state.viewportState.renderRange=R;let g=J.state.lastRenderRange,o=J.state.viewportState.isCompressed;if(R.start===g.start&&R.end===g.end){if(o)$.updatePositions(J.getCompressionContext());return}let c=J.dataManager.getTotal(),e=X.getItemRange(R.start,R.end,c),j2=J.dataManager.getItemsInRange(e.start,e.end),k=o?J.getCompressionContext():void 0;$.render(j2,e,new Set,-1,k),J.state.lastRenderRange={...R},Q.emit("range:change",{range:R})},z=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},F()};if(J.setRenderFns(F,z),J.resizeHandlers.push((V,H)=>{if($)$.updateContainerWidth(V)}),J.methods.set("scrollToIndex",(V,H)=>{let N=Math.floor(V/j.columns),{align:w,behavior:_}=E4(H),R=J.dataManager.getState(),g=X.getTotalRows(R.total),o=Math.max(0,Math.min(N,g-1)),c=b2(o,J.heightCache,J.state.viewportState.containerHeight,g,w,J.getCachedCompression());if(_==="smooth")J.scrollController.scrollTo(c);else J.scrollController.scrollTo(c)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if($)$.destroy(),$=null;K.root.classList.remove(`${G}--grid`)})},destroy(){if($)$.destroy(),$=null}}},Hj=300,E4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:Hj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??Hj};return{align:"start",behavior:"auto",duration:Hj}};Kj();var Zj=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),d2=(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 K of X)J.add(K);return{...j,selected:J}},c2=(j,X)=>{let $=new Set(j.selected);for(let J of X)$.delete(J);return{...j,selected:$}},T2=(j,X,$)=>{if($==="none")return j;if(j.selected.has(X))return c2(j,[X]);else return d2(j,[X],$)},Bj=(j,X,$)=>{if($!=="multiple")return j;return{...j,selected:new Set(X.map((J)=>J.id))}},Uj=(j)=>({...j,selected:new Set}),Rj=(j,X)=>{return j.focusedIndex=X,j},kj=(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},Tj=(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},Cj=(j,X)=>{if(X===0)return j;return j.focusedIndex=0,j},wj=(j,X)=>{if(X===0)return j;return j.focusedIndex=X-1,j};var EJ=(j,X)=>{return j.selected.has(X)},C2=(j)=>{return Array.from(j.selected)},w2=(j,X)=>{let $=[];for(let J of j.selected){let K=X(J);if(K)$.push(K)}return $};var AJ=(j)=>{let X=j?.mode??"single",$=j?.initial,J=Zj($),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:q,emitter:Z,config:G}=Q,{classPrefix:B,ariaIdPrefix:D}=G;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:L,forceRender:O}=Q.getRenderFns(),y=()=>{Q.dom.items.querySelectorAll("[data-index]").forEach((z)=>{let V=z,H=V.dataset.id;if(H!==void 0){let N=/^\d+$/.test(H)?parseInt(H,10):H,w=J.selected.has(N),R=parseInt(V.dataset.index??"-1",10)===J.focusedIndex;V.classList.toggle(`${B}-item--selected`,w),V.classList.toggle(`${B}-item--focused`,R),V.ariaSelected=w?"true":"false"}})},W=()=>{if(Q.state.isDestroyed)return;L(),y()},U=()=>{if(Q.state.isDestroyed)return;O(),y()};Q.setRenderFns(W,U);let M=()=>{y(),Z.emit("selection:change",{selected:C2(J),items:w2(J,(F)=>Q.dataManager.getItemById(F))})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${B}-live-region`,K.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(K);let E=K;Z.on("selection:change",({selected:F})=>{let z=F.length;if(z===0)E.textContent="";else if(z===1)E.textContent="1 item selected";else E.textContent=`${z} items selected`}),Q.clickHandlers.push((F)=>{if(Q.state.isDestroyed)return;let V=F.target.closest("[data-index]");if(!V)return;let H=parseInt(V.dataset.index??"-1",10);if(H<0)return;let N=Q.dataManager.getItem(H);if(!N)return;Z.emit("item:click",{item:N,index:H,event:F}),J=Rj(J,H),q.root.setAttribute("aria-activedescendant",`${D}-item-${H}`),J=T2(J,N.id,X),M()}),Q.keydownHandlers.push((F)=>{if(Q.state.isDestroyed)return;let z=Q.dataManager.getTotal(),V=J.focusedIndex,H=!1,N=!1,w=J;switch(F.key){case"ArrowUp":w=kj(J,z),H=!0,N=!0;break;case"ArrowDown":w=Tj(J,z),H=!0,N=!0;break;case"Home":w=Cj(J,z),H=!0,N=!0;break;case"End":w=wj(J,z),H=!0,N=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let _=Q.dataManager.getItem(J.focusedIndex);if(_)w=T2(J,_.id,X);H=!0}break}if(H){F.preventDefault(),J=w;let _=J.focusedIndex;if(_>=0){let R=Q.dataManager.getState(),g=b2(_,Q.heightCache,Q.state.viewportState.containerHeight,R.total,"center",Q.getCachedCompression());Q.scrollController.scrollTo(g),q.root.setAttribute("aria-activedescendant",`${D}-item-${_}`)}else q.root.removeAttribute("aria-activedescendant");if(N){let{selected:R}=J;if(V>=0&&V!==_){let g=Q.dataManager.getItem(V);if(g)Q.renderer.updateItemClasses(V,R.has(g.id),!1)}if(_>=0){let g=Q.dataManager.getItem(_);if(g)Q.renderer.updateItemClasses(_,R.has(g.id),!0)}}else U(),Z.emit("selection:change",{selected:C2(J),items:w2(J,(R)=>Q.dataManager.getItemById(R))})}}),Q.methods.set("select",(...F)=>{J=d2(J,F,X),M()}),Q.methods.set("deselect",(...F)=>{J=c2(J,F),M()}),Q.methods.set("toggleSelect",(F)=>{J=T2(J,F,X),M()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;let F=Q.getAllLoadedItems();J=Bj(J,F,X),M()}),Q.methods.set("clearSelection",()=>{J=Uj(J);let{renderRange:F,isCompressed:z}=Q.state.viewportState,V=Q.getItemsForRange(F),H=z?Q.getCompressionContext():void 0;Q.renderer.render(V,F,J.selected,J.focusedIndex,H),Z.emit("selection:change",{selected:[],items:[]})}),Q.methods.set("getSelected",()=>{return C2(J)}),Q.methods.set("getSelectedItems",()=>{return w2(J,(F)=>Q.dataManager.getItemById(F))}),Q.destroyHandlers.push(()=>{if(E&&E.parentNode)E.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var FJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let X=j.scrollController.getScrollTop(),$=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),Q=K&&K().length>0?K():void 0;if(J===0){let B={index:0,offsetInItem:0};if(Q)B.selectedIds=Q;return B}let q,Z;if($.isCompressed){let D=X/$.virtualHeight*J;q=Math.max(0,Math.min(Math.floor(D),J-1)),Z=(D-q)*j.heightCache.getHeight(q)}else q=j.heightCache.indexAtOffset(X),Z=X-j.heightCache.getOffset(q);Z=Math.max(0,Z);let G={index:q,offsetInItem:Z};if(Q)G.selectedIds=Q;return G}),j.methods.set("restoreScroll",(X)=>{let{index:$,offsetInItem:J,selectedIds:K}=X,Q=j.getCachedCompression(),q=j.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),G;if(Q.isCompressed){let D=j.heightCache.getHeight(Z),L=D>0?J/D:0;G=(Z+L)/q*Q.virtualHeight}else G=j.heightCache.getOffset(Z)+J;let B=Math.max(0,Q.virtualHeight-j.state.viewportState.containerHeight);if(G=Math.max(0,Math.min(G,B)),j.scrollController.scrollTo(G),K&&K.length>0){let D=j.methods.get("select");if(D)D(...K)}})}}};var LJ=()=>{let j={},X=(Z,G)=>{if(!j[Z])j[Z]=new Set;return j[Z].add(G),()=>$(Z,G)},$=(Z,G)=>{j[Z]?.delete(G)};return{on:X,off:$,emit:(Z,G)=>{j[Z]?.forEach((B)=>{try{B(G)}catch(D){console.error(`[vlist] Error in event handler for "${String(Z)}":`,D)}})},once:(Z,G)=>{let B=(D)=>{$(Z,B),G(D)};return X(Z,B)},clear:(Z)=>{if(Z)delete j[Z];else for(let G in j)delete j[G]},listenerCount:(Z)=>{return j[Z]?.size??0}}};export{FJ as withSnapshots,AJ as withSelection,GJ as withSections,tj as withScrollbar,JJ as withScale,WJ as withPage,MJ as withGrid,DJ as withAsync,mj as vlist,T2 as toggleSelection,Oj as simpleVisibleRange,d2 as selectItems,Bj as selectAll,YJ as rangesEqual,e2 as rafThrottle,nj as needsScaling,Jj as mergeRanges,EJ as isSelected,P2 as isSectionHeader,z2 as isPlaceholderItem,ZJ as isInRange,w2 as getSelectedItems,C2 as getSelectedIds,M2 as getScaleState,ij as getScaleInfo,M2 as getScale,BJ as getRangeCount,oj as getMaxItemsWithoutScaling,Lj as filterPlaceholders,UJ as diffRanges,c2 as deselectItems,qj as createStickyHeader,jj as createSparseStorage,Zj as createSelectionState,g2 as createSectionedHeightFn,Xj as createSectionLayout,k2 as createScrollbar,jJ as createScrollController,$j as createPlaceholderManager,sj as createHeightCache,m2 as createGridRenderer,Yj as createGridLayout,LJ as createEmitter,Qj as createAsyncManager,Uj as clearSelection,KJ as clampScrollPosition,QJ as calculateTotalHeight,b2 as calculateScrollToIndex,n2 as calculateScaledVisibleRange,o2 as calculateScaledScrollToIndex,aj as calculateScaledRenderRange,R2 as calculateScaledItemPosition,zj as calculateRenderRange,x2 as calculateMissingRanges,qJ as calculateItemOffset,rj as calculateIndexFromScrollPosition,XJ as calculateActualHeight,h2 as buildLayoutItems,O2 as MAX_VIRTUAL_HEIGHT};
1
+ var{defineProperty:Mj,getOwnPropertyNames:gJ,getOwnPropertyDescriptor:mJ}=Object,dJ=Object.prototype.hasOwnProperty;var pj=new WeakMap,cJ=(j)=>{var Q=pj.get(j),$;if(Q)return Q;if(Q=Mj({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")gJ(j).map((J)=>!dJ.call(Q,J)&&Mj(Q,J,{get:()=>j[J],enumerable:!($=mJ(j,J))||$.enumerable}));return pj.set(j,Q),Q};var lJ=(j,Q)=>{for(var $ in Q)Mj(j,$,{get:Q[$],enumerable:!0,configurable:!0,set:(J)=>Q[$]=()=>J})};var uj=(j,Q)=>()=>(j&&(Q=j(j=0)),Q);var Ej=200,x2=50,gj=15,mj=2,dj=50,z2=16000000;var K4=(j,Q)=>{let $=Q;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if($===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),$-1))},getTotalHeight:()=>$*j,getTotal:()=>$,rebuild:(J)=>{$=J},isVariable:()=>!1}},Y4=(j,Q)=>{let $=Q,J=new Float64Array(0),K=(q)=>{$=q,J=new Float64Array(q+1),J[0]=0;for(let Z=0;Z<q;Z++)J[Z+1]=J[Z]+j(Z)};K(Q);let X=(q)=>{if($===0)return 0;if(q<=0)return 0;if(q>=J[$])return $-1;let Z=0,V=$-1;while(Z<V){let B=Z+V+1>>>1;if(J[B]<=q)Z=B;else V=B-1}return Z};return{getOffset:(q)=>{if(q<=0)return 0;if(q>=$)return J[$];return J[q]},getHeight:(q)=>j(q),indexAtOffset:(q)=>X(q),getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(q)=>K(q),isVariable:()=>!0}},cj=(j,Q)=>{if(typeof j==="number")return K4(j,Q);return Y4(j,Q)},Fj=(j,Q,$,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil($/j.getHeight(0));let K=0,X=0,q=Q;while(q<J&&X<$)X+=j.getHeight(q),K++,q++;return Math.max(1,K)},n2=(j,Q,$)=>{if($===0)return 0;if(!j.isVariable())return Math.floor(Q/j.getHeight(0));let J=0,K=0;for(let X=$-1;X>=0;X--){let q=j.getHeight(X);if(K+q>Q)break;K+=q,J++}return Math.max(J,1)},Lj=(j,Q,$)=>{if($===0)return 0;let J=Math.floor(Q),K=Q-J,X=Math.max(0,Math.min(J,$-1));return j.getOffset(X)+K*j.getHeight(X)};var E2=(j,Q)=>{let $=Q.getTotalHeight(),J=$>z2,K=J?z2:$,X=$>0?K/$:1;return{isCompressed:J,actualHeight:$,virtualHeight:K,ratio:X}},o2=(j,Q,$,J,K,X)=>{if(J===0||Q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let W=$.indexAtOffset(j),M=$.indexAtOffset(j+Q);if(M<J-1)M++;return X.start=Math.max(0,W),X.end=Math.min(J-1,Math.max(0,M)),X}let{virtualHeight:q}=K,V=j/q*J,B=Math.floor(V),U=Fj($,Math.max(0,B),Q,J),L=Math.ceil(V)+U,T=q-Q-j;if(T<=Q&&T>=-1){let W=n2($,Q,J),M=Math.max(0,J-W),N=Math.max(0,Math.min(1,1-T/Q));B=Math.floor(B+(M-B)*N),L=T<=1?J-1:Math.min(J-1,B+U)}return X.start=Math.max(0,B),X.end=Math.min(J-1,Math.max(0,L)),X},lj=(j,Q,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q),J},C2=(j,Q,$,J,K,X,q)=>{if(!X.isCompressed||J===0)return $.getOffset(j);let{virtualHeight:Z}=X,V=Z-K,B=V-Q;if(B<=K&&B>=-1){if(Q>=V-1){let _=$.getTotalHeight()-$.getOffset(j);return K-_}let T=n2($,K,J),W=Math.max(0,J-T),N=Q/Z*J,O=Math.max(0,Math.min(1,1-B/K)),F=$.getOffset(j)-$.getOffset(W),b=$.getOffset(j)-Lj($,N,J);return b+(F-b)*O}let U=Q/Z,L=$.getTotalHeight(),y=U*L;return $.getOffset(j)-y},i2=(j,Q,$,J,K,X="start")=>{if(J===0)return 0;let q;if(K.isCompressed){if(X==="end"&&j===J-1)return Math.max(0,K.virtualHeight-$);q=j/J*K.virtualHeight}else q=Q.getOffset(j);let Z=Q.getHeight(j);switch(X){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let V=K.virtualHeight-$;return Math.max(0,Math.min(q,V))},sj=(j,Q,$,J)=>{if($===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*$)}return Q.indexAtOffset(j)},aj=(j,Q)=>{if(typeof Q==="number")return j*Q>z2;return Q.getTotalHeight()>z2},rj=(j)=>{if(j<=0)return 0;return Math.floor(z2/j)},nj=(j,Q)=>{let $=E2(j,Q);if(!$.isCompressed)return`No compression needed (${j} items, ${($.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${j} items, ${($.actualHeight/1e6).toFixed(1)}M px → ${($.virtualHeight/1e6).toFixed(1)}M px virtual)`};var t2=()=>{};var P2=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var VJ={};lJ(VJ,{createGridRenderer:()=>d2});var M4=(j=200)=>{let Q=[];return{acquire:()=>{let X=Q.pop();if(X)return X;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:(X)=>{if(Q.length<j)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),Q.push(X)},clear:()=>{Q.length=0}}},d2=(j,Q,$,J,K,X,q,Z)=>{let V=M4(),B=new Map,U=X,L=!1,y=null,T=0,W="",M=(z)=>{if(y&&T===z)return y;return y=E2(z,$),T=z,y},N={selected:!1,focused:!1},O=(z,H)=>{return N.selected=z,N.focused=H,N},F=`${K}-item ${K}-grid-item`,b=`${K}-item--selected`,_=`${K}-item--focused`,A=(z,H)=>{if(typeof H==="string")z.innerHTML=H;else z.replaceChildren(H)},G=(z,H,m)=>{z.classList.toggle(b,H),z.classList.toggle(_,m)},P=(z,H)=>{let m=J.getRow(z);if(H){let s=H.totalItems,a=M(s);if(a.isCompressed)return C2(m,H.scrollTop,$,s,H.containerHeight,a,H.rangeStart)}return $.getOffset(m)},D=(z,H,m)=>{let s=z.dataset.id?.startsWith("__group_header"),a=s?0:J.getCol(H),o=s?0:J.getColumnOffset(a,U),B2;if(L){let K2=J.getRow(H),v=0,r=new Set;for(let h=0;h<H;h++){let $2=J.getRow(h);if($2<K2&&!r.has($2)){let i=$.getHeight(h);v+=i,r.add($2)}}B2=v}else B2=P(H,m);z.style.transform=`translate(${Math.round(o)}px, ${Math.round(B2)}px)`},k=(z,H)=>{let m=z.dataset.id?.startsWith("__group_header"),s=m?U:J.getColumnWidth(U),a;if(L||m)a=$.getHeight(H)-J.gap;else{let o=J.getRow(H);a=$.getHeight(o)-J.gap}z.style.width=`${s}px`,z.style.height=`${a}px`},x=(z,H,m,s,a)=>{let o=V.acquire(),B2=O(m,s);if(o.className=F,o.dataset.index=String(z),o.dataset.id=String(H.id),o.dataset.row=String(J.getRow(z)),o.dataset.col=String(J.getCol(z)),o.ariaSelected=String(m),Z)o.id=`${Z}-item-${z}`;if(q)W=String(q()),o.setAttribute("aria-setsize",W),o.setAttribute("aria-posinset",String(z+1));k(o,z);let K2=Q(H,z,B2);return A(o,K2),G(o,m,s),D(o,z,a),o},j2=(z,H,m,s,a)=>{if(H.start===0&&z.length>0)L=P2(z[0]);for(let[v,r]of B)if(v<H.start||v>H.end)r.element.remove(),V.release(r.element),B.delete(v);let o=!1;if(q){let v=String(q());o=v!==W,W=v}let B2=document.createDocumentFragment(),K2=[];for(let v=H.start;v<=H.end;v++){let r=v-H.start,h=z[r];if(!h){console.warn(`⚠️ RENDER: Missing item at index ${v} (range: ${H.start}-${H.end}, items.length: ${z.length})`);continue}let $2=m.has(h.id),i=v===s,Q2=B.get(v);if(Q2){let D2=Q2.element.dataset.id,S=String(h.id);if(D2!==S){let t=O($2,i),c=Q(h,v,t);A(Q2.element,c),Q2.element.dataset.id=S,Q2.element.dataset.row=String(J.getRow(v)),Q2.element.dataset.col=String(J.getCol(v)),k(Q2.element,v)}if(G(Q2.element,$2,i),Q2.element.ariaSelected=String($2),D(Q2.element,v,a),o)Q2.element.setAttribute("aria-setsize",W)}else{let D2=x(v,h,$2,i,a);B2.appendChild(D2),K2.push({index:v,element:D2})}}if(K2.length>0){j.appendChild(B2);for(let{index:v,element:r}of K2)B.set(v,{index:v,element:r})}},f=(z)=>{for(let[H,m]of B)D(m.element,H,z)},l=(z,H,m,s)=>{let a=B.get(z);if(a){let o=O(m,s),B2=Q(H,z,o);A(a.element,B2),G(a.element,m,s),a.element.dataset.id=String(H.id),a.element.ariaSelected=String(m),k(a.element,z)}},d=(z,H,m)=>{let s=B.get(z);if(s)G(s.element,H,m)},R=(z)=>{return B.get(z)?.element},w=(z)=>{if(Math.abs(z-U)<1)return;U=z;for(let[H,m]of B)k(m.element,H),D(m.element,H)},p=()=>{for(let[,z]of B)z.element.remove(),V.release(z.element);B.clear()};return{render:j2,updatePositions:f,updateItem:l,updateItemClasses:d,getElement:R,updateContainerWidth:w,clear:p,destroy:()=>{p(),V.clear()}}};var Yj=uj(()=>{t2()});var sJ=0,k2=5,aJ=100,Aj=2,rJ=(j=0)=>{let Q=Array(k2);for(let $=0;$<k2;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},nJ=(j,Q)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>aJ){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=Q,X.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=Q,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=Q,K.time=$,j.sampleIndex=(j.sampleIndex+1)%k2,j.sampleCount=Math.min(j.sampleCount+1,k2),j.sampleCount>=Aj){let X=(j.sampleIndex-j.sampleCount+k2)%k2,q=j.samples[X],Z=Q-q.position,V=$-q.time;j.velocity=V>0?Math.abs(Z)/V:0}return j.lastPosition=Q,j.lastTime=$,j},xj=(j,Q)=>{if(typeof j==="number"){let X=Q;return{getOffset:(q)=>q*j,getHeight:()=>j,indexAtOffset:(q)=>{if(X===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(q/j),X-1))},getTotalHeight:()=>X*j,getTotal:()=>X,rebuild:(q)=>{X=q},isVariable:()=>!1}}let $=Q,J=new Float64Array(0),K=(X)=>{$=X,J=new Float64Array(X+1),J[0]=0;for(let q=0;q<X;q++)J[q+1]=J[q]+j(q)};return K(Q),{getOffset:(X)=>{if(X<=0)return 0;if(X>=$)return J[$];return J[X]},getHeight:(X)=>j(X),indexAtOffset:(X)=>{if($===0)return 0;if(X<=0)return 0;if(X>=J[$])return $-1;let q=0,Z=$-1;while(q<Z){let V=q+Z+1>>>1;if(J[V]<=X)q=V;else Z=V-1}return q},getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(X)=>K(X),isVariable:()=>!0}},oJ=()=>{let j={},Q=(X,q)=>{if(!j[X])j[X]=new Set;return j[X].add(q),()=>$(X,q)},$=(X,q)=>{j[X]?.delete(q)};return{on:Q,off:$,emit:(X,q)=>{j[X]?.forEach((Z)=>{try{Z(q)}catch(V){console.error(`[vlist] Error in "${X}" handler:`,V)}})},clear:()=>{for(let X in j)delete j[X]}}},iJ=(j)=>{if(typeof j==="string"){let Q=document.querySelector(j);if(!Q)throw Error(`[vlist/builder] Container not found: ${j}`);return Q}return j},tJ=(j,Q,$,J)=>{let K=document.createElement("div");if(K.className=Q,J)K.classList.add(`${Q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),$)K.setAttribute("aria-label",$);if(J)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${Q}-viewport`,J)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let q=document.createElement("div");if(q.className=`${Q}-content`,q.style.position="relative",J)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${Q}-items`,Z.style.position="relative",J)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),X.appendChild(q),K.appendChild(X),j.appendChild(K),{root:K,viewport:X,content:q,items:Z}},eJ=(j=100)=>{let Q=[];return{acquire:()=>{let $=Q.pop();if($)return $;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:($)=>{if(Q.length<j)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),Q.push($)},clear:()=>{Q.length=0}}},j4=(j,Q,$,J,K)=>{if(J===0||Q===0){K.start=0,K.end=0;return}let X=$.indexAtOffset(j),q=$.indexAtOffset(j+Q);if(q<J-1)q++;K.start=Math.max(0,X),K.end=Math.min(J-1,Math.max(0,q))},J4=(j,Q,$,J)=>{if($===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q)},$4=(j,Q,$,J,K)=>{if(J===0)return 0;let X=Math.max(0,Math.min(j,J-1)),q=Q.getOffset(X),Z=Q.getHeight(X),V=Math.max(0,Q.getTotalHeight()-$),B;switch(K){case"center":B=q-($-Z)/2;break;case"end":B=q-$+Z;break;default:B=q}return Math.max(0,Math.min(B,V))},Q4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,X4=(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}},hj=(j)=>{if(!j.container)throw Error("[vlist/builder] Container is required");if(!j.item)throw Error("[vlist/builder] item configuration is required");let Q=j.direction==="horizontal",$=Q?"width":"height",J=Q?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${$} is required${Q?" 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(Q&&j.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let K=new Map,X=!1,q={use(Z){if(X)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(Z.name,Z),q},build(){if(X)throw Error("[vlist/builder] .build() can only be called once");return X=!0,q4(j,K,Q,J)}};return q};function q4(j,Q,$,J){let{item:K,items:X,overscan:q=3,classPrefix:Z="vlist",ariaLabel:V,reverse:B=!1,scroll:U}=j,L=U?.wheel??!0,y=U?.wrap??!1,T=B,W=`${Z}-${sJ++}`,M=J,N=$?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,O=K.template,F={overscan:q,classPrefix:Z,reverse:T,wrap:y,horizontal:$,ariaIdPrefix:W},b=Array.from(Q.values()).sort((Y,E)=>(Y.priority??50)-(E.priority??50)),_=new Set(b.map((Y)=>Y.name));for(let Y of b)if(Y.conflicts){for(let E of Y.conflicts)if(_.has(E))throw Error(`[vlist/builder] ${Y.name} and ${E} cannot be combined`)}if($){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(_.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(T){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let A=iJ(j.container),G=tJ(A,Z,V,$),P=oJ(),D=X?[...X]:[],k=xj(M,D.length),x=eJ(),j2=G.viewport.clientHeight,f=G.viewport.clientWidth,l=!1,d=!1,R=0,w=null,p=null,I=rJ(0),z={start:0,end:0},H={start:0,end:0},m={start:-1,end:-1},s={viewportState:{scrollTop:0,containerHeight:j2,totalHeight:k.getTotalHeight(),actualHeight:k.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},a=new Map,o={selected:!1,focused:!1},B2=`${Z}-item`,K2="",v=new Map,r=()=>{v.clear();for(let Y=0;Y<D.length;Y++){let E=D[Y];if(E)v.set(E.id,Y)}};r();let h=null,$2=()=>h?h.getTotal():D.length,i=[],Q2=[],D2=[],S=[],g=[],t=[],c=new Map,q2=()=>{return $?G.viewport.scrollLeft:G.viewport.scrollTop},X2=(Y)=>{if($)G.viewport.scrollLeft=Y;else G.viewport.scrollTop=Y},M2=(Y=2)=>{let E=k.getTotalHeight();return R+j2>=E-Y},A2=!1,J2,N2,L2=(Y,E,C,u,e)=>{j4(Y,E,C,u,e)},Y2=(Y,E,C,u,e)=>{return $4(Y,E,C,u,e)},V2=(Y,E)=>{if(typeof E==="string")Y.innerHTML=E;else Y.replaceChildren(E)},_2=(Y,E)=>{let C=Math.round(k.getOffset(E));if($)Y.style.transform=`translateX(${C}px)`;else Y.style.transform=`translateY(${C}px)`},H2=(Y,E)=>{let C=x.acquire();if(C.className=B2,$){if(C.style.width=`${k.getHeight(Y)}px`,N!=null)C.style.height=`${N}px`}else C.style.height=`${k.getHeight(Y)}px`;if(C.dataset.index=String(Y),C.dataset.id=String(E.id),C.ariaSelected="false",C.id=`${W}-item-${Y}`,K2=String($2()),C.setAttribute("aria-setsize",K2),C.setAttribute("aria-posinset",String(Y+1)),String(E.id).startsWith("__placeholder_"))C.classList.add(`${Z}-item--placeholder`);return V2(C,O(E,Y,o)),_2(C,Y),C},f2=()=>{let Y=`${k.getTotalHeight()}px`;if($)G.content.style.width=Y;else G.content.style.height=Y},Wj=new Set,Nj=-1,OJ=()=>{if(l)return;let Y=$2();if(L2(R,j2,k,Y,z),J4(z,q,Y,H),H.start===m.start&&H.end===m.end){if(A2)for(let[n,U2]of a)_2(U2,n);return}let E=String(Y),C=E!==K2;K2=E;for(let[n,U2]of a)if(n<H.start||n>H.end)U2.remove(),x.release(U2),a.delete(n);let u=document.createDocumentFragment(),e=[];for(let n=H.start;n<=H.end;n++){let U2=h?h.getItem(n):D[n];if(!U2)continue;let Z2=a.get(n);if(Z2){let F2=Z2.dataset.id,p2=String(U2.id);if(F2!==p2){let hJ=F2?.startsWith("__placeholder_"),Ij=p2.startsWith("__placeholder_");if(V2(Z2,O(U2,n,o)),Z2.dataset.id=p2,$)Z2.style.width=`${k.getHeight(n)}px`;else Z2.style.height=`${k.getHeight(n)}px`;if(Ij)Z2.classList.add(`${Z}-item--placeholder`);else Z2.classList.remove(`${Z}-item--placeholder`);if(hJ&&!Ij)Z2.classList.add(`${Z}-item--replaced`),setTimeout(()=>{Z2.classList.remove(`${Z}-item--replaced`)},300)}_2(Z2,n);let r2=Wj.has(U2.id),xJ=n===Nj;if(Z2.classList.toggle(`${Z}-item--selected`,r2),Z2.classList.toggle(`${Z}-item--focused`,xJ),Z2.ariaSelected=r2?"true":"false",C)Z2.setAttribute("aria-setsize",K2)}else{let F2=H2(n,U2),p2=Wj.has(U2.id),r2=n===Nj;if(p2)F2.classList.add(`${Z}-item--selected`),F2.ariaSelected="true";if(r2)F2.classList.add(`${Z}-item--focused`);u.appendChild(F2),e.push({index:n,element:F2})}}if(e.length>0){G.items.appendChild(u);for(let{index:n,element:U2}of e)a.set(n,U2)}m.start=H.start,m.end=H.end,s.lastRenderRange.start=H.start,s.lastRenderRange.end=H.end,s.viewportState.scrollTop=R,s.viewportState.visibleRange.start=z.start,s.viewportState.visibleRange.end=z.end,s.viewportState.renderRange.start=H.start,s.viewportState.renderRange.end=H.end,P.emit("range:change",{range:{start:H.start,end:H.end}})},zJ=()=>{m.start=-1,m.end=-1,J2()};J2=OJ,N2=zJ;let I2=()=>{if(l)return;let Y=q2(),E=Y>=R?"down":"up";if(I=nJ(I,Y),!G.root.classList.contains(`${Z}--scrolling`))G.root.classList.add(`${Z}--scrolling`);R=Y,J2(),P.emit("scroll",{scrollTop:Y,direction:E}),P.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Aj});for(let C=0;C<i.length;C++)i[C](Y,E);if(p)clearTimeout(p);p=setTimeout(()=>{G.root.classList.remove(`${Z}--scrolling`),I.velocity=0,I.sampleCount=0,P.emit("velocity:change",{velocity:0,reliable:!1})},U?.idleTimeout??150)},s2=null,R2=G.viewport;if(R2.addEventListener("scroll",I2,{passive:!0}),$&&L)s2=(Y)=>{if(Y.deltaX)return;Y.preventDefault(),G.viewport.scrollLeft+=Y.deltaY},G.viewport.addEventListener("wheel",s2);let Tj=(Y)=>{let C=Y.target.closest("[data-index]");if(C){let u=parseInt(C.dataset.index??"-1",10);if(u>=0){let e=h?.getItem(u)??D[u];if(e){if(e.__groupHeader)return;P.emit("item:click",{item:e,index:u,event:Y})}}}for(let u=0;u<Q2.length;u++)Q2[u](Y)},bJ=(Y)=>{let C=Y.target.closest("[data-index]");if(C){let u=parseInt(C.dataset.index??"-1",10);if(u>=0){let e=h?.getItem(u)??D[u];if(e){if(e.__groupHeader)return;P.emit("item:dblclick",{item:e,index:u,event:Y})}}}},wj=(Y)=>{for(let E=0;E<D2.length;E++)D2[E](Y)};G.items.addEventListener("click",Tj),G.items.addEventListener("dblclick",bJ),G.root.addEventListener("keydown",wj);let Gj=!0,PJ=()=>f,yJ=()=>j2,Vj=new ResizeObserver((Y)=>{if(l)return;for(let E of Y){let C=E.contentRect.height,u=E.contentRect.width,e=$?u:C;if(f=u,Math.abs(e-j2)>1){if(j2=e,s.viewportState.containerHeight=e,d)f2(),J2(),P.emit("resize",{height:C,width:u})}if(d)for(let n=0;n<S.length;n++)S[n](u,C)}});if(Gj)Vj.observe(G.viewport);let W2={get dom(){return G},get heightCache(){return k},get emitter(){return P},get config(){return F},get rawConfig(){return j},get renderer(){return{render:(Y,E,C,u,e)=>{Wj=C,Nj=u,N2()},updateItemClasses:(Y,E,C)=>{let u=a.get(Y);if(!u)return;u.classList.toggle(`${Z}-item--selected`,E),u.classList.toggle(`${Z}-item--focused`,C),u.ariaSelected=E?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Y)=>a.get(Y)??null,clear:()=>{},destroy:()=>{}}},set renderer(Y){},get dataManager(){return h},set dataManager(Y){h=Y},get scrollController(){return _j},set scrollController(Y){_j=Y},state:s,getContainerWidth(){return f},afterScroll:i,clickHandlers:Q2,keydownHandlers:D2,resizeHandlers:S,contentSizeHandlers:g,destroyHandlers:t,methods:c,replaceTemplate(Y){O=Y},replaceRenderer(Y){},replaceDataManager(Y){h=Y},replaceScrollController(Y){_j=Y},getItemsForRange(Y){let E=[];for(let C=Y.start;C<=Y.end;C++){let u=h?h.getItem(C):D[C];if(u)E.push(u)}return E},getAllLoadedItems(){if(h){let Y=h.getTotal(),E=[];for(let C=0;C<Y;C++){let u=h.getItem(C);if(u)E.push(u)}return E}return[...D]},getVirtualTotal(){return $2()},getCachedCompression(){return{isCompressed:!1,actualHeight:k.getTotalHeight(),virtualHeight:k.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:R,totalItems:$2(),containerHeight:j2,rangeStart:H.start}},renderIfNeeded(){J2()},forceRender(){N2()},invalidateRendered(){for(let[,Y]of a)Y.remove(),x.release(Y);a.clear()},getRenderFns(){return{renderIfNeeded:J2,forceRender:N2}},setRenderFns(Y,E){J2=Y,N2=E},setVirtualTotalFn(Y){$2=Y},rebuildHeightCache(Y){k.rebuild(Y??$2())},setHeightConfig(Y){k=xj(Y,$2())},updateContentSize(Y){let E=`${Y}px`;if($)G.content.style.width=E;else G.content.style.height=E},updateCompressionMode(){},setVisibleRangeFn(Y){L2=Y},setScrollToPosFn(Y){Y2=Y},setPositionElementFn(Y){_2=Y},setScrollFns(Y,E){q2=Y,X2=(C)=>{E(C),I2()}},setScrollTarget(Y){R2.removeEventListener("scroll",I2),R2=Y,R2.addEventListener("scroll",I2,{passive:!0})},getScrollTarget(){return R2},setContainerDimensions(Y){PJ=Y.width,yJ=Y.height,f=Y.width(),j2=Y.height(),s.viewportState.containerHeight=j2},disableViewportResize(){if(Gj)Gj=!1,Vj.unobserve(G.viewport)}};h={getState:()=>({total:D.length,cached:D.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>D.length,getCached:()=>D.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>D[Y],getItemById:(Y)=>{let E=v.get(Y);return E!==void 0?D[E]:void 0},getIndexById:(Y)=>v.get(Y)??-1,isItemLoaded:(Y)=>Y>=0&&Y<D.length&&D[Y]!==void 0,getItemsInRange:(Y,E)=>{let C=[],u=Math.max(0,Y),e=Math.min(E,D.length-1);for(let n=u;n<=e;n++)C.push(D[n]);return C},setTotal:(Y)=>{},setItems:(Y,E=0,C)=>{if(E===0&&(C!==void 0||D.length===0))D=[...Y];else{let u=E+Y.length;if(D.length<u)D.length=u;for(let e=0;e<Y.length;e++)D[E+e]=Y[e]}if(r(),d){k.rebuild($2()),f2(),W2.updateCompressionMode();for(let u=0;u<g.length;u++)g[u]();N2()}},updateItem:(Y,E)=>{let C=v.get(Y);if(C===void 0)return!1;let u=D[C];if(!u)return!1;if(D[C]={...u,...E},E.id!==void 0&&E.id!==Y)v.delete(Y),v.set(E.id,C);let e=a.get(C);if(e)V2(e,O(D[C],C,o)),e.dataset.id=String(D[C].id);return!0},removeItem:(Y)=>{let E=v.get(Y);if(E===void 0)return!1;if(D.splice(E,1),r(),d){k.rebuild($2()),f2(),W2.updateCompressionMode();for(let C=0;C<g.length;C++)g[C]();N2()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{D=[],v.clear()},reset:()=>{if(D=[],v.clear(),d)k.rebuild(0),f2(),N2()}};let _j={getScrollTop:()=>q2(),scrollTo:(Y)=>{X2(Y),R=Y,J2()},scrollBy:(Y)=>{let E=q2()+Y;X2(E),R=E,J2()},isAtTop:()=>R<=2,isAtBottom:(Y=2)=>M2(Y),getScrollPercentage:()=>{let Y=k.getTotalHeight(),E=Math.max(0,Y-j2);return E>0?R/E:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Aj,isScrolling:()=>G.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{A2=!0},disableCompression:()=>{A2=!1},isCompressed:()=>A2,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{j2=Y},destroy:()=>{}},vj=new Map;for(let Y of b)if(Y.methods)for(let E of Y.methods){let C=vj.get(E);if(C)throw Error(`[vlist/builder] Method "${E}" is registered by both "${C}" and "${Y.name}"`);vj.set(E,Y.name)}for(let Y of b)Y.setup(W2);if(d=!0,W2.state.isInitialized=!0,f2(),J2(),T&&D.length>0){let Y=Y2(D.length-1,k,j2,D.length,"end");X2(Y),R=Y,J2()}let HJ=(Y)=>{W2.dataManager.setItems(Y,0,Y.length)},RJ=T?(Y)=>{let E=M2(2),C=D.length;if(W2.dataManager.setItems(Y,C),E&&D.length>0){let u=Y2(D.length-1,k,j2,D.length,"end");X2(u),R=u,J2()}}:(Y)=>{let E=D.length;W2.dataManager.setItems(Y,E)},kJ=T?(Y)=>{let E=q2(),C=k.getTotalHeight(),u=[...D];W2.dataManager.clear(),W2.dataManager.setItems([...Y,...u],0);let n=k.getTotalHeight()-C;if(n>0)X2(E+n),R=E+n}:(Y)=>{let E=[...D];W2.dataManager.clear(),W2.dataManager.setItems([...Y,...E],0)},CJ=(Y,E)=>{W2.dataManager.updateItem(Y,E)},TJ=(Y)=>{W2.dataManager.removeItem(Y)},wJ=async()=>{if(W2.dataManager.reload)await W2.dataManager.reload()},a2=()=>{if(w!==null)cancelAnimationFrame(w),w=null},vJ=(Y,E,C)=>{if(a2(),Math.abs(E-Y)<1){X2(E),R=E,J2();return}let u=performance.now(),e=(n)=>{let U2=n-u,Z2=Math.min(U2/C,1),F2=Y+(E-Y)*Q4(Z2);if(X2(F2),R=F2,J2(),Z2<1)w=requestAnimationFrame(e);else w=null};w=requestAnimationFrame(e)},Sj=(Y,E)=>{let{align:C,behavior:u,duration:e}=X4(E),n=$2(),U2=Y;if(y&&n>0)U2=(U2%n+n)%n;let Z2=Y2(U2,k,j2,n,C);if(u==="smooth")vJ(q2(),Z2,e);else a2(),X2(Z2)},SJ=(Y,E)=>{let C=v.get(Y)??W2.dataManager.getIndexById(Y);if(C>=0)Sj(C,E)},fJ=()=>q2(),IJ=(Y,E)=>{return P.on(Y,E)},pJ=(Y,E)=>{P.off(Y,E)},uJ=()=>{if(l)return;if(l=!0,W2.state.isDestroyed=!0,G.items.removeEventListener("click",Tj),G.root.removeEventListener("keydown",wj),R2.removeEventListener("scroll",I2),Vj.disconnect(),s2)G.viewport.removeEventListener("wheel",s2);if(p)clearTimeout(p);for(let Y=0;Y<t.length;Y++)t[Y]();for(let Y of b)if(Y.destroy)Y.destroy();a2();for(let[,Y]of a)Y.remove(),x.release(Y);a.clear(),x.clear(),P.clear(),G.root.remove()},fj={get element(){return G.root},get items(){if(c.has("_getItems"))return c.get("_getItems")();return D},get total(){if(c.has("_getTotal"))return c.get("_getTotal")();return $2()},setItems:c.has("setItems")?c.get("setItems"):HJ,appendItems:c.has("appendItems")?c.get("appendItems"):RJ,prependItems:c.has("prependItems")?c.get("prependItems"):kJ,updateItem:c.has("updateItem")?c.get("updateItem"):CJ,removeItem:c.has("removeItem")?c.get("removeItem"):TJ,reload:c.has("reload")?c.get("reload"):wJ,scrollToIndex:c.has("scrollToIndex")?c.get("scrollToIndex"):Sj,scrollToItem:c.has("scrollToItem")?c.get("scrollToItem"):SJ,cancelScroll:c.has("cancelScroll")?c.get("cancelScroll"):a2,getScrollPosition:c.has("getScrollPosition")?c.get("getScrollPosition"):fJ,on:IJ,off:pJ,destroy:uJ};for(let[Y,E]of c){if(Y==="setItems"||Y==="appendItems"||Y==="prependItems"||Y==="updateItem"||Y==="removeItem"||Y==="reload"||Y==="scrollToIndex"||Y==="scrollToItem"||Y==="cancelScroll"||Y==="getScrollPosition")continue;fj[Y]=E}return fj}t2();var T2=(j,Q,$={},J="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:V=!0,hoverZoneWidth:B=16,showOnViewportEnter:U=!0}=$,L=0,y=0,T=0,W=0,M=!1,N=!1,O=0,F=0,b=0,_=null,A=!1,G=null,P=null,D=K?"width":"height",k=K?"translateX":"translateY",x=K?(i)=>i.clientX:(i)=>i.clientY,j2=K?"left":"top",f=document.createElement("div"),l=document.createElement("div"),d=V?document.createElement("div"):null,R=()=>{if(f.className=`${J}-scrollbar`,l.className=`${J}-scrollbar-thumb`,K)f.classList.add(`${J}-scrollbar--horizontal`);if(f.appendChild(l),j.appendChild(f),d){if(d.className=`${J}-scrollbar-hover`,K)d.classList.add(`${J}-scrollbar-hover--horizontal`),d.style.height=`${B}px`;else d.style.width=`${B}px`;j.appendChild(d)}},w=()=>{if(_)clearTimeout(_),_=null},p=()=>{if(!X)return;w(),_=setTimeout(z,q)},I=()=>{if(L<=y)return;if(w(),!A)f.classList.add(`${J}-scrollbar--visible`),A=!0;if(X&&!M&&!N)p()},z=()=>{if(M||N)return;f.classList.remove(`${J}-scrollbar--visible`),A=!1},H=(i,Q2)=>{L=i,y=Q2;let D2=L>y;if(f.style.display=D2?"":"none",!D2){z();return}let S=y/L;T=Math.max(Z,S*y),l.style[D]=`${T}px`,W=y-T,m(b)},m=(i)=>{if(b=i,L<=y||W<=0)return;let Q2=L-y,S=Math.min(1,Math.max(0,i/Q2))*W;l.style.transform=`${k}(${S}px)`},s=(i)=>{if(i.target===l)return;let Q2=f.getBoundingClientRect(),g=x(i)-Q2[j2]-T/2,c=Math.max(0,Math.min(g,W))/W,q2=L-y,X2=c*q2;Q(X2),I()},a=(i)=>{i.preventDefault(),i.stopPropagation(),M=!0,O=x(i),F=b,w(),f.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",o),document.addEventListener("mouseup",B2)},o=(i)=>{if(!M)return;let Q2=x(i)-O,D2=W>0?Q2/W:0,S=L-y,g=D2*S,t=Math.max(0,Math.min(F+g,S)),q2=t/S*W;if(l.style.transform=`${k}(${q2}px)`,P=t,G===null)G=requestAnimationFrame(()=>{if(P!==null)Q(P);G=null})},B2=()=>{if(M=!1,G!==null)cancelAnimationFrame(G),G=null;if(P!==null)Q(P),P=null;if(f.classList.remove(`${J}-scrollbar--dragging`),X&&!N)p();document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",B2)},K2=()=>{if(U)I()},v=()=>{if(!M){if(N=!1,X)p()}},r=()=>{N=!0,w(),I()},h=()=>{if(N=!1,!M&&X)p()},$2=()=>{if(w(),G!==null)cancelAnimationFrame(G),G=null;if(f.removeEventListener("click",s),f.removeEventListener("mouseenter",r),f.removeEventListener("mouseleave",h),l.removeEventListener("mousedown",a),j.removeEventListener("mouseenter",K2),j.removeEventListener("mouseleave",v),document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",B2),d){if(d.removeEventListener("mouseenter",r),d.removeEventListener("mouseleave",h),d.parentNode)d.parentNode.removeChild(d)}if(f.parentNode)f.parentNode.removeChild(f)};if(R(),f.addEventListener("click",s),f.addEventListener("mouseenter",r),f.addEventListener("mouseleave",h),l.addEventListener("mousedown",a),j.addEventListener("mouseenter",K2),j.addEventListener("mouseleave",v),d)d.addEventListener("mouseenter",r),d.addEventListener("mouseleave",h);return{show:I,hide:z,updateBounds:H,updatePosition:m,isVisible:()=>A,destroy:$2}};var oj=(j)=>{let Q=null;return{name:"withScrollbar",priority:30,setup($){let{dom:J,config:K}=$,{classPrefix:X,horizontal:q}=K;if(Q=T2(J.viewport,(B)=>$.scrollController.scrollTo(B),j??{},X,q),!J.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))J.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();Q.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let V=Q;$.afterScroll.push((B,U)=>{V.updatePosition(B),V.show()}),$.resizeHandlers.push((B,U)=>{if(V){let L=$.getCachedCompression();V.updateBounds(L.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(V){let B=$.getCachedCompression();V.updateBounds(B.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(Q)Q.destroy(),Q=null}}};var ij=(j=0)=>{let Q=[,,,,,,,,];for(let $=0;$<8;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},e2=(j,Q)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=Q,X.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=Q,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=Q,K.time=$,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let X=(j.sampleIndex-j.sampleCount+8)%8,q=j.samples[X],Z=Q-q.position,V=$-q.time;j.velocity=V>0?Z/V:0}return j.lastPosition=Q,j.lastTime=$,j},Z4=(j)=>j.sampleCount>=3,tj=(j,Q={})=>{let{wheel:$=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:X=150,onScroll:q,onIdle:Z,scrollElement:V,horizontal:B=!1}=Q,U=!!V,L=0,y=0,T=U?B?window.innerWidth:window.innerHeight:B?j.clientWidth:j.clientHeight,W=Q.compressed??!1,M=Q.compression,N=ij(),O=!1,F=null,_=jj(()=>{let v=B?j.scrollLeft:j.scrollTop,r=v>=L?"down":"up";if(N=e2(N,v),L=v,q)q({scrollTop:L,direction:r,velocity:N.velocity});x()}),G=jj(()=>{let v=j.getBoundingClientRect(),r=B?Math.max(0,-v.left):Math.max(0,-v.top),h=r>=L?"down":"up";if(N=e2(N,r),L=r,!O)O=!0;if(q)q({scrollTop:L,direction:h,velocity:N.velocity});x()}),P=(v)=>{v.preventDefault()},D=(v)=>{if(v.deltaX)return;v.preventDefault(),j.scrollLeft+=v.deltaY},k=(v)=>{if(!W)return;v.preventDefault();let r=(B?v.deltaX||v.deltaY:v.deltaY)*J,h=L+r;if(K)h=L+r*0.3;if(h=Math.max(0,Math.min(h,y)),h!==L){let i=h>=L?"down":"up";if(N=e2(N,h),L=h,!O)O=!0;if(q)q({scrollTop:L,direction:i,velocity:N.velocity});x()}},x=()=>{if(F)clearTimeout(F);F=setTimeout(()=>{if(O=!1,N=ij(L),Z)Z()},X)},j2=(v)=>{if(W)return;if(W=!0,M=v,y=v.virtualHeight-T,U)return;if(_.cancel(),j.removeEventListener("scroll",_),!$)j.removeEventListener("wheel",P);else if(B)j.removeEventListener("wheel",D);if(B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",k,{passive:!1});let r=B?j.scrollLeft:j.scrollTop;if(r>0){let h=B?M?.actualHeight??j.scrollWidth:M?.actualHeight??j.scrollHeight;L=r/h*y}if(B)j.scrollLeft=0;else j.scrollTop=0},f=()=>{if(!W)return;if(W=!1,U){M=void 0;return}if(j.removeEventListener("wheel",k),B)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!$)j.addEventListener("wheel",P,{passive:!1});else if(B)j.addEventListener("wheel",D,{passive:!1});if(M&&L>0){let r=L/y*(M.actualHeight-T);if(B)j.scrollLeft=r;else j.scrollTop=r}M=void 0},l=()=>{if(U||W)return L;return B?j.scrollLeft:j.scrollTop},d=(v,r=!1)=>{let h=Math.max(0,Math.min(v,y||1/0));if(U){let $2=j.getBoundingClientRect();if(B){let i=$2.left+window.scrollX;window.scrollTo({left:i+h,behavior:r?"smooth":"auto"})}else{let i=$2.top+window.scrollY;window.scrollTo({top:i+h,behavior:r?"smooth":"auto"})}}else if(W){if(h===L)return;let i=h>=L?"down":"up";if(N=e2(N,h),L=h,!O)O=!0;if(q)q({scrollTop:L,direction:i,velocity:N.velocity});x()}else if(B)j.scrollTo({left:h,behavior:r?"smooth":"auto"});else j.scrollTo({top:h,behavior:r?"smooth":"auto"})},R=(v)=>{d(l()+v)},w=()=>{return l()<=0},p=(v=0)=>{let r=l(),h=U||W?y:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return r>=h-v},I=()=>{let v=l(),r=U||W?y:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(r<=0)return 0;return Math.min(1,Math.max(0,v/r))},z=(v)=>{if(v.compression)M=v.compression,y=M.virtualHeight-T},H=()=>W,m=()=>Math.abs(N.velocity),s=()=>Z4(N),a=()=>O,o=()=>U,B2=(v)=>{if(T=v,M)y=M.virtualHeight-T},K2=()=>{if(F)clearTimeout(F);if(U)G.cancel(),window.removeEventListener("scroll",G);else _.cancel(),j.removeEventListener("scroll",_),j.removeEventListener("wheel",k),j.removeEventListener("wheel",P),j.removeEventListener("wheel",D)};if(U){if(W&&M)y=M.virtualHeight-T;window.addEventListener("scroll",G,{passive:!0})}else if(W&&M){if(y=M.virtualHeight-T,B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",k,{passive:!1})}else{if(B)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!$)j.addEventListener("wheel",P,{passive:!1});else if(B)j.addEventListener("wheel",D,{passive:!1})}return{getScrollTop:l,scrollTo:d,scrollBy:R,isAtTop:w,isAtBottom:p,getScrollPercentage:I,getVelocity:m,isTracking:s,isScrolling:a,updateConfig:z,enableCompression:j2,disableCompression:f,isCompressed:H,isWindowMode:o,updateContainerHeight:B2,destroy:K2}},jj=(j)=>{let Q=null,$=null,J=(...K)=>{if($=K,Q===null)Q=requestAnimationFrame(()=>{if(Q=null,$)j(...$)})};return J.cancel=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null},J};var B4=0.65,U4=0.5,D4=0.95,W4=0.1,N4=5,G4=100,ej=()=>{let j=null,Q=0,$=!1,J=0,K=null,X=0,q=0,Z=null,V=[];return{name:"withScale",priority:20,setup(B){let{dom:U,config:L}=B,{classPrefix:y,horizontal:T}=L,W=()=>{let F=B.getVirtualTotal(),b=E2(F,B.heightCache);if(b.isCompressed&&!$){$=!0,B.scrollController.enableCompression(b),B.updateContentSize(b.virtualHeight),B.setScrollFns(()=>Q,(f)=>{if(Q=f,J=f,K!==null)cancelAnimationFrame(K),K=null});let _=()=>{let f=J-Q;if(Math.abs(f)<U4)Q=J,K=null;else Q+=f*B4,K=requestAnimationFrame(_);B.scrollController.scrollTo(Q)},A=U.viewport,G=(f)=>{f.preventDefault();let d=B.getCachedCompression().virtualHeight-B.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+f.deltaY,d)),K===null)K=requestAnimationFrame(_)};A.addEventListener("wheel",G,{passive:!1});let P=()=>{if(Z!==null)cancelAnimationFrame(Z),Z=null},D=(f)=>{if(P(),K!==null)cancelAnimationFrame(K),K=null;let l=f.touches[0];if(!l)return;let d=T?l.clientX:l.clientY;X=d,q=Q,V=[{time:performance.now(),y:d}]},k=(f)=>{f.preventDefault();let l=f.touches[0];if(!l)return;let d=T?l.clientX:l.clientY,R=performance.now();if(V.push({time:R,y:d}),V.length>N4)V.shift();let w=X-d,I=B.getCachedCompression().virtualHeight-B.state.viewportState.containerHeight,z=Math.max(0,Math.min(q+w,I));Q=z,J=z,B.scrollController.scrollTo(z)},x=(f)=>{let l=performance.now(),d=V.filter((I)=>l-I.time<G4),R=0;if(d.length>=2){let I=d[0],z=d[d.length-1],H=z.time-I.time;if(H>0)R=(I.y-z.y)/H}if(V=[],Math.abs(R)<W4)return;let w=R*16,p=()=>{if(w*=D4,Math.abs(w)<0.5){Z=null;return}let z=B.getCachedCompression().virtualHeight-B.state.viewportState.containerHeight,H=Q+w;if(H=Math.max(0,Math.min(H,z)),H<=0&&w<0||H>=z&&w>0){Q=H,J=H,B.scrollController.scrollTo(H),Z=null;return}Q=H,J=H,B.scrollController.scrollTo(H),Z=requestAnimationFrame(p)};Z=requestAnimationFrame(p)};if(A.addEventListener("touchstart",D,{passive:!0}),A.addEventListener("touchmove",k,{passive:!1}),A.addEventListener("touchend",x,{passive:!0}),A.addEventListener("touchcancel",x,{passive:!0}),B.destroyHandlers.push(()=>{if(A.removeEventListener("wheel",G),A.removeEventListener("touchstart",D),A.removeEventListener("touchmove",k),A.removeEventListener("touchend",x),A.removeEventListener("touchcancel",x),P(),K!==null)cancelAnimationFrame(K),K=null}),!U.viewport.querySelector(`.${y}-scrollbar-track`)){if(j=T2(U.viewport,(l)=>B.scrollController.scrollTo(l),{},y,T),!U.viewport.classList.contains(`${y}-viewport--custom-scrollbar`))U.viewport.classList.add(`${y}-viewport--custom-scrollbar`);j.updateBounds(b.virtualHeight,B.state.viewportState.containerHeight);let f=j;B.afterScroll.push((l,d)=>{if(f)f.updatePosition(l),f.show()}),B.resizeHandlers.push((l,d)=>{if(f){let R=B.getCachedCompression();f.updateBounds(R.virtualHeight,B.state.viewportState.containerHeight)}})}}else if(!b.isCompressed&&$)$=!1,B.scrollController.disableCompression(),B.updateContentSize(b.actualHeight);else if(b.isCompressed)B.scrollController.updateConfig({compression:b}),B.updateContentSize(b.virtualHeight);if(j)j.updateBounds(b.virtualHeight,B.state.viewportState.containerHeight);B.state.cachedCompression={state:b,totalItems:F}};B.updateCompressionMode=W;let M=B.getCachedCompression.bind(B);B.getCachedCompression=()=>{if(B.state.cachedCompression)return B.state.cachedCompression.state;return M()},B.setVisibleRangeFn((F,b,_,A,G)=>{N=null,O=null;let P=E2(A,_);o2(F,b,_,A,P,G)}),B.setScrollToPosFn((F,b,_,A,G)=>{let P=E2(A,b);return i2(F,b,_,A,P,G)});let N=null,O=null;B.setPositionElementFn((F,b)=>{let _=B.getVirtualTotal(),A=E2(_,B.heightCache);if(A.isCompressed){let G=B.scrollController.getScrollTop();if(N===null||b<O)O=b,N=Math.round(C2(b,G,B.heightCache,_,B.state.viewportState.containerHeight,A));let P=N+B.heightCache.getOffset(b)-B.heightCache.getOffset(O),D=B.config.horizontal;F.style.transform=D?`translateX(${P}px)`:`translateY(${P}px)`}else{let G=Math.round(B.heightCache.getOffset(b)),P=B.config.horizontal;F.style.transform=P?`translateX(${G}px)`:`translateY(${G}px)`}}),W(),B.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null;if(Z!==null)cancelAnimationFrame(Z),Z=null}}};var Jj=(j={})=>{let{chunkSize:Q=100,maxCachedItems:$=5000,evictionBuffer:J=200,onEvict:K}=j,X=new Map,q=0,Z=0,V=(R)=>{let w=X.get(R);if(!w)w={items:Array(Q),count:0,lastAccess:Date.now()},X.set(R,w);else w.lastAccess=Date.now();return w},B=(R)=>{return Math.floor(R/Q)},U=(R)=>{return R%Q},L=()=>q,y=(R)=>{q=R},T=(R)=>{if(R<0||R>=q)return;let w=B(R),p=X.get(w);if(!p)return;return p.items[U(R)]},W=(R)=>{if(R<0||R>=q)return!1;let w=B(R),p=X.get(w);if(!p)return!1;return p.items[U(R)]!==void 0},M=(R,w)=>{let p=B(R),I=V(p),z=U(R),H=I.items[z]===void 0;if(I.items[z]=w,H)I.count++,Z++;if(R>=q)q=R+1},N=(R,w)=>{for(let p=0;p<w.length;p++){let I=w[p];if(I!==void 0)M(R+p,I)}},O=(R)=>{if(R<0||R>=q)return!1;let w=B(R),p=X.get(w);if(!p)return!1;let I=U(R);if(p.items[I]===void 0)return!1;if(p.items[I]=void 0,p.count--,Z--,p.count===0)X.delete(w);return!0},F=(R,w)=>{let p=[];for(let I=R;I<=w&&I<q;I++)p.push(T(I));return p},b=(R,w)=>{for(let p=R;p<=w&&p<q;p++)if(!W(p))return!1;return!0},_=()=>{let R=[],w=null,p=Array.from(X.keys()).sort((I,z)=>I-z);for(let I of p){let z=X.get(I);if(!z)continue;let H=I*Q;for(let m=0;m<Q;m++){let s=H+m;if(s>=q)break;if(z.items[m]!==void 0)if(w===null)w={start:s,end:s};else if(s===w.end+1)w.end=s;else R.push(w),w={start:s,end:s};else if(w!==null)R.push(w),w=null}}if(w!==null)R.push(w);return R},A=(R,w)=>{let p=[],I=null;for(let z=R;z<=w&&z<q;z++)if(!W(z))if(I===null)I={start:z,end:z};else I.end=z;else if(I!==null)p.push(I),I=null;if(I!==null)p.push(I);return p},G=(R)=>{return X.has(R)},P=(R)=>{let w=X.get(R);if(w)w.lastAccess=Date.now()},D=(R,w)=>{if(R>w||X.size===0)return;let p=Date.now(),I=B(Math.max(0,R)),z=B(Math.min(q-1,w));for(let H=I;H<=z;H++){let m=X.get(H);if(m)m.lastAccess=p}},k=(R,w)=>{if(Z<=$)return 0;let p=Math.max(0,R-J),I=Math.min(q-1,w+J),z=B(p),H=B(I),m=0,s=[];for(let[a,o]of X)if(a<z||a>H)m+=o.count,s.push(a),Z-=o.count,X.delete(a);if(m>0&&K)K(m,s);return m},x=()=>{if(Z<=$)return 0;let R=Array.from(X.entries()).sort(([,I],[,z])=>I.lastAccess-z.lastAccess),w=0,p=[];for(let[I,z]of R){if(Z<=$)break;w+=z.count,Z-=z.count,p.push(I),X.delete(I)}if(w>0&&K)K(w,p);return w},j2=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:X.size,chunkSize:Q,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},f=()=>Z,l=()=>{X.clear(),Z=0};return{chunkSize:Q,maxCachedItems:$,getTotal:L,setTotal:y,get:T,has:W,set:M,setRange:N,delete:O,getRange:F,isRangeLoaded:b,getLoadedRanges:_,findUnloadedRanges:A,getChunkIndex:B,isChunkLoaded:G,touchChunk:P,touchChunksForRange:D,evictDistant:k,evictToLimit:x,getStats:j2,getCachedCount:f,clear:l,reset:()=>{l(),q=0}}},$j=(j)=>{if(j.length===0)return[];let Q=[...j].sort((J,K)=>J.start-K.start),$=[{...Q[0]}];for(let J=1;J<Q.length;J++){let K=Q[J],X=$[$.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else $.push({...K})}return $},h2=(j,Q,$)=>{let J=Math.floor(j.start/$)*$,K=Math.ceil((j.end+1)/$)*$-1,X={start:J,end:K};if(Q.length===0)return[X];let q=[],Z=$j(Q),V=X.start;for(let B of Z){if(B.end<V)continue;if(B.start>X.end)break;if(B.start>V)q.push({start:V,end:Math.min(B.start-1,X.end)});if(V=B.end+1,V>X.end)break}if(V<=X.end)q.push({start:V,end:X.end});return q};var Qj=(j={})=>{let{enabled:Q=!0,maskCharacter:$="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:X}=j,q=null,Z=!1,V=0,B=(O)=>{if(!Q||Z||O.length===0)return;let F=new Map,b=new Map,_=Math.min(O.length,K);for(let A=0;A<_;A++){let G=O[A];if(!G||typeof G!=="object")continue;for(let[P,D]of Object.entries(G)){if(P.startsWith("_")||P==="id")continue;if(!b.has(P))b.set(P,{lengths:[],types:new Set});let k=b.get(P),x=Array.isArray(D)?"array":typeof D;if(k.types.add(x),typeof D==="string")k.lengths.push(D.length);else if(D!==null&&D!==void 0)k.lengths.push(String(D).length)}}for(let[A,G]of b){if(G.lengths.length===0)continue;let P=Math.min(...G.lengths),D=Math.max(...G.lengths),k=Math.round(G.lengths.reduce((j2,f)=>j2+f,0)/G.lengths.length),x="string";if(G.types.has("number")&&G.types.size===1)x="number";else if(G.types.has("boolean")&&G.types.size===1)x="boolean";else if(G.types.has("array"))x="array";else if(G.types.has("object")&&!G.types.has("string"))x="object";F.set(A,{minLength:P,maxLength:D,avgLength:k,type:x})}q=F,Z=!0},U=()=>Z,L=(O)=>{let F=O.avgLength;if(J&&O.minLength!==O.maxLength){if(F=Math.floor(Math.random()*(O.maxLength-O.minLength+1)+O.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,F))},y=(O)=>{if(X)return{...X(O),["_isPlaceholder"]:!0};let F={id:`__placeholder_${V++}`,["_isPlaceholder"]:!0,_index:O};if(!q||q.size===0)return F.label=$.repeat(12),F;for(let[b,_]of q)switch(_.type){case"string":F[b]=L(_);break;case"number":F[b]=0;break;case"boolean":F[b]=!1;break;case"array":F[b]=[];break;case"object":F[b]={};break;default:F[b]=L(_)}return F};return{analyzeStructure:B,hasAnalyzedStructure:U,generate:y,generateRange:(O,F)=>{let b=[];for(let _=O;_<=F;_++)b.push(y(_));return b},isPlaceholder:(O)=>{if(!O||typeof O!=="object")return!1;return O._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,V=0}}},b2=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},Oj=(j)=>{return j.filter((Q)=>!b2(Q))};var _4=50,Xj=(j={})=>{let{adapter:Q,initialItems:$,initialTotal:J,storage:K,placeholder:X,pageSize:q=_4,onStateChange:Z,onItemsLoaded:V,onItemsEvicted:B}=j,U=Jj({...K,onEvict:(S,g)=>{B?.(S),A()}}),L=null,y=()=>{if(!L)L=Qj(X);return L},T=new Map,W=!1,M,N=!0,O,F=[],b=0,_=new Map,A=()=>{Z?.(d())},G=()=>{T.clear();let S=U.getLoadedRanges();for(let g of S)for(let t=g.start;t<=g.end;t++){let c=U.get(t);if(c&&!b2(c))T.set(c.id,t)}},P=(S,g)=>{if(!b2(g))T.set(g.id,S)},D=(S)=>{T.delete(S)},k=(S,g)=>{return`${S}-${g}`},x=()=>U.getTotal(),j2=()=>U.getCachedCount(),f=()=>W,l=()=>N,d=()=>({total:U.getTotal(),cached:U.getCachedCount(),isLoading:W,pendingRanges:F,error:M,hasMore:N,cursor:O}),R=()=>U,w=()=>y(),p=(S)=>{let g=U.get(S);if(g!==void 0)return g;if(S>=0&&S<U.getTotal())return y().generate(S);return},I=(S)=>{let g=T.get(S);if(g===void 0)return;return U.get(g)},z=(S)=>{return T.get(S)??-1},H=(S)=>{let g=U.get(S);return g!==void 0&&!b2(g)},m=(S,g)=>{let t=[],c=U.getTotal(),q2=0,X2=0;U.touchChunksForRange(S,Math.min(g,c-1));for(let M2=S;M2<=g&&M2<c;M2++){let A2=U.get(M2);if(A2!==void 0)t.push(A2),q2++;else t.push(y().generate(M2)),X2++}return t},s=(S)=>{U.setTotal(S),N=U.getCachedCount()<S,A()},a=(S,g=0,t)=>{if(L&&!L.hasAnalyzedStructure()&&S.length>0)L.analyzeStructure(S);for(let c=0;c<S.length;c++){let q2=S[c];if(q2!==void 0){let X2=g+c;U.set(X2,q2),P(X2,q2)}}if(t!==void 0)U.setTotal(t);else if(g+S.length>U.getTotal())U.setTotal(g+S.length);if(U.getCachedCount()>=U.getTotal()&&U.getTotal()>0)N=!1;V?.(S,g,U.getTotal()),A()},o=(S,g)=>{let t=T.get(S);if(t===void 0)return!1;let c=U.get(t);if(!c)return!1;let q2={...c,...g};if(U.set(t,q2),g.id!==void 0&&g.id!==S)D(S),P(t,q2);return A(),!0},B2=(S)=>{let g=T.get(S);if(g===void 0)return!1;U.delete(g),D(S);let t=U.getTotal();if(t>0)U.setTotal(t-1);return A(),!0},K2=async(S,g)=>{if(!Q)return;let t=k(S,g);if(_.has(t))return;let c=U.getLoadedRanges(),q2=h2({start:S,end:g},c,U.chunkSize);if(q2.length===0)return;let X2=U.chunkSize,M2=[];for(let J2 of q2){let N2=Math.floor(J2.start/X2),L2=Math.floor(J2.end/X2);for(let Y2=N2;Y2<=L2;Y2++){let V2=Y2*X2,G2=V2+X2-1,_2=k(V2,G2);if(!M2.some((H2)=>H2.start===V2)&&!_.has(_2))M2.push({start:V2,end:G2})}}let A2=[];for(let J2 of q2){let N2=Math.floor(J2.start/X2),L2=Math.floor(J2.end/X2);for(let Y2=N2;Y2<=L2;Y2++){let V2=Y2*X2,G2=V2+X2-1,_2=k(V2,G2);if(_.has(_2)){let H2=_.get(_2);if(!A2.includes(H2))A2.push(H2)}}}for(let J2 of M2){let N2=k(J2.start,J2.end),L2=(async()=>{F.push(J2),W=!0,M=void 0,A();try{let Y2=J2.end-J2.start+1,V2={offset:J2.start,limit:Y2,cursor:void 0},G2=await Q.read(V2);if(a(G2.items,J2.start,G2.total),G2.cursor)O=G2.cursor;let _2=J2.start+G2.items.length;if(_2>=b){if(b=_2,G2.hasMore!==void 0)N=G2.hasMore;else if(G2.total!==void 0)N=_2<G2.total}}catch(Y2){M=Y2 instanceof Error?Y2:Error(String(Y2))}finally{_.delete(N2),F=F.filter((Y2)=>Y2.start!==J2.start||Y2.end!==J2.end),W=_.size>0,A()}})();_.set(N2,L2),A2.push(L2)}await Promise.all(A2)},v=async(S,g)=>{if(U.isRangeLoaded(S,g))return;await K2(S,g)},r=async()=>{if(!Q)return;await K2(0,q-1)},h=async()=>{if(!Q||W||!N)return!1;let S=U.getCachedCount(),g=U.getTotal(),t=S,c=Math.min(t+q-1,g>0?g-1:t+q-1);if(t>=g&&g>0)return N=!1,!1;return await K2(t,c),U.getCachedCount()>S},$2=async()=>{if(U.clear(),T.clear(),L)L.clear();_.clear(),F=[],W=!1,O=void 0,N=!0,b=0,M=void 0,A()},i=(S,g)=>{if(U.evictDistant(S,g)>0)G()},Q2=()=>{U.clear(),T.clear(),O=void 0,M=void 0,F=[],W=!1,A()},D2=()=>{if(U.reset(),T.clear(),L)L.clear();O=void 0,N=!0,b=0,M=void 0,F=[],W=!1,A()};if($&&$.length>0)a($,0,J??$.length);else if(J!==void 0)U.setTotal(J);return{getState:d,getTotal:x,getCached:j2,getIsLoading:f,getHasMore:l,getStorage:R,getPlaceholders:w,getItem:p,getItemById:I,getIndexById:z,isItemLoaded:H,getItemsInRange:m,setTotal:s,setItems:a,updateItem:o,removeItem:B2,loadRange:K2,ensureRange:v,loadInitial:r,loadMore:h,reload:$2,evictDistant:i,clear:Q2,reset:D2}};var jJ=(j)=>{let{adapter:Q,loading:$}=j,J=$?.cancelThreshold??gj,K=$?.preloadThreshold??mj,X=$?.preloadAhead??dj;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,V=q.config.reverse,B=Xj({adapter:Q,pageSize:x2,onStateChange:()=>{if(q.state.isInitialized){q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode();let N=q.getCachedCompression();q.state.viewportState.totalHeight=N.virtualHeight,q.state.viewportState.actualHeight=N.actualHeight,q.state.viewportState.isCompressed=N.isCompressed,q.state.viewportState.compressionRatio=N.ratio,q.updateContentSize(N.virtualHeight),q.renderIfNeeded()}},onItemsLoaded:(N,O,F)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:N,total:F})}});q.replaceDataManager(B);let U=null,L=null,y=0,T=()=>{if(L){let N=L;L=null,q.dataManager.ensureRange(N.start,N.end).catch((O)=>{Z.emit("error",{error:O,context:"ensureRange"})})}};q.afterScroll.push((N,O)=>{if(q.state.isDestroyed)return;let F=q.scrollController.getVelocity(),_=q.scrollController.isTracking()&&F<=J;if(L&&y>J&&F<=J){let P=L;L=null,q.dataManager.ensureRange(P.start,P.end).catch((D)=>{Z.emit("error",{error:D,context:"ensureRange"})})}if(y=F,_&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(V){if(N<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:x2}),q.dataManager.loadMore().catch((P)=>{Z.emit("error",{error:P,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-N-q.state.viewportState.containerHeight<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:x2}),q.dataManager.loadMore().catch((D)=>{Z.emit("error",{error:D,context:"loadMore"})})}let{renderRange:A}=q.state.viewportState;if(!U||A.start!==U.start||A.end!==U.end)if(U={start:A.start,end:A.end},_){L=null;let{start:P,end:D}=A,k=q.getVirtualTotal();if(F>K)if(O==="down")D=Math.min(A.end+X,k-1);else P=Math.max(A.start-X,0);q.dataManager.ensureRange(P,D).catch((x)=>{Z.emit("error",{error:x,context:"ensureRange"})})}else L={start:A.start,end:A.end}});let W=200,M=null;q.afterScroll.push((N,O)=>{if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,T()},W)}),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()=>{U=null,L=null,q.invalidateRendered(),await q.dataManager.reload(),q.forceRender();let{renderRange:N}=q.state.viewportState;if(N.end>0)await q.dataManager.ensureRange(N.start,N.end)}),Z.emit("load:start",{offset:0,limit:x2}),q.dataManager.loadInitial().catch((N)=>{Z.emit("error",{error:N,context:"loadInitial"})})}}};var JJ=()=>{let j=null;return{name:"withPage",priority:5,setup(Q){let{dom:$,state:J,config:K,emitter:X}=Q;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),Q.disableViewportResize(),Q.setScrollTarget(window),Q.setScrollFns(()=>{let B=$.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-B.left);else return Math.max(0,-B.top)},(B)=>{let U=$.viewport.getBoundingClientRect();if(K.horizontal){let L=U.left+window.scrollX;window.scrollTo(L+B,window.scrollY)}else{let L=U.top+window.scrollY;window.scrollTo(window.scrollX,L+B)}}),Q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,V=()=>{let{innerWidth:B,innerHeight:U}=window,L=K.horizontal?B:U,y=K.horizontal?Z:q;if(Math.abs(L-y)<=1)return;q=U,Z=B,J.viewportState.containerHeight=U,X.emit("resize",{width:B,height:U});for(let T=0;T<Q.resizeHandlers.length;T++)Q.resizeHandlers[T](B,U);Q.renderIfNeeded()};window.addEventListener("resize",V,{passive:!0}),j=()=>{window.removeEventListener("resize",V)},Q.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var zj=(j,Q)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].headerLayoutIndex<=Q)$=K;else J=K-1}return $},$J=(j,Q)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].firstDataIndex<=Q)$=K;else J=K-1}return $},QJ=(j,Q)=>{if(j===0)return[];let $=[],J=Q(0),K=0,X=0;for(let q=1;q<j;q++){let Z=Q(q);if(Z!==J){let V=q-K;$.push({key:J,groupIndex:$.length,headerLayoutIndex:X,firstDataIndex:K,count:V}),X=X+1+V,J=Z,K=q}}return $.push({key:J,groupIndex:$.length,headerLayoutIndex:X,firstDataIndex:K,count:j-K}),$},g2=(j,Q)=>{if(j.length===0||Q.length===0)return[];let $=j.length+Q.length,J=Array($),K=0;for(let X of Q){J[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let q=0;q<X.count;q++)J[K]=j[X.firstDataIndex+q],K++}return J},m2=(j,Q)=>{let $=typeof Q==="number"?(J)=>Q:Q;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return $(K.dataIndex)}},qj=(j,Q)=>{let $=QJ(j,Q.getGroupForIndex),J=j+$.length,K=Q.headerHeight;return{get totalEntries(){return J},get groupCount(){return $.length},get groups(){return $},getEntry:(y)=>{if($.length===0)return{type:"item",dataIndex:y,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let T=zj($,y),W=$[T];if(y===W.headerLayoutIndex)return{type:"header",group:W};let M=y-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+M,group:W}},layoutToDataIndex:(y)=>{if($.length===0)return y;let T=zj($,y),W=$[T];if(y===W.headerLayoutIndex)return-1;let M=y-W.headerLayoutIndex-1;return W.firstDataIndex+M},dataToLayoutIndex:(y)=>{if($.length===0)return y;let T=$J($,y),W=$[T],M=y-W.firstDataIndex;return W.headerLayoutIndex+1+M},getGroupAtLayoutIndex:(y)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=zj($,y);return $[T]},getGroupAtDataIndex:(y)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=$J($,y);return $[T]},getHeaderHeight:typeof K==="number"?(y)=>K:(y)=>{let T=$[y];if(!T)return 0;return K(T.key,y)},rebuild:(y)=>{$=QJ(y,Q.getGroupForIndex),J=y+$.length}}};var Kj=(j,Q,$,J,K)=>{let X=document.createElement("div");X.className=`${K}-sticky-header`,X.setAttribute("role","presentation"),X.setAttribute("aria-hidden","true"),X.style.position="absolute",X.style.top="0",X.style.left="0",X.style.right="0",X.style.zIndex="5",X.style.pointerEvents="none",X.style.willChange="transform",X.style.overflow="hidden",j.insertBefore(X,j.firstChild);let q=-1,Z=!1,V=0,B=(M)=>{if(M===q)return;q=M;let N=Q.groups;if(M<0||M>=N.length){X.textContent="";return}let O=N[M],F=J.headerTemplate(O.key,O.groupIndex),b=Q.getHeaderHeight(M);if(X.style.height=`${b}px`,typeof F==="string")X.innerHTML=F;else X.replaceChildren(F)},U=(M)=>{let N=Q.groups;if(N.length===0){y();return}let O=0;for(let G=N.length-1;G>=0;G--)if($.getOffset(N[G].headerLayoutIndex)<=M){O=G;break}let F=$.getOffset(N[0].headerLayoutIndex);if(M<F){y();return}if(!Z)L();B(O);let b=Q.getHeaderHeight(O),_=0,A=O+1;if(A<N.length){let P=$.getOffset(N[A].headerLayoutIndex)-M;if(P<b)_=P-b}if(_!==V)V=_,X.style.transform=_===0?"":`translateY(${Math.round(_)}px)`},L=()=>{if(Z)return;Z=!0,X.style.display=""},y=()=>{if(!Z)return;Z=!1,X.style.display="none",q=-1,V=0,X.style.transform=""},T=()=>{let M=q;if(q=-1,M>=0)B(M)},W=()=>{X.remove(),q=-1,Z=!1};return X.style.display="none",{update:U,refresh:T,show:L,hide:y,destroy:W}};var XJ=(j,Q,$,J,K,X)=>{if(J===0||Q===0)return X.start=0,X.end=-1,X;let q=$.indexAtOffset(j),Z=$.indexAtOffset(j+Q);if(Z<J-1)Z++;return X.start=Math.max(0,q),X.end=Math.min(J-1,Math.max(0,Z)),X},qJ=(j,Q,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q),J},KJ=(j,Q,$,J,K,X)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Z=Q.getOffset(q),V=Q.getHeight(q),B=Q.getTotalHeight(),U=Math.max(0,B-$),L;switch(X){case"center":L=Z-$/2+V/2;break;case"end":L=Z-$+V;break;case"start":default:L=Z;break}return Math.max(0,Math.min(L,U))},YJ=(j,Q,$)=>{if($&&$.isCompressed)return $.virtualHeight;return Q.getTotalHeight()},ZJ=(j,Q)=>{return Q.getTotalHeight()},BJ=(j,Q)=>{return Q.getOffset(j)},UJ=(j,Q,$)=>{let J=Math.max(0,Q-$);return Math.max(0,Math.min(j,J))};var y2=(j,Q,$,J,K="start",X,q=KJ)=>{return q(j,Q,$,J,X,K)},DJ=(j,Q)=>{return j.start===Q.start&&j.end===Q.end},WJ=(j,Q)=>{return j>=Q.start&&j<=Q.end},NJ=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var GJ=(j,Q)=>{let $=[],J=[];for(let K=j.start;K<=j.end;K++)if(K<Q.start||K>Q.end)J.push(K);for(let K=Q.start;K<=Q.end;K++)if(K<j.start||K>j.end)$.push(K);return{add:$,remove:J}};t2();var _J=(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 Q=null,$=null,J=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:q,config:Z,rawConfig:V}=X,{classPrefix:B}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let L=V.item.height;J=V.items?[...V.items]:[];let y=J.length,T={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};Q=qj(y,T),K=g2(J,Q.groups);let W=m2(Q,L);X.setHeightConfig(W),X.rebuildHeightCache(K.length),X.dataManager.setItems(K,0,K.length);let M=V.item.template,{headerTemplate:N}=j,O=(D,k,x)=>{if(P2(D))return N(D.groupKey,D.groupIndex);return M(D,k,x)},F=X.methods.get("_getGridLayout"),b=X.methods.get("_replaceGridRenderer"),_=X.methods.get("_updateGridLayoutForGroups");if(F&&b){if(_)_((j2)=>{let f=K[j2];return!!(f&&P2(f))});let{createGridRenderer:D}=(Yj(),cJ(VJ)),k=F(),x=D(q.items,O,X.heightCache,k,B,X.getContainerWidth(),()=>X.dataManager.getTotal(),Z.ariaIdPrefix);b(x)}else X.replaceTemplate(O);if(q.root.classList.add(`${B}--grouped`),j.sticky!==!1){$=Kj(q.root,Q,X.heightCache,{...T,sticky:T.sticky??!1},B);let D=$;X.afterScroll.push((k,x)=>{D.update(k)}),$.update(X.scrollController.getScrollTop())}let A=()=>{if(!Q)return;Q.rebuild(J.length),K=g2(J,Q.groups);let D=m2(Q,L);if(X.setHeightConfig(D),X.rebuildHeightCache(K.length),X.dataManager.setItems(K,0,K.length),$)$.refresh()};X.methods.set("setItems",(D)=>{J=[...D],A()}),X.methods.set("appendItems",(D)=>{J=[...J,...D],A()}),X.methods.set("prependItems",(D)=>{J=[...D,...J],A()}),X.methods.set("removeItem",(D)=>{J=J.filter((k)=>k.id!==D),A()});let{animateScroll:G,cancelScroll:P}=E4(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(D,k)=>{let x=Q.dataToLayoutIndex(D),{align:j2,behavior:f,duration:l}=F4(k),d=X.dataManager.getTotal(),R=y2(x,X.heightCache,X.state.viewportState.containerHeight,d,j2,X.getCachedCompression());if(f==="smooth")G(X.scrollController.getScrollTop(),R,l);else P(),X.scrollController.scrollTo(R)}),X.methods.set("_getItems",()=>J),X.methods.set("_getTotal",()=>J.length),X.destroyHandlers.push(()=>{if(O2!==null)cancelAnimationFrame(O2),O2=null;if($)$.destroy(),$=null;q.root.classList.remove(`${B}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},bj=300,A4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,O2=null,E4=(j,Q)=>{let $=()=>{if(O2!==null)cancelAnimationFrame(O2),O2=null};return{animateScroll:(K,X,q)=>{if($(),Math.abs(X-K)<1){j.scrollTo(X);return}let Z=performance.now(),V=(B)=>{let U=B-Z,L=Math.min(U/q,1),y=K+(X-K)*A4(L);if(j.scrollTo(y),Q(),L<1)O2=requestAnimationFrame(V);else O2=null};O2=requestAnimationFrame(V)},cancelScroll:$}},F4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:bj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??bj};return{align:"start",behavior:"auto",duration:bj}};var Zj=(j)=>{let Q=Math.max(1,Math.floor(j.columns)),$=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},X=(W)=>{if(W<=0)return 0;if(!J)return Math.ceil(W/Q);let M=0,N=0,O=0;for(let F=0;F<W;F++)if(J(F)){if(O++,N>0)M++,N=0;M++,N=0}else if(N++,N>=Q)M++,N=0;if(N>0)M++;return M},q=(W)=>{return K.row=Z(W),K.col=V(W),K},Z=(W)=>{if(!J)return Math.floor(W/Q);let M=0,N=0;for(let O=0;O<=W;O++)if(J(O)){if(N>0)M++,N=0;if(O===W)return M;M++,N=0}else{if(O===W)return M;if(N++,N>=Q)M++,N=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${M}`),M},V=(W)=>{if(!J)return W%Q;if(J(W))return 0;let M=0;for(let N=0;N<=W;N++)if(J(N))M=0;else{if(N===W)return M;if(M++,M>=Q)M=0}return M},B=(W,M,N)=>{if(N<=0)return{start:0,end:-1};if(!J){let A=Math.max(0,W*Q),G=Math.min(N-1,(M+1)*Q-1);return{start:A,end:G}}let O=-1,F=-1,b=0,_=0;for(let A=0;A<N;A++){if(J(A)){if(_>0)b++,_=0;if(b>=W&&b<=M){if(O===-1)O=A;F=A}b++,_=0}else{if(b>=W&&b<=M){if(O===-1)O=A;F=A}if(_++,_>=Q)b++,_=0}if(b>M&&_===0)break}if(O===-1)return{start:0,end:-1};return{start:O,end:F}},U=(W,M,N)=>{if(M<0||M>=Q)return-1;let O=W*Q+M;if(O<0||O>=N)return-1;return O},L=(W)=>{let M=(Q-1)*$;return Math.max(0,(W-M)/Q)};return{get columns(){return Q},get gap(){return $},update:(W)=>{if(W.columns!==void 0)Q=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)$=W.gap;if(W.isHeaderFn!==void 0)J=W.isHeaderFn},getTotalRows:X,getPosition:q,getRow:Z,getCol:V,getItemRange:B,getItemIndex:U,getColumnWidth:L,getColumnOffset:(W,M)=>{let N=L(M);return W*(N+$)}}};Yj();var MJ=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let Q=null,$=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:X,config:q,rawConfig:Z}=J,{classPrefix:V}=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 B=Z.items?.some((_)=>_.__groupHeader===!0),U={columns:j.columns,gap:j.gap??0};if(B)U.isHeaderFn=(_)=>{let A=J.dataManager.getItem(_);return!!(A&&A.__groupHeader===!0)};Q=Zj(U);let L=Q.gap;J.setVirtualTotalFn(()=>{let _=J.dataManager.getTotal();return Q.getTotalRows(_)});let y=Z.item,T=q.horizontal?y.width:y.height,W={containerWidth:J.getContainerWidth(),columns:Q.columns,gap:Q.gap};if(typeof T==="function")J.setHeightConfig((_)=>{let A=W.containerWidth-2,G=(W.columns-1)*W.gap,P=(A-G)/W.columns,D={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:P,row:Q.getRow(_),column:Q.getCol(_),totalRows:Q.getTotalRows(J.dataManager.getTotal()),totalColumns:W.columns};return T(_,D)+W.gap});else if(L>0)J.setHeightConfig(T+L);J.rebuildHeightCache(),K.root.classList.add(`${V}--grid`);let M=J.getContainerWidth(),N=Z.item.template,O=()=>{$=d2(K.items,N,J.heightCache,Q,V,M,()=>J.dataManager.getTotal(),q.ariaIdPrefix),J.replaceRenderer($)};O(),J.methods.set("_getGridLayout",()=>Q),J.methods.set("_getGridConfig",()=>U),J.methods.set("_replaceGridRenderer",(_)=>{$=_}),J.methods.set("_updateGridLayoutForGroups",(_)=>{Q.update({isHeaderFn:_});let A=J.dataManager.getTotal(),G=0;for(let P=0;P<A;P++)if(Q.getCol(P)===0){let D=J.heightCache.getHeight(P);G+=D}J.heightCache.getTotalHeight=()=>G,J.dom.content.style.height=`${G}px`,O()}),J.methods.set("updateGrid",(_)=>{if(_.columns!==void 0){if(!Number.isInteger(_.columns)||_.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");U.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");U.gap=_.gap}if(Q)Q.update(U);let A=J.getContainerWidth();if(W.containerWidth=A,W.columns=U.columns,W.gap=U.gap??0,$)$.updateContainerWidth(A);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let G=0;G<J.contentSizeHandlers.length;G++)J.contentSizeHandlers[G]();if($)$.clear();J.forceRender()});let F=()=>{if(J.state.isDestroyed)return;let _=J.scrollController.getScrollTop(),A=J.state.viewportState.containerHeight,G=J.getVirtualTotal(),P={start:0,end:0};if(G===0||A===0)P.start=0,P.end=0;else{P.start=Math.max(0,J.heightCache.indexAtOffset(_));let w=J.heightCache.indexAtOffset(_+A);if(w<G-1)w++;P.end=Math.min(G-1,Math.max(0,w))}let D=q.overscan??3,k={start:Math.max(0,P.start-D),end:Math.min(G-1,P.end+D)};J.state.viewportState.scrollTop=_,J.state.viewportState.visibleRange=P,J.state.viewportState.renderRange=k;let x=J.state.lastRenderRange,j2=J.state.viewportState.isCompressed;if(k.start===x.start&&k.end===x.end){if(j2)$.updatePositions(J.getCompressionContext());return}let f=J.dataManager.getTotal(),l=Q.getItemRange(k.start,k.end,f),d=J.dataManager.getItemsInRange(l.start,l.end),R=j2?J.getCompressionContext():void 0;$.render(d,l,new Set,-1,R),J.state.lastRenderRange={...k},X.emit("range:change",{range:k})},b=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},F()};if(J.setRenderFns(F,b),J.resizeHandlers.push((_,A)=>{if($)$.updateContainerWidth(_)}),J.methods.set("scrollToIndex",(_,A)=>{let G=Math.floor(_/j.columns),{align:P,behavior:D}=L4(A),k=J.dataManager.getState(),x=Q.getTotalRows(k.total),j2=Math.max(0,Math.min(G,x-1)),f=y2(j2,J.heightCache,J.state.viewportState.containerHeight,x,P,J.getCachedCompression());if(D==="smooth")J.scrollController.scrollTo(f);else J.scrollController.scrollTo(f)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if($)$.destroy(),$=null;K.root.classList.remove(`${V}--grid`)})},destroy(){if($)$.destroy(),$=null}}},Pj=300,L4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:Pj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??Pj};return{align:"start",behavior:"auto",duration:Pj}};Yj();var Bj=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),c2=(j,Q,$)=>{if($==="none")return j;let J=new Set(j.selected);if($==="single"){if(J.clear(),Q.length>0)J.add(Q[0])}else for(let K of Q)J.add(K);return{...j,selected:J}},l2=(j,Q)=>{let $=new Set(j.selected);for(let J of Q)$.delete(J);return{...j,selected:$}},w2=(j,Q,$)=>{if($==="none")return j;if(j.selected.has(Q))return l2(j,[Q]);else return c2(j,[Q],$)},Uj=(j,Q,$)=>{if($!=="multiple")return j;return{...j,selected:new Set(Q.map((J)=>J.id))}},Dj=(j)=>({...j,selected:new Set}),yj=(j,Q)=>{return j.focusedIndex=Q,j},Hj=(j,Q,$=!0)=>{if(Q===0)return j;let J=j.focusedIndex-1;if(J<0)J=$?Q-1:0;return j.focusedIndex=J,j},Rj=(j,Q,$=!0)=>{if(Q===0)return j;let J=j.focusedIndex+1;if(J>=Q)J=$?0:Q-1;return j.focusedIndex=J,j},kj=(j,Q)=>{if(Q===0)return j;return j.focusedIndex=0,j},Cj=(j,Q)=>{if(Q===0)return j;return j.focusedIndex=Q-1,j};var AJ=(j,Q)=>{return j.selected.has(Q)},v2=(j)=>{return Array.from(j.selected)},S2=(j,Q)=>{let $=[];for(let J of j.selected){let K=Q(J);if(K)$.push(K)}return $};var EJ=(j)=>{let Q=j?.mode??"single",$=j?.initial,J=Bj($),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:q,emitter:Z,config:V}=X,{classPrefix:B,ariaIdPrefix:U}=V;if(Q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:L,forceRender:y}=X.getRenderFns(),T=()=>{X.dom.items.querySelectorAll("[data-index]").forEach((b)=>{let _=b,A=_.dataset.id;if(A!==void 0){let G=/^\d+$/.test(A)?parseInt(A,10):A,P=J.selected.has(G),k=parseInt(_.dataset.index??"-1",10)===J.focusedIndex;_.classList.toggle(`${B}-item--selected`,P),_.classList.toggle(`${B}-item--focused`,k),_.ariaSelected=P?"true":"false"}})},W=()=>{if(X.state.isDestroyed)return;L(),T()},M=()=>{if(X.state.isDestroyed)return;y(),T()};X.setRenderFns(W,M);let N=()=>{T(),Z.emit("selection:change",{selected:v2(J),items:S2(J,(F)=>X.dataManager.getItemById(F))})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${B}-live-region`,K.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(K);let O=K;Z.on("selection:change",({selected:F})=>{let b=F.length;if(b===0)O.textContent="";else if(b===1)O.textContent="1 item selected";else O.textContent=`${b} items selected`}),X.clickHandlers.push((F)=>{if(X.state.isDestroyed)return;let _=F.target.closest("[data-index]");if(!_)return;let A=parseInt(_.dataset.index??"-1",10);if(A<0)return;let G=X.dataManager.getItem(A);if(!G)return;Z.emit("item:click",{item:G,index:A,event:F}),J=yj(J,A),q.root.setAttribute("aria-activedescendant",`${U}-item-${A}`),J=w2(J,G.id,Q),N()}),X.keydownHandlers.push((F)=>{if(X.state.isDestroyed)return;let b=X.dataManager.getTotal(),_=J.focusedIndex,A=!1,G=!1,P=J;switch(F.key){case"ArrowUp":P=Hj(J,b),A=!0,G=!0;break;case"ArrowDown":P=Rj(J,b),A=!0,G=!0;break;case"Home":P=kj(J,b),A=!0,G=!0;break;case"End":P=Cj(J,b),A=!0,G=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let D=X.dataManager.getItem(J.focusedIndex);if(D)P=w2(J,D.id,Q);A=!0}break}if(A){F.preventDefault(),J=P;let D=J.focusedIndex;if(D>=0){let k=X.dataManager.getState(),x=y2(D,X.heightCache,X.state.viewportState.containerHeight,k.total,"center",X.getCachedCompression());X.scrollController.scrollTo(x),q.root.setAttribute("aria-activedescendant",`${U}-item-${D}`)}else q.root.removeAttribute("aria-activedescendant");if(G){let{selected:k}=J;if(_>=0&&_!==D){let x=X.dataManager.getItem(_);if(x)X.renderer.updateItemClasses(_,k.has(x.id),!1)}if(D>=0){let x=X.dataManager.getItem(D);if(x)X.renderer.updateItemClasses(D,k.has(x.id),!0)}}else M(),Z.emit("selection:change",{selected:v2(J),items:S2(J,(k)=>X.dataManager.getItemById(k))})}}),X.methods.set("select",(...F)=>{J=c2(J,F,Q),N()}),X.methods.set("deselect",(...F)=>{J=l2(J,F),N()}),X.methods.set("toggleSelect",(F)=>{J=w2(J,F,Q),N()}),X.methods.set("selectAll",()=>{if(Q!=="multiple")return;let F=X.getAllLoadedItems();J=Uj(J,F,Q),N()}),X.methods.set("clearSelection",()=>{J=Dj(J);let{renderRange:F,isCompressed:b}=X.state.viewportState,_=X.getItemsForRange(F),A=b?X.getCompressionContext():void 0;X.renderer.render(_,F,J.selected,J.focusedIndex,A),Z.emit("selection:change",{selected:[],items:[]})}),X.methods.set("getSelected",()=>{return v2(J)}),X.methods.set("getSelectedItems",()=>{return S2(J,(F)=>X.dataManager.getItemById(F))}),X.destroyHandlers.push(()=>{if(O&&O.parentNode)O.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var FJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let Q=j.scrollController.getScrollTop(),$=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),X=K&&K().length>0?K():void 0;if(J===0){let B={index:0,offsetInItem:0};if(X)B.selectedIds=X;return B}let q,Z;if($.isCompressed){let U=Q/$.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(Q),Z=Q-j.heightCache.getOffset(q);Z=Math.max(0,Z);let V={index:q,offsetInItem:Z};if(X)V.selectedIds=X;return V}),j.methods.set("restoreScroll",(Q)=>{let{index:$,offsetInItem:J,selectedIds:K}=Q,X=j.getCachedCompression(),q=j.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),V;if(X.isCompressed){let U=j.heightCache.getHeight(Z),L=U>0?J/U:0;V=(Z+L)/q*X.virtualHeight}else V=j.heightCache.getOffset(Z)+J;let B=Math.max(0,X.virtualHeight-j.state.viewportState.containerHeight);if(V=Math.max(0,Math.min(V,B)),j.scrollController.scrollTo(V),K&&K.length>0){let U=j.methods.get("select");if(U)U(...K)}})}}};var LJ=()=>{let j={},Q=(Z,V)=>{if(!j[Z])j[Z]=new Set;return j[Z].add(V),()=>$(Z,V)},$=(Z,V)=>{j[Z]?.delete(V)};return{on:Q,off:$,emit:(Z,V)=>{j[Z]?.forEach((B)=>{try{B(V)}catch(U){console.error(`[vlist] Error in event handler for "${String(Z)}":`,U)}})},once:(Z,V)=>{let B=(U)=>{$(Z,B),V(U)};return Q(Z,B)},clear:(Z)=>{if(Z)delete j[Z];else for(let V in j)delete j[V]},listenerCount:(Z)=>{return j[Z]?.size??0}}};export{FJ as withSnapshots,EJ as withSelection,_J as withSections,oj as withScrollbar,ej as withScale,JJ as withPage,MJ as withGrid,jJ as withAsync,hj as vlist,w2 as toggleSelection,XJ as simpleVisibleRange,c2 as selectItems,Uj as selectAll,DJ as rangesEqual,jj as rafThrottle,aj as needsScaling,$j as mergeRanges,AJ as isSelected,P2 as isSectionHeader,b2 as isPlaceholderItem,WJ as isInRange,S2 as getSelectedItems,v2 as getSelectedIds,E2 as getScaleState,nj as getScaleInfo,E2 as getScale,NJ as getRangeCount,rj as getMaxItemsWithoutScaling,Oj as filterPlaceholders,GJ as diffRanges,l2 as deselectItems,Kj as createStickyHeader,Jj as createSparseStorage,Bj as createSelectionState,m2 as createSectionedHeightFn,qj as createSectionLayout,T2 as createScrollbar,tj as createScrollController,Qj as createPlaceholderManager,cj as createHeightCache,d2 as createGridRenderer,Zj as createGridLayout,LJ as createEmitter,Xj as createAsyncManager,Dj as clearSelection,UJ as clampScrollPosition,YJ as calculateTotalHeight,y2 as calculateScrollToIndex,o2 as calculateScaledVisibleRange,i2 as calculateScaledScrollToIndex,lj as calculateScaledRenderRange,C2 as calculateScaledItemPosition,qJ as calculateRenderRange,h2 as calculateMissingRanges,BJ as calculateItemOffset,sj as calculateIndexFromScrollPosition,ZJ as calculateActualHeight,g2 as buildLayoutItems,z2 as MAX_VIRTUAL_HEIGHT};
@@ -1 +1 @@
1
- var b=16000000;var Ky=(j,Y,K,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil(K/j.getHeight(0));let Q=0,y=0,N=Y;while(N<J&&y<K)y+=j.getHeight(N),Q++,N++;return Math.max(1,Q)},s=(j,Y,K)=>{if(K===0)return 0;if(!j.isVariable())return Math.floor(Y/j.getHeight(0));let J=0,Q=0;for(let y=K-1;y>=0;y--){let N=j.getHeight(y);if(Q+N>Y)break;Q+=N,J++}return Math.max(J,1)},Qy=(j,Y,K)=>{if(K===0)return 0;let J=Math.floor(Y),Q=Y-J,y=Math.max(0,Math.min(J,K-1));return j.getOffset(y)+Q*j.getHeight(y)};var v=(j,Y)=>{let K=Y.getTotalHeight(),J=K>b,Q=J?b:K,y=K>0?Q/K:1;return{isCompressed:J,actualHeight:K,virtualHeight:Q,ratio:y}},c=(j,Y,K,J,Q,y)=>{if(J===0||Y===0)return y.start=0,y.end=-1,y;if(!Q.isCompressed){let W=K.indexAtOffset(j),$=K.indexAtOffset(j+Y);if($<J-1)$++;return y.start=Math.max(0,W),y.end=Math.min(J-1,Math.max(0,$)),y}let{virtualHeight:N}=Q,M=j/N*J,_=Math.floor(M),F=Ky(K,Math.max(0,_),Y,J),V=Math.ceil(M)+F,E=N-Y-j;if(E<=Y&&E>=-1){let W=s(K,Y,J),$=Math.max(0,J-W),q=Math.max(0,Math.min(1,1-E/Y));_=Math.floor(_+($-_)*q),V=E<=1?J-1:Math.min(J-1,_+F)}return y.start=Math.max(0,_),y.end=Math.min(J-1,Math.max(0,V)),y},Gy=(j,Y,K,J)=>{if(K===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Y),J.end=Math.min(K-1,j.end+Y),J},r=(j,Y,K,J,Q,y,N)=>{if(!y.isCompressed||J===0)return K.getOffset(j);let{virtualHeight:k}=y,M=k-Q,_=M-Y;if(_<=Q&&_>=-1){if(Y>=M-1){let X=K.getTotalHeight()-K.getOffset(j);return Q-X}let E=s(K,Q,J),W=Math.max(0,J-E),q=Y/k*J,L=Math.max(0,Math.min(1,1-_/Q)),O=K.getOffset(j)-K.getOffset(W),B=K.getOffset(j)-Qy(K,q,J);return B+(O-B)*L}let F=Y/k,V=K.getTotalHeight(),U=F*V;return K.getOffset(j)-U},l=(j,Y,K,J,Q,y="start")=>{if(J===0)return 0;let N;if(Q.isCompressed){if(y==="end"&&j===J-1)return Math.max(0,Q.virtualHeight-K);N=j/J*Q.virtualHeight}else N=Y.getOffset(j);let k=Y.getHeight(j);switch(y){case"center":N-=(K-k)/2;break;case"end":N-=K-k;break}let M=Q.virtualHeight-K;return Math.max(0,Math.min(N,M))},Uy=(j,Y,K,J)=>{if(K===0)return 0;if(J.isCompressed){let Q=j/J.virtualHeight;return Math.floor(Q*K)}return Y.indexAtOffset(j)},Dy=(j,Y)=>{if(typeof Y==="number")return j*Y>b;return Y.getTotalHeight()>b},_y=(j)=>{if(j<=0)return 0;return Math.floor(b/j)},Ey=(j,Y)=>{let K=v(j,Y);if(!K.isCompressed)return`No compression needed (${j} items, ${(K.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(K.ratio*100).toFixed(1)}% (${j} items, ${(K.actualHeight/1e6).toFixed(1)}M px → ${(K.virtualHeight/1e6).toFixed(1)}M px virtual)`};var a=(j,Y,K={},J="vlist",Q=!1)=>{let{autoHide:y=!0,autoHideDelay:N=1000,minThumbSize:k=30,showOnHover:M=!0,hoverZoneWidth:_=16,showOnViewportEnter:F=!0}=K,V=0,U=0,E=0,W=0,$=!1,q=!1,L=0,O=0,B=0,X=null,A=!1,R=null,w=null,Yy=Q?"width":"height",i=Q?"translateX":"translateY",u=Q?(D)=>D.clientX:(D)=>D.clientY,$y=Q?"left":"top",G=document.createElement("div"),z=document.createElement("div"),Z=M?document.createElement("div"):null,Ny=()=>{if(G.className=`${J}-scrollbar`,z.className=`${J}-scrollbar-thumb`,Q)G.classList.add(`${J}-scrollbar--horizontal`);if(G.appendChild(z),j.appendChild(G),Z){if(Z.className=`${J}-scrollbar-hover`,Q)Z.classList.add(`${J}-scrollbar-hover--horizontal`),Z.style.height=`${_}px`;else Z.style.width=`${_}px`;j.appendChild(Z)}},f=()=>{if(X)clearTimeout(X),X=null},T=()=>{if(!y)return;f(),X=setTimeout(x,N)},H=()=>{if(V<=U)return;if(f(),!A)G.classList.add(`${J}-scrollbar--visible`),A=!0;if(y&&!$&&!q)T()},x=()=>{if($||q)return;G.classList.remove(`${J}-scrollbar--visible`),A=!1},Wy=(D,C)=>{V=D,U=C;let S=V>U;if(G.style.display=S?"":"none",!S){x();return}let P=U/V;E=Math.max(k,P*U),z.style[Yy]=`${E}px`,W=U-E,o(B)},o=(D)=>{if(B=D,V<=U||W<=0)return;let C=V-U,P=Math.min(1,Math.max(0,D/C))*W;z.style.transform=`${i}(${P}px)`},e=(D)=>{if(D.target===z)return;let C=G.getBoundingClientRect(),m=u(D)-C[$y]-E/2,Jy=Math.max(0,Math.min(m,W))/W,n=V-U,qy=Jy*n;Y(qy),H()},t=(D)=>{D.preventDefault(),D.stopPropagation(),$=!0,L=u(D),O=B,f(),G.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",d),document.addEventListener("mouseup",g)},d=(D)=>{if(!$)return;let C=u(D)-L,S=W>0?C/W:0,P=V-U,m=S*P,h=Math.max(0,Math.min(O+m,P)),n=h/P*W;if(z.style.transform=`${i}(${n}px)`,w=h,R===null)R=requestAnimationFrame(()=>{if(w!==null)Y(w);R=null})},g=()=>{if($=!1,R!==null)cancelAnimationFrame(R),R=null;if(w!==null)Y(w),w=null;if(G.classList.remove(`${J}-scrollbar--dragging`),y&&!q)T();document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",g)},yy=()=>{if(F)H()},jy=()=>{if(!$){if(q=!1,y)T()}},p=()=>{q=!0,f(),H()},I=()=>{if(q=!1,!$&&y)T()},Xy=()=>{if(f(),R!==null)cancelAnimationFrame(R),R=null;if(G.removeEventListener("click",e),G.removeEventListener("mouseenter",p),G.removeEventListener("mouseleave",I),z.removeEventListener("mousedown",t),j.removeEventListener("mouseenter",yy),j.removeEventListener("mouseleave",jy),document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",g),Z){if(Z.removeEventListener("mouseenter",p),Z.removeEventListener("mouseleave",I),Z.parentNode)Z.parentNode.removeChild(Z)}if(G.parentNode)G.parentNode.removeChild(G)};if(Ny(),G.addEventListener("click",e),G.addEventListener("mouseenter",p),G.addEventListener("mouseleave",I),z.addEventListener("mousedown",t),j.addEventListener("mouseenter",yy),j.addEventListener("mouseleave",jy),Z)Z.addEventListener("mouseenter",p),Z.addEventListener("mouseleave",I);return{show:H,hide:x,updateBounds:Wy,updatePosition:o,isVisible:()=>A,destroy:Xy}};var Ly=0.65,Oy=0.5,By=()=>{let j=null,Y=0,K=!1,J=0,Q=null;return{name:"withScale",priority:20,setup(y){let{dom:N,config:k}=y,{classPrefix:M,horizontal:_}=k,F=()=>{let W=y.getVirtualTotal(),$=v(W,y.heightCache);if($.isCompressed&&!K){K=!0,y.scrollController.enableCompression($),y.updateContentSize($.virtualHeight),y.setScrollFns(()=>Y,(X)=>{if(Y=X,J=X,Q!==null)cancelAnimationFrame(Q),Q=null});let q=()=>{let X=J-Y;if(Math.abs(X)<Oy)Y=J,Q=null;else Y+=X*Ly,Q=requestAnimationFrame(q);y.scrollController.scrollTo(Y)},L=N.viewport,O=(X)=>{X.preventDefault();let R=y.getCachedCompression().virtualHeight-y.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+X.deltaY,R)),Q===null)Q=requestAnimationFrame(q)};if(L.addEventListener("wheel",O,{passive:!1}),y.destroyHandlers.push(()=>{if(L.removeEventListener("wheel",O),Q!==null)cancelAnimationFrame(Q),Q=null}),!N.viewport.querySelector(`.${M}-scrollbar-track`)){if(j=a(N.viewport,(A)=>y.scrollController.scrollTo(A),{},M,_),!N.viewport.classList.contains(`${M}-viewport--custom-scrollbar`))N.viewport.classList.add(`${M}-viewport--custom-scrollbar`);j.updateBounds($.virtualHeight,y.state.viewportState.containerHeight);let X=j;y.afterScroll.push((A,R)=>{if(X)X.updatePosition(A),X.show()}),y.resizeHandlers.push((A,R)=>{if(X){let w=y.getCachedCompression();X.updateBounds(w.virtualHeight,y.state.viewportState.containerHeight)}})}}else if(!$.isCompressed&&K)K=!1,y.scrollController.disableCompression(),y.updateContentSize($.actualHeight);else if($.isCompressed)y.scrollController.updateConfig({compression:$}),y.updateContentSize($.virtualHeight);if(j)j.updateBounds($.virtualHeight,y.state.viewportState.containerHeight);y.state.cachedCompression={state:$,totalItems:W}};y.updateCompressionMode=F;let V=y.getCachedCompression.bind(y);y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;return V()},y.setVisibleRangeFn((W,$,q,L,O)=>{U=null,E=null;let B=v(L,q);c(W,$,q,L,B,O)}),y.setScrollToPosFn((W,$,q,L,O)=>{let B=v(L,$);return l(W,$,q,L,B,O)});let U=null,E=null;y.setPositionElementFn((W,$)=>{let q=y.getVirtualTotal(),L=v(q,y.heightCache);if(L.isCompressed){let O=y.scrollController.getScrollTop();if(U===null||$<E)E=$,U=Math.round(r($,O,y.heightCache,q,y.state.viewportState.containerHeight,L));let B=U+y.heightCache.getOffset($)-y.heightCache.getOffset(E),X=y.config.horizontal;W.style.transform=X?`translateX(${B}px)`:`translateY(${B}px)`}else{let O=Math.round(y.heightCache.getOffset($)),B=y.config.horizontal;W.style.transform=B?`translateX(${O}px)`:`translateY(${O}px)`}}),F(),y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(Q!==null)cancelAnimationFrame(Q),Q=null})},destroy(){if(j)j.destroy(),j=null;if(Q!==null)cancelAnimationFrame(Q),Q=null}}};export{By as withScale,Dy as needsCompression,_y as getMaxItemsWithoutCompression,v as getCompressionState,Ey as getCompressionInfo,Uy as calculateIndexFromScrollPosition,c as calculateCompressedVisibleRange,l as calculateCompressedScrollToIndex,Gy as calculateCompressedRenderRange,r as calculateCompressedItemPosition,b as MAX_VIRTUAL_HEIGHT};
1
+ var I=16000000;var Xj=(K,W,Q,J)=>{if(J===0)return 0;if(!K.isVariable())return Math.ceil(Q/K.getHeight(0));let $=0,X=0,D=W;while(D<J&&X<Q)X+=K.getHeight(D),$++,D++;return Math.max(1,$)},a=(K,W,Q)=>{if(Q===0)return 0;if(!K.isVariable())return Math.floor(W/K.getHeight(0));let J=0,$=0;for(let X=Q-1;X>=0;X--){let D=K.getHeight(X);if($+D>W)break;$+=D,J++}return Math.max(J,1)},Yj=(K,W,Q)=>{if(Q===0)return 0;let J=Math.floor(W),$=W-J,X=Math.max(0,Math.min(J,Q-1));return K.getOffset(X)+$*K.getHeight(X)};var u=(K,W)=>{let Q=W.getTotalHeight(),J=Q>I,$=J?I:Q,X=Q>0?$/Q:1;return{isCompressed:J,actualHeight:Q,virtualHeight:$,ratio:X}},i=(K,W,Q,J,$,X)=>{if(J===0||W===0)return X.start=0,X.end=-1,X;if(!$.isCompressed){let _=Q.indexAtOffset(K),k=Q.indexAtOffset(K+W);if(k<J-1)k++;return X.start=Math.max(0,_),X.end=Math.min(J-1,Math.max(0,k)),X}let{virtualHeight:D}=$,E=K/D*J,j=Math.floor(E),P=Xj(Q,Math.max(0,j),W,J),R=Math.ceil(E)+P,A=D-W-K;if(A<=W&&A>=-1){let _=a(Q,W,J),k=Math.max(0,J-_),M=Math.max(0,Math.min(1,1-A/W));j=Math.floor(j+(k-j)*M),R=A<=1?J-1:Math.min(J-1,j+P)}return X.start=Math.max(0,j),X.end=Math.min(J-1,Math.max(0,R)),X},Gj=(K,W,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,K.start-W),J.end=Math.min(Q-1,K.end+W),J},o=(K,W,Q,J,$,X,D)=>{if(!X.isCompressed||J===0)return Q.getOffset(K);let{virtualHeight:B}=X,E=B-$,j=E-W;if(j<=$&&j>=-1){if(W>=E-1){let O=Q.getTotalHeight()-Q.getOffset(K);return $-O}let A=a(Q,$,J),_=Math.max(0,J-A),M=W/B*J,f=Math.max(0,Math.min(1,1-j/$)),z=Q.getOffset(K)-Q.getOffset(_),q=Q.getOffset(K)-Yj(Q,M,J);return q+(z-q)*f}let P=W/B,R=Q.getTotalHeight(),Z=P*R;return Q.getOffset(K)-Z},e=(K,W,Q,J,$,X="start")=>{if(J===0)return 0;let D;if($.isCompressed){if(X==="end"&&K===J-1)return Math.max(0,$.virtualHeight-Q);D=K/J*$.virtualHeight}else D=W.getOffset(K);let B=W.getHeight(K);switch(X){case"center":D-=(Q-B)/2;break;case"end":D-=Q-B;break}let E=$.virtualHeight-Q;return Math.max(0,Math.min(D,E))},Dj=(K,W,Q,J)=>{if(Q===0)return 0;if(J.isCompressed){let $=K/J.virtualHeight;return Math.floor($*Q)}return W.indexAtOffset(K)},Uj=(K,W)=>{if(typeof W==="number")return K*W>I;return W.getTotalHeight()>I},Bj=(K)=>{if(K<=0)return 0;return Math.floor(I/K)},Zj=(K,W)=>{let Q=u(K,W);if(!Q.isCompressed)return`No compression needed (${K} items, ${(Q.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${K} items, ${(Q.actualHeight/1e6).toFixed(1)}M px → ${(Q.virtualHeight/1e6).toFixed(1)}M px virtual)`};var t=(K,W,Q={},J="vlist",$=!1)=>{let{autoHide:X=!0,autoHideDelay:D=1000,minThumbSize:B=30,showOnHover:E=!0,hoverZoneWidth:j=16,showOnViewportEnter:P=!0}=Q,R=0,Z=0,A=0,_=0,k=!1,M=!1,f=0,z=0,q=0,O=null,y=!1,U=null,L=null,x=$?"width":"height",d=$?"translateX":"translateY",H=$?(V)=>V.clientX:(V)=>V.clientY,jj=$?"left":"top",N=document.createElement("div"),G=document.createElement("div"),Y=E?document.createElement("div"):null,v=()=>{if(N.className=`${J}-scrollbar`,G.className=`${J}-scrollbar-thumb`,$)N.classList.add(`${J}-scrollbar--horizontal`);if(N.appendChild(G),K.appendChild(N),Y){if(Y.className=`${J}-scrollbar-hover`,$)Y.classList.add(`${J}-scrollbar-hover--horizontal`),Y.style.height=`${j}px`;else Y.style.width=`${j}px`;K.appendChild(Y)}},w=()=>{if(O)clearTimeout(O),O=null},T=()=>{if(!X)return;w(),O=setTimeout(b,D)},C=()=>{if(R<=Z)return;if(w(),!y)N.classList.add(`${J}-scrollbar--visible`),y=!0;if(X&&!k&&!M)T()},b=()=>{if(k||M)return;N.classList.remove(`${J}-scrollbar--visible`),y=!1},F=(V,p)=>{R=V,Z=p;let g=R>Z;if(N.style.display=g?"":"none",!g){b();return}let S=Z/R;A=Math.max(B,S*Z),G.style[x]=`${A}px`,_=Z-A,Jj(q)},Jj=(V)=>{if(q=V,R<=Z||_<=0)return;let p=R-Z,S=Math.min(1,Math.max(0,V/p))*_;G.style.transform=`${d}(${S}px)`},Kj=(V)=>{if(V.target===G)return;let p=N.getBoundingClientRect(),r=H(V)-p[jj]-A/2,Nj=Math.max(0,Math.min(r,_))/_,l=R-Z,yj=Nj*l;W(yj),C()},Qj=(V)=>{V.preventDefault(),V.stopPropagation(),k=!0,f=H(V),z=q,w(),N.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",s),document.addEventListener("mouseup",n)},s=(V)=>{if(!k)return;let p=H(V)-f,g=_>0?p/_:0,S=R-Z,r=g*S,c=Math.max(0,Math.min(z+r,S)),l=c/S*_;if(G.style.transform=`${d}(${l}px)`,L=c,U===null)U=requestAnimationFrame(()=>{if(L!==null)W(L);U=null})},n=()=>{if(k=!1,U!==null)cancelAnimationFrame(U),U=null;if(L!==null)W(L),L=null;if(N.classList.remove(`${J}-scrollbar--dragging`),X&&!M)T();document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",n)},$j=()=>{if(P)C()},Wj=()=>{if(!k){if(M=!1,X)T()}},m=()=>{M=!0,w(),C()},h=()=>{if(M=!1,!k&&X)T()},qj=()=>{if(w(),U!==null)cancelAnimationFrame(U),U=null;if(N.removeEventListener("click",Kj),N.removeEventListener("mouseenter",m),N.removeEventListener("mouseleave",h),G.removeEventListener("mousedown",Qj),K.removeEventListener("mouseenter",$j),K.removeEventListener("mouseleave",Wj),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",n),Y){if(Y.removeEventListener("mouseenter",m),Y.removeEventListener("mouseleave",h),Y.parentNode)Y.parentNode.removeChild(Y)}if(N.parentNode)N.parentNode.removeChild(N)};if(v(),N.addEventListener("click",Kj),N.addEventListener("mouseenter",m),N.addEventListener("mouseleave",h),G.addEventListener("mousedown",Qj),K.addEventListener("mouseenter",$j),K.addEventListener("mouseleave",Wj),Y)Y.addEventListener("mouseenter",m),Y.addEventListener("mouseleave",h);return{show:C,hide:b,updateBounds:F,updatePosition:Jj,isVisible:()=>y,destroy:qj}};var Lj=0.65,_j=0.5,Oj=0.95,Vj=0.1,Ej=5,kj=100,Rj=()=>{let K=null,W=0,Q=!1,J=0,$=null,X=0,D=0,B=null,E=[];return{name:"withScale",priority:20,setup(j){let{dom:P,config:R}=j,{classPrefix:Z,horizontal:A}=R,_=()=>{let z=j.getVirtualTotal(),q=u(z,j.heightCache);if(q.isCompressed&&!Q){Q=!0,j.scrollController.enableCompression(q),j.updateContentSize(q.virtualHeight),j.setScrollFns(()=>W,(N)=>{if(W=N,J=N,$!==null)cancelAnimationFrame($),$=null});let O=()=>{let N=J-W;if(Math.abs(N)<_j)W=J,$=null;else W+=N*Lj,$=requestAnimationFrame(O);j.scrollController.scrollTo(W)},y=P.viewport,U=(N)=>{N.preventDefault();let Y=j.getCachedCompression().virtualHeight-j.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+N.deltaY,Y)),$===null)$=requestAnimationFrame(O)};y.addEventListener("wheel",U,{passive:!1});let L=()=>{if(B!==null)cancelAnimationFrame(B),B=null},x=(N)=>{if(L(),$!==null)cancelAnimationFrame($),$=null;let G=N.touches[0];if(!G)return;let Y=A?G.clientX:G.clientY;X=Y,D=W,E=[{time:performance.now(),y:Y}]},d=(N)=>{N.preventDefault();let G=N.touches[0];if(!G)return;let Y=A?G.clientX:G.clientY,v=performance.now();if(E.push({time:v,y:Y}),E.length>Ej)E.shift();let w=X-Y,C=j.getCachedCompression().virtualHeight-j.state.viewportState.containerHeight,b=Math.max(0,Math.min(D+w,C));W=b,J=b,j.scrollController.scrollTo(b)},H=(N)=>{let G=performance.now(),Y=E.filter((C)=>G-C.time<kj),v=0;if(Y.length>=2){let C=Y[0],b=Y[Y.length-1],F=b.time-C.time;if(F>0)v=(C.y-b.y)/F}if(E=[],Math.abs(v)<Vj)return;let w=v*16,T=()=>{if(w*=Oj,Math.abs(w)<0.5){B=null;return}let b=j.getCachedCompression().virtualHeight-j.state.viewportState.containerHeight,F=W+w;if(F=Math.max(0,Math.min(F,b)),F<=0&&w<0||F>=b&&w>0){W=F,J=F,j.scrollController.scrollTo(F),B=null;return}W=F,J=F,j.scrollController.scrollTo(F),B=requestAnimationFrame(T)};B=requestAnimationFrame(T)};if(y.addEventListener("touchstart",x,{passive:!0}),y.addEventListener("touchmove",d,{passive:!1}),y.addEventListener("touchend",H,{passive:!0}),y.addEventListener("touchcancel",H,{passive:!0}),j.destroyHandlers.push(()=>{if(y.removeEventListener("wheel",U),y.removeEventListener("touchstart",x),y.removeEventListener("touchmove",d),y.removeEventListener("touchend",H),y.removeEventListener("touchcancel",H),L(),$!==null)cancelAnimationFrame($),$=null}),!P.viewport.querySelector(`.${Z}-scrollbar-track`)){if(K=t(P.viewport,(G)=>j.scrollController.scrollTo(G),{},Z,A),!P.viewport.classList.contains(`${Z}-viewport--custom-scrollbar`))P.viewport.classList.add(`${Z}-viewport--custom-scrollbar`);K.updateBounds(q.virtualHeight,j.state.viewportState.containerHeight);let N=K;j.afterScroll.push((G,Y)=>{if(N)N.updatePosition(G),N.show()}),j.resizeHandlers.push((G,Y)=>{if(N){let v=j.getCachedCompression();N.updateBounds(v.virtualHeight,j.state.viewportState.containerHeight)}})}}else if(!q.isCompressed&&Q)Q=!1,j.scrollController.disableCompression(),j.updateContentSize(q.actualHeight);else if(q.isCompressed)j.scrollController.updateConfig({compression:q}),j.updateContentSize(q.virtualHeight);if(K)K.updateBounds(q.virtualHeight,j.state.viewportState.containerHeight);j.state.cachedCompression={state:q,totalItems:z}};j.updateCompressionMode=_;let k=j.getCachedCompression.bind(j);j.getCachedCompression=()=>{if(j.state.cachedCompression)return j.state.cachedCompression.state;return k()},j.setVisibleRangeFn((z,q,O,y,U)=>{M=null,f=null;let L=u(y,O);i(z,q,O,y,L,U)}),j.setScrollToPosFn((z,q,O,y,U)=>{let L=u(y,q);return e(z,q,O,y,L,U)});let M=null,f=null;j.setPositionElementFn((z,q)=>{let O=j.getVirtualTotal(),y=u(O,j.heightCache);if(y.isCompressed){let U=j.scrollController.getScrollTop();if(M===null||q<f)f=q,M=Math.round(o(q,U,j.heightCache,O,j.state.viewportState.containerHeight,y));let L=M+j.heightCache.getOffset(q)-j.heightCache.getOffset(f),x=j.config.horizontal;z.style.transform=x?`translateX(${L}px)`:`translateY(${L}px)`}else{let U=Math.round(j.heightCache.getOffset(q)),L=j.config.horizontal;z.style.transform=L?`translateX(${U}px)`:`translateY(${U}px)`}}),_(),j.destroyHandlers.push(()=>{if(K)K.destroy(),K=null;if($!==null)cancelAnimationFrame($),$=null})},destroy(){if(K)K.destroy(),K=null;if($!==null)cancelAnimationFrame($),$=null;if(B!==null)cancelAnimationFrame(B),B=null}}};export{Rj as withScale,Uj as needsCompression,Bj as getMaxItemsWithoutCompression,u as getCompressionState,Zj as getCompressionInfo,Dj as calculateIndexFromScrollPosition,i as calculateCompressedVisibleRange,e as calculateCompressedScrollToIndex,Gj as calculateCompressedRenderRange,o as calculateCompressedItemPosition,I as MAX_VIRTUAL_HEIGHT};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "0.7.4",
3
+ "version": "0.7.6",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",