@floor/vlist 0.5.4 → 0.5.6

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