@floor/vlist 0.5.4 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,210 @@
1
- var{defineProperty:a,getOwnPropertyNames:Pj,getOwnPropertyDescriptor:Oj}=Object,Gj=Object.prototype.hasOwnProperty;var Zj=new WeakMap,Lj=(Q)=>{var Z=Zj.get(Q),j;if(Z)return Z;if(Z=a({},"__esModule",{value:!0}),Q&&typeof Q==="object"||typeof Q==="function")Pj(Q).map((J)=>!Gj.call(Z,J)&&a(Z,J,{get:()=>Q[J],enumerable:!(j=Oj(Q,J))||j.enumerable}));return Zj.set(Q,Z),Z};var wj=(Q,Z)=>{for(var j in Z)a(Q,j,{get:Z[j],enumerable:!0,configurable:!0,set:(J)=>Z[j]=()=>J})};var $j=(Q,Z)=>()=>(Q&&(Z=Q(Q=0)),Z);var d=(Q)=>{return Q!==null&&typeof Q==="object"&&Q.__groupHeader===!0};var Xj=(Q,Z,j)=>{if(j===0)return 0;if(!Q.isVariable())return Math.floor(Z/Q.getHeight(0));let J=0,$=0;for(let q=j-1;q>=0;q--){let X=Q.getHeight(q);if($+X>Z)break;$+=X,J++}return Math.max(J,1)},t=(Q,Z,j)=>{if(j===0)return 0;let J=Math.floor(Z),$=Z-J,q=Math.max(0,Math.min(J,j-1));return Q.getOffset(q)+$*Q.getHeight(q)};var jj=16000000;var Wj=(Q,Z)=>{let j=Z.getTotalHeight(),J=j>jj,$=J?jj:j,q=j>0?$/j:1;return{isCompressed:J,actualHeight:j,virtualHeight:$,ratio:q}},Mj=(Q,Z,j,J,$,q,X)=>{if(!q.isCompressed||J===0)return j.getOffset(Q);let{virtualHeight:M}=q,B=M-$,D=B-Z;if(D<=$&&D>=-1){if(Z>=B-1){let R=j.getTotalHeight()-j.getOffset(Q);return $-R}let Y=Xj(j,$,J),_=Math.max(0,J-Y),z=Z/M*J,P=Math.max(0,Math.min(1,1-D/$)),L=j.getOffset(Q)-j.getOffset(_),F=j.getOffset(Q)-t(j,z,J);return F+(L-F)*P}let G=Z/M*J;return j.getOffset(Q)-t(j,G,J)};var Dj=()=>{};var Uj={};wj(Uj,{createGridRenderer:()=>bj});var Fj=(Q=200)=>{let Z=[];return{acquire:()=>{let q=Z.pop();if(q)return q;let X=document.createElement("div");return X.setAttribute("role","option"),X},release:(q)=>{if(Z.length<Q)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),q.removeAttribute("data-row"),q.removeAttribute("data-col"),Z.push(q)},clear:()=>{Z.length=0}}},bj=(Q,Z,j,J,$,q,X,M)=>{let B=Fj(),D=new Map,b=q,G=!1,Y=null,_=0,E="",z=(N)=>{if(Y&&_===N)return Y;return Y=Wj(N,j),_=N,Y},P={selected:!1,focused:!1},L=(N,K)=>{return P.selected=N,P.focused=K,P},F=`${$}-item ${$}-grid-item`,R=`${$}-item--selected`,H=`${$}-item--focused`,v=(N,K)=>{if(typeof K==="string")N.innerHTML=K;else N.replaceChildren(K)},W=(N,K,U)=>{N.classList.toggle(R,K),N.classList.toggle(H,U)},w=(N,K)=>{let U=J.getRow(N);if(K){let O=K.totalItems,A=z(O);if(A.isCompressed)return Mj(U,K.scrollTop,j,O,K.containerHeight,A,K.rangeStart)}return j.getOffset(U)},S=(N,K,U)=>{let O=N.dataset.id?.startsWith("__group_header"),A=O?0:J.getCol(K),V=O?0:J.getColumnOffset(A,b),y;if(G){let p=J.getRow(K),k=0,C=new Set;for(let f=0;f<K;f++){let x=J.getRow(f);if(x<p&&!C.has(x)){let h=j.getHeight(f);k+=h,C.add(x)}}y=k}else y=w(K,U);N.style.transform=`translate(${Math.round(V)}px, ${Math.round(y)}px)`},I=(N,K)=>{let U=N.dataset.id?.startsWith("__group_header"),O=U?b:J.getColumnWidth(b),A;if(G||U)A=j.getHeight(K)-J.gap;else{let V=J.getRow(K);A=j.getHeight(V)-J.gap}N.style.width=`${O}px`,N.style.height=`${A}px`},u=(N,K,U,O,A)=>{let V=B.acquire(),y=L(U,O);if(V.className=F,V.dataset.index=String(N),V.dataset.id=String(K.id),V.dataset.row=String(J.getRow(N)),V.dataset.col=String(J.getCol(N)),V.ariaSelected=String(U),M)V.id=`${M}-item-${N}`;if(X)E=String(X()),V.setAttribute("aria-setsize",E),V.setAttribute("aria-posinset",String(N+1));I(V,N);let p=Z(K,N,y);return v(V,p),W(V,U,O),S(V,N,A),V},s=(N,K,U,O,A)=>{if(K.start===0&&N.length>0)G=d(N[0]);for(let[k,C]of D)if(k<K.start||k>K.end)C.element.remove(),B.release(C.element),D.delete(k);let V=!1;if(X){let k=String(X());V=k!==E,E=k}let y=document.createDocumentFragment(),p=[];for(let k=K.start;k<=K.end;k++){let C=k-K.start,f=N[C];if(!f){console.warn(`⚠️ RENDER: Missing item at index ${k} (range: ${K.start}-${K.end}, items.length: ${N.length})`);continue}let x=U.has(f.id),h=k===O,T=D.get(k);if(T){let c=T.element.dataset.id,Qj=String(f.id);if(c!==Qj){let Vj=L(x,h),Aj=Z(f,k,Vj);v(T.element,Aj),T.element.dataset.id=Qj,T.element.dataset.row=String(J.getRow(k)),T.element.dataset.col=String(J.getCol(k)),I(T.element,k)}if(W(T.element,x,h),T.element.ariaSelected=String(x),S(T.element,k,A),V)T.element.setAttribute("aria-setsize",E)}else{let c=u(k,f,x,h,A);y.appendChild(c),p.push({index:k,element:c})}}if(p.length>0){Q.appendChild(y);for(let{index:k,element:C}of p)D.set(k,{index:k,element:C})}},g=(N)=>{for(let[K,U]of D)S(U.element,K,N)},zj=(N,K,U,O)=>{let A=D.get(N);if(A){let V=L(U,O),y=Z(K,N,V);v(A.element,y),W(A.element,U,O),A.element.dataset.id=String(K.id),A.element.ariaSelected=String(U),I(A.element,N)}},Bj=(N,K,U)=>{let O=D.get(N);if(O)W(O.element,K,U)},_j=(N)=>{return D.get(N)?.element},Ej=(N)=>{if(Math.abs(N-b)<1)return;b=N;for(let[K,U]of D)I(U.element,K),S(U.element,K)},Jj=()=>{for(let[,N]of D)N.element.remove(),B.release(N.element);D.clear()};return{render:s,updatePositions:g,updateItem:zj,updateItemClasses:Bj,getElement:_j,updateContainerWidth:Ej,clear:Jj,destroy:()=>{Jj(),B.clear()}}};var kj=$j(()=>{Dj()});var n=(Q,Z)=>{let j=0,J=Q.length-1;while(j<J){let $=j+J+1>>>1;if(Q[$].headerLayoutIndex<=Z)j=$;else J=$-1}return j},Nj=(Q,Z)=>{let j=0,J=Q.length-1;while(j<J){let $=j+J+1>>>1;if(Q[$].firstDataIndex<=Z)j=$;else J=$-1}return j},Kj=(Q,Z)=>{if(Q===0)return[];let j=[],J=Z(0),$=0,q=0;for(let X=1;X<Q;X++){let M=Z(X);if(M!==J){let B=X-$;j.push({key:J,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:$,count:B}),q=q+1+B,J=M,$=X}}return j.push({key:J,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:$,count:Q-$}),j},l=(Q,Z)=>{if(Q.length===0||Z.length===0)return[];let j=Q.length+Z.length,J=Array(j),$=0;for(let q of Z){J[$]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},$++;for(let X=0;X<q.count;X++)J[$]=Q[q.firstDataIndex+X],$++}return J},r=(Q,Z)=>{let j=typeof Z==="number"?(J)=>Z:Z;return(J)=>{let $=Q.getEntry(J);if($.type==="header")return Q.getHeaderHeight($.group.groupIndex);return j($.dataIndex)}},o=(Q,Z)=>{let j=Kj(Q,Z.getGroupForIndex),J=Q+j.length,$=Z.headerHeight;return{get totalEntries(){return J},get groupCount(){return j.length},get groups(){return j},getEntry:(Y)=>{if(j.length===0)return{type:"item",dataIndex:Y,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let _=n(j,Y),E=j[_];if(Y===E.headerLayoutIndex)return{type:"header",group:E};let z=Y-E.headerLayoutIndex-1;return{type:"item",dataIndex:E.firstDataIndex+z,group:E}},layoutToDataIndex:(Y)=>{if(j.length===0)return Y;let _=n(j,Y),E=j[_];if(Y===E.headerLayoutIndex)return-1;let z=Y-E.headerLayoutIndex-1;return E.firstDataIndex+z},dataToLayoutIndex:(Y)=>{if(j.length===0)return Y;let _=Nj(j,Y),E=j[_],z=Y-E.firstDataIndex;return E.headerLayoutIndex+1+z},getGroupAtLayoutIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let _=n(j,Y);return j[_]},getGroupAtDataIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let _=Nj(j,Y);return j[_]},getHeaderHeight:typeof $==="number"?(Y)=>$:(Y)=>{let _=j[Y];if(!_)return 0;return $(_.key,Y)},rebuild:(Y)=>{j=Kj(Y,Z.getGroupForIndex),J=Y+j.length}}};var i=(Q,Z,j,J,$)=>{let q=document.createElement("div");q.className=`${$}-sticky-header`,q.setAttribute("role","presentation"),q.setAttribute("aria-hidden","true"),q.style.position="absolute",q.style.top="0",q.style.left="0",q.style.right="0",q.style.zIndex="5",q.style.pointerEvents="none",q.style.willChange="transform",q.style.overflow="hidden",Q.insertBefore(q,Q.firstChild);let X=-1,M=!1,B=0,D=(z)=>{if(z===X)return;X=z;let P=Z.groups;if(z<0||z>=P.length){q.textContent="";return}let L=P[z],F=J.headerTemplate(L.key,L.groupIndex),R=Z.getHeaderHeight(z);if(q.style.height=`${R}px`,typeof F==="string")q.innerHTML=F;else q.replaceChildren(F)},b=(z)=>{let P=Z.groups;if(P.length===0){Y();return}let L=0;for(let W=P.length-1;W>=0;W--)if(j.getOffset(P[W].headerLayoutIndex)<=z){L=W;break}let F=j.getOffset(P[0].headerLayoutIndex);if(z<F){Y();return}if(!M)G();D(L);let R=Z.getHeaderHeight(L),H=0,v=L+1;if(v<P.length){let w=j.getOffset(P[v].headerLayoutIndex)-z;if(w<R)H=w-R}if(H!==B)B=H,q.style.transform=H===0?"":`translateY(${Math.round(H)}px)`},G=()=>{if(M)return;M=!0,q.style.display=""},Y=()=>{if(!M)return;M=!1,q.style.display="none",X=-1,B=0,q.style.transform=""},_=()=>{let z=X;if(X=-1,z>=0)D(z)},E=()=>{q.remove(),X=-1,M=!1};return q.style.display="none",{update:b,refresh:_,show:G,hide:Y,destroy:E}};var Yj=(Q,Z,j,J,$,q)=>{if(J===0)return 0;let X=Math.max(0,Math.min(Q,J-1)),M=Z.getOffset(X),B=Z.getHeight(X),D=Z.getTotalHeight(),b=Math.max(0,D-j),G;switch(q){case"center":G=M-j/2+B/2;break;case"end":G=M-j+B;break;case"start":default:G=M;break}return Math.max(0,Math.min(G,b))};var e=(Q,Z,j,J,$="start",q,X=Yj)=>{return X(Q,Z,j,J,q,$)};var Rj=(Q)=>{if(!Q.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(Q.headerHeight==null||Q.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!Q.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let Z=null,j=null,J=[],$=[];return{name:"withGroups",priority:10,setup(q){let{dom:X,config:M,rawConfig:B}=q,{classPrefix:D}=M;if(M.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");if(M.reverse)throw Error("[vlist/builder] withGroups cannot be used with reverse: true");let G=B.item.height;J=B.items?[...B.items]:[];let Y=J.length,_={getGroupForIndex:Q.getGroupForIndex,headerHeight:Q.headerHeight,headerTemplate:Q.headerTemplate,sticky:Q.sticky??!1};Z=o(Y,_),$=l(J,Z.groups);let E=r(Z,G);q.setHeightConfig(E),q.rebuildHeightCache($.length),q.dataManager.setItems($,0,$.length);let z=B.item.template,{headerTemplate:P}=Q,L=(W,w,S)=>{if(d(W))return P(W.groupKey,W.groupIndex);return z(W,w,S)},F=q.methods.get("_getGridLayout"),R=q.methods.get("_replaceGridRenderer"),H=q.methods.get("_updateGridLayoutForGroups");if(F&&R){if(H)H((I)=>{let u=$[I];return!!(u&&d(u))});let{createGridRenderer:W}=(kj(),Lj(Uj)),w=F(),S=W(X.items,L,q.heightCache,w,D,q.getContainerWidth(),()=>q.dataManager.getTotal(),M.ariaIdPrefix);R(S)}else q.replaceTemplate(L);if(X.root.classList.add(`${D}--grouped`),Q.sticky!==!1){j=i(X.root,Z,q.heightCache,{..._,sticky:_.sticky??!1},D);let W=j;q.afterScroll.push((w,S)=>{W.update(w)}),j.update(q.scrollController.getScrollTop())}let v=()=>{if(!Z)return;Z.rebuild(J.length),$=l(J,Z.groups);let W=r(Z,G);if(q.setHeightConfig(W),q.rebuildHeightCache($.length),q.dataManager.setItems($,0,$.length),j)j.refresh()};q.methods.set("setItems",(W)=>{J=[...W],v()}),q.methods.set("appendItems",(W)=>{J=[...J,...W],v()}),q.methods.set("prependItems",(W)=>{J=[...W,...J],v()}),q.methods.set("removeItem",(W)=>{J=J.filter((w)=>w.id!==W),v()}),q.methods.set("scrollToIndex",(W,w)=>{let S=Z.dataToLayoutIndex(W),{align:I,behavior:u}=vj(w),s=q.dataManager.getTotal(),g=e(S,q.heightCache,q.state.viewportState.containerHeight,s,I,q.getCachedCompression());if(u==="smooth")q.scrollController.scrollTo(g);else q.scrollController.scrollTo(g)}),q.methods.set("_getItems",()=>J),q.methods.set("_getTotal",()=>J.length),q.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;X.root.classList.remove(`${D}--grouped`)})},destroy(){if(j)j.destroy(),j=null}}},qj=300,vj=(Q)=>{if(typeof Q==="string")return{align:Q,behavior:"auto",duration:qj};if(Q&&typeof Q==="object")return{align:Q.align??"start",behavior:Q.behavior??"auto",duration:Q.duration??qj};return{align:"start",behavior:"auto",duration:qj}};export{Rj as withGroups,d as isGroupHeader,i as createStickyHeader,r as createGroupedHeightFn,o as createGroupLayout,l as buildLayoutItems};
1
+ var{defineProperty:a,getOwnPropertyNames:Pj,getOwnPropertyDescriptor:Oj}=Object,Gj=Object.prototype.hasOwnProperty;
2
+ var Zj=new WeakMap,Lj=(Q)=>{var Z=Zj.get(Q),j;
3
+ if(Z)return Z;
4
+ if(Z=a({},"__esModule",{value:!0}),Q&&typeof Q==="object"||typeof Q==="function")Pj(Q).map((J)=>!Gj.call(Z,J)&&a(Z,J,{get:()=>Q[J],enumerable:!(j=Oj(Q,J))||j.enumerable}));
5
+ return Zj.set(Q,Z),Z};
6
+ var wj=(Q,Z)=>{for(var j in Z)a(Q,j,{get:Z[j],enumerable:!0,configurable:!0,set:(J)=>Z[j]=()=>J})};
7
+ var $j=(Q,Z)=>()=>(Q&&(Z=Q(Q=0)),Z);
8
+ var d=(Q)=>{return Q!==null&&typeof Q==="object"&&Q.__groupHeader===!0};
9
+ var Xj=(Q,Z,j)=>{if(j===0)return 0;
10
+ if(!Q.isVariable())return Math.floor(Z/Q.getHeight(0));
11
+ let J=0,$=0;
12
+ for(let q=j-1;
13
+ q>=0;
14
+ q--){let X=Q.getHeight(q);
15
+ if($+X>Z)break;
16
+ $+=X,J++}
17
+ return Math.max(J,1)},t=(Q,Z,j)=>{if(j===0)return 0;
18
+ let J=Math.floor(Z),$=Z-J,q=Math.max(0,Math.min(J,j-1));
19
+ return Q.getOffset(q)+$*Q.getHeight(q)};
20
+ var jj=16000000;
21
+ var Wj=(Q,Z)=>{let j=Z.getTotalHeight(),J=j>jj,$=J?jj:j,q=j>0?$/j:1;
22
+ return{isCompressed:J,actualHeight:j,virtualHeight:$,ratio:q}},Mj=(Q,Z,j,J,$,q,X)=>{if(!q.isCompressed||J===0)return j.getOffset(Q);
23
+ let{virtualHeight:M}=q,B=M-$,D=B-Z;
24
+ if(D<=$&&D>=-1){if(Z>=B-1){let R=j.getTotalHeight()-j.getOffset(Q);
25
+ return $-R}
26
+ let Y=Xj(j,$,J),_=Math.max(0,J-Y),z=Z/M*J,P=Math.max(0,Math.min(1,1-D/$)),L=j.getOffset(Q)-j.getOffset(_),F=j.getOffset(Q)-t(j,z,J);
27
+ return F+(L-F)*P}
28
+ let G=Z/M*J;
29
+ return j.getOffset(Q)-t(j,G,J)};
30
+ var Dj=()=>{};
31
+ var Uj={};
32
+ wj(Uj,{createGridRenderer:()=>bj});
33
+ var Fj=(Q=200)=>{let Z=[];
34
+ return{acquire:()=>{let q=Z.pop();
35
+ if(q)return q;
36
+ let X=document.createElement("div");
37
+ return X.setAttribute("role","option"),X},release:(q)=>{if(Z.length<Q)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),q.removeAttribute("data-row"),q.removeAttribute("data-col"),Z.push(q)},clear:()=>{Z.length=0}}},bj=(Q,Z,j,J,$,q,X,M)=>{let B=Fj(),D=new Map,b=q,G=!1,Y=null,_=0,E="",z=(N)=>{if(Y&&_===N)return Y;
38
+ return Y=Wj(N,j),_=N,Y},P={selected:!1,focused:!1},L=(N,K)=>{return P.selected=N,P.focused=K,P},F=`${$}-item ${$}-grid-item`,R=`${$}-item--selected`,H=`${$}-item--focused`,v=(N,K)=>{if(typeof K==="string")N.innerHTML=K;
39
+ else N.replaceChildren(K)},W=(N,K,U)=>{N.classList.toggle(R,K),N.classList.toggle(H,U)},w=(N,K)=>{let U=J.getRow(N);
40
+ if(K){let O=K.totalItems,A=z(O);
41
+ if(A.isCompressed)return Mj(U,K.scrollTop,j,O,K.containerHeight,A,K.rangeStart)}
42
+ return j.getOffset(U)},S=(N,K,U)=>{let O=N.dataset.id?.startsWith("__group_header"),A=O?0:J.getCol(K),V=O?0:J.getColumnOffset(A,b),y;
43
+ if(G){let p=J.getRow(K),k=0,C=new Set;
44
+ for(let f=0;
45
+ f<K;
46
+ f++){let x=J.getRow(f);
47
+ if(x<p&&!C.has(x)){let h=j.getHeight(f);
48
+ k+=h,C.add(x)}}
49
+ y=k}
50
+ else y=w(K,U);
51
+ N.style.transform=`translate(${Math.round(V)}
52
+ px, ${Math.round(y)}
53
+ px)`},I=(N,K)=>{let U=N.dataset.id?.startsWith("__group_header"),O=U?b:J.getColumnWidth(b),A;
54
+ if(G||U)A=j.getHeight(K)-J.gap;
55
+ else{let V=J.getRow(K);
56
+ A=j.getHeight(V)-J.gap}
57
+ N.style.width=`${O}
58
+ px`,N.style.height=`${A}
59
+ px`},u=(N,K,U,O,A)=>{let V=B.acquire(),y=L(U,O);
60
+ if(V.className=F,V.dataset.index=String(N),V.dataset.id=String(K.id),V.dataset.row=String(J.getRow(N)),V.dataset.col=String(J.getCol(N)),V.ariaSelected=String(U),M)V.id=`${M}-item-${N}`;
61
+ if(X)E=String(X()),V.setAttribute("aria-setsize",E),V.setAttribute("aria-posinset",String(N+1));
62
+ I(V,N);
63
+ let p=Z(K,N,y);
64
+ return v(V,p),W(V,U,O),S(V,N,A),V},s=(N,K,U,O,A)=>{if(K.start===0&&N.length>0)G=d(N[0]);
65
+ for(let[k,C]of D)if(k<K.start||k>K.end)C.element.remove(),B.release(C.element),D.delete(k);
66
+ let V=!1;
67
+ if(X){let k=String(X());
68
+ V=k!==E,E=k}
69
+ let y=document.createDocumentFragment(),p=[];
70
+ for(let k=K.start;
71
+ k<=K.end;
72
+ k++){let C=k-K.start,f=N[C];
73
+ if(!f){console.warn(`⚠️ RENDER: Missing item at index ${k} (range: ${K.start}-${K.end}, items.length: ${N.length})`);
74
+ continue}
75
+ let x=U.has(f.id),h=k===O,T=D.get(k);
76
+ if(T){let c=T.element.dataset.id,Qj=String(f.id);
77
+ if(c!==Qj){let Vj=L(x,h),Aj=Z(f,k,Vj);
78
+ v(T.element,Aj),T.element.dataset.id=Qj,T.element.dataset.row=String(J.getRow(k)),T.element.dataset.col=String(J.getCol(k)),I(T.element,k)}
79
+ if(W(T.element,x,h),T.element.ariaSelected=String(x),S(T.element,k,A),V)T.element.setAttribute("aria-setsize",E)}
80
+ else{let c=u(k,f,x,h,A);
81
+ y.appendChild(c),p.push({index:k,element:c})}}
82
+ if(p.length>0){Q.appendChild(y);
83
+ for(let{index:k,element:C}
84
+ of p)D.set(k,{index:k,element:C})}},g=(N)=>{for(let[K,U]of D)S(U.element,K,N)},zj=(N,K,U,O)=>{let A=D.get(N);
85
+ if(A){let V=L(U,O),y=Z(K,N,V);
86
+ v(A.element,y),W(A.element,U,O),A.element.dataset.id=String(K.id),A.element.ariaSelected=String(U),I(A.element,N)}},Bj=(N,K,U)=>{let O=D.get(N);
87
+ if(O)W(O.element,K,U)},_j=(N)=>{return D.get(N)?.element},Ej=(N)=>{if(Math.abs(N-b)<1)return;
88
+ b=N;
89
+ for(let[K,U]of D)I(U.element,K),S(U.element,K)},Jj=()=>{for(let[,N]of D)N.element.remove(),B.release(N.element);
90
+ D.clear()};
91
+ return{render:s,updatePositions:g,updateItem:zj,updateItemClasses:Bj,getElement:_j,updateContainerWidth:Ej,clear:Jj,destroy:()=>{Jj(),B.clear()}}};
92
+ var kj=$j(()=>{Dj()});
93
+ var n=(Q,Z)=>{let j=0,J=Q.length-1;
94
+ while(j<J){let $=j+J+1>>>1;
95
+ if(Q[$].headerLayoutIndex<=Z)j=$;
96
+ else J=$-1}
97
+ return j},Nj=(Q,Z)=>{let j=0,J=Q.length-1;
98
+ while(j<J){let $=j+J+1>>>1;
99
+ if(Q[$].firstDataIndex<=Z)j=$;
100
+ else J=$-1}
101
+ return j},Kj=(Q,Z)=>{if(Q===0)return[];
102
+ let j=[],J=Z(0),$=0,q=0;
103
+ for(let X=1;
104
+ X<Q;
105
+ X++){let M=Z(X);
106
+ if(M!==J){let B=X-$;
107
+ j.push({key:J,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:$,count:B}),q=q+1+B,J=M,$=X}}
108
+ return j.push({key:J,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:$,count:Q-$}),j},l=(Q,Z)=>{if(Q.length===0||Z.length===0)return[];
109
+ let j=Q.length+Z.length,J=Array(j),$=0;
110
+ for(let q of Z){J[$]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},$++;
111
+ for(let X=0;
112
+ X<q.count;
113
+ X++)J[$]=Q[q.firstDataIndex+X],$++}
114
+ return J},r=(Q,Z)=>{let j=typeof Z==="number"?(J)=>Z:Z;
115
+ return(J)=>{let $=Q.getEntry(J);
116
+ if($.type==="header")return Q.getHeaderHeight($.group.groupIndex);
117
+ return j($.dataIndex)}},o=(Q,Z)=>{let j=Kj(Q,Z.getGroupForIndex),J=Q+j.length,$=Z.headerHeight;
118
+ return{get totalEntries(){return J},get groupCount(){return j.length},get groups(){return j},getEntry:(Y)=>{if(j.length===0)return{type:"item",dataIndex:Y,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};
119
+ let _=n(j,Y),E=j[_];
120
+ if(Y===E.headerLayoutIndex)return{type:"header",group:E};
121
+ let z=Y-E.headerLayoutIndex-1;
122
+ return{type:"item",dataIndex:E.firstDataIndex+z,group:E}},layoutToDataIndex:(Y)=>{if(j.length===0)return Y;
123
+ let _=n(j,Y),E=j[_];
124
+ if(Y===E.headerLayoutIndex)return-1;
125
+ let z=Y-E.headerLayoutIndex-1;
126
+ return E.firstDataIndex+z},dataToLayoutIndex:(Y)=>{if(j.length===0)return Y;
127
+ let _=Nj(j,Y),E=j[_],z=Y-E.firstDataIndex;
128
+ return E.headerLayoutIndex+1+z},getGroupAtLayoutIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};
129
+ let _=n(j,Y);
130
+ return j[_]},getGroupAtDataIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};
131
+ let _=Nj(j,Y);
132
+ return j[_]},getHeaderHeight:typeof $==="number"?(Y)=>$:(Y)=>{let _=j[Y];
133
+ if(!_)return 0;
134
+ return $(_.key,Y)},rebuild:(Y)=>{j=Kj(Y,Z.getGroupForIndex),J=Y+j.length}}};
135
+ var i=(Q,Z,j,J,$)=>{let q=document.createElement("div");
136
+ q.className=`${$}-sticky-header`,q.setAttribute("role","presentation"),q.setAttribute("aria-hidden","true"),q.style.position="absolute",q.style.top="0",q.style.left="0",q.style.right="0",q.style.zIndex="5",q.style.pointerEvents="none",q.style.willChange="transform",q.style.overflow="hidden",Q.insertBefore(q,Q.firstChild);
137
+ let X=-1,M=!1,B=0,D=(z)=>{if(z===X)return;
138
+ X=z;
139
+ let P=Z.groups;
140
+ if(z<0||z>=P.length){q.textContent="";
141
+ return}
142
+ let L=P[z],F=J.headerTemplate(L.key,L.groupIndex),R=Z.getHeaderHeight(z);
143
+ if(q.style.height=`${R}
144
+ px`,typeof F==="string")q.innerHTML=F;
145
+ else q.replaceChildren(F)},b=(z)=>{let P=Z.groups;
146
+ if(P.length===0){Y();
147
+ return}
148
+ let L=0;
149
+ for(let W=P.length-1;
150
+ W>=0;
151
+ W--)if(j.getOffset(P[W].headerLayoutIndex)<=z){L=W;
152
+ break}
153
+ let F=j.getOffset(P[0].headerLayoutIndex);
154
+ if(z<F){Y();
155
+ return}
156
+ if(!M)G();
157
+ D(L);
158
+ let R=Z.getHeaderHeight(L),H=0,v=L+1;
159
+ if(v<P.length){let w=j.getOffset(P[v].headerLayoutIndex)-z;
160
+ if(w<R)H=w-R}
161
+ if(H!==B)B=H,q.style.transform=H===0?"":`translateY(${Math.round(H)}
162
+ px)`},G=()=>{if(M)return;
163
+ M=!0,q.style.display=""},Y=()=>{if(!M)return;
164
+ M=!1,q.style.display="none",X=-1,B=0,q.style.transform=""},_=()=>{let z=X;
165
+ if(X=-1,z>=0)D(z)},E=()=>{q.remove(),X=-1,M=!1};
166
+ return q.style.display="none",{update:b,refresh:_,show:G,hide:Y,destroy:E}};
167
+ var Yj=(Q,Z,j,J,$,q)=>{if(J===0)return 0;
168
+ let X=Math.max(0,Math.min(Q,J-1)),M=Z.getOffset(X),B=Z.getHeight(X),D=Z.getTotalHeight(),b=Math.max(0,D-j),G;
169
+ switch(q){case"center":G=M-j/2+B/2;
170
+ break;
171
+ case"end":G=M-j+B;
172
+ break;
173
+ case"start":default:G=M;
174
+ break}
175
+ return Math.max(0,Math.min(G,b))};
176
+ var e=(Q,Z,j,J,$="start",q,X=Yj)=>{return X(Q,Z,j,J,q,$)};
177
+ var Rj=(Q)=>{if(!Q.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");
178
+ if(Q.headerHeight==null||Q.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");
179
+ if(!Q.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");
180
+ let Z=null,j=null,J=[],$=[];
181
+ return{name:"withGroups",priority:10,setup(q){let{dom:X,config:M,rawConfig:B}=q,{classPrefix:D}=M;
182
+ if(M.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");
183
+ if(M.reverse)throw Error("[vlist/builder] withGroups cannot be used with reverse: true");
184
+ let G=B.item.height;
185
+ J=B.items?[...B.items]:[];
186
+ let Y=J.length,_={getGroupForIndex:Q.getGroupForIndex,headerHeight:Q.headerHeight,headerTemplate:Q.headerTemplate,sticky:Q.sticky??!1};
187
+ Z=o(Y,_),$=l(J,Z.groups);
188
+ let E=r(Z,G);
189
+ q.setHeightConfig(E),q.rebuildHeightCache($.length),q.dataManager.setItems($,0,$.length);
190
+ let z=B.item.template,{headerTemplate:P}=Q,L=(W,w,S)=>{if(d(W))return P(W.groupKey,W.groupIndex);
191
+ return z(W,w,S)},F=q.methods.get("_getGridLayout"),R=q.methods.get("_replaceGridRenderer"),H=q.methods.get("_updateGridLayoutForGroups");
192
+ if(F&&R){if(H)H((I)=>{let u=$[I];
193
+ return!!(u&&d(u))});
194
+ let{createGridRenderer:W}=(kj(),Lj(Uj)),w=F(),S=W(X.items,L,q.heightCache,w,D,q.getContainerWidth(),()=>q.dataManager.getTotal(),M.ariaIdPrefix);
195
+ R(S)}
196
+ else q.replaceTemplate(L);
197
+ if(X.root.classList.add(`${D}--grouped`),Q.sticky!==!1){j=i(X.root,Z,q.heightCache,{..._,sticky:_.sticky??!1},D);
198
+ let W=j;
199
+ q.afterScroll.push((w,S)=>{W.update(w)}),j.update(q.scrollController.getScrollTop())}
200
+ let v=()=>{if(!Z)return;
201
+ Z.rebuild(J.length),$=l(J,Z.groups);
202
+ let W=r(Z,G);
203
+ if(q.setHeightConfig(W),q.rebuildHeightCache($.length),q.dataManager.setItems($,0,$.length),j)j.refresh()};
204
+ q.methods.set("setItems",(W)=>{J=[...W],v()}),q.methods.set("appendItems",(W)=>{J=[...J,...W],v()}),q.methods.set("prependItems",(W)=>{J=[...W,...J],v()}),q.methods.set("removeItem",(W)=>{J=J.filter((w)=>w.id!==W),v()}),q.methods.set("scrollToIndex",(W,w)=>{let S=Z.dataToLayoutIndex(W),{align:I,behavior:u}=vj(w),s=q.dataManager.getTotal(),g=e(S,q.heightCache,q.state.viewportState.containerHeight,s,I,q.getCachedCompression());
205
+ if(u==="smooth")q.scrollController.scrollTo(g);
206
+ else q.scrollController.scrollTo(g)}),q.methods.set("_getItems",()=>J),q.methods.set("_getTotal",()=>J.length),q.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;
207
+ X.root.classList.remove(`${D}--grouped`)})},destroy(){if(j)j.destroy(),j=null}}},qj=300,vj=(Q)=>{if(typeof Q==="string")return{align:Q,behavior:"auto",duration:qj};
208
+ if(Q&&typeof Q==="object")return{align:Q.align??"start",behavior:Q.behavior??"auto",duration:Q.duration??qj};
209
+ return{align:"start",behavior:"auto",duration:qj}};
210
+ export{Rj as withGroups,d as isGroupHeader,i as createStickyHeader,r as createGroupedHeightFn,o as createGroupLayout,l as buildLayoutItems};