@floor/vlist 0.5.8 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +787 -611
- package/dist/async/index.js +1 -0
- package/dist/builder/context.d.ts +3 -3
- package/dist/builder/context.d.ts.map +1 -1
- package/dist/builder/core.d.ts +1 -1
- package/dist/builder/core.d.ts.map +1 -1
- package/dist/builder/types.d.ts +3 -3
- package/dist/builder/types.d.ts.map +1 -1
- package/dist/core/full.d.ts +22 -0
- package/dist/core/full.d.ts.map +1 -0
- package/dist/core/lite.d.ts +129 -0
- package/dist/core/lite.d.ts.map +1 -0
- package/dist/core/minimal.d.ts +104 -0
- package/dist/core/minimal.d.ts.map +1 -0
- package/dist/features/async/index.d.ts +9 -0
- package/dist/features/async/index.d.ts.map +1 -0
- package/dist/features/async/manager.d.ts +103 -0
- package/dist/features/async/manager.d.ts.map +1 -0
- package/dist/features/async/placeholder.d.ts +62 -0
- package/dist/features/async/placeholder.d.ts.map +1 -0
- package/dist/features/async/plugin.d.ts +60 -0
- package/dist/features/async/plugin.d.ts.map +1 -0
- package/dist/features/async/sparse.d.ts +91 -0
- package/dist/features/async/sparse.d.ts.map +1 -0
- package/dist/features/grid/index.d.ts +9 -0
- package/dist/features/grid/index.d.ts.map +1 -0
- package/dist/features/grid/layout.d.ts +29 -0
- package/dist/features/grid/layout.d.ts.map +1 -0
- package/dist/features/grid/plugin.d.ts +48 -0
- package/dist/features/grid/plugin.d.ts.map +1 -0
- package/dist/features/grid/renderer.d.ts +55 -0
- package/dist/features/grid/renderer.d.ts.map +1 -0
- package/dist/features/grid/types.d.ts +71 -0
- package/dist/features/grid/types.d.ts.map +1 -0
- package/dist/features/page/index.d.ts +8 -0
- package/dist/features/page/index.d.ts.map +1 -0
- package/dist/features/page/plugin.d.ts +53 -0
- package/dist/features/page/plugin.d.ts.map +1 -0
- package/dist/features/scale/index.d.ts +10 -0
- package/dist/features/scale/index.d.ts.map +1 -0
- package/dist/features/scale/plugin.d.ts +42 -0
- package/dist/features/scale/plugin.d.ts.map +1 -0
- package/dist/features/scrollbar/controller.d.ts +121 -0
- package/dist/features/scrollbar/controller.d.ts.map +1 -0
- package/dist/features/scrollbar/index.d.ts +8 -0
- package/dist/features/scrollbar/index.d.ts.map +1 -0
- package/dist/features/scrollbar/plugin.d.ts +60 -0
- package/dist/features/scrollbar/plugin.d.ts.map +1 -0
- package/dist/features/scrollbar/scrollbar.d.ts +73 -0
- package/dist/features/scrollbar/scrollbar.d.ts.map +1 -0
- package/dist/features/sections/index.d.ts +10 -0
- package/dist/features/sections/index.d.ts.map +1 -0
- package/dist/features/sections/layout.d.ts +46 -0
- package/dist/features/sections/layout.d.ts.map +1 -0
- package/dist/features/sections/plugin.d.ts +64 -0
- package/dist/features/sections/plugin.d.ts.map +1 -0
- package/dist/features/sections/sticky.d.ts +33 -0
- package/dist/features/sections/sticky.d.ts.map +1 -0
- package/dist/features/sections/types.d.ts +86 -0
- package/dist/features/sections/types.d.ts.map +1 -0
- package/dist/features/selection/index.d.ts +7 -0
- package/dist/features/selection/index.d.ts.map +1 -0
- package/dist/features/selection/plugin.d.ts +44 -0
- package/dist/features/selection/plugin.d.ts.map +1 -0
- package/dist/features/selection/state.d.ts +102 -0
- package/dist/features/selection/state.d.ts.map +1 -0
- package/dist/features/snapshots/index.d.ts +8 -0
- package/dist/features/snapshots/index.d.ts.map +1 -0
- package/dist/features/snapshots/plugin.d.ts +44 -0
- package/dist/features/snapshots/plugin.d.ts.map +1 -0
- package/dist/grid/index.js +1 -1
- package/dist/index.d.ts +17 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/page/index.js +1 -0
- package/dist/react/index.js +1 -1
- package/dist/rendering/heights.d.ts +63 -0
- package/dist/rendering/heights.d.ts.map +1 -0
- package/dist/rendering/index.d.ts +9 -0
- package/dist/rendering/index.d.ts.map +1 -0
- package/dist/rendering/renderer.d.ts +103 -0
- package/dist/rendering/renderer.d.ts.map +1 -0
- package/dist/rendering/scale.d.ts +116 -0
- package/dist/rendering/scale.d.ts.map +1 -0
- package/dist/rendering/viewport.d.ts +139 -0
- package/dist/rendering/viewport.d.ts.map +1 -0
- package/dist/scale/index.js +1 -0
- package/dist/scrollbar/index.js +1 -0
- package/dist/sections/index.js +1 -0
- package/dist/selection/index.js +1 -1
- package/dist/svelte/index.js +1 -1
- package/dist/vue/index.js +1 -1
- package/package.json +1 -51
package/dist/svelte/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var{defineProperty:sj,getOwnPropertyNames:E2,getOwnPropertyDescriptor:F2}=Object,L2=Object.prototype.hasOwnProperty;var GJ=new WeakMap,O2=(J)=>{var X=GJ.get(J),$;if(X)return X;if(X=sj({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")E2(J).map((j)=>!L2.call(X,j)&&sj(X,j,{get:()=>J[j],enumerable:!($=F2(J,j))||$.enumerable}));return GJ.set(J,X),X};var z2=(J,X)=>{for(var $ in X)sj(J,$,{get:X[$],enumerable:!0,configurable:!0,set:(j)=>X[$]=()=>j})};var MJ=(J,X)=>()=>(J&&(X=J(J=0)),X);var oj=200,Tj=50,FJ=15,LJ=2,OJ=50,nj=16000000;var zJ=(J,X,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil($/J.getHeight(0));let Y=0,Q=0,q=X;while(q<j&&Q<$)Q+=J.getHeight(q),Y++,q++;return Math.max(1,Y)},ij=(J,X,$)=>{if($===0)return 0;if(!J.isVariable())return Math.floor(X/J.getHeight(0));let j=0,Y=0;for(let Q=$-1;Q>=0;Q--){let q=J.getHeight(Q);if(Y+q>X)break;Y+=q,j++}return Math.max(j,1)},tj=(J,X,$)=>{if($===0)return 0;let j=Math.floor(X),Y=X-j,Q=Math.max(0,Math.min(j,$-1));return J.getOffset(Q)+Y*J.getHeight(Q)};var Lj=(J,X)=>{let $=X.getTotalHeight(),j=$>nj,Y=j?nj:$,Q=$>0?Y/$:1;return{isCompressed:j,actualHeight:$,virtualHeight:Y,ratio:Q}},PJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;if(!Y.isCompressed){let N=$.indexAtOffset(J),D=$.indexAtOffset(J+X);if(D<j-1)D++;return Q.start=Math.max(0,N),Q.end=Math.min(j-1,Math.max(0,D)),Q}let{virtualHeight:q}=Y,M=J/q*j,_=Math.floor(M),B=zJ($,Math.max(0,_),X,j),A=Math.ceil(M)+B,b=q-X-J;if(b<=X&&b>=-1){let N=ij($,X,j),D=Math.max(0,j-N),E=Math.max(0,Math.min(1,1-b/X));_=Math.floor(_+(D-_)*E),A=b<=1?j-1:Math.min(j-1,_+B)}return Q.start=Math.max(0,_),Q.end=Math.min(j-1,Math.max(0,A)),Q},Ij=(J,X,$,j,Y,Q,q)=>{if(!Q.isCompressed||j===0)return $.getOffset(J);let{virtualHeight:Z}=Q,M=Z-Y,_=M-X;if(_<=Y&&_>=-1){if(X>=M-1){let k=$.getTotalHeight()-$.getOffset(J);return Y-k}let L=ij($,Y,j),b=Math.max(0,j-L),D=X/Z*j,E=Math.max(0,Math.min(1,1-_/Y)),F=$.getOffset(J)-$.getOffset(b),O=$.getOffset(J)-tj($,D,j);return O+(F-O)*E}let A=X/Z*j;return $.getOffset(J)-tj($,A,j)},bJ=(J,X,$,j,Y,Q="start")=>{if(j===0)return 0;let q;if(Y.isCompressed){if(Q==="end"&&J===j-1)return Math.max(0,Y.virtualHeight-$);q=J/j*Y.virtualHeight}else q=X.getOffset(J);let Z=X.getHeight(J);switch(Q){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let M=Y.virtualHeight-$;return Math.max(0,Math.min(q,M))};var ej=()=>{};var Rj=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var kJ={};z2(kJ,{createGridRenderer:()=>jJ});var u2=(J=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:(Q)=>{if(X.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-row"),Q.removeAttribute("data-col"),X.push(Q)},clear:()=>{X.length=0}}},jJ=(J,X,$,j,Y,Q,q,Z)=>{let M=u2(),_=new Map,B=Q,A=!1,L=null,b=0,N="",D=(z)=>{if(L&&b===z)return L;return L=Lj(z,$),b=z,L},E={selected:!1,focused:!1},F=(z,R)=>{return E.selected=z,E.focused=R,E},O=`${Y}-item ${Y}-grid-item`,k=`${Y}-item--selected`,G=`${Y}-item--focused`,T=(z,R)=>{if(typeof R==="string")z.innerHTML=R;else z.replaceChildren(R)},U=(z,R,u)=>{z.classList.toggle(k,R),z.classList.toggle(G,u)},C=(z,R)=>{let u=j.getRow(z);if(R){let h=R.totalItems,c=D(h);if(c.isCompressed)return Ij(u,R.scrollTop,$,h,R.containerHeight,c,R.rangeStart)}return $.getOffset(u)},W=(z,R,u)=>{let h=z.dataset.id?.startsWith("__group_header"),c=h?0:j.getCol(R),a=h?0:j.getColumnOffset(c,B),Xj;if(A){let Bj=j.getRow(R),m=0,Yj=new Set;for(let n=0;n<R;n++){let $j=j.getRow(n);if($j<Bj&&!Yj.has($j)){let t=$.getHeight(n);m+=t,Yj.add($j)}}Xj=m}else Xj=C(R,u);z.style.transform=`translate(${Math.round(a)}px, ${Math.round(Xj)}px)`},y=(z,R)=>{let u=z.dataset.id?.startsWith("__group_header"),h=u?B:j.getColumnWidth(B),c;if(A||u)c=$.getHeight(R)-j.gap;else{let a=j.getRow(R);c=$.getHeight(a)-j.gap}z.style.width=`${h}px`,z.style.height=`${c}px`},x=(z,R,u,h,c)=>{let a=M.acquire(),Xj=F(u,h);if(a.className=O,a.dataset.index=String(z),a.dataset.id=String(R.id),a.dataset.row=String(j.getRow(z)),a.dataset.col=String(j.getCol(z)),a.ariaSelected=String(u),Z)a.id=`${Z}-item-${z}`;if(q)N=String(q()),a.setAttribute("aria-setsize",N),a.setAttribute("aria-posinset",String(z+1));y(a,z);let Bj=X(R,z,Xj);return T(a,Bj),U(a,u,h),W(a,z,c),a},o=(z,R,u,h,c)=>{if(R.start===0&&z.length>0)A=Rj(z[0]);for(let[m,Yj]of _)if(m<R.start||m>R.end)Yj.element.remove(),M.release(Yj.element),_.delete(m);let a=!1;if(q){let m=String(q());a=m!==N,N=m}let Xj=document.createDocumentFragment(),Bj=[];for(let m=R.start;m<=R.end;m++){let Yj=m-R.start,n=z[Yj];if(!n){console.warn(`⚠️ RENDER: Missing item at index ${m} (range: ${R.start}-${R.end}, items.length: ${z.length})`);continue}let $j=u.has(n.id),t=m===h,Jj=_.get(m);if(Jj){let v=Jj.element.dataset.id,S=String(n.id);if(v!==S){let jj=F($j,t),g=X(n,m,jj);T(Jj.element,g),Jj.element.dataset.id=S,Jj.element.dataset.row=String(j.getRow(m)),Jj.element.dataset.col=String(j.getCol(m)),y(Jj.element,m)}if(U(Jj.element,$j,t),Jj.element.ariaSelected=String($j),W(Jj.element,m,c),a)Jj.element.setAttribute("aria-setsize",N)}else{let v=x(m,n,$j,t,c);Xj.appendChild(v),Bj.push({index:m,element:v})}}if(Bj.length>0){J.appendChild(Xj);for(let{index:m,element:Yj}of Bj)_.set(m,{index:m,element:Yj})}},d=(z)=>{for(let[R,u]of _)W(u.element,R,z)},e=(z,R,u,h)=>{let c=_.get(z);if(c){let a=F(u,h),Xj=X(R,z,a);T(c.element,Xj),U(c.element,u,h),c.element.dataset.id=String(R.id),c.element.ariaSelected=String(u),y(c.element,z)}},i=(z,R,u)=>{let h=_.get(z);if(h)U(h.element,R,u)},H=(z)=>{return _.get(z)?.element},w=(z)=>{if(Math.abs(z-B)<1)return;B=z;for(let[R,u]of _)y(u.element,R),W(u.element,R)},I=()=>{for(let[,z]of _)z.element.remove(),M.release(z.element);_.clear()};return{render:o,updatePositions:d,updateItem:e,updateItemClasses:i,getElement:H,updateContainerWidth:w,clear:I,destroy:()=>{I(),M.clear()}}};var JJ=MJ(()=>{ej()});var P2=0,Pj=5,b2=100,rj=2,k2=(J=0)=>{let X=Array(Pj);for(let $=0;$<Pj;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},y2=(J,X)=>{let $=performance.now(),j=$-J.lastTime;if(j===0)return J;if(j>b2){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let Q=J.samples[0];return Q.position=X,Q.time=$,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=X,J.lastTime=$,J}let Y=J.samples[J.sampleIndex];if(Y.position=X,Y.time=$,J.sampleIndex=(J.sampleIndex+1)%Pj,J.sampleCount=Math.min(J.sampleCount+1,Pj),J.sampleCount>=rj){let Q=(J.sampleIndex-J.sampleCount+Pj)%Pj,q=J.samples[Q],Z=X-q.position,M=$-q.time;J.velocity=M>0?Math.abs(Z)/M:0}return J.lastPosition=X,J.lastTime=$,J},AJ=(J,X)=>{if(typeof J==="number"){let Q=X;return{getOffset:(q)=>q*J,getHeight:()=>J,indexAtOffset:(q)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(q/J),Q-1))},getTotalHeight:()=>Q*J,getTotal:()=>Q,rebuild:(q)=>{Q=q},isVariable:()=>!1}}let $=X,j=new Float64Array(0),Y=(Q)=>{$=Q,j=new Float64Array(Q+1),j[0]=0;for(let q=0;q<Q;q++)j[q+1]=j[q]+J(q)};return Y(X),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return j[$];return j[Q]},getHeight:(Q)=>J(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=j[$])return $-1;let q=0,Z=$-1;while(q<Z){let M=q+Z+1>>>1;if(j[M]<=Q)q=M;else Z=M-1}return q},getTotalHeight:()=>j[$]??0,getTotal:()=>$,rebuild:(Q)=>Y(Q),isVariable:()=>!0}},H2=()=>{let J={},X=(Q,q)=>{if(!J[Q])J[Q]=new Set;return J[Q].add(q),()=>$(Q,q)},$=(Q,q)=>{J[Q]?.delete(q)};return{on:X,off:$,emit:(Q,q)=>{J[Q]?.forEach((Z)=>{try{Z(q)}catch(M){console.error(`[vlist] Error in "${Q}" handler:`,M)}})},clear:()=>{for(let Q in J)delete J[Q]}}},T2=(J)=>{if(typeof J==="string"){let X=document.querySelector(J);if(!X)throw Error(`[vlist/builder] Container not found: ${J}`);return X}return J},R2=(J,X,$,j)=>{let Y=document.createElement("div");if(Y.className=X,j)Y.classList.add(`${X}--horizontal`);if(Y.setAttribute("role","listbox"),Y.setAttribute("tabindex","0"),$)Y.setAttribute("aria-label",$);if(j)Y.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${X}-viewport`,j)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let q=document.createElement("div");if(q.className=`${X}-content`,q.style.position="relative",j)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${X}-items`,Z.style.position="relative",j)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),Q.appendChild(q),Y.appendChild(Q),J.appendChild(Y),{root:Y,viewport:Q,content:q,items:Z}},w2=(J=100)=>{let X=[];return{acquire:()=>{let $=X.pop();if($)return $;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:($)=>{if(X.length<J)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),X.push($)},clear:()=>{X.length=0}}},v2=(J,X,$,j,Y)=>{if(j===0||X===0){Y.start=0,Y.end=0;return}let Q=$.indexAtOffset(J),q=$.indexAtOffset(J+X);if(q<j-1)q++;Y.start=Math.max(0,Q),Y.end=Math.min(j-1,Math.max(0,q))},C2=(J,X,$,j)=>{if($===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X)},S2=(J,X,$,j,Y)=>{if(j===0)return 0;let Q=Math.max(0,Math.min(J,j-1)),q=X.getOffset(Q),Z=X.getHeight(Q),M=Math.max(0,X.getTotalHeight()-$),_;switch(Y){case"center":_=q-($-Z)/2;break;case"end":_=q-$+Z;break;default:_=q}return Math.max(0,Math.min(_,M))},f2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,I2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},aj=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let X=J.direction==="horizontal",$=X?"width":"height",j=X?J.item.width:J.item.height;if(j==null)throw Error(`[vlist/builder] item.${$} is required${X?" when direction is 'horizontal'":""}`);if(typeof j==="number"&&j<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof j!=="number"&&typeof j!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(X&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let Y=new Map,Q=!1,q={use(Z){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return Y.set(Z.name,Z),q},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,p2(J,Y,X,j)}};return q};function p2(J,X,$,j){let{item:Y,items:Q,overscan:q=3,classPrefix:Z="vlist",ariaLabel:M,reverse:_=!1,scroll:B}=J,A=B?.wheel??!0,L=B?.wrap??!1,b=_,N=`${Z}-${P2++}`,D=j,E=$?typeof Y.height==="number"?Y.height:void 0:typeof Y.width==="number"?Y.width:void 0,F=Y.template,O={overscan:q,classPrefix:Z,reverse:b,wrap:L,horizontal:$,ariaIdPrefix:N},k=Array.from(X.values()).sort((K,V)=>(K.priority??50)-(V.priority??50)),G=new Set(k.map((K)=>K.name));for(let K of k)if(K.conflicts){for(let V of K.conflicts)if(G.has(V))throw Error(`[vlist/builder] ${K.name} and ${V} cannot be combined`)}if($){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(b){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let T=T2(J.container),U=R2(T,Z,M,$),C=H2(),W=Q?[...Q]:[],y=AJ(D,W.length),x=w2(),o=U.viewport.clientHeight,d=U.viewport.clientWidth,e=!1,i=!1,H=0,w=null,I=null,p=k2(0),z={start:0,end:0},R={start:0,end:0},u={start:-1,end:-1},h={viewportState:{scrollTop:0,containerHeight:o,totalHeight:y.getTotalHeight(),actualHeight:y.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},c=new Map,a={selected:!1,focused:!1},Xj=`${Z}-item`,Bj="",m=new Map,Yj=()=>{m.clear();for(let K=0;K<W.length;K++){let V=W[K];if(V)m.set(V.id,K)}};Yj();let n=null,$j=()=>n?n.getTotal():W.length,t=[],Jj=[],v=[],S=[],s=[],jj=[],g=new Map,Qj=()=>{return $?U.viewport.scrollLeft:U.viewport.scrollTop},qj=(K)=>{if($)U.viewport.scrollLeft=K;else U.viewport.scrollTop=K},Mj=(K=2)=>{let V=y.getTotalHeight();return H+o>=V-K},Uj=!1,Kj,_j,Zj=(K,V,P,f,r)=>{v2(K,V,P,f,r)},Gj=(K,V,P,f,r)=>{return S2(K,V,P,f,r)},Wj=(K,V)=>{if(typeof V==="string")K.innerHTML=V;else K.replaceChildren(V)},Fj=(K,V)=>{let P=Math.round(y.getOffset(V));if($)K.style.transform=`translateX(${P}px)`;else K.style.transform=`translateY(${P}px)`},j2=(K,V)=>{let P=x.acquire();if(P.className=Xj,$){if(P.style.width=`${y.getHeight(K)}px`,E!=null)P.style.height=`${E}px`}else P.style.height=`${y.getHeight(K)}px`;return P.dataset.index=String(K),P.dataset.id=String(V.id),P.ariaSelected="false",P.id=`${N}-item-${K}`,Bj=String($j()),P.setAttribute("aria-setsize",Bj),P.setAttribute("aria-posinset",String(K+1)),Wj(P,F(V,K,a)),Fj(P,K),P},kj=()=>{let K=`${y.getTotalHeight()}px`;if($)U.content.style.width=K;else U.content.style.height=K},mj=new Set,gj=-1,J2=()=>{if(e)return;let K=$j();if(Zj(H,o,y,K,z),C2(z,q,K,R),R.start===u.start&&R.end===u.end)return;let V=String(K),P=V!==Bj;Bj=V;for(let[l,Dj]of c)if(l<R.start||l>R.end)Dj.remove(),x.release(Dj),c.delete(l);let f=document.createDocumentFragment(),r=[];for(let l=R.start;l<=R.end;l++){let Dj=n?n.getItem(l):W[l];if(!Dj)continue;let Vj=c.get(l);if(Vj){let Aj=Vj.dataset.id,Sj=String(Dj.id);if(Aj!==Sj)if(Wj(Vj,F(Dj,l,a)),Vj.dataset.id=Sj,$)Vj.style.width=`${y.getHeight(l)}px`;else Vj.style.height=`${y.getHeight(l)}px`;Fj(Vj,l);let fj=mj.has(Dj.id),A2=l===gj;if(Vj.classList.toggle(`${Z}-item--selected`,fj),Vj.classList.toggle(`${Z}-item--focused`,A2),Vj.ariaSelected=fj?"true":"false",P)Vj.setAttribute("aria-setsize",Bj)}else{let Aj=j2(l,Dj),Sj=mj.has(Dj.id),fj=l===gj;if(Sj)Aj.classList.add(`${Z}-item--selected`),Aj.ariaSelected="true";if(fj)Aj.classList.add(`${Z}-item--focused`);f.appendChild(Aj),r.push({index:l,element:Aj})}}if(r.length>0){U.items.appendChild(f);for(let{index:l,element:Dj}of r)c.set(l,Dj)}u.start=R.start,u.end=R.end,h.lastRenderRange.start=R.start,h.lastRenderRange.end=R.end,h.viewportState.scrollTop=H,h.viewportState.visibleRange.start=z.start,h.viewportState.visibleRange.end=z.end,h.viewportState.renderRange.start=R.start,h.viewportState.renderRange.end=R.end,C.emit("range:change",{range:{start:R.start,end:R.end}})},Q2=()=>{u.start=-1,u.end=-1,Kj()};Kj=J2,_j=Q2;let yj=()=>{if(e)return;let K=Qj(),V=K>=H?"down":"up";if(p=y2(p,K),!U.root.classList.contains(`${Z}--scrolling`))U.root.classList.add(`${Z}--scrolling`);H=K,Kj(),C.emit("scroll",{scrollTop:K,direction:V}),C.emit("velocity:change",{velocity:p.velocity,reliable:p.sampleCount>=rj});for(let P=0;P<t.length;P++)t[P](K,V);if(I)clearTimeout(I);I=setTimeout(()=>{U.root.classList.remove(`${Z}--scrolling`),p.velocity=0,p.sampleCount=0,C.emit("velocity:change",{velocity:0,reliable:!1})},B?.idleTimeout??150)},vj=null,zj=U.viewport;if(zj.addEventListener("scroll",yj,{passive:!0}),$&&A)vj=(K)=>{if(K.deltaX)return;K.preventDefault(),U.viewport.scrollLeft+=K.deltaY},U.viewport.addEventListener("wheel",vj);U.viewport.classList.add(`${Z}-viewport--custom-scrollbar`);let WJ=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=n?.getItem(f)??W[f];if(r){if(r.__groupHeader)return;C.emit("item:click",{item:r,index:f,event:K})}}}for(let f=0;f<Jj.length;f++)Jj[f](K)},$2=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=n?.getItem(f)??W[f];if(r){if(r.__groupHeader)return;C.emit("item:dblclick",{item:r,index:f,event:K})}}}},NJ=(K)=>{for(let V=0;V<v.length;V++)v[V](K)};U.items.addEventListener("click",WJ),U.items.addEventListener("dblclick",$2),U.root.addEventListener("keydown",NJ);let dj=!0,X2=()=>d,q2=()=>o,cj=new ResizeObserver((K)=>{if(e)return;for(let V of K){let P=V.contentRect.height,f=V.contentRect.width,r=$?f:P;if(d=f,Math.abs(r-o)>1){if(o=r,h.viewportState.containerHeight=r,i)kj(),Kj(),C.emit("resize",{height:P,width:f})}if(i)for(let l=0;l<S.length;l++)S[l](f,P)}});if(dj)cj.observe(U.viewport);let Nj={get dom(){return U},get heightCache(){return y},get emitter(){return C},get config(){return O},get rawConfig(){return J},get renderer(){return{render:(K,V,P,f,r)=>{mj=P,gj=f,_j()},updateItemClasses:(K,V,P)=>{let f=c.get(K);if(!f)return;f.classList.toggle(`${Z}-item--selected`,V),f.classList.toggle(`${Z}-item--focused`,P),f.ariaSelected=V?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(K)=>c.get(K)??null,clear:()=>{},destroy:()=>{}}},set renderer(K){},get dataManager(){return n},set dataManager(K){n=K},get scrollController(){return lj},set scrollController(K){lj=K},state:h,getContainerWidth(){return d},afterScroll:t,clickHandlers:Jj,keydownHandlers:v,resizeHandlers:S,contentSizeHandlers:s,destroyHandlers:jj,methods:g,replaceTemplate(K){F=K},replaceRenderer(K){},replaceDataManager(K){n=K},replaceScrollController(K){lj=K},getItemsForRange(K){let V=[];for(let P=K.start;P<=K.end;P++){let f=n?n.getItem(P):W[P];if(f)V.push(f)}return V},getAllLoadedItems(){if(n){let K=n.getTotal(),V=[];for(let P=0;P<K;P++){let f=n.getItem(P);if(f)V.push(f)}return V}return[...W]},getVirtualTotal(){return $j()},getCachedCompression(){return{isCompressed:!1,actualHeight:y.getTotalHeight(),virtualHeight:y.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:H,totalItems:$j(),containerHeight:o,rangeStart:R.start}},renderIfNeeded(){Kj()},forceRender(){_j()},getRenderFns(){return{renderIfNeeded:Kj,forceRender:_j}},setRenderFns(K,V){Kj=K,_j=V},setVirtualTotalFn(K){$j=K},rebuildHeightCache(K){y.rebuild(K??$j())},setHeightConfig(K){y=AJ(K,$j())},updateContentSize(K){let V=`${K}px`;if($)U.content.style.width=V;else U.content.style.height=V},updateCompressionMode(){},setVisibleRangeFn(K){Zj=K},setScrollToPosFn(K){Gj=K},setPositionElementFn(K){Fj=K},setScrollFns(K,V){Qj=K,qj=(P)=>{V(P),yj()}},setScrollTarget(K){zj.removeEventListener("scroll",yj),zj=K,zj.addEventListener("scroll",yj,{passive:!0})},getScrollTarget(){return zj},setContainerDimensions(K){X2=K.width,q2=K.height,d=K.width(),o=K.height(),h.viewportState.containerHeight=o},disableViewportResize(){if(dj)dj=!1,cj.unobserve(U.viewport)}};n={getState:()=>({total:W.length,cached:W.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>W.length,getCached:()=>W.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(K)=>W[K],getItemById:(K)=>{let V=m.get(K);return V!==void 0?W[V]:void 0},getIndexById:(K)=>m.get(K)??-1,isItemLoaded:(K)=>K>=0&&K<W.length&&W[K]!==void 0,getItemsInRange:(K,V)=>{let P=[],f=Math.max(0,K),r=Math.min(V,W.length-1);for(let l=f;l<=r;l++)P.push(W[l]);return P},setTotal:(K)=>{},setItems:(K,V=0,P)=>{if(V===0&&(P!==void 0||W.length===0))W=[...K];else{let f=V+K.length;if(W.length<f)W.length=f;for(let r=0;r<K.length;r++)W[V+r]=K[r]}if(Yj(),i){y.rebuild($j()),kj(),Nj.updateCompressionMode();for(let f=0;f<s.length;f++)s[f]();_j()}},updateItem:(K,V)=>{let P=m.get(K);if(P===void 0)return!1;let f=W[P];if(!f)return!1;if(W[P]={...f,...V},V.id!==void 0&&V.id!==K)m.delete(K),m.set(V.id,P);let r=c.get(P);if(r)Wj(r,F(W[P],P,a)),r.dataset.id=String(W[P].id);return!0},removeItem:(K)=>{let V=m.get(K);if(V===void 0)return!1;if(W.splice(V,1),Yj(),i){y.rebuild($j()),kj(),Nj.updateCompressionMode();for(let P=0;P<s.length;P++)s[P]();_j()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{W=[],m.clear()},reset:()=>{if(W=[],m.clear(),i)y.rebuild(0),kj(),_j()}};let lj={getScrollTop:()=>Qj(),scrollTo:(K)=>{qj(K),H=K,Kj()},scrollBy:(K)=>{let V=Qj()+K;qj(V),H=V,Kj()},isAtTop:()=>H<=2,isAtBottom:(K=2)=>Mj(K),getScrollPercentage:()=>{let K=y.getTotalHeight(),V=Math.max(0,K-o);return V>0?H/V:0},getVelocity:()=>p.velocity,isTracking:()=>p.sampleCount>=rj,isScrolling:()=>U.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>Uj,isWindowMode:()=>!1,updateContainerHeight:(K)=>{o=K},destroy:()=>{}},DJ=new Map;for(let K of k)if(K.methods)for(let V of K.methods){let P=DJ.get(V);if(P)throw Error(`[vlist/builder] Method "${V}" is registered by both "${P}" and "${K.name}"`);DJ.set(V,K.name)}for(let K of k)K.setup(Nj);if(i=!0,Nj.state.isInitialized=!0,kj(),Kj(),b&&W.length>0){let K=Gj(W.length-1,y,o,W.length,"end");qj(K),H=K,Kj()}let K2=(K)=>{Nj.dataManager.setItems(K,0,K.length)},Y2=b?(K)=>{let V=Mj(2),P=W.length;if(Nj.dataManager.setItems(K,P),V&&W.length>0){let f=Gj(W.length-1,y,o,W.length,"end");qj(f),H=f,Kj()}}:(K)=>{let V=W.length;Nj.dataManager.setItems(K,V)},Z2=b?(K)=>{let V=Qj(),P=y.getTotalHeight(),f=[...W];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...f],0);let l=y.getTotalHeight()-P;if(l>0)qj(V+l),H=V+l}:(K)=>{let V=[...W];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...V],0)},B2=(K,V)=>{Nj.dataManager.updateItem(K,V)},U2=(K)=>{Nj.dataManager.removeItem(K)},W2=async()=>{if(Nj.dataManager.reload)await Nj.dataManager.reload()},Cj=()=>{if(w!==null)cancelAnimationFrame(w),w=null},N2=(K,V,P)=>{if(Cj(),Math.abs(V-K)<1){qj(V),H=V,Kj();return}let f=performance.now(),r=(l)=>{let Dj=l-f,Vj=Math.min(Dj/P,1),Aj=K+(V-K)*f2(Vj);if(qj(Aj),H=Aj,Kj(),Vj<1)w=requestAnimationFrame(r);else w=null};w=requestAnimationFrame(r)},VJ=(K,V)=>{let{align:P,behavior:f,duration:r}=I2(V),l=$j(),Dj=K;if(L&&l>0)Dj=(Dj%l+l)%l;let Vj=Gj(Dj,y,o,l,P);if(f==="smooth")N2(Qj(),Vj,r);else Cj(),qj(Vj)},D2=(K,V)=>{let P=m.get(K)??Nj.dataManager.getIndexById(K);if(P>=0)VJ(P,V)},V2=()=>Qj(),_2=(K,V)=>{return C.on(K,V)},G2=(K,V)=>{C.off(K,V)},M2=()=>{if(e)return;if(e=!0,Nj.state.isDestroyed=!0,U.items.removeEventListener("click",WJ),U.root.removeEventListener("keydown",NJ),zj.removeEventListener("scroll",yj),cj.disconnect(),vj)U.viewport.removeEventListener("wheel",vj);if(I)clearTimeout(I);for(let K=0;K<jj.length;K++)jj[K]();for(let K of k)if(K.destroy)K.destroy();Cj();for(let[,K]of c)K.remove(),x.release(K);c.clear(),x.clear(),C.clear(),U.root.remove()},_J={get element(){return U.root},get items(){if(g.has("_getItems"))return g.get("_getItems")();return W},get total(){if(g.has("_getTotal"))return g.get("_getTotal")();return $j()},setItems:g.has("setItems")?g.get("setItems"):K2,appendItems:g.has("appendItems")?g.get("appendItems"):Y2,prependItems:g.has("prependItems")?g.get("prependItems"):Z2,updateItem:g.has("updateItem")?g.get("updateItem"):B2,removeItem:g.has("removeItem")?g.get("removeItem"):U2,reload:g.has("reload")?g.get("reload"):W2,scrollToIndex:g.has("scrollToIndex")?g.get("scrollToIndex"):VJ,scrollToItem:g.has("scrollToItem")?g.get("scrollToItem"):D2,cancelScroll:g.has("cancelScroll")?g.get("cancelScroll"):Cj,getScrollPosition:g.has("getScrollPosition")?g.get("getScrollPosition"):V2,on:_2,off:G2,destroy:M2};for(let[K,V]of g){if(K==="setItems"||K==="appendItems"||K==="prependItems"||K==="updateItem"||K==="removeItem"||K==="reload"||K==="scrollToIndex"||K==="scrollToItem"||K==="cancelScroll"||K==="getScrollPosition")continue;_J[K]=V}return _J}var EJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),$=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},Q=(N)=>{if(N<=0)return 0;if(!j)return Math.ceil(N/X);let D=0,E=0,F=0;for(let O=0;O<N;O++)if(j(O)){if(F++,E>0)D++,E=0;D++,E=0}else if(E++,E>=X)D++,E=0;if(E>0)D++;return D},q=(N)=>{return Y.row=Z(N),Y.col=M(N),Y},Z=(N)=>{if(!j)return Math.floor(N/X);let D=0,E=0;for(let F=0;F<=N;F++)if(j(F)){if(E>0)D++,E=0;if(F===N)return D;D++,E=0}else{if(F===N)return D;if(E++,E>=X)D++,E=0}return console.warn(`⚠️ getRow(${N}) fell through - returning ${D}`),D},M=(N)=>{if(!j)return N%X;if(j(N))return 0;let D=0;for(let E=0;E<=N;E++)if(j(E))D=0;else{if(E===N)return D;if(D++,D>=X)D=0}return D},_=(N,D,E)=>{if(E<=0)return{start:0,end:-1};if(!j){let T=Math.max(0,N*X),U=Math.min(E-1,(D+1)*X-1);return{start:T,end:U}}let F=-1,O=-1,k=0,G=0;for(let T=0;T<E;T++){if(j(T)){if(G>0)k++,G=0;if(k>=N&&k<=D){if(F===-1)F=T;O=T}k++,G=0}else{if(k>=N&&k<=D){if(F===-1)F=T;O=T}if(G++,G>=X)k++,G=0}if(k>D&&G===0)break}if(F===-1)return{start:0,end:-1};return{start:F,end:O}},B=(N,D,E)=>{if(D<0||D>=X)return-1;let F=N*X+D;if(F<0||F>=E)return-1;return F},A=(N)=>{let D=(X-1)*$;return Math.max(0,(N-D)/X)};return{get columns(){return X},get gap(){return $},update:(N)=>{if(N.columns!==void 0)X=Math.max(1,Math.floor(N.columns));if(N.gap!==void 0)$=N.gap;if(N.isHeaderFn!==void 0)j=N.isHeaderFn},getTotalRows:Q,getPosition:q,getRow:Z,getCol:M,getItemRange:_,getItemIndex:B,getColumnWidth:A,getColumnOffset:(N,D)=>{let E=A(D);return N*(E+$)}}};JJ();var yJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;let q=$.indexAtOffset(J),Z=$.indexAtOffset(J+X);if(Z<j-1)Z++;return Q.start=Math.max(0,q),Q.end=Math.min(j-1,Math.max(0,Z)),Q},HJ=(J,X,$,j)=>{if($===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X),j},TJ=(J,X,$,j,Y,Q)=>{if(j===0)return 0;let q=Math.max(0,Math.min(J,j-1)),Z=X.getOffset(q),M=X.getHeight(q),_=X.getTotalHeight(),B=Math.max(0,_-$),A;switch(Q){case"center":A=Z-$/2+M/2;break;case"end":A=Z-$+M;break;case"start":default:A=Z;break}return Math.max(0,Math.min(A,B))};var QJ=(J,X,$,j,Y,Q=yJ)=>{return Q(J.scrollTop,J.containerHeight,X,$,Y,J.visibleRange),HJ(J.visibleRange,j,$,J.renderRange),J.totalHeight=Y.virtualHeight,J.actualHeight=Y.actualHeight,J.isCompressed=Y.isCompressed,J.compressionRatio=Y.ratio,J},Oj=(J,X,$,j,Y="start",Q,q=TJ)=>{return q(J,X,$,j,Q,Y)};var RJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,$=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:Q,config:q,rawConfig:Z}=j,{classPrefix:M}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let _=Z.items?.some((G)=>G.__groupHeader===!0),B={columns:J.columns,gap:J.gap??0};if(_)B.isHeaderFn=(G)=>{let T=j.dataManager.getItem(G);return!!(T&&T.__groupHeader===!0)};X=EJ(B);let A=X.gap;j.setVirtualTotalFn(()=>{let G=j.dataManager.getTotal();return X.getTotalRows(G)});let L=Z.item,b=q.horizontal?L.width:L.height,N={containerWidth:j.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof b==="function")j.setHeightConfig((G)=>{let T=N.containerWidth-2,U=(N.columns-1)*N.gap,C=(T-U)/N.columns,W={containerWidth:N.containerWidth,columns:N.columns,gap:N.gap,columnWidth:C,row:X.getRow(G),column:X.getCol(G),totalRows:X.getTotalRows(j.dataManager.getTotal()),totalColumns:N.columns};return b(G,W)+N.gap});else if(A>0)j.setHeightConfig(b+A);j.rebuildHeightCache(),Y.root.classList.add(`${M}--grid`);let D=j.getContainerWidth(),E=Z.item.template,F=()=>{$=jJ(Y.items,E,j.heightCache,X,M,D,()=>j.dataManager.getTotal(),q.ariaIdPrefix),j.replaceRenderer($)};F(),j.methods.set("_getGridLayout",()=>X),j.methods.set("_getGridConfig",()=>B),j.methods.set("_replaceGridRenderer",(G)=>{$=G}),j.methods.set("_updateGridLayoutForGroups",(G)=>{X.update({isHeaderFn:G});let T=j.dataManager.getTotal(),U=0;for(let C=0;C<T;C++)if(X.getCol(C)===0){let W=j.heightCache.getHeight(C);U+=W}j.heightCache.getTotalHeight=()=>U,j.dom.content.style.height=`${U}px`,F()}),j.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");B.columns=G.columns}if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");B.gap=G.gap}if(X)X.update(B);let T=j.getContainerWidth();if(N.containerWidth=T,N.columns=B.columns,N.gap=B.gap??0,$)$.updateContainerWidth(T);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let U=0;U<j.contentSizeHandlers.length;U++)j.contentSizeHandlers[U]();if($)$.clear();j.forceRender()});let O=()=>{if(j.state.isDestroyed)return;let G=j.scrollController.getScrollTop(),T=j.state.viewportState.containerHeight,U=j.getVirtualTotal(),C={start:0,end:0};if(U===0||T===0)C.start=0,C.end=0;else{C.start=Math.max(0,j.heightCache.indexAtOffset(G));let w=j.heightCache.indexAtOffset(G+T);if(w<U-1)w++;C.end=Math.min(U-1,Math.max(0,w))}let W=q.overscan??3,y={start:Math.max(0,C.start-W),end:Math.min(U-1,C.end+W)};j.state.viewportState.scrollTop=G,j.state.viewportState.visibleRange=C,j.state.viewportState.renderRange=y;let x=j.state.lastRenderRange,o=j.state.viewportState.isCompressed;if(y.start===x.start&&y.end===x.end){if(o)$.updatePositions(j.getCompressionContext());return}let d=j.dataManager.getTotal(),e=X.getItemRange(y.start,y.end,d),i=j.dataManager.getItemsInRange(e.start,e.end),H=o?j.getCompressionContext():void 0;$.render(i,e,new Set,-1,H),j.state.lastRenderRange={...y},Q.emit("range:change",{range:y})},k=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},O()};if(j.setRenderFns(O,k),j.resizeHandlers.push((G,T)=>{if($)$.updateContainerWidth(G)}),j.methods.set("scrollToIndex",(G,T)=>{let U=Math.floor(G/J.columns),{align:C,behavior:W}=h2(T),y=j.dataManager.getState(),x=X.getTotalRows(y.total),o=Math.max(0,Math.min(U,x-1)),d=Oj(o,j.heightCache,j.state.viewportState.containerHeight,x,C,j.getCachedCompression());if(W==="smooth")j.scrollController.scrollTo(d);else j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if($)$.destroy(),$=null;Y.root.classList.remove(`${M}--grid`)})},destroy(){if($)$.destroy(),$=null}}},$J=300,h2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:$J};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??$J};return{align:"start",behavior:"auto",duration:$J}};var XJ=(J,X)=>{let $=0,j=J.length-1;while($<j){let Y=$+j+1>>>1;if(J[Y].headerLayoutIndex<=X)$=Y;else j=Y-1}return $},wJ=(J,X)=>{let $=0,j=J.length-1;while($<j){let Y=$+j+1>>>1;if(J[Y].firstDataIndex<=X)$=Y;else j=Y-1}return $},vJ=(J,X)=>{if(J===0)return[];let $=[],j=X(0),Y=0,Q=0;for(let q=1;q<J;q++){let Z=X(q);if(Z!==j){let M=q-Y;$.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:M}),Q=Q+1+M,j=Z,Y=q}}return $.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:J-Y}),$},qJ=(J,X)=>{if(J.length===0||X.length===0)return[];let $=J.length+X.length,j=Array($),Y=0;for(let Q of X){j[Y]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},Y++;for(let q=0;q<Q.count;q++)j[Y]=J[Q.firstDataIndex+q],Y++}return j},KJ=(J,X)=>{let $=typeof X==="number"?(j)=>X:X;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return $(Y.dataIndex)}},CJ=(J,X)=>{let $=vJ(J,X.getGroupForIndex),j=J+$.length,Y=X.headerHeight;return{get totalEntries(){return j},get groupCount(){return $.length},get groups(){return $},getEntry:(L)=>{if($.length===0)return{type:"item",dataIndex:L,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let b=XJ($,L),N=$[b];if(L===N.headerLayoutIndex)return{type:"header",group:N};let D=L-N.headerLayoutIndex-1;return{type:"item",dataIndex:N.firstDataIndex+D,group:N}},layoutToDataIndex:(L)=>{if($.length===0)return L;let b=XJ($,L),N=$[b];if(L===N.headerLayoutIndex)return-1;let D=L-N.headerLayoutIndex-1;return N.firstDataIndex+D},dataToLayoutIndex:(L)=>{if($.length===0)return L;let b=wJ($,L),N=$[b],D=L-N.firstDataIndex;return N.headerLayoutIndex+1+D},getGroupAtLayoutIndex:(L)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=XJ($,L);return $[b]},getGroupAtDataIndex:(L)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=wJ($,L);return $[b]},getHeaderHeight:typeof Y==="number"?(L)=>Y:(L)=>{let b=$[L];if(!b)return 0;return Y(b.key,L)},rebuild:(L)=>{$=vJ(L,X.getGroupForIndex),j=L+$.length}}};var SJ=(J,X,$,j,Y)=>{let Q=document.createElement("div");Q.className=`${Y}-sticky-header`,Q.setAttribute("role","presentation"),Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.top="0",Q.style.left="0",Q.style.right="0",Q.style.zIndex="5",Q.style.pointerEvents="none",Q.style.willChange="transform",Q.style.overflow="hidden",J.insertBefore(Q,J.firstChild);let q=-1,Z=!1,M=0,_=(D)=>{if(D===q)return;q=D;let E=X.groups;if(D<0||D>=E.length){Q.textContent="";return}let F=E[D],O=j.headerTemplate(F.key,F.groupIndex),k=X.getHeaderHeight(D);if(Q.style.height=`${k}px`,typeof O==="string")Q.innerHTML=O;else Q.replaceChildren(O)},B=(D)=>{let E=X.groups;if(E.length===0){L();return}let F=0;for(let U=E.length-1;U>=0;U--)if($.getOffset(E[U].headerLayoutIndex)<=D){F=U;break}let O=$.getOffset(E[0].headerLayoutIndex);if(D<O){L();return}if(!Z)A();_(F);let k=X.getHeaderHeight(F),G=0,T=F+1;if(T<E.length){let C=$.getOffset(E[T].headerLayoutIndex)-D;if(C<k)G=C-k}if(G!==M)M=G,Q.style.transform=G===0?"":`translateY(${Math.round(G)}px)`},A=()=>{if(Z)return;Z=!0,Q.style.display=""},L=()=>{if(!Z)return;Z=!1,Q.style.display="none",q=-1,M=0,Q.style.transform=""},b=()=>{let D=q;if(q=-1,D>=0)_(D)},N=()=>{Q.remove(),q=-1,Z=!1};return Q.style.display="none",{update:B,refresh:b,show:A,hide:L,destroy:N}};var fJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let X=null,$=null,j=[],Y=[];return{name:"withGroups",priority:10,setup(Q){let{dom:q,config:Z,rawConfig:M}=Q,{classPrefix:_}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let A=M.item.height;j=M.items?[...M.items]:[];let L=j.length,b={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};X=CJ(L,b),Y=qJ(j,X.groups);let N=KJ(X,A);Q.setHeightConfig(N),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length);let D=M.item.template,{headerTemplate:E}=J,F=(W,y,x)=>{if(Rj(W))return E(W.groupKey,W.groupIndex);return D(W,y,x)},O=Q.methods.get("_getGridLayout"),k=Q.methods.get("_replaceGridRenderer"),G=Q.methods.get("_updateGridLayoutForGroups");if(O&&k){if(G)G((o)=>{let d=Y[o];return!!(d&&Rj(d))});let{createGridRenderer:W}=(JJ(),O2(kJ)),y=O(),x=W(q.items,F,Q.heightCache,y,_,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),Z.ariaIdPrefix);k(x)}else Q.replaceTemplate(F);if(q.root.classList.add(`${_}--grouped`),J.sticky!==!1){$=SJ(q.root,X,Q.heightCache,{...b,sticky:b.sticky??!1},_);let W=$;Q.afterScroll.push((y,x)=>{W.update(y)}),$.update(Q.scrollController.getScrollTop())}let T=()=>{if(!X)return;X.rebuild(j.length),Y=qJ(j,X.groups);let W=KJ(X,A);if(Q.setHeightConfig(W),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length),$)$.refresh()};Q.methods.set("setItems",(W)=>{j=[...W],T()}),Q.methods.set("appendItems",(W)=>{j=[...j,...W],T()}),Q.methods.set("prependItems",(W)=>{j=[...W,...j],T()}),Q.methods.set("removeItem",(W)=>{j=j.filter((y)=>y.id!==W),T()});let{animateScroll:U,cancelScroll:C}=m2(Q.scrollController,Q.renderIfNeeded);Q.methods.set("scrollToIndex",(W,y)=>{let x=X.dataToLayoutIndex(W),{align:o,behavior:d,duration:e}=g2(y),i=Q.dataManager.getTotal(),H=Oj(x,Q.heightCache,Q.state.viewportState.containerHeight,i,o,Q.getCachedCompression());if(d==="smooth")U(Q.scrollController.getScrollTop(),H,e);else C(),Q.scrollController.scrollTo(H)}),Q.methods.set("_getItems",()=>j),Q.methods.set("_getTotal",()=>j.length),Q.destroyHandlers.push(()=>{if(Ej!==null)cancelAnimationFrame(Ej),Ej=null;if($)$.destroy(),$=null;q.root.classList.remove(`${_}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},YJ=300,x2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,Ej=null,m2=(J,X)=>{let $=()=>{if(Ej!==null)cancelAnimationFrame(Ej),Ej=null};return{animateScroll:(Y,Q,q)=>{if($(),Math.abs(Q-Y)<1){J.scrollTo(Q);return}let Z=performance.now(),M=(_)=>{let B=_-Z,A=Math.min(B/q,1),L=Y+(Q-Y)*x2(A);if(J.scrollTo(L),X(),A<1)Ej=requestAnimationFrame(M);else Ej=null};Ej=requestAnimationFrame(M)},cancelScroll:$}},g2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:YJ};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??YJ};return{align:"start",behavior:"auto",duration:YJ}};var IJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),ZJ=(J,X,$)=>{if($==="none")return J;let j=new Set(J.selected);if($==="single"){if(j.clear(),X.length>0)j.add(X[0])}else for(let Y of X)j.add(Y);return{...J,selected:j}},BJ=(J,X)=>{let $=new Set(J.selected);for(let j of X)$.delete(j);return{...J,selected:$}},pj=(J,X,$)=>{if($==="none")return J;if(J.selected.has(X))return BJ(J,[X]);else return ZJ(J,[X],$)},pJ=(J,X,$)=>{if($!=="multiple")return J;return{...J,selected:new Set(X.map((j)=>j.id))}},uJ=(J)=>({...J,selected:new Set}),hJ=(J,X)=>{return J.focusedIndex=X,J},xJ=(J,X,$=!0)=>{if(X===0)return J;let j=J.focusedIndex-1;if(j<0)j=$?X-1:0;return J.focusedIndex=j,J},mJ=(J,X,$=!0)=>{if(X===0)return J;let j=J.focusedIndex+1;if(j>=X)j=$?0:X-1;return J.focusedIndex=j,J},gJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=0,J},dJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=X-1,J};var uj=(J)=>{return Array.from(J.selected)},hj=(J,X)=>{let $=[];for(let j of J.selected){let Y=X(j);if(Y)$.push(Y)}return $};var UJ=(J)=>{let X=J?.mode??"single",$=J?.initial,j=IJ($),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:q,emitter:Z,config:M}=Q,{classPrefix:_,ariaIdPrefix:B}=M;if(X==="none"){Q.methods.set("select",()=>{}),Q.methods.set("deselect",()=>{}),Q.methods.set("toggleSelect",()=>{}),Q.methods.set("selectAll",()=>{}),Q.methods.set("clearSelection",()=>{}),Q.methods.set("getSelected",()=>[]),Q.methods.set("getSelectedItems",()=>[]),Q.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:A,forceRender:L}=Q.getRenderFns(),b=()=>{Q.dom.items.querySelectorAll("[data-index]").forEach((k)=>{let G=k,T=G.dataset.id;if(T!==void 0){let U=/^\d+$/.test(T)?parseInt(T,10):T,C=j.selected.has(U),y=parseInt(G.dataset.index??"-1",10)===j.focusedIndex;G.classList.toggle(`${_}-item--selected`,C),G.classList.toggle(`${_}-item--focused`,y),G.ariaSelected=C?"true":"false"}})},N=()=>{if(Q.state.isDestroyed)return;A(),b()},D=()=>{if(Q.state.isDestroyed)return;L(),b()};Q.setRenderFns(N,D);let E=()=>{b(),Z.emit("selection:change",{selected:uj(j),items:hj(j,(O)=>Q.dataManager.getItemById(O))})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${_}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",q.root.appendChild(Y);let F=Y;Z.on("selection:change",({selected:O})=>{let k=O.length;if(k===0)F.textContent="";else if(k===1)F.textContent="1 item selected";else F.textContent=`${k} items selected`}),Q.clickHandlers.push((O)=>{if(Q.state.isDestroyed)return;let G=O.target.closest("[data-index]");if(!G)return;let T=parseInt(G.dataset.index??"-1",10);if(T<0)return;let U=Q.dataManager.getItem(T);if(!U)return;Z.emit("item:click",{item:U,index:T,event:O}),j=hJ(j,T),q.root.setAttribute("aria-activedescendant",`${B}-item-${T}`),j=pj(j,U.id,X),E()}),Q.keydownHandlers.push((O)=>{if(Q.state.isDestroyed)return;let k=Q.dataManager.getTotal(),G=j.focusedIndex,T=!1,U=!1,C=j;switch(O.key){case"ArrowUp":C=xJ(j,k),T=!0,U=!0;break;case"ArrowDown":C=mJ(j,k),T=!0,U=!0;break;case"Home":C=gJ(j,k),T=!0,U=!0;break;case"End":C=dJ(j,k),T=!0,U=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let W=Q.dataManager.getItem(j.focusedIndex);if(W)C=pj(j,W.id,X);T=!0}break}if(T){O.preventDefault(),j=C;let W=j.focusedIndex;if(W>=0){let y=Q.dataManager.getState(),x=Oj(W,Q.heightCache,Q.state.viewportState.containerHeight,y.total,"center",Q.getCachedCompression());Q.scrollController.scrollTo(x),q.root.setAttribute("aria-activedescendant",`${B}-item-${W}`)}else q.root.removeAttribute("aria-activedescendant");if(U){let{selected:y}=j;if(G>=0&&G!==W){let x=Q.dataManager.getItem(G);if(x)Q.renderer.updateItemClasses(G,y.has(x.id),!1)}if(W>=0){let x=Q.dataManager.getItem(W);if(x)Q.renderer.updateItemClasses(W,y.has(x.id),!0)}}else D(),Z.emit("selection:change",{selected:uj(j),items:hj(j,(y)=>Q.dataManager.getItemById(y))})}}),Q.methods.set("select",(...O)=>{j=ZJ(j,O,X),E()}),Q.methods.set("deselect",(...O)=>{j=BJ(j,O),E()}),Q.methods.set("toggleSelect",(O)=>{j=pj(j,O,X),E()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;let O=Q.getAllLoadedItems();j=pJ(j,O,X),E()}),Q.methods.set("clearSelection",()=>{j=uJ(j);let{renderRange:O,isCompressed:k}=Q.state.viewportState,G=Q.getItemsForRange(O),T=k?Q.getCompressionContext():void 0;Q.renderer.render(G,O,j.selected,j.focusedIndex,T),Z.emit("selection:change",{selected:[],items:[]})}),Q.methods.set("getSelected",()=>{return uj(j)}),Q.methods.set("getSelectedItems",()=>{return hj(j,(O)=>Q.dataManager.getItemById(O))}),Q.destroyHandlers.push(()=>{if(F&&F.parentNode)F.remove()})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var wj=(J,X,$={},j="vlist",Y=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:M=!0,hoverZoneWidth:_=16,showOnViewportEnter:B=!0}=$,A=0,L=0,b=0,N=0,D=!1,E=!1,F=0,O=0,k=0,G=null,T=!1,U=null,C=null,W=Y?"width":"height",y=Y?"translateX":"translateY",x=Y?(t)=>t.clientX:(t)=>t.clientY,o=Y?"left":"top",d=document.createElement("div"),e=document.createElement("div"),i=M?document.createElement("div"):null,H=()=>{if(d.className=`${j}-scrollbar`,e.className=`${j}-scrollbar-thumb`,Y)d.classList.add(`${j}-scrollbar--horizontal`);if(d.appendChild(e),J.appendChild(d),i){if(i.className=`${j}-scrollbar-hover`,Y)i.classList.add(`${j}-scrollbar-hover--horizontal`),i.style.height=`${_}px`;else i.style.width=`${_}px`;J.appendChild(i)}},w=()=>{if(G)clearTimeout(G),G=null},I=()=>{if(!Q)return;w(),G=setTimeout(z,q)},p=()=>{if(A<=L)return;if(w(),!T)d.classList.add(`${j}-scrollbar--visible`),T=!0;if(Q&&!D&&!E)I()},z=()=>{if(D||E)return;d.classList.remove(`${j}-scrollbar--visible`),T=!1},R=(t,Jj)=>{A=t,L=Jj;let v=A>L;if(d.style.display=v?"":"none",!v){z();return}let S=L/A;b=Math.max(Z,S*L),e.style[W]=`${b}px`,N=L-b,u(k)},u=(t)=>{if(k=t,A<=L||N<=0)return;let Jj=A-L,S=Math.min(1,Math.max(0,t/Jj))*N;e.style.transform=`${y}(${S}px)`},h=(t)=>{if(t.target===e)return;let Jj=d.getBoundingClientRect(),s=x(t)-Jj[o]-b/2,g=Math.max(0,Math.min(s,N))/N,Qj=A-L,qj=g*Qj;X(qj),p()},c=(t)=>{t.preventDefault(),t.stopPropagation(),D=!0,F=x(t),O=k,w(),d.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",a),document.addEventListener("mouseup",Xj)},a=(t)=>{if(!D)return;let Jj=x(t)-F,v=N>0?Jj/N:0,S=A-L,s=v*S,jj=Math.max(0,Math.min(O+s,S)),Qj=jj/S*N;if(e.style.transform=`${y}(${Qj}px)`,C=jj,U===null)U=requestAnimationFrame(()=>{if(C!==null)X(C);U=null})},Xj=()=>{if(D=!1,U!==null)cancelAnimationFrame(U),U=null;if(C!==null)X(C),C=null;if(d.classList.remove(`${j}-scrollbar--dragging`),Q&&!E)I();document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj)},Bj=()=>{if(B)p()},m=()=>{if(!D){if(E=!1,Q)I()}},Yj=()=>{E=!0,w(),p()},n=()=>{if(E=!1,!D&&Q)I()},$j=()=>{if(w(),U!==null)cancelAnimationFrame(U),U=null;if(d.removeEventListener("click",h),d.removeEventListener("mouseenter",Yj),d.removeEventListener("mouseleave",n),e.removeEventListener("mousedown",c),J.removeEventListener("mouseenter",Bj),J.removeEventListener("mouseleave",m),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj),i){if(i.removeEventListener("mouseenter",Yj),i.removeEventListener("mouseleave",n),i.parentNode)i.parentNode.removeChild(i)}if(d.parentNode)d.parentNode.removeChild(d)};if(H(),d.addEventListener("click",h),d.addEventListener("mouseenter",Yj),d.addEventListener("mouseleave",n),e.addEventListener("mousedown",c),J.addEventListener("mouseenter",Bj),J.addEventListener("mouseleave",m),i)i.addEventListener("mouseenter",Yj),i.addEventListener("mouseleave",n);return{show:p,hide:z,updateBounds:R,updatePosition:u,isVisible:()=>T,destroy:$j}};var cJ=(J)=>{let X=null;return{name:"withScrollbar",priority:30,setup($){let{dom:j,config:Y}=$,{classPrefix:Q,horizontal:q}=Y;if(X=wj(j.viewport,(_)=>$.scrollController.scrollTo(_),J??{},Q,q),!j.viewport.classList.contains(`${Q}-viewport--custom-scrollbar`))j.viewport.classList.add(`${Q}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();X.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let M=X;$.afterScroll.push((_,B)=>{M.updatePosition(_),M.show()}),$.resizeHandlers.push((_,B)=>{if(M){let A=$.getCachedCompression();M.updateBounds(A.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(M){let _=$.getCachedCompression();M.updateBounds(_.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(M)M.destroy()})},destroy(){if(X)X.destroy(),X=null}}};ej();var lJ=()=>{let J=null,X=0,$=!1;return{name:"withCompression",priority:20,setup(j){let{dom:Y,config:Q}=j,{classPrefix:q,horizontal:Z}=Q,M=()=>{let B=j.getVirtualTotal(),A=Lj(B,j.heightCache);if(A.isCompressed&&!$){$=!0,j.scrollController.enableCompression(A),j.updateContentSize(A.virtualHeight),j.setScrollFns(()=>X,(D)=>{X=D});let L=Y.viewport,b=(D)=>{D.preventDefault();let E=A.virtualHeight-j.state.viewportState.containerHeight;X=Math.max(0,Math.min(X+D.deltaY,E)),j.scrollController.scrollTo(X)};if(L.addEventListener("wheel",b,{passive:!1}),j.destroyHandlers.push(()=>{L.removeEventListener("wheel",b)}),!Y.viewport.querySelector(`.${q}-scrollbar-track`)){if(J=wj(Y.viewport,(E)=>j.scrollController.scrollTo(E),{},q,Z),!Y.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))Y.viewport.classList.add(`${q}-viewport--custom-scrollbar`);J.updateBounds(A.virtualHeight,j.state.viewportState.containerHeight);let D=J;j.afterScroll.push((E,F)=>{if(D)D.updatePosition(E),D.show()}),j.resizeHandlers.push((E,F)=>{if(D){let O=j.getCachedCompression();D.updateBounds(O.virtualHeight,j.state.viewportState.containerHeight)}})}}else if(!A.isCompressed&&$)$=!1,j.scrollController.disableCompression(),j.updateContentSize(A.actualHeight);else if(A.isCompressed)j.scrollController.updateConfig({compression:A}),j.updateContentSize(A.virtualHeight);if(J)J.updateBounds(A.virtualHeight,j.state.viewportState.containerHeight);j.state.cachedCompression={state:A,totalItems:B}};j.updateCompressionMode=M;let _=j.getCachedCompression.bind(j);j.getCachedCompression=()=>{if(j.state.cachedCompression)return j.state.cachedCompression.state;return _()},j.setVisibleRangeFn((B,A,L,b,N)=>{let D=Lj(b,L);PJ(B,A,L,b,D,N)}),j.setScrollToPosFn((B,A,L,b,N)=>{let D=Lj(b,A);return bJ(B,A,L,b,D,N)}),j.setPositionElementFn((B,A)=>{let L=j.getVirtualTotal(),b=Lj(L,j.heightCache);if(b.isCompressed){let N=Math.round(Ij(A,j.scrollController.getScrollTop(),j.heightCache,L,j.state.viewportState.containerHeight,b)),D=j.config.horizontal;B.style.transform=D?`translateX(${N}px)`:`translateY(${N}px)`}else{let N=Math.round(j.heightCache.getOffset(A)),D=j.config.horizontal;B.style.transform=D?`translateX(${N}px)`:`translateY(${N}px)`}}),M(),j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null})},destroy(){if(J)J.destroy(),J=null}}};var sJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(J){J.methods.set("getScrollSnapshot",()=>{let X=J.scrollController.getScrollTop(),$=J.getCachedCompression(),j=J.getVirtualTotal(),Y=J.methods.get("getSelected"),Q=Y&&Y().length>0?Y():void 0;if(j===0){let _={index:0,offsetInItem:0};if(Q)_.selectedIds=Q;return _}let q,Z;if($.isCompressed){let B=X/$.virtualHeight*j;q=Math.max(0,Math.min(Math.floor(B),j-1)),Z=(B-q)*J.heightCache.getHeight(q)}else q=J.heightCache.indexAtOffset(X),Z=X-J.heightCache.getOffset(q);Z=Math.max(0,Z);let M={index:q,offsetInItem:Z};if(Q)M.selectedIds=Q;return M}),J.methods.set("restoreScroll",(X)=>{let{index:$,offsetInItem:j,selectedIds:Y}=X,Q=J.getCachedCompression(),q=J.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),M;if(Q.isCompressed){let B=J.heightCache.getHeight(Z),A=B>0?j/B:0;M=(Z+A)/q*Q.virtualHeight}else M=J.heightCache.getOffset(Z)+j;let _=Math.max(0,Q.virtualHeight-J.state.viewportState.containerHeight);if(M=Math.max(0,Math.min(M,_)),J.scrollController.scrollTo(M),Y&&Y.length>0){let B=J.methods.get("select");if(B)B(...Y)}})}}};var rJ=(J={})=>{let{chunkSize:X=100,maxCachedItems:$=5000,evictionBuffer:j=200,onEvict:Y}=J,Q=new Map,q=0,Z=0,M=(H)=>{let w=Q.get(H);if(!w)w={items:Array(X),count:0,lastAccess:Date.now()},Q.set(H,w);else w.lastAccess=Date.now();return w},_=(H)=>{return Math.floor(H/X)},B=(H)=>{return H%X},A=()=>q,L=(H)=>{q=H},b=(H)=>{if(H<0||H>=q)return;let w=_(H),I=Q.get(w);if(!I)return;return I.items[B(H)]},N=(H)=>{if(H<0||H>=q)return!1;let w=_(H),I=Q.get(w);if(!I)return!1;return I.items[B(H)]!==void 0},D=(H,w)=>{let I=_(H),p=M(I),z=B(H),R=p.items[z]===void 0;if(p.items[z]=w,R)p.count++,Z++;if(H>=q)q=H+1},E=(H,w)=>{for(let I=0;I<w.length;I++){let p=w[I];if(p!==void 0)D(H+I,p)}},F=(H)=>{if(H<0||H>=q)return!1;let w=_(H),I=Q.get(w);if(!I)return!1;let p=B(H);if(I.items[p]===void 0)return!1;if(I.items[p]=void 0,I.count--,Z--,I.count===0)Q.delete(w);return!0},O=(H,w)=>{let I=[];for(let p=H;p<=w&&p<q;p++)I.push(b(p));return I},k=(H,w)=>{for(let I=H;I<=w&&I<q;I++)if(!N(I))return!1;return!0},G=()=>{let H=[],w=null,I=Array.from(Q.keys()).sort((p,z)=>p-z);for(let p of I){let z=Q.get(p);if(!z)continue;let R=p*X;for(let u=0;u<X;u++){let h=R+u;if(h>=q)break;if(z.items[u]!==void 0)if(w===null)w={start:h,end:h};else if(h===w.end+1)w.end=h;else H.push(w),w={start:h,end:h};else if(w!==null)H.push(w),w=null}}if(w!==null)H.push(w);return H},T=(H,w)=>{let I=[],p=null;for(let z=H;z<=w&&z<q;z++)if(!N(z))if(p===null)p={start:z,end:z};else p.end=z;else if(p!==null)I.push(p),p=null;if(p!==null)I.push(p);return I},U=(H)=>{return Q.has(H)},C=(H)=>{let w=Q.get(H);if(w)w.lastAccess=Date.now()},W=(H,w)=>{if(H>w||Q.size===0)return;let I=Date.now(),p=_(Math.max(0,H)),z=_(Math.min(q-1,w));for(let R=p;R<=z;R++){let u=Q.get(R);if(u)u.lastAccess=I}},y=(H,w)=>{if(Z<=$)return 0;let I=Math.max(0,H-j),p=Math.min(q-1,w+j),z=_(I),R=_(p),u=0,h=[];for(let[c,a]of Q)if(c<z||c>R)u+=a.count,h.push(c),Z-=a.count,Q.delete(c);if(u>0&&Y)Y(u,h);return u},x=()=>{if(Z<=$)return 0;let H=Array.from(Q.entries()).sort(([,p],[,z])=>p.lastAccess-z.lastAccess),w=0,I=[];for(let[p,z]of H){if(Z<=$)break;w+=z.count,Z-=z.count,I.push(p),Q.delete(p)}if(w>0&&Y)Y(w,I);return w},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:Q.size,chunkSize:X,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},d=()=>Z,e=()=>{Q.clear(),Z=0};return{chunkSize:X,maxCachedItems:$,getTotal:A,setTotal:L,get:b,has:N,set:D,setRange:E,delete:F,getRange:O,isRangeLoaded:k,getLoadedRanges:G,findUnloadedRanges:T,getChunkIndex:_,isChunkLoaded:U,touchChunk:C,touchChunksForRange:W,evictDistant:y,evictToLimit:x,getStats:o,getCachedCount:d,clear:e,reset:()=>{e(),q=0}}},d2=(J)=>{if(J.length===0)return[];let X=[...J].sort((j,Y)=>j.start-Y.start),$=[{...X[0]}];for(let j=1;j<X.length;j++){let Y=X[j],Q=$[$.length-1];if(Y.start<=Q.end+1)Q.end=Math.max(Q.end,Y.end);else $.push({...Y})}return $},aJ=(J,X,$)=>{let j=Math.floor(J.start/$)*$,Y=Math.ceil((J.end+1)/$)*$-1,Q={start:j,end:Y};if(X.length===0)return[Q];let q=[],Z=d2(X),M=Q.start;for(let _ of Z){if(_.end<M)continue;if(_.start>Q.end)break;if(_.start>M)q.push({start:M,end:Math.min(_.start-1,Q.end)});if(M=_.end+1,M>Q.end)break}if(M<=Q.end)q.push({start:M,end:Q.end});return q};var oJ=(J={})=>{let{enabled:X=!0,maskCharacter:$="█",randomVariance:j=!0,maxSampleSize:Y=20,customGenerator:Q}=J,q=null,Z=!1,M=0,_=(F)=>{if(!X||Z||F.length===0)return;let O=new Map,k=new Map,G=Math.min(F.length,Y);for(let T=0;T<G;T++){let U=F[T];if(!U||typeof U!=="object")continue;for(let[C,W]of Object.entries(U)){if(C.startsWith("_")||C==="id")continue;if(!k.has(C))k.set(C,{lengths:[],types:new Set});let y=k.get(C),x=Array.isArray(W)?"array":typeof W;if(y.types.add(x),typeof W==="string")y.lengths.push(W.length);else if(W!==null&&W!==void 0)y.lengths.push(String(W).length)}}for(let[T,U]of k){if(U.lengths.length===0)continue;let C=Math.min(...U.lengths),W=Math.max(...U.lengths),y=Math.round(U.lengths.reduce((o,d)=>o+d,0)/U.lengths.length),x="string";if(U.types.has("number")&&U.types.size===1)x="number";else if(U.types.has("boolean")&&U.types.size===1)x="boolean";else if(U.types.has("array"))x="array";else if(U.types.has("object")&&!U.types.has("string"))x="object";O.set(T,{minLength:C,maxLength:W,avgLength:y,type:x})}q=O,Z=!0},B=()=>Z,A=(F)=>{let O=F.avgLength;if(j&&F.minLength!==F.maxLength){if(O=Math.floor(Math.random()*(F.maxLength-F.minLength+1)+F.minLength),Math.random()<0.3)O=Math.max(1,O+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,O))},L=(F)=>{if(Q)return{...Q(F),["_isPlaceholder"]:!0};let O={id:`__placeholder_${M++}`,["_isPlaceholder"]:!0,_index:F};if(!q||q.size===0)return O.label=$.repeat(12),O;for(let[k,G]of q)switch(G.type){case"string":O[k]=A(G);break;case"number":O[k]=0;break;case"boolean":O[k]=!1;break;case"array":O[k]=[];break;case"object":O[k]={};break;default:O[k]=A(G)}return O};return{analyzeStructure:_,hasAnalyzedStructure:B,generate:L,generateRange:(F,O)=>{let k=[];for(let G=F;G<=O;G++)k.push(L(G));return k},isPlaceholder:(F)=>{if(!F||typeof F!=="object")return!1;return F._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,M=0}}},xj=(J)=>{if(!J||typeof J!=="object")return!1;return J._isPlaceholder===!0};var c2=50,nJ=(J={})=>{let{adapter:X,initialItems:$,initialTotal:j,storage:Y,placeholder:Q,pageSize:q=c2,onStateChange:Z,onItemsLoaded:M,onItemsEvicted:_}=J,B=rJ({...Y,onEvict:(v,S)=>{_?.(v),G()}}),A=null,L=()=>{if(!A)A=oJ(Q);return A},b=new Map,N=!1,D,E=!0,F,O=[],k=new Map,G=()=>{Z?.(e())},T=()=>{b.clear();let v=B.getLoadedRanges();for(let S of v)for(let s=S.start;s<=S.end;s++){let jj=B.get(s);if(jj&&!xj(jj))b.set(jj.id,s)}},U=(v,S)=>{if(!xj(S))b.set(S.id,v)},C=(v)=>{b.delete(v)},W=(v,S)=>{return`${v}-${S}`},y=()=>B.getTotal(),x=()=>B.getCachedCount(),o=()=>N,d=()=>E,e=()=>({total:B.getTotal(),cached:B.getCachedCount(),isLoading:N,pendingRanges:O,error:D,hasMore:E,cursor:F}),i=()=>B,H=()=>L(),w=(v)=>{let S=B.get(v);if(S!==void 0)return S;if(v>=0&&v<B.getTotal())return L().generate(v);return},I=(v)=>{let S=b.get(v);if(S===void 0)return;return B.get(S)},p=(v)=>{return b.get(v)??-1},z=(v)=>{let S=B.get(v);return S!==void 0&&!xj(S)},R=(v,S)=>{let s=[],jj=B.getTotal(),g=0,Qj=0;B.touchChunksForRange(v,Math.min(S,jj-1));for(let qj=v;qj<=S&&qj<jj;qj++){let Mj=B.get(qj);if(Mj!==void 0)s.push(Mj),g++;else s.push(L().generate(qj)),Qj++}return s},u=(v)=>{B.setTotal(v),E=B.getCachedCount()<v,G()},h=(v,S=0,s)=>{if(A&&!A.hasAnalyzedStructure()&&v.length>0)A.analyzeStructure(v);for(let jj=0;jj<v.length;jj++){let g=v[jj];if(g!==void 0){let Qj=S+jj;B.set(Qj,g),U(Qj,g)}}if(s!==void 0)B.setTotal(s);else if(S+v.length>B.getTotal())B.setTotal(S+v.length);E=B.getCachedCount()<B.getTotal(),M?.(v,S,B.getTotal()),G()},c=(v,S)=>{let s=b.get(v);if(s===void 0)return!1;let jj=B.get(s);if(!jj)return!1;let g={...jj,...S};if(B.set(s,g),S.id!==void 0&&S.id!==v)C(v),U(s,g);return G(),!0},a=(v)=>{let S=b.get(v);if(S===void 0)return!1;B.delete(S),C(v);let s=B.getTotal();if(s>0)B.setTotal(s-1);return G(),!0},Xj=async(v,S)=>{if(!X)return;let s=W(v,S);if(k.has(s))return;let jj=B.getLoadedRanges(),g=aJ({start:v,end:S},jj,B.chunkSize);if(g.length===0)return;let Qj=B.chunkSize,qj=[];for(let Uj of g){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,bj=W(Gj,Wj);if(!qj.some((Fj)=>Fj.start===Gj)&&!k.has(bj))qj.push({start:Gj,end:Wj})}}let Mj=[];for(let Uj of g){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,bj=W(Gj,Wj);if(k.has(bj)){let Fj=k.get(bj);if(!Mj.includes(Fj))Mj.push(Fj)}}}for(let Uj of qj){let Kj=W(Uj.start,Uj.end),_j=(async()=>{O.push(Uj),N=!0,D=void 0,G();try{let Zj=Uj.end-Uj.start+1,Gj={offset:Uj.start,limit:Zj,cursor:void 0},Wj=await X.read(Gj);if(h(Wj.items,Uj.start,Wj.total),Wj.cursor)F=Wj.cursor;if(Wj.hasMore!==void 0)E=Wj.hasMore;else if(Wj.total!==void 0)E=B.getCachedCount()<Wj.total}catch(Zj){D=Zj instanceof Error?Zj:Error(String(Zj))}finally{k.delete(Kj),O=O.filter((Zj)=>Zj.start!==Uj.start||Zj.end!==Uj.end),N=k.size>0,G()}})();k.set(Kj,_j),Mj.push(_j)}await Promise.all(Mj)},Bj=async(v,S)=>{if(B.isRangeLoaded(v,S))return;await Xj(v,S)},m=async()=>{if(!X)return;await Xj(0,q-1)},Yj=async()=>{if(!X||N||!E)return!1;let v=B.getCachedCount(),S=B.getTotal(),s=v,jj=Math.min(s+q-1,S>0?S-1:s+q-1);if(s>=S&&S>0)return E=!1,!1;return await Xj(s,jj),B.getCachedCount()>v},n=async()=>{if(B.clear(),b.clear(),A)A.clear();F=void 0,E=!0,D=void 0,G(),await m()},$j=(v,S)=>{if(B.evictDistant(v,S)>0)T()},t=()=>{B.clear(),b.clear(),F=void 0,D=void 0,O=[],N=!1,G()},Jj=()=>{if(B.reset(),b.clear(),A)A.clear();F=void 0,E=!0,D=void 0,O=[],N=!1,G()};if($&&$.length>0)h($,0,j??$.length);else if(j!==void 0)B.setTotal(j);return{getState:e,getTotal:y,getCached:x,getIsLoading:o,getHasMore:d,getStorage:i,getPlaceholders:H,getItem:w,getItemById:I,getIndexById:p,isItemLoaded:z,getItemsInRange:R,setTotal:u,setItems:h,updateItem:c,removeItem:a,loadRange:Xj,ensureRange:Bj,loadInitial:m,loadMore:Yj,reload:n,evictDistant:$j,clear:t,reset:Jj}};var iJ=(J)=>{let{adapter:X,loading:$}=J,j=$?.cancelThreshold??FJ,Y=$?.preloadThreshold??LJ,Q=$?.preloadAhead??OJ;return{name:"withData",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,M=q.config.reverse,_=q.config.overscan,B=nJ({adapter:X,pageSize:Tj,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=QJ(q.state.viewportState,q.heightCache,q.getVirtualTotal(),_,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(F,O,k)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:F,total:k})}});q.replaceDataManager(B);let A=null,L=null,b=0,N=()=>{if(L){let F=L;L=null,q.dataManager.ensureRange(F.start,F.end).catch((O)=>{Z.emit("error",{error:O,context:"ensureRange"})})}};q.afterScroll.push((F,O)=>{if(q.state.isDestroyed)return;let k=q.scrollController.getVelocity(),T=q.scrollController.isTracking()&&k<=j;if(L&&b>j&&k<=j){let W=L;L=null,q.dataManager.ensureRange(W.start,W.end).catch((y)=>{Z.emit("error",{error:y,context:"ensureRange"})})}if(b=k,T&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(M){if(F<oj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Tj}),q.dataManager.loadMore().catch((W)=>{Z.emit("error",{error:W,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-F-q.state.viewportState.containerHeight<oj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Tj}),q.dataManager.loadMore().catch((y)=>{Z.emit("error",{error:y,context:"loadMore"})})}let{renderRange:U}=q.state.viewportState;if(!A||U.start!==A.start||U.end!==A.end)if(A={start:U.start,end:U.end},T){L=null;let{start:W,end:y}=U,x=q.getVirtualTotal();if(k>Y)if(O==="down")y=Math.min(U.end+Q,x-1);else W=Math.max(U.start-Q,0);q.dataManager.ensureRange(W,y).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}else L={start:U.start,end:U.end}});let D=200,E=null;q.afterScroll.push((F,O)=>{if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,N()},D)}),q.destroyHandlers.push(()=>{if(E!==null)clearTimeout(E),E=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:Tj}),q.dataManager.loadInitial().catch((F)=>{Z.emit("error",{error:F,context:"loadInitial"})})}}};var tJ=()=>{let J=null;return{name:"withWindow",priority:5,setup(X){let{dom:$,state:j,config:Y,emitter:Q}=X;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let _=$.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-_.left);else return Math.max(0,-_.top)},(_)=>{let B=$.viewport.getBoundingClientRect();if(Y.horizontal){let A=B.left+window.scrollX;window.scrollTo(A+_,window.scrollY)}else{let A=B.top+window.scrollY;window.scrollTo(window.scrollX,A+_)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,M=()=>{let{innerWidth:_,innerHeight:B}=window,A=Y.horizontal?_:B,L=Y.horizontal?Z:q;if(Math.abs(A-L)<=1)return;q=B,Z=_,j.viewportState.containerHeight=B,Q.emit("resize",{width:_,height:B});for(let b=0;b<X.resizeHandlers.length;b++)X.resizeHandlers[b](_,B);X.renderIfNeeded()};window.addEventListener("resize",M,{passive:!0}),J=()=>{window.removeEventListener("resize",M)},X.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var eJ=(J)=>{let X=aj(J);if(J.scroll?.element===window)X=X.use(tJ());if(J.adapter)X=X.use(iJ({adapter:J.adapter,...J.loading&&{loading:J.loading}}));if(J.layout==="grid"){if(!J.grid)throw Error("[vlist/builder] grid configuration is required when layout is 'grid'");if(!J.grid.columns||J.grid.columns<1)throw Error("[vlist/builder] grid.columns must be a positive integer >= 1");let Q={columns:J.grid.columns};if(J.grid.gap!==void 0)Q.gap=J.grid.gap;X=X.use(RJ(Q))}if(J.groups){if(J.direction==="horizontal")throw Error("[vlist/builder] horizontal direction cannot be combined with groups");let Q={getGroupForIndex:J.groups.getGroupForIndex,headerHeight:typeof J.groups.headerHeight==="function"?J.groups.headerHeight("",0):J.groups.headerHeight,headerTemplate:J.groups.headerTemplate};if(J.groups.sticky!==void 0)Q.sticky=J.groups.sticky;X=X.use(fJ(Q))}let $=J.selection?.mode||"none";if($!=="none"){let Q={mode:$};if(J.selection?.initial!==void 0)Q.initial=J.selection.initial;X=X.use(UJ(Q))}else X=X.use(UJ({mode:"none"}));X=X.use(lJ());let j=J.scroll?.scrollbar||J.scrollbar;if(j!=="none"){let Q=typeof j==="object"?j:{};X=X.use(cJ(Q))}X=X.use(sJ());let Y=X.build();return Y.update=(Q)=>{if(Q.grid&&Y.updateGrid)Y.updateGrid(Q.grid);if(Q.selectionMode!==void 0&&Y.setSelectionMode)Y.setSelectionMode(Q.selectionMode);if(Q.itemHeight!==void 0)console.warn("[vlist] Updating itemHeight via update() is not yet supported with the builder pattern. Please recreate the instance or use the full API from 'vlist/full'.");if(Q.overscan!==void 0)console.warn("[vlist] Updating overscan via update() is not yet supported with the builder pattern.")},Y};function N6(J,X){let $=eJ({...X.config,container:J});if(X.onInstance)X.onInstance($);return{update(j){if(j.config.items)$.setItems(j.config.items);if(j.onInstance)j.onInstance($)},destroy(){$.destroy()}}}function D6(J,X,$){return J.on(X,$)}export{N6 as vlist,D6 as onVListEvent};
|
|
1
|
+
var{defineProperty:sj,getOwnPropertyNames:E2,getOwnPropertyDescriptor:F2}=Object,L2=Object.prototype.hasOwnProperty;var GJ=new WeakMap,O2=(J)=>{var X=GJ.get(J),$;if(X)return X;if(X=sj({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")E2(J).map((j)=>!L2.call(X,j)&&sj(X,j,{get:()=>J[j],enumerable:!($=F2(J,j))||$.enumerable}));return GJ.set(J,X),X};var z2=(J,X)=>{for(var $ in X)sj(J,$,{get:X[$],enumerable:!0,configurable:!0,set:(j)=>X[$]=()=>j})};var MJ=(J,X)=>()=>(J&&(X=J(J=0)),X);var oj=200,Tj=50,FJ=15,LJ=2,OJ=50,nj=16000000;var zJ=(J,X,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil($/J.getHeight(0));let Y=0,Q=0,q=X;while(q<j&&Q<$)Q+=J.getHeight(q),Y++,q++;return Math.max(1,Y)},ij=(J,X,$)=>{if($===0)return 0;if(!J.isVariable())return Math.floor(X/J.getHeight(0));let j=0,Y=0;for(let Q=$-1;Q>=0;Q--){let q=J.getHeight(Q);if(Y+q>X)break;Y+=q,j++}return Math.max(j,1)},tj=(J,X,$)=>{if($===0)return 0;let j=Math.floor(X),Y=X-j,Q=Math.max(0,Math.min(j,$-1));return J.getOffset(Q)+Y*J.getHeight(Q)};var Lj=(J,X)=>{let $=X.getTotalHeight(),j=$>nj,Y=j?nj:$,Q=$>0?Y/$:1;return{isCompressed:j,actualHeight:$,virtualHeight:Y,ratio:Q}},PJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;if(!Y.isCompressed){let N=$.indexAtOffset(J),D=$.indexAtOffset(J+X);if(D<j-1)D++;return Q.start=Math.max(0,N),Q.end=Math.min(j-1,Math.max(0,D)),Q}let{virtualHeight:q}=Y,M=J/q*j,_=Math.floor(M),B=zJ($,Math.max(0,_),X,j),A=Math.ceil(M)+B,b=q-X-J;if(b<=X&&b>=-1){let N=ij($,X,j),D=Math.max(0,j-N),E=Math.max(0,Math.min(1,1-b/X));_=Math.floor(_+(D-_)*E),A=b<=1?j-1:Math.min(j-1,_+B)}return Q.start=Math.max(0,_),Q.end=Math.min(j-1,Math.max(0,A)),Q},Ij=(J,X,$,j,Y,Q,q)=>{if(!Q.isCompressed||j===0)return $.getOffset(J);let{virtualHeight:Z}=Q,M=Z-Y,_=M-X;if(_<=Y&&_>=-1){if(X>=M-1){let k=$.getTotalHeight()-$.getOffset(J);return Y-k}let L=ij($,Y,j),b=Math.max(0,j-L),D=X/Z*j,E=Math.max(0,Math.min(1,1-_/Y)),F=$.getOffset(J)-$.getOffset(b),O=$.getOffset(J)-tj($,D,j);return O+(F-O)*E}let A=X/Z*j;return $.getOffset(J)-tj($,A,j)},bJ=(J,X,$,j,Y,Q="start")=>{if(j===0)return 0;let q;if(Y.isCompressed){if(Q==="end"&&J===j-1)return Math.max(0,Y.virtualHeight-$);q=J/j*Y.virtualHeight}else q=X.getOffset(J);let Z=X.getHeight(J);switch(Q){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let M=Y.virtualHeight-$;return Math.max(0,Math.min(q,M))};var ej=()=>{};var Rj=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var kJ={};z2(kJ,{createGridRenderer:()=>jJ});var u2=(J=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let q=document.createElement("div");return q.setAttribute("role","option"),q},release:(Q)=>{if(X.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-row"),Q.removeAttribute("data-col"),X.push(Q)},clear:()=>{X.length=0}}},jJ=(J,X,$,j,Y,Q,q,Z)=>{let M=u2(),_=new Map,B=Q,A=!1,L=null,b=0,N="",D=(z)=>{if(L&&b===z)return L;return L=Lj(z,$),b=z,L},E={selected:!1,focused:!1},F=(z,R)=>{return E.selected=z,E.focused=R,E},O=`${Y}-item ${Y}-grid-item`,k=`${Y}-item--selected`,G=`${Y}-item--focused`,T=(z,R)=>{if(typeof R==="string")z.innerHTML=R;else z.replaceChildren(R)},U=(z,R,u)=>{z.classList.toggle(k,R),z.classList.toggle(G,u)},C=(z,R)=>{let u=j.getRow(z);if(R){let h=R.totalItems,c=D(h);if(c.isCompressed)return Ij(u,R.scrollTop,$,h,R.containerHeight,c,R.rangeStart)}return $.getOffset(u)},W=(z,R,u)=>{let h=z.dataset.id?.startsWith("__group_header"),c=h?0:j.getCol(R),a=h?0:j.getColumnOffset(c,B),Xj;if(A){let Bj=j.getRow(R),m=0,Yj=new Set;for(let n=0;n<R;n++){let $j=j.getRow(n);if($j<Bj&&!Yj.has($j)){let t=$.getHeight(n);m+=t,Yj.add($j)}}Xj=m}else Xj=C(R,u);z.style.transform=`translate(${Math.round(a)}px, ${Math.round(Xj)}px)`},y=(z,R)=>{let u=z.dataset.id?.startsWith("__group_header"),h=u?B:j.getColumnWidth(B),c;if(A||u)c=$.getHeight(R)-j.gap;else{let a=j.getRow(R);c=$.getHeight(a)-j.gap}z.style.width=`${h}px`,z.style.height=`${c}px`},x=(z,R,u,h,c)=>{let a=M.acquire(),Xj=F(u,h);if(a.className=O,a.dataset.index=String(z),a.dataset.id=String(R.id),a.dataset.row=String(j.getRow(z)),a.dataset.col=String(j.getCol(z)),a.ariaSelected=String(u),Z)a.id=`${Z}-item-${z}`;if(q)N=String(q()),a.setAttribute("aria-setsize",N),a.setAttribute("aria-posinset",String(z+1));y(a,z);let Bj=X(R,z,Xj);return T(a,Bj),U(a,u,h),W(a,z,c),a},o=(z,R,u,h,c)=>{if(R.start===0&&z.length>0)A=Rj(z[0]);for(let[m,Yj]of _)if(m<R.start||m>R.end)Yj.element.remove(),M.release(Yj.element),_.delete(m);let a=!1;if(q){let m=String(q());a=m!==N,N=m}let Xj=document.createDocumentFragment(),Bj=[];for(let m=R.start;m<=R.end;m++){let Yj=m-R.start,n=z[Yj];if(!n){console.warn(`⚠️ RENDER: Missing item at index ${m} (range: ${R.start}-${R.end}, items.length: ${z.length})`);continue}let $j=u.has(n.id),t=m===h,Jj=_.get(m);if(Jj){let v=Jj.element.dataset.id,S=String(n.id);if(v!==S){let jj=F($j,t),g=X(n,m,jj);T(Jj.element,g),Jj.element.dataset.id=S,Jj.element.dataset.row=String(j.getRow(m)),Jj.element.dataset.col=String(j.getCol(m)),y(Jj.element,m)}if(U(Jj.element,$j,t),Jj.element.ariaSelected=String($j),W(Jj.element,m,c),a)Jj.element.setAttribute("aria-setsize",N)}else{let v=x(m,n,$j,t,c);Xj.appendChild(v),Bj.push({index:m,element:v})}}if(Bj.length>0){J.appendChild(Xj);for(let{index:m,element:Yj}of Bj)_.set(m,{index:m,element:Yj})}},d=(z)=>{for(let[R,u]of _)W(u.element,R,z)},e=(z,R,u,h)=>{let c=_.get(z);if(c){let a=F(u,h),Xj=X(R,z,a);T(c.element,Xj),U(c.element,u,h),c.element.dataset.id=String(R.id),c.element.ariaSelected=String(u),y(c.element,z)}},i=(z,R,u)=>{let h=_.get(z);if(h)U(h.element,R,u)},H=(z)=>{return _.get(z)?.element},w=(z)=>{if(Math.abs(z-B)<1)return;B=z;for(let[R,u]of _)y(u.element,R),W(u.element,R)},I=()=>{for(let[,z]of _)z.element.remove(),M.release(z.element);_.clear()};return{render:o,updatePositions:d,updateItem:e,updateItemClasses:i,getElement:H,updateContainerWidth:w,clear:I,destroy:()=>{I(),M.clear()}}};var JJ=MJ(()=>{ej()});var P2=0,Pj=5,b2=100,rj=2,k2=(J=0)=>{let X=Array(Pj);for(let $=0;$<Pj;$++)X[$]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},y2=(J,X)=>{let $=performance.now(),j=$-J.lastTime;if(j===0)return J;if(j>b2){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let Q=J.samples[0];return Q.position=X,Q.time=$,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=X,J.lastTime=$,J}let Y=J.samples[J.sampleIndex];if(Y.position=X,Y.time=$,J.sampleIndex=(J.sampleIndex+1)%Pj,J.sampleCount=Math.min(J.sampleCount+1,Pj),J.sampleCount>=rj){let Q=(J.sampleIndex-J.sampleCount+Pj)%Pj,q=J.samples[Q],Z=X-q.position,M=$-q.time;J.velocity=M>0?Math.abs(Z)/M:0}return J.lastPosition=X,J.lastTime=$,J},AJ=(J,X)=>{if(typeof J==="number"){let Q=X;return{getOffset:(q)=>q*J,getHeight:()=>J,indexAtOffset:(q)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(q/J),Q-1))},getTotalHeight:()=>Q*J,getTotal:()=>Q,rebuild:(q)=>{Q=q},isVariable:()=>!1}}let $=X,j=new Float64Array(0),Y=(Q)=>{$=Q,j=new Float64Array(Q+1),j[0]=0;for(let q=0;q<Q;q++)j[q+1]=j[q]+J(q)};return Y(X),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return j[$];return j[Q]},getHeight:(Q)=>J(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=j[$])return $-1;let q=0,Z=$-1;while(q<Z){let M=q+Z+1>>>1;if(j[M]<=Q)q=M;else Z=M-1}return q},getTotalHeight:()=>j[$]??0,getTotal:()=>$,rebuild:(Q)=>Y(Q),isVariable:()=>!0}},H2=()=>{let J={},X=(Q,q)=>{if(!J[Q])J[Q]=new Set;return J[Q].add(q),()=>$(Q,q)},$=(Q,q)=>{J[Q]?.delete(q)};return{on:X,off:$,emit:(Q,q)=>{J[Q]?.forEach((Z)=>{try{Z(q)}catch(M){console.error(`[vlist] Error in "${Q}" handler:`,M)}})},clear:()=>{for(let Q in J)delete J[Q]}}},T2=(J)=>{if(typeof J==="string"){let X=document.querySelector(J);if(!X)throw Error(`[vlist/builder] Container not found: ${J}`);return X}return J},R2=(J,X,$,j)=>{let Y=document.createElement("div");if(Y.className=X,j)Y.classList.add(`${X}--horizontal`);if(Y.setAttribute("role","listbox"),Y.setAttribute("tabindex","0"),$)Y.setAttribute("aria-label",$);if(j)Y.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${X}-viewport`,j)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let q=document.createElement("div");if(q.className=`${X}-content`,q.style.position="relative",j)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${X}-items`,Z.style.position="relative",j)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),Q.appendChild(q),Y.appendChild(Q),J.appendChild(Y),{root:Y,viewport:Q,content:q,items:Z}},w2=(J=100)=>{let X=[];return{acquire:()=>{let $=X.pop();if($)return $;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:($)=>{if(X.length<J)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),X.push($)},clear:()=>{X.length=0}}},v2=(J,X,$,j,Y)=>{if(j===0||X===0){Y.start=0,Y.end=0;return}let Q=$.indexAtOffset(J),q=$.indexAtOffset(J+X);if(q<j-1)q++;Y.start=Math.max(0,Q),Y.end=Math.min(j-1,Math.max(0,q))},C2=(J,X,$,j)=>{if($===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X)},S2=(J,X,$,j,Y)=>{if(j===0)return 0;let Q=Math.max(0,Math.min(J,j-1)),q=X.getOffset(Q),Z=X.getHeight(Q),M=Math.max(0,X.getTotalHeight()-$),_;switch(Y){case"center":_=q-($-Z)/2;break;case"end":_=q-$+Z;break;default:_=q}return Math.max(0,Math.min(_,M))},f2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,I2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},aj=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let X=J.direction==="horizontal",$=X?"width":"height",j=X?J.item.width:J.item.height;if(j==null)throw Error(`[vlist/builder] item.${$} is required${X?" when direction is 'horizontal'":""}`);if(typeof j==="number"&&j<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof j!=="number"&&typeof j!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(X&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let Y=new Map,Q=!1,q={use(Z){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return Y.set(Z.name,Z),q},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,p2(J,Y,X,j)}};return q};function p2(J,X,$,j){let{item:Y,items:Q,overscan:q=3,classPrefix:Z="vlist",ariaLabel:M,reverse:_=!1,scroll:B}=J,A=B?.wheel??!0,L=B?.wrap??!1,b=_,N=`${Z}-${P2++}`,D=j,E=$?typeof Y.height==="number"?Y.height:void 0:typeof Y.width==="number"?Y.width:void 0,F=Y.template,O={overscan:q,classPrefix:Z,reverse:b,wrap:L,horizontal:$,ariaIdPrefix:N},k=Array.from(X.values()).sort((K,V)=>(K.priority??50)-(V.priority??50)),G=new Set(k.map((K)=>K.name));for(let K of k)if(K.conflicts){for(let V of K.conflicts)if(G.has(V))throw Error(`[vlist/builder] ${K.name} and ${V} cannot be combined`)}if($){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(b){if(G.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let T=T2(J.container),U=R2(T,Z,M,$),C=H2(),W=Q?[...Q]:[],y=AJ(D,W.length),x=w2(),o=U.viewport.clientHeight,d=U.viewport.clientWidth,e=!1,i=!1,H=0,w=null,I=null,p=k2(0),z={start:0,end:0},R={start:0,end:0},u={start:-1,end:-1},h={viewportState:{scrollTop:0,containerHeight:o,totalHeight:y.getTotalHeight(),actualHeight:y.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},c=new Map,a={selected:!1,focused:!1},Xj=`${Z}-item`,Bj="",m=new Map,Yj=()=>{m.clear();for(let K=0;K<W.length;K++){let V=W[K];if(V)m.set(V.id,K)}};Yj();let n=null,$j=()=>n?n.getTotal():W.length,t=[],Jj=[],v=[],S=[],s=[],jj=[],g=new Map,Qj=()=>{return $?U.viewport.scrollLeft:U.viewport.scrollTop},qj=(K)=>{if($)U.viewport.scrollLeft=K;else U.viewport.scrollTop=K},Mj=(K=2)=>{let V=y.getTotalHeight();return H+o>=V-K},Uj=!1,Kj,_j,Zj=(K,V,P,f,r)=>{v2(K,V,P,f,r)},Gj=(K,V,P,f,r)=>{return S2(K,V,P,f,r)},Wj=(K,V)=>{if(typeof V==="string")K.innerHTML=V;else K.replaceChildren(V)},Fj=(K,V)=>{let P=Math.round(y.getOffset(V));if($)K.style.transform=`translateX(${P}px)`;else K.style.transform=`translateY(${P}px)`},j2=(K,V)=>{let P=x.acquire();if(P.className=Xj,$){if(P.style.width=`${y.getHeight(K)}px`,E!=null)P.style.height=`${E}px`}else P.style.height=`${y.getHeight(K)}px`;return P.dataset.index=String(K),P.dataset.id=String(V.id),P.ariaSelected="false",P.id=`${N}-item-${K}`,Bj=String($j()),P.setAttribute("aria-setsize",Bj),P.setAttribute("aria-posinset",String(K+1)),Wj(P,F(V,K,a)),Fj(P,K),P},kj=()=>{let K=`${y.getTotalHeight()}px`;if($)U.content.style.width=K;else U.content.style.height=K},mj=new Set,gj=-1,J2=()=>{if(e)return;let K=$j();if(Zj(H,o,y,K,z),C2(z,q,K,R),R.start===u.start&&R.end===u.end)return;let V=String(K),P=V!==Bj;Bj=V;for(let[l,Dj]of c)if(l<R.start||l>R.end)Dj.remove(),x.release(Dj),c.delete(l);let f=document.createDocumentFragment(),r=[];for(let l=R.start;l<=R.end;l++){let Dj=n?n.getItem(l):W[l];if(!Dj)continue;let Vj=c.get(l);if(Vj){let Aj=Vj.dataset.id,Sj=String(Dj.id);if(Aj!==Sj)if(Wj(Vj,F(Dj,l,a)),Vj.dataset.id=Sj,$)Vj.style.width=`${y.getHeight(l)}px`;else Vj.style.height=`${y.getHeight(l)}px`;Fj(Vj,l);let fj=mj.has(Dj.id),A2=l===gj;if(Vj.classList.toggle(`${Z}-item--selected`,fj),Vj.classList.toggle(`${Z}-item--focused`,A2),Vj.ariaSelected=fj?"true":"false",P)Vj.setAttribute("aria-setsize",Bj)}else{let Aj=j2(l,Dj),Sj=mj.has(Dj.id),fj=l===gj;if(Sj)Aj.classList.add(`${Z}-item--selected`),Aj.ariaSelected="true";if(fj)Aj.classList.add(`${Z}-item--focused`);f.appendChild(Aj),r.push({index:l,element:Aj})}}if(r.length>0){U.items.appendChild(f);for(let{index:l,element:Dj}of r)c.set(l,Dj)}u.start=R.start,u.end=R.end,h.lastRenderRange.start=R.start,h.lastRenderRange.end=R.end,h.viewportState.scrollTop=H,h.viewportState.visibleRange.start=z.start,h.viewportState.visibleRange.end=z.end,h.viewportState.renderRange.start=R.start,h.viewportState.renderRange.end=R.end,C.emit("range:change",{range:{start:R.start,end:R.end}})},Q2=()=>{u.start=-1,u.end=-1,Kj()};Kj=J2,_j=Q2;let yj=()=>{if(e)return;let K=Qj(),V=K>=H?"down":"up";if(p=y2(p,K),!U.root.classList.contains(`${Z}--scrolling`))U.root.classList.add(`${Z}--scrolling`);H=K,Kj(),C.emit("scroll",{scrollTop:K,direction:V}),C.emit("velocity:change",{velocity:p.velocity,reliable:p.sampleCount>=rj});for(let P=0;P<t.length;P++)t[P](K,V);if(I)clearTimeout(I);I=setTimeout(()=>{U.root.classList.remove(`${Z}--scrolling`),p.velocity=0,p.sampleCount=0,C.emit("velocity:change",{velocity:0,reliable:!1})},B?.idleTimeout??150)},vj=null,zj=U.viewport;if(zj.addEventListener("scroll",yj,{passive:!0}),$&&A)vj=(K)=>{if(K.deltaX)return;K.preventDefault(),U.viewport.scrollLeft+=K.deltaY},U.viewport.addEventListener("wheel",vj);U.viewport.classList.add(`${Z}-viewport--custom-scrollbar`);let WJ=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=n?.getItem(f)??W[f];if(r){if(r.__groupHeader)return;C.emit("item:click",{item:r,index:f,event:K})}}}for(let f=0;f<Jj.length;f++)Jj[f](K)},$2=(K)=>{let P=K.target.closest("[data-index]");if(P){let f=parseInt(P.dataset.index??"-1",10);if(f>=0){let r=n?.getItem(f)??W[f];if(r){if(r.__groupHeader)return;C.emit("item:dblclick",{item:r,index:f,event:K})}}}},NJ=(K)=>{for(let V=0;V<v.length;V++)v[V](K)};U.items.addEventListener("click",WJ),U.items.addEventListener("dblclick",$2),U.root.addEventListener("keydown",NJ);let dj=!0,X2=()=>d,q2=()=>o,cj=new ResizeObserver((K)=>{if(e)return;for(let V of K){let P=V.contentRect.height,f=V.contentRect.width,r=$?f:P;if(d=f,Math.abs(r-o)>1){if(o=r,h.viewportState.containerHeight=r,i)kj(),Kj(),C.emit("resize",{height:P,width:f})}if(i)for(let l=0;l<S.length;l++)S[l](f,P)}});if(dj)cj.observe(U.viewport);let Nj={get dom(){return U},get heightCache(){return y},get emitter(){return C},get config(){return O},get rawConfig(){return J},get renderer(){return{render:(K,V,P,f,r)=>{mj=P,gj=f,_j()},updateItemClasses:(K,V,P)=>{let f=c.get(K);if(!f)return;f.classList.toggle(`${Z}-item--selected`,V),f.classList.toggle(`${Z}-item--focused`,P),f.ariaSelected=V?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(K)=>c.get(K)??null,clear:()=>{},destroy:()=>{}}},set renderer(K){},get dataManager(){return n},set dataManager(K){n=K},get scrollController(){return lj},set scrollController(K){lj=K},state:h,getContainerWidth(){return d},afterScroll:t,clickHandlers:Jj,keydownHandlers:v,resizeHandlers:S,contentSizeHandlers:s,destroyHandlers:jj,methods:g,replaceTemplate(K){F=K},replaceRenderer(K){},replaceDataManager(K){n=K},replaceScrollController(K){lj=K},getItemsForRange(K){let V=[];for(let P=K.start;P<=K.end;P++){let f=n?n.getItem(P):W[P];if(f)V.push(f)}return V},getAllLoadedItems(){if(n){let K=n.getTotal(),V=[];for(let P=0;P<K;P++){let f=n.getItem(P);if(f)V.push(f)}return V}return[...W]},getVirtualTotal(){return $j()},getCachedCompression(){return{isCompressed:!1,actualHeight:y.getTotalHeight(),virtualHeight:y.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:H,totalItems:$j(),containerHeight:o,rangeStart:R.start}},renderIfNeeded(){Kj()},forceRender(){_j()},getRenderFns(){return{renderIfNeeded:Kj,forceRender:_j}},setRenderFns(K,V){Kj=K,_j=V},setVirtualTotalFn(K){$j=K},rebuildHeightCache(K){y.rebuild(K??$j())},setHeightConfig(K){y=AJ(K,$j())},updateContentSize(K){let V=`${K}px`;if($)U.content.style.width=V;else U.content.style.height=V},updateCompressionMode(){},setVisibleRangeFn(K){Zj=K},setScrollToPosFn(K){Gj=K},setPositionElementFn(K){Fj=K},setScrollFns(K,V){Qj=K,qj=(P)=>{V(P),yj()}},setScrollTarget(K){zj.removeEventListener("scroll",yj),zj=K,zj.addEventListener("scroll",yj,{passive:!0})},getScrollTarget(){return zj},setContainerDimensions(K){X2=K.width,q2=K.height,d=K.width(),o=K.height(),h.viewportState.containerHeight=o},disableViewportResize(){if(dj)dj=!1,cj.unobserve(U.viewport)}};n={getState:()=>({total:W.length,cached:W.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>W.length,getCached:()=>W.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(K)=>W[K],getItemById:(K)=>{let V=m.get(K);return V!==void 0?W[V]:void 0},getIndexById:(K)=>m.get(K)??-1,isItemLoaded:(K)=>K>=0&&K<W.length&&W[K]!==void 0,getItemsInRange:(K,V)=>{let P=[],f=Math.max(0,K),r=Math.min(V,W.length-1);for(let l=f;l<=r;l++)P.push(W[l]);return P},setTotal:(K)=>{},setItems:(K,V=0,P)=>{if(V===0&&(P!==void 0||W.length===0))W=[...K];else{let f=V+K.length;if(W.length<f)W.length=f;for(let r=0;r<K.length;r++)W[V+r]=K[r]}if(Yj(),i){y.rebuild($j()),kj(),Nj.updateCompressionMode();for(let f=0;f<s.length;f++)s[f]();_j()}},updateItem:(K,V)=>{let P=m.get(K);if(P===void 0)return!1;let f=W[P];if(!f)return!1;if(W[P]={...f,...V},V.id!==void 0&&V.id!==K)m.delete(K),m.set(V.id,P);let r=c.get(P);if(r)Wj(r,F(W[P],P,a)),r.dataset.id=String(W[P].id);return!0},removeItem:(K)=>{let V=m.get(K);if(V===void 0)return!1;if(W.splice(V,1),Yj(),i){y.rebuild($j()),kj(),Nj.updateCompressionMode();for(let P=0;P<s.length;P++)s[P]();_j()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{W=[],m.clear()},reset:()=>{if(W=[],m.clear(),i)y.rebuild(0),kj(),_j()}};let lj={getScrollTop:()=>Qj(),scrollTo:(K)=>{qj(K),H=K,Kj()},scrollBy:(K)=>{let V=Qj()+K;qj(V),H=V,Kj()},isAtTop:()=>H<=2,isAtBottom:(K=2)=>Mj(K),getScrollPercentage:()=>{let K=y.getTotalHeight(),V=Math.max(0,K-o);return V>0?H/V:0},getVelocity:()=>p.velocity,isTracking:()=>p.sampleCount>=rj,isScrolling:()=>U.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>Uj,isWindowMode:()=>!1,updateContainerHeight:(K)=>{o=K},destroy:()=>{}},DJ=new Map;for(let K of k)if(K.methods)for(let V of K.methods){let P=DJ.get(V);if(P)throw Error(`[vlist/builder] Method "${V}" is registered by both "${P}" and "${K.name}"`);DJ.set(V,K.name)}for(let K of k)K.setup(Nj);if(i=!0,Nj.state.isInitialized=!0,kj(),Kj(),b&&W.length>0){let K=Gj(W.length-1,y,o,W.length,"end");qj(K),H=K,Kj()}let K2=(K)=>{Nj.dataManager.setItems(K,0,K.length)},Y2=b?(K)=>{let V=Mj(2),P=W.length;if(Nj.dataManager.setItems(K,P),V&&W.length>0){let f=Gj(W.length-1,y,o,W.length,"end");qj(f),H=f,Kj()}}:(K)=>{let V=W.length;Nj.dataManager.setItems(K,V)},Z2=b?(K)=>{let V=Qj(),P=y.getTotalHeight(),f=[...W];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...f],0);let l=y.getTotalHeight()-P;if(l>0)qj(V+l),H=V+l}:(K)=>{let V=[...W];Nj.dataManager.clear(),Nj.dataManager.setItems([...K,...V],0)},B2=(K,V)=>{Nj.dataManager.updateItem(K,V)},U2=(K)=>{Nj.dataManager.removeItem(K)},W2=async()=>{if(Nj.dataManager.reload)await Nj.dataManager.reload()},Cj=()=>{if(w!==null)cancelAnimationFrame(w),w=null},N2=(K,V,P)=>{if(Cj(),Math.abs(V-K)<1){qj(V),H=V,Kj();return}let f=performance.now(),r=(l)=>{let Dj=l-f,Vj=Math.min(Dj/P,1),Aj=K+(V-K)*f2(Vj);if(qj(Aj),H=Aj,Kj(),Vj<1)w=requestAnimationFrame(r);else w=null};w=requestAnimationFrame(r)},VJ=(K,V)=>{let{align:P,behavior:f,duration:r}=I2(V),l=$j(),Dj=K;if(L&&l>0)Dj=(Dj%l+l)%l;let Vj=Gj(Dj,y,o,l,P);if(f==="smooth")N2(Qj(),Vj,r);else Cj(),qj(Vj)},D2=(K,V)=>{let P=m.get(K)??Nj.dataManager.getIndexById(K);if(P>=0)VJ(P,V)},V2=()=>Qj(),_2=(K,V)=>{return C.on(K,V)},G2=(K,V)=>{C.off(K,V)},M2=()=>{if(e)return;if(e=!0,Nj.state.isDestroyed=!0,U.items.removeEventListener("click",WJ),U.root.removeEventListener("keydown",NJ),zj.removeEventListener("scroll",yj),cj.disconnect(),vj)U.viewport.removeEventListener("wheel",vj);if(I)clearTimeout(I);for(let K=0;K<jj.length;K++)jj[K]();for(let K of k)if(K.destroy)K.destroy();Cj();for(let[,K]of c)K.remove(),x.release(K);c.clear(),x.clear(),C.clear(),U.root.remove()},_J={get element(){return U.root},get items(){if(g.has("_getItems"))return g.get("_getItems")();return W},get total(){if(g.has("_getTotal"))return g.get("_getTotal")();return $j()},setItems:g.has("setItems")?g.get("setItems"):K2,appendItems:g.has("appendItems")?g.get("appendItems"):Y2,prependItems:g.has("prependItems")?g.get("prependItems"):Z2,updateItem:g.has("updateItem")?g.get("updateItem"):B2,removeItem:g.has("removeItem")?g.get("removeItem"):U2,reload:g.has("reload")?g.get("reload"):W2,scrollToIndex:g.has("scrollToIndex")?g.get("scrollToIndex"):VJ,scrollToItem:g.has("scrollToItem")?g.get("scrollToItem"):D2,cancelScroll:g.has("cancelScroll")?g.get("cancelScroll"):Cj,getScrollPosition:g.has("getScrollPosition")?g.get("getScrollPosition"):V2,on:_2,off:G2,destroy:M2};for(let[K,V]of g){if(K==="setItems"||K==="appendItems"||K==="prependItems"||K==="updateItem"||K==="removeItem"||K==="reload"||K==="scrollToIndex"||K==="scrollToItem"||K==="cancelScroll"||K==="getScrollPosition")continue;_J[K]=V}return _J}var EJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),$=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},Q=(N)=>{if(N<=0)return 0;if(!j)return Math.ceil(N/X);let D=0,E=0,F=0;for(let O=0;O<N;O++)if(j(O)){if(F++,E>0)D++,E=0;D++,E=0}else if(E++,E>=X)D++,E=0;if(E>0)D++;return D},q=(N)=>{return Y.row=Z(N),Y.col=M(N),Y},Z=(N)=>{if(!j)return Math.floor(N/X);let D=0,E=0;for(let F=0;F<=N;F++)if(j(F)){if(E>0)D++,E=0;if(F===N)return D;D++,E=0}else{if(F===N)return D;if(E++,E>=X)D++,E=0}return console.warn(`⚠️ getRow(${N}) fell through - returning ${D}`),D},M=(N)=>{if(!j)return N%X;if(j(N))return 0;let D=0;for(let E=0;E<=N;E++)if(j(E))D=0;else{if(E===N)return D;if(D++,D>=X)D=0}return D},_=(N,D,E)=>{if(E<=0)return{start:0,end:-1};if(!j){let T=Math.max(0,N*X),U=Math.min(E-1,(D+1)*X-1);return{start:T,end:U}}let F=-1,O=-1,k=0,G=0;for(let T=0;T<E;T++){if(j(T)){if(G>0)k++,G=0;if(k>=N&&k<=D){if(F===-1)F=T;O=T}k++,G=0}else{if(k>=N&&k<=D){if(F===-1)F=T;O=T}if(G++,G>=X)k++,G=0}if(k>D&&G===0)break}if(F===-1)return{start:0,end:-1};return{start:F,end:O}},B=(N,D,E)=>{if(D<0||D>=X)return-1;let F=N*X+D;if(F<0||F>=E)return-1;return F},A=(N)=>{let D=(X-1)*$;return Math.max(0,(N-D)/X)};return{get columns(){return X},get gap(){return $},update:(N)=>{if(N.columns!==void 0)X=Math.max(1,Math.floor(N.columns));if(N.gap!==void 0)$=N.gap;if(N.isHeaderFn!==void 0)j=N.isHeaderFn},getTotalRows:Q,getPosition:q,getRow:Z,getCol:M,getItemRange:_,getItemIndex:B,getColumnWidth:A,getColumnOffset:(N,D)=>{let E=A(D);return N*(E+$)}}};JJ();var yJ=(J,X,$,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;let q=$.indexAtOffset(J),Z=$.indexAtOffset(J+X);if(Z<j-1)Z++;return Q.start=Math.max(0,q),Q.end=Math.min(j-1,Math.max(0,Z)),Q},HJ=(J,X,$,j)=>{if($===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-X),j.end=Math.min($-1,J.end+X),j},TJ=(J,X,$,j,Y,Q)=>{if(j===0)return 0;let q=Math.max(0,Math.min(J,j-1)),Z=X.getOffset(q),M=X.getHeight(q),_=X.getTotalHeight(),B=Math.max(0,_-$),A;switch(Q){case"center":A=Z-$/2+M/2;break;case"end":A=Z-$+M;break;case"start":default:A=Z;break}return Math.max(0,Math.min(A,B))};var QJ=(J,X,$,j,Y,Q=yJ)=>{return Q(J.scrollTop,J.containerHeight,X,$,Y,J.visibleRange),HJ(J.visibleRange,j,$,J.renderRange),J.totalHeight=Y.virtualHeight,J.actualHeight=Y.actualHeight,J.isCompressed=Y.isCompressed,J.compressionRatio=Y.ratio,J},Oj=(J,X,$,j,Y="start",Q,q=TJ)=>{return q(J,X,$,j,Q,Y)};var RJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,$=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:Q,config:q,rawConfig:Z}=j,{classPrefix:M}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let _=Z.items?.some((G)=>G.__groupHeader===!0),B={columns:J.columns,gap:J.gap??0};if(_)B.isHeaderFn=(G)=>{let T=j.dataManager.getItem(G);return!!(T&&T.__groupHeader===!0)};X=EJ(B);let A=X.gap;j.setVirtualTotalFn(()=>{let G=j.dataManager.getTotal();return X.getTotalRows(G)});let L=Z.item,b=q.horizontal?L.width:L.height,N={containerWidth:j.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof b==="function")j.setHeightConfig((G)=>{let T=N.containerWidth-2,U=(N.columns-1)*N.gap,C=(T-U)/N.columns,W={containerWidth:N.containerWidth,columns:N.columns,gap:N.gap,columnWidth:C,row:X.getRow(G),column:X.getCol(G),totalRows:X.getTotalRows(j.dataManager.getTotal()),totalColumns:N.columns};return b(G,W)+N.gap});else if(A>0)j.setHeightConfig(b+A);j.rebuildHeightCache(),Y.root.classList.add(`${M}--grid`);let D=j.getContainerWidth(),E=Z.item.template,F=()=>{$=jJ(Y.items,E,j.heightCache,X,M,D,()=>j.dataManager.getTotal(),q.ariaIdPrefix),j.replaceRenderer($)};F(),j.methods.set("_getGridLayout",()=>X),j.methods.set("_getGridConfig",()=>B),j.methods.set("_replaceGridRenderer",(G)=>{$=G}),j.methods.set("_updateGridLayoutForGroups",(G)=>{X.update({isHeaderFn:G});let T=j.dataManager.getTotal(),U=0;for(let C=0;C<T;C++)if(X.getCol(C)===0){let W=j.heightCache.getHeight(C);U+=W}j.heightCache.getTotalHeight=()=>U,j.dom.content.style.height=`${U}px`,F()}),j.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");B.columns=G.columns}if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");B.gap=G.gap}if(X)X.update(B);let T=j.getContainerWidth();if(N.containerWidth=T,N.columns=B.columns,N.gap=B.gap??0,$)$.updateContainerWidth(T);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let U=0;U<j.contentSizeHandlers.length;U++)j.contentSizeHandlers[U]();if($)$.clear();j.forceRender()});let O=()=>{if(j.state.isDestroyed)return;let G=j.scrollController.getScrollTop(),T=j.state.viewportState.containerHeight,U=j.getVirtualTotal(),C={start:0,end:0};if(U===0||T===0)C.start=0,C.end=0;else{C.start=Math.max(0,j.heightCache.indexAtOffset(G));let w=j.heightCache.indexAtOffset(G+T);if(w<U-1)w++;C.end=Math.min(U-1,Math.max(0,w))}let W=q.overscan??3,y={start:Math.max(0,C.start-W),end:Math.min(U-1,C.end+W)};j.state.viewportState.scrollTop=G,j.state.viewportState.visibleRange=C,j.state.viewportState.renderRange=y;let x=j.state.lastRenderRange,o=j.state.viewportState.isCompressed;if(y.start===x.start&&y.end===x.end){if(o)$.updatePositions(j.getCompressionContext());return}let d=j.dataManager.getTotal(),e=X.getItemRange(y.start,y.end,d),i=j.dataManager.getItemsInRange(e.start,e.end),H=o?j.getCompressionContext():void 0;$.render(i,e,new Set,-1,H),j.state.lastRenderRange={...y},Q.emit("range:change",{range:y})},k=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},O()};if(j.setRenderFns(O,k),j.resizeHandlers.push((G,T)=>{if($)$.updateContainerWidth(G)}),j.methods.set("scrollToIndex",(G,T)=>{let U=Math.floor(G/J.columns),{align:C,behavior:W}=h2(T),y=j.dataManager.getState(),x=X.getTotalRows(y.total),o=Math.max(0,Math.min(U,x-1)),d=Oj(o,j.heightCache,j.state.viewportState.containerHeight,x,C,j.getCachedCompression());if(W==="smooth")j.scrollController.scrollTo(d);else j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if($)$.destroy(),$=null;Y.root.classList.remove(`${M}--grid`)})},destroy(){if($)$.destroy(),$=null}}},$J=300,h2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:$J};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??$J};return{align:"start",behavior:"auto",duration:$J}};var XJ=(J,X)=>{let $=0,j=J.length-1;while($<j){let Y=$+j+1>>>1;if(J[Y].headerLayoutIndex<=X)$=Y;else j=Y-1}return $},wJ=(J,X)=>{let $=0,j=J.length-1;while($<j){let Y=$+j+1>>>1;if(J[Y].firstDataIndex<=X)$=Y;else j=Y-1}return $},vJ=(J,X)=>{if(J===0)return[];let $=[],j=X(0),Y=0,Q=0;for(let q=1;q<J;q++){let Z=X(q);if(Z!==j){let M=q-Y;$.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:M}),Q=Q+1+M,j=Z,Y=q}}return $.push({key:j,groupIndex:$.length,headerLayoutIndex:Q,firstDataIndex:Y,count:J-Y}),$},qJ=(J,X)=>{if(J.length===0||X.length===0)return[];let $=J.length+X.length,j=Array($),Y=0;for(let Q of X){j[Y]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},Y++;for(let q=0;q<Q.count;q++)j[Y]=J[Q.firstDataIndex+q],Y++}return j},KJ=(J,X)=>{let $=typeof X==="number"?(j)=>X:X;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return $(Y.dataIndex)}},CJ=(J,X)=>{let $=vJ(J,X.getGroupForIndex),j=J+$.length,Y=X.headerHeight;return{get totalEntries(){return j},get groupCount(){return $.length},get groups(){return $},getEntry:(L)=>{if($.length===0)return{type:"item",dataIndex:L,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let b=XJ($,L),N=$[b];if(L===N.headerLayoutIndex)return{type:"header",group:N};let D=L-N.headerLayoutIndex-1;return{type:"item",dataIndex:N.firstDataIndex+D,group:N}},layoutToDataIndex:(L)=>{if($.length===0)return L;let b=XJ($,L),N=$[b];if(L===N.headerLayoutIndex)return-1;let D=L-N.headerLayoutIndex-1;return N.firstDataIndex+D},dataToLayoutIndex:(L)=>{if($.length===0)return L;let b=wJ($,L),N=$[b],D=L-N.firstDataIndex;return N.headerLayoutIndex+1+D},getGroupAtLayoutIndex:(L)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=XJ($,L);return $[b]},getGroupAtDataIndex:(L)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let b=wJ($,L);return $[b]},getHeaderHeight:typeof Y==="number"?(L)=>Y:(L)=>{let b=$[L];if(!b)return 0;return Y(b.key,L)},rebuild:(L)=>{$=vJ(L,X.getGroupForIndex),j=L+$.length}}};var SJ=(J,X,$,j,Y)=>{let Q=document.createElement("div");Q.className=`${Y}-sticky-header`,Q.setAttribute("role","presentation"),Q.setAttribute("aria-hidden","true"),Q.style.position="absolute",Q.style.top="0",Q.style.left="0",Q.style.right="0",Q.style.zIndex="5",Q.style.pointerEvents="none",Q.style.willChange="transform",Q.style.overflow="hidden",J.insertBefore(Q,J.firstChild);let q=-1,Z=!1,M=0,_=(D)=>{if(D===q)return;q=D;let E=X.groups;if(D<0||D>=E.length){Q.textContent="";return}let F=E[D],O=j.headerTemplate(F.key,F.groupIndex),k=X.getHeaderHeight(D);if(Q.style.height=`${k}px`,typeof O==="string")Q.innerHTML=O;else Q.replaceChildren(O)},B=(D)=>{let E=X.groups;if(E.length===0){L();return}let F=0;for(let U=E.length-1;U>=0;U--)if($.getOffset(E[U].headerLayoutIndex)<=D){F=U;break}let O=$.getOffset(E[0].headerLayoutIndex);if(D<O){L();return}if(!Z)A();_(F);let k=X.getHeaderHeight(F),G=0,T=F+1;if(T<E.length){let C=$.getOffset(E[T].headerLayoutIndex)-D;if(C<k)G=C-k}if(G!==M)M=G,Q.style.transform=G===0?"":`translateY(${Math.round(G)}px)`},A=()=>{if(Z)return;Z=!0,Q.style.display=""},L=()=>{if(!Z)return;Z=!1,Q.style.display="none",q=-1,M=0,Q.style.transform=""},b=()=>{let D=q;if(q=-1,D>=0)_(D)},N=()=>{Q.remove(),q=-1,Z=!1};return Q.style.display="none",{update:B,refresh:b,show:A,hide:L,destroy:N}};var fJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let X=null,$=null,j=[],Y=[];return{name:"withSections",priority:10,setup(Q){let{dom:q,config:Z,rawConfig:M}=Q,{classPrefix:_}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let A=M.item.height;j=M.items?[...M.items]:[];let L=j.length,b={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};X=CJ(L,b),Y=qJ(j,X.groups);let N=KJ(X,A);Q.setHeightConfig(N),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length);let D=M.item.template,{headerTemplate:E}=J,F=(W,y,x)=>{if(Rj(W))return E(W.groupKey,W.groupIndex);return D(W,y,x)},O=Q.methods.get("_getGridLayout"),k=Q.methods.get("_replaceGridRenderer"),G=Q.methods.get("_updateGridLayoutForGroups");if(O&&k){if(G)G((o)=>{let d=Y[o];return!!(d&&Rj(d))});let{createGridRenderer:W}=(JJ(),O2(kJ)),y=O(),x=W(q.items,F,Q.heightCache,y,_,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),Z.ariaIdPrefix);k(x)}else Q.replaceTemplate(F);if(q.root.classList.add(`${_}--grouped`),J.sticky!==!1){$=SJ(q.root,X,Q.heightCache,{...b,sticky:b.sticky??!1},_);let W=$;Q.afterScroll.push((y,x)=>{W.update(y)}),$.update(Q.scrollController.getScrollTop())}let T=()=>{if(!X)return;X.rebuild(j.length),Y=qJ(j,X.groups);let W=KJ(X,A);if(Q.setHeightConfig(W),Q.rebuildHeightCache(Y.length),Q.dataManager.setItems(Y,0,Y.length),$)$.refresh()};Q.methods.set("setItems",(W)=>{j=[...W],T()}),Q.methods.set("appendItems",(W)=>{j=[...j,...W],T()}),Q.methods.set("prependItems",(W)=>{j=[...W,...j],T()}),Q.methods.set("removeItem",(W)=>{j=j.filter((y)=>y.id!==W),T()});let{animateScroll:U,cancelScroll:C}=m2(Q.scrollController,Q.renderIfNeeded);Q.methods.set("scrollToIndex",(W,y)=>{let x=X.dataToLayoutIndex(W),{align:o,behavior:d,duration:e}=g2(y),i=Q.dataManager.getTotal(),H=Oj(x,Q.heightCache,Q.state.viewportState.containerHeight,i,o,Q.getCachedCompression());if(d==="smooth")U(Q.scrollController.getScrollTop(),H,e);else C(),Q.scrollController.scrollTo(H)}),Q.methods.set("_getItems",()=>j),Q.methods.set("_getTotal",()=>j.length),Q.destroyHandlers.push(()=>{if(Ej!==null)cancelAnimationFrame(Ej),Ej=null;if($)$.destroy(),$=null;q.root.classList.remove(`${_}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},YJ=300,x2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,Ej=null,m2=(J,X)=>{let $=()=>{if(Ej!==null)cancelAnimationFrame(Ej),Ej=null};return{animateScroll:(Y,Q,q)=>{if($(),Math.abs(Q-Y)<1){J.scrollTo(Q);return}let Z=performance.now(),M=(_)=>{let B=_-Z,A=Math.min(B/q,1),L=Y+(Q-Y)*x2(A);if(J.scrollTo(L),X(),A<1)Ej=requestAnimationFrame(M);else Ej=null};Ej=requestAnimationFrame(M)},cancelScroll:$}},g2=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:YJ};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??YJ};return{align:"start",behavior:"auto",duration:YJ}};var IJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),ZJ=(J,X,$)=>{if($==="none")return J;let j=new Set(J.selected);if($==="single"){if(j.clear(),X.length>0)j.add(X[0])}else for(let Y of X)j.add(Y);return{...J,selected:j}},BJ=(J,X)=>{let $=new Set(J.selected);for(let j of X)$.delete(j);return{...J,selected:$}},pj=(J,X,$)=>{if($==="none")return J;if(J.selected.has(X))return BJ(J,[X]);else return ZJ(J,[X],$)},pJ=(J,X,$)=>{if($!=="multiple")return J;return{...J,selected:new Set(X.map((j)=>j.id))}},uJ=(J)=>({...J,selected:new Set}),hJ=(J,X)=>{return J.focusedIndex=X,J},xJ=(J,X,$=!0)=>{if(X===0)return J;let j=J.focusedIndex-1;if(j<0)j=$?X-1:0;return J.focusedIndex=j,J},mJ=(J,X,$=!0)=>{if(X===0)return J;let j=J.focusedIndex+1;if(j>=X)j=$?0:X-1;return J.focusedIndex=j,J},gJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=0,J},dJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=X-1,J};var uj=(J)=>{return Array.from(J.selected)},hj=(J,X)=>{let $=[];for(let j of J.selected){let Y=X(j);if(Y)$.push(Y)}return $};var UJ=(J)=>{let X=J?.mode??"single",$=J?.initial,j=IJ($),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:q,emitter:Z,config:M}=Q,{classPrefix:_,ariaIdPrefix:B}=M;if(X==="none"){Q.methods.set("select",()=>{}),Q.methods.set("deselect",()=>{}),Q.methods.set("toggleSelect",()=>{}),Q.methods.set("selectAll",()=>{}),Q.methods.set("clearSelection",()=>{}),Q.methods.set("getSelected",()=>[]),Q.methods.set("getSelectedItems",()=>[]),Q.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:A,forceRender:L}=Q.getRenderFns(),b=()=>{Q.dom.items.querySelectorAll("[data-index]").forEach((k)=>{let G=k,T=G.dataset.id;if(T!==void 0){let U=/^\d+$/.test(T)?parseInt(T,10):T,C=j.selected.has(U),y=parseInt(G.dataset.index??"-1",10)===j.focusedIndex;G.classList.toggle(`${_}-item--selected`,C),G.classList.toggle(`${_}-item--focused`,y),G.ariaSelected=C?"true":"false"}})},N=()=>{if(Q.state.isDestroyed)return;A(),b()},D=()=>{if(Q.state.isDestroyed)return;L(),b()};Q.setRenderFns(N,D);let E=()=>{b(),Z.emit("selection:change",{selected:uj(j),items:hj(j,(O)=>Q.dataManager.getItemById(O))})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${_}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",q.root.appendChild(Y);let F=Y;Z.on("selection:change",({selected:O})=>{let k=O.length;if(k===0)F.textContent="";else if(k===1)F.textContent="1 item selected";else F.textContent=`${k} items selected`}),Q.clickHandlers.push((O)=>{if(Q.state.isDestroyed)return;let G=O.target.closest("[data-index]");if(!G)return;let T=parseInt(G.dataset.index??"-1",10);if(T<0)return;let U=Q.dataManager.getItem(T);if(!U)return;Z.emit("item:click",{item:U,index:T,event:O}),j=hJ(j,T),q.root.setAttribute("aria-activedescendant",`${B}-item-${T}`),j=pj(j,U.id,X),E()}),Q.keydownHandlers.push((O)=>{if(Q.state.isDestroyed)return;let k=Q.dataManager.getTotal(),G=j.focusedIndex,T=!1,U=!1,C=j;switch(O.key){case"ArrowUp":C=xJ(j,k),T=!0,U=!0;break;case"ArrowDown":C=mJ(j,k),T=!0,U=!0;break;case"Home":C=gJ(j,k),T=!0,U=!0;break;case"End":C=dJ(j,k),T=!0,U=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let W=Q.dataManager.getItem(j.focusedIndex);if(W)C=pj(j,W.id,X);T=!0}break}if(T){O.preventDefault(),j=C;let W=j.focusedIndex;if(W>=0){let y=Q.dataManager.getState(),x=Oj(W,Q.heightCache,Q.state.viewportState.containerHeight,y.total,"center",Q.getCachedCompression());Q.scrollController.scrollTo(x),q.root.setAttribute("aria-activedescendant",`${B}-item-${W}`)}else q.root.removeAttribute("aria-activedescendant");if(U){let{selected:y}=j;if(G>=0&&G!==W){let x=Q.dataManager.getItem(G);if(x)Q.renderer.updateItemClasses(G,y.has(x.id),!1)}if(W>=0){let x=Q.dataManager.getItem(W);if(x)Q.renderer.updateItemClasses(W,y.has(x.id),!0)}}else D(),Z.emit("selection:change",{selected:uj(j),items:hj(j,(y)=>Q.dataManager.getItemById(y))})}}),Q.methods.set("select",(...O)=>{j=ZJ(j,O,X),E()}),Q.methods.set("deselect",(...O)=>{j=BJ(j,O),E()}),Q.methods.set("toggleSelect",(O)=>{j=pj(j,O,X),E()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;let O=Q.getAllLoadedItems();j=pJ(j,O,X),E()}),Q.methods.set("clearSelection",()=>{j=uJ(j);let{renderRange:O,isCompressed:k}=Q.state.viewportState,G=Q.getItemsForRange(O),T=k?Q.getCompressionContext():void 0;Q.renderer.render(G,O,j.selected,j.focusedIndex,T),Z.emit("selection:change",{selected:[],items:[]})}),Q.methods.set("getSelected",()=>{return uj(j)}),Q.methods.set("getSelectedItems",()=>{return hj(j,(O)=>Q.dataManager.getItemById(O))}),Q.destroyHandlers.push(()=>{if(F&&F.parentNode)F.remove()})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var wj=(J,X,$={},j="vlist",Y=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:M=!0,hoverZoneWidth:_=16,showOnViewportEnter:B=!0}=$,A=0,L=0,b=0,N=0,D=!1,E=!1,F=0,O=0,k=0,G=null,T=!1,U=null,C=null,W=Y?"width":"height",y=Y?"translateX":"translateY",x=Y?(t)=>t.clientX:(t)=>t.clientY,o=Y?"left":"top",d=document.createElement("div"),e=document.createElement("div"),i=M?document.createElement("div"):null,H=()=>{if(d.className=`${j}-scrollbar`,e.className=`${j}-scrollbar-thumb`,Y)d.classList.add(`${j}-scrollbar--horizontal`);if(d.appendChild(e),J.appendChild(d),i){if(i.className=`${j}-scrollbar-hover`,Y)i.classList.add(`${j}-scrollbar-hover--horizontal`),i.style.height=`${_}px`;else i.style.width=`${_}px`;J.appendChild(i)}},w=()=>{if(G)clearTimeout(G),G=null},I=()=>{if(!Q)return;w(),G=setTimeout(z,q)},p=()=>{if(A<=L)return;if(w(),!T)d.classList.add(`${j}-scrollbar--visible`),T=!0;if(Q&&!D&&!E)I()},z=()=>{if(D||E)return;d.classList.remove(`${j}-scrollbar--visible`),T=!1},R=(t,Jj)=>{A=t,L=Jj;let v=A>L;if(d.style.display=v?"":"none",!v){z();return}let S=L/A;b=Math.max(Z,S*L),e.style[W]=`${b}px`,N=L-b,u(k)},u=(t)=>{if(k=t,A<=L||N<=0)return;let Jj=A-L,S=Math.min(1,Math.max(0,t/Jj))*N;e.style.transform=`${y}(${S}px)`},h=(t)=>{if(t.target===e)return;let Jj=d.getBoundingClientRect(),s=x(t)-Jj[o]-b/2,g=Math.max(0,Math.min(s,N))/N,Qj=A-L,qj=g*Qj;X(qj),p()},c=(t)=>{t.preventDefault(),t.stopPropagation(),D=!0,F=x(t),O=k,w(),d.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",a),document.addEventListener("mouseup",Xj)},a=(t)=>{if(!D)return;let Jj=x(t)-F,v=N>0?Jj/N:0,S=A-L,s=v*S,jj=Math.max(0,Math.min(O+s,S)),Qj=jj/S*N;if(e.style.transform=`${y}(${Qj}px)`,C=jj,U===null)U=requestAnimationFrame(()=>{if(C!==null)X(C);U=null})},Xj=()=>{if(D=!1,U!==null)cancelAnimationFrame(U),U=null;if(C!==null)X(C),C=null;if(d.classList.remove(`${j}-scrollbar--dragging`),Q&&!E)I();document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj)},Bj=()=>{if(B)p()},m=()=>{if(!D){if(E=!1,Q)I()}},Yj=()=>{E=!0,w(),p()},n=()=>{if(E=!1,!D&&Q)I()},$j=()=>{if(w(),U!==null)cancelAnimationFrame(U),U=null;if(d.removeEventListener("click",h),d.removeEventListener("mouseenter",Yj),d.removeEventListener("mouseleave",n),e.removeEventListener("mousedown",c),J.removeEventListener("mouseenter",Bj),J.removeEventListener("mouseleave",m),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",Xj),i){if(i.removeEventListener("mouseenter",Yj),i.removeEventListener("mouseleave",n),i.parentNode)i.parentNode.removeChild(i)}if(d.parentNode)d.parentNode.removeChild(d)};if(H(),d.addEventListener("click",h),d.addEventListener("mouseenter",Yj),d.addEventListener("mouseleave",n),e.addEventListener("mousedown",c),J.addEventListener("mouseenter",Bj),J.addEventListener("mouseleave",m),i)i.addEventListener("mouseenter",Yj),i.addEventListener("mouseleave",n);return{show:p,hide:z,updateBounds:R,updatePosition:u,isVisible:()=>T,destroy:$j}};var cJ=(J)=>{let X=null;return{name:"withScrollbar",priority:30,setup($){let{dom:j,config:Y}=$,{classPrefix:Q,horizontal:q}=Y;if(X=wj(j.viewport,(_)=>$.scrollController.scrollTo(_),J??{},Q,q),!j.viewport.classList.contains(`${Q}-viewport--custom-scrollbar`))j.viewport.classList.add(`${Q}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();X.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let M=X;$.afterScroll.push((_,B)=>{M.updatePosition(_),M.show()}),$.resizeHandlers.push((_,B)=>{if(M){let A=$.getCachedCompression();M.updateBounds(A.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(M){let _=$.getCachedCompression();M.updateBounds(_.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(M)M.destroy()})},destroy(){if(X)X.destroy(),X=null}}};ej();var lJ=()=>{let J=null,X=0,$=!1;return{name:"withScale",priority:20,setup(j){let{dom:Y,config:Q}=j,{classPrefix:q,horizontal:Z}=Q,M=()=>{let B=j.getVirtualTotal(),A=Lj(B,j.heightCache);if(A.isCompressed&&!$){$=!0,j.scrollController.enableCompression(A),j.updateContentSize(A.virtualHeight),j.setScrollFns(()=>X,(D)=>{X=D});let L=Y.viewport,b=(D)=>{D.preventDefault();let E=A.virtualHeight-j.state.viewportState.containerHeight;X=Math.max(0,Math.min(X+D.deltaY,E)),j.scrollController.scrollTo(X)};if(L.addEventListener("wheel",b,{passive:!1}),j.destroyHandlers.push(()=>{L.removeEventListener("wheel",b)}),!Y.viewport.querySelector(`.${q}-scrollbar-track`)){if(J=wj(Y.viewport,(E)=>j.scrollController.scrollTo(E),{},q,Z),!Y.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))Y.viewport.classList.add(`${q}-viewport--custom-scrollbar`);J.updateBounds(A.virtualHeight,j.state.viewportState.containerHeight);let D=J;j.afterScroll.push((E,F)=>{if(D)D.updatePosition(E),D.show()}),j.resizeHandlers.push((E,F)=>{if(D){let O=j.getCachedCompression();D.updateBounds(O.virtualHeight,j.state.viewportState.containerHeight)}})}}else if(!A.isCompressed&&$)$=!1,j.scrollController.disableCompression(),j.updateContentSize(A.actualHeight);else if(A.isCompressed)j.scrollController.updateConfig({compression:A}),j.updateContentSize(A.virtualHeight);if(J)J.updateBounds(A.virtualHeight,j.state.viewportState.containerHeight);j.state.cachedCompression={state:A,totalItems:B}};j.updateCompressionMode=M;let _=j.getCachedCompression.bind(j);j.getCachedCompression=()=>{if(j.state.cachedCompression)return j.state.cachedCompression.state;return _()},j.setVisibleRangeFn((B,A,L,b,N)=>{let D=Lj(b,L);PJ(B,A,L,b,D,N)}),j.setScrollToPosFn((B,A,L,b,N)=>{let D=Lj(b,A);return bJ(B,A,L,b,D,N)}),j.setPositionElementFn((B,A)=>{let L=j.getVirtualTotal(),b=Lj(L,j.heightCache);if(b.isCompressed){let N=Math.round(Ij(A,j.scrollController.getScrollTop(),j.heightCache,L,j.state.viewportState.containerHeight,b)),D=j.config.horizontal;B.style.transform=D?`translateX(${N}px)`:`translateY(${N}px)`}else{let N=Math.round(j.heightCache.getOffset(A)),D=j.config.horizontal;B.style.transform=D?`translateX(${N}px)`:`translateY(${N}px)`}}),M(),j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null})},destroy(){if(J)J.destroy(),J=null}}};var sJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(J){J.methods.set("getScrollSnapshot",()=>{let X=J.scrollController.getScrollTop(),$=J.getCachedCompression(),j=J.getVirtualTotal(),Y=J.methods.get("getSelected"),Q=Y&&Y().length>0?Y():void 0;if(j===0){let _={index:0,offsetInItem:0};if(Q)_.selectedIds=Q;return _}let q,Z;if($.isCompressed){let B=X/$.virtualHeight*j;q=Math.max(0,Math.min(Math.floor(B),j-1)),Z=(B-q)*J.heightCache.getHeight(q)}else q=J.heightCache.indexAtOffset(X),Z=X-J.heightCache.getOffset(q);Z=Math.max(0,Z);let M={index:q,offsetInItem:Z};if(Q)M.selectedIds=Q;return M}),J.methods.set("restoreScroll",(X)=>{let{index:$,offsetInItem:j,selectedIds:Y}=X,Q=J.getCachedCompression(),q=J.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),M;if(Q.isCompressed){let B=J.heightCache.getHeight(Z),A=B>0?j/B:0;M=(Z+A)/q*Q.virtualHeight}else M=J.heightCache.getOffset(Z)+j;let _=Math.max(0,Q.virtualHeight-J.state.viewportState.containerHeight);if(M=Math.max(0,Math.min(M,_)),J.scrollController.scrollTo(M),Y&&Y.length>0){let B=J.methods.get("select");if(B)B(...Y)}})}}};var rJ=(J={})=>{let{chunkSize:X=100,maxCachedItems:$=5000,evictionBuffer:j=200,onEvict:Y}=J,Q=new Map,q=0,Z=0,M=(H)=>{let w=Q.get(H);if(!w)w={items:Array(X),count:0,lastAccess:Date.now()},Q.set(H,w);else w.lastAccess=Date.now();return w},_=(H)=>{return Math.floor(H/X)},B=(H)=>{return H%X},A=()=>q,L=(H)=>{q=H},b=(H)=>{if(H<0||H>=q)return;let w=_(H),I=Q.get(w);if(!I)return;return I.items[B(H)]},N=(H)=>{if(H<0||H>=q)return!1;let w=_(H),I=Q.get(w);if(!I)return!1;return I.items[B(H)]!==void 0},D=(H,w)=>{let I=_(H),p=M(I),z=B(H),R=p.items[z]===void 0;if(p.items[z]=w,R)p.count++,Z++;if(H>=q)q=H+1},E=(H,w)=>{for(let I=0;I<w.length;I++){let p=w[I];if(p!==void 0)D(H+I,p)}},F=(H)=>{if(H<0||H>=q)return!1;let w=_(H),I=Q.get(w);if(!I)return!1;let p=B(H);if(I.items[p]===void 0)return!1;if(I.items[p]=void 0,I.count--,Z--,I.count===0)Q.delete(w);return!0},O=(H,w)=>{let I=[];for(let p=H;p<=w&&p<q;p++)I.push(b(p));return I},k=(H,w)=>{for(let I=H;I<=w&&I<q;I++)if(!N(I))return!1;return!0},G=()=>{let H=[],w=null,I=Array.from(Q.keys()).sort((p,z)=>p-z);for(let p of I){let z=Q.get(p);if(!z)continue;let R=p*X;for(let u=0;u<X;u++){let h=R+u;if(h>=q)break;if(z.items[u]!==void 0)if(w===null)w={start:h,end:h};else if(h===w.end+1)w.end=h;else H.push(w),w={start:h,end:h};else if(w!==null)H.push(w),w=null}}if(w!==null)H.push(w);return H},T=(H,w)=>{let I=[],p=null;for(let z=H;z<=w&&z<q;z++)if(!N(z))if(p===null)p={start:z,end:z};else p.end=z;else if(p!==null)I.push(p),p=null;if(p!==null)I.push(p);return I},U=(H)=>{return Q.has(H)},C=(H)=>{let w=Q.get(H);if(w)w.lastAccess=Date.now()},W=(H,w)=>{if(H>w||Q.size===0)return;let I=Date.now(),p=_(Math.max(0,H)),z=_(Math.min(q-1,w));for(let R=p;R<=z;R++){let u=Q.get(R);if(u)u.lastAccess=I}},y=(H,w)=>{if(Z<=$)return 0;let I=Math.max(0,H-j),p=Math.min(q-1,w+j),z=_(I),R=_(p),u=0,h=[];for(let[c,a]of Q)if(c<z||c>R)u+=a.count,h.push(c),Z-=a.count,Q.delete(c);if(u>0&&Y)Y(u,h);return u},x=()=>{if(Z<=$)return 0;let H=Array.from(Q.entries()).sort(([,p],[,z])=>p.lastAccess-z.lastAccess),w=0,I=[];for(let[p,z]of H){if(Z<=$)break;w+=z.count,Z-=z.count,I.push(p),Q.delete(p)}if(w>0&&Y)Y(w,I);return w},o=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:Q.size,chunkSize:X,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},d=()=>Z,e=()=>{Q.clear(),Z=0};return{chunkSize:X,maxCachedItems:$,getTotal:A,setTotal:L,get:b,has:N,set:D,setRange:E,delete:F,getRange:O,isRangeLoaded:k,getLoadedRanges:G,findUnloadedRanges:T,getChunkIndex:_,isChunkLoaded:U,touchChunk:C,touchChunksForRange:W,evictDistant:y,evictToLimit:x,getStats:o,getCachedCount:d,clear:e,reset:()=>{e(),q=0}}},d2=(J)=>{if(J.length===0)return[];let X=[...J].sort((j,Y)=>j.start-Y.start),$=[{...X[0]}];for(let j=1;j<X.length;j++){let Y=X[j],Q=$[$.length-1];if(Y.start<=Q.end+1)Q.end=Math.max(Q.end,Y.end);else $.push({...Y})}return $},aJ=(J,X,$)=>{let j=Math.floor(J.start/$)*$,Y=Math.ceil((J.end+1)/$)*$-1,Q={start:j,end:Y};if(X.length===0)return[Q];let q=[],Z=d2(X),M=Q.start;for(let _ of Z){if(_.end<M)continue;if(_.start>Q.end)break;if(_.start>M)q.push({start:M,end:Math.min(_.start-1,Q.end)});if(M=_.end+1,M>Q.end)break}if(M<=Q.end)q.push({start:M,end:Q.end});return q};var oJ=(J={})=>{let{enabled:X=!0,maskCharacter:$="█",randomVariance:j=!0,maxSampleSize:Y=20,customGenerator:Q}=J,q=null,Z=!1,M=0,_=(F)=>{if(!X||Z||F.length===0)return;let O=new Map,k=new Map,G=Math.min(F.length,Y);for(let T=0;T<G;T++){let U=F[T];if(!U||typeof U!=="object")continue;for(let[C,W]of Object.entries(U)){if(C.startsWith("_")||C==="id")continue;if(!k.has(C))k.set(C,{lengths:[],types:new Set});let y=k.get(C),x=Array.isArray(W)?"array":typeof W;if(y.types.add(x),typeof W==="string")y.lengths.push(W.length);else if(W!==null&&W!==void 0)y.lengths.push(String(W).length)}}for(let[T,U]of k){if(U.lengths.length===0)continue;let C=Math.min(...U.lengths),W=Math.max(...U.lengths),y=Math.round(U.lengths.reduce((o,d)=>o+d,0)/U.lengths.length),x="string";if(U.types.has("number")&&U.types.size===1)x="number";else if(U.types.has("boolean")&&U.types.size===1)x="boolean";else if(U.types.has("array"))x="array";else if(U.types.has("object")&&!U.types.has("string"))x="object";O.set(T,{minLength:C,maxLength:W,avgLength:y,type:x})}q=O,Z=!0},B=()=>Z,A=(F)=>{let O=F.avgLength;if(j&&F.minLength!==F.maxLength){if(O=Math.floor(Math.random()*(F.maxLength-F.minLength+1)+F.minLength),Math.random()<0.3)O=Math.max(1,O+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,O))},L=(F)=>{if(Q)return{...Q(F),["_isPlaceholder"]:!0};let O={id:`__placeholder_${M++}`,["_isPlaceholder"]:!0,_index:F};if(!q||q.size===0)return O.label=$.repeat(12),O;for(let[k,G]of q)switch(G.type){case"string":O[k]=A(G);break;case"number":O[k]=0;break;case"boolean":O[k]=!1;break;case"array":O[k]=[];break;case"object":O[k]={};break;default:O[k]=A(G)}return O};return{analyzeStructure:_,hasAnalyzedStructure:B,generate:L,generateRange:(F,O)=>{let k=[];for(let G=F;G<=O;G++)k.push(L(G));return k},isPlaceholder:(F)=>{if(!F||typeof F!=="object")return!1;return F._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,M=0}}},xj=(J)=>{if(!J||typeof J!=="object")return!1;return J._isPlaceholder===!0};var c2=50,nJ=(J={})=>{let{adapter:X,initialItems:$,initialTotal:j,storage:Y,placeholder:Q,pageSize:q=c2,onStateChange:Z,onItemsLoaded:M,onItemsEvicted:_}=J,B=rJ({...Y,onEvict:(v,S)=>{_?.(v),G()}}),A=null,L=()=>{if(!A)A=oJ(Q);return A},b=new Map,N=!1,D,E=!0,F,O=[],k=new Map,G=()=>{Z?.(e())},T=()=>{b.clear();let v=B.getLoadedRanges();for(let S of v)for(let s=S.start;s<=S.end;s++){let jj=B.get(s);if(jj&&!xj(jj))b.set(jj.id,s)}},U=(v,S)=>{if(!xj(S))b.set(S.id,v)},C=(v)=>{b.delete(v)},W=(v,S)=>{return`${v}-${S}`},y=()=>B.getTotal(),x=()=>B.getCachedCount(),o=()=>N,d=()=>E,e=()=>({total:B.getTotal(),cached:B.getCachedCount(),isLoading:N,pendingRanges:O,error:D,hasMore:E,cursor:F}),i=()=>B,H=()=>L(),w=(v)=>{let S=B.get(v);if(S!==void 0)return S;if(v>=0&&v<B.getTotal())return L().generate(v);return},I=(v)=>{let S=b.get(v);if(S===void 0)return;return B.get(S)},p=(v)=>{return b.get(v)??-1},z=(v)=>{let S=B.get(v);return S!==void 0&&!xj(S)},R=(v,S)=>{let s=[],jj=B.getTotal(),g=0,Qj=0;B.touchChunksForRange(v,Math.min(S,jj-1));for(let qj=v;qj<=S&&qj<jj;qj++){let Mj=B.get(qj);if(Mj!==void 0)s.push(Mj),g++;else s.push(L().generate(qj)),Qj++}return s},u=(v)=>{B.setTotal(v),E=B.getCachedCount()<v,G()},h=(v,S=0,s)=>{if(A&&!A.hasAnalyzedStructure()&&v.length>0)A.analyzeStructure(v);for(let jj=0;jj<v.length;jj++){let g=v[jj];if(g!==void 0){let Qj=S+jj;B.set(Qj,g),U(Qj,g)}}if(s!==void 0)B.setTotal(s);else if(S+v.length>B.getTotal())B.setTotal(S+v.length);E=B.getCachedCount()<B.getTotal(),M?.(v,S,B.getTotal()),G()},c=(v,S)=>{let s=b.get(v);if(s===void 0)return!1;let jj=B.get(s);if(!jj)return!1;let g={...jj,...S};if(B.set(s,g),S.id!==void 0&&S.id!==v)C(v),U(s,g);return G(),!0},a=(v)=>{let S=b.get(v);if(S===void 0)return!1;B.delete(S),C(v);let s=B.getTotal();if(s>0)B.setTotal(s-1);return G(),!0},Xj=async(v,S)=>{if(!X)return;let s=W(v,S);if(k.has(s))return;let jj=B.getLoadedRanges(),g=aJ({start:v,end:S},jj,B.chunkSize);if(g.length===0)return;let Qj=B.chunkSize,qj=[];for(let Uj of g){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,bj=W(Gj,Wj);if(!qj.some((Fj)=>Fj.start===Gj)&&!k.has(bj))qj.push({start:Gj,end:Wj})}}let Mj=[];for(let Uj of g){let Kj=Math.floor(Uj.start/Qj),_j=Math.floor(Uj.end/Qj);for(let Zj=Kj;Zj<=_j;Zj++){let Gj=Zj*Qj,Wj=Gj+Qj-1,bj=W(Gj,Wj);if(k.has(bj)){let Fj=k.get(bj);if(!Mj.includes(Fj))Mj.push(Fj)}}}for(let Uj of qj){let Kj=W(Uj.start,Uj.end),_j=(async()=>{O.push(Uj),N=!0,D=void 0,G();try{let Zj=Uj.end-Uj.start+1,Gj={offset:Uj.start,limit:Zj,cursor:void 0},Wj=await X.read(Gj);if(h(Wj.items,Uj.start,Wj.total),Wj.cursor)F=Wj.cursor;if(Wj.hasMore!==void 0)E=Wj.hasMore;else if(Wj.total!==void 0)E=B.getCachedCount()<Wj.total}catch(Zj){D=Zj instanceof Error?Zj:Error(String(Zj))}finally{k.delete(Kj),O=O.filter((Zj)=>Zj.start!==Uj.start||Zj.end!==Uj.end),N=k.size>0,G()}})();k.set(Kj,_j),Mj.push(_j)}await Promise.all(Mj)},Bj=async(v,S)=>{if(B.isRangeLoaded(v,S))return;await Xj(v,S)},m=async()=>{if(!X)return;await Xj(0,q-1)},Yj=async()=>{if(!X||N||!E)return!1;let v=B.getCachedCount(),S=B.getTotal(),s=v,jj=Math.min(s+q-1,S>0?S-1:s+q-1);if(s>=S&&S>0)return E=!1,!1;return await Xj(s,jj),B.getCachedCount()>v},n=async()=>{if(B.clear(),b.clear(),A)A.clear();F=void 0,E=!0,D=void 0,G(),await m()},$j=(v,S)=>{if(B.evictDistant(v,S)>0)T()},t=()=>{B.clear(),b.clear(),F=void 0,D=void 0,O=[],N=!1,G()},Jj=()=>{if(B.reset(),b.clear(),A)A.clear();F=void 0,E=!0,D=void 0,O=[],N=!1,G()};if($&&$.length>0)h($,0,j??$.length);else if(j!==void 0)B.setTotal(j);return{getState:e,getTotal:y,getCached:x,getIsLoading:o,getHasMore:d,getStorage:i,getPlaceholders:H,getItem:w,getItemById:I,getIndexById:p,isItemLoaded:z,getItemsInRange:R,setTotal:u,setItems:h,updateItem:c,removeItem:a,loadRange:Xj,ensureRange:Bj,loadInitial:m,loadMore:Yj,reload:n,evictDistant:$j,clear:t,reset:Jj}};var iJ=(J)=>{let{adapter:X,loading:$}=J,j=$?.cancelThreshold??FJ,Y=$?.preloadThreshold??LJ,Q=$?.preloadAhead??OJ;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,M=q.config.reverse,_=q.config.overscan,B=nJ({adapter:X,pageSize:Tj,onStateChange:()=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode(),q.state.viewportState=QJ(q.state.viewportState,q.heightCache,q.getVirtualTotal(),_,q.getCachedCompression()),q.updateContentSize(q.state.viewportState.totalHeight),q.renderIfNeeded()},onItemsLoaded:(F,O,k)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:F,total:k})}});q.replaceDataManager(B);let A=null,L=null,b=0,N=()=>{if(L){let F=L;L=null,q.dataManager.ensureRange(F.start,F.end).catch((O)=>{Z.emit("error",{error:O,context:"ensureRange"})})}};q.afterScroll.push((F,O)=>{if(q.state.isDestroyed)return;let k=q.scrollController.getVelocity(),T=q.scrollController.isTracking()&&k<=j;if(L&&b>j&&k<=j){let W=L;L=null,q.dataManager.ensureRange(W.start,W.end).catch((y)=>{Z.emit("error",{error:y,context:"ensureRange"})})}if(b=k,T&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(M){if(F<oj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Tj}),q.dataManager.loadMore().catch((W)=>{Z.emit("error",{error:W,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-F-q.state.viewportState.containerHeight<oj)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:Tj}),q.dataManager.loadMore().catch((y)=>{Z.emit("error",{error:y,context:"loadMore"})})}let{renderRange:U}=q.state.viewportState;if(!A||U.start!==A.start||U.end!==A.end)if(A={start:U.start,end:U.end},T){L=null;let{start:W,end:y}=U,x=q.getVirtualTotal();if(k>Y)if(O==="down")y=Math.min(U.end+Q,x-1);else W=Math.max(U.start-Q,0);q.dataManager.ensureRange(W,y).catch((o)=>{Z.emit("error",{error:o,context:"ensureRange"})})}else L={start:U.start,end:U.end}});let D=200,E=null;q.afterScroll.push((F,O)=>{if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,N()},D)}),q.destroyHandlers.push(()=>{if(E!==null)clearTimeout(E),E=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{await q.dataManager.reload()}),Z.emit("load:start",{offset:0,limit:Tj}),q.dataManager.loadInitial().catch((F)=>{Z.emit("error",{error:F,context:"loadInitial"})})}}};var tJ=()=>{let J=null;return{name:"withPage",priority:5,setup(X){let{dom:$,state:j,config:Y,emitter:Q}=X;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let _=$.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-_.left);else return Math.max(0,-_.top)},(_)=>{let B=$.viewport.getBoundingClientRect();if(Y.horizontal){let A=B.left+window.scrollX;window.scrollTo(A+_,window.scrollY)}else{let A=B.top+window.scrollY;window.scrollTo(window.scrollX,A+_)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,M=()=>{let{innerWidth:_,innerHeight:B}=window,A=Y.horizontal?_:B,L=Y.horizontal?Z:q;if(Math.abs(A-L)<=1)return;q=B,Z=_,j.viewportState.containerHeight=B,Q.emit("resize",{width:_,height:B});for(let b=0;b<X.resizeHandlers.length;b++)X.resizeHandlers[b](_,B);X.renderIfNeeded()};window.addEventListener("resize",M,{passive:!0}),J=()=>{window.removeEventListener("resize",M)},X.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var eJ=(J)=>{let X=aj(J);if(J.scroll?.element===window)X=X.use(tJ());if(J.adapter)X=X.use(iJ({adapter:J.adapter,...J.loading&&{loading:J.loading}}));if(J.layout==="grid"){if(!J.grid)throw Error("[vlist/builder] grid configuration is required when layout is 'grid'");if(!J.grid.columns||J.grid.columns<1)throw Error("[vlist/builder] grid.columns must be a positive integer >= 1");let Q={columns:J.grid.columns};if(J.grid.gap!==void 0)Q.gap=J.grid.gap;X=X.use(RJ(Q))}if(J.groups){if(J.direction==="horizontal")throw Error("[vlist/builder] horizontal direction cannot be combined with groups");let Q={getGroupForIndex:J.groups.getGroupForIndex,headerHeight:typeof J.groups.headerHeight==="function"?J.groups.headerHeight("",0):J.groups.headerHeight,headerTemplate:J.groups.headerTemplate};if(J.groups.sticky!==void 0)Q.sticky=J.groups.sticky;X=X.use(fJ(Q))}let $=J.selection?.mode||"none";if($!=="none"){let Q={mode:$};if(J.selection?.initial!==void 0)Q.initial=J.selection.initial;X=X.use(UJ(Q))}else X=X.use(UJ({mode:"none"}));X=X.use(lJ());let j=J.scroll?.scrollbar||J.scrollbar;if(j!=="none"){let Q=typeof j==="object"?j:{};X=X.use(cJ(Q))}X=X.use(sJ());let Y=X.build();return Y.update=(Q)=>{if(Q.grid&&Y.updateGrid)Y.updateGrid(Q.grid);if(Q.selectionMode!==void 0&&Y.setSelectionMode)Y.setSelectionMode(Q.selectionMode);if(Q.itemHeight!==void 0)console.warn("[vlist] Updating itemHeight via update() is not yet supported with the builder pattern. Please recreate the instance or use the full API from 'vlist/full'.");if(Q.overscan!==void 0)console.warn("[vlist] Updating overscan via update() is not yet supported with the builder pattern.")},Y};function N6(J,X){let $=eJ({...X.config,container:J});if(X.onInstance)X.onInstance($);return{update(j){if(j.config.items)$.setItems(j.config.items);if(j.onInstance)j.onInstance($)},destroy(){$.destroy()}}}function D6(J,X,$){return J.on(X,$)}export{N6 as vlist,D6 as onVListEvent};
|