@floor/vlist 0.5.7 → 0.6.0

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.
Files changed (108) hide show
  1. package/README.md +793 -592
  2. package/dist/async/index.js +1 -0
  3. package/dist/builder/context.d.ts +3 -3
  4. package/dist/builder/context.d.ts.map +1 -1
  5. package/dist/builder/core.d.ts +1 -1
  6. package/dist/builder/core.d.ts.map +1 -1
  7. package/dist/builder/index.js +1 -250
  8. package/dist/builder/types.d.ts +3 -3
  9. package/dist/builder/types.d.ts.map +1 -1
  10. package/dist/compression/index.js +1 -104
  11. package/dist/core/core.js +1 -0
  12. package/dist/core/full.d.ts +22 -0
  13. package/dist/core/full.d.ts.map +1 -0
  14. package/dist/core/index.js +1 -133
  15. package/dist/core/lite.d.ts +129 -0
  16. package/dist/core/lite.d.ts.map +1 -0
  17. package/dist/core/minimal.d.ts +104 -0
  18. package/dist/core/minimal.d.ts.map +1 -0
  19. package/dist/core-light.js +1 -68
  20. package/dist/data/index.js +1 -233
  21. package/dist/features/async/index.d.ts +9 -0
  22. package/dist/features/async/index.d.ts.map +1 -0
  23. package/dist/features/async/manager.d.ts +103 -0
  24. package/dist/features/async/manager.d.ts.map +1 -0
  25. package/dist/features/async/placeholder.d.ts +62 -0
  26. package/dist/features/async/placeholder.d.ts.map +1 -0
  27. package/dist/features/async/plugin.d.ts +60 -0
  28. package/dist/features/async/plugin.d.ts.map +1 -0
  29. package/dist/features/async/sparse.d.ts +91 -0
  30. package/dist/features/async/sparse.d.ts.map +1 -0
  31. package/dist/features/grid/index.d.ts +9 -0
  32. package/dist/features/grid/index.d.ts.map +1 -0
  33. package/dist/features/grid/layout.d.ts +29 -0
  34. package/dist/features/grid/layout.d.ts.map +1 -0
  35. package/dist/features/grid/plugin.d.ts +48 -0
  36. package/dist/features/grid/plugin.d.ts.map +1 -0
  37. package/dist/features/grid/renderer.d.ts +55 -0
  38. package/dist/features/grid/renderer.d.ts.map +1 -0
  39. package/dist/features/grid/types.d.ts +71 -0
  40. package/dist/features/grid/types.d.ts.map +1 -0
  41. package/dist/features/page/index.d.ts +8 -0
  42. package/dist/features/page/index.d.ts.map +1 -0
  43. package/dist/features/page/plugin.d.ts +53 -0
  44. package/dist/features/page/plugin.d.ts.map +1 -0
  45. package/dist/features/scale/index.d.ts +10 -0
  46. package/dist/features/scale/index.d.ts.map +1 -0
  47. package/dist/features/scale/plugin.d.ts +42 -0
  48. package/dist/features/scale/plugin.d.ts.map +1 -0
  49. package/dist/features/scrollbar/controller.d.ts +121 -0
  50. package/dist/features/scrollbar/controller.d.ts.map +1 -0
  51. package/dist/features/scrollbar/index.d.ts +8 -0
  52. package/dist/features/scrollbar/index.d.ts.map +1 -0
  53. package/dist/features/scrollbar/plugin.d.ts +60 -0
  54. package/dist/features/scrollbar/plugin.d.ts.map +1 -0
  55. package/dist/features/scrollbar/scrollbar.d.ts +73 -0
  56. package/dist/features/scrollbar/scrollbar.d.ts.map +1 -0
  57. package/dist/features/sections/index.d.ts +10 -0
  58. package/dist/features/sections/index.d.ts.map +1 -0
  59. package/dist/features/sections/layout.d.ts +46 -0
  60. package/dist/features/sections/layout.d.ts.map +1 -0
  61. package/dist/features/sections/plugin.d.ts +64 -0
  62. package/dist/features/sections/plugin.d.ts.map +1 -0
  63. package/dist/features/sections/sticky.d.ts +33 -0
  64. package/dist/features/sections/sticky.d.ts.map +1 -0
  65. package/dist/features/sections/types.d.ts +86 -0
  66. package/dist/features/sections/types.d.ts.map +1 -0
  67. package/dist/features/selection/index.d.ts +7 -0
  68. package/dist/features/selection/index.d.ts.map +1 -0
  69. package/dist/features/selection/plugin.d.ts +44 -0
  70. package/dist/features/selection/plugin.d.ts.map +1 -0
  71. package/dist/features/selection/state.d.ts +102 -0
  72. package/dist/features/selection/state.d.ts.map +1 -0
  73. package/dist/features/snapshots/index.d.ts +8 -0
  74. package/dist/features/snapshots/index.d.ts.map +1 -0
  75. package/dist/features/snapshots/plugin.d.ts +44 -0
  76. package/dist/features/snapshots/plugin.d.ts.map +1 -0
  77. package/dist/grid/index.js +1 -198
  78. package/dist/groups/index.js +1 -204
  79. package/dist/index.d.ts +17 -8
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +1 -1129
  82. package/dist/page/index.js +1 -0
  83. package/dist/plugins/groups/plugin.d.ts +3 -2
  84. package/dist/plugins/groups/plugin.d.ts.map +1 -1
  85. package/dist/react/index.js +1 -1024
  86. package/dist/react/react.js +1 -0
  87. package/dist/rendering/heights.d.ts +63 -0
  88. package/dist/rendering/heights.d.ts.map +1 -0
  89. package/dist/rendering/index.d.ts +9 -0
  90. package/dist/rendering/index.d.ts.map +1 -0
  91. package/dist/rendering/renderer.d.ts +103 -0
  92. package/dist/rendering/renderer.d.ts.map +1 -0
  93. package/dist/rendering/scale.d.ts +116 -0
  94. package/dist/rendering/scale.d.ts.map +1 -0
  95. package/dist/rendering/viewport.d.ts +139 -0
  96. package/dist/rendering/viewport.d.ts.map +1 -0
  97. package/dist/scale/index.js +1 -0
  98. package/dist/scroll/index.js +1 -116
  99. package/dist/scrollbar/index.js +1 -0
  100. package/dist/sections/index.js +1 -0
  101. package/dist/selection/index.js +1 -96
  102. package/dist/snapshots/index.js +1 -21
  103. package/dist/svelte/index.js +1 -1012
  104. package/dist/svelte/svelte.js +1 -0
  105. package/dist/vue/index.js +1 -1018
  106. package/dist/vue/vue.js +1 -0
  107. package/dist/window/index.js +1 -18
  108. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ var F=16000000;var Ny=(j,K,J,y)=>{if(y===0)return 0;if(!j.isVariable())return Math.ceil(J/j.getHeight(0));let N=0,Q=0,q=K;while(q<y&&Q<J)Q+=j.getHeight(q),N++,q++;return Math.max(1,N)},l=(j,K,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.floor(K/j.getHeight(0));let y=0,N=0;for(let Q=J-1;Q>=0;Q--){let q=j.getHeight(Q);if(N+q>K)break;N+=q,y++}return Math.max(y,1)},n=(j,K,J)=>{if(J===0)return 0;let y=Math.floor(K),N=K-y,Q=Math.max(0,Math.min(y,J-1));return j.getOffset(Q)+N*j.getHeight(Q)};var w=(j,K)=>{let J=K.getTotalHeight(),y=J>F,N=y?F:J,Q=J>0?N/J:1;return{isCompressed:y,actualHeight:J,virtualHeight:N,ratio:Q}},c=(j,K,J,y,N,Q)=>{if(y===0||K===0)return Q.start=0,Q.end=-1,Q;if(!N.isCompressed){let X=J.indexAtOffset(j),$=J.indexAtOffset(j+K);if($<y-1)$++;return Q.start=Math.max(0,X),Q.end=Math.min(y-1,Math.max(0,$)),Q}let{virtualHeight:q}=N,B=j/q*y,E=Math.floor(B),L=Ny(J,Math.max(0,E),K,y),Y=Math.ceil(B)+L,G=q-K-j;if(G<=K&&G>=-1){let X=l(J,K,y),$=Math.max(0,y-X),D=Math.max(0,Math.min(1,1-G/K));E=Math.floor(E+($-E)*D),Y=G<=1?y-1:Math.min(y-1,E+L)}return Q.start=Math.max(0,E),Q.end=Math.min(y-1,Math.max(0,Y)),Q},Gy=(j,K,J,y)=>{if(J===0)return y.start=0,y.end=-1,y;return y.start=Math.max(0,j.start-K),y.end=Math.min(J-1,j.end+K),y},r=(j,K,J,y,N,Q,q)=>{if(!Q.isCompressed||y===0)return J.getOffset(j);let{virtualHeight:V}=Q,B=V-N,E=B-K;if(E<=N&&E>=-1){if(K>=B-1){let b=J.getTotalHeight()-J.getOffset(j);return N-b}let W=l(J,N,y),G=Math.max(0,y-W),$=K/V*y,D=Math.max(0,Math.min(1,1-E/N)),z=J.getOffset(j)-J.getOffset(G),M=J.getOffset(j)-n(J,$,y);return M+(z-M)*D}let Y=K/V*y;return J.getOffset(j)-n(J,Y,y)},a=(j,K,J,y,N,Q="start")=>{if(y===0)return 0;let q;if(N.isCompressed){if(Q==="end"&&j===y-1)return Math.max(0,N.virtualHeight-J);q=j/y*N.virtualHeight}else q=K.getOffset(j);let V=K.getHeight(j);switch(Q){case"center":q-=(J-V)/2;break;case"end":q-=J-V;break}let B=N.virtualHeight-J;return Math.max(0,Math.min(q,B))},Uy=(j,K,J,y)=>{if(J===0)return 0;if(y.isCompressed){let N=j/y.virtualHeight;return Math.floor(N*J)}return K.indexAtOffset(j)},Dy=(j,K)=>{if(typeof K==="number")return j*K>F;return K.getTotalHeight()>F},_y=(j)=>{if(j<=0)return 0;return Math.floor(F/j)},Ey=(j,K)=>{let J=w(j,K);if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(J.ratio*100).toFixed(1)}% (${j} items, ${(J.actualHeight/1e6).toFixed(1)}M px → ${(J.virtualHeight/1e6).toFixed(1)}M px virtual)`};var i=(j,K,J={},y="vlist",N=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:V=30,showOnHover:B=!0,hoverZoneWidth:E=16,showOnViewportEnter:L=!0}=J,Y=0,W=0,G=0,X=0,$=!1,D=!1,z=0,M=0,b=0,f=null,T=!1,Z=null,P=null,Qy=N?"width":"height",o=N?"translateX":"translateY",u=N?(_)=>_.clientX:(_)=>_.clientY,Yy=N?"left":"top",U=document.createElement("div"),R=document.createElement("div"),O=B?document.createElement("div"):null,$y=()=>{if(U.className=`${y}-scrollbar`,R.className=`${y}-scrollbar-thumb`,N)U.classList.add(`${y}-scrollbar--horizontal`);if(U.appendChild(R),j.appendChild(U),O){if(O.className=`${y}-scrollbar-hover`,N)O.classList.add(`${y}-scrollbar-hover--horizontal`),O.style.height=`${E}px`;else O.style.width=`${E}px`;j.appendChild(O)}},S=()=>{if(f)clearTimeout(f),f=null},v=()=>{if(!Q)return;S(),f=setTimeout(d,q)},H=()=>{if(Y<=W)return;if(S(),!T)U.classList.add(`${y}-scrollbar--visible`),T=!0;if(Q&&!$&&!D)v()},d=()=>{if($||D)return;U.classList.remove(`${y}-scrollbar--visible`),T=!1},Wy=(_,A)=>{Y=_,W=A;let C=Y>W;if(U.style.display=C?"":"none",!C){d();return}let k=W/Y;G=Math.max(V,k*W),R.style[Qy]=`${G}px`,X=W-G,e(b)},e=(_)=>{if(b=_,Y<=W||X<=0)return;let A=Y-W,k=Math.min(1,Math.max(0,_/A))*X;R.style.transform=`${o}(${k}px)`},t=(_)=>{if(_.target===R)return;let A=U.getBoundingClientRect(),m=u(_)-A[Yy]-G/2,Ky=Math.max(0,Math.min(m,X))/X,s=Y-W,qy=Ky*s;K(qy),H()},yy=(_)=>{_.preventDefault(),_.stopPropagation(),$=!0,z=u(_),M=b,S(),U.classList.add(`${y}-scrollbar--dragging`),document.addEventListener("mousemove",x),document.addEventListener("mouseup",g)},x=(_)=>{if(!$)return;let A=u(_)-z,C=X>0?A/X:0,k=Y-W,m=C*k,h=Math.max(0,Math.min(M+m,k)),s=h/k*X;if(R.style.transform=`${o}(${s}px)`,P=h,Z===null)Z=requestAnimationFrame(()=>{if(P!==null)K(P);Z=null})},g=()=>{if($=!1,Z!==null)cancelAnimationFrame(Z),Z=null;if(P!==null)K(P),P=null;if(U.classList.remove(`${y}-scrollbar--dragging`),Q&&!D)v();document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g)},jy=()=>{if(L)H()},Jy=()=>{if(!$){if(D=!1,Q)v()}},I=()=>{D=!0,S(),H()},p=()=>{if(D=!1,!$&&Q)v()},Xy=()=>{if(S(),Z!==null)cancelAnimationFrame(Z),Z=null;if(U.removeEventListener("click",t),U.removeEventListener("mouseenter",I),U.removeEventListener("mouseleave",p),R.removeEventListener("mousedown",yy),j.removeEventListener("mouseenter",jy),j.removeEventListener("mouseleave",Jy),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g),O){if(O.removeEventListener("mouseenter",I),O.removeEventListener("mouseleave",p),O.parentNode)O.parentNode.removeChild(O)}if(U.parentNode)U.parentNode.removeChild(U)};if($y(),U.addEventListener("click",t),U.addEventListener("mouseenter",I),U.addEventListener("mouseleave",p),R.addEventListener("mousedown",yy),j.addEventListener("mouseenter",jy),j.addEventListener("mouseleave",Jy),O)O.addEventListener("mouseenter",I),O.addEventListener("mouseleave",p);return{show:H,hide:d,updateBounds:Wy,updatePosition:e,isVisible:()=>T,destroy:Xy}};var Ly=()=>{let j=null,K=0,J=!1;return{name:"withScale",priority:20,setup(y){let{dom:N,config:Q}=y,{classPrefix:q,horizontal:V}=Q,B=()=>{let L=y.getVirtualTotal(),Y=w(L,y.heightCache);if(Y.isCompressed&&!J){J=!0,y.scrollController.enableCompression(Y),y.updateContentSize(Y.virtualHeight),y.setScrollFns(()=>K,($)=>{K=$});let W=N.viewport,G=($)=>{$.preventDefault();let D=Y.virtualHeight-y.state.viewportState.containerHeight;K=Math.max(0,Math.min(K+$.deltaY,D)),y.scrollController.scrollTo(K)};if(W.addEventListener("wheel",G,{passive:!1}),y.destroyHandlers.push(()=>{W.removeEventListener("wheel",G)}),!N.viewport.querySelector(`.${q}-scrollbar-track`)){if(j=i(N.viewport,(D)=>y.scrollController.scrollTo(D),{},q,V),!N.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))N.viewport.classList.add(`${q}-viewport--custom-scrollbar`);j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);let $=j;y.afterScroll.push((D,z)=>{if($)$.updatePosition(D),$.show()}),y.resizeHandlers.push((D,z)=>{if($){let M=y.getCachedCompression();$.updateBounds(M.virtualHeight,y.state.viewportState.containerHeight)}})}}else if(!Y.isCompressed&&J)J=!1,y.scrollController.disableCompression(),y.updateContentSize(Y.actualHeight);else if(Y.isCompressed)y.scrollController.updateConfig({compression:Y}),y.updateContentSize(Y.virtualHeight);if(j)j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);y.state.cachedCompression={state:Y,totalItems:L}};y.updateCompressionMode=B;let E=y.getCachedCompression.bind(y);y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;return E()},y.setVisibleRangeFn((L,Y,W,G,X)=>{let $=w(G,W);c(L,Y,W,G,$,X)}),y.setScrollToPosFn((L,Y,W,G,X)=>{let $=w(G,Y);return a(L,Y,W,G,$,X)}),y.setPositionElementFn((L,Y)=>{let W=y.getVirtualTotal(),G=w(W,y.heightCache);if(G.isCompressed){let X=Math.round(r(Y,y.scrollController.getScrollTop(),y.heightCache,W,y.state.viewportState.containerHeight,G)),$=y.config.horizontal;L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}else{let X=Math.round(y.heightCache.getOffset(Y)),$=y.config.horizontal;L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}}),B(),y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null})},destroy(){if(j)j.destroy(),j=null}}};export{Ly as withScale,Dy as needsCompression,_y as getMaxItemsWithoutCompression,w as getCompressionState,Ey as getCompressionInfo,Uy as calculateIndexFromScrollPosition,c as calculateCompressedVisibleRange,a as calculateCompressedScrollToIndex,Gy as calculateCompressedRenderRange,r as calculateCompressedItemPosition,F as MAX_VIRTUAL_HEIGHT};
@@ -1,116 +1 @@
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}px`;
3
- else A.style.width=`${X}px`;
4
- j.appendChild(A)}},T=()=>{if(I)clearTimeout(I),I=null},P=()=>{if(!E)return;
5
- T(),I=setTimeout(d,D)},k=()=>{if(Q<=U)return;
6
- if(T(),!p)L.classList.add(`${_}-scrollbar--visible`),p=!0;
7
- if(E&&!O&&!q)P()},d=()=>{if(O||q)return;
8
- L.classList.remove(`${_}-scrollbar--visible`),p=!1},r=(B,g)=>{Q=B,U=g;
9
- let m=Q>U;
10
- if(L.style.display=m?"":"none",!m){d();
11
- return}
12
- let z=U/Q;
13
- 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;
14
- let g=Q-U,z=Math.min(1,Math.max(0,B/g))*N;
15
- C.style.transform=`${x}(${z}px)`},c=(B)=>{if(B.target===C)return;
16
- 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;
17
- 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;
18
- 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;
19
- if(C.style.transform=`${x}(${jj}px)`,M=e,R===null)R=requestAnimationFrame(()=>{if(M!==null)J(M);
20
- R=null})},v=()=>{if(O=!1,R!==null)cancelAnimationFrame(R),R=null;
21
- if(M!==null)J(M),M=null;
22
- if(L.classList.remove(`${_}-scrollbar--dragging`),E&&!q)P();
23
- 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;
24
- 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)}
25
- if(L.parentNode)L.parentNode.removeChild(L)};
26
- 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",$);
27
- return{show:k,hide:d,updateBounds:r,updatePosition:s,isVisible:()=>p,destroy:u}};
28
- var Yj=(j)=>{let J=null;
29
- return{name:"withScrollbar",priority:30,setup(G){let{dom:_,config:F}=G,{classPrefix:E,horizontal:D}=F;
30
- 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`);
31
- let H=G.getCachedCompression();
32
- J.updateBounds(H.virtualHeight,G.state.viewportState.containerHeight);
33
- let V=J;
34
- G.afterScroll.push((X,Z)=>{V.updatePosition(X),V.show()}),G.resizeHandlers.push((X,Z)=>{if(V){let Q=G.getCachedCompression();
35
- V.updateBounds(Q.virtualHeight,G.state.viewportState.containerHeight)}}),G.contentSizeHandlers.push(()=>{if(V){let X=G.getCachedCompression();
36
- V.updateBounds(X.virtualHeight,G.state.viewportState.containerHeight)}}),G.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(J)J.destroy(),J=null}}};
37
- var Qj=(j=0)=>{let J=[,,,,,,,,];
38
- for(let G=0;
39
- G<8;
40
- G++)J[G]={position:0,time:0};
41
- return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:J,sampleIndex:0,sampleCount:0}},l=(j,J)=>{let G=performance.now(),_=G-j.lastTime;
42
- if(_===0)return j;
43
- if(_>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;
44
- let E=j.samples[0];
45
- return E.position=J,E.time=G,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=J,j.lastTime=G,j}
46
- let F=j.samples[j.sampleIndex];
47
- 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;
48
- j.velocity=V>0?H/V:0}
49
- 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";
50
- if(q=l(q,K),Q=K,D)D({scrollTop:Q,direction:Y,velocity:q.velocity});
51
- b()}),R=Jj(()=>{let K=j.getBoundingClientRect(),Y=X?Math.max(0,-K.left):Math.max(0,-K.top),$=Y>=Q?"down":"up";
52
- if(q=l(q,Y),Q=Y,!y)y=!0;
53
- if(D)D({scrollTop:Q,direction:$,velocity:q.velocity});
54
- b()}),M=(K)=>{K.preventDefault()},S=(K)=>{if(K.deltaX)return;
55
- K.preventDefault(),j.scrollLeft+=K.deltaY},x=(K)=>{if(!N)return;
56
- K.preventDefault();
57
- let Y=(X?K.deltaX||K.deltaY:K.deltaY)*_,$=Q+Y;
58
- if(F)$=Q+Y*0.3;
59
- if($=Math.max(0,Math.min($,U)),$!==Q){let B=$>=Q?"down":"up";
60
- if(q=l(q,$),Q=$,!y)y=!0;
61
- if(D)D({scrollTop:Q,direction:B,velocity:q.velocity});
62
- b()}},b=()=>{if(f)clearTimeout(f);
63
- f=setTimeout(()=>{if(y=!1,q=Qj(Q),H)H()},E)},t=(K)=>{if(N)return;
64
- if(N=!0,O=K,U=K.virtualHeight-W,Z)return;
65
- if(I.cancel(),j.removeEventListener("scroll",I),!G)j.removeEventListener("wheel",M);
66
- else if(X)j.removeEventListener("wheel",S);
67
- if(X)j.style.overflowX="hidden";
68
- else j.style.overflow="hidden";
69
- if(G)j.addEventListener("wheel",x,{passive:!1});
70
- let Y=X?j.scrollLeft:j.scrollTop;
71
- if(Y>0){let $=X?O?.actualHeight??j.scrollWidth:O?.actualHeight??j.scrollHeight;
72
- Q=Y/$*U}
73
- if(X)j.scrollLeft=0;
74
- else j.scrollTop=0},L=()=>{if(!N)return;
75
- if(N=!1,Z){O=void 0;
76
- return}
77
- if(j.removeEventListener("wheel",x),X)j.style.overflowX="auto";
78
- else j.style.overflow="auto";
79
- if(j.addEventListener("scroll",I,{passive:!0}),!G)j.addEventListener("wheel",M,{passive:!1});
80
- else if(X)j.addEventListener("wheel",S,{passive:!1});
81
- if(O&&Q>0){let Y=Q/U*(O.actualHeight-W);
82
- if(X)j.scrollLeft=Y;
83
- else j.scrollTop=Y}
84
- O=void 0},C=()=>{if(Z||N)return Q;
85
- return X?j.scrollLeft:j.scrollTop},A=(K,Y=!1)=>{let $=Math.max(0,Math.min(K,U||1/0));
86
- if(Z){let u=j.getBoundingClientRect();
87
- if(X){let B=u.left+window.scrollX;
88
- window.scrollTo({left:B+$,behavior:Y?"smooth":"auto"})}
89
- else{let B=u.top+window.scrollY;
90
- window.scrollTo({top:B+$,behavior:Y?"smooth":"auto"})}}
91
- else if(N){if($===Q)return;
92
- let B=$>=Q?"down":"up";
93
- if(q=l(q,$),Q=$,!y)y=!0;
94
- if(D)D({scrollTop:Q,direction:B,velocity:q.velocity});
95
- b()}
96
- else if(X)j.scrollTo({left:$,behavior:Y?"smooth":"auto"});
97
- 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;
98
- return Y>=$-K},k=()=>{let K=C(),Y=Z||N?U:X?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;
99
- if(Y<=0)return 0;
100
- 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);
101
- if(Z)R.cancel(),window.removeEventListener("scroll",R);
102
- else I.cancel(),j.removeEventListener("scroll",I),j.removeEventListener("wheel",x),j.removeEventListener("wheel",M),j.removeEventListener("wheel",S)};
103
- if(Z){if(N&&O)U=O.virtualHeight-W;
104
- window.addEventListener("scroll",R,{passive:!0})}
105
- else if(N&&O){if(U=O.virtualHeight-W,X)j.style.overflowX="hidden";
106
- else j.style.overflow="hidden";
107
- if(G)j.addEventListener("wheel",x,{passive:!1})}
108
- else{if(X)j.style.overflowX="auto",j.style.overflowY="hidden";
109
- else j.style.overflow="auto";
110
- if(j.addEventListener("scroll",I,{passive:!0}),!G)j.addEventListener("wheel",M,{passive:!1});
111
- else if(X)j.addEventListener("wheel",S,{passive:!1})}
112
- 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)})};
113
- 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;
114
- if(_<=0)return 0;
115
- return Math.min(1,Math.max(0,j/_))},qj=(j,J,G,_)=>{return j<=_&&J>=G};
116
- 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`);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};
@@ -0,0 +1 @@
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};
@@ -0,0 +1 @@
1
+ var{defineProperty:t,getOwnPropertyNames:Gj,getOwnPropertyDescriptor:Lj}=Object,Oj=Object.prototype.hasOwnProperty;var Xj=new WeakMap,Fj=(J)=>{var $=Xj.get(J),j;if($)return $;if($=t({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")Gj(J).map((Z)=>!Oj.call($,Z)&&t($,Z,{get:()=>J[Z],enumerable:!(j=Lj(J,Z))||j.enumerable}));return Xj.set(J,$),$};var bj=(J,$)=>{for(var j in $)t(J,j,{get:$[j],enumerable:!0,configurable:!0,set:(Z)=>$[j]=()=>Z})};var Yj=(J,$)=>()=>(J&&($=J(J=0)),$);var h=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var Dj=(J,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.floor($/J.getHeight(0));let Z=0,Q=0;for(let q=j-1;q>=0;q--){let X=J.getHeight(q);if(Q+X>$)break;Q+=X,Z++}return Math.max(Z,1)},Jj=(J,$,j)=>{if(j===0)return 0;let Z=Math.floor($),Q=$-Z,q=Math.max(0,Math.min(Z,j-1));return J.getOffset(q)+Q*J.getHeight(q)};var $j=16000000;var zj=(J,$)=>{let j=$.getTotalHeight(),Z=j>$j,Q=Z?$j:j,q=j>0?Q/j:1;return{isCompressed:Z,actualHeight:j,virtualHeight:Q,ratio:q}},kj=(J,$,j,Z,Q,q,X)=>{if(!q.isCompressed||Z===0)return j.getOffset(J);let{virtualHeight:M}=q,D=M-Q,W=D-$;if(W<=Q&&W>=-1){if($>=D-1){let R=j.getTotalHeight()-j.getOffset(J);return Q-R}let Y=Dj(j,Q,Z),_=Math.max(0,Z-Y),k=$/M*Z,G=Math.max(0,Math.min(1,1-W/Q)),O=j.getOffset(J)-j.getOffset(_),w=j.getOffset(J)-Jj(j,k,Z);return w+(O-w)*G}let P=$/M*Z;return j.getOffset(J)-Jj(j,P,Z)};var Bj=()=>{};var _j={};bj(_j,{createGridRenderer:()=>vj});var wj=(J=200)=>{let $=[];return{acquire:()=>{let q=$.pop();if(q)return q;let X=document.createElement("div");return X.setAttribute("role","option"),X},release:(q)=>{if($.length<J)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),q.removeAttribute("data-row"),q.removeAttribute("data-col"),$.push(q)},clear:()=>{$.length=0}}},vj=(J,$,j,Z,Q,q,X,M)=>{let D=wj(),W=new Map,F=q,P=!1,Y=null,_=0,E="",k=(N)=>{if(Y&&_===N)return Y;return Y=zj(N,j),_=N,Y},G={selected:!1,focused:!1},O=(N,K)=>{return G.selected=N,G.focused=K,G},w=`${Q}-item ${Q}-grid-item`,R=`${Q}-item--selected`,H=`${Q}-item--focused`,T=(N,K)=>{if(typeof K==="string")N.innerHTML=K;else N.replaceChildren(K)},v=(N,K,U)=>{N.classList.toggle(R,K),N.classList.toggle(H,U)},u=(N,K)=>{let U=Z.getRow(N);if(K){let L=K.totalItems,A=k(L);if(A.isCompressed)return kj(U,K.scrollTop,j,L,K.containerHeight,A,K.rangeStart)}return j.getOffset(U)},B=(N,K,U)=>{let L=N.dataset.id?.startsWith("__group_header"),A=L?0:Z.getCol(K),V=L?0:Z.getColumnOffset(A,F),y;if(P){let d=Z.getRow(K),z=0,C=new Set;for(let f=0;f<K;f++){let p=Z.getRow(f);if(p<d&&!C.has(p)){let c=j.getHeight(f);z+=c,C.add(p)}}y=z}else y=u(K,U);N.style.transform=`translate(${Math.round(V)}px, ${Math.round(y)}px)`},b=(N,K)=>{let U=N.dataset.id?.startsWith("__group_header"),L=U?F:Z.getColumnWidth(F),A;if(P||U)A=j.getHeight(K)-Z.gap;else{let V=Z.getRow(K);A=j.getHeight(V)-Z.gap}N.style.width=`${L}px`,N.style.height=`${A}px`},x=(N,K,U,L,A)=>{let V=D.acquire(),y=O(U,L);if(V.className=w,V.dataset.index=String(N),V.dataset.id=String(K.id),V.dataset.row=String(Z.getRow(N)),V.dataset.col=String(Z.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));b(V,N);let d=$(K,N,y);return T(V,d),v(V,U,L),B(V,N,A),V},g=(N,K,U,L,A)=>{if(K.start===0&&N.length>0)P=h(N[0]);for(let[z,C]of W)if(z<K.start||z>K.end)C.element.remove(),D.release(C.element),W.delete(z);let V=!1;if(X){let z=String(X());V=z!==E,E=z}let y=document.createDocumentFragment(),d=[];for(let z=K.start;z<=K.end;z++){let C=z-K.start,f=N[C];if(!f){console.warn(`⚠️ RENDER: Missing item at index ${z} (range: ${K.start}-${K.end}, items.length: ${N.length})`);continue}let p=U.has(f.id),c=z===L,S=W.get(z);if(S){let s=S.element.dataset.id,Kj=String(f.id);if(s!==Kj){let Pj=O(p,c),Aj=$(f,z,Pj);T(S.element,Aj),S.element.dataset.id=Kj,S.element.dataset.row=String(Z.getRow(z)),S.element.dataset.col=String(Z.getCol(z)),b(S.element,z)}if(v(S.element,p,c),S.element.ariaSelected=String(p),B(S.element,z,A),V)S.element.setAttribute("aria-setsize",E)}else{let s=x(z,f,p,c,A);y.appendChild(s),d.push({index:z,element:s})}}if(d.length>0){J.appendChild(y);for(let{index:z,element:C}of d)W.set(z,{index:z,element:C})}},m=(N)=>{for(let[K,U]of W)B(U.element,K,N)},o=(N,K,U,L)=>{let A=W.get(N);if(A){let V=O(U,L),y=$(K,N,V);T(A.element,y),v(A.element,U,L),A.element.dataset.id=String(K.id),A.element.ariaSelected=String(U),b(A.element,N)}},i=(N,K,U)=>{let L=W.get(N);if(L)v(L.element,K,U)},r=(N)=>{return W.get(N)?.element},Vj=(N)=>{if(Math.abs(N-F)<1)return;F=N;for(let[K,U]of W)b(U.element,K),B(U.element,K)},Nj=()=>{for(let[,N]of W)N.element.remove(),D.release(N.element);W.clear()};return{render:g,updatePositions:m,updateItem:o,updateItemClasses:i,getElement:r,updateContainerWidth:Vj,clear:Nj,destroy:()=>{Nj(),D.clear()}}};var Ej=Yj(()=>{Bj()});var e=(J,$)=>{let j=0,Z=J.length-1;while(j<Z){let Q=j+Z+1>>>1;if(J[Q].headerLayoutIndex<=$)j=Q;else Z=Q-1}return j},Wj=(J,$)=>{let j=0,Z=J.length-1;while(j<Z){let Q=j+Z+1>>>1;if(J[Q].firstDataIndex<=$)j=Q;else Z=Q-1}return j},Mj=(J,$)=>{if(J===0)return[];let j=[],Z=$(0),Q=0,q=0;for(let X=1;X<J;X++){let M=$(X);if(M!==Z){let D=X-Q;j.push({key:Z,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:Q,count:D}),q=q+1+D,Z=M,Q=X}}return j.push({key:Z,groupIndex:j.length,headerLayoutIndex:q,firstDataIndex:Q,count:J-Q}),j},a=(J,$)=>{if(J.length===0||$.length===0)return[];let j=J.length+$.length,Z=Array(j),Q=0;for(let q of $){Z[Q]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},Q++;for(let X=0;X<q.count;X++)Z[Q]=J[q.firstDataIndex+X],Q++}return Z},n=(J,$)=>{let j=typeof $==="number"?(Z)=>$:$;return(Z)=>{let Q=J.getEntry(Z);if(Q.type==="header")return J.getHeaderHeight(Q.group.groupIndex);return j(Q.dataIndex)}},jj=(J,$)=>{let j=Mj(J,$.getGroupForIndex),Z=J+j.length,Q=$.headerHeight;return{get totalEntries(){return Z},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 _=e(j,Y),E=j[_];if(Y===E.headerLayoutIndex)return{type:"header",group:E};let k=Y-E.headerLayoutIndex-1;return{type:"item",dataIndex:E.firstDataIndex+k,group:E}},layoutToDataIndex:(Y)=>{if(j.length===0)return Y;let _=e(j,Y),E=j[_];if(Y===E.headerLayoutIndex)return-1;let k=Y-E.headerLayoutIndex-1;return E.firstDataIndex+k},dataToLayoutIndex:(Y)=>{if(j.length===0)return Y;let _=Wj(j,Y),E=j[_],k=Y-E.firstDataIndex;return E.headerLayoutIndex+1+k},getGroupAtLayoutIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let _=e(j,Y);return j[_]},getGroupAtDataIndex:(Y)=>{if(j.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let _=Wj(j,Y);return j[_]},getHeaderHeight:typeof Q==="number"?(Y)=>Q:(Y)=>{let _=j[Y];if(!_)return 0;return Q(_.key,Y)},rebuild:(Y)=>{j=Mj(Y,$.getGroupForIndex),Z=Y+j.length}}};var qj=(J,$,j,Z,Q)=>{let q=document.createElement("div");q.className=`${Q}-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",J.insertBefore(q,J.firstChild);let X=-1,M=!1,D=0,W=(k)=>{if(k===X)return;X=k;let G=$.groups;if(k<0||k>=G.length){q.textContent="";return}let O=G[k],w=Z.headerTemplate(O.key,O.groupIndex),R=$.getHeaderHeight(k);if(q.style.height=`${R}px`,typeof w==="string")q.innerHTML=w;else q.replaceChildren(w)},F=(k)=>{let G=$.groups;if(G.length===0){Y();return}let O=0;for(let v=G.length-1;v>=0;v--)if(j.getOffset(G[v].headerLayoutIndex)<=k){O=v;break}let w=j.getOffset(G[0].headerLayoutIndex);if(k<w){Y();return}if(!M)P();W(O);let R=$.getHeaderHeight(O),H=0,T=O+1;if(T<G.length){let u=j.getOffset(G[T].headerLayoutIndex)-k;if(u<R)H=u-R}if(H!==D)D=H,q.style.transform=H===0?"":`translateY(${Math.round(H)}px)`},P=()=>{if(M)return;M=!0,q.style.display=""},Y=()=>{if(!M)return;M=!1,q.style.display="none",X=-1,D=0,q.style.transform=""},_=()=>{let k=X;if(X=-1,k>=0)W(k)},E=()=>{q.remove(),X=-1,M=!1};return q.style.display="none",{update:F,refresh:_,show:P,hide:Y,destroy:E}};var Uj=(J,$,j,Z,Q,q)=>{if(Z===0)return 0;let X=Math.max(0,Math.min(J,Z-1)),M=$.getOffset(X),D=$.getHeight(X),W=$.getTotalHeight(),F=Math.max(0,W-j),P;switch(q){case"center":P=M-j/2+D/2;break;case"end":P=M-j+D;break;case"start":default:P=M;break}return Math.max(0,Math.min(P,F))};var Zj=(J,$,j,Z,Q="start",q,X=Uj)=>{return X(J,$,j,Z,q,Q)};var Rj=(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 $=null,j=null,Z=[],Q=[];return{name:"withSections",priority:10,setup(q){let{dom:X,config:M,rawConfig:D}=q,{classPrefix:W}=M;if(M.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let P=D.item.height;Z=D.items?[...D.items]:[];let Y=Z.length,_={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};$=jj(Y,_),Q=a(Z,$.groups);let E=n($,P);q.setHeightConfig(E),q.rebuildHeightCache(Q.length),q.dataManager.setItems(Q,0,Q.length);let k=D.item.template,{headerTemplate:G}=J,O=(B,b,x)=>{if(h(B))return G(B.groupKey,B.groupIndex);return k(B,b,x)},w=q.methods.get("_getGridLayout"),R=q.methods.get("_replaceGridRenderer"),H=q.methods.get("_updateGridLayoutForGroups");if(w&&R){if(H)H((g)=>{let m=Q[g];return!!(m&&h(m))});let{createGridRenderer:B}=(Ej(),Fj(_j)),b=w(),x=B(X.items,O,q.heightCache,b,W,q.getContainerWidth(),()=>q.dataManager.getTotal(),M.ariaIdPrefix);R(x)}else q.replaceTemplate(O);if(X.root.classList.add(`${W}--grouped`),J.sticky!==!1){j=qj(X.root,$,q.heightCache,{..._,sticky:_.sticky??!1},W);let B=j;q.afterScroll.push((b,x)=>{B.update(b)}),j.update(q.scrollController.getScrollTop())}let T=()=>{if(!$)return;$.rebuild(Z.length),Q=a(Z,$.groups);let B=n($,P);if(q.setHeightConfig(B),q.rebuildHeightCache(Q.length),q.dataManager.setItems(Q,0,Q.length),j)j.refresh()};q.methods.set("setItems",(B)=>{Z=[...B],T()}),q.methods.set("appendItems",(B)=>{Z=[...Z,...B],T()}),q.methods.set("prependItems",(B)=>{Z=[...B,...Z],T()}),q.methods.set("removeItem",(B)=>{Z=Z.filter((b)=>b.id!==B),T()});let{animateScroll:v,cancelScroll:u}=Sj(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(B,b)=>{let x=$.dataToLayoutIndex(B),{align:g,behavior:m,duration:o}=Hj(b),i=q.dataManager.getTotal(),r=Zj(x,q.heightCache,q.state.viewportState.containerHeight,i,g,q.getCachedCompression());if(m==="smooth")v(q.scrollController.getScrollTop(),r,o);else u(),q.scrollController.scrollTo(r)}),q.methods.set("_getItems",()=>Z),q.methods.set("_getTotal",()=>Z.length),q.destroyHandlers.push(()=>{if(I!==null)cancelAnimationFrame(I),I=null;if(j)j.destroy(),j=null;X.root.classList.remove(`${W}--grouped`)})},destroy(){if(j)j.destroy(),j=null}}},Qj=300,Tj=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,I=null,Sj=(J,$)=>{let j=()=>{if(I!==null)cancelAnimationFrame(I),I=null};return{animateScroll:(Q,q,X)=>{if(j(),Math.abs(q-Q)<1){J.scrollTo(q);return}let M=performance.now(),D=(W)=>{let F=W-M,P=Math.min(F/X,1),Y=Q+(q-Q)*Tj(P);if(J.scrollTo(Y),$(),P<1)I=requestAnimationFrame(D);else I=null};I=requestAnimationFrame(D)},cancelScroll:j}},Hj=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:Qj};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??Qj};return{align:"start",behavior:"auto",duration:Qj}};export{Rj as withSections,h as isSectionHeader,h as isGroupHeader,qj as createStickyHeader,n as createGroupedHeightFn,jj as createGroupLayout,a as buildLayoutItems};
@@ -1,96 +1 @@
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;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);
55
- let z=J;
56
- U.on("selection:change",({selected:K})=>{let Q=K.length;
57
- if(Q===0)z.textContent="";
58
- else if(Q===1)z.textContent="1 item selected";
59
- else z.textContent=`${Q} items selected`}),q.clickHandlers.push((K)=>{if(q.state.isDestroyed)return;
60
- let M=K.target.closest("[data-index]");
61
- if(!M)return;
62
- let L=parseInt(M.dataset.index??"-1",10);
63
- if(L<0)return;
64
- let Y=q.dataManager.getItem(L);
65
- if(!Y)return;
66
- 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;
67
- let Q=q.dataManager.getTotal(),M=j.focusedIndex,L=!1,Y=!1,_=j;
68
- switch(K.key){case"ArrowUp":_=u(j,Q),L=!0,Y=!0;
69
- break;
70
- case"ArrowDown":_=v(j,Q),L=!0,Y=!0;
71
- break;
72
- case"Home":_=R(j,Q),L=!0,Y=!0;
73
- break;
74
- case"End":_=S(j,Q),L=!0,Y=!0;
75
- break;
76
- case" ":case"Enter":if(j.focusedIndex>=0){let Z=q.dataManager.getItem(j.focusedIndex);
77
- if(Z)_=V(j,Z.id,B);
78
- L=!0}
79
- break}
80
- if(L){K.preventDefault(),j=_;
81
- let Z=j.focusedIndex;
82
- if(Z>=0){let N=q.dataManager.getState(),P=p(Z,q.heightCache,q.state.viewportState.containerHeight,N.total,"center",q.getCachedCompression());
83
- q.scrollController.scrollTo(P),X.root.setAttribute("aria-activedescendant",`${T}-item-${Z}`)}
84
- else X.root.removeAttribute("aria-activedescendant");
85
- if(Y){let{selected:N}=j;
86
- if(M>=0&&M!==Z){let P=q.dataManager.getItem(M);
87
- if(P)q.renderer.updateItemClasses(M,N.has(P.id),!1)}
88
- if(Z>=0){let P=q.dataManager.getItem(Z);
89
- if(P)q.renderer.updateItemClasses(Z,N.has(P.id),!0)}}
90
- 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;
91
- let K=q.getAllLoadedItems();
92
- j=C(j,K,B),A()}),q.methods.set("clearSelection",()=>{j=f(j);
93
- let{renderRange:K,isCompressed:Q}=q.state.viewportState,M=q.getItemsForRange(K),L=Q?q.getCompressionContext():void 0;
94
- 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();
95
- J=null}}};
96
- 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;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:x}=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"}})},g=()=>{if(q.state.isDestroyed)return;W(),b()},I=()=>{if(q.state.isDestroyed)return;x(),b()};q.setRenderFns(g,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,21 +1 @@
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};
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};