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