@floor/vlist 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -4
- package/dist/builder/context.d.ts +3 -3
- package/dist/builder/core.d.ts +1 -1
- package/dist/builder/materializectx.d.ts +7 -7
- package/dist/builder/range.d.ts +3 -3
- package/dist/builder/types.d.ts +12 -13
- package/dist/features/grid/plugin.d.ts +1 -1
- package/dist/features/grid/renderer.d.ts +5 -5
- package/dist/features/page/plugin.d.ts +1 -1
- package/dist/features/sections/index.d.ts +1 -1
- package/dist/features/sections/layout.d.ts +6 -5
- package/dist/features/sections/plugin.d.ts +1 -1
- package/dist/features/sections/sticky.d.ts +4 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/rendering/index.d.ts +2 -2
- package/dist/rendering/renderer.d.ts +7 -7
- package/dist/rendering/scale.d.ts +17 -17
- package/dist/rendering/sizes.d.ts +63 -0
- package/dist/rendering/viewport.d.ts +23 -23
- package/dist/types.d.ts +15 -15
- package/package.json +1 -1
- package/dist/rendering/heights.d.ts +0 -63
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var{defineProperty:B2,getOwnPropertyNames:Hj,getOwnPropertyDescriptor:Tj}=Object,Rj=Object.prototype.hasOwnProperty;var b2=new WeakMap,kj=(j)=>{var X=b2.get(j),Q;if(X)return X;if(X=B2({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")Hj(j).map((J)=>!Rj.call(X,J)&&B2(X,J,{get:()=>j[J],enumerable:!(Q=Tj(j,J))||Q.enumerable}));return b2.set(j,X),X};var Cj=(j,X)=>{for(var Q in X)B2(j,Q,{get:X[Q],enumerable:!0,configurable:!0,set:(J)=>X[Q]=()=>J})};var P2=(j,X)=>()=>(j&&(X=j(j=0)),X);var Sj=(j,X)=>{let Q=X;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if(Q===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),Q-1))},getTotalHeight:()=>Q*j,getTotal:()=>Q,rebuild:(J)=>{Q=J},isVariable:()=>!1}},vj=(j,X)=>{let Q=X,J=new Float64Array(0),K=(Y)=>{Q=Y,J=new Float64Array(Y+1),J[0]=0;for(let B=0;B<Y;B++)J[B+1]=J[B]+j(B)};K(X);let q=(Y)=>{if(Q===0)return 0;if(Y<=0)return 0;if(Y>=J[Q])return Q-1;let B=0,A=Q-1;while(B<A){let Z=B+A+1>>>1;if(J[Z]<=Y)B=Z;else A=Z-1}return B};return{getOffset:(Y)=>{if(Y<=0)return 0;if(Y>=Q)return J[Q];return J[Y]},getHeight:(Y)=>j(Y),indexAtOffset:(Y)=>q(Y),getTotalHeight:()=>J[Q]??0,getTotal:()=>Q,rebuild:(Y)=>K(Y),isVariable:()=>!0}},H0=(j,X)=>{if(typeof j==="number")return Sj(j,X);return vj(j,X)},f0=(j,X,Q,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil(Q/j.getHeight(0));let K=0,q=0,Y=X;while(Y<J&&q<Q)q+=j.getHeight(Y),K++,Y++;return Math.max(1,K)},c0=(j,X,Q)=>{if(Q===0)return 0;if(!j.isVariable())return Math.floor(X/j.getHeight(0));let J=0,K=0;for(let q=Q-1;q>=0;q--){let Y=j.getHeight(q);if(K+Y>X)break;K+=Y,J++}return Math.max(J,1)},N2=(j,X,Q)=>{if(Q===0)return 0;let J=Math.floor(X),K=X-J,q=Math.max(0,Math.min(J,Q-1));return j.getOffset(q)+K*j.getHeight(q)};var D2=200,I0=50,x2=15,g2=2,m2=50,b0=16000000;var V0=(j,X)=>{let Q=X.getTotalHeight(),J=Q>b0,K=J?b0:Q,q=Q>0?K/Q:1;return{isCompressed:J,actualHeight:Q,virtualHeight:K,ratio:q}},s0=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;if(!K.isCompressed){let G=Q.indexAtOffset(j),V=Q.indexAtOffset(j+X);if(V<J-1)V++;return q.start=Math.max(0,G),q.end=Math.min(J-1,Math.max(0,V)),q}let{virtualHeight:Y}=K,A=j/Y*J,Z=Math.floor(A),W=f0(Q,Math.max(0,Z),X,J),M=Math.ceil(A)+W,$=Y-X-j;if($<=X&&$>=-1){let G=c0(Q,X,J),V=Math.max(0,J-G),E=Math.max(0,Math.min(1,1-$/X));Z=Math.floor(Z+(V-Z)*E),M=$<=1?J-1:Math.min(J-1,Z+W)}return q.start=Math.max(0,Z),q.end=Math.min(J-1,Math.max(0,M)),q},d2=(j,X,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X),J},T0=(j,X,Q,J,K,q,Y)=>{if(!q.isCompressed||J===0)return Q.getOffset(j);let{virtualHeight:B}=q,A=B-K,Z=A-X;if(Z<=K&&Z>=-1){if(X>=A-1){let _=Q.getTotalHeight()-Q.getOffset(j);return K-_}let $=c0(Q,K,J),G=Math.max(0,J-$),E=X/B*J,z=Math.max(0,Math.min(1,1-Z/K)),y=Q.getOffset(j)-Q.getOffset(G),T=Q.getOffset(j)-N2(Q,E,J);return T+(y-T)*z}let W=X/B,M=Q.getTotalHeight(),O=W*M;return Q.getOffset(j)-O},a0=(j,X,Q,J,K,q="start")=>{if(J===0)return 0;let Y;if(K.isCompressed){if(q==="end"&&j===J-1)return Math.max(0,K.virtualHeight-Q);Y=j/J*K.virtualHeight}else Y=X.getOffset(j);let B=X.getHeight(j);switch(q){case"center":Y-=(Q-B)/2;break;case"end":Y-=Q-B;break}let A=K.virtualHeight-Q;return Math.max(0,Math.min(Y,A))},c2=(j,X,Q,J)=>{if(Q===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*Q)}return X.indexAtOffset(j)},l2=(j,X)=>{if(typeof X==="number")return j*X>b0;return X.getTotalHeight()>b0},s2=(j)=>{if(j<=0)return 0;return Math.floor(b0/j)},a2=(j,X)=>{let Q=V0(j,X);if(!Q.isCompressed)return`No compression needed (${j} items, ${(Q.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${j} items, ${(Q.actualHeight/1e6).toFixed(1)}M px → ${(Q.virtualHeight/1e6).toFixed(1)}M px virtual)`};var r0=()=>{};var y0=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var Gj={};Cj(Gj,{createGridRenderer:()=>x0});var aj=(j=200)=>{let X=[];return{acquire:()=>{let q=X.pop();if(q)return q;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},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}}},x0=(j,X,Q,J,K,q,Y,B)=>{let A=aj(),Z=new Map,W=q,M=!1,O=null,$=0,G="",V=(P)=>{if(O&&$===P)return O;return O=V0(P,Q),$=P,O},E={selected:!1,focused:!1},z=(P,S)=>{return E.selected=P,E.focused=S,E},y=`${K}-item ${K}-grid-item`,T=`${K}-item--selected`,_=`${K}-item--focused`,U=(P,S)=>{if(typeof S==="string")P.innerHTML=S;else P.replaceChildren(S)},D=(P,S,g)=>{P.classList.toggle(T,S),P.classList.toggle(_,g)},L=(P,S)=>{let g=J.getRow(P);if(S){let a=S.totalItems,r=V(a);if(r.isCompressed)return T0(g,S.scrollTop,Q,a,S.containerHeight,r,S.rangeStart)}return Q.getOffset(g)},b=(P,S,g)=>{let a=P.dataset.id?.startsWith("__group_header"),r=a?0:J.getCol(S),n=a?0:J.getColumnOffset(r,W),K0;if(M){let X0=J.getRow(S),H=0,c=new Set;for(let l=0;l<S;l++){let Y0=J.getRow(l);if(Y0<X0&&!c.has(Y0)){let o=Q.getHeight(l);H+=o,c.add(Y0)}}K0=H}else K0=L(S,g);P.style.transform=`translate(${Math.round(n)}px, ${Math.round(K0)}px)`},v=(P,S)=>{let g=P.dataset.id?.startsWith("__group_header"),a=g?W:J.getColumnWidth(W),r;if(M||g)r=Q.getHeight(S)-J.gap;else{let n=J.getRow(S);r=Q.getHeight(n)-J.gap}P.style.width=`${a}px`,P.style.height=`${r}px`},u=(P,S,g,a,r)=>{let n=A.acquire(),K0=z(g,a);if(n.className=y,n.dataset.index=String(P),n.dataset.id=String(S.id),n.dataset.row=String(J.getRow(P)),n.dataset.col=String(J.getCol(P)),n.ariaSelected=String(g),B)n.id=`${B}-item-${P}`;if(Y)G=String(Y()),n.setAttribute("aria-setsize",G),n.setAttribute("aria-posinset",String(P+1));v(n,P);let X0=X(S,P,K0);return U(n,X0),D(n,g,a),b(n,P,r),n},N=(P,S,g,a,r)=>{if(S.start===0&&P.length>0)M=y0(P[0]);for(let[H,c]of Z)if(H<S.start||H>S.end)c.element.remove(),A.release(c.element),Z.delete(H);let n=!1;if(Y){let H=String(Y());n=H!==G,G=H}let K0=document.createDocumentFragment(),X0=[];for(let H=S.start;H<=S.end;H++){let c=H-S.start,l=P[c];if(!l){console.warn(`⚠️ RENDER: Missing item at index ${H} (range: ${S.start}-${S.end}, items.length: ${P.length})`);continue}let Y0=g.has(l.id),o=H===a,J0=Z.get(H);if(J0){let G0=J0.element.dataset.id,w=String(l.id);if(G0!==w){let t=z(Y0,o),j0=X(l,H,t);U(J0.element,j0),J0.element.dataset.id=w,J0.element.dataset.row=String(J.getRow(H)),J0.element.dataset.col=String(J.getCol(H)),v(J0.element,H)}if(D(J0.element,Y0,o),J0.element.ariaSelected=String(Y0),b(J0.element,H,r),n)J0.element.setAttribute("aria-setsize",G)}else{let G0=u(H,l,Y0,o,r);K0.appendChild(G0),X0.push({index:H,element:G0})}}if(X0.length>0){j.appendChild(K0);for(let{index:H,element:c}of X0)Z.set(H,{index:H,element:c})}},C=(P)=>{for(let[S,g]of Z)b(g.element,S,P)},x=(P,S,g,a)=>{let r=Z.get(P);if(r){let n=z(g,a),K0=X(S,P,n);U(r.element,K0),D(r.element,g,a),r.element.dataset.id=String(S.id),r.element.ariaSelected=String(g),v(r.element,P)}},d=(P,S,g)=>{let a=Z.get(P);if(a)D(a.element,S,g)},R=(P)=>{return Z.get(P)?.element},k=(P)=>{if(Math.abs(P-W)<1)return;W=P;for(let[S,g]of Z)v(g.element,S),b(g.element,S)},I=()=>{for(let[,P]of Z)P.element.remove(),A.release(P.element);Z.clear()};return{render:N,updatePositions:C,updateItem:x,updateItemClasses:d,getElement:R,updateContainerWidth:k,clear:I,destroy:()=>{I(),A.clear()}}};var X2=P2(()=>{r0()});var y2=2,$2=(j=0)=>{let X=[,,,,,];for(let Q=0;Q<5;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},U2=(j,X)=>{let Q=performance.now(),J=Q-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=Q,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=Q,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=Q,j.sampleIndex=(j.sampleIndex+1)%5,j.sampleCount=Math.min(j.sampleCount+1,5),j.sampleCount>=2){let q=(j.sampleIndex-j.sampleCount+5)%5,Y=j.samples[q],B=X-Y.position,A=Q-Y.time;j.velocity=A>0?Math.abs(B)/A:0}return j.lastPosition=X,j.lastTime=Q,j};var l0=()=>{let j={},X=(B,A)=>{if(!j[B])j[B]=new Set;return j[B].add(A),()=>Q(B,A)},Q=(B,A)=>{j[B]?.delete(A)};return{on:X,off:Q,emit:(B,A)=>{j[B]?.forEach((Z)=>{try{Z(A)}catch(W){console.error(`[vlist] Error in event handler for "${String(B)}":`,W)}})},once:(B,A)=>{let Z=(W)=>{Q(B,Z),A(W)};return X(B,Z)},clear:(B)=>{if(B)delete j[B];else for(let A in j)delete j[A]},listenerCount:(B)=>{return j[B]?.size??0}}};var H2=(j)=>{if(typeof j==="string"){let X=document.querySelector(j);if(!X)throw Error(`[vlist/builder] Container not found: ${j}`);return X}return j},T2=(j,X,Q,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"),Q)K.setAttribute("aria-label",Q);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 Y=document.createElement("div");if(Y.className=`${X}-content`,Y.style.position="relative",J)Y.style.height="100%";else Y.style.width="100%";let B=document.createElement("div");if(B.className=`${X}-items`,B.style.position="relative",J)B.style.height="100%";else B.style.width="100%";return Y.appendChild(B),q.appendChild(Y),K.appendChild(q),j.appendChild(K),{root:K,viewport:q,content:Y,items:B}};var R2=(j=100)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:(Q)=>{if(X.length<j)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),X.push(Q)},clear:()=>{X.length=0}}};var k2=(j,X,Q,J,K)=>{if(J===0||X===0){K.start=0,K.end=0;return}let q=Q.indexAtOffset(j),Y=f0(Q,q,X,J),B=q+Y;K.start=Math.max(0,q),K.end=Math.min(J-1,Math.max(0,B))},C2=(j,X,Q,J)=>{if(Q===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X)},S2=(j,X,Q,J,K)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Y=X.getOffset(q),B=X.getHeight(q),A=Math.max(0,X.getTotalHeight()-Q),Z;switch(K){case"center":Z=Y-(Q-B)/2;break;case"end":Z=Y-Q+B;break;default:Z=Y}return Math.max(0,Math.min(Z,A))};var v2=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,w2=(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}};var f2=(j,X)=>{let{dom:Q,emitter:J,resolvedConfig:K,rawConfig:q,rendered:Y,pool:B,sharedState:A,isHorizontal:Z,classPrefix:W,contentSizeHandlers:M,afterScroll:O,clickHandlers:$,keydownHandlers:G,resizeHandlers:V,destroyHandlers:E,methods:z,onScrollFrame:y,resizeObserver:T,renderRange:_}=X;return{get dom(){return Q},get heightCache(){return j.hc},get emitter(){return J},get config(){return K},get rawConfig(){return q},get renderer(){return{render:(U,D,L,b,v)=>{j.ss=L,j.fi=b,j.ffn()},updateItemClasses:(U,D,L)=>{let b=Y.get(U);if(!b)return;b.classList.toggle(`${W}-item--selected`,D),b.classList.toggle(`${W}-item--focused`,L),b.ariaSelected=D?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(U)=>Y.get(U)??null,clear:()=>{},destroy:()=>{}}},set renderer(U){},get dataManager(){return j.dm},set dataManager(U){j.dm=U},get scrollController(){return j.sc},set scrollController(U){j.sc=U},state:A,getContainerWidth(){return j.cw},afterScroll:O,clickHandlers:$,keydownHandlers:G,resizeHandlers:V,contentSizeHandlers:M,destroyHandlers:E,methods:z,replaceTemplate(U){j.at=U},replaceRenderer(U){},replaceDataManager(U){j.dm=U},replaceScrollController(U){j.sc=U},getItemsForRange(U){let{dm:D,it:L}=j,b=[];for(let v=U.start;v<=U.end;v++){let u=D?D.getItem(v):L[v];if(u)b.push(u)}return b},getAllLoadedItems(){let U=j.dm;if(U){let D=U.getTotal(),L=[];for(let b=0;b<D;b++){let v=U.getItem(b);if(v)L.push(v)}return L}return[...j.it]},getVirtualTotal(){return j.vtf()},getCachedCompression(){let U=j.hc;return{isCompressed:!1,actualHeight:U.getTotalHeight(),virtualHeight:U.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:j.ls,totalItems:j.vtf(),containerHeight:j.ch,rangeStart:_.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,U]of Y)U.remove(),B.release(U);Y.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(U,D){j.rfn=U,j.ffn=D},setVirtualTotalFn(U){j.vtf=U},rebuildHeightCache(U){j.hc.rebuild(U??j.vtf())},setHeightConfig(U){j.hc=H0(U,j.vtf())},updateContentSize(U){let D=`${U}px`;if(Z)Q.content.style.width=D;else Q.content.style.height=D},updateCompressionMode(){},setVisibleRangeFn(U){j.gvr=U},setScrollToPosFn(U){j.gsp=U},setPositionElementFn(U){j.pef=U},setScrollFns(U,D){j.sgt=U,j.sst=(L)=>{D(L),y()}},setScrollTarget(U){j.st.removeEventListener("scroll",y),j.st=U,j.st.addEventListener("scroll",y,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(U){j.gcw=U.width,j.gch=U.height,j.cw=U.width(),j.ch=U.height(),A.viewportState.containerHeight=j.ch},disableViewportResize(){if(j.vre)j.vre=!1,T.unobserve(Q.viewport)}}},I2=(j,X,Q)=>{let{rendered:J,itemState:K,contentSizeHandlers:q,applyTemplate:Y,updateContentSize:B}=X,A=()=>{j.hc.rebuild(j.vtf()),B(),Q.updateCompressionMode();for(let Z=0;Z<q.length;Z++)q[Z]();j.ffn()};return{getState:()=>({total:j.it.length,cached:j.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>j.it.length,getCached:()=>j.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Z)=>j.it[Z],isItemLoaded:(Z)=>Z>=0&&Z<j.it.length&&j.it[Z]!==void 0,getItemsInRange:(Z,W)=>{let M=j.it,O=[],$=Math.max(0,Z),G=Math.min(W,M.length-1);for(let V=$;V<=G;V++)O.push(M[V]);return O},setTotal:(Z)=>{},setItems:(Z,W=0,M)=>{let O=j.it;if(W===0&&(M!==void 0||O.length===0))j.it=Z;else{let $=W+Z.length;if(O.length<$)O.length=$;for(let G=0;G<Z.length;G++)O[W+G]=Z[G]}if(j.ii)A()},updateItem:(Z,W)=>{let M=j.it;if(Z<0||Z>=M.length)return!1;let O=M[Z];if(!O)return!1;M[Z]={...O,...W};let $=J.get(Z);if($)Y($,j.at(M[Z],Z,K)),$.dataset.id=String(M[Z].id);return!0},removeItem:(Z)=>{if(Z<0||Z>=j.it.length)return!1;if(j.it.splice(Z,1),j.ii)A();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{j.it=[]},reset:()=>{if(j.it=[],j.ii)j.hc.rebuild(0),B(),j.ffn()}}},p2=(j,X)=>{let{dom:Q,classPrefix:J}=X;return{getScrollTop:()=>j.sgt(),scrollTo:(K)=>{j.sst(K),j.ls=K,j.rfn()},scrollBy:(K)=>{let q=j.sgt()+K;j.sst(q),j.ls=q,j.rfn()},isAtTop:()=>j.ls<=2,isAtBottom:(K=2)=>j.sab(K),getScrollPercentage:()=>{let K=j.hc.getTotalHeight(),q=Math.max(0,K-j.ch);return q>0?j.ls/q:0},getVelocity:()=>j.vt.velocity,isTracking:()=>j.vt.sampleCount>=2,isScrolling:()=>Q.root.classList.contains(`${J}--scrolling`),updateConfig:()=>{},enableCompression:()=>{j.sic=!0},disableCompression:()=>{j.sic=!1},isCompressed:()=>j.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{j.ch=K},destroy:()=>{}}};var wj=3,fj="vlist",u2=150,Ij=0,h2=(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",Q=X?"width":"height",J=X?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${Q} is required${X?" when direction is 'horizontal'":""}`);if(typeof J==="number"&&J<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof J!=="number"&&typeof J!=="function")throw Error(`[vlist/builder] item.${Q} 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,Y={use(B){if(q)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(B.name,B),Y},build(){if(q)throw Error("[vlist/builder] .build() can only be called once");return q=!0,pj(j,K,X,J)}};return Y};function pj(j,X,Q,J){let{item:K,items:q,overscan:Y=wj,classPrefix:B=fj,ariaLabel:A,reverse:Z=!1,scroll:W}=j,M=W?.wheel??!0,O=W?.wrap??!1,$=Z,G=`${B}-${Ij++}`,V=J,E=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,z=Q?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,y={overscan:Y,classPrefix:B,reverse:$,wrap:O,horizontal:Q,ariaIdPrefix:G},T=Array.from(X.values()).sort((F,f)=>(F.priority??50)-(f.priority??50)),_=new Set(T.map((F)=>F.name));for(let F of T)if(F.conflicts){for(let f of F.conflicts)if(_.has(f))throw Error(`[vlist/builder] ${F.name} and ${f} cannot be combined`)}if(Q){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($){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let U=H2(j.container),D=T2(U,B,A,Q),L=l0(),b=q||[],v=H0(V,b.length),u=R2(),N={it:b,hc:v,ch:D.viewport.clientHeight,cw:D.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:$2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>D.viewport.scrollLeft:()=>D.viewport.scrollTop,sst:Q?(F)=>{D.viewport.scrollLeft=F}:(F)=>{D.viewport.scrollTop=F},sab:(F=2)=>{let f=N.hc.getTotalHeight();return N.ls+N.ch>=f-F},sic:!1,rfn:null,ffn:null,gvr:(F,f,m,s,e)=>{k2(F,f,m,s,e)},gsp:(F,f,m,s,e)=>{return S2(F,f,m,s,e)},pef:null,at:K.template,vre:!0,st:D.viewport,gcw:()=>N.cw,gch:()=>N.ch};N.vtf=()=>N.dm?N.dm.getTotal():N.it.length;let C=null,x=null,d={start:0,end:0},R={start:0,end:0},k={start:-1,end:-1},I={viewportState:{scrollTop:0,containerHeight:N.ch,totalHeight:N.hc.getTotalHeight(),actualHeight:N.hc.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},p=new Map,P={selected:!1,focused:!1},S=`${B}-item`,g=[],a=[],r=[],n=[],K0=[],X0=[],H=new Map,c=(F,f)=>{if(typeof f==="string")F.innerHTML=f;else F.replaceChildren(f)},l=(F,f)=>{let m=Math.round(N.hc.getOffset(f));if(Q)F.style.transform=`translateX(${m}px)`;else F.style.transform=`translateY(${m}px)`};N.pef=l;let Y0=(F,f)=>{let m=u.acquire();if(m.className=S,Q){if(m.style.width=`${N.hc.getHeight(F)}px`,z!=null)m.style.height=`${z}px`}else m.style.height=`${N.hc.getHeight(F)}px`;if(m.dataset.index=String(F),m.dataset.id=String(f.id),m.ariaSelected="false",m.id=`${G}-item-${F}`,N.la=String(N.vtf()),m.setAttribute("aria-setsize",N.la),m.setAttribute("aria-posinset",String(F+1)),String(f.id).startsWith("__placeholder_"))m.classList.add(`${B}-item--placeholder`);return c(m,N.at(f,F,P)),N.pef(m,F),m},o=()=>{let F=`${N.hc.getTotalHeight()}px`;if(Q)D.content.style.width=F;else D.content.style.height=F},J0=()=>{if(N.id)return;let F=N.vtf();if(N.gvr(N.ls,N.ch,N.hc,F,d),C2(d,Y,F,R),R.start===k.start&&R.end===k.end){if(N.sic)for(let[i,N0]of p)N.pef(N0,i);return}let f=String(F),m=f!==N.la;N.la=f;for(let[i,N0]of p)if(i<R.start||i>R.end)N0.remove(),u.release(N0),p.delete(i);let s=document.createDocumentFragment(),e=[];for(let i=R.start;i<=R.end;i++){let N0=N.dm?N.dm.getItem(i):N.it[i];if(!N0)continue;let q0=p.get(i);if(q0){let A0=q0.dataset.id,v0=String(N0.id);if(A0!==v0){let $j=A0?.startsWith("__placeholder_"),z2=v0.startsWith("__placeholder_");if(c(q0,N.at(N0,i,P)),q0.dataset.id=v0,Q)q0.style.width=`${N.hc.getHeight(i)}px`;else q0.style.height=`${N.hc.getHeight(i)}px`;if(z2)q0.classList.add(`${B}-item--placeholder`);else q0.classList.remove(`${B}-item--placeholder`);if($j&&!z2)q0.classList.add(`${B}-item--replaced`),setTimeout(()=>{q0.classList.remove(`${B}-item--replaced`)},300)}N.pef(q0,i);let d0=N.ss.has(N0.id),yj=i===N.fi;if(q0.classList.toggle(`${B}-item--selected`,d0),q0.classList.toggle(`${B}-item--focused`,yj),q0.ariaSelected=d0?"true":"false",m)q0.setAttribute("aria-setsize",N.la)}else{let A0=Y0(i,N0),v0=N.ss.has(N0.id),d0=i===N.fi;if(v0)A0.classList.add(`${B}-item--selected`),A0.ariaSelected="true";if(d0)A0.classList.add(`${B}-item--focused`);s.appendChild(A0),e.push({index:i,element:A0})}}if(e.length>0){D.items.appendChild(s);for(let{index:i,element:N0}of e)p.set(i,N0)}k.start=R.start,k.end=R.end,I.lastRenderRange.start=R.start,I.lastRenderRange.end=R.end,I.viewportState.scrollTop=N.ls,I.viewportState.visibleRange.start=d.start,I.viewportState.visibleRange.end=d.end,I.viewportState.renderRange.start=R.start,I.viewportState.renderRange.end=R.end,L.emit("range:change",{range:{start:R.start,end:R.end}})},G0=()=>{k.start=-1,k.end=-1,N.rfn()};N.rfn=J0,N.ffn=G0;let w=()=>{if(N.id)return;let F=N.sgt(),f=F>=N.ls?"down":"up";if(N.vt=U2(N.vt,F),!D.root.classList.contains(`${B}--scrolling`))D.root.classList.add(`${B}--scrolling`);N.ls=F,N.rfn(),L.emit("scroll",{scrollTop:F,direction:f}),L.emit("velocity:change",{velocity:N.vt.velocity,reliable:N.vt.sampleCount>=y2});for(let m=0;m<g.length;m++)g[m](F,f);if(x)clearTimeout(x);x=setTimeout(()=>{D.root.classList.remove(`${B}--scrolling`),N.vt.velocity=0,N.vt.sampleCount=0,L.emit("velocity:change",{velocity:0,reliable:!1})},W?.idleTimeout??u2)},h=null;if(N.st.addEventListener("scroll",w,{passive:!0}),M&&!Q&&!E)h=(F)=>{F.preventDefault();let f=N.sgt(),m=F.deltaY,s=Math.max(0,Math.min(f+m,N.hc.getTotalHeight()-N.ch));N.sst(s),N.ls=s,N.vt=U2(N.vt,s),N.rfn();let e=s>=f?"down":"up";if(L.emit("scroll",{scrollTop:s,direction:e}),!D.root.classList.contains(`${B}--scrolling`))D.root.classList.add(`${B}--scrolling`);if(x)clearTimeout(x);x=setTimeout(()=>{D.root.classList.remove(`${B}--scrolling`),N.vt.velocity=0,N.vt.sampleCount=0,L.emit("velocity:change",{velocity:0,reliable:!1})},W?.idleTimeout??u2)},D.viewport.addEventListener("wheel",h,{passive:!1});else if(Q&&M)h=(F)=>{if(F.deltaX)return;F.preventDefault(),D.viewport.scrollLeft+=F.deltaY},D.viewport.addEventListener("wheel",h,{passive:!1});let t=(F)=>{let m=F.target.closest("[data-index]");if(m){let s=parseInt(m.dataset.index??"-1",10);if(s>=0){let e=N.dm?.getItem(s)??N.it[s];if(e){if(e.__groupHeader)return;L.emit("item:click",{item:e,index:s,event:F})}}}for(let s=0;s<a.length;s++)a[s](F)},j0=(F)=>{let m=F.target.closest("[data-index]");if(m){let s=parseInt(m.dataset.index??"-1",10);if(s>=0){let e=N.dm?.getItem(s)??N.it[s];if(e){if(e.__groupHeader)return;L.emit("item:dblclick",{item:e,index:s,event:F})}}}},Z0=(F)=>{for(let f=0;f<r.length;f++)r[f](F)};D.items.addEventListener("click",t),D.items.addEventListener("dblclick",j0),D.root.addEventListener("keydown",Z0);let B0=new ResizeObserver((F)=>{if(N.id)return;for(let f of F){let m=f.contentRect.height,s=f.contentRect.width,e=Q?s:m;if(N.cw=s,Math.abs(e-N.ch)>1){if(N.ch=e,I.viewportState.containerHeight=e,N.ii)o(),N.rfn(),L.emit("resize",{height:m,width:s})}if(N.ii)for(let i=0;i<n.length;i++)n[i](s,m)}});if(N.vre)B0.observe(D.viewport);let _0={dom:D,emitter:L,resolvedConfig:y,rawConfig:j,rendered:p,pool:u,itemState:P,sharedState:I,renderRange:R,isHorizontal:Q,classPrefix:B,contentSizeHandlers:K0,afterScroll:g,clickHandlers:a,keydownHandlers:r,resizeHandlers:n,destroyHandlers:X0,methods:H,onScrollFrame:w,resizeObserver:B0,applyTemplate:c,updateContentSize:o},Q0=f2(N,_0);N.dm=I2(N,_0,Q0),N.sc=p2(N,_0);let U0=new Map;for(let F of T)if(F.methods)for(let f of F.methods){let m=U0.get(f);if(m)throw Error(`[vlist/builder] Method "${f}" is registered by both "${m}" and "${F.name}"`);U0.set(f,F.name)}for(let F of T)F.setup(Q0);if(N.ii=!0,Q0.state.isInitialized=!0,o(),N.rfn(),$&&N.it.length>0){let F=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(F),N.ls=F,N.rfn()}let O0=(F)=>{Q0.dataManager.setItems(F,0,F.length)},z0=$?(F)=>{let f=N.sab(2),m=N.it.length;if(Q0.dataManager.setItems(F,m),f&&N.it.length>0){let s=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(s),N.ls=s,N.rfn()}}:(F)=>{let f=N.it.length;Q0.dataManager.setItems(F,f)},D0=$?(F)=>{let f=N.sgt(),m=N.hc.getTotalHeight(),s=[...N.it];Q0.dataManager.clear(),Q0.dataManager.setItems([...F,...s],0);let i=N.hc.getTotalHeight()-m;if(i>0)N.sst(f+i),N.ls=f+i}:(F)=>{let f=[...N.it];Q0.dataManager.clear(),Q0.dataManager.setItems([...F,...f],0)},M0=(F,f)=>{Q0.dataManager.updateItem(F,f)},W0=(F)=>{Q0.dataManager.removeItem(F)},E0=async()=>{if(Q0.dataManager.reload)await Q0.dataManager.reload()},F0=()=>{if(C!==null)cancelAnimationFrame(C),C=null},Fj=(F,f,m)=>{if(F0(),Math.abs(f-F)<1){N.sst(f),N.ls=f,N.rfn();return}let s=performance.now(),e=(i)=>{let N0=i-s,q0=Math.min(N0/m,1),A0=F+(f-F)*v2(q0);if(N.sst(A0),N.ls=A0,N.rfn(),q0<1)C=requestAnimationFrame(e);else C=null};C=requestAnimationFrame(e)},Lj=(F,f)=>{let{align:m,behavior:s,duration:e}=w2(f),i=N.vtf(),N0=F;if(O&&i>0)N0=(N0%i+i)%i;let q0=N.gsp(N0,N.hc,N.ch,i,m);if(s==="smooth")Fj(N.sgt(),q0,e);else F0(),N.sst(q0)},Oj=()=>N.sgt(),zj=(F,f)=>{return L.on(F,f)},bj=(F,f)=>{L.off(F,f)},Pj=()=>{if(N.id)return;if(N.id=!0,Q0.state.isDestroyed=!0,D.items.removeEventListener("click",t),D.root.removeEventListener("keydown",Z0),N.st.removeEventListener("scroll",w),B0.disconnect(),h)D.viewport.removeEventListener("wheel",h);if(x)clearTimeout(x);for(let F=0;F<X0.length;F++)X0[F]();for(let F of T)if(F.destroy)F.destroy();F0();for(let[,F]of p)F.remove(),u.release(F);p.clear(),u.clear(),L.clear(),D.root.remove()},O2={get element(){return D.root},get items(){if(H.has("_getItems"))return H.get("_getItems")();return N.it},get total(){if(H.has("_getTotal"))return H.get("_getTotal")();return N.vtf()},setItems:H.has("setItems")?H.get("setItems"):O0,appendItems:H.has("appendItems")?H.get("appendItems"):z0,prependItems:H.has("prependItems")?H.get("prependItems"):D0,updateItem:H.has("updateItem")?H.get("updateItem"):M0,removeItem:H.has("removeItem")?H.get("removeItem"):W0,reload:H.has("reload")?H.get("reload"):E0,scrollToIndex:H.has("scrollToIndex")?H.get("scrollToIndex"):Lj,cancelScroll:H.has("cancelScroll")?H.get("cancelScroll"):F0,getScrollPosition:H.has("getScrollPosition")?H.get("getScrollPosition"):Oj,on:zj,off:bj,destroy:Pj};for(let[F,f]of H){if(F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;O2[F]=f}return O2}r0();var R0=(j,X,Q={},J="vlist",K=!1)=>{let{autoHide:q=!0,autoHideDelay:Y=1000,minThumbSize:B=30,showOnHover:A=!0,hoverZoneWidth:Z=16,showOnViewportEnter:W=!0}=Q,M=0,O=0,$=0,G=0,V=!1,E=!1,z=0,y=0,T=0,_=null,U=!1,D=null,L=null,b=K?"width":"height",v=K?"translateX":"translateY",u=K?(o)=>o.clientX:(o)=>o.clientY,N=K?"left":"top",C=document.createElement("div"),x=document.createElement("div"),d=A?document.createElement("div"):null,R=()=>{if(C.className=`${J}-scrollbar`,x.className=`${J}-scrollbar-thumb`,K)C.classList.add(`${J}-scrollbar--horizontal`);if(C.appendChild(x),j.appendChild(C),d){if(d.className=`${J}-scrollbar-hover`,K)d.classList.add(`${J}-scrollbar-hover--horizontal`),d.style.height=`${Z}px`;else d.style.width=`${Z}px`;j.appendChild(d)}},k=()=>{if(_)clearTimeout(_),_=null},I=()=>{if(!q)return;k(),_=setTimeout(P,Y)},p=()=>{if(M<=O)return;if(k(),!U)C.classList.add(`${J}-scrollbar--visible`),U=!0;if(q&&!V&&!E)I()},P=()=>{if(V||E)return;C.classList.remove(`${J}-scrollbar--visible`),U=!1},S=(o,J0)=>{M=o,O=J0;let G0=M>O;if(C.style.display=G0?"":"none",!G0){P();return}let w=O/M;$=Math.max(B,w*O),x.style[b]=`${$}px`,G=O-$,g(T)},g=(o)=>{if(T=o,M<=O||G<=0)return;let J0=M-O,w=Math.min(1,Math.max(0,o/J0))*G;x.style.transform=`${v}(${w}px)`},a=(o)=>{if(o.target===x)return;let J0=C.getBoundingClientRect(),h=u(o)-J0[N]-$/2,j0=Math.max(0,Math.min(h,G))/G,Z0=M-O,B0=j0*Z0;X(B0),p()},r=(o)=>{o.preventDefault(),o.stopPropagation(),V=!0,z=u(o),y=T,k(),C.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",n),document.addEventListener("mouseup",K0)},n=(o)=>{if(!V)return;let J0=u(o)-z,G0=G>0?J0/G:0,w=M-O,h=G0*w,t=Math.max(0,Math.min(y+h,w)),Z0=t/w*G;if(x.style.transform=`${v}(${Z0}px)`,L=t,D===null)D=requestAnimationFrame(()=>{if(L!==null)X(L);D=null})},K0=()=>{if(V=!1,D!==null)cancelAnimationFrame(D),D=null;if(L!==null)X(L),L=null;if(C.classList.remove(`${J}-scrollbar--dragging`),q&&!E)I();document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",K0)},X0=()=>{if(W)p()},H=()=>{if(!V){if(E=!1,q)I()}},c=()=>{E=!0,k(),p()},l=()=>{if(E=!1,!V&&q)I()},Y0=()=>{if(k(),D!==null)cancelAnimationFrame(D),D=null;if(C.removeEventListener("click",a),C.removeEventListener("mouseenter",c),C.removeEventListener("mouseleave",l),x.removeEventListener("mousedown",r),j.removeEventListener("mouseenter",X0),j.removeEventListener("mouseleave",H),document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",K0),d){if(d.removeEventListener("mouseenter",c),d.removeEventListener("mouseleave",l),d.parentNode)d.parentNode.removeChild(d)}if(C.parentNode)C.parentNode.removeChild(C)};if(R(),C.addEventListener("click",a),C.addEventListener("mouseenter",c),C.addEventListener("mouseleave",l),x.addEventListener("mousedown",r),j.addEventListener("mouseenter",X0),j.addEventListener("mouseleave",H),d)d.addEventListener("mouseenter",c),d.addEventListener("mouseleave",l);return{show:p,hide:P,updateBounds:S,updatePosition:g,isVisible:()=>U,destroy:Y0}};var r2=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:J,config:K}=Q,{classPrefix:q,horizontal:Y}=K;if(X=R0(J.viewport,(Z)=>Q.scrollController.scrollTo(Z),j??{},q,Y),!J.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))J.viewport.classList.add(`${q}-viewport--custom-scrollbar`);let B=Q.getCachedCompression();X.updateBounds(B.virtualHeight,Q.state.viewportState.containerHeight);let A=X;Q.afterScroll.push((Z,W)=>{A.updatePosition(Z),A.show()}),Q.resizeHandlers.push((Z,W)=>{if(A){let M=Q.getCachedCompression();A.updateBounds(M.virtualHeight,Q.state.viewportState.containerHeight)}}),Q.contentSizeHandlers.push(()=>{if(A){let Z=Q.getCachedCompression();A.updateBounds(Z.virtualHeight,Q.state.viewportState.containerHeight)}}),Q.destroyHandlers.push(()=>{if(A)A.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var n2=(j=0)=>{let X=[,,,,,,,,];for(let Q=0;Q<8;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},n0=(j,X)=>{let Q=performance.now(),J=Q-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=Q,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=Q,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=Q,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,Y=j.samples[q],B=X-Y.position,A=Q-Y.time;j.velocity=A>0?B/A:0}return j.lastPosition=X,j.lastTime=Q,j},uj=(j)=>j.sampleCount>=3,o2=(j,X={})=>{let{wheel:Q=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:q=150,onScroll:Y,onIdle:B,scrollElement:A,horizontal:Z=!1}=X,W=!!A,M=0,O=0,$=W?Z?window.innerWidth:window.innerHeight:Z?j.clientWidth:j.clientHeight,G=X.compressed??!1,V=X.compression,E=n2(),z=!1,y=null,_=o0(()=>{let H=Z?j.scrollLeft:j.scrollTop,c=H>=M?"down":"up";if(E=n0(E,H),M=H,Y)Y({scrollTop:M,direction:c,velocity:E.velocity});u()}),D=o0(()=>{let H=j.getBoundingClientRect(),c=Z?Math.max(0,-H.left):Math.max(0,-H.top),l=c>=M?"down":"up";if(E=n0(E,c),M=c,!z)z=!0;if(Y)Y({scrollTop:M,direction:l,velocity:E.velocity});u()}),L=(H)=>{H.preventDefault()},b=(H)=>{if(H.deltaX)return;H.preventDefault(),j.scrollLeft+=H.deltaY},v=(H)=>{if(!G)return;H.preventDefault();let c=(Z?H.deltaX||H.deltaY:H.deltaY)*J,l=M+c;if(K)l=M+c*0.3;if(l=Math.max(0,Math.min(l,O)),l!==M){let o=l>=M?"down":"up";if(E=n0(E,l),M=l,!z)z=!0;if(Y)Y({scrollTop:M,direction:o,velocity:E.velocity});u()}},u=()=>{if(y)clearTimeout(y);y=setTimeout(()=>{if(z=!1,E=n2(M),B)B()},q)},N=(H)=>{if(G)return;if(G=!0,V=H,O=H.virtualHeight-$,W)return;if(_.cancel(),j.removeEventListener("scroll",_),!Q)j.removeEventListener("wheel",L);else if(Z)j.removeEventListener("wheel",b);if(Z)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",v,{passive:!1});let c=Z?j.scrollLeft:j.scrollTop;if(c>0){let l=Z?V?.actualHeight??j.scrollWidth:V?.actualHeight??j.scrollHeight;M=c/l*O}if(Z)j.scrollLeft=0;else j.scrollTop=0},C=()=>{if(!G)return;if(G=!1,W){V=void 0;return}if(j.removeEventListener("wheel",v),Z)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!Q)j.addEventListener("wheel",L,{passive:!1});else if(Z)j.addEventListener("wheel",b,{passive:!1});if(V&&M>0){let c=M/O*(V.actualHeight-$);if(Z)j.scrollLeft=c;else j.scrollTop=c}V=void 0},x=()=>{if(W||G)return M;return Z?j.scrollLeft:j.scrollTop},d=(H,c=!1)=>{let l=Math.max(0,Math.min(H,O||1/0));if(W){let Y0=j.getBoundingClientRect();if(Z){let o=Y0.left+window.scrollX;window.scrollTo({left:o+l,behavior:c?"smooth":"auto"})}else{let o=Y0.top+window.scrollY;window.scrollTo({top:o+l,behavior:c?"smooth":"auto"})}}else if(G){if(l===M)return;let o=l>=M?"down":"up";if(E=n0(E,l),M=l,!z)z=!0;if(Y)Y({scrollTop:M,direction:o,velocity:E.velocity});u()}else if(Z)j.scrollTo({left:l,behavior:c?"smooth":"auto"});else j.scrollTo({top:l,behavior:c?"smooth":"auto"})},R=(H)=>{d(x()+H)},k=()=>{return x()<=0},I=(H=0)=>{let c=x(),l=W||G?O:Z?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return c>=l-H},p=()=>{let H=x(),c=W||G?O:Z?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(c<=0)return 0;return Math.min(1,Math.max(0,H/c))},P=(H)=>{if(H.compression)V=H.compression,O=V.virtualHeight-$},S=()=>G,g=()=>Math.abs(E.velocity),a=()=>uj(E),r=()=>z,n=()=>W,K0=(H)=>{if($=H,V)O=V.virtualHeight-$},X0=()=>{if(y)clearTimeout(y);if(W)D.cancel(),window.removeEventListener("scroll",D);else _.cancel(),j.removeEventListener("scroll",_),j.removeEventListener("wheel",v),j.removeEventListener("wheel",L),j.removeEventListener("wheel",b)};if(W){if(G&&V)O=V.virtualHeight-$;window.addEventListener("scroll",D,{passive:!0})}else if(G&&V){if(O=V.virtualHeight-$,Z)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",v,{passive:!1})}else{if(Z)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!Q)j.addEventListener("wheel",L,{passive:!1});else if(Z)j.addEventListener("wheel",b,{passive:!1})}return{getScrollTop:x,scrollTo:d,scrollBy:R,isAtTop:k,isAtBottom:I,getScrollPercentage:p,getVelocity:g,isTracking:a,isScrolling:r,updateConfig:P,enableCompression:N,disableCompression:C,isCompressed:S,isWindowMode:n,updateContainerHeight:K0,destroy:X0}},o0=(j)=>{let X=null,Q=null,J=(...K)=>{if(Q=K,X===null)X=requestAnimationFrame(()=>{if(X=null,Q)j(...Q)})};return J.cancel=()=>{if(X!==null)cancelAnimationFrame(X),X=null},J};var hj=0.65,xj=0.5,gj=0.95,mj=0.1,dj=5,cj=100,i2=()=>{let j=null,X=0,Q=!1,J=0,K=null,q=0,Y=0,B=null,A=[];return{name:"withScale",priority:20,setup(Z){let{dom:W,config:M}=Z,{classPrefix:O,horizontal:$}=M,G=()=>{let y=Z.getVirtualTotal(),T=V0(y,Z.heightCache);if(T.isCompressed&&!Q){Q=!0,Z.scrollController.enableCompression(T),Z.updateContentSize(T.virtualHeight),Z.setScrollFns(()=>X,(C)=>{if(X=C,J=C,K!==null)cancelAnimationFrame(K),K=null});let _=()=>{let C=J-X;if(Math.abs(C)<xj)X=J,K=null;else X+=C*hj,K=requestAnimationFrame(_);Z.scrollController.scrollTo(X)},U=W.viewport,D=(C)=>{C.preventDefault();let d=Z.getCachedCompression().virtualHeight-Z.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+C.deltaY,d)),K===null)K=requestAnimationFrame(_)};U.addEventListener("wheel",D,{passive:!1});let L=()=>{if(B!==null)cancelAnimationFrame(B),B=null},b=(C)=>{if(L(),K!==null)cancelAnimationFrame(K),K=null;let x=C.touches[0];if(!x)return;let d=$?x.clientX:x.clientY;q=d,Y=X,A=[{time:performance.now(),y:d}]},v=(C)=>{C.preventDefault();let x=C.touches[0];if(!x)return;let d=$?x.clientX:x.clientY,R=performance.now();if(A.push({time:R,y:d}),A.length>dj)A.shift();let k=q-d,p=Z.getCachedCompression().virtualHeight-Z.state.viewportState.containerHeight,P=Math.max(0,Math.min(Y+k,p));X=P,J=P,Z.scrollController.scrollTo(P)},u=(C)=>{let x=performance.now(),d=A.filter((p)=>x-p.time<cj),R=0;if(d.length>=2){let p=d[0],P=d[d.length-1],S=P.time-p.time;if(S>0)R=(p.y-P.y)/S}if(A=[],Math.abs(R)<mj)return;let k=R*16,I=()=>{if(k*=gj,Math.abs(k)<0.5){B=null;return}let P=Z.getCachedCompression().virtualHeight-Z.state.viewportState.containerHeight,S=X+k;if(S=Math.max(0,Math.min(S,P)),S<=0&&k<0||S>=P&&k>0){X=S,J=S,Z.scrollController.scrollTo(S),B=null;return}X=S,J=S,Z.scrollController.scrollTo(S),B=requestAnimationFrame(I)};B=requestAnimationFrame(I)};if(U.addEventListener("touchstart",b,{passive:!0}),U.addEventListener("touchmove",v,{passive:!1}),U.addEventListener("touchend",u,{passive:!0}),U.addEventListener("touchcancel",u,{passive:!0}),Z.destroyHandlers.push(()=>{if(U.removeEventListener("wheel",D),U.removeEventListener("touchstart",b),U.removeEventListener("touchmove",v),U.removeEventListener("touchend",u),U.removeEventListener("touchcancel",u),L(),K!==null)cancelAnimationFrame(K),K=null}),!W.viewport.querySelector(`.${O}-scrollbar-track`)){if(j=R0(W.viewport,(x)=>Z.scrollController.scrollTo(x),{},O,$),!W.viewport.classList.contains(`${O}-viewport--custom-scrollbar`))W.viewport.classList.add(`${O}-viewport--custom-scrollbar`);j.updateBounds(T.virtualHeight,Z.state.viewportState.containerHeight);let C=j;Z.afterScroll.push((x,d)=>{if(C)C.updatePosition(x),C.show()}),Z.resizeHandlers.push((x,d)=>{if(C){let R=Z.getCachedCompression();C.updateBounds(R.virtualHeight,Z.state.viewportState.containerHeight)}})}}else if(!T.isCompressed&&Q)Q=!1,Z.scrollController.disableCompression(),Z.updateContentSize(T.actualHeight);else if(T.isCompressed)Z.scrollController.updateConfig({compression:T}),Z.updateContentSize(T.virtualHeight);if(j)j.updateBounds(T.virtualHeight,Z.state.viewportState.containerHeight);Z.state.cachedCompression={state:T,totalItems:y}};Z.updateCompressionMode=G;let V=Z.getCachedCompression.bind(Z);Z.getCachedCompression=()=>{if(Z.state.cachedCompression)return Z.state.cachedCompression.state;return V()},Z.setVisibleRangeFn((y,T,_,U,D)=>{E=null,z=null;let L=V0(U,_);s0(y,T,_,U,L,D)}),Z.setScrollToPosFn((y,T,_,U,D)=>{let L=V0(U,T);return a0(y,T,_,U,L,D)});let E=null,z=null;Z.setPositionElementFn((y,T)=>{let _=Z.getVirtualTotal(),U=V0(_,Z.heightCache);if(U.isCompressed){let D=Z.scrollController.getScrollTop();if(E===null||T<z)z=T,E=Math.round(T0(T,D,Z.heightCache,_,Z.state.viewportState.containerHeight,U));let L=E+Z.heightCache.getOffset(T)-Z.heightCache.getOffset(z),b=Z.config.horizontal;y.style.transform=b?`translateX(${L}px)`:`translateY(${L}px)`}else{let D=Math.round(Z.heightCache.getOffset(T)),L=Z.config.horizontal;y.style.transform=L?`translateX(${D}px)`:`translateY(${D}px)`}}),G(),Z.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(B!==null)cancelAnimationFrame(B),B=null}}};var i0=(j={})=>{let{chunkSize:X=100,maxCachedItems:Q=5000,evictionBuffer:J=200,onEvict:K}=j,q=new Map,Y=0,B=0,A=(R)=>{let k=q.get(R);if(!k)k={items:Array(X),count:0,lastAccess:Date.now()},q.set(R,k);else k.lastAccess=Date.now();return k},Z=(R)=>{return Math.floor(R/X)},W=(R)=>{return R%X},M=()=>Y,O=(R)=>{Y=R},$=(R)=>{if(R<0||R>=Y)return;let k=Z(R),I=q.get(k);if(!I)return;return I.items[W(R)]},G=(R)=>{if(R<0||R>=Y)return!1;let k=Z(R),I=q.get(k);if(!I)return!1;return I.items[W(R)]!==void 0},V=(R,k)=>{let I=Z(R),p=A(I),P=W(R),S=p.items[P]===void 0;if(p.items[P]=k,S)p.count++,B++;if(R>=Y)Y=R+1},E=(R,k)=>{for(let I=0;I<k.length;I++){let p=k[I];if(p!==void 0)V(R+I,p)}},z=(R)=>{if(R<0||R>=Y)return!1;let k=Z(R),I=q.get(k);if(!I)return!1;let p=W(R);if(I.items[p]===void 0)return!1;if(I.items[p]=void 0,I.count--,B--,I.count===0)q.delete(k);return!0},y=(R,k)=>{let I=[];for(let p=R;p<=k&&p<Y;p++)I.push($(p));return I},T=(R,k)=>{for(let I=R;I<=k&&I<Y;I++)if(!G(I))return!1;return!0},_=()=>{let R=[],k=null,I=Array.from(q.keys()).sort((p,P)=>p-P);for(let p of I){let P=q.get(p);if(!P)continue;let S=p*X;for(let g=0;g<X;g++){let a=S+g;if(a>=Y)break;if(P.items[g]!==void 0)if(k===null)k={start:a,end:a};else if(a===k.end+1)k.end=a;else R.push(k),k={start:a,end:a};else if(k!==null)R.push(k),k=null}}if(k!==null)R.push(k);return R},U=(R,k)=>{let I=[],p=null;for(let P=R;P<=k&&P<Y;P++)if(!G(P))if(p===null)p={start:P,end:P};else p.end=P;else if(p!==null)I.push(p),p=null;if(p!==null)I.push(p);return I},D=(R)=>{return q.has(R)},L=(R)=>{let k=q.get(R);if(k)k.lastAccess=Date.now()},b=(R,k)=>{if(R>k||q.size===0)return;let I=Date.now(),p=Z(Math.max(0,R)),P=Z(Math.min(Y-1,k));for(let S=p;S<=P;S++){let g=q.get(S);if(g)g.lastAccess=I}},v=(R,k)=>{if(B<=Q)return 0;let I=Math.max(0,R-J),p=Math.min(Y-1,k+J),P=Z(I),S=Z(p),g=0,a=[];for(let[r,n]of q)if(r<P||r>S)g+=n.count,a.push(r),B-=n.count,q.delete(r);if(g>0&&K)K(g,a);return g},u=()=>{if(B<=Q)return 0;let R=Array.from(q.entries()).sort(([,p],[,P])=>p.lastAccess-P.lastAccess),k=0,I=[];for(let[p,P]of R){if(B<=Q)break;k+=P.count,B-=P.count,I.push(p),q.delete(p)}if(k>0&&K)K(k,I);return k},N=()=>{return{totalItems:Y,cachedItems:B,cachedChunks:q.size,chunkSize:X,maxCachedItems:Q,memoryEfficiency:Y>0?1-B/Y:1}},C=()=>B,x=()=>{q.clear(),B=0};return{chunkSize:X,maxCachedItems:Q,getTotal:M,setTotal:O,get:$,has:G,set:V,setRange:E,delete:z,getRange:y,isRangeLoaded:T,getLoadedRanges:_,findUnloadedRanges:U,getChunkIndex:Z,isChunkLoaded:D,touchChunk:L,touchChunksForRange:b,evictDistant:v,evictToLimit:u,getStats:N,getCachedCount:C,clear:x,reset:()=>{x(),Y=0}}},t0=(j)=>{if(j.length===0)return[];let X=[...j].sort((J,K)=>J.start-K.start),Q=[{...X[0]}];for(let J=1;J<X.length;J++){let K=X[J],q=Q[Q.length-1];if(K.start<=q.end+1)q.end=Math.max(q.end,K.end);else Q.push({...K})}return Q},p0=(j,X,Q)=>{let J=Math.floor(j.start/Q)*Q,K=Math.ceil((j.end+1)/Q)*Q-1,q={start:J,end:K};if(X.length===0)return[q];let Y=[],B=t0(X),A=q.start;for(let Z of B){if(Z.end<A)continue;if(Z.start>q.end)break;if(Z.start>A)Y.push({start:A,end:Math.min(Z.start-1,q.end)});if(A=Z.end+1,A>q.end)break}if(A<=q.end)Y.push({start:A,end:q.end});return Y};var e0=(j={})=>{let{enabled:X=!0,maskCharacter:Q="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:q}=j,Y=null,B=!1,A=0,Z=(z)=>{if(!X||B||z.length===0)return;let y=new Map,T=new Map,_=Math.min(z.length,K);for(let U=0;U<_;U++){let D=z[U];if(!D||typeof D!=="object")continue;for(let[L,b]of Object.entries(D)){if(L.startsWith("_")||L==="id")continue;if(!T.has(L))T.set(L,{lengths:[],types:new Set});let v=T.get(L),u=Array.isArray(b)?"array":typeof b;if(v.types.add(u),typeof b==="string")v.lengths.push(b.length);else if(b!==null&&b!==void 0)v.lengths.push(String(b).length)}}for(let[U,D]of T){if(D.lengths.length===0)continue;let L=Math.min(...D.lengths),b=Math.max(...D.lengths),v=Math.round(D.lengths.reduce((N,C)=>N+C,0)/D.lengths.length),u="string";if(D.types.has("number")&&D.types.size===1)u="number";else if(D.types.has("boolean")&&D.types.size===1)u="boolean";else if(D.types.has("array"))u="array";else if(D.types.has("object")&&!D.types.has("string"))u="object";y.set(U,{minLength:L,maxLength:b,avgLength:v,type:u})}Y=y,B=!0},W=()=>B,M=(z)=>{let y=z.avgLength;if(J&&z.minLength!==z.maxLength){if(y=Math.floor(Math.random()*(z.maxLength-z.minLength+1)+z.minLength),Math.random()<0.3)y=Math.max(1,y+Math.floor(Math.random()*3)-1)}return Q.repeat(Math.max(1,y))},O=(z)=>{if(q)return{...q(z),["_isPlaceholder"]:!0};let y={id:`__placeholder_${A++}`,["_isPlaceholder"]:!0,_index:z};if(!Y||Y.size===0)return y.label=Q.repeat(12),y;for(let[T,_]of Y)switch(_.type){case"string":y[T]=M(_);break;case"number":y[T]=0;break;case"boolean":y[T]=!1;break;case"array":y[T]=[];break;case"object":y[T]={};break;default:y[T]=M(_)}return y};return{analyzeStructure:Z,hasAnalyzedStructure:W,generate:O,generateRange:(z,y)=>{let T=[];for(let _=z;_<=y;_++)T.push(O(_));return T},isPlaceholder:(z)=>{if(!z||typeof z!=="object")return!1;return z._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{Y=null,B=!1,A=0}}},P0=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},W2=(j)=>{return j.filter((X)=>!P0(X))};var sj=50,j2=(j={})=>{let{adapter:X,initialItems:Q,initialTotal:J,storage:K,placeholder:q,pageSize:Y=sj,onStateChange:B,onItemsLoaded:A,onItemsEvicted:Z}=j,W=i0({...K,onEvict:(w,h)=>{Z?.(w),U()}}),M=null,O=()=>{if(!M)M=e0(q);return M},$=new Map,G=!1,V,E=!0,z,y=[],T=0,_=new Map,U=()=>{B?.(d())},D=()=>{$.clear();let w=W.getLoadedRanges();for(let h of w)for(let t=h.start;t<=h.end;t++){let j0=W.get(t);if(j0&&!P0(j0))$.set(j0.id,t)}},L=(w,h)=>{if(!P0(h))$.set(h.id,w)},b=(w)=>{$.delete(w)},v=(w,h)=>{return`${w}-${h}`},u=()=>W.getTotal(),N=()=>W.getCachedCount(),C=()=>G,x=()=>E,d=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:G,pendingRanges:y,error:V,hasMore:E,cursor:z}),R=()=>W,k=()=>O(),I=(w)=>{let h=W.get(w);if(h!==void 0)return h;if(w>=0&&w<W.getTotal())return O().generate(w);return},p=(w)=>{let h=$.get(w);if(h===void 0)return;return W.get(h)},P=(w)=>{return $.get(w)??-1},S=(w)=>{let h=W.get(w);return h!==void 0&&!P0(h)},g=(w,h)=>{let t=[],j0=W.getTotal(),Z0=0,B0=0;W.touchChunksForRange(w,Math.min(h,j0-1));for(let _0=w;_0<=h&&_0<j0;_0++){let Q0=W.get(_0);if(Q0!==void 0)t.push(Q0),Z0++;else t.push(O().generate(_0)),B0++}return t},a=(w)=>{W.setTotal(w),E=W.getCachedCount()<w,U()},r=(w,h=0,t)=>{if(M&&!M.hasAnalyzedStructure()&&w.length>0)M.analyzeStructure(w);for(let j0=0;j0<w.length;j0++){let Z0=w[j0];if(Z0!==void 0){let B0=h+j0;W.set(B0,Z0),L(B0,Z0)}}if(t!==void 0)W.setTotal(t);else if(h+w.length>W.getTotal())W.setTotal(h+w.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)E=!1;A?.(w,h,W.getTotal()),U()},n=(w,h)=>{let t=$.get(w);if(t===void 0)return!1;let j0=W.get(t);if(!j0)return!1;let Z0={...j0,...h};if(W.set(t,Z0),h.id!==void 0&&h.id!==w)b(w),L(t,Z0);return U(),!0},K0=(w)=>{let h=$.get(w);if(h===void 0)return!1;W.delete(h),b(w);let t=W.getTotal();if(t>0)W.setTotal(t-1);return U(),!0},X0=async(w,h)=>{if(!X)return;let t=v(w,h);if(_.has(t))return;let j0=W.getLoadedRanges(),Z0=p0({start:w,end:h},j0,W.chunkSize);if(Z0.length===0)return;let B0=W.chunkSize,_0=[];for(let U0 of Z0){let O0=Math.floor(U0.start/B0),z0=Math.floor(U0.end/B0);for(let D0=O0;D0<=z0;D0++){let M0=D0*B0,W0=M0+B0-1,E0=v(M0,W0);if(!_0.some((F0)=>F0.start===M0)&&!_.has(E0))_0.push({start:M0,end:W0})}}let Q0=[];for(let U0 of Z0){let O0=Math.floor(U0.start/B0),z0=Math.floor(U0.end/B0);for(let D0=O0;D0<=z0;D0++){let M0=D0*B0,W0=M0+B0-1,E0=v(M0,W0);if(_.has(E0)){let F0=_.get(E0);if(!Q0.includes(F0))Q0.push(F0)}}}for(let U0 of _0){let O0=v(U0.start,U0.end),z0=(async()=>{y.push(U0),G=!0,V=void 0,U();try{let D0=U0.end-U0.start+1,M0={offset:U0.start,limit:D0,cursor:void 0},W0=await X.read(M0);if(r(W0.items,U0.start,W0.total),W0.cursor)z=W0.cursor;let E0=U0.start+W0.items.length;if(E0>=T){if(T=E0,W0.hasMore!==void 0)E=W0.hasMore;else if(W0.total!==void 0)E=E0<W0.total}}catch(D0){V=D0 instanceof Error?D0:Error(String(D0))}finally{_.delete(O0),y=y.filter((D0)=>D0.start!==U0.start||D0.end!==U0.end),G=_.size>0,U()}})();_.set(O0,z0),Q0.push(z0)}await Promise.all(Q0)},H=async(w,h)=>{if(W.isRangeLoaded(w,h))return;await X0(w,h)},c=async()=>{if(!X)return;await X0(0,Y-1)},l=async()=>{if(!X||G||!E)return!1;let w=W.getCachedCount(),h=W.getTotal(),t=w,j0=Math.min(t+Y-1,h>0?h-1:t+Y-1);if(t>=h&&h>0)return E=!1,!1;return await X0(t,j0),W.getCachedCount()>w},Y0=async()=>{if(W.clear(),$.clear(),M)M.clear();_.clear(),y=[],G=!1,z=void 0,E=!0,T=0,V=void 0,U()},o=(w,h)=>{if(W.evictDistant(w,h)>0)D()},J0=()=>{W.clear(),$.clear(),z=void 0,V=void 0,y=[],G=!1,U()},G0=()=>{if(W.reset(),$.clear(),M)M.clear();z=void 0,E=!0,T=0,V=void 0,y=[],G=!1,U()};if(Q&&Q.length>0)r(Q,0,J??Q.length);else if(J!==void 0)W.setTotal(J);return{getState:d,getTotal:u,getCached:N,getIsLoading:C,getHasMore:x,getStorage:R,getPlaceholders:k,getItem:I,getItemById:p,getIndexById:P,isItemLoaded:S,getItemsInRange:g,setTotal:a,setItems:r,updateItem:n,removeItem:K0,loadRange:X0,ensureRange:H,loadInitial:c,loadMore:l,reload:Y0,evictDistant:o,clear:J0,reset:G0}};var t2=(j)=>{let{adapter:X,loading:Q}=j,J=Q?.cancelThreshold??x2,K=Q?.preloadThreshold??g2,q=Q?.preloadAhead??m2;return{name:"withAsync",priority:20,methods:["reload"],setup(Y){let{emitter:B}=Y,A=Y.config.reverse,Z=j2({adapter:X,pageSize:I0,onStateChange:()=>{if(Y.state.isInitialized){Y.heightCache.rebuild(Y.getVirtualTotal()),Y.updateCompressionMode();let E=Y.getCachedCompression();Y.state.viewportState.totalHeight=E.virtualHeight,Y.state.viewportState.actualHeight=E.actualHeight,Y.state.viewportState.isCompressed=E.isCompressed,Y.state.viewportState.compressionRatio=E.ratio,Y.updateContentSize(E.virtualHeight),Y.renderIfNeeded()}},onItemsLoaded:(E,z,y)=>{if(Y.state.isInitialized)Y.heightCache.rebuild(Y.getVirtualTotal()),Y.forceRender(),B.emit("load:end",{items:E,total:y})}});Y.replaceDataManager(Z);let W=null,M=null,O=0,$=()=>{if(M){let E=M;M=null,Y.dataManager.ensureRange(E.start,E.end).catch((z)=>{B.emit("error",{error:z,context:"ensureRange"})})}};Y.afterScroll.push((E,z)=>{if(Y.state.isDestroyed)return;let y=Y.scrollController.getVelocity(),_=Y.scrollController.isTracking()&&y<=J;if(M&&O>J&&y<=J){let L=M;M=null,Y.dataManager.ensureRange(L.start,L.end).catch((b)=>{B.emit("error",{error:b,context:"ensureRange"})})}if(O=y,_&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(A){if(E<D2)B.emit("load:start",{offset:Y.dataManager.getCached(),limit:I0}),Y.dataManager.loadMore().catch((L)=>{B.emit("error",{error:L,context:"loadMore"})})}else if(Y.state.viewportState.totalHeight-E-Y.state.viewportState.containerHeight<D2)B.emit("load:start",{offset:Y.dataManager.getCached(),limit:I0}),Y.dataManager.loadMore().catch((b)=>{B.emit("error",{error:b,context:"loadMore"})})}let{renderRange:U}=Y.state.viewportState;if(!W||U.start!==W.start||U.end!==W.end)if(W={start:U.start,end:U.end},_){M=null;let{start:L,end:b}=U,v=Y.getVirtualTotal();if(y>K)if(z==="down")b=Math.min(U.end+q,v-1);else L=Math.max(U.start-q,0);Y.dataManager.ensureRange(L,b).catch((u)=>{B.emit("error",{error:u,context:"ensureRange"})})}else M={start:U.start,end:U.end}});let G=200,V=null;Y.afterScroll.push((E,z)=>{if(V!==null)clearTimeout(V);V=setTimeout(()=>{V=null,$()},G)}),Y.destroyHandlers.push(()=>{if(V!==null)clearTimeout(V),V=null}),B.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),B.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("reload",async()=>{W=null,M=null,Y.invalidateRendered(),await Y.dataManager.reload(),Y.forceRender();let{renderRange:E}=Y.state.viewportState;if(E.end>0)await Y.dataManager.ensureRange(E.start,E.end)}),B.emit("load:start",{offset:0,limit:I0}),Y.dataManager.loadInitial().catch((E)=>{B.emit("error",{error:E,context:"loadInitial"})})}}};var e2=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:Q,state:J,config:K,emitter:q}=X;Q.root.style.overflow="visible",Q.root.style.height="auto",Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let Z=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Z.left);else return Math.max(0,-Z.top)},(Z)=>{let W=Q.viewport.getBoundingClientRect();if(K.horizontal){let M=W.left+window.scrollX;window.scrollTo(M+Z,window.scrollY)}else{let M=W.top+window.scrollY;window.scrollTo(window.scrollX,M+Z)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:Y,innerWidth:B}=window,A=()=>{let{innerWidth:Z,innerHeight:W}=window,M=K.horizontal?Z:W,O=K.horizontal?B:Y;if(Math.abs(M-O)<=1)return;Y=W,B=Z,J.viewportState.containerHeight=W,q.emit("resize",{width:Z,height:W});for(let $=0;$<X.resizeHandlers.length;$++)X.resizeHandlers[$](Z,W);X.renderIfNeeded()};window.addEventListener("resize",A,{passive:!0}),j=()=>{window.removeEventListener("resize",A)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var G2=(j,X)=>{let Q=0,J=j.length-1;while(Q<J){let K=Q+J+1>>>1;if(j[K].headerLayoutIndex<=X)Q=K;else J=K-1}return Q},jj=(j,X)=>{let Q=0,J=j.length-1;while(Q<J){let K=Q+J+1>>>1;if(j[K].firstDataIndex<=X)Q=K;else J=K-1}return Q},Jj=(j,X)=>{if(j===0)return[];let Q=[],J=X(0),K=0,q=0;for(let Y=1;Y<j;Y++){let B=X(Y);if(B!==J){let A=Y-K;Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:A}),q=q+1+A,J=B,K=Y}}return Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:j-K}),Q},u0=(j,X)=>{if(j.length===0||X.length===0)return[];let Q=j.length+X.length,J=Array(Q),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 Y=0;Y<q.count;Y++)J[K]=j[q.firstDataIndex+Y],K++}return J},h0=(j,X)=>{let Q=typeof X==="number"?(J)=>X:X;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},J2=(j,X)=>{let Q=Jj(j,X.getGroupForIndex),J=j+Q.length,K=X.headerHeight;return{get totalEntries(){return J},get groupCount(){return Q.length},get groups(){return Q},getEntry:(O)=>{if(Q.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let $=G2(Q,O),G=Q[$];if(O===G.headerLayoutIndex)return{type:"header",group:G};let V=O-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+V,group:G}},layoutToDataIndex:(O)=>{if(Q.length===0)return O;let $=G2(Q,O),G=Q[$];if(O===G.headerLayoutIndex)return-1;let V=O-G.headerLayoutIndex-1;return G.firstDataIndex+V},dataToLayoutIndex:(O)=>{if(Q.length===0)return O;let $=jj(Q,O),G=Q[$],V=O-G.firstDataIndex;return G.headerLayoutIndex+1+V},getGroupAtLayoutIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let $=G2(Q,O);return Q[$]},getGroupAtDataIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let $=jj(Q,O);return Q[$]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let $=Q[O];if(!$)return 0;return K($.key,O)},rebuild:(O)=>{Q=Jj(O,X.getGroupForIndex),J=O+Q.length}}};var Q2=(j,X,Q,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 Y=-1,B=!1,A=0,Z=(V)=>{if(V===Y)return;Y=V;let E=X.groups;if(V<0||V>=E.length){q.textContent="";return}let z=E[V],y=J.headerTemplate(z.key,z.groupIndex),T=X.getHeaderHeight(V);if(q.style.height=`${T}px`,typeof y==="string")q.innerHTML=y;else q.replaceChildren(y)},W=(V)=>{let E=X.groups;if(E.length===0){O();return}let z=0;for(let D=E.length-1;D>=0;D--)if(Q.getOffset(E[D].headerLayoutIndex)<=V){z=D;break}let y=Q.getOffset(E[0].headerLayoutIndex);if(V<y){O();return}if(!B)M();Z(z);let T=X.getHeaderHeight(z),_=0,U=z+1;if(U<E.length){let L=Q.getOffset(E[U].headerLayoutIndex)-V;if(L<T)_=L-T}if(_!==A)A=_,q.style.transform=_===0?"":`translateY(${Math.round(_)}px)`},M=()=>{if(B)return;B=!0,q.style.display=""},O=()=>{if(!B)return;B=!1,q.style.display="none",Y=-1,A=0,q.style.transform=""},$=()=>{let V=Y;if(Y=-1,V>=0)Z(V)},G=()=>{q.remove(),Y=-1,B=!1};return q.style.display="none",{update:W,refresh:$,show:M,hide:O,destroy:G}};var Qj=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;let Y=Q.indexAtOffset(j),B=Q.indexAtOffset(j+X);if(B<J-1)B++;return q.start=Math.max(0,Y),q.end=Math.min(J-1,Math.max(0,B)),q},Xj=(j,X,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X),J},qj=(j,X,Q,J,K,q)=>{if(J===0)return 0;let Y=Math.max(0,Math.min(j,J-1)),B=X.getOffset(Y),A=X.getHeight(Y),Z=X.getTotalHeight(),W=Math.max(0,Z-Q),M;switch(q){case"center":M=B-Q/2+A/2;break;case"end":M=B-Q+A;break;case"start":default:M=B;break}return Math.max(0,Math.min(M,W))},Kj=(j,X,Q)=>{if(Q&&Q.isCompressed)return Q.virtualHeight;return X.getTotalHeight()},Yj=(j,X)=>{return X.getTotalHeight()},Zj=(j,X)=>{return X.getOffset(j)},Bj=(j,X,Q)=>{let J=Math.max(0,X-Q);return Math.max(0,Math.min(j,J))};var $0=(j,X,Q,J,K="start",q,Y=qj)=>{return Y(j,X,Q,J,q,K)},Uj=(j,X)=>{return j.start===X.start&&j.end===X.end},Nj=(j,X)=>{return j>=X.start&&j<=X.end},Dj=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var Wj=(j,X)=>{let Q=[],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)Q.push(K);return{add:Q,remove:J}};r0();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 X=null,Q=null,J=[],K=[];return{name:"withSections",priority:10,setup(q){let{dom:Y,config:B,rawConfig:A}=q,{classPrefix:Z}=B;if(B.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let M=A.item.height;J=A.items?[...A.items]:[];let O=J.length,$={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=J2(O,$),K=u0(J,X.groups);let G=h0(X,M);q.setHeightConfig(G),q.rebuildHeightCache(K.length),q.dataManager.setItems(K,0,K.length);let V=A.item.template,{headerTemplate:E}=j,z=(b,v,u)=>{if(y0(b))return E(b.groupKey,b.groupIndex);return V(b,v,u)},y=q.methods.get("_getGridLayout"),T=q.methods.get("_replaceGridRenderer"),_=q.methods.get("_updateGridLayoutForGroups");if(y&&T){if(_)_((N)=>{let C=K[N];return!!(C&&y0(C))});let{createGridRenderer:b}=(X2(),kj(Gj)),v=y(),u=b(Y.items,z,q.heightCache,v,Z,q.getContainerWidth(),()=>q.dataManager.getTotal(),B.ariaIdPrefix);T(u)}else q.replaceTemplate(z);if(Y.root.classList.add(`${Z}--grouped`),j.sticky!==!1){Q=Q2(Y.root,X,q.heightCache,{...$,sticky:$.sticky??!1},Z);let b=Q;q.afterScroll.push((v,u)=>{b.update(v)}),Q.update(q.scrollController.getScrollTop())}let U=()=>{if(!X)return;X.rebuild(J.length),K=u0(J,X.groups);let b=h0(X,M);if(q.setHeightConfig(b),q.rebuildHeightCache(K.length),q.dataManager.setItems(K,0,K.length),Q)Q.refresh()};q.methods.set("setItems",(b)=>{J=[...b],U()}),q.methods.set("appendItems",(b)=>{J=[...J,...b],U()}),q.methods.set("prependItems",(b)=>{J=[...b,...J],U()}),q.methods.set("removeItem",(b)=>{J=J.filter((v)=>v.id!==b),U()});let{animateScroll:D,cancelScroll:L}=nj(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(b,v)=>{let u=X.dataToLayoutIndex(b),{align:N,behavior:C,duration:x}=oj(v),d=q.dataManager.getTotal(),R=$0(u,q.heightCache,q.state.viewportState.containerHeight,d,N,q.getCachedCompression());if(C==="smooth")D(q.scrollController.getScrollTop(),R,x);else L(),q.scrollController.scrollTo(R)}),q.methods.set("_getItems",()=>J),q.methods.set("_getTotal",()=>J.length),q.destroyHandlers.push(()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null;if(Q)Q.destroy(),Q=null;Y.root.classList.remove(`${Z}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}},_2=300,rj=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,L0=null,nj=(j,X)=>{let Q=()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null};return{animateScroll:(K,q,Y)=>{if(Q(),Math.abs(q-K)<1){j.scrollTo(q);return}let B=performance.now(),A=(Z)=>{let W=Z-B,M=Math.min(W/Y,1),O=K+(q-K)*rj(M);if(j.scrollTo(O),X(),M<1)L0=requestAnimationFrame(A);else L0=null};L0=requestAnimationFrame(A)},cancelScroll:Q}},oj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:_2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??_2};return{align:"start",behavior:"auto",duration:_2}};var q2=(j)=>{let X=Math.max(1,Math.floor(j.columns)),Q=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},q=(G)=>{if(G<=0)return 0;if(!J)return Math.ceil(G/X);let V=0,E=0,z=0;for(let y=0;y<G;y++)if(J(y)){if(z++,E>0)V++,E=0;V++,E=0}else if(E++,E>=X)V++,E=0;if(E>0)V++;return V},Y=(G)=>{return K.row=B(G),K.col=A(G),K},B=(G)=>{if(!J)return Math.floor(G/X);let V=0,E=0;for(let z=0;z<=G;z++)if(J(z)){if(E>0)V++,E=0;if(z===G)return V;V++,E=0}else{if(z===G)return V;if(E++,E>=X)V++,E=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${V}`),V},A=(G)=>{if(!J)return G%X;if(J(G))return 0;let V=0;for(let E=0;E<=G;E++)if(J(E))V=0;else{if(E===G)return V;if(V++,V>=X)V=0}return V},Z=(G,V,E)=>{if(E<=0)return{start:0,end:-1};if(!J){let U=Math.max(0,G*X),D=Math.min(E-1,(V+1)*X-1);return{start:U,end:D}}let z=-1,y=-1,T=0,_=0;for(let U=0;U<E;U++){if(J(U)){if(_>0)T++,_=0;if(T>=G&&T<=V){if(z===-1)z=U;y=U}T++,_=0}else{if(T>=G&&T<=V){if(z===-1)z=U;y=U}if(_++,_>=X)T++,_=0}if(T>V&&_===0)break}if(z===-1)return{start:0,end:-1};return{start:z,end:y}},W=(G,V,E)=>{if(V<0||V>=X)return-1;let z=G*X+V;if(z<0||z>=E)return-1;return z},M=(G)=>{let V=(X-1)*Q;return Math.max(0,(G-V)/X)};return{get columns(){return X},get gap(){return Q},update:(G)=>{if(G.columns!==void 0)X=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)Q=G.gap;if(G.isHeaderFn!==void 0)J=G.isHeaderFn},getTotalRows:q,getPosition:Y,getRow:B,getCol:A,getItemRange:Z,getItemIndex:W,getColumnWidth:M,getColumnOffset:(G,V)=>{let E=M(V);return G*(E+Q)}}};X2();var Vj=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,Q=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:q,config:Y,rawConfig:B}=J,{classPrefix:A}=Y;if(Y.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(Y.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Z=B.items?.some((_)=>_.__groupHeader===!0),W={columns:j.columns,gap:j.gap??0};if(Z)W.isHeaderFn=(_)=>{let U=J.dataManager.getItem(_);return!!(U&&U.__groupHeader===!0)};X=q2(W);let M=X.gap;J.setVirtualTotalFn(()=>{let _=J.dataManager.getTotal();return X.getTotalRows(_)});let O=B.item,$=Y.horizontal?O.width:O.height,G={containerWidth:J.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof $==="function")J.setHeightConfig((_)=>{let U=G.containerWidth-2,D=(G.columns-1)*G.gap,L=(U-D)/G.columns,b={containerWidth:G.containerWidth,columns:G.columns,gap:G.gap,columnWidth:L,row:X.getRow(_),column:X.getCol(_),totalRows:X.getTotalRows(J.dataManager.getTotal()),totalColumns:G.columns};return $(_,b)+G.gap});else if(M>0)J.setHeightConfig($+M);J.rebuildHeightCache(),K.root.classList.add(`${A}--grid`);let V=J.getContainerWidth(),E=B.item.template,z=()=>{Q=x0(K.items,E,J.heightCache,X,A,V,()=>J.dataManager.getTotal(),Y.ariaIdPrefix),J.replaceRenderer(Q)};z(),J.methods.set("_getGridLayout",()=>X),J.methods.set("_getGridConfig",()=>W),J.methods.set("_replaceGridRenderer",(_)=>{Q=_}),J.methods.set("_updateGridLayoutForGroups",(_)=>{X.update({isHeaderFn:_});let U=J.dataManager.getTotal(),D=0;for(let L=0;L<U;L++)if(X.getCol(L)===0){let b=J.heightCache.getHeight(L);D+=b}J.heightCache.getTotalHeight=()=>D,J.dom.content.style.height=`${D}px`,z()}),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");W.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");W.gap=_.gap}if(X)X.update(W);let U=J.getContainerWidth();if(G.containerWidth=U,G.columns=W.columns,G.gap=W.gap??0,Q)Q.updateContainerWidth(U);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let D=0;D<J.contentSizeHandlers.length;D++)J.contentSizeHandlers[D]();if(Q)Q.clear();J.forceRender()});let y=()=>{if(J.state.isDestroyed)return;let _=J.scrollController.getScrollTop(),U=J.state.viewportState.containerHeight,D=J.getVirtualTotal(),L={start:0,end:0};if(D===0||U===0)L.start=0,L.end=0;else{L.start=Math.max(0,J.heightCache.indexAtOffset(_));let k=J.heightCache.indexAtOffset(_+U);if(k<D-1)k++;L.end=Math.min(D-1,Math.max(0,k))}let b=Y.overscan??3,v={start:Math.max(0,L.start-b),end:Math.min(D-1,L.end+b)};J.state.viewportState.scrollTop=_,J.state.viewportState.visibleRange=L,J.state.viewportState.renderRange=v;let u=J.state.lastRenderRange,N=J.state.viewportState.isCompressed;if(v.start===u.start&&v.end===u.end){if(N)Q.updatePositions(J.getCompressionContext());return}let C=J.dataManager.getTotal(),x=X.getItemRange(v.start,v.end,C),d=J.dataManager.getItemsInRange(x.start,x.end),R=N?J.getCompressionContext():void 0;Q.render(d,x,new Set,-1,R),J.state.lastRenderRange={...v},q.emit("range:change",{range:v})},T=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},y()};if(J.setRenderFns(y,T),J.resizeHandlers.push((_,U)=>{if(Q)Q.updateContainerWidth(_)}),J.methods.set("scrollToIndex",(_,U)=>{let D=Math.floor(_/j.columns),{align:L,behavior:b}=ij(U),v=J.dataManager.getState(),u=X.getTotalRows(v.total),N=Math.max(0,Math.min(D,u-1)),C=$0(N,J.heightCache,J.state.viewportState.containerHeight,u,L,J.getCachedCompression());if(b==="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(Q)Q.destroy(),Q=null;K.root.classList.remove(`${A}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}},V2=300,ij=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:V2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??V2};return{align:"start",behavior:"auto",duration:V2}};X2();var K2=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),g0=(j,X,Q)=>{if(Q==="none")return j;let J=new Set(j.selected);if(Q==="single"){if(J.clear(),X.length>0)J.add(X[0])}else for(let K of X)J.add(K);return{...j,selected:J}},m0=(j,X)=>{let Q=new Set(j.selected);for(let J of X)Q.delete(J);return{...j,selected:Q}},k0=(j,X,Q)=>{if(Q==="none")return j;if(j.selected.has(X))return m0(j,[X]);else return g0(j,[X],Q)},Y2=(j,X,Q)=>{if(Q!=="multiple")return j;return{...j,selected:new Set(X.map((J)=>J.id))}},Z2=(j)=>({...j,selected:new Set}),M2=(j,X)=>{return j.focusedIndex=X,j},A2=(j,X,Q=!0)=>{if(X===0)return j;let J=j.focusedIndex-1;if(J<0)J=Q?X-1:0;return j.focusedIndex=J,j},E2=(j,X,Q=!0)=>{if(X===0)return j;let J=j.focusedIndex+1;if(J>=X)J=Q?0:X-1;return j.focusedIndex=J,j},F2=(j,X)=>{if(X===0)return j;return j.focusedIndex=0,j},L2=(j,X)=>{if(X===0)return j;return j.focusedIndex=X-1,j};var Mj=(j,X)=>{return j.selected.has(X)},C0=(j)=>{return Array.from(j.selected)},S0=(j,X)=>{let Q=[];for(let J of j.selected){let K=X(J);if(K)Q.push(K)}return Q};var Aj=(j)=>{let X=j?.mode??"single",Q=j?.initial,J=K2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:Y,emitter:B,config:A}=q,{classPrefix:Z,ariaIdPrefix:W}=A;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 M=new Map,O=()=>{M.clear();let _=q.dataManager.getTotal();for(let U=0;U<_;U++){let D=q.dataManager.getItem(U);if(D)M.set(D.id,U)}};O();let{renderIfNeeded:$,forceRender:G}=q.getRenderFns(),V=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((U)=>{let D=U,L=D.dataset.id;if(L!==void 0){let b=/^\d+$/.test(L)?parseInt(L,10):L,v=J.selected.has(b),N=parseInt(D.dataset.index??"-1",10)===J.focusedIndex;D.classList.toggle(`${Z}-item--selected`,v),D.classList.toggle(`${Z}-item--focused`,N),D.ariaSelected=v?"true":"false"}})},E=()=>{if(q.state.isDestroyed)return;$(),V()},z=()=>{if(q.state.isDestroyed)return;G(),V()};q.setRenderFns(E,z);let y=()=>{V();let _=(U)=>{let D=M.get(U);if(D===void 0)return;return q.dataManager.getItem(D)};B.emit("selection:change",{selected:C0(J),items:S0(J,_)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Z}-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",Y.root.appendChild(K);let T=K;B.on("selection:change",({selected:_})=>{let U=_.length;if(U===0)T.textContent="";else if(U===1)T.textContent="1 item selected";else T.textContent=`${U} items selected`}),q.clickHandlers.push((_)=>{if(q.state.isDestroyed)return;let D=_.target.closest("[data-index]");if(!D)return;let L=parseInt(D.dataset.index??"-1",10);if(L<0)return;let b=q.dataManager.getItem(L);if(!b)return;B.emit("item:click",{item:b,index:L,event:_}),J=M2(J,L),Y.root.setAttribute("aria-activedescendant",`${W}-item-${L}`),J=k0(J,b.id,X),y()}),q.keydownHandlers.push((_)=>{if(q.state.isDestroyed)return;let U=q.dataManager.getTotal(),D=J.focusedIndex,L=!1,b=!1,v=J;switch(_.key){case"ArrowUp":v=A2(J,U),L=!0,b=!0;break;case"ArrowDown":v=E2(J,U),L=!0,b=!0;break;case"Home":v=F2(J,U),L=!0,b=!0;break;case"End":v=L2(J,U),L=!0,b=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let u=q.dataManager.getItem(J.focusedIndex);if(u)v=k0(J,u.id,X);L=!0}break}if(L){_.preventDefault(),J=v;let u=J.focusedIndex;if(u>=0){let N=q.dataManager.getState(),C=$0(u,q.heightCache,q.state.viewportState.containerHeight,N.total,"center",q.getCachedCompression());q.scrollController.scrollTo(C),Y.root.setAttribute("aria-activedescendant",`${W}-item-${u}`)}else Y.root.removeAttribute("aria-activedescendant");if(b){let{selected:N}=J;if(D>=0&&D!==u){let C=q.dataManager.getItem(D);if(C)q.renderer.updateItemClasses(D,N.has(C.id),!1)}if(u>=0){let C=q.dataManager.getItem(u);if(C)q.renderer.updateItemClasses(u,N.has(C.id),!0)}}else{z();let N=(C)=>{let x=M.get(C);if(x===void 0)return;return q.dataManager.getItem(x)};B.emit("selection:change",{selected:C0(J),items:S0(J,N)})}}}),q.methods.set("select",(..._)=>{J=g0(J,_,X),y()}),q.methods.set("deselect",(..._)=>{J=m0(J,_),y()}),q.methods.set("toggleSelect",(_)=>{J=k0(J,_,X),y()}),q.methods.set("selectAll",()=>{if(X!=="multiple")return;let _=q.getAllLoadedItems();J=Y2(J,_,X),O(),y()}),q.methods.set("clearSelection",()=>{J=Z2(J);let{renderRange:_,isCompressed:U}=q.state.viewportState,D=q.getItemsForRange(_),L=U?q.getCompressionContext():void 0;q.renderer.render(D,_,J.selected,J.focusedIndex,L),B.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return C0(J)}),q.methods.set("getSelectedItems",()=>{return S0(J,(U)=>{let D=M.get(U);if(D===void 0)return;return q.dataManager.getItem(D)})}),q.destroyHandlers.push(()=>{if(T&&T.parentNode)T.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var Ej=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let X=j.scrollController.getScrollTop(),Q=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),q=K&&K().length>0?K():void 0;if(J===0){let Z={index:0,offsetInItem:0};if(q)Z.selectedIds=q;return Z}let Y,B;if(Q.isCompressed){let W=X/Q.virtualHeight*J;Y=Math.max(0,Math.min(Math.floor(W),J-1)),B=(W-Y)*j.heightCache.getHeight(Y)}else Y=j.heightCache.indexAtOffset(X),B=X-j.heightCache.getOffset(Y);B=Math.max(0,B);let A={index:Y,offsetInItem:B};if(q)A.selectedIds=q;return A}),j.methods.set("restoreScroll",(X)=>{let{index:Q,offsetInItem:J,selectedIds:K}=X,q=j.getCachedCompression(),Y=j.getVirtualTotal();if(Y===0)return;let B=Math.max(0,Math.min(Q,Y-1)),A;if(q.isCompressed){let W=j.heightCache.getHeight(B),M=W>0?J/W:0;A=(B+M)/Y*q.virtualHeight}else A=j.heightCache.getOffset(B)+J;let Z=Math.max(0,q.virtualHeight-j.state.viewportState.containerHeight);if(A=Math.max(0,Math.min(A,Z)),j.scrollController.scrollTo(A),K&&K.length>0){let W=j.methods.get("select");if(W)W(...K)}})}}};export{Ej as withSnapshots,Aj as withSelection,_j as withSections,r2 as withScrollbar,i2 as withScale,e2 as withPage,Vj as withGrid,t2 as withAsync,h2 as vlist,k0 as toggleSelection,Qj as simpleVisibleRange,g0 as selectItems,Y2 as selectAll,Uj as rangesEqual,o0 as rafThrottle,l2 as needsScaling,t0 as mergeRanges,Mj as isSelected,y0 as isSectionHeader,P0 as isPlaceholderItem,Nj as isInRange,S0 as getSelectedItems,C0 as getSelectedIds,V0 as getScaleState,a2 as getScaleInfo,V0 as getScale,Dj as getRangeCount,s2 as getMaxItemsWithoutScaling,W2 as filterPlaceholders,Wj as diffRanges,m0 as deselectItems,Q2 as createStickyHeader,i0 as createSparseStorage,K2 as createSelectionState,h0 as createSectionedHeightFn,J2 as createSectionLayout,R0 as createScrollbar,o2 as createScrollController,e0 as createPlaceholderManager,H0 as createHeightCache,x0 as createGridRenderer,q2 as createGridLayout,l0 as createEmitter,j2 as createAsyncManager,Z2 as clearSelection,Bj as clampScrollPosition,Kj as calculateTotalHeight,$0 as calculateScrollToIndex,s0 as calculateScaledVisibleRange,a0 as calculateScaledScrollToIndex,d2 as calculateScaledRenderRange,T0 as calculateScaledItemPosition,Xj as calculateRenderRange,p0 as calculateMissingRanges,Zj as calculateItemOffset,c2 as calculateIndexFromScrollPosition,Yj as calculateActualHeight,u0 as buildLayoutItems,b0 as MAX_VIRTUAL_HEIGHT};
|
|
1
|
+
var{defineProperty:B2,getOwnPropertyNames:$j,getOwnPropertyDescriptor:Rj}=Object,kj=Object.prototype.hasOwnProperty;var y2=new WeakMap,Cj=(j)=>{var X=y2.get(j),Q;if(X)return X;if(X=B2({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")$j(j).map((J)=>!kj.call(X,J)&&B2(X,J,{get:()=>j[J],enumerable:!(Q=Rj(j,J))||Q.enumerable}));return y2.set(j,X),X};var zj=(j,X)=>{for(var Q in X)B2(j,Q,{get:X[Q],enumerable:!0,configurable:!0,set:(J)=>X[Q]=()=>J})};var H2=(j,X)=>()=>(j&&(X=j(j=0)),X);var vj=(j,X)=>{let Q=X;return{getOffset:(J)=>J*j,getSize:(J)=>j,indexAtOffset:(J)=>{if(Q===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),Q-1))},getTotalSize:()=>Q*j,getTotal:()=>Q,rebuild:(J)=>{Q=J},isVariable:()=>!1}},wj=(j,X)=>{let Q=X,J=new Float64Array(0),K=(Y)=>{Q=Y,J=new Float64Array(Y+1),J[0]=0;for(let B=0;B<Y;B++)J[B+1]=J[B]+j(B)};K(X);let q=(Y)=>{if(Q===0)return 0;if(Y<=0)return 0;if(Y>=J[Q])return Q-1;let B=0,V=Q-1;while(B<V){let Z=B+V+1>>>1;if(J[Z]<=Y)B=Z;else V=Z-1}return B};return{getOffset:(Y)=>{if(Y<=0)return 0;if(Y>=Q)return J[Q];return J[Y]},getSize:(Y)=>j(Y),indexAtOffset:(Y)=>q(Y),getTotalSize:()=>J[Q]??0,getTotal:()=>Q,rebuild:(Y)=>K(Y),isVariable:()=>!0}},$0=(j,X)=>{if(typeof j==="number")return vj(j,X);return wj(j,X)},f0=(j,X,Q,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil(Q/j.getSize(0));let K=0,q=0,Y=X;while(Y<J&&q<Q)q+=j.getSize(Y),K++,Y++;return Math.max(1,K)},c0=(j,X,Q)=>{if(Q===0)return 0;if(!j.isVariable())return Math.floor(X/j.getSize(0));let J=0,K=0;for(let q=Q-1;q>=0;q--){let Y=j.getSize(q);if(K+Y>X)break;K+=Y,J++}return Math.max(J,1)},N2=(j,X,Q)=>{if(Q===0)return 0;let J=Math.floor(X),K=X-J,q=Math.max(0,Math.min(J,Q-1));return j.getOffset(q)+K*j.getSize(q)};var D2=200,I0=50,g2=15,x2=2,m2=50,y0=16000000;var V0=(j,X)=>{let Q=X.getTotalSize(),J=Q>y0,K=J?y0:Q,q=Q>0?K/Q:1;return{isCompressed:J,actualSize:Q,virtualSize:K,ratio:q}},a0=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;if(!K.isCompressed){let G=Q.indexAtOffset(j),L=Q.indexAtOffset(j+X);if(L<J-1)L++;return q.start=Math.max(0,G),q.end=Math.min(J-1,Math.max(0,L)),q}let{virtualSize:Y}=K,V=j/Y*J,Z=Math.floor(V),D=f0(Q,Math.max(0,Z),X,J),A=Math.ceil(V)+D,T=Y-X-j;if(T<=X&&T>=-1){let G=c0(Q,X,J),L=Math.max(0,J-G),M=Math.max(0,Math.min(1,1-T/X));Z=Math.floor(Z+(L-Z)*M),A=T<=1?J-1:Math.min(J-1,Z+D)}return q.start=Math.max(0,Z),q.end=Math.min(J-1,Math.max(0,A)),q},d2=(j,X,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X),J},R0=(j,X,Q,J,K,q,Y)=>{if(!q.isCompressed||J===0)return Q.getOffset(j);let{virtualSize:B}=q,V=B-K,Z=V-X;if(Z<=K&&Z>=-1){if(X>=V-1){let _=Q.getTotalSize()-Q.getOffset(j);return K-_}let T=c0(Q,K,J),G=Math.max(0,J-T),M=X/B*J,y=Math.max(0,Math.min(1,1-Z/K)),P=Q.getOffset(j)-Q.getOffset(G),$=Q.getOffset(j)-N2(Q,M,J);return $+(P-$)*y}let D=X/B,A=Q.getTotalSize(),O=D*A;return Q.getOffset(j)-O},s0=(j,X,Q,J,K,q="start")=>{if(J===0)return 0;let Y;if(K.isCompressed){if(q==="end"&&j===J-1)return Math.max(0,K.virtualSize-Q);Y=j/J*K.virtualSize}else Y=X.getOffset(j);let B=X.getSize(j);switch(q){case"center":Y-=(Q-B)/2;break;case"end":Y-=Q-B;break}let V=K.virtualSize-Q;return Math.max(0,Math.min(Y,V))},c2=(j,X,Q,J)=>{if(Q===0)return 0;if(J.isCompressed){let K=j/J.virtualSize;return Math.floor(K*Q)}return X.indexAtOffset(j)},l2=(j,X)=>{if(typeof X==="number")return j*X>y0;return X.getTotalSize()>y0},a2=(j)=>{if(j<=0)return 0;return Math.floor(y0/j)},s2=(j,X)=>{let Q=V0(j,X);if(!Q.isCompressed)return`No compression needed (${j} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${j} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var r0=()=>{};var P0=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var Gj={};zj(Gj,{createGridRenderer:()=>g0});var sj=(j=200)=>{let X=[];return{acquire:()=>{let q=X.pop();if(q)return q;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},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}}},g0=(j,X,Q,J,K,q,Y,B)=>{let V=sj(),Z=new Map,D=q,A=!1,O=null,T=0,G="",L=(H)=>{if(O&&T===H)return O;return O=V0(H,Q),T=H,O},M={selected:!1,focused:!1},y=(H,v)=>{return M.selected=H,M.focused=v,M},P=`${K}-item ${K}-grid-item`,$=`${K}-item--selected`,_=`${K}-item--focused`,U=(H,v)=>{if(typeof v==="string")H.innerHTML=v;else H.replaceChildren(v)},W=(H,v,x)=>{H.classList.toggle($,v),H.classList.toggle(_,x)},E=(H,v)=>{let x=J.getRow(H);if(v){let s=v.totalItems,r=L(s);if(r.isCompressed)return R0(x,v.scrollPosition,Q,s,v.containerSize,r,v.rangeStart)}return Q.getOffset(x)},b=(H,v,x)=>{let s=H.dataset.id?.startsWith("__group_header"),r=s?0:J.getCol(v),n=s?0:J.getColumnOffset(r,D),Y0;if(A){let X0=J.getRow(v),R=0,c=new Set;for(let l=0;l<v;l++){let K0=J.getRow(l);if(K0<X0&&!c.has(K0)){let o=Q.getSize(l);R+=o,c.add(K0)}}Y0=R}else Y0=E(v,x);H.style.transform=`translate(${Math.round(n)}px, ${Math.round(Y0)}px)`},w=(H,v)=>{let x=H.dataset.id?.startsWith("__group_header"),s=x?D:J.getColumnWidth(D),r;if(A||x)r=Q.getSize(v)-J.gap;else{let n=J.getRow(v);r=Q.getSize(n)-J.gap}H.style.width=`${s}px`,H.style.height=`${r}px`},h=(H,v,x,s,r)=>{let n=V.acquire(),Y0=y(x,s);if(n.className=P,n.dataset.index=String(H),n.dataset.id=String(v.id),n.dataset.row=String(J.getRow(H)),n.dataset.col=String(J.getCol(H)),n.ariaSelected=String(x),B)n.id=`${B}-item-${H}`;if(Y)G=String(Y()),n.setAttribute("aria-setsize",G),n.setAttribute("aria-posinset",String(H+1));w(n,H);let X0=X(v,H,Y0);return U(n,X0),W(n,x,s),b(n,H,r),n},N=(H,v,x,s,r)=>{if(v.start===0&&H.length>0)A=P0(H[0]);for(let[R,c]of Z)if(R<v.start||R>v.end)c.element.remove(),V.release(c.element),Z.delete(R);let n=!1;if(Y){let R=String(Y());n=R!==G,G=R}let Y0=document.createDocumentFragment(),X0=[];for(let R=v.start;R<=v.end;R++){let c=R-v.start,l=H[c];if(!l){console.warn(`⚠️ RENDER: Missing item at index ${R} (range: ${v.start}-${v.end}, items.length: ${H.length})`);continue}let K0=x.has(l.id),o=R===s,J0=Z.get(R);if(J0){let G0=J0.element.dataset.id,S=String(l.id);if(G0!==S){let t=y(K0,o),j0=X(l,R,t);U(J0.element,j0),J0.element.dataset.id=S,J0.element.dataset.row=String(J.getRow(R)),J0.element.dataset.col=String(J.getCol(R)),w(J0.element,R)}if(W(J0.element,K0,o),J0.element.ariaSelected=String(K0),b(J0.element,R,r),n)J0.element.setAttribute("aria-setsize",G)}else{let G0=h(R,l,K0,o,r);Y0.appendChild(G0),X0.push({index:R,element:G0})}}if(X0.length>0){j.appendChild(Y0);for(let{index:R,element:c}of X0)Z.set(R,{index:R,element:c})}},z=(H)=>{for(let[v,x]of Z)b(x.element,v,H)},g=(H,v,x,s)=>{let r=Z.get(H);if(r){let n=y(x,s),Y0=X(v,H,n);U(r.element,Y0),W(r.element,x,s),r.element.dataset.id=String(v.id),r.element.ariaSelected=String(x),w(r.element,H)}},d=(H,v,x)=>{let s=Z.get(H);if(s)W(s.element,v,x)},k=(H)=>{return Z.get(H)?.element},C=(H)=>{if(Math.abs(H-D)<1)return;D=H;for(let[v,x]of Z)w(x.element,v),b(x.element,v)},I=()=>{for(let[,H]of Z)H.element.remove(),V.release(H.element);Z.clear()};return{render:N,updatePositions:z,updateItem:g,updateItemClasses:d,getElement:k,updateContainerWidth:C,clear:I,destroy:()=>{I(),V.clear()}}};var X2=H2(()=>{r0()});var P2=2,T2=(j=0)=>{let X=[,,,,,];for(let Q=0;Q<5;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},U2=(j,X)=>{let Q=performance.now(),J=Q-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=Q,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=Q,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=Q,j.sampleIndex=(j.sampleIndex+1)%5,j.sampleCount=Math.min(j.sampleCount+1,5),j.sampleCount>=2){let q=(j.sampleIndex-j.sampleCount+5)%5,Y=j.samples[q],B=X-Y.position,V=Q-Y.time;j.velocity=V>0?Math.abs(B)/V:0}return j.lastPosition=X,j.lastTime=Q,j};var l0=()=>{let j={},X=(B,V)=>{if(!j[B])j[B]=new Set;return j[B].add(V),()=>Q(B,V)},Q=(B,V)=>{j[B]?.delete(V)};return{on:X,off:Q,emit:(B,V)=>{j[B]?.forEach((Z)=>{try{Z(V)}catch(D){console.error(`[vlist] Error in event handler for "${String(B)}":`,D)}})},once:(B,V)=>{let Z=(D)=>{Q(B,Z),V(D)};return X(B,Z)},clear:(B)=>{if(B)delete j[B];else for(let V in j)delete j[V]},listenerCount:(B)=>{return j[B]?.size??0}}};var $2=(j)=>{if(typeof j==="string"){let X=document.querySelector(j);if(!X)throw Error(`[vlist/builder] Container not found: ${j}`);return X}return j},R2=(j,X,Q,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"),Q)K.setAttribute("aria-label",Q);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 Y=document.createElement("div");if(Y.className=`${X}-content`,Y.style.position="relative",J)Y.style.height="100%";else Y.style.width="100%";let B=document.createElement("div");if(B.className=`${X}-items`,B.style.position="relative",J)B.style.height="100%";else B.style.width="100%";return Y.appendChild(B),q.appendChild(Y),K.appendChild(q),j.appendChild(K),{root:K,viewport:q,content:Y,items:B}};var k2=(j=100)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:(Q)=>{if(X.length<j)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),X.push(Q)},clear:()=>{X.length=0}}};var C2=(j,X,Q,J,K)=>{if(J===0||X===0){K.start=0,K.end=0;return}let q=Q.indexAtOffset(j),Y=f0(Q,q,X,J),B=q+Y;K.start=Math.max(0,q),K.end=Math.min(J-1,Math.max(0,B))},z2=(j,X,Q,J)=>{if(Q===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X)},v2=(j,X,Q,J,K)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Y=X.getOffset(q),B=X.getSize(q),V=Math.max(0,X.getTotalSize()-Q),Z;switch(K){case"center":Z=Y-(Q-B)/2;break;case"end":Z=Y-Q+B;break;default:Z=Y}return Math.max(0,Math.min(Z,V))};var w2=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,S2=(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}};var f2=(j,X)=>{let{dom:Q,emitter:J,resolvedConfig:K,rawConfig:q,rendered:Y,pool:B,sharedState:V,isHorizontal:Z,classPrefix:D,contentSizeHandlers:A,afterScroll:O,clickHandlers:T,keydownHandlers:G,resizeHandlers:L,destroyHandlers:M,methods:y,onScrollFrame:P,resizeObserver:$,renderRange:_}=X;return{get dom(){return Q},get sizeCache(){return j.hc},get emitter(){return J},get config(){return K},get rawConfig(){return q},get renderer(){return{render:(U,W,E,b,w)=>{j.ss=E,j.fi=b,j.ffn()},updateItemClasses:(U,W,E)=>{let b=Y.get(U);if(!b)return;b.classList.toggle(`${D}-item--selected`,W),b.classList.toggle(`${D}-item--focused`,E),b.ariaSelected=W?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(U)=>Y.get(U)??null,clear:()=>{},destroy:()=>{}}},set renderer(U){},get dataManager(){return j.dm},set dataManager(U){j.dm=U},get scrollController(){return j.sc},set scrollController(U){j.sc=U},state:V,getContainerWidth(){return j.cw},afterScroll:O,clickHandlers:T,keydownHandlers:G,resizeHandlers:L,contentSizeHandlers:A,destroyHandlers:M,methods:y,replaceTemplate(U){j.at=U},replaceRenderer(U){},replaceDataManager(U){j.dm=U},replaceScrollController(U){j.sc=U},getItemsForRange(U){let{dm:W,it:E}=j,b=[];for(let w=U.start;w<=U.end;w++){let h=W?W.getItem(w):E[w];if(h)b.push(h)}return b},getAllLoadedItems(){let U=j.dm;if(U){let W=U.getTotal(),E=[];for(let b=0;b<W;b++){let w=U.getItem(b);if(w)E.push(w)}return E}return[...j.it]},getVirtualTotal(){return j.vtf()},getCachedCompression(){let U=j.hc;return{isCompressed:!1,actualSize:U.getTotalSize(),virtualSize:U.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:j.ls,totalItems:j.vtf(),containerSize:j.ch,rangeStart:_.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,U]of Y)U.remove(),B.release(U);Y.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(U,W){j.rfn=U,j.ffn=W},setVirtualTotalFn(U){j.vtf=U},rebuildSizeCache(U){j.hc.rebuild(U??j.vtf())},setSizeConfig(U){j.hc=$0(U,j.vtf())},updateContentSize(U){let W=`${U}px`;if(Z)Q.content.style.width=W;else Q.content.style.height=W},updateCompressionMode(){},setVisibleRangeFn(U){j.gvr=U},setScrollToPosFn(U){j.gsp=U},setPositionElementFn(U){j.pef=U},setScrollFns(U,W){j.sgt=U,j.sst=(E)=>{W(E),P()}},setScrollTarget(U){j.st.removeEventListener("scroll",P),j.st=U,j.st.addEventListener("scroll",P,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(U){j.gcw=U.width,j.gch=U.height,j.cw=U.width(),j.ch=U.height(),V.viewportState.containerSize=j.ch},disableViewportResize(){if(j.vre)j.vre=!1,$.unobserve(Q.viewport)}}},I2=(j,X,Q)=>{let{rendered:J,itemState:K,contentSizeHandlers:q,applyTemplate:Y,updateContentSize:B}=X,V=()=>{j.hc.rebuild(j.vtf()),B(),Q.updateCompressionMode();for(let Z=0;Z<q.length;Z++)q[Z]();j.ffn()};return{getState:()=>({total:j.it.length,cached:j.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>j.it.length,getCached:()=>j.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Z)=>j.it[Z],isItemLoaded:(Z)=>Z>=0&&Z<j.it.length&&j.it[Z]!==void 0,getItemsInRange:(Z,D)=>{let A=j.it,O=[],T=Math.max(0,Z),G=Math.min(D,A.length-1);for(let L=T;L<=G;L++)O.push(A[L]);return O},setTotal:(Z)=>{},setItems:(Z,D=0,A)=>{let O=j.it;if(D===0&&(A!==void 0||O.length===0))j.it=Z;else{let T=D+Z.length;if(O.length<T)O.length=T;for(let G=0;G<Z.length;G++)O[D+G]=Z[G]}if(j.ii)V()},updateItem:(Z,D)=>{let A=j.it;if(Z<0||Z>=A.length)return!1;let O=A[Z];if(!O)return!1;A[Z]={...O,...D};let T=J.get(Z);if(T)Y(T,j.at(A[Z],Z,K)),T.dataset.id=String(A[Z].id);return!0},removeItem:(Z)=>{if(Z<0||Z>=j.it.length)return!1;if(j.it.splice(Z,1),j.ii)V();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{j.it=[]},reset:()=>{if(j.it=[],j.ii)j.hc.rebuild(0),B(),j.ffn()}}},p2=(j,X)=>{let{dom:Q,classPrefix:J}=X;return{getScrollTop:()=>j.sgt(),scrollTo:(K)=>{j.sst(K),j.ls=K,j.rfn()},scrollBy:(K)=>{let q=j.sgt()+K;j.sst(q),j.ls=q,j.rfn()},isAtTop:()=>j.ls<=2,isAtBottom:(K=2)=>j.sab(K),getScrollPercentage:()=>{let K=j.hc.getTotalSize(),q=Math.max(0,K-j.ch);return q>0?j.ls/q:0},getVelocity:()=>j.vt.velocity,isTracking:()=>j.vt.sampleCount>=2,isScrolling:()=>Q.root.classList.contains(`${J}--scrolling`),updateConfig:()=>{},enableCompression:()=>{j.sic=!0},disableCompression:()=>{j.sic=!1},isCompressed:()=>j.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{j.ch=K},destroy:()=>{}}};var Sj=3,fj="vlist",h2=150,Ij=0,u2=(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.orientation==="horizontal",Q=X?"width":"height",J=X?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${Q} is required${X?" when orientation is 'horizontal'":""}`);if(typeof J==="number"&&J<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof J!=="number"&&typeof J!=="function")throw Error(`[vlist/builder] item.${Q} 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,Y={use(B){if(q)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(B.name,B),Y},build(){if(q)throw Error("[vlist/builder] .build() can only be called once");return q=!0,pj(j,K,X,J)}};return Y};function pj(j,X,Q,J){let{item:K,items:q,overscan:Y=Sj,classPrefix:B=fj,ariaLabel:V,reverse:Z=!1,scroll:D}=j,A=D?.wheel??!0,O=D?.wrap??!1,T=Z,G=`${B}-${Ij++}`,L=J,M=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,y=Q?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,P={overscan:Y,classPrefix:B,reverse:T,wrap:O,horizontal:Q,ariaIdPrefix:G},$=Array.from(X.values()).sort((F,f)=>(F.priority??50)-(f.priority??50)),_=new Set($.map((F)=>F.name));for(let F of $)if(F.conflicts){for(let f of F.conflicts)if(_.has(f))throw Error(`[vlist/builder] ${F.name} and ${f} cannot be combined`)}if(Q){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with orientation: 'horizontal'");if(_.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with orientation: 'horizontal'")}if(T){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let U=$2(j.container),W=R2(U,B,V,Q),E=l0(),b=q||[],w=$0(L,b.length),h=k2(),N={it:b,hc:w,ch:W.viewport.clientHeight,cw:W.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:T2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>W.viewport.scrollLeft:()=>W.viewport.scrollTop,sst:Q?(F)=>{W.viewport.scrollLeft=F}:(F)=>{W.viewport.scrollTop=F},sab:(F=2)=>{let f=N.hc.getTotalSize();return N.ls+N.ch>=f-F},sic:!1,rfn:null,ffn:null,gvr:(F,f,m,a,e)=>{C2(F,f,m,a,e)},gsp:(F,f,m,a,e)=>{return v2(F,f,m,a,e)},pef:null,at:K.template,vre:!0,st:W.viewport,gcw:()=>N.cw,gch:()=>N.ch};N.vtf=()=>N.dm?N.dm.getTotal():N.it.length;let z=null,g=null,d={start:0,end:0},k={start:0,end:0},C={start:-1,end:-1},I={viewportState:{scrollPosition:0,containerSize:N.ch,totalSize:N.hc.getTotalSize(),actualSize:N.hc.getTotalSize(),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},p=new Map,H={selected:!1,focused:!1},v=`${B}-item`,x=[],s=[],r=[],n=[],Y0=[],X0=[],R=new Map,c=(F,f)=>{if(typeof f==="string")F.innerHTML=f;else F.replaceChildren(f)},l=(F,f)=>{let m=Math.round(N.hc.getOffset(f));if(Q)F.style.transform=`translateX(${m}px)`;else F.style.transform=`translateY(${m}px)`};N.pef=l;let K0=(F,f)=>{let m=h.acquire();if(m.className=v,Q){if(m.style.width=`${N.hc.getSize(F)}px`,y!=null)m.style.height=`${y}px`}else m.style.height=`${N.hc.getSize(F)}px`;if(m.dataset.index=String(F),m.dataset.id=String(f.id),m.ariaSelected="false",m.id=`${G}-item-${F}`,N.la=String(N.vtf()),m.setAttribute("aria-setsize",N.la),m.setAttribute("aria-posinset",String(F+1)),String(f.id).startsWith("__placeholder_"))m.classList.add(`${B}-item--placeholder`);return c(m,N.at(f,F,H)),N.pef(m,F),m},o=()=>{let F=`${N.hc.getTotalSize()}px`;if(Q)W.content.style.width=F;else W.content.style.height=F},J0=()=>{if(N.id)return;let F=N.vtf();if(N.gvr(N.ls,N.ch,N.hc,F,d),z2(d,Y,F,k),k.start===C.start&&k.end===C.end){if(N.sic)for(let[i,N0]of p)N.pef(N0,i);return}let f=String(F),m=f!==N.la;N.la=f;for(let[i,N0]of p)if(i<k.start||i>k.end)N0.remove(),h.release(N0),p.delete(i);let a=document.createDocumentFragment(),e=[];for(let i=k.start;i<=k.end;i++){let N0=N.dm?N.dm.getItem(i):N.it[i];if(!N0)continue;let q0=p.get(i);if(q0){let A0=q0.dataset.id,w0=String(N0.id);if(A0!==w0){let Tj=A0?.startsWith("__placeholder_"),b2=w0.startsWith("__placeholder_");if(c(q0,N.at(N0,i,H)),q0.dataset.id=w0,Q)q0.style.width=`${N.hc.getSize(i)}px`;else q0.style.height=`${N.hc.getSize(i)}px`;if(b2)q0.classList.add(`${B}-item--placeholder`);else q0.classList.remove(`${B}-item--placeholder`);if(Tj&&!b2)q0.classList.add(`${B}-item--replaced`),setTimeout(()=>{q0.classList.remove(`${B}-item--replaced`)},300)}N.pef(q0,i);let d0=N.ss.has(N0.id),Pj=i===N.fi;if(q0.classList.toggle(`${B}-item--selected`,d0),q0.classList.toggle(`${B}-item--focused`,Pj),q0.ariaSelected=d0?"true":"false",m)q0.setAttribute("aria-setsize",N.la)}else{let A0=K0(i,N0),w0=N.ss.has(N0.id),d0=i===N.fi;if(w0)A0.classList.add(`${B}-item--selected`),A0.ariaSelected="true";if(d0)A0.classList.add(`${B}-item--focused`);a.appendChild(A0),e.push({index:i,element:A0})}}if(e.length>0){W.items.appendChild(a);for(let{index:i,element:N0}of e)p.set(i,N0)}C.start=k.start,C.end=k.end,I.lastRenderRange.start=k.start,I.lastRenderRange.end=k.end,I.viewportState.scrollPosition=N.ls,I.viewportState.visibleRange.start=d.start,I.viewportState.visibleRange.end=d.end,I.viewportState.renderRange.start=k.start,I.viewportState.renderRange.end=k.end,E.emit("range:change",{range:{start:k.start,end:k.end}})},G0=()=>{C.start=-1,C.end=-1,N.rfn()};N.rfn=J0,N.ffn=G0;let S=()=>{if(N.id)return;let F=N.sgt(),f=F>=N.ls?"down":"up";if(N.vt=U2(N.vt,F),!W.root.classList.contains(`${B}--scrolling`))W.root.classList.add(`${B}--scrolling`);N.ls=F,N.rfn(),E.emit("scroll",{scrollPosition:F,direction:f}),E.emit("velocity:change",{velocity:N.vt.velocity,reliable:N.vt.sampleCount>=P2});for(let m=0;m<x.length;m++)x[m](F,f);if(g)clearTimeout(g);g=setTimeout(()=>{W.root.classList.remove(`${B}--scrolling`),N.vt.velocity=0,N.vt.sampleCount=0,E.emit("velocity:change",{velocity:0,reliable:!1})},D?.idleTimeout??h2)},u=null;if(N.st.addEventListener("scroll",S,{passive:!0}),A&&!Q&&!M)u=(F)=>{F.preventDefault();let f=N.sgt(),m=F.deltaY,a=Math.max(0,Math.min(f+m,N.hc.getTotalSize()-N.ch));N.sst(a),N.ls=a,N.vt=U2(N.vt,a),N.rfn();let e=a>=f?"down":"up";if(E.emit("scroll",{scrollPosition:a,direction:e}),!W.root.classList.contains(`${B}--scrolling`))W.root.classList.add(`${B}--scrolling`);if(g)clearTimeout(g);g=setTimeout(()=>{W.root.classList.remove(`${B}--scrolling`),N.vt.velocity=0,N.vt.sampleCount=0,E.emit("velocity:change",{velocity:0,reliable:!1})},D?.idleTimeout??h2)},W.viewport.addEventListener("wheel",u,{passive:!1});else if(Q&&A)u=(F)=>{if(F.deltaX)return;F.preventDefault(),W.viewport.scrollLeft+=F.deltaY},W.viewport.addEventListener("wheel",u,{passive:!1});let t=(F)=>{let m=F.target.closest("[data-index]");if(m){let a=parseInt(m.dataset.index??"-1",10);if(a>=0){let e=N.dm?.getItem(a)??N.it[a];if(e){if(e.__groupHeader)return;E.emit("item:click",{item:e,index:a,event:F})}}}for(let a=0;a<s.length;a++)s[a](F)},j0=(F)=>{let m=F.target.closest("[data-index]");if(m){let a=parseInt(m.dataset.index??"-1",10);if(a>=0){let e=N.dm?.getItem(a)??N.it[a];if(e){if(e.__groupHeader)return;E.emit("item:dblclick",{item:e,index:a,event:F})}}}},Z0=(F)=>{for(let f=0;f<r.length;f++)r[f](F)};W.items.addEventListener("click",t),W.items.addEventListener("dblclick",j0),W.root.addEventListener("keydown",Z0);let B0=new ResizeObserver((F)=>{if(N.id)return;for(let f of F){let m=f.contentRect.height,a=f.contentRect.width,e=Q?a:m;if(N.cw=a,Math.abs(e-N.ch)>1){if(N.ch=e,I.viewportState.containerSize=e,N.ii)o(),N.rfn(),E.emit("resize",{height:m,width:a})}if(N.ii)for(let i=0;i<n.length;i++)n[i](a,m)}});if(N.vre)B0.observe(W.viewport);let _0={dom:W,emitter:E,resolvedConfig:P,rawConfig:j,rendered:p,pool:h,itemState:H,sharedState:I,renderRange:k,isHorizontal:Q,classPrefix:B,contentSizeHandlers:Y0,afterScroll:x,clickHandlers:s,keydownHandlers:r,resizeHandlers:n,destroyHandlers:X0,methods:R,onScrollFrame:S,resizeObserver:B0,applyTemplate:c,updateContentSize:o},Q0=f2(N,_0);N.dm=I2(N,_0,Q0),N.sc=p2(N,_0);let U0=new Map;for(let F of $)if(F.methods)for(let f of F.methods){let m=U0.get(f);if(m)throw Error(`[vlist/builder] Method "${f}" is registered by both "${m}" and "${F.name}"`);U0.set(f,F.name)}for(let F of $)F.setup(Q0);if(N.ii=!0,Q0.state.isInitialized=!0,o(),N.rfn(),T&&N.it.length>0){let F=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(F),N.ls=F,N.rfn()}let O0=(F)=>{Q0.dataManager.setItems(F,0,F.length)},b0=T?(F)=>{let f=N.sab(2),m=N.it.length;if(Q0.dataManager.setItems(F,m),f&&N.it.length>0){let a=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(a),N.ls=a,N.rfn()}}:(F)=>{let f=N.it.length;Q0.dataManager.setItems(F,f)},D0=T?(F)=>{let f=N.sgt(),m=N.hc.getTotalSize(),a=[...N.it];Q0.dataManager.clear(),Q0.dataManager.setItems([...F,...a],0);let i=N.hc.getTotalSize()-m;if(i>0)N.sst(f+i),N.ls=f+i}:(F)=>{let f=[...N.it];Q0.dataManager.clear(),Q0.dataManager.setItems([...F,...f],0)},M0=(F,f)=>{Q0.dataManager.updateItem(F,f)},W0=(F)=>{Q0.dataManager.removeItem(F)},E0=async()=>{if(Q0.dataManager.reload)await Q0.dataManager.reload()},F0=()=>{if(z!==null)cancelAnimationFrame(z),z=null},Fj=(F,f,m)=>{if(F0(),Math.abs(f-F)<1){N.sst(f),N.ls=f,N.rfn();return}let a=performance.now(),e=(i)=>{let N0=i-a,q0=Math.min(N0/m,1),A0=F+(f-F)*w2(q0);if(N.sst(A0),N.ls=A0,N.rfn(),q0<1)z=requestAnimationFrame(e);else z=null};z=requestAnimationFrame(e)},Lj=(F,f)=>{let{align:m,behavior:a,duration:e}=S2(f),i=N.vtf(),N0=F;if(O&&i>0)N0=(N0%i+i)%i;let q0=N.gsp(N0,N.hc,N.ch,i,m);if(a==="smooth")Fj(N.sgt(),q0,e);else F0(),N.sst(q0)},Oj=()=>N.sgt(),bj=(F,f)=>{return E.on(F,f)},yj=(F,f)=>{E.off(F,f)},Hj=()=>{if(N.id)return;if(N.id=!0,Q0.state.isDestroyed=!0,W.items.removeEventListener("click",t),W.root.removeEventListener("keydown",Z0),N.st.removeEventListener("scroll",S),B0.disconnect(),u)W.viewport.removeEventListener("wheel",u);if(g)clearTimeout(g);for(let F=0;F<X0.length;F++)X0[F]();for(let F of $)if(F.destroy)F.destroy();F0();for(let[,F]of p)F.remove(),h.release(F);p.clear(),h.clear(),E.clear(),W.root.remove()},O2={get element(){return W.root},get items(){if(R.has("_getItems"))return R.get("_getItems")();return N.it},get total(){if(R.has("_getTotal"))return R.get("_getTotal")();return N.vtf()},setItems:R.has("setItems")?R.get("setItems"):O0,appendItems:R.has("appendItems")?R.get("appendItems"):b0,prependItems:R.has("prependItems")?R.get("prependItems"):D0,updateItem:R.has("updateItem")?R.get("updateItem"):M0,removeItem:R.has("removeItem")?R.get("removeItem"):W0,reload:R.has("reload")?R.get("reload"):E0,scrollToIndex:R.has("scrollToIndex")?R.get("scrollToIndex"):Lj,cancelScroll:R.has("cancelScroll")?R.get("cancelScroll"):F0,getScrollPosition:R.has("getScrollPosition")?R.get("getScrollPosition"):Oj,on:bj,off:yj,destroy:Hj};for(let[F,f]of R){if(F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;O2[F]=f}return O2}r0();var k0=(j,X,Q={},J="vlist",K=!1)=>{let{autoHide:q=!0,autoHideDelay:Y=1000,minThumbSize:B=30,showOnHover:V=!0,hoverZoneWidth:Z=16,showOnViewportEnter:D=!0}=Q,A=0,O=0,T=0,G=0,L=!1,M=!1,y=0,P=0,$=0,_=null,U=!1,W=null,E=null,b=K?"width":"height",w=K?"translateX":"translateY",h=K?(o)=>o.clientX:(o)=>o.clientY,N=K?"left":"top",z=document.createElement("div"),g=document.createElement("div"),d=V?document.createElement("div"):null,k=()=>{if(z.className=`${J}-scrollbar`,g.className=`${J}-scrollbar-thumb`,K)z.classList.add(`${J}-scrollbar--horizontal`);if(z.appendChild(g),j.appendChild(z),d){if(d.className=`${J}-scrollbar-hover`,K)d.classList.add(`${J}-scrollbar-hover--horizontal`),d.style.height=`${Z}px`;else d.style.width=`${Z}px`;j.appendChild(d)}},C=()=>{if(_)clearTimeout(_),_=null},I=()=>{if(!q)return;C(),_=setTimeout(H,Y)},p=()=>{if(A<=O)return;if(C(),!U)z.classList.add(`${J}-scrollbar--visible`),U=!0;if(q&&!L&&!M)I()},H=()=>{if(L||M)return;z.classList.remove(`${J}-scrollbar--visible`),U=!1},v=(o,J0)=>{A=o,O=J0;let G0=A>O;if(z.style.display=G0?"":"none",!G0){H();return}let S=O/A;T=Math.max(B,S*O),g.style[b]=`${T}px`,G=O-T,x($)},x=(o)=>{if($=o,A<=O||G<=0)return;let J0=A-O,S=Math.min(1,Math.max(0,o/J0))*G;g.style.transform=`${w}(${S}px)`},s=(o)=>{if(o.target===g)return;let J0=z.getBoundingClientRect(),u=h(o)-J0[N]-T/2,j0=Math.max(0,Math.min(u,G))/G,Z0=A-O,B0=j0*Z0;X(B0),p()},r=(o)=>{o.preventDefault(),o.stopPropagation(),L=!0,y=h(o),P=$,C(),z.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",n),document.addEventListener("mouseup",Y0)},n=(o)=>{if(!L)return;let J0=h(o)-y,G0=G>0?J0/G:0,S=A-O,u=G0*S,t=Math.max(0,Math.min(P+u,S)),Z0=t/S*G;if(g.style.transform=`${w}(${Z0}px)`,E=t,W===null)W=requestAnimationFrame(()=>{if(E!==null)X(E);W=null})},Y0=()=>{if(L=!1,W!==null)cancelAnimationFrame(W),W=null;if(E!==null)X(E),E=null;if(z.classList.remove(`${J}-scrollbar--dragging`),q&&!M)I();document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",Y0)},X0=()=>{if(D)p()},R=()=>{if(!L){if(M=!1,q)I()}},c=()=>{M=!0,C(),p()},l=()=>{if(M=!1,!L&&q)I()},K0=()=>{if(C(),W!==null)cancelAnimationFrame(W),W=null;if(z.removeEventListener("click",s),z.removeEventListener("mouseenter",c),z.removeEventListener("mouseleave",l),g.removeEventListener("mousedown",r),j.removeEventListener("mouseenter",X0),j.removeEventListener("mouseleave",R),document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",Y0),d){if(d.removeEventListener("mouseenter",c),d.removeEventListener("mouseleave",l),d.parentNode)d.parentNode.removeChild(d)}if(z.parentNode)z.parentNode.removeChild(z)};if(k(),z.addEventListener("click",s),z.addEventListener("mouseenter",c),z.addEventListener("mouseleave",l),g.addEventListener("mousedown",r),j.addEventListener("mouseenter",X0),j.addEventListener("mouseleave",R),d)d.addEventListener("mouseenter",c),d.addEventListener("mouseleave",l);return{show:p,hide:H,updateBounds:v,updatePosition:x,isVisible:()=>U,destroy:K0}};var r2=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:J,config:K}=Q,{classPrefix:q,horizontal:Y}=K;if(X=k0(J.viewport,(Z)=>Q.scrollController.scrollTo(Z),j??{},q,Y),!J.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))J.viewport.classList.add(`${q}-viewport--custom-scrollbar`);let B=Q.getCachedCompression();X.updateBounds(B.virtualSize,Q.state.viewportState.containerSize);let V=X;Q.afterScroll.push((Z,D)=>{V.updatePosition(Z),V.show()}),Q.resizeHandlers.push((Z,D)=>{if(V){let A=Q.getCachedCompression();V.updateBounds(A.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(V){let Z=Q.getCachedCompression();V.updateBounds(Z.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var n2=(j=0)=>{let X=[,,,,,,,,];for(let Q=0;Q<8;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},n0=(j,X)=>{let Q=performance.now(),J=Q-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=Q,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=Q,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=Q,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,Y=j.samples[q],B=X-Y.position,V=Q-Y.time;j.velocity=V>0?B/V:0}return j.lastPosition=X,j.lastTime=Q,j},hj=(j)=>j.sampleCount>=3,o2=(j,X={})=>{let{wheel:Q=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:q=150,onScroll:Y,onIdle:B,scrollElement:V,horizontal:Z=!1}=X,D=!!V,A=0,O=0,T=D?Z?window.innerWidth:window.innerHeight:Z?j.clientWidth:j.clientHeight,G=X.compressed??!1,L=X.compression,M=n2(),y=!1,P=null,_=o0(()=>{let R=Z?j.scrollLeft:j.scrollTop,c=R>=A?"down":"up";if(M=n0(M,R),A=R,Y)Y({scrollTop:A,direction:c,velocity:M.velocity});h()}),W=o0(()=>{let R=j.getBoundingClientRect(),c=Z?Math.max(0,-R.left):Math.max(0,-R.top),l=c>=A?"down":"up";if(M=n0(M,c),A=c,!y)y=!0;if(Y)Y({scrollTop:A,direction:l,velocity:M.velocity});h()}),E=(R)=>{R.preventDefault()},b=(R)=>{if(R.deltaX)return;R.preventDefault(),j.scrollLeft+=R.deltaY},w=(R)=>{if(!G)return;R.preventDefault();let c=(Z?R.deltaX||R.deltaY:R.deltaY)*J,l=A+c;if(K)l=A+c*0.3;if(l=Math.max(0,Math.min(l,O)),l!==A){let o=l>=A?"down":"up";if(M=n0(M,l),A=l,!y)y=!0;if(Y)Y({scrollTop:A,direction:o,velocity:M.velocity});h()}},h=()=>{if(P)clearTimeout(P);P=setTimeout(()=>{if(y=!1,M=n2(A),B)B()},q)},N=(R)=>{if(G)return;if(G=!0,L=R,O=R.virtualSize-T,D)return;if(_.cancel(),j.removeEventListener("scroll",_),!Q)j.removeEventListener("wheel",E);else if(Z)j.removeEventListener("wheel",b);if(Z)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",w,{passive:!1});let c=Z?j.scrollLeft:j.scrollTop;if(c>0){let l=Z?L?.actualSize??j.scrollWidth:L?.actualSize??j.scrollHeight;A=c/l*O}if(Z)j.scrollLeft=0;else j.scrollTop=0},z=()=>{if(!G)return;if(G=!1,D){L=void 0;return}if(j.removeEventListener("wheel",w),Z)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!Q)j.addEventListener("wheel",E,{passive:!1});else if(Z)j.addEventListener("wheel",b,{passive:!1});if(L&&A>0){let c=A/O*(L.actualSize-T);if(Z)j.scrollLeft=c;else j.scrollTop=c}L=void 0},g=()=>{if(D||G)return A;return Z?j.scrollLeft:j.scrollTop},d=(R,c=!1)=>{let l=Math.max(0,Math.min(R,O||1/0));if(D){let K0=j.getBoundingClientRect();if(Z){let o=K0.left+window.scrollX;window.scrollTo({left:o+l,behavior:c?"smooth":"auto"})}else{let o=K0.top+window.scrollY;window.scrollTo({top:o+l,behavior:c?"smooth":"auto"})}}else if(G){if(l===A)return;let o=l>=A?"down":"up";if(M=n0(M,l),A=l,!y)y=!0;if(Y)Y({scrollTop:A,direction:o,velocity:M.velocity});h()}else if(Z)j.scrollTo({left:l,behavior:c?"smooth":"auto"});else j.scrollTo({top:l,behavior:c?"smooth":"auto"})},k=(R)=>{d(g()+R)},C=()=>{return g()<=0},I=(R=0)=>{let c=g(),l=D||G?O:Z?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return c>=l-R},p=()=>{let R=g(),c=D||G?O:Z?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(c<=0)return 0;return Math.min(1,Math.max(0,R/c))},H=(R)=>{if(R.compression)L=R.compression,O=L.virtualSize-T},v=()=>G,x=()=>Math.abs(M.velocity),s=()=>hj(M),r=()=>y,n=()=>D,Y0=(R)=>{if(T=R,L)O=L.virtualSize-T},X0=()=>{if(P)clearTimeout(P);if(D)W.cancel(),window.removeEventListener("scroll",W);else _.cancel(),j.removeEventListener("scroll",_),j.removeEventListener("wheel",w),j.removeEventListener("wheel",E),j.removeEventListener("wheel",b)};if(D){if(G&&L)O=L.virtualSize-T;window.addEventListener("scroll",W,{passive:!0})}else if(G&&L){if(O=L.virtualSize-T,Z)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",w,{passive:!1})}else{if(Z)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!Q)j.addEventListener("wheel",E,{passive:!1});else if(Z)j.addEventListener("wheel",b,{passive:!1})}return{getScrollTop:g,scrollTo:d,scrollBy:k,isAtTop:C,isAtBottom:I,getScrollPercentage:p,getVelocity:x,isTracking:s,isScrolling:r,updateConfig:H,enableCompression:N,disableCompression:z,isCompressed:v,isWindowMode:n,updateContainerHeight:Y0,destroy:X0}},o0=(j)=>{let X=null,Q=null,J=(...K)=>{if(Q=K,X===null)X=requestAnimationFrame(()=>{if(X=null,Q)j(...Q)})};return J.cancel=()=>{if(X!==null)cancelAnimationFrame(X),X=null},J};var uj=0.65,gj=0.5,xj=0.95,mj=0.1,dj=5,cj=100,i2=()=>{let j=null,X=0,Q=!1,J=0,K=null,q=0,Y=0,B=null,V=[];return{name:"withScale",priority:20,setup(Z){let{dom:D,config:A}=Z,{classPrefix:O,horizontal:T}=A,G=()=>{let P=Z.getVirtualTotal(),$=V0(P,Z.sizeCache);if($.isCompressed&&!Q){Q=!0,Z.scrollController.enableCompression($),Z.updateContentSize($.virtualSize),Z.setScrollFns(()=>X,(z)=>{if(X=z,J=z,K!==null)cancelAnimationFrame(K),K=null});let _=()=>{let z=J-X;if(Math.abs(z)<gj)X=J,K=null;else X+=z*uj,K=requestAnimationFrame(_);Z.scrollController.scrollTo(X)},U=D.viewport,W=(z)=>{z.preventDefault();let d=Z.getCachedCompression().virtualSize-Z.state.viewportState.containerSize;if(J=Math.max(0,Math.min(J+z.deltaY,d)),K===null)K=requestAnimationFrame(_)};U.addEventListener("wheel",W,{passive:!1});let E=()=>{if(B!==null)cancelAnimationFrame(B),B=null},b=(z)=>{if(E(),K!==null)cancelAnimationFrame(K),K=null;let g=z.touches[0];if(!g)return;let d=T?g.clientX:g.clientY;q=d,Y=X,V=[{time:performance.now(),y:d}]},w=(z)=>{z.preventDefault();let g=z.touches[0];if(!g)return;let d=T?g.clientX:g.clientY,k=performance.now();if(V.push({time:k,y:d}),V.length>dj)V.shift();let C=q-d,p=Z.getCachedCompression().virtualSize-Z.state.viewportState.containerSize,H=Math.max(0,Math.min(Y+C,p));X=H,J=H,Z.scrollController.scrollTo(H)},h=(z)=>{let g=performance.now(),d=V.filter((p)=>g-p.time<cj),k=0;if(d.length>=2){let p=d[0],H=d[d.length-1],v=H.time-p.time;if(v>0)k=(p.y-H.y)/v}if(V=[],Math.abs(k)<mj)return;let C=k*16,I=()=>{if(C*=xj,Math.abs(C)<0.5){B=null;return}let H=Z.getCachedCompression().virtualSize-Z.state.viewportState.containerSize,v=X+C;if(v=Math.max(0,Math.min(v,H)),v<=0&&C<0||v>=H&&C>0){X=v,J=v,Z.scrollController.scrollTo(v),B=null;return}X=v,J=v,Z.scrollController.scrollTo(v),B=requestAnimationFrame(I)};B=requestAnimationFrame(I)};if(U.addEventListener("touchstart",b,{passive:!0}),U.addEventListener("touchmove",w,{passive:!1}),U.addEventListener("touchend",h,{passive:!0}),U.addEventListener("touchcancel",h,{passive:!0}),Z.destroyHandlers.push(()=>{if(U.removeEventListener("wheel",W),U.removeEventListener("touchstart",b),U.removeEventListener("touchmove",w),U.removeEventListener("touchend",h),U.removeEventListener("touchcancel",h),E(),K!==null)cancelAnimationFrame(K),K=null}),!D.viewport.querySelector(`.${O}-scrollbar-track`)){if(j=k0(D.viewport,(g)=>Z.scrollController.scrollTo(g),{},O,T),!D.viewport.classList.contains(`${O}-viewport--custom-scrollbar`))D.viewport.classList.add(`${O}-viewport--custom-scrollbar`);j.updateBounds($.virtualSize,Z.state.viewportState.containerSize);let z=j;Z.afterScroll.push((g,d)=>{if(z)z.updatePosition(g),z.show()}),Z.resizeHandlers.push((g,d)=>{if(z){let k=Z.getCachedCompression();z.updateBounds(k.virtualSize,Z.state.viewportState.containerSize)}})}}else if(!$.isCompressed&&Q)Q=!1,Z.scrollController.disableCompression(),Z.updateContentSize($.actualSize);else if($.isCompressed)Z.scrollController.updateConfig({compression:$}),Z.updateContentSize($.virtualSize);if(j)j.updateBounds($.virtualSize,Z.state.viewportState.containerSize);Z.state.cachedCompression={state:$,totalItems:P}};Z.updateCompressionMode=G;let L=Z.getCachedCompression.bind(Z);Z.getCachedCompression=()=>{if(Z.state.cachedCompression)return Z.state.cachedCompression.state;return L()},Z.setVisibleRangeFn((P,$,_,U,W)=>{M=null,y=null;let E=V0(U,_);a0(P,$,_,U,E,W)}),Z.setScrollToPosFn((P,$,_,U,W)=>{let E=V0(U,$);return s0(P,$,_,U,E,W)});let M=null,y=null;Z.setPositionElementFn((P,$)=>{let _=Z.getVirtualTotal(),U=V0(_,Z.sizeCache);if(U.isCompressed){let W=Z.scrollController.getScrollTop();if(M===null||$<y)y=$,M=Math.round(R0($,W,Z.sizeCache,_,Z.state.viewportState.containerSize,U));let E=M+Z.sizeCache.getOffset($)-Z.sizeCache.getOffset(y),b=Z.config.horizontal;P.style.transform=b?`translateX(${E}px)`:`translateY(${E}px)`}else{let W=Math.round(Z.sizeCache.getOffset($)),E=Z.config.horizontal;P.style.transform=E?`translateX(${W}px)`:`translateY(${W}px)`}}),G(),Z.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(B!==null)cancelAnimationFrame(B),B=null}}};var i0=(j={})=>{let{chunkSize:X=100,maxCachedItems:Q=5000,evictionBuffer:J=200,onEvict:K}=j,q=new Map,Y=0,B=0,V=(k)=>{let C=q.get(k);if(!C)C={items:Array(X),count:0,lastAccess:Date.now()},q.set(k,C);else C.lastAccess=Date.now();return C},Z=(k)=>{return Math.floor(k/X)},D=(k)=>{return k%X},A=()=>Y,O=(k)=>{Y=k},T=(k)=>{if(k<0||k>=Y)return;let C=Z(k),I=q.get(C);if(!I)return;return I.items[D(k)]},G=(k)=>{if(k<0||k>=Y)return!1;let C=Z(k),I=q.get(C);if(!I)return!1;return I.items[D(k)]!==void 0},L=(k,C)=>{let I=Z(k),p=V(I),H=D(k),v=p.items[H]===void 0;if(p.items[H]=C,v)p.count++,B++;if(k>=Y)Y=k+1},M=(k,C)=>{for(let I=0;I<C.length;I++){let p=C[I];if(p!==void 0)L(k+I,p)}},y=(k)=>{if(k<0||k>=Y)return!1;let C=Z(k),I=q.get(C);if(!I)return!1;let p=D(k);if(I.items[p]===void 0)return!1;if(I.items[p]=void 0,I.count--,B--,I.count===0)q.delete(C);return!0},P=(k,C)=>{let I=[];for(let p=k;p<=C&&p<Y;p++)I.push(T(p));return I},$=(k,C)=>{for(let I=k;I<=C&&I<Y;I++)if(!G(I))return!1;return!0},_=()=>{let k=[],C=null,I=Array.from(q.keys()).sort((p,H)=>p-H);for(let p of I){let H=q.get(p);if(!H)continue;let v=p*X;for(let x=0;x<X;x++){let s=v+x;if(s>=Y)break;if(H.items[x]!==void 0)if(C===null)C={start:s,end:s};else if(s===C.end+1)C.end=s;else k.push(C),C={start:s,end:s};else if(C!==null)k.push(C),C=null}}if(C!==null)k.push(C);return k},U=(k,C)=>{let I=[],p=null;for(let H=k;H<=C&&H<Y;H++)if(!G(H))if(p===null)p={start:H,end:H};else p.end=H;else if(p!==null)I.push(p),p=null;if(p!==null)I.push(p);return I},W=(k)=>{return q.has(k)},E=(k)=>{let C=q.get(k);if(C)C.lastAccess=Date.now()},b=(k,C)=>{if(k>C||q.size===0)return;let I=Date.now(),p=Z(Math.max(0,k)),H=Z(Math.min(Y-1,C));for(let v=p;v<=H;v++){let x=q.get(v);if(x)x.lastAccess=I}},w=(k,C)=>{if(B<=Q)return 0;let I=Math.max(0,k-J),p=Math.min(Y-1,C+J),H=Z(I),v=Z(p),x=0,s=[];for(let[r,n]of q)if(r<H||r>v)x+=n.count,s.push(r),B-=n.count,q.delete(r);if(x>0&&K)K(x,s);return x},h=()=>{if(B<=Q)return 0;let k=Array.from(q.entries()).sort(([,p],[,H])=>p.lastAccess-H.lastAccess),C=0,I=[];for(let[p,H]of k){if(B<=Q)break;C+=H.count,B-=H.count,I.push(p),q.delete(p)}if(C>0&&K)K(C,I);return C},N=()=>{return{totalItems:Y,cachedItems:B,cachedChunks:q.size,chunkSize:X,maxCachedItems:Q,memoryEfficiency:Y>0?1-B/Y:1}},z=()=>B,g=()=>{q.clear(),B=0};return{chunkSize:X,maxCachedItems:Q,getTotal:A,setTotal:O,get:T,has:G,set:L,setRange:M,delete:y,getRange:P,isRangeLoaded:$,getLoadedRanges:_,findUnloadedRanges:U,getChunkIndex:Z,isChunkLoaded:W,touchChunk:E,touchChunksForRange:b,evictDistant:w,evictToLimit:h,getStats:N,getCachedCount:z,clear:g,reset:()=>{g(),Y=0}}},t0=(j)=>{if(j.length===0)return[];let X=[...j].sort((J,K)=>J.start-K.start),Q=[{...X[0]}];for(let J=1;J<X.length;J++){let K=X[J],q=Q[Q.length-1];if(K.start<=q.end+1)q.end=Math.max(q.end,K.end);else Q.push({...K})}return Q},p0=(j,X,Q)=>{let J=Math.floor(j.start/Q)*Q,K=Math.ceil((j.end+1)/Q)*Q-1,q={start:J,end:K};if(X.length===0)return[q];let Y=[],B=t0(X),V=q.start;for(let Z of B){if(Z.end<V)continue;if(Z.start>q.end)break;if(Z.start>V)Y.push({start:V,end:Math.min(Z.start-1,q.end)});if(V=Z.end+1,V>q.end)break}if(V<=q.end)Y.push({start:V,end:q.end});return Y};var e0=(j={})=>{let{enabled:X=!0,maskCharacter:Q="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:q}=j,Y=null,B=!1,V=0,Z=(y)=>{if(!X||B||y.length===0)return;let P=new Map,$=new Map,_=Math.min(y.length,K);for(let U=0;U<_;U++){let W=y[U];if(!W||typeof W!=="object")continue;for(let[E,b]of Object.entries(W)){if(E.startsWith("_")||E==="id")continue;if(!$.has(E))$.set(E,{lengths:[],types:new Set});let w=$.get(E),h=Array.isArray(b)?"array":typeof b;if(w.types.add(h),typeof b==="string")w.lengths.push(b.length);else if(b!==null&&b!==void 0)w.lengths.push(String(b).length)}}for(let[U,W]of $){if(W.lengths.length===0)continue;let E=Math.min(...W.lengths),b=Math.max(...W.lengths),w=Math.round(W.lengths.reduce((N,z)=>N+z,0)/W.lengths.length),h="string";if(W.types.has("number")&&W.types.size===1)h="number";else if(W.types.has("boolean")&&W.types.size===1)h="boolean";else if(W.types.has("array"))h="array";else if(W.types.has("object")&&!W.types.has("string"))h="object";P.set(U,{minLength:E,maxLength:b,avgLength:w,type:h})}Y=P,B=!0},D=()=>B,A=(y)=>{let P=y.avgLength;if(J&&y.minLength!==y.maxLength){if(P=Math.floor(Math.random()*(y.maxLength-y.minLength+1)+y.minLength),Math.random()<0.3)P=Math.max(1,P+Math.floor(Math.random()*3)-1)}return Q.repeat(Math.max(1,P))},O=(y)=>{if(q)return{...q(y),["_isPlaceholder"]:!0};let P={id:`__placeholder_${V++}`,["_isPlaceholder"]:!0,_index:y};if(!Y||Y.size===0)return P.label=Q.repeat(12),P;for(let[$,_]of Y)switch(_.type){case"string":P[$]=A(_);break;case"number":P[$]=0;break;case"boolean":P[$]=!1;break;case"array":P[$]=[];break;case"object":P[$]={};break;default:P[$]=A(_)}return P};return{analyzeStructure:Z,hasAnalyzedStructure:D,generate:O,generateRange:(y,P)=>{let $=[];for(let _=y;_<=P;_++)$.push(O(_));return $},isPlaceholder:(y)=>{if(!y||typeof y!=="object")return!1;return y._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{Y=null,B=!1,V=0}}},H0=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},W2=(j)=>{return j.filter((X)=>!H0(X))};var aj=50,j2=(j={})=>{let{adapter:X,initialItems:Q,initialTotal:J,storage:K,placeholder:q,pageSize:Y=aj,onStateChange:B,onItemsLoaded:V,onItemsEvicted:Z}=j,D=i0({...K,onEvict:(S,u)=>{Z?.(S),U()}}),A=null,O=()=>{if(!A)A=e0(q);return A},T=new Map,G=!1,L,M=!0,y,P=[],$=0,_=new Map,U=()=>{B?.(d())},W=()=>{T.clear();let S=D.getLoadedRanges();for(let u of S)for(let t=u.start;t<=u.end;t++){let j0=D.get(t);if(j0&&!H0(j0))T.set(j0.id,t)}},E=(S,u)=>{if(!H0(u))T.set(u.id,S)},b=(S)=>{T.delete(S)},w=(S,u)=>{return`${S}-${u}`},h=()=>D.getTotal(),N=()=>D.getCachedCount(),z=()=>G,g=()=>M,d=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:G,pendingRanges:P,error:L,hasMore:M,cursor:y}),k=()=>D,C=()=>O(),I=(S)=>{let u=D.get(S);if(u!==void 0)return u;if(S>=0&&S<D.getTotal())return O().generate(S);return},p=(S)=>{let u=T.get(S);if(u===void 0)return;return D.get(u)},H=(S)=>{return T.get(S)??-1},v=(S)=>{let u=D.get(S);return u!==void 0&&!H0(u)},x=(S,u)=>{let t=[],j0=D.getTotal(),Z0=0,B0=0;D.touchChunksForRange(S,Math.min(u,j0-1));for(let _0=S;_0<=u&&_0<j0;_0++){let Q0=D.get(_0);if(Q0!==void 0)t.push(Q0),Z0++;else t.push(O().generate(_0)),B0++}return t},s=(S)=>{D.setTotal(S),M=D.getCachedCount()<S,U()},r=(S,u=0,t)=>{if(A&&!A.hasAnalyzedStructure()&&S.length>0)A.analyzeStructure(S);for(let j0=0;j0<S.length;j0++){let Z0=S[j0];if(Z0!==void 0){let B0=u+j0;D.set(B0,Z0),E(B0,Z0)}}if(t!==void 0)D.setTotal(t);else if(u+S.length>D.getTotal())D.setTotal(u+S.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)M=!1;V?.(S,u,D.getTotal()),U()},n=(S,u)=>{let t=T.get(S);if(t===void 0)return!1;let j0=D.get(t);if(!j0)return!1;let Z0={...j0,...u};if(D.set(t,Z0),u.id!==void 0&&u.id!==S)b(S),E(t,Z0);return U(),!0},Y0=(S)=>{let u=T.get(S);if(u===void 0)return!1;D.delete(u),b(S);let t=D.getTotal();if(t>0)D.setTotal(t-1);return U(),!0},X0=async(S,u)=>{if(!X)return;let t=w(S,u);if(_.has(t))return;let j0=D.getLoadedRanges(),Z0=p0({start:S,end:u},j0,D.chunkSize);if(Z0.length===0)return;let B0=D.chunkSize,_0=[];for(let U0 of Z0){let O0=Math.floor(U0.start/B0),b0=Math.floor(U0.end/B0);for(let D0=O0;D0<=b0;D0++){let M0=D0*B0,W0=M0+B0-1,E0=w(M0,W0);if(!_0.some((F0)=>F0.start===M0)&&!_.has(E0))_0.push({start:M0,end:W0})}}let Q0=[];for(let U0 of Z0){let O0=Math.floor(U0.start/B0),b0=Math.floor(U0.end/B0);for(let D0=O0;D0<=b0;D0++){let M0=D0*B0,W0=M0+B0-1,E0=w(M0,W0);if(_.has(E0)){let F0=_.get(E0);if(!Q0.includes(F0))Q0.push(F0)}}}for(let U0 of _0){let O0=w(U0.start,U0.end),b0=(async()=>{P.push(U0),G=!0,L=void 0,U();try{let D0=U0.end-U0.start+1,M0={offset:U0.start,limit:D0,cursor:void 0},W0=await X.read(M0);if(r(W0.items,U0.start,W0.total),W0.cursor)y=W0.cursor;let E0=U0.start+W0.items.length;if(E0>=$){if($=E0,W0.hasMore!==void 0)M=W0.hasMore;else if(W0.total!==void 0)M=E0<W0.total}}catch(D0){L=D0 instanceof Error?D0:Error(String(D0))}finally{_.delete(O0),P=P.filter((D0)=>D0.start!==U0.start||D0.end!==U0.end),G=_.size>0,U()}})();_.set(O0,b0),Q0.push(b0)}await Promise.all(Q0)},R=async(S,u)=>{if(D.isRangeLoaded(S,u))return;await X0(S,u)},c=async()=>{if(!X)return;await X0(0,Y-1)},l=async()=>{if(!X||G||!M)return!1;let S=D.getCachedCount(),u=D.getTotal(),t=S,j0=Math.min(t+Y-1,u>0?u-1:t+Y-1);if(t>=u&&u>0)return M=!1,!1;return await X0(t,j0),D.getCachedCount()>S},K0=async()=>{if(D.clear(),T.clear(),A)A.clear();_.clear(),P=[],G=!1,y=void 0,M=!0,$=0,L=void 0,U()},o=(S,u)=>{if(D.evictDistant(S,u)>0)W()},J0=()=>{D.clear(),T.clear(),y=void 0,L=void 0,P=[],G=!1,U()},G0=()=>{if(D.reset(),T.clear(),A)A.clear();y=void 0,M=!0,$=0,L=void 0,P=[],G=!1,U()};if(Q&&Q.length>0)r(Q,0,J??Q.length);else if(J!==void 0)D.setTotal(J);return{getState:d,getTotal:h,getCached:N,getIsLoading:z,getHasMore:g,getStorage:k,getPlaceholders:C,getItem:I,getItemById:p,getIndexById:H,isItemLoaded:v,getItemsInRange:x,setTotal:s,setItems:r,updateItem:n,removeItem:Y0,loadRange:X0,ensureRange:R,loadInitial:c,loadMore:l,reload:K0,evictDistant:o,clear:J0,reset:G0}};var t2=(j)=>{let{adapter:X,loading:Q}=j,J=Q?.cancelThreshold??g2,K=Q?.preloadThreshold??x2,q=Q?.preloadAhead??m2;return{name:"withAsync",priority:20,methods:["reload"],setup(Y){let{emitter:B}=Y,V=Y.config.reverse,Z=j2({adapter:X,pageSize:I0,onStateChange:()=>{if(Y.state.isInitialized){Y.sizeCache.rebuild(Y.getVirtualTotal()),Y.updateCompressionMode();let M=Y.getCachedCompression();Y.state.viewportState.totalSize=M.virtualSize,Y.state.viewportState.actualSize=M.actualSize,Y.state.viewportState.isCompressed=M.isCompressed,Y.state.viewportState.compressionRatio=M.ratio,Y.updateContentSize(M.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(M,y,P)=>{if(Y.state.isInitialized)Y.sizeCache.rebuild(Y.getVirtualTotal()),Y.forceRender(),B.emit("load:end",{items:M,total:P})}});Y.replaceDataManager(Z);let D=null,A=null,O=0,T=()=>{if(A){let M=A;A=null,Y.dataManager.ensureRange(M.start,M.end).catch((y)=>{B.emit("error",{error:y,context:"ensureRange"})})}};Y.afterScroll.push((M,y)=>{if(Y.state.isDestroyed)return;let P=Y.scrollController.getVelocity(),_=Y.scrollController.isTracking()&&P<=J;if(A&&O>J&&P<=J){let E=A;A=null,Y.dataManager.ensureRange(E.start,E.end).catch((b)=>{B.emit("error",{error:b,context:"ensureRange"})})}if(O=P,_&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(V){if(M<D2)B.emit("load:start",{offset:Y.dataManager.getCached(),limit:I0}),Y.dataManager.loadMore().catch((E)=>{B.emit("error",{error:E,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-M-Y.state.viewportState.containerSize<D2)B.emit("load:start",{offset:Y.dataManager.getCached(),limit:I0}),Y.dataManager.loadMore().catch((b)=>{B.emit("error",{error:b,context:"loadMore"})})}let{renderRange:U}=Y.state.viewportState;if(!D||U.start!==D.start||U.end!==D.end)if(D={start:U.start,end:U.end},_){A=null;let{start:E,end:b}=U,w=Y.getVirtualTotal();if(P>K)if(y==="down")b=Math.min(U.end+q,w-1);else E=Math.max(U.start-q,0);Y.dataManager.ensureRange(E,b).catch((h)=>{B.emit("error",{error:h,context:"ensureRange"})})}else A={start:U.start,end:U.end}});let G=200,L=null;Y.afterScroll.push((M,y)=>{if(L!==null)clearTimeout(L);L=setTimeout(()=>{L=null,T()},G)}),Y.destroyHandlers.push(()=>{if(L!==null)clearTimeout(L),L=null}),B.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),B.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("reload",async()=>{D=null,A=null,Y.invalidateRendered(),await Y.dataManager.reload(),Y.forceRender();let{renderRange:M}=Y.state.viewportState;if(M.end>0)await Y.dataManager.ensureRange(M.start,M.end)}),B.emit("load:start",{offset:0,limit:I0}),Y.dataManager.loadInitial().catch((M)=>{B.emit("error",{error:M,context:"loadInitial"})})}}};var e2=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:Q,state:J,config:K,emitter:q}=X;Q.root.style.overflow="visible",Q.root.style.height="auto",Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let Z=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Z.left);else return Math.max(0,-Z.top)},(Z)=>{let D=Q.viewport.getBoundingClientRect();if(K.horizontal){let A=D.left+window.scrollX;window.scrollTo(A+Z,window.scrollY)}else{let A=D.top+window.scrollY;window.scrollTo(window.scrollX,A+Z)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerSize=window.innerHeight;let{innerHeight:Y,innerWidth:B}=window,V=()=>{let{innerWidth:Z,innerHeight:D}=window,A=K.horizontal?Z:D,O=K.horizontal?B:Y;if(Math.abs(A-O)<=1)return;Y=D,B=Z,J.viewportState.containerSize=D,q.emit("resize",{width:Z,height:D});for(let T=0;T<X.resizeHandlers.length;T++)X.resizeHandlers[T](Z,D);X.renderIfNeeded()};window.addEventListener("resize",V,{passive:!0}),j=()=>{window.removeEventListener("resize",V)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var G2=(j,X)=>{let Q=0,J=j.length-1;while(Q<J){let K=Q+J+1>>>1;if(j[K].headerLayoutIndex<=X)Q=K;else J=K-1}return Q},jj=(j,X)=>{let Q=0,J=j.length-1;while(Q<J){let K=Q+J+1>>>1;if(j[K].firstDataIndex<=X)Q=K;else J=K-1}return Q},Jj=(j,X)=>{if(j===0)return[];let Q=[],J=X(0),K=0,q=0;for(let Y=1;Y<j;Y++){let B=X(Y);if(B!==J){let V=Y-K;Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:V}),q=q+1+V,J=B,K=Y}}return Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:j-K}),Q},h0=(j,X)=>{if(j.length===0||X.length===0)return[];let Q=j.length+X.length,J=Array(Q),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 Y=0;Y<q.count;Y++)J[K]=j[q.firstDataIndex+Y],K++}return J},u0=(j,X)=>{let Q=typeof X==="number"?(J)=>X:X;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},J2=(j,X)=>{let Q=Jj(j,X.getGroupForIndex),J=j+Q.length,K=X.headerHeight;return{get totalEntries(){return J},get groupCount(){return Q.length},get groups(){return Q},getEntry:(O)=>{if(Q.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let T=G2(Q,O),G=Q[T];if(O===G.headerLayoutIndex)return{type:"header",group:G};let L=O-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+L,group:G}},layoutToDataIndex:(O)=>{if(Q.length===0)return O;let T=G2(Q,O),G=Q[T];if(O===G.headerLayoutIndex)return-1;let L=O-G.headerLayoutIndex-1;return G.firstDataIndex+L},dataToLayoutIndex:(O)=>{if(Q.length===0)return O;let T=jj(Q,O),G=Q[T],L=O-G.firstDataIndex;return G.headerLayoutIndex+1+L},getGroupAtLayoutIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=G2(Q,O);return Q[T]},getGroupAtDataIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=jj(Q,O);return Q[T]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let T=Q[O];if(!T)return 0;return K(T.key,O)},rebuild:(O)=>{Q=Jj(O,X.getGroupForIndex),J=O+Q.length}}};var Q2=(j,X,Q,J,K,q=!1)=>{let Y=document.createElement("div");if(Y.className=`${K}-sticky-header`,Y.setAttribute("role","presentation"),Y.setAttribute("aria-hidden","true"),Y.style.position="absolute",Y.style.zIndex="5",Y.style.pointerEvents="none",Y.style.willChange="transform",Y.style.overflow="hidden",q)Y.style.top="0",Y.style.bottom="0",Y.style.left="0";else Y.style.top="0",Y.style.left="0",Y.style.right="0";j.insertBefore(Y,j.firstChild);let B=-1,V=!1,Z=0,D=(M)=>{if(M===B)return;B=M;let y=X.groups;if(M<0||M>=y.length){Y.textContent="";return}let P=y[M],$=J.headerTemplate(P.key,P.groupIndex),_=X.getHeaderHeight(M);if(q)Y.style.width=`${_}px`;else Y.style.height=`${_}px`;if(typeof $==="string")Y.innerHTML=$;else Y.replaceChildren($)},A=(M)=>{let y=X.groups;if(y.length===0){T();return}let P=0;for(let E=y.length-1;E>=0;E--)if(Q.getOffset(y[E].headerLayoutIndex)<=M){P=E;break}let $=Q.getOffset(y[0].headerLayoutIndex);if(M<$){T();return}if(!V)O();D(P);let _=X.getHeaderHeight(P),U=0,W=P+1;if(W<y.length){let b=Q.getOffset(y[W].headerLayoutIndex)-M;if(b<_)U=b-_}if(U!==Z)if(Z=U,U===0)Y.style.transform="";else{let E=Math.round(U);Y.style.transform=q?`translateX(${E}px)`:`translateY(${E}px)`}},O=()=>{if(V)return;V=!0,Y.style.display=""},T=()=>{if(!V)return;V=!1,Y.style.display="none",B=-1,Z=0,Y.style.transform=""},G=()=>{let M=B;if(B=-1,M>=0)D(M)},L=()=>{Y.remove(),B=-1,V=!1};return Y.style.display="none",{update:A,refresh:G,show:O,hide:T,destroy:L}};var Qj=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;let Y=Q.indexAtOffset(j),B=Q.indexAtOffset(j+X);if(B<J-1)B++;return q.start=Math.max(0,Y),q.end=Math.min(J-1,Math.max(0,B)),q},Xj=(j,X,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X),J},qj=(j,X,Q,J,K,q)=>{if(J===0)return 0;let Y=Math.max(0,Math.min(j,J-1)),B=X.getOffset(Y),V=X.getSize(Y),Z=X.getTotalSize(),D=Math.max(0,Z-Q),A;switch(q){case"center":A=B-Q/2+V/2;break;case"end":A=B-Q+V;break;case"start":default:A=B;break}return Math.max(0,Math.min(A,D))},Yj=(j,X,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return X.getTotalSize()},Kj=(j,X)=>{return X.getTotalSize()},Zj=(j,X)=>{return X.getOffset(j)},Bj=(j,X,Q)=>{let J=Math.max(0,X-Q);return Math.max(0,Math.min(j,J))};var T0=(j,X,Q,J,K="start",q,Y=qj)=>{return Y(j,X,Q,J,q,K)},Uj=(j,X)=>{return j.start===X.start&&j.end===X.end},Nj=(j,X)=>{return j>=X.start&&j<=X.end},Dj=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var Wj=(j,X)=>{let Q=[],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)Q.push(K);return{add:Q,remove:J}};r0();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 X=null,Q=null,J=[],K=[];return{name:"withSections",priority:10,setup(q){let{dom:Y,config:B,rawConfig:V}=q,{classPrefix:Z}=B,A=V.item.height;J=V.items?[...V.items]:[];let O=J.length,T={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=J2(O,T),K=h0(J,X.groups);let G=u0(X,A);q.setSizeConfig(G),q.rebuildSizeCache(K.length),q.dataManager.setItems(K,0,K.length);let L=V.item.template,{headerTemplate:M}=j,y=(b,w,h)=>{if(P0(b))return M(b.groupKey,b.groupIndex);return L(b,w,h)},P=q.methods.get("_getGridLayout"),$=q.methods.get("_replaceGridRenderer"),_=q.methods.get("_updateGridLayoutForGroups");if(P&&$){if(_)_((N)=>{let z=K[N];return!!(z&&P0(z))});let{createGridRenderer:b}=(X2(),Cj(Gj)),w=P(),h=b(Y.items,y,q.sizeCache,w,Z,q.getContainerWidth(),()=>q.dataManager.getTotal(),B.ariaIdPrefix);$(h)}else q.replaceTemplate(y);if(Y.root.classList.add(`${Z}--grouped`),j.sticky!==!1){Q=Q2(Y.root,X,q.sizeCache,{...T,sticky:T.sticky??!1},Z,B.horizontal);let b=Q;q.afterScroll.push((w,h)=>{b.update(w)}),Q.update(q.scrollController.getScrollTop())}let U=()=>{if(!X)return;X.rebuild(J.length),K=h0(J,X.groups);let b=u0(X,A);if(q.setSizeConfig(b),q.rebuildSizeCache(K.length),q.dataManager.setItems(K,0,K.length),Q)Q.refresh()};q.methods.set("setItems",(b)=>{J=[...b],U()}),q.methods.set("appendItems",(b)=>{J=[...J,...b],U()}),q.methods.set("prependItems",(b)=>{J=[...b,...J],U()}),q.methods.set("removeItem",(b)=>{J=J.filter((w)=>w.id!==b),U()});let{animateScroll:W,cancelScroll:E}=nj(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(b,w)=>{let h=X.dataToLayoutIndex(b),{align:N,behavior:z,duration:g}=oj(w),d=q.dataManager.getTotal(),k=T0(h,q.sizeCache,q.state.viewportState.containerSize,d,N,q.getCachedCompression());if(z==="smooth")W(q.scrollController.getScrollTop(),k,g);else E(),q.scrollController.scrollTo(k)}),q.methods.set("_getItems",()=>J),q.methods.set("_getTotal",()=>J.length),q.destroyHandlers.push(()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null;if(Q)Q.destroy(),Q=null;Y.root.classList.remove(`${Z}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}},_2=300,rj=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,L0=null,nj=(j,X)=>{let Q=()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null};return{animateScroll:(K,q,Y)=>{if(Q(),Math.abs(q-K)<1){j.scrollTo(q);return}let B=performance.now(),V=(Z)=>{let D=Z-B,A=Math.min(D/Y,1),O=K+(q-K)*rj(A);if(j.scrollTo(O),X(),A<1)L0=requestAnimationFrame(V);else L0=null};L0=requestAnimationFrame(V)},cancelScroll:Q}},oj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:_2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??_2};return{align:"start",behavior:"auto",duration:_2}};var q2=(j)=>{let X=Math.max(1,Math.floor(j.columns)),Q=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},q=(G)=>{if(G<=0)return 0;if(!J)return Math.ceil(G/X);let L=0,M=0,y=0;for(let P=0;P<G;P++)if(J(P)){if(y++,M>0)L++,M=0;L++,M=0}else if(M++,M>=X)L++,M=0;if(M>0)L++;return L},Y=(G)=>{return K.row=B(G),K.col=V(G),K},B=(G)=>{if(!J)return Math.floor(G/X);let L=0,M=0;for(let y=0;y<=G;y++)if(J(y)){if(M>0)L++,M=0;if(y===G)return L;L++,M=0}else{if(y===G)return L;if(M++,M>=X)L++,M=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${L}`),L},V=(G)=>{if(!J)return G%X;if(J(G))return 0;let L=0;for(let M=0;M<=G;M++)if(J(M))L=0;else{if(M===G)return L;if(L++,L>=X)L=0}return L},Z=(G,L,M)=>{if(M<=0)return{start:0,end:-1};if(!J){let U=Math.max(0,G*X),W=Math.min(M-1,(L+1)*X-1);return{start:U,end:W}}let y=-1,P=-1,$=0,_=0;for(let U=0;U<M;U++){if(J(U)){if(_>0)$++,_=0;if($>=G&&$<=L){if(y===-1)y=U;P=U}$++,_=0}else{if($>=G&&$<=L){if(y===-1)y=U;P=U}if(_++,_>=X)$++,_=0}if($>L&&_===0)break}if(y===-1)return{start:0,end:-1};return{start:y,end:P}},D=(G,L,M)=>{if(L<0||L>=X)return-1;let y=G*X+L;if(y<0||y>=M)return-1;return y},A=(G)=>{let L=(X-1)*Q;return Math.max(0,(G-L)/X)};return{get columns(){return X},get gap(){return Q},update:(G)=>{if(G.columns!==void 0)X=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)Q=G.gap;if(G.isHeaderFn!==void 0)J=G.isHeaderFn},getTotalRows:q,getPosition:Y,getRow:B,getCol:V,getItemRange:Z,getItemIndex:D,getColumnWidth:A,getColumnOffset:(G,L)=>{let M=A(L);return G*(M+Q)}}};X2();var Vj=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,Q=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:q,config:Y,rawConfig:B}=J,{classPrefix:V}=Y;if(Y.horizontal)throw Error("[vlist/builder] withGrid cannot be used with orientation: 'horizontal'");if(Y.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Z=B.items?.some((_)=>_.__groupHeader===!0),D={columns:j.columns,gap:j.gap??0};if(Z)D.isHeaderFn=(_)=>{let U=J.dataManager.getItem(_);return!!(U&&U.__groupHeader===!0)};X=q2(D);let A=X.gap;J.setVirtualTotalFn(()=>{let _=J.dataManager.getTotal();return X.getTotalRows(_)});let O=B.item,T=Y.horizontal?O.width:O.height,G={containerWidth:J.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof T==="function")J.setSizeConfig((_)=>{let U=G.containerWidth-2,W=(G.columns-1)*G.gap,E=(U-W)/G.columns,b={containerWidth:G.containerWidth,columns:G.columns,gap:G.gap,columnWidth:E,row:X.getRow(_),column:X.getCol(_),totalRows:X.getTotalRows(J.dataManager.getTotal()),totalColumns:G.columns};return T(_,b)+G.gap});else if(A>0)J.setSizeConfig(T+A);J.rebuildSizeCache(),K.root.classList.add(`${V}--grid`);let L=J.getContainerWidth(),M=B.item.template,y=()=>{Q=g0(K.items,M,J.sizeCache,X,V,L,()=>J.dataManager.getTotal(),Y.ariaIdPrefix),J.replaceRenderer(Q)};y(),J.methods.set("_getGridLayout",()=>X),J.methods.set("_getGridConfig",()=>D),J.methods.set("_replaceGridRenderer",(_)=>{Q=_}),J.methods.set("_updateGridLayoutForGroups",(_)=>{X.update({isHeaderFn:_});let U=J.dataManager.getTotal(),W=0;for(let E=0;E<U;E++)if(X.getCol(E)===0){let b=J.sizeCache.getSize(E);W+=b}J.sizeCache.getTotalSize=()=>W,J.dom.content.style.height=`${W}px`,y()}),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");D.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");D.gap=_.gap}if(X)X.update(D);let U=J.getContainerWidth();if(G.containerWidth=U,G.columns=D.columns,G.gap=D.gap??0,Q)Q.updateContainerWidth(U);J.rebuildSizeCache(),J.updateContentSize(J.sizeCache.getTotalSize()),J.updateCompressionMode();for(let W=0;W<J.contentSizeHandlers.length;W++)J.contentSizeHandlers[W]();if(Q)Q.clear();J.forceRender()});let P=()=>{if(J.state.isDestroyed)return;let _=J.scrollController.getScrollTop(),U=J.state.viewportState.containerSize,W=J.getVirtualTotal(),E={start:0,end:0};if(W===0||U===0)E.start=0,E.end=0;else{E.start=Math.max(0,J.sizeCache.indexAtOffset(_));let C=J.sizeCache.indexAtOffset(_+U);if(C<W-1)C++;E.end=Math.min(W-1,Math.max(0,C))}let b=Y.overscan??3,w={start:Math.max(0,E.start-b),end:Math.min(W-1,E.end+b)};J.state.viewportState.scrollPosition=_,J.state.viewportState.visibleRange=E,J.state.viewportState.renderRange=w;let h=J.state.lastRenderRange,N=J.state.viewportState.isCompressed;if(w.start===h.start&&w.end===h.end){if(N)Q.updatePositions(J.getCompressionContext());return}let z=J.dataManager.getTotal(),g=X.getItemRange(w.start,w.end,z),d=J.dataManager.getItemsInRange(g.start,g.end),k=N?J.getCompressionContext():void 0;Q.render(d,g,new Set,-1,k),J.state.lastRenderRange={...w},q.emit("range:change",{range:w})},$=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},P()};if(J.setRenderFns(P,$),J.resizeHandlers.push((_,U)=>{if(Q)Q.updateContainerWidth(_)}),J.methods.set("scrollToIndex",(_,U)=>{let W=Math.floor(_/j.columns),{align:E,behavior:b}=ij(U),w=J.dataManager.getState(),h=X.getTotalRows(w.total),N=Math.max(0,Math.min(W,h-1)),z=T0(N,J.sizeCache,J.state.viewportState.containerSize,h,E,J.getCachedCompression());if(b==="smooth")J.scrollController.scrollTo(z);else J.scrollController.scrollTo(z)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${V}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}},V2=300,ij=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:V2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??V2};return{align:"start",behavior:"auto",duration:V2}};X2();var Y2=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),x0=(j,X,Q)=>{if(Q==="none")return j;let J=new Set(j.selected);if(Q==="single"){if(J.clear(),X.length>0)J.add(X[0])}else for(let K of X)J.add(K);return{...j,selected:J}},m0=(j,X)=>{let Q=new Set(j.selected);for(let J of X)Q.delete(J);return{...j,selected:Q}},C0=(j,X,Q)=>{if(Q==="none")return j;if(j.selected.has(X))return m0(j,[X]);else return x0(j,[X],Q)},K2=(j,X,Q)=>{if(Q!=="multiple")return j;return{...j,selected:new Set(X.map((J)=>J.id))}},Z2=(j)=>({...j,selected:new Set}),M2=(j,X)=>{return j.focusedIndex=X,j},A2=(j,X,Q=!0)=>{if(X===0)return j;let J=j.focusedIndex-1;if(J<0)J=Q?X-1:0;return j.focusedIndex=J,j},E2=(j,X,Q=!0)=>{if(X===0)return j;let J=j.focusedIndex+1;if(J>=X)J=Q?0:X-1;return j.focusedIndex=J,j},F2=(j,X)=>{if(X===0)return j;return j.focusedIndex=0,j},L2=(j,X)=>{if(X===0)return j;return j.focusedIndex=X-1,j};var Mj=(j,X)=>{return j.selected.has(X)},z0=(j)=>{return Array.from(j.selected)},v0=(j,X)=>{let Q=[];for(let J of j.selected){let K=X(J);if(K)Q.push(K)}return Q};var Aj=(j)=>{let X=j?.mode??"single",Q=j?.initial,J=Y2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:Y,emitter:B,config:V}=q,{classPrefix:Z,ariaIdPrefix:D}=V;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 A=new Map,O=()=>{A.clear();let _=q.dataManager.getTotal();for(let U=0;U<_;U++){let W=q.dataManager.getItem(U);if(W)A.set(W.id,U)}};O();let{renderIfNeeded:T,forceRender:G}=q.getRenderFns(),L=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((U)=>{let W=U,E=W.dataset.id;if(E!==void 0){let b=/^\d+$/.test(E)?parseInt(E,10):E,w=J.selected.has(b),N=parseInt(W.dataset.index??"-1",10)===J.focusedIndex;W.classList.toggle(`${Z}-item--selected`,w),W.classList.toggle(`${Z}-item--focused`,N),W.ariaSelected=w?"true":"false"}})},M=()=>{if(q.state.isDestroyed)return;T(),L()},y=()=>{if(q.state.isDestroyed)return;G(),L()};q.setRenderFns(M,y);let P=()=>{L();let _=(U)=>{let W=A.get(U);if(W===void 0)return;return q.dataManager.getItem(W)};B.emit("selection:change",{selected:z0(J),items:v0(J,_)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Z}-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",Y.root.appendChild(K);let $=K;B.on("selection:change",({selected:_})=>{let U=_.length;if(U===0)$.textContent="";else if(U===1)$.textContent="1 item selected";else $.textContent=`${U} items selected`}),q.clickHandlers.push((_)=>{if(q.state.isDestroyed)return;let W=_.target.closest("[data-index]");if(!W)return;let E=parseInt(W.dataset.index??"-1",10);if(E<0)return;let b=q.dataManager.getItem(E);if(!b)return;B.emit("item:click",{item:b,index:E,event:_}),J=M2(J,E),Y.root.setAttribute("aria-activedescendant",`${D}-item-${E}`),J=C0(J,b.id,X),P()}),q.keydownHandlers.push((_)=>{if(q.state.isDestroyed)return;let U=q.dataManager.getTotal(),W=J.focusedIndex,E=!1,b=!1,w=J;switch(_.key){case"ArrowUp":w=A2(J,U),E=!0,b=!0;break;case"ArrowDown":w=E2(J,U),E=!0,b=!0;break;case"Home":w=F2(J,U),E=!0,b=!0;break;case"End":w=L2(J,U),E=!0,b=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let h=q.dataManager.getItem(J.focusedIndex);if(h)w=C0(J,h.id,X);E=!0}break}if(E){_.preventDefault(),J=w;let h=J.focusedIndex;if(h>=0){let N=q.dataManager.getState(),z=T0(h,q.sizeCache,q.state.viewportState.containerSize,N.total,"center",q.getCachedCompression());q.scrollController.scrollTo(z),Y.root.setAttribute("aria-activedescendant",`${D}-item-${h}`)}else Y.root.removeAttribute("aria-activedescendant");if(b){let{selected:N}=J;if(W>=0&&W!==h){let z=q.dataManager.getItem(W);if(z)q.renderer.updateItemClasses(W,N.has(z.id),!1)}if(h>=0){let z=q.dataManager.getItem(h);if(z)q.renderer.updateItemClasses(h,N.has(z.id),!0)}}else{y();let N=(z)=>{let g=A.get(z);if(g===void 0)return;return q.dataManager.getItem(g)};B.emit("selection:change",{selected:z0(J),items:v0(J,N)})}}}),q.methods.set("select",(..._)=>{J=x0(J,_,X),P()}),q.methods.set("deselect",(..._)=>{J=m0(J,_),P()}),q.methods.set("toggleSelect",(_)=>{J=C0(J,_,X),P()}),q.methods.set("selectAll",()=>{if(X!=="multiple")return;let _=q.getAllLoadedItems();J=K2(J,_,X),O(),P()}),q.methods.set("clearSelection",()=>{J=Z2(J);let{renderRange:_,isCompressed:U}=q.state.viewportState,W=q.getItemsForRange(_),E=U?q.getCompressionContext():void 0;q.renderer.render(W,_,J.selected,J.focusedIndex,E),B.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return z0(J)}),q.methods.set("getSelectedItems",()=>{return v0(J,(U)=>{let W=A.get(U);if(W===void 0)return;return q.dataManager.getItem(W)})}),q.destroyHandlers.push(()=>{if($&&$.parentNode)$.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var Ej=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let X=j.scrollController.getScrollTop(),Q=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),q=K&&K().length>0?K():void 0;if(J===0){let Z={index:0,offsetInItem:0};if(q)Z.selectedIds=q;return Z}let Y,B;if(Q.isCompressed){let D=X/Q.virtualSize*J;Y=Math.max(0,Math.min(Math.floor(D),J-1)),B=(D-Y)*j.sizeCache.getSize(Y)}else Y=j.sizeCache.indexAtOffset(X),B=X-j.sizeCache.getOffset(Y);B=Math.max(0,B);let V={index:Y,offsetInItem:B};if(q)V.selectedIds=q;return V}),j.methods.set("restoreScroll",(X)=>{let{index:Q,offsetInItem:J,selectedIds:K}=X,q=j.getCachedCompression(),Y=j.getVirtualTotal();if(Y===0)return;let B=Math.max(0,Math.min(Q,Y-1)),V;if(q.isCompressed){let D=j.sizeCache.getSize(B),A=D>0?J/D:0;V=(B+A)/Y*q.virtualSize}else V=j.sizeCache.getOffset(B)+J;let Z=Math.max(0,q.virtualSize-j.state.viewportState.containerSize);if(V=Math.max(0,Math.min(V,Z)),j.scrollController.scrollTo(V),K&&K.length>0){let D=j.methods.get("select");if(D)D(...K)}})}}};export{Ej as withSnapshots,Aj as withSelection,_j as withSections,r2 as withScrollbar,i2 as withScale,e2 as withPage,Vj as withGrid,t2 as withAsync,u2 as vlist,C0 as toggleSelection,Qj as simpleVisibleRange,x0 as selectItems,K2 as selectAll,Uj as rangesEqual,o0 as rafThrottle,l2 as needsScaling,t0 as mergeRanges,Mj as isSelected,P0 as isSectionHeader,H0 as isPlaceholderItem,Nj as isInRange,v0 as getSelectedItems,z0 as getSelectedIds,V0 as getScaleState,s2 as getScaleInfo,V0 as getScale,Dj as getRangeCount,a2 as getMaxItemsWithoutScaling,W2 as filterPlaceholders,Wj as diffRanges,m0 as deselectItems,Q2 as createStickyHeader,i0 as createSparseStorage,$0 as createSizeCache,Y2 as createSelectionState,u0 as createSectionedSizeFn,J2 as createSectionLayout,k0 as createScrollbar,o2 as createScrollController,e0 as createPlaceholderManager,g0 as createGridRenderer,q2 as createGridLayout,l0 as createEmitter,j2 as createAsyncManager,Z2 as clearSelection,Bj as clampScrollPosition,Yj as calculateTotalSize,T0 as calculateScrollToIndex,a0 as calculateScaledVisibleRange,s0 as calculateScaledScrollToIndex,d2 as calculateScaledRenderRange,R0 as calculateScaledItemPosition,Xj as calculateRenderRange,p0 as calculateMissingRanges,Zj as calculateItemOffset,c2 as calculateIndexFromScrollPosition,Kj as calculateActualSize,h0 as buildLayoutItems,y0 as MAX_VIRTUAL_HEIGHT};
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* vlist - Rendering Domain
|
|
3
3
|
* Rendering, virtualization, and scaling for large datasets
|
|
4
4
|
*/
|
|
5
|
-
export {
|
|
5
|
+
export { createSizeCache, countVisibleItems, countItemsFittingFromBottom, getOffsetForVirtualIndex, type SizeCache, } from "./sizes";
|
|
6
6
|
export { createRenderer, createDOMStructure, updateContentHeight, updateContentWidth, resolveContainer, getContainerDimensions, type Renderer, type DOMStructure, type CompressionContext, type CompressedPositionFn, type CompressionStateFn, } from "./renderer";
|
|
7
|
-
export { createViewportState, updateViewportState, updateViewportSize, updateViewportItems, calculateRenderRange,
|
|
7
|
+
export { createViewportState, updateViewportState, updateViewportSize, updateViewportItems, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, getScrollDirection, rangesEqual, isInRange, getRangeCount, diffRanges, getSimpleCompressionState, simpleVisibleRange, simpleScrollToIndex, NO_COMPRESSION, type CompressionState, type VisibleRangeFn, type ScrollToIndexFn, } from "./viewport";
|
|
8
8
|
export { MAX_VIRTUAL_HEIGHT, getCompressionState, getCompressionState as getCompression, needsCompression, getMaxItemsWithoutCompression, getCompressionInfo, calculateCompressedVisibleRange, calculateCompressedRenderRange, calculateCompressedItemPosition, calculateCompressedScrollToIndex, calculateIndexFromScrollPosition, } from "./scale";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { VListItem, ItemTemplate, Range } from "../types";
|
|
7
7
|
import type { CompressionState } from "./viewport";
|
|
8
|
-
import type {
|
|
8
|
+
import type { SizeCache } from "./sizes";
|
|
9
9
|
/**
|
|
10
10
|
* Optional compression position calculator.
|
|
11
11
|
* Injected by the monolithic factory or the withCompression plugin.
|
|
12
|
-
* When not provided, the renderer uses simple
|
|
12
|
+
* When not provided, the renderer uses simple sizeCache offsets.
|
|
13
13
|
*/
|
|
14
|
-
export type CompressedPositionFn = (index: number, scrollTop: number,
|
|
14
|
+
export type CompressedPositionFn = (index: number, scrollTop: number, sizeCache: SizeCache, totalItems: number, containerHeight: number, compression: CompressionState, rangeStart?: number) => number;
|
|
15
15
|
/**
|
|
16
16
|
* Optional compression state getter.
|
|
17
17
|
* Injected by the monolithic factory or the withCompression plugin.
|
|
18
18
|
* When not provided, the renderer assumes no compression.
|
|
19
19
|
*/
|
|
20
|
-
export type CompressionStateFn = (totalItems: number,
|
|
20
|
+
export type CompressionStateFn = (totalItems: number, sizeCache: SizeCache) => CompressionState;
|
|
21
21
|
/** Element pool for recycling DOM elements */
|
|
22
22
|
export interface ElementPool {
|
|
23
23
|
/** Get an element from the pool (or create new) */
|
|
@@ -35,9 +35,9 @@ export interface ElementPool {
|
|
|
35
35
|
}
|
|
36
36
|
/** Compression context for positioning */
|
|
37
37
|
export interface CompressionContext {
|
|
38
|
-
|
|
38
|
+
scrollPosition: number;
|
|
39
39
|
totalItems: number;
|
|
40
|
-
|
|
40
|
+
containerSize: number;
|
|
41
41
|
rangeStart: number;
|
|
42
42
|
}
|
|
43
43
|
/** DOM structure created by createDOMStructure */
|
|
@@ -73,7 +73,7 @@ export declare const createElementPool: (tagName?: string, maxSize?: number) =>
|
|
|
73
73
|
* Create a renderer for managing DOM elements
|
|
74
74
|
* Supports compression for large lists
|
|
75
75
|
*/
|
|
76
|
-
export declare const createRenderer: <T extends VListItem = VListItem>(itemsContainer: HTMLElement, template: ItemTemplate<T>,
|
|
76
|
+
export declare const createRenderer: <T extends VListItem = VListItem>(itemsContainer: HTMLElement, template: ItemTemplate<T>, sizeCache: SizeCache, classPrefix: string, totalItemsGetter?: () => number, ariaIdPrefix?: string, horizontal?: boolean, crossAxisSize?: number, compressionFns?: {
|
|
77
77
|
getState: CompressionStateFn;
|
|
78
78
|
getPosition: CompressedPositionFn;
|
|
79
79
|
}) => Renderer<T>;
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
* maximum element height (~16.7M pixels), we "compress" the virtual scroll space.
|
|
7
7
|
*
|
|
8
8
|
* Key concepts:
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
* - compressionRatio:
|
|
9
|
+
* - actualSize: The true height if all items were rendered
|
|
10
|
+
* - virtualSize: The capped height used for the scroll container (≤ MAX_VIRTUAL_HEIGHT)
|
|
11
|
+
* - compressionRatio: virtualSize / actualSize (1 = no compression, <1 = compressed)
|
|
12
12
|
*
|
|
13
13
|
* When compressed:
|
|
14
14
|
* - Scroll position maps to item index via ratio, not pixel math
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { Range } from "../types";
|
|
19
19
|
import { MAX_VIRTUAL_HEIGHT } from "../constants";
|
|
20
|
-
import type {
|
|
20
|
+
import type { SizeCache } from "./sizes";
|
|
21
21
|
export { MAX_VIRTUAL_HEIGHT };
|
|
22
22
|
/** Compression calculation result */
|
|
23
23
|
export interface CompressionState {
|
|
24
24
|
/** Whether compression is active */
|
|
25
25
|
isCompressed: boolean;
|
|
26
26
|
/** The actual total height */
|
|
27
|
-
|
|
27
|
+
actualSize: number;
|
|
28
28
|
/** The virtual height (capped at MAX_VIRTUAL_HEIGHT) */
|
|
29
|
-
|
|
29
|
+
virtualSize: number;
|
|
30
30
|
/** Compression ratio (1 = no compression, <1 = compressed) */
|
|
31
31
|
ratio: number;
|
|
32
32
|
}
|
|
@@ -34,19 +34,19 @@ export interface CompressionState {
|
|
|
34
34
|
* Calculate compression state for a list
|
|
35
35
|
* Pure function - no side effects
|
|
36
36
|
*/
|
|
37
|
-
export declare const getCompressionState: (_totalItems: number,
|
|
37
|
+
export declare const getCompressionState: (_totalItems: number, sizeCache: SizeCache) => CompressionState;
|
|
38
38
|
/**
|
|
39
39
|
* Calculate visible range with compression support
|
|
40
40
|
* Pure function - no side effects
|
|
41
41
|
*
|
|
42
42
|
* @param scrollTop - Current scroll position
|
|
43
43
|
* @param containerHeight - Viewport container height
|
|
44
|
-
* @param
|
|
44
|
+
* @param sizeCache - Size cache for item sizes/offsets
|
|
45
45
|
* @param totalItems - Total number of items
|
|
46
46
|
* @param compression - Compression state
|
|
47
47
|
* @param out - Output range to mutate (avoids allocation on hot path)
|
|
48
48
|
*/
|
|
49
|
-
export declare const calculateCompressedVisibleRange: (
|
|
49
|
+
export declare const calculateCompressedVisibleRange: (scrollPosition: number, containerHeight: number, sizeCache: SizeCache, totalItems: number, compression: CompressionState, out: Range) => Range;
|
|
50
50
|
/**
|
|
51
51
|
* Calculate render range with compression support (adds overscan)
|
|
52
52
|
* Pure function - no side effects
|
|
@@ -69,30 +69,30 @@ export declare const calculateCompressedRenderRange: (visibleRange: Range, overs
|
|
|
69
69
|
*
|
|
70
70
|
* @param index - Item index
|
|
71
71
|
* @param scrollTop - Current (virtual) scroll position
|
|
72
|
-
* @param
|
|
72
|
+
* @param sizeCache - Size cache for item sizes/offsets
|
|
73
73
|
* @param totalItems - Total number of items
|
|
74
74
|
* @param containerHeight - Viewport container height
|
|
75
75
|
* @param compression - Compression state
|
|
76
76
|
*/
|
|
77
|
-
export declare const calculateCompressedItemPosition: (index: number,
|
|
77
|
+
export declare const calculateCompressedItemPosition: (index: number, scrollPosition: number, sizeCache: SizeCache, totalItems: number, containerHeight: number, compression: CompressionState, _rangeStart?: number) => number;
|
|
78
78
|
/**
|
|
79
79
|
* Calculate scroll position to bring an index into view (with compression)
|
|
80
80
|
* Pure function - no side effects
|
|
81
81
|
*
|
|
82
82
|
* @param index - Target item index
|
|
83
|
-
* @param
|
|
83
|
+
* @param sizeCache - Size cache for item sizes/offsets
|
|
84
84
|
* @param containerHeight - Viewport container height
|
|
85
85
|
* @param totalItems - Total number of items
|
|
86
86
|
* @param compression - Compression state
|
|
87
87
|
* @param align - Alignment within viewport
|
|
88
88
|
*/
|
|
89
|
-
export declare const calculateCompressedScrollToIndex: (index: number,
|
|
89
|
+
export declare const calculateCompressedScrollToIndex: (index: number, sizeCache: SizeCache, containerHeight: number, totalItems: number, compression: CompressionState, align?: "start" | "center" | "end") => number;
|
|
90
90
|
/**
|
|
91
91
|
* Calculate the approximate item index at a given scroll position
|
|
92
92
|
* Useful for debugging and scroll position restoration
|
|
93
93
|
* Pure function - no side effects
|
|
94
94
|
*/
|
|
95
|
-
export declare const calculateIndexFromScrollPosition: (
|
|
95
|
+
export declare const calculateIndexFromScrollPosition: (scrollPosition: number, sizeCache: SizeCache, totalItems: number, compression: CompressionState) => number;
|
|
96
96
|
/**
|
|
97
97
|
* Check if compression is needed for a list configuration
|
|
98
98
|
* Pure function - no side effects
|
|
@@ -100,16 +100,16 @@ export declare const calculateIndexFromScrollPosition: (scrollTop: number, heigh
|
|
|
100
100
|
* Note: This overload accepts a HeightCache for variable heights.
|
|
101
101
|
* For simple fixed-height checks, use needsCompressionFixed().
|
|
102
102
|
*/
|
|
103
|
-
export declare const needsCompression: (totalItems: number, heightOrCache: number |
|
|
103
|
+
export declare const needsCompression: (totalItems: number, heightOrCache: number | SizeCache) => boolean;
|
|
104
104
|
/**
|
|
105
105
|
* Calculate maximum items supported without compression
|
|
106
106
|
* Only meaningful for fixed-height items
|
|
107
107
|
* Pure function - no side effects
|
|
108
108
|
*/
|
|
109
|
-
export declare const getMaxItemsWithoutCompression: (
|
|
109
|
+
export declare const getMaxItemsWithoutCompression: (itemSize: number) => number;
|
|
110
110
|
/**
|
|
111
111
|
* Get human-readable compression info for debugging
|
|
112
112
|
* Pure function - no side effects
|
|
113
113
|
*/
|
|
114
|
-
export declare const getCompressionInfo: (totalItems: number,
|
|
114
|
+
export declare const getCompressionInfo: (totalItems: number, sizeCache: SizeCache) => string;
|
|
115
115
|
//# sourceMappingURL=scale.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist - Size Cache
|
|
3
|
+
* Efficient size management for fixed and variable item sizes
|
|
4
|
+
*
|
|
5
|
+
* Provides two implementations:
|
|
6
|
+
* - Fixed: O(1) operations using multiplication (zero overhead, matches existing behavior)
|
|
7
|
+
* - Variable: O(1) offset lookup via prefix sums, O(log n) binary search for index-at-offset
|
|
8
|
+
*
|
|
9
|
+
* The SizeCache abstraction allows all virtual scrolling and compression code
|
|
10
|
+
* to work identically with both fixed and variable sizes, for both vertical and horizontal scrolling.
|
|
11
|
+
*/
|
|
12
|
+
/** Size cache for efficient offset/index lookups (works for both vertical and horizontal) */
|
|
13
|
+
export interface SizeCache {
|
|
14
|
+
/** Get offset (position along main axis) for an item index — O(1) */
|
|
15
|
+
getOffset(index: number): number;
|
|
16
|
+
/** Get size of a specific item (height for vertical, width for horizontal) */
|
|
17
|
+
getSize(index: number): number;
|
|
18
|
+
/** Find item index at a scroll offset — O(1) fixed, O(log n) variable */
|
|
19
|
+
indexAtOffset(offset: number): number;
|
|
20
|
+
/** Total content size (total height for vertical, total width for horizontal) */
|
|
21
|
+
getTotalSize(): number;
|
|
22
|
+
/** Current total item count */
|
|
23
|
+
getTotal(): number;
|
|
24
|
+
/** Rebuild cache (call when items change) */
|
|
25
|
+
rebuild(totalItems: number): void;
|
|
26
|
+
/** Whether sizes are variable (false = fixed fast path) */
|
|
27
|
+
isVariable(): boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a size cache — returns fixed or variable implementation
|
|
31
|
+
*
|
|
32
|
+
* When size is a number, returns a zero-overhead fixed implementation.
|
|
33
|
+
* When size is a function, builds a prefix-sum array for efficient lookups.
|
|
34
|
+
*/
|
|
35
|
+
export declare const createSizeCache: (size: number | ((index: number) => number), initialTotal: number) => SizeCache;
|
|
36
|
+
/**
|
|
37
|
+
* Count how many items fit in a given container size starting from startIndex
|
|
38
|
+
* Used for compressed mode visible range calculations
|
|
39
|
+
*
|
|
40
|
+
* For fixed sizes: O(1) via division
|
|
41
|
+
* For variable sizes: O(k) where k = visible item count (typically 10-50)
|
|
42
|
+
*/
|
|
43
|
+
export declare const countVisibleItems: (sizeCache: SizeCache, startIndex: number, containerSize: number, totalItems: number) => number;
|
|
44
|
+
/**
|
|
45
|
+
* Count how many items fit starting from the bottom of the list
|
|
46
|
+
* Used for near-bottom interpolation in compressed mode
|
|
47
|
+
*
|
|
48
|
+
* For fixed sizes: O(1) via division
|
|
49
|
+
* For variable sizes: O(k) where k = items fitting (typically 10-50)
|
|
50
|
+
*/
|
|
51
|
+
export declare const countItemsFittingFromBottom: (sizeCache: SizeCache, containerSize: number, totalItems: number) => number;
|
|
52
|
+
/**
|
|
53
|
+
* Calculate the pixel offset for a fractional virtual scroll index
|
|
54
|
+
*
|
|
55
|
+
* In compressed mode, the scroll position maps to a fractional item index
|
|
56
|
+
* (e.g., 5.3 means 30% into item 5). This function calculates the actual
|
|
57
|
+
* pixel offset for such a fractional position using variable sizes.
|
|
58
|
+
*
|
|
59
|
+
* For fixed sizes this reduces to: virtualIndex * itemSize
|
|
60
|
+
* For variable sizes: offset(floor) + frac * size(floor)
|
|
61
|
+
*/
|
|
62
|
+
export declare const getOffsetForVirtualIndex: (sizeCache: SizeCache, virtualIndex: number, totalItems: number) => number;
|
|
63
|
+
//# sourceMappingURL=sizes.d.ts.map
|