@floor/vlist 0.5.6 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,137 +1 @@
1
- var Yj=(B,X)=>{if(typeof B==="number"){let q=X;
2
- return{getOffset:(J)=>J*B,getHeight:()=>B,indexAtOffset:(J)=>{if(q===0||B===0)return 0;
3
- return Math.max(0,Math.min(Math.floor(J/B),q-1))},getTotalHeight:()=>q*B,getTotal:()=>q,rebuild:(J)=>{q=J}}}
4
- let Y=X,U=new Float64Array(0),$=(q)=>{Y=q,U=new Float64Array(q+1),U[0]=0;
5
- for(let J=0;
6
- J<q;
7
- J++)U[J+1]=U[J]+B(J)};
8
- return $(X),{getOffset:(q)=>{if(q<=0)return 0;
9
- if(q>=Y)return U[Y];
10
- return U[q]},getHeight:(q)=>B(q),indexAtOffset:(q)=>{if(Y===0)return 0;
11
- if(q<=0)return 0;
12
- if(q>=U[Y])return Y-1;
13
- let J=0,F=Y-1;
14
- while(J<F){let N=J+F+1>>>1;
15
- if(U[N]<=q)J=N;
16
- else F=N-1}
17
- return J},getTotalHeight:()=>U[Y]??0,getTotal:()=>Y,rebuild:(q)=>$(q)}},Zj=()=>{let B={},X=(q,J)=>{if(!B[q])B[q]=new Set;
18
- return B[q].add(J),()=>Y(q,J)},Y=(q,J)=>{B[q]?.delete(J)};
19
- return{on:X,off:Y,emit:(q,J)=>{B[q]?.forEach((F)=>{try{F(J)}
20
- catch(N){console.error(`[vlist] Error in "${q}" handler:`,N)}})},clear:()=>{for(let q in B)delete B[q]}}},_j=(B)=>{if(typeof B==="string"){let X=document.querySelector(B);
21
- if(!X)throw Error(`[vlist] Container not found: ${B}`);
22
- return X}
23
- return B},$j=(B,X,Y)=>{let U=document.createElement("div");
24
- if(U.className=X,U.setAttribute("role","listbox"),U.setAttribute("tabindex","0"),Y)U.setAttribute("aria-label",Y);
25
- let $=document.createElement("div");
26
- $.className=`${X}-viewport`,$.style.overflow="auto",$.style.height="100%",$.style.width="100%";
27
- let q=document.createElement("div");
28
- q.className=`${X}-content`,q.style.position="relative",q.style.width="100%";
29
- let J=document.createElement("div");
30
- return J.className=`${X}-items`,J.style.position="relative",J.style.width="100%",q.appendChild(J),$.appendChild(q),U.appendChild($),B.appendChild(U),{root:U,viewport:$,content:q,items:J}},Qj=(B=100)=>{let X=[];
31
- return{acquire:()=>{let q=X.pop();
32
- if(q)return q;
33
- let J=document.createElement("div");
34
- return J.setAttribute("role","option"),J},release:(q)=>{if(X.length<B)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),X.push(q)},clear:()=>{X.length=0}}},Vj=(B,X,Y,U,$)=>{if(U===0){$.start=0,$.end=0;
35
- return}
36
- let q=Y.indexAtOffset(B),J=q,F=Y.getOffset(q)-B;
37
- while(J<U-1&&F<X)F+=Y.getHeight(J),J++;
38
- $.start=q,$.end=Math.min(J,U-1)},Lj=(B,X,Y,U)=>{U.start=Math.max(0,B.start-X),U.end=Math.min(Y-1,B.end+X)},kj=(B,X,Y,U,$)=>{if(U===0)return 0;
39
- let q=Math.max(0,Math.min(B,U-1)),J=X.getOffset(q),F=X.getHeight(q),N=Math.max(0,X.getTotalHeight()-Y),k;
40
- switch($){case"center":k=J-(Y-F)/2;
41
- break;
42
- case"end":k=J-Y+F;
43
- break;
44
- default:k=J}
45
- return Math.max(0,Math.min(k,N))},Fj=(B)=>B<0.5?2*B*B:-1+(4-2*B)*B,Nj=0,Aj=(B)=>{if(!B.container)throw Error("[vlist] container is required");
46
- if(!B.item)throw Error("[vlist] item configuration is required");
47
- if(B.item.height==null)throw Error("[vlist] item.height is required");
48
- if(typeof B.item.height==="number"&&B.item.height<=0)throw Error("[vlist] item.height must be positive");
49
- if(typeof B.item.height!=="number"&&typeof B.item.height!=="function")throw Error("[vlist] item.height must be a number or (index) => number");
50
- if(!B.item.template)throw Error("[vlist] item.template is required");
51
- let{item:X,items:Y,overscan:U=3,classPrefix:$="vlist",scrollElement:q,ariaLabel:J}=B,{height:F,template:N}=X,k=!!q,_=Y?[...Y]:[],y=!1,R=null,D=0,l=`${$}-${Nj++}`,o=_j(B.container),V=$j(o,$,J),W=Zj(),A=Yj(F,_.length),I=Qj();
52
- if(k)V.root.style.overflow="visible",V.root.style.height="auto",V.viewport.style.overflow="visible",V.viewport.style.height="auto";
53
- let E=k?window.innerHeight:V.viewport.clientHeight,h={start:0,end:0},M={start:0,end:0},C={start:-1,end:-1},b=new Map,f={selected:!1,focused:!1},n=`${$}-item`,T="",p=(j,K)=>{if(typeof K==="string")j.innerHTML=K;
54
- else j.replaceChildren(K)},c=(j,K)=>{j.style.transform=`translateY(${Math.round(A.getOffset(K))}
55
- px)`},i=(j,K)=>{let G=I.acquire();
56
- return G.className=n,G.style.height=`${A.getHeight(j)}
57
- px`,G.dataset.index=String(j),G.dataset.id=String(K.id),G.ariaSelected="false",G.id=`${l}-item-${j}`,T=String(_.length),G.setAttribute("aria-setsize",T),G.setAttribute("aria-posinset",String(j+1)),p(G,N(K,j,f)),c(G,j),G},v=()=>{V.content.style.height=`${A.getTotalHeight()}
58
- px`},P=()=>{if(y)return;
59
- if(Vj(D,E,A,_.length,h),Lj(h,U,_.length,M),M.start===C.start&&M.end===C.end)return;
60
- let j=String(_.length),K=j!==T;
61
- T=j;
62
- for(let[Z,L]of b)if(Z<M.start||Z>M.end)L.remove(),I.release(L),b.delete(Z);
63
- let G=document.createDocumentFragment(),Q=[];
64
- for(let Z=M.start;
65
- Z<=M.end;
66
- Z++){let L=_[Z];
67
- if(!L)continue;
68
- let z=b.get(Z);
69
- if(z){let H=z.dataset.id,w=String(L.id);
70
- if(H!==w)p(z,N(L,Z,f)),z.dataset.id=w,z.style.height=`${A.getHeight(Z)}
71
- px`;
72
- if(c(z,Z),K)z.setAttribute("aria-setsize",T)}
73
- else{let H=i(Z,L);
74
- G.appendChild(H),Q.push({index:Z,element:H})}}
75
- if(Q.length>0){V.items.appendChild(G);
76
- for(let{index:Z,element:L}
77
- of Q)b.set(Z,L)}
78
- C.start=M.start,C.end=M.end,W.emit("range:change",{range:{start:M.start,end:M.end}})},t=()=>{C.start=-1,C.end=-1,P()},O=null,m=()=>{if(y)return;
79
- let j=k?Math.max(0,q.scrollY-V.viewport.getBoundingClientRect().top-q.scrollY+window.scrollY):V.viewport.scrollTop,K=k?Math.max(0,q.scrollY+V.viewport.getBoundingClientRect().top*-1):j,G=K>=D?"down":"up";
80
- if(!V.root.classList.contains(`${$}--scrolling`))V.root.classList.add(`${$}--scrolling`);
81
- if(D=K,P(),W.emit("scroll",{scrollTop:K,direction:G}),O)clearTimeout(O);
82
- O=setTimeout(()=>{V.root.classList.remove(`${$}--scrolling`)},150)},d=k?q:V.viewport;
83
- d.addEventListener("scroll",m,{passive:!0});
84
- let s=(j)=>{if(y)return;
85
- let G=j.target.closest("[data-index]");
86
- if(!G)return;
87
- let Q=parseInt(G.dataset.index??"-1",10);
88
- if(Q<0)return;
89
- let Z=_[Q];
90
- if(!Z)return;
91
- W.emit("item:click",{item:Z,index:Q,event:j})},e=(j)=>{if(y)return;
92
- let G=j.target.closest("[data-index]");
93
- if(!G)return;
94
- let Q=parseInt(G.dataset.index??"-1",10);
95
- if(Q<0)return;
96
- let Z=_[Q];
97
- if(!Z)return;
98
- W.emit("item:dblclick",{item:Z,index:Q,event:j})};
99
- V.items.addEventListener("click",s),V.items.addEventListener("dblclick",e);
100
- let a=new ResizeObserver((j)=>{if(y||k)return;
101
- for(let K of j){let G=K.contentRect.height;
102
- if(Math.abs(G-E)>1)E=G,v(),P(),W.emit("resize",{height:G,width:K.contentRect.width})}});
103
- a.observe(V.viewport);
104
- let u=null;
105
- if(k)u=()=>{if(y)return;
106
- let j=window.innerHeight;
107
- if(Math.abs(j-E)>1)E=j,v(),P(),W.emit("resize",{height:j,width:window.innerWidth})},window.addEventListener("resize",u);
108
- let S=()=>{if(R!==null)cancelAnimationFrame(R),R=null},jj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:300};
109
- if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??300};
110
- return{align:"start",behavior:"auto",duration:300}},g=(j)=>{if(k){let G=V.viewport.getBoundingClientRect().top+window.scrollY;
111
- q.scrollTo(0,G+j)}
112
- else V.viewport.scrollTop=j},qj=(j,K,G)=>{if(S(),Math.abs(K-j)<1){g(K),D=K,P();
113
- return}
114
- let Q=performance.now(),Z=(L)=>{let z=L-Q,H=Math.min(z/G,1),w=j+(K-j)*Fj(H);
115
- if(g(w),D=w,P(),H<1)R=requestAnimationFrame(Z);
116
- else R=null};
117
- R=requestAnimationFrame(Z)},r=(j,K)=>{let{align:G,behavior:Q,duration:Z}=jj(K),L=kj(j,A,E,_.length,G);
118
- if(Q==="smooth")qj(D,L,Z);
119
- else S(),g(L)},x=()=>{A.rebuild(_.length),v(),t()},Bj=(j)=>{_=[...j],x()},Gj=(j)=>{_=[..._,...j],x()},Jj=(j)=>{_=[...j,..._],x()},Kj=(j,K)=>{let G=_.findIndex((Z)=>Z.id===j);
120
- if(G<0)return;
121
- _[G]={..._[G],...K};
122
- let Q=b.get(G);
123
- if(Q)p(Q,N(_[G],G,f)),Q.dataset.id=String(_[G].id)},Uj=(j)=>{_=_.filter((K)=>K.id!==j),x()},Xj=()=>{if(y)return;
124
- if(y=!0,S(),d.removeEventListener("scroll",m),V.items.removeEventListener("click",s),a.disconnect(),u)window.removeEventListener("resize",u);
125
- if(O)clearTimeout(O);
126
- for(let[,j]of b)j.remove(),I.release(j);
127
- b.clear(),I.clear(),W.clear(),V.root.remove()};
128
- return v(),P(),{get element(){return V.root},get items(){return _},get total(){return _.length},setItems:Bj,appendItems:Gj,prependItems:Jj,updateItem:Kj,removeItem:Uj,scrollToIndex:r,scrollToItem:(j,K)=>{let G=_.findIndex((Q)=>Q.id===j);
129
- if(G>=0)r(G,K)},cancelScroll:S,getScrollPosition:()=>D,getScrollSnapshot:()=>{if(_.length===0)return{index:0,offsetInItem:0};
130
- let j=A.indexAtOffset(D),K=Math.max(0,D-A.getOffset(j));
131
- return{index:j,offsetInItem:K}},restoreScroll:(j)=>{if(_.length===0)return;
132
- let K=Math.max(0,Math.min(j.index,_.length-1)),G=Math.max(0,A.getTotalHeight()-E),Q=Math.max(0,Math.min(A.getOffset(K)+j.offsetInItem,G));
133
- if(k){let L=V.viewport.getBoundingClientRect().top+window.scrollY;
134
- window.scrollTo({top:L+Q,behavior:"auto"})}
135
- else V.viewport.scrollTo({top:Q,behavior:"auto"});
136
- D=Q,P()},on:(j,K)=>W.on(j,K),off:(j,K)=>W.off(j,K),destroy:Xj}};
137
- export{Aj as createVList};
1
+ var Yj=(B,X)=>{if(typeof B==="number"){let q=X;return{getOffset:(J)=>J*B,getHeight:()=>B,indexAtOffset:(J)=>{if(q===0||B===0)return 0;return Math.max(0,Math.min(Math.floor(J/B),q-1))},getTotalHeight:()=>q*B,getTotal:()=>q,rebuild:(J)=>{q=J}}}let Y=X,U=new Float64Array(0),$=(q)=>{Y=q,U=new Float64Array(q+1),U[0]=0;for(let J=0;J<q;J++)U[J+1]=U[J]+B(J)};return $(X),{getOffset:(q)=>{if(q<=0)return 0;if(q>=Y)return U[Y];return U[q]},getHeight:(q)=>B(q),indexAtOffset:(q)=>{if(Y===0)return 0;if(q<=0)return 0;if(q>=U[Y])return Y-1;let J=0,F=Y-1;while(J<F){let N=J+F+1>>>1;if(U[N]<=q)J=N;else F=N-1}return J},getTotalHeight:()=>U[Y]??0,getTotal:()=>Y,rebuild:(q)=>$(q)}},Zj=()=>{let B={},X=(q,J)=>{if(!B[q])B[q]=new Set;return B[q].add(J),()=>Y(q,J)},Y=(q,J)=>{B[q]?.delete(J)};return{on:X,off:Y,emit:(q,J)=>{B[q]?.forEach((F)=>{try{F(J)}catch(N){console.error(`[vlist] Error in "${q}" handler:`,N)}})},clear:()=>{for(let q in B)delete B[q]}}},_j=(B)=>{if(typeof B==="string"){let X=document.querySelector(B);if(!X)throw Error(`[vlist] Container not found: ${B}`);return X}return B},$j=(B,X,Y)=>{let U=document.createElement("div");if(U.className=X,U.setAttribute("role","listbox"),U.setAttribute("tabindex","0"),Y)U.setAttribute("aria-label",Y);let $=document.createElement("div");$.className=`${X}-viewport`,$.style.overflow="auto",$.style.height="100%",$.style.width="100%";let q=document.createElement("div");q.className=`${X}-content`,q.style.position="relative",q.style.width="100%";let J=document.createElement("div");return J.className=`${X}-items`,J.style.position="relative",J.style.width="100%",q.appendChild(J),$.appendChild(q),U.appendChild($),B.appendChild(U),{root:U,viewport:$,content:q,items:J}},Qj=(B=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<B)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),X.push(q)},clear:()=>{X.length=0}}},Vj=(B,X,Y,U,$)=>{if(U===0){$.start=0,$.end=0;return}let q=Y.indexAtOffset(B),J=q,F=Y.getOffset(q)-B;while(J<U-1&&F<X)F+=Y.getHeight(J),J++;$.start=q,$.end=Math.min(J,U-1)},Lj=(B,X,Y,U)=>{U.start=Math.max(0,B.start-X),U.end=Math.min(Y-1,B.end+X)},kj=(B,X,Y,U,$)=>{if(U===0)return 0;let q=Math.max(0,Math.min(B,U-1)),J=X.getOffset(q),F=X.getHeight(q),N=Math.max(0,X.getTotalHeight()-Y),k;switch($){case"center":k=J-(Y-F)/2;break;case"end":k=J-Y+F;break;default:k=J}return Math.max(0,Math.min(k,N))},Fj=(B)=>B<0.5?2*B*B:-1+(4-2*B)*B,Nj=0,Aj=(B)=>{if(!B.container)throw Error("[vlist] container is required");if(!B.item)throw Error("[vlist] item configuration is required");if(B.item.height==null)throw Error("[vlist] item.height is required");if(typeof B.item.height==="number"&&B.item.height<=0)throw Error("[vlist] item.height must be positive");if(typeof B.item.height!=="number"&&typeof B.item.height!=="function")throw Error("[vlist] item.height must be a number or (index) => number");if(!B.item.template)throw Error("[vlist] item.template is required");let{item:X,items:Y,overscan:U=3,classPrefix:$="vlist",scrollElement:q,ariaLabel:J}=B,{height:F,template:N}=X,k=!!q,_=Y?[...Y]:[],y=!1,R=null,D=0,l=`${$}-${Nj++}`,o=_j(B.container),V=$j(o,$,J),W=Zj(),A=Yj(F,_.length),I=Qj();if(k)V.root.style.overflow="visible",V.root.style.height="auto",V.viewport.style.overflow="visible",V.viewport.style.height="auto";let E=k?window.innerHeight:V.viewport.clientHeight,h={start:0,end:0},M={start:0,end:0},C={start:-1,end:-1},b=new Map,f={selected:!1,focused:!1},n=`${$}-item`,T="",p=(j,K)=>{if(typeof K==="string")j.innerHTML=K;else j.replaceChildren(K)},c=(j,K)=>{j.style.transform=`translateY(${Math.round(A.getOffset(K))}px)`},i=(j,K)=>{let G=I.acquire();return G.className=n,G.style.height=`${A.getHeight(j)}px`,G.dataset.index=String(j),G.dataset.id=String(K.id),G.ariaSelected="false",G.id=`${l}-item-${j}`,T=String(_.length),G.setAttribute("aria-setsize",T),G.setAttribute("aria-posinset",String(j+1)),p(G,N(K,j,f)),c(G,j),G},v=()=>{V.content.style.height=`${A.getTotalHeight()}px`},P=()=>{if(y)return;if(Vj(D,E,A,_.length,h),Lj(h,U,_.length,M),M.start===C.start&&M.end===C.end)return;let j=String(_.length),K=j!==T;T=j;for(let[Z,L]of b)if(Z<M.start||Z>M.end)L.remove(),I.release(L),b.delete(Z);let G=document.createDocumentFragment(),Q=[];for(let Z=M.start;Z<=M.end;Z++){let L=_[Z];if(!L)continue;let z=b.get(Z);if(z){let H=z.dataset.id,w=String(L.id);if(H!==w)p(z,N(L,Z,f)),z.dataset.id=w,z.style.height=`${A.getHeight(Z)}px`;if(c(z,Z),K)z.setAttribute("aria-setsize",T)}else{let H=i(Z,L);G.appendChild(H),Q.push({index:Z,element:H})}}if(Q.length>0){V.items.appendChild(G);for(let{index:Z,element:L}of Q)b.set(Z,L)}C.start=M.start,C.end=M.end,W.emit("range:change",{range:{start:M.start,end:M.end}})},t=()=>{C.start=-1,C.end=-1,P()},O=null,m=()=>{if(y)return;let j=k?Math.max(0,q.scrollY-V.viewport.getBoundingClientRect().top-q.scrollY+window.scrollY):V.viewport.scrollTop,K=k?Math.max(0,q.scrollY+V.viewport.getBoundingClientRect().top*-1):j,G=K>=D?"down":"up";if(!V.root.classList.contains(`${$}--scrolling`))V.root.classList.add(`${$}--scrolling`);if(D=K,P(),W.emit("scroll",{scrollTop:K,direction:G}),O)clearTimeout(O);O=setTimeout(()=>{V.root.classList.remove(`${$}--scrolling`)},150)},d=k?q:V.viewport;d.addEventListener("scroll",m,{passive:!0});let s=(j)=>{if(y)return;let G=j.target.closest("[data-index]");if(!G)return;let Q=parseInt(G.dataset.index??"-1",10);if(Q<0)return;let Z=_[Q];if(!Z)return;W.emit("item:click",{item:Z,index:Q,event:j})},e=(j)=>{if(y)return;let G=j.target.closest("[data-index]");if(!G)return;let Q=parseInt(G.dataset.index??"-1",10);if(Q<0)return;let Z=_[Q];if(!Z)return;W.emit("item:dblclick",{item:Z,index:Q,event:j})};V.items.addEventListener("click",s),V.items.addEventListener("dblclick",e);let a=new ResizeObserver((j)=>{if(y||k)return;for(let K of j){let G=K.contentRect.height;if(Math.abs(G-E)>1)E=G,v(),P(),W.emit("resize",{height:G,width:K.contentRect.width})}});a.observe(V.viewport);let u=null;if(k)u=()=>{if(y)return;let j=window.innerHeight;if(Math.abs(j-E)>1)E=j,v(),P(),W.emit("resize",{height:j,width:window.innerWidth})},window.addEventListener("resize",u);let S=()=>{if(R!==null)cancelAnimationFrame(R),R=null},jj=(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}},g=(j)=>{if(k){let G=V.viewport.getBoundingClientRect().top+window.scrollY;q.scrollTo(0,G+j)}else V.viewport.scrollTop=j},qj=(j,K,G)=>{if(S(),Math.abs(K-j)<1){g(K),D=K,P();return}let Q=performance.now(),Z=(L)=>{let z=L-Q,H=Math.min(z/G,1),w=j+(K-j)*Fj(H);if(g(w),D=w,P(),H<1)R=requestAnimationFrame(Z);else R=null};R=requestAnimationFrame(Z)},r=(j,K)=>{let{align:G,behavior:Q,duration:Z}=jj(K),L=kj(j,A,E,_.length,G);if(Q==="smooth")qj(D,L,Z);else S(),g(L)},x=()=>{A.rebuild(_.length),v(),t()},Bj=(j)=>{_=[...j],x()},Gj=(j)=>{_=[..._,...j],x()},Jj=(j)=>{_=[...j,..._],x()},Kj=(j,K)=>{let G=_.findIndex((Z)=>Z.id===j);if(G<0)return;_[G]={..._[G],...K};let Q=b.get(G);if(Q)p(Q,N(_[G],G,f)),Q.dataset.id=String(_[G].id)},Uj=(j)=>{_=_.filter((K)=>K.id!==j),x()},Xj=()=>{if(y)return;if(y=!0,S(),d.removeEventListener("scroll",m),V.items.removeEventListener("click",s),a.disconnect(),u)window.removeEventListener("resize",u);if(O)clearTimeout(O);for(let[,j]of b)j.remove(),I.release(j);b.clear(),I.clear(),W.clear(),V.root.remove()};return v(),P(),{get element(){return V.root},get items(){return _},get total(){return _.length},setItems:Bj,appendItems:Gj,prependItems:Jj,updateItem:Kj,removeItem:Uj,scrollToIndex:r,scrollToItem:(j,K)=>{let G=_.findIndex((Q)=>Q.id===j);if(G>=0)r(G,K)},cancelScroll:S,getScrollPosition:()=>D,getScrollSnapshot:()=>{if(_.length===0)return{index:0,offsetInItem:0};let j=A.indexAtOffset(D),K=Math.max(0,D-A.getOffset(j));return{index:j,offsetInItem:K}},restoreScroll:(j)=>{if(_.length===0)return;let K=Math.max(0,Math.min(j.index,_.length-1)),G=Math.max(0,A.getTotalHeight()-E),Q=Math.max(0,Math.min(A.getOffset(K)+j.offsetInItem,G));if(k){let L=V.viewport.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:L+Q,behavior:"auto"})}else V.viewport.scrollTo({top:Q,behavior:"auto"});D=Q,P()},on:(j,K)=>W.on(j,K),off:(j,K)=>W.off(j,K),destroy:Xj}};export{Aj as createVList};
@@ -1,72 +1 @@
1
- var e=(B,K)=>{let W=K;
2
- return{getOffset:(J)=>J*B,getHeight:()=>B,indexAtOffset:(J)=>{if(W===0||B===0)return 0;
3
- return Math.max(0,Math.min(Math.floor(J/B),W-1))},getTotalHeight:()=>W*B,getTotal:()=>W,rebuild:(J)=>{W=J}}},jj=()=>{let B={},K=(j,Q)=>{if(!B[j])B[j]=new Set;
4
- return B[j].add(Q),()=>W(j,Q)},W=(j,Q)=>{B[j]?.delete(Q)};
5
- return{on:K,off:W,emit:(j,Q)=>{B[j]?.forEach((N)=>{try{N(Q)}
6
- catch(Z){console.error(`[vlist] Error in "${j}" handler:`,Z)}})},clear:()=>{for(let j in B)delete B[j]}}},qj=(B)=>{if(typeof B==="string"){let K=document.querySelector(B);
7
- if(!K)throw Error(`[vlist] Container not found: ${B}`);
8
- return K}
9
- return B},Bj=(B,K,W)=>{let J=document.createElement("div");
10
- if(J.className=K,J.setAttribute("role","listbox"),J.setAttribute("tabindex","0"),W)J.setAttribute("aria-label",W);
11
- let G=document.createElement("div");
12
- G.className=`${K}-viewport`,G.style.overflow="auto",G.style.height="100%",G.style.width="100%";
13
- let j=document.createElement("div");
14
- j.className=`${K}-content`,j.style.position="relative",j.style.width="100%";
15
- let Q=document.createElement("div");
16
- return Q.className=`${K}-items`,Q.style.position="relative",Q.style.width="100%",j.appendChild(Q),G.appendChild(j),J.appendChild(G),B.appendChild(J),{root:J,viewport:G,content:j,items:Q}},Gj=(B=100)=>{let K=[];
17
- return{acquire:()=>{let j=K.pop();
18
- if(j)return j;
19
- let Q=document.createElement("div");
20
- return Q.setAttribute("role","option"),Q},release:(j)=>{if(K.length<B)j.className="",j.textContent="",j.removeAttribute("style"),j.removeAttribute("data-index"),j.removeAttribute("data-id"),K.push(j)},clear:()=>{K.length=0}}},Jj=(B,K,W,J,G)=>{if(J===0){G.start=0,G.end=0;
21
- return}
22
- let j=W.indexAtOffset(B),Q=j,N=W.getOffset(j)-B;
23
- while(Q<J-1&&N<K)N+=W.getHeight(Q),Q++;
24
- G.start=j,G.end=Math.min(Q,J-1)},Kj=(B,K,W,J)=>{J.start=Math.max(0,B.start-K),J.end=Math.min(W-1,B.end+K)},Qj=0,Uj=(B)=>{let{item:K,items:W,overscan:J=3,classPrefix:G="vlist",ariaLabel:j}=B,{height:Q,template:N}=K,Z=W?[...W]:[],y=!1,H=0,O=null,h=`${G}-${Qj++}`,c=qj(B.container),$=Bj(c,G,j),D=jj(),F=e(Q,Z.length),b=Gj(),w=$.viewport.clientHeight,S={start:0,end:0},M={start:0,end:0},L={start:-1,end:-1},A=new Map,P={selected:!1,focused:!1},m=`${G}-item`,z="",v=(q,U)=>{if(typeof U==="string")q.innerHTML=U;
25
- else q.replaceChildren(U)},I=(q,U)=>{q.style.transform=`translateY(${Math.round(F.getOffset(U))}
26
- px)`},d=(q,U)=>{let X=b.acquire();
27
- X.className=m,X.style.height=`${F.getHeight(q)}
28
- px`,X.dataset.index=String(q),X.dataset.id=String(U.id),X.ariaSelected="false",X.id=`${h}-item-${q}`,z=String(Z.length),X.setAttribute("aria-setsize",z),X.setAttribute("aria-posinset",String(q+1));
29
- let V=U.id===O;
30
- if(P.selected=V,V)X.classList.add(`${G}-item--selected`);
31
- else X.classList.remove(`${G}-item--selected`);
32
- return v(X,N(U,q,P)),I(X,q),X},f=()=>{$.content.style.height=`${F.getTotalHeight()}
33
- px`},C=()=>{if(y)return;
34
- if(Jj(H,w,F,Z.length,S),Kj(S,J,Z.length,M),M.start===L.start&&M.end===L.end)return;
35
- let q=String(Z.length),U=q!==z;
36
- z=q;
37
- for(let[Y,k]of A)if(Y<M.start||Y>M.end)k.remove(),b.release(k),A.delete(Y);
38
- let X=document.createDocumentFragment(),V=[];
39
- for(let Y=M.start;
40
- Y<=M.end;
41
- Y++){let k=Z[Y];
42
- if(!k)continue;
43
- let _=A.get(Y);
44
- if(_){let T=_.dataset.id,p=String(k.id);
45
- if(T!==p)v(_,N(k,Y,P)),_.dataset.id=p,_.style.height=`${F.getHeight(Y)}
46
- px`;
47
- let g=k.id===O;
48
- if(P.selected=g,g)_.classList.add(`${G}-item--selected`);
49
- else _.classList.remove(`${G}-item--selected`);
50
- if(I(_,Y),U)_.setAttribute("aria-setsize",z)}
51
- else{let T=d(Y,k);
52
- X.appendChild(T),V.push({index:Y,element:T})}}
53
- if(V.length>0){$.items.appendChild(X);
54
- for(let{index:Y,element:k}
55
- of V)A.set(Y,k)}
56
- L.start=M.start,L.end=M.end,D.emit("range:change",{range:{start:M.start,end:M.end}})},u=()=>{L.start=-1,L.end=-1,C()},E=null,x=()=>{if(y)return;
57
- let q=$.viewport.scrollTop,U=Math.max(0,q),X=U>=H?"down":"up";
58
- if(!$.root.classList.contains(`${G}--scrolling`))$.root.classList.add(`${G}--scrolling`);
59
- if(H=U,C(),D.emit("scroll",{scrollTop:U,direction:X}),E)clearTimeout(E);
60
- E=setTimeout(()=>{$.root.classList.remove(`${G}--scrolling`)},150)};
61
- $.viewport.addEventListener("scroll",x,{passive:!0});
62
- let o=(q)=>{if(O===q)return;
63
- O=q,u(),D.emit("selection:change",{selectedId:O})},s=()=>{if(O===null)return;
64
- O=null,u(),D.emit("selection:change",{selectedId:null})},a=()=>O,r=(q,U="start")=>{let X=Math.max(0,Math.min(q,Z.length-1)),V=F.getOffset(X),Y=F.getHeight(X),k=Math.max(0,F.getTotalHeight()-w),_=V;
65
- if(U==="center")_=V-w/2+Y/2;
66
- else if(U==="end")_=V-w+Y;
67
- _=Math.max(0,Math.min(_,k)),$.viewport.scrollTop=_},R=()=>{F.rebuild(Z.length),f(),u()},l=(q)=>{Z=[...q],R()},n=(q)=>{Z=[...Z,...q],R()},i=(q)=>{Z=[...q,...Z],R()},t=()=>{if(y)return;
68
- if(y=!0,$.viewport.removeEventListener("scroll",x),E)clearTimeout(E);
69
- for(let[,q]of A)q.remove(),b.release(q);
70
- A.clear(),b.clear(),D.clear(),$.root.remove()};
71
- return f(),C(),{get element(){return $.root},get items(){return Z},get total(){return Z.length},setItems:l,appendItems:n,prependItems:i,scrollToIndex:r,getScrollPosition:()=>H,selectItem:o,deselectItem:s,getSelectedId:a,on:(q,U)=>D.on(q,U),off:(q,U)=>D.off(q,U),destroy:t}};
72
- export{Uj as createVList};
1
+ var e=(B,K)=>{let W=K;return{getOffset:(J)=>J*B,getHeight:()=>B,indexAtOffset:(J)=>{if(W===0||B===0)return 0;return Math.max(0,Math.min(Math.floor(J/B),W-1))},getTotalHeight:()=>W*B,getTotal:()=>W,rebuild:(J)=>{W=J}}},jj=()=>{let B={},K=(j,Q)=>{if(!B[j])B[j]=new Set;return B[j].add(Q),()=>W(j,Q)},W=(j,Q)=>{B[j]?.delete(Q)};return{on:K,off:W,emit:(j,Q)=>{B[j]?.forEach((N)=>{try{N(Q)}catch(Z){console.error(`[vlist] Error in "${j}" handler:`,Z)}})},clear:()=>{for(let j in B)delete B[j]}}},qj=(B)=>{if(typeof B==="string"){let K=document.querySelector(B);if(!K)throw Error(`[vlist] Container not found: ${B}`);return K}return B},Bj=(B,K,W)=>{let J=document.createElement("div");if(J.className=K,J.setAttribute("role","listbox"),J.setAttribute("tabindex","0"),W)J.setAttribute("aria-label",W);let G=document.createElement("div");G.className=`${K}-viewport`,G.style.overflow="auto",G.style.height="100%",G.style.width="100%";let j=document.createElement("div");j.className=`${K}-content`,j.style.position="relative",j.style.width="100%";let Q=document.createElement("div");return Q.className=`${K}-items`,Q.style.position="relative",Q.style.width="100%",j.appendChild(Q),G.appendChild(j),J.appendChild(G),B.appendChild(J),{root:J,viewport:G,content:j,items:Q}},Gj=(B=100)=>{let K=[];return{acquire:()=>{let j=K.pop();if(j)return j;let Q=document.createElement("div");return Q.setAttribute("role","option"),Q},release:(j)=>{if(K.length<B)j.className="",j.textContent="",j.removeAttribute("style"),j.removeAttribute("data-index"),j.removeAttribute("data-id"),K.push(j)},clear:()=>{K.length=0}}},Jj=(B,K,W,J,G)=>{if(J===0){G.start=0,G.end=0;return}let j=W.indexAtOffset(B),Q=j,N=W.getOffset(j)-B;while(Q<J-1&&N<K)N+=W.getHeight(Q),Q++;G.start=j,G.end=Math.min(Q,J-1)},Kj=(B,K,W,J)=>{J.start=Math.max(0,B.start-K),J.end=Math.min(W-1,B.end+K)},Qj=0,Uj=(B)=>{let{item:K,items:W,overscan:J=3,classPrefix:G="vlist",ariaLabel:j}=B,{height:Q,template:N}=K,Z=W?[...W]:[],y=!1,H=0,O=null,h=`${G}-${Qj++}`,c=qj(B.container),$=Bj(c,G,j),D=jj(),F=e(Q,Z.length),b=Gj(),w=$.viewport.clientHeight,S={start:0,end:0},M={start:0,end:0},L={start:-1,end:-1},A=new Map,P={selected:!1,focused:!1},m=`${G}-item`,z="",v=(q,U)=>{if(typeof U==="string")q.innerHTML=U;else q.replaceChildren(U)},I=(q,U)=>{q.style.transform=`translateY(${Math.round(F.getOffset(U))}px)`},d=(q,U)=>{let X=b.acquire();X.className=m,X.style.height=`${F.getHeight(q)}px`,X.dataset.index=String(q),X.dataset.id=String(U.id),X.ariaSelected="false",X.id=`${h}-item-${q}`,z=String(Z.length),X.setAttribute("aria-setsize",z),X.setAttribute("aria-posinset",String(q+1));let V=U.id===O;if(P.selected=V,V)X.classList.add(`${G}-item--selected`);else X.classList.remove(`${G}-item--selected`);return v(X,N(U,q,P)),I(X,q),X},f=()=>{$.content.style.height=`${F.getTotalHeight()}px`},C=()=>{if(y)return;if(Jj(H,w,F,Z.length,S),Kj(S,J,Z.length,M),M.start===L.start&&M.end===L.end)return;let q=String(Z.length),U=q!==z;z=q;for(let[Y,k]of A)if(Y<M.start||Y>M.end)k.remove(),b.release(k),A.delete(Y);let X=document.createDocumentFragment(),V=[];for(let Y=M.start;Y<=M.end;Y++){let k=Z[Y];if(!k)continue;let _=A.get(Y);if(_){let T=_.dataset.id,p=String(k.id);if(T!==p)v(_,N(k,Y,P)),_.dataset.id=p,_.style.height=`${F.getHeight(Y)}px`;let g=k.id===O;if(P.selected=g,g)_.classList.add(`${G}-item--selected`);else _.classList.remove(`${G}-item--selected`);if(I(_,Y),U)_.setAttribute("aria-setsize",z)}else{let T=d(Y,k);X.appendChild(T),V.push({index:Y,element:T})}}if(V.length>0){$.items.appendChild(X);for(let{index:Y,element:k}of V)A.set(Y,k)}L.start=M.start,L.end=M.end,D.emit("range:change",{range:{start:M.start,end:M.end}})},u=()=>{L.start=-1,L.end=-1,C()},E=null,x=()=>{if(y)return;let q=$.viewport.scrollTop,U=Math.max(0,q),X=U>=H?"down":"up";if(!$.root.classList.contains(`${G}--scrolling`))$.root.classList.add(`${G}--scrolling`);if(H=U,C(),D.emit("scroll",{scrollTop:U,direction:X}),E)clearTimeout(E);E=setTimeout(()=>{$.root.classList.remove(`${G}--scrolling`)},150)};$.viewport.addEventListener("scroll",x,{passive:!0});let o=(q)=>{if(O===q)return;O=q,u(),D.emit("selection:change",{selectedId:O})},s=()=>{if(O===null)return;O=null,u(),D.emit("selection:change",{selectedId:null})},a=()=>O,r=(q,U="start")=>{let X=Math.max(0,Math.min(q,Z.length-1)),V=F.getOffset(X),Y=F.getHeight(X),k=Math.max(0,F.getTotalHeight()-w),_=V;if(U==="center")_=V-w/2+Y/2;else if(U==="end")_=V-w+Y;_=Math.max(0,Math.min(_,k)),$.viewport.scrollTop=_},R=()=>{F.rebuild(Z.length),f(),u()},l=(q)=>{Z=[...q],R()},n=(q)=>{Z=[...Z,...q],R()},i=(q)=>{Z=[...q,...Z],R()},t=()=>{if(y)return;if(y=!0,$.viewport.removeEventListener("scroll",x),E)clearTimeout(E);for(let[,q]of A)q.remove(),b.release(q);A.clear(),b.clear(),D.clear(),$.root.remove()};return f(),C(),{get element(){return $.root},get items(){return Z},get total(){return Z.length},setItems:l,appendItems:n,prependItems:i,scrollToIndex:r,getScrollPosition:()=>H,selectItem:o,deselectItem:s,getSelectedId:a,on:(q,U)=>D.on(q,U),off:(q,U)=>D.off(q,U),destroy:t}};export{Uj as createVList};
@@ -1,233 +1 @@
1
- var $j=(U={})=>{let{chunkSize:G=100,maxCachedItems:Y=5000,evictionBuffer:N=200,onEvict:M}=U,Q=new Map,j=0,D=0,T=(q)=>{let X=Q.get(q);
2
- if(!X)X={items:Array(G),count:0,lastAccess:Date.now()},Q.set(q,X);
3
- else X.lastAccess=Date.now();
4
- return X},z=(q)=>{return Math.floor(q/G)},W=(q)=>{return q%G},y=()=>j,L=(q)=>{j=q},b=(q)=>{if(q<0||q>=j)return;
5
- let X=z(q),B=Q.get(X);
6
- if(!B)return;
7
- return B.items[W(q)]},C=(q)=>{if(q<0||q>=j)return!1;
8
- let X=z(q),B=Q.get(X);
9
- if(!B)return!1;
10
- return B.items[W(q)]!==void 0},u=(q,X)=>{let B=z(q),K=T(B),_=W(q),l=K.items[_]===void 0;
11
- if(K.items[_]=X,l)K.count++,D++;
12
- if(q>=j)j=q+1},H=(q,X)=>{for(let B=0;
13
- B<X.length;
14
- B++){let K=X[B];
15
- if(K!==void 0)u(q+B,K)}},Z=(q)=>{if(q<0||q>=j)return!1;
16
- let X=z(q),B=Q.get(X);
17
- if(!B)return!1;
18
- let K=W(q);
19
- if(B.items[K]===void 0)return!1;
20
- if(B.items[K]=void 0,B.count--,D--,B.count===0)Q.delete(X);
21
- return!0},F=(q,X)=>{let B=[];
22
- for(let K=q;
23
- K<=X&&K<j;
24
- K++)B.push(b(K));
25
- return B},V=(q,X)=>{for(let B=q;
26
- B<=X&&B<j;
27
- B++)if(!C(B))return!1;
28
- return!0},O=()=>{let q=[],X=null,B=Array.from(Q.keys()).sort((K,_)=>K-_);
29
- for(let K of B){let _=Q.get(K);
30
- if(!_)continue;
31
- let l=K*G;
32
- for(let R=0;
33
- R<G;
34
- R++){let p=l+R;
35
- if(p>=j)break;
36
- if(_.items[R]!==void 0)if(X===null)X={start:p,end:p};
37
- else if(p===X.end+1)X.end=p;
38
- else q.push(X),X={start:p,end:p};
39
- else if(X!==null)q.push(X),X=null}}
40
- if(X!==null)q.push(X);
41
- return q},h=(q,X)=>{let B=[],K=null;
42
- for(let _=q;
43
- _<=X&&_<j;
44
- _++)if(!C(_))if(K===null)K={start:_,end:_};
45
- else K.end=_;
46
- else if(K!==null)B.push(K),K=null;
47
- if(K!==null)B.push(K);
48
- return B},w=(q)=>{return Q.has(q)},k=(q)=>{let X=Q.get(q);
49
- if(X)X.lastAccess=Date.now()},A=(q,X)=>{if(q>X||Q.size===0)return;
50
- let B=Date.now(),K=z(Math.max(0,q)),_=z(Math.min(j-1,X));
51
- for(let l=K;
52
- l<=_;
53
- l++){let R=Q.get(l);
54
- if(R)R.lastAccess=B}},f=(q,X)=>{if(D<=Y)return 0;
55
- let B=Math.max(0,q-N),K=Math.min(j-1,X+N),_=z(B),l=z(K),R=0,p=[];
56
- for(let[i,qj]of Q)if(i<_||i>l)R+=qj.count,p.push(i),D-=qj.count,Q.delete(i);
57
- if(R>0&&M)M(R,p);
58
- return R},I=()=>{if(D<=Y)return 0;
59
- let q=Array.from(Q.entries()).sort(([,K],[,_])=>K.lastAccess-_.lastAccess),X=0,B=[];
60
- for(let[K,_]of q){if(D<=Y)break;
61
- X+=_.count,D-=_.count,B.push(K),Q.delete(K)}
62
- if(X>0&&M)M(X,B);
63
- return X},r=()=>{return{totalItems:j,cachedItems:D,cachedChunks:Q.size,chunkSize:G,maxCachedItems:Y,memoryEfficiency:j>0?1-D/j:1}},t=()=>D,e=()=>{Q.clear(),D=0};
64
- return{chunkSize:G,maxCachedItems:Y,getTotal:y,setTotal:L,get:b,has:C,set:u,setRange:H,delete:Z,getRange:F,isRangeLoaded:V,getLoadedRanges:O,findUnloadedRanges:h,getChunkIndex:z,isChunkLoaded:w,touchChunk:k,touchChunksForRange:A,evictDistant:f,evictToLimit:I,getStats:r,getCachedCount:t,clear:e,reset:()=>{e(),j=0}}},Uj=(U)=>{if(U.length===0)return[];
65
- let G=[...U].sort((N,M)=>N.start-M.start),Y=[{...G[0]}];
66
- for(let N=1;
67
- N<G.length;
68
- N++){let M=G[N],Q=Y[Y.length-1];
69
- if(M.start<=Q.end+1)Q.end=Math.max(Q.end,M.end);
70
- else Y.push({...M})}
71
- return Y},Xj=(U,G,Y)=>{let N=Math.floor(U.start/Y)*Y,M=Math.ceil((U.end+1)/Y)*Y-1,Q={start:N,end:M};
72
- if(G.length===0)return[Q];
73
- let j=[],D=Uj(G),T=Q.start;
74
- for(let z of D){if(z.end<T)continue;
75
- if(z.start>Q.end)break;
76
- if(z.start>T)j.push({start:T,end:Math.min(z.start-1,Q.end)});
77
- if(T=z.end+1,T>Q.end)break}
78
- if(T<=Q.end)j.push({start:T,end:Q.end});
79
- return j};
80
- var Yj=(U={})=>{let{enabled:G=!0,maskCharacter:Y="█",randomVariance:N=!0,maxSampleSize:M=20,customGenerator:Q}=U,j=null,D=!1,T=0,z=(Z)=>{if(!G||D||Z.length===0)return;
81
- let F=new Map,V=new Map,O=Math.min(Z.length,M);
82
- for(let h=0;
83
- h<O;
84
- h++){let w=Z[h];
85
- if(!w||typeof w!=="object")continue;
86
- for(let[k,A]of Object.entries(w)){if(k.startsWith("_")||k==="id")continue;
87
- if(!V.has(k))V.set(k,{lengths:[],types:new Set});
88
- let f=V.get(k),I=Array.isArray(A)?"array":typeof A;
89
- if(f.types.add(I),typeof A==="string")f.lengths.push(A.length);
90
- else if(A!==null&&A!==void 0)f.lengths.push(String(A).length)}}
91
- for(let[h,w]of V){if(w.lengths.length===0)continue;
92
- let k=Math.min(...w.lengths),A=Math.max(...w.lengths),f=Math.round(w.lengths.reduce((r,t)=>r+t,0)/w.lengths.length),I="string";
93
- if(w.types.has("number")&&w.types.size===1)I="number";
94
- else if(w.types.has("boolean")&&w.types.size===1)I="boolean";
95
- else if(w.types.has("array"))I="array";
96
- else if(w.types.has("object")&&!w.types.has("string"))I="object";
97
- F.set(h,{minLength:k,maxLength:A,avgLength:f,type:I})}
98
- j=F,D=!0},W=()=>D,y=(Z)=>{let F=Z.avgLength;
99
- if(N&&Z.minLength!==Z.maxLength){if(F=Math.floor(Math.random()*(Z.maxLength-Z.minLength+1)+Z.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}
100
- return Y.repeat(Math.max(1,F))},L=(Z)=>{if(Q)return{...Q(Z),["_isPlaceholder"]:!0};
101
- let F={id:`__placeholder_${T++}`,["_isPlaceholder"]:!0,_index:Z};
102
- if(!j||j.size===0)return F.label=Y.repeat(12),F;
103
- for(let[V,O]of j)switch(O.type){case"string":F[V]=y(O);
104
- break;
105
- case"number":F[V]=0;
106
- break;
107
- case"boolean":F[V]=!1;
108
- break;
109
- case"array":F[V]=[];
110
- break;
111
- case"object":F[V]={};
112
- break;
113
- default:F[V]=y(O)}
114
- return F};
115
- return{analyzeStructure:z,hasAnalyzedStructure:W,generate:L,generateRange:(Z,F)=>{let V=[];
116
- for(let O=Z;
117
- O<=F;
118
- O++)V.push(L(O));
119
- return V},isPlaceholder:(Z)=>{if(!Z||typeof Z!=="object")return!1;
120
- return Z._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{j=null,D=!1,T=0}}},d=(U)=>{if(!U||typeof U!=="object")return!1;
121
- return U._isPlaceholder===!0},Nj=(U)=>{return U.filter((G)=>!d(G))},Fj=(U)=>{let G=0;
122
- for(let Y of U)if(Y!==void 0&&!d(Y))G++;
123
- return G},Ej=(U,G,Y)=>{let N=0;
124
- for(let M=0;
125
- M<G.length;
126
- M++){let Q=Y+M,j=U[Q];
127
- if(j===void 0||d(j)){if(U[Q]=G[M],d(j))N++}}
128
- return N};
129
- var Lj=50,Bj=(U={})=>{let{adapter:G,initialItems:Y,initialTotal:N,storage:M,placeholder:Q,pageSize:j=Lj,onStateChange:D,onItemsLoaded:T,onItemsEvicted:z}=U,W=$j({...M,onEvict:(J,$)=>{z?.(J),O()}}),y=null,L=()=>{if(!y)y=Yj(Q);
130
- return y},b=new Map,C=!1,u,H=!0,Z,F=[],V=new Map,O=()=>{D?.(e())},h=()=>{b.clear();
131
- let J=W.getLoadedRanges();
132
- for(let $ of J)for(let P=$.start;
133
- P<=$.end;
134
- P++){let E=W.get(P);
135
- if(E&&!d(E))b.set(E.id,P)}},w=(J,$)=>{if(!d($))b.set($.id,J)},k=(J)=>{b.delete(J)},A=(J,$)=>{return`${J}-${$}`},f=()=>W.getTotal(),I=()=>W.getCachedCount(),r=()=>C,t=()=>H,e=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:C,pendingRanges:F,error:u,hasMore:H,cursor:Z}),Zj=()=>W,q=()=>L(),X=(J)=>{let $=W.get(J);
136
- if($!==void 0)return $;
137
- if(J>=0&&J<W.getTotal())return L().generate(J);
138
- return},B=(J)=>{let $=b.get(J);
139
- if($===void 0)return;
140
- return W.get($)},K=(J)=>{return b.get(J)??-1},_=(J)=>{let $=W.get(J);
141
- return $!==void 0&&!d($)},l=(J,$)=>{let P=[],E=W.getTotal(),g=0,x=0;
142
- W.touchChunksForRange(J,Math.min($,E-1));
143
- for(let c=J;
144
- c<=$&&c<E;
145
- c++){let s=W.get(c);
146
- if(s!==void 0)P.push(s),g++;
147
- else P.push(L().generate(c)),x++}
148
- return P},R=(J)=>{W.setTotal(J),H=W.getCachedCount()<J,O()},p=(J,$=0,P)=>{if(y&&!y.hasAnalyzedStructure()&&J.length>0)y.analyzeStructure(J);
149
- for(let E=0;
150
- E<J.length;
151
- E++){let g=J[E];
152
- if(g!==void 0){let x=$+E;
153
- W.set(x,g),w(x,g)}}
154
- if(P!==void 0)W.setTotal(P);
155
- else if($+J.length>W.getTotal())W.setTotal($+J.length);
156
- H=W.getCachedCount()<W.getTotal(),T?.(J,$,W.getTotal()),O()},i=(J,$)=>{let P=b.get(J);
157
- if(P===void 0)return!1;
158
- let E=W.get(P);
159
- if(!E)return!1;
160
- let g={...E,...$};
161
- if(W.set(P,g),$.id!==void 0&&$.id!==J)k(J),w(P,g);
162
- return O(),!0},qj=(J)=>{let $=b.get(J);
163
- if($===void 0)return!1;
164
- W.delete($),k(J);
165
- let P=W.getTotal();
166
- if(P>0)W.setTotal(P-1);
167
- return O(),!0},Jj=async(J,$)=>{if(!G)return;
168
- let P=A(J,$);
169
- if(V.has(P))return;
170
- let E=W.getLoadedRanges(),g=Xj({start:J,end:$},E,W.chunkSize);
171
- if(g.length===0)return;
172
- let x=W.chunkSize,c=[];
173
- for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);
174
- for(let S=a;
175
- S<=n;
176
- S++){let o=S*x,m=o+x-1,Qj=A(o,m);
177
- if(!c.some((Wj)=>Wj.start===o)&&!V.has(Qj))c.push({start:o,end:m})}}
178
- let s=[];
179
- for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);
180
- for(let S=a;
181
- S<=n;
182
- S++){let o=S*x,m=o+x-1,Qj=A(o,m);
183
- if(V.has(Qj)){let Wj=V.get(Qj);
184
- if(!s.includes(Wj))s.push(Wj)}}}
185
- for(let v of c){let a=A(v.start,v.end),n=(async()=>{F.push(v),C=!0,u=void 0,O();
186
- try{let S=v.end-v.start+1,o={offset:v.start,limit:S,cursor:void 0},m=await G.read(o);
187
- if(p(m.items,v.start,m.total),m.cursor)Z=m.cursor;
188
- if(m.hasMore!==void 0)H=m.hasMore;
189
- else if(m.total!==void 0)H=W.getCachedCount()<m.total}
190
- catch(S){u=S instanceof Error?S:Error(String(S))}
191
- finally{V.delete(a),F=F.filter((S)=>S.start!==v.start||S.end!==v.end),C=V.size>0,O()}})();
192
- V.set(a,n),s.push(n)}
193
- await Promise.all(s)},Aj=async(J,$)=>{if(W.isRangeLoaded(J,$))return;
194
- await Jj(J,$)},Dj=async()=>{if(!G)return;
195
- await Jj(0,j-1)},Oj=async()=>{if(!G||C||!H)return!1;
196
- let J=W.getCachedCount(),$=W.getTotal(),P=J,E=Math.min(P+j-1,$>0?$-1:P+j-1);
197
- if(P>=$&&$>0)return H=!1,!1;
198
- return await Jj(P,E),W.getCachedCount()>J},zj=async()=>{if(W.clear(),b.clear(),y)y.clear();
199
- Z=void 0,H=!0,u=void 0,O(),await Dj()},Hj=(J,$)=>{if(W.evictDistant(J,$)>0)h()},yj=()=>{W.clear(),b.clear(),Z=void 0,u=void 0,F=[],C=!1,O()},bj=()=>{if(W.reset(),b.clear(),y)y.clear();
200
- Z=void 0,H=!0,u=void 0,F=[],C=!1,O()};
201
- if(Y&&Y.length>0)p(Y,0,N??Y.length);
202
- else if(N!==void 0)W.setTotal(N);
203
- return{getState:e,getTotal:f,getCached:I,getIsLoading:r,getHasMore:t,getStorage:Zj,getPlaceholders:q,getItem:X,getItemById:B,getIndexById:K,isItemLoaded:_,getItemsInRange:l,setTotal:R,setItems:p,updateItem:i,removeItem:qj,loadRange:Jj,ensureRange:Aj,loadInitial:Dj,loadMore:Oj,reload:zj,evictDistant:Hj,clear:yj,reset:bj}};
204
- var Vj=(U,G,Y,N,M,Q)=>{if(N===0||G===0)return Q.start=0,Q.end=-1,Q;
205
- let j=Y.indexAtOffset(U),D=Y.indexAtOffset(U+G);
206
- if(D<N-1)D++;
207
- return Q.start=Math.max(0,j),Q.end=Math.min(N-1,Math.max(0,D)),Q},wj=(U,G,Y,N)=>{if(Y===0)return N.start=0,N.end=-1,N;
208
- return N.start=Math.max(0,U.start-G),N.end=Math.min(Y-1,U.end+G),N};
209
- var Gj=(U,G,Y,N,M,Q=Vj)=>{return Q(U.scrollTop,U.containerHeight,G,Y,M,U.visibleRange),wj(U.visibleRange,N,Y,U.renderRange),U.totalHeight=M.virtualHeight,U.actualHeight=M.actualHeight,U.isCompressed=M.isCompressed,U.compressionRatio=M.ratio,U};
210
- var Kj=200,jj=50;
211
- var Mj=15,Pj=2,_j=50;
212
- var Tj=(U)=>{let{adapter:G,loading:Y}=U,N=Y?.cancelThreshold??Mj,M=Y?.preloadThreshold??Pj,Q=Y?.preloadAhead??_j;
213
- return{name:"withData",priority:20,methods:["reload"],setup(j){let{emitter:D}=j,T=j.config.reverse,z=j.config.overscan,W=Bj({adapter:G,pageSize:jj,onStateChange:()=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.updateCompressionMode(),j.state.viewportState=Gj(j.state.viewportState,j.heightCache,j.getVirtualTotal(),z,j.getCachedCompression()),j.updateContentSize(j.state.viewportState.totalHeight),j.renderIfNeeded()},onItemsLoaded:(Z,F,V)=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.forceRender(),D.emit("load:end",{items:Z,total:V})}});
214
- j.replaceDataManager(W);
215
- let y=null,L=null,b=0,C=()=>{if(L){let Z=L;
216
- L=null,j.dataManager.ensureRange(Z.start,Z.end).catch((F)=>{D.emit("error",{error:F,context:"ensureRange"})})}};
217
- j.afterScroll.push((Z,F)=>{if(j.state.isDestroyed)return;
218
- let V=j.scrollController.getVelocity(),h=j.scrollController.isTracking()&&V<=N;
219
- if(L&&b>N&&V<=N){let A=L;
220
- L=null,j.dataManager.ensureRange(A.start,A.end).catch((f)=>{D.emit("error",{error:f,context:"ensureRange"})})}
221
- if(b=V,h&&!j.dataManager.getIsLoading()&&j.dataManager.getHasMore()){if(T){if(Z<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((A)=>{D.emit("error",{error:A,context:"loadMore"})})}
222
- else if(j.state.viewportState.totalHeight-Z-j.state.viewportState.containerHeight<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((f)=>{D.emit("error",{error:f,context:"loadMore"})})}
223
- let{renderRange:w}=j.state.viewportState;
224
- if(!y||w.start!==y.start||w.end!==y.end)if(y={start:w.start,end:w.end},h){L=null;
225
- let{start:A,end:f}=w,I=j.getVirtualTotal();
226
- if(V>M)if(F==="down")f=Math.min(w.end+Q,I-1);
227
- else A=Math.max(w.start-Q,0);
228
- j.dataManager.ensureRange(A,f).catch((r)=>{D.emit("error",{error:r,context:"ensureRange"})})}
229
- else L={start:w.start,end:w.end}});
230
- let u=200,H=null;
231
- j.afterScroll.push((Z,F)=>{if(H!==null)clearTimeout(H);
232
- H=setTimeout(()=>{H=null,C()},u)}),j.destroyHandlers.push(()=>{if(H!==null)clearTimeout(H),H=null}),D.on("load:start",()=>{j.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{j.dom.root.removeAttribute("aria-busy")}),j.methods.set("reload",async()=>{await j.dataManager.reload()}),D.emit("load:start",{offset:0,limit:jj}),j.dataManager.loadInitial().catch((Z)=>{D.emit("error",{error:Z,context:"loadInitial"})})}}};
233
- export{Tj as withData,Ej as replacePlaceholders,Uj as mergeRanges,d as isPlaceholderItem,Nj as filterPlaceholders,$j as createSparseStorage,Yj as createPlaceholderManager,Bj as createDataManager,Fj as countRealItems,Xj as calculateMissingRanges};
1
+ var $j=(U={})=>{let{chunkSize:G=100,maxCachedItems:Y=5000,evictionBuffer:N=200,onEvict:M}=U,Q=new Map,j=0,D=0,T=(q)=>{let X=Q.get(q);if(!X)X={items:Array(G),count:0,lastAccess:Date.now()},Q.set(q,X);else X.lastAccess=Date.now();return X},z=(q)=>{return Math.floor(q/G)},W=(q)=>{return q%G},y=()=>j,L=(q)=>{j=q},b=(q)=>{if(q<0||q>=j)return;let X=z(q),B=Q.get(X);if(!B)return;return B.items[W(q)]},C=(q)=>{if(q<0||q>=j)return!1;let X=z(q),B=Q.get(X);if(!B)return!1;return B.items[W(q)]!==void 0},u=(q,X)=>{let B=z(q),K=T(B),_=W(q),l=K.items[_]===void 0;if(K.items[_]=X,l)K.count++,D++;if(q>=j)j=q+1},H=(q,X)=>{for(let B=0;B<X.length;B++){let K=X[B];if(K!==void 0)u(q+B,K)}},Z=(q)=>{if(q<0||q>=j)return!1;let X=z(q),B=Q.get(X);if(!B)return!1;let K=W(q);if(B.items[K]===void 0)return!1;if(B.items[K]=void 0,B.count--,D--,B.count===0)Q.delete(X);return!0},F=(q,X)=>{let B=[];for(let K=q;K<=X&&K<j;K++)B.push(b(K));return B},V=(q,X)=>{for(let B=q;B<=X&&B<j;B++)if(!C(B))return!1;return!0},O=()=>{let q=[],X=null,B=Array.from(Q.keys()).sort((K,_)=>K-_);for(let K of B){let _=Q.get(K);if(!_)continue;let l=K*G;for(let R=0;R<G;R++){let p=l+R;if(p>=j)break;if(_.items[R]!==void 0)if(X===null)X={start:p,end:p};else if(p===X.end+1)X.end=p;else q.push(X),X={start:p,end:p};else if(X!==null)q.push(X),X=null}}if(X!==null)q.push(X);return q},h=(q,X)=>{let B=[],K=null;for(let _=q;_<=X&&_<j;_++)if(!C(_))if(K===null)K={start:_,end:_};else K.end=_;else if(K!==null)B.push(K),K=null;if(K!==null)B.push(K);return B},w=(q)=>{return Q.has(q)},k=(q)=>{let X=Q.get(q);if(X)X.lastAccess=Date.now()},A=(q,X)=>{if(q>X||Q.size===0)return;let B=Date.now(),K=z(Math.max(0,q)),_=z(Math.min(j-1,X));for(let l=K;l<=_;l++){let R=Q.get(l);if(R)R.lastAccess=B}},f=(q,X)=>{if(D<=Y)return 0;let B=Math.max(0,q-N),K=Math.min(j-1,X+N),_=z(B),l=z(K),R=0,p=[];for(let[i,qj]of Q)if(i<_||i>l)R+=qj.count,p.push(i),D-=qj.count,Q.delete(i);if(R>0&&M)M(R,p);return R},I=()=>{if(D<=Y)return 0;let q=Array.from(Q.entries()).sort(([,K],[,_])=>K.lastAccess-_.lastAccess),X=0,B=[];for(let[K,_]of q){if(D<=Y)break;X+=_.count,D-=_.count,B.push(K),Q.delete(K)}if(X>0&&M)M(X,B);return X},r=()=>{return{totalItems:j,cachedItems:D,cachedChunks:Q.size,chunkSize:G,maxCachedItems:Y,memoryEfficiency:j>0?1-D/j:1}},t=()=>D,e=()=>{Q.clear(),D=0};return{chunkSize:G,maxCachedItems:Y,getTotal:y,setTotal:L,get:b,has:C,set:u,setRange:H,delete:Z,getRange:F,isRangeLoaded:V,getLoadedRanges:O,findUnloadedRanges:h,getChunkIndex:z,isChunkLoaded:w,touchChunk:k,touchChunksForRange:A,evictDistant:f,evictToLimit:I,getStats:r,getCachedCount:t,clear:e,reset:()=>{e(),j=0}}},Uj=(U)=>{if(U.length===0)return[];let G=[...U].sort((N,M)=>N.start-M.start),Y=[{...G[0]}];for(let N=1;N<G.length;N++){let M=G[N],Q=Y[Y.length-1];if(M.start<=Q.end+1)Q.end=Math.max(Q.end,M.end);else Y.push({...M})}return Y},Xj=(U,G,Y)=>{let N=Math.floor(U.start/Y)*Y,M=Math.ceil((U.end+1)/Y)*Y-1,Q={start:N,end:M};if(G.length===0)return[Q];let j=[],D=Uj(G),T=Q.start;for(let z of D){if(z.end<T)continue;if(z.start>Q.end)break;if(z.start>T)j.push({start:T,end:Math.min(z.start-1,Q.end)});if(T=z.end+1,T>Q.end)break}if(T<=Q.end)j.push({start:T,end:Q.end});return j};var Yj=(U={})=>{let{enabled:G=!0,maskCharacter:Y="█",randomVariance:N=!0,maxSampleSize:M=20,customGenerator:Q}=U,j=null,D=!1,T=0,z=(Z)=>{if(!G||D||Z.length===0)return;let F=new Map,V=new Map,O=Math.min(Z.length,M);for(let h=0;h<O;h++){let w=Z[h];if(!w||typeof w!=="object")continue;for(let[k,A]of Object.entries(w)){if(k.startsWith("_")||k==="id")continue;if(!V.has(k))V.set(k,{lengths:[],types:new Set});let f=V.get(k),I=Array.isArray(A)?"array":typeof A;if(f.types.add(I),typeof A==="string")f.lengths.push(A.length);else if(A!==null&&A!==void 0)f.lengths.push(String(A).length)}}for(let[h,w]of V){if(w.lengths.length===0)continue;let k=Math.min(...w.lengths),A=Math.max(...w.lengths),f=Math.round(w.lengths.reduce((r,t)=>r+t,0)/w.lengths.length),I="string";if(w.types.has("number")&&w.types.size===1)I="number";else if(w.types.has("boolean")&&w.types.size===1)I="boolean";else if(w.types.has("array"))I="array";else if(w.types.has("object")&&!w.types.has("string"))I="object";F.set(h,{minLength:k,maxLength:A,avgLength:f,type:I})}j=F,D=!0},W=()=>D,y=(Z)=>{let F=Z.avgLength;if(N&&Z.minLength!==Z.maxLength){if(F=Math.floor(Math.random()*(Z.maxLength-Z.minLength+1)+Z.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return Y.repeat(Math.max(1,F))},L=(Z)=>{if(Q)return{...Q(Z),["_isPlaceholder"]:!0};let F={id:`__placeholder_${T++}`,["_isPlaceholder"]:!0,_index:Z};if(!j||j.size===0)return F.label=Y.repeat(12),F;for(let[V,O]of j)switch(O.type){case"string":F[V]=y(O);break;case"number":F[V]=0;break;case"boolean":F[V]=!1;break;case"array":F[V]=[];break;case"object":F[V]={};break;default:F[V]=y(O)}return F};return{analyzeStructure:z,hasAnalyzedStructure:W,generate:L,generateRange:(Z,F)=>{let V=[];for(let O=Z;O<=F;O++)V.push(L(O));return V},isPlaceholder:(Z)=>{if(!Z||typeof Z!=="object")return!1;return Z._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{j=null,D=!1,T=0}}},d=(U)=>{if(!U||typeof U!=="object")return!1;return U._isPlaceholder===!0},Nj=(U)=>{return U.filter((G)=>!d(G))},Fj=(U)=>{let G=0;for(let Y of U)if(Y!==void 0&&!d(Y))G++;return G},Ej=(U,G,Y)=>{let N=0;for(let M=0;M<G.length;M++){let Q=Y+M,j=U[Q];if(j===void 0||d(j)){if(U[Q]=G[M],d(j))N++}}return N};var Lj=50,Bj=(U={})=>{let{adapter:G,initialItems:Y,initialTotal:N,storage:M,placeholder:Q,pageSize:j=Lj,onStateChange:D,onItemsLoaded:T,onItemsEvicted:z}=U,W=$j({...M,onEvict:(J,$)=>{z?.(J),O()}}),y=null,L=()=>{if(!y)y=Yj(Q);return y},b=new Map,C=!1,u,H=!0,Z,F=[],V=new Map,O=()=>{D?.(e())},h=()=>{b.clear();let J=W.getLoadedRanges();for(let $ of J)for(let P=$.start;P<=$.end;P++){let E=W.get(P);if(E&&!d(E))b.set(E.id,P)}},w=(J,$)=>{if(!d($))b.set($.id,J)},k=(J)=>{b.delete(J)},A=(J,$)=>{return`${J}-${$}`},f=()=>W.getTotal(),I=()=>W.getCachedCount(),r=()=>C,t=()=>H,e=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:C,pendingRanges:F,error:u,hasMore:H,cursor:Z}),Zj=()=>W,q=()=>L(),X=(J)=>{let $=W.get(J);if($!==void 0)return $;if(J>=0&&J<W.getTotal())return L().generate(J);return},B=(J)=>{let $=b.get(J);if($===void 0)return;return W.get($)},K=(J)=>{return b.get(J)??-1},_=(J)=>{let $=W.get(J);return $!==void 0&&!d($)},l=(J,$)=>{let P=[],E=W.getTotal(),g=0,x=0;W.touchChunksForRange(J,Math.min($,E-1));for(let c=J;c<=$&&c<E;c++){let s=W.get(c);if(s!==void 0)P.push(s),g++;else P.push(L().generate(c)),x++}return P},R=(J)=>{W.setTotal(J),H=W.getCachedCount()<J,O()},p=(J,$=0,P)=>{if(y&&!y.hasAnalyzedStructure()&&J.length>0)y.analyzeStructure(J);for(let E=0;E<J.length;E++){let g=J[E];if(g!==void 0){let x=$+E;W.set(x,g),w(x,g)}}if(P!==void 0)W.setTotal(P);else if($+J.length>W.getTotal())W.setTotal($+J.length);H=W.getCachedCount()<W.getTotal(),T?.(J,$,W.getTotal()),O()},i=(J,$)=>{let P=b.get(J);if(P===void 0)return!1;let E=W.get(P);if(!E)return!1;let g={...E,...$};if(W.set(P,g),$.id!==void 0&&$.id!==J)k(J),w(P,g);return O(),!0},qj=(J)=>{let $=b.get(J);if($===void 0)return!1;W.delete($),k(J);let P=W.getTotal();if(P>0)W.setTotal(P-1);return O(),!0},Jj=async(J,$)=>{if(!G)return;let P=A(J,$);if(V.has(P))return;let E=W.getLoadedRanges(),g=Xj({start:J,end:$},E,W.chunkSize);if(g.length===0)return;let x=W.chunkSize,c=[];for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);for(let S=a;S<=n;S++){let o=S*x,m=o+x-1,Qj=A(o,m);if(!c.some((Wj)=>Wj.start===o)&&!V.has(Qj))c.push({start:o,end:m})}}let s=[];for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);for(let S=a;S<=n;S++){let o=S*x,m=o+x-1,Qj=A(o,m);if(V.has(Qj)){let Wj=V.get(Qj);if(!s.includes(Wj))s.push(Wj)}}}for(let v of c){let a=A(v.start,v.end),n=(async()=>{F.push(v),C=!0,u=void 0,O();try{let S=v.end-v.start+1,o={offset:v.start,limit:S,cursor:void 0},m=await G.read(o);if(p(m.items,v.start,m.total),m.cursor)Z=m.cursor;if(m.hasMore!==void 0)H=m.hasMore;else if(m.total!==void 0)H=W.getCachedCount()<m.total}catch(S){u=S instanceof Error?S:Error(String(S))}finally{V.delete(a),F=F.filter((S)=>S.start!==v.start||S.end!==v.end),C=V.size>0,O()}})();V.set(a,n),s.push(n)}await Promise.all(s)},Aj=async(J,$)=>{if(W.isRangeLoaded(J,$))return;await Jj(J,$)},Dj=async()=>{if(!G)return;await Jj(0,j-1)},Oj=async()=>{if(!G||C||!H)return!1;let J=W.getCachedCount(),$=W.getTotal(),P=J,E=Math.min(P+j-1,$>0?$-1:P+j-1);if(P>=$&&$>0)return H=!1,!1;return await Jj(P,E),W.getCachedCount()>J},zj=async()=>{if(W.clear(),b.clear(),y)y.clear();Z=void 0,H=!0,u=void 0,O(),await Dj()},Hj=(J,$)=>{if(W.evictDistant(J,$)>0)h()},yj=()=>{W.clear(),b.clear(),Z=void 0,u=void 0,F=[],C=!1,O()},bj=()=>{if(W.reset(),b.clear(),y)y.clear();Z=void 0,H=!0,u=void 0,F=[],C=!1,O()};if(Y&&Y.length>0)p(Y,0,N??Y.length);else if(N!==void 0)W.setTotal(N);return{getState:e,getTotal:f,getCached:I,getIsLoading:r,getHasMore:t,getStorage:Zj,getPlaceholders:q,getItem:X,getItemById:B,getIndexById:K,isItemLoaded:_,getItemsInRange:l,setTotal:R,setItems:p,updateItem:i,removeItem:qj,loadRange:Jj,ensureRange:Aj,loadInitial:Dj,loadMore:Oj,reload:zj,evictDistant:Hj,clear:yj,reset:bj}};var Vj=(U,G,Y,N,M,Q)=>{if(N===0||G===0)return Q.start=0,Q.end=-1,Q;let j=Y.indexAtOffset(U),D=Y.indexAtOffset(U+G);if(D<N-1)D++;return Q.start=Math.max(0,j),Q.end=Math.min(N-1,Math.max(0,D)),Q},wj=(U,G,Y,N)=>{if(Y===0)return N.start=0,N.end=-1,N;return N.start=Math.max(0,U.start-G),N.end=Math.min(Y-1,U.end+G),N};var Gj=(U,G,Y,N,M,Q=Vj)=>{return Q(U.scrollTop,U.containerHeight,G,Y,M,U.visibleRange),wj(U.visibleRange,N,Y,U.renderRange),U.totalHeight=M.virtualHeight,U.actualHeight=M.actualHeight,U.isCompressed=M.isCompressed,U.compressionRatio=M.ratio,U};var Kj=200,jj=50;var Mj=15,Pj=2,_j=50;var Tj=(U)=>{let{adapter:G,loading:Y}=U,N=Y?.cancelThreshold??Mj,M=Y?.preloadThreshold??Pj,Q=Y?.preloadAhead??_j;return{name:"withData",priority:20,methods:["reload"],setup(j){let{emitter:D}=j,T=j.config.reverse,z=j.config.overscan,W=Bj({adapter:G,pageSize:jj,onStateChange:()=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.updateCompressionMode(),j.state.viewportState=Gj(j.state.viewportState,j.heightCache,j.getVirtualTotal(),z,j.getCachedCompression()),j.updateContentSize(j.state.viewportState.totalHeight),j.renderIfNeeded()},onItemsLoaded:(Z,F,V)=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.forceRender(),D.emit("load:end",{items:Z,total:V})}});j.replaceDataManager(W);let y=null,L=null,b=0,C=()=>{if(L){let Z=L;L=null,j.dataManager.ensureRange(Z.start,Z.end).catch((F)=>{D.emit("error",{error:F,context:"ensureRange"})})}};j.afterScroll.push((Z,F)=>{if(j.state.isDestroyed)return;let V=j.scrollController.getVelocity(),h=j.scrollController.isTracking()&&V<=N;if(L&&b>N&&V<=N){let A=L;L=null,j.dataManager.ensureRange(A.start,A.end).catch((f)=>{D.emit("error",{error:f,context:"ensureRange"})})}if(b=V,h&&!j.dataManager.getIsLoading()&&j.dataManager.getHasMore()){if(T){if(Z<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((A)=>{D.emit("error",{error:A,context:"loadMore"})})}else if(j.state.viewportState.totalHeight-Z-j.state.viewportState.containerHeight<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((f)=>{D.emit("error",{error:f,context:"loadMore"})})}let{renderRange:w}=j.state.viewportState;if(!y||w.start!==y.start||w.end!==y.end)if(y={start:w.start,end:w.end},h){L=null;let{start:A,end:f}=w,I=j.getVirtualTotal();if(V>M)if(F==="down")f=Math.min(w.end+Q,I-1);else A=Math.max(w.start-Q,0);j.dataManager.ensureRange(A,f).catch((r)=>{D.emit("error",{error:r,context:"ensureRange"})})}else L={start:w.start,end:w.end}});let u=200,H=null;j.afterScroll.push((Z,F)=>{if(H!==null)clearTimeout(H);H=setTimeout(()=>{H=null,C()},u)}),j.destroyHandlers.push(()=>{if(H!==null)clearTimeout(H),H=null}),D.on("load:start",()=>{j.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{j.dom.root.removeAttribute("aria-busy")}),j.methods.set("reload",async()=>{await j.dataManager.reload()}),D.emit("load:start",{offset:0,limit:jj}),j.dataManager.loadInitial().catch((Z)=>{D.emit("error",{error:Z,context:"loadInitial"})})}}};export{Tj as withData,Ej as replacePlaceholders,Uj as mergeRanges,d as isPlaceholderItem,Nj as filterPlaceholders,$j as createSparseStorage,Yj as createPlaceholderManager,Bj as createDataManager,Fj as countRealItems,Xj as calculateMissingRanges};