vlist 2.0.0 → 2.0.2

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 (91) hide show
  1. package/README.github.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/core/dom.d.ts +1 -1
  4. package/dist/core/index.d.ts +1 -1
  5. package/dist/core/pipeline.d.ts +2 -2
  6. package/dist/core/scroll.d.ts +1 -1
  7. package/dist/core/types.d.ts +7 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +1 -28
  10. package/dist/internals.js +1 -60
  11. package/dist/plugins/scrollbar/controller.d.ts +3 -3
  12. package/dist/plugins/scrollbar/scrollbar.d.ts +2 -2
  13. package/dist/rendering/renderer.d.ts +2 -2
  14. package/dist/rendering/viewport.d.ts +1 -1
  15. package/dist/size.json +1 -1
  16. package/dist/types.d.ts +1 -1
  17. package/package.json +1 -1
  18. package/dist/constants.js +0 -83
  19. package/dist/core/create.js +0 -740
  20. package/dist/core/dom.js +0 -47
  21. package/dist/core/hooks.js +0 -67
  22. package/dist/core/index.js +0 -13
  23. package/dist/core/pipeline.js +0 -307
  24. package/dist/core/pool.js +0 -42
  25. package/dist/core/scroll.js +0 -137
  26. package/dist/core/sizes.js +0 -6
  27. package/dist/core/state.js +0 -56
  28. package/dist/core/types.js +0 -7
  29. package/dist/core/velocity.js +0 -33
  30. package/dist/events/emitter.js +0 -60
  31. package/dist/events/index.js +0 -6
  32. package/dist/plugins/a11y/index.js +0 -1
  33. package/dist/plugins/a11y/plugin.js +0 -259
  34. package/dist/plugins/async/index.js +0 -12
  35. package/dist/plugins/async/manager.js +0 -568
  36. package/dist/plugins/async/placeholder.js +0 -154
  37. package/dist/plugins/async/plugin.js +0 -311
  38. package/dist/plugins/async/sparse.js +0 -540
  39. package/dist/plugins/autosize/index.js +0 -4
  40. package/dist/plugins/autosize/plugin.js +0 -185
  41. package/dist/plugins/grid/index.js +0 -5
  42. package/dist/plugins/grid/layout.js +0 -275
  43. package/dist/plugins/grid/plugin.js +0 -347
  44. package/dist/plugins/grid/renderer.js +0 -525
  45. package/dist/plugins/grid/types.js +0 -11
  46. package/dist/plugins/groups/async-bridge.js +0 -246
  47. package/dist/plugins/groups/index.js +0 -13
  48. package/dist/plugins/groups/layout.js +0 -294
  49. package/dist/plugins/groups/plugin.js +0 -571
  50. package/dist/plugins/groups/sticky.js +0 -255
  51. package/dist/plugins/groups/types.js +0 -12
  52. package/dist/plugins/masonry/index.js +0 -6
  53. package/dist/plugins/masonry/layout.js +0 -261
  54. package/dist/plugins/masonry/plugin.js +0 -381
  55. package/dist/plugins/masonry/renderer.js +0 -354
  56. package/dist/plugins/masonry/types.js +0 -9
  57. package/dist/plugins/page/index.js +0 -5
  58. package/dist/plugins/page/plugin.js +0 -166
  59. package/dist/plugins/scale/index.js +0 -4
  60. package/dist/plugins/scale/plugin.js +0 -507
  61. package/dist/plugins/scrollbar/controller.js +0 -574
  62. package/dist/plugins/scrollbar/index.js +0 -6
  63. package/dist/plugins/scrollbar/plugin.js +0 -93
  64. package/dist/plugins/scrollbar/scrollbar.js +0 -556
  65. package/dist/plugins/selection/index.js +0 -7
  66. package/dist/plugins/selection/plugin.js +0 -601
  67. package/dist/plugins/selection/state.js +0 -332
  68. package/dist/plugins/snapshots/index.js +0 -5
  69. package/dist/plugins/snapshots/plugin.js +0 -301
  70. package/dist/plugins/sortable/index.js +0 -6
  71. package/dist/plugins/sortable/plugin.js +0 -753
  72. package/dist/plugins/table/header.js +0 -501
  73. package/dist/plugins/table/index.js +0 -12
  74. package/dist/plugins/table/layout.js +0 -211
  75. package/dist/plugins/table/plugin.js +0 -391
  76. package/dist/plugins/table/renderer.js +0 -625
  77. package/dist/plugins/table/types.js +0 -12
  78. package/dist/plugins/transition/index.js +0 -5
  79. package/dist/plugins/transition/plugin.js +0 -405
  80. package/dist/rendering/aria.js +0 -23
  81. package/dist/rendering/index.js +0 -18
  82. package/dist/rendering/measured.js +0 -98
  83. package/dist/rendering/renderer.js +0 -586
  84. package/dist/rendering/scale.js +0 -267
  85. package/dist/rendering/scroll.js +0 -71
  86. package/dist/rendering/sizes.js +0 -193
  87. package/dist/rendering/sort.js +0 -65
  88. package/dist/rendering/viewport.js +0 -268
  89. package/dist/types.js +0 -5
  90. package/dist/utils/padding.js +0 -49
  91. package/dist/utils/stats.js +0 -124
package/dist/internals.js CHANGED
@@ -1,60 +1 @@
1
- /**
2
- * vlist/internals - Low-Level Exports
3
- *
4
- * Advanced utilities for feature authors, custom renderers, and power users.
5
- * These are implementation details — use at your own risk.
6
- *
7
- * For the stable public API, import from 'vlist' instead.
8
- *
9
- * @packageDocumentation
10
- */
11
- // =============================================================================
12
- // Groups domain
13
- // =============================================================================
14
- export { createGroupLayout, buildLayoutItems, createGroupedSizeFn, createStickyHeader, isGroupHeader, } from "./plugins/groups";
15
- // =============================================================================
16
- // Grid domain
17
- // =============================================================================
18
- export { createGridLayout, } from "./plugins/grid";
19
- export { createGridRenderer, } from "./plugins/grid/renderer";
20
- // =============================================================================
21
- // Table domain
22
- // =============================================================================
23
- export { createTableLayout, createTableHeader, createTableRenderer, } from "./plugins/table";
24
- // =============================================================================
25
- // Masonry domain
26
- // =============================================================================
27
- export { createMasonryLayout, createMasonryRenderer, } from "./plugins/masonry";
28
- // =============================================================================
29
- // Rendering domain (virtual scrolling, size cache, scaling)
30
- // =============================================================================
31
- export {
32
- // Size cache (variable item sizes - works for both vertical and horizontal)
33
- createSizeCache,
34
- // Measured size cache (auto-measurement for Mode B)
35
- createMeasuredSizeCache,
36
- // Virtual scrolling calculations
37
- simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges,
38
- // Scale utilities (for handling 1M+ items)
39
- MAX_VIRTUAL_SIZE, getCompressionState as getScaleState, getCompression as getScale, needsCompression as needsScaling, getMaxItemsWithoutCompression as getMaxItemsWithoutScaling, getCompressionInfo as getScaleInfo, calculateCompressedVisibleRange as calculateScaledVisibleRange, calculateCompressedRenderRange as calculateScaledRenderRange, calculateCompressedItemPosition as calculateScaledItemPosition, calculateCompressedScrollToIndex as calculateScaledScrollToIndex, calculateIndexFromScrollPosition, } from "./rendering";
40
- // =============================================================================
41
- // Selection domain
42
- // =============================================================================
43
- export { createSelectionState, selectItems, deselectItems, toggleSelection, selectAll, clearSelection, isSelected, getSelectedIds, } from "./plugins/selection";
44
- export { getSelectedItemsImmutable as getSelectedItems } from "./plugins/selection/state";
45
- // =============================================================================
46
- // Events domain
47
- // =============================================================================
48
- export { createEmitter } from "./events";
49
- // =============================================================================
50
- // Async domain
51
- // =============================================================================
52
- export { createDataManager as createAsyncManager, createSparseStorage, createPlaceholderManager, isPlaceholderItem, filterPlaceholders, mergeRanges, calculateMissingRanges, } from "./plugins/async";
53
- // =============================================================================
54
- // Scrollbar domain
55
- // =============================================================================
56
- export { createScrollController, createScrollbar, rafThrottle, } from "./plugins/scrollbar";
57
- // =============================================================================
58
- // Stats utility
59
- // =============================================================================
60
- export { createStats, } from "./utils/stats";
1
+ var v2=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var x2=(J,Q)=>{let q=0,$=J.length-1;while(q<$){let j=q+$+1>>>1;if(J[j].headerLayoutIndex<=Q)q=j;else $=j-1}return q},a2=(J,Q)=>{let q=0,$=J.length-1;while(q<$){let j=q+$+1>>>1;if(J[j].firstDataIndex<=Q)q=j;else $=j-1}return q},n2=(J,Q,q)=>{if(J===0)return[];let $=[],j=null,Y=0,B=0;for(let G=0;G<J;G++){let P=q?.(G);if(!P)continue;let M=Q(G,P);if(j===null)j=M,Y=0;else if(M!==j){let y=G-Y;$.push({key:j,groupIndex:$.length,headerLayoutIndex:B,firstDataIndex:Y,count:y}),B=B+1+y,j=M,Y=G}}if(j!==null)$.push({key:j,groupIndex:$.length,headerLayoutIndex:B,firstDataIndex:Y,count:J-Y});return $},s2=(J,Q)=>{if(J.length===0||Q.length===0)return[];let q=J.length+Q.length,$=Array(q),j=0;for(let Y of Q){$[j]={id:`__group_header_${Y.groupIndex}`,__groupHeader:!0,groupKey:Y.key,groupIndex:Y.groupIndex},j++;for(let B=0;B<Y.count;B++)$[j]=J[Y.firstDataIndex+B],j++}return $},o2=(J,Q,q=!1)=>{let $=typeof Q==="number"?(j)=>Q:Q;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header"){if(q&&Y.group.groupIndex===0)return 0;return J.getHeaderHeight(Y.group.groupIndex)}return $(Y.dataIndex)}},i2=(J,Q,q)=>{let $=n2(J,Q.getGroupForIndex,q),j=J+$.length,Y=Q.header?.height??Q.header?.width??Q.headerHeight;return{get totalEntries(){return j},get groupCount(){return $.length},get groups(){return $},getEntry:(F)=>{if($.length===0)return{type:"item",dataIndex:F,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let V=x2($,F),W=$[V];if(F===W.headerLayoutIndex)return{type:"header",group:W};let _=F-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+_,group:W}},layoutToDataIndex:(F)=>{if($.length===0)return F;let V=x2($,F),W=$[V];if(F===W.headerLayoutIndex)return-1;let _=F-W.headerLayoutIndex-1;return W.firstDataIndex+_},dataToLayoutIndex:(F)=>{if($.length===0)return F;let V=a2($,F),W=$[V],_=F-W.firstDataIndex;return W.headerLayoutIndex+1+_},getGroupAtLayoutIndex:(F)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let V=x2($,F);return $[V]},getGroupAtDataIndex:(F)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let V=a2($,F);return $[V]},getHeaderHeight:typeof Y==="number"?(F)=>Y:(F)=>{let V=$[F];if(!V)return 0;return Y(V.key,F)},rebuild:(F,V)=>{$=n2(F,Q.getGroupForIndex,V??q),j=F+$.length}}};var xJ=(J,Q,q,$,j=0)=>{let Y=q?"width":"height",B=document.createElement("div");return B.className=`${Q}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.cssText="position:relative;z-index:5;pointer-events:none;overflow:hidden;"+(q?`top:0;bottom:0;left:${j||0}px`:`top:${j||0}px`),B.style[Y]=`${$}px`,J.insertBefore(B,J.firstChild),B},t2=(J,Q,q,$,j,Y=!1,B=0,G,P)=>{let M=Y?"width":"height",y=Y?"height":"width",v=Y?"X":"Y",O=(E,U)=>{E.style[M]=`${U}px`},F=P??xJ(J,j,Y,0,B),V=()=>{let E=document.createElement("div");return E.className="sticky-group",E.style.position="absolute",E.style.willChange="transform",E.style[y]="100%",E},W=V(),_=V();F.append(W,_);let X=W,T=_,k=Q.groups,w=[],I=[],g=[],u=0,Y2=()=>{k=Q.groups,u=k.length,w=Array(u),I=Array(u),g=Array(u);let E=G?G():1;for(let U=0;U<u;U++)w[U]=q.getOffset(k[U].headerLayoutIndex)*E,I[U]=Q.getHeaderHeight(U),g[U]=I[U]*E};Y2();let o=-1,i=0,$2=0,N2=-1,j2=!1,r=0,d=!1,J2=(E,U)=>{$(E,U);let R=I[U];return O(E,R),R},L=(E)=>{E.replaceChildren(),E.style.transform=""},N=(E)=>{if(E===o)return;if(o=E,i=0,$2=0,E<0||E>=u){L(X);return}i=J2(X,E),$2=g[E],O(F,i),X.style.transform=""},K=(E)=>{if(E===r)return;r=E;let U=Math.round(E);X.style.transform=`translate${v}(${U}px)`,T.style.transform=`translate${v}(${U+i}px)`},D=()=>{r=0,X.style.transform="",T.style.transform=""},C=()=>{if(!d)return;let E=X;X=T,T=E,o=N2,i=o>=0?I[o]:0,$2=o>=0?g[o]:0,O(F,i),L(T),N2=-1,d=!1,D()},c=()=>{if(!d)return;L(T),N2=-1,d=!1,D()},l=!!P,S=()=>{if(j2)return;if(j2=!0,l)F.style.visibility="";else F.style.display=""},Z=()=>{if(!j2)return;if(j2=!1,l)F.style.visibility="hidden";else F.style.display="none";L(X),o=-1,i=0,$2=0,c()},H=(E)=>{if(u===0){Z();return}if(E<w[0]){Z();return}let U=0,R=u-1;while(U<R){let x=U+R+1>>>1;if(w[x]+g[x]<=E)U=x;else R=x-1}if(!j2)S();N(U);let b=U+1;if(b<u){let x=w[b]-E;if(x<=0&&x>-$2){if(N2!==b||!d)N2=b,J2(T,b),d=!0;let p=$2>0?x/$2*i:x;K(p)}else if(x<=-$2){if(d)C()}else if(d)c()}else if(d)c()},A=()=>{Y2();let E=o;if(o=-1,i=0,$2=0,E>=0)N(E)},z=()=>{F.remove(),o=-1,i=0,$2=0,N2=-1,j2=!1,d=!1};if(!P)F.style.display="none";return{update:H,refresh:A,show:S,hide:Z,destroy:z}};var e2=(J)=>{let Q=Math.max(1,Math.floor(J.columns)),q=J.gap??0,$=J.isHeaderFn,j={row:0,col:0},Y=(V)=>{if(V<=0)return 0;if(!$)return Math.ceil(V/Q);let W=0,_=0,X=0;for(let T=0;T<V;T++)if($(T)){if(X++,_)W++,_=0;W++,_=0}else if(_++,_>=Q)W++,_=0;if(_)W++;return W},B=(V)=>{return j.row=G(V),j.col=P(V),j},G=(V)=>{if(!$)return Math.floor(V/Q);let W=0,_=0;for(let X=0;X<=V;X++)if($(X)){if(_)W++,_=0;if(X===V)return W;W++,_=0}else{if(X===V)return W;if(_++,_>=Q)W++,_=0}return console.warn(`⚠️ getRow(${V}) fell through - returning ${W}`),W},P=(V)=>{if(!$)return V%Q;if($(V))return 0;let W=0;for(let _=0;_<=V;_++)if($(_))W=0;else{if(_===V)return W;if(W++,W>=Q)W=0}return W},M=(V,W,_)=>{if(_<=0)return{start:0,end:-1};if(!$){let I=Math.max(0,V*Q),g=Math.min(_-1,(W+1)*Q-1);return{start:I,end:g}}let X=-1,T=-1,k=0,w=0;for(let I=0;I<_;I++){if($(I)){if(w)k++,w=0;if(k>=V&&k<=W){if(X<0)X=I;T=I}k++,w=0}else{if(k>=V&&k<=W){if(X<0)X=I;T=I}if(w++,w>=Q)k++,w=0}if(k>W&&!w)break}if(X<0)return{start:0,end:-1};return{start:X,end:T}},y=(V,W,_)=>{if(W<0||W>=Q)return-1;let X=V*Q+W;if(X<0||X>=_)return-1;return X},v=(V)=>{let W=(Q-1)*q;return Math.max(0,(V-W)/Q)};return{get columns(){return Q},get gap(){return q},update:(V)=>{if(V.columns!==void 0)Q=Math.max(1,Math.floor(V.columns));if(V.gap!==void 0)q=V.gap;if(V.isHeaderFn!==void 0)$=V.isHeaderFn},getTotalRows:Y,getPosition:B,getRow:G,getCol:P,getItemRange:M,getItemIndex:y,getColumnWidth:v,getColumnOffset:(V,W)=>{let _=v(W);return V*(_+q)}}};var H2=16000000;var JJ="x",QJ=20,g2="_isPlaceholder",R2="__placeholder_";var y2=(J,Q,q)=>{if(String(q).startsWith(R2))return!1;let $=R2+Q;if(J.has($))return J.delete($),J.add(q),!0;return!1},$J=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),u2=(J,Q,q)=>{if(q==="none")return J;let $=new Set(J.selected);if(q==="single"){if($.clear(),Q.length>0)$.add(Q[0])}else for(let j of Q)$.add(j);return{...J,selected:$}},m2=(J,Q)=>{let q=new Set(J.selected);for(let $ of Q)q.delete($);return{...J,selected:q}},qJ=(J,Q,q)=>{if(q==="none")return J;if(J.selected.has(Q))return m2(J,[Q]);else return u2(J,[Q],q)},YJ=(J,Q,q)=>{if(q!=="multiple")return J;return{...J,selected:new Set(Q.map(($)=>$.id))}},jJ=(J)=>({...J,selected:new Set});var BJ=(J,Q)=>{return J.selected.has(Q)},UJ=(J)=>{return Array.from(J.selected)},NJ=(J,Q)=>{let q=[];for(let $ of J.selected){let j=Q($);if(j)q.push(j)}return q};var gJ=(J,Q)=>{let q=Q;return{getOffset:($)=>$*J,getSize:($)=>J,indexAtOffset:($)=>{if(q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor($/J),q-1))},getTotalSize:()=>q*J,getTotal:()=>q,rebuild:($)=>{q=$},isVariable:()=>!1}},uJ=(J,Q)=>{let q=Q,$=new Float64Array(0),j=(B)=>{q=B,$=new Float64Array(B+1),$[0]=0;for(let G=0;G<B;G++)$[G+1]=$[G]+J(G)};j(Q);let Y=(B)=>{if(q===0)return 0;if(B<=0)return 0;if(B>=$[q])return q-1;let G=0,P=q-1;while(G<P){let M=G+P+1>>>1;if($[M]<=B)G=M;else P=M-1}return G};return{getOffset:(B)=>{if(B<=0)return 0;if(B>=q)return $[q];return $[B]},getSize:(B)=>J(B),indexAtOffset:(B)=>Y(B),getTotalSize:()=>$[q]??0,getTotal:()=>q,rebuild:(B)=>j(B),isVariable:()=>!0}},k2=(J,Q)=>{if(typeof J==="number")return gJ(J,Q);return uJ(J,Q)},d2=(J,Q,q,$)=>{if($===0)return 0;if(!J.isVariable())return Math.ceil(q/J.getSize(0));let j=0,Y=0,B=Q;while(B<$&&Y<q)Y+=J.getSize(B),j++,B++;return Math.max(1,j)};var w2=(J,Q,q)=>{let $=Q.getTotalSize(),j=q===!0||$>H2,Y=$>H2?H2:$,B=$>0?Y/$:1;return{isCompressed:j,actualSize:$,virtualSize:Y,ratio:B}},KJ=(J,Q,q,$,j,Y)=>{if($===0||Q===0)return Y.start=0,Y.end=-1,Y;if(!j.isCompressed||j.ratio===1){let F=q.indexAtOffset(J),V=q.indexAtOffset(J+Q);if(V<$-1)V++;return Y.start=Math.max(0,F),Y.end=Math.min($-1,Math.max(0,V)),Y}let{virtualSize:B}=j,G=J/B,P=q.getTotalSize(),M=G*P,y=q.indexAtOffset(M),v=d2(q,Math.max(0,y),Q,$),O=y+v;return Y.start=Math.max(0,y),Y.end=Math.min($-1,Math.max(0,O)),Y},ZJ=(J,Q,q,$)=>{if(q===0)return $.start=0,$.end=-1,$;return $.start=Math.max(0,J.start-Q),$.end=Math.min(q-1,J.end+Q),$},P2=(J,Q,q,$,j,Y,B)=>{if(!Y.isCompressed||$===0)return q.getOffset(J);if(Y.ratio===1)return q.getOffset(J)-Q;let{virtualSize:G}=Y,P=Q/G,M=q.getTotalSize(),y=P*M;return q.getOffset(J)-y},_J=(J,Q,q,$,j,Y="start")=>{if($===0)return 0;let B;if(j.isCompressed&&j.ratio!==1){B=J/$*j.virtualSize;let y=Q.getSize(J);switch(Y){case"center":B-=(q-y)/2*j.ratio;break;case"end":B-=(q-y)*j.ratio;break}return Math.max(0,B)}B=Q.getOffset(J);let G=Q.getSize(J);switch(Y){case"center":B-=(q-G)/2;break;case"end":B-=q-G;break}let P=j.virtualSize-q;return Math.max(0,Math.min(B,P))},WJ=(J,Q,q,$)=>{if(q===0)return 0;if($.isCompressed&&$.ratio!==1){let j=J/$.virtualSize;return Math.floor(j*q)}return Q.indexAtOffset(J)},VJ=(J,Q)=>{if(typeof Q==="number")return J*Q>H2;return Q.getTotalSize()>H2},MJ=(J)=>{if(J<=0)return 0;return Math.floor(H2/J)},DJ=(J,Q,q)=>{let $=w2(J,Q,q);if(!$.isCompressed)return`No compression needed (${J} items, ${($.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${J} items, ${($.actualSize/1e6).toFixed(1)}M px → ${($.virtualSize/1e6).toFixed(1)}M px virtual)`};var C2=(J,Q,q)=>{let $=Array.from(Q).sort((B,G)=>B-G);if($.length<=1)return;let j=[];for(let B=0;B<$.length;B++){let G=q($[B]);if(G)j.push(G)}if(j.length<=1)return;let Y=J.firstChild;for(let B=0;B<j.length;B++){let G=j[B];if(G===Y)Y=Y.nextSibling;else J.insertBefore(G,Y)}};var mJ=(J=200)=>{let Q=[];return{acquire:()=>{let Y=Q.pop();if(Y)return Y;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(Y)=>{if(Y.remove(),Q.length<J)Y.className="",Y.textContent="",Y.removeAttribute("style"),Y.removeAttribute("data-index"),Y.removeAttribute("data-id"),Y.removeAttribute("data-row"),Y.removeAttribute("data-col"),Q.push(Y)},clear:()=>{Q.length=0}}},dJ=1,cJ=(J,Q,q,$,j,Y,B,G,P=!1,M,y)=>{let v=mJ(),O=new Map,F=Y,V=!1,W=0,_="",X=-1,T={selected:!1,focused:!1},k=(Z,H)=>{return T.selected=Z,T.focused=H,T},w=`${j}-item ${j}-grid-item`,I=`${j}-group-header`,g=`${j}-item--selected`,u=`${j}-item--focused`,Y2=`${j}-item--placeholder`,o=`${j}-item--replaced`,i=(Z,H)=>{if(typeof H==="string")Z.innerHTML=H;else Z.replaceChildren(H)},$2=(Z,H,A)=>{Z.classList.toggle(g,H),Z.classList.toggle(u,A)},N2=(Z,H)=>{let A=$.getRow(Z);if(H?.compression?.isCompressed)return P2(A,H.scrollPosition,q,H.totalItems,H.containerSize,H.compression,H.rangeStart);return q.getOffset(A)},j2=(Z,H)=>{let A=$.getCol(Z),E=V&&A===0?0:$.getColumnOffset(A,F),U;if(V){let R=$.getRow(Z),b=0,x=-1;for(let p=0;p<Z;p++){let m=$.getRow(p);if(m<R&&m!==x){let s=q.getSize(p);b+=s,x=m}}U=b}else U=N2(Z,H);if(P)return`translate(${Math.round(U)}px, ${Math.round(E)}px)`;return`translate(${Math.round(E)}px, ${Math.round(U)}px)`},r=(Z,H)=>{let A=Z.classList.contains(I),z=A?F:$.getColumnWidth(F),E;if(V||A)E=q.getSize(H)-$.gap;else{let U=$.getRow(H);E=q.getSize(U)-$.gap}if(P)Z.style.width=`${E}px`,Z.style.height=`${z}px`;else Z.style.width=`${z}px`,Z.style.height=`${E}px`},d=(Z,H,A,z,E)=>{let U=v.acquire(),R=!!H.__groupHeader,b=k(A,z);if(U.className=R?I:w,U.dataset.index=String(Z),U.dataset.id=String(H.id),U.dataset.row=String($.getRow(Z)),U.dataset.col=String($.getCol(Z)),R)U.setAttribute("role","presentation"),U.removeAttribute("aria-selected"),U.removeAttribute("aria-setsize"),U.removeAttribute("aria-posinset"),U.removeAttribute("id");else if(y!==!1){if(U.setAttribute("role","option"),U.ariaSelected=String(A),G)U.id=`${G}-item-${Z}`;if(B){let m=B();if(m!==X)X=m,_=String(m);U.setAttribute("aria-setsize",_);let s=M?M(Z):Z+1;U.setAttribute("aria-posinset",String(s))}}else if(U.setAttribute("role","listitem"),U.removeAttribute("aria-selected"),B){let m=B();if(m!==X)X=m,_=String(m);U.setAttribute("aria-setsize",_);let s=M?M(Z):Z+1;U.setAttribute("aria-posinset",String(s))}r(U,Z);let x=Q(H,Z,b);if(i(U,x),String(H.id).startsWith(R2))U.classList.add(Y2);return $2(U,A,z),U.style.transform=E,{element:U,lastItemId:H.id,lastSelected:A,lastFocused:z,lastTransform:E,lastSeenFrame:W}},J2=(Z,H,A,z,E)=>{if(W++,H.start===0&&Z.length)V=v2(Z[0]);for(let[b,x]of O)if(b>=H.start&&b<=H.end)x.lastSeenFrame=W;else if(W-x.lastSeenFrame>dJ)v.release(x.element),O.delete(b);let U=!1;if(B){let b=B();if(b!==X)X=b,_=String(b),U=!0}let R=null;for(let b=H.start;b<=H.end;b++){let x=b-H.start,p=Z[x];if(!p)continue;let m=A.has(p.id),s=b===z,e=O.get(b);if(e){let Z2=e.lastItemId!==p.id,Q2=e.lastSelected!==m,h=e.lastFocused!==s;if(Z2){let a=String(e.lastItemId),q2=String(p.id),U2=a.startsWith(R2),n=q2.startsWith(R2);if(!n&&y2(A,b,p.id))m=!0;let M2=k(m,s),E2=Q(p,b,M2);if(i(e.element,E2),e.element.dataset.id=q2,e.element.dataset.row=String($.getRow(b)),e.element.dataset.col=String($.getCol(b)),r(e.element,b),e.element.classList.toggle(Y2,n),U2&&!n)e.element.classList.add(o),setTimeout(()=>e.element.classList.remove(o),300);if(e.lastItemId=p.id,!p.__groupHeader){let V2=M?M(b):b+1;e.element.setAttribute("aria-posinset",String(V2))}}if(Z2||Q2||h)$2(e.element,m,s),e.element.ariaSelected=String(m),e.lastSelected=m,e.lastFocused=s;let f=j2(b,E);if(e.lastTransform!==f)e.element.style.transform=f,e.lastTransform=f;if(U&&!p.__groupHeader)e.element.setAttribute("aria-setsize",_)}else{if(y2(A,b,p.id))m=!0;let Z2=j2(b,E),Q2=d(b,p,m,s,Z2);if(!R)R=document.createDocumentFragment();R.appendChild(Q2.element),O.set(b,Q2)}}if(R)J.appendChild(R)},L=(Z)=>{for(let[H,A]of O){let z=j2(H,Z);if(A.lastTransform!==z)A.element.style.transform=z,A.lastTransform=z}},N=(Z,H,A,z)=>{let E=O.get(Z);if(!E)return;let U=k(A,z),R=Q(H,Z,U);i(E.element,R),$2(E.element,A,z),E.element.dataset.id=String(H.id),E.element.ariaSelected=String(A),r(E.element,Z),E.lastItemId=H.id,E.lastSelected=A,E.lastFocused=z},K=(Z,H,A)=>{let z=O.get(Z);if(!z)return;let E=z.lastSelected!==H,U=z.lastFocused!==A;if(E||U)$2(z.element,H,A),z.lastSelected=H,z.lastFocused=A},D=(Z)=>{return O.get(Z)?.element},C=(Z)=>{if(Math.abs(Z-F)<1)return;F=Z;for(let[H,A]of O){r(A.element,H);let z=j2(H);A.element.style.transform=z,A.lastTransform=z}},c=()=>{C2(J,O.keys(),(Z)=>O.get(Z)?.element)},l=()=>{for(let[,Z]of O)v.release(Z.element);O.clear()};return{render:J2,updatePositions:L,updateItem:N,updateItemClasses:K,getElement:D,sortDOM:c,updateContainerWidth:C,clear:l,destroy:()=>{l(),v.clear()}}};var GJ=(J,Q=50,q=1/0,$=!0)=>{let j=J,Y=[],B=0,G=()=>{Y=j.map((_,X)=>({def:_,index:X,width:0,minWidth:rJ(_.minWidth??Q,1),maxWidth:_.maxWidth??q,resizable:_.resizable??$,offset:0}))},P=(_)=>{if(Y.length===0){B=0;return}let X=0,T=0;for(let k=0;k<Y.length;k++){let w=Y[k],I=w.def;if(I.width!==void 0)w.width=c2(I.width,w.minWidth,w.maxWidth),X+=w.width;else T++}if(T){let w=Math.max(0,_-X)/T;for(let I=0;I<Y.length;I++){let g=Y[I];if(g.def.width===void 0)g.width=c2(w,g.minWidth,g.maxWidth)}}M()},M=()=>{let _=0;for(let X=0;X<Y.length;X++){let T=Y[X];T.offset=_,_+=T.width}B=_},y=(_,X)=>{if(_<0||_>=Y.length)return 0;let T=Y[_];if(!T.resizable)return T.width;let k=c2(X,T.minWidth,T.maxWidth);return T.width=k,M(),k},v=(_)=>{return Y[_]},O=(_)=>{if(Y.length===0)return;if(_<0)return Y[0];if(_>=B)return Y[Y.length-1];let X=0,T=Y.length-1;while(X<T){let k=X+T>>>1,w=Y[k];if(_<w.offset)T=k-1;else if(_>=w.offset+w.width)X=k+1;else return w}return Y[X]},F=(_)=>{if(_<0||_>=Y.length)return 0;return Y[_].offset},V=(_)=>{if(_<0||_>=Y.length)return 0;return Y[_].width},W=(_)=>{j=_,G()};return G(),{get columns(){return Y},get totalWidth(){return B},resolve:P,updateColumns:W,resizeColumn:y,getColumn:v,getColumnAtX:O,getColumnOffset:F,getColumnWidth:V}},c2=(J,Q,q)=>Math.min(q,Math.max(Q,J)),rJ=(J,Q)=>Math.max(Q,J);var OJ=(J,Q,q,$,j,Y)=>{let B=document.createElement("div");B.setAttribute("role","rowgroup");let G=document.createElement("div");G.className=`${q}-table-header`,G.setAttribute("role","row"),G.setAttribute("aria-rowindex","1"),G.style.height=`${Q}px`;let P=document.createElement("div");P.className=`${q}-table-header-scroll`,P.setAttribute("role","presentation"),G.appendChild(P),B.appendChild(G),J.insertBefore(B,J.firstChild),J.style.setProperty("--vlist-table-header-height",`${Q}px`);let M=[],y=[],v=!0,O=null,F="asc",V=null,W=!1,_=-1,X=0,T=0,k=0,w=(N,K)=>{let D=document.createElement("div");D.className=`${q}-table-header-cell`,D.setAttribute("role","columnheader"),D.setAttribute("aria-colindex",String(K+1)),D.setAttribute("tabindex",K===0?"0":"-1"),D.dataset.columnKey=N.def.key;let C=N.def.align;if(C==="center")D.classList.add(`${q}-table-header-cell--center`);else if(C==="right")D.classList.add(`${q}-table-header-cell--right`);let c=document.createElement("div");c.className=`${q}-table-header-content`;let l=N.def.header?N.def.header(N.def):N.def.label;if(typeof l==="string")c.textContent=l;else c.appendChild(l);if(D.appendChild(c),N.def.sortable){let S=document.createElement("span");S.className=`${q}-table-header-sort`,S.setAttribute("aria-hidden","true"),D.appendChild(S),y.push(S),D.classList.add(`${q}-table-header-cell--sortable`)}else y.push(null);if(N.resizable){let S=document.createElement("div");S.className=`${q}-table-header-resize`,S.dataset.resizeIndex=String(K),D.appendChild(S)}return D},I=(N)=>{V=N,P.textContent="",M=[],y=[];let K=N.columns;for(let D=0;D<K.length;D++){let C=K[D],c=w(C,D);M.push(c),P.appendChild(c)}if(g(N),O)u(O,F)},g=(N)=>{V=N;let K=N.columns;P.style.width=`${N.totalWidth}px`;for(let D=0;D<M.length&&D<K.length;D++){let C=M[D],c=K[D];C.style.width=`${c.width}px`}},u=(N,K)=>{if(O=N,F=K,!V)return;let D=V.columns;for(let C=0;C<y.length&&C<D.length;C++){let c=y[C];if(!c)continue;if(D[C].def.key===N)c.textContent=K==="asc"?"▲":"▼",c.style.opacity="0.7",M[C].setAttribute("aria-sort",K==="asc"?"ascending":"descending");else c.textContent="",c.style.opacity="0",M[C].removeAttribute("aria-sort")}},Y2=(N)=>{P.style.transform=`translateX(${-N}px)`},o=(N)=>{let K=N.target;if(!K.dataset.resizeIndex)return;if(N.preventDefault(),N.stopPropagation(),_=+K.dataset.resizeIndex,!V)return;let D=V.getColumn(_);if(!D?.resizable)return;W=!0,X=N.clientX,T=D.width,J.classList.add(`${q}--col-resizing`),J.style.cursor="col-resize",K.classList.add(`${q}-table-header-resize--active`),K.setPointerCapture(N.pointerId),K.addEventListener("pointermove",i),K.addEventListener("pointerup",$2),K.addEventListener("pointercancel",$2)},i=(N)=>{if(!W||!V)return;let K=N.clientX-X;if(Math.abs(K)<1)return;let D=Math.max(0,T+K);$(_,D)},$2=(N)=>{if(!W)return;let K=N.target;K.removeEventListener("pointermove",i),K.removeEventListener("pointerup",$2),K.removeEventListener("pointercancel",$2);try{K.releasePointerCapture(N.pointerId)}catch{}K.classList.remove(`${q}-table-header-resize--active`),J.classList.remove(`${q}--col-resizing`),J.style.cursor="",W=!1,_=-1},N2=(N)=>{let K=N.target;if(K.dataset.resizeIndex)return;if(W)return;let D=K;while(D&&!D.dataset.columnKey)if(D=D.parentElement,D===G||D===null)return;let C=D.dataset.columnKey;if(!V)return;let c=V.columns,l=-1;for(let Z=0;Z<c.length;Z++)if(c[Z].def.key===C){l=Z;break}if(l===-1)return;let S=c[l];if(Y)Y({key:C,index:l,event:N});if(S.def.sortable&&j){let Z;if(O===C)Z=F==="asc"?"desc":null;else Z="asc";j({key:C,index:l,direction:Z})}},j2=(N)=>{if(N<0||N>=M.length)return;M[k]?.setAttribute("tabindex","-1"),k=N;let K=M[k];K.setAttribute("tabindex","0"),K.focus()},r=(N)=>{let K=N.key;if(K==="ArrowRight"){if(N.ctrlKey||N.metaKey){if(!V)return;let D=V.getColumn(k);if(D?.resizable)$(k,D.width+10),N.preventDefault()}else if(k<M.length-1)j2(k+1),N.preventDefault();N.stopPropagation();return}if(K==="ArrowLeft"){if(N.ctrlKey||N.metaKey){if(!V)return;let D=V.getColumn(k);if(D?.resizable)$(k,D.width-10),N.preventDefault()}else if(k>0)j2(k-1),N.preventDefault();N.stopPropagation();return}if(K==="Home"){j2(0),N.preventDefault(),N.stopPropagation();return}if(K==="End"){j2(M.length-1),N.preventDefault(),N.stopPropagation();return}if(K==="Enter"||K===" "){if(!V)return;let D=V.getColumn(k);if(D?.def.sortable&&j){let C;if(O===D.def.key)C=F==="asc"?"desc":null;else C="asc";j({key:D.def.key,index:k,direction:C}),N.preventDefault()}N.stopPropagation();return}if(K==="ArrowDown"){J.focus(),N.preventDefault(),N.stopPropagation();return}};return G.addEventListener("pointerdown",o),G.addEventListener("click",N2),G.addEventListener("keydown",r),{element:G,update:g,updateSort:u,rebuild:I,show:()=>{if(v)return;v=!0,G.style.display=""},hide:()=>{if(!v)return;v=!1,G.style.display="none"},destroy:()=>{G.removeEventListener("pointerdown",o),G.removeEventListener("click",N2),G.removeEventListener("keydown",r),J.style.removeProperty("--vlist-table-header-height"),B.remove(),M=[],y=[],V=null,v=!1},syncScroll:Y2}};var lJ=()=>{let J=[];return{acquire:()=>J.pop()||document.createElement("div"),release:(Q)=>{if(Q.parentNode?.removeChild(Q),J.length<200)Q.className="",Q.removeAttribute("data-id"),Q.removeAttribute("data-index"),Q.removeAttribute("aria-selected"),Q.removeAttribute("aria-rowindex"),Q.removeAttribute("role"),Q.style.cssText="",Q.textContent="",J.push(Q)},clear:()=>{J.length=0}}},XJ=(J,Q,q,$,j,Y,B,G,P)=>{let M=lJ(),y=new Map,v=-1,O=q,F=null,V=null,W=null,_=(U,R)=>{V=U,W=R},X=(U,R)=>{R?U.setAttribute("aria-selected","true"):U.removeAttribute("aria-selected")},T=(U,R,b,x)=>{U.setAttribute("role",R),U.setAttribute("data-id",String(b)),U.setAttribute("data-index",String(x))},k=(U)=>String(U).startsWith("__placeholder_"),w=`${j}-item ${j}-table-row`,I=`${j}-item--selected`,g=`${j}-item--focused`,u=`${j}-table-cell`,Y2=`${j}-table-cell--center`,o=`${j}-table-cell--right`,i=`${j}-item--odd`,$2=`${j}-item--placeholder`,N2=`${j}-item--replaced`,j2=`${j}-item ${j}-table-row ${j}-table-group-header`,r=`${j}-table-group-header-content`,d=(U,R,b,x,p=!1)=>{if(b.def.cell){let m=b.def.cell(R,b.def,x);if(typeof m==="string")U.innerHTML=m;else U.replaceChildren(m)}else{let m=R[b.def.key],s=m!=null?String(m):"";if(p&&s)U.innerHTML=`<span>${s}</span>`;else U.textContent=s}},J2=(U,R,b,x,p=!1)=>{let m=w;if(G){if(F){let s=F(R);if(s>=0&&(s&1)===1)m+=` ${i}`}else if((R&1)===1)m+=` ${i}`}if(p)m+=` ${$2}`;if(b)m+=` ${I}`;if(x)m+=` ${g}`;U.className=m},L=(U,R,b)=>{if(b?.compression?.isCompressed)return Math.round(P2(U,b.scrollPosition,R,b.totalItems,b.containerSize,b.compression,b.rangeStart));return R.getOffset(U)},N=(U,R)=>{let b=R.def.align;if(b==="center")U.classList.add(Y2),U.classList.remove(o);else if(b==="right")U.classList.add(o),U.classList.remove(Y2);else U.classList.remove(Y2,o)},K=(U,R)=>{let x=O.columns.length;if(R.length===x)return R;let p=[];for(let m=0;m<x;m++){let s;if(m<R.length)s=R[m];else s=document.createElement("div"),s.className=u,U.appendChild(s);p.push(s)}for(let m=x;m<R.length;m++)R[m].remove();return p},D=(U,R,b,x)=>{let p=M.acquire(),m=U,s=b.getSize(R),e=L(R,b,x);p.style.cssText=`width:${O.totalWidth}px;height:${s}px;transform:translateY(${e}px)`,p.className=j2,T(p,"presentation",U.id,R),p.removeAttribute("aria-selected"),p.removeAttribute("aria-rowindex"),p.replaceChildren();let Z2=document.createElement("div");if(Z2.className=r,W){let Q2=W(m.groupKey,m.groupIndex);if(typeof Q2==="string")Z2.innerHTML=Q2;else Z2.appendChild(Q2)}return p.appendChild(Z2),{element:p,cells:[],index:R,isGroupHeader:!0,lastItemId:U.id,lastSelected:!1,lastFocused:!1,lastOffset:e,lastHeight:s}},C=(U,R,b,x,p,m)=>{let s=M.acquire(),e=p.getSize(R),Z2=L(R,p,m),Q2=k(U.id);s.style.cssText=`width:${O.totalWidth}px;height:${e}px;transform:translateY(${Z2}px)`,J2(s,R,b,x,Q2),T(s,"row",U.id,R),s.id=`${Y}-item-${R}`,s.setAttribute("aria-rowindex",String(R+2)),X(s,b);let h=K(s,[]),f=O.columns;for(let a=0;a<h.length&&a<f.length;a++){let q2=h[a],U2=f[a];q2.style.cssText=`left:${U2.offset}px;width:${U2.width}px`,q2.setAttribute("role","gridcell"),q2.setAttribute("aria-colindex",String(a+1)),N(q2,U2),d(q2,U,U2,R,Q2)}return{element:s,cells:h,index:R,isGroupHeader:!1,lastItemId:U.id,lastSelected:b,lastFocused:x,lastOffset:Z2,lastHeight:e}},c=(U,R,b,x,p)=>{for(let[Q2,h]of y)if(Q2<R.start||Q2>R.end)M.release(h.element),y.delete(Q2);let m=!1,s=B();if(s!==v)v=s,m=!0;let e=null,Z2=Q();F=typeof G==="string"&&P?P():null;for(let Q2=R.start;Q2<=R.end;Q2++){let h=Q2-R.start,f=U[h];if(!f)continue;let a=b.has(f.id),q2=Q2===x,U2=V?V(f):!1,n=y.get(Q2);if(n){if(n.isGroupHeader!==U2){M.release(n.element),y.delete(Q2);let M2=U2?D(f,Q2,Z2,p):C(f,Q2,a,q2,Z2,p);if(y.set(Q2,M2),!e)e=document.createDocumentFragment();e.appendChild(M2.element);continue}if(U2){if(n.lastItemId!==f.id){let V2=f,G2=n.element.firstElementChild;if(G2&&W){let A2=W(V2.groupKey,V2.groupIndex);if(typeof A2==="string")G2.innerHTML=A2;else G2.replaceChildren(A2)}n.element.setAttribute("data-id",String(f.id)),n.lastItemId=f.id}let E2=L(Q2,Z2,p);if(n.lastOffset!==E2)n.lastOffset=E2,n.element.style.transform=`translateY(${E2}px)`;let B2=Z2.getSize(Q2);if(n.lastHeight!==B2)n.lastHeight=B2,n.element.style.height=`${B2}px`}else{let M2=n.lastItemId!==f.id,E2=n.lastSelected!==a,B2=n.lastFocused!==q2;if(M2){let A2=n.lastItemId!=null&&k(n.lastItemId),W2=k(f.id);if(!W2&&y2(b,Q2,f.id))a=!0;let O2=O.columns;for(let _2=0;_2<n.cells.length&&_2<O2.length;_2++)d(n.cells[_2],f,O2[_2],Q2,W2);if(J2(n.element,Q2,a,q2,W2),n.element.setAttribute("data-id",String(f.id)),X(n.element,a),A2&&!W2)n.element.classList.add(N2),setTimeout(()=>{n.element.classList.remove(N2)},300);n.lastItemId=f.id,n.lastSelected=a,n.lastFocused=q2}else if(E2||B2)J2(n.element,Q2,a,q2,k(f.id)),X(n.element,a),n.lastSelected=a,n.lastFocused=q2;let V2=L(Q2,Z2,p);if(n.lastOffset!==V2)n.lastOffset=V2,n.element.style.transform=`translateY(${V2}px)`;let G2=Z2.getSize(Q2);if(n.lastHeight!==G2)n.lastHeight=G2,n.element.style.height=`${G2}px`;if(m)n.element.setAttribute("aria-rowindex",String(Q2+2))}}else{if(y2(b,Q2,f.id))a=!0;let M2=U2?D(f,Q2,Z2,p):C(f,Q2,a,q2,Z2,p);if(y.set(Q2,M2),!e)e=document.createDocumentFragment();e.appendChild(M2.element)}}if(e)J.appendChild(e)},l=(U)=>{let R=Q();for(let[b,x]of y){let p=L(b,R,U);if(x.lastOffset!==p)x.lastOffset=p,x.element.style.transform=`translateY(${p}px)`}},S=(U,R,b,x)=>{let p=y.get(U);if(!p)return;if(p.isGroupHeader)return;let m=O.columns;for(let s=0;s<p.cells.length&&s<m.length;s++)d(p.cells[s],R,m[s],U);p.element.setAttribute("data-id",String(R.id)),p.lastItemId=R.id,J2(p.element,U,b,x),X(p.element,b),p.lastSelected=b,p.lastFocused=x},Z=(U,R,b)=>{let x=y.get(U);if(!x)return;if(x.isGroupHeader)return;let p=x.lastSelected!==R,m=x.lastFocused!==b;if(p||m)J2(x.element,U,R,b),X(x.element,R),x.lastSelected=R,x.lastFocused=b},H=(U)=>{O=U;let R=U.columns;for(let[,b]of y)if(b.element.style.width=`${U.totalWidth}px`,b.cells.length>0)for(let x=0;x<b.cells.length&&x<R.length;x++){let p=b.cells[x],m=R[x];p.style.left=`${m.offset}px`,p.style.width=`${m.width}px`}},A=(U)=>{return y.get(U)?.element},z=()=>{for(let[,U]of y)M.release(U.element);y.clear(),v=-1};return{render:c,updatePositions:l,updateItem:S,updateItemClasses:Z,getElement:A,updateColumnLayout:H,setGroupHeaderFn:_,clear:z,destroy:()=>{z(),M.clear()}}};var EJ=(J)=>{let Q=Math.max(1,Math.floor(J.columns)),q=J.gap??0,$=J.containerSize,j=0,Y=[],B=()=>{let W=(Q-1)*q;j=Math.max(0,($-W)/Q),Y=Array(Q);let _=j+q;for(let X=0;X<Q;X++)Y[X]=X*_};B();let G=[],P=0,M=[],y=(W,_)=>{if(W<=0)return P=0,G=[],[];let X=Array(Q).fill(0),T=Array(Q);for(let I=0;I<Q;I++)T[I]=[];let k=Array(W);for(let I=0;I<W;I++){let g=0,u=X[0];for(let i=1;i<Q;i++){let $2=X[i];if($2<u)u=$2,g=i}let Y2=_(I),o=X[g];k[I]={index:I,x:Y[g],y:o,lane:g,size:Y2,crossSize:j},T[g].push(I),X[g]=o+Y2+q}G=T;let w=0;for(let I=0;I<Q;I++){let g=X[I],u=g>0?g-q:0;if(u>w)w=u}return P=w,k},v=(W)=>{if(W.length===0)return P;if(P)return P;let _=Array(Q).fill(0);for(let T of W){let k=T.y+T.size,w=_[T.lane];if(k>w)_[T.lane]=k}let X=0;for(let T=0;T<Q;T++)if(_[T]>X)X=_[T];return X},O=(W,_,X)=>{if(W.length===0||X<=_)return M.length=0,M;if(G.length===0||G.length!==Q)return F(W,_,X);M.length=0;for(let T=0;T<Q;T++){let k=G[T],w=k.length;if(!w)continue;let I=0,g=w;while(I<g){let u=I+g>>>1,Y2=W[k[u]];if(Y2.y+Y2.size<=_)I=u+1;else g=u}for(let u=I;u<w;u++){let Y2=W[k[u]];if(Y2.y>=X)break;M.push(Y2)}}return M},F=(W,_,X)=>{M.length=0;for(let T of W)if(T.y+T.size>_&&T.y<X)M.push(T);return M};return{get columns(){return Q},get gap(){return q},get containerSize(){return $},update:(W)=>{let _=!1;if(W.columns!==void 0){let X=Math.max(1,Math.floor(W.columns));if(X!==Q)Q=X,_=!0}if(W.gap!==void 0&&W.gap!==q)q=W.gap,_=!0;if(W.containerSize!==void 0&&W.containerSize!==$)$=W.containerSize,_=!0;if(_)B()},calculateLayout:y,getTotalSize:v,getVisibleItems:O}};var aJ=(J=200)=>{let Q=[];return{acquire:()=>{let Y=Q.pop();if(Y)return Y;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(Y)=>{if(Y.remove(),Q.length<J)Y.className="",Y.textContent="",Y.removeAttribute("style"),Y.removeAttribute("data-index"),Y.removeAttribute("data-id"),Y.removeAttribute("data-lane"),Q.push(Y)},clear:()=>{Q.length=0}}},nJ=1,AJ=(J,Q,q,$=!1,j,Y,B,G)=>{let P=aJ(),M=new Map,y=new Set,v=0,O="",F=-1,V={selected:!1,focused:!1},W=(r,d)=>{return V.selected=r,V.focused=d,V},_=`${q}-item ${q}-masonry-item`,X=`${q}-group-header`,T=`${q}-item--selected`,k=`${q}-item--focused`,w=(r,d)=>{if(typeof d==="string")r.innerHTML=d;else r.replaceChildren(d)},I=(r,d,J2)=>{r.classList.toggle(T,d),r.classList.toggle(k,J2)},g=(r,d)=>{if($)r.style.transform=`translate(${Math.round(d.y)}px, ${Math.round(d.x)}px)`;else r.style.transform=`translate(${Math.round(d.x)}px, ${Math.round(d.y)}px)`},u=(r,d)=>{if($)r.style.width=`${d.size}px`,r.style.height=`${d.crossSize}px`;else r.style.width=`${d.crossSize}px`,r.style.height=`${d.size}px`},Y2=(r,d,J2,L,N)=>{let K=P.acquire(),D=d.__groupHeader,C=W(L,N);if(K.className=D?X:_,K.dataset.index=String(r),K.dataset.id=String(d.id),K.dataset.lane=String(J2.lane),D)K.setAttribute("role","presentation"),K.removeAttribute("aria-selected"),K.removeAttribute("aria-setsize"),K.removeAttribute("aria-posinset"),K.removeAttribute("id");else if(G!==!1){if(K.setAttribute("role","option"),K.ariaSelected=String(L),Y)K.id=`${Y}-item-${r}`;if(j){let l=j();if(l!==F)F=l,O=String(l);K.setAttribute("aria-setsize",O);let S=B?B(r):r+1;K.setAttribute("aria-posinset",String(S))}}else if(K.setAttribute("role","listitem"),K.removeAttribute("aria-selected"),j){let l=j();if(l!==F)F=l,O=String(l);K.setAttribute("aria-setsize",O);let S=B?B(r):r+1;K.setAttribute("aria-posinset",String(S))}u(K,J2);let c=Q(d,r,C);return w(K,c),I(K,L,N),g(K,J2),{element:K,lastItemId:d.id,lastSelected:L,lastFocused:N,lastY:J2.y,lastX:J2.x,lastSize:J2.size,lastCrossSize:J2.crossSize,lastSeenFrame:v}},o=(r,d,J2,L)=>{v++,y.clear();for(let K=0;K<d.length;K++)y.add(d[K].index);for(let[K,D]of M)if(y.has(K))D.lastSeenFrame=v;else if(v-D.lastSeenFrame>nJ)P.release(D.element),M.delete(K);let N=null;for(let K=0;K<d.length;K++){let D=d[K],C=D.index,c=r(C);if(!c)continue;let l=J2.has(c.id),S=C===L,Z=M.get(C);if(Z){let H=Z.lastItemId!==c.id,A=Z.lastSelected!==l,z=Z.lastFocused!==S,E=Z.lastY!==D.y||Z.lastX!==D.x,U=Z.lastSize!==D.size||Z.lastCrossSize!==D.crossSize;if(H){let R=W(l,S),b=Q(c,C,R);if(w(Z.element,b),Z.element.dataset.id=String(c.id),Z.lastItemId=c.id,!c.__groupHeader){let p=B?B(C):C+1;Z.element.setAttribute("aria-posinset",String(p))}}if(H||A||z)I(Z.element,l,S),Z.element.ariaSelected=String(l),Z.lastSelected=l,Z.lastFocused=S;if(U)u(Z.element,D),Z.lastSize=D.size,Z.lastCrossSize=D.crossSize;if(E)g(Z.element,D),Z.lastY=D.y,Z.lastX=D.x}else{let H=Y2(C,c,D,l,S);if(!N)N=document.createDocumentFragment();N.appendChild(H.element),M.set(C,H)}}if(N)J.appendChild(N)},i=()=>{for(let r of M.values())P.release(r.element);M.clear(),J.innerHTML=""};return{render:o,getElement:(r)=>M.get(r)?.element,updateItemClasses:(r,d,J2)=>{let L=M.get(r);if(!L)return;let N=L.lastSelected!==d,K=L.lastFocused!==J2;if(N||K)I(L.element,d,J2),L.lastSelected=d,L.lastFocused=J2},sortDOM:()=>{C2(J,M.keys(),(r)=>M.get(r)?.element)},clear:i,destroy:()=>{i(),P.clear()}}};var FJ=(J,Q)=>{let q=new Map,$=(Y)=>q.get(Y)??J,j=k2($,Q);return{getOffset(Y){return j.getOffset(Y)},getSize(Y){return $(Y)},indexAtOffset(Y){return j.indexAtOffset(Y)},getTotalSize(){return j.getTotalSize()},getTotal(){return j.getTotal()},rebuild(Y){if(Y<j.getTotal()){for(let B of q.keys())if(B>=Y)q.delete(B)}j=k2($,Y)},isVariable(){return!0},setMeasuredSize(Y,B){q.set(Y,B)},isMeasured(Y){return q.has(Y)},getEstimatedSize(){return J},measuredCount(){return q.size}}};var LJ=(J,Q,q,$,j,Y)=>{if($===0||Q===0)return Y.start=0,Y.end=-1,Y;let B=q.indexAtOffset(J),G=q.indexAtOffset(J+Q);if(G<$-1)G++;return Y.start=Math.max(0,B),Y.end=Math.min($-1,Math.max(0,G)),Y},HJ=(J,Q,q,$)=>{if(q===0)return $.start=0,$.end=-1,$;return $.start=Math.max(0,J.start-Q),$.end=Math.min(q-1,J.end+Q),$},bJ=(J,Q,q,$,j,Y)=>{if($===0)return 0;let B=Math.max(0,Math.min(J,$-1)),G=Q.getOffset(B),P=Q.getSize(B),M=Q.getTotalSize(),y=Math.max(0,M-q),v;switch(Y){case"center":v=G-q/2+P/2;break;case"end":v=G-q+P;break;case"start":default:v=G;break}return Math.max(0,Math.min(v,y))},RJ=(J,Q,q)=>{if(q&&q.isCompressed)return q.virtualSize;return Q.getTotalSize()},TJ=(J,Q)=>{return Q.getTotalSize()},yJ=(J,Q)=>{return Q.getOffset(J)},PJ=(J,Q,q)=>{let $=Math.max(0,Q-q);return Math.max(0,Math.min(J,$))};var zJ=(J,Q,q,$,j="start",Y,B=bJ)=>{return B(J,Q,q,$,Y,j)},kJ=(J,Q)=>{return J.start===Q.start&&J.end===Q.end},wJ=(J,Q)=>{return J>=Q.start&&J<=Q.end},vJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var CJ=(J,Q)=>{let q=[],$=[];for(let j=J.start;j<=J.end;j++)if(j<Q.start||j>Q.end)$.push(j);for(let j=Q.start;j<=Q.end;j++)if(j<J.start||j>J.end)q.push(j);return{add:q,remove:$}};var fJ=()=>{let J={},Q=(Y,B)=>{if(!J[Y])J[Y]=new Set;return J[Y].add(B),()=>q(Y,B)},q=(Y,B)=>{J[Y]?.delete(B)};return{on:Q,off:q,emit:(Y,B)=>{J[Y]?.forEach((G)=>{try{G(B)}catch(P){console.error(`[vlist] Error in event handler for "${String(Y)}":`,P)}})},clear:(Y)=>{if(Y)delete J[Y];else for(let B in J)delete J[B]}}};var f2=(J={})=>{let{chunkSize:Q=100,maxCachedItems:q=5000,evictionBuffer:$=200,onEvict:j}=J,Y=new Map,B=0,G=0,P=(L)=>{let N=Y.get(L);if(!N)N={items:Array(Q),count:0,lastAccess:Date.now()},Y.set(L,N);else N.lastAccess=Date.now();return N},M=(L)=>{return Math.floor(L/Q)},y=(L)=>{return L%Q},v=()=>B,O=(L)=>{B=L},F=(L)=>{if(L<0||L>=B)return;let N=M(L),K=Y.get(N);if(!K)return;return K.items[y(L)]},V=(L)=>{if(L<0||L>=B)return!1;let N=M(L),K=Y.get(N);if(!K)return!1;return K.items[y(L)]!==void 0},W=(L,N)=>{let K=M(L),D=P(K),C=y(L),c=D.items[C]===void 0;if(D.items[C]=N,c)D.count++,G++;if(L>=B)B=L+1},_=(L,N)=>{for(let K=0;K<N.length;K++){let D=N[K];if(D!==void 0)W(L+K,D)}},X=(L,N)=>{if(L<0||L>B)return;let K=M(L),D=Array.from(Y.keys()).filter((Z)=>Z>=K).sort((Z,H)=>Z-H),C=[];for(let Z of D){let H=Y.get(Z),A=Z*Q;for(let z=0;z<Q;z++){if(H.items[z]===void 0)continue;let E=A+z;if(E<L)continue;C.push({oldIndex:E,item:H.items[z]})}}for(let{oldIndex:Z}of C){let H=M(Z),A=Y.get(H);if(!A)continue;let z=y(Z);if(A.items[z]!==void 0){if(A.items[z]=void 0,A.count--,G--,A.count===0)Y.delete(H)}}B++;for(let{oldIndex:Z,item:H}of C){let A=Z+1,z=M(A),E=P(z),U=y(A);E.items[U]=H,E.count++,G++}let c=M(L),l=P(c),S=y(L);l.items[S]=N,l.count++,G++},T=(L)=>{if(L<0||L>=B)return!1;let N=M(L),K=Y.get(N),D=y(L);if(!(K!==void 0&&K.items[D]!==void 0))return!1;let c=N,l=Array.from(Y.keys()).filter((Z)=>Z>=c).sort((Z,H)=>Z-H),S=[];for(let Z of l){let H=Y.get(Z),A=Z*Q;for(let z=0;z<Q;z++){if(H.items[z]===void 0)continue;let E=A+z;if(E<=L)continue;S.push({oldIndex:E,item:H.items[z]})}}if(K.items[D]=void 0,K.count--,G--,K.count===0)Y.delete(N);for(let{oldIndex:Z}of S){let H=M(Z),A=Y.get(H);if(!A)continue;let z=y(Z);if(A.items[z]!==void 0){if(A.items[z]=void 0,A.count--,G--,A.count===0)Y.delete(H)}}for(let{oldIndex:Z,item:H}of S){let A=Z-1,z=M(A),E=P(z),U=y(A);E.items[U]=H,E.count++,G++}return B--,!0},k=(L,N)=>{let K=[];for(let D=L;D<=N&&D<B;D++)K.push(F(D));return K},w=(L,N)=>{for(let K=L;K<=N&&K<B;K++)if(!V(K))return!1;return!0},I=()=>{let L=[],N=null,K=Array.from(Y.keys()).sort((D,C)=>D-C);for(let D of K){let C=Y.get(D);if(!C)continue;let c=D*Q;for(let l=0;l<Q;l++){let S=c+l;if(S>=B)break;if(C.items[l]!==void 0)if(N===null)N={start:S,end:S};else if(S===N.end+1)N.end=S;else L.push(N),N={start:S,end:S};else if(N!==null)L.push(N),N=null}}if(N!==null)L.push(N);return L},g=(L,N)=>{let K=[],D=null;for(let C=L;C<=N&&C<B;C++)if(!V(C))if(D===null)D={start:C,end:C};else D.end=C;else if(D!==null)K.push(D),D=null;if(D!==null)K.push(D);return K},u=(L)=>{return Y.has(L)},Y2=(L)=>{let N=Y.get(L);if(!N)return!1;let K=L*Q,D=Math.min(Q,B-K);return N.count>=D},o=(L)=>{let N=Y.get(L);if(N)N.lastAccess=Date.now()},i=(L,N)=>{if(L>N||Y.size===0)return;let K=Date.now(),D=M(Math.max(0,L)),C=M(Math.min(B-1,N));for(let c=D;c<=C;c++){let l=Y.get(c);if(l)l.lastAccess=K}},$2=(L,N)=>{if(G<=q)return 0;let K=Math.max(0,L-$),D=Math.min(B-1,N+$),C=M(K),c=M(D),l=0,S=[];for(let[Z,H]of Y)if(Z<C||Z>c)l+=H.count,S.push(Z),G-=H.count,Y.delete(Z);if(l>0&&j)j(l,S);return l},N2=()=>{if(G<=q)return 0;let L=Array.from(Y.entries()).sort(([,D],[,C])=>D.lastAccess-C.lastAccess),N=0,K=[];for(let[D,C]of L){if(G<=q)break;N+=C.count,G-=C.count,K.push(D),Y.delete(D)}if(N>0&&j)j(N,K);return N},j2=()=>{return{totalItems:B,cachedItems:G,cachedChunks:Y.size,chunkSize:Q,maxCachedItems:q,memoryEfficiency:B>0?1-G/B:1}},r=()=>G,d=()=>{Y.clear(),G=0};return{chunkSize:Q,maxCachedItems:q,getTotal:v,setTotal:O,get:F,has:V,set:W,setRange:_,insert:X,delete:T,getRange:k,isRangeLoaded:w,getLoadedRanges:I,findUnloadedRanges:g,getChunkIndex:M,isChunkLoaded:u,isChunkFullyLoaded:Y2,touchChunk:o,touchChunksForRange:i,evictDistant:$2,evictToLimit:N2,getStats:j2,getCachedCount:r,clear:d,reset:()=>{d(),B=0}}},S2=(J)=>{if(J.length===0)return[];let Q=[...J].sort(($,j)=>$.start-j.start),q=[{...Q[0]}];for(let $=1;$<Q.length;$++){let j=Q[$],Y=q[q.length-1];if(j.start<=Y.end+1)Y.end=Math.max(Y.end,j.end);else q.push({...j})}return q},r2=(J,Q,q)=>{let $=Math.floor(J.start/q)*q,j=Math.ceil((J.end+1)/q)*q-1,Y={start:$,end:j};if(Q.length===0)return[Y];let B=[],G=S2(Q),P=Y.start;for(let M of G){if(M.end<P)continue;if(M.start>Y.end)break;if(M.start>P)B.push({start:P,end:Math.min(M.start-1,Y.end)});if(P=M.end+1,P>Y.end)break}if(P<=Y.end)B.push({start:P,end:Y.end});return B};var I2=(J={})=>{let{maskCharacter:Q=JJ,maxSampleSize:q=QJ}=J,$=[],j=!1,Y=(y)=>{if(j||y.length===0)return;let v=Math.min(y.length,q);for(let O=0;O<v;O++){let F=y[O];if(!F||typeof F!=="object")continue;let V={},W=!1;for(let[_,X]of Object.entries(F)){if(_.startsWith("_")||_==="id")continue;V[_]=String(X??"").length,W=!0}if(W)$.push(V)}j=!0},B=()=>j,G=(y)=>{let v={id:`${R2}${y}`,[g2]:!0,_index:y};if($.length===0)return v.label=Q.repeat(12),v;let O=$[y%$.length];for(let[F,V]of Object.entries(O))v[F]=Q.repeat(Math.max(1,V));return v};return{analyzeStructure:Y,hasAnalyzedStructure:B,generate:G,generateRange:(y,v)=>{let O=[];for(let F=y;F<=v;F++)O.push(G(F));return O},clear:()=>{$=[],j=!1}}},T2=(J)=>{if(!J||typeof J!=="object")return!1;return J[g2]===!0},l2=(J)=>{return J.filter((Q)=>!T2(Q))};var oJ=50,SJ=(J={})=>{let{adapter:Q,initialItems:q,initialTotal:$,storage:j,placeholder:Y,pageSize:B=oJ,maxConcurrent:G=0,onStateChange:P,onDataChange:M,onItemsLoaded:y,onItemsEvicted:v}=J,O=f2({...j,onEvict:(h,f)=>{v?.(h),i(),o()}}),F=null,V=()=>{if(!F)F=I2(Y);return F},W=new Map,_=!1,X,T=!0,k,w,I=[],g=0,u=new Map,Y2=()=>{for(let h of u.values())h[1].abort();u.clear()},o=()=>{P?.(K())},i=()=>{M?.()},$2=()=>{W.clear();let h=O.getLoadedRanges();for(let f of h)for(let a=f.start;a<=f.end;a++){let q2=O.get(a);if(q2&&!T2(q2))W.set(q2.id,a)}},N2=(h,f)=>{if(!T2(f))W.set(f.id,h)},j2=(h)=>{W.delete(h)},r=(h,f)=>{return`${h}-${f}`},d=()=>O.getTotal(),J2=()=>O.getCachedCount(),L=()=>_,N=()=>T,K=()=>({total:O.getTotal(),cached:O.getCachedCount(),isLoading:_,pendingRanges:I,error:X,hasMore:T,cursor:k}),D=()=>O,C=()=>V(),c=(h)=>{let f=O.get(h);if(f!==void 0)return f;if(h>=0&&h<O.getTotal())return V().generate(h);return},l=(h)=>{let f=W.get(h);if(f===void 0)return;return O.get(f)},S=(h)=>{return W.get(h)??-1},Z=(h)=>{let f=O.get(h);return f!==void 0&&!T2(f)},H=(h,f)=>{let a=[],q2=O.getTotal();O.touchChunksForRange(h,Math.min(f,q2-1));for(let U2=h;U2<=f&&U2<q2;U2++){let n=O.get(U2);if(n!==void 0)a.push(n);else a.push(V().generate(U2))}return a},A=(h)=>{O.setTotal(h),T=O.getCachedCount()<h,i(),o()},z=(h,f=0,a)=>{if(Q&&h.length>0){let q2=V();if(!q2.hasAnalyzedStructure())q2.analyzeStructure(h)}for(let q2=0;q2<h.length;q2++){let U2=h[q2];if(U2!==void 0){let n=f+q2;O.set(n,U2),N2(n,U2)}}if(a!==void 0)O.setTotal(a);else if(f+h.length>O.getTotal())O.setTotal(f+h.length);if(O.getCachedCount()>=O.getTotal()&&O.getTotal()>0)T=!1;i(),o(),y?.(h,f,O.getTotal())},E=(h,f)=>{let a=O.get(h);if(!a)return!1;let q2=a.id,U2={...a,...f};if(O.set(h,U2),f.id!==void 0&&f.id!==q2)j2(q2);return N2(h,U2),i(),o(),!0},U=(h,f)=>{O.insert(f,h),$2(),Y2(),i(),o()},R=(h)=>{let f=W.get(h);if(f===void 0)return!1;if(!O.delete(f))return!1;return $2(),Y2(),i(),o(),!0},b=async(h,f)=>{if(!Q)return;let a=O.chunkSize,q2=Math.floor(h/a),U2=Math.floor(f/a),n=a*2;for(let[B2,V2]of u){let G2=B2.indexOf("-"),A2=parseInt(B2.slice(0,G2),10);if(Math.abs(A2-h)>n)V2[1].abort(),u.delete(B2)}let M2=[],E2=[];for(let B2=q2;B2<=U2;B2++){let V2=B2*a,G2=V2+a-1,A2=r(V2,G2);if(O.isChunkFullyLoaded(B2))continue;let O2=u.get(A2);if(O2)E2.push(O2[0]);else M2.push({start:V2,end:G2})}if(M2.length===0){if(E2.length>0)await Promise.all(E2);return}if(G>0){let B2=u.size+M2.length;if(B2>G){let V2=(h+f)/2,G2=Math.min(B2-G,u.size);while(G2>0){let W2=null,O2=-1,_2=null;for(let[F2,t]of u){let K2=F2.indexOf("-"),D2=parseInt(F2.slice(0,K2),10),X2=parseInt(F2.slice(K2+1),10),L2=Math.abs((D2+X2)/2-V2);if(L2>O2)O2=L2,W2=F2,_2=t[1]}if(W2)_2.abort(),u.delete(W2);G2--}let A2=G-u.size;if(M2.length>A2)M2.sort((W2,O2)=>{let _2=Math.abs((W2.start+W2.end)/2-V2),F2=Math.abs((O2.start+O2.end)/2-V2);return _2-F2}),M2.length=Math.max(0,A2)}}if(M2.length===0){if(E2.length>0)await Promise.all(E2);return}for(let B2 of M2){let V2=r(B2.start,B2.end),G2=new AbortController,A2=(async()=>{I.push(B2),_=!0,X=void 0,o();try{let W2=B2.end-B2.start+1,O2={offset:B2.start,limit:W2,cursor:B2.start===w?k:void 0,signal:G2.signal},_2=await Q.read(O2);if(z(_2.items,B2.start,_2.total),_2.cursor)k=_2.cursor,w=B2.start+_2.items.length;let F2=B2.start+_2.items.length;if(F2>=g){if(g=F2,_2.hasMore!==void 0)T=_2.hasMore;else if(_2.total!==void 0)T=F2<_2.total}}catch(W2){if(W2?.name==="AbortError")return;X=W2 instanceof Error?W2:Error(String(W2))}finally{u.delete(V2);let W2=I.findIndex((O2)=>O2.start===B2.start&&O2.end===B2.end);if(W2>=0)I.splice(W2,1);_=u.size>0,o()}})();u.set(V2,[A2,G2]),E2.push(A2)}await Promise.all(E2)},x=async(h,f)=>{if(O.isRangeLoaded(h,f))return;await b(h,f)},p=async()=>{if(!Q)return;await b(0,B-1)},m=async()=>{if(!Q||_||!T)return!1;let h=O.getCachedCount(),f=O.getTotal(),a=h,q2=Math.min(a+B-1,f>0?f-1:a+B-1);if(a>=f&&f>0)return T=!1,!1;return await b(a,q2),O.getCachedCount()>h},s=async()=>{if(O.clear(),O.setTotal(0),W.clear(),F)F.clear();Y2(),I=[],_=!1,k=void 0,w=void 0,T=!0,g=0,X=void 0,i(),o()},e=(h,f)=>{if(O.evictDistant(h,f)>0)$2()},Z2=()=>{O.clear(),W.clear(),k=void 0,w=void 0,X=void 0,I=[],_=!1,i(),o()},Q2=()=>{if(O.reset(),W.clear(),F)F.clear();k=void 0,w=void 0,T=!0,g=0,X=void 0,I=[],_=!1,i(),o()};if(q&&q.length>0)z(q,0,$??q.length);else if($!==void 0)O.setTotal($),i(),o();return{getState:K,getTotal:d,getCached:J2,getIsLoading:L,getHasMore:N,getStorage:D,getPlaceholders:C,getItem:c,getItemById:l,getIndexById:S,isItemLoaded:Z,getItemsInRange:H,setTotal:A,setItems:z,updateItem:E,insertItem:U,removeItem:R,loadRange:b,ensureRange:x,loadInitial:p,loadMore:m,reload:s,evictDistant:e,clear:Z2,reset:Q2}};var iJ=(J)=>{if(typeof J!=="object"){let Q=J??2;return{top:Q,right:Q,bottom:Q,left:Q}}return{top:J.top??2,right:J.right??2,bottom:J.bottom??2,left:J.left??2}},IJ=(J,Q,q={},$="vlist",j=!1,Y)=>{let{autoHide:B=!0,autoHideDelay:G=1000,minThumbSize:P=15,showOnHover:M=!0,showOnViewportEnter:y=!0,clickBehavior:v="scroll"}=q,O=v==="page"?"scroll":v,F=Y??J,V=iJ(q.padding),W=j?V.left:V.top,_=j?V.right:V.bottom,X=j?V.bottom:V.right,T=q.hoverZoneWidth??X+16,k=0,w=0,I=0,g=0,u=!1,Y2=!1,o=0,i=0,$2=0,N2=null,j2=!1,r=null,d=0,J2=0,L=null,N=null,K=null,D=j?"width":"height",C=j?"translateX":"translateY",c=j?(t)=>t.clientX:(t)=>t.clientY,l=j?"left":"top",S=document.createElement("div"),Z=document.createElement("div"),H=document.createElement("div"),A=j?"--vlist-custom-scrollbar-padding-left":"--vlist-custom-scrollbar-padding-top",z=()=>{if(F===J)return;let t=J.offsetTop;S.style[j?"left":"top"]=t?`calc(var(${A}) + ${t}px)`:`var(${A})`,H.style[j?"left":"top"]=`${t}px`},E=()=>{if(S.className=`${$}-scrollbar`,Z.className=`${$}-scrollbar__thumb`,j)S.classList.add(`${$}-scrollbar--horizontal`);if(q.padding!==void 0)F.style.setProperty("--vlist-custom-scrollbar-padding-top",`${V.top}px`),F.style.setProperty("--vlist-custom-scrollbar-padding-right",`${V.right}px`),F.style.setProperty("--vlist-custom-scrollbar-padding-bottom",`${V.bottom}px`),F.style.setProperty("--vlist-custom-scrollbar-padding-left",`${V.left}px`);if(q.minThumbSize!==void 0)S.style.setProperty("--vlist-custom-scrollbar-min-thumb-size",`${P}px`);if(S.appendChild(Z),F.appendChild(S),H.className=`${$}-scrollbar__hover`,j)H.classList.add(`${$}-scrollbar__hover--horizontal`),H.style.height=`${T}px`;else H.style.width=`${T}px`;if(F.appendChild(H),F!==J)z()},U=()=>{if(N2)clearTimeout(N2),N2=null},R=()=>{if(!B)return;U(),N2=setTimeout(x,G)},b=()=>{if(k<=w)return;if(U(),!j2)S.classList.add(`${$}-scrollbar--visible`),j2=!0;if(B&&!u&&!Y2)R()},x=()=>{if(u||Y2)return;S.classList.remove(`${$}-scrollbar--visible`),j2=!1},p=(t,K2)=>{if(k=t,w=K2,z(),k<=w){S.style.display="none",x();return}S.style.display="";let D2=Math.max(0,w-W-_),X2=w/k;if(I=Math.max(P,X2*D2),Z.style[D]=`${I}px`,g=D2-I,m($2),!B)b()},m=(t)=>{if($2=t,k<=w||g<=0)return;let K2=k-w,D2=Math.min(1,Math.max(0,t/K2));Z.style.transform=`${C}(${D2*g}px)`},s=(t)=>{if(t.target===Z||O!=="jump"||g<=0)return;let K2=k-w,D2=S.getBoundingClientRect(),X2=c(t)-D2[l],L2=Math.max(0,Math.min(X2-I/2,g));Q(L2/g*K2),b()},e=()=>{if(L!==null)clearTimeout(L),L=null;if(N!==null)cancelAnimationFrame(N),N=null;K=null},Z2=(t)=>{let K2=g>0?J2/t*g:0;if(d<K2)return-1;if(d>=K2+I)return 1;return 0},Q2=()=>{let t=k-w,K2=Z2(t);if(K2===0){e();return}if(K2===-1){if(J2<=0){e();return}let D2=Math.max(0,J2-w);J2=D2,Q(D2)}else{if(J2>=t){e();return}let D2=Math.min(t,J2+w);J2=D2,Q(D2)}b()},h=(t)=>{if(K===null){K=t,N=requestAnimationFrame(h);return}let K2=k-w,D2=t-K;K=t;let X2=Z2(K2);if(X2===0){e();return}let L2=12*w/1000,b2=Math.min(L2*D2,w);if(X2===-1){if(J2<=0){e();return}let z2=Math.max(0,J2-b2);J2=z2,Q(z2)}else{if(J2>=K2){e();return}let z2=Math.min(K2,J2+b2);J2=z2,Q(z2)}U(),N=requestAnimationFrame(h)},f=()=>{e(),R(),document.removeEventListener("mouseup",f)},a=(t)=>{if(t.target===Z||O!=="scroll")return;t.preventDefault();let K2=S.getBoundingClientRect();d=c(t)-K2[l],J2=$2,Q2(),L=setTimeout(()=>{N=requestAnimationFrame(h)},350),document.addEventListener("mouseup",f)},q2=(t)=>{t.preventDefault(),t.stopPropagation(),u=!0,o=c(t),i=$2,U(),S.classList.add(`${$}-scrollbar--dragging`),document.addEventListener("mousemove",U2),document.addEventListener("mouseup",n)},U2=(t)=>{if(!u)return;let K2=c(t)-o,D2=g>0?K2/g:0,X2=k-w,L2=D2*X2,b2=Math.max(0,Math.min(i+L2,X2));Z.style.transform=`${C}(${b2/X2*g}px)`,Q(b2)},n=()=>{if(u=!1,S.classList.remove(`${$}-scrollbar--dragging`),B&&!Y2)R();document.removeEventListener("mousemove",U2),document.removeEventListener("mouseup",n)},M2=j?(t)=>t.touches[0].clientX:(t)=>t.touches[0].clientY,E2=(t)=>{t.stopPropagation(),u=!0,o=M2(t),i=$2,U(),S.classList.add(`${$}-scrollbar--dragging`)},B2=(t)=>{if(!u)return;t.preventDefault();let K2=M2(t)-o,D2=g>0?K2/g:0,X2=k-w,L2=D2*X2,b2=Math.max(0,Math.min(i+L2,X2));Z.style.transform=`${C}(${b2/X2*g}px)`,Q(b2)},V2=()=>{if(u=!1,S.classList.remove(`${$}-scrollbar--dragging`),B)R()},G2=(t)=>{if(t.target===Z)return;if(g<=0)return;let K2=t.touches[0],D2=S.getBoundingClientRect(),X2=(j?K2.clientX:K2.clientY)-D2[l];if(O==="jump"){let L2=k-w,b2=Math.max(0,Math.min(X2-I/2,g));Q(b2/g*L2)}else d=X2,J2=$2,Q2();b()},A2=()=>{if(y)b()},W2=()=>{if(!u){if(Y2=!1,B)R()}},O2=()=>{Y2=!0,U(),b()},_2=()=>{if(Y2=!1,!u&&B)R()},F2=()=>{if(U(),e(),r!==null)cancelAnimationFrame(r),r=null;S.removeEventListener("click",s),S.removeEventListener("mousedown",a),S.removeEventListener("mouseenter",O2),document.removeEventListener("mouseup",f),S.removeEventListener("mouseleave",_2),S.removeEventListener("touchstart",G2),Z.removeEventListener("mousedown",q2),Z.removeEventListener("touchstart",E2),Z.removeEventListener("touchmove",B2),Z.removeEventListener("touchend",V2),J.removeEventListener("mouseenter",A2),J.removeEventListener("mouseleave",W2),document.removeEventListener("mousemove",U2),document.removeEventListener("mouseup",n),H.removeEventListener("click",s),H.removeEventListener("mousedown",a),H.removeEventListener("mouseenter",O2),H.removeEventListener("mouseleave",_2),H.remove(),F.style.removeProperty("--vlist-custom-scrollbar-padding-top"),F.style.removeProperty("--vlist-custom-scrollbar-padding-right"),F.style.removeProperty("--vlist-custom-scrollbar-padding-bottom"),F.style.removeProperty("--vlist-custom-scrollbar-padding-left"),S.remove()};if(E(),S.addEventListener("click",s),S.addEventListener("mousedown",a),S.addEventListener("mouseenter",O2),S.addEventListener("mouseleave",_2),S.addEventListener("touchstart",G2,{passive:!0}),Z.addEventListener("mousedown",q2),Z.addEventListener("touchstart",E2,{passive:!0}),Z.addEventListener("touchmove",B2,{passive:!1}),Z.addEventListener("touchend",V2,{passive:!0}),J.addEventListener("mouseenter",A2),J.addEventListener("mouseleave",W2),H.addEventListener("click",s),H.addEventListener("mousedown",a),M)H.addEventListener("mouseenter",O2),H.addEventListener("mouseleave",_2);return{show:b,hide:x,updateBounds:p,updatePosition:m,isVisible:()=>j2,destroy:F2}};var pJ=(J=0)=>{let Q=[,,,,,,,,];for(let q=0;q<8;q++)Q[q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},p2=(J,Q)=>{let q=performance.now(),$=q-J.lastTime;if($===0)return J;if($>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let Y=J.samples[0];return Y.position=Q,Y.time=q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=Q,J.lastTime=q,J}let j=J.samples[J.sampleIndex];if(j.position=Q,j.time=q,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let Y=(J.sampleIndex-J.sampleCount+8)%8,B=J.samples[Y],G=Q-B.position,P=q-B.time;J.velocity=P>0?G/P:0}return J.lastPosition=Q,J.lastTime=q,J},tJ=(J)=>J.sampleCount>=3,hJ=(J,Q={})=>{let{wheel:q=!0,sensitivity:$=1,smoothing:j=!1,idleTimeout:Y=150,onScroll:B,onIdle:G,scrollElement:P,isX:M=!1}=Q,y=!!P,v=0,O=0,F=y?M?window.innerWidth:window.innerHeight:M?J.clientWidth:J.clientHeight,V=Q.compressed??!1,W=Q.compression,_=pJ(),X=!1,T=null,w=h2(()=>{let A=M?J.scrollLeft:J.scrollTop,z=M?A>=v?"right":"left":A>=v?"down":"up";if(_=p2(_,A),v=A,B)B({scrollTop:v,direction:z,velocity:_.velocity});i()}),g=h2(()=>{let A=J.getBoundingClientRect(),z=M?Math.max(0,-A.left):Math.max(0,-A.top),E=M?z>=v?"right":"left":z>=v?"down":"up";if(_=p2(_,z),v=z,!X)X=!0;if(B)B({scrollTop:v,direction:E,velocity:_.velocity});i()}),u=(A)=>{A.preventDefault()},Y2=(A)=>{if(A.deltaX)return;A.preventDefault(),J.scrollLeft+=A.deltaY},o=(A)=>{if(!V)return;A.preventDefault();let z=(M?A.deltaX||A.deltaY:A.deltaY)*$,E=v+z;if(j)E=v+z*0.3;if(E=Math.max(0,Math.min(E,O)),E!==v){let U=v,R=M?E>=U?"right":"left":E>=U?"down":"up";if(_=p2(_,E),v=E,!X)X=!0;if(B)B({scrollTop:v,direction:R,velocity:_.velocity});i()}},i=()=>{if(T)clearTimeout(T);T=setTimeout(()=>{if(X=!1,_=pJ(v),G)G()},Y)},$2=(A)=>{if(V)return;if(V=!0,W=A,O=A.virtualSize-F,y)return;if(w.cancel(),J.removeEventListener("scroll",w),!q)J.removeEventListener("wheel",u);else if(M)J.removeEventListener("wheel",Y2);if(M)J.style.overflowX="hidden";else J.style.overflow="hidden";if(q)J.addEventListener("wheel",o,{passive:!1});let z=M?J.scrollLeft:J.scrollTop;if(z>0){let E=M?W?.actualSize??J.scrollWidth:W?.actualSize??J.scrollHeight;v=z/E*O}if(M)J.scrollLeft=0;else J.scrollTop=0},N2=()=>{if(!V)return;if(V=!1,y){W=void 0;return}if(J.removeEventListener("wheel",o),M)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",w,{passive:!0}),!q)J.addEventListener("wheel",u,{passive:!1});else if(M)J.addEventListener("wheel",Y2,{passive:!1});if(W&&v>0){let z=v/O*(W.actualSize-F);if(M)J.scrollLeft=z;else J.scrollTop=z}W=void 0},j2=()=>{if(y||V)return v;return M?J.scrollLeft:J.scrollTop},r=(A,z=!1)=>{let E=Math.max(0,Math.min(A,O||1/0));if(y){let U=J.getBoundingClientRect();if(M){let R=U.left+window.scrollX;window.scrollTo({left:R+E,behavior:z?"smooth":"auto"})}else{let R=U.top+window.scrollY;window.scrollTo({top:R+E,behavior:z?"smooth":"auto"})}}else if(V){if(E===v)return;let U=v,R=M?E>=U?"right":"left":E>=U?"down":"up";if(_=p2(_,E),v=E,!X)X=!0;if(B)B({scrollTop:v,direction:R,velocity:_.velocity});i()}else if(M)J.scrollTo({left:E,behavior:z?"smooth":"auto"});else J.scrollTo({top:E,behavior:z?"smooth":"auto"})},d=(A)=>{r(j2()+A)},J2=()=>{return j2()<=0},L=(A=0)=>{let z=j2(),E=y||V?O:M?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return z>=E-A},N=()=>{let A=j2(),z=y||V?O:M?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(z<=0)return 0;return Math.min(1,Math.max(0,A/z))},K=(A)=>{if(A.compression)W=A.compression,O=W.virtualSize-F},D=()=>V,C=()=>Math.abs(_.velocity),c=()=>tJ(_),l=()=>X,S=()=>y,Z=(A)=>{if(F=A,W)O=W.virtualSize-F},H=()=>{if(T)clearTimeout(T);if(y)g.cancel(),window.removeEventListener("scroll",g);else w.cancel(),J.removeEventListener("scroll",w),J.removeEventListener("wheel",o),J.removeEventListener("wheel",u),J.removeEventListener("wheel",Y2)};if(y){if(V&&W)O=W.virtualSize-F;window.addEventListener("scroll",g,{passive:!0})}else if(V&&W){if(O=W.virtualSize-F,M)J.style.overflowX="hidden";else J.style.overflow="hidden";if(q)J.addEventListener("wheel",o,{passive:!1})}else{if(M)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",w,{passive:!0}),!q)J.addEventListener("wheel",u,{passive:!1});else if(M)J.addEventListener("wheel",Y2,{passive:!1})}return{getScrollTop:j2,scrollTo:r,scrollBy:d,isAtTop:J2,isAtBottom:L,getScrollPercentage:N,getVelocity:C,isTracking:c,isScrolling:l,updateConfig:K,enableCompression:$2,disableCompression:N2,isCompressed:D,isWindowMode:S,updateContainerHeight:Z,destroy:H}},h2=(J)=>{let Q=null,q=null,$=(...j)=>{if(q=j,Q===null)Q=requestAnimationFrame(()=>{if(Q=null,q)J(...q)})};return $.cancel=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null},$};var eJ=50,JQ=0.1;function QQ(J){let Q=0,q=0,$=0;function j(){return $>0?q/$:0}function Y(P){if(Q=P,P>JQ&&P<eJ)q+=P,$++}function B(){let P=J.getTotal();if(P===0)return 0;let M=J.getItemSize();if(M<=0)return 0;let y=J.getContainerSize();if(y<=0)return 0;let v=J.getScrollPosition(),O=typeof J.getColumns==="function"?J.getColumns():1,V=Math.ceil(P/O)*M,_=Math.min(V,H2)-y,X=V-y,T=_>0?X/_:1,k=v*T,w=Math.ceil((k+y)/M);return Math.min(w*O,P)}function G(){let P=J.getTotal(),M=B();return{progress:P>0?Math.min(100,Math.max(0,M/P*100)):0,velocity:Q,velocityAvg:j(),itemCount:M,total:P}}return{getState:G,onVelocity:Y}}export{qJ as toggleSelection,LJ as simpleVisibleRange,u2 as selectItems,YJ as selectAll,kJ as rangesEqual,h2 as rafThrottle,VJ as needsScaling,S2 as mergeRanges,BJ as isSelected,T2 as isPlaceholderItem,wJ as isInRange,v2 as isGroupHeader,NJ as getSelectedItems,UJ as getSelectedIds,w2 as getScaleState,DJ as getScaleInfo,w2 as getScale,vJ as getRangeCount,MJ as getMaxItemsWithoutScaling,l2 as filterPlaceholders,CJ as diffRanges,m2 as deselectItems,XJ as createTableRenderer,GJ as createTableLayout,OJ as createTableHeader,t2 as createStickyHeader,QQ as createStats,f2 as createSparseStorage,k2 as createSizeCache,$J as createSelectionState,IJ as createScrollbar,hJ as createScrollController,I2 as createPlaceholderManager,FJ as createMeasuredSizeCache,AJ as createMasonryRenderer,EJ as createMasonryLayout,o2 as createGroupedSizeFn,i2 as createGroupLayout,cJ as createGridRenderer,e2 as createGridLayout,fJ as createEmitter,SJ as createAsyncManager,jJ as clearSelection,PJ as clampScrollPosition,RJ as calculateTotalSize,zJ as calculateScrollToIndex,KJ as calculateScaledVisibleRange,_J as calculateScaledScrollToIndex,ZJ as calculateScaledRenderRange,P2 as calculateScaledItemPosition,HJ as calculateRenderRange,r2 as calculateMissingRanges,yJ as calculateItemOffset,WJ as calculateIndexFromScrollPosition,TJ as calculateActualSize,s2 as buildLayoutItems,H2 as MAX_VIRTUAL_SIZE};
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import type { CompressionState } from "../../rendering/scale";
10
10
  /** Scroll direction */
11
- export type ScrollDirection = "up" | "down";
11
+ export type ScrollDirection = "up" | "down" | "left" | "right";
12
12
  /** Scroll event data */
13
13
  export interface ScrollEventData {
14
14
  scrollTop: number;
@@ -36,11 +36,11 @@ export interface ScrollControllerConfig {
36
36
  /** Scroll idle detection timeout in ms (default: 150) */
37
37
  idleTimeout?: number;
38
38
  /**
39
- * Enable horizontal scrolling mode.
39
+ * Primary axis is X (horizontal scrolling mode).
40
40
  * When true, the controller reads scrollLeft instead of scrollTop,
41
41
  * uses clientWidth instead of clientHeight, and maps wheel deltaX.
42
42
  */
43
- horizontal?: boolean;
43
+ isX?: boolean;
44
44
  /** Callback when scroll position changes */
45
45
  onScroll?: (data: ScrollEventData) => void;
46
46
  /** Callback when scrolling becomes idle */
@@ -93,8 +93,8 @@ export type ScrollCallback = (position: number) => void;
93
93
  * @param onScroll - Callback when scrollbar interaction causes scroll
94
94
  * @param config - Scrollbar configuration
95
95
  * @param classPrefix - CSS class prefix (default: 'vlist')
96
- * @param horizontal - Whether the scrollbar is horizontal (default: false)
96
+ * @param isX - Whether the primary axis is X (horizontal, default: false)
97
97
  * @param parent - Element to append scrollbar DOM to (default: viewport)
98
98
  */
99
- export declare const createScrollbar: (viewport: HTMLElement, onScroll: ScrollCallback, config?: ScrollbarConfig, classPrefix?: string, horizontal?: boolean, parent?: HTMLElement) => Scrollbar;
99
+ export declare const createScrollbar: (viewport: HTMLElement, onScroll: ScrollCallback, config?: ScrollbarConfig, classPrefix?: string, isX?: boolean, parent?: HTMLElement) => Scrollbar;
100
100
  //# sourceMappingURL=scrollbar.d.ts.map
@@ -83,14 +83,14 @@ export declare const createElementPool: (tagName?: string, maxSize?: number) =>
83
83
  * Create a renderer for managing DOM elements
84
84
  * Supports compression for large lists
85
85
  */
86
- export declare const createRenderer: <T extends VListItem = VListItem>(itemsContainer: HTMLElement, template: ItemTemplate<T>, sizeCache: SizeCache, classPrefix: string, totalItemsGetter?: () => number, ariaIdPrefix?: string, horizontal?: boolean, crossAxisSize?: number, compressionFns?: {
86
+ export declare const createRenderer: <T extends VListItem = VListItem>(itemsContainer: HTMLElement, template: ItemTemplate<T>, sizeCache: SizeCache, classPrefix: string, totalItemsGetter?: () => number, ariaIdPrefix?: string, isX?: boolean, crossAxisSize?: number, compressionFns?: {
87
87
  getState: CompressionStateFn;
88
88
  getPosition: CompressedPositionFn;
89
89
  }, striped?: boolean | "data" | "even" | "odd", stripeIndexFn?: () => (index: number) => number, ariaPosInSetGetter?: (layoutIndex: number) => number, interactive?: boolean) => Renderer<T>;
90
90
  /**
91
91
  * Create the vlist DOM structure
92
92
  */
93
- export declare const createDOMStructure: (container: HTMLElement, classPrefix: string, ariaLabel?: string, horizontal?: boolean, interactive?: boolean) => DOMStructure;
93
+ export declare const createDOMStructure: (container: HTMLElement, classPrefix: string, ariaLabel?: string, isX?: boolean, interactive?: boolean) => DOMStructure;
94
94
  /**
95
95
  * Update content height for virtual scrolling
96
96
  */
@@ -83,7 +83,7 @@ export declare const clampScrollPosition: (scrollPosition: number, totalHeight:
83
83
  /**
84
84
  * Determine scroll direction
85
85
  */
86
- export declare const getScrollDirection: (currentScrollTop: number, previousScrollTop: number) => "up" | "down";
86
+ export declare const getScrollDirection: (currentScrollTop: number, previousScrollTop: number, isX?: boolean) => "up" | "down" | "left" | "right";
87
87
  /**
88
88
  * Create initial viewport state.
89
89
  *
package/dist/size.json CHANGED
@@ -1 +1 @@
1
- {"base":{"minified":"21.5","gzipped":"7.8","minBytes":22029,"gzBytes":7991},"a11y":{"minified":"24.5","gzipped":"8.9","minBytes":25124,"gzBytes":9125},"selection":{"minified":"29.8","gzipped":"10.2","minBytes":30498,"gzBytes":10467},"data":{"minified":"34.3","gzipped":"12.5","minBytes":35172,"gzBytes":12764},"scrollbar":{"minified":"28.7","gzipped":"9.8","minBytes":29341,"gzBytes":10061},"sortable":{"minified":"30.9","gzipped":"10.7","minBytes":31632,"gzBytes":10979},"groups":{"minified":"32.8","gzipped":"11.5","minBytes":33587,"gzBytes":11806},"scale":{"minified":"34.7","gzipped":"11.7","minBytes":35515,"gzBytes":11963},"page":{"minified":"23.9","gzipped":"8.6","minBytes":24507,"gzBytes":8767},"snapshots":{"minified":"25.1","gzipped":"9.1","minBytes":25737,"gzBytes":9297},"transition":{"minified":"28.2","gzipped":"9.6","minBytes":28912,"gzBytes":9870},"autosize":{"minified":"23.4","gzipped":"8.5","minBytes":23920,"gzBytes":8688},"grid":{"minified":"27.5","gzipped":"9.9","minBytes":28162,"gzBytes":10133},"table":{"minified":"39.7","gzipped":"13.6","minBytes":40615,"gzBytes":13922},"masonry":{"minified":"31.2","gzipped":"11.4","minBytes":31980,"gzBytes":11626}}
1
+ {"base":{"minified":"21.6","gzipped":"7.9","minBytes":22096,"gzBytes":8067},"a11y":{"minified":"24.6","gzipped":"9.0","minBytes":25197,"gzBytes":9195},"selection":{"minified":"29.9","gzipped":"10.3","minBytes":30594,"gzBytes":10535},"data":{"minified":"34.4","gzipped":"12.5","minBytes":35241,"gzBytes":12830},"scrollbar":{"minified":"28.7","gzipped":"9.9","minBytes":29395,"gzBytes":10138},"sortable":{"minified":"31.0","gzipped":"10.8","minBytes":31707,"gzBytes":11031},"groups":{"minified":"32.9","gzipped":"11.6","minBytes":33664,"gzBytes":11872},"scale":{"minified":"34.8","gzipped":"11.8","minBytes":35607,"gzBytes":12051},"page":{"minified":"24.0","gzipped":"8.6","minBytes":24582,"gzBytes":8850},"snapshots":{"minified":"25.3","gzipped":"9.2","minBytes":25900,"gzBytes":9383},"transition":{"minified":"28.3","gzipped":"9.7","minBytes":29026,"gzBytes":9937},"autosize":{"minified":"23.4","gzipped":"8.6","minBytes":23995,"gzBytes":8763},"grid":{"minified":"27.6","gzipped":"10.0","minBytes":28236,"gzBytes":10212},"table":{"minified":"39.7","gzipped":"13.7","minBytes":40694,"gzBytes":14008},"masonry":{"minified":"31.3","gzipped":"11.4","minBytes":32056,"gzBytes":11681}}
package/dist/types.d.ts CHANGED
@@ -493,7 +493,7 @@ export interface VListEvents<T extends VListItem = VListItem> extends EventMap {
493
493
  /** Scroll position changed */
494
494
  scroll: {
495
495
  scrollPosition: number;
496
- direction: "up" | "down";
496
+ direction: "up" | "down" | "left" | "right";
497
497
  };
498
498
  /** Scroll velocity changed */
499
499
  "velocity:change": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vlist",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",
package/dist/constants.js DELETED
@@ -1,83 +0,0 @@
1
- /**
2
- * vlist - Constants
3
- * All default values and magic numbers in one place
4
- */
5
- // =============================================================================
6
- // Core
7
- // =============================================================================
8
- /** Default number of extra items to render outside viewport */
9
- export const OVERSCAN = 3;
10
- /** Default CSS class prefix */
11
- export const CLASS_PREFIX = "vlist";
12
- // =============================================================================
13
- // Async Loading
14
- // =============================================================================
15
- /** Distance from bottom (in pixels) to trigger infinite scroll */
16
- export const LOAD_THRESHOLD = 200;
17
- /** Default number of items to load per request */
18
- export const INITIAL_LOAD_SIZE = 50;
19
- /** Default load size for data manager */
20
- export const LOAD_SIZE = 50;
21
- /** Number of extra items to preload ahead of scroll direction */
22
- export const PRELOAD_AHEAD = 50;
23
- /**
24
- * Velocity threshold for preloading (px/ms)
25
- * When scrolling faster than this but slower than LOAD_VELOCITY_THRESHOLD,
26
- * we preload extra items in the scroll direction to reduce placeholder flashing.
27
- */
28
- export const PRELOAD_VELOCITY_THRESHOLD = 2;
29
- /**
30
- * Velocity threshold above which data loading is cancelled (px/ms)
31
- * Above this: skip loading, show placeholders, defer to idle.
32
- */
33
- export const LOAD_VELOCITY_THRESHOLD = 15;
34
- /** Maximum concurrent chunk requests (0 = unlimited) */
35
- export const MAX_CONCURRENT_LOADS = 6;
36
- // =============================================================================
37
- // Scale
38
- // =============================================================================
39
- /**
40
- * Maximum virtual size in pixels along the main axis
41
- * Most browsers support ~16.7M pixels, we use 16M for safety margin
42
- */
43
- export const MAX_VIRTUAL_SIZE = 16000000;
44
- // =============================================================================
45
- // Scrolling
46
- // =============================================================================
47
- /** Idle timeout for scroll detection (ms) */
48
- export const SCROLL_IDLE_TIMEOUT = 150;
49
- /** Default wheel sensitivity multiplier */
50
- export const WHEEL_SENSITIVITY = 1;
51
- /** Default easing for smooth scroll animations */
52
- export const SCROLL_EASING = (t) => t < 0.5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2;
53
- /** Default smooth scroll duration (ms) */
54
- export const SCROLL_DURATION = 300;
55
- // =============================================================================
56
- // Scrollbar
57
- // =============================================================================
58
- /** Default auto-hide behavior */
59
- export const SCROLLBAR_AUTO_HIDE = true;
60
- /** Default auto-hide delay in milliseconds */
61
- export const SCROLLBAR_AUTO_HIDE_DELAY = 1000;
62
- /** Default minimum thumb size in pixels */
63
- export const SCROLLBAR_MIN_THUMB_SIZE = 30;
64
- // =============================================================================
65
- // Sparse Storage
66
- // =============================================================================
67
- /** Default chunk size for sparse storage */
68
- export const CHUNK_SIZE = 100;
69
- /** Default maximum cached items before eviction */
70
- export const MAX_CACHED_ITEMS = 10000;
71
- /** Buffer for eviction (keep extra items around visible range) */
72
- export const EVICTION_BUFFER = 500;
73
- // =============================================================================
74
- // Placeholder
75
- // =============================================================================
76
- /** Default character used for masking text in placeholders */
77
- export const MASK_CHARACTER = "x";
78
- /** Maximum items to sample for placeholder structure analysis */
79
- export const MAX_SAMPLE_SIZE = 20;
80
- /** Internal flag to identify placeholder items */
81
- export const PLACEHOLDER_FLAG = "_isPlaceholder";
82
- /** Prefix for placeholder item IDs */
83
- export const PLACEHOLDER_ID_PREFIX = "__placeholder_";