@floor/vlist 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- var QJ=0,m=5,qJ=100,Oj=2,KJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},UJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>qJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Oj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],D=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(D)/C:0}return X.lastPosition=U,X.lastTime=$,X},Sj=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,D=$-1;while(K<D){let C=K+D+1>>>1;if(Y[C]<=Q)K=C;else D=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},YJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((D)=>{try{D(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},BJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},GJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let D=document.createElement("div");if(D.className=`${U}-items`,D.style.position="relative",Y)D.style.height="100%";else D.style.width="100%";return K.appendChild(D),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:D}},WJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},DJ=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},VJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},_J=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),D=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-D)/2;break;case"end":f=K-$+D;break;default:f=K}return Math.max(0,Math.min(f,C))},LJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,NJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},MJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(D){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(D.name,D),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,AJ(X,V,U,Y)}};return K};function AJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:D="vlist",ariaLabel:C,reverse:f=!1,scroll:Kj}=X,Ij=Kj?.wheel??!0,Fj=Kj?.wrap??!1,c=f,Rj=`${D}-${QJ++}`,Tj=Y,yj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,i=V.template,uj={overscan:K,classPrefix:D,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:Rj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),t=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(t.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(t.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(t.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(t.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let fj=BJ(X.container),_=GJ(fj,D,C,$),k=YJ(),B=Q?[...Q]:[],N=Sj(Tj,B.length),e=WJ(),R=_.viewport.clientHeight,jj=_.viewport.clientWidth,s=!1,x=!1,O=0,p=null,l=null,I=KJ(0),Jj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},H={viewportState:{scrollTop:0,containerHeight:R,totalHeight:N.getTotalHeight(),actualHeight:N.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},v=new Map,Uj={selected:!1,focused:!1},xj=`${D}-item`,a="",P=new Map,Yj=()=>{P.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)P.set(J.id,j)}};Yj();let F=null,z=()=>F?F.getTotal():B.length,Bj=[],Gj=[],Wj=[],Dj=[],r=[],Vj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},Cj=(j=2)=>{let J=N.getTotalHeight();return O+R>=J-j},pj=!1,y,T,kj=(j,J,Z,q,W)=>{DJ(j,J,Z,q,W)},Xj=(j,J,Z,q,W)=>{return _J(j,J,Z,q,W)},_j=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Lj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},hj=(j,J)=>{let Z=e.acquire();if(Z.className=xj,$){if(Z.style.width=`${N.getHeight(j)}px`,yj!=null)Z.style.height=`${yj}px`}else Z.style.height=`${N.getHeight(j)}px`;return Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${Rj}-item-${j}`,a=String(z()),Z.setAttribute("aria-setsize",a),Z.setAttribute("aria-posinset",String(j+1)),_j(Z,i(J,j,Uj)),Lj(Z,j),Z},o=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Nj=new Set,Mj=-1,gj=()=>{if(s)return;let j=z();if(kj(O,R,N,j,Jj),VJ(Jj,K,j,E),E.start===h.start&&E.end===h.end)return;let J=String(j),Z=J!==a;a=J;for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),e.release(A),v.delete(G);let q=document.createDocumentFragment(),W=[];for(let G=E.start;G<=E.end;G++){let A=F?F.getItem(G):B[G];if(!A)continue;let b=v.get(G);if(b){let w=b.dataset.id,Qj=String(A.id);if(w!==Qj)if(_j(b,i(A,G,Uj)),b.dataset.id=Qj,$)b.style.width=`${N.getHeight(G)}px`;else b.style.height=`${N.getHeight(G)}px`;Lj(b,G);let qj=Nj.has(A.id),$J=G===Mj;if(b.classList.toggle(`${D}-item--selected`,qj),b.classList.toggle(`${D}-item--focused`,$J),b.ariaSelected=qj?"true":"false",Z)b.setAttribute("aria-setsize",a)}else{let w=hj(G,A),Qj=Nj.has(A.id),qj=G===Mj;if(Qj)w.classList.add(`${D}-item--selected`),w.ariaSelected="true";if(qj)w.classList.add(`${D}-item--focused`);q.appendChild(w),W.push({index:G,element:w})}}if(W.length>0){_.items.appendChild(q);for(let{index:G,element:A}of W)v.set(G,A)}h.start=E.start,h.end=E.end,H.lastRenderRange.start=E.start,H.lastRenderRange.end=E.end,H.viewportState.scrollTop=O,H.viewportState.visibleRange.start=Jj.start,H.viewportState.visibleRange.end=Jj.end,H.viewportState.renderRange.start=E.start,H.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},mj=()=>{h.start=-1,h.end=-1,y()};y=gj,T=mj;let n=()=>{if(s)return;let j=u(),J=j>=O?"down":"up";if(I=UJ(I,j),!_.root.classList.contains(`${D}--scrolling`))_.root.classList.add(`${D}--scrolling`);O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Oj});for(let Z=0;Z<Bj.length;Z++)Bj[Z](j,J);if(l)clearTimeout(l);l=setTimeout(()=>{_.root.classList.remove(`${D}--scrolling`),I.velocity=0,I.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Kj?.idleTimeout??150)},Zj=null,g=_.viewport;if(g.addEventListener("scroll",n,{passive:!0}),$&&Ij)Zj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",Zj);let Pj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let W=F?.getItem(q)??B[q];if(W){if(W.__groupHeader)return;k.emit("item:click",{item:W,index:q,event:j})}}}for(let q=0;q<Gj.length;q++)Gj[q](j)},cj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let W=F?.getItem(q)??B[q];if(W){if(W.__groupHeader)return;k.emit("item:dblclick",{item:W,index:q,event:j})}}}},zj=(j)=>{for(let J=0;J<Wj.length;J++)Wj[J](j)};_.items.addEventListener("click",Pj),_.items.addEventListener("dblclick",cj),_.root.addEventListener("keydown",zj);let Aj=!0,dj=()=>jj,sj=()=>R,bj=new ResizeObserver((j)=>{if(s)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,W=$?q:Z;if(jj=q,Math.abs(W-R)>1){if(R=W,H.viewportState.containerHeight=W,x)o(),y(),k.emit("resize",{height:Z,width:q})}if(x)for(let G=0;G<Dj.length;G++)Dj[G](q,Z)}});if(Aj)bj.observe(_.viewport);let M={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return uj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,W)=>{Nj=Z,Mj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);if(!q)return;q.classList.toggle(`${D}-item--selected`,J),q.classList.toggle(`${D}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return F},set dataManager(j){F=j},get scrollController(){return Ej},set scrollController(j){Ej=j},state:H,getContainerWidth(){return jj},afterScroll:Bj,clickHandlers:Gj,keydownHandlers:Wj,resizeHandlers:Dj,contentSizeHandlers:r,destroyHandlers:Vj,methods:L,replaceTemplate(j){i=j},replaceRenderer(j){},replaceDataManager(j){F=j},replaceScrollController(j){Ej=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=F?F.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(F){let j=F.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=F.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return z()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:z(),containerHeight:R,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){z=j},rebuildHeightCache(j){N.rebuild(j??z())},setHeightConfig(j){N=Sj(j,z())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){kj=j},setScrollToPosFn(j){Xj=j},setPositionElementFn(j){Lj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),n()}},setScrollTarget(j){g.removeEventListener("scroll",n),g=j,g.addEventListener("scroll",n,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){dj=j.width,sj=j.height,jj=j.width(),R=j.height(),H.viewportState.containerHeight=R},disableViewportResize(){if(Aj)Aj=!1,bj.unobserve(_.viewport)}};F={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=P.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>P.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),W=Math.min(J,B.length-1);for(let G=q;G<=W;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let W=0;W<j.length;W++)B[J+W]=j[W]}if(Yj(),x){N.rebuild(z()),o(),M.updateCompressionMode();for(let q=0;q<r.length;q++)r[q]();T()}},updateItem:(j,J)=>{let Z=P.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)P.delete(j),P.set(J.id,Z);let W=v.get(Z);if(W)_j(W,i(B[Z],Z,Uj)),W.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=P.get(j);if(J===void 0)return!1;if(B.splice(J,1),Yj(),x){N.rebuild(z()),o(),M.updateCompressionMode();for(let Z=0;Z<r.length;Z++)r[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],P.clear()},reset:()=>{if(B=[],P.clear(),x)N.rebuild(0),o(),T()}};let Ej={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>Cj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-R);return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Oj,isScrolling:()=>_.root.classList.contains(`${D}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>pj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{R=j},destroy:()=>{}},Hj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=Hj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);Hj.set(J,j.name)}for(let j of d)j.setup(M);if(x=!0,M.state.isInitialized=!0,o(),y(),c&&B.length>0){let j=Xj(B.length-1,N,R,B.length,"end");S(j),O=j,y()}let lj=(j)=>{M.dataManager.setItems(j,0,j.length)},aj=c?(j)=>{let J=Cj(2),Z=B.length;if(M.dataManager.setItems(j,Z),J&&B.length>0){let q=Xj(B.length-1,N,R,B.length,"end");S(q),O=q,y()}}:(j)=>{let J=B.length;M.dataManager.setItems(j,J)},rj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...J],0)},oj=(j,J)=>{M.dataManager.updateItem(j,J)},nj=(j)=>{M.dataManager.removeItem(j)},ij=async()=>{if(M.dataManager.reload)await M.dataManager.reload()},$j=()=>{if(p!==null)cancelAnimationFrame(p),p=null},tj=(j,J,Z)=>{if($j(),Math.abs(J-j)<1){S(J),O=J,y();return}let q=performance.now(),W=(G)=>{let A=G-q,b=Math.min(A/Z,1),w=j+(J-j)*LJ(b);if(S(w),O=w,y(),b<1)p=requestAnimationFrame(W);else p=null};p=requestAnimationFrame(W)},wj=(j,J)=>{let{align:Z,behavior:q,duration:W}=NJ(J),G=z(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let b=Xj(A,N,R,G,Z);if(q==="smooth")tj(u(),b,W);else $j(),S(b)},ej=(j,J)=>{let Z=P.get(j)??M.dataManager.getIndexById(j);if(Z>=0)wj(Z,J)},jJ=()=>u(),JJ=(j,J)=>{return k.on(j,J)},XJ=(j,J)=>{k.off(j,J)},ZJ=()=>{if(s)return;if(s=!0,M.state.isDestroyed=!0,_.items.removeEventListener("click",Pj),_.root.removeEventListener("keydown",zj),g.removeEventListener("scroll",n),bj.disconnect(),Zj)_.viewport.removeEventListener("wheel",Zj);if(l)clearTimeout(l);for(let j=0;j<Vj.length;j++)Vj[j]();for(let j of d)if(j.destroy)j.destroy();$j();for(let[,j]of v)j.remove(),e.release(j);v.clear(),e.clear(),k.clear(),_.root.remove()},vj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return z()},setItems:L.has("setItems")?L.get("setItems"):lj,appendItems:L.has("appendItems")?L.get("appendItems"):aj,prependItems:L.has("prependItems")?L.get("prependItems"):rj,updateItem:L.has("updateItem")?L.get("updateItem"):oj,removeItem:L.has("removeItem")?L.get("removeItem"):nj,reload:L.has("reload")?L.get("reload"):ij,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):wj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):ej,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):$j,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):jJ,on:JJ,off:XJ,destroy:ZJ};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;vj[j]=J}return vj}export{MJ as vlist};
1
+ var KJ=0,m=5,UJ=100,Rj=2,YJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},BJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>UJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Rj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],W=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(W)/C:0}return X.lastPosition=U,X.lastTime=$,X},Tj=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,W=$-1;while(K<W){let C=K+W+1>>>1;if(Y[C]<=Q)K=C;else W=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},GJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((W)=>{try{W(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},WJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},DJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let W=document.createElement("div");if(W.className=`${U}-items`,W.style.position="relative",Y)W.style.height="100%";else W.style.width="100%";return K.appendChild(W),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:W}},VJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},_J=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},LJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},NJ=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),W=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-W)/2;break;case"end":f=K-$+W;break;default:f=K}return Math.max(0,Math.min(f,C))},MJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,AJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},bJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(W){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(W.name,W),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,EJ(X,V,U,Y)}};return K};function EJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:W="vlist",ariaLabel:C,reverse:f=!1,scroll:Yj}=X,uj=Yj?.wheel??!0,Fj=Yj?.wrap??!1,c=f,yj=`${W}-${KJ++}`,fj=Y,Cj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,t=V.template,pj={overscan:K,classPrefix:W,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:yj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),e=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(e.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(e.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(e.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(e.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let xj=WJ(X.container),_=DJ(xj,W,C,$),k=GJ(),B=Q?[...Q]:[],N=Tj(fj,B.length),jj=VJ(),F=_.viewport.clientHeight,Jj=_.viewport.clientWidth,s=!1,p=!1,O=0,x=null,l=null,I=YJ(0),Xj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},w={viewportState:{scrollTop:0,containerHeight:F,totalHeight:N.getTotalHeight(),actualHeight:N.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},v=new Map,Bj={selected:!1,focused:!1},hj=`${W}-item`,a="",z=new Map,Gj=()=>{z.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)z.set(J.id,j)}};Gj();let R=null,H=()=>R?R.getTotal():B.length,Wj=[],Dj=[],Vj=[],_j=[],r=[],Lj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},kj=(j=2)=>{let J=N.getTotalHeight();return O+F>=J-j},Zj=!1,y,T,zj=(j,J,Z,q,D)=>{_J(j,J,Z,q,D)},$j=(j,J,Z,q,D)=>{return NJ(j,J,Z,q,D)},Nj=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Qj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},gj=(j,J)=>{let Z=jj.acquire();if(Z.className=hj,$){if(Z.style.width=`${N.getHeight(j)}px`,Cj!=null)Z.style.height=`${Cj}px`}else Z.style.height=`${N.getHeight(j)}px`;if(Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${yj}-item-${j}`,a=String(H()),Z.setAttribute("aria-setsize",a),Z.setAttribute("aria-posinset",String(j+1)),String(J.id).startsWith("__placeholder_"))Z.classList.add(`${W}-item--placeholder`);return Nj(Z,t(J,j,Bj)),Qj(Z,j),Z},o=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Mj=new Set,Aj=-1,mj=()=>{if(s)return;let j=H();if(zj(O,F,N,j,Xj),LJ(Xj,K,j,E),E.start===h.start&&E.end===h.end){if(Zj)for(let[G,A]of v)Qj(A,G);return}let J=String(j),Z=J!==a;a=J;for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),jj.release(A),v.delete(G);let q=document.createDocumentFragment(),D=[];for(let G=E.start;G<=E.end;G++){let A=R?R.getItem(G):B[G];if(!A)continue;let M=v.get(G);if(M){let P=M.dataset.id,i=String(A.id);if(P!==i){let qJ=P?.startsWith("__placeholder_"),Ij=i.startsWith("__placeholder_");if(Nj(M,t(A,G,Bj)),M.dataset.id=i,$)M.style.width=`${N.getHeight(G)}px`;else M.style.height=`${N.getHeight(G)}px`;if(Ij)M.classList.add(`${W}-item--placeholder`);else M.classList.remove(`${W}-item--placeholder`);if(qJ&&!Ij)M.classList.add(`${W}-item--replaced`),setTimeout(()=>{M.classList.remove(`${W}-item--replaced`)},300)}Qj(M,G);let Uj=Mj.has(A.id),QJ=G===Aj;if(M.classList.toggle(`${W}-item--selected`,Uj),M.classList.toggle(`${W}-item--focused`,QJ),M.ariaSelected=Uj?"true":"false",Z)M.setAttribute("aria-setsize",a)}else{let P=gj(G,A),i=Mj.has(A.id),Uj=G===Aj;if(i)P.classList.add(`${W}-item--selected`),P.ariaSelected="true";if(Uj)P.classList.add(`${W}-item--focused`);q.appendChild(P),D.push({index:G,element:P})}}if(D.length>0){_.items.appendChild(q);for(let{index:G,element:A}of D)v.set(G,A)}h.start=E.start,h.end=E.end,w.lastRenderRange.start=E.start,w.lastRenderRange.end=E.end,w.viewportState.scrollTop=O,w.viewportState.visibleRange.start=Xj.start,w.viewportState.visibleRange.end=Xj.end,w.viewportState.renderRange.start=E.start,w.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},cj=()=>{h.start=-1,h.end=-1,y()};y=mj,T=cj;let n=()=>{if(s)return;let j=u(),J=j>=O?"down":"up";if(I=BJ(I,j),!_.root.classList.contains(`${W}--scrolling`))_.root.classList.add(`${W}--scrolling`);O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Rj});for(let Z=0;Z<Wj.length;Z++)Wj[Z](j,J);if(l)clearTimeout(l);l=setTimeout(()=>{_.root.classList.remove(`${W}--scrolling`),I.velocity=0,I.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Yj?.idleTimeout??150)},qj=null,g=_.viewport;if(g.addEventListener("scroll",n,{passive:!0}),$&&uj)qj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",qj);let Hj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=R?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;k.emit("item:click",{item:D,index:q,event:j})}}}for(let q=0;q<Dj.length;q++)Dj[q](j)},dj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=R?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;k.emit("item:dblclick",{item:D,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;J<Vj.length;J++)Vj[J](j)};_.items.addEventListener("click",Hj),_.items.addEventListener("dblclick",dj),_.root.addEventListener("keydown",Pj);let bj=!0,sj=()=>Jj,lj=()=>F,Ej=new ResizeObserver((j)=>{if(s)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,D=$?q:Z;if(Jj=q,Math.abs(D-F)>1){if(F=D,w.viewportState.containerHeight=D,p)o(),y(),k.emit("resize",{height:Z,width:q})}if(p)for(let G=0;G<_j.length;G++)_j[G](q,Z)}});if(bj)Ej.observe(_.viewport);let b={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return pj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,D)=>{Mj=Z,Aj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);if(!q)return;q.classList.toggle(`${W}-item--selected`,J),q.classList.toggle(`${W}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return R},set dataManager(j){R=j},get scrollController(){return Oj},set scrollController(j){Oj=j},state:w,getContainerWidth(){return Jj},afterScroll:Wj,clickHandlers:Dj,keydownHandlers:Vj,resizeHandlers:_j,contentSizeHandlers:r,destroyHandlers:Lj,methods:L,replaceTemplate(j){t=j},replaceRenderer(j){},replaceDataManager(j){R=j},replaceScrollController(j){Oj=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=R?R.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(R){let j=R.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=R.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return H()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:H(),containerHeight:F,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){H=j},rebuildHeightCache(j){N.rebuild(j??H())},setHeightConfig(j){N=Tj(j,H())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){zj=j},setScrollToPosFn(j){$j=j},setPositionElementFn(j){Qj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),n()}},setScrollTarget(j){g.removeEventListener("scroll",n),g=j,g.addEventListener("scroll",n,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){sj=j.width,lj=j.height,Jj=j.width(),F=j.height(),w.viewportState.containerHeight=F},disableViewportResize(){if(bj)bj=!1,Ej.unobserve(_.viewport)}};R={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=z.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>z.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),D=Math.min(J,B.length-1);for(let G=q;G<=D;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let D=0;D<j.length;D++)B[J+D]=j[D]}if(Gj(),p){N.rebuild(H()),o(),b.updateCompressionMode();for(let q=0;q<r.length;q++)r[q]();T()}},updateItem:(j,J)=>{let Z=z.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)z.delete(j),z.set(J.id,Z);let D=v.get(Z);if(D)Nj(D,t(B[Z],Z,Bj)),D.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=z.get(j);if(J===void 0)return!1;if(B.splice(J,1),Gj(),p){N.rebuild(H()),o(),b.updateCompressionMode();for(let Z=0;Z<r.length;Z++)r[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],z.clear()},reset:()=>{if(B=[],z.clear(),p)N.rebuild(0),o(),T()}};let Oj={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>kj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-F);return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Rj,isScrolling:()=>_.root.classList.contains(`${W}--scrolling`),updateConfig:()=>{},enableCompression:()=>{Zj=!0},disableCompression:()=>{Zj=!1},isCompressed:()=>Zj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{F=j},destroy:()=>{}},wj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=wj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);wj.set(J,j.name)}for(let j of d)j.setup(b);if(p=!0,b.state.isInitialized=!0,o(),y(),c&&B.length>0){let j=$j(B.length-1,N,F,B.length,"end");S(j),O=j,y()}let aj=(j)=>{b.dataManager.setItems(j,0,j.length)},rj=c?(j)=>{let J=kj(2),Z=B.length;if(b.dataManager.setItems(j,Z),J&&B.length>0){let q=$j(B.length-1,N,F,B.length,"end");S(q),O=q,y()}}:(j)=>{let J=B.length;b.dataManager.setItems(j,J)},oj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];b.dataManager.clear(),b.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];b.dataManager.clear(),b.dataManager.setItems([...j,...J],0)},nj=(j,J)=>{b.dataManager.updateItem(j,J)},ij=(j)=>{b.dataManager.removeItem(j)},tj=async()=>{if(b.dataManager.reload)await b.dataManager.reload()},Kj=()=>{if(x!==null)cancelAnimationFrame(x),x=null},ej=(j,J,Z)=>{if(Kj(),Math.abs(J-j)<1){S(J),O=J,y();return}let q=performance.now(),D=(G)=>{let A=G-q,M=Math.min(A/Z,1),P=j+(J-j)*MJ(M);if(S(P),O=P,y(),M<1)x=requestAnimationFrame(D);else x=null};x=requestAnimationFrame(D)},vj=(j,J)=>{let{align:Z,behavior:q,duration:D}=AJ(J),G=H(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let M=$j(A,N,F,G,Z);if(q==="smooth")ej(u(),M,D);else Kj(),S(M)},jJ=(j,J)=>{let Z=z.get(j)??b.dataManager.getIndexById(j);if(Z>=0)vj(Z,J)},JJ=()=>u(),XJ=(j,J)=>{return k.on(j,J)},ZJ=(j,J)=>{k.off(j,J)},$J=()=>{if(s)return;if(s=!0,b.state.isDestroyed=!0,_.items.removeEventListener("click",Hj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",n),Ej.disconnect(),qj)_.viewport.removeEventListener("wheel",qj);if(l)clearTimeout(l);for(let j=0;j<Lj.length;j++)Lj[j]();for(let j of d)if(j.destroy)j.destroy();Kj();for(let[,j]of v)j.remove(),jj.release(j);v.clear(),jj.clear(),k.clear(),_.root.remove()},Sj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return H()},setItems:L.has("setItems")?L.get("setItems"):aj,appendItems:L.has("appendItems")?L.get("appendItems"):rj,prependItems:L.has("prependItems")?L.get("prependItems"):oj,updateItem:L.has("updateItem")?L.get("updateItem"):nj,removeItem:L.has("removeItem")?L.get("removeItem"):ij,reload:L.has("reload")?L.get("reload"):tj,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):vj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):jJ,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):Kj,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):JJ,on:XJ,off:ZJ,destroy:$J};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;Sj[j]=J}return Sj}export{bJ as vlist};
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * For the modular builder API, use `import { vlist } from '@floor/vlist'` instead.
11
11
  */
12
- import type { VListConfig, VListItem, VList } from "./types";
12
+ import type { VListConfig, VListItem, VList } from "../types";
13
13
  /**
14
14
  * Create a virtual list instance.
15
15
  *
@@ -21,4 +21,4 @@ import type { VListConfig, VListItem, VList } from "./types";
21
21
  * @returns Virtual list instance with full API
22
22
  */
23
23
  export declare const createVList: <T extends VListItem = VListItem>(config: VListConfig<T>) => VList<T>;
24
- //# sourceMappingURL=vlist.d.ts.map
24
+ //# sourceMappingURL=full.d.ts.map
@@ -12,6 +12,7 @@
12
12
  * - Custom scrollbar fallback — forces custom scrollbar in compressed mode
13
13
  * - Near-bottom interpolation — smooth blending near the end of the list
14
14
  * - Cached compression state — recalculates only when total item count changes
15
+ * - Smooth scroll interpolation — lerp-based wheel handling for cross-browser consistency
15
16
  *
16
17
  * No configuration needed — compression activates automatically when the total
17
18
  * height exceeds the browser limit, and deactivates when items are removed.
@@ -1 +1 @@
1
- var a=(Y)=>{let q=Math.max(1,Math.floor(Y.columns)),J=Y.gap??0,j=Y.isHeaderFn,D={row:0,col:0},X=(K)=>{if(K<=0)return 0;if(!j)return Math.ceil(K/q);let $=0,N=0,B=0;for(let F=0;F<K;F++)if(j(F)){if(B++,N>0)$++,N=0;$++,N=0}else if(N++,N>=q)$++,N=0;if(N>0)$++;return $},G=(K)=>{return D.row=O(K),D.col=b(K),D},O=(K)=>{if(!j)return Math.floor(K/q);let $=0,N=0;for(let B=0;B<=K;B++)if(j(B)){if(N>0)$++,N=0;if(B===K)return $;$++,N=0}else{if(B===K)return $;if(N++,N>=q)$++,N=0}return console.warn(`⚠️ getRow(${K}) fell through - returning ${$}`),$},b=(K)=>{if(!j)return K%q;if(j(K))return 0;let $=0;for(let N=0;N<=K;N++)if(j(N))$=0;else{if(N===K)return $;if($++,$>=q)$=0}return $},W=(K,$,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let M=Math.max(0,K*q),V=Math.min(N-1,($+1)*q-1);return{start:M,end:V}}let B=-1,F=-1,T=0,k=0;for(let M=0;M<N;M++){if(j(M)){if(k>0)T++,k=0;if(T>=K&&T<=$){if(B===-1)B=M;F=M}T++,k=0}else{if(T>=K&&T<=$){if(B===-1)B=M;F=M}if(k++,k>=q)T++,k=0}if(T>$&&k===0)break}if(B===-1)return{start:0,end:-1};return{start:B,end:F}},P=(K,$,N)=>{if($<0||$>=q)return-1;let B=K*q+$;if(B<0||B>=N)return-1;return B},y=(K)=>{let $=(q-1)*J;return Math.max(0,(K-$)/q)};return{get columns(){return q},get gap(){return J},update:(K)=>{if(K.columns!==void 0)q=Math.max(1,Math.floor(K.columns));if(K.gap!==void 0)J=K.gap;if(K.isHeaderFn!==void 0)j=K.isHeaderFn},getTotalRows:X,getPosition:G,getRow:O,getCol:b,getItemRange:W,getItemIndex:P,getColumnWidth:y,getColumnOffset:(K,$)=>{let N=y($);return K*(N+J)}}};var n=16000000;var J2=(Y,q,J)=>{if(J===0)return 0;if(!Y.isVariable())return Math.floor(q/Y.getHeight(0));let j=0,D=0;for(let X=J-1;X>=0;X--){let G=Y.getHeight(X);if(D+G>q)break;D+=G,j++}return Math.max(j,1)},o=(Y,q,J)=>{if(J===0)return 0;let j=Math.floor(q),D=q-j,X=Math.max(0,Math.min(j,J-1));return Y.getOffset(X)+D*Y.getHeight(X)};var K2=(Y,q)=>{let J=q.getTotalHeight(),j=J>n,D=j?n:J,X=J>0?D/J:1;return{isCompressed:j,actualHeight:J,virtualHeight:D,ratio:X}};var Q2=(Y,q,J,j,D,X,G)=>{if(!X.isCompressed||j===0)return J.getOffset(Y);let{virtualHeight:O}=X,b=O-D,W=b-q;if(W<=D&&W>=-1){if(q>=b-1){let T=J.getTotalHeight()-J.getOffset(Y);return D-T}let w=J2(J,D,j),C=Math.max(0,j-w),$=q/O*j,N=Math.max(0,Math.min(1,1-W/D)),B=J.getOffset(Y)-J.getOffset(C),F=J.getOffset(Y)-o(J,$,j);return F+(B-F)*N}let y=q/O*j;return J.getOffset(Y)-o(J,y,j)};var Y2=(Y)=>{return Y!==null&&typeof Y==="object"&&Y.__groupHeader===!0};var N2=(Y=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let G=document.createElement("div");return G.setAttribute("role","option"),G},release:(X)=>{if(q.length<Y)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},i=(Y,q,J,j,D,X,G,O)=>{let b=N2(),W=new Map,P=X,y=!1,w=null,C=0,K="",$=(Q)=>{if(w&&C===Q)return w;return w=K2(Q,J),C=Q,w},N={selected:!1,focused:!1},B=(Q,Z)=>{return N.selected=Q,N.focused=Z,N},F=`${D}-item ${D}-grid-item`,T=`${D}-item--selected`,k=`${D}-item--focused`,M=(Q,Z)=>{if(typeof Z==="string")Q.innerHTML=Z;else Q.replaceChildren(Z)},V=(Q,Z,U)=>{Q.classList.toggle(T,Z),Q.classList.toggle(k,U)},A=(Q,Z)=>{let U=j.getRow(Q);if(Z){let L=Z.totalItems,E=$(L);if(E.isCompressed)return Q2(U,Z.scrollTop,J,L,Z.containerHeight,E,Z.rangeStart)}return J.getOffset(U)},S=(Q,Z,U)=>{let L=Q.dataset.id?.startsWith("__group_header"),E=L?0:j.getCol(Z),_=L?0:j.getColumnOffset(E,P),f;if(y){let x=j.getRow(Z),z=0,u=new Set;for(let R=0;R<Z;R++){let p=j.getRow(R);if(p<x&&!u.has(p)){let l=J.getHeight(R);z+=l,u.add(p)}}f=z}else f=A(Z,U);Q.style.transform=`translate(${Math.round(_)}px, ${Math.round(f)}px)`},v=(Q,Z)=>{let U=Q.dataset.id?.startsWith("__group_header"),L=U?P:j.getColumnWidth(P),E;if(y||U)E=J.getHeight(Z)-j.gap;else{let _=j.getRow(Z);E=J.getHeight(_)-j.gap}Q.style.width=`${L}px`,Q.style.height=`${E}px`},I=(Q,Z,U,L,E)=>{let _=b.acquire(),f=B(U,L);if(_.className=F,_.dataset.index=String(Q),_.dataset.id=String(Z.id),_.dataset.row=String(j.getRow(Q)),_.dataset.col=String(j.getCol(Q)),_.ariaSelected=String(U),O)_.id=`${O}-item-${Q}`;if(G)K=String(G()),_.setAttribute("aria-setsize",K),_.setAttribute("aria-posinset",String(Q+1));v(_,Q);let x=q(Z,Q,f);return M(_,x),V(_,U,L),S(_,Q,E),_},d=(Q,Z,U,L,E)=>{if(Z.start===0&&Q.length>0)y=Y2(Q[0]);for(let[z,u]of W)if(z<Z.start||z>Z.end)u.element.remove(),b.release(u.element),W.delete(z);let _=!1;if(G){let z=String(G());_=z!==K,K=z}let f=document.createDocumentFragment(),x=[];for(let z=Z.start;z<=Z.end;z++){let u=z-Z.start,R=Q[u];if(!R){console.warn(`⚠️ RENDER: Missing item at index ${z} (range: ${Z.start}-${Z.end}, items.length: ${Q.length})`);continue}let p=U.has(R.id),l=z===L,H=W.get(z);if(H){let c=H.element.dataset.id,q2=String(R.id);if(c!==q2){let $2=B(p,l),k2=q(R,z,$2);M(H.element,k2),H.element.dataset.id=q2,H.element.dataset.row=String(j.getRow(z)),H.element.dataset.col=String(j.getCol(z)),v(H.element,z)}if(V(H.element,p,l),H.element.ariaSelected=String(p),S(H.element,z,E),_)H.element.setAttribute("aria-setsize",K)}else{let c=I(z,R,p,l,E);f.appendChild(c),x.push({index:z,element:c})}}if(x.length>0){Y.appendChild(f);for(let{index:z,element:u}of x)W.set(z,{index:z,element:u})}},h=(Q)=>{for(let[Z,U]of W)S(U.element,Z,Q)},m=(Q,Z,U,L)=>{let E=W.get(Q);if(E){let _=B(U,L),f=q(Z,Q,_);M(E.element,f),V(E.element,U,L),E.element.dataset.id=String(Z.id),E.element.ariaSelected=String(U),v(E.element,Q)}},r=(Q,Z,U)=>{let L=W.get(Q);if(L)V(L.element,Z,U)},s=(Q)=>{return W.get(Q)?.element},g=(Q)=>{if(Math.abs(Q-P)<1)return;P=Q;for(let[Z,U]of W)v(U.element,Z),S(U.element,Z)},j2=()=>{for(let[,Q]of W)Q.element.remove(),b.release(Q.element);W.clear()};return{render:d,updatePositions:h,updateItem:m,updateItemClasses:r,getElement:s,updateContainerWidth:g,clear:j2,destroy:()=>{j2(),b.clear()}}};var Z2=(Y,q,J,j,D,X)=>{if(j===0)return 0;let G=Math.max(0,Math.min(Y,j-1)),O=q.getOffset(G),b=q.getHeight(G),W=q.getTotalHeight(),P=Math.max(0,W-J),y;switch(X){case"center":y=O-J/2+b/2;break;case"end":y=O-J+b;break;case"start":default:y=O;break}return Math.max(0,Math.min(y,P))};var t=(Y,q,J,j,D="start",X,G=Z2)=>{return G(Y,q,J,j,X,D)};var X2=(Y)=>{if(!Y.columns||Y.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,J=null;return{name:"withGrid",priority:10,setup(j){let{dom:D,emitter:X,config:G,rawConfig:O}=j,{classPrefix:b}=G;if(G.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let W=O.items?.some((k)=>k.__groupHeader===!0),P={columns:Y.columns,gap:Y.gap??0};if(W)P.isHeaderFn=(k)=>{let M=j.dataManager.getItem(k);return!!(M&&M.__groupHeader===!0)};q=a(P);let y=q.gap;j.setVirtualTotalFn(()=>{let k=j.dataManager.getTotal();return q.getTotalRows(k)});let w=O.item,C=G.horizontal?w.width:w.height,K={containerWidth:j.getContainerWidth(),columns:q.columns,gap:q.gap};if(typeof C==="function")j.setHeightConfig((k)=>{let M=K.containerWidth-2,V=(K.columns-1)*K.gap,A=(M-V)/K.columns,S={containerWidth:K.containerWidth,columns:K.columns,gap:K.gap,columnWidth:A,row:q.getRow(k),column:q.getCol(k),totalRows:q.getTotalRows(j.dataManager.getTotal()),totalColumns:K.columns};return C(k,S)+K.gap});else if(y>0)j.setHeightConfig(C+y);j.rebuildHeightCache(),D.root.classList.add(`${b}--grid`);let $=j.getContainerWidth(),N=O.item.template,B=()=>{J=i(D.items,N,j.heightCache,q,b,$,()=>j.dataManager.getTotal(),G.ariaIdPrefix),j.replaceRenderer(J)};B(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>P),j.methods.set("_replaceGridRenderer",(k)=>{J=k}),j.methods.set("_updateGridLayoutForGroups",(k)=>{q.update({isHeaderFn:k});let M=j.dataManager.getTotal(),V=0;for(let A=0;A<M;A++)if(q.getCol(A)===0){let S=j.heightCache.getHeight(A);V+=S}j.heightCache.getTotalHeight=()=>V,j.dom.content.style.height=`${V}px`,B()}),j.methods.set("updateGrid",(k)=>{if(k.columns!==void 0){if(!Number.isInteger(k.columns)||k.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");P.columns=k.columns}if(k.gap!==void 0){if(k.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");P.gap=k.gap}if(q)q.update(P);let M=j.getContainerWidth();if(K.containerWidth=M,K.columns=P.columns,K.gap=P.gap??0,J)J.updateContainerWidth(M);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let V=0;V<j.contentSizeHandlers.length;V++)j.contentSizeHandlers[V]();if(J)J.clear();j.forceRender()});let F=()=>{if(j.state.isDestroyed)return;let k=j.scrollController.getScrollTop(),M=j.state.viewportState.containerHeight,V=j.getVirtualTotal(),A={start:0,end:0};if(V===0||M===0)A.start=0,A.end=0;else{A.start=Math.max(0,j.heightCache.indexAtOffset(k));let g=j.heightCache.indexAtOffset(k+M);if(g<V-1)g++;A.end=Math.min(V-1,Math.max(0,g))}let S=G.overscan??3,v={start:Math.max(0,A.start-S),end:Math.min(V-1,A.end+S)};j.state.viewportState.scrollTop=k,j.state.viewportState.visibleRange=A,j.state.viewportState.renderRange=v;let I=j.state.lastRenderRange,d=j.state.viewportState.isCompressed;if(v.start===I.start&&v.end===I.end){if(d)J.updatePositions(j.getCompressionContext());return}let h=j.dataManager.getTotal(),m=q.getItemRange(v.start,v.end,h),r=j.dataManager.getItemsInRange(m.start,m.end),s=d?j.getCompressionContext():void 0;J.render(r,m,new Set,-1,s),j.state.lastRenderRange={...v},X.emit("range:change",{range:v})},T=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},F()};if(j.setRenderFns(F,T),j.resizeHandlers.push((k,M)=>{if(J)J.updateContainerWidth(k)}),j.methods.set("scrollToIndex",(k,M)=>{let V=Math.floor(k/Y.columns),{align:A,behavior:S}=D2(M),v=j.dataManager.getState(),I=q.getTotalRows(v.total),d=Math.max(0,Math.min(V,I-1)),h=t(d,j.heightCache,j.state.viewportState.containerHeight,I,A,j.getCachedCompression());if(S==="smooth")j.scrollController.scrollTo(h);else j.scrollController.scrollTo(h)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;D.root.classList.remove(`${b}--grid`)})},destroy(){if(J)J.destroy(),J=null}}},e=300,D2=(Y)=>{if(typeof Y==="string")return{align:Y,behavior:"auto",duration:e};if(Y&&typeof Y==="object")return{align:Y.align??"start",behavior:Y.behavior??"auto",duration:Y.duration??e};return{align:"start",behavior:"auto",duration:e}};export{X2 as withGrid,i as createGridRenderer,a as createGridLayout};
1
+ var a=(Y)=>{let q=Math.max(1,Math.floor(Y.columns)),J=Y.gap??0,j=Y.isHeaderFn,D={row:0,col:0},X=(K)=>{if(K<=0)return 0;if(!j)return Math.ceil(K/q);let k=0,N=0,B=0;for(let y=0;y<K;y++)if(j(y)){if(B++,N>0)k++,N=0;k++,N=0}else if(N++,N>=q)k++,N=0;if(N>0)k++;return k},G=(K)=>{return D.row=O(K),D.col=F(K),D},O=(K)=>{if(!j)return Math.floor(K/q);let k=0,N=0;for(let B=0;B<=K;B++)if(j(B)){if(N>0)k++,N=0;if(B===K)return k;k++,N=0}else{if(B===K)return k;if(N++,N>=q)k++,N=0}return console.warn(`⚠️ getRow(${K}) fell through - returning ${k}`),k},F=(K)=>{if(!j)return K%q;if(j(K))return 0;let k=0;for(let N=0;N<=K;N++)if(j(N))k=0;else{if(N===K)return k;if(k++,k>=q)k=0}return k},W=(K,k,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let M=Math.max(0,K*q),V=Math.min(N-1,(k+1)*q-1);return{start:M,end:V}}let B=-1,y=-1,v=0,$=0;for(let M=0;M<N;M++){if(j(M)){if($>0)v++,$=0;if(v>=K&&v<=k){if(B===-1)B=M;y=M}v++,$=0}else{if(v>=K&&v<=k){if(B===-1)B=M;y=M}if($++,$>=q)v++,$=0}if(v>k&&$===0)break}if(B===-1)return{start:0,end:-1};return{start:B,end:y}},E=(K,k,N)=>{if(k<0||k>=q)return-1;let B=K*q+k;if(B<0||B>=N)return-1;return B},b=(K)=>{let k=(q-1)*J;return Math.max(0,(K-k)/q)};return{get columns(){return q},get gap(){return J},update:(K)=>{if(K.columns!==void 0)q=Math.max(1,Math.floor(K.columns));if(K.gap!==void 0)J=K.gap;if(K.isHeaderFn!==void 0)j=K.isHeaderFn},getTotalRows:X,getPosition:G,getRow:O,getCol:F,getItemRange:W,getItemIndex:E,getColumnWidth:b,getColumnOffset:(K,k)=>{let N=b(k);return K*(N+J)}}};var n=16000000;var q2=(Y,q,J)=>{if(J===0)return 0;if(!Y.isVariable())return Math.floor(q/Y.getHeight(0));let j=0,D=0;for(let X=J-1;X>=0;X--){let G=Y.getHeight(X);if(D+G>q)break;D+=G,j++}return Math.max(j,1)},J2=(Y,q,J)=>{if(J===0)return 0;let j=Math.floor(q),D=q-j,X=Math.max(0,Math.min(j,J-1));return Y.getOffset(X)+D*Y.getHeight(X)};var K2=(Y,q)=>{let J=q.getTotalHeight(),j=J>n,D=j?n:J,X=J>0?D/J:1;return{isCompressed:j,actualHeight:J,virtualHeight:D,ratio:X}};var Q2=(Y,q,J,j,D,X,G)=>{if(!X.isCompressed||j===0)return J.getOffset(Y);let{virtualHeight:O}=X,F=O-D,W=F-q;if(W<=D&&W>=-1){if(q>=F-1){let $=J.getTotalHeight()-J.getOffset(Y);return D-$}let C=q2(J,D,j),K=Math.max(0,j-C),N=q/O*j,B=Math.max(0,Math.min(1,1-W/D)),y=J.getOffset(Y)-J.getOffset(K),v=J.getOffset(Y)-J2(J,N,j);return v+(y-v)*B}let E=q/O,b=J.getTotalHeight(),w=E*b;return J.getOffset(Y)-w};var Y2=(Y)=>{return Y!==null&&typeof Y==="object"&&Y.__groupHeader===!0};var N2=(Y=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let G=document.createElement("div");return G.setAttribute("role","option"),G},release:(X)=>{if(q.length<Y)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},o=(Y,q,J,j,D,X,G,O)=>{let F=N2(),W=new Map,E=X,b=!1,w=null,C=0,K="",k=(Q)=>{if(w&&C===Q)return w;return w=K2(Q,J),C=Q,w},N={selected:!1,focused:!1},B=(Q,Z)=>{return N.selected=Q,N.focused=Z,N},y=`${D}-item ${D}-grid-item`,v=`${D}-item--selected`,$=`${D}-item--focused`,M=(Q,Z)=>{if(typeof Z==="string")Q.innerHTML=Z;else Q.replaceChildren(Z)},V=(Q,Z,U)=>{Q.classList.toggle(v,Z),Q.classList.toggle($,U)},A=(Q,Z)=>{let U=j.getRow(Q);if(Z){let L=Z.totalItems,P=k(L);if(P.isCompressed)return Q2(U,Z.scrollTop,J,L,Z.containerHeight,P,Z.rangeStart)}return J.getOffset(U)},S=(Q,Z,U)=>{let L=Q.dataset.id?.startsWith("__group_header"),P=L?0:j.getCol(Z),_=L?0:j.getColumnOffset(P,E),f;if(b){let x=j.getRow(Z),z=0,u=new Set;for(let R=0;R<Z;R++){let p=j.getRow(R);if(p<x&&!u.has(p)){let l=J.getHeight(R);z+=l,u.add(p)}}f=z}else f=A(Z,U);Q.style.transform=`translate(${Math.round(_)}px, ${Math.round(f)}px)`},T=(Q,Z)=>{let U=Q.dataset.id?.startsWith("__group_header"),L=U?E:j.getColumnWidth(E),P;if(b||U)P=J.getHeight(Z)-j.gap;else{let _=j.getRow(Z);P=J.getHeight(_)-j.gap}Q.style.width=`${L}px`,Q.style.height=`${P}px`},I=(Q,Z,U,L,P)=>{let _=F.acquire(),f=B(U,L);if(_.className=y,_.dataset.index=String(Q),_.dataset.id=String(Z.id),_.dataset.row=String(j.getRow(Q)),_.dataset.col=String(j.getCol(Q)),_.ariaSelected=String(U),O)_.id=`${O}-item-${Q}`;if(G)K=String(G()),_.setAttribute("aria-setsize",K),_.setAttribute("aria-posinset",String(Q+1));T(_,Q);let x=q(Z,Q,f);return M(_,x),V(_,U,L),S(_,Q,P),_},d=(Q,Z,U,L,P)=>{if(Z.start===0&&Q.length>0)b=Y2(Q[0]);for(let[z,u]of W)if(z<Z.start||z>Z.end)u.element.remove(),F.release(u.element),W.delete(z);let _=!1;if(G){let z=String(G());_=z!==K,K=z}let f=document.createDocumentFragment(),x=[];for(let z=Z.start;z<=Z.end;z++){let u=z-Z.start,R=Q[u];if(!R){console.warn(`⚠️ RENDER: Missing item at index ${z} (range: ${Z.start}-${Z.end}, items.length: ${Q.length})`);continue}let p=U.has(R.id),l=z===L,H=W.get(z);if(H){let c=H.element.dataset.id,j2=String(R.id);if(c!==j2){let $2=B(p,l),k2=q(R,z,$2);M(H.element,k2),H.element.dataset.id=j2,H.element.dataset.row=String(j.getRow(z)),H.element.dataset.col=String(j.getCol(z)),T(H.element,z)}if(V(H.element,p,l),H.element.ariaSelected=String(p),S(H.element,z,P),_)H.element.setAttribute("aria-setsize",K)}else{let c=I(z,R,p,l,P);f.appendChild(c),x.push({index:z,element:c})}}if(x.length>0){Y.appendChild(f);for(let{index:z,element:u}of x)W.set(z,{index:z,element:u})}},m=(Q)=>{for(let[Z,U]of W)S(U.element,Z,Q)},h=(Q,Z,U,L)=>{let P=W.get(Q);if(P){let _=B(U,L),f=q(Z,Q,_);M(P.element,f),V(P.element,U,L),P.element.dataset.id=String(Z.id),P.element.ariaSelected=String(U),T(P.element,Q)}},r=(Q,Z,U)=>{let L=W.get(Q);if(L)V(L.element,Z,U)},s=(Q)=>{return W.get(Q)?.element},g=(Q)=>{if(Math.abs(Q-E)<1)return;E=Q;for(let[Z,U]of W)T(U.element,Z),S(U.element,Z)},e=()=>{for(let[,Q]of W)Q.element.remove(),F.release(Q.element);W.clear()};return{render:d,updatePositions:m,updateItem:h,updateItemClasses:r,getElement:s,updateContainerWidth:g,clear:e,destroy:()=>{e(),F.clear()}}};var Z2=(Y,q,J,j,D,X)=>{if(j===0)return 0;let G=Math.max(0,Math.min(Y,j-1)),O=q.getOffset(G),F=q.getHeight(G),W=q.getTotalHeight(),E=Math.max(0,W-J),b;switch(X){case"center":b=O-J/2+F/2;break;case"end":b=O-J+F;break;case"start":default:b=O;break}return Math.max(0,Math.min(b,E))};var i=(Y,q,J,j,D="start",X,G=Z2)=>{return G(Y,q,J,j,X,D)};var X2=(Y)=>{if(!Y.columns||Y.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,J=null;return{name:"withGrid",priority:10,setup(j){let{dom:D,emitter:X,config:G,rawConfig:O}=j,{classPrefix:F}=G;if(G.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let W=O.items?.some(($)=>$.__groupHeader===!0),E={columns:Y.columns,gap:Y.gap??0};if(W)E.isHeaderFn=($)=>{let M=j.dataManager.getItem($);return!!(M&&M.__groupHeader===!0)};q=a(E);let b=q.gap;j.setVirtualTotalFn(()=>{let $=j.dataManager.getTotal();return q.getTotalRows($)});let w=O.item,C=G.horizontal?w.width:w.height,K={containerWidth:j.getContainerWidth(),columns:q.columns,gap:q.gap};if(typeof C==="function")j.setHeightConfig(($)=>{let M=K.containerWidth-2,V=(K.columns-1)*K.gap,A=(M-V)/K.columns,S={containerWidth:K.containerWidth,columns:K.columns,gap:K.gap,columnWidth:A,row:q.getRow($),column:q.getCol($),totalRows:q.getTotalRows(j.dataManager.getTotal()),totalColumns:K.columns};return C($,S)+K.gap});else if(b>0)j.setHeightConfig(C+b);j.rebuildHeightCache(),D.root.classList.add(`${F}--grid`);let k=j.getContainerWidth(),N=O.item.template,B=()=>{J=o(D.items,N,j.heightCache,q,F,k,()=>j.dataManager.getTotal(),G.ariaIdPrefix),j.replaceRenderer(J)};B(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>E),j.methods.set("_replaceGridRenderer",($)=>{J=$}),j.methods.set("_updateGridLayoutForGroups",($)=>{q.update({isHeaderFn:$});let M=j.dataManager.getTotal(),V=0;for(let A=0;A<M;A++)if(q.getCol(A)===0){let S=j.heightCache.getHeight(A);V+=S}j.heightCache.getTotalHeight=()=>V,j.dom.content.style.height=`${V}px`,B()}),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");E.columns=$.columns}if($.gap!==void 0){if($.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");E.gap=$.gap}if(q)q.update(E);let M=j.getContainerWidth();if(K.containerWidth=M,K.columns=E.columns,K.gap=E.gap??0,J)J.updateContainerWidth(M);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let V=0;V<j.contentSizeHandlers.length;V++)j.contentSizeHandlers[V]();if(J)J.clear();j.forceRender()});let y=()=>{if(j.state.isDestroyed)return;let $=j.scrollController.getScrollTop(),M=j.state.viewportState.containerHeight,V=j.getVirtualTotal(),A={start:0,end:0};if(V===0||M===0)A.start=0,A.end=0;else{A.start=Math.max(0,j.heightCache.indexAtOffset($));let g=j.heightCache.indexAtOffset($+M);if(g<V-1)g++;A.end=Math.min(V-1,Math.max(0,g))}let S=G.overscan??3,T={start:Math.max(0,A.start-S),end:Math.min(V-1,A.end+S)};j.state.viewportState.scrollTop=$,j.state.viewportState.visibleRange=A,j.state.viewportState.renderRange=T;let I=j.state.lastRenderRange,d=j.state.viewportState.isCompressed;if(T.start===I.start&&T.end===I.end){if(d)J.updatePositions(j.getCompressionContext());return}let m=j.dataManager.getTotal(),h=q.getItemRange(T.start,T.end,m),r=j.dataManager.getItemsInRange(h.start,h.end),s=d?j.getCompressionContext():void 0;J.render(r,h,new Set,-1,s),j.state.lastRenderRange={...T},X.emit("range:change",{range:T})},v=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},y()};if(j.setRenderFns(y,v),j.resizeHandlers.push(($,M)=>{if(J)J.updateContainerWidth($)}),j.methods.set("scrollToIndex",($,M)=>{let V=Math.floor($/Y.columns),{align:A,behavior:S}=D2(M),T=j.dataManager.getState(),I=q.getTotalRows(T.total),d=Math.max(0,Math.min(V,I-1)),m=i(d,j.heightCache,j.state.viewportState.containerHeight,I,A,j.getCachedCompression());if(S==="smooth")j.scrollController.scrollTo(m);else j.scrollController.scrollTo(m)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;D.root.classList.remove(`${F}--grid`)})},destroy(){if(J)J.destroy(),J=null}}},t=300,D2=(Y)=>{if(typeof Y==="string")return{align:Y,behavior:"auto",duration:t};if(Y&&typeof Y==="object")return{align:Y.align??"start",behavior:Y.behavior??"auto",duration:Y.duration??t};return{align:"start",behavior:"auto",duration:t}};export{X2 as withGrid,o as createGridRenderer,a as createGridLayout};
package/dist/index.d.ts CHANGED
@@ -6,7 +6,6 @@
6
6
  * @packageDocumentation
7
7
  */
8
8
  export { vlist } from "./builder";
9
- export { createVList } from "./vlist";
10
9
  export { withScale } from "./features/scale";
11
10
  export { withAsync } from "./features/async";
12
11
  export { withScrollbar } from "./features/scrollbar";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:yj,getOwnPropertyNames:hJ,getOwnPropertyDescriptor:mJ}=Object,gJ=Object.prototype.hasOwnProperty;var aj=new WeakMap,dJ=(j)=>{var Q=aj.get(j),$;if(Q)return Q;if(Q=yj({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")hJ(j).map((J)=>!gJ.call(Q,J)&&yj(Q,J,{get:()=>j[J],enumerable:!($=mJ(j,J))||$.enumerable}));return aj.set(j,Q),Q};var cJ=(j,Q)=>{for(var $ in Q)yj(j,$,{get:Q[$],enumerable:!0,configurable:!0,set:(J)=>Q[$]=()=>J})};var rj=(j,Q)=>()=>(j&&(Q=j(j=0)),Q);var Rj=200,p2=50,oj=15,ij=2,tj=50,O2=16000000;var q4=(j,Q)=>{let $=Q;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if($===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),$-1))},getTotalHeight:()=>$*j,getTotal:()=>$,rebuild:(J)=>{$=J},isVariable:()=>!1}},K4=(j,Q)=>{let $=Q,J=new Float64Array(0),K=(q)=>{$=q,J=new Float64Array(q+1),J[0]=0;for(let Z=0;Z<q;Z++)J[Z+1]=J[Z]+j(Z)};K(Q);let X=(q)=>{if($===0)return 0;if(q<=0)return 0;if(q>=J[$])return $-1;let Z=0,G=$-1;while(Z<G){let U=Z+G+1>>>1;if(J[U]<=q)Z=U;else G=U-1}return Z};return{getOffset:(q)=>{if(q<=0)return 0;if(q>=$)return J[$];return J[q]},getHeight:(q)=>j(q),indexAtOffset:(q)=>X(q),getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(q)=>K(q),isVariable:()=>!0}},ej=(j,Q)=>{if(typeof j==="number")return q4(j,Q);return K4(j,Q)},kj=(j,Q,$,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil($/j.getHeight(0));let K=0,X=0,q=Q;while(q<J&&X<$)X+=j.getHeight(q),K++,q++;return Math.max(1,K)},i2=(j,Q,$)=>{if($===0)return 0;if(!j.isVariable())return Math.floor(Q/j.getHeight(0));let J=0,K=0;for(let X=$-1;X>=0;X--){let q=j.getHeight(X);if(K+q>Q)break;K+=q,J++}return Math.max(J,1)},t2=(j,Q,$)=>{if($===0)return 0;let J=Math.floor(Q),K=Q-J,X=Math.max(0,Math.min(J,$-1));return j.getOffset(X)+K*j.getHeight(X)};var M2=(j,Q)=>{let $=Q.getTotalHeight(),J=$>O2,K=J?O2:$,X=$>0?K/$:1;return{isCompressed:J,actualHeight:$,virtualHeight:K,ratio:X}},e2=(j,Q,$,J,K,X)=>{if(J===0||Q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let D=$.indexAtOffset(j),W=$.indexAtOffset(j+Q);if(W<J-1)W++;return X.start=Math.max(0,D),X.end=Math.min(J-1,Math.max(0,W)),X}let{virtualHeight:q}=K,G=j/q*J,U=Math.floor(G),B=kj($,Math.max(0,U),Q,J),_=Math.ceil(G)+B,z=q-Q-j;if(z<=Q&&z>=-1){let D=i2($,Q,J),W=Math.max(0,J-D),M=Math.max(0,Math.min(1,1-z/Q));U=Math.floor(U+(W-U)*M),_=z<=1?J-1:Math.min(J-1,U+B)}return X.start=Math.max(0,U),X.end=Math.min(J-1,Math.max(0,_)),X},jJ=(j,Q,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q),J},R2=(j,Q,$,J,K,X,q)=>{if(!X.isCompressed||J===0)return $.getOffset(j);let{virtualHeight:Z}=X,G=Z-K,U=G-Q;if(U<=K&&U>=-1){if(Q>=G-1){let R=$.getTotalHeight()-$.getOffset(j);return K-R}let L=i2($,K,J),z=Math.max(0,J-L),W=Q/Z*J,M=Math.max(0,Math.min(1,1-U/K)),F=$.getOffset(j)-$.getOffset(z),O=$.getOffset(j)-t2($,W,J);return O+(F-O)*M}let _=Q/Z*J;return $.getOffset(j)-t2($,_,J)},jj=(j,Q,$,J,K,X="start")=>{if(J===0)return 0;let q;if(K.isCompressed){if(X==="end"&&j===J-1)return Math.max(0,K.virtualHeight-$);q=j/J*K.virtualHeight}else q=Q.getOffset(j);let Z=Q.getHeight(j);switch(X){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let G=K.virtualHeight-$;return Math.max(0,Math.min(q,G))},JJ=(j,Q,$,J)=>{if($===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*$)}return Q.indexAtOffset(j)},$J=(j,Q)=>{if(typeof Q==="number")return j*Q>O2;return Q.getTotalHeight()>O2},QJ=(j)=>{if(j<=0)return 0;return Math.floor(O2/j)},XJ=(j,Q)=>{let $=M2(j,Q);if(!$.isCompressed)return`No compression needed (${j} items, ${($.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${j} items, ${($.actualHeight/1e6).toFixed(1)}M px → ${($.virtualHeight/1e6).toFixed(1)}M px virtual)`};var Jj=()=>{};var z2=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var qJ={};cJ(qJ,{createGridRenderer:()=>u2});var Y4=(j=200)=>{let Q=[];return{acquire:()=>{let X=Q.pop();if(X)return X;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:(X)=>{if(Q.length<j)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),Q.push(X)},clear:()=>{Q.length=0}}},u2=(j,Q,$,J,K,X,q,Z)=>{let G=Y4(),U=new Map,B=X,_=!1,L=null,z=0,D="",W=(P)=>{if(L&&z===P)return L;return L=M2(P,$),z=P,L},M={selected:!1,focused:!1},F=(P,C)=>{return M.selected=P,M.focused=C,M},O=`${K}-item ${K}-grid-item`,R=`${K}-item--selected`,A=`${K}-item--focused`,T=(P,C)=>{if(typeof C==="string")P.innerHTML=C;else P.replaceChildren(C)},V=(P,C,h)=>{P.classList.toggle(R,C),P.classList.toggle(A,h)},S=(P,C)=>{let h=J.getRow(P);if(C){let g=C.totalItems,s=W(g);if(s.isCompressed)return R2(h,C.scrollTop,$,g,C.containerHeight,s,C.rangeStart)}return $.getOffset(h)},N=(P,C,h)=>{let g=P.dataset.id?.startsWith("__group_header"),s=g?0:J.getCol(C),r=g?0:J.getColumnOffset(s,B),q2;if(_){let Z2=J.getRow(C),k=0,d=new Set;for(let x=0;x<C;x++){let J2=J.getRow(x);if(J2<Z2&&!d.has(J2)){let i=$.getHeight(x);k+=i,d.add(J2)}}q2=k}else q2=S(C,h);P.style.transform=`translate(${Math.round(r)}px, ${Math.round(q2)}px)`},b=(P,C)=>{let h=P.dataset.id?.startsWith("__group_header"),g=h?B:J.getColumnWidth(B),s;if(_||h)s=$.getHeight(C)-J.gap;else{let r=J.getRow(C);s=$.getHeight(r)-J.gap}P.style.width=`${g}px`,P.style.height=`${s}px`},m=(P,C,h,g,s)=>{let r=G.acquire(),q2=F(h,g);if(r.className=O,r.dataset.index=String(P),r.dataset.id=String(C.id),r.dataset.row=String(J.getRow(P)),r.dataset.col=String(J.getCol(P)),r.ariaSelected=String(h),Z)r.id=`${Z}-item-${P}`;if(q)D=String(q()),r.setAttribute("aria-setsize",D),r.setAttribute("aria-posinset",String(P+1));b(r,P);let Z2=Q(C,P,q2);return T(r,Z2),V(r,h,g),N(r,P,s),r},o=(P,C,h,g,s)=>{if(C.start===0&&P.length>0)_=z2(P[0]);for(let[k,d]of U)if(k<C.start||k>C.end)d.element.remove(),G.release(d.element),U.delete(k);let r=!1;if(q){let k=String(q());r=k!==D,D=k}let q2=document.createDocumentFragment(),Z2=[];for(let k=C.start;k<=C.end;k++){let d=k-C.start,x=P[d];if(!x){console.warn(`⚠️ RENDER: Missing item at index ${k} (range: ${C.start}-${C.end}, items.length: ${P.length})`);continue}let J2=h.has(x.id),i=k===g,Q2=U.get(k);if(Q2){let v=Q2.element.dataset.id,f=String(x.id);if(v!==f){let $2=F(J2,i),l=Q(x,k,$2);T(Q2.element,l),Q2.element.dataset.id=f,Q2.element.dataset.row=String(J.getRow(k)),Q2.element.dataset.col=String(J.getCol(k)),b(Q2.element,k)}if(V(Q2.element,J2,i),Q2.element.ariaSelected=String(J2),N(Q2.element,k,s),r)Q2.element.setAttribute("aria-setsize",D)}else{let v=m(k,x,J2,i,s);q2.appendChild(v),Z2.push({index:k,element:v})}}if(Z2.length>0){j.appendChild(q2);for(let{index:k,element:d}of Z2)U.set(k,{index:k,element:d})}},c=(P)=>{for(let[C,h]of U)N(h.element,C,P)},e=(P,C,h,g)=>{let s=U.get(P);if(s){let r=F(h,g),q2=Q(C,P,r);T(s.element,q2),V(s.element,h,g),s.element.dataset.id=String(C.id),s.element.ariaSelected=String(h),b(s.element,P)}},j2=(P,C,h)=>{let g=U.get(P);if(g)V(g.element,C,h)},H=(P)=>{return U.get(P)?.element},w=(P)=>{if(Math.abs(P-B)<1)return;B=P;for(let[C,h]of U)b(h.element,C),N(h.element,C)},p=()=>{for(let[,P]of U)P.element.remove(),G.release(P.element);U.clear()};return{render:o,updatePositions:c,updateItem:e,updateItemClasses:j2,getElement:H,updateContainerWidth:w,clear:p,destroy:()=>{p(),G.clear()}}};var $j=rj(()=>{Jj()});var lJ=0,H2=5,sJ=100,Hj=2,aJ=(j=0)=>{let Q=Array(H2);for(let $=0;$<H2;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},rJ=(j,Q)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>sJ){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=Q,X.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=Q,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=Q,K.time=$,j.sampleIndex=(j.sampleIndex+1)%H2,j.sampleCount=Math.min(j.sampleCount+1,H2),j.sampleCount>=Hj){let X=(j.sampleIndex-j.sampleCount+H2)%H2,q=j.samples[X],Z=Q-q.position,G=$-q.time;j.velocity=G>0?Math.abs(Z)/G:0}return j.lastPosition=Q,j.lastTime=$,j},nj=(j,Q)=>{if(typeof j==="number"){let X=Q;return{getOffset:(q)=>q*j,getHeight:()=>j,indexAtOffset:(q)=>{if(X===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(q/j),X-1))},getTotalHeight:()=>X*j,getTotal:()=>X,rebuild:(q)=>{X=q},isVariable:()=>!1}}let $=Q,J=new Float64Array(0),K=(X)=>{$=X,J=new Float64Array(X+1),J[0]=0;for(let q=0;q<X;q++)J[q+1]=J[q]+j(q)};return K(Q),{getOffset:(X)=>{if(X<=0)return 0;if(X>=$)return J[$];return J[X]},getHeight:(X)=>j(X),indexAtOffset:(X)=>{if($===0)return 0;if(X<=0)return 0;if(X>=J[$])return $-1;let q=0,Z=$-1;while(q<Z){let G=q+Z+1>>>1;if(J[G]<=X)q=G;else Z=G-1}return q},getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(X)=>K(X),isVariable:()=>!0}},nJ=()=>{let j={},Q=(X,q)=>{if(!j[X])j[X]=new Set;return j[X].add(q),()=>$(X,q)},$=(X,q)=>{j[X]?.delete(q)};return{on:Q,off:$,emit:(X,q)=>{j[X]?.forEach((Z)=>{try{Z(q)}catch(G){console.error(`[vlist] Error in "${X}" handler:`,G)}})},clear:()=>{for(let X in j)delete j[X]}}},oJ=(j)=>{if(typeof j==="string"){let Q=document.querySelector(j);if(!Q)throw Error(`[vlist/builder] Container not found: ${j}`);return Q}return j},iJ=(j,Q,$,J)=>{let K=document.createElement("div");if(K.className=Q,J)K.classList.add(`${Q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),$)K.setAttribute("aria-label",$);if(J)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${Q}-viewport`,J)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let q=document.createElement("div");if(q.className=`${Q}-content`,q.style.position="relative",J)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${Q}-items`,Z.style.position="relative",J)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),X.appendChild(q),K.appendChild(X),j.appendChild(K),{root:K,viewport:X,content:q,items:Z}},tJ=(j=100)=>{let Q=[];return{acquire:()=>{let $=Q.pop();if($)return $;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:($)=>{if(Q.length<j)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),Q.push($)},clear:()=>{Q.length=0}}},eJ=(j,Q,$,J,K)=>{if(J===0||Q===0){K.start=0,K.end=0;return}let X=$.indexAtOffset(j),q=$.indexAtOffset(j+Q);if(q<J-1)q++;K.start=Math.max(0,X),K.end=Math.min(J-1,Math.max(0,q))},j4=(j,Q,$,J)=>{if($===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q)},J4=(j,Q,$,J,K)=>{if(J===0)return 0;let X=Math.max(0,Math.min(j,J-1)),q=Q.getOffset(X),Z=Q.getHeight(X),G=Math.max(0,Q.getTotalHeight()-$),U;switch(K){case"center":U=q-($-Z)/2;break;case"end":U=q-$+Z;break;default:U=q}return Math.max(0,Math.min(U,G))},$4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,Q4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:300};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??300};return{align:"start",behavior:"auto",duration:300}},n2=(j)=>{if(!j.container)throw Error("[vlist/builder] Container is required");if(!j.item)throw Error("[vlist/builder] item configuration is required");let Q=j.direction==="horizontal",$=Q?"width":"height",J=Q?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${$} is required${Q?" when direction is 'horizontal'":""}`);if(typeof J==="number"&&J<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof J!=="number"&&typeof J!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!j.item.template)throw Error("[vlist/builder] item.template is required");if(Q&&j.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let K=new Map,X=!1,q={use(Z){if(X)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(Z.name,Z),q},build(){if(X)throw Error("[vlist/builder] .build() can only be called once");return X=!0,X4(j,K,Q,J)}};return q};function X4(j,Q,$,J){let{item:K,items:X,overscan:q=3,classPrefix:Z="vlist",ariaLabel:G,reverse:U=!1,scroll:B}=j,_=B?.wheel??!0,L=B?.wrap??!1,z=U,D=`${Z}-${lJ++}`,W=J,M=$?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,F=K.template,O={overscan:q,classPrefix:Z,reverse:z,wrap:L,horizontal:$,ariaIdPrefix:D},R=Array.from(Q.values()).sort((Y,E)=>(Y.priority??50)-(E.priority??50)),A=new Set(R.map((Y)=>Y.name));for(let Y of R)if(Y.conflicts){for(let E of Y.conflicts)if(A.has(E))throw Error(`[vlist/builder] ${Y.name} and ${E} cannot be combined`)}if($){if(A.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(A.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(z){if(A.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let T=oJ(j.container),V=iJ(T,Z,G,$),S=nJ(),N=X?[...X]:[],b=nj(W,N.length),m=tJ(),o=V.viewport.clientHeight,c=V.viewport.clientWidth,e=!1,j2=!1,H=0,w=null,p=null,u=aJ(0),P={start:0,end:0},C={start:0,end:0},h={start:-1,end:-1},g={viewportState:{scrollTop:0,containerHeight:o,totalHeight:b.getTotalHeight(),actualHeight:b.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},s=new Map,r={selected:!1,focused:!1},q2=`${Z}-item`,Z2="",k=new Map,d=()=>{k.clear();for(let Y=0;Y<N.length;Y++){let E=N[Y];if(E)k.set(E.id,Y)}};d();let x=null,J2=()=>x?x.getTotal():N.length,i=[],Q2=[],v=[],f=[],n=[],$2=[],l=new Map,X2=()=>{return $?V.viewport.scrollLeft:V.viewport.scrollTop},K2=(Y)=>{if($)V.viewport.scrollLeft=Y;else V.viewport.scrollTop=Y},E2=(Y=2)=>{let E=b.getTotalHeight();return H+o>=E-Y},U2=!1,Y2,_2,B2=(Y,E,y,I,t)=>{eJ(Y,E,y,I,t)},G2=(Y,E,y,I,t)=>{return J4(Y,E,y,I,t)},D2=(Y,E)=>{if(typeof E==="string")Y.innerHTML=E;else Y.replaceChildren(E)},L2=(Y,E)=>{let y=Math.round(b.getOffset(E));if($)Y.style.transform=`translateX(${y}px)`;else Y.style.transform=`translateY(${y}px)`},LJ=(Y,E)=>{let y=m.acquire();if(y.className=q2,$){if(y.style.width=`${b.getHeight(Y)}px`,M!=null)y.style.height=`${M}px`}else y.style.height=`${b.getHeight(Y)}px`;return y.dataset.index=String(Y),y.dataset.id=String(E.id),y.ariaSelected="false",y.id=`${D}-item-${Y}`,Z2=String(J2()),y.setAttribute("aria-setsize",Z2),y.setAttribute("aria-posinset",String(Y+1)),D2(y,F(E,Y,r)),L2(y,Y),y},v2=()=>{let Y=`${b.getTotalHeight()}px`;if($)V.content.style.width=Y;else V.content.style.height=Y},Lj=new Set,Oj=-1,OJ=()=>{if(e)return;let Y=J2();if(B2(H,o,b,Y,P),j4(P,q,Y,C),C.start===h.start&&C.end===h.end)return;let E=String(Y),y=E!==Z2;Z2=E;for(let[a,N2]of s)if(a<C.start||a>C.end)N2.remove(),m.release(N2),s.delete(a);let I=document.createDocumentFragment(),t=[];for(let a=C.start;a<=C.end;a++){let N2=x?x.getItem(a):N[a];if(!N2)continue;let V2=s.get(a);if(V2){let A2=V2.dataset.id,a2=String(N2.id);if(A2!==a2)if(D2(V2,F(N2,a,r)),V2.dataset.id=a2,$)V2.style.width=`${b.getHeight(a)}px`;else V2.style.height=`${b.getHeight(a)}px`;L2(V2,a);let r2=Lj.has(N2.id),xJ=a===Oj;if(V2.classList.toggle(`${Z}-item--selected`,r2),V2.classList.toggle(`${Z}-item--focused`,xJ),V2.ariaSelected=r2?"true":"false",y)V2.setAttribute("aria-setsize",Z2)}else{let A2=LJ(a,N2),a2=Lj.has(N2.id),r2=a===Oj;if(a2)A2.classList.add(`${Z}-item--selected`),A2.ariaSelected="true";if(r2)A2.classList.add(`${Z}-item--focused`);I.appendChild(A2),t.push({index:a,element:A2})}}if(t.length>0){V.items.appendChild(I);for(let{index:a,element:N2}of t)s.set(a,N2)}h.start=C.start,h.end=C.end,g.lastRenderRange.start=C.start,g.lastRenderRange.end=C.end,g.viewportState.scrollTop=H,g.viewportState.visibleRange.start=P.start,g.viewportState.visibleRange.end=P.end,g.viewportState.renderRange.start=C.start,g.viewportState.renderRange.end=C.end,S.emit("range:change",{range:{start:C.start,end:C.end}})},zJ=()=>{h.start=-1,h.end=-1,Y2()};Y2=OJ,_2=zJ;let f2=()=>{if(e)return;let Y=X2(),E=Y>=H?"down":"up";if(u=rJ(u,Y),!V.root.classList.contains(`${Z}--scrolling`))V.root.classList.add(`${Z}--scrolling`);H=Y,Y2(),S.emit("scroll",{scrollTop:Y,direction:E}),S.emit("velocity:change",{velocity:u.velocity,reliable:u.sampleCount>=Hj});for(let y=0;y<i.length;y++)i[y](Y,E);if(p)clearTimeout(p);p=setTimeout(()=>{V.root.classList.remove(`${Z}--scrolling`),u.velocity=0,u.sampleCount=0,S.emit("velocity:change",{velocity:0,reliable:!1})},B?.idleTimeout??150)},l2=null,y2=V.viewport;if(y2.addEventListener("scroll",f2,{passive:!0}),$&&_)l2=(Y)=>{if(Y.deltaX)return;Y.preventDefault(),V.viewport.scrollLeft+=Y.deltaY},V.viewport.addEventListener("wheel",l2);let gj=(Y)=>{let y=Y.target.closest("[data-index]");if(y){let I=parseInt(y.dataset.index??"-1",10);if(I>=0){let t=x?.getItem(I)??N[I];if(t){if(t.__groupHeader)return;S.emit("item:click",{item:t,index:I,event:Y})}}}for(let I=0;I<Q2.length;I++)Q2[I](Y)},PJ=(Y)=>{let y=Y.target.closest("[data-index]");if(y){let I=parseInt(y.dataset.index??"-1",10);if(I>=0){let t=x?.getItem(I)??N[I];if(t){if(t.__groupHeader)return;S.emit("item:dblclick",{item:t,index:I,event:Y})}}}},dj=(Y)=>{for(let E=0;E<v.length;E++)v[E](Y)};V.items.addEventListener("click",gj),V.items.addEventListener("dblclick",PJ),V.root.addEventListener("keydown",dj);let zj=!0,bJ=()=>c,yJ=()=>o,Pj=new ResizeObserver((Y)=>{if(e)return;for(let E of Y){let y=E.contentRect.height,I=E.contentRect.width,t=$?I:y;if(c=I,Math.abs(t-o)>1){if(o=t,g.viewportState.containerHeight=t,j2)v2(),Y2(),S.emit("resize",{height:y,width:I})}if(j2)for(let a=0;a<f.length;a++)f[a](I,y)}});if(zj)Pj.observe(V.viewport);let W2={get dom(){return V},get heightCache(){return b},get emitter(){return S},get config(){return O},get rawConfig(){return j},get renderer(){return{render:(Y,E,y,I,t)=>{Lj=y,Oj=I,_2()},updateItemClasses:(Y,E,y)=>{let I=s.get(Y);if(!I)return;I.classList.toggle(`${Z}-item--selected`,E),I.classList.toggle(`${Z}-item--focused`,y),I.ariaSelected=E?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Y)=>s.get(Y)??null,clear:()=>{},destroy:()=>{}}},set renderer(Y){},get dataManager(){return x},set dataManager(Y){x=Y},get scrollController(){return bj},set scrollController(Y){bj=Y},state:g,getContainerWidth(){return c},afterScroll:i,clickHandlers:Q2,keydownHandlers:v,resizeHandlers:f,contentSizeHandlers:n,destroyHandlers:$2,methods:l,replaceTemplate(Y){F=Y},replaceRenderer(Y){},replaceDataManager(Y){x=Y},replaceScrollController(Y){bj=Y},getItemsForRange(Y){let E=[];for(let y=Y.start;y<=Y.end;y++){let I=x?x.getItem(y):N[y];if(I)E.push(I)}return E},getAllLoadedItems(){if(x){let Y=x.getTotal(),E=[];for(let y=0;y<Y;y++){let I=x.getItem(y);if(I)E.push(I)}return E}return[...N]},getVirtualTotal(){return J2()},getCachedCompression(){return{isCompressed:!1,actualHeight:b.getTotalHeight(),virtualHeight:b.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:H,totalItems:J2(),containerHeight:o,rangeStart:C.start}},renderIfNeeded(){Y2()},forceRender(){_2()},getRenderFns(){return{renderIfNeeded:Y2,forceRender:_2}},setRenderFns(Y,E){Y2=Y,_2=E},setVirtualTotalFn(Y){J2=Y},rebuildHeightCache(Y){b.rebuild(Y??J2())},setHeightConfig(Y){b=nj(Y,J2())},updateContentSize(Y){let E=`${Y}px`;if($)V.content.style.width=E;else V.content.style.height=E},updateCompressionMode(){},setVisibleRangeFn(Y){B2=Y},setScrollToPosFn(Y){G2=Y},setPositionElementFn(Y){L2=Y},setScrollFns(Y,E){X2=Y,K2=(y)=>{E(y),f2()}},setScrollTarget(Y){y2.removeEventListener("scroll",f2),y2=Y,y2.addEventListener("scroll",f2,{passive:!0})},getScrollTarget(){return y2},setContainerDimensions(Y){bJ=Y.width,yJ=Y.height,c=Y.width(),o=Y.height(),g.viewportState.containerHeight=o},disableViewportResize(){if(zj)zj=!1,Pj.unobserve(V.viewport)}};x={getState:()=>({total:N.length,cached:N.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>N.length,getCached:()=>N.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>N[Y],getItemById:(Y)=>{let E=k.get(Y);return E!==void 0?N[E]:void 0},getIndexById:(Y)=>k.get(Y)??-1,isItemLoaded:(Y)=>Y>=0&&Y<N.length&&N[Y]!==void 0,getItemsInRange:(Y,E)=>{let y=[],I=Math.max(0,Y),t=Math.min(E,N.length-1);for(let a=I;a<=t;a++)y.push(N[a]);return y},setTotal:(Y)=>{},setItems:(Y,E=0,y)=>{if(E===0&&(y!==void 0||N.length===0))N=[...Y];else{let I=E+Y.length;if(N.length<I)N.length=I;for(let t=0;t<Y.length;t++)N[E+t]=Y[t]}if(d(),j2){b.rebuild(J2()),v2(),W2.updateCompressionMode();for(let I=0;I<n.length;I++)n[I]();_2()}},updateItem:(Y,E)=>{let y=k.get(Y);if(y===void 0)return!1;let I=N[y];if(!I)return!1;if(N[y]={...I,...E},E.id!==void 0&&E.id!==Y)k.delete(Y),k.set(E.id,y);let t=s.get(y);if(t)D2(t,F(N[y],y,r)),t.dataset.id=String(N[y].id);return!0},removeItem:(Y)=>{let E=k.get(Y);if(E===void 0)return!1;if(N.splice(E,1),d(),j2){b.rebuild(J2()),v2(),W2.updateCompressionMode();for(let y=0;y<n.length;y++)n[y]();_2()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{N=[],k.clear()},reset:()=>{if(N=[],k.clear(),j2)b.rebuild(0),v2(),_2()}};let bj={getScrollTop:()=>X2(),scrollTo:(Y)=>{K2(Y),H=Y,Y2()},scrollBy:(Y)=>{let E=X2()+Y;K2(E),H=E,Y2()},isAtTop:()=>H<=2,isAtBottom:(Y=2)=>E2(Y),getScrollPercentage:()=>{let Y=b.getTotalHeight(),E=Math.max(0,Y-o);return E>0?H/E:0},getVelocity:()=>u.velocity,isTracking:()=>u.sampleCount>=Hj,isScrolling:()=>V.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>U2,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{o=Y},destroy:()=>{}},cj=new Map;for(let Y of R)if(Y.methods)for(let E of Y.methods){let y=cj.get(E);if(y)throw Error(`[vlist/builder] Method "${E}" is registered by both "${y}" and "${Y.name}"`);cj.set(E,Y.name)}for(let Y of R)Y.setup(W2);if(j2=!0,W2.state.isInitialized=!0,v2(),Y2(),z&&N.length>0){let Y=G2(N.length-1,b,o,N.length,"end");K2(Y),H=Y,Y2()}let HJ=(Y)=>{W2.dataManager.setItems(Y,0,Y.length)},RJ=z?(Y)=>{let E=E2(2),y=N.length;if(W2.dataManager.setItems(Y,y),E&&N.length>0){let I=G2(N.length-1,b,o,N.length,"end");K2(I),H=I,Y2()}}:(Y)=>{let E=N.length;W2.dataManager.setItems(Y,E)},kJ=z?(Y)=>{let E=X2(),y=b.getTotalHeight(),I=[...N];W2.dataManager.clear(),W2.dataManager.setItems([...Y,...I],0);let a=b.getTotalHeight()-y;if(a>0)K2(E+a),H=E+a}:(Y)=>{let E=[...N];W2.dataManager.clear(),W2.dataManager.setItems([...Y,...E],0)},TJ=(Y,E)=>{W2.dataManager.updateItem(Y,E)},CJ=(Y)=>{W2.dataManager.removeItem(Y)},SJ=async()=>{if(W2.dataManager.reload)await W2.dataManager.reload()},s2=()=>{if(w!==null)cancelAnimationFrame(w),w=null},wJ=(Y,E,y)=>{if(s2(),Math.abs(E-Y)<1){K2(E),H=E,Y2();return}let I=performance.now(),t=(a)=>{let N2=a-I,V2=Math.min(N2/y,1),A2=Y+(E-Y)*$4(V2);if(K2(A2),H=A2,Y2(),V2<1)w=requestAnimationFrame(t);else w=null};w=requestAnimationFrame(t)},lj=(Y,E)=>{let{align:y,behavior:I,duration:t}=Q4(E),a=J2(),N2=Y;if(L&&a>0)N2=(N2%a+a)%a;let V2=G2(N2,b,o,a,y);if(I==="smooth")wJ(X2(),V2,t);else s2(),K2(V2)},vJ=(Y,E)=>{let y=k.get(Y)??W2.dataManager.getIndexById(Y);if(y>=0)lj(y,E)},fJ=()=>X2(),IJ=(Y,E)=>{return S.on(Y,E)},pJ=(Y,E)=>{S.off(Y,E)},uJ=()=>{if(e)return;if(e=!0,W2.state.isDestroyed=!0,V.items.removeEventListener("click",gj),V.root.removeEventListener("keydown",dj),y2.removeEventListener("scroll",f2),Pj.disconnect(),l2)V.viewport.removeEventListener("wheel",l2);if(p)clearTimeout(p);for(let Y=0;Y<$2.length;Y++)$2[Y]();for(let Y of R)if(Y.destroy)Y.destroy();s2();for(let[,Y]of s)Y.remove(),m.release(Y);s.clear(),m.clear(),S.clear(),V.root.remove()},sj={get element(){return V.root},get items(){if(l.has("_getItems"))return l.get("_getItems")();return N},get total(){if(l.has("_getTotal"))return l.get("_getTotal")();return J2()},setItems:l.has("setItems")?l.get("setItems"):HJ,appendItems:l.has("appendItems")?l.get("appendItems"):RJ,prependItems:l.has("prependItems")?l.get("prependItems"):kJ,updateItem:l.has("updateItem")?l.get("updateItem"):TJ,removeItem:l.has("removeItem")?l.get("removeItem"):CJ,reload:l.has("reload")?l.get("reload"):SJ,scrollToIndex:l.has("scrollToIndex")?l.get("scrollToIndex"):lj,scrollToItem:l.has("scrollToItem")?l.get("scrollToItem"):vJ,cancelScroll:l.has("cancelScroll")?l.get("cancelScroll"):s2,getScrollPosition:l.has("getScrollPosition")?l.get("getScrollPosition"):fJ,on:IJ,off:pJ,destroy:uJ};for(let[Y,E]of l){if(Y==="setItems"||Y==="appendItems"||Y==="prependItems"||Y==="updateItem"||Y==="removeItem"||Y==="reload"||Y==="scrollToIndex"||Y==="scrollToItem"||Y==="cancelScroll"||Y==="getScrollPosition")continue;sj[Y]=E}return sj}var o2=(j)=>{let Q=Math.max(1,Math.floor(j.columns)),$=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},X=(D)=>{if(D<=0)return 0;if(!J)return Math.ceil(D/Q);let W=0,M=0,F=0;for(let O=0;O<D;O++)if(J(O)){if(F++,M>0)W++,M=0;W++,M=0}else if(M++,M>=Q)W++,M=0;if(M>0)W++;return W},q=(D)=>{return K.row=Z(D),K.col=G(D),K},Z=(D)=>{if(!J)return Math.floor(D/Q);let W=0,M=0;for(let F=0;F<=D;F++)if(J(F)){if(M>0)W++,M=0;if(F===D)return W;W++,M=0}else{if(F===D)return W;if(M++,M>=Q)W++,M=0}return console.warn(`⚠️ getRow(${D}) fell through - returning ${W}`),W},G=(D)=>{if(!J)return D%Q;if(J(D))return 0;let W=0;for(let M=0;M<=D;M++)if(J(M))W=0;else{if(M===D)return W;if(W++,W>=Q)W=0}return W},U=(D,W,M)=>{if(M<=0)return{start:0,end:-1};if(!J){let T=Math.max(0,D*Q),V=Math.min(M-1,(W+1)*Q-1);return{start:T,end:V}}let F=-1,O=-1,R=0,A=0;for(let T=0;T<M;T++){if(J(T)){if(A>0)R++,A=0;if(R>=D&&R<=W){if(F===-1)F=T;O=T}R++,A=0}else{if(R>=D&&R<=W){if(F===-1)F=T;O=T}if(A++,A>=Q)R++,A=0}if(R>W&&A===0)break}if(F===-1)return{start:0,end:-1};return{start:F,end:O}},B=(D,W,M)=>{if(W<0||W>=Q)return-1;let F=D*Q+W;if(F<0||F>=M)return-1;return F},_=(D)=>{let W=(Q-1)*$;return Math.max(0,(D-W)/Q)};return{get columns(){return Q},get gap(){return $},update:(D)=>{if(D.columns!==void 0)Q=Math.max(1,Math.floor(D.columns));if(D.gap!==void 0)$=D.gap;if(D.isHeaderFn!==void 0)J=D.isHeaderFn},getTotalRows:X,getPosition:q,getRow:Z,getCol:G,getItemRange:U,getItemIndex:B,getColumnWidth:_,getColumnOffset:(D,W)=>{let M=_(W);return D*(M+$)}}};$j();var Tj=(j,Q,$,J,K,X)=>{if(J===0||Q===0)return X.start=0,X.end=-1,X;let q=$.indexAtOffset(j),Z=$.indexAtOffset(j+Q);if(Z<J-1)Z++;return X.start=Math.max(0,q),X.end=Math.min(J-1,Math.max(0,Z)),X},Cj=(j,Q,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q),J},KJ=(j,Q,$,J,K,X)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Z=Q.getOffset(q),G=Q.getHeight(q),U=Q.getTotalHeight(),B=Math.max(0,U-$),_;switch(X){case"center":_=Z-$/2+G/2;break;case"end":_=Z-$+G;break;case"start":default:_=Z;break}return Math.max(0,Math.min(_,B))},YJ=(j,Q,$)=>{if($&&$.isCompressed)return $.virtualHeight;return Q.getTotalHeight()},ZJ=(j,Q)=>{return Q.getTotalHeight()},BJ=(j,Q)=>{return Q.getOffset(j)},UJ=(j,Q,$)=>{let J=Math.max(0,Q-$);return Math.max(0,Math.min(j,J))};var Sj=(j,Q,$,J,K,X=Tj)=>{return X(j.scrollTop,j.containerHeight,Q,$,K,j.visibleRange),Cj(j.visibleRange,J,$,j.renderRange),j.totalHeight=K.virtualHeight,j.actualHeight=K.actualHeight,j.isCompressed=K.isCompressed,j.compressionRatio=K.ratio,j},P2=(j,Q,$,J,K="start",X,q=KJ)=>{return q(j,Q,$,J,X,K)},DJ=(j,Q)=>{return j.start===Q.start&&j.end===Q.end},WJ=(j,Q)=>{return j>=Q.start&&j<=Q.end},NJ=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var VJ=(j,Q)=>{let $=[],J=[];for(let K=j.start;K<=j.end;K++)if(K<Q.start||K>Q.end)J.push(K);for(let K=Q.start;K<=Q.end;K++)if(K<j.start||K>j.end)$.push(K);return{add:$,remove:J}};Jj();var Qj=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let Q=null,$=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:X,config:q,rawConfig:Z}=J,{classPrefix:G}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let U=Z.items?.some((A)=>A.__groupHeader===!0),B={columns:j.columns,gap:j.gap??0};if(U)B.isHeaderFn=(A)=>{let T=J.dataManager.getItem(A);return!!(T&&T.__groupHeader===!0)};Q=o2(B);let _=Q.gap;J.setVirtualTotalFn(()=>{let A=J.dataManager.getTotal();return Q.getTotalRows(A)});let L=Z.item,z=q.horizontal?L.width:L.height,D={containerWidth:J.getContainerWidth(),columns:Q.columns,gap:Q.gap};if(typeof z==="function")J.setHeightConfig((A)=>{let T=D.containerWidth-2,V=(D.columns-1)*D.gap,S=(T-V)/D.columns,N={containerWidth:D.containerWidth,columns:D.columns,gap:D.gap,columnWidth:S,row:Q.getRow(A),column:Q.getCol(A),totalRows:Q.getTotalRows(J.dataManager.getTotal()),totalColumns:D.columns};return z(A,N)+D.gap});else if(_>0)J.setHeightConfig(z+_);J.rebuildHeightCache(),K.root.classList.add(`${G}--grid`);let W=J.getContainerWidth(),M=Z.item.template,F=()=>{$=u2(K.items,M,J.heightCache,Q,G,W,()=>J.dataManager.getTotal(),q.ariaIdPrefix),J.replaceRenderer($)};F(),J.methods.set("_getGridLayout",()=>Q),J.methods.set("_getGridConfig",()=>B),J.methods.set("_replaceGridRenderer",(A)=>{$=A}),J.methods.set("_updateGridLayoutForGroups",(A)=>{Q.update({isHeaderFn:A});let T=J.dataManager.getTotal(),V=0;for(let S=0;S<T;S++)if(Q.getCol(S)===0){let N=J.heightCache.getHeight(S);V+=N}J.heightCache.getTotalHeight=()=>V,J.dom.content.style.height=`${V}px`,F()}),J.methods.set("updateGrid",(A)=>{if(A.columns!==void 0){if(!Number.isInteger(A.columns)||A.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");B.columns=A.columns}if(A.gap!==void 0){if(A.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");B.gap=A.gap}if(Q)Q.update(B);let T=J.getContainerWidth();if(D.containerWidth=T,D.columns=B.columns,D.gap=B.gap??0,$)$.updateContainerWidth(T);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let V=0;V<J.contentSizeHandlers.length;V++)J.contentSizeHandlers[V]();if($)$.clear();J.forceRender()});let O=()=>{if(J.state.isDestroyed)return;let A=J.scrollController.getScrollTop(),T=J.state.viewportState.containerHeight,V=J.getVirtualTotal(),S={start:0,end:0};if(V===0||T===0)S.start=0,S.end=0;else{S.start=Math.max(0,J.heightCache.indexAtOffset(A));let w=J.heightCache.indexAtOffset(A+T);if(w<V-1)w++;S.end=Math.min(V-1,Math.max(0,w))}let N=q.overscan??3,b={start:Math.max(0,S.start-N),end:Math.min(V-1,S.end+N)};J.state.viewportState.scrollTop=A,J.state.viewportState.visibleRange=S,J.state.viewportState.renderRange=b;let m=J.state.lastRenderRange,o=J.state.viewportState.isCompressed;if(b.start===m.start&&b.end===m.end){if(o)$.updatePositions(J.getCompressionContext());return}let c=J.dataManager.getTotal(),e=Q.getItemRange(b.start,b.end,c),j2=J.dataManager.getItemsInRange(e.start,e.end),H=o?J.getCompressionContext():void 0;$.render(j2,e,new Set,-1,H),J.state.lastRenderRange={...b},X.emit("range:change",{range:b})},R=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},O()};if(J.setRenderFns(O,R),J.resizeHandlers.push((A,T)=>{if($)$.updateContainerWidth(A)}),J.methods.set("scrollToIndex",(A,T)=>{let V=Math.floor(A/j.columns),{align:S,behavior:N}=Z4(T),b=J.dataManager.getState(),m=Q.getTotalRows(b.total),o=Math.max(0,Math.min(V,m-1)),c=P2(o,J.heightCache,J.state.viewportState.containerHeight,m,S,J.getCachedCompression());if(N==="smooth")J.scrollController.scrollTo(c);else J.scrollController.scrollTo(c)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if($)$.destroy(),$=null;K.root.classList.remove(`${G}--grid`)})},destroy(){if($)$.destroy(),$=null}}},wj=300,Z4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:wj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??wj};return{align:"start",behavior:"auto",duration:wj}};var vj=(j,Q)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].headerLayoutIndex<=Q)$=K;else J=K-1}return $},_J=(j,Q)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].firstDataIndex<=Q)$=K;else J=K-1}return $},GJ=(j,Q)=>{if(j===0)return[];let $=[],J=Q(0),K=0,X=0;for(let q=1;q<j;q++){let Z=Q(q);if(Z!==J){let G=q-K;$.push({key:J,groupIndex:$.length,headerLayoutIndex:X,firstDataIndex:K,count:G}),X=X+1+G,J=Z,K=q}}return $.push({key:J,groupIndex:$.length,headerLayoutIndex:X,firstDataIndex:K,count:j-K}),$},x2=(j,Q)=>{if(j.length===0||Q.length===0)return[];let $=j.length+Q.length,J=Array($),K=0;for(let X of Q){J[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let q=0;q<X.count;q++)J[K]=j[X.firstDataIndex+q],K++}return J},h2=(j,Q)=>{let $=typeof Q==="number"?(J)=>Q:Q;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return $(K.dataIndex)}},Xj=(j,Q)=>{let $=GJ(j,Q.getGroupForIndex),J=j+$.length,K=Q.headerHeight;return{get totalEntries(){return J},get groupCount(){return $.length},get groups(){return $},getEntry:(L)=>{if($.length===0)return{type:"item",dataIndex:L,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let z=vj($,L),D=$[z];if(L===D.headerLayoutIndex)return{type:"header",group:D};let W=L-D.headerLayoutIndex-1;return{type:"item",dataIndex:D.firstDataIndex+W,group:D}},layoutToDataIndex:(L)=>{if($.length===0)return L;let z=vj($,L),D=$[z];if(L===D.headerLayoutIndex)return-1;let W=L-D.headerLayoutIndex-1;return D.firstDataIndex+W},dataToLayoutIndex:(L)=>{if($.length===0)return L;let z=_J($,L),D=$[z],W=L-D.firstDataIndex;return D.headerLayoutIndex+1+W},getGroupAtLayoutIndex:(L)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let z=vj($,L);return $[z]},getGroupAtDataIndex:(L)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let z=_J($,L);return $[z]},getHeaderHeight:typeof K==="number"?(L)=>K:(L)=>{let z=$[L];if(!z)return 0;return K(z.key,L)},rebuild:(L)=>{$=GJ(L,Q.getGroupForIndex),J=L+$.length}}};var qj=(j,Q,$,J,K)=>{let X=document.createElement("div");X.className=`${K}-sticky-header`,X.setAttribute("role","presentation"),X.setAttribute("aria-hidden","true"),X.style.position="absolute",X.style.top="0",X.style.left="0",X.style.right="0",X.style.zIndex="5",X.style.pointerEvents="none",X.style.willChange="transform",X.style.overflow="hidden",j.insertBefore(X,j.firstChild);let q=-1,Z=!1,G=0,U=(W)=>{if(W===q)return;q=W;let M=Q.groups;if(W<0||W>=M.length){X.textContent="";return}let F=M[W],O=J.headerTemplate(F.key,F.groupIndex),R=Q.getHeaderHeight(W);if(X.style.height=`${R}px`,typeof O==="string")X.innerHTML=O;else X.replaceChildren(O)},B=(W)=>{let M=Q.groups;if(M.length===0){L();return}let F=0;for(let V=M.length-1;V>=0;V--)if($.getOffset(M[V].headerLayoutIndex)<=W){F=V;break}let O=$.getOffset(M[0].headerLayoutIndex);if(W<O){L();return}if(!Z)_();U(F);let R=Q.getHeaderHeight(F),A=0,T=F+1;if(T<M.length){let S=$.getOffset(M[T].headerLayoutIndex)-W;if(S<R)A=S-R}if(A!==G)G=A,X.style.transform=A===0?"":`translateY(${Math.round(A)}px)`},_=()=>{if(Z)return;Z=!0,X.style.display=""},L=()=>{if(!Z)return;Z=!1,X.style.display="none",q=-1,G=0,X.style.transform=""},z=()=>{let W=q;if(q=-1,W>=0)U(W)},D=()=>{X.remove(),q=-1,Z=!1};return X.style.display="none",{update:B,refresh:z,show:_,hide:L,destroy:D}};var Kj=(j)=>{if(!j.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(j.headerHeight==null||j.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!j.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let Q=null,$=null,J=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:q,config:Z,rawConfig:G}=X,{classPrefix:U}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let _=G.item.height;J=G.items?[...G.items]:[];let L=J.length,z={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};Q=Xj(L,z),K=x2(J,Q.groups);let D=h2(Q,_);X.setHeightConfig(D),X.rebuildHeightCache(K.length),X.dataManager.setItems(K,0,K.length);let W=G.item.template,{headerTemplate:M}=j,F=(N,b,m)=>{if(z2(N))return M(N.groupKey,N.groupIndex);return W(N,b,m)},O=X.methods.get("_getGridLayout"),R=X.methods.get("_replaceGridRenderer"),A=X.methods.get("_updateGridLayoutForGroups");if(O&&R){if(A)A((o)=>{let c=K[o];return!!(c&&z2(c))});let{createGridRenderer:N}=($j(),dJ(qJ)),b=O(),m=N(q.items,F,X.heightCache,b,U,X.getContainerWidth(),()=>X.dataManager.getTotal(),Z.ariaIdPrefix);R(m)}else X.replaceTemplate(F);if(q.root.classList.add(`${U}--grouped`),j.sticky!==!1){$=qj(q.root,Q,X.heightCache,{...z,sticky:z.sticky??!1},U);let N=$;X.afterScroll.push((b,m)=>{N.update(b)}),$.update(X.scrollController.getScrollTop())}let T=()=>{if(!Q)return;Q.rebuild(J.length),K=x2(J,Q.groups);let N=h2(Q,_);if(X.setHeightConfig(N),X.rebuildHeightCache(K.length),X.dataManager.setItems(K,0,K.length),$)$.refresh()};X.methods.set("setItems",(N)=>{J=[...N],T()}),X.methods.set("appendItems",(N)=>{J=[...J,...N],T()}),X.methods.set("prependItems",(N)=>{J=[...N,...J],T()}),X.methods.set("removeItem",(N)=>{J=J.filter((b)=>b.id!==N),T()});let{animateScroll:V,cancelScroll:S}=U4(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(N,b)=>{let m=Q.dataToLayoutIndex(N),{align:o,behavior:c,duration:e}=D4(b),j2=X.dataManager.getTotal(),H=P2(m,X.heightCache,X.state.viewportState.containerHeight,j2,o,X.getCachedCompression());if(c==="smooth")V(X.scrollController.getScrollTop(),H,e);else S(),X.scrollController.scrollTo(H)}),X.methods.set("_getItems",()=>J),X.methods.set("_getTotal",()=>J.length),X.destroyHandlers.push(()=>{if(F2!==null)cancelAnimationFrame(F2),F2=null;if($)$.destroy(),$=null;q.root.classList.remove(`${U}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},fj=300,B4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,F2=null,U4=(j,Q)=>{let $=()=>{if(F2!==null)cancelAnimationFrame(F2),F2=null};return{animateScroll:(K,X,q)=>{if($(),Math.abs(X-K)<1){j.scrollTo(X);return}let Z=performance.now(),G=(U)=>{let B=U-Z,_=Math.min(B/q,1),L=K+(X-K)*B4(_);if(j.scrollTo(L),Q(),_<1)F2=requestAnimationFrame(G);else F2=null};F2=requestAnimationFrame(G)},cancelScroll:$}},D4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:fj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??fj};return{align:"start",behavior:"auto",duration:fj}};var Yj=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),m2=(j,Q,$)=>{if($==="none")return j;let J=new Set(j.selected);if($==="single"){if(J.clear(),Q.length>0)J.add(Q[0])}else for(let K of Q)J.add(K);return{...j,selected:J}},g2=(j,Q)=>{let $=new Set(j.selected);for(let J of Q)$.delete(J);return{...j,selected:$}},k2=(j,Q,$)=>{if($==="none")return j;if(j.selected.has(Q))return g2(j,[Q]);else return m2(j,[Q],$)},Zj=(j,Q,$)=>{if($!=="multiple")return j;return{...j,selected:new Set(Q.map((J)=>J.id))}},Bj=(j)=>({...j,selected:new Set}),Ij=(j,Q)=>{return j.focusedIndex=Q,j},pj=(j,Q,$=!0)=>{if(Q===0)return j;let J=j.focusedIndex-1;if(J<0)J=$?Q-1:0;return j.focusedIndex=J,j},uj=(j,Q,$=!0)=>{if(Q===0)return j;let J=j.focusedIndex+1;if(J>=Q)J=$?0:Q-1;return j.focusedIndex=J,j},xj=(j,Q)=>{if(Q===0)return j;return j.focusedIndex=0,j},hj=(j,Q)=>{if(Q===0)return j;return j.focusedIndex=Q-1,j};var MJ=(j,Q)=>{return j.selected.has(Q)},T2=(j)=>{return Array.from(j.selected)},C2=(j,Q)=>{let $=[];for(let J of j.selected){let K=Q(J);if(K)$.push(K)}return $};var d2=(j)=>{let Q=j?.mode??"single",$=j?.initial,J=Yj($),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:q,emitter:Z,config:G}=X,{classPrefix:U,ariaIdPrefix:B}=G;if(Q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:_,forceRender:L}=X.getRenderFns(),z=()=>{X.dom.items.querySelectorAll("[data-index]").forEach((R)=>{let A=R,T=A.dataset.id;if(T!==void 0){let V=/^\d+$/.test(T)?parseInt(T,10):T,S=J.selected.has(V),b=parseInt(A.dataset.index??"-1",10)===J.focusedIndex;A.classList.toggle(`${U}-item--selected`,S),A.classList.toggle(`${U}-item--focused`,b),A.ariaSelected=S?"true":"false"}})},D=()=>{if(X.state.isDestroyed)return;_(),z()},W=()=>{if(X.state.isDestroyed)return;L(),z()};X.setRenderFns(D,W);let M=()=>{z(),Z.emit("selection:change",{selected:T2(J),items:C2(J,(O)=>X.dataManager.getItemById(O))})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${U}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",q.root.appendChild(K);let F=K;Z.on("selection:change",({selected:O})=>{let R=O.length;if(R===0)F.textContent="";else if(R===1)F.textContent="1 item selected";else F.textContent=`${R} items selected`}),X.clickHandlers.push((O)=>{if(X.state.isDestroyed)return;let A=O.target.closest("[data-index]");if(!A)return;let T=parseInt(A.dataset.index??"-1",10);if(T<0)return;let V=X.dataManager.getItem(T);if(!V)return;Z.emit("item:click",{item:V,index:T,event:O}),J=Ij(J,T),q.root.setAttribute("aria-activedescendant",`${B}-item-${T}`),J=k2(J,V.id,Q),M()}),X.keydownHandlers.push((O)=>{if(X.state.isDestroyed)return;let R=X.dataManager.getTotal(),A=J.focusedIndex,T=!1,V=!1,S=J;switch(O.key){case"ArrowUp":S=pj(J,R),T=!0,V=!0;break;case"ArrowDown":S=uj(J,R),T=!0,V=!0;break;case"Home":S=xj(J,R),T=!0,V=!0;break;case"End":S=hj(J,R),T=!0,V=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let N=X.dataManager.getItem(J.focusedIndex);if(N)S=k2(J,N.id,Q);T=!0}break}if(T){O.preventDefault(),J=S;let N=J.focusedIndex;if(N>=0){let b=X.dataManager.getState(),m=P2(N,X.heightCache,X.state.viewportState.containerHeight,b.total,"center",X.getCachedCompression());X.scrollController.scrollTo(m),q.root.setAttribute("aria-activedescendant",`${B}-item-${N}`)}else q.root.removeAttribute("aria-activedescendant");if(V){let{selected:b}=J;if(A>=0&&A!==N){let m=X.dataManager.getItem(A);if(m)X.renderer.updateItemClasses(A,b.has(m.id),!1)}if(N>=0){let m=X.dataManager.getItem(N);if(m)X.renderer.updateItemClasses(N,b.has(m.id),!0)}}else W(),Z.emit("selection:change",{selected:T2(J),items:C2(J,(b)=>X.dataManager.getItemById(b))})}}),X.methods.set("select",(...O)=>{J=m2(J,O,Q),M()}),X.methods.set("deselect",(...O)=>{J=g2(J,O),M()}),X.methods.set("toggleSelect",(O)=>{J=k2(J,O,Q),M()}),X.methods.set("selectAll",()=>{if(Q!=="multiple")return;let O=X.getAllLoadedItems();J=Zj(J,O,Q),M()}),X.methods.set("clearSelection",()=>{J=Bj(J);let{renderRange:O,isCompressed:R}=X.state.viewportState,A=X.getItemsForRange(O),T=R?X.getCompressionContext():void 0;X.renderer.render(A,O,J.selected,J.focusedIndex,T),Z.emit("selection:change",{selected:[],items:[]})}),X.methods.set("getSelected",()=>{return T2(J)}),X.methods.set("getSelectedItems",()=>{return C2(J,(O)=>X.dataManager.getItemById(O))}),X.destroyHandlers.push(()=>{if(F&&F.parentNode)F.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var S2=(j,Q,$={},J="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:G=!0,hoverZoneWidth:U=16,showOnViewportEnter:B=!0}=$,_=0,L=0,z=0,D=0,W=!1,M=!1,F=0,O=0,R=0,A=null,T=!1,V=null,S=null,N=K?"width":"height",b=K?"translateX":"translateY",m=K?(i)=>i.clientX:(i)=>i.clientY,o=K?"left":"top",c=document.createElement("div"),e=document.createElement("div"),j2=G?document.createElement("div"):null,H=()=>{if(c.className=`${J}-scrollbar`,e.className=`${J}-scrollbar-thumb`,K)c.classList.add(`${J}-scrollbar--horizontal`);if(c.appendChild(e),j.appendChild(c),j2){if(j2.className=`${J}-scrollbar-hover`,K)j2.classList.add(`${J}-scrollbar-hover--horizontal`),j2.style.height=`${U}px`;else j2.style.width=`${U}px`;j.appendChild(j2)}},w=()=>{if(A)clearTimeout(A),A=null},p=()=>{if(!X)return;w(),A=setTimeout(P,q)},u=()=>{if(_<=L)return;if(w(),!T)c.classList.add(`${J}-scrollbar--visible`),T=!0;if(X&&!W&&!M)p()},P=()=>{if(W||M)return;c.classList.remove(`${J}-scrollbar--visible`),T=!1},C=(i,Q2)=>{_=i,L=Q2;let v=_>L;if(c.style.display=v?"":"none",!v){P();return}let f=L/_;z=Math.max(Z,f*L),e.style[N]=`${z}px`,D=L-z,h(R)},h=(i)=>{if(R=i,_<=L||D<=0)return;let Q2=_-L,f=Math.min(1,Math.max(0,i/Q2))*D;e.style.transform=`${b}(${f}px)`},g=(i)=>{if(i.target===e)return;let Q2=c.getBoundingClientRect(),n=m(i)-Q2[o]-z/2,l=Math.max(0,Math.min(n,D))/D,X2=_-L,K2=l*X2;Q(K2),u()},s=(i)=>{i.preventDefault(),i.stopPropagation(),W=!0,F=m(i),O=R,w(),c.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",r),document.addEventListener("mouseup",q2)},r=(i)=>{if(!W)return;let Q2=m(i)-F,v=D>0?Q2/D:0,f=_-L,n=v*f,$2=Math.max(0,Math.min(O+n,f)),X2=$2/f*D;if(e.style.transform=`${b}(${X2}px)`,S=$2,V===null)V=requestAnimationFrame(()=>{if(S!==null)Q(S);V=null})},q2=()=>{if(W=!1,V!==null)cancelAnimationFrame(V),V=null;if(S!==null)Q(S),S=null;if(c.classList.remove(`${J}-scrollbar--dragging`),X&&!M)p();document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",q2)},Z2=()=>{if(B)u()},k=()=>{if(!W){if(M=!1,X)p()}},d=()=>{M=!0,w(),u()},x=()=>{if(M=!1,!W&&X)p()},J2=()=>{if(w(),V!==null)cancelAnimationFrame(V),V=null;if(c.removeEventListener("click",g),c.removeEventListener("mouseenter",d),c.removeEventListener("mouseleave",x),e.removeEventListener("mousedown",s),j.removeEventListener("mouseenter",Z2),j.removeEventListener("mouseleave",k),document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",q2),j2){if(j2.removeEventListener("mouseenter",d),j2.removeEventListener("mouseleave",x),j2.parentNode)j2.parentNode.removeChild(j2)}if(c.parentNode)c.parentNode.removeChild(c)};if(H(),c.addEventListener("click",g),c.addEventListener("mouseenter",d),c.addEventListener("mouseleave",x),e.addEventListener("mousedown",s),j.addEventListener("mouseenter",Z2),j.addEventListener("mouseleave",k),j2)j2.addEventListener("mouseenter",d),j2.addEventListener("mouseleave",x);return{show:u,hide:P,updateBounds:C,updatePosition:h,isVisible:()=>T,destroy:J2}};var Uj=(j)=>{let Q=null;return{name:"withScrollbar",priority:30,setup($){let{dom:J,config:K}=$,{classPrefix:X,horizontal:q}=K;if(Q=S2(J.viewport,(U)=>$.scrollController.scrollTo(U),j??{},X,q),!J.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))J.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();Q.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let G=Q;$.afterScroll.push((U,B)=>{G.updatePosition(U),G.show()}),$.resizeHandlers.push((U,B)=>{if(G){let _=$.getCachedCompression();G.updateBounds(_.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(G){let U=$.getCachedCompression();G.updateBounds(U.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(G)G.destroy()})},destroy(){if(Q)Q.destroy(),Q=null}}};Jj();var EJ=(j=0)=>{let Q=[,,,,,,,,];for(let $=0;$<8;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},Dj=(j,Q)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=Q,X.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=Q,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=Q,K.time=$,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let X=(j.sampleIndex-j.sampleCount+8)%8,q=j.samples[X],Z=Q-q.position,G=$-q.time;j.velocity=G>0?Z/G:0}return j.lastPosition=Q,j.lastTime=$,j},W4=(j)=>j.sampleCount>=3,AJ=(j,Q={})=>{let{wheel:$=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:X=150,onScroll:q,onIdle:Z,scrollElement:G,horizontal:U=!1}=Q,B=!!G,_=0,L=0,z=B?U?window.innerWidth:window.innerHeight:U?j.clientWidth:j.clientHeight,D=Q.compressed??!1,W=Q.compression,M=EJ(),F=!1,O=null,A=Wj(()=>{let k=U?j.scrollLeft:j.scrollTop,d=k>=_?"down":"up";if(M=Dj(M,k),_=k,q)q({scrollTop:_,direction:d,velocity:M.velocity});m()}),V=Wj(()=>{let k=j.getBoundingClientRect(),d=U?Math.max(0,-k.left):Math.max(0,-k.top),x=d>=_?"down":"up";if(M=Dj(M,d),_=d,!F)F=!0;if(q)q({scrollTop:_,direction:x,velocity:M.velocity});m()}),S=(k)=>{k.preventDefault()},N=(k)=>{if(k.deltaX)return;k.preventDefault(),j.scrollLeft+=k.deltaY},b=(k)=>{if(!D)return;k.preventDefault();let d=(U?k.deltaX||k.deltaY:k.deltaY)*J,x=_+d;if(K)x=_+d*0.3;if(x=Math.max(0,Math.min(x,L)),x!==_){let i=x>=_?"down":"up";if(M=Dj(M,x),_=x,!F)F=!0;if(q)q({scrollTop:_,direction:i,velocity:M.velocity});m()}},m=()=>{if(O)clearTimeout(O);O=setTimeout(()=>{if(F=!1,M=EJ(_),Z)Z()},X)},o=(k)=>{if(D)return;if(D=!0,W=k,L=k.virtualHeight-z,B)return;if(A.cancel(),j.removeEventListener("scroll",A),!$)j.removeEventListener("wheel",S);else if(U)j.removeEventListener("wheel",N);if(U)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",b,{passive:!1});let d=U?j.scrollLeft:j.scrollTop;if(d>0){let x=U?W?.actualHeight??j.scrollWidth:W?.actualHeight??j.scrollHeight;_=d/x*L}if(U)j.scrollLeft=0;else j.scrollTop=0},c=()=>{if(!D)return;if(D=!1,B){W=void 0;return}if(j.removeEventListener("wheel",b),U)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",A,{passive:!0}),!$)j.addEventListener("wheel",S,{passive:!1});else if(U)j.addEventListener("wheel",N,{passive:!1});if(W&&_>0){let d=_/L*(W.actualHeight-z);if(U)j.scrollLeft=d;else j.scrollTop=d}W=void 0},e=()=>{if(B||D)return _;return U?j.scrollLeft:j.scrollTop},j2=(k,d=!1)=>{let x=Math.max(0,Math.min(k,L||1/0));if(B){let J2=j.getBoundingClientRect();if(U){let i=J2.left+window.scrollX;window.scrollTo({left:i+x,behavior:d?"smooth":"auto"})}else{let i=J2.top+window.scrollY;window.scrollTo({top:i+x,behavior:d?"smooth":"auto"})}}else if(D){if(x===_)return;let i=x>=_?"down":"up";if(M=Dj(M,x),_=x,!F)F=!0;if(q)q({scrollTop:_,direction:i,velocity:M.velocity});m()}else if(U)j.scrollTo({left:x,behavior:d?"smooth":"auto"});else j.scrollTo({top:x,behavior:d?"smooth":"auto"})},H=(k)=>{j2(e()+k)},w=()=>{return e()<=0},p=(k=0)=>{let d=e(),x=B||D?L:U?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return d>=x-k},u=()=>{let k=e(),d=B||D?L:U?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(d<=0)return 0;return Math.min(1,Math.max(0,k/d))},P=(k)=>{if(k.compression)W=k.compression,L=W.virtualHeight-z},C=()=>D,h=()=>Math.abs(M.velocity),g=()=>W4(M),s=()=>F,r=()=>B,q2=(k)=>{if(z=k,W)L=W.virtualHeight-z},Z2=()=>{if(O)clearTimeout(O);if(B)V.cancel(),window.removeEventListener("scroll",V);else A.cancel(),j.removeEventListener("scroll",A),j.removeEventListener("wheel",b),j.removeEventListener("wheel",S),j.removeEventListener("wheel",N)};if(B){if(D&&W)L=W.virtualHeight-z;window.addEventListener("scroll",V,{passive:!0})}else if(D&&W){if(L=W.virtualHeight-z,U)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",b,{passive:!1})}else{if(U)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",A,{passive:!0}),!$)j.addEventListener("wheel",S,{passive:!1});else if(U)j.addEventListener("wheel",N,{passive:!1})}return{getScrollTop:e,scrollTo:j2,scrollBy:H,isAtTop:w,isAtBottom:p,getScrollPercentage:u,getVelocity:h,isTracking:g,isScrolling:s,updateConfig:P,enableCompression:o,disableCompression:c,isCompressed:C,isWindowMode:r,updateContainerHeight:q2,destroy:Z2}},Wj=(j)=>{let Q=null,$=null,J=(...K)=>{if($=K,Q===null)Q=requestAnimationFrame(()=>{if(Q=null,$)j(...$)})};return J.cancel=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null},J};var Nj=()=>{let j=null,Q=0,$=!1;return{name:"withScale",priority:20,setup(J){let{dom:K,config:X}=J,{classPrefix:q,horizontal:Z}=X,G=()=>{let B=J.getVirtualTotal(),_=M2(B,J.heightCache);if(_.isCompressed&&!$){$=!0,J.scrollController.enableCompression(_),J.updateContentSize(_.virtualHeight),J.setScrollFns(()=>Q,(W)=>{Q=W});let L=K.viewport,z=(W)=>{W.preventDefault();let M=_.virtualHeight-J.state.viewportState.containerHeight;Q=Math.max(0,Math.min(Q+W.deltaY,M)),J.scrollController.scrollTo(Q)};if(L.addEventListener("wheel",z,{passive:!1}),J.destroyHandlers.push(()=>{L.removeEventListener("wheel",z)}),!K.viewport.querySelector(`.${q}-scrollbar-track`)){if(j=S2(K.viewport,(M)=>J.scrollController.scrollTo(M),{},q,Z),!K.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))K.viewport.classList.add(`${q}-viewport--custom-scrollbar`);j.updateBounds(_.virtualHeight,J.state.viewportState.containerHeight);let W=j;J.afterScroll.push((M,F)=>{if(W)W.updatePosition(M),W.show()}),J.resizeHandlers.push((M,F)=>{if(W){let O=J.getCachedCompression();W.updateBounds(O.virtualHeight,J.state.viewportState.containerHeight)}})}}else if(!_.isCompressed&&$)$=!1,J.scrollController.disableCompression(),J.updateContentSize(_.actualHeight);else if(_.isCompressed)J.scrollController.updateConfig({compression:_}),J.updateContentSize(_.virtualHeight);if(j)j.updateBounds(_.virtualHeight,J.state.viewportState.containerHeight);J.state.cachedCompression={state:_,totalItems:B}};J.updateCompressionMode=G;let U=J.getCachedCompression.bind(J);J.getCachedCompression=()=>{if(J.state.cachedCompression)return J.state.cachedCompression.state;return U()},J.setVisibleRangeFn((B,_,L,z,D)=>{let W=M2(z,L);e2(B,_,L,z,W,D)}),J.setScrollToPosFn((B,_,L,z,D)=>{let W=M2(z,_);return jj(B,_,L,z,W,D)}),J.setPositionElementFn((B,_)=>{let L=J.getVirtualTotal(),z=M2(L,J.heightCache);if(z.isCompressed){let D=Math.round(R2(_,J.scrollController.getScrollTop(),J.heightCache,L,J.state.viewportState.containerHeight,z)),W=J.config.horizontal;B.style.transform=W?`translateX(${D}px)`:`translateY(${D}px)`}else{let D=Math.round(J.heightCache.getOffset(_)),W=J.config.horizontal;B.style.transform=W?`translateX(${D}px)`:`translateY(${D}px)`}}),G(),J.destroyHandlers.push(()=>{if(j)j.destroy(),j=null})},destroy(){if(j)j.destroy(),j=null}}};var Vj=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let Q=j.scrollController.getScrollTop(),$=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),X=K&&K().length>0?K():void 0;if(J===0){let U={index:0,offsetInItem:0};if(X)U.selectedIds=X;return U}let q,Z;if($.isCompressed){let B=Q/$.virtualHeight*J;q=Math.max(0,Math.min(Math.floor(B),J-1)),Z=(B-q)*j.heightCache.getHeight(q)}else q=j.heightCache.indexAtOffset(Q),Z=Q-j.heightCache.getOffset(q);Z=Math.max(0,Z);let G={index:q,offsetInItem:Z};if(X)G.selectedIds=X;return G}),j.methods.set("restoreScroll",(Q)=>{let{index:$,offsetInItem:J,selectedIds:K}=Q,X=j.getCachedCompression(),q=j.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),G;if(X.isCompressed){let B=j.heightCache.getHeight(Z),_=B>0?J/B:0;G=(Z+_)/q*X.virtualHeight}else G=j.heightCache.getOffset(Z)+J;let U=Math.max(0,X.virtualHeight-j.state.viewportState.containerHeight);if(G=Math.max(0,Math.min(G,U)),j.scrollController.scrollTo(G),K&&K.length>0){let B=j.methods.get("select");if(B)B(...K)}})}}};var _j=(j={})=>{let{chunkSize:Q=100,maxCachedItems:$=5000,evictionBuffer:J=200,onEvict:K}=j,X=new Map,q=0,Z=0,G=(H)=>{let w=X.get(H);if(!w)w={items:Array(Q),count:0,lastAccess:Date.now()},X.set(H,w);else w.lastAccess=Date.now();return w},U=(H)=>{return Math.floor(H/Q)},B=(H)=>{return H%Q},_=()=>q,L=(H)=>{q=H},z=(H)=>{if(H<0||H>=q)return;let w=U(H),p=X.get(w);if(!p)return;return p.items[B(H)]},D=(H)=>{if(H<0||H>=q)return!1;let w=U(H),p=X.get(w);if(!p)return!1;return p.items[B(H)]!==void 0},W=(H,w)=>{let p=U(H),u=G(p),P=B(H),C=u.items[P]===void 0;if(u.items[P]=w,C)u.count++,Z++;if(H>=q)q=H+1},M=(H,w)=>{for(let p=0;p<w.length;p++){let u=w[p];if(u!==void 0)W(H+p,u)}},F=(H)=>{if(H<0||H>=q)return!1;let w=U(H),p=X.get(w);if(!p)return!1;let u=B(H);if(p.items[u]===void 0)return!1;if(p.items[u]=void 0,p.count--,Z--,p.count===0)X.delete(w);return!0},O=(H,w)=>{let p=[];for(let u=H;u<=w&&u<q;u++)p.push(z(u));return p},R=(H,w)=>{for(let p=H;p<=w&&p<q;p++)if(!D(p))return!1;return!0},A=()=>{let H=[],w=null,p=Array.from(X.keys()).sort((u,P)=>u-P);for(let u of p){let P=X.get(u);if(!P)continue;let C=u*Q;for(let h=0;h<Q;h++){let g=C+h;if(g>=q)break;if(P.items[h]!==void 0)if(w===null)w={start:g,end:g};else if(g===w.end+1)w.end=g;else H.push(w),w={start:g,end:g};else if(w!==null)H.push(w),w=null}}if(w!==null)H.push(w);return H},T=(H,w)=>{let p=[],u=null;for(let P=H;P<=w&&P<q;P++)if(!D(P))if(u===null)u={start:P,end:P};else u.end=P;else if(u!==null)p.push(u),u=null;if(u!==null)p.push(u);return p},V=(H)=>{return X.has(H)},S=(H)=>{let w=X.get(H);if(w)w.lastAccess=Date.now()},N=(H,w)=>{if(H>w||X.size===0)return;let p=Date.now(),u=U(Math.max(0,H)),P=U(Math.min(q-1,w));for(let C=u;C<=P;C++){let h=X.get(C);if(h)h.lastAccess=p}},b=(H,w)=>{if(Z<=$)return 0;let p=Math.max(0,H-J),u=Math.min(q-1,w+J),P=U(p),C=U(u),h=0,g=[];for(let[s,r]of X)if(s<P||s>C)h+=r.count,g.push(s),Z-=r.count,X.delete(s);if(h>0&&K)K(h,g);return h},m=()=>{if(Z<=$)return 0;let H=Array.from(X.entries()).sort(([,u],[,P])=>u.lastAccess-P.lastAccess),w=0,p=[];for(let[u,P]of H){if(Z<=$)break;w+=P.count,Z-=P.count,p.push(u),X.delete(u)}if(w>0&&K)K(w,p);return w},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:X.size,chunkSize:Q,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},c=()=>Z,e=()=>{X.clear(),Z=0};return{chunkSize:Q,maxCachedItems:$,getTotal:_,setTotal:L,get:z,has:D,set:W,setRange:M,delete:F,getRange:O,isRangeLoaded:R,getLoadedRanges:A,findUnloadedRanges:T,getChunkIndex:U,isChunkLoaded:V,touchChunk:S,touchChunksForRange:N,evictDistant:b,evictToLimit:m,getStats:o,getCachedCount:c,clear:e,reset:()=>{e(),q=0}}},Gj=(j)=>{if(j.length===0)return[];let Q=[...j].sort((J,K)=>J.start-K.start),$=[{...Q[0]}];for(let J=1;J<Q.length;J++){let K=Q[J],X=$[$.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else $.push({...K})}return $},c2=(j,Q,$)=>{let J=Math.floor(j.start/$)*$,K=Math.ceil((j.end+1)/$)*$-1,X={start:J,end:K};if(Q.length===0)return[X];let q=[],Z=Gj(Q),G=X.start;for(let U of Z){if(U.end<G)continue;if(U.start>X.end)break;if(U.start>G)q.push({start:G,end:Math.min(U.start-1,X.end)});if(G=U.end+1,G>X.end)break}if(G<=X.end)q.push({start:G,end:X.end});return q};var Mj=(j={})=>{let{enabled:Q=!0,maskCharacter:$="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:X}=j,q=null,Z=!1,G=0,U=(F)=>{if(!Q||Z||F.length===0)return;let O=new Map,R=new Map,A=Math.min(F.length,K);for(let T=0;T<A;T++){let V=F[T];if(!V||typeof V!=="object")continue;for(let[S,N]of Object.entries(V)){if(S.startsWith("_")||S==="id")continue;if(!R.has(S))R.set(S,{lengths:[],types:new Set});let b=R.get(S),m=Array.isArray(N)?"array":typeof N;if(b.types.add(m),typeof N==="string")b.lengths.push(N.length);else if(N!==null&&N!==void 0)b.lengths.push(String(N).length)}}for(let[T,V]of R){if(V.lengths.length===0)continue;let S=Math.min(...V.lengths),N=Math.max(...V.lengths),b=Math.round(V.lengths.reduce((o,c)=>o+c,0)/V.lengths.length),m="string";if(V.types.has("number")&&V.types.size===1)m="number";else if(V.types.has("boolean")&&V.types.size===1)m="boolean";else if(V.types.has("array"))m="array";else if(V.types.has("object")&&!V.types.has("string"))m="object";O.set(T,{minLength:S,maxLength:N,avgLength:b,type:m})}q=O,Z=!0},B=()=>Z,_=(F)=>{let O=F.avgLength;if(J&&F.minLength!==F.maxLength){if(O=Math.floor(Math.random()*(F.maxLength-F.minLength+1)+F.minLength),Math.random()<0.3)O=Math.max(1,O+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,O))},L=(F)=>{if(X)return{...X(F),["_isPlaceholder"]:!0};let O={id:`__placeholder_${G++}`,["_isPlaceholder"]:!0,_index:F};if(!q||q.size===0)return O.label=$.repeat(12),O;for(let[R,A]of q)switch(A.type){case"string":O[R]=_(A);break;case"number":O[R]=0;break;case"boolean":O[R]=!1;break;case"array":O[R]=[];break;case"object":O[R]={};break;default:O[R]=_(A)}return O};return{analyzeStructure:U,hasAnalyzedStructure:B,generate:L,generateRange:(F,O)=>{let R=[];for(let A=F;A<=O;A++)R.push(L(A));return R},isPlaceholder:(F)=>{if(!F||typeof F!=="object")return!1;return F._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,G=0}}},b2=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},mj=(j)=>{return j.filter((Q)=>!b2(Q))};var V4=50,Ej=(j={})=>{let{adapter:Q,initialItems:$,initialTotal:J,storage:K,placeholder:X,pageSize:q=V4,onStateChange:Z,onItemsLoaded:G,onItemsEvicted:U}=j,B=_j({...K,onEvict:(v,f)=>{U?.(v),A()}}),_=null,L=()=>{if(!_)_=Mj(X);return _},z=new Map,D=!1,W,M=!0,F,O=[],R=new Map,A=()=>{Z?.(e())},T=()=>{z.clear();let v=B.getLoadedRanges();for(let f of v)for(let n=f.start;n<=f.end;n++){let $2=B.get(n);if($2&&!b2($2))z.set($2.id,n)}},V=(v,f)=>{if(!b2(f))z.set(f.id,v)},S=(v)=>{z.delete(v)},N=(v,f)=>{return`${v}-${f}`},b=()=>B.getTotal(),m=()=>B.getCachedCount(),o=()=>D,c=()=>M,e=()=>({total:B.getTotal(),cached:B.getCachedCount(),isLoading:D,pendingRanges:O,error:W,hasMore:M,cursor:F}),j2=()=>B,H=()=>L(),w=(v)=>{let f=B.get(v);if(f!==void 0)return f;if(v>=0&&v<B.getTotal())return L().generate(v);return},p=(v)=>{let f=z.get(v);if(f===void 0)return;return B.get(f)},u=(v)=>{return z.get(v)??-1},P=(v)=>{let f=B.get(v);return f!==void 0&&!b2(f)},C=(v,f)=>{let n=[],$2=B.getTotal(),l=0,X2=0;B.touchChunksForRange(v,Math.min(f,$2-1));for(let K2=v;K2<=f&&K2<$2;K2++){let E2=B.get(K2);if(E2!==void 0)n.push(E2),l++;else n.push(L().generate(K2)),X2++}return n},h=(v)=>{B.setTotal(v),M=B.getCachedCount()<v,A()},g=(v,f=0,n)=>{if(_&&!_.hasAnalyzedStructure()&&v.length>0)_.analyzeStructure(v);for(let $2=0;$2<v.length;$2++){let l=v[$2];if(l!==void 0){let X2=f+$2;B.set(X2,l),V(X2,l)}}if(n!==void 0)B.setTotal(n);else if(f+v.length>B.getTotal())B.setTotal(f+v.length);M=B.getCachedCount()<B.getTotal(),G?.(v,f,B.getTotal()),A()},s=(v,f)=>{let n=z.get(v);if(n===void 0)return!1;let $2=B.get(n);if(!$2)return!1;let l={...$2,...f};if(B.set(n,l),f.id!==void 0&&f.id!==v)S(v),V(n,l);return A(),!0},r=(v)=>{let f=z.get(v);if(f===void 0)return!1;B.delete(f),S(v);let n=B.getTotal();if(n>0)B.setTotal(n-1);return A(),!0},q2=async(v,f)=>{if(!Q)return;let n=N(v,f);if(R.has(n))return;let $2=B.getLoadedRanges(),l=c2({start:v,end:f},$2,B.chunkSize);if(l.length===0)return;let X2=B.chunkSize,K2=[];for(let U2 of l){let Y2=Math.floor(U2.start/X2),_2=Math.floor(U2.end/X2);for(let B2=Y2;B2<=_2;B2++){let G2=B2*X2,D2=G2+X2-1,w2=N(G2,D2);if(!K2.some((L2)=>L2.start===G2)&&!R.has(w2))K2.push({start:G2,end:D2})}}let E2=[];for(let U2 of l){let Y2=Math.floor(U2.start/X2),_2=Math.floor(U2.end/X2);for(let B2=Y2;B2<=_2;B2++){let G2=B2*X2,D2=G2+X2-1,w2=N(G2,D2);if(R.has(w2)){let L2=R.get(w2);if(!E2.includes(L2))E2.push(L2)}}}for(let U2 of K2){let Y2=N(U2.start,U2.end),_2=(async()=>{O.push(U2),D=!0,W=void 0,A();try{let B2=U2.end-U2.start+1,G2={offset:U2.start,limit:B2,cursor:void 0},D2=await Q.read(G2);if(g(D2.items,U2.start,D2.total),D2.cursor)F=D2.cursor;if(D2.hasMore!==void 0)M=D2.hasMore;else if(D2.total!==void 0)M=B.getCachedCount()<D2.total}catch(B2){W=B2 instanceof Error?B2:Error(String(B2))}finally{R.delete(Y2),O=O.filter((B2)=>B2.start!==U2.start||B2.end!==U2.end),D=R.size>0,A()}})();R.set(Y2,_2),E2.push(_2)}await Promise.all(E2)},Z2=async(v,f)=>{if(B.isRangeLoaded(v,f))return;await q2(v,f)},k=async()=>{if(!Q)return;await q2(0,q-1)},d=async()=>{if(!Q||D||!M)return!1;let v=B.getCachedCount(),f=B.getTotal(),n=v,$2=Math.min(n+q-1,f>0?f-1:n+q-1);if(n>=f&&f>0)return M=!1,!1;return await q2(n,$2),B.getCachedCount()>v},x=async()=>{if(B.clear(),z.clear(),_)_.clear();F=void 0,M=!0,W=void 0,A(),await k()},J2=(v,f)=>{if(B.evictDistant(v,f)>0)T()},i=()=>{B.clear(),z.clear(),F=void 0,W=void 0,O=[],D=!1,A()},Q2=()=>{if(B.reset(),z.clear(),_)_.clear();F=void 0,M=!0,W=void 0,O=[],D=!1,A()};if($&&$.length>0)g($,0,J??$.length);else if(J!==void 0)B.setTotal(J);return{getState:e,getTotal:b,getCached:m,getIsLoading:o,getHasMore:c,getStorage:j2,getPlaceholders:H,getItem:w,getItemById:p,getIndexById:u,isItemLoaded:P,getItemsInRange:C,setTotal:h,setItems:g,updateItem:s,removeItem:r,loadRange:q2,ensureRange:Z2,loadInitial:k,loadMore:d,reload:x,evictDistant:J2,clear:i,reset:Q2}};var Aj=(j)=>{let{adapter:Q,loading:$}=j,J=$?.cancelThreshold??oj,K=$?.preloadThreshold??ij,X=$?.preloadAhead??tj;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,G=q.config.reverse,U=q.config.overscan,B=Ej({adapter:Q,pageSize:p2,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=Sj(q.state.viewportState,q.heightCache,q.getVirtualTotal(),U,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(F,O,R)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:F,total:R})}});q.replaceDataManager(B);let _=null,L=null,z=0,D=()=>{if(L){let F=L;L=null,q.dataManager.ensureRange(F.start,F.end).catch((O)=>{Z.emit("error",{error:O,context:"ensureRange"})})}};q.afterScroll.push((F,O)=>{if(q.state.isDestroyed)return;let R=q.scrollController.getVelocity(),T=q.scrollController.isTracking()&&R<=J;if(L&&z>J&&R<=J){let N=L;L=null,q.dataManager.ensureRange(N.start,N.end).catch((b)=>{Z.emit("error",{error:b,context:"ensureRange"})})}if(z=R,T&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(G){if(F<Rj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:p2}),q.dataManager.loadMore().catch((N)=>{Z.emit("error",{error:N,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-F-q.state.viewportState.containerHeight<Rj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:p2}),q.dataManager.loadMore().catch((b)=>{Z.emit("error",{error:b,context:"loadMore"})})}let{renderRange:V}=q.state.viewportState;if(!_||V.start!==_.start||V.end!==_.end)if(_={start:V.start,end:V.end},T){L=null;let{start:N,end:b}=V,m=q.getVirtualTotal();if(R>K)if(O==="down")b=Math.min(V.end+X,m-1);else N=Math.max(V.start-X,0);q.dataManager.ensureRange(N,b).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}else L={start:V.start,end:V.end}});let W=200,M=null;q.afterScroll.push((F,O)=>{if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,D()},W)}),q.destroyHandlers.push(()=>{if(M!==null)clearTimeout(M),M=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:p2}),q.dataManager.loadInitial().catch((F)=>{Z.emit("error",{error:F,context:"loadInitial"})})}}};var Fj=()=>{let j=null;return{name:"withPage",priority:5,setup(Q){let{dom:$,state:J,config:K,emitter:X}=Q;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),Q.disableViewportResize(),Q.setScrollTarget(window),Q.setScrollFns(()=>{let U=$.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-U.left);else return Math.max(0,-U.top)},(U)=>{let B=$.viewport.getBoundingClientRect();if(K.horizontal){let _=B.left+window.scrollX;window.scrollTo(_+U,window.scrollY)}else{let _=B.top+window.scrollY;window.scrollTo(window.scrollX,_+U)}}),Q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,G=()=>{let{innerWidth:U,innerHeight:B}=window,_=K.horizontal?U:B,L=K.horizontal?Z:q;if(Math.abs(_-L)<=1)return;q=B,Z=U,J.viewportState.containerHeight=B,X.emit("resize",{width:U,height:B});for(let z=0;z<Q.resizeHandlers.length;z++)Q.resizeHandlers[z](U,B);Q.renderIfNeeded()};window.addEventListener("resize",G,{passive:!0}),j=()=>{window.removeEventListener("resize",G)},Q.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var _4=(j)=>{let Q=n2(j);if(j.scroll?.element===window)Q=Q.use(Fj());if(j.adapter)Q=Q.use(Aj({adapter:j.adapter,...j.loading&&{loading:j.loading}}));if(j.layout==="grid"){if(!j.grid)throw Error("[vlist/builder] grid configuration is required when layout is 'grid'");if(!j.grid.columns||j.grid.columns<1)throw Error("[vlist/builder] grid.columns must be a positive integer >= 1");let q={columns:j.grid.columns};if(j.grid.gap!==void 0)q.gap=j.grid.gap;Q=Q.use(Qj(q))}if(j.groups){if(j.direction==="horizontal")throw Error("[vlist/builder] horizontal direction cannot be combined with groups");let q={getGroupForIndex:j.groups.getGroupForIndex,headerHeight:typeof j.groups.headerHeight==="function"?j.groups.headerHeight("",0):j.groups.headerHeight,headerTemplate:j.groups.headerTemplate};if(j.groups.sticky!==void 0)q.sticky=j.groups.sticky;Q=Q.use(Kj(q))}let $=j.selection?.mode||"none";if($!=="none"){let q={mode:$};if(j.selection?.initial!==void 0)q.initial=j.selection.initial;Q=Q.use(d2(q))}else Q=Q.use(d2({mode:"none"}));Q=Q.use(Nj());let J=j.scroll?.scrollbar||j.scrollbar;if(!(J==="none"||typeof J==="object"&&("enabled"in J)&&J.enabled===!1)){let q=typeof J==="object"?J:{};Q=Q.use(Uj(q))}Q=Q.use(Vj());let X=Q.build();return X.update=(q)=>{if(q.grid&&X.updateGrid)X.updateGrid(q.grid);if(q.selectionMode!==void 0&&X.setSelectionMode)X.setSelectionMode(q.selectionMode);if(q.itemHeight!==void 0)console.warn("[vlist] Updating itemHeight via update() is not yet supported with the builder pattern. Please recreate the instance or use the full API from 'vlist/full'.");if(q.overscan!==void 0)console.warn("[vlist] Updating overscan via update() is not yet supported with the builder pattern.")},X};$j();var FJ=()=>{let j={},Q=(Z,G)=>{if(!j[Z])j[Z]=new Set;return j[Z].add(G),()=>$(Z,G)},$=(Z,G)=>{j[Z]?.delete(G)};return{on:Q,off:$,emit:(Z,G)=>{j[Z]?.forEach((U)=>{try{U(G)}catch(B){console.error(`[vlist] Error in event handler for "${String(Z)}":`,B)}})},once:(Z,G)=>{let U=(B)=>{$(Z,U),G(B)};return Q(Z,U)},clear:(Z)=>{if(Z)delete j[Z];else for(let G in j)delete j[G]},listenerCount:(Z)=>{return j[Z]?.size??0}}};export{Vj as withSnapshots,d2 as withSelection,Kj as withSections,Uj as withScrollbar,Nj as withScale,Fj as withPage,Qj as withGrid,Aj as withAsync,n2 as vlist,k2 as toggleSelection,Tj as simpleVisibleRange,m2 as selectItems,Zj as selectAll,DJ as rangesEqual,Wj as rafThrottle,$J as needsScaling,Gj as mergeRanges,MJ as isSelected,z2 as isSectionHeader,b2 as isPlaceholderItem,WJ as isInRange,C2 as getSelectedItems,T2 as getSelectedIds,M2 as getScaleState,XJ as getScaleInfo,M2 as getScale,NJ as getRangeCount,QJ as getMaxItemsWithoutScaling,mj as filterPlaceholders,VJ as diffRanges,g2 as deselectItems,_4 as createVList,qj as createStickyHeader,_j as createSparseStorage,Yj as createSelectionState,h2 as createSectionedHeightFn,Xj as createSectionLayout,S2 as createScrollbar,AJ as createScrollController,Mj as createPlaceholderManager,ej as createHeightCache,u2 as createGridRenderer,o2 as createGridLayout,FJ as createEmitter,Ej as createAsyncManager,Bj as clearSelection,UJ as clampScrollPosition,YJ as calculateTotalHeight,P2 as calculateScrollToIndex,e2 as calculateScaledVisibleRange,jj as calculateScaledScrollToIndex,jJ as calculateScaledRenderRange,R2 as calculateScaledItemPosition,Cj as calculateRenderRange,c2 as calculateMissingRanges,BJ as calculateItemOffset,JJ as calculateIndexFromScrollPosition,ZJ as calculateActualHeight,x2 as buildLayoutItems,O2 as MAX_VIRTUAL_HEIGHT};
1
+ var{defineProperty:Gj,getOwnPropertyNames:mJ,getOwnPropertyDescriptor:dJ}=Object,cJ=Object.prototype.hasOwnProperty;var xj=new WeakMap,lJ=(j)=>{var X=xj.get(j),$;if(X)return X;if(X=Gj({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")mJ(j).map((J)=>!cJ.call(X,J)&&Gj(X,J,{get:()=>j[J],enumerable:!($=dJ(j,J))||$.enumerable}));return xj.set(j,X),X};var sJ=(j,X)=>{for(var $ in X)Gj(j,$,{get:X[$],enumerable:!0,configurable:!0,set:(J)=>X[$]=()=>J})};var hj=(j,X)=>()=>(j&&(X=j(j=0)),X);var Ej=200,u2=50,dj=15,cj=2,lj=50,O2=16000000;var Y4=(j,X)=>{let $=X;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if($===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),$-1))},getTotalHeight:()=>$*j,getTotal:()=>$,rebuild:(J)=>{$=J},isVariable:()=>!1}},Z4=(j,X)=>{let $=X,J=new Float64Array(0),K=(q)=>{$=q,J=new Float64Array(q+1),J[0]=0;for(let Z=0;Z<q;Z++)J[Z+1]=J[Z]+j(Z)};K(X);let Q=(q)=>{if($===0)return 0;if(q<=0)return 0;if(q>=J[$])return $-1;let Z=0,G=$-1;while(Z<G){let B=Z+G+1>>>1;if(J[B]<=q)Z=B;else G=B-1}return Z};return{getOffset:(q)=>{if(q<=0)return 0;if(q>=$)return J[$];return J[q]},getHeight:(q)=>j(q),indexAtOffset:(q)=>Q(q),getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(q)=>K(q),isVariable:()=>!0}},sj=(j,X)=>{if(typeof j==="number")return Y4(j,X);return Z4(j,X)},Aj=(j,X,$,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil($/j.getHeight(0));let K=0,Q=0,q=X;while(q<J&&Q<$)Q+=j.getHeight(q),K++,q++;return Math.max(1,K)},r2=(j,X,$)=>{if($===0)return 0;if(!j.isVariable())return Math.floor(X/j.getHeight(0));let J=0,K=0;for(let Q=$-1;Q>=0;Q--){let q=j.getHeight(Q);if(K+q>X)break;K+=q,J++}return Math.max(J,1)},Fj=(j,X,$)=>{if($===0)return 0;let J=Math.floor(X),K=X-J,Q=Math.max(0,Math.min(J,$-1));return j.getOffset(Q)+K*j.getHeight(Q)};var M2=(j,X)=>{let $=X.getTotalHeight(),J=$>O2,K=J?O2:$,Q=$>0?K/$:1;return{isCompressed:J,actualHeight:$,virtualHeight:K,ratio:Q}},n2=(j,X,$,J,K,Q)=>{if(J===0||X===0)return Q.start=0,Q.end=-1,Q;if(!K.isCompressed){let W=$.indexAtOffset(j),U=$.indexAtOffset(j+X);if(U<J-1)U++;return Q.start=Math.max(0,W),Q.end=Math.min(J-1,Math.max(0,U)),Q}let{virtualHeight:q}=K,G=j/q*J,B=Math.floor(G),D=Aj($,Math.max(0,B),X,J),L=Math.ceil(G)+D,y=q-X-j;if(y<=X&&y>=-1){let W=r2($,X,J),U=Math.max(0,J-W),M=Math.max(0,Math.min(1,1-y/X));B=Math.floor(B+(U-B)*M),L=y<=1?J-1:Math.min(J-1,B+D)}return Q.start=Math.max(0,B),Q.end=Math.min(J-1,Math.max(0,L)),Q},aj=(j,X,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min($-1,j.end+X),J},R2=(j,X,$,J,K,Q,q)=>{if(!Q.isCompressed||J===0)return $.getOffset(j);let{virtualHeight:Z}=Q,G=Z-K,B=G-X;if(B<=K&&B>=-1){if(X>=G-1){let V=$.getTotalHeight()-$.getOffset(j);return K-V}let y=r2($,K,J),W=Math.max(0,J-y),M=X/Z*J,E=Math.max(0,Math.min(1,1-B/K)),F=$.getOffset(j)-$.getOffset(W),z=$.getOffset(j)-Fj($,M,J);return z+(F-z)*E}let D=X/Z,L=$.getTotalHeight(),O=D*L;return $.getOffset(j)-O},o2=(j,X,$,J,K,Q="start")=>{if(J===0)return 0;let q;if(K.isCompressed){if(Q==="end"&&j===J-1)return Math.max(0,K.virtualHeight-$);q=j/J*K.virtualHeight}else q=X.getOffset(j);let Z=X.getHeight(j);switch(Q){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let G=K.virtualHeight-$;return Math.max(0,Math.min(q,G))},rj=(j,X,$,J)=>{if($===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*$)}return X.indexAtOffset(j)},nj=(j,X)=>{if(typeof X==="number")return j*X>O2;return X.getTotalHeight()>O2},oj=(j)=>{if(j<=0)return 0;return Math.floor(O2/j)},ij=(j,X)=>{let $=M2(j,X);if(!$.isCompressed)return`No compression needed (${j} items, ${($.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${j} items, ${($.actualHeight/1e6).toFixed(1)}M px → ${($.virtualHeight/1e6).toFixed(1)}M px virtual)`};var i2=()=>{};var P2=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var _J={};sJ(_J,{createGridRenderer:()=>m2});var V4=(j=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:(Q)=>{if(X.length<j)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-row"),Q.removeAttribute("data-col"),X.push(Q)},clear:()=>{X.length=0}}},m2=(j,X,$,J,K,Q,q,Z)=>{let G=V4(),B=new Map,D=Q,L=!1,O=null,y=0,W="",U=(b)=>{if(O&&y===b)return O;return O=M2(b,$),y=b,O},M={selected:!1,focused:!1},E=(b,C)=>{return M.selected=b,M.focused=C,M},F=`${K}-item ${K}-grid-item`,z=`${K}-item--selected`,V=`${K}-item--focused`,H=(b,C)=>{if(typeof C==="string")b.innerHTML=C;else b.replaceChildren(C)},N=(b,C,h)=>{b.classList.toggle(z,C),b.classList.toggle(V,h)},w=(b,C)=>{let h=J.getRow(b);if(C){let m=C.totalItems,s=U(m);if(s.isCompressed)return R2(h,C.scrollTop,$,m,C.containerHeight,s,C.rangeStart)}return $.getOffset(h)},_=(b,C,h)=>{let m=b.dataset.id?.startsWith("__group_header"),s=m?0:J.getCol(C),r=m?0:J.getColumnOffset(s,D),q2;if(L){let B2=J.getRow(C),T=0,d=new Set;for(let x=0;x<C;x++){let J2=J.getRow(x);if(J2<B2&&!d.has(J2)){let i=$.getHeight(x);T+=i,d.add(J2)}}q2=T}else q2=w(C,h);b.style.transform=`translate(${Math.round(r)}px, ${Math.round(q2)}px)`},R=(b,C)=>{let h=b.dataset.id?.startsWith("__group_header"),m=h?D:J.getColumnWidth(D),s;if(L||h)s=$.getHeight(C)-J.gap;else{let r=J.getRow(C);s=$.getHeight(r)-J.gap}b.style.width=`${m}px`,b.style.height=`${s}px`},g=(b,C,h,m,s)=>{let r=G.acquire(),q2=E(h,m);if(r.className=F,r.dataset.index=String(b),r.dataset.id=String(C.id),r.dataset.row=String(J.getRow(b)),r.dataset.col=String(J.getCol(b)),r.ariaSelected=String(h),Z)r.id=`${Z}-item-${b}`;if(q)W=String(q()),r.setAttribute("aria-setsize",W),r.setAttribute("aria-posinset",String(b+1));R(r,b);let B2=X(C,b,q2);return H(r,B2),N(r,h,m),_(r,b,s),r},o=(b,C,h,m,s)=>{if(C.start===0&&b.length>0)L=P2(b[0]);for(let[T,d]of B)if(T<C.start||T>C.end)d.element.remove(),G.release(d.element),B.delete(T);let r=!1;if(q){let T=String(q());r=T!==W,W=T}let q2=document.createDocumentFragment(),B2=[];for(let T=C.start;T<=C.end;T++){let d=T-C.start,x=b[d];if(!x){console.warn(`⚠️ RENDER: Missing item at index ${T} (range: ${C.start}-${C.end}, items.length: ${b.length})`);continue}let J2=h.has(x.id),i=T===m,Q2=B.get(T);if(Q2){let v=Q2.element.dataset.id,f=String(x.id);if(v!==f){let $2=E(J2,i),l=X(x,T,$2);H(Q2.element,l),Q2.element.dataset.id=f,Q2.element.dataset.row=String(J.getRow(T)),Q2.element.dataset.col=String(J.getCol(T)),R(Q2.element,T)}if(N(Q2.element,J2,i),Q2.element.ariaSelected=String(J2),_(Q2.element,T,s),r)Q2.element.setAttribute("aria-setsize",W)}else{let v=g(T,x,J2,i,s);q2.appendChild(v),B2.push({index:T,element:v})}}if(B2.length>0){j.appendChild(q2);for(let{index:T,element:d}of B2)B.set(T,{index:T,element:d})}},c=(b)=>{for(let[C,h]of B)_(h.element,C,b)},e=(b,C,h,m)=>{let s=B.get(b);if(s){let r=E(h,m),q2=X(C,b,r);H(s.element,q2),N(s.element,h,m),s.element.dataset.id=String(C.id),s.element.ariaSelected=String(h),R(s.element,b)}},j2=(b,C,h)=>{let m=B.get(b);if(m)N(m.element,C,h)},k=(b)=>{return B.get(b)?.element},S=(b)=>{if(Math.abs(b-D)<1)return;D=b;for(let[C,h]of B)R(h.element,C),_(h.element,C)},p=()=>{for(let[,b]of B)b.element.remove(),G.release(b.element);B.clear()};return{render:o,updatePositions:c,updateItem:e,updateItemClasses:j2,getElement:k,updateContainerWidth:S,clear:p,destroy:()=>{p(),G.clear()}}};var Kj=hj(()=>{i2()});var aJ=0,H2=5,rJ=100,Mj=2,nJ=(j=0)=>{let X=Array(H2);for(let $=0;$<H2;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},oJ=(j,X)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>rJ){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let Q=j.samples[0];return Q.position=X,Q.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=$,j.sampleIndex=(j.sampleIndex+1)%H2,j.sampleCount=Math.min(j.sampleCount+1,H2),j.sampleCount>=Mj){let Q=(j.sampleIndex-j.sampleCount+H2)%H2,q=j.samples[Q],Z=X-q.position,G=$-q.time;j.velocity=G>0?Math.abs(Z)/G:0}return j.lastPosition=X,j.lastTime=$,j},gj=(j,X)=>{if(typeof j==="number"){let Q=X;return{getOffset:(q)=>q*j,getHeight:()=>j,indexAtOffset:(q)=>{if(Q===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(q/j),Q-1))},getTotalHeight:()=>Q*j,getTotal:()=>Q,rebuild:(q)=>{Q=q},isVariable:()=>!1}}let $=X,J=new Float64Array(0),K=(Q)=>{$=Q,J=new Float64Array(Q+1),J[0]=0;for(let q=0;q<Q;q++)J[q+1]=J[q]+j(q)};return K(X),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return J[$];return J[Q]},getHeight:(Q)=>j(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=J[$])return $-1;let q=0,Z=$-1;while(q<Z){let G=q+Z+1>>>1;if(J[G]<=Q)q=G;else Z=G-1}return q},getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(Q)=>K(Q),isVariable:()=>!0}},iJ=()=>{let j={},X=(Q,q)=>{if(!j[Q])j[Q]=new Set;return j[Q].add(q),()=>$(Q,q)},$=(Q,q)=>{j[Q]?.delete(q)};return{on:X,off:$,emit:(Q,q)=>{j[Q]?.forEach((Z)=>{try{Z(q)}catch(G){console.error(`[vlist] Error in "${Q}" handler:`,G)}})},clear:()=>{for(let Q in j)delete j[Q]}}},tJ=(j)=>{if(typeof j==="string"){let X=document.querySelector(j);if(!X)throw Error(`[vlist/builder] Container not found: ${j}`);return X}return j},eJ=(j,X,$,J)=>{let K=document.createElement("div");if(K.className=X,J)K.classList.add(`${X}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),$)K.setAttribute("aria-label",$);if(J)K.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${X}-viewport`,J)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let q=document.createElement("div");if(q.className=`${X}-content`,q.style.position="relative",J)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${X}-items`,Z.style.position="relative",J)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),Q.appendChild(q),K.appendChild(Q),j.appendChild(K),{root:K,viewport:Q,content:q,items:Z}},j4=(j=100)=>{let X=[];return{acquire:()=>{let $=X.pop();if($)return $;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:($)=>{if(X.length<j)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),X.push($)},clear:()=>{X.length=0}}},J4=(j,X,$,J,K)=>{if(J===0||X===0){K.start=0,K.end=0;return}let Q=$.indexAtOffset(j),q=$.indexAtOffset(j+X);if(q<J-1)q++;K.start=Math.max(0,Q),K.end=Math.min(J-1,Math.max(0,q))},$4=(j,X,$,J)=>{if($===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-X),J.end=Math.min($-1,j.end+X)},Q4=(j,X,$,J,K)=>{if(J===0)return 0;let Q=Math.max(0,Math.min(j,J-1)),q=X.getOffset(Q),Z=X.getHeight(Q),G=Math.max(0,X.getTotalHeight()-$),B;switch(K){case"center":B=q-($-Z)/2;break;case"end":B=q-$+Z;break;default:B=q}return Math.max(0,Math.min(B,G))},X4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,q4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:300};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??300};return{align:"start",behavior:"auto",duration:300}},mj=(j)=>{if(!j.container)throw Error("[vlist/builder] Container is required");if(!j.item)throw Error("[vlist/builder] item configuration is required");let X=j.direction==="horizontal",$=X?"width":"height",J=X?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${$} is required${X?" when direction is 'horizontal'":""}`);if(typeof J==="number"&&J<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof J!=="number"&&typeof J!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!j.item.template)throw Error("[vlist/builder] item.template is required");if(X&&j.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let K=new Map,Q=!1,q={use(Z){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(Z.name,Z),q},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,K4(j,K,X,J)}};return q};function K4(j,X,$,J){let{item:K,items:Q,overscan:q=3,classPrefix:Z="vlist",ariaLabel:G,reverse:B=!1,scroll:D}=j,L=D?.wheel??!0,O=D?.wrap??!1,y=B,W=`${Z}-${aJ++}`,U=J,M=$?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,E=K.template,F={overscan:q,classPrefix:Z,reverse:y,wrap:O,horizontal:$,ariaIdPrefix:W},z=Array.from(X.values()).sort((Y,A)=>(Y.priority??50)-(A.priority??50)),V=new Set(z.map((Y)=>Y.name));for(let Y of z)if(Y.conflicts){for(let A of Y.conflicts)if(V.has(A))throw Error(`[vlist/builder] ${Y.name} and ${A} cannot be combined`)}if($){if(V.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(V.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(y){if(V.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let H=tJ(j.container),N=eJ(H,Z,G,$),w=iJ(),_=Q?[...Q]:[],R=gj(U,_.length),g=j4(),o=N.viewport.clientHeight,c=N.viewport.clientWidth,e=!1,j2=!1,k=0,S=null,p=null,u=nJ(0),b={start:0,end:0},C={start:0,end:0},h={start:-1,end:-1},m={viewportState:{scrollTop:0,containerHeight:o,totalHeight:R.getTotalHeight(),actualHeight:R.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},s=new Map,r={selected:!1,focused:!1},q2=`${Z}-item`,B2="",T=new Map,d=()=>{T.clear();for(let Y=0;Y<_.length;Y++){let A=_[Y];if(A)T.set(A.id,Y)}};d();let x=null,J2=()=>x?x.getTotal():_.length,i=[],Q2=[],v=[],f=[],n=[],$2=[],l=new Map,X2=()=>{return $?N.viewport.scrollLeft:N.viewport.scrollTop},K2=(Y)=>{if($)N.viewport.scrollLeft=Y;else N.viewport.scrollTop=Y},A2=(Y=2)=>{let A=R.getTotalHeight();return k+o>=A-Y},U2=!1,Y2,_2,D2=(Y,A,P,I,t)=>{J4(Y,A,P,I,t)},G2=(Y,A,P,I,t)=>{return Q4(Y,A,P,I,t)},N2=(Y,A)=>{if(typeof A==="string")Y.innerHTML=A;else Y.replaceChildren(A)},F2=(Y,A)=>{let P=Math.round(R.getOffset(A));if($)Y.style.transform=`translateX(${P}px)`;else Y.style.transform=`translateY(${P}px)`},OJ=(Y,A)=>{let P=g.acquire();if(P.className=q2,$){if(P.style.width=`${R.getHeight(Y)}px`,M!=null)P.style.height=`${M}px`}else P.style.height=`${R.getHeight(Y)}px`;if(P.dataset.index=String(Y),P.dataset.id=String(A.id),P.ariaSelected="false",P.id=`${W}-item-${Y}`,B2=String(J2()),P.setAttribute("aria-setsize",B2),P.setAttribute("aria-posinset",String(Y+1)),String(A.id).startsWith("__placeholder_"))P.classList.add(`${Z}-item--placeholder`);return N2(P,E(A,Y,r)),F2(P,Y),P},v2=()=>{let Y=`${R.getTotalHeight()}px`;if($)N.content.style.width=Y;else N.content.style.height=Y},Dj=new Set,Wj=-1,zJ=()=>{if(e)return;let Y=J2();if(D2(k,o,R,Y,b),$4(b,q,Y,C),C.start===h.start&&C.end===h.end){if(U2)for(let[a,W2]of s)F2(W2,a);return}let A=String(Y),P=A!==B2;B2=A;for(let[a,W2]of s)if(a<C.start||a>C.end)W2.remove(),g.release(W2),s.delete(a);let I=document.createDocumentFragment(),t=[];for(let a=C.start;a<=C.end;a++){let W2=x?x.getItem(a):_[a];if(!W2)continue;let Z2=s.get(a);if(Z2){let E2=Z2.dataset.id,I2=String(W2.id);if(E2!==I2){let gJ=E2?.startsWith("__placeholder_"),uj=I2.startsWith("__placeholder_");if(N2(Z2,E(W2,a,r)),Z2.dataset.id=I2,$)Z2.style.width=`${R.getHeight(a)}px`;else Z2.style.height=`${R.getHeight(a)}px`;if(uj)Z2.classList.add(`${Z}-item--placeholder`);else Z2.classList.remove(`${Z}-item--placeholder`);if(gJ&&!uj)Z2.classList.add(`${Z}-item--replaced`),setTimeout(()=>{Z2.classList.remove(`${Z}-item--replaced`)},300)}F2(Z2,a);let a2=Dj.has(W2.id),hJ=a===Wj;if(Z2.classList.toggle(`${Z}-item--selected`,a2),Z2.classList.toggle(`${Z}-item--focused`,hJ),Z2.ariaSelected=a2?"true":"false",P)Z2.setAttribute("aria-setsize",B2)}else{let E2=OJ(a,W2),I2=Dj.has(W2.id),a2=a===Wj;if(I2)E2.classList.add(`${Z}-item--selected`),E2.ariaSelected="true";if(a2)E2.classList.add(`${Z}-item--focused`);I.appendChild(E2),t.push({index:a,element:E2})}}if(t.length>0){N.items.appendChild(I);for(let{index:a,element:W2}of t)s.set(a,W2)}h.start=C.start,h.end=C.end,m.lastRenderRange.start=C.start,m.lastRenderRange.end=C.end,m.viewportState.scrollTop=k,m.viewportState.visibleRange.start=b.start,m.viewportState.visibleRange.end=b.end,m.viewportState.renderRange.start=C.start,m.viewportState.renderRange.end=C.end,w.emit("range:change",{range:{start:C.start,end:C.end}})},bJ=()=>{h.start=-1,h.end=-1,Y2()};Y2=zJ,_2=bJ;let f2=()=>{if(e)return;let Y=X2(),A=Y>=k?"down":"up";if(u=oJ(u,Y),!N.root.classList.contains(`${Z}--scrolling`))N.root.classList.add(`${Z}--scrolling`);k=Y,Y2(),w.emit("scroll",{scrollTop:Y,direction:A}),w.emit("velocity:change",{velocity:u.velocity,reliable:u.sampleCount>=Mj});for(let P=0;P<i.length;P++)i[P](Y,A);if(p)clearTimeout(p);p=setTimeout(()=>{N.root.classList.remove(`${Z}--scrolling`),u.velocity=0,u.sampleCount=0,w.emit("velocity:change",{velocity:0,reliable:!1})},D?.idleTimeout??150)},l2=null,y2=N.viewport;if(y2.addEventListener("scroll",f2,{passive:!0}),$&&L)l2=(Y)=>{if(Y.deltaX)return;Y.preventDefault(),N.viewport.scrollLeft+=Y.deltaY},N.viewport.addEventListener("wheel",l2);let Sj=(Y)=>{let P=Y.target.closest("[data-index]");if(P){let I=parseInt(P.dataset.index??"-1",10);if(I>=0){let t=x?.getItem(I)??_[I];if(t){if(t.__groupHeader)return;w.emit("item:click",{item:t,index:I,event:Y})}}}for(let I=0;I<Q2.length;I++)Q2[I](Y)},PJ=(Y)=>{let P=Y.target.closest("[data-index]");if(P){let I=parseInt(P.dataset.index??"-1",10);if(I>=0){let t=x?.getItem(I)??_[I];if(t){if(t.__groupHeader)return;w.emit("item:dblclick",{item:t,index:I,event:Y})}}}},vj=(Y)=>{for(let A=0;A<v.length;A++)v[A](Y)};N.items.addEventListener("click",Sj),N.items.addEventListener("dblclick",PJ),N.root.addEventListener("keydown",vj);let Nj=!0,yJ=()=>c,HJ=()=>o,Vj=new ResizeObserver((Y)=>{if(e)return;for(let A of Y){let P=A.contentRect.height,I=A.contentRect.width,t=$?I:P;if(c=I,Math.abs(t-o)>1){if(o=t,m.viewportState.containerHeight=t,j2)v2(),Y2(),w.emit("resize",{height:P,width:I})}if(j2)for(let a=0;a<f.length;a++)f[a](I,P)}});if(Nj)Vj.observe(N.viewport);let V2={get dom(){return N},get heightCache(){return R},get emitter(){return w},get config(){return F},get rawConfig(){return j},get renderer(){return{render:(Y,A,P,I,t)=>{Dj=P,Wj=I,_2()},updateItemClasses:(Y,A,P)=>{let I=s.get(Y);if(!I)return;I.classList.toggle(`${Z}-item--selected`,A),I.classList.toggle(`${Z}-item--focused`,P),I.ariaSelected=A?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Y)=>s.get(Y)??null,clear:()=>{},destroy:()=>{}}},set renderer(Y){},get dataManager(){return x},set dataManager(Y){x=Y},get scrollController(){return _j},set scrollController(Y){_j=Y},state:m,getContainerWidth(){return c},afterScroll:i,clickHandlers:Q2,keydownHandlers:v,resizeHandlers:f,contentSizeHandlers:n,destroyHandlers:$2,methods:l,replaceTemplate(Y){E=Y},replaceRenderer(Y){},replaceDataManager(Y){x=Y},replaceScrollController(Y){_j=Y},getItemsForRange(Y){let A=[];for(let P=Y.start;P<=Y.end;P++){let I=x?x.getItem(P):_[P];if(I)A.push(I)}return A},getAllLoadedItems(){if(x){let Y=x.getTotal(),A=[];for(let P=0;P<Y;P++){let I=x.getItem(P);if(I)A.push(I)}return A}return[..._]},getVirtualTotal(){return J2()},getCachedCompression(){return{isCompressed:!1,actualHeight:R.getTotalHeight(),virtualHeight:R.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:k,totalItems:J2(),containerHeight:o,rangeStart:C.start}},renderIfNeeded(){Y2()},forceRender(){_2()},getRenderFns(){return{renderIfNeeded:Y2,forceRender:_2}},setRenderFns(Y,A){Y2=Y,_2=A},setVirtualTotalFn(Y){J2=Y},rebuildHeightCache(Y){R.rebuild(Y??J2())},setHeightConfig(Y){R=gj(Y,J2())},updateContentSize(Y){let A=`${Y}px`;if($)N.content.style.width=A;else N.content.style.height=A},updateCompressionMode(){},setVisibleRangeFn(Y){D2=Y},setScrollToPosFn(Y){G2=Y},setPositionElementFn(Y){F2=Y},setScrollFns(Y,A){X2=Y,K2=(P)=>{A(P),f2()}},setScrollTarget(Y){y2.removeEventListener("scroll",f2),y2=Y,y2.addEventListener("scroll",f2,{passive:!0})},getScrollTarget(){return y2},setContainerDimensions(Y){yJ=Y.width,HJ=Y.height,c=Y.width(),o=Y.height(),m.viewportState.containerHeight=o},disableViewportResize(){if(Nj)Nj=!1,Vj.unobserve(N.viewport)}};x={getState:()=>({total:_.length,cached:_.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>_.length,getCached:()=>_.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>_[Y],getItemById:(Y)=>{let A=T.get(Y);return A!==void 0?_[A]:void 0},getIndexById:(Y)=>T.get(Y)??-1,isItemLoaded:(Y)=>Y>=0&&Y<_.length&&_[Y]!==void 0,getItemsInRange:(Y,A)=>{let P=[],I=Math.max(0,Y),t=Math.min(A,_.length-1);for(let a=I;a<=t;a++)P.push(_[a]);return P},setTotal:(Y)=>{},setItems:(Y,A=0,P)=>{if(A===0&&(P!==void 0||_.length===0))_=[...Y];else{let I=A+Y.length;if(_.length<I)_.length=I;for(let t=0;t<Y.length;t++)_[A+t]=Y[t]}if(d(),j2){R.rebuild(J2()),v2(),V2.updateCompressionMode();for(let I=0;I<n.length;I++)n[I]();_2()}},updateItem:(Y,A)=>{let P=T.get(Y);if(P===void 0)return!1;let I=_[P];if(!I)return!1;if(_[P]={...I,...A},A.id!==void 0&&A.id!==Y)T.delete(Y),T.set(A.id,P);let t=s.get(P);if(t)N2(t,E(_[P],P,r)),t.dataset.id=String(_[P].id);return!0},removeItem:(Y)=>{let A=T.get(Y);if(A===void 0)return!1;if(_.splice(A,1),d(),j2){R.rebuild(J2()),v2(),V2.updateCompressionMode();for(let P=0;P<n.length;P++)n[P]();_2()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{_=[],T.clear()},reset:()=>{if(_=[],T.clear(),j2)R.rebuild(0),v2(),_2()}};let _j={getScrollTop:()=>X2(),scrollTo:(Y)=>{K2(Y),k=Y,Y2()},scrollBy:(Y)=>{let A=X2()+Y;K2(A),k=A,Y2()},isAtTop:()=>k<=2,isAtBottom:(Y=2)=>A2(Y),getScrollPercentage:()=>{let Y=R.getTotalHeight(),A=Math.max(0,Y-o);return A>0?k/A:0},getVelocity:()=>u.velocity,isTracking:()=>u.sampleCount>=Mj,isScrolling:()=>N.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{U2=!0},disableCompression:()=>{U2=!1},isCompressed:()=>U2,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{o=Y},destroy:()=>{}},fj=new Map;for(let Y of z)if(Y.methods)for(let A of Y.methods){let P=fj.get(A);if(P)throw Error(`[vlist/builder] Method "${A}" is registered by both "${P}" and "${Y.name}"`);fj.set(A,Y.name)}for(let Y of z)Y.setup(V2);if(j2=!0,V2.state.isInitialized=!0,v2(),Y2(),y&&_.length>0){let Y=G2(_.length-1,R,o,_.length,"end");K2(Y),k=Y,Y2()}let RJ=(Y)=>{V2.dataManager.setItems(Y,0,Y.length)},kJ=y?(Y)=>{let A=A2(2),P=_.length;if(V2.dataManager.setItems(Y,P),A&&_.length>0){let I=G2(_.length-1,R,o,_.length,"end");K2(I),k=I,Y2()}}:(Y)=>{let A=_.length;V2.dataManager.setItems(Y,A)},TJ=y?(Y)=>{let A=X2(),P=R.getTotalHeight(),I=[..._];V2.dataManager.clear(),V2.dataManager.setItems([...Y,...I],0);let a=R.getTotalHeight()-P;if(a>0)K2(A+a),k=A+a}:(Y)=>{let A=[..._];V2.dataManager.clear(),V2.dataManager.setItems([...Y,...A],0)},CJ=(Y,A)=>{V2.dataManager.updateItem(Y,A)},wJ=(Y)=>{V2.dataManager.removeItem(Y)},SJ=async()=>{if(V2.dataManager.reload)await V2.dataManager.reload()},s2=()=>{if(S!==null)cancelAnimationFrame(S),S=null},vJ=(Y,A,P)=>{if(s2(),Math.abs(A-Y)<1){K2(A),k=A,Y2();return}let I=performance.now(),t=(a)=>{let W2=a-I,Z2=Math.min(W2/P,1),E2=Y+(A-Y)*X4(Z2);if(K2(E2),k=E2,Y2(),Z2<1)S=requestAnimationFrame(t);else S=null};S=requestAnimationFrame(t)},Ij=(Y,A)=>{let{align:P,behavior:I,duration:t}=q4(A),a=J2(),W2=Y;if(O&&a>0)W2=(W2%a+a)%a;let Z2=G2(W2,R,o,a,P);if(I==="smooth")vJ(X2(),Z2,t);else s2(),K2(Z2)},fJ=(Y,A)=>{let P=T.get(Y)??V2.dataManager.getIndexById(Y);if(P>=0)Ij(P,A)},IJ=()=>X2(),pJ=(Y,A)=>{return w.on(Y,A)},uJ=(Y,A)=>{w.off(Y,A)},xJ=()=>{if(e)return;if(e=!0,V2.state.isDestroyed=!0,N.items.removeEventListener("click",Sj),N.root.removeEventListener("keydown",vj),y2.removeEventListener("scroll",f2),Vj.disconnect(),l2)N.viewport.removeEventListener("wheel",l2);if(p)clearTimeout(p);for(let Y=0;Y<$2.length;Y++)$2[Y]();for(let Y of z)if(Y.destroy)Y.destroy();s2();for(let[,Y]of s)Y.remove(),g.release(Y);s.clear(),g.clear(),w.clear(),N.root.remove()},pj={get element(){return N.root},get items(){if(l.has("_getItems"))return l.get("_getItems")();return _},get total(){if(l.has("_getTotal"))return l.get("_getTotal")();return J2()},setItems:l.has("setItems")?l.get("setItems"):RJ,appendItems:l.has("appendItems")?l.get("appendItems"):kJ,prependItems:l.has("prependItems")?l.get("prependItems"):TJ,updateItem:l.has("updateItem")?l.get("updateItem"):CJ,removeItem:l.has("removeItem")?l.get("removeItem"):wJ,reload:l.has("reload")?l.get("reload"):SJ,scrollToIndex:l.has("scrollToIndex")?l.get("scrollToIndex"):Ij,scrollToItem:l.has("scrollToItem")?l.get("scrollToItem"):fJ,cancelScroll:l.has("cancelScroll")?l.get("cancelScroll"):s2,getScrollPosition:l.has("getScrollPosition")?l.get("getScrollPosition"):IJ,on:pJ,off:uJ,destroy:xJ};for(let[Y,A]of l){if(Y==="setItems"||Y==="appendItems"||Y==="prependItems"||Y==="updateItem"||Y==="removeItem"||Y==="reload"||Y==="scrollToIndex"||Y==="scrollToItem"||Y==="cancelScroll"||Y==="getScrollPosition")continue;pj[Y]=A}return pj}i2();var k2=(j,X,$={},J="vlist",K=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:G=!0,hoverZoneWidth:B=16,showOnViewportEnter:D=!0}=$,L=0,O=0,y=0,W=0,U=!1,M=!1,E=0,F=0,z=0,V=null,H=!1,N=null,w=null,_=K?"width":"height",R=K?"translateX":"translateY",g=K?(i)=>i.clientX:(i)=>i.clientY,o=K?"left":"top",c=document.createElement("div"),e=document.createElement("div"),j2=G?document.createElement("div"):null,k=()=>{if(c.className=`${J}-scrollbar`,e.className=`${J}-scrollbar-thumb`,K)c.classList.add(`${J}-scrollbar--horizontal`);if(c.appendChild(e),j.appendChild(c),j2){if(j2.className=`${J}-scrollbar-hover`,K)j2.classList.add(`${J}-scrollbar-hover--horizontal`),j2.style.height=`${B}px`;else j2.style.width=`${B}px`;j.appendChild(j2)}},S=()=>{if(V)clearTimeout(V),V=null},p=()=>{if(!Q)return;S(),V=setTimeout(b,q)},u=()=>{if(L<=O)return;if(S(),!H)c.classList.add(`${J}-scrollbar--visible`),H=!0;if(Q&&!U&&!M)p()},b=()=>{if(U||M)return;c.classList.remove(`${J}-scrollbar--visible`),H=!1},C=(i,Q2)=>{L=i,O=Q2;let v=L>O;if(c.style.display=v?"":"none",!v){b();return}let f=O/L;y=Math.max(Z,f*O),e.style[_]=`${y}px`,W=O-y,h(z)},h=(i)=>{if(z=i,L<=O||W<=0)return;let Q2=L-O,f=Math.min(1,Math.max(0,i/Q2))*W;e.style.transform=`${R}(${f}px)`},m=(i)=>{if(i.target===e)return;let Q2=c.getBoundingClientRect(),n=g(i)-Q2[o]-y/2,l=Math.max(0,Math.min(n,W))/W,X2=L-O,K2=l*X2;X(K2),u()},s=(i)=>{i.preventDefault(),i.stopPropagation(),U=!0,E=g(i),F=z,S(),c.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",r),document.addEventListener("mouseup",q2)},r=(i)=>{if(!U)return;let Q2=g(i)-E,v=W>0?Q2/W:0,f=L-O,n=v*f,$2=Math.max(0,Math.min(F+n,f)),X2=$2/f*W;if(e.style.transform=`${R}(${X2}px)`,w=$2,N===null)N=requestAnimationFrame(()=>{if(w!==null)X(w);N=null})},q2=()=>{if(U=!1,N!==null)cancelAnimationFrame(N),N=null;if(w!==null)X(w),w=null;if(c.classList.remove(`${J}-scrollbar--dragging`),Q&&!M)p();document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",q2)},B2=()=>{if(D)u()},T=()=>{if(!U){if(M=!1,Q)p()}},d=()=>{M=!0,S(),u()},x=()=>{if(M=!1,!U&&Q)p()},J2=()=>{if(S(),N!==null)cancelAnimationFrame(N),N=null;if(c.removeEventListener("click",m),c.removeEventListener("mouseenter",d),c.removeEventListener("mouseleave",x),e.removeEventListener("mousedown",s),j.removeEventListener("mouseenter",B2),j.removeEventListener("mouseleave",T),document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",q2),j2){if(j2.removeEventListener("mouseenter",d),j2.removeEventListener("mouseleave",x),j2.parentNode)j2.parentNode.removeChild(j2)}if(c.parentNode)c.parentNode.removeChild(c)};if(k(),c.addEventListener("click",m),c.addEventListener("mouseenter",d),c.addEventListener("mouseleave",x),e.addEventListener("mousedown",s),j.addEventListener("mouseenter",B2),j.addEventListener("mouseleave",T),j2)j2.addEventListener("mouseenter",d),j2.addEventListener("mouseleave",x);return{show:u,hide:b,updateBounds:C,updatePosition:h,isVisible:()=>H,destroy:J2}};var tj=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup($){let{dom:J,config:K}=$,{classPrefix:Q,horizontal:q}=K;if(X=k2(J.viewport,(B)=>$.scrollController.scrollTo(B),j??{},Q,q),!J.viewport.classList.contains(`${Q}-viewport--custom-scrollbar`))J.viewport.classList.add(`${Q}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();X.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let G=X;$.afterScroll.push((B,D)=>{G.updatePosition(B),G.show()}),$.resizeHandlers.push((B,D)=>{if(G){let L=$.getCachedCompression();G.updateBounds(L.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(G){let B=$.getCachedCompression();G.updateBounds(B.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(G)G.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var ej=(j=0)=>{let X=[,,,,,,,,];for(let $=0;$<8;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},t2=(j,X)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let Q=j.samples[0];return Q.position=X,Q.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=$,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let Q=(j.sampleIndex-j.sampleCount+8)%8,q=j.samples[Q],Z=X-q.position,G=$-q.time;j.velocity=G>0?Z/G:0}return j.lastPosition=X,j.lastTime=$,j},B4=(j)=>j.sampleCount>=3,jJ=(j,X={})=>{let{wheel:$=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:Q=150,onScroll:q,onIdle:Z,scrollElement:G,horizontal:B=!1}=X,D=!!G,L=0,O=0,y=D?B?window.innerWidth:window.innerHeight:B?j.clientWidth:j.clientHeight,W=X.compressed??!1,U=X.compression,M=ej(),E=!1,F=null,V=e2(()=>{let T=B?j.scrollLeft:j.scrollTop,d=T>=L?"down":"up";if(M=t2(M,T),L=T,q)q({scrollTop:L,direction:d,velocity:M.velocity});g()}),N=e2(()=>{let T=j.getBoundingClientRect(),d=B?Math.max(0,-T.left):Math.max(0,-T.top),x=d>=L?"down":"up";if(M=t2(M,d),L=d,!E)E=!0;if(q)q({scrollTop:L,direction:x,velocity:M.velocity});g()}),w=(T)=>{T.preventDefault()},_=(T)=>{if(T.deltaX)return;T.preventDefault(),j.scrollLeft+=T.deltaY},R=(T)=>{if(!W)return;T.preventDefault();let d=(B?T.deltaX||T.deltaY:T.deltaY)*J,x=L+d;if(K)x=L+d*0.3;if(x=Math.max(0,Math.min(x,O)),x!==L){let i=x>=L?"down":"up";if(M=t2(M,x),L=x,!E)E=!0;if(q)q({scrollTop:L,direction:i,velocity:M.velocity});g()}},g=()=>{if(F)clearTimeout(F);F=setTimeout(()=>{if(E=!1,M=ej(L),Z)Z()},Q)},o=(T)=>{if(W)return;if(W=!0,U=T,O=T.virtualHeight-y,D)return;if(V.cancel(),j.removeEventListener("scroll",V),!$)j.removeEventListener("wheel",w);else if(B)j.removeEventListener("wheel",_);if(B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",R,{passive:!1});let d=B?j.scrollLeft:j.scrollTop;if(d>0){let x=B?U?.actualHeight??j.scrollWidth:U?.actualHeight??j.scrollHeight;L=d/x*O}if(B)j.scrollLeft=0;else j.scrollTop=0},c=()=>{if(!W)return;if(W=!1,D){U=void 0;return}if(j.removeEventListener("wheel",R),B)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",V,{passive:!0}),!$)j.addEventListener("wheel",w,{passive:!1});else if(B)j.addEventListener("wheel",_,{passive:!1});if(U&&L>0){let d=L/O*(U.actualHeight-y);if(B)j.scrollLeft=d;else j.scrollTop=d}U=void 0},e=()=>{if(D||W)return L;return B?j.scrollLeft:j.scrollTop},j2=(T,d=!1)=>{let x=Math.max(0,Math.min(T,O||1/0));if(D){let J2=j.getBoundingClientRect();if(B){let i=J2.left+window.scrollX;window.scrollTo({left:i+x,behavior:d?"smooth":"auto"})}else{let i=J2.top+window.scrollY;window.scrollTo({top:i+x,behavior:d?"smooth":"auto"})}}else if(W){if(x===L)return;let i=x>=L?"down":"up";if(M=t2(M,x),L=x,!E)E=!0;if(q)q({scrollTop:L,direction:i,velocity:M.velocity});g()}else if(B)j.scrollTo({left:x,behavior:d?"smooth":"auto"});else j.scrollTo({top:x,behavior:d?"smooth":"auto"})},k=(T)=>{j2(e()+T)},S=()=>{return e()<=0},p=(T=0)=>{let d=e(),x=D||W?O:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return d>=x-T},u=()=>{let T=e(),d=D||W?O:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(d<=0)return 0;return Math.min(1,Math.max(0,T/d))},b=(T)=>{if(T.compression)U=T.compression,O=U.virtualHeight-y},C=()=>W,h=()=>Math.abs(M.velocity),m=()=>B4(M),s=()=>E,r=()=>D,q2=(T)=>{if(y=T,U)O=U.virtualHeight-y},B2=()=>{if(F)clearTimeout(F);if(D)N.cancel(),window.removeEventListener("scroll",N);else V.cancel(),j.removeEventListener("scroll",V),j.removeEventListener("wheel",R),j.removeEventListener("wheel",w),j.removeEventListener("wheel",_)};if(D){if(W&&U)O=U.virtualHeight-y;window.addEventListener("scroll",N,{passive:!0})}else if(W&&U){if(O=U.virtualHeight-y,B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",R,{passive:!1})}else{if(B)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",V,{passive:!0}),!$)j.addEventListener("wheel",w,{passive:!1});else if(B)j.addEventListener("wheel",_,{passive:!1})}return{getScrollTop:e,scrollTo:j2,scrollBy:k,isAtTop:S,isAtBottom:p,getScrollPercentage:u,getVelocity:h,isTracking:m,isScrolling:s,updateConfig:b,enableCompression:o,disableCompression:c,isCompressed:C,isWindowMode:r,updateContainerHeight:q2,destroy:B2}},e2=(j)=>{let X=null,$=null,J=(...K)=>{if($=K,X===null)X=requestAnimationFrame(()=>{if(X=null,$)j(...$)})};return J.cancel=()=>{if(X!==null)cancelAnimationFrame(X),X=null},J};var U4=0.65,D4=0.5,JJ=()=>{let j=null,X=0,$=!1,J=0,K=null;return{name:"withScale",priority:20,setup(Q){let{dom:q,config:Z}=Q,{classPrefix:G,horizontal:B}=Z,D=()=>{let W=Q.getVirtualTotal(),U=M2(W,Q.heightCache);if(U.isCompressed&&!$){$=!0,Q.scrollController.enableCompression(U),Q.updateContentSize(U.virtualHeight),Q.setScrollFns(()=>X,(V)=>{if(X=V,J=V,K!==null)cancelAnimationFrame(K),K=null});let M=()=>{let V=J-X;if(Math.abs(V)<D4)X=J,K=null;else X+=V*U4,K=requestAnimationFrame(M);Q.scrollController.scrollTo(X)},E=q.viewport,F=(V)=>{V.preventDefault();let N=Q.getCachedCompression().virtualHeight-Q.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+V.deltaY,N)),K===null)K=requestAnimationFrame(M)};if(E.addEventListener("wheel",F,{passive:!1}),Q.destroyHandlers.push(()=>{if(E.removeEventListener("wheel",F),K!==null)cancelAnimationFrame(K),K=null}),!q.viewport.querySelector(`.${G}-scrollbar-track`)){if(j=k2(q.viewport,(H)=>Q.scrollController.scrollTo(H),{},G,B),!q.viewport.classList.contains(`${G}-viewport--custom-scrollbar`))q.viewport.classList.add(`${G}-viewport--custom-scrollbar`);j.updateBounds(U.virtualHeight,Q.state.viewportState.containerHeight);let V=j;Q.afterScroll.push((H,N)=>{if(V)V.updatePosition(H),V.show()}),Q.resizeHandlers.push((H,N)=>{if(V){let w=Q.getCachedCompression();V.updateBounds(w.virtualHeight,Q.state.viewportState.containerHeight)}})}}else if(!U.isCompressed&&$)$=!1,Q.scrollController.disableCompression(),Q.updateContentSize(U.actualHeight);else if(U.isCompressed)Q.scrollController.updateConfig({compression:U}),Q.updateContentSize(U.virtualHeight);if(j)j.updateBounds(U.virtualHeight,Q.state.viewportState.containerHeight);Q.state.cachedCompression={state:U,totalItems:W}};Q.updateCompressionMode=D;let L=Q.getCachedCompression.bind(Q);Q.getCachedCompression=()=>{if(Q.state.cachedCompression)return Q.state.cachedCompression.state;return L()},Q.setVisibleRangeFn((W,U,M,E,F)=>{O=null,y=null;let z=M2(E,M);n2(W,U,M,E,z,F)}),Q.setScrollToPosFn((W,U,M,E,F)=>{let z=M2(E,U);return o2(W,U,M,E,z,F)});let O=null,y=null;Q.setPositionElementFn((W,U)=>{let M=Q.getVirtualTotal(),E=M2(M,Q.heightCache);if(E.isCompressed){let F=Q.scrollController.getScrollTop();if(O===null||U<y)y=U,O=Math.round(R2(U,F,Q.heightCache,M,Q.state.viewportState.containerHeight,E));let z=O+Q.heightCache.getOffset(U)-Q.heightCache.getOffset(y),V=Q.config.horizontal;W.style.transform=V?`translateX(${z}px)`:`translateY(${z}px)`}else{let F=Math.round(Q.heightCache.getOffset(U)),z=Q.config.horizontal;W.style.transform=z?`translateX(${F}px)`:`translateY(${F}px)`}}),D(),Q.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null}}};var jj=(j={})=>{let{chunkSize:X=100,maxCachedItems:$=5000,evictionBuffer:J=200,onEvict:K}=j,Q=new Map,q=0,Z=0,G=(k)=>{let S=Q.get(k);if(!S)S={items:Array(X),count:0,lastAccess:Date.now()},Q.set(k,S);else S.lastAccess=Date.now();return S},B=(k)=>{return Math.floor(k/X)},D=(k)=>{return k%X},L=()=>q,O=(k)=>{q=k},y=(k)=>{if(k<0||k>=q)return;let S=B(k),p=Q.get(S);if(!p)return;return p.items[D(k)]},W=(k)=>{if(k<0||k>=q)return!1;let S=B(k),p=Q.get(S);if(!p)return!1;return p.items[D(k)]!==void 0},U=(k,S)=>{let p=B(k),u=G(p),b=D(k),C=u.items[b]===void 0;if(u.items[b]=S,C)u.count++,Z++;if(k>=q)q=k+1},M=(k,S)=>{for(let p=0;p<S.length;p++){let u=S[p];if(u!==void 0)U(k+p,u)}},E=(k)=>{if(k<0||k>=q)return!1;let S=B(k),p=Q.get(S);if(!p)return!1;let u=D(k);if(p.items[u]===void 0)return!1;if(p.items[u]=void 0,p.count--,Z--,p.count===0)Q.delete(S);return!0},F=(k,S)=>{let p=[];for(let u=k;u<=S&&u<q;u++)p.push(y(u));return p},z=(k,S)=>{for(let p=k;p<=S&&p<q;p++)if(!W(p))return!1;return!0},V=()=>{let k=[],S=null,p=Array.from(Q.keys()).sort((u,b)=>u-b);for(let u of p){let b=Q.get(u);if(!b)continue;let C=u*X;for(let h=0;h<X;h++){let m=C+h;if(m>=q)break;if(b.items[h]!==void 0)if(S===null)S={start:m,end:m};else if(m===S.end+1)S.end=m;else k.push(S),S={start:m,end:m};else if(S!==null)k.push(S),S=null}}if(S!==null)k.push(S);return k},H=(k,S)=>{let p=[],u=null;for(let b=k;b<=S&&b<q;b++)if(!W(b))if(u===null)u={start:b,end:b};else u.end=b;else if(u!==null)p.push(u),u=null;if(u!==null)p.push(u);return p},N=(k)=>{return Q.has(k)},w=(k)=>{let S=Q.get(k);if(S)S.lastAccess=Date.now()},_=(k,S)=>{if(k>S||Q.size===0)return;let p=Date.now(),u=B(Math.max(0,k)),b=B(Math.min(q-1,S));for(let C=u;C<=b;C++){let h=Q.get(C);if(h)h.lastAccess=p}},R=(k,S)=>{if(Z<=$)return 0;let p=Math.max(0,k-J),u=Math.min(q-1,S+J),b=B(p),C=B(u),h=0,m=[];for(let[s,r]of Q)if(s<b||s>C)h+=r.count,m.push(s),Z-=r.count,Q.delete(s);if(h>0&&K)K(h,m);return h},g=()=>{if(Z<=$)return 0;let k=Array.from(Q.entries()).sort(([,u],[,b])=>u.lastAccess-b.lastAccess),S=0,p=[];for(let[u,b]of k){if(Z<=$)break;S+=b.count,Z-=b.count,p.push(u),Q.delete(u)}if(S>0&&K)K(S,p);return S},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:Q.size,chunkSize:X,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},c=()=>Z,e=()=>{Q.clear(),Z=0};return{chunkSize:X,maxCachedItems:$,getTotal:L,setTotal:O,get:y,has:W,set:U,setRange:M,delete:E,getRange:F,isRangeLoaded:z,getLoadedRanges:V,findUnloadedRanges:H,getChunkIndex:B,isChunkLoaded:N,touchChunk:w,touchChunksForRange:_,evictDistant:R,evictToLimit:g,getStats:o,getCachedCount:c,clear:e,reset:()=>{e(),q=0}}},Jj=(j)=>{if(j.length===0)return[];let X=[...j].sort((J,K)=>J.start-K.start),$=[{...X[0]}];for(let J=1;J<X.length;J++){let K=X[J],Q=$[$.length-1];if(K.start<=Q.end+1)Q.end=Math.max(Q.end,K.end);else $.push({...K})}return $},x2=(j,X,$)=>{let J=Math.floor(j.start/$)*$,K=Math.ceil((j.end+1)/$)*$-1,Q={start:J,end:K};if(X.length===0)return[Q];let q=[],Z=Jj(X),G=Q.start;for(let B of Z){if(B.end<G)continue;if(B.start>Q.end)break;if(B.start>G)q.push({start:G,end:Math.min(B.start-1,Q.end)});if(G=B.end+1,G>Q.end)break}if(G<=Q.end)q.push({start:G,end:Q.end});return q};var $j=(j={})=>{let{enabled:X=!0,maskCharacter:$="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:Q}=j,q=null,Z=!1,G=0,B=(E)=>{if(!X||Z||E.length===0)return;let F=new Map,z=new Map,V=Math.min(E.length,K);for(let H=0;H<V;H++){let N=E[H];if(!N||typeof N!=="object")continue;for(let[w,_]of Object.entries(N)){if(w.startsWith("_")||w==="id")continue;if(!z.has(w))z.set(w,{lengths:[],types:new Set});let R=z.get(w),g=Array.isArray(_)?"array":typeof _;if(R.types.add(g),typeof _==="string")R.lengths.push(_.length);else if(_!==null&&_!==void 0)R.lengths.push(String(_).length)}}for(let[H,N]of z){if(N.lengths.length===0)continue;let w=Math.min(...N.lengths),_=Math.max(...N.lengths),R=Math.round(N.lengths.reduce((o,c)=>o+c,0)/N.lengths.length),g="string";if(N.types.has("number")&&N.types.size===1)g="number";else if(N.types.has("boolean")&&N.types.size===1)g="boolean";else if(N.types.has("array"))g="array";else if(N.types.has("object")&&!N.types.has("string"))g="object";F.set(H,{minLength:w,maxLength:_,avgLength:R,type:g})}q=F,Z=!0},D=()=>Z,L=(E)=>{let F=E.avgLength;if(J&&E.minLength!==E.maxLength){if(F=Math.floor(Math.random()*(E.maxLength-E.minLength+1)+E.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,F))},O=(E)=>{if(Q)return{...Q(E),["_isPlaceholder"]:!0};let F={id:`__placeholder_${G++}`,["_isPlaceholder"]:!0,_index:E};if(!q||q.size===0)return F.label=$.repeat(12),F;for(let[z,V]of q)switch(V.type){case"string":F[z]=L(V);break;case"number":F[z]=0;break;case"boolean":F[z]=!1;break;case"array":F[z]=[];break;case"object":F[z]={};break;default:F[z]=L(V)}return F};return{analyzeStructure:B,hasAnalyzedStructure:D,generate:O,generateRange:(E,F)=>{let z=[];for(let V=E;V<=F;V++)z.push(O(V));return z},isPlaceholder:(E)=>{if(!E||typeof E!=="object")return!1;return E._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,G=0}}},z2=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},Lj=(j)=>{return j.filter((X)=>!z2(X))};var N4=50,Qj=(j={})=>{let{adapter:X,initialItems:$,initialTotal:J,storage:K,placeholder:Q,pageSize:q=N4,onStateChange:Z,onItemsLoaded:G,onItemsEvicted:B}=j,D=jj({...K,onEvict:(v,f)=>{B?.(v),V()}}),L=null,O=()=>{if(!L)L=$j(Q);return L},y=new Map,W=!1,U,M=!0,E,F=[],z=new Map,V=()=>{Z?.(e())},H=()=>{y.clear();let v=D.getLoadedRanges();for(let f of v)for(let n=f.start;n<=f.end;n++){let $2=D.get(n);if($2&&!z2($2))y.set($2.id,n)}},N=(v,f)=>{if(!z2(f))y.set(f.id,v)},w=(v)=>{y.delete(v)},_=(v,f)=>{return`${v}-${f}`},R=()=>D.getTotal(),g=()=>D.getCachedCount(),o=()=>W,c=()=>M,e=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:W,pendingRanges:F,error:U,hasMore:M,cursor:E}),j2=()=>D,k=()=>O(),S=(v)=>{let f=D.get(v);if(f!==void 0)return f;if(v>=0&&v<D.getTotal())return O().generate(v);return},p=(v)=>{let f=y.get(v);if(f===void 0)return;return D.get(f)},u=(v)=>{return y.get(v)??-1},b=(v)=>{let f=D.get(v);return f!==void 0&&!z2(f)},C=(v,f)=>{let n=[],$2=D.getTotal(),l=0,X2=0;D.touchChunksForRange(v,Math.min(f,$2-1));for(let K2=v;K2<=f&&K2<$2;K2++){let A2=D.get(K2);if(A2!==void 0)n.push(A2),l++;else n.push(O().generate(K2)),X2++}return n},h=(v)=>{D.setTotal(v),M=D.getCachedCount()<v,V()},m=(v,f=0,n)=>{if(L&&!L.hasAnalyzedStructure()&&v.length>0)L.analyzeStructure(v);for(let $2=0;$2<v.length;$2++){let l=v[$2];if(l!==void 0){let X2=f+$2;D.set(X2,l),N(X2,l)}}if(n!==void 0)D.setTotal(n);else if(f+v.length>D.getTotal())D.setTotal(f+v.length);M=D.getCachedCount()<D.getTotal(),G?.(v,f,D.getTotal()),V()},s=(v,f)=>{let n=y.get(v);if(n===void 0)return!1;let $2=D.get(n);if(!$2)return!1;let l={...$2,...f};if(D.set(n,l),f.id!==void 0&&f.id!==v)w(v),N(n,l);return V(),!0},r=(v)=>{let f=y.get(v);if(f===void 0)return!1;D.delete(f),w(v);let n=D.getTotal();if(n>0)D.setTotal(n-1);return V(),!0},q2=async(v,f)=>{if(!X)return;let n=_(v,f);if(z.has(n))return;let $2=D.getLoadedRanges(),l=x2({start:v,end:f},$2,D.chunkSize);if(l.length===0)return;let X2=D.chunkSize,K2=[];for(let U2 of l){let Y2=Math.floor(U2.start/X2),_2=Math.floor(U2.end/X2);for(let D2=Y2;D2<=_2;D2++){let G2=D2*X2,N2=G2+X2-1,S2=_(G2,N2);if(!K2.some((F2)=>F2.start===G2)&&!z.has(S2))K2.push({start:G2,end:N2})}}let A2=[];for(let U2 of l){let Y2=Math.floor(U2.start/X2),_2=Math.floor(U2.end/X2);for(let D2=Y2;D2<=_2;D2++){let G2=D2*X2,N2=G2+X2-1,S2=_(G2,N2);if(z.has(S2)){let F2=z.get(S2);if(!A2.includes(F2))A2.push(F2)}}}for(let U2 of K2){let Y2=_(U2.start,U2.end),_2=(async()=>{F.push(U2),W=!0,U=void 0,V();try{let D2=U2.end-U2.start+1,G2={offset:U2.start,limit:D2,cursor:void 0},N2=await X.read(G2);if(m(N2.items,U2.start,N2.total),N2.cursor)E=N2.cursor;if(N2.hasMore!==void 0)M=N2.hasMore;else if(N2.total!==void 0)M=D.getCachedCount()<N2.total}catch(D2){U=D2 instanceof Error?D2:Error(String(D2))}finally{z.delete(Y2),F=F.filter((D2)=>D2.start!==U2.start||D2.end!==U2.end),W=z.size>0,V()}})();z.set(Y2,_2),A2.push(_2)}await Promise.all(A2)},B2=async(v,f)=>{if(D.isRangeLoaded(v,f))return;await q2(v,f)},T=async()=>{if(!X)return;await q2(0,q-1)},d=async()=>{if(!X||W||!M)return!1;let v=D.getCachedCount(),f=D.getTotal(),n=v,$2=Math.min(n+q-1,f>0?f-1:n+q-1);if(n>=f&&f>0)return M=!1,!1;return await q2(n,$2),D.getCachedCount()>v},x=async()=>{if(D.clear(),y.clear(),L)L.clear();E=void 0,M=!0,U=void 0,V(),await T()},J2=(v,f)=>{if(D.evictDistant(v,f)>0)H()},i=()=>{D.clear(),y.clear(),E=void 0,U=void 0,F=[],W=!1,V()},Q2=()=>{if(D.reset(),y.clear(),L)L.clear();E=void 0,M=!0,U=void 0,F=[],W=!1,V()};if($&&$.length>0)m($,0,J??$.length);else if(J!==void 0)D.setTotal(J);return{getState:e,getTotal:R,getCached:g,getIsLoading:o,getHasMore:c,getStorage:j2,getPlaceholders:k,getItem:S,getItemById:p,getIndexById:u,isItemLoaded:b,getItemsInRange:C,setTotal:h,setItems:m,updateItem:s,removeItem:r,loadRange:q2,ensureRange:B2,loadInitial:T,loadMore:d,reload:x,evictDistant:J2,clear:i,reset:Q2}};var Oj=(j,X,$,J,K,Q)=>{if(J===0||X===0)return Q.start=0,Q.end=-1,Q;let q=$.indexAtOffset(j),Z=$.indexAtOffset(j+X);if(Z<J-1)Z++;return Q.start=Math.max(0,q),Q.end=Math.min(J-1,Math.max(0,Z)),Q},zj=(j,X,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min($-1,j.end+X),J},$J=(j,X,$,J,K,Q)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Z=X.getOffset(q),G=X.getHeight(q),B=X.getTotalHeight(),D=Math.max(0,B-$),L;switch(Q){case"center":L=Z-$/2+G/2;break;case"end":L=Z-$+G;break;case"start":default:L=Z;break}return Math.max(0,Math.min(L,D))},QJ=(j,X,$)=>{if($&&$.isCompressed)return $.virtualHeight;return X.getTotalHeight()},XJ=(j,X)=>{return X.getTotalHeight()},qJ=(j,X)=>{return X.getOffset(j)},KJ=(j,X,$)=>{let J=Math.max(0,X-$);return Math.max(0,Math.min(j,J))};var bj=(j,X,$,J,K,Q=Oj)=>{return Q(j.scrollTop,j.containerHeight,X,$,K,j.visibleRange),zj(j.visibleRange,J,$,j.renderRange),j.totalHeight=K.virtualHeight,j.actualHeight=K.actualHeight,j.isCompressed=K.isCompressed,j.compressionRatio=K.ratio,j},b2=(j,X,$,J,K="start",Q,q=$J)=>{return q(j,X,$,J,Q,K)},YJ=(j,X)=>{return j.start===X.start&&j.end===X.end},ZJ=(j,X)=>{return j>=X.start&&j<=X.end},BJ=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var UJ=(j,X)=>{let $=[],J=[];for(let K=j.start;K<=j.end;K++)if(K<X.start||K>X.end)J.push(K);for(let K=X.start;K<=X.end;K++)if(K<j.start||K>j.end)$.push(K);return{add:$,remove:J}};i2();var DJ=(j)=>{let{adapter:X,loading:$}=j,J=$?.cancelThreshold??dj,K=$?.preloadThreshold??cj,Q=$?.preloadAhead??lj;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,G=q.config.reverse,B=q.config.overscan,D=Qj({adapter:X,pageSize:u2,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=bj(q.state.viewportState,q.heightCache,q.getVirtualTotal(),B,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(E,F,z)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:E,total:z})}});q.replaceDataManager(D);let L=null,O=null,y=0,W=()=>{if(O){let E=O;O=null,q.dataManager.ensureRange(E.start,E.end).catch((F)=>{Z.emit("error",{error:F,context:"ensureRange"})})}};q.afterScroll.push((E,F)=>{if(q.state.isDestroyed)return;let z=q.scrollController.getVelocity(),H=q.scrollController.isTracking()&&z<=J;if(O&&y>J&&z<=J){let _=O;O=null,q.dataManager.ensureRange(_.start,_.end).catch((R)=>{Z.emit("error",{error:R,context:"ensureRange"})})}if(y=z,H&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(G){if(E<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:u2}),q.dataManager.loadMore().catch((_)=>{Z.emit("error",{error:_,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-E-q.state.viewportState.containerHeight<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:u2}),q.dataManager.loadMore().catch((R)=>{Z.emit("error",{error:R,context:"loadMore"})})}let{renderRange:N}=q.state.viewportState;if(!L||N.start!==L.start||N.end!==L.end)if(L={start:N.start,end:N.end},H){O=null;let{start:_,end:R}=N,g=q.getVirtualTotal();if(z>K)if(F==="down")R=Math.min(N.end+Q,g-1);else _=Math.max(N.start-Q,0);q.dataManager.ensureRange(_,R).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}else O={start:N.start,end:N.end}});let U=200,M=null;q.afterScroll.push((E,F)=>{if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,W()},U)}),q.destroyHandlers.push(()=>{if(M!==null)clearTimeout(M),M=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:u2}),q.dataManager.loadInitial().catch((E)=>{Z.emit("error",{error:E,context:"loadInitial"})})}}};var WJ=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:$,state:J,config:K,emitter:Q}=X;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let B=$.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-B.left);else return Math.max(0,-B.top)},(B)=>{let D=$.viewport.getBoundingClientRect();if(K.horizontal){let L=D.left+window.scrollX;window.scrollTo(L+B,window.scrollY)}else{let L=D.top+window.scrollY;window.scrollTo(window.scrollX,L+B)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,G=()=>{let{innerWidth:B,innerHeight:D}=window,L=K.horizontal?B:D,O=K.horizontal?Z:q;if(Math.abs(L-O)<=1)return;q=D,Z=B,J.viewportState.containerHeight=D,Q.emit("resize",{width:B,height:D});for(let y=0;y<X.resizeHandlers.length;y++)X.resizeHandlers[y](B,D);X.renderIfNeeded()};window.addEventListener("resize",G,{passive:!0}),j=()=>{window.removeEventListener("resize",G)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var Pj=(j,X)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].headerLayoutIndex<=X)$=K;else J=K-1}return $},NJ=(j,X)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].firstDataIndex<=X)$=K;else J=K-1}return $},VJ=(j,X)=>{if(j===0)return[];let $=[],J=X(0),K=0,Q=0;for(let q=1;q<j;q++){let Z=X(q);if(Z!==J){let G=q-K;$.push({key:J,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:K,count:G}),Q=Q+1+G,J=Z,K=q}}return $.push({key:J,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:K,count:j-K}),$},h2=(j,X)=>{if(j.length===0||X.length===0)return[];let $=j.length+X.length,J=Array($),K=0;for(let Q of X){J[K]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},K++;for(let q=0;q<Q.count;q++)J[K]=j[Q.firstDataIndex+q],K++}return J},g2=(j,X)=>{let $=typeof X==="number"?(J)=>X:X;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return $(K.dataIndex)}},Xj=(j,X)=>{let $=VJ(j,X.getGroupForIndex),J=j+$.length,K=X.headerHeight;return{get totalEntries(){return J},get groupCount(){return $.length},get groups(){return $},getEntry:(O)=>{if($.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let y=Pj($,O),W=$[y];if(O===W.headerLayoutIndex)return{type:"header",group:W};let U=O-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+U,group:W}},layoutToDataIndex:(O)=>{if($.length===0)return O;let y=Pj($,O),W=$[y];if(O===W.headerLayoutIndex)return-1;let U=O-W.headerLayoutIndex-1;return W.firstDataIndex+U},dataToLayoutIndex:(O)=>{if($.length===0)return O;let y=NJ($,O),W=$[y],U=O-W.firstDataIndex;return W.headerLayoutIndex+1+U},getGroupAtLayoutIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=Pj($,O);return $[y]},getGroupAtDataIndex:(O)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=NJ($,O);return $[y]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let y=$[O];if(!y)return 0;return K(y.key,O)},rebuild:(O)=>{$=VJ(O,X.getGroupForIndex),J=O+$.length}}};var qj=(j,X,$,J,K)=>{let Q=document.createElement("div");Q.className=`${K}-sticky-header`,Q.setAttribute("role","presentation"),Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.top="0",Q.style.left="0",Q.style.right="0",Q.style.zIndex="5",Q.style.pointerEvents="none",Q.style.willChange="transform",Q.style.overflow="hidden",j.insertBefore(Q,j.firstChild);let q=-1,Z=!1,G=0,B=(U)=>{if(U===q)return;q=U;let M=X.groups;if(U<0||U>=M.length){Q.textContent="";return}let E=M[U],F=J.headerTemplate(E.key,E.groupIndex),z=X.getHeaderHeight(U);if(Q.style.height=`${z}px`,typeof F==="string")Q.innerHTML=F;else Q.replaceChildren(F)},D=(U)=>{let M=X.groups;if(M.length===0){O();return}let E=0;for(let N=M.length-1;N>=0;N--)if($.getOffset(M[N].headerLayoutIndex)<=U){E=N;break}let F=$.getOffset(M[0].headerLayoutIndex);if(U<F){O();return}if(!Z)L();B(E);let z=X.getHeaderHeight(E),V=0,H=E+1;if(H<M.length){let w=$.getOffset(M[H].headerLayoutIndex)-U;if(w<z)V=w-z}if(V!==G)G=V,Q.style.transform=V===0?"":`translateY(${Math.round(V)}px)`},L=()=>{if(Z)return;Z=!0,Q.style.display=""},O=()=>{if(!Z)return;Z=!1,Q.style.display="none",q=-1,G=0,Q.style.transform=""},y=()=>{let U=q;if(q=-1,U>=0)B(U)},W=()=>{Q.remove(),q=-1,Z=!1};return Q.style.display="none",{update:D,refresh:y,show:L,hide:O,destroy:W}};var GJ=(j)=>{if(!j.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(j.headerHeight==null||j.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!j.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let X=null,$=null,J=[],K=[];return{name:"withSections",priority:10,setup(Q){let{dom:q,config:Z,rawConfig:G}=Q,{classPrefix:B}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let L=G.item.height;J=G.items?[...G.items]:[];let O=J.length,y={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=Xj(O,y),K=h2(J,X.groups);let W=g2(X,L);Q.setHeightConfig(W),Q.rebuildHeightCache(K.length),Q.dataManager.setItems(K,0,K.length);let U=G.item.template,{headerTemplate:M}=j,E=(_,R,g)=>{if(P2(_))return M(_.groupKey,_.groupIndex);return U(_,R,g)},F=Q.methods.get("_getGridLayout"),z=Q.methods.get("_replaceGridRenderer"),V=Q.methods.get("_updateGridLayoutForGroups");if(F&&z){if(V)V((o)=>{let c=K[o];return!!(c&&P2(c))});let{createGridRenderer:_}=(Kj(),lJ(_J)),R=F(),g=_(q.items,E,Q.heightCache,R,B,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),Z.ariaIdPrefix);z(g)}else Q.replaceTemplate(E);if(q.root.classList.add(`${B}--grouped`),j.sticky!==!1){$=qj(q.root,X,Q.heightCache,{...y,sticky:y.sticky??!1},B);let _=$;Q.afterScroll.push((R,g)=>{_.update(R)}),$.update(Q.scrollController.getScrollTop())}let H=()=>{if(!X)return;X.rebuild(J.length),K=h2(J,X.groups);let _=g2(X,L);if(Q.setHeightConfig(_),Q.rebuildHeightCache(K.length),Q.dataManager.setItems(K,0,K.length),$)$.refresh()};Q.methods.set("setItems",(_)=>{J=[..._],H()}),Q.methods.set("appendItems",(_)=>{J=[...J,..._],H()}),Q.methods.set("prependItems",(_)=>{J=[..._,...J],H()}),Q.methods.set("removeItem",(_)=>{J=J.filter((R)=>R.id!==_),H()});let{animateScroll:N,cancelScroll:w}=G4(Q.scrollController,Q.renderIfNeeded);Q.methods.set("scrollToIndex",(_,R)=>{let g=X.dataToLayoutIndex(_),{align:o,behavior:c,duration:e}=M4(R),j2=Q.dataManager.getTotal(),k=b2(g,Q.heightCache,Q.state.viewportState.containerHeight,j2,o,Q.getCachedCompression());if(c==="smooth")N(Q.scrollController.getScrollTop(),k,e);else w(),Q.scrollController.scrollTo(k)}),Q.methods.set("_getItems",()=>J),Q.methods.set("_getTotal",()=>J.length),Q.destroyHandlers.push(()=>{if(L2!==null)cancelAnimationFrame(L2),L2=null;if($)$.destroy(),$=null;q.root.classList.remove(`${B}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},yj=300,_4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,L2=null,G4=(j,X)=>{let $=()=>{if(L2!==null)cancelAnimationFrame(L2),L2=null};return{animateScroll:(K,Q,q)=>{if($(),Math.abs(Q-K)<1){j.scrollTo(Q);return}let Z=performance.now(),G=(B)=>{let D=B-Z,L=Math.min(D/q,1),O=K+(Q-K)*_4(L);if(j.scrollTo(O),X(),L<1)L2=requestAnimationFrame(G);else L2=null};L2=requestAnimationFrame(G)},cancelScroll:$}},M4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:yj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??yj};return{align:"start",behavior:"auto",duration:yj}};var Yj=(j)=>{let X=Math.max(1,Math.floor(j.columns)),$=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},Q=(W)=>{if(W<=0)return 0;if(!J)return Math.ceil(W/X);let U=0,M=0,E=0;for(let F=0;F<W;F++)if(J(F)){if(E++,M>0)U++,M=0;U++,M=0}else if(M++,M>=X)U++,M=0;if(M>0)U++;return U},q=(W)=>{return K.row=Z(W),K.col=G(W),K},Z=(W)=>{if(!J)return Math.floor(W/X);let U=0,M=0;for(let E=0;E<=W;E++)if(J(E)){if(M>0)U++,M=0;if(E===W)return U;U++,M=0}else{if(E===W)return U;if(M++,M>=X)U++,M=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${U}`),U},G=(W)=>{if(!J)return W%X;if(J(W))return 0;let U=0;for(let M=0;M<=W;M++)if(J(M))U=0;else{if(M===W)return U;if(U++,U>=X)U=0}return U},B=(W,U,M)=>{if(M<=0)return{start:0,end:-1};if(!J){let H=Math.max(0,W*X),N=Math.min(M-1,(U+1)*X-1);return{start:H,end:N}}let E=-1,F=-1,z=0,V=0;for(let H=0;H<M;H++){if(J(H)){if(V>0)z++,V=0;if(z>=W&&z<=U){if(E===-1)E=H;F=H}z++,V=0}else{if(z>=W&&z<=U){if(E===-1)E=H;F=H}if(V++,V>=X)z++,V=0}if(z>U&&V===0)break}if(E===-1)return{start:0,end:-1};return{start:E,end:F}},D=(W,U,M)=>{if(U<0||U>=X)return-1;let E=W*X+U;if(E<0||E>=M)return-1;return E},L=(W)=>{let U=(X-1)*$;return Math.max(0,(W-U)/X)};return{get columns(){return X},get gap(){return $},update:(W)=>{if(W.columns!==void 0)X=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)$=W.gap;if(W.isHeaderFn!==void 0)J=W.isHeaderFn},getTotalRows:Q,getPosition:q,getRow:Z,getCol:G,getItemRange:B,getItemIndex:D,getColumnWidth:L,getColumnOffset:(W,U)=>{let M=L(U);return W*(M+$)}}};Kj();var MJ=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,$=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:Q,config:q,rawConfig:Z}=J,{classPrefix:G}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let B=Z.items?.some((V)=>V.__groupHeader===!0),D={columns:j.columns,gap:j.gap??0};if(B)D.isHeaderFn=(V)=>{let H=J.dataManager.getItem(V);return!!(H&&H.__groupHeader===!0)};X=Yj(D);let L=X.gap;J.setVirtualTotalFn(()=>{let V=J.dataManager.getTotal();return X.getTotalRows(V)});let O=Z.item,y=q.horizontal?O.width:O.height,W={containerWidth:J.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof y==="function")J.setHeightConfig((V)=>{let H=W.containerWidth-2,N=(W.columns-1)*W.gap,w=(H-N)/W.columns,_={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:w,row:X.getRow(V),column:X.getCol(V),totalRows:X.getTotalRows(J.dataManager.getTotal()),totalColumns:W.columns};return y(V,_)+W.gap});else if(L>0)J.setHeightConfig(y+L);J.rebuildHeightCache(),K.root.classList.add(`${G}--grid`);let U=J.getContainerWidth(),M=Z.item.template,E=()=>{$=m2(K.items,M,J.heightCache,X,G,U,()=>J.dataManager.getTotal(),q.ariaIdPrefix),J.replaceRenderer($)};E(),J.methods.set("_getGridLayout",()=>X),J.methods.set("_getGridConfig",()=>D),J.methods.set("_replaceGridRenderer",(V)=>{$=V}),J.methods.set("_updateGridLayoutForGroups",(V)=>{X.update({isHeaderFn:V});let H=J.dataManager.getTotal(),N=0;for(let w=0;w<H;w++)if(X.getCol(w)===0){let _=J.heightCache.getHeight(w);N+=_}J.heightCache.getTotalHeight=()=>N,J.dom.content.style.height=`${N}px`,E()}),J.methods.set("updateGrid",(V)=>{if(V.columns!==void 0){if(!Number.isInteger(V.columns)||V.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");D.columns=V.columns}if(V.gap!==void 0){if(V.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");D.gap=V.gap}if(X)X.update(D);let H=J.getContainerWidth();if(W.containerWidth=H,W.columns=D.columns,W.gap=D.gap??0,$)$.updateContainerWidth(H);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let N=0;N<J.contentSizeHandlers.length;N++)J.contentSizeHandlers[N]();if($)$.clear();J.forceRender()});let F=()=>{if(J.state.isDestroyed)return;let V=J.scrollController.getScrollTop(),H=J.state.viewportState.containerHeight,N=J.getVirtualTotal(),w={start:0,end:0};if(N===0||H===0)w.start=0,w.end=0;else{w.start=Math.max(0,J.heightCache.indexAtOffset(V));let S=J.heightCache.indexAtOffset(V+H);if(S<N-1)S++;w.end=Math.min(N-1,Math.max(0,S))}let _=q.overscan??3,R={start:Math.max(0,w.start-_),end:Math.min(N-1,w.end+_)};J.state.viewportState.scrollTop=V,J.state.viewportState.visibleRange=w,J.state.viewportState.renderRange=R;let g=J.state.lastRenderRange,o=J.state.viewportState.isCompressed;if(R.start===g.start&&R.end===g.end){if(o)$.updatePositions(J.getCompressionContext());return}let c=J.dataManager.getTotal(),e=X.getItemRange(R.start,R.end,c),j2=J.dataManager.getItemsInRange(e.start,e.end),k=o?J.getCompressionContext():void 0;$.render(j2,e,new Set,-1,k),J.state.lastRenderRange={...R},Q.emit("range:change",{range:R})},z=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},F()};if(J.setRenderFns(F,z),J.resizeHandlers.push((V,H)=>{if($)$.updateContainerWidth(V)}),J.methods.set("scrollToIndex",(V,H)=>{let N=Math.floor(V/j.columns),{align:w,behavior:_}=E4(H),R=J.dataManager.getState(),g=X.getTotalRows(R.total),o=Math.max(0,Math.min(N,g-1)),c=b2(o,J.heightCache,J.state.viewportState.containerHeight,g,w,J.getCachedCompression());if(_==="smooth")J.scrollController.scrollTo(c);else J.scrollController.scrollTo(c)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if($)$.destroy(),$=null;K.root.classList.remove(`${G}--grid`)})},destroy(){if($)$.destroy(),$=null}}},Hj=300,E4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:Hj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??Hj};return{align:"start",behavior:"auto",duration:Hj}};Kj();var Zj=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),d2=(j,X,$)=>{if($==="none")return j;let J=new Set(j.selected);if($==="single"){if(J.clear(),X.length>0)J.add(X[0])}else for(let K of X)J.add(K);return{...j,selected:J}},c2=(j,X)=>{let $=new Set(j.selected);for(let J of X)$.delete(J);return{...j,selected:$}},T2=(j,X,$)=>{if($==="none")return j;if(j.selected.has(X))return c2(j,[X]);else return d2(j,[X],$)},Bj=(j,X,$)=>{if($!=="multiple")return j;return{...j,selected:new Set(X.map((J)=>J.id))}},Uj=(j)=>({...j,selected:new Set}),Rj=(j,X)=>{return j.focusedIndex=X,j},kj=(j,X,$=!0)=>{if(X===0)return j;let J=j.focusedIndex-1;if(J<0)J=$?X-1:0;return j.focusedIndex=J,j},Tj=(j,X,$=!0)=>{if(X===0)return j;let J=j.focusedIndex+1;if(J>=X)J=$?0:X-1;return j.focusedIndex=J,j},Cj=(j,X)=>{if(X===0)return j;return j.focusedIndex=0,j},wj=(j,X)=>{if(X===0)return j;return j.focusedIndex=X-1,j};var EJ=(j,X)=>{return j.selected.has(X)},C2=(j)=>{return Array.from(j.selected)},w2=(j,X)=>{let $=[];for(let J of j.selected){let K=X(J);if(K)$.push(K)}return $};var AJ=(j)=>{let X=j?.mode??"single",$=j?.initial,J=Zj($),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:q,emitter:Z,config:G}=Q,{classPrefix:B,ariaIdPrefix:D}=G;if(X==="none"){Q.methods.set("select",()=>{}),Q.methods.set("deselect",()=>{}),Q.methods.set("toggleSelect",()=>{}),Q.methods.set("selectAll",()=>{}),Q.methods.set("clearSelection",()=>{}),Q.methods.set("getSelected",()=>[]),Q.methods.set("getSelectedItems",()=>[]),Q.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:L,forceRender:O}=Q.getRenderFns(),y=()=>{Q.dom.items.querySelectorAll("[data-index]").forEach((z)=>{let V=z,H=V.dataset.id;if(H!==void 0){let N=/^\d+$/.test(H)?parseInt(H,10):H,w=J.selected.has(N),R=parseInt(V.dataset.index??"-1",10)===J.focusedIndex;V.classList.toggle(`${B}-item--selected`,w),V.classList.toggle(`${B}-item--focused`,R),V.ariaSelected=w?"true":"false"}})},W=()=>{if(Q.state.isDestroyed)return;L(),y()},U=()=>{if(Q.state.isDestroyed)return;O(),y()};Q.setRenderFns(W,U);let M=()=>{y(),Z.emit("selection:change",{selected:C2(J),items:w2(J,(F)=>Q.dataManager.getItemById(F))})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${B}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",q.root.appendChild(K);let E=K;Z.on("selection:change",({selected:F})=>{let z=F.length;if(z===0)E.textContent="";else if(z===1)E.textContent="1 item selected";else E.textContent=`${z} items selected`}),Q.clickHandlers.push((F)=>{if(Q.state.isDestroyed)return;let V=F.target.closest("[data-index]");if(!V)return;let H=parseInt(V.dataset.index??"-1",10);if(H<0)return;let N=Q.dataManager.getItem(H);if(!N)return;Z.emit("item:click",{item:N,index:H,event:F}),J=Rj(J,H),q.root.setAttribute("aria-activedescendant",`${D}-item-${H}`),J=T2(J,N.id,X),M()}),Q.keydownHandlers.push((F)=>{if(Q.state.isDestroyed)return;let z=Q.dataManager.getTotal(),V=J.focusedIndex,H=!1,N=!1,w=J;switch(F.key){case"ArrowUp":w=kj(J,z),H=!0,N=!0;break;case"ArrowDown":w=Tj(J,z),H=!0,N=!0;break;case"Home":w=Cj(J,z),H=!0,N=!0;break;case"End":w=wj(J,z),H=!0,N=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let _=Q.dataManager.getItem(J.focusedIndex);if(_)w=T2(J,_.id,X);H=!0}break}if(H){F.preventDefault(),J=w;let _=J.focusedIndex;if(_>=0){let R=Q.dataManager.getState(),g=b2(_,Q.heightCache,Q.state.viewportState.containerHeight,R.total,"center",Q.getCachedCompression());Q.scrollController.scrollTo(g),q.root.setAttribute("aria-activedescendant",`${D}-item-${_}`)}else q.root.removeAttribute("aria-activedescendant");if(N){let{selected:R}=J;if(V>=0&&V!==_){let g=Q.dataManager.getItem(V);if(g)Q.renderer.updateItemClasses(V,R.has(g.id),!1)}if(_>=0){let g=Q.dataManager.getItem(_);if(g)Q.renderer.updateItemClasses(_,R.has(g.id),!0)}}else U(),Z.emit("selection:change",{selected:C2(J),items:w2(J,(R)=>Q.dataManager.getItemById(R))})}}),Q.methods.set("select",(...F)=>{J=d2(J,F,X),M()}),Q.methods.set("deselect",(...F)=>{J=c2(J,F),M()}),Q.methods.set("toggleSelect",(F)=>{J=T2(J,F,X),M()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;let F=Q.getAllLoadedItems();J=Bj(J,F,X),M()}),Q.methods.set("clearSelection",()=>{J=Uj(J);let{renderRange:F,isCompressed:z}=Q.state.viewportState,V=Q.getItemsForRange(F),H=z?Q.getCompressionContext():void 0;Q.renderer.render(V,F,J.selected,J.focusedIndex,H),Z.emit("selection:change",{selected:[],items:[]})}),Q.methods.set("getSelected",()=>{return C2(J)}),Q.methods.set("getSelectedItems",()=>{return w2(J,(F)=>Q.dataManager.getItemById(F))}),Q.destroyHandlers.push(()=>{if(E&&E.parentNode)E.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var FJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let X=j.scrollController.getScrollTop(),$=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),Q=K&&K().length>0?K():void 0;if(J===0){let B={index:0,offsetInItem:0};if(Q)B.selectedIds=Q;return B}let q,Z;if($.isCompressed){let D=X/$.virtualHeight*J;q=Math.max(0,Math.min(Math.floor(D),J-1)),Z=(D-q)*j.heightCache.getHeight(q)}else q=j.heightCache.indexAtOffset(X),Z=X-j.heightCache.getOffset(q);Z=Math.max(0,Z);let G={index:q,offsetInItem:Z};if(Q)G.selectedIds=Q;return G}),j.methods.set("restoreScroll",(X)=>{let{index:$,offsetInItem:J,selectedIds:K}=X,Q=j.getCachedCompression(),q=j.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),G;if(Q.isCompressed){let D=j.heightCache.getHeight(Z),L=D>0?J/D:0;G=(Z+L)/q*Q.virtualHeight}else G=j.heightCache.getOffset(Z)+J;let B=Math.max(0,Q.virtualHeight-j.state.viewportState.containerHeight);if(G=Math.max(0,Math.min(G,B)),j.scrollController.scrollTo(G),K&&K.length>0){let D=j.methods.get("select");if(D)D(...K)}})}}};var LJ=()=>{let j={},X=(Z,G)=>{if(!j[Z])j[Z]=new Set;return j[Z].add(G),()=>$(Z,G)},$=(Z,G)=>{j[Z]?.delete(G)};return{on:X,off:$,emit:(Z,G)=>{j[Z]?.forEach((B)=>{try{B(G)}catch(D){console.error(`[vlist] Error in event handler for "${String(Z)}":`,D)}})},once:(Z,G)=>{let B=(D)=>{$(Z,B),G(D)};return X(Z,B)},clear:(Z)=>{if(Z)delete j[Z];else for(let G in j)delete j[G]},listenerCount:(Z)=>{return j[Z]?.size??0}}};export{FJ as withSnapshots,AJ as withSelection,GJ as withSections,tj as withScrollbar,JJ as withScale,WJ as withPage,MJ as withGrid,DJ as withAsync,mj as vlist,T2 as toggleSelection,Oj as simpleVisibleRange,d2 as selectItems,Bj as selectAll,YJ as rangesEqual,e2 as rafThrottle,nj as needsScaling,Jj as mergeRanges,EJ as isSelected,P2 as isSectionHeader,z2 as isPlaceholderItem,ZJ as isInRange,w2 as getSelectedItems,C2 as getSelectedIds,M2 as getScaleState,ij as getScaleInfo,M2 as getScale,BJ as getRangeCount,oj as getMaxItemsWithoutScaling,Lj as filterPlaceholders,UJ as diffRanges,c2 as deselectItems,qj as createStickyHeader,jj as createSparseStorage,Zj as createSelectionState,g2 as createSectionedHeightFn,Xj as createSectionLayout,k2 as createScrollbar,jJ as createScrollController,$j as createPlaceholderManager,sj as createHeightCache,m2 as createGridRenderer,Yj as createGridLayout,LJ as createEmitter,Qj as createAsyncManager,Uj as clearSelection,KJ as clampScrollPosition,QJ as calculateTotalHeight,b2 as calculateScrollToIndex,n2 as calculateScaledVisibleRange,o2 as calculateScaledScrollToIndex,aj as calculateScaledRenderRange,R2 as calculateScaledItemPosition,zj as calculateRenderRange,x2 as calculateMissingRanges,qJ as calculateItemOffset,rj as calculateIndexFromScrollPosition,XJ as calculateActualHeight,h2 as buildLayoutItems,O2 as MAX_VIRTUAL_HEIGHT};
@@ -73,7 +73,6 @@ export declare const calculateCompressedRenderRange: (visibleRange: Range, overs
73
73
  * @param totalItems - Total number of items
74
74
  * @param containerHeight - Viewport container height
75
75
  * @param compression - Compression state
76
- * @param _rangeStart - (unused, kept for API compatibility)
77
76
  */
78
77
  export declare const calculateCompressedItemPosition: (index: number, scrollTop: number, heightCache: HeightCache, totalItems: number, containerHeight: number, compression: CompressionState, _rangeStart?: number) => number;
79
78
  /**
@@ -1 +1 @@
1
- var F=16000000;var Ny=(j,K,J,y)=>{if(y===0)return 0;if(!j.isVariable())return Math.ceil(J/j.getHeight(0));let N=0,Q=0,q=K;while(q<y&&Q<J)Q+=j.getHeight(q),N++,q++;return Math.max(1,N)},l=(j,K,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.floor(K/j.getHeight(0));let y=0,N=0;for(let Q=J-1;Q>=0;Q--){let q=j.getHeight(Q);if(N+q>K)break;N+=q,y++}return Math.max(y,1)},n=(j,K,J)=>{if(J===0)return 0;let y=Math.floor(K),N=K-y,Q=Math.max(0,Math.min(y,J-1));return j.getOffset(Q)+N*j.getHeight(Q)};var w=(j,K)=>{let J=K.getTotalHeight(),y=J>F,N=y?F:J,Q=J>0?N/J:1;return{isCompressed:y,actualHeight:J,virtualHeight:N,ratio:Q}},c=(j,K,J,y,N,Q)=>{if(y===0||K===0)return Q.start=0,Q.end=-1,Q;if(!N.isCompressed){let X=J.indexAtOffset(j),$=J.indexAtOffset(j+K);if($<y-1)$++;return Q.start=Math.max(0,X),Q.end=Math.min(y-1,Math.max(0,$)),Q}let{virtualHeight:q}=N,B=j/q*y,E=Math.floor(B),L=Ny(J,Math.max(0,E),K,y),Y=Math.ceil(B)+L,G=q-K-j;if(G<=K&&G>=-1){let X=l(J,K,y),$=Math.max(0,y-X),D=Math.max(0,Math.min(1,1-G/K));E=Math.floor(E+($-E)*D),Y=G<=1?y-1:Math.min(y-1,E+L)}return Q.start=Math.max(0,E),Q.end=Math.min(y-1,Math.max(0,Y)),Q},Gy=(j,K,J,y)=>{if(J===0)return y.start=0,y.end=-1,y;return y.start=Math.max(0,j.start-K),y.end=Math.min(J-1,j.end+K),y},r=(j,K,J,y,N,Q,q)=>{if(!Q.isCompressed||y===0)return J.getOffset(j);let{virtualHeight:V}=Q,B=V-N,E=B-K;if(E<=N&&E>=-1){if(K>=B-1){let b=J.getTotalHeight()-J.getOffset(j);return N-b}let W=l(J,N,y),G=Math.max(0,y-W),$=K/V*y,D=Math.max(0,Math.min(1,1-E/N)),z=J.getOffset(j)-J.getOffset(G),M=J.getOffset(j)-n(J,$,y);return M+(z-M)*D}let Y=K/V*y;return J.getOffset(j)-n(J,Y,y)},a=(j,K,J,y,N,Q="start")=>{if(y===0)return 0;let q;if(N.isCompressed){if(Q==="end"&&j===y-1)return Math.max(0,N.virtualHeight-J);q=j/y*N.virtualHeight}else q=K.getOffset(j);let V=K.getHeight(j);switch(Q){case"center":q-=(J-V)/2;break;case"end":q-=J-V;break}let B=N.virtualHeight-J;return Math.max(0,Math.min(q,B))},Uy=(j,K,J,y)=>{if(J===0)return 0;if(y.isCompressed){let N=j/y.virtualHeight;return Math.floor(N*J)}return K.indexAtOffset(j)},Dy=(j,K)=>{if(typeof K==="number")return j*K>F;return K.getTotalHeight()>F},_y=(j)=>{if(j<=0)return 0;return Math.floor(F/j)},Ey=(j,K)=>{let J=w(j,K);if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(J.ratio*100).toFixed(1)}% (${j} items, ${(J.actualHeight/1e6).toFixed(1)}M px → ${(J.virtualHeight/1e6).toFixed(1)}M px virtual)`};var i=(j,K,J={},y="vlist",N=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:V=30,showOnHover:B=!0,hoverZoneWidth:E=16,showOnViewportEnter:L=!0}=J,Y=0,W=0,G=0,X=0,$=!1,D=!1,z=0,M=0,b=0,f=null,T=!1,Z=null,P=null,Qy=N?"width":"height",o=N?"translateX":"translateY",u=N?(_)=>_.clientX:(_)=>_.clientY,Yy=N?"left":"top",U=document.createElement("div"),R=document.createElement("div"),O=B?document.createElement("div"):null,$y=()=>{if(U.className=`${y}-scrollbar`,R.className=`${y}-scrollbar-thumb`,N)U.classList.add(`${y}-scrollbar--horizontal`);if(U.appendChild(R),j.appendChild(U),O){if(O.className=`${y}-scrollbar-hover`,N)O.classList.add(`${y}-scrollbar-hover--horizontal`),O.style.height=`${E}px`;else O.style.width=`${E}px`;j.appendChild(O)}},S=()=>{if(f)clearTimeout(f),f=null},v=()=>{if(!Q)return;S(),f=setTimeout(d,q)},H=()=>{if(Y<=W)return;if(S(),!T)U.classList.add(`${y}-scrollbar--visible`),T=!0;if(Q&&!$&&!D)v()},d=()=>{if($||D)return;U.classList.remove(`${y}-scrollbar--visible`),T=!1},Wy=(_,A)=>{Y=_,W=A;let C=Y>W;if(U.style.display=C?"":"none",!C){d();return}let k=W/Y;G=Math.max(V,k*W),R.style[Qy]=`${G}px`,X=W-G,e(b)},e=(_)=>{if(b=_,Y<=W||X<=0)return;let A=Y-W,k=Math.min(1,Math.max(0,_/A))*X;R.style.transform=`${o}(${k}px)`},t=(_)=>{if(_.target===R)return;let A=U.getBoundingClientRect(),m=u(_)-A[Yy]-G/2,Ky=Math.max(0,Math.min(m,X))/X,s=Y-W,qy=Ky*s;K(qy),H()},yy=(_)=>{_.preventDefault(),_.stopPropagation(),$=!0,z=u(_),M=b,S(),U.classList.add(`${y}-scrollbar--dragging`),document.addEventListener("mousemove",x),document.addEventListener("mouseup",g)},x=(_)=>{if(!$)return;let A=u(_)-z,C=X>0?A/X:0,k=Y-W,m=C*k,h=Math.max(0,Math.min(M+m,k)),s=h/k*X;if(R.style.transform=`${o}(${s}px)`,P=h,Z===null)Z=requestAnimationFrame(()=>{if(P!==null)K(P);Z=null})},g=()=>{if($=!1,Z!==null)cancelAnimationFrame(Z),Z=null;if(P!==null)K(P),P=null;if(U.classList.remove(`${y}-scrollbar--dragging`),Q&&!D)v();document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g)},jy=()=>{if(L)H()},Jy=()=>{if(!$){if(D=!1,Q)v()}},I=()=>{D=!0,S(),H()},p=()=>{if(D=!1,!$&&Q)v()},Xy=()=>{if(S(),Z!==null)cancelAnimationFrame(Z),Z=null;if(U.removeEventListener("click",t),U.removeEventListener("mouseenter",I),U.removeEventListener("mouseleave",p),R.removeEventListener("mousedown",yy),j.removeEventListener("mouseenter",jy),j.removeEventListener("mouseleave",Jy),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g),O){if(O.removeEventListener("mouseenter",I),O.removeEventListener("mouseleave",p),O.parentNode)O.parentNode.removeChild(O)}if(U.parentNode)U.parentNode.removeChild(U)};if($y(),U.addEventListener("click",t),U.addEventListener("mouseenter",I),U.addEventListener("mouseleave",p),R.addEventListener("mousedown",yy),j.addEventListener("mouseenter",jy),j.addEventListener("mouseleave",Jy),O)O.addEventListener("mouseenter",I),O.addEventListener("mouseleave",p);return{show:H,hide:d,updateBounds:Wy,updatePosition:e,isVisible:()=>T,destroy:Xy}};var Ly=()=>{let j=null,K=0,J=!1;return{name:"withScale",priority:20,setup(y){let{dom:N,config:Q}=y,{classPrefix:q,horizontal:V}=Q,B=()=>{let L=y.getVirtualTotal(),Y=w(L,y.heightCache);if(Y.isCompressed&&!J){J=!0,y.scrollController.enableCompression(Y),y.updateContentSize(Y.virtualHeight),y.setScrollFns(()=>K,($)=>{K=$});let W=N.viewport,G=($)=>{$.preventDefault();let D=Y.virtualHeight-y.state.viewportState.containerHeight;K=Math.max(0,Math.min(K+$.deltaY,D)),y.scrollController.scrollTo(K)};if(W.addEventListener("wheel",G,{passive:!1}),y.destroyHandlers.push(()=>{W.removeEventListener("wheel",G)}),!N.viewport.querySelector(`.${q}-scrollbar-track`)){if(j=i(N.viewport,(D)=>y.scrollController.scrollTo(D),{},q,V),!N.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))N.viewport.classList.add(`${q}-viewport--custom-scrollbar`);j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);let $=j;y.afterScroll.push((D,z)=>{if($)$.updatePosition(D),$.show()}),y.resizeHandlers.push((D,z)=>{if($){let M=y.getCachedCompression();$.updateBounds(M.virtualHeight,y.state.viewportState.containerHeight)}})}}else if(!Y.isCompressed&&J)J=!1,y.scrollController.disableCompression(),y.updateContentSize(Y.actualHeight);else if(Y.isCompressed)y.scrollController.updateConfig({compression:Y}),y.updateContentSize(Y.virtualHeight);if(j)j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);y.state.cachedCompression={state:Y,totalItems:L}};y.updateCompressionMode=B;let E=y.getCachedCompression.bind(y);y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;return E()},y.setVisibleRangeFn((L,Y,W,G,X)=>{let $=w(G,W);c(L,Y,W,G,$,X)}),y.setScrollToPosFn((L,Y,W,G,X)=>{let $=w(G,Y);return a(L,Y,W,G,$,X)}),y.setPositionElementFn((L,Y)=>{let W=y.getVirtualTotal(),G=w(W,y.heightCache);if(G.isCompressed){let X=Math.round(r(Y,y.scrollController.getScrollTop(),y.heightCache,W,y.state.viewportState.containerHeight,G)),$=y.config.horizontal;L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}else{let X=Math.round(y.heightCache.getOffset(Y)),$=y.config.horizontal;L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}}),B(),y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null})},destroy(){if(j)j.destroy(),j=null}}};export{Ly as withScale,Dy as needsCompression,_y as getMaxItemsWithoutCompression,w as getCompressionState,Ey as getCompressionInfo,Uy as calculateIndexFromScrollPosition,c as calculateCompressedVisibleRange,a as calculateCompressedScrollToIndex,Gy as calculateCompressedRenderRange,r as calculateCompressedItemPosition,F as MAX_VIRTUAL_HEIGHT};
1
+ var b=16000000;var Ky=(j,Y,K,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil(K/j.getHeight(0));let Q=0,y=0,N=Y;while(N<J&&y<K)y+=j.getHeight(N),Q++,N++;return Math.max(1,Q)},s=(j,Y,K)=>{if(K===0)return 0;if(!j.isVariable())return Math.floor(Y/j.getHeight(0));let J=0,Q=0;for(let y=K-1;y>=0;y--){let N=j.getHeight(y);if(Q+N>Y)break;Q+=N,J++}return Math.max(J,1)},Qy=(j,Y,K)=>{if(K===0)return 0;let J=Math.floor(Y),Q=Y-J,y=Math.max(0,Math.min(J,K-1));return j.getOffset(y)+Q*j.getHeight(y)};var v=(j,Y)=>{let K=Y.getTotalHeight(),J=K>b,Q=J?b:K,y=K>0?Q/K:1;return{isCompressed:J,actualHeight:K,virtualHeight:Q,ratio:y}},c=(j,Y,K,J,Q,y)=>{if(J===0||Y===0)return y.start=0,y.end=-1,y;if(!Q.isCompressed){let W=K.indexAtOffset(j),$=K.indexAtOffset(j+Y);if($<J-1)$++;return y.start=Math.max(0,W),y.end=Math.min(J-1,Math.max(0,$)),y}let{virtualHeight:N}=Q,M=j/N*J,_=Math.floor(M),F=Ky(K,Math.max(0,_),Y,J),V=Math.ceil(M)+F,E=N-Y-j;if(E<=Y&&E>=-1){let W=s(K,Y,J),$=Math.max(0,J-W),q=Math.max(0,Math.min(1,1-E/Y));_=Math.floor(_+($-_)*q),V=E<=1?J-1:Math.min(J-1,_+F)}return y.start=Math.max(0,_),y.end=Math.min(J-1,Math.max(0,V)),y},Gy=(j,Y,K,J)=>{if(K===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Y),J.end=Math.min(K-1,j.end+Y),J},r=(j,Y,K,J,Q,y,N)=>{if(!y.isCompressed||J===0)return K.getOffset(j);let{virtualHeight:k}=y,M=k-Q,_=M-Y;if(_<=Q&&_>=-1){if(Y>=M-1){let X=K.getTotalHeight()-K.getOffset(j);return Q-X}let E=s(K,Q,J),W=Math.max(0,J-E),q=Y/k*J,L=Math.max(0,Math.min(1,1-_/Q)),O=K.getOffset(j)-K.getOffset(W),B=K.getOffset(j)-Qy(K,q,J);return B+(O-B)*L}let F=Y/k,V=K.getTotalHeight(),U=F*V;return K.getOffset(j)-U},l=(j,Y,K,J,Q,y="start")=>{if(J===0)return 0;let N;if(Q.isCompressed){if(y==="end"&&j===J-1)return Math.max(0,Q.virtualHeight-K);N=j/J*Q.virtualHeight}else N=Y.getOffset(j);let k=Y.getHeight(j);switch(y){case"center":N-=(K-k)/2;break;case"end":N-=K-k;break}let M=Q.virtualHeight-K;return Math.max(0,Math.min(N,M))},Uy=(j,Y,K,J)=>{if(K===0)return 0;if(J.isCompressed){let Q=j/J.virtualHeight;return Math.floor(Q*K)}return Y.indexAtOffset(j)},Dy=(j,Y)=>{if(typeof Y==="number")return j*Y>b;return Y.getTotalHeight()>b},_y=(j)=>{if(j<=0)return 0;return Math.floor(b/j)},Ey=(j,Y)=>{let K=v(j,Y);if(!K.isCompressed)return`No compression needed (${j} items, ${(K.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(K.ratio*100).toFixed(1)}% (${j} items, ${(K.actualHeight/1e6).toFixed(1)}M px → ${(K.virtualHeight/1e6).toFixed(1)}M px virtual)`};var a=(j,Y,K={},J="vlist",Q=!1)=>{let{autoHide:y=!0,autoHideDelay:N=1000,minThumbSize:k=30,showOnHover:M=!0,hoverZoneWidth:_=16,showOnViewportEnter:F=!0}=K,V=0,U=0,E=0,W=0,$=!1,q=!1,L=0,O=0,B=0,X=null,A=!1,R=null,w=null,Yy=Q?"width":"height",i=Q?"translateX":"translateY",u=Q?(D)=>D.clientX:(D)=>D.clientY,$y=Q?"left":"top",G=document.createElement("div"),z=document.createElement("div"),Z=M?document.createElement("div"):null,Ny=()=>{if(G.className=`${J}-scrollbar`,z.className=`${J}-scrollbar-thumb`,Q)G.classList.add(`${J}-scrollbar--horizontal`);if(G.appendChild(z),j.appendChild(G),Z){if(Z.className=`${J}-scrollbar-hover`,Q)Z.classList.add(`${J}-scrollbar-hover--horizontal`),Z.style.height=`${_}px`;else Z.style.width=`${_}px`;j.appendChild(Z)}},f=()=>{if(X)clearTimeout(X),X=null},T=()=>{if(!y)return;f(),X=setTimeout(x,N)},H=()=>{if(V<=U)return;if(f(),!A)G.classList.add(`${J}-scrollbar--visible`),A=!0;if(y&&!$&&!q)T()},x=()=>{if($||q)return;G.classList.remove(`${J}-scrollbar--visible`),A=!1},Wy=(D,C)=>{V=D,U=C;let S=V>U;if(G.style.display=S?"":"none",!S){x();return}let P=U/V;E=Math.max(k,P*U),z.style[Yy]=`${E}px`,W=U-E,o(B)},o=(D)=>{if(B=D,V<=U||W<=0)return;let C=V-U,P=Math.min(1,Math.max(0,D/C))*W;z.style.transform=`${i}(${P}px)`},e=(D)=>{if(D.target===z)return;let C=G.getBoundingClientRect(),m=u(D)-C[$y]-E/2,Jy=Math.max(0,Math.min(m,W))/W,n=V-U,qy=Jy*n;Y(qy),H()},t=(D)=>{D.preventDefault(),D.stopPropagation(),$=!0,L=u(D),O=B,f(),G.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",d),document.addEventListener("mouseup",g)},d=(D)=>{if(!$)return;let C=u(D)-L,S=W>0?C/W:0,P=V-U,m=S*P,h=Math.max(0,Math.min(O+m,P)),n=h/P*W;if(z.style.transform=`${i}(${n}px)`,w=h,R===null)R=requestAnimationFrame(()=>{if(w!==null)Y(w);R=null})},g=()=>{if($=!1,R!==null)cancelAnimationFrame(R),R=null;if(w!==null)Y(w),w=null;if(G.classList.remove(`${J}-scrollbar--dragging`),y&&!q)T();document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",g)},yy=()=>{if(F)H()},jy=()=>{if(!$){if(q=!1,y)T()}},p=()=>{q=!0,f(),H()},I=()=>{if(q=!1,!$&&y)T()},Xy=()=>{if(f(),R!==null)cancelAnimationFrame(R),R=null;if(G.removeEventListener("click",e),G.removeEventListener("mouseenter",p),G.removeEventListener("mouseleave",I),z.removeEventListener("mousedown",t),j.removeEventListener("mouseenter",yy),j.removeEventListener("mouseleave",jy),document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",g),Z){if(Z.removeEventListener("mouseenter",p),Z.removeEventListener("mouseleave",I),Z.parentNode)Z.parentNode.removeChild(Z)}if(G.parentNode)G.parentNode.removeChild(G)};if(Ny(),G.addEventListener("click",e),G.addEventListener("mouseenter",p),G.addEventListener("mouseleave",I),z.addEventListener("mousedown",t),j.addEventListener("mouseenter",yy),j.addEventListener("mouseleave",jy),Z)Z.addEventListener("mouseenter",p),Z.addEventListener("mouseleave",I);return{show:H,hide:x,updateBounds:Wy,updatePosition:o,isVisible:()=>A,destroy:Xy}};var Ly=0.65,Oy=0.5,By=()=>{let j=null,Y=0,K=!1,J=0,Q=null;return{name:"withScale",priority:20,setup(y){let{dom:N,config:k}=y,{classPrefix:M,horizontal:_}=k,F=()=>{let W=y.getVirtualTotal(),$=v(W,y.heightCache);if($.isCompressed&&!K){K=!0,y.scrollController.enableCompression($),y.updateContentSize($.virtualHeight),y.setScrollFns(()=>Y,(X)=>{if(Y=X,J=X,Q!==null)cancelAnimationFrame(Q),Q=null});let q=()=>{let X=J-Y;if(Math.abs(X)<Oy)Y=J,Q=null;else Y+=X*Ly,Q=requestAnimationFrame(q);y.scrollController.scrollTo(Y)},L=N.viewport,O=(X)=>{X.preventDefault();let R=y.getCachedCompression().virtualHeight-y.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+X.deltaY,R)),Q===null)Q=requestAnimationFrame(q)};if(L.addEventListener("wheel",O,{passive:!1}),y.destroyHandlers.push(()=>{if(L.removeEventListener("wheel",O),Q!==null)cancelAnimationFrame(Q),Q=null}),!N.viewport.querySelector(`.${M}-scrollbar-track`)){if(j=a(N.viewport,(A)=>y.scrollController.scrollTo(A),{},M,_),!N.viewport.classList.contains(`${M}-viewport--custom-scrollbar`))N.viewport.classList.add(`${M}-viewport--custom-scrollbar`);j.updateBounds($.virtualHeight,y.state.viewportState.containerHeight);let X=j;y.afterScroll.push((A,R)=>{if(X)X.updatePosition(A),X.show()}),y.resizeHandlers.push((A,R)=>{if(X){let w=y.getCachedCompression();X.updateBounds(w.virtualHeight,y.state.viewportState.containerHeight)}})}}else if(!$.isCompressed&&K)K=!1,y.scrollController.disableCompression(),y.updateContentSize($.actualHeight);else if($.isCompressed)y.scrollController.updateConfig({compression:$}),y.updateContentSize($.virtualHeight);if(j)j.updateBounds($.virtualHeight,y.state.viewportState.containerHeight);y.state.cachedCompression={state:$,totalItems:W}};y.updateCompressionMode=F;let V=y.getCachedCompression.bind(y);y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;return V()},y.setVisibleRangeFn((W,$,q,L,O)=>{U=null,E=null;let B=v(L,q);c(W,$,q,L,B,O)}),y.setScrollToPosFn((W,$,q,L,O)=>{let B=v(L,$);return l(W,$,q,L,B,O)});let U=null,E=null;y.setPositionElementFn((W,$)=>{let q=y.getVirtualTotal(),L=v(q,y.heightCache);if(L.isCompressed){let O=y.scrollController.getScrollTop();if(U===null||$<E)E=$,U=Math.round(r($,O,y.heightCache,q,y.state.viewportState.containerHeight,L));let B=U+y.heightCache.getOffset($)-y.heightCache.getOffset(E),X=y.config.horizontal;W.style.transform=X?`translateX(${B}px)`:`translateY(${B}px)`}else{let O=Math.round(y.heightCache.getOffset($)),B=y.config.horizontal;W.style.transform=B?`translateX(${O}px)`:`translateY(${O}px)`}}),F(),y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(Q!==null)cancelAnimationFrame(Q),Q=null})},destroy(){if(j)j.destroy(),j=null;if(Q!==null)cancelAnimationFrame(Q),Q=null}}};export{By as withScale,Dy as needsCompression,_y as getMaxItemsWithoutCompression,v as getCompressionState,Ey as getCompressionInfo,Uy as calculateIndexFromScrollPosition,c as calculateCompressedVisibleRange,l as calculateCompressedScrollToIndex,Gy as calculateCompressedRenderRange,r as calculateCompressedItemPosition,b as MAX_VIRTUAL_HEIGHT};
@@ -1 +1 @@
1
- var{defineProperty:t,getOwnPropertyNames:Gj,getOwnPropertyDescriptor:Lj}=Object,Oj=Object.prototype.hasOwnProperty;var Xj=new WeakMap,Fj=(J)=>{var $=Xj.get(J),j;if($)return $;if($=t({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")Gj(J).map((Z)=>!Oj.call($,Z)&&t($,Z,{get:()=>J[Z],enumerable:!(j=Lj(J,Z))||j.enumerable}));return Xj.set(J,$),$};var bj=(J,$)=>{for(var j in $)t(J,j,{get:$[j],enumerable:!0,configurable:!0,set:(Z)=>$[j]=()=>Z})};var Yj=(J,$)=>()=>(J&&($=J(J=0)),$);var h=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var Dj=(J,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.floor($/J.getHeight(0));let Z=0,Q=0;for(let q=j-1;q>=0;q--){let X=J.getHeight(q);if(Q+X>$)break;Q+=X,Z++}return Math.max(Z,1)},Jj=(J,$,j)=>{if(j===0)return 0;let Z=Math.floor($),Q=$-Z,q=Math.max(0,Math.min(Z,j-1));return J.getOffset(q)+Q*J.getHeight(q)};var $j=16000000;var zj=(J,$)=>{let j=$.getTotalHeight(),Z=j>$j,Q=Z?$j:j,q=j>0?Q/j:1;return{isCompressed:Z,actualHeight:j,virtualHeight:Q,ratio:q}},kj=(J,$,j,Z,Q,q,X)=>{if(!q.isCompressed||Z===0)return j.getOffset(J);let{virtualHeight:M}=q,D=M-Q,W=D-$;if(W<=Q&&W>=-1){if($>=D-1){let R=j.getTotalHeight()-j.getOffset(J);return Q-R}let Y=Dj(j,Q,Z),_=Math.max(0,Z-Y),k=$/M*Z,G=Math.max(0,Math.min(1,1-W/Q)),O=j.getOffset(J)-j.getOffset(_),w=j.getOffset(J)-Jj(j,k,Z);return w+(O-w)*G}let P=$/M*Z;return j.getOffset(J)-Jj(j,P,Z)};var Bj=()=>{};var _j={};bj(_j,{createGridRenderer:()=>vj});var wj=(J=200)=>{let $=[];return{acquire:()=>{let q=$.pop();if(q)return q;let X=document.createElement("div");return X.setAttribute("role","option"),X},release:(q)=>{if($.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"),$.push(q)},clear:()=>{$.length=0}}},vj=(J,$,j,Z,Q,q,X,M)=>{let D=wj(),W=new Map,F=q,P=!1,Y=null,_=0,E="",k=(N)=>{if(Y&&_===N)return Y;return Y=zj(N,j),_=N,Y},G={selected:!1,focused:!1},O=(N,K)=>{return G.selected=N,G.focused=K,G},w=`${Q}-item ${Q}-grid-item`,R=`${Q}-item--selected`,H=`${Q}-item--focused`,T=(N,K)=>{if(typeof K==="string")N.innerHTML=K;else N.replaceChildren(K)},v=(N,K,U)=>{N.classList.toggle(R,K),N.classList.toggle(H,U)},u=(N,K)=>{let U=Z.getRow(N);if(K){let L=K.totalItems,A=k(L);if(A.isCompressed)return kj(U,K.scrollTop,j,L,K.containerHeight,A,K.rangeStart)}return j.getOffset(U)},B=(N,K,U)=>{let L=N.dataset.id?.startsWith("__group_header"),A=L?0:Z.getCol(K),V=L?0:Z.getColumnOffset(A,F),y;if(P){let d=Z.getRow(K),z=0,C=new Set;for(let f=0;f<K;f++){let p=Z.getRow(f);if(p<d&&!C.has(p)){let c=j.getHeight(f);z+=c,C.add(p)}}y=z}else y=u(K,U);N.style.transform=`translate(${Math.round(V)}px, ${Math.round(y)}px)`},b=(N,K)=>{let U=N.dataset.id?.startsWith("__group_header"),L=U?F:Z.getColumnWidth(F),A;if(P||U)A=j.getHeight(K)-Z.gap;else{let V=Z.getRow(K);A=j.getHeight(V)-Z.gap}N.style.width=`${L}px`,N.style.height=`${A}px`},x=(N,K,U,L,A)=>{let V=D.acquire(),y=O(U,L);if(V.className=w,V.dataset.index=String(N),V.dataset.id=String(K.id),V.dataset.row=String(Z.getRow(N)),V.dataset.col=String(Z.getCol(N)),V.ariaSelected=String(U),M)V.id=`${M}-item-${N}`;if(X)E=String(X()),V.setAttribute("aria-setsize",E),V.setAttribute("aria-posinset",String(N+1));b(V,N);let d=$(K,N,y);return T(V,d),v(V,U,L),B(V,N,A),V},g=(N,K,U,L,A)=>{if(K.start===0&&N.length>0)P=h(N[0]);for(let[z,C]of W)if(z<K.start||z>K.end)C.element.remove(),D.release(C.element),W.delete(z);let V=!1;if(X){let z=String(X());V=z!==E,E=z}let y=document.createDocumentFragment(),d=[];for(let z=K.start;z<=K.end;z++){let C=z-K.start,f=N[C];if(!f){console.warn(`⚠️ RENDER: Missing item at index ${z} (range: ${K.start}-${K.end}, items.length: ${N.length})`);continue}let p=U.has(f.id),c=z===L,S=W.get(z);if(S){let s=S.element.dataset.id,Kj=String(f.id);if(s!==Kj){let Pj=O(p,c),Aj=$(f,z,Pj);T(S.element,Aj),S.element.dataset.id=Kj,S.element.dataset.row=String(Z.getRow(z)),S.element.dataset.col=String(Z.getCol(z)),b(S.element,z)}if(v(S.element,p,c),S.element.ariaSelected=String(p),B(S.element,z,A),V)S.element.setAttribute("aria-setsize",E)}else{let s=x(z,f,p,c,A);y.appendChild(s),d.push({index:z,element:s})}}if(d.length>0){J.appendChild(y);for(let{index:z,element:C}of d)W.set(z,{index:z,element:C})}},m=(N)=>{for(let[K,U]of W)B(U.element,K,N)},o=(N,K,U,L)=>{let A=W.get(N);if(A){let V=O(U,L),y=$(K,N,V);T(A.element,y),v(A.element,U,L),A.element.dataset.id=String(K.id),A.element.ariaSelected=String(U),b(A.element,N)}},i=(N,K,U)=>{let L=W.get(N);if(L)v(L.element,K,U)},r=(N)=>{return W.get(N)?.element},Vj=(N)=>{if(Math.abs(N-F)<1)return;F=N;for(let[K,U]of W)b(U.element,K),B(U.element,K)},Nj=()=>{for(let[,N]of W)N.element.remove(),D.release(N.element);W.clear()};return{render:g,updatePositions:m,updateItem:o,updateItemClasses:i,getElement:r,updateContainerWidth:Vj,clear:Nj,destroy:()=>{Nj(),D.clear()}}};var Ej=Yj(()=>{Bj()});var e=(J,$)=>{let j=0,Z=J.length-1;while(j<Z){let Q=j+Z+1>>>1;if(J[Q].headerLayoutIndex<=$)j=Q;else Z=Q-1}return j},Wj=(J,$)=>{let j=0,Z=J.length-1;while(j<Z){let Q=j+Z+1>>>1;if(J[Q].firstDataIndex<=$)j=Q;else Z=Q-1}return j},Mj=(J,$)=>{if(J===0)return[];let j=[],Z=$(0),Q=0,q=0;for(let X=1;X<J;X++){let M=$(X);if(M!==Z){let D=X-Q;j.push({key:Z,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:Q,count:D}),q=q+1+D,Z=M,Q=X}}return j.push({key:Z,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:Q,count:J-Q}),j},a=(J,$)=>{if(J.length===0||$.length===0)return[];let j=J.length+$.length,Z=Array(j),Q=0;for(let q of $){Z[Q]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},Q++;for(let X=0;X<q.count;X++)Z[Q]=J[q.firstDataIndex+X],Q++}return Z},n=(J,$)=>{let j=typeof $==="number"?(Z)=>$:$;return(Z)=>{let Q=J.getEntry(Z);if(Q.type==="header")return J.getHeaderHeight(Q.group.groupIndex);return j(Q.dataIndex)}},jj=(J,$)=>{let j=Mj(J,$.getGroupForIndex),Z=J+j.length,Q=$.headerHeight;return{get totalEntries(){return Z},get groupCount(){return j.length},get groups(){return j},getEntry:(Y)=>{if(j.length===0)return{type:"item",dataIndex:Y,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let _=e(j,Y),E=j[_];if(Y===E.headerLayoutIndex)return{type:"header",group:E};let k=Y-E.headerLayoutIndex-1;return{type:"item",dataIndex:E.firstDataIndex+k,group:E}},layoutToDataIndex:(Y)=>{if(j.length===0)return Y;let _=e(j,Y),E=j[_];if(Y===E.headerLayoutIndex)return-1;let k=Y-E.headerLayoutIndex-1;return E.firstDataIndex+k},dataToLayoutIndex:(Y)=>{if(j.length===0)return Y;let _=Wj(j,Y),E=j[_],k=Y-E.firstDataIndex;return E.headerLayoutIndex+1+k},getGroupAtLayoutIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let _=e(j,Y);return j[_]},getGroupAtDataIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let _=Wj(j,Y);return j[_]},getHeaderHeight:typeof Q==="number"?(Y)=>Q:(Y)=>{let _=j[Y];if(!_)return 0;return Q(_.key,Y)},rebuild:(Y)=>{j=Mj(Y,$.getGroupForIndex),Z=Y+j.length}}};var qj=(J,$,j,Z,Q)=>{let q=document.createElement("div");q.className=`${Q}-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 X=-1,M=!1,D=0,W=(k)=>{if(k===X)return;X=k;let G=$.groups;if(k<0||k>=G.length){q.textContent="";return}let O=G[k],w=Z.headerTemplate(O.key,O.groupIndex),R=$.getHeaderHeight(k);if(q.style.height=`${R}px`,typeof w==="string")q.innerHTML=w;else q.replaceChildren(w)},F=(k)=>{let G=$.groups;if(G.length===0){Y();return}let O=0;for(let v=G.length-1;v>=0;v--)if(j.getOffset(G[v].headerLayoutIndex)<=k){O=v;break}let w=j.getOffset(G[0].headerLayoutIndex);if(k<w){Y();return}if(!M)P();W(O);let R=$.getHeaderHeight(O),H=0,T=O+1;if(T<G.length){let u=j.getOffset(G[T].headerLayoutIndex)-k;if(u<R)H=u-R}if(H!==D)D=H,q.style.transform=H===0?"":`translateY(${Math.round(H)}px)`},P=()=>{if(M)return;M=!0,q.style.display=""},Y=()=>{if(!M)return;M=!1,q.style.display="none",X=-1,D=0,q.style.transform=""},_=()=>{let k=X;if(X=-1,k>=0)W(k)},E=()=>{q.remove(),X=-1,M=!1};return q.style.display="none",{update:F,refresh:_,show:P,hide:Y,destroy:E}};var Uj=(J,$,j,Z,Q,q)=>{if(Z===0)return 0;let X=Math.max(0,Math.min(J,Z-1)),M=$.getOffset(X),D=$.getHeight(X),W=$.getTotalHeight(),F=Math.max(0,W-j),P;switch(q){case"center":P=M-j/2+D/2;break;case"end":P=M-j+D;break;case"start":default:P=M;break}return Math.max(0,Math.min(P,F))};var Zj=(J,$,j,Z,Q="start",q,X=Uj)=>{return X(J,$,j,Z,q,Q)};var Rj=(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 $=null,j=null,Z=[],Q=[];return{name:"withSections",priority:10,setup(q){let{dom:X,config:M,rawConfig:D}=q,{classPrefix:W}=M;if(M.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let P=D.item.height;Z=D.items?[...D.items]:[];let Y=Z.length,_={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};$=jj(Y,_),Q=a(Z,$.groups);let E=n($,P);q.setHeightConfig(E),q.rebuildHeightCache(Q.length),q.dataManager.setItems(Q,0,Q.length);let k=D.item.template,{headerTemplate:G}=J,O=(B,b,x)=>{if(h(B))return G(B.groupKey,B.groupIndex);return k(B,b,x)},w=q.methods.get("_getGridLayout"),R=q.methods.get("_replaceGridRenderer"),H=q.methods.get("_updateGridLayoutForGroups");if(w&&R){if(H)H((g)=>{let m=Q[g];return!!(m&&h(m))});let{createGridRenderer:B}=(Ej(),Fj(_j)),b=w(),x=B(X.items,O,q.heightCache,b,W,q.getContainerWidth(),()=>q.dataManager.getTotal(),M.ariaIdPrefix);R(x)}else q.replaceTemplate(O);if(X.root.classList.add(`${W}--grouped`),J.sticky!==!1){j=qj(X.root,$,q.heightCache,{..._,sticky:_.sticky??!1},W);let B=j;q.afterScroll.push((b,x)=>{B.update(b)}),j.update(q.scrollController.getScrollTop())}let T=()=>{if(!$)return;$.rebuild(Z.length),Q=a(Z,$.groups);let B=n($,P);if(q.setHeightConfig(B),q.rebuildHeightCache(Q.length),q.dataManager.setItems(Q,0,Q.length),j)j.refresh()};q.methods.set("setItems",(B)=>{Z=[...B],T()}),q.methods.set("appendItems",(B)=>{Z=[...Z,...B],T()}),q.methods.set("prependItems",(B)=>{Z=[...B,...Z],T()}),q.methods.set("removeItem",(B)=>{Z=Z.filter((b)=>b.id!==B),T()});let{animateScroll:v,cancelScroll:u}=Sj(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(B,b)=>{let x=$.dataToLayoutIndex(B),{align:g,behavior:m,duration:o}=Hj(b),i=q.dataManager.getTotal(),r=Zj(x,q.heightCache,q.state.viewportState.containerHeight,i,g,q.getCachedCompression());if(m==="smooth")v(q.scrollController.getScrollTop(),r,o);else u(),q.scrollController.scrollTo(r)}),q.methods.set("_getItems",()=>Z),q.methods.set("_getTotal",()=>Z.length),q.destroyHandlers.push(()=>{if(I!==null)cancelAnimationFrame(I),I=null;if(j)j.destroy(),j=null;X.root.classList.remove(`${W}--grouped`)})},destroy(){if(j)j.destroy(),j=null}}},Qj=300,Tj=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,I=null,Sj=(J,$)=>{let j=()=>{if(I!==null)cancelAnimationFrame(I),I=null};return{animateScroll:(Q,q,X)=>{if(j(),Math.abs(q-Q)<1){J.scrollTo(q);return}let M=performance.now(),D=(W)=>{let F=W-M,P=Math.min(F/X,1),Y=Q+(q-Q)*Tj(P);if(J.scrollTo(Y),$(),P<1)I=requestAnimationFrame(D);else I=null};I=requestAnimationFrame(D)},cancelScroll:j}},Hj=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:Qj};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??Qj};return{align:"start",behavior:"auto",duration:Qj}};export{Rj as withSections,h as isSectionHeader,h as isGroupHeader,qj as createStickyHeader,n as createGroupedHeightFn,jj as createGroupLayout,a as buildLayoutItems};
1
+ var{defineProperty:t,getOwnPropertyNames:Gj,getOwnPropertyDescriptor:Lj}=Object,Oj=Object.prototype.hasOwnProperty;var Kj=new WeakMap,Fj=(J)=>{var $=Kj.get(J),j;if($)return $;if($=t({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")Gj(J).map((Z)=>!Oj.call($,Z)&&t($,Z,{get:()=>J[Z],enumerable:!(j=Lj(J,Z))||j.enumerable}));return Kj.set(J,$),$};var bj=(J,$)=>{for(var j in $)t(J,j,{get:$[j],enumerable:!0,configurable:!0,set:(Z)=>$[j]=()=>Z})};var Xj=(J,$)=>()=>(J&&($=J(J=0)),$);var h=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var Mj=(J,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.floor($/J.getHeight(0));let Z=0,Q=0;for(let q=j-1;q>=0;q--){let X=J.getHeight(q);if(Q+X>$)break;Q+=X,Z++}return Math.max(Z,1)},Dj=(J,$,j)=>{if(j===0)return 0;let Z=Math.floor($),Q=$-Z,q=Math.max(0,Math.min(Z,j-1));return J.getOffset(q)+Q*J.getHeight(q)};var Zj=16000000;var zj=(J,$)=>{let j=$.getTotalHeight(),Z=j>Zj,Q=Z?Zj:j,q=j>0?Q/j:1;return{isCompressed:Z,actualHeight:j,virtualHeight:Q,ratio:q}},kj=(J,$,j,Z,Q,q,X)=>{if(!q.isCompressed||Z===0)return j.getOffset(J);let{virtualHeight:M}=q,D=M-Q,W=D-$;if(W<=Q&&W>=-1){if($>=D-1){let R=j.getTotalHeight()-j.getOffset(J);return Q-R}let V=Mj(j,Q,Z),B=Math.max(0,Z-V),G=$/M*Z,O=Math.max(0,Math.min(1,1-W/Q)),w=j.getOffset(J)-j.getOffset(B),v=j.getOffset(J)-Dj(j,G,Z);return v+(w-v)*O}let F=$/M,P=j.getTotalHeight(),Y=F*P;return j.getOffset(J)-Y};var Bj=()=>{};var _j={};bj(_j,{createGridRenderer:()=>vj});var wj=(J=200)=>{let $=[];return{acquire:()=>{let q=$.pop();if(q)return q;let X=document.createElement("div");return X.setAttribute("role","option"),X},release:(q)=>{if($.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"),$.push(q)},clear:()=>{$.length=0}}},vj=(J,$,j,Z,Q,q,X,M)=>{let D=wj(),W=new Map,F=q,P=!1,Y=null,V=0,B="",_=(N)=>{if(Y&&V===N)return Y;return Y=zj(N,j),V=N,Y},G={selected:!1,focused:!1},O=(N,K)=>{return G.selected=N,G.focused=K,G},w=`${Q}-item ${Q}-grid-item`,v=`${Q}-item--selected`,R=`${Q}-item--focused`,S=(N,K)=>{if(typeof K==="string")N.innerHTML=K;else N.replaceChildren(K)},T=(N,K,U)=>{N.classList.toggle(v,K),N.classList.toggle(R,U)},u=(N,K)=>{let U=Z.getRow(N);if(K){let L=K.totalItems,A=_(L);if(A.isCompressed)return kj(U,K.scrollTop,j,L,K.containerHeight,A,K.rangeStart)}return j.getOffset(U)},k=(N,K,U)=>{let L=N.dataset.id?.startsWith("__group_header"),A=L?0:Z.getCol(K),E=L?0:Z.getColumnOffset(A,F),y;if(P){let d=Z.getRow(K),z=0,C=new Set;for(let f=0;f<K;f++){let p=Z.getRow(f);if(p<d&&!C.has(p)){let c=j.getHeight(f);z+=c,C.add(p)}}y=z}else y=u(K,U);N.style.transform=`translate(${Math.round(E)}px, ${Math.round(y)}px)`},b=(N,K)=>{let U=N.dataset.id?.startsWith("__group_header"),L=U?F:Z.getColumnWidth(F),A;if(P||U)A=j.getHeight(K)-Z.gap;else{let E=Z.getRow(K);A=j.getHeight(E)-Z.gap}N.style.width=`${L}px`,N.style.height=`${A}px`},x=(N,K,U,L,A)=>{let E=D.acquire(),y=O(U,L);if(E.className=w,E.dataset.index=String(N),E.dataset.id=String(K.id),E.dataset.row=String(Z.getRow(N)),E.dataset.col=String(Z.getCol(N)),E.ariaSelected=String(U),M)E.id=`${M}-item-${N}`;if(X)B=String(X()),E.setAttribute("aria-setsize",B),E.setAttribute("aria-posinset",String(N+1));b(E,N);let d=$(K,N,y);return S(E,d),T(E,U,L),k(E,N,A),E},g=(N,K,U,L,A)=>{if(K.start===0&&N.length>0)P=h(N[0]);for(let[z,C]of W)if(z<K.start||z>K.end)C.element.remove(),D.release(C.element),W.delete(z);let E=!1;if(X){let z=String(X());E=z!==B,B=z}let y=document.createDocumentFragment(),d=[];for(let z=K.start;z<=K.end;z++){let C=z-K.start,f=N[C];if(!f){console.warn(`⚠️ RENDER: Missing item at index ${z} (range: ${K.start}-${K.end}, items.length: ${N.length})`);continue}let p=U.has(f.id),c=z===L,H=W.get(z);if(H){let s=H.element.dataset.id,Nj=String(f.id);if(s!==Nj){let Pj=O(p,c),Aj=$(f,z,Pj);S(H.element,Aj),H.element.dataset.id=Nj,H.element.dataset.row=String(Z.getRow(z)),H.element.dataset.col=String(Z.getCol(z)),b(H.element,z)}if(T(H.element,p,c),H.element.ariaSelected=String(p),k(H.element,z,A),E)H.element.setAttribute("aria-setsize",B)}else{let s=x(z,f,p,c,A);y.appendChild(s),d.push({index:z,element:s})}}if(d.length>0){J.appendChild(y);for(let{index:z,element:C}of d)W.set(z,{index:z,element:C})}},m=(N)=>{for(let[K,U]of W)k(U.element,K,N)},o=(N,K,U,L)=>{let A=W.get(N);if(A){let E=O(U,L),y=$(K,N,E);S(A.element,y),T(A.element,U,L),A.element.dataset.id=String(K.id),A.element.ariaSelected=String(U),b(A.element,N)}},i=(N,K,U)=>{let L=W.get(N);if(L)T(L.element,K,U)},r=(N)=>{return W.get(N)?.element},Ej=(N)=>{if(Math.abs(N-F)<1)return;F=N;for(let[K,U]of W)b(U.element,K),k(U.element,K)},Qj=()=>{for(let[,N]of W)N.element.remove(),D.release(N.element);W.clear()};return{render:g,updatePositions:m,updateItem:o,updateItemClasses:i,getElement:r,updateContainerWidth:Ej,clear:Qj,destroy:()=>{Qj(),D.clear()}}};var Vj=Xj(()=>{Bj()});var e=(J,$)=>{let j=0,Z=J.length-1;while(j<Z){let Q=j+Z+1>>>1;if(J[Q].headerLayoutIndex<=$)j=Q;else Z=Q-1}return j},Yj=(J,$)=>{let j=0,Z=J.length-1;while(j<Z){let Q=j+Z+1>>>1;if(J[Q].firstDataIndex<=$)j=Q;else Z=Q-1}return j},Wj=(J,$)=>{if(J===0)return[];let j=[],Z=$(0),Q=0,q=0;for(let X=1;X<J;X++){let M=$(X);if(M!==Z){let D=X-Q;j.push({key:Z,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:Q,count:D}),q=q+1+D,Z=M,Q=X}}return j.push({key:Z,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:Q,count:J-Q}),j},a=(J,$)=>{if(J.length===0||$.length===0)return[];let j=J.length+$.length,Z=Array(j),Q=0;for(let q of $){Z[Q]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},Q++;for(let X=0;X<q.count;X++)Z[Q]=J[q.firstDataIndex+X],Q++}return Z},n=(J,$)=>{let j=typeof $==="number"?(Z)=>$:$;return(Z)=>{let Q=J.getEntry(Z);if(Q.type==="header")return J.getHeaderHeight(Q.group.groupIndex);return j(Q.dataIndex)}},jj=(J,$)=>{let j=Wj(J,$.getGroupForIndex),Z=J+j.length,Q=$.headerHeight;return{get totalEntries(){return Z},get groupCount(){return j.length},get groups(){return j},getEntry:(Y)=>{if(j.length===0)return{type:"item",dataIndex:Y,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let V=e(j,Y),B=j[V];if(Y===B.headerLayoutIndex)return{type:"header",group:B};let _=Y-B.headerLayoutIndex-1;return{type:"item",dataIndex:B.firstDataIndex+_,group:B}},layoutToDataIndex:(Y)=>{if(j.length===0)return Y;let V=e(j,Y),B=j[V];if(Y===B.headerLayoutIndex)return-1;let _=Y-B.headerLayoutIndex-1;return B.firstDataIndex+_},dataToLayoutIndex:(Y)=>{if(j.length===0)return Y;let V=Yj(j,Y),B=j[V],_=Y-B.firstDataIndex;return B.headerLayoutIndex+1+_},getGroupAtLayoutIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let V=e(j,Y);return j[V]},getGroupAtDataIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let V=Yj(j,Y);return j[V]},getHeaderHeight:typeof Q==="number"?(Y)=>Q:(Y)=>{let V=j[Y];if(!V)return 0;return Q(V.key,Y)},rebuild:(Y)=>{j=Wj(Y,$.getGroupForIndex),Z=Y+j.length}}};var qj=(J,$,j,Z,Q)=>{let q=document.createElement("div");q.className=`${Q}-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 X=-1,M=!1,D=0,W=(_)=>{if(_===X)return;X=_;let G=$.groups;if(_<0||_>=G.length){q.textContent="";return}let O=G[_],w=Z.headerTemplate(O.key,O.groupIndex),v=$.getHeaderHeight(_);if(q.style.height=`${v}px`,typeof w==="string")q.innerHTML=w;else q.replaceChildren(w)},F=(_)=>{let G=$.groups;if(G.length===0){Y();return}let O=0;for(let T=G.length-1;T>=0;T--)if(j.getOffset(G[T].headerLayoutIndex)<=_){O=T;break}let w=j.getOffset(G[0].headerLayoutIndex);if(_<w){Y();return}if(!M)P();W(O);let v=$.getHeaderHeight(O),R=0,S=O+1;if(S<G.length){let u=j.getOffset(G[S].headerLayoutIndex)-_;if(u<v)R=u-v}if(R!==D)D=R,q.style.transform=R===0?"":`translateY(${Math.round(R)}px)`},P=()=>{if(M)return;M=!0,q.style.display=""},Y=()=>{if(!M)return;M=!1,q.style.display="none",X=-1,D=0,q.style.transform=""},V=()=>{let _=X;if(X=-1,_>=0)W(_)},B=()=>{q.remove(),X=-1,M=!1};return q.style.display="none",{update:F,refresh:V,show:P,hide:Y,destroy:B}};var Uj=(J,$,j,Z,Q,q)=>{if(Z===0)return 0;let X=Math.max(0,Math.min(J,Z-1)),M=$.getOffset(X),D=$.getHeight(X),W=$.getTotalHeight(),F=Math.max(0,W-j),P;switch(q){case"center":P=M-j/2+D/2;break;case"end":P=M-j+D;break;case"start":default:P=M;break}return Math.max(0,Math.min(P,F))};var Jj=(J,$,j,Z,Q="start",q,X=Uj)=>{return X(J,$,j,Z,q,Q)};var Rj=(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 $=null,j=null,Z=[],Q=[];return{name:"withSections",priority:10,setup(q){let{dom:X,config:M,rawConfig:D}=q,{classPrefix:W}=M;if(M.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let P=D.item.height;Z=D.items?[...D.items]:[];let Y=Z.length,V={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};$=jj(Y,V),Q=a(Z,$.groups);let B=n($,P);q.setHeightConfig(B),q.rebuildHeightCache(Q.length),q.dataManager.setItems(Q,0,Q.length);let _=D.item.template,{headerTemplate:G}=J,O=(k,b,x)=>{if(h(k))return G(k.groupKey,k.groupIndex);return _(k,b,x)},w=q.methods.get("_getGridLayout"),v=q.methods.get("_replaceGridRenderer"),R=q.methods.get("_updateGridLayoutForGroups");if(w&&v){if(R)R((g)=>{let m=Q[g];return!!(m&&h(m))});let{createGridRenderer:k}=(Vj(),Fj(_j)),b=w(),x=k(X.items,O,q.heightCache,b,W,q.getContainerWidth(),()=>q.dataManager.getTotal(),M.ariaIdPrefix);v(x)}else q.replaceTemplate(O);if(X.root.classList.add(`${W}--grouped`),J.sticky!==!1){j=qj(X.root,$,q.heightCache,{...V,sticky:V.sticky??!1},W);let k=j;q.afterScroll.push((b,x)=>{k.update(b)}),j.update(q.scrollController.getScrollTop())}let S=()=>{if(!$)return;$.rebuild(Z.length),Q=a(Z,$.groups);let k=n($,P);if(q.setHeightConfig(k),q.rebuildHeightCache(Q.length),q.dataManager.setItems(Q,0,Q.length),j)j.refresh()};q.methods.set("setItems",(k)=>{Z=[...k],S()}),q.methods.set("appendItems",(k)=>{Z=[...Z,...k],S()}),q.methods.set("prependItems",(k)=>{Z=[...k,...Z],S()}),q.methods.set("removeItem",(k)=>{Z=Z.filter((b)=>b.id!==k),S()});let{animateScroll:T,cancelScroll:u}=Sj(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(k,b)=>{let x=$.dataToLayoutIndex(k),{align:g,behavior:m,duration:o}=Hj(b),i=q.dataManager.getTotal(),r=Jj(x,q.heightCache,q.state.viewportState.containerHeight,i,g,q.getCachedCompression());if(m==="smooth")T(q.scrollController.getScrollTop(),r,o);else u(),q.scrollController.scrollTo(r)}),q.methods.set("_getItems",()=>Z),q.methods.set("_getTotal",()=>Z.length),q.destroyHandlers.push(()=>{if(I!==null)cancelAnimationFrame(I),I=null;if(j)j.destroy(),j=null;X.root.classList.remove(`${W}--grouped`)})},destroy(){if(j)j.destroy(),j=null}}},$j=300,Tj=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,I=null,Sj=(J,$)=>{let j=()=>{if(I!==null)cancelAnimationFrame(I),I=null};return{animateScroll:(Q,q,X)=>{if(j(),Math.abs(q-Q)<1){J.scrollTo(q);return}let M=performance.now(),D=(W)=>{let F=W-M,P=Math.min(F/X,1),Y=Q+(q-Q)*Tj(P);if(J.scrollTo(Y),$(),P<1)I=requestAnimationFrame(D);else I=null};I=requestAnimationFrame(D)},cancelScroll:j}},Hj=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:$j};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??$j};return{align:"start",behavior:"auto",duration:$j}};export{Rj as withSections,h as isSectionHeader,h as isGroupHeader,qj as createStickyHeader,n as createGroupedHeightFn,jj as createGroupLayout,a as buildLayoutItems};
package/dist/vlist.css CHANGED
@@ -1 +1 @@
1
- :root{--vlist-bg:#ffffff;--vlist-bg-hover:#f9fafb;--vlist-bg-selected:#eff6ff;--vlist-bg-selected-hover:#dbeafe;--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-scrollbar-thumb:#d1d5db;--vlist-scrollbar-thumb-hover:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-track-bg:transparent;--vlist-scrollbar-custom-thumb-bg:rgba(0,0,0,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(0,0,0,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out}@media (prefers-color-scheme:dark){:root{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}}.dark{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}.vlist:focus{outline:none}.vlist:focus-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:2px}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--vlist-scrollbar-thumb) transparent}.vlist-viewport::-webkit-scrollbar{width:6px;height:6px}.vlist-viewport::-webkit-scrollbar-track{background:transparent}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb);border-radius:3px}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover)}.vlist-content{position:relative;width:100%}.vlist-items{position:relative;width:100%;contain:layout style}.vlist-item{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);border-bottom:1px solid var(--vlist-border);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box}.vlist--scrolling .vlist-item{transition:none}.vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:0;right:0;width:var(--vlist-scrollbar-width);height:100%;background-color:var(--vlist-scrollbar-track-bg);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar-hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar-hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar-thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-scrollbar-custom-thumb-bg);border-radius:var(--vlist-scrollbar-custom-thumb-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar-thumb{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist--grouped .vlist-item[data-id^="__group_header_"]{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);z-index:1}.vlist--grouped .vlist-item[data-id^="__group_header_"]:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);contain:content}@media (prefers-color-scheme:dark){:root{--vlist-group-header-bg:#1e2433}}.dark{--vlist-group-header-bg:#1e2433}.vlist--scrolling .vlist-sticky-header{transition:none}.vlist--grid .vlist-items{contain:layout style}.vlist-grid-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--grid .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-grid-item{transition:none}.vlist-grid-item:hover{background-color:var(--vlist-bg-hover)}.vlist-grid-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-grid-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-grid-item.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-items{height:100%;width:auto}.vlist--horizontal .vlist-item{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none;border-right:1px solid var(--vlist-border)}.vlist-scrollbar--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--vlist-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar-thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}
1
+ @keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}:root{--vlist-bg:#ffffff;--vlist-bg-hover:#f9fafb;--vlist-bg-selected:#eff6ff;--vlist-bg-selected-hover:#dbeafe;--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-scrollbar-thumb:#d1d5db;--vlist-scrollbar-thumb-hover:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-track-bg:transparent;--vlist-scrollbar-custom-thumb-bg:rgba(0,0,0,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(0,0,0,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out}@media (prefers-color-scheme:dark){:root{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}}.dark{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}.vlist:focus{outline:none}.vlist:focus-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:2px}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--vlist-scrollbar-thumb) transparent}.vlist-viewport::-webkit-scrollbar{width:6px;height:6px}.vlist-viewport::-webkit-scrollbar-track{background:transparent}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb);border-radius:3px}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover)}.vlist-content{position:relative;width:100%}.vlist-items{position:relative;width:100%;contain:layout style}.vlist-item{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);border-bottom:1px solid var(--vlist-border);background-color:var(--vlist-bg);cursor:pointer;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item{transition:none}.vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:animation:fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:0;right:0;width:var(--vlist-scrollbar-width);height:100%;background-color:var(--vlist-scrollbar-track-bg);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar-hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar-hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar-thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-scrollbar-custom-thumb-bg);border-radius:var(--vlist-scrollbar-custom-thumb-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar-thumb{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist--grouped .vlist-item[data-id^="__group_header_"]{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);z-index:1}.vlist--grouped .vlist-item[data-id^="__group_header_"]:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);contain:content}@media (prefers-color-scheme:dark){:root{--vlist-group-header-bg:#1e2433}}.dark{--vlist-group-header-bg:#1e2433}.vlist--scrolling .vlist-sticky-header{transition:none}.vlist--grid .vlist-items{contain:layout style}.vlist-grid-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--grid .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-grid-item{transition:none}.vlist-grid-item:hover{background-color:var(--vlist-bg-hover)}.vlist-grid-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-grid-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-grid-item.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-items{height:100%;width:auto}.vlist--horizontal .vlist-item{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none;border-right:1px solid var(--vlist-border)}.vlist-scrollbar--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--vlist-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar-thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",
@@ -34,11 +34,6 @@
34
34
  "import": "./dist/index.js",
35
35
  "default": "./dist/index.js"
36
36
  },
37
- "./vlist": {
38
- "types": "./dist/vlist.d.ts",
39
- "import": "./dist/vlist.js",
40
- "default": "./dist/vlist.js"
41
- },
42
37
  "./styles": "./dist/vlist.css",
43
38
  "./styles/extras": "./dist/vlist-extras.css",
44
39
  "./package.json": "./package.json"
package/dist/vlist.js DELETED
@@ -1 +0,0 @@
1
- var{defineProperty:sj,getOwnPropertyNames:A2,getOwnPropertyDescriptor:E2}=Object,F2=Object.prototype.hasOwnProperty;var GJ=new WeakMap,L2=(J)=>{var X=GJ.get(J),Q;if(X)return X;if(X=sj({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")A2(J).map((j)=>!F2.call(X,j)&&sj(X,j,{get:()=>J[j],enumerable:!(Q=E2(J,j))||Q.enumerable}));return GJ.set(J,X),X};var O2=(J,X)=>{for(var Q in X)sj(J,Q,{get:X[Q],enumerable:!0,configurable:!0,set:(j)=>X[Q]=()=>j})};var MJ=(J,X)=>()=>(J&&(X=J(J=0)),X);var nj=200,wj=50,FJ=15,LJ=2,OJ=50,oj=16000000;var zJ=(J,X,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getHeight(0));let Y=0,$=0,q=X;while(q<j&&$<Q)$+=J.getHeight(q),Y++,q++;return Math.max(1,Y)},ij=(J,X,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(X/J.getHeight(0));let j=0,Y=0;for(let $=Q-1;$>=0;$--){let q=J.getHeight($);if(Y+q>X)break;Y+=q,j++}return Math.max(j,1)},tj=(J,X,Q)=>{if(Q===0)return 0;let j=Math.floor(X),Y=X-j,$=Math.max(0,Math.min(j,Q-1));return J.getOffset($)+Y*J.getHeight($)};var Lj=(J,X)=>{let Q=X.getTotalHeight(),j=Q>oj,Y=j?oj:Q,$=Q>0?Y/Q:1;return{isCompressed:j,actualHeight:Q,virtualHeight:Y,ratio:$}},PJ=(J,X,Q,j,Y,$)=>{if(j===0||X===0)return $.start=0,$.end=-1,$;if(!Y.isCompressed){let N=Q.indexAtOffset(J),V=Q.indexAtOffset(J+X);if(V<j-1)V++;return $.start=Math.max(0,N),$.end=Math.min(j-1,Math.max(0,V)),$}let{virtualHeight:q}=Y,M=J/q*j,_=Math.floor(M),B=zJ(Q,Math.max(0,_),X,j),A=Math.ceil(M)+B,b=q-X-J;if(b<=X&&b>=-1){let N=ij(Q,X,j),V=Math.max(0,j-N),E=Math.max(0,Math.min(1,1-b/X));_=Math.floor(_+(V-_)*E),A=b<=1?j-1:Math.min(j-1,_+B)}return $.start=Math.max(0,_),$.end=Math.min(j-1,Math.max(0,A)),$},Ij=(J,X,Q,j,Y,$,q)=>{if(!$.isCompressed||j===0)return Q.getOffset(J);let{virtualHeight:Z}=$,M=Z-Y,_=M-X;if(_<=Y&&_>=-1){if(X>=M-1){let k=Q.getTotalHeight()-Q.getOffset(J);return Y-k}let L=ij(Q,Y,j),b=Math.max(0,j-L),V=X/Z*j,E=Math.max(0,Math.min(1,1-_/Y)),F=Q.getOffset(J)-Q.getOffset(b),O=Q.getOffset(J)-tj(Q,V,j);return O+(F-O)*E}let A=X/Z*j;return Q.getOffset(J)-tj(Q,A,j)},bJ=(J,X,Q,j,Y,$="start")=>{if(j===0)return 0;let q;if(Y.isCompressed){if($==="end"&&J===j-1)return Math.max(0,Y.virtualHeight-Q);q=J/j*Y.virtualHeight}else q=X.getOffset(J);let Z=X.getHeight(J);switch($){case"center":q-=(Q-Z)/2;break;case"end":q-=Q-Z;break}let M=Y.virtualHeight-Q;return Math.max(0,Math.min(q,M))};var ej=()=>{};var Tj=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var kJ={};O2(kJ,{createGridRenderer:()=>jJ});var p2=(J=200)=>{let X=[];return{acquire:()=>{let $=X.pop();if($)return $;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:($)=>{if(X.length<J)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),$.removeAttribute("data-row"),$.removeAttribute("data-col"),X.push($)},clear:()=>{X.length=0}}},jJ=(J,X,Q,j,Y,$,q,Z)=>{let M=p2(),_=new Map,B=$,A=!1,L=null,b=0,N="",V=(z)=>{if(L&&b===z)return L;return L=Lj(z,Q),b=z,L},E={selected:!1,focused:!1},F=(z,T)=>{return E.selected=z,E.focused=T,E},O=`${Y}-item ${Y}-grid-item`,k=`${Y}-item--selected`,G=`${Y}-item--focused`,w=(z,T)=>{if(typeof T==="string")z.innerHTML=T;else z.replaceChildren(T)},U=(z,T,u)=>{z.classList.toggle(k,T),z.classList.toggle(G,u)},C=(z,T)=>{let u=j.getRow(z);if(T){let h=T.totalItems,c=V(h);if(c.isCompressed)return Ij(u,T.scrollTop,Q,h,T.containerHeight,c,T.rangeStart)}return Q.getOffset(u)},W=(z,T,u)=>{let h=z.dataset.id?.startsWith("__group_header"),c=h?0:j.getCol(T),a=h?0:j.getColumnOffset(c,B),Xj;if(A){let Bj=j.getRow(T),m=0,Yj=new Set;for(let o=0;o<T;o++){let Qj=j.getRow(o);if(Qj<Bj&&!Yj.has(Qj)){let t=Q.getHeight(o);m+=t,Yj.add(Qj)}}Xj=m}else Xj=C(T,u);z.style.transform=`translate(${Math.round(a)}px, ${Math.round(Xj)}px)`},y=(z,T)=>{let u=z.dataset.id?.startsWith("__group_header"),h=u?B:j.getColumnWidth(B),c;if(A||u)c=Q.getHeight(T)-j.gap;else{let a=j.getRow(T);c=Q.getHeight(a)-j.gap}z.style.width=`${h}px`,z.style.height=`${c}px`},x=(z,T,u,h,c)=>{let a=M.acquire(),Xj=F(u,h);if(a.className=O,a.dataset.index=String(z),a.dataset.id=String(T.id),a.dataset.row=String(j.getRow(z)),a.dataset.col=String(j.getCol(z)),a.ariaSelected=String(u),Z)a.id=`${Z}-item-${z}`;if(q)N=String(q()),a.setAttribute("aria-setsize",N),a.setAttribute("aria-posinset",String(z+1));y(a,z);let Bj=X(T,z,Xj);return w(a,Bj),U(a,u,h),W(a,z,c),a},n=(z,T,u,h,c)=>{if(T.start===0&&z.length>0)A=Tj(z[0]);for(let[m,Yj]of _)if(m<T.start||m>T.end)Yj.element.remove(),M.release(Yj.element),_.delete(m);let a=!1;if(q){let m=String(q());a=m!==N,N=m}let Xj=document.createDocumentFragment(),Bj=[];for(let m=T.start;m<=T.end;m++){let Yj=m-T.start,o=z[Yj];if(!o){console.warn(`⚠️ RENDER: Missing item at index ${m} (range: ${T.start}-${T.end}, items.length: ${z.length})`);continue}let Qj=u.has(o.id),t=m===h,Jj=_.get(m);if(Jj){let R=Jj.element.dataset.id,S=String(o.id);if(R!==S){let jj=F(Qj,t),g=X(o,m,jj);w(Jj.element,g),Jj.element.dataset.id=S,Jj.element.dataset.row=String(j.getRow(m)),Jj.element.dataset.col=String(j.getCol(m)),y(Jj.element,m)}if(U(Jj.element,Qj,t),Jj.element.ariaSelected=String(Qj),W(Jj.element,m,c),a)Jj.element.setAttribute("aria-setsize",N)}else{let R=x(m,o,Qj,t,c);Xj.appendChild(R),Bj.push({index:m,element:R})}}if(Bj.length>0){J.appendChild(Xj);for(let{index:m,element:Yj}of Bj)_.set(m,{index:m,element:Yj})}},d=(z)=>{for(let[T,u]of _)W(u.element,T,z)},e=(z,T,u,h)=>{let c=_.get(z);if(c){let a=F(u,h),Xj=X(T,z,a);w(c.element,Xj),U(c.element,u,h),c.element.dataset.id=String(T.id),c.element.ariaSelected=String(u),y(c.element,z)}},i=(z,T,u)=>{let h=_.get(z);if(h)U(h.element,T,u)},H=(z)=>{return _.get(z)?.element},v=(z)=>{if(Math.abs(z-B)<1)return;B=z;for(let[T,u]of _)y(u.element,T),W(u.element,T)},I=()=>{for(let[,z]of _)z.element.remove(),M.release(z.element);_.clear()};return{render:n,updatePositions:d,updateItem:e,updateItemClasses:i,getElement:H,updateContainerWidth:v,clear:I,destroy:()=>{I(),M.clear()}}};var JJ=MJ(()=>{ej()});var z2=0,Pj=5,P2=100,rj=2,b2=(J=0)=>{let X=Array(Pj);for(let Q=0;Q<Pj;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},k2=(J,X)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>P2){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let $=J.samples[0];return $.position=X,$.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=X,J.lastTime=Q,J}let Y=J.samples[J.sampleIndex];if(Y.position=X,Y.time=Q,J.sampleIndex=(J.sampleIndex+1)%Pj,J.sampleCount=Math.min(J.sampleCount+1,Pj),J.sampleCount>=rj){let $=(J.sampleIndex-J.sampleCount+Pj)%Pj,q=J.samples[$],Z=X-q.position,M=Q-q.time;J.velocity=M>0?Math.abs(Z)/M:0}return J.lastPosition=X,J.lastTime=Q,J},AJ=(J,X)=>{if(typeof J==="number"){let $=X;return{getOffset:(q)=>q*J,getHeight:()=>J,indexAtOffset:(q)=>{if($===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(q/J),$-1))},getTotalHeight:()=>$*J,getTotal:()=>$,rebuild:(q)=>{$=q},isVariable:()=>!1}}let Q=X,j=new Float64Array(0),Y=($)=>{Q=$,j=new Float64Array($+1),j[0]=0;for(let q=0;q<$;q++)j[q+1]=j[q]+J(q)};return Y(X),{getOffset:($)=>{if($<=0)return 0;if($>=Q)return j[Q];return j[$]},getHeight:($)=>J($),indexAtOffset:($)=>{if(Q===0)return 0;if($<=0)return 0;if($>=j[Q])return Q-1;let q=0,Z=Q-1;while(q<Z){let M=q+Z+1>>>1;if(j[M]<=$)q=M;else Z=M-1}return q},getTotalHeight:()=>j[Q]??0,getTotal:()=>Q,rebuild:($)=>Y($),isVariable:()=>!0}},y2=()=>{let J={},X=($,q)=>{if(!J[$])J[$]=new Set;return J[$].add(q),()=>Q($,q)},Q=($,q)=>{J[$]?.delete(q)};return{on:X,off:Q,emit:($,q)=>{J[$]?.forEach((Z)=>{try{Z(q)}catch(M){console.error(`[vlist] Error in "${$}" handler:`,M)}})},clear:()=>{for(let $ in J)delete J[$]}}},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},w2=(J,X,Q,j)=>{let Y=document.createElement("div");if(Y.className=X,j)Y.classList.add(`${X}--horizontal`);if(Y.setAttribute("role","listbox"),Y.setAttribute("tabindex","0"),Q)Y.setAttribute("aria-label",Q);if(j)Y.setAttribute("aria-orientation","horizontal");let $=document.createElement("div");if($.className=`${X}-viewport`,j)$.style.overflowX="auto",$.style.overflowY="hidden";else $.style.overflow="auto";$.style.height="100%",$.style.width="100%";let q=document.createElement("div");if(q.className=`${X}-content`,q.style.position="relative",j)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${X}-items`,Z.style.position="relative",j)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),$.appendChild(q),Y.appendChild($),J.appendChild(Y),{root:Y,viewport:$,content:q,items:Z}},T2=(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}}},v2=(J,X,Q,j,Y)=>{if(j===0||X===0){Y.start=0,Y.end=0;return}let $=Q.indexAtOffset(J),q=Q.indexAtOffset(J+X);if(q<j-1)q++;Y.start=Math.max(0,$),Y.end=Math.min(j-1,Math.max(0,q))},R2=(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)},C2=(J,X,Q,j,Y)=>{if(j===0)return 0;let $=Math.max(0,Math.min(J,j-1)),q=X.getOffset($),Z=X.getHeight($),M=Math.max(0,X.getTotalHeight()-Q),_;switch(Y){case"center":_=q-(Q-Z)/2;break;case"end":_=q-Q+Z;break;default:_=q}return Math.max(0,Math.min(_,M))},S2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,f2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},aj=(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 Y=new Map,$=!1,q={use(Z){if($)throw Error("[vlist/builder] Cannot call .use() after .build()");return Y.set(Z.name,Z),q},build(){if($)throw Error("[vlist/builder] .build() can only be called once");return $=!0,I2(J,Y,X,j)}};return q};function I2(J,X,Q,j){let{item:Y,items:$,overscan:q=3,classPrefix:Z="vlist",ariaLabel:M,reverse:_=!1,scroll:B}=J,A=B?.wheel??!0,L=B?.wrap??!1,b=_,N=`${Z}-${z2++}`,V=j,E=Q?typeof Y.height==="number"?Y.height:void 0:typeof Y.width==="number"?Y.width:void 0,F=Y.template,O={overscan:q,classPrefix:Z,reverse:b,wrap:L,horizontal:Q,ariaIdPrefix:N},k=Array.from(X.values()).sort((K,D)=>(K.priority??50)-(D.priority??50)),G=new Set(k.map((K)=>K.name));for(let K of k)if(K.conflicts){for(let D of K.conflicts)if(G.has(D))throw Error(`[vlist/builder] ${K.name} and ${D} cannot be combined`)}if(Q){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(b){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let w=H2(J.container),U=w2(w,Z,M,Q),C=y2(),W=$?[...$]:[],y=AJ(V,W.length),x=T2(),n=U.viewport.clientHeight,d=U.viewport.clientWidth,e=!1,i=!1,H=0,v=null,I=null,p=b2(0),z={start:0,end:0},T={start:0,end:0},u={start:-1,end:-1},h={viewportState:{scrollTop:0,containerHeight:n,totalHeight:y.getTotalHeight(),actualHeight:y.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},c=new Map,a={selected:!1,focused:!1},Xj=`${Z}-item`,Bj="",m=new Map,Yj=()=>{m.clear();for(let K=0;K<W.length;K++){let D=W[K];if(D)m.set(D.id,K)}};Yj();let o=null,Qj=()=>o?o.getTotal():W.length,t=[],Jj=[],R=[],S=[],s=[],jj=[],g=new Map,$j=()=>{return Q?U.viewport.scrollLeft:U.viewport.scrollTop},qj=(K)=>{if(Q)U.viewport.scrollLeft=K;else U.viewport.scrollTop=K},Mj=(K=2)=>{let D=y.getTotalHeight();return H+n>=D-K},Uj=!1,Kj,_j,Zj=(K,D,P,f,r)=>{v2(K,D,P,f,r)},Gj=(K,D,P,f,r)=>{return C2(K,D,P,f,r)},Wj=(K,D)=>{if(typeof D==="string")K.innerHTML=D;else K.replaceChildren(D)},Fj=(K,D)=>{let P=Math.round(y.getOffset(D));if(Q)K.style.transform=`translateX(${P}px)`;else K.style.transform=`translateY(${P}px)`},eJ=(K,D)=>{let P=x.acquire();if(P.className=Xj,Q){if(P.style.width=`${y.getHeight(K)}px`,E!=null)P.style.height=`${E}px`}else P.style.height=`${y.getHeight(K)}px`;return P.dataset.index=String(K),P.dataset.id=String(D.id),P.ariaSelected="false",P.id=`${N}-item-${K}`,Bj=String(Qj()),P.setAttribute("aria-setsize",Bj),P.setAttribute("aria-posinset",String(K+1)),Wj(P,F(D,K,a)),Fj(P,K),P},kj=()=>{let K=`${y.getTotalHeight()}px`;if(Q)U.content.style.width=K;else U.content.style.height=K},mj=new Set,gj=-1,j2=()=>{if(e)return;let K=Qj();if(Zj(H,n,y,K,z),R2(z,q,K,T),T.start===u.start&&T.end===u.end)return;let D=String(K),P=D!==Bj;Bj=D;for(let[l,Vj]of c)if(l<T.start||l>T.end)Vj.remove(),x.release(Vj),c.delete(l);let f=document.createDocumentFragment(),r=[];for(let l=T.start;l<=T.end;l++){let Vj=o?o.getItem(l):W[l];if(!Vj)continue;let Dj=c.get(l);if(Dj){let Aj=Dj.dataset.id,Sj=String(Vj.id);if(Aj!==Sj)if(Wj(Dj,F(Vj,l,a)),Dj.dataset.id=Sj,Q)Dj.style.width=`${y.getHeight(l)}px`;else Dj.style.height=`${y.getHeight(l)}px`;Fj(Dj,l);let fj=mj.has(Vj.id),M2=l===gj;if(Dj.classList.toggle(`${Z}-item--selected`,fj),Dj.classList.toggle(`${Z}-item--focused`,M2),Dj.ariaSelected=fj?"true":"false",P)Dj.setAttribute("aria-setsize",Bj)}else{let Aj=eJ(l,Vj),Sj=mj.has(Vj.id),fj=l===gj;if(Sj)Aj.classList.add(`${Z}-item--selected`),Aj.ariaSelected="true";if(fj)Aj.classList.add(`${Z}-item--focused`);f.appendChild(Aj),r.push({index:l,element:Aj})}}if(r.length>0){U.items.appendChild(f);for(let{index:l,element:Vj}of r)c.set(l,Vj)}u.start=T.start,u.end=T.end,h.lastRenderRange.start=T.start,h.lastRenderRange.end=T.end,h.viewportState.scrollTop=H,h.viewportState.visibleRange.start=z.start,h.viewportState.visibleRange.end=z.end,h.viewportState.renderRange.start=T.start,h.viewportState.renderRange.end=T.end,C.emit("range:change",{range:{start:T.start,end:T.end}})},J2=()=>{u.start=-1,u.end=-1,Kj()};Kj=j2,_j=J2;let yj=()=>{if(e)return;let K=$j(),D=K>=H?"down":"up";if(p=k2(p,K),!U.root.classList.contains(`${Z}--scrolling`))U.root.classList.add(`${Z}--scrolling`);H=K,Kj(),C.emit("scroll",{scrollTop:K,direction:D}),C.emit("velocity:change",{velocity:p.velocity,reliable:p.sampleCount>=rj});for(let P=0;P<t.length;P++)t[P](K,D);if(I)clearTimeout(I);I=setTimeout(()=>{U.root.classList.remove(`${Z}--scrolling`),p.velocity=0,p.sampleCount=0,C.emit("velocity:change",{velocity:0,reliable:!1})},B?.idleTimeout??150)},Rj=null,zj=U.viewport;if(zj.addEventListener("scroll",yj,{passive:!0}),Q&&A)Rj=(K)=>{if(K.deltaX)return;K.preventDefault(),U.viewport.scrollLeft+=K.deltaY},U.viewport.addEventListener("wheel",Rj);let WJ=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=o?.getItem(f)??W[f];if(r){if(r.__groupHeader)return;C.emit("item:click",{item:r,index:f,event:K})}}}for(let f=0;f<Jj.length;f++)Jj[f](K)},$2=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=o?.getItem(f)??W[f];if(r){if(r.__groupHeader)return;C.emit("item:dblclick",{item:r,index:f,event:K})}}}},NJ=(K)=>{for(let D=0;D<R.length;D++)R[D](K)};U.items.addEventListener("click",WJ),U.items.addEventListener("dblclick",$2),U.root.addEventListener("keydown",NJ);let dj=!0,Q2=()=>d,X2=()=>n,cj=new ResizeObserver((K)=>{if(e)return;for(let D of K){let P=D.contentRect.height,f=D.contentRect.width,r=Q?f:P;if(d=f,Math.abs(r-n)>1){if(n=r,h.viewportState.containerHeight=r,i)kj(),Kj(),C.emit("resize",{height:P,width:f})}if(i)for(let l=0;l<S.length;l++)S[l](f,P)}});if(dj)cj.observe(U.viewport);let Nj={get dom(){return U},get heightCache(){return y},get emitter(){return C},get config(){return O},get rawConfig(){return J},get renderer(){return{render:(K,D,P,f,r)=>{mj=P,gj=f,_j()},updateItemClasses:(K,D,P)=>{let f=c.get(K);if(!f)return;f.classList.toggle(`${Z}-item--selected`,D),f.classList.toggle(`${Z}-item--focused`,P),f.ariaSelected=D?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(K)=>c.get(K)??null,clear:()=>{},destroy:()=>{}}},set renderer(K){},get dataManager(){return o},set dataManager(K){o=K},get scrollController(){return lj},set scrollController(K){lj=K},state:h,getContainerWidth(){return d},afterScroll:t,clickHandlers:Jj,keydownHandlers:R,resizeHandlers:S,contentSizeHandlers:s,destroyHandlers:jj,methods:g,replaceTemplate(K){F=K},replaceRenderer(K){},replaceDataManager(K){o=K},replaceScrollController(K){lj=K},getItemsForRange(K){let D=[];for(let P=K.start;P<=K.end;P++){let f=o?o.getItem(P):W[P];if(f)D.push(f)}return D},getAllLoadedItems(){if(o){let K=o.getTotal(),D=[];for(let P=0;P<K;P++){let f=o.getItem(P);if(f)D.push(f)}return D}return[...W]},getVirtualTotal(){return Qj()},getCachedCompression(){return{isCompressed:!1,actualHeight:y.getTotalHeight(),virtualHeight:y.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:H,totalItems:Qj(),containerHeight:n,rangeStart:T.start}},renderIfNeeded(){Kj()},forceRender(){_j()},getRenderFns(){return{renderIfNeeded:Kj,forceRender:_j}},setRenderFns(K,D){Kj=K,_j=D},setVirtualTotalFn(K){Qj=K},rebuildHeightCache(K){y.rebuild(K??Qj())},setHeightConfig(K){y=AJ(K,Qj())},updateContentSize(K){let D=`${K}px`;if(Q)U.content.style.width=D;else U.content.style.height=D},updateCompressionMode(){},setVisibleRangeFn(K){Zj=K},setScrollToPosFn(K){Gj=K},setPositionElementFn(K){Fj=K},setScrollFns(K,D){$j=K,qj=(P)=>{D(P),yj()}},setScrollTarget(K){zj.removeEventListener("scroll",yj),zj=K,zj.addEventListener("scroll",yj,{passive:!0})},getScrollTarget(){return zj},setContainerDimensions(K){Q2=K.width,X2=K.height,d=K.width(),n=K.height(),h.viewportState.containerHeight=n},disableViewportResize(){if(dj)dj=!1,cj.unobserve(U.viewport)}};o={getState:()=>({total:W.length,cached:W.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>W.length,getCached:()=>W.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(K)=>W[K],getItemById:(K)=>{let D=m.get(K);return D!==void 0?W[D]:void 0},getIndexById:(K)=>m.get(K)??-1,isItemLoaded:(K)=>K>=0&&K<W.length&&W[K]!==void 0,getItemsInRange:(K,D)=>{let P=[],f=Math.max(0,K),r=Math.min(D,W.length-1);for(let l=f;l<=r;l++)P.push(W[l]);return P},setTotal:(K)=>{},setItems:(K,D=0,P)=>{if(D===0&&(P!==void 0||W.length===0))W=[...K];else{let f=D+K.length;if(W.length<f)W.length=f;for(let r=0;r<K.length;r++)W[D+r]=K[r]}if(Yj(),i){y.rebuild(Qj()),kj(),Nj.updateCompressionMode();for(let f=0;f<s.length;f++)s[f]();_j()}},updateItem:(K,D)=>{let P=m.get(K);if(P===void 0)return!1;let f=W[P];if(!f)return!1;if(W[P]={...f,...D},D.id!==void 0&&D.id!==K)m.delete(K),m.set(D.id,P);let r=c.get(P);if(r)Wj(r,F(W[P],P,a)),r.dataset.id=String(W[P].id);return!0},removeItem:(K)=>{let D=m.get(K);if(D===void 0)return!1;if(W.splice(D,1),Yj(),i){y.rebuild(Qj()),kj(),Nj.updateCompressionMode();for(let P=0;P<s.length;P++)s[P]();_j()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{W=[],m.clear()},reset:()=>{if(W=[],m.clear(),i)y.rebuild(0),kj(),_j()}};let lj={getScrollTop:()=>$j(),scrollTo:(K)=>{qj(K),H=K,Kj()},scrollBy:(K)=>{let D=$j()+K;qj(D),H=D,Kj()},isAtTop:()=>H<=2,isAtBottom:(K=2)=>Mj(K),getScrollPercentage:()=>{let K=y.getTotalHeight(),D=Math.max(0,K-n);return D>0?H/D:0},getVelocity:()=>p.velocity,isTracking:()=>p.sampleCount>=rj,isScrolling:()=>U.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>Uj,isWindowMode:()=>!1,updateContainerHeight:(K)=>{n=K},destroy:()=>{}},VJ=new Map;for(let K of k)if(K.methods)for(let D of K.methods){let P=VJ.get(D);if(P)throw Error(`[vlist/builder] Method "${D}" is registered by both "${P}" and "${K.name}"`);VJ.set(D,K.name)}for(let K of k)K.setup(Nj);if(i=!0,Nj.state.isInitialized=!0,kj(),Kj(),b&&W.length>0){let K=Gj(W.length-1,y,n,W.length,"end");qj(K),H=K,Kj()}let q2=(K)=>{Nj.dataManager.setItems(K,0,K.length)},K2=b?(K)=>{let D=Mj(2),P=W.length;if(Nj.dataManager.setItems(K,P),D&&W.length>0){let f=Gj(W.length-1,y,n,W.length,"end");qj(f),H=f,Kj()}}:(K)=>{let D=W.length;Nj.dataManager.setItems(K,D)},Y2=b?(K)=>{let D=$j(),P=y.getTotalHeight(),f=[...W];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...f],0);let l=y.getTotalHeight()-P;if(l>0)qj(D+l),H=D+l}:(K)=>{let D=[...W];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...D],0)},Z2=(K,D)=>{Nj.dataManager.updateItem(K,D)},B2=(K)=>{Nj.dataManager.removeItem(K)},U2=async()=>{if(Nj.dataManager.reload)await Nj.dataManager.reload()},Cj=()=>{if(v!==null)cancelAnimationFrame(v),v=null},W2=(K,D,P)=>{if(Cj(),Math.abs(D-K)<1){qj(D),H=D,Kj();return}let f=performance.now(),r=(l)=>{let Vj=l-f,Dj=Math.min(Vj/P,1),Aj=K+(D-K)*S2(Dj);if(qj(Aj),H=Aj,Kj(),Dj<1)v=requestAnimationFrame(r);else v=null};v=requestAnimationFrame(r)},DJ=(K,D)=>{let{align:P,behavior:f,duration:r}=f2(D),l=Qj(),Vj=K;if(L&&l>0)Vj=(Vj%l+l)%l;let Dj=Gj(Vj,y,n,l,P);if(f==="smooth")W2($j(),Dj,r);else Cj(),qj(Dj)},N2=(K,D)=>{let P=m.get(K)??Nj.dataManager.getIndexById(K);if(P>=0)DJ(P,D)},V2=()=>$j(),D2=(K,D)=>{return C.on(K,D)},_2=(K,D)=>{C.off(K,D)},G2=()=>{if(e)return;if(e=!0,Nj.state.isDestroyed=!0,U.items.removeEventListener("click",WJ),U.root.removeEventListener("keydown",NJ),zj.removeEventListener("scroll",yj),cj.disconnect(),Rj)U.viewport.removeEventListener("wheel",Rj);if(I)clearTimeout(I);for(let K=0;K<jj.length;K++)jj[K]();for(let K of k)if(K.destroy)K.destroy();Cj();for(let[,K]of c)K.remove(),x.release(K);c.clear(),x.clear(),C.clear(),U.root.remove()},_J={get element(){return U.root},get items(){if(g.has("_getItems"))return g.get("_getItems")();return W},get total(){if(g.has("_getTotal"))return g.get("_getTotal")();return Qj()},setItems:g.has("setItems")?g.get("setItems"):q2,appendItems:g.has("appendItems")?g.get("appendItems"):K2,prependItems:g.has("prependItems")?g.get("prependItems"):Y2,updateItem:g.has("updateItem")?g.get("updateItem"):Z2,removeItem:g.has("removeItem")?g.get("removeItem"):B2,reload:g.has("reload")?g.get("reload"):U2,scrollToIndex:g.has("scrollToIndex")?g.get("scrollToIndex"):DJ,scrollToItem:g.has("scrollToItem")?g.get("scrollToItem"):N2,cancelScroll:g.has("cancelScroll")?g.get("cancelScroll"):Cj,getScrollPosition:g.has("getScrollPosition")?g.get("getScrollPosition"):V2,on:D2,off:_2,destroy:G2};for(let[K,D]of g){if(K==="setItems"||K==="appendItems"||K==="prependItems"||K==="updateItem"||K==="removeItem"||K==="reload"||K==="scrollToIndex"||K==="scrollToItem"||K==="cancelScroll"||K==="getScrollPosition")continue;_J[K]=D}return _J}var EJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},$=(N)=>{if(N<=0)return 0;if(!j)return Math.ceil(N/X);let V=0,E=0,F=0;for(let O=0;O<N;O++)if(j(O)){if(F++,E>0)V++,E=0;V++,E=0}else if(E++,E>=X)V++,E=0;if(E>0)V++;return V},q=(N)=>{return Y.row=Z(N),Y.col=M(N),Y},Z=(N)=>{if(!j)return Math.floor(N/X);let V=0,E=0;for(let F=0;F<=N;F++)if(j(F)){if(E>0)V++,E=0;if(F===N)return V;V++,E=0}else{if(F===N)return V;if(E++,E>=X)V++,E=0}return console.warn(`⚠️ getRow(${N}) fell through - returning ${V}`),V},M=(N)=>{if(!j)return N%X;if(j(N))return 0;let V=0;for(let E=0;E<=N;E++)if(j(E))V=0;else{if(E===N)return V;if(V++,V>=X)V=0}return V},_=(N,V,E)=>{if(E<=0)return{start:0,end:-1};if(!j){let w=Math.max(0,N*X),U=Math.min(E-1,(V+1)*X-1);return{start:w,end:U}}let F=-1,O=-1,k=0,G=0;for(let w=0;w<E;w++){if(j(w)){if(G>0)k++,G=0;if(k>=N&&k<=V){if(F===-1)F=w;O=w}k++,G=0}else{if(k>=N&&k<=V){if(F===-1)F=w;O=w}if(G++,G>=X)k++,G=0}if(k>V&&G===0)break}if(F===-1)return{start:0,end:-1};return{start:F,end:O}},B=(N,V,E)=>{if(V<0||V>=X)return-1;let F=N*X+V;if(F<0||F>=E)return-1;return F},A=(N)=>{let V=(X-1)*Q;return Math.max(0,(N-V)/X)};return{get columns(){return X},get gap(){return Q},update:(N)=>{if(N.columns!==void 0)X=Math.max(1,Math.floor(N.columns));if(N.gap!==void 0)Q=N.gap;if(N.isHeaderFn!==void 0)j=N.isHeaderFn},getTotalRows:$,getPosition:q,getRow:Z,getCol:M,getItemRange:_,getItemIndex:B,getColumnWidth:A,getColumnOffset:(N,V)=>{let E=A(V);return N*(E+Q)}}};JJ();var yJ=(J,X,Q,j,Y,$)=>{if(j===0||X===0)return $.start=0,$.end=-1,$;let q=Q.indexAtOffset(J),Z=Q.indexAtOffset(J+X);if(Z<j-1)Z++;return $.start=Math.max(0,q),$.end=Math.min(j-1,Math.max(0,Z)),$},HJ=(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},wJ=(J,X,Q,j,Y,$)=>{if(j===0)return 0;let q=Math.max(0,Math.min(J,j-1)),Z=X.getOffset(q),M=X.getHeight(q),_=X.getTotalHeight(),B=Math.max(0,_-Q),A;switch($){case"center":A=Z-Q/2+M/2;break;case"end":A=Z-Q+M;break;case"start":default:A=Z;break}return Math.max(0,Math.min(A,B))};var $J=(J,X,Q,j,Y,$=yJ)=>{return $(J.scrollTop,J.containerHeight,X,Q,Y,J.visibleRange),HJ(J.visibleRange,j,Q,J.renderRange),J.totalHeight=Y.virtualHeight,J.actualHeight=Y.actualHeight,J.isCompressed=Y.isCompressed,J.compressionRatio=Y.ratio,J},Oj=(J,X,Q,j,Y="start",$,q=wJ)=>{return q(J,X,Q,j,$,Y)};var TJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:$,config:q,rawConfig:Z}=j,{classPrefix:M}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let _=Z.items?.some((G)=>G.__groupHeader===!0),B={columns:J.columns,gap:J.gap??0};if(_)B.isHeaderFn=(G)=>{let w=j.dataManager.getItem(G);return!!(w&&w.__groupHeader===!0)};X=EJ(B);let A=X.gap;j.setVirtualTotalFn(()=>{let G=j.dataManager.getTotal();return X.getTotalRows(G)});let L=Z.item,b=q.horizontal?L.width:L.height,N={containerWidth:j.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof b==="function")j.setHeightConfig((G)=>{let w=N.containerWidth-2,U=(N.columns-1)*N.gap,C=(w-U)/N.columns,W={containerWidth:N.containerWidth,columns:N.columns,gap:N.gap,columnWidth:C,row:X.getRow(G),column:X.getCol(G),totalRows:X.getTotalRows(j.dataManager.getTotal()),totalColumns:N.columns};return b(G,W)+N.gap});else if(A>0)j.setHeightConfig(b+A);j.rebuildHeightCache(),Y.root.classList.add(`${M}--grid`);let V=j.getContainerWidth(),E=Z.item.template,F=()=>{Q=jJ(Y.items,E,j.heightCache,X,M,V,()=>j.dataManager.getTotal(),q.ariaIdPrefix),j.replaceRenderer(Q)};F(),j.methods.set("_getGridLayout",()=>X),j.methods.set("_getGridConfig",()=>B),j.methods.set("_replaceGridRenderer",(G)=>{Q=G}),j.methods.set("_updateGridLayoutForGroups",(G)=>{X.update({isHeaderFn:G});let w=j.dataManager.getTotal(),U=0;for(let C=0;C<w;C++)if(X.getCol(C)===0){let W=j.heightCache.getHeight(C);U+=W}j.heightCache.getTotalHeight=()=>U,j.dom.content.style.height=`${U}px`,F()}),j.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");B.columns=G.columns}if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");B.gap=G.gap}if(X)X.update(B);let w=j.getContainerWidth();if(N.containerWidth=w,N.columns=B.columns,N.gap=B.gap??0,Q)Q.updateContainerWidth(w);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let U=0;U<j.contentSizeHandlers.length;U++)j.contentSizeHandlers[U]();if(Q)Q.clear();j.forceRender()});let O=()=>{if(j.state.isDestroyed)return;let G=j.scrollController.getScrollTop(),w=j.state.viewportState.containerHeight,U=j.getVirtualTotal(),C={start:0,end:0};if(U===0||w===0)C.start=0,C.end=0;else{C.start=Math.max(0,j.heightCache.indexAtOffset(G));let v=j.heightCache.indexAtOffset(G+w);if(v<U-1)v++;C.end=Math.min(U-1,Math.max(0,v))}let W=q.overscan??3,y={start:Math.max(0,C.start-W),end:Math.min(U-1,C.end+W)};j.state.viewportState.scrollTop=G,j.state.viewportState.visibleRange=C,j.state.viewportState.renderRange=y;let x=j.state.lastRenderRange,n=j.state.viewportState.isCompressed;if(y.start===x.start&&y.end===x.end){if(n)Q.updatePositions(j.getCompressionContext());return}let d=j.dataManager.getTotal(),e=X.getItemRange(y.start,y.end,d),i=j.dataManager.getItemsInRange(e.start,e.end),H=n?j.getCompressionContext():void 0;Q.render(i,e,new Set,-1,H),j.state.lastRenderRange={...y},$.emit("range:change",{range:y})},k=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},O()};if(j.setRenderFns(O,k),j.resizeHandlers.push((G,w)=>{if(Q)Q.updateContainerWidth(G)}),j.methods.set("scrollToIndex",(G,w)=>{let U=Math.floor(G/J.columns),{align:C,behavior:W}=u2(w),y=j.dataManager.getState(),x=X.getTotalRows(y.total),n=Math.max(0,Math.min(U,x-1)),d=Oj(n,j.heightCache,j.state.viewportState.containerHeight,x,C,j.getCachedCompression());if(W==="smooth")j.scrollController.scrollTo(d);else j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;Y.root.classList.remove(`${M}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}},QJ=300,u2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:QJ};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??QJ};return{align:"start",behavior:"auto",duration:QJ}};var XJ=(J,X)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].headerLayoutIndex<=X)Q=Y;else j=Y-1}return Q},vJ=(J,X)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].firstDataIndex<=X)Q=Y;else j=Y-1}return Q},RJ=(J,X)=>{if(J===0)return[];let Q=[],j=X(0),Y=0,$=0;for(let q=1;q<J;q++){let Z=X(q);if(Z!==j){let M=q-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:$,firstDataIndex:Y,count:M}),$=$+1+M,j=Z,Y=q}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:$,firstDataIndex:Y,count:J-Y}),Q},qJ=(J,X)=>{if(J.length===0||X.length===0)return[];let Q=J.length+X.length,j=Array(Q),Y=0;for(let $ of X){j[Y]={id:`__group_header_${$.groupIndex}`,__groupHeader:!0,groupKey:$.key,groupIndex:$.groupIndex},Y++;for(let q=0;q<$.count;q++)j[Y]=J[$.firstDataIndex+q],Y++}return j},KJ=(J,X)=>{let Q=typeof X==="number"?(j)=>X:X;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return Q(Y.dataIndex)}},CJ=(J,X)=>{let Q=RJ(J,X.getGroupForIndex),j=J+Q.length,Y=X.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(L)=>{if(Q.length===0)return{type:"item",dataIndex:L,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let b=XJ(Q,L),N=Q[b];if(L===N.headerLayoutIndex)return{type:"header",group:N};let V=L-N.headerLayoutIndex-1;return{type:"item",dataIndex:N.firstDataIndex+V,group:N}},layoutToDataIndex:(L)=>{if(Q.length===0)return L;let b=XJ(Q,L),N=Q[b];if(L===N.headerLayoutIndex)return-1;let V=L-N.headerLayoutIndex-1;return N.firstDataIndex+V},dataToLayoutIndex:(L)=>{if(Q.length===0)return L;let b=vJ(Q,L),N=Q[b],V=L-N.firstDataIndex;return N.headerLayoutIndex+1+V},getGroupAtLayoutIndex:(L)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=XJ(Q,L);return Q[b]},getGroupAtDataIndex:(L)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=vJ(Q,L);return Q[b]},getHeaderHeight:typeof Y==="number"?(L)=>Y:(L)=>{let b=Q[L];if(!b)return 0;return Y(b.key,L)},rebuild:(L)=>{Q=RJ(L,X.getGroupForIndex),j=L+Q.length}}};var SJ=(J,X,Q,j,Y)=>{let $=document.createElement("div");$.className=`${Y}-sticky-header`,$.setAttribute("role","presentation"),$.setAttribute("aria-hidden","true"),$.style.position="absolute",$.style.top="0",$.style.left="0",$.style.right="0",$.style.zIndex="5",$.style.pointerEvents="none",$.style.willChange="transform",$.style.overflow="hidden",J.insertBefore($,J.firstChild);let q=-1,Z=!1,M=0,_=(V)=>{if(V===q)return;q=V;let E=X.groups;if(V<0||V>=E.length){$.textContent="";return}let F=E[V],O=j.headerTemplate(F.key,F.groupIndex),k=X.getHeaderHeight(V);if($.style.height=`${k}px`,typeof O==="string")$.innerHTML=O;else $.replaceChildren(O)},B=(V)=>{let E=X.groups;if(E.length===0){L();return}let F=0;for(let U=E.length-1;U>=0;U--)if(Q.getOffset(E[U].headerLayoutIndex)<=V){F=U;break}let O=Q.getOffset(E[0].headerLayoutIndex);if(V<O){L();return}if(!Z)A();_(F);let k=X.getHeaderHeight(F),G=0,w=F+1;if(w<E.length){let C=Q.getOffset(E[w].headerLayoutIndex)-V;if(C<k)G=C-k}if(G!==M)M=G,$.style.transform=G===0?"":`translateY(${Math.round(G)}px)`},A=()=>{if(Z)return;Z=!0,$.style.display=""},L=()=>{if(!Z)return;Z=!1,$.style.display="none",q=-1,M=0,$.style.transform=""},b=()=>{let V=q;if(q=-1,V>=0)_(V)},N=()=>{$.remove(),q=-1,Z=!1};return $.style.display="none",{update:B,refresh:b,show:A,hide:L,destroy:N}};var fJ=(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=[],Y=[];return{name:"withSections",priority:10,setup($){let{dom:q,config:Z,rawConfig:M}=$,{classPrefix:_}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let A=M.item.height;j=M.items?[...M.items]:[];let L=j.length,b={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};X=CJ(L,b),Y=qJ(j,X.groups);let N=KJ(X,A);$.setHeightConfig(N),$.rebuildHeightCache(Y.length),$.dataManager.setItems(Y,0,Y.length);let V=M.item.template,{headerTemplate:E}=J,F=(W,y,x)=>{if(Tj(W))return E(W.groupKey,W.groupIndex);return V(W,y,x)},O=$.methods.get("_getGridLayout"),k=$.methods.get("_replaceGridRenderer"),G=$.methods.get("_updateGridLayoutForGroups");if(O&&k){if(G)G((n)=>{let d=Y[n];return!!(d&&Tj(d))});let{createGridRenderer:W}=(JJ(),L2(kJ)),y=O(),x=W(q.items,F,$.heightCache,y,_,$.getContainerWidth(),()=>$.dataManager.getTotal(),Z.ariaIdPrefix);k(x)}else $.replaceTemplate(F);if(q.root.classList.add(`${_}--grouped`),J.sticky!==!1){Q=SJ(q.root,X,$.heightCache,{...b,sticky:b.sticky??!1},_);let W=Q;$.afterScroll.push((y,x)=>{W.update(y)}),Q.update($.scrollController.getScrollTop())}let w=()=>{if(!X)return;X.rebuild(j.length),Y=qJ(j,X.groups);let W=KJ(X,A);if($.setHeightConfig(W),$.rebuildHeightCache(Y.length),$.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};$.methods.set("setItems",(W)=>{j=[...W],w()}),$.methods.set("appendItems",(W)=>{j=[...j,...W],w()}),$.methods.set("prependItems",(W)=>{j=[...W,...j],w()}),$.methods.set("removeItem",(W)=>{j=j.filter((y)=>y.id!==W),w()});let{animateScroll:U,cancelScroll:C}=x2($.scrollController,$.renderIfNeeded);$.methods.set("scrollToIndex",(W,y)=>{let x=X.dataToLayoutIndex(W),{align:n,behavior:d,duration:e}=m2(y),i=$.dataManager.getTotal(),H=Oj(x,$.heightCache,$.state.viewportState.containerHeight,i,n,$.getCachedCompression());if(d==="smooth")U($.scrollController.getScrollTop(),H,e);else C(),$.scrollController.scrollTo(H)}),$.methods.set("_getItems",()=>j),$.methods.set("_getTotal",()=>j.length),$.destroyHandlers.push(()=>{if(Ej!==null)cancelAnimationFrame(Ej),Ej=null;if(Q)Q.destroy(),Q=null;q.root.classList.remove(`${_}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}},YJ=300,h2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,Ej=null,x2=(J,X)=>{let Q=()=>{if(Ej!==null)cancelAnimationFrame(Ej),Ej=null};return{animateScroll:(Y,$,q)=>{if(Q(),Math.abs($-Y)<1){J.scrollTo($);return}let Z=performance.now(),M=(_)=>{let B=_-Z,A=Math.min(B/q,1),L=Y+($-Y)*h2(A);if(J.scrollTo(L),X(),A<1)Ej=requestAnimationFrame(M);else Ej=null};Ej=requestAnimationFrame(M)},cancelScroll:Q}},m2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:YJ};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??YJ};return{align:"start",behavior:"auto",duration:YJ}};var IJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),ZJ=(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 Y of X)j.add(Y);return{...J,selected:j}},BJ=(J,X)=>{let Q=new Set(J.selected);for(let j of X)Q.delete(j);return{...J,selected:Q}},pj=(J,X,Q)=>{if(Q==="none")return J;if(J.selected.has(X))return BJ(J,[X]);else return ZJ(J,[X],Q)},pJ=(J,X,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(X.map((j)=>j.id))}},uJ=(J)=>({...J,selected:new Set}),hJ=(J,X)=>{return J.focusedIndex=X,J},xJ=(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},mJ=(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},gJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=0,J},dJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=X-1,J};var uj=(J)=>{return Array.from(J.selected)},hj=(J,X)=>{let Q=[];for(let j of J.selected){let Y=X(j);if(Y)Q.push(Y)}return Q};var UJ=(J)=>{let X=J?.mode??"single",Q=J?.initial,j=IJ(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup($){let{dom:q,emitter:Z,config:M}=$,{classPrefix:_,ariaIdPrefix:B}=M;if(X==="none"){$.methods.set("select",()=>{}),$.methods.set("deselect",()=>{}),$.methods.set("toggleSelect",()=>{}),$.methods.set("selectAll",()=>{}),$.methods.set("clearSelection",()=>{}),$.methods.set("getSelected",()=>[]),$.methods.set("getSelectedItems",()=>[]),$.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:A,forceRender:L}=$.getRenderFns(),b=()=>{$.dom.items.querySelectorAll("[data-index]").forEach((k)=>{let G=k,w=G.dataset.id;if(w!==void 0){let U=/^\d+$/.test(w)?parseInt(w,10):w,C=j.selected.has(U),y=parseInt(G.dataset.index??"-1",10)===j.focusedIndex;G.classList.toggle(`${_}-item--selected`,C),G.classList.toggle(`${_}-item--focused`,y),G.ariaSelected=C?"true":"false"}})},N=()=>{if($.state.isDestroyed)return;A(),b()},V=()=>{if($.state.isDestroyed)return;L(),b()};$.setRenderFns(N,V);let E=()=>{b(),Z.emit("selection:change",{selected:uj(j),items:hj(j,(O)=>$.dataManager.getItemById(O))})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${_}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",q.root.appendChild(Y);let F=Y;Z.on("selection:change",({selected:O})=>{let k=O.length;if(k===0)F.textContent="";else if(k===1)F.textContent="1 item selected";else F.textContent=`${k} items selected`}),$.clickHandlers.push((O)=>{if($.state.isDestroyed)return;let G=O.target.closest("[data-index]");if(!G)return;let w=parseInt(G.dataset.index??"-1",10);if(w<0)return;let U=$.dataManager.getItem(w);if(!U)return;Z.emit("item:click",{item:U,index:w,event:O}),j=hJ(j,w),q.root.setAttribute("aria-activedescendant",`${B}-item-${w}`),j=pj(j,U.id,X),E()}),$.keydownHandlers.push((O)=>{if($.state.isDestroyed)return;let k=$.dataManager.getTotal(),G=j.focusedIndex,w=!1,U=!1,C=j;switch(O.key){case"ArrowUp":C=xJ(j,k),w=!0,U=!0;break;case"ArrowDown":C=mJ(j,k),w=!0,U=!0;break;case"Home":C=gJ(j,k),w=!0,U=!0;break;case"End":C=dJ(j,k),w=!0,U=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let W=$.dataManager.getItem(j.focusedIndex);if(W)C=pj(j,W.id,X);w=!0}break}if(w){O.preventDefault(),j=C;let W=j.focusedIndex;if(W>=0){let y=$.dataManager.getState(),x=Oj(W,$.heightCache,$.state.viewportState.containerHeight,y.total,"center",$.getCachedCompression());$.scrollController.scrollTo(x),q.root.setAttribute("aria-activedescendant",`${B}-item-${W}`)}else q.root.removeAttribute("aria-activedescendant");if(U){let{selected:y}=j;if(G>=0&&G!==W){let x=$.dataManager.getItem(G);if(x)$.renderer.updateItemClasses(G,y.has(x.id),!1)}if(W>=0){let x=$.dataManager.getItem(W);if(x)$.renderer.updateItemClasses(W,y.has(x.id),!0)}}else V(),Z.emit("selection:change",{selected:uj(j),items:hj(j,(y)=>$.dataManager.getItemById(y))})}}),$.methods.set("select",(...O)=>{j=ZJ(j,O,X),E()}),$.methods.set("deselect",(...O)=>{j=BJ(j,O),E()}),$.methods.set("toggleSelect",(O)=>{j=pj(j,O,X),E()}),$.methods.set("selectAll",()=>{if(X!=="multiple")return;let O=$.getAllLoadedItems();j=pJ(j,O,X),E()}),$.methods.set("clearSelection",()=>{j=uJ(j);let{renderRange:O,isCompressed:k}=$.state.viewportState,G=$.getItemsForRange(O),w=k?$.getCompressionContext():void 0;$.renderer.render(G,O,j.selected,j.focusedIndex,w),Z.emit("selection:change",{selected:[],items:[]})}),$.methods.set("getSelected",()=>{return uj(j)}),$.methods.set("getSelectedItems",()=>{return hj(j,(O)=>$.dataManager.getItemById(O))}),$.destroyHandlers.push(()=>{if(F&&F.parentNode)F.remove()})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var vj=(J,X,Q={},j="vlist",Y=!1)=>{let{autoHide:$=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:M=!0,hoverZoneWidth:_=16,showOnViewportEnter:B=!0}=Q,A=0,L=0,b=0,N=0,V=!1,E=!1,F=0,O=0,k=0,G=null,w=!1,U=null,C=null,W=Y?"width":"height",y=Y?"translateX":"translateY",x=Y?(t)=>t.clientX:(t)=>t.clientY,n=Y?"left":"top",d=document.createElement("div"),e=document.createElement("div"),i=M?document.createElement("div"):null,H=()=>{if(d.className=`${j}-scrollbar`,e.className=`${j}-scrollbar-thumb`,Y)d.classList.add(`${j}-scrollbar--horizontal`);if(d.appendChild(e),J.appendChild(d),i){if(i.className=`${j}-scrollbar-hover`,Y)i.classList.add(`${j}-scrollbar-hover--horizontal`),i.style.height=`${_}px`;else i.style.width=`${_}px`;J.appendChild(i)}},v=()=>{if(G)clearTimeout(G),G=null},I=()=>{if(!$)return;v(),G=setTimeout(z,q)},p=()=>{if(A<=L)return;if(v(),!w)d.classList.add(`${j}-scrollbar--visible`),w=!0;if($&&!V&&!E)I()},z=()=>{if(V||E)return;d.classList.remove(`${j}-scrollbar--visible`),w=!1},T=(t,Jj)=>{A=t,L=Jj;let R=A>L;if(d.style.display=R?"":"none",!R){z();return}let S=L/A;b=Math.max(Z,S*L),e.style[W]=`${b}px`,N=L-b,u(k)},u=(t)=>{if(k=t,A<=L||N<=0)return;let Jj=A-L,S=Math.min(1,Math.max(0,t/Jj))*N;e.style.transform=`${y}(${S}px)`},h=(t)=>{if(t.target===e)return;let Jj=d.getBoundingClientRect(),s=x(t)-Jj[n]-b/2,g=Math.max(0,Math.min(s,N))/N,$j=A-L,qj=g*$j;X(qj),p()},c=(t)=>{t.preventDefault(),t.stopPropagation(),V=!0,F=x(t),O=k,v(),d.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",a),document.addEventListener("mouseup",Xj)},a=(t)=>{if(!V)return;let Jj=x(t)-F,R=N>0?Jj/N:0,S=A-L,s=R*S,jj=Math.max(0,Math.min(O+s,S)),$j=jj/S*N;if(e.style.transform=`${y}(${$j}px)`,C=jj,U===null)U=requestAnimationFrame(()=>{if(C!==null)X(C);U=null})},Xj=()=>{if(V=!1,U!==null)cancelAnimationFrame(U),U=null;if(C!==null)X(C),C=null;if(d.classList.remove(`${j}-scrollbar--dragging`),$&&!E)I();document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj)},Bj=()=>{if(B)p()},m=()=>{if(!V){if(E=!1,$)I()}},Yj=()=>{E=!0,v(),p()},o=()=>{if(E=!1,!V&&$)I()},Qj=()=>{if(v(),U!==null)cancelAnimationFrame(U),U=null;if(d.removeEventListener("click",h),d.removeEventListener("mouseenter",Yj),d.removeEventListener("mouseleave",o),e.removeEventListener("mousedown",c),J.removeEventListener("mouseenter",Bj),J.removeEventListener("mouseleave",m),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj),i){if(i.removeEventListener("mouseenter",Yj),i.removeEventListener("mouseleave",o),i.parentNode)i.parentNode.removeChild(i)}if(d.parentNode)d.parentNode.removeChild(d)};if(H(),d.addEventListener("click",h),d.addEventListener("mouseenter",Yj),d.addEventListener("mouseleave",o),e.addEventListener("mousedown",c),J.addEventListener("mouseenter",Bj),J.addEventListener("mouseleave",m),i)i.addEventListener("mouseenter",Yj),i.addEventListener("mouseleave",o);return{show:p,hide:z,updateBounds:T,updatePosition:u,isVisible:()=>w,destroy:Qj}};var cJ=(J)=>{let X=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:$,horizontal:q}=Y;if(X=vj(j.viewport,(_)=>Q.scrollController.scrollTo(_),J??{},$,q),!j.viewport.classList.contains(`${$}-viewport--custom-scrollbar`))j.viewport.classList.add(`${$}-viewport--custom-scrollbar`);let Z=Q.getCachedCompression();X.updateBounds(Z.virtualHeight,Q.state.viewportState.containerHeight);let M=X;Q.afterScroll.push((_,B)=>{M.updatePosition(_),M.show()}),Q.resizeHandlers.push((_,B)=>{if(M){let A=Q.getCachedCompression();M.updateBounds(A.virtualHeight,Q.state.viewportState.containerHeight)}}),Q.contentSizeHandlers.push(()=>{if(M){let _=Q.getCachedCompression();M.updateBounds(_.virtualHeight,Q.state.viewportState.containerHeight)}}),Q.destroyHandlers.push(()=>{if(M)M.destroy()})},destroy(){if(X)X.destroy(),X=null}}};ej();var lJ=()=>{let J=null,X=0,Q=!1;return{name:"withScale",priority:20,setup(j){let{dom:Y,config:$}=j,{classPrefix:q,horizontal:Z}=$,M=()=>{let B=j.getVirtualTotal(),A=Lj(B,j.heightCache);if(A.isCompressed&&!Q){Q=!0,j.scrollController.enableCompression(A),j.updateContentSize(A.virtualHeight),j.setScrollFns(()=>X,(V)=>{X=V});let L=Y.viewport,b=(V)=>{V.preventDefault();let E=A.virtualHeight-j.state.viewportState.containerHeight;X=Math.max(0,Math.min(X+V.deltaY,E)),j.scrollController.scrollTo(X)};if(L.addEventListener("wheel",b,{passive:!1}),j.destroyHandlers.push(()=>{L.removeEventListener("wheel",b)}),!Y.viewport.querySelector(`.${q}-scrollbar-track`)){if(J=vj(Y.viewport,(E)=>j.scrollController.scrollTo(E),{},q,Z),!Y.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))Y.viewport.classList.add(`${q}-viewport--custom-scrollbar`);J.updateBounds(A.virtualHeight,j.state.viewportState.containerHeight);let V=J;j.afterScroll.push((E,F)=>{if(V)V.updatePosition(E),V.show()}),j.resizeHandlers.push((E,F)=>{if(V){let O=j.getCachedCompression();V.updateBounds(O.virtualHeight,j.state.viewportState.containerHeight)}})}}else if(!A.isCompressed&&Q)Q=!1,j.scrollController.disableCompression(),j.updateContentSize(A.actualHeight);else if(A.isCompressed)j.scrollController.updateConfig({compression:A}),j.updateContentSize(A.virtualHeight);if(J)J.updateBounds(A.virtualHeight,j.state.viewportState.containerHeight);j.state.cachedCompression={state:A,totalItems:B}};j.updateCompressionMode=M;let _=j.getCachedCompression.bind(j);j.getCachedCompression=()=>{if(j.state.cachedCompression)return j.state.cachedCompression.state;return _()},j.setVisibleRangeFn((B,A,L,b,N)=>{let V=Lj(b,L);PJ(B,A,L,b,V,N)}),j.setScrollToPosFn((B,A,L,b,N)=>{let V=Lj(b,A);return bJ(B,A,L,b,V,N)}),j.setPositionElementFn((B,A)=>{let L=j.getVirtualTotal(),b=Lj(L,j.heightCache);if(b.isCompressed){let N=Math.round(Ij(A,j.scrollController.getScrollTop(),j.heightCache,L,j.state.viewportState.containerHeight,b)),V=j.config.horizontal;B.style.transform=V?`translateX(${N}px)`:`translateY(${N}px)`}else{let N=Math.round(j.heightCache.getOffset(A)),V=j.config.horizontal;B.style.transform=V?`translateX(${N}px)`:`translateY(${N}px)`}}),M(),j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null})},destroy(){if(J)J.destroy(),J=null}}};var sJ=()=>{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(),Y=J.methods.get("getSelected"),$=Y&&Y().length>0?Y():void 0;if(j===0){let _={index:0,offsetInItem:0};if($)_.selectedIds=$;return _}let q,Z;if(Q.isCompressed){let B=X/Q.virtualHeight*j;q=Math.max(0,Math.min(Math.floor(B),j-1)),Z=(B-q)*J.heightCache.getHeight(q)}else q=J.heightCache.indexAtOffset(X),Z=X-J.heightCache.getOffset(q);Z=Math.max(0,Z);let M={index:q,offsetInItem:Z};if($)M.selectedIds=$;return M}),J.methods.set("restoreScroll",(X)=>{let{index:Q,offsetInItem:j,selectedIds:Y}=X,$=J.getCachedCompression(),q=J.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min(Q,q-1)),M;if($.isCompressed){let B=J.heightCache.getHeight(Z),A=B>0?j/B:0;M=(Z+A)/q*$.virtualHeight}else M=J.heightCache.getOffset(Z)+j;let _=Math.max(0,$.virtualHeight-J.state.viewportState.containerHeight);if(M=Math.max(0,Math.min(M,_)),J.scrollController.scrollTo(M),Y&&Y.length>0){let B=J.methods.get("select");if(B)B(...Y)}})}}};var rJ=(J={})=>{let{chunkSize:X=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,$=new Map,q=0,Z=0,M=(H)=>{let v=$.get(H);if(!v)v={items:Array(X),count:0,lastAccess:Date.now()},$.set(H,v);else v.lastAccess=Date.now();return v},_=(H)=>{return Math.floor(H/X)},B=(H)=>{return H%X},A=()=>q,L=(H)=>{q=H},b=(H)=>{if(H<0||H>=q)return;let v=_(H),I=$.get(v);if(!I)return;return I.items[B(H)]},N=(H)=>{if(H<0||H>=q)return!1;let v=_(H),I=$.get(v);if(!I)return!1;return I.items[B(H)]!==void 0},V=(H,v)=>{let I=_(H),p=M(I),z=B(H),T=p.items[z]===void 0;if(p.items[z]=v,T)p.count++,Z++;if(H>=q)q=H+1},E=(H,v)=>{for(let I=0;I<v.length;I++){let p=v[I];if(p!==void 0)V(H+I,p)}},F=(H)=>{if(H<0||H>=q)return!1;let v=_(H),I=$.get(v);if(!I)return!1;let p=B(H);if(I.items[p]===void 0)return!1;if(I.items[p]=void 0,I.count--,Z--,I.count===0)$.delete(v);return!0},O=(H,v)=>{let I=[];for(let p=H;p<=v&&p<q;p++)I.push(b(p));return I},k=(H,v)=>{for(let I=H;I<=v&&I<q;I++)if(!N(I))return!1;return!0},G=()=>{let H=[],v=null,I=Array.from($.keys()).sort((p,z)=>p-z);for(let p of I){let z=$.get(p);if(!z)continue;let T=p*X;for(let u=0;u<X;u++){let h=T+u;if(h>=q)break;if(z.items[u]!==void 0)if(v===null)v={start:h,end:h};else if(h===v.end+1)v.end=h;else H.push(v),v={start:h,end:h};else if(v!==null)H.push(v),v=null}}if(v!==null)H.push(v);return H},w=(H,v)=>{let I=[],p=null;for(let z=H;z<=v&&z<q;z++)if(!N(z))if(p===null)p={start:z,end:z};else p.end=z;else if(p!==null)I.push(p),p=null;if(p!==null)I.push(p);return I},U=(H)=>{return $.has(H)},C=(H)=>{let v=$.get(H);if(v)v.lastAccess=Date.now()},W=(H,v)=>{if(H>v||$.size===0)return;let I=Date.now(),p=_(Math.max(0,H)),z=_(Math.min(q-1,v));for(let T=p;T<=z;T++){let u=$.get(T);if(u)u.lastAccess=I}},y=(H,v)=>{if(Z<=Q)return 0;let I=Math.max(0,H-j),p=Math.min(q-1,v+j),z=_(I),T=_(p),u=0,h=[];for(let[c,a]of $)if(c<z||c>T)u+=a.count,h.push(c),Z-=a.count,$.delete(c);if(u>0&&Y)Y(u,h);return u},x=()=>{if(Z<=Q)return 0;let H=Array.from($.entries()).sort(([,p],[,z])=>p.lastAccess-z.lastAccess),v=0,I=[];for(let[p,z]of H){if(Z<=Q)break;v+=z.count,Z-=z.count,I.push(p),$.delete(p)}if(v>0&&Y)Y(v,I);return v},n=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:$.size,chunkSize:X,maxCachedItems:Q,memoryEfficiency:q>0?1-Z/q:1}},d=()=>Z,e=()=>{$.clear(),Z=0};return{chunkSize:X,maxCachedItems:Q,getTotal:A,setTotal:L,get:b,has:N,set:V,setRange:E,delete:F,getRange:O,isRangeLoaded:k,getLoadedRanges:G,findUnloadedRanges:w,getChunkIndex:_,isChunkLoaded:U,touchChunk:C,touchChunksForRange:W,evictDistant:y,evictToLimit:x,getStats:n,getCachedCount:d,clear:e,reset:()=>{e(),q=0}}},g2=(J)=>{if(J.length===0)return[];let X=[...J].sort((j,Y)=>j.start-Y.start),Q=[{...X[0]}];for(let j=1;j<X.length;j++){let Y=X[j],$=Q[Q.length-1];if(Y.start<=$.end+1)$.end=Math.max($.end,Y.end);else Q.push({...Y})}return Q},aJ=(J,X,Q)=>{let j=Math.floor(J.start/Q)*Q,Y=Math.ceil((J.end+1)/Q)*Q-1,$={start:j,end:Y};if(X.length===0)return[$];let q=[],Z=g2(X),M=$.start;for(let _ of Z){if(_.end<M)continue;if(_.start>$.end)break;if(_.start>M)q.push({start:M,end:Math.min(_.start-1,$.end)});if(M=_.end+1,M>$.end)break}if(M<=$.end)q.push({start:M,end:$.end});return q};var nJ=(J={})=>{let{enabled:X=!0,maskCharacter:Q="█",randomVariance:j=!0,maxSampleSize:Y=20,customGenerator:$}=J,q=null,Z=!1,M=0,_=(F)=>{if(!X||Z||F.length===0)return;let O=new Map,k=new Map,G=Math.min(F.length,Y);for(let w=0;w<G;w++){let U=F[w];if(!U||typeof U!=="object")continue;for(let[C,W]of Object.entries(U)){if(C.startsWith("_")||C==="id")continue;if(!k.has(C))k.set(C,{lengths:[],types:new Set});let y=k.get(C),x=Array.isArray(W)?"array":typeof W;if(y.types.add(x),typeof W==="string")y.lengths.push(W.length);else if(W!==null&&W!==void 0)y.lengths.push(String(W).length)}}for(let[w,U]of k){if(U.lengths.length===0)continue;let C=Math.min(...U.lengths),W=Math.max(...U.lengths),y=Math.round(U.lengths.reduce((n,d)=>n+d,0)/U.lengths.length),x="string";if(U.types.has("number")&&U.types.size===1)x="number";else if(U.types.has("boolean")&&U.types.size===1)x="boolean";else if(U.types.has("array"))x="array";else if(U.types.has("object")&&!U.types.has("string"))x="object";O.set(w,{minLength:C,maxLength:W,avgLength:y,type:x})}q=O,Z=!0},B=()=>Z,A=(F)=>{let O=F.avgLength;if(j&&F.minLength!==F.maxLength){if(O=Math.floor(Math.random()*(F.maxLength-F.minLength+1)+F.minLength),Math.random()<0.3)O=Math.max(1,O+Math.floor(Math.random()*3)-1)}return Q.repeat(Math.max(1,O))},L=(F)=>{if($)return{...$(F),["_isPlaceholder"]:!0};let O={id:`__placeholder_${M++}`,["_isPlaceholder"]:!0,_index:F};if(!q||q.size===0)return O.label=Q.repeat(12),O;for(let[k,G]of q)switch(G.type){case"string":O[k]=A(G);break;case"number":O[k]=0;break;case"boolean":O[k]=!1;break;case"array":O[k]=[];break;case"object":O[k]={};break;default:O[k]=A(G)}return O};return{analyzeStructure:_,hasAnalyzedStructure:B,generate:L,generateRange:(F,O)=>{let k=[];for(let G=F;G<=O;G++)k.push(L(G));return k},isPlaceholder:(F)=>{if(!F||typeof F!=="object")return!1;return F._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,M=0}}},xj=(J)=>{if(!J||typeof J!=="object")return!1;return J._isPlaceholder===!0};var d2=50,oJ=(J={})=>{let{adapter:X,initialItems:Q,initialTotal:j,storage:Y,placeholder:$,pageSize:q=d2,onStateChange:Z,onItemsLoaded:M,onItemsEvicted:_}=J,B=rJ({...Y,onEvict:(R,S)=>{_?.(R),G()}}),A=null,L=()=>{if(!A)A=nJ($);return A},b=new Map,N=!1,V,E=!0,F,O=[],k=new Map,G=()=>{Z?.(e())},w=()=>{b.clear();let R=B.getLoadedRanges();for(let S of R)for(let s=S.start;s<=S.end;s++){let jj=B.get(s);if(jj&&!xj(jj))b.set(jj.id,s)}},U=(R,S)=>{if(!xj(S))b.set(S.id,R)},C=(R)=>{b.delete(R)},W=(R,S)=>{return`${R}-${S}`},y=()=>B.getTotal(),x=()=>B.getCachedCount(),n=()=>N,d=()=>E,e=()=>({total:B.getTotal(),cached:B.getCachedCount(),isLoading:N,pendingRanges:O,error:V,hasMore:E,cursor:F}),i=()=>B,H=()=>L(),v=(R)=>{let S=B.get(R);if(S!==void 0)return S;if(R>=0&&R<B.getTotal())return L().generate(R);return},I=(R)=>{let S=b.get(R);if(S===void 0)return;return B.get(S)},p=(R)=>{return b.get(R)??-1},z=(R)=>{let S=B.get(R);return S!==void 0&&!xj(S)},T=(R,S)=>{let s=[],jj=B.getTotal(),g=0,$j=0;B.touchChunksForRange(R,Math.min(S,jj-1));for(let qj=R;qj<=S&&qj<jj;qj++){let Mj=B.get(qj);if(Mj!==void 0)s.push(Mj),g++;else s.push(L().generate(qj)),$j++}return s},u=(R)=>{B.setTotal(R),E=B.getCachedCount()<R,G()},h=(R,S=0,s)=>{if(A&&!A.hasAnalyzedStructure()&&R.length>0)A.analyzeStructure(R);for(let jj=0;jj<R.length;jj++){let g=R[jj];if(g!==void 0){let $j=S+jj;B.set($j,g),U($j,g)}}if(s!==void 0)B.setTotal(s);else if(S+R.length>B.getTotal())B.setTotal(S+R.length);E=B.getCachedCount()<B.getTotal(),M?.(R,S,B.getTotal()),G()},c=(R,S)=>{let s=b.get(R);if(s===void 0)return!1;let jj=B.get(s);if(!jj)return!1;let g={...jj,...S};if(B.set(s,g),S.id!==void 0&&S.id!==R)C(R),U(s,g);return G(),!0},a=(R)=>{let S=b.get(R);if(S===void 0)return!1;B.delete(S),C(R);let s=B.getTotal();if(s>0)B.setTotal(s-1);return G(),!0},Xj=async(R,S)=>{if(!X)return;let s=W(R,S);if(k.has(s))return;let jj=B.getLoadedRanges(),g=aJ({start:R,end:S},jj,B.chunkSize);if(g.length===0)return;let $j=B.chunkSize,qj=[];for(let Uj of g){let Kj=Math.floor(Uj.start/$j),_j=Math.floor(Uj.end/$j);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*$j,Wj=Gj+$j-1,bj=W(Gj,Wj);if(!qj.some((Fj)=>Fj.start===Gj)&&!k.has(bj))qj.push({start:Gj,end:Wj})}}let Mj=[];for(let Uj of g){let Kj=Math.floor(Uj.start/$j),_j=Math.floor(Uj.end/$j);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*$j,Wj=Gj+$j-1,bj=W(Gj,Wj);if(k.has(bj)){let Fj=k.get(bj);if(!Mj.includes(Fj))Mj.push(Fj)}}}for(let Uj of qj){let Kj=W(Uj.start,Uj.end),_j=(async()=>{O.push(Uj),N=!0,V=void 0,G();try{let Zj=Uj.end-Uj.start+1,Gj={offset:Uj.start,limit:Zj,cursor:void 0},Wj=await X.read(Gj);if(h(Wj.items,Uj.start,Wj.total),Wj.cursor)F=Wj.cursor;if(Wj.hasMore!==void 0)E=Wj.hasMore;else if(Wj.total!==void 0)E=B.getCachedCount()<Wj.total}catch(Zj){V=Zj instanceof Error?Zj:Error(String(Zj))}finally{k.delete(Kj),O=O.filter((Zj)=>Zj.start!==Uj.start||Zj.end!==Uj.end),N=k.size>0,G()}})();k.set(Kj,_j),Mj.push(_j)}await Promise.all(Mj)},Bj=async(R,S)=>{if(B.isRangeLoaded(R,S))return;await Xj(R,S)},m=async()=>{if(!X)return;await Xj(0,q-1)},Yj=async()=>{if(!X||N||!E)return!1;let R=B.getCachedCount(),S=B.getTotal(),s=R,jj=Math.min(s+q-1,S>0?S-1:s+q-1);if(s>=S&&S>0)return E=!1,!1;return await Xj(s,jj),B.getCachedCount()>R},o=async()=>{if(B.clear(),b.clear(),A)A.clear();F=void 0,E=!0,V=void 0,G(),await m()},Qj=(R,S)=>{if(B.evictDistant(R,S)>0)w()},t=()=>{B.clear(),b.clear(),F=void 0,V=void 0,O=[],N=!1,G()},Jj=()=>{if(B.reset(),b.clear(),A)A.clear();F=void 0,E=!0,V=void 0,O=[],N=!1,G()};if(Q&&Q.length>0)h(Q,0,j??Q.length);else if(j!==void 0)B.setTotal(j);return{getState:e,getTotal:y,getCached:x,getIsLoading:n,getHasMore:d,getStorage:i,getPlaceholders:H,getItem:v,getItemById:I,getIndexById:p,isItemLoaded:z,getItemsInRange:T,setTotal:u,setItems:h,updateItem:c,removeItem:a,loadRange:Xj,ensureRange:Bj,loadInitial:m,loadMore:Yj,reload:o,evictDistant:Qj,clear:t,reset:Jj}};var iJ=(J)=>{let{adapter:X,loading:Q}=J,j=Q?.cancelThreshold??FJ,Y=Q?.preloadThreshold??LJ,$=Q?.preloadAhead??OJ;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,M=q.config.reverse,_=q.config.overscan,B=oJ({adapter:X,pageSize:wj,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=$J(q.state.viewportState,q.heightCache,q.getVirtualTotal(),_,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(F,O,k)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:F,total:k})}});q.replaceDataManager(B);let A=null,L=null,b=0,N=()=>{if(L){let F=L;L=null,q.dataManager.ensureRange(F.start,F.end).catch((O)=>{Z.emit("error",{error:O,context:"ensureRange"})})}};q.afterScroll.push((F,O)=>{if(q.state.isDestroyed)return;let k=q.scrollController.getVelocity(),w=q.scrollController.isTracking()&&k<=j;if(L&&b>j&&k<=j){let W=L;L=null,q.dataManager.ensureRange(W.start,W.end).catch((y)=>{Z.emit("error",{error:y,context:"ensureRange"})})}if(b=k,w&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(M){if(F<nj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:wj}),q.dataManager.loadMore().catch((W)=>{Z.emit("error",{error:W,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-F-q.state.viewportState.containerHeight<nj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:wj}),q.dataManager.loadMore().catch((y)=>{Z.emit("error",{error:y,context:"loadMore"})})}let{renderRange:U}=q.state.viewportState;if(!A||U.start!==A.start||U.end!==A.end)if(A={start:U.start,end:U.end},w){L=null;let{start:W,end:y}=U,x=q.getVirtualTotal();if(k>Y)if(O==="down")y=Math.min(U.end+$,x-1);else W=Math.max(U.start-$,0);q.dataManager.ensureRange(W,y).catch((n)=>{Z.emit("error",{error:n,context:"ensureRange"})})}else L={start:U.start,end:U.end}});let V=200,E=null;q.afterScroll.push((F,O)=>{if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,N()},V)}),q.destroyHandlers.push(()=>{if(E!==null)clearTimeout(E),E=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:wj}),q.dataManager.loadInitial().catch((F)=>{Z.emit("error",{error:F,context:"loadInitial"})})}}};var tJ=()=>{let J=null;return{name:"withPage",priority:5,setup(X){let{dom:Q,state:j,config:Y,emitter:$}=X;Q.root.style.overflow="visible",Q.root.style.height="auto",Q.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let _=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-_.left);else return Math.max(0,-_.top)},(_)=>{let B=Q.viewport.getBoundingClientRect();if(Y.horizontal){let A=B.left+window.scrollX;window.scrollTo(A+_,window.scrollY)}else{let A=B.top+window.scrollY;window.scrollTo(window.scrollX,A+_)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,M=()=>{let{innerWidth:_,innerHeight:B}=window,A=Y.horizontal?_:B,L=Y.horizontal?Z:q;if(Math.abs(A-L)<=1)return;q=B,Z=_,j.viewportState.containerHeight=B,$.emit("resize",{width:_,height:B});for(let b=0;b<X.resizeHandlers.length;b++)X.resizeHandlers[b](_,B);X.renderIfNeeded()};window.addEventListener("resize",M,{passive:!0}),J=()=>{window.removeEventListener("resize",M)},X.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var B6=(J)=>{let X=aj(J);if(J.scroll?.element===window)X=X.use(tJ());if(J.adapter)X=X.use(iJ({adapter:J.adapter,...J.loading&&{loading:J.loading}}));if(J.layout==="grid"){if(!J.grid)throw Error("[vlist/builder] grid configuration is required when layout is 'grid'");if(!J.grid.columns||J.grid.columns<1)throw Error("[vlist/builder] grid.columns must be a positive integer >= 1");let q={columns:J.grid.columns};if(J.grid.gap!==void 0)q.gap=J.grid.gap;X=X.use(TJ(q))}if(J.groups){if(J.direction==="horizontal")throw Error("[vlist/builder] horizontal direction cannot be combined with groups");let q={getGroupForIndex:J.groups.getGroupForIndex,headerHeight:typeof J.groups.headerHeight==="function"?J.groups.headerHeight("",0):J.groups.headerHeight,headerTemplate:J.groups.headerTemplate};if(J.groups.sticky!==void 0)q.sticky=J.groups.sticky;X=X.use(fJ(q))}let Q=J.selection?.mode||"none";if(Q!=="none"){let q={mode:Q};if(J.selection?.initial!==void 0)q.initial=J.selection.initial;X=X.use(UJ(q))}else X=X.use(UJ({mode:"none"}));X=X.use(lJ());let j=J.scroll?.scrollbar||J.scrollbar;if(!(j==="none"||typeof j==="object"&&("enabled"in j)&&j.enabled===!1)){let q=typeof j==="object"?j:{};X=X.use(cJ(q))}X=X.use(sJ());let $=X.build();return $.update=(q)=>{if(q.grid&&$.updateGrid)$.updateGrid(q.grid);if(q.selectionMode!==void 0&&$.setSelectionMode)$.setSelectionMode(q.selectionMode);if(q.itemHeight!==void 0)console.warn("[vlist] Updating itemHeight via update() is not yet supported with the builder pattern. Please recreate the instance or use the full API from 'vlist/full'.");if(q.overscan!==void 0)console.warn("[vlist] Updating overscan via update() is not yet supported with the builder pattern.")},$};export{B6 as createVList};