@floor/vlist 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,121 @@
1
- var Gj=(j,J,G={},_="vlist",F=!1)=>{let{autoHide:E=!0,autoHideDelay:D=1000,minThumbSize:H=30,showOnHover:V=!0,hoverZoneWidth:X=16,showOnViewportEnter:Z=!0}=G,Q=0,U=0,W=0,N=0,O=!1,q=!1,y=0,f=0,h=0,I=null,p=!1,R=null,M=null,S=F?"width":"height",x=F?"translateX":"translateY",b=F?(B)=>B.clientX:(B)=>B.clientY,t=F?"left":"top",L=document.createElement("div"),C=document.createElement("div"),A=V?document.createElement("div"):null,i=()=>{if(L.className=`${_}-scrollbar`,C.className=`${_}-scrollbar-thumb`,F)L.classList.add(`${_}-scrollbar--horizontal`);if(L.appendChild(C),j.appendChild(L),A){if(A.className=`${_}-scrollbar-hover`,F)A.classList.add(`${_}-scrollbar-hover--horizontal`),A.style.height=`${X}px`;else A.style.width=`${X}px`;j.appendChild(A)}},T=()=>{if(I)clearTimeout(I),I=null},P=()=>{if(!E)return;T(),I=setTimeout(d,D)},k=()=>{if(Q<=U)return;if(T(),!p)L.classList.add(`${_}-scrollbar--visible`),p=!0;if(E&&!O&&!q)P()},d=()=>{if(O||q)return;L.classList.remove(`${_}-scrollbar--visible`),p=!1},r=(B,g)=>{Q=B,U=g;let m=Q>U;if(L.style.display=m?"":"none",!m){d();return}let z=U/Q;W=Math.max(H,z*U),C.style[S]=`${W}px`,N=U-W,s(h)},s=(B)=>{if(h=B,Q<=U||N<=0)return;let g=Q-U,z=Math.min(1,Math.max(0,B/g))*N;C.style.transform=`${x}(${z}px)`},c=(B)=>{if(B.target===C)return;let g=L.getBoundingClientRect(),o=b(B)-g[t]-W/2,Kj=Math.max(0,Math.min(o,N))/N,jj=Q-U,Xj=Kj*jj;J(Xj),k()},n=(B)=>{B.preventDefault(),B.stopPropagation(),O=!0,y=b(B),f=h,T(),L.classList.add(`${_}-scrollbar--dragging`),document.addEventListener("mousemove",w),document.addEventListener("mouseup",v)},w=(B)=>{if(!O)return;let g=b(B)-y,m=N>0?g/N:0,z=Q-U,o=m*z,e=Math.max(0,Math.min(f+o,z)),jj=e/z*N;if(C.style.transform=`${x}(${jj}px)`,M=e,R===null)R=requestAnimationFrame(()=>{if(M!==null)J(M);R=null})},v=()=>{if(O=!1,R!==null)cancelAnimationFrame(R),R=null;if(M!==null)J(M),M=null;if(L.classList.remove(`${_}-scrollbar--dragging`),E&&!q)P();document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",v)},a=()=>{if(Z)k()},K=()=>{if(!O){if(q=!1,E)P()}},Y=()=>{q=!0,T(),k()},$=()=>{if(q=!1,!O&&E)P()},u=()=>{if(T(),R!==null)cancelAnimationFrame(R),R=null;if(L.removeEventListener("click",c),L.removeEventListener("mouseenter",Y),L.removeEventListener("mouseleave",$),C.removeEventListener("mousedown",n),j.removeEventListener("mouseenter",a),j.removeEventListener("mouseleave",K),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",v),A){if(A.removeEventListener("mouseenter",Y),A.removeEventListener("mouseleave",$),A.parentNode)A.parentNode.removeChild(A)}if(L.parentNode)L.parentNode.removeChild(L)};if(i(),L.addEventListener("click",c),L.addEventListener("mouseenter",Y),L.addEventListener("mouseleave",$),C.addEventListener("mousedown",n),j.addEventListener("mouseenter",a),j.addEventListener("mouseleave",K),A)A.addEventListener("mouseenter",Y),A.addEventListener("mouseleave",$);return{show:k,hide:d,updateBounds:r,updatePosition:s,isVisible:()=>p,destroy:u}};var Yj=(j)=>{let J=null;return{name:"withScrollbar",priority:30,setup(G){let{dom:_,config:F}=G,{classPrefix:E,horizontal:D}=F;if(J=Gj(_.viewport,(X)=>G.scrollController.scrollTo(X),j??{},E,D),!_.viewport.classList.contains(`${E}-viewport--custom-scrollbar`))_.viewport.classList.add(`${E}-viewport--custom-scrollbar`);let H=G.getCachedCompression();J.updateBounds(H.virtualHeight,G.state.viewportState.containerHeight);let V=J;G.afterScroll.push((X,Z)=>{V.updatePosition(X),V.show()}),G.resizeHandlers.push((X,Z)=>{if(V){let Q=G.getCachedCompression();V.updateBounds(Q.virtualHeight,G.state.viewportState.containerHeight)}}),G.contentSizeHandlers.push(()=>{if(V){let X=G.getCachedCompression();V.updateBounds(X.virtualHeight,G.state.viewportState.containerHeight)}}),G.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(J)J.destroy(),J=null}}};var Qj=(j=0)=>{let J=[,,,,,,,,];for(let G=0;G<8;G++)J[G]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:J,sampleIndex:0,sampleCount:0}},l=(j,J)=>{let G=performance.now(),_=G-j.lastTime;if(_===0)return j;if(_>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let E=j.samples[0];return E.position=J,E.time=G,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=J,j.lastTime=G,j}let F=j.samples[j.sampleIndex];if(F.position=J,F.time=G,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let E=(j.sampleIndex-j.sampleCount+8)%8,D=j.samples[E],H=J-D.position,V=G-D.time;j.velocity=V>0?H/V:0}return j.lastPosition=J,j.lastTime=G,j},_j=(j)=>j.sampleCount>=3,$j=(j,J={})=>{let{wheel:G=!0,sensitivity:_=1,smoothing:F=!1,idleTimeout:E=150,onScroll:D,onIdle:H,scrollElement:V,horizontal:X=!1}=J,Z=!!V,Q=0,U=0,W=Z?X?window.innerWidth:window.innerHeight:X?j.clientWidth:j.clientHeight,N=J.compressed??!1,O=J.compression,q=Qj(),y=!1,f=null,I=Jj(()=>{let K=X?j.scrollLeft:j.scrollTop,Y=K>=Q?"down":"up";if(q=l(q,K),Q=K,D)D({scrollTop:Q,direction:Y,velocity:q.velocity});b()}),R=Jj(()=>{let K=j.getBoundingClientRect(),Y=X?Math.max(0,-K.left):Math.max(0,-K.top),$=Y>=Q?"down":"up";if(q=l(q,Y),Q=Y,!y)y=!0;if(D)D({scrollTop:Q,direction:$,velocity:q.velocity});b()}),M=(K)=>{K.preventDefault()},S=(K)=>{if(K.deltaX)return;K.preventDefault(),j.scrollLeft+=K.deltaY},x=(K)=>{if(!N)return;K.preventDefault();let Y=(X?K.deltaX||K.deltaY:K.deltaY)*_,$=Q+Y;if(F)$=Q+Y*0.3;if($=Math.max(0,Math.min($,U)),$!==Q){let B=$>=Q?"down":"up";if(q=l(q,$),Q=$,!y)y=!0;if(D)D({scrollTop:Q,direction:B,velocity:q.velocity});b()}},b=()=>{if(f)clearTimeout(f);f=setTimeout(()=>{if(y=!1,q=Qj(Q),H)H()},E)},t=(K)=>{if(N)return;if(N=!0,O=K,U=K.virtualHeight-W,Z)return;if(I.cancel(),j.removeEventListener("scroll",I),!G)j.removeEventListener("wheel",M);else if(X)j.removeEventListener("wheel",S);if(X)j.style.overflowX="hidden";else j.style.overflow="hidden";if(G)j.addEventListener("wheel",x,{passive:!1});let Y=X?j.scrollLeft:j.scrollTop;if(Y>0){let $=X?O?.actualHeight??j.scrollWidth:O?.actualHeight??j.scrollHeight;Q=Y/$*U}if(X)j.scrollLeft=0;else j.scrollTop=0},L=()=>{if(!N)return;if(N=!1,Z){O=void 0;return}if(j.removeEventListener("wheel",x),X)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",I,{passive:!0}),!G)j.addEventListener("wheel",M,{passive:!1});else if(X)j.addEventListener("wheel",S,{passive:!1});if(O&&Q>0){let Y=Q/U*(O.actualHeight-W);if(X)j.scrollLeft=Y;else j.scrollTop=Y}O=void 0},C=()=>{if(Z||N)return Q;return X?j.scrollLeft:j.scrollTop},A=(K,Y=!1)=>{let $=Math.max(0,Math.min(K,U||1/0));if(Z){let u=j.getBoundingClientRect();if(X){let B=u.left+window.scrollX;window.scrollTo({left:B+$,behavior:Y?"smooth":"auto"})}else{let B=u.top+window.scrollY;window.scrollTo({top:B+$,behavior:Y?"smooth":"auto"})}}else if(N){if($===Q)return;let B=$>=Q?"down":"up";if(q=l(q,$),Q=$,!y)y=!0;if(D)D({scrollTop:Q,direction:B,velocity:q.velocity});b()}else if(X)j.scrollTo({left:$,behavior:Y?"smooth":"auto"});else j.scrollTo({top:$,behavior:Y?"smooth":"auto"})},i=(K)=>{A(C()+K)},T=()=>{return C()<=0},P=(K=0)=>{let Y=C(),$=Z||N?U:X?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return Y>=$-K},k=()=>{let K=C(),Y=Z||N?U:X?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(Y<=0)return 0;return Math.min(1,Math.max(0,K/Y))},d=(K)=>{if(K.compression)O=K.compression,U=O.virtualHeight-W},r=()=>N,s=()=>Math.abs(q.velocity),c=()=>_j(q),n=()=>y,w=()=>Z,v=(K)=>{if(W=K,O)U=O.virtualHeight-W},a=()=>{if(f)clearTimeout(f);if(Z)R.cancel(),window.removeEventListener("scroll",R);else I.cancel(),j.removeEventListener("scroll",I),j.removeEventListener("wheel",x),j.removeEventListener("wheel",M),j.removeEventListener("wheel",S)};if(Z){if(N&&O)U=O.virtualHeight-W;window.addEventListener("scroll",R,{passive:!0})}else if(N&&O){if(U=O.virtualHeight-W,X)j.style.overflowX="hidden";else j.style.overflow="hidden";if(G)j.addEventListener("wheel",x,{passive:!1})}else{if(X)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",I,{passive:!0}),!G)j.addEventListener("wheel",M,{passive:!1});else if(X)j.addEventListener("wheel",S,{passive:!1})}return{getScrollTop:C,scrollTo:A,scrollBy:i,isAtTop:T,isAtBottom:P,getScrollPercentage:k,getVelocity:s,isTracking:c,isScrolling:n,updateConfig:d,enableCompression:t,disableCompression:L,isCompressed:r,isWindowMode:w,updateContainerHeight:v,destroy:a}},Jj=(j)=>{let J=null,G=null,_=(...F)=>{if(G=F,J===null)J=requestAnimationFrame(()=>{if(J=null,G)j(...G)})};return _.cancel=()=>{if(J!==null)cancelAnimationFrame(J),J=null},_},Bj=(j,J,G,_=0)=>{return j+G>=J-_},Oj=(j,J=0)=>{return j<=J},Uj=(j,J,G)=>{let _=J-G;if(_<=0)return 0;return Math.min(1,Math.max(0,j/_))},qj=(j,J,G,_)=>{return j<=_&&J>=G};export{Yj as withScrollbar,Jj as rafThrottle,qj as isRangeVisible,Oj as isAtTop,Bj as isAtBottom,Uj as getScrollPercentage,Gj as createScrollbar,$j as createScrollController};
1
+ var Gj=(j,J,G={},_="vlist",F=!1)=>{let{autoHide:E=!0,autoHideDelay:D=1000,minThumbSize:H=30,showOnHover:V=!0,hoverZoneWidth:X=16,showOnViewportEnter:Z=!0}=G,Q=0,U=0,W=0,N=0,O=!1,q=!1,y=0,f=0,h=0,I=null,p=!1,R=null,M=null,S=F?"width":"height",x=F?"translateX":"translateY",b=F?(B)=>B.clientX:(B)=>B.clientY,t=F?"left":"top",L=document.createElement("div"),C=document.createElement("div"),A=V?document.createElement("div"):null,i=()=>{if(L.className=`${_}-scrollbar`,C.className=`${_}-scrollbar-thumb`,F)L.classList.add(`${_}-scrollbar--horizontal`);
2
+ if(L.appendChild(C),j.appendChild(L),A){if(A.className=`${_}-scrollbar-hover`,F)A.classList.add(`${_}-scrollbar-hover--horizontal`),A.style.height=`${X}
3
+ px`;
4
+ else A.style.width=`${X}
5
+ px`;
6
+ j.appendChild(A)}},T=()=>{if(I)clearTimeout(I),I=null},P=()=>{if(!E)return;
7
+ T(),I=setTimeout(d,D)},k=()=>{if(Q<=U)return;
8
+ if(T(),!p)L.classList.add(`${_}-scrollbar--visible`),p=!0;
9
+ if(E&&!O&&!q)P()},d=()=>{if(O||q)return;
10
+ L.classList.remove(`${_}-scrollbar--visible`),p=!1},r=(B,g)=>{Q=B,U=g;
11
+ let m=Q>U;
12
+ if(L.style.display=m?"":"none",!m){d();
13
+ return}
14
+ let z=U/Q;
15
+ W=Math.max(H,z*U),C.style[S]=`${W}
16
+ px`,N=U-W,s(h)},s=(B)=>{if(h=B,Q<=U||N<=0)return;
17
+ let g=Q-U,z=Math.min(1,Math.max(0,B/g))*N;
18
+ C.style.transform=`${x}(${z}
19
+ px)`},c=(B)=>{if(B.target===C)return;
20
+ let g=L.getBoundingClientRect(),o=b(B)-g[t]-W/2,Kj=Math.max(0,Math.min(o,N))/N,jj=Q-U,Xj=Kj*jj;
21
+ J(Xj),k()},n=(B)=>{B.preventDefault(),B.stopPropagation(),O=!0,y=b(B),f=h,T(),L.classList.add(`${_}-scrollbar--dragging`),document.addEventListener("mousemove",w),document.addEventListener("mouseup",v)},w=(B)=>{if(!O)return;
22
+ let g=b(B)-y,m=N>0?g/N:0,z=Q-U,o=m*z,e=Math.max(0,Math.min(f+o,z)),jj=e/z*N;
23
+ if(C.style.transform=`${x}(${jj}
24
+ px)`,M=e,R===null)R=requestAnimationFrame(()=>{if(M!==null)J(M);
25
+ R=null})},v=()=>{if(O=!1,R!==null)cancelAnimationFrame(R),R=null;
26
+ if(M!==null)J(M),M=null;
27
+ if(L.classList.remove(`${_}-scrollbar--dragging`),E&&!q)P();
28
+ document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",v)},a=()=>{if(Z)k()},K=()=>{if(!O){if(q=!1,E)P()}},Y=()=>{q=!0,T(),k()},$=()=>{if(q=!1,!O&&E)P()},u=()=>{if(T(),R!==null)cancelAnimationFrame(R),R=null;
29
+ if(L.removeEventListener("click",c),L.removeEventListener("mouseenter",Y),L.removeEventListener("mouseleave",$),C.removeEventListener("mousedown",n),j.removeEventListener("mouseenter",a),j.removeEventListener("mouseleave",K),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",v),A){if(A.removeEventListener("mouseenter",Y),A.removeEventListener("mouseleave",$),A.parentNode)A.parentNode.removeChild(A)}
30
+ if(L.parentNode)L.parentNode.removeChild(L)};
31
+ if(i(),L.addEventListener("click",c),L.addEventListener("mouseenter",Y),L.addEventListener("mouseleave",$),C.addEventListener("mousedown",n),j.addEventListener("mouseenter",a),j.addEventListener("mouseleave",K),A)A.addEventListener("mouseenter",Y),A.addEventListener("mouseleave",$);
32
+ return{show:k,hide:d,updateBounds:r,updatePosition:s,isVisible:()=>p,destroy:u}};
33
+ var Yj=(j)=>{let J=null;
34
+ return{name:"withScrollbar",priority:30,setup(G){let{dom:_,config:F}=G,{classPrefix:E,horizontal:D}=F;
35
+ if(J=Gj(_.viewport,(X)=>G.scrollController.scrollTo(X),j??{},E,D),!_.viewport.classList.contains(`${E}-viewport--custom-scrollbar`))_.viewport.classList.add(`${E}-viewport--custom-scrollbar`);
36
+ let H=G.getCachedCompression();
37
+ J.updateBounds(H.virtualHeight,G.state.viewportState.containerHeight);
38
+ let V=J;
39
+ G.afterScroll.push((X,Z)=>{V.updatePosition(X),V.show()}),G.resizeHandlers.push((X,Z)=>{if(V){let Q=G.getCachedCompression();
40
+ V.updateBounds(Q.virtualHeight,G.state.viewportState.containerHeight)}}),G.contentSizeHandlers.push(()=>{if(V){let X=G.getCachedCompression();
41
+ V.updateBounds(X.virtualHeight,G.state.viewportState.containerHeight)}}),G.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(J)J.destroy(),J=null}}};
42
+ var Qj=(j=0)=>{let J=[,,,,,,,,];
43
+ for(let G=0;
44
+ G<8;
45
+ G++)J[G]={position:0,time:0};
46
+ return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:J,sampleIndex:0,sampleCount:0}},l=(j,J)=>{let G=performance.now(),_=G-j.lastTime;
47
+ if(_===0)return j;
48
+ if(_>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;
49
+ let E=j.samples[0];
50
+ return E.position=J,E.time=G,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=J,j.lastTime=G,j}
51
+ let F=j.samples[j.sampleIndex];
52
+ if(F.position=J,F.time=G,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let E=(j.sampleIndex-j.sampleCount+8)%8,D=j.samples[E],H=J-D.position,V=G-D.time;
53
+ j.velocity=V>0?H/V:0}
54
+ return j.lastPosition=J,j.lastTime=G,j},_j=(j)=>j.sampleCount>=3,$j=(j,J={})=>{let{wheel:G=!0,sensitivity:_=1,smoothing:F=!1,idleTimeout:E=150,onScroll:D,onIdle:H,scrollElement:V,horizontal:X=!1}=J,Z=!!V,Q=0,U=0,W=Z?X?window.innerWidth:window.innerHeight:X?j.clientWidth:j.clientHeight,N=J.compressed??!1,O=J.compression,q=Qj(),y=!1,f=null,I=Jj(()=>{let K=X?j.scrollLeft:j.scrollTop,Y=K>=Q?"down":"up";
55
+ if(q=l(q,K),Q=K,D)D({scrollTop:Q,direction:Y,velocity:q.velocity});
56
+ b()}),R=Jj(()=>{let K=j.getBoundingClientRect(),Y=X?Math.max(0,-K.left):Math.max(0,-K.top),$=Y>=Q?"down":"up";
57
+ if(q=l(q,Y),Q=Y,!y)y=!0;
58
+ if(D)D({scrollTop:Q,direction:$,velocity:q.velocity});
59
+ b()}),M=(K)=>{K.preventDefault()},S=(K)=>{if(K.deltaX)return;
60
+ K.preventDefault(),j.scrollLeft+=K.deltaY},x=(K)=>{if(!N)return;
61
+ K.preventDefault();
62
+ let Y=(X?K.deltaX||K.deltaY:K.deltaY)*_,$=Q+Y;
63
+ if(F)$=Q+Y*0.3;
64
+ if($=Math.max(0,Math.min($,U)),$!==Q){let B=$>=Q?"down":"up";
65
+ if(q=l(q,$),Q=$,!y)y=!0;
66
+ if(D)D({scrollTop:Q,direction:B,velocity:q.velocity});
67
+ b()}},b=()=>{if(f)clearTimeout(f);
68
+ f=setTimeout(()=>{if(y=!1,q=Qj(Q),H)H()},E)},t=(K)=>{if(N)return;
69
+ if(N=!0,O=K,U=K.virtualHeight-W,Z)return;
70
+ if(I.cancel(),j.removeEventListener("scroll",I),!G)j.removeEventListener("wheel",M);
71
+ else if(X)j.removeEventListener("wheel",S);
72
+ if(X)j.style.overflowX="hidden";
73
+ else j.style.overflow="hidden";
74
+ if(G)j.addEventListener("wheel",x,{passive:!1});
75
+ let Y=X?j.scrollLeft:j.scrollTop;
76
+ if(Y>0){let $=X?O?.actualHeight??j.scrollWidth:O?.actualHeight??j.scrollHeight;
77
+ Q=Y/$*U}
78
+ if(X)j.scrollLeft=0;
79
+ else j.scrollTop=0},L=()=>{if(!N)return;
80
+ if(N=!1,Z){O=void 0;
81
+ return}
82
+ if(j.removeEventListener("wheel",x),X)j.style.overflowX="auto";
83
+ else j.style.overflow="auto";
84
+ if(j.addEventListener("scroll",I,{passive:!0}),!G)j.addEventListener("wheel",M,{passive:!1});
85
+ else if(X)j.addEventListener("wheel",S,{passive:!1});
86
+ if(O&&Q>0){let Y=Q/U*(O.actualHeight-W);
87
+ if(X)j.scrollLeft=Y;
88
+ else j.scrollTop=Y}
89
+ O=void 0},C=()=>{if(Z||N)return Q;
90
+ return X?j.scrollLeft:j.scrollTop},A=(K,Y=!1)=>{let $=Math.max(0,Math.min(K,U||1/0));
91
+ if(Z){let u=j.getBoundingClientRect();
92
+ if(X){let B=u.left+window.scrollX;
93
+ window.scrollTo({left:B+$,behavior:Y?"smooth":"auto"})}
94
+ else{let B=u.top+window.scrollY;
95
+ window.scrollTo({top:B+$,behavior:Y?"smooth":"auto"})}}
96
+ else if(N){if($===Q)return;
97
+ let B=$>=Q?"down":"up";
98
+ if(q=l(q,$),Q=$,!y)y=!0;
99
+ if(D)D({scrollTop:Q,direction:B,velocity:q.velocity});
100
+ b()}
101
+ else if(X)j.scrollTo({left:$,behavior:Y?"smooth":"auto"});
102
+ else j.scrollTo({top:$,behavior:Y?"smooth":"auto"})},i=(K)=>{A(C()+K)},T=()=>{return C()<=0},P=(K=0)=>{let Y=C(),$=Z||N?U:X?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;
103
+ return Y>=$-K},k=()=>{let K=C(),Y=Z||N?U:X?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;
104
+ if(Y<=0)return 0;
105
+ return Math.min(1,Math.max(0,K/Y))},d=(K)=>{if(K.compression)O=K.compression,U=O.virtualHeight-W},r=()=>N,s=()=>Math.abs(q.velocity),c=()=>_j(q),n=()=>y,w=()=>Z,v=(K)=>{if(W=K,O)U=O.virtualHeight-W},a=()=>{if(f)clearTimeout(f);
106
+ if(Z)R.cancel(),window.removeEventListener("scroll",R);
107
+ else I.cancel(),j.removeEventListener("scroll",I),j.removeEventListener("wheel",x),j.removeEventListener("wheel",M),j.removeEventListener("wheel",S)};
108
+ if(Z){if(N&&O)U=O.virtualHeight-W;
109
+ window.addEventListener("scroll",R,{passive:!0})}
110
+ else if(N&&O){if(U=O.virtualHeight-W,X)j.style.overflowX="hidden";
111
+ else j.style.overflow="hidden";
112
+ if(G)j.addEventListener("wheel",x,{passive:!1})}
113
+ else{if(X)j.style.overflowX="auto",j.style.overflowY="hidden";
114
+ else j.style.overflow="auto";
115
+ if(j.addEventListener("scroll",I,{passive:!0}),!G)j.addEventListener("wheel",M,{passive:!1});
116
+ else if(X)j.addEventListener("wheel",S,{passive:!1})}
117
+ return{getScrollTop:C,scrollTo:A,scrollBy:i,isAtTop:T,isAtBottom:P,getScrollPercentage:k,getVelocity:s,isTracking:c,isScrolling:n,updateConfig:d,enableCompression:t,disableCompression:L,isCompressed:r,isWindowMode:w,updateContainerHeight:v,destroy:a}},Jj=(j)=>{let J=null,G=null,_=(...F)=>{if(G=F,J===null)J=requestAnimationFrame(()=>{if(J=null,G)j(...G)})};
118
+ return _.cancel=()=>{if(J!==null)cancelAnimationFrame(J),J=null},_},Bj=(j,J,G,_=0)=>{return j+G>=J-_},Oj=(j,J=0)=>{return j<=J},Uj=(j,J,G)=>{let _=J-G;
119
+ if(_<=0)return 0;
120
+ return Math.min(1,Math.max(0,j/_))},qj=(j,J,G,_)=>{return j<=_&&J>=G};
121
+ export{Yj as withScrollbar,Jj as rafThrottle,qj as isRangeVisible,Oj as isAtTop,Bj as isAtBottom,Uj as getScrollPercentage,Gj as createScrollbar,$j as createScrollController};
@@ -1 +1,104 @@
1
- var H=(D)=>({selected:new Set(D??[]),focusedIndex:-1}),E=(D,B,G)=>{if(G==="none")return D;let j=new Set(D.selected);if(G==="single"){if(j.clear(),B.length>0)j.add(B[0])}else for(let J of B)j.add(J);return{...D,selected:j}},F=(D,B)=>{let G=new Set(D.selected);for(let j of B)G.delete(j);return{...D,selected:G}},V=(D,B,G)=>{if(G==="none")return D;if(D.selected.has(B))return F(D,[B]);else return E(D,[B],G)},C=(D,B,G)=>{if(G!=="multiple")return D;return{...D,selected:new Set(B.map((j)=>j.id))}},f=(D)=>({...D,selected:new Set}),w=(D,B)=>{return D.focusedIndex=B,D},u=(D,B,G=!0)=>{if(B===0)return D;let j=D.focusedIndex-1;if(j<0)j=G?B-1:0;return D.focusedIndex=j,D},v=(D,B,G=!0)=>{if(B===0)return D;let j=D.focusedIndex+1;if(j>=B)j=G?0:B-1;return D.focusedIndex=j,D},R=(D,B)=>{if(B===0)return D;return D.focusedIndex=0,D},S=(D,B)=>{if(B===0)return D;return D.focusedIndex=B-1,D},r=(D,B,G,j)=>{if(B===0)return D;let J=j==="up"?D.focusedIndex-G:D.focusedIndex+G;return J=Math.max(0,Math.min(B-1,J)),D.focusedIndex=J,D},m=(D,B)=>{return D.selected.has(B)},y=(D)=>{return Array.from(D.selected)},O=(D,B)=>{let G=[];for(let j of D.selected){let J=B(j);if(J)G.push(J)}return G},d=(D)=>{return D.selected.size},l=(D)=>{return D.selected.size===0},c=(D,B,G)=>{if(G==="none"||D.focusedIndex<0||D.focusedIndex>=B.length)return D;let j=B[D.focusedIndex];if(!j)return D;return V(D,j.id,G)},o=(D,B,G,j,J)=>{if(J!=="multiple")return D;let q=Math.min(G,j),X=Math.max(G,j),U=[];for(let $=q;$<=X;$++){let k=B[$];if(k)U.push(k.id)}return E(D,U,J)};var h=(D,B,G,j,J,q)=>{if(j===0)return 0;let X=Math.max(0,Math.min(D,j-1)),U=B.getOffset(X),$=B.getHeight(X),k=B.getTotalHeight(),T=Math.max(0,k-G),W;switch(q){case"center":W=U-G/2+$/2;break;case"end":W=U-G+$;break;case"start":default:W=U;break}return Math.max(0,Math.min(W,T))};var p=(D,B,G,j,J="start",q,X=h)=>{return X(D,B,G,j,q,J)};var n=(D)=>{let B=D?.mode??"single",G=D?.initial,j=H(G),J=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:X,emitter:U,config:$}=q,{classPrefix:k,ariaIdPrefix:T}=$;if(B==="none"){q.methods.set("select",()=>{}),q.methods.set("deselect",()=>{}),q.methods.set("toggleSelect",()=>{}),q.methods.set("selectAll",()=>{}),q.methods.set("clearSelection",()=>{}),q.methods.set("getSelected",()=>[]),q.methods.set("getSelectedItems",()=>[]),q.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:W,forceRender:g}=q.getRenderFns(),b=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((Q)=>{let M=Q,L=M.dataset.id;if(L!==void 0){let Y=/^\d+$/.test(L)?parseInt(L,10):L,_=j.selected.has(Y),N=parseInt(M.dataset.index??"-1",10)===j.focusedIndex;M.classList.toggle(`${k}-item--selected`,_),M.classList.toggle(`${k}-item--focused`,N),M.ariaSelected=_?"true":"false"}})},x=()=>{if(q.state.isDestroyed)return;W(),b()},I=()=>{if(q.state.isDestroyed)return;g(),b()};q.setRenderFns(x,I);let A=()=>{b(),U.emit("selection:change",{selected:y(j),items:O(j,(K)=>q.dataManager.getItemById(K))})};J=document.createElement("div"),J.setAttribute("aria-live","polite"),J.setAttribute("aria-atomic","true"),J.className=`${k}-live-region`,J.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",X.root.appendChild(J);let z=J;U.on("selection:change",({selected:K})=>{let Q=K.length;if(Q===0)z.textContent="";else if(Q===1)z.textContent="1 item selected";else z.textContent=`${Q} items selected`}),q.clickHandlers.push((K)=>{if(q.state.isDestroyed)return;let M=K.target.closest("[data-index]");if(!M)return;let L=parseInt(M.dataset.index??"-1",10);if(L<0)return;let Y=q.dataManager.getItem(L);if(!Y)return;U.emit("item:click",{item:Y,index:L,event:K}),j=w(j,L),X.root.setAttribute("aria-activedescendant",`${T}-item-${L}`),j=V(j,Y.id,B),A()}),q.keydownHandlers.push((K)=>{if(q.state.isDestroyed)return;let Q=q.dataManager.getTotal(),M=j.focusedIndex,L=!1,Y=!1,_=j;switch(K.key){case"ArrowUp":_=u(j,Q),L=!0,Y=!0;break;case"ArrowDown":_=v(j,Q),L=!0,Y=!0;break;case"Home":_=R(j,Q),L=!0,Y=!0;break;case"End":_=S(j,Q),L=!0,Y=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let Z=q.dataManager.getItem(j.focusedIndex);if(Z)_=V(j,Z.id,B);L=!0}break}if(L){K.preventDefault(),j=_;let Z=j.focusedIndex;if(Z>=0){let N=q.dataManager.getState(),P=p(Z,q.heightCache,q.state.viewportState.containerHeight,N.total,"center",q.getCachedCompression());q.scrollController.scrollTo(P),X.root.setAttribute("aria-activedescendant",`${T}-item-${Z}`)}else X.root.removeAttribute("aria-activedescendant");if(Y){let{selected:N}=j;if(M>=0&&M!==Z){let P=q.dataManager.getItem(M);if(P)q.renderer.updateItemClasses(M,N.has(P.id),!1)}if(Z>=0){let P=q.dataManager.getItem(Z);if(P)q.renderer.updateItemClasses(Z,N.has(P.id),!0)}}else I(),U.emit("selection:change",{selected:y(j),items:O(j,(N)=>q.dataManager.getItemById(N))})}}),q.methods.set("select",(...K)=>{j=E(j,K,B),A()}),q.methods.set("deselect",(...K)=>{j=F(j,K),A()}),q.methods.set("toggleSelect",(K)=>{j=V(j,K,B),A()}),q.methods.set("selectAll",()=>{if(B!=="multiple")return;let K=q.getAllLoadedItems();j=C(j,K,B),A()}),q.methods.set("clearSelection",()=>{j=f(j);let{renderRange:K,isCompressed:Q}=q.state.viewportState,M=q.getItemsForRange(K),L=Q?q.getCompressionContext():void 0;q.renderer.render(M,K,j.selected,j.focusedIndex,L),U.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return y(j)}),q.methods.set("getSelectedItems",()=>{return O(j,(K)=>q.dataManager.getItemById(K))}),q.destroyHandlers.push(()=>{if(z&&z.parentNode)z.remove()})},destroy(){if(J&&J.parentNode)J.remove();J=null}}};export{n as withSelection,V as toggleSelection,w as setFocusedIndex,o as selectRange,E as selectItems,c as selectFocused,C as selectAll,u as moveFocusUp,S as moveFocusToLast,R as moveFocusToFirst,v as moveFocusDown,r as moveFocusByPage,l as isSelectionEmpty,m as isSelected,d as getSelectionCount,O as getSelectedItems,y as getSelectedIds,F as deselectItems,H as createSelectionState,f as clearSelection};
1
+ var H=(D)=>({selected:new Set(D??[]),focusedIndex:-1}),E=(D,B,G)=>{if(G==="none")return D;
2
+ let j=new Set(D.selected);
3
+ if(G==="single"){if(j.clear(),B.length>0)j.add(B[0])}
4
+ else for(let J of B)j.add(J);
5
+ return{...D,selected:j}},F=(D,B)=>{let G=new Set(D.selected);
6
+ for(let j of B)G.delete(j);
7
+ return{...D,selected:G}},V=(D,B,G)=>{if(G==="none")return D;
8
+ if(D.selected.has(B))return F(D,[B]);
9
+ else return E(D,[B],G)},C=(D,B,G)=>{if(G!=="multiple")return D;
10
+ return{...D,selected:new Set(B.map((j)=>j.id))}},f=(D)=>({...D,selected:new Set}),w=(D,B)=>{return D.focusedIndex=B,D},u=(D,B,G=!0)=>{if(B===0)return D;
11
+ let j=D.focusedIndex-1;
12
+ if(j<0)j=G?B-1:0;
13
+ return D.focusedIndex=j,D},v=(D,B,G=!0)=>{if(B===0)return D;
14
+ let j=D.focusedIndex+1;
15
+ if(j>=B)j=G?0:B-1;
16
+ return D.focusedIndex=j,D},R=(D,B)=>{if(B===0)return D;
17
+ return D.focusedIndex=0,D},S=(D,B)=>{if(B===0)return D;
18
+ return D.focusedIndex=B-1,D},r=(D,B,G,j)=>{if(B===0)return D;
19
+ let J=j==="up"?D.focusedIndex-G:D.focusedIndex+G;
20
+ return J=Math.max(0,Math.min(B-1,J)),D.focusedIndex=J,D},m=(D,B)=>{return D.selected.has(B)},y=(D)=>{return Array.from(D.selected)},O=(D,B)=>{let G=[];
21
+ for(let j of D.selected){let J=B(j);
22
+ if(J)G.push(J)}
23
+ return G},d=(D)=>{return D.selected.size},l=(D)=>{return D.selected.size===0},c=(D,B,G)=>{if(G==="none"||D.focusedIndex<0||D.focusedIndex>=B.length)return D;
24
+ let j=B[D.focusedIndex];
25
+ if(!j)return D;
26
+ return V(D,j.id,G)},o=(D,B,G,j,J)=>{if(J!=="multiple")return D;
27
+ let q=Math.min(G,j),X=Math.max(G,j),U=[];
28
+ for(let $=q;
29
+ $<=X;
30
+ $++){let k=B[$];
31
+ if(k)U.push(k.id)}
32
+ return E(D,U,J)};
33
+ var h=(D,B,G,j,J,q)=>{if(j===0)return 0;
34
+ let X=Math.max(0,Math.min(D,j-1)),U=B.getOffset(X),$=B.getHeight(X),k=B.getTotalHeight(),T=Math.max(0,k-G),W;
35
+ switch(q){case"center":W=U-G/2+$/2;
36
+ break;
37
+ case"end":W=U-G+$;
38
+ break;
39
+ case"start":default:W=U;
40
+ break}
41
+ return Math.max(0,Math.min(W,T))};
42
+ var p=(D,B,G,j,J="start",q,X=h)=>{return X(D,B,G,j,q,J)};
43
+ var n=(D)=>{let B=D?.mode??"single",G=D?.initial,j=H(G),J=null;
44
+ return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:X,emitter:U,config:$}=q,{classPrefix:k,ariaIdPrefix:T}=$;
45
+ if(B==="none"){q.methods.set("select",()=>{}),q.methods.set("deselect",()=>{}),q.methods.set("toggleSelect",()=>{}),q.methods.set("selectAll",()=>{}),q.methods.set("clearSelection",()=>{}),q.methods.set("getSelected",()=>[]),q.methods.set("getSelectedItems",()=>[]),q.methods.set("setSelectionMode",()=>{});
46
+ return}
47
+ let{renderIfNeeded:W,forceRender:g}=q.getRenderFns(),b=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((Q)=>{let M=Q,L=M.dataset.id;
48
+ if(L!==void 0){let Y=/^\d+$/.test(L)?parseInt(L,10):L,_=j.selected.has(Y),N=parseInt(M.dataset.index??"-1",10)===j.focusedIndex;
49
+ M.classList.toggle(`${k}-item--selected`,_),M.classList.toggle(`${k}-item--focused`,N),M.ariaSelected=_?"true":"false"}})},x=()=>{if(q.state.isDestroyed)return;
50
+ W(),b()},I=()=>{if(q.state.isDestroyed)return;
51
+ g(),b()};
52
+ q.setRenderFns(x,I);
53
+ let A=()=>{b(),U.emit("selection:change",{selected:y(j),items:O(j,(K)=>q.dataManager.getItemById(K))})};
54
+ J=document.createElement("div"),J.setAttribute("aria-live","polite"),J.setAttribute("aria-atomic","true"),J.className=`${k}-live-region`,J.style.cssText="position:absolute;
55
+ width:1px;
56
+ height:1px;
57
+ padding:0;
58
+ margin:-1px;
59
+ overflow:hidden;
60
+ clip:rect(0,0,0,0);
61
+ white-space:nowrap;
62
+ border:0",X.root.appendChild(J);
63
+ let z=J;
64
+ U.on("selection:change",({selected:K})=>{let Q=K.length;
65
+ if(Q===0)z.textContent="";
66
+ else if(Q===1)z.textContent="1 item selected";
67
+ else z.textContent=`${Q} items selected`}),q.clickHandlers.push((K)=>{if(q.state.isDestroyed)return;
68
+ let M=K.target.closest("[data-index]");
69
+ if(!M)return;
70
+ let L=parseInt(M.dataset.index??"-1",10);
71
+ if(L<0)return;
72
+ let Y=q.dataManager.getItem(L);
73
+ if(!Y)return;
74
+ U.emit("item:click",{item:Y,index:L,event:K}),j=w(j,L),X.root.setAttribute("aria-activedescendant",`${T}-item-${L}`),j=V(j,Y.id,B),A()}),q.keydownHandlers.push((K)=>{if(q.state.isDestroyed)return;
75
+ let Q=q.dataManager.getTotal(),M=j.focusedIndex,L=!1,Y=!1,_=j;
76
+ switch(K.key){case"ArrowUp":_=u(j,Q),L=!0,Y=!0;
77
+ break;
78
+ case"ArrowDown":_=v(j,Q),L=!0,Y=!0;
79
+ break;
80
+ case"Home":_=R(j,Q),L=!0,Y=!0;
81
+ break;
82
+ case"End":_=S(j,Q),L=!0,Y=!0;
83
+ break;
84
+ case" ":case"Enter":if(j.focusedIndex>=0){let Z=q.dataManager.getItem(j.focusedIndex);
85
+ if(Z)_=V(j,Z.id,B);
86
+ L=!0}
87
+ break}
88
+ if(L){K.preventDefault(),j=_;
89
+ let Z=j.focusedIndex;
90
+ if(Z>=0){let N=q.dataManager.getState(),P=p(Z,q.heightCache,q.state.viewportState.containerHeight,N.total,"center",q.getCachedCompression());
91
+ q.scrollController.scrollTo(P),X.root.setAttribute("aria-activedescendant",`${T}-item-${Z}`)}
92
+ else X.root.removeAttribute("aria-activedescendant");
93
+ if(Y){let{selected:N}=j;
94
+ if(M>=0&&M!==Z){let P=q.dataManager.getItem(M);
95
+ if(P)q.renderer.updateItemClasses(M,N.has(P.id),!1)}
96
+ if(Z>=0){let P=q.dataManager.getItem(Z);
97
+ if(P)q.renderer.updateItemClasses(Z,N.has(P.id),!0)}}
98
+ else I(),U.emit("selection:change",{selected:y(j),items:O(j,(N)=>q.dataManager.getItemById(N))})}}),q.methods.set("select",(...K)=>{j=E(j,K,B),A()}),q.methods.set("deselect",(...K)=>{j=F(j,K),A()}),q.methods.set("toggleSelect",(K)=>{j=V(j,K,B),A()}),q.methods.set("selectAll",()=>{if(B!=="multiple")return;
99
+ let K=q.getAllLoadedItems();
100
+ j=C(j,K,B),A()}),q.methods.set("clearSelection",()=>{j=f(j);
101
+ let{renderRange:K,isCompressed:Q}=q.state.viewportState,M=q.getItemsForRange(K),L=Q?q.getCompressionContext():void 0;
102
+ q.renderer.render(M,K,j.selected,j.focusedIndex,L),U.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return y(j)}),q.methods.set("getSelectedItems",()=>{return O(j,(K)=>q.dataManager.getItemById(K))}),q.destroyHandlers.push(()=>{if(z&&z.parentNode)z.remove()})},destroy(){if(J&&J.parentNode)J.remove();
103
+ J=null}}};
104
+ export{n as withSelection,V as toggleSelection,w as setFocusedIndex,o as selectRange,E as selectItems,c as selectFocused,C as selectAll,u as moveFocusUp,S as moveFocusToLast,R as moveFocusToFirst,v as moveFocusDown,r as moveFocusByPage,l as isSelectionEmpty,m as isSelected,d as getSelectionCount,O as getSelectedItems,y as getSelectedIds,F as deselectItems,H as createSelectionState,f as clearSelection};
@@ -1 +1,21 @@
1
- var B=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(v){v.methods.set("getScrollSnapshot",()=>{let q=v.scrollController.getScrollTop(),y=v.getCachedCompression(),k=v.getVirtualTotal(),j=v.methods.get("getSelected"),A=j&&j().length>0?j():void 0;if(k===0){let u={index:0,offsetInItem:0};if(A)u.selectedIds=A;return u}let w,b;if(y.isCompressed){let U=q/y.virtualHeight*k;w=Math.max(0,Math.min(Math.floor(U),k-1)),b=(U-w)*v.heightCache.getHeight(w)}else w=v.heightCache.indexAtOffset(q),b=q-v.heightCache.getOffset(w);b=Math.max(0,b);let S={index:w,offsetInItem:b};if(A)S.selectedIds=A;return S}),v.methods.set("restoreScroll",(q)=>{let{index:y,offsetInItem:k,selectedIds:j}=q,A=v.getCachedCompression(),w=v.getVirtualTotal();if(w===0)return;let b=Math.max(0,Math.min(y,w-1)),S;if(A.isCompressed){let U=v.heightCache.getHeight(b),z=U>0?k/U:0;S=(b+z)/w*A.virtualHeight}else S=v.heightCache.getOffset(b)+k;let u=Math.max(0,A.virtualHeight-v.state.viewportState.containerHeight);if(S=Math.max(0,Math.min(S,u)),v.scrollController.scrollTo(S),j&&j.length>0){let U=v.methods.get("select");if(U)U(...j)}})}}};export{B as withSnapshots};
1
+ var B=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(v){v.methods.set("getScrollSnapshot",()=>{let q=v.scrollController.getScrollTop(),y=v.getCachedCompression(),k=v.getVirtualTotal(),j=v.methods.get("getSelected"),A=j&&j().length>0?j():void 0;
2
+ if(k===0){let u={index:0,offsetInItem:0};
3
+ if(A)u.selectedIds=A;
4
+ return u}
5
+ let w,b;
6
+ if(y.isCompressed){let U=q/y.virtualHeight*k;
7
+ w=Math.max(0,Math.min(Math.floor(U),k-1)),b=(U-w)*v.heightCache.getHeight(w)}
8
+ else w=v.heightCache.indexAtOffset(q),b=q-v.heightCache.getOffset(w);
9
+ b=Math.max(0,b);
10
+ let S={index:w,offsetInItem:b};
11
+ if(A)S.selectedIds=A;
12
+ return S}),v.methods.set("restoreScroll",(q)=>{let{index:y,offsetInItem:k,selectedIds:j}=q,A=v.getCachedCompression(),w=v.getVirtualTotal();
13
+ if(w===0)return;
14
+ let b=Math.max(0,Math.min(y,w-1)),S;
15
+ if(A.isCompressed){let U=v.heightCache.getHeight(b),z=U>0?k/U:0;
16
+ S=(b+z)/w*A.virtualHeight}
17
+ else S=v.heightCache.getOffset(b)+k;
18
+ let u=Math.max(0,A.virtualHeight-v.state.viewportState.containerHeight);
19
+ if(S=Math.max(0,Math.min(S,u)),v.scrollController.scrollTo(S),j&&j.length>0){let U=v.methods.get("select");
20
+ if(U)U(...j)}})}}};
21
+ export{B as withSnapshots};