@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 $j=(U={})=>{let{chunkSize:G=100,maxCachedItems:Y=5000,evictionBuffer:N=200,onEvict:M}=U,Q=new Map,j=0,D=0,f=(q)=>{let X=Q.get(q);if(!X)X={items:Array(G),count:0,lastAccess:Date.now()},Q.set(q,X);else X.lastAccess=Date.now();return X},z=(q)=>{return Math.floor(q/G)},W=(q)=>{return q%G},y=()=>j,L=(q)=>{j=q},b=(q)=>{if(q<0||q>=j)return;let X=z(q),B=Q.get(X);if(!B)return;return B.items[W(q)]},C=(q)=>{if(q<0||q>=j)return!1;let X=z(q),B=Q.get(X);if(!B)return!1;return B.items[W(q)]!==void 0},u=(q,X)=>{let B=z(q),K=f(B),_=W(q),l=K.items[_]===void 0;if(K.items[_]=X,l)K.count++,D++;if(q>=j)j=q+1},H=(q,X)=>{for(let B=0;B<X.length;B++){let K=X[B];if(K!==void 0)u(q+B,K)}},Z=(q)=>{if(q<0||q>=j)return!1;let X=z(q),B=Q.get(X);if(!B)return!1;let K=W(q);if(B.items[K]===void 0)return!1;if(B.items[K]=void 0,B.count--,D--,B.count===0)Q.delete(X);return!0},F=(q,X)=>{let B=[];for(let K=q;K<=X&&K<j;K++)B.push(b(K));return B},V=(q,X)=>{for(let B=q;B<=X&&B<j;B++)if(!C(B))return!1;return!0},O=()=>{let q=[],X=null,B=Array.from(Q.keys()).sort((K,_)=>K-_);for(let K of B){let _=Q.get(K);if(!_)continue;let l=K*G;for(let R=0;R<G;R++){let p=l+R;if(p>=j)break;if(_.items[R]!==void 0)if(X===null)X={start:p,end:p};else if(p===X.end+1)X.end=p;else q.push(X),X={start:p,end:p};else if(X!==null)q.push(X),X=null}}if(X!==null)q.push(X);return q},h=(q,X)=>{let B=[],K=null;for(let _=q;_<=X&&_<j;_++)if(!C(_))if(K===null)K={start:_,end:_};else K.end=_;else if(K!==null)B.push(K),K=null;if(K!==null)B.push(K);return B},w=(q)=>{return Q.has(q)},k=(q)=>{let X=Q.get(q);if(X)X.lastAccess=Date.now()},A=(q,X)=>{if(q>X||Q.size===0)return;let B=Date.now(),K=z(Math.max(0,q)),_=z(Math.min(j-1,X));for(let l=K;l<=_;l++){let R=Q.get(l);if(R)R.lastAccess=B}},T=(q,X)=>{if(D<=Y)return 0;let B=Math.max(0,q-N),K=Math.min(j-1,X+N),_=z(B),l=z(K),R=0,p=[];for(let[i,qj]of Q)if(i<_||i>l)R+=qj.count,p.push(i),D-=qj.count,Q.delete(i);if(R>0&&M)M(R,p);return R},I=()=>{if(D<=Y)return 0;let q=Array.from(Q.entries()).sort(([,K],[,_])=>K.lastAccess-_.lastAccess),X=0,B=[];for(let[K,_]of q){if(D<=Y)break;X+=_.count,D-=_.count,B.push(K),Q.delete(K)}if(X>0&&M)M(X,B);return X},r=()=>{return{totalItems:j,cachedItems:D,cachedChunks:Q.size,chunkSize:G,maxCachedItems:Y,memoryEfficiency:j>0?1-D/j:1}},t=()=>D,e=()=>{Q.clear(),D=0};return{chunkSize:G,maxCachedItems:Y,getTotal:y,setTotal:L,get:b,has:C,set:u,setRange:H,delete:Z,getRange:F,isRangeLoaded:V,getLoadedRanges:O,findUnloadedRanges:h,getChunkIndex:z,isChunkLoaded:w,touchChunk:k,touchChunksForRange:A,evictDistant:T,evictToLimit:I,getStats:r,getCachedCount:t,clear:e,reset:()=>{e(),j=0}}},Uj=(U)=>{if(U.length===0)return[];let G=[...U].sort((N,M)=>N.start-M.start),Y=[{...G[0]}];for(let N=1;N<G.length;N++){let M=G[N],Q=Y[Y.length-1];if(M.start<=Q.end+1)Q.end=Math.max(Q.end,M.end);else Y.push({...M})}return Y},Xj=(U,G,Y)=>{let N=Math.floor(U.start/Y)*Y,M=Math.ceil((U.end+1)/Y)*Y-1,Q={start:N,end:M};if(G.length===0)return[Q];let j=[],D=Uj(G),f=Q.start;for(let z of D){if(z.end<f)continue;if(z.start>Q.end)break;if(z.start>f)j.push({start:f,end:Math.min(z.start-1,Q.end)});if(f=z.end+1,f>Q.end)break}if(f<=Q.end)j.push({start:f,end:Q.end});return j};var Yj=(U={})=>{let{enabled:G=!0,maskCharacter:Y="█",randomVariance:N=!0,maxSampleSize:M=20,customGenerator:Q}=U,j=null,D=!1,f=0,z=(Z)=>{if(!G||D||Z.length===0)return;let F=new Map,V=new Map,O=Math.min(Z.length,M);for(let h=0;h<O;h++){let w=Z[h];if(!w||typeof w!=="object")continue;for(let[k,A]of Object.entries(w)){if(k.startsWith("_")||k==="id")continue;if(!V.has(k))V.set(k,{lengths:[],types:new Set});let T=V.get(k),I=Array.isArray(A)?"array":typeof A;if(T.types.add(I),typeof A==="string")T.lengths.push(A.length);else if(A!==null&&A!==void 0)T.lengths.push(String(A).length)}}for(let[h,w]of V){if(w.lengths.length===0)continue;let k=Math.min(...w.lengths),A=Math.max(...w.lengths),T=Math.round(w.lengths.reduce((r,t)=>r+t,0)/w.lengths.length),I="string";if(w.types.has("number")&&w.types.size===1)I="number";else if(w.types.has("boolean")&&w.types.size===1)I="boolean";else if(w.types.has("array"))I="array";else if(w.types.has("object")&&!w.types.has("string"))I="object";F.set(h,{minLength:k,maxLength:A,avgLength:T,type:I})}j=F,D=!0},W=()=>D,y=(Z)=>{let F=Z.avgLength;if(N&&Z.minLength!==Z.maxLength){if(F=Math.floor(Math.random()*(Z.maxLength-Z.minLength+1)+Z.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return Y.repeat(Math.max(1,F))},L=(Z)=>{if(Q)return{...Q(Z),["_isPlaceholder"]:!0};let F={id:`__placeholder_${f++}`,["_isPlaceholder"]:!0,_index:Z};if(!j||j.size===0)return F.label=Y.repeat(12),F;for(let[V,O]of j)switch(O.type){case"string":F[V]=y(O);break;case"number":F[V]=0;break;case"boolean":F[V]=!1;break;case"array":F[V]=[];break;case"object":F[V]={};break;default:F[V]=y(O)}return F};return{analyzeStructure:z,hasAnalyzedStructure:W,generate:L,generateRange:(Z,F)=>{let V=[];for(let O=Z;O<=F;O++)V.push(L(O));return V},isPlaceholder:(Z)=>{if(!Z||typeof Z!=="object")return!1;return Z._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{j=null,D=!1,f=0}}},d=(U)=>{if(!U||typeof U!=="object")return!1;return U._isPlaceholder===!0},Nj=(U)=>{return U.filter((G)=>!d(G))},Fj=(U)=>{let G=0;for(let Y of U)if(Y!==void 0&&!d(Y))G++;return G},Ej=(U,G,Y)=>{let N=0;for(let M=0;M<G.length;M++){let Q=Y+M,j=U[Q];if(j===void 0||d(j)){if(U[Q]=G[M],d(j))N++}}return N};var Lj=50,Bj=(U={})=>{let{adapter:G,initialItems:Y,initialTotal:N,storage:M,placeholder:Q,pageSize:j=Lj,onStateChange:D,onItemsLoaded:f,onItemsEvicted:z}=U,W=$j({...M,onEvict:(J,$)=>{z?.(J),O()}}),y=null,L=()=>{if(!y)y=Yj(Q);return y},b=new Map,C=!1,u,H=!0,Z,F=[],V=new Map,O=()=>{D?.(e())},h=()=>{b.clear();let J=W.getLoadedRanges();for(let $ of J)for(let P=$.start;P<=$.end;P++){let E=W.get(P);if(E&&!d(E))b.set(E.id,P)}},w=(J,$)=>{if(!d($))b.set($.id,J)},k=(J)=>{b.delete(J)},A=(J,$)=>{return`${J}-${$}`},T=()=>W.getTotal(),I=()=>W.getCachedCount(),r=()=>C,t=()=>H,e=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:C,pendingRanges:F,error:u,hasMore:H,cursor:Z}),Zj=()=>W,q=()=>L(),X=(J)=>{let $=W.get(J);if($!==void 0)return $;if(J>=0&&J<W.getTotal())return L().generate(J);return},B=(J)=>{let $=b.get(J);if($===void 0)return;return W.get($)},K=(J)=>{return b.get(J)??-1},_=(J)=>{let $=W.get(J);return $!==void 0&&!d($)},l=(J,$)=>{let P=[],E=W.getTotal(),g=0,x=0;W.touchChunksForRange(J,Math.min($,E-1));for(let c=J;c<=$&&c<E;c++){let s=W.get(c);if(s!==void 0)P.push(s),g++;else P.push(L().generate(c)),x++}return P},R=(J)=>{W.setTotal(J),H=W.getCachedCount()<J,O()},p=(J,$=0,P)=>{if(y&&!y.hasAnalyzedStructure()&&J.length>0)y.analyzeStructure(J);for(let E=0;E<J.length;E++){let g=J[E];if(g!==void 0){let x=$+E;W.set(x,g),w(x,g)}}if(P!==void 0)W.setTotal(P);else if($+J.length>W.getTotal())W.setTotal($+J.length);H=W.getCachedCount()<W.getTotal(),f?.(J,$,W.getTotal()),O()},i=(J,$)=>{let P=b.get(J);if(P===void 0)return!1;let E=W.get(P);if(!E)return!1;let g={...E,...$};if(W.set(P,g),$.id!==void 0&&$.id!==J)k(J),w(P,g);return O(),!0},qj=(J)=>{let $=b.get(J);if($===void 0)return!1;W.delete($),k(J);let P=W.getTotal();if(P>0)W.setTotal(P-1);return O(),!0},Jj=async(J,$)=>{if(!G)return;let P=A(J,$);if(V.has(P))return;let E=W.getLoadedRanges(),g=Xj({start:J,end:$},E,W.chunkSize);if(g.length===0)return;let x=W.chunkSize,c=[];for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);for(let S=a;S<=n;S++){let o=S*x,m=o+x-1,Qj=A(o,m);if(!c.some((Wj)=>Wj.start===o)&&!V.has(Qj))c.push({start:o,end:m})}}let s=[];for(let v of g){let a=Math.floor(v.start/x),n=Math.floor(v.end/x);for(let S=a;S<=n;S++){let o=S*x,m=o+x-1,Qj=A(o,m);if(V.has(Qj)){let Wj=V.get(Qj);if(!s.includes(Wj))s.push(Wj)}}}for(let v of c){let a=A(v.start,v.end),n=(async()=>{F.push(v),C=!0,u=void 0,O();try{let S=v.end-v.start+1,o={offset:v.start,limit:S,cursor:void 0},m=await G.read(o);if(p(m.items,v.start,m.total),m.cursor)Z=m.cursor;if(m.hasMore!==void 0)H=m.hasMore;else if(m.total!==void 0)H=W.getCachedCount()<m.total}catch(S){u=S instanceof Error?S:Error(String(S))}finally{V.delete(a),F=F.filter((S)=>S.start!==v.start||S.end!==v.end),C=V.size>0,O()}})();V.set(a,n),s.push(n)}await Promise.all(s)},Aj=async(J,$)=>{if(W.isRangeLoaded(J,$))return;await Jj(J,$)},Dj=async()=>{if(!G)return;await Jj(0,j-1)},Oj=async()=>{if(!G||C||!H)return!1;let J=W.getCachedCount(),$=W.getTotal(),P=J,E=Math.min(P+j-1,$>0?$-1:P+j-1);if(P>=$&&$>0)return H=!1,!1;return await Jj(P,E),W.getCachedCount()>J},zj=async()=>{if(W.clear(),b.clear(),y)y.clear();Z=void 0,H=!0,u=void 0,O(),await Dj()},Hj=(J,$)=>{if(W.evictDistant(J,$)>0)h()},yj=()=>{W.clear(),b.clear(),Z=void 0,u=void 0,F=[],C=!1,O()},bj=()=>{if(W.reset(),b.clear(),y)y.clear();Z=void 0,H=!0,u=void 0,F=[],C=!1,O()};if(Y&&Y.length>0)p(Y,0,N??Y.length);else if(N!==void 0)W.setTotal(N);return{getState:e,getTotal:T,getCached:I,getIsLoading:r,getHasMore:t,getStorage:Zj,getPlaceholders:q,getItem:X,getItemById:B,getIndexById:K,isItemLoaded:_,getItemsInRange:l,setTotal:R,setItems:p,updateItem:i,removeItem:qj,loadRange:Jj,ensureRange:Aj,loadInitial:Dj,loadMore:Oj,reload:zj,evictDistant:Hj,clear:yj,reset:bj}};var Vj=(U,G,Y,N,M,Q)=>{if(N===0||G===0)return Q.start=0,Q.end=-1,Q;let j=Y.indexAtOffset(U),D=Y.indexAtOffset(U+G);if(D<N-1)D++;return Q.start=Math.max(0,j),Q.end=Math.min(N-1,Math.max(0,D)),Q},wj=(U,G,Y,N)=>{if(Y===0)return N.start=0,N.end=-1,N;return N.start=Math.max(0,U.start-G),N.end=Math.min(Y-1,U.end+G),N};var Gj=(U,G,Y,N,M,Q=Vj)=>{return Q(U.scrollTop,U.containerHeight,G,Y,M,U.visibleRange),wj(U.visibleRange,N,Y,U.renderRange),U.totalHeight=M.virtualHeight,U.actualHeight=M.actualHeight,U.isCompressed=M.isCompressed,U.compressionRatio=M.ratio,U};var Kj=200,jj=50;var Mj=15,Pj=2,_j=50;var fj=(U)=>{let{adapter:G,loading:Y}=U,N=Y?.cancelThreshold??Mj,M=Y?.preloadThreshold??Pj,Q=Y?.preloadAhead??_j;return{name:"withAsync",priority:20,methods:["reload"],setup(j){let{emitter:D}=j,f=j.config.reverse,z=j.config.overscan,W=Bj({adapter:G,pageSize:jj,onStateChange:()=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.updateCompressionMode(),j.state.viewportState=Gj(j.state.viewportState,j.heightCache,j.getVirtualTotal(),z,j.getCachedCompression()),j.updateContentSize(j.state.viewportState.totalHeight),j.renderIfNeeded()},onItemsLoaded:(Z,F,V)=>{if(j.state.isInitialized)j.heightCache.rebuild(j.getVirtualTotal()),j.forceRender(),D.emit("load:end",{items:Z,total:V})}});j.replaceDataManager(W);let y=null,L=null,b=0,C=()=>{if(L){let Z=L;L=null,j.dataManager.ensureRange(Z.start,Z.end).catch((F)=>{D.emit("error",{error:F,context:"ensureRange"})})}};j.afterScroll.push((Z,F)=>{if(j.state.isDestroyed)return;let V=j.scrollController.getVelocity(),h=j.scrollController.isTracking()&&V<=N;if(L&&b>N&&V<=N){let A=L;L=null,j.dataManager.ensureRange(A.start,A.end).catch((T)=>{D.emit("error",{error:T,context:"ensureRange"})})}if(b=V,h&&!j.dataManager.getIsLoading()&&j.dataManager.getHasMore()){if(f){if(Z<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((A)=>{D.emit("error",{error:A,context:"loadMore"})})}else if(j.state.viewportState.totalHeight-Z-j.state.viewportState.containerHeight<Kj)D.emit("load:start",{offset:j.dataManager.getCached(),limit:jj}),j.dataManager.loadMore().catch((T)=>{D.emit("error",{error:T,context:"loadMore"})})}let{renderRange:w}=j.state.viewportState;if(!y||w.start!==y.start||w.end!==y.end)if(y={start:w.start,end:w.end},h){L=null;let{start:A,end:T}=w,I=j.getVirtualTotal();if(V>M)if(F==="down")T=Math.min(w.end+Q,I-1);else A=Math.max(w.start-Q,0);j.dataManager.ensureRange(A,T).catch((r)=>{D.emit("error",{error:r,context:"ensureRange"})})}else L={start:w.start,end:w.end}});let u=200,H=null;j.afterScroll.push((Z,F)=>{if(H!==null)clearTimeout(H);H=setTimeout(()=>{H=null,C()},u)}),j.destroyHandlers.push(()=>{if(H!==null)clearTimeout(H),H=null}),D.on("load:start",()=>{j.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{j.dom.root.removeAttribute("aria-busy")}),j.methods.set("reload",async()=>{await j.dataManager.reload()}),D.emit("load:start",{offset:0,limit:jj}),j.dataManager.loadInitial().catch((Z)=>{D.emit("error",{error:Z,context:"loadInitial"})})}}};export{fj as withAsync,Ej as replacePlaceholders,Uj as mergeRanges,d as isPlaceholderItem,Nj as filterPlaceholders,$j as createSparseStorage,Yj as createPlaceholderManager,Bj as createDataManager,Fj as countRealItems,Xj as calculateMissingRanges};
@@ -6,10 +6,10 @@
6
6
  * registration points for handlers, methods, and cleanup callbacks.
7
7
  */
8
8
  import type { VListItem, VListEvents } from "../types";
9
- import type { HeightCache } from "../render/heights";
10
- import type { Renderer, DOMStructure } from "../render/renderer";
9
+ import type { HeightCache } from "../rendering/heights";
10
+ import type { Renderer, DOMStructure } from "../rendering/renderer";
11
11
  import type { SimpleDataManager } from "./data";
12
- import type { ScrollController } from "../plugins/scroll/controller";
12
+ import type { ScrollController } from "../features/scrollbar/controller";
13
13
  import type { Emitter } from "../events/emitter";
14
14
  import type { BuilderConfig, BuilderContext, BuilderState, ResolvedBuilderConfig } from "./types";
15
15
  /** Options for creating a BuilderContext */
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/builder/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAMjB,4CAA4C;AAC5C,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC1E,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,cAAc,EAAE,qBAAqB,CAAC;IACtC,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC3D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EAClE,SAAS,2BAA2B,CAAC,CAAC,CAAC,KACtC,cAAc,CAAC,CAAC,CAmUlB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/builder/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAMjB,4CAA4C;AAC5C,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC1E,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,cAAc,EAAE,qBAAqB,CAAC;IACtC,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC3D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EAClE,SAAS,2BAA2B,CAAC,CAAC,CAAC,KACtC,cAAc,CAAC,CAAC,CAmUlB,CAAC"}
@@ -11,6 +11,6 @@
11
11
  */
12
12
  import type { VListItem } from "../types";
13
13
  import type { BuilderConfig, VListBuilder } from "./types";
14
- export type { CompressionState } from "../render/virtual";
14
+ export type { CompressionState } from "../rendering/viewport";
15
15
  export declare const vlist: <T extends VListItem = VListItem>(config: BuilderConfig<T>) => VListBuilder<T>;
16
16
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/builder/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,SAAS,EAOV,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACV,aAAa,EAKb,YAAY,EAEb,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqb1D,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,QAAQ,aAAa,CAAC,CAAC,CAAC,KACvB,YAAY,CAAC,CAAC,CAoEhB,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/builder/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,SAAS,EAOV,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACV,aAAa,EAKb,YAAY,EAEb,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAqb9D,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,QAAQ,aAAa,CAAC,CAAC,CAAC,KACvB,YAAY,CAAC,CAAC,CAoEhB,CAAC"}
@@ -1,250 +1 @@
1
- var QJ=0,m=5,qJ=100,Oj=2,KJ=(X=0)=>{let U=Array(m);
2
- for(let $=0;
3
- $<m;
4
- $++)U[$]={position:0,time:0};
5
- return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},UJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;
6
- if(Y===0)return X;
7
- if(Y>qJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;
8
- let Q=X.samples[0];
9
- return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}
10
- let V=X.samples[X.sampleIndex];
11
- if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Oj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],D=U-K.position,C=$-K.time;
12
- X.velocity=C>0?Math.abs(D)/C:0}
13
- return X.lastPosition=U,X.lastTime=$,X},Sj=(X,U)=>{if(typeof X==="number"){let Q=U;
14
- return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;
15
- return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}
16
- let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;
17
- for(let K=0;
18
- K<Q;
19
- K++)Y[K+1]=Y[K]+X(K)};
20
- return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;
21
- if(Q>=$)return Y[$];
22
- return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;
23
- if(Q<=0)return 0;
24
- if(Q>=Y[$])return $-1;
25
- let K=0,D=$-1;
26
- while(K<D){let C=K+D+1>>>1;
27
- if(Y[C]<=Q)K=C;
28
- else D=C-1}
29
- return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},YJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;
30
- return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};
31
- return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((D)=>{try{D(K)}
32
- catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},BJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);
33
- if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);
34
- return U}
35
- return X},GJ=(X,U,$,Y)=>{let V=document.createElement("div");
36
- if(V.className=U,Y)V.classList.add(`${U}--horizontal`);
37
- if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);
38
- if(Y)V.setAttribute("aria-orientation","horizontal");
39
- let Q=document.createElement("div");
40
- if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";
41
- else Q.style.overflow="auto";
42
- Q.style.height="100%",Q.style.width="100%";
43
- let K=document.createElement("div");
44
- if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";
45
- else K.style.width="100%";
46
- let D=document.createElement("div");
47
- if(D.className=`${U}-items`,D.style.position="relative",Y)D.style.height="100%";
48
- else D.style.width="100%";
49
- return K.appendChild(D),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:D}},WJ=(X=100)=>{let U=[];
50
- return{acquire:()=>{let $=U.pop();
51
- if($)return $;
52
- let Y=document.createElement("div");
53
- return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},DJ=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;
54
- return}
55
- let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);
56
- if(K<Y-1)K++;
57
- V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},VJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;
58
- return}
59
- Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},_J=(X,U,$,Y,V)=>{if(Y===0)return 0;
60
- let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),D=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;
61
- switch(V){case"center":f=K-($-D)/2;
62
- break;
63
- case"end":f=K-$+D;
64
- break;
65
- default:f=K}
66
- return Math.max(0,Math.min(f,C))},LJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,NJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};
67
- if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};
68
- return{align:"start",behavior:"auto",duration:300}},MJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");
69
- if(!X.item)throw Error("[vlist/builder] item configuration is required");
70
- let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;
71
- if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);
72
- if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);
73
- if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);
74
- if(!X.item.template)throw Error("[vlist/builder] item.template is required");
75
- if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");
76
- let V=new Map,Q=!1,K={use(D){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");
77
- return V.set(D.name,D),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");
78
- return Q=!0,AJ(X,V,U,Y)}};
79
- return K};
80
- function AJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:D="vlist",ariaLabel:C,reverse:f=!1,scroll:Kj}=X,Ij=Kj?.wheel??!0,Fj=Kj?.wrap??!1,c=f,Rj=`${D}-${QJ++}`,Tj=Y,yj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,t=V.template,uj={overscan:K,classPrefix:D,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:Rj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),s=new Set(d.map((j)=>j.name));
81
- for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(s.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}
82
- if($){if(s.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");
83
- if(s.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}
84
- if(c){if(s.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true");
85
- if(s.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with reverse: true")}
86
- let fj=BJ(X.container),_=GJ(fj,D,C,$),k=YJ(),B=Q?[...Q]:[],N=Sj(Tj,B.length),e=WJ(),R=_.viewport.clientHeight,jj=_.viewport.clientWidth,l=!1,x=!1,O=0,p=null,a=null,I=KJ(0),Jj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},H={viewportState:{scrollTop:0,containerHeight:R,totalHeight:N.getTotalHeight(),actualHeight:N.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},v=new Map,Uj={selected:!1,focused:!1},xj=`${D}-item`,r="",z=new Map,Yj=()=>{z.clear();
87
- for(let j=0;
88
- j<B.length;
89
- j++){let J=B[j];
90
- if(J)z.set(J.id,j)}};
91
- Yj();
92
- let F=null,P=()=>F?F.getTotal():B.length,Bj=[],Gj=[],Wj=[],Dj=[],o=[],Vj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;
93
- else _.viewport.scrollTop=j},Cj=(j=2)=>{let J=N.getTotalHeight();
94
- return O+R>=J-j},pj=!1,y,T,kj=(j,J,Z,q,W)=>{DJ(j,J,Z,q,W)},Xj=(j,J,Z,q,W)=>{return _J(j,J,Z,q,W)},_j=(j,J)=>{if(typeof J==="string")j.innerHTML=J;
95
- else j.replaceChildren(J)},Lj=(j,J)=>{let Z=Math.round(N.getOffset(J));
96
- if($)j.style.transform=`translateX(${Z}px)`;
97
- else j.style.transform=`translateY(${Z}px)`},hj=(j,J)=>{let Z=e.acquire();
98
- if(Z.className=xj,$){if(Z.style.width=`${N.getHeight(j)}px`,yj!=null)Z.style.height=`${yj}px`}
99
- else Z.style.height=`${N.getHeight(j)}px`;
100
- return Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${Rj}-item-${j}`,r=String(P()),Z.setAttribute("aria-setsize",r),Z.setAttribute("aria-posinset",String(j+1)),_j(Z,t(J,j,Uj)),Lj(Z,j),Z},n=()=>{let j=`${N.getTotalHeight()}px`;
101
- if($)_.content.style.width=j;
102
- else _.content.style.height=j},Nj=new Set,Mj=-1,gj=()=>{if(l)return;
103
- let j=P();
104
- if(kj(O,R,N,j,Jj),VJ(Jj,K,j,E),E.start===h.start&&E.end===h.end)return;
105
- let J=String(j),Z=J!==r;
106
- r=J;
107
- for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),e.release(A),v.delete(G);
108
- let q=document.createDocumentFragment(),W=[];
109
- for(let G=E.start;
110
- G<=E.end;
111
- G++){let A=F?F.getItem(G):B[G];
112
- if(!A)continue;
113
- let b=v.get(G);
114
- if(b){let w=b.dataset.id,Qj=String(A.id);
115
- if(w!==Qj)if(_j(b,t(A,G,Uj)),b.dataset.id=Qj,$)b.style.width=`${N.getHeight(G)}px`;
116
- else b.style.height=`${N.getHeight(G)}px`;
117
- Lj(b,G);
118
- let qj=Nj.has(A.id),$J=G===Mj;
119
- if(b.classList.toggle(`${D}-item--selected`,qj),b.classList.toggle(`${D}-item--focused`,$J),b.ariaSelected=qj?"true":"false",Z)b.setAttribute("aria-setsize",r)}
120
- else{let w=hj(G,A),Qj=Nj.has(A.id),qj=G===Mj;
121
- if(Qj)w.classList.add(`${D}-item--selected`),w.ariaSelected="true";
122
- if(qj)w.classList.add(`${D}-item--focused`);
123
- q.appendChild(w),W.push({index:G,element:w})}}
124
- if(W.length>0){_.items.appendChild(q);
125
- for(let{index:G,element:A}
126
- of W)v.set(G,A)}
127
- h.start=E.start,h.end=E.end,H.lastRenderRange.start=E.start,H.lastRenderRange.end=E.end,H.viewportState.scrollTop=O,H.viewportState.visibleRange.start=Jj.start,H.viewportState.visibleRange.end=Jj.end,H.viewportState.renderRange.start=E.start,H.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},mj=()=>{h.start=-1,h.end=-1,y()};
128
- y=gj,T=mj;
129
- let i=()=>{if(l)return;
130
- let j=u(),J=j>=O?"down":"up";
131
- if(I=UJ(I,j),!_.root.classList.contains(`${D}--scrolling`))_.root.classList.add(`${D}--scrolling`);
132
- O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Oj});
133
- for(let Z=0;
134
- Z<Bj.length;
135
- Z++)Bj[Z](j,J);
136
- if(a)clearTimeout(a);
137
- a=setTimeout(()=>{_.root.classList.remove(`${D}--scrolling`),I.velocity=0,I.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Kj?.idleTimeout??150)},Zj=null,g=_.viewport;
138
- if(g.addEventListener("scroll",i,{passive:!0}),$&&Ij)Zj=(j)=>{if(j.deltaX)return;
139
- j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",Zj);
140
- _.viewport.classList.add(`${D}-viewport--custom-scrollbar`);
141
- let zj=(j)=>{let Z=j.target.closest("[data-index]");
142
- if(Z){let q=parseInt(Z.dataset.index??"-1",10);
143
- if(q>=0){let W=F?.getItem(q)??B[q];
144
- if(W){if(W.__groupHeader)return;
145
- k.emit("item:click",{item:W,index:q,event:j})}}}
146
- for(let q=0;
147
- q<Gj.length;
148
- q++)Gj[q](j)},cj=(j)=>{let Z=j.target.closest("[data-index]");
149
- if(Z){let q=parseInt(Z.dataset.index??"-1",10);
150
- if(q>=0){let W=F?.getItem(q)??B[q];
151
- if(W){if(W.__groupHeader)return;
152
- k.emit("item:dblclick",{item:W,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;
153
- J<Wj.length;
154
- J++)Wj[J](j)};
155
- _.items.addEventListener("click",zj),_.items.addEventListener("dblclick",cj),_.root.addEventListener("keydown",Pj);
156
- let Aj=!0,dj=()=>jj,sj=()=>R,bj=new ResizeObserver((j)=>{if(l)return;
157
- for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,W=$?q:Z;
158
- if(jj=q,Math.abs(W-R)>1){if(R=W,H.viewportState.containerHeight=W,x)n(),y(),k.emit("resize",{height:Z,width:q})}
159
- if(x)for(let G=0;
160
- G<Dj.length;
161
- G++)Dj[G](q,Z)}});
162
- if(Aj)bj.observe(_.viewport);
163
- let M={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return uj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,W)=>{Nj=Z,Mj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);
164
- if(!q)return;
165
- q.classList.toggle(`${D}-item--selected`,J),q.classList.toggle(`${D}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return F},set dataManager(j){F=j},get scrollController(){return Ej},set scrollController(j){Ej=j},state:H,getContainerWidth(){return jj},afterScroll:Bj,clickHandlers:Gj,keydownHandlers:Wj,resizeHandlers:Dj,contentSizeHandlers:o,destroyHandlers:Vj,methods:L,replaceTemplate(j){t=j},replaceRenderer(j){},replaceDataManager(j){F=j},replaceScrollController(j){Ej=j},getItemsForRange(j){let J=[];
166
- for(let Z=j.start;
167
- Z<=j.end;
168
- Z++){let q=F?F.getItem(Z):B[Z];
169
- if(q)J.push(q)}
170
- return J},getAllLoadedItems(){if(F){let j=F.getTotal(),J=[];
171
- for(let Z=0;
172
- Z<j;
173
- Z++){let q=F.getItem(Z);
174
- if(q)J.push(q)}
175
- return J}
176
- return[...B]},getVirtualTotal(){return P()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:P(),containerHeight:R,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){P=j},rebuildHeightCache(j){N.rebuild(j??P())},setHeightConfig(j){N=Sj(j,P())},updateContentSize(j){let J=`${j}px`;
177
- if($)_.content.style.width=J;
178
- else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){kj=j},setScrollToPosFn(j){Xj=j},setPositionElementFn(j){Lj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),i()}},setScrollTarget(j){g.removeEventListener("scroll",i),g=j,g.addEventListener("scroll",i,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){dj=j.width,sj=j.height,jj=j.width(),R=j.height(),H.viewportState.containerHeight=R},disableViewportResize(){if(Aj)Aj=!1,bj.unobserve(_.viewport)}};
179
- F={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=z.get(j);
180
- return J!==void 0?B[J]:void 0},getIndexById:(j)=>z.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),W=Math.min(J,B.length-1);
181
- for(let G=q;
182
- G<=W;
183
- G++)Z.push(B[G]);
184
- return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];
185
- else{let q=J+j.length;
186
- if(B.length<q)B.length=q;
187
- for(let W=0;
188
- W<j.length;
189
- W++)B[J+W]=j[W]}
190
- if(Yj(),x){N.rebuild(P()),n(),M.updateCompressionMode();
191
- for(let q=0;
192
- q<o.length;
193
- q++)o[q]();
194
- T()}},updateItem:(j,J)=>{let Z=z.get(j);
195
- if(Z===void 0)return!1;
196
- let q=B[Z];
197
- if(!q)return!1;
198
- if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)z.delete(j),z.set(J.id,Z);
199
- let W=v.get(Z);
200
- if(W)_j(W,t(B[Z],Z,Uj)),W.dataset.id=String(B[Z].id);
201
- return!0},removeItem:(j)=>{let J=z.get(j);
202
- if(J===void 0)return!1;
203
- if(B.splice(J,1),Yj(),x){N.rebuild(P()),n(),M.updateCompressionMode();
204
- for(let Z=0;
205
- Z<o.length;
206
- Z++)o[Z]();
207
- T()}
208
- return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],z.clear()},reset:()=>{if(B=[],z.clear(),x)N.rebuild(0),n(),T()}};
209
- let Ej={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;
210
- S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>Cj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-R);
211
- return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Oj,isScrolling:()=>_.root.classList.contains(`${D}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>pj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{R=j},destroy:()=>{}},Hj=new Map;
212
- for(let j of d)if(j.methods)for(let J of j.methods){let Z=Hj.get(J);
213
- if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);
214
- Hj.set(J,j.name)}
215
- for(let j of d)j.setup(M);
216
- if(x=!0,M.state.isInitialized=!0,n(),y(),c&&B.length>0){let j=Xj(B.length-1,N,R,B.length,"end");
217
- S(j),O=j,y()}
218
- let lj=(j)=>{M.dataManager.setItems(j,0,j.length)},aj=c?(j)=>{let J=Cj(2),Z=B.length;
219
- if(M.dataManager.setItems(j,Z),J&&B.length>0){let q=Xj(B.length-1,N,R,B.length,"end");
220
- S(q),O=q,y()}}:(j)=>{let J=B.length;
221
- M.dataManager.setItems(j,J)},rj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];
222
- M.dataManager.clear(),M.dataManager.setItems([...j,...q],0);
223
- let G=N.getTotalHeight()-Z;
224
- if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];
225
- M.dataManager.clear(),M.dataManager.setItems([...j,...J],0)},oj=(j,J)=>{M.dataManager.updateItem(j,J)},nj=(j)=>{M.dataManager.removeItem(j)},ij=async()=>{if(M.dataManager.reload)await M.dataManager.reload()},$j=()=>{if(p!==null)cancelAnimationFrame(p),p=null},tj=(j,J,Z)=>{if($j(),Math.abs(J-j)<1){S(J),O=J,y();
226
- return}
227
- let q=performance.now(),W=(G)=>{let A=G-q,b=Math.min(A/Z,1),w=j+(J-j)*LJ(b);
228
- if(S(w),O=w,y(),b<1)p=requestAnimationFrame(W);
229
- else p=null};
230
- p=requestAnimationFrame(W)},wj=(j,J)=>{let{align:Z,behavior:q,duration:W}=NJ(J),G=P(),A=j;
231
- if(Fj&&G>0)A=(A%G+G)%G;
232
- let b=Xj(A,N,R,G,Z);
233
- if(q==="smooth")tj(u(),b,W);
234
- else $j(),S(b)},ej=(j,J)=>{let Z=z.get(j)??M.dataManager.getIndexById(j);
235
- if(Z>=0)wj(Z,J)},jJ=()=>u(),JJ=(j,J)=>{return k.on(j,J)},XJ=(j,J)=>{k.off(j,J)},ZJ=()=>{if(l)return;
236
- if(l=!0,M.state.isDestroyed=!0,_.items.removeEventListener("click",zj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",i),bj.disconnect(),Zj)_.viewport.removeEventListener("wheel",Zj);
237
- if(a)clearTimeout(a);
238
- for(let j=0;
239
- j<Vj.length;
240
- j++)Vj[j]();
241
- for(let j of d)if(j.destroy)j.destroy();
242
- $j();
243
- for(let[,j]of v)j.remove(),e.release(j);
244
- v.clear(),e.clear(),k.clear(),_.root.remove()},vj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();
245
- return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();
246
- return P()},setItems:L.has("setItems")?L.get("setItems"):lj,appendItems:L.has("appendItems")?L.get("appendItems"):aj,prependItems:L.has("prependItems")?L.get("prependItems"):rj,updateItem:L.has("updateItem")?L.get("updateItem"):oj,removeItem:L.has("removeItem")?L.get("removeItem"):nj,reload:L.has("reload")?L.get("reload"):ij,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):wj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):ej,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):$j,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):jJ,on:JJ,off:XJ,destroy:ZJ};
247
- for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;
248
- vj[j]=J}
249
- return vj}
250
- export{MJ as vlist};
1
+ var QJ=0,m=5,qJ=100,Oj=2,KJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},UJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>qJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Oj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],D=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(D)/C:0}return X.lastPosition=U,X.lastTime=$,X},Sj=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,D=$-1;while(K<D){let C=K+D+1>>>1;if(Y[C]<=Q)K=C;else D=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},YJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((D)=>{try{D(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},BJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},GJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let D=document.createElement("div");if(D.className=`${U}-items`,D.style.position="relative",Y)D.style.height="100%";else D.style.width="100%";return K.appendChild(D),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:D}},WJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},DJ=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},VJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},_J=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),D=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-D)/2;break;case"end":f=K-$+D;break;default:f=K}return Math.max(0,Math.min(f,C))},LJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,NJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},MJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(D){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(D.name,D),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,AJ(X,V,U,Y)}};return K};function AJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:D="vlist",ariaLabel:C,reverse:f=!1,scroll:Kj}=X,Ij=Kj?.wheel??!0,Fj=Kj?.wrap??!1,c=f,Rj=`${D}-${QJ++}`,Tj=Y,yj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,i=V.template,uj={overscan:K,classPrefix:D,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:Rj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),t=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(t.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(t.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(t.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(t.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let fj=BJ(X.container),_=GJ(fj,D,C,$),k=YJ(),B=Q?[...Q]:[],N=Sj(Tj,B.length),e=WJ(),R=_.viewport.clientHeight,jj=_.viewport.clientWidth,s=!1,p=!1,O=0,x=null,l=null,I=KJ(0),Jj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},H={viewportState:{scrollTop:0,containerHeight:R,totalHeight:N.getTotalHeight(),actualHeight:N.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},v=new Map,Uj={selected:!1,focused:!1},pj=`${D}-item`,a="",z=new Map,Yj=()=>{z.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)z.set(J.id,j)}};Yj();let F=null,P=()=>F?F.getTotal():B.length,Bj=[],Gj=[],Wj=[],Dj=[],r=[],Vj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},Cj=(j=2)=>{let J=N.getTotalHeight();return O+R>=J-j},xj=!1,y,T,kj=(j,J,Z,q,W)=>{DJ(j,J,Z,q,W)},Xj=(j,J,Z,q,W)=>{return _J(j,J,Z,q,W)},_j=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Lj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},hj=(j,J)=>{let Z=e.acquire();if(Z.className=pj,$){if(Z.style.width=`${N.getHeight(j)}px`,yj!=null)Z.style.height=`${yj}px`}else Z.style.height=`${N.getHeight(j)}px`;return Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${Rj}-item-${j}`,a=String(P()),Z.setAttribute("aria-setsize",a),Z.setAttribute("aria-posinset",String(j+1)),_j(Z,i(J,j,Uj)),Lj(Z,j),Z},o=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Nj=new Set,Mj=-1,gj=()=>{if(s)return;let j=P();if(kj(O,R,N,j,Jj),VJ(Jj,K,j,E),E.start===h.start&&E.end===h.end)return;let J=String(j),Z=J!==a;a=J;for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),e.release(A),v.delete(G);let q=document.createDocumentFragment(),W=[];for(let G=E.start;G<=E.end;G++){let A=F?F.getItem(G):B[G];if(!A)continue;let b=v.get(G);if(b){let w=b.dataset.id,Qj=String(A.id);if(w!==Qj)if(_j(b,i(A,G,Uj)),b.dataset.id=Qj,$)b.style.width=`${N.getHeight(G)}px`;else b.style.height=`${N.getHeight(G)}px`;Lj(b,G);let qj=Nj.has(A.id),$J=G===Mj;if(b.classList.toggle(`${D}-item--selected`,qj),b.classList.toggle(`${D}-item--focused`,$J),b.ariaSelected=qj?"true":"false",Z)b.setAttribute("aria-setsize",a)}else{let w=hj(G,A),Qj=Nj.has(A.id),qj=G===Mj;if(Qj)w.classList.add(`${D}-item--selected`),w.ariaSelected="true";if(qj)w.classList.add(`${D}-item--focused`);q.appendChild(w),W.push({index:G,element:w})}}if(W.length>0){_.items.appendChild(q);for(let{index:G,element:A}of W)v.set(G,A)}h.start=E.start,h.end=E.end,H.lastRenderRange.start=E.start,H.lastRenderRange.end=E.end,H.viewportState.scrollTop=O,H.viewportState.visibleRange.start=Jj.start,H.viewportState.visibleRange.end=Jj.end,H.viewportState.renderRange.start=E.start,H.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},mj=()=>{h.start=-1,h.end=-1,y()};y=gj,T=mj;let n=()=>{if(s)return;let j=u(),J=j>=O?"down":"up";if(I=UJ(I,j),!_.root.classList.contains(`${D}--scrolling`))_.root.classList.add(`${D}--scrolling`);O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Oj});for(let Z=0;Z<Bj.length;Z++)Bj[Z](j,J);if(l)clearTimeout(l);l=setTimeout(()=>{_.root.classList.remove(`${D}--scrolling`),I.velocity=0,I.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Kj?.idleTimeout??150)},Zj=null,g=_.viewport;if(g.addEventListener("scroll",n,{passive:!0}),$&&Ij)Zj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",Zj);_.viewport.classList.add(`${D}-viewport--custom-scrollbar`);let zj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let W=F?.getItem(q)??B[q];if(W){if(W.__groupHeader)return;k.emit("item:click",{item:W,index:q,event:j})}}}for(let q=0;q<Gj.length;q++)Gj[q](j)},cj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let W=F?.getItem(q)??B[q];if(W){if(W.__groupHeader)return;k.emit("item:dblclick",{item:W,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;J<Wj.length;J++)Wj[J](j)};_.items.addEventListener("click",zj),_.items.addEventListener("dblclick",cj),_.root.addEventListener("keydown",Pj);let Aj=!0,dj=()=>jj,sj=()=>R,bj=new ResizeObserver((j)=>{if(s)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,W=$?q:Z;if(jj=q,Math.abs(W-R)>1){if(R=W,H.viewportState.containerHeight=W,p)o(),y(),k.emit("resize",{height:Z,width:q})}if(p)for(let G=0;G<Dj.length;G++)Dj[G](q,Z)}});if(Aj)bj.observe(_.viewport);let M={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return uj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,W)=>{Nj=Z,Mj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);if(!q)return;q.classList.toggle(`${D}-item--selected`,J),q.classList.toggle(`${D}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return F},set dataManager(j){F=j},get scrollController(){return Ej},set scrollController(j){Ej=j},state:H,getContainerWidth(){return jj},afterScroll:Bj,clickHandlers:Gj,keydownHandlers:Wj,resizeHandlers:Dj,contentSizeHandlers:r,destroyHandlers:Vj,methods:L,replaceTemplate(j){i=j},replaceRenderer(j){},replaceDataManager(j){F=j},replaceScrollController(j){Ej=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=F?F.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(F){let j=F.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=F.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return P()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:P(),containerHeight:R,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){P=j},rebuildHeightCache(j){N.rebuild(j??P())},setHeightConfig(j){N=Sj(j,P())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){kj=j},setScrollToPosFn(j){Xj=j},setPositionElementFn(j){Lj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),n()}},setScrollTarget(j){g.removeEventListener("scroll",n),g=j,g.addEventListener("scroll",n,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){dj=j.width,sj=j.height,jj=j.width(),R=j.height(),H.viewportState.containerHeight=R},disableViewportResize(){if(Aj)Aj=!1,bj.unobserve(_.viewport)}};F={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=z.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>z.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),W=Math.min(J,B.length-1);for(let G=q;G<=W;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let W=0;W<j.length;W++)B[J+W]=j[W]}if(Yj(),p){N.rebuild(P()),o(),M.updateCompressionMode();for(let q=0;q<r.length;q++)r[q]();T()}},updateItem:(j,J)=>{let Z=z.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)z.delete(j),z.set(J.id,Z);let W=v.get(Z);if(W)_j(W,i(B[Z],Z,Uj)),W.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=z.get(j);if(J===void 0)return!1;if(B.splice(J,1),Yj(),p){N.rebuild(P()),o(),M.updateCompressionMode();for(let Z=0;Z<r.length;Z++)r[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],z.clear()},reset:()=>{if(B=[],z.clear(),p)N.rebuild(0),o(),T()}};let Ej={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>Cj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-R);return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Oj,isScrolling:()=>_.root.classList.contains(`${D}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>xj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{R=j},destroy:()=>{}},Hj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=Hj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);Hj.set(J,j.name)}for(let j of d)j.setup(M);if(p=!0,M.state.isInitialized=!0,o(),y(),c&&B.length>0){let j=Xj(B.length-1,N,R,B.length,"end");S(j),O=j,y()}let lj=(j)=>{M.dataManager.setItems(j,0,j.length)},aj=c?(j)=>{let J=Cj(2),Z=B.length;if(M.dataManager.setItems(j,Z),J&&B.length>0){let q=Xj(B.length-1,N,R,B.length,"end");S(q),O=q,y()}}:(j)=>{let J=B.length;M.dataManager.setItems(j,J)},rj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...J],0)},oj=(j,J)=>{M.dataManager.updateItem(j,J)},nj=(j)=>{M.dataManager.removeItem(j)},ij=async()=>{if(M.dataManager.reload)await M.dataManager.reload()},$j=()=>{if(x!==null)cancelAnimationFrame(x),x=null},tj=(j,J,Z)=>{if($j(),Math.abs(J-j)<1){S(J),O=J,y();return}let q=performance.now(),W=(G)=>{let A=G-q,b=Math.min(A/Z,1),w=j+(J-j)*LJ(b);if(S(w),O=w,y(),b<1)x=requestAnimationFrame(W);else x=null};x=requestAnimationFrame(W)},wj=(j,J)=>{let{align:Z,behavior:q,duration:W}=NJ(J),G=P(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let b=Xj(A,N,R,G,Z);if(q==="smooth")tj(u(),b,W);else $j(),S(b)},ej=(j,J)=>{let Z=z.get(j)??M.dataManager.getIndexById(j);if(Z>=0)wj(Z,J)},jJ=()=>u(),JJ=(j,J)=>{return k.on(j,J)},XJ=(j,J)=>{k.off(j,J)},ZJ=()=>{if(s)return;if(s=!0,M.state.isDestroyed=!0,_.items.removeEventListener("click",zj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",n),bj.disconnect(),Zj)_.viewport.removeEventListener("wheel",Zj);if(l)clearTimeout(l);for(let j=0;j<Vj.length;j++)Vj[j]();for(let j of d)if(j.destroy)j.destroy();$j();for(let[,j]of v)j.remove(),e.release(j);v.clear(),e.clear(),k.clear(),_.root.remove()},vj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return P()},setItems:L.has("setItems")?L.get("setItems"):lj,appendItems:L.has("appendItems")?L.get("appendItems"):aj,prependItems:L.has("prependItems")?L.get("prependItems"):rj,updateItem:L.has("updateItem")?L.get("updateItem"):oj,removeItem:L.has("removeItem")?L.get("removeItem"):nj,reload:L.has("reload")?L.get("reload"):ij,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):wj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):ej,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):$j,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):jJ,on:JJ,off:XJ,destroy:ZJ};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;vj[j]=J}return vj}export{MJ as vlist};
@@ -3,10 +3,10 @@
3
3
  * Plugin interface, builder config, builder context, and return types
4
4
  */
5
5
  import type { VListItem, VListEvents, ItemConfig, ItemTemplate, Range, ViewportState, EventHandler, Unsubscribe, ScrollToOptions, ScrollSnapshot } from "../types";
6
- import type { DOMStructure, Renderer, HeightCache, CompressionContext } from "../render";
7
- import type { CompressionState } from "../render/virtual";
6
+ import type { DOMStructure, Renderer, HeightCache, CompressionContext } from "../rendering";
7
+ import type { CompressionState } from "../rendering/viewport";
8
8
  import type { SimpleDataManager } from "./data";
9
- import type { ScrollController } from "../plugins/scroll/controller";
9
+ import type { ScrollController } from "../features/scrollbar/controller";
10
10
  import type { Emitter } from "../events";
11
11
  /** Configuration accepted by the builder's vlist() factory */
12
12
  export interface BuilderConfig<T extends VListItem = VListItem> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"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"}
@@ -1,104 +1 @@
1
- var F=16000000;
2
- var Ny=(j,K,J,y)=>{if(y===0)return 0;
3
- if(!j.isVariable())return Math.ceil(J/j.getHeight(0));
4
- let N=0,Q=0,q=K;
5
- while(q<y&&Q<J)Q+=j.getHeight(q),N++,q++;
6
- return Math.max(1,N)},n=(j,K,J)=>{if(J===0)return 0;
7
- if(!j.isVariable())return Math.floor(K/j.getHeight(0));
8
- let y=0,N=0;
9
- for(let Q=J-1;
10
- Q>=0;
11
- Q--){let q=j.getHeight(Q);
12
- if(N+q>K)break;
13
- N+=q,y++}
14
- return Math.max(y,1)},l=(j,K,J)=>{if(J===0)return 0;
15
- let y=Math.floor(K),N=K-y,Q=Math.max(0,Math.min(y,J-1));
16
- return j.getOffset(Q)+N*j.getHeight(Q)};
17
- var w=(j,K)=>{let J=K.getTotalHeight(),y=J>F,N=y?F:J,Q=J>0?N/J:1;
18
- 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;
19
- if(!N.isCompressed){let X=J.indexAtOffset(j),$=J.indexAtOffset(j+K);
20
- if($<y-1)$++;
21
- return Q.start=Math.max(0,X),Q.end=Math.min(y-1,Math.max(0,$)),Q}
22
- 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;
23
- if(G<=K&&G>=-1){let X=n(J,K,y),$=Math.max(0,y-X),D=Math.max(0,Math.min(1,1-G/K));
24
- E=Math.floor(E+($-E)*D),Y=G<=1?y-1:Math.min(y-1,E+L)}
25
- 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;
26
- 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);
27
- let{virtualHeight:V}=Q,B=V-N,E=B-K;
28
- if(E<=N&&E>=-1){if(K>=B-1){let b=J.getTotalHeight()-J.getOffset(j);
29
- return N-b}
30
- let W=n(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)-l(J,$,y);
31
- return M+(z-M)*D}
32
- let Y=K/V*y;
33
- return J.getOffset(j)-l(J,Y,y)},a=(j,K,J,y,N,Q="start")=>{if(y===0)return 0;
34
- let q;
35
- if(N.isCompressed){if(Q==="end"&&j===y-1)return Math.max(0,N.virtualHeight-J);
36
- q=j/y*N.virtualHeight}
37
- else q=K.getOffset(j);
38
- let V=K.getHeight(j);
39
- switch(Q){case"center":q-=(J-V)/2;
40
- break;
41
- case"end":q-=J-V;
42
- break}
43
- let B=N.virtualHeight-J;
44
- return Math.max(0,Math.min(q,B))},Uy=(j,K,J,y)=>{if(J===0)return 0;
45
- if(y.isCompressed){let N=j/y.virtualHeight;
46
- return Math.floor(N*J)}
47
- return K.indexAtOffset(j)},Dy=(j,K)=>{if(typeof K==="number")return j*K>F;
48
- return K.getTotalHeight()>F},_y=(j)=>{if(j<=0)return 0;
49
- return Math.floor(F/j)},Ey=(j,K)=>{let J=w(j,K);
50
- if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualHeight/1e6).toFixed(2)}M px)`;
51
- 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)`};
52
- 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`);
53
- 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`;
54
- else O.style.width=`${E}px`;
55
- j.appendChild(O)}},S=()=>{if(f)clearTimeout(f),f=null},v=()=>{if(!Q)return;
56
- S(),f=setTimeout(d,q)},H=()=>{if(Y<=W)return;
57
- if(S(),!T)U.classList.add(`${y}-scrollbar--visible`),T=!0;
58
- if(Q&&!$&&!D)v()},d=()=>{if($||D)return;
59
- U.classList.remove(`${y}-scrollbar--visible`),T=!1},Wy=(_,A)=>{Y=_,W=A;
60
- let C=Y>W;
61
- if(U.style.display=C?"":"none",!C){d();
62
- return}
63
- let k=W/Y;
64
- G=Math.max(V,k*W),R.style[Qy]=`${G}px`,X=W-G,e(b)},e=(_)=>{if(b=_,Y<=W||X<=0)return;
65
- let A=Y-W,k=Math.min(1,Math.max(0,_/A))*X;
66
- R.style.transform=`${o}(${k}px)`},t=(_)=>{if(_.target===R)return;
67
- let A=U.getBoundingClientRect(),m=u(_)-A[Yy]-G/2,Ky=Math.max(0,Math.min(m,X))/X,h=Y-W,qy=Ky*h;
68
- 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;
69
- let A=u(_)-z,C=X>0?A/X:0,k=Y-W,m=C*k,s=Math.max(0,Math.min(M+m,k)),h=s/k*X;
70
- if(R.style.transform=`${o}(${h}px)`,P=s,Z===null)Z=requestAnimationFrame(()=>{if(P!==null)K(P);
71
- Z=null})},g=()=>{if($=!1,Z!==null)cancelAnimationFrame(Z),Z=null;
72
- if(P!==null)K(P),P=null;
73
- if(U.classList.remove(`${y}-scrollbar--dragging`),Q&&!D)v();
74
- document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g)},jy=()=>{if(L)H()},Jy=()=>{if(!$){if(D=!1,Q)v()}},p=()=>{D=!0,S(),H()},I=()=>{if(D=!1,!$&&Q)v()},Xy=()=>{if(S(),Z!==null)cancelAnimationFrame(Z),Z=null;
75
- if(U.removeEventListener("click",t),U.removeEventListener("mouseenter",p),U.removeEventListener("mouseleave",I),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",p),O.removeEventListener("mouseleave",I),O.parentNode)O.parentNode.removeChild(O)}
76
- if(U.parentNode)U.parentNode.removeChild(U)};
77
- if($y(),U.addEventListener("click",t),U.addEventListener("mouseenter",p),U.addEventListener("mouseleave",I),R.addEventListener("mousedown",yy),j.addEventListener("mouseenter",jy),j.addEventListener("mouseleave",Jy),O)O.addEventListener("mouseenter",p),O.addEventListener("mouseleave",I);
78
- return{show:H,hide:d,updateBounds:Wy,updatePosition:e,isVisible:()=>T,destroy:Xy}};
79
- var Ly=()=>{let j=null,K=0,J=!1;
80
- return{name:"withCompression",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);
81
- if(Y.isCompressed&&!J){J=!0,y.scrollController.enableCompression(Y),y.updateContentSize(Y.virtualHeight),y.setScrollFns(()=>K,($)=>{K=$});
82
- let W=N.viewport,G=($)=>{$.preventDefault();
83
- let D=Y.virtualHeight-y.state.viewportState.containerHeight;
84
- K=Math.max(0,Math.min(K+$.deltaY,D)),y.scrollController.scrollTo(K)};
85
- 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`);
86
- j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);
87
- let $=j;
88
- y.afterScroll.push((D,z)=>{if($)$.updatePosition(D),$.show()}),y.resizeHandlers.push((D,z)=>{if($){let M=y.getCachedCompression();
89
- $.updateBounds(M.virtualHeight,y.state.viewportState.containerHeight)}})}}
90
- else if(!Y.isCompressed&&J)J=!1,y.scrollController.disableCompression(),y.updateContentSize(Y.actualHeight);
91
- else if(Y.isCompressed)y.scrollController.updateConfig({compression:Y}),y.updateContentSize(Y.virtualHeight);
92
- if(j)j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);
93
- y.state.cachedCompression={state:Y,totalItems:L}};
94
- y.updateCompressionMode=B;
95
- let E=y.getCachedCompression.bind(y);
96
- y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;
97
- return E()},y.setVisibleRangeFn((L,Y,W,G,X)=>{let $=w(G,W);
98
- c(L,Y,W,G,$,X)}),y.setScrollToPosFn((L,Y,W,G,X)=>{let $=w(G,Y);
99
- return a(L,Y,W,G,$,X)}),y.setPositionElementFn((L,Y)=>{let W=y.getVirtualTotal(),G=w(W,y.heightCache);
100
- if(G.isCompressed){let X=Math.round(r(Y,y.scrollController.getScrollTop(),y.heightCache,W,y.state.viewportState.containerHeight,G)),$=y.config.horizontal;
101
- L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}
102
- else{let X=Math.round(y.heightCache.getOffset(Y)),$=y.config.horizontal;
103
- 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}}};
104
- export{Ly as withCompression,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
+ 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)},n=(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)},l=(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=n(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=n(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)-l(J,$,y);return M+(z-M)*D}let Y=K/V*y;return J.getOffset(j)-l(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,h=Y-W,qy=Ky*h;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,s=Math.max(0,Math.min(M+m,k)),h=s/k*X;if(R.style.transform=`${o}(${h}px)`,P=s,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()}},p=()=>{D=!0,S(),H()},I=()=>{if(D=!1,!$&&Q)v()},Xy=()=>{if(S(),Z!==null)cancelAnimationFrame(Z),Z=null;if(U.removeEventListener("click",t),U.removeEventListener("mouseenter",p),U.removeEventListener("mouseleave",I),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",p),O.removeEventListener("mouseleave",I),O.parentNode)O.parentNode.removeChild(O)}if(U.parentNode)U.parentNode.removeChild(U)};if($y(),U.addEventListener("click",t),U.addEventListener("mouseenter",p),U.addEventListener("mouseleave",I),R.addEventListener("mousedown",yy),j.addEventListener("mouseenter",jy),j.addEventListener("mouseleave",Jy),O)O.addEventListener("mouseenter",p),O.addEventListener("mouseleave",I);return{show:H,hide:d,updateBounds:Wy,updatePosition:e,isVisible:()=>T,destroy:Xy}};var Ly=()=>{let j=null,K=0,J=!1;return{name:"withCompression",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 withCompression,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};
@@ -0,0 +1 @@
1
+ var ae="vlist";var ce=(n,l)=>{if(typeof n=="number"){let t=l;return{getOffset:o=>o*n,getHeight:()=>n,indexAtOffset:o=>t===0||n===0?0:Math.max(0,Math.min(Math.floor(o/n),t-1)),getTotalHeight:()=>t*n,getTotal:()=>t,rebuild:o=>{t=o}}}let a=l,s=new Float64Array(0),m=t=>{a=t,s=new Float64Array(t+1),s[0]=0;for(let o=0;o<t;o++)s[o+1]=s[o]+n(o)};return m(l),{getOffset:t=>t<=0?0:t>=a?s[a]:s[t],getHeight:t=>n(t),indexAtOffset:t=>{if(a===0||t<=0)return 0;if(t>=s[a])return a-1;let o=0,v=a-1;for(;o<v;){let p=o+v+1>>>1;s[p]<=t?o=p:v=p-1}return o},getTotalHeight:()=>s[a]??0,getTotal:()=>a,rebuild:t=>m(t)}},de=()=>{let n={},l=(t,o)=>(n[t]||(n[t]=new Set),n[t].add(o),()=>a(t,o)),a=(t,o)=>{n[t]?.delete(o)};return{on:l,off:a,emit:(t,o)=>{n[t]?.forEach(v=>{try{v(o)}catch(p){console.error(`[vlist] Error in "${t}" handler:`,p)}})},clear:()=>{for(let t in n)delete n[t]}}},me=n=>{if(typeof n=="string"){let l=document.querySelector(n);if(!l)throw new Error(`[vlist] Container not found: ${n}`);return l}return n},ue=(n,l,a)=>{let s=document.createElement("div");s.className=l,s.setAttribute("role","listbox"),s.setAttribute("tabindex","0"),a&&s.setAttribute("aria-label",a);let m=document.createElement("div");m.className=`${l}-viewport`,m.style.overflow="auto",m.style.height="100%",m.style.width="100%";let t=document.createElement("div");t.className=`${l}-content`,t.style.position="relative",t.style.width="100%";let o=document.createElement("div");return o.className=`${l}-items`,o.style.position="relative",o.style.width="100%",t.appendChild(o),m.appendChild(t),s.appendChild(m),n.appendChild(s),{root:s,viewport:m,content:t,items:o}},fe=(n=100)=>{let l=[];return{acquire:()=>{let t=l.pop();if(t)return t;let o=document.createElement("div");return o.setAttribute("role","option"),o},release:t=>{l.length<n&&(t.className="",t.textContent="",t.removeAttribute("style"),t.removeAttribute("data-index"),t.removeAttribute("data-id"),l.push(t))},clear:()=>{l.length=0}}},ge=(n,l,a,s,m)=>{if(s===0){m.start=0,m.end=0;return}let t=a.indexAtOffset(n),o=t,v=a.getOffset(t)-n;for(;o<s-1&&v<l;)v+=a.getHeight(o),o++;m.start=t,m.end=Math.min(o,s-1)},he=(n,l,a,s)=>{s.start=Math.max(0,n.start-l),s.end=Math.min(a-1,n.end+l)},ve=(n,l,a,s,m)=>{if(s===0)return 0;let t=Math.max(0,Math.min(n,s-1)),o=l.getOffset(t),v=l.getHeight(t),p=Math.max(0,l.getTotalHeight()-a),h;switch(m){case"center":h=o-(a-v)/2;break;case"end":h=o-a+v;break;default:h=o}return Math.max(0,Math.min(h,p))},pe=n=>n<.5?2*n*n:-1+(4-2*n)*n,be=0,Te=n=>{if(!n.container)throw new Error("[vlist] container is required");if(!n.item)throw new Error("[vlist] item configuration is required");if(n.item.height==null)throw new Error("[vlist] item.height is required");if(typeof n.item.height=="number"&&n.item.height<=0)throw new Error("[vlist] item.height must be positive");if(typeof n.item.height!="number"&&typeof n.item.height!="function")throw new Error("[vlist] item.height must be a number or (index) => number");if(!n.item.template)throw new Error("[vlist] item.template is required");let{item:l,items:a,overscan:s=3,classPrefix:m=ae,scrollElement:t,ariaLabel:o}=n,{height:v,template:p}=l,h=!!t,d=a?[...a]:[],S=!1,y=null,E=0,j=`${m}-${be++}`,Q=me(n.container),f=ue(Q,m,o),w=de(),b=ce(v,d.length),k=fe();h&&(f.root.style.overflow="visible",f.root.style.height="auto",f.viewport.style.overflow="visible",f.viewport.style.height="auto");let I=h?window.innerHeight:f.viewport.clientHeight,N={start:0,end:0},T={start:0,end:0},C={start:-1,end:-1},M=new Map,F={selected:!1,focused:!1},X=`${m}-item`,A="",_=(e,i)=>{typeof i=="string"?e.innerHTML=i:e.replaceChildren(i)},K=(e,i)=>{e.style.transform=`translateY(${Math.round(b.getOffset(i))}px)`},G=(e,i)=>{let r=k.acquire();return r.className=X,r.style.height=`${b.getHeight(e)}px`,r.dataset.index=String(e),r.dataset.id=String(i.id),r.ariaSelected="false",r.id=`${j}-item-${e}`,A=String(d.length),r.setAttribute("aria-setsize",A),r.setAttribute("aria-posinset",String(e+1)),_(r,p(i,e,F)),K(r,e),r},D=()=>{f.content.style.height=`${b.getTotalHeight()}px`},L=()=>{if(S||(ge(E,I,b,d.length,N),he(N,s,d.length,T),T.start===C.start&&T.end===C.end))return;let e=String(d.length),i=e!==A;A=e;for(let[c,g]of M)(c<T.start||c>T.end)&&(g.remove(),k.release(g),M.delete(c));let r=document.createDocumentFragment(),u=[];for(let c=T.start;c<=T.end;c++){let g=d[c];if(!g)continue;let x=M.get(c);if(x){let H=x.dataset.id,R=String(g.id);H!==R&&(_(x,p(g,c,F)),x.dataset.id=R,x.style.height=`${b.getHeight(c)}px`),K(x,c),i&&x.setAttribute("aria-setsize",A)}else{let H=G(c,g);r.appendChild(H),u.push({index:c,element:H})}}if(u.length>0){f.items.appendChild(r);for(let{index:c,element:g}of u)M.set(c,g)}C.start=T.start,C.end=T.end,w.emit("range:change",{range:{start:T.start,end:T.end}})},J=()=>{C.start=-1,C.end=-1,L()},O=null,q=()=>{if(S)return;let e=h?Math.max(0,t.scrollY-f.viewport.getBoundingClientRect().top-t.scrollY+window.scrollY):f.viewport.scrollTop,i=h?Math.max(0,t.scrollY+f.viewport.getBoundingClientRect().top*-1):e,r=i>=E?"down":"up";f.root.classList.contains(`${m}--scrolling`)||f.root.classList.add(`${m}--scrolling`),E=i,L(),w.emit("scroll",{scrollTop:i,direction:r}),O&&clearTimeout(O),O=setTimeout(()=>{f.root.classList.remove(`${m}--scrolling`)},150)},W=h?t:f.viewport;W.addEventListener("scroll",q,{passive:!0});let P=e=>{if(S)return;let r=e.target.closest("[data-index]");if(!r)return;let u=parseInt(r.dataset.index??"-1",10);if(u<0)return;let c=d[u];c&&w.emit("item:click",{item:c,index:u,event:e})},Z=e=>{if(S)return;let r=e.target.closest("[data-index]");if(!r)return;let u=parseInt(r.dataset.index??"-1",10);if(u<0)return;let c=d[u];c&&w.emit("item:dblclick",{item:c,index:u,event:e})};f.items.addEventListener("click",P),f.items.addEventListener("dblclick",Z);let Y=new ResizeObserver(e=>{if(!(S||h))for(let i of e){let r=i.contentRect.height;Math.abs(r-I)>1&&(I=r,D(),L(),w.emit("resize",{height:r,width:i.contentRect.width}))}});Y.observe(f.viewport);let V=null;h&&(V=()=>{if(S)return;let e=window.innerHeight;Math.abs(e-I)>1&&(I=e,D(),L(),w.emit("resize",{height:e,width:window.innerWidth}))},window.addEventListener("resize",V));let U=()=>{y!==null&&(cancelAnimationFrame(y),y=null)},ee=e=>typeof e=="string"?{align:e,behavior:"auto",duration:300}:e&&typeof e=="object"?{align:e.align??"start",behavior:e.behavior??"auto",duration:e.duration??300}:{align:"start",behavior:"auto",duration:300},z=e=>{if(h){let r=f.viewport.getBoundingClientRect().top+window.scrollY;t.scrollTo(0,r+e)}else f.viewport.scrollTop=e},te=(e,i,r)=>{if(U(),Math.abs(i-e)<1){z(i),E=i,L();return}let u=performance.now(),c=g=>{let x=g-u,H=Math.min(x/r,1),R=e+(i-e)*pe(H);z(R),E=R,L(),H<1?y=requestAnimationFrame(c):y=null};y=requestAnimationFrame(c)},B=(e,i)=>{let{align:r,behavior:u,duration:c}=ee(i),g=ve(e,b,I,d.length,r);u==="smooth"?te(E,g,c):(U(),z(g))},$=()=>{b.rebuild(d.length),D(),J()},ne=e=>{d=[...e],$()},re=e=>{d=[...d,...e],$()},oe=e=>{d=[...e,...d],$()},ie=(e,i)=>{let r=d.findIndex(c=>c.id===e);if(r<0)return;d[r]={...d[r],...i};let u=M.get(r);u&&(_(u,p(d[r],r,F)),u.dataset.id=String(d[r].id))},se=e=>{d=d.filter(i=>i.id!==e),$()},le=()=>{if(!S){S=!0,U(),W.removeEventListener("scroll",q),f.items.removeEventListener("click",P),Y.disconnect(),V&&window.removeEventListener("resize",V),O&&clearTimeout(O);for(let[,e]of M)e.remove(),k.release(e);M.clear(),k.clear(),w.clear(),f.root.remove()}};return D(),L(),{get element(){return f.root},get items(){return d},get total(){return d.length},setItems:ne,appendItems:re,prependItems:oe,updateItem:ie,removeItem:se,scrollToIndex:B,scrollToItem:(e,i)=>{let r=d.findIndex(u=>u.id===e);r>=0&&B(r,i)},cancelScroll:U,getScrollPosition:()=>E,getScrollSnapshot:()=>{if(d.length===0)return{index:0,offsetInItem:0};let e=b.indexAtOffset(E),i=Math.max(0,E-b.getOffset(e));return{index:e,offsetInItem:i}},restoreScroll:e=>{if(d.length===0)return;let i=Math.max(0,Math.min(e.index,d.length-1)),r=Math.max(0,b.getTotalHeight()-I),u=Math.max(0,Math.min(b.getOffset(i)+e.offsetInItem,r));if(h){let g=f.viewport.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:g+u,behavior:"auto"})}else f.viewport.scrollTo({top:u,behavior:"auto"});E=u,L()},on:(e,i)=>w.on(e,i),off:(e,i)=>w.off(e,i),destroy:le}};export{Te as createVList};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * vlist - Virtual List (Builder-based)
3
+ *
4
+ * This is the new default entry point that uses the builder pattern internally.
5
+ * It provides full backwards compatibility with the monolithic API while maintaining
6
+ * modularity and smaller bundle sizes through automatic plugin application.
7
+ *
8
+ * For the legacy monolithic implementation, use 'vlist/full' instead.
9
+ */
10
+ import type { VListConfig, VListItem, VList } from "../types";
11
+ /**
12
+ * Create a virtual list instance.
13
+ *
14
+ * This is a convenience wrapper around the builder pattern that automatically
15
+ * includes plugins based on the configuration provided, maintaining full backwards
16
+ * compatibility with the monolithic API.
17
+ *
18
+ * @param config - Virtual list configuration
19
+ * @returns Virtual list instance with full API
20
+ */
21
+ export declare const createVList: <T extends VListItem = VListItem>(config: VListConfig<T>) => VList<T>;
22
+ //# sourceMappingURL=full.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/core/full.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACzD,QAAQ,WAAW,CAAC,CAAC,CAAC,KACrB,KAAK,CAAC,CAAC,CA6IT,CAAC"}