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