@floor/vlist 0.9.5 → 0.9.7
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.
- package/dist/constants.d.ts +1 -1
- package/dist/features/async/index.d.ts +1 -1
- package/dist/features/async/placeholder.d.ts +13 -21
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/rendering/index.d.ts +1 -0
- package/dist/rendering/measured.d.ts +52 -0
- package/dist/types.d.ts +29 -0
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export declare const DEFAULT_SCROLLBAR_AUTO_HIDE_DELAY = 1000;
|
|
|
45
45
|
/** Default minimum thumb size in pixels */
|
|
46
46
|
export declare const DEFAULT_SCROLLBAR_MIN_THUMB_SIZE = 30;
|
|
47
47
|
/** Default character used for masking text in placeholders */
|
|
48
|
-
export declare const DEFAULT_MASK_CHARACTER = "
|
|
48
|
+
export declare const DEFAULT_MASK_CHARACTER = "x";
|
|
49
49
|
/** Maximum items to sample for placeholder structure analysis */
|
|
50
50
|
export declare const DEFAULT_MAX_SAMPLE_SIZE = 20;
|
|
51
51
|
/** Internal flag to identify placeholder items */
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
export { withAsync, type DataFeatureConfig } from "./feature";
|
|
6
6
|
export { createDataManager, mergeRanges, calculateMissingRanges, isPlaceholderItem, filterPlaceholders, countRealItems, type DataManager, type DataManagerConfig, type DataState, } from "./manager";
|
|
7
7
|
export { createSparseStorage, type SparseStorage, type SparseStorageConfig, type SparseStorageStats, } from "./sparse";
|
|
8
|
-
export { createPlaceholderManager,
|
|
8
|
+
export { createPlaceholderManager, type PlaceholderManager, type PlaceholderConfig, } from "./placeholder";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -3,24 +3,18 @@
|
|
|
3
3
|
* Smart placeholder generation for loading states
|
|
4
4
|
*
|
|
5
5
|
* Key features:
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
6
|
+
* - Captures per-item field lengths from the first loaded batch
|
|
7
|
+
* - Cycles through real data profiles for natural size variance
|
|
8
|
+
* - Same item template renders both real and placeholder items
|
|
9
|
+
* - Renderer adds CSS class for visual styling (no JS branching needed)
|
|
10
10
|
*/
|
|
11
11
|
import type { VListItem } from "../../types";
|
|
12
12
|
/** Placeholder configuration */
|
|
13
13
|
export interface PlaceholderConfig {
|
|
14
|
-
/** Enable placeholder generation (default: true) */
|
|
15
|
-
enabled?: boolean;
|
|
16
14
|
/** Character used for masking text (default: '█') */
|
|
17
15
|
maskCharacter?: string;
|
|
18
|
-
/**
|
|
19
|
-
randomVariance?: boolean;
|
|
20
|
-
/** Maximum items to sample for structure analysis (default: 20) */
|
|
16
|
+
/** Maximum items to sample for length profiling (default: 20) */
|
|
21
17
|
maxSampleSize?: number;
|
|
22
|
-
/** Custom placeholder generator */
|
|
23
|
-
customGenerator?: (index: number) => VListItem;
|
|
24
18
|
}
|
|
25
19
|
/** Placeholder manager instance */
|
|
26
20
|
export interface PlaceholderManager<T extends VListItem = VListItem> {
|
|
@@ -32,19 +26,21 @@ export interface PlaceholderManager<T extends VListItem = VListItem> {
|
|
|
32
26
|
generate: (index: number) => T;
|
|
33
27
|
/** Generate multiple placeholder items */
|
|
34
28
|
generateRange: (start: number, end: number) => T[];
|
|
35
|
-
/** Check if an item is a placeholder */
|
|
36
|
-
isPlaceholder: (item: unknown) => boolean;
|
|
37
|
-
/** Get the placeholder flag key */
|
|
38
|
-
getPlaceholderKey: () => string;
|
|
39
29
|
/** Clear analyzed structure */
|
|
40
30
|
clear: () => void;
|
|
41
31
|
}
|
|
42
32
|
/**
|
|
43
|
-
* Create a placeholder manager
|
|
33
|
+
* Create a placeholder manager that generates realistic placeholder items
|
|
34
|
+
* by capturing per-item field lengths from the first loaded data batch.
|
|
35
|
+
*
|
|
36
|
+
* Placeholders carry the same field names as real items, filled with
|
|
37
|
+
* mask characters sized to match actual data. The renderer detects
|
|
38
|
+
* placeholders via the `_isPlaceholder` flag and applies a CSS class
|
|
39
|
+
* — no template branching required.
|
|
44
40
|
*/
|
|
45
41
|
export declare const createPlaceholderManager: <T extends VListItem = VListItem>(config?: PlaceholderConfig) => PlaceholderManager<T>;
|
|
46
42
|
/**
|
|
47
|
-
* Check if an item is a placeholder
|
|
43
|
+
* Check if an item is a placeholder
|
|
48
44
|
*/
|
|
49
45
|
export declare const isPlaceholderItem: (item: unknown) => boolean;
|
|
50
46
|
/**
|
|
@@ -55,8 +51,4 @@ export declare const filterPlaceholders: <T extends VListItem>(items: T[]) => T[
|
|
|
55
51
|
* Count non-placeholder items in an array
|
|
56
52
|
*/
|
|
57
53
|
export declare const countRealItems: <T extends VListItem>(items: (T | undefined)[]) => number;
|
|
58
|
-
/**
|
|
59
|
-
* Replace placeholders in a sparse array with real items
|
|
60
|
-
*/
|
|
61
|
-
export declare const replacePlaceholders: <T extends VListItem>(target: (T | undefined)[], items: T[], offset: number) => number;
|
|
62
54
|
//# sourceMappingURL=placeholder.d.ts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export type { VList, VListConfig, VListItem, VListEvents, ItemTemplate, ItemStat
|
|
|
18
18
|
export type { VListBuilder, BuiltVList, BuilderConfig, VListFeature, BuilderContext, } from "./builder";
|
|
19
19
|
export { createGroupLayout as createSectionLayout, buildLayoutItems, createGroupedSizeFn as createSectionedSizeFn, createStickyHeader, isGroupHeader as isSectionHeader, type GroupsConfig as SectionsConfig, type GroupBoundary as SectionBoundary, type LayoutEntry, type GroupHeaderItem as SectionHeaderItem, type GroupLayout as SectionLayout, type StickyHeader, } from "./features/sections";
|
|
20
20
|
export { createGridLayout, createGridRenderer, type GridConfig, type GridLayout, type GridPosition, type GridRenderer, type ItemRange, } from "./features/grid";
|
|
21
|
-
export { createSizeCache, type SizeCache, simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges, MAX_VIRTUAL_HEIGHT, 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, type CompressionState as ScaleState, } from "./rendering";
|
|
21
|
+
export { createSizeCache, type SizeCache, createMeasuredSizeCache, type MeasuredSizeCache, simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges, MAX_VIRTUAL_HEIGHT, 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, type CompressionState as ScaleState, } from "./rendering";
|
|
22
22
|
export { createSelectionState, selectItems, deselectItems, toggleSelection, selectAll, clearSelection, isSelected, getSelectedIds, getSelectedItems, } from "./features/selection";
|
|
23
23
|
export { createEmitter, type Emitter } from "./events";
|
|
24
24
|
export { createDataManager as createAsyncManager, createSparseStorage, createPlaceholderManager, isPlaceholderItem, filterPlaceholders, mergeRanges, calculateMissingRanges, type DataManager as AsyncManager, type SparseStorage, type PlaceholderManager, } from "./features/async";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var{defineProperty:N2,getOwnPropertyNames:kj,getOwnPropertyDescriptor:Cj}=Object,zj=Object.prototype.hasOwnProperty;var T2=new WeakMap,vj=(j)=>{var X=T2.get(j),J;if(X)return X;if(X=N2({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")kj(j).map((Q)=>!zj.call(X,Q)&&N2(X,Q,{get:()=>j[Q],enumerable:!(J=Cj(j,Q))||J.enumerable}));return T2.set(j,X),X};var wj=(j,X)=>{for(var J in X)N2(j,J,{get:X[J],enumerable:!0,configurable:!0,set:(Q)=>X[J]=()=>Q})};var P2=(j,X)=>()=>(j&&(X=j(j=0)),X);var Sj=(j,X)=>{let J=X;return{getOffset:(Q)=>Q*j,getSize:(Q)=>j,indexAtOffset:(Q)=>{if(J===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(Q/j),J-1))},getTotalSize:()=>J*j,getTotal:()=>J,rebuild:(Q)=>{J=Q},isVariable:()=>!1}},fj=(j,X)=>{let J=X,Q=new Float64Array(0),K=(B)=>{J=B,Q=new Float64Array(B+1),Q[0]=0;for(let U=0;U<B;U++)Q[U+1]=Q[U]+j(U)};K(X);let q=(B)=>{if(J===0)return 0;if(B<=0)return 0;if(B>=Q[J])return J-1;let U=0,V=J-1;while(U<V){let Y=U+V+1>>>1;if(Q[Y]<=B)U=Y;else V=Y-1}return U};return{getOffset:(B)=>{if(B<=0)return 0;if(B>=J)return Q[J];return Q[B]},getSize:(B)=>j(B),indexAtOffset:(B)=>q(B),getTotalSize:()=>Q[J]??0,getTotal:()=>J,rebuild:(B)=>K(B),isVariable:()=>!0}},R0=(j,X)=>{if(typeof j==="number")return Sj(j,X);return fj(j,X)},p0=(j,X,J,Q)=>{if(Q===0)return 0;if(!j.isVariable())return Math.ceil(J/j.getSize(0));let K=0,q=0,B=X;while(B<Q&&q<J)q+=j.getSize(B),K++,B++;return Math.max(1,K)},a0=(j,X,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.floor(X/j.getSize(0));let Q=0,K=0;for(let q=J-1;q>=0;q--){let B=j.getSize(q);if(K+B>X)break;K+=B,Q++}return Math.max(Q,1)},W2=(j,X,J)=>{if(J===0)return 0;let Q=Math.floor(X),K=X-Q,q=Math.max(0,Math.min(Q,J-1));return j.getOffset(q)+K*j.getSize(q)};var G2=200,k0=50,m2=15,d2=2,c2=50,y0=16000000;var V0=(j,X)=>{let J=X.getTotalSize(),Q=J>y0,K=Q?y0:J,q=J>0?K/J:1;return{isCompressed:Q,actualSize:J,virtualSize:K,ratio:q}},r0=(j,X,J,Q,K,q)=>{if(Q===0||X===0)return q.start=0,q.end=-1,q;if(!K.isCompressed){let W=J.indexAtOffset(j),F=J.indexAtOffset(j+X);if(F<Q-1)F++;return q.start=Math.max(0,W),q.end=Math.min(Q-1,Math.max(0,F)),q}let{virtualSize:B}=K,V=j/B*Q,Y=Math.floor(V),D=p0(J,Math.max(0,Y),X,Q),M=Math.ceil(V)+D,H=B-X-j;if(H<=X&&H>=-1){let W=a0(J,X,Q),F=Math.max(0,Q-W),L=Math.max(0,Math.min(1,1-H/X));Y=Math.floor(Y+(F-Y)*L),M=H<=1?Q-1:Math.min(Q-1,Y+D)}return q.start=Math.max(0,Y),q.end=Math.min(Q-1,Math.max(0,M)),q},l2=(j,X,J,Q)=>{if(J===0)return Q.start=0,Q.end=-1,Q;return Q.start=Math.max(0,j.start-X),Q.end=Math.min(J-1,j.end+X),Q},C0=(j,X,J,Q,K,q,B)=>{if(!q.isCompressed||Q===0)return J.getOffset(j);let{virtualSize:U}=q,V=U-K,Y=V-X;if(Y<=K&&Y>=-1){if(X>=V-1){let G=J.getTotalSize()-J.getOffset(j);return K-G}let H=a0(J,K,Q),W=Math.max(0,Q-H),L=X/U*Q,P=Math.max(0,Math.min(1,1-Y/K)),T=J.getOffset(j)-J.getOffset(W),y=J.getOffset(j)-W2(J,L,Q);return y+(T-y)*P}let D=X/U,M=J.getTotalSize(),b=D*M;return J.getOffset(j)-b},n0=(j,X,J,Q,K,q="start")=>{if(Q===0)return 0;let B;if(K.isCompressed){if(q==="end"&&j===Q-1)return Math.max(0,K.virtualSize-J);B=j/Q*K.virtualSize}else B=X.getOffset(j);let U=X.getSize(j);switch(q){case"center":B-=(J-U)/2;break;case"end":B-=J-U;break}let V=K.virtualSize-J;return Math.max(0,Math.min(B,V))},a2=(j,X,J,Q)=>{if(J===0)return 0;if(Q.isCompressed){let K=j/Q.virtualSize;return Math.floor(K*J)}return X.indexAtOffset(j)},s2=(j,X)=>{if(typeof X==="number")return j*X>y0;return X.getTotalSize()>y0},r2=(j)=>{if(j<=0)return 0;return Math.floor(y0/j)},n2=(j,X)=>{let J=V0(j,X);if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(J.ratio*100).toFixed(1)}% (${j} items, ${(J.actualSize/1e6).toFixed(1)}M px → ${(J.virtualSize/1e6).toFixed(1)}M px virtual)`};var o0=()=>{};var T0=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var Vj={};wj(Vj,{createGridRenderer:()=>x0});var nj=(j=200)=>{let X=[];return{acquire:()=>{let q=X.pop();if(q)return q;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(q)=>{if(X.length<j)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),q.removeAttribute("data-row"),q.removeAttribute("data-col"),X.push(q)},clear:()=>{X.length=0}}},x0=(j,X,J,Q,K,q,B,U,V=!1)=>{let Y=nj(),D=new Map,M=q,b=!1,H=null,W=0,F="",L=(R)=>{if(H&&W===R)return H;return H=V0(R,J),W=R,H},P={selected:!1,focused:!1},T=(R,f)=>{return P.selected=R,P.focused=f,P},y=`${K}-item ${K}-grid-item`,G=`${K}-item--selected`,N=`${K}-item--focused`,A=(R,f)=>{if(typeof f==="string")R.innerHTML=f;else R.replaceChildren(f)},_=(R,f,c)=>{R.classList.toggle(G,f),R.classList.toggle(N,c)},O=(R,f)=>{let c=Q.getRow(R);if(f){let o=f.totalItems,t=L(o);if(t.isCompressed)return C0(c,f.scrollPosition,J,o,f.containerSize,t,f.rangeStart)}return J.getOffset(c)},z=(R,f,c)=>{let o=R.dataset.id?.startsWith("__group_header"),t=o?0:Q.getCol(f),i=o?0:Q.getColumnOffset(t,M),X0;if(b){let d=Q.getRow(f),k=0,a=new Set;for(let q0=0;q0<f;q0++){let n=Q.getRow(q0);if(n<d&&!a.has(n)){let Z0=J.getSize(q0);k+=Z0,a.add(n)}}X0=k}else X0=O(f,c);if(V)R.style.transform=`translate(${Math.round(X0)}px, ${Math.round(i)}px)`;else R.style.transform=`translate(${Math.round(i)}px, ${Math.round(X0)}px)`},v=(R,f)=>{let c=R.dataset.id?.startsWith("__group_header"),o=c?M:Q.getColumnWidth(M),t;if(b||c)t=J.getSize(f)-Q.gap;else{let i=Q.getRow(f);t=J.getSize(i)-Q.gap}R.style.width=`${o}px`,R.style.height=`${t}px`},l=(R,f,c,o,t)=>{let i=Y.acquire(),X0=T(c,o);if(i.className=y,i.dataset.index=String(R),i.dataset.id=String(f.id),i.dataset.row=String(Q.getRow(R)),i.dataset.col=String(Q.getCol(R)),i.ariaSelected=String(c),U)i.id=`${U}-item-${R}`;if(B)F=String(B()),i.setAttribute("aria-setsize",F),i.setAttribute("aria-posinset",String(R+1));v(i,R);let d=X(f,R,X0);return A(i,d),_(i,c,o),z(i,R,t),i},Z=(R,f,c,o,t)=>{if(f.start===0&&R.length>0)b=T0(R[0]);for(let[k,a]of D)if(k<f.start||k>f.end)a.element.remove(),Y.release(a.element),D.delete(k);let i=!1;if(B){let k=String(B());i=k!==F,F=k}let X0=document.createDocumentFragment(),d=[];for(let k=f.start;k<=f.end;k++){let a=k-f.start,q0=R[a];if(!q0){console.warn(`⚠️ RENDER: Missing item at index ${k} (range: ${f.start}-${f.end}, items.length: ${R.length})`);continue}let n=c.has(q0.id),Z0=k===o,Y0=D.get(k);if(Y0){let w=Y0.element.dataset.id,u=String(q0.id);if(w!==u){let J0=T(n,Z0),K0=X(q0,k,J0);A(Y0.element,K0),Y0.element.dataset.id=u,Y0.element.dataset.row=String(Q.getRow(k)),Y0.element.dataset.col=String(Q.getCol(k)),v(Y0.element,k)}if(_(Y0.element,n,Z0),Y0.element.ariaSelected=String(n),z(Y0.element,k,t),i)Y0.element.setAttribute("aria-setsize",F)}else{let w=l(k,q0,n,Z0,t);X0.appendChild(w),d.push({index:k,element:w})}}if(d.length>0){j.appendChild(X0);for(let{index:k,element:a}of d)D.set(k,{index:k,element:a})}},h=(R)=>{for(let[f,c]of D)z(c.element,f,R)},g=(R,f,c,o)=>{let t=D.get(R);if(t){let i=T(c,o),X0=X(f,R,i);A(t.element,X0),_(t.element,c,o),t.element.dataset.id=String(f.id),t.element.ariaSelected=String(c),v(t.element,R)}},C=(R,f,c)=>{let o=D.get(R);if(o)_(o.element,f,c)},$=(R)=>{return D.get(R)?.element},p=(R)=>{if(Math.abs(R-M)<1)return;M=R;for(let[f,c]of D)v(c.element,f),z(c.element,f)},S=()=>{for(let[,R]of D)R.element.remove(),Y.release(R.element);D.clear()};return{render:Z,updatePositions:h,updateItem:g,updateItemClasses:C,getElement:$,updateContainerWidth:p,clear:S,destroy:()=>{S(),Y.clear()}}};var Y2=P2(()=>{o0()});var $2=2,R2=(j=0)=>{let X=[,,,,,];for(let J=0;J<5;J++)X[J]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},D2=(j,X)=>{let J=performance.now(),Q=J-j.lastTime;if(Q===0)return j;if(Q>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let q=j.samples[0];return q.position=X,q.time=J,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=J,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=J,j.sampleIndex=(j.sampleIndex+1)%5,j.sampleCount=Math.min(j.sampleCount+1,5),j.sampleCount>=2){let q=(j.sampleIndex-j.sampleCount+5)%5,B=j.samples[q],U=X-B.position,V=J-B.time;j.velocity=V>0?Math.abs(U)/V:0}return j.lastPosition=X,j.lastTime=J,j};var s0=()=>{let j={},X=(U,V)=>{if(!j[U])j[U]=new Set;return j[U].add(V),()=>J(U,V)},J=(U,V)=>{j[U]?.delete(V)};return{on:X,off:J,emit:(U,V)=>{j[U]?.forEach((Y)=>{try{Y(V)}catch(D){console.error(`[vlist] Error in event handler for "${String(U)}":`,D)}})},once:(U,V)=>{let Y=(D)=>{J(U,Y),V(D)};return X(U,Y)},clear:(U)=>{if(U)delete j[U];else for(let V in j)delete j[V]},listenerCount:(U)=>{return j[U]?.size??0}}};var k2=(j)=>{if(typeof j==="string"){let X=document.querySelector(j);if(!X)throw Error(`[vlist/builder] Container not found: ${j}`);return X}return j},C2=(j,X,J,Q)=>{let K=document.createElement("div");if(K.className=X,Q)K.classList.add(`${X}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),J)K.setAttribute("aria-label",J);if(Q)K.setAttribute("aria-orientation","horizontal");let q=document.createElement("div");if(q.className=`${X}-viewport`,Q)q.style.overflowX="auto",q.style.overflowY="hidden";else q.style.overflow="auto";q.style.height="100%",q.style.width="100%";let B=document.createElement("div");if(B.className=`${X}-content`,B.style.position="relative",Q)B.style.height="100%";else B.style.width="100%";let U=document.createElement("div");if(U.className=`${X}-items`,U.style.position="relative",Q)U.style.height="100%";else U.style.width="100%";return B.appendChild(U),q.appendChild(B),K.appendChild(q),j.appendChild(K),{root:K,viewport:q,content:B,items:U}};var z2=(j=100)=>{let X=[];return{acquire:()=>{let J=X.pop();if(J)return J;let Q=document.createElement("div");return Q.setAttribute("role","option"),Q},release:(J)=>{if(X.length<j)J.className="",J.textContent="",J.removeAttribute("style"),J.removeAttribute("data-index"),J.removeAttribute("data-id"),X.push(J)},clear:()=>{X.length=0}}};var v2=(j,X,J,Q,K)=>{if(Q===0||X===0){K.start=0,K.end=0;return}let q=J.indexAtOffset(j),B=p0(J,q,X,Q),U=q+B;K.start=Math.max(0,q),K.end=Math.min(Q-1,Math.max(0,U))},w2=(j,X,J,Q)=>{if(J===0){Q.start=0,Q.end=0;return}Q.start=Math.max(0,j.start-X),Q.end=Math.min(J-1,j.end+X)},S2=(j,X,J,Q,K)=>{if(Q===0)return 0;let q=Math.max(0,Math.min(j,Q-1)),B=X.getOffset(q),U=X.getSize(q),V=Math.max(0,X.getTotalSize()-J),Y;switch(K){case"center":Y=B-(J-U)/2;break;case"end":Y=B-J+U;break;default:Y=B}return Math.max(0,Math.min(Y,V))};var f2=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,I2=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:300};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??300};return{align:"start",behavior:"auto",duration:300}};var p2=(j,X)=>{let{dom:J,emitter:Q,resolvedConfig:K,rawConfig:q,rendered:B,pool:U,sharedState:V,isHorizontal:Y,classPrefix:D,contentSizeHandlers:M,afterScroll:b,clickHandlers:H,keydownHandlers:W,resizeHandlers:F,destroyHandlers:L,methods:P,onScrollFrame:T,resizeObserver:y,renderRange:G}=X;return{get dom(){return J},get sizeCache(){return j.hc},get emitter(){return Q},get config(){return K},get rawConfig(){return q},get renderer(){return{render:(N,A,_,O,z)=>{j.ss=_,j.fi=O,j.ffn()},updateItemClasses:(N,A,_)=>{let O=B.get(N);if(!O)return;O.classList.toggle(`${D}-item--selected`,A),O.classList.toggle(`${D}-item--focused`,_),O.ariaSelected=A?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(N)=>B.get(N)??null,clear:()=>{},destroy:()=>{}}},set renderer(N){},get dataManager(){return j.dm},set dataManager(N){j.dm=N},get scrollController(){return j.sc},set scrollController(N){j.sc=N},state:V,getContainerWidth(){return j.cw},afterScroll:b,clickHandlers:H,keydownHandlers:W,resizeHandlers:F,contentSizeHandlers:M,destroyHandlers:L,methods:P,replaceTemplate(N){j.at=N},replaceRenderer(N){},replaceDataManager(N){j.dm=N},replaceScrollController(N){j.sc=N},getItemsForRange(N){let{dm:A,it:_}=j,O=[];for(let z=N.start;z<=N.end;z++){let v=A?A.getItem(z):_[z];if(v)O.push(v)}return O},getAllLoadedItems(){let N=j.dm;if(N){let A=N.getTotal(),_=[];for(let O=0;O<A;O++){let z=N.getItem(O);if(z)_.push(z)}return _}return[...j.it]},getVirtualTotal(){return j.vtf()},getCachedCompression(){let N=j.hc;return{isCompressed:!1,actualSize:N.getTotalSize(),virtualSize:N.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:j.ls,totalItems:j.vtf(),containerSize:j.ch,rangeStart:G.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,N]of B)N.remove(),U.release(N);B.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(N,A){j.rfn=N,j.ffn=A},setVirtualTotalFn(N){j.vtf=N},rebuildSizeCache(N){j.hc.rebuild(N??j.vtf())},setSizeConfig(N){j.hc=R0(N,j.vtf())},updateContentSize(N){let A=`${N}px`;if(Y)J.content.style.width=A;else J.content.style.height=A},updateCompressionMode(){},setVisibleRangeFn(N){j.gvr=N},setScrollToPosFn(N){j.gsp=N},setPositionElementFn(N){j.pef=N},setScrollFns(N,A){j.sgt=N,j.sst=(_)=>{A(_),T()}},setScrollTarget(N){j.st.removeEventListener("scroll",T),j.st=N,j.st.addEventListener("scroll",T,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(N){j.gcw=N.width,j.gch=N.height,j.cw=N.width(),j.ch=N.height(),V.viewportState.containerSize=j.ch},disableViewportResize(){if(j.vre)j.vre=!1,y.unobserve(J.viewport)},disableWheelHandler(){if(j.wh)J.viewport.removeEventListener("wheel",j.wh),j.wh=null}}},h2=(j,X,J)=>{let{rendered:Q,itemState:K,contentSizeHandlers:q,applyTemplate:B,updateContentSize:U}=X,V=()=>{j.hc.rebuild(j.vtf()),U(),J.updateCompressionMode();for(let Y=0;Y<q.length;Y++)q[Y]();j.ffn()};return{getState:()=>({total:j.it.length,cached:j.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>j.it.length,getCached:()=>j.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>j.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<j.it.length&&j.it[Y]!==void 0,getItemsInRange:(Y,D)=>{let M=j.it,b=[],H=Math.max(0,Y),W=Math.min(D,M.length-1);for(let F=H;F<=W;F++)b.push(M[F]);return b},setTotal:(Y)=>{},setItems:(Y,D=0,M)=>{let b=j.it;if(D===0&&(M!==void 0||b.length===0))j.it=Y;else{let H=D+Y.length;if(b.length<H)b.length=H;for(let W=0;W<Y.length;W++)b[D+W]=Y[W]}if(j.ii)V()},updateItem:(Y,D)=>{let M=j.it;if(Y<0||Y>=M.length)return!1;let b=M[Y];if(!b)return!1;M[Y]={...b,...D};let H=Q.get(Y);if(H)B(H,j.at(M[Y],Y,K)),H.dataset.id=String(M[Y].id);return!0},removeItem:(Y)=>{if(Y<0||Y>=j.it.length)return!1;if(j.it.splice(Y,1),j.ii)V();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{j.it=[]},reset:()=>{if(j.it=[],j.ii)j.hc.rebuild(0),U(),j.ffn()}}},u2=(j,X)=>{let{dom:J,classPrefix:Q}=X;return{getScrollTop:()=>j.sgt(),scrollTo:(K)=>{j.sst(K),j.ls=K,j.rfn()},scrollBy:(K)=>{let q=j.sgt()+K;j.sst(q),j.ls=q,j.rfn()},isAtTop:()=>j.ls<=2,isAtBottom:(K=2)=>j.sab(K),getScrollPercentage:()=>{let K=j.hc.getTotalSize(),q=Math.max(0,K-j.ch);return q>0?j.ls/q:0},getVelocity:()=>j.vt.velocity,isTracking:()=>j.vt.sampleCount>=2,isScrolling:()=>J.root.classList.contains(`${Q}--scrolling`),updateConfig:()=>{},enableCompression:()=>{j.sic=!0},disableCompression:()=>{j.sic=!1},isCompressed:()=>j.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{j.ch=K},destroy:()=>{}}};var Ij=3,pj="vlist",g2=150,hj=0,x2=(j)=>{if(!j.container)throw Error("[vlist/builder] Container is required");if(!j.item)throw Error("[vlist/builder] item configuration is required");let X=j.orientation==="horizontal",J=X?"width":"height",Q=X?j.item.width:j.item.height;if(Q==null)throw Error(`[vlist/builder] item.${J} is required${X?" when orientation is 'horizontal'":""}`);if(typeof Q==="number"&&Q<=0)throw Error(`[vlist/builder] item.${J} must be a positive number`);if(typeof Q!=="number"&&typeof Q!=="function")throw Error(`[vlist/builder] item.${J} must be a number or a function (index) => number`);if(!j.item.template)throw Error("[vlist/builder] item.template is required");if(X&&j.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let K=new Map,q=!1,B={use(U){if(q)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(U.name,U),B},build(){if(q)throw Error("[vlist/builder] .build() can only be called once");return q=!0,uj(j,K,X,Q)}};return B};function uj(j,X,J,Q){let{item:K,items:q,overscan:B=Ij,classPrefix:U=pj,ariaLabel:V,reverse:Y=!1,scroll:D}=j,M=D,b=M?.wheel??!0,H=M?.wrap??!1,W=Y,F=`${U}-${hj++}`,L=Q,P=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,T=J?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,y={overscan:B,classPrefix:U,reverse:W,wrap:H,horizontal:J,ariaIdPrefix:F},G=Array.from(X.values()).sort((E,I)=>(E.priority??50)-(I.priority??50)),N=new Set(G.map((E)=>E.name));for(let E of G)if(E.conflicts){for(let I of E.conflicts)if(N.has(I))throw Error(`[vlist/builder] ${E.name} and ${I} cannot be combined`)}if(W){if(N.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let A=k2(j.container),_=C2(A,U,V,J);if(M?.wheel===!1)if(J)_.viewport.style.overflowX="hidden";else _.viewport.style.overflow="hidden";if(M?.scrollbar==="none")_.viewport.classList.add(`${U}-viewport--no-scrollbar`);let O=s0(),z=q||[],v=R0(L,z.length),l=z2(),Z={it:z,hc:v,ch:_.viewport.clientHeight,cw:_.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:R2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:J?()=>_.viewport.scrollLeft:()=>_.viewport.scrollTop,sst:J?(E)=>{_.viewport.scrollLeft=E}:(E)=>{_.viewport.scrollTop=E},sab:(E=2)=>{let I=Z.hc.getTotalSize();return Z.ls+Z.ch>=I-E},sic:!1,rfn:null,ffn:null,gvr:(E,I,m,s,Q0)=>{v2(E,I,m,s,Q0)},gsp:(E,I,m,s,Q0)=>{return S2(E,I,m,s,Q0)},pef:null,at:K.template,vre:!0,st:_.viewport,wh:null,gcw:()=>Z.cw,gch:()=>Z.ch};Z.vtf=()=>Z.dm?Z.dm.getTotal():Z.it.length;let h=null,g=null,C={start:0,end:0},$={start:0,end:0},p={start:-1,end:-1},S={viewportState:{scrollPosition:0,containerSize:Z.ch,totalSize:Z.hc.getTotalSize(),actualSize:Z.hc.getTotalSize(),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},x=new Map,R={selected:!1,focused:!1},f=`${U}-item`,c=[],o=[],t=[],i=[],X0=[],d=[],k=new Map,a=(E,I)=>{if(typeof I==="string")E.innerHTML=I;else E.replaceChildren(I)},q0=(E,I)=>{let m=Math.round(Z.hc.getOffset(I));if(J)E.style.transform=`translateX(${m}px)`;else E.style.transform=`translateY(${m}px)`};Z.pef=q0;let n=(E,I)=>{let m=l.acquire();if(m.className=f,J){if(m.style.width=`${Z.hc.getSize(E)}px`,T!=null)m.style.height=`${T}px`}else m.style.height=`${Z.hc.getSize(E)}px`;if(m.dataset.index=String(E),m.dataset.id=String(I.id),m.ariaSelected="false",m.id=`${F}-item-${E}`,Z.la=String(Z.vtf()),m.setAttribute("aria-setsize",Z.la),m.setAttribute("aria-posinset",String(E+1)),String(I.id).startsWith("__placeholder_"))m.classList.add(`${U}-item--placeholder`);return a(m,Z.at(I,E,R)),Z.pef(m,E),m},Z0=()=>{let E=`${Z.hc.getTotalSize()}px`;if(J)_.content.style.width=E;else _.content.style.height=E},Y0=()=>{if(Z.id)return;let E=Z.vtf(),I=J?Z.cw:Z.ch;if(Z.gvr(Z.ls,I,Z.hc,E,C),w2(C,B,E,$),$.start===p.start&&$.end===p.end){if(Z.sic)for(let[j0,B0]of x)Z.pef(B0,j0);return}let m=String(E),s=m!==Z.la;Z.la=m;for(let[j0,B0]of x)if(j0<$.start||j0>$.end)B0.remove(),l.release(B0),x.delete(j0);let Q0=document.createDocumentFragment(),W0=[];for(let j0=$.start;j0<=$.end;j0++){let B0=Z.dm?Z.dm.getItem(j0):Z.it[j0];if(!B0)continue;let D0=x.get(j0);if(D0){let b0=D0.dataset.id,f0=String(B0.id);if(b0!==f0){let Rj=b0?.startsWith("__placeholder_"),H2=f0.startsWith("__placeholder_");if(a(D0,Z.at(B0,j0,R)),D0.dataset.id=f0,J)D0.style.width=`${Z.hc.getSize(j0)}px`;else D0.style.height=`${Z.hc.getSize(j0)}px`;if(H2)D0.classList.add(`${U}-item--placeholder`);else D0.classList.remove(`${U}-item--placeholder`);if(Rj&&!H2)D0.classList.add(`${U}-item--replaced`),setTimeout(()=>{D0.classList.remove(`${U}-item--replaced`)},300)}Z.pef(D0,j0);let l0=Z.ss.has(B0.id),$j=j0===Z.fi;if(D0.classList.toggle(`${U}-item--selected`,l0),D0.classList.toggle(`${U}-item--focused`,$j),D0.ariaSelected=l0?"true":"false",s)D0.setAttribute("aria-setsize",Z.la)}else{let b0=n(j0,B0),f0=Z.ss.has(B0.id),l0=j0===Z.fi;if(f0)b0.classList.add(`${U}-item--selected`),b0.ariaSelected="true";if(l0)b0.classList.add(`${U}-item--focused`);Q0.appendChild(b0),W0.push({index:j0,element:b0})}}if(W0.length>0){_.items.appendChild(Q0);for(let{index:j0,element:B0}of W0)x.set(j0,B0)}p.start=$.start,p.end=$.end,S.lastRenderRange.start=$.start,S.lastRenderRange.end=$.end,S.viewportState.scrollPosition=Z.ls,S.viewportState.visibleRange.start=C.start,S.viewportState.visibleRange.end=C.end,S.viewportState.renderRange.start=$.start,S.viewportState.renderRange.end=$.end,O.emit("range:change",{range:{start:$.start,end:$.end}})},w=()=>{p.start=-1,p.end=-1,Z.rfn()};Z.rfn=Y0,Z.ffn=w;let u=()=>{if(Z.id)return;let E=Z.sgt(),I=E>=Z.ls?"down":"up";if(Z.vt=D2(Z.vt,E),!_.root.classList.contains(`${U}--scrolling`))_.root.classList.add(`${U}--scrolling`);Z.ls=E,Z.rfn(),O.emit("scroll",{scrollPosition:E,direction:I}),O.emit("velocity:change",{velocity:Z.vt.velocity,reliable:Z.vt.sampleCount>=$2});for(let m=0;m<c.length;m++)c[m](E,I);if(g)clearTimeout(g);g=setTimeout(()=>{_.root.classList.remove(`${U}--scrolling`),Z.vt.velocity=0,Z.vt.sampleCount=0,O.emit("velocity:change",{velocity:0,reliable:!1})},M?.idleTimeout??g2)},r=null;if(Z.st.addEventListener("scroll",u,{passive:!0}),b&&!J&&!P)r=(E)=>{E.preventDefault();let I=Z.sgt(),m=E.deltaY,s=Math.max(0,Math.min(I+m,Z.hc.getTotalSize()-Z.ch));Z.sst(s),Z.ls=s,Z.vt=D2(Z.vt,s),Z.rfn();let Q0=s>=I?"down":"up";if(O.emit("scroll",{scrollPosition:s,direction:Q0}),!_.root.classList.contains(`${U}--scrolling`))_.root.classList.add(`${U}--scrolling`);if(g)clearTimeout(g);g=setTimeout(()=>{_.root.classList.remove(`${U}--scrolling`),Z.vt.velocity=0,Z.vt.sampleCount=0,O.emit("velocity:change",{velocity:0,reliable:!1})},M?.idleTimeout??g2)},Z.wh=r,_.viewport.addEventListener("wheel",r,{passive:!1});else if(J&&b)r=(E)=>{if(E.deltaX)return;E.preventDefault(),_.viewport.scrollLeft+=E.deltaY},Z.wh=r,_.viewport.addEventListener("wheel",r,{passive:!1});let J0=(E)=>{let m=E.target.closest("[data-index]");if(m){let s=parseInt(m.dataset.index??"-1",10);if(s>=0){let Q0=Z.dm?.getItem(s)??Z.it[s];if(Q0){if(Q0.__groupHeader)return;O.emit("item:click",{item:Q0,index:s,event:E})}}}for(let s=0;s<o.length;s++)o[s](E)},K0=(E)=>{let m=E.target.closest("[data-index]");if(m){let s=parseInt(m.dataset.index??"-1",10);if(s>=0){let Q0=Z.dm?.getItem(s)??Z.it[s];if(Q0){if(Q0.__groupHeader)return;O.emit("item:dblclick",{item:Q0,index:s,event:E})}}}},U0=(E)=>{for(let I=0;I<t.length;I++)t[I](E)};_.items.addEventListener("click",J0),_.items.addEventListener("dblclick",K0),_.root.addEventListener("keydown",U0);let _0=new ResizeObserver((E)=>{if(Z.id)return;for(let I of E){let m=I.contentRect.height,s=I.contentRect.width,Q0=J?s:m,W0=J?Z.cw:Z.ch;if(Z.cw=s,Z.ch=m,Math.abs(Q0-W0)>1){if(S.viewportState.containerSize=Q0,Z.ii)Z0(),Z.rfn(),O.emit("resize",{height:m,width:s})}if(Z.ii)for(let j0=0;j0<i.length;j0++)i[j0](s,m)}});if(Z.vre)_0.observe(_.viewport);let M0={dom:_,emitter:O,resolvedConfig:y,rawConfig:j,rendered:x,pool:l,itemState:R,sharedState:S,renderRange:$,isHorizontal:J,classPrefix:U,contentSizeHandlers:X0,afterScroll:c,clickHandlers:o,keydownHandlers:t,resizeHandlers:i,destroyHandlers:d,methods:k,onScrollFrame:u,resizeObserver:_0,applyTemplate:a,updateContentSize:Z0},e=p2(Z,M0);Z.dm=h2(Z,M0,e),Z.sc=u2(Z,M0);let F0=new Map;for(let E of G)if(E.methods)for(let I of E.methods){let m=F0.get(I);if(m)throw Error(`[vlist/builder] Method "${I}" is registered by both "${m}" and "${E.name}"`);F0.set(I,E.name)}for(let E of G)E.setup(e);if(Z.ii=!0,e.state.isInitialized=!0,Z0(),Z.rfn(),W&&Z.it.length>0){let E=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(E),Z.ls=E,Z.rfn()}let O0=(E)=>{e.dataManager.setItems(E,0,E.length)},N0=W?(E)=>{let I=Z.sab(2),m=Z.it.length;if(e.dataManager.setItems(E,m),I&&Z.it.length>0){let s=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(s),Z.ls=s,Z.rfn()}}:(E)=>{let I=Z.it.length;e.dataManager.setItems(E,I)},A0=W?(E)=>{let I=Z.sgt(),m=Z.hc.getTotalSize(),s=[...Z.it];e.dataManager.clear(),e.dataManager.setItems([...E,...s],0);let W0=Z.hc.getTotalSize()-m;if(W0>0)Z.sst(I+W0),Z.ls=I+W0}:(E)=>{let I=[...Z.it];e.dataManager.clear(),e.dataManager.setItems([...E,...I],0)},G0=(E,I)=>{e.dataManager.updateItem(E,I)},E0=(E)=>{e.dataManager.removeItem(E)},$0=async()=>{if(e.dataManager.reload)await e.dataManager.reload()},c0=()=>{if(h!==null)cancelAnimationFrame(h),h=null},Oj=(E,I,m)=>{if(c0(),Math.abs(I-E)<1){Z.sst(I),Z.ls=I,Z.rfn();return}let s=performance.now(),Q0=(W0)=>{let j0=W0-s,B0=Math.min(j0/m,1),D0=E+(I-E)*f2(B0);if(Z.sst(D0),Z.ls=D0,Z.rfn(),B0<1)h=requestAnimationFrame(Q0);else h=null};h=requestAnimationFrame(Q0)},bj=(E,I)=>{let{align:m,behavior:s,duration:Q0}=I2(I),W0=Z.vtf(),j0=E;if(H&&W0>0)j0=(j0%W0+W0)%W0;let B0=Z.gsp(j0,Z.hc,Z.ch,W0,m);if(s==="smooth")Oj(Z.sgt(),B0,Q0);else c0(),Z.sst(B0)},yj=()=>Z.sgt(),Hj=(E,I)=>{return O.on(E,I)},Tj=(E,I)=>{O.off(E,I)},Pj=()=>{if(Z.id)return;if(Z.id=!0,e.state.isDestroyed=!0,_.items.removeEventListener("click",J0),_.root.removeEventListener("keydown",U0),Z.st.removeEventListener("scroll",u),_0.disconnect(),Z.wh)_.viewport.removeEventListener("wheel",Z.wh);if(g)clearTimeout(g);for(let E=0;E<d.length;E++)d[E]();for(let E of G)if(E.destroy)E.destroy();c0();for(let[,E]of x)E.remove(),l.release(E);x.clear(),l.clear(),O.clear(),_.root.remove()},y2={get element(){return _.root},get items(){if(k.has("_getItems"))return k.get("_getItems")();return Z.it},get total(){if(k.has("_getTotal"))return k.get("_getTotal")();return Z.vtf()},setItems:k.has("setItems")?k.get("setItems"):O0,appendItems:k.has("appendItems")?k.get("appendItems"):N0,prependItems:k.has("prependItems")?k.get("prependItems"):A0,updateItem:k.has("updateItem")?k.get("updateItem"):G0,removeItem:k.has("removeItem")?k.get("removeItem"):E0,reload:k.has("reload")?k.get("reload"):$0,scrollToIndex:k.has("scrollToIndex")?k.get("scrollToIndex"):bj,cancelScroll:k.has("cancelScroll")?k.get("cancelScroll"):c0,getScrollPosition:k.has("getScrollPosition")?k.get("getScrollPosition"):yj,on:Hj,off:Tj,destroy:Pj};for(let[E,I]of k){if(E==="setItems"||E==="appendItems"||E==="prependItems"||E==="updateItem"||E==="removeItem"||E==="reload"||E==="scrollToIndex"||E==="scrollToItem"||E==="cancelScroll"||E==="getScrollPosition")continue;y2[E]=I}return y2}o0();var z0=(j,X,J={},Q="vlist",K=!1)=>{let{autoHide:q=!0,autoHideDelay:B=1000,minThumbSize:U=30,showOnHover:V=!0,hoverZoneWidth:Y=16,showOnViewportEnter:D=!0}=J,M=0,b=0,H=0,W=0,F=!1,L=!1,P=0,T=0,y=0,G=null,N=!1,A=null,_=null,O=K?"width":"height",z=K?"translateX":"translateY",v=K?(n)=>n.clientX:(n)=>n.clientY,l=K?"left":"top",Z=document.createElement("div"),h=document.createElement("div"),g=V?document.createElement("div"):null,C=()=>{if(Z.className=`${Q}-scrollbar`,h.className=`${Q}-scrollbar-thumb`,K)Z.classList.add(`${Q}-scrollbar--horizontal`);if(Z.appendChild(h),j.appendChild(Z),g){if(g.className=`${Q}-scrollbar-hover`,K)g.classList.add(`${Q}-scrollbar-hover--horizontal`),g.style.height=`${Y}px`;else g.style.width=`${Y}px`;j.appendChild(g)}},$=()=>{if(G)clearTimeout(G),G=null},p=()=>{if(!q)return;$(),G=setTimeout(x,B)},S=()=>{if(M<=b)return;if($(),!N)Z.classList.add(`${Q}-scrollbar--visible`),N=!0;if(q&&!F&&!L)p()},x=()=>{if(F||L)return;Z.classList.remove(`${Q}-scrollbar--visible`),N=!1},R=(n,Z0)=>{M=n,b=Z0;let Y0=M>b;if(Z.style.display=Y0?"":"none",!Y0){x();return}let w=b/M;H=Math.max(U,w*b),h.style[O]=`${H}px`,W=b-H,f(y)},f=(n)=>{if(y=n,M<=b||W<=0)return;let Z0=M-b,w=Math.min(1,Math.max(0,n/Z0))*W;h.style.transform=`${z}(${w}px)`},c=(n)=>{if(n.target===h)return;let Z0=Z.getBoundingClientRect(),u=v(n)-Z0[l]-H/2,J0=Math.max(0,Math.min(u,W))/W,K0=M-b,U0=J0*K0;X(U0),S()},o=(n)=>{n.preventDefault(),n.stopPropagation(),F=!0,P=v(n),T=y,$(),Z.classList.add(`${Q}-scrollbar--dragging`),document.addEventListener("mousemove",t),document.addEventListener("mouseup",i)},t=(n)=>{if(!F)return;let Z0=v(n)-P,Y0=W>0?Z0/W:0,w=M-b,u=Y0*w,r=Math.max(0,Math.min(T+u,w)),K0=r/w*W;if(h.style.transform=`${z}(${K0}px)`,_=r,A===null)A=requestAnimationFrame(()=>{if(_!==null)X(_);A=null})},i=()=>{if(F=!1,A!==null)cancelAnimationFrame(A),A=null;if(_!==null)X(_),_=null;if(Z.classList.remove(`${Q}-scrollbar--dragging`),q&&!L)p();document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",i)},X0=()=>{if(D)S()},d=()=>{if(!F){if(L=!1,q)p()}},k=()=>{L=!0,$(),S()},a=()=>{if(L=!1,!F&&q)p()},q0=()=>{if($(),A!==null)cancelAnimationFrame(A),A=null;if(Z.removeEventListener("click",c),Z.removeEventListener("mouseenter",k),Z.removeEventListener("mouseleave",a),h.removeEventListener("mousedown",o),j.removeEventListener("mouseenter",X0),j.removeEventListener("mouseleave",d),document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",i),g){if(g.removeEventListener("mouseenter",k),g.removeEventListener("mouseleave",a),g.parentNode)g.parentNode.removeChild(g)}if(Z.parentNode)Z.parentNode.removeChild(Z)};if(C(),Z.addEventListener("click",c),Z.addEventListener("mouseenter",k),Z.addEventListener("mouseleave",a),h.addEventListener("mousedown",o),j.addEventListener("mouseenter",X0),j.addEventListener("mouseleave",d),g)g.addEventListener("mouseenter",k),g.addEventListener("mouseleave",a);return{show:S,hide:x,updateBounds:R,updatePosition:f,isVisible:()=>N,destroy:q0}};var o2=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup(J){let{dom:Q,config:K}=J,{classPrefix:q,horizontal:B}=K;if(X=z0(Q.viewport,(Y)=>J.scrollController.scrollTo(Y),j??{},q,B),!Q.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))Q.viewport.classList.add(`${q}-viewport--custom-scrollbar`);let U=J.getCachedCompression();X.updateBounds(U.virtualSize,J.state.viewportState.containerSize);let V=X;J.afterScroll.push((Y,D)=>{V.updatePosition(Y),V.show()}),J.resizeHandlers.push((Y,D)=>{if(V){let M=J.getCachedCompression();V.updateBounds(M.virtualSize,J.state.viewportState.containerSize)}}),J.contentSizeHandlers.push(()=>{if(V){let Y=J.getCachedCompression();V.updateBounds(Y.virtualSize,J.state.viewportState.containerSize)}}),J.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var i2=(j=0)=>{let X=[,,,,,,,,];for(let J=0;J<8;J++)X[J]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},i0=(j,X)=>{let J=performance.now(),Q=J-j.lastTime;if(Q===0)return j;if(Q>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let q=j.samples[0];return q.position=X,q.time=J,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=J,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=J,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let q=(j.sampleIndex-j.sampleCount+8)%8,B=j.samples[q],U=X-B.position,V=J-B.time;j.velocity=V>0?U/V:0}return j.lastPosition=X,j.lastTime=J,j},gj=(j)=>j.sampleCount>=3,t2=(j,X={})=>{let{wheel:J=!0,sensitivity:Q=1,smoothing:K=!1,idleTimeout:q=150,onScroll:B,onIdle:U,scrollElement:V,horizontal:Y=!1}=X,D=!!V,M=0,b=0,H=D?Y?window.innerWidth:window.innerHeight:Y?j.clientWidth:j.clientHeight,W=X.compressed??!1,F=X.compression,L=i2(),P=!1,T=null,G=t0(()=>{let d=Y?j.scrollLeft:j.scrollTop,k=d>=M?"down":"up";if(L=i0(L,d),M=d,B)B({scrollTop:M,direction:k,velocity:L.velocity});v()}),A=t0(()=>{let d=j.getBoundingClientRect(),k=Y?Math.max(0,-d.left):Math.max(0,-d.top),a=k>=M?"down":"up";if(L=i0(L,k),M=k,!P)P=!0;if(B)B({scrollTop:M,direction:a,velocity:L.velocity});v()}),_=(d)=>{d.preventDefault()},O=(d)=>{if(d.deltaX)return;d.preventDefault(),j.scrollLeft+=d.deltaY},z=(d)=>{if(!W)return;d.preventDefault();let k=(Y?d.deltaX||d.deltaY:d.deltaY)*Q,a=M+k;if(K)a=M+k*0.3;if(a=Math.max(0,Math.min(a,b)),a!==M){let n=a>=M?"down":"up";if(L=i0(L,a),M=a,!P)P=!0;if(B)B({scrollTop:M,direction:n,velocity:L.velocity});v()}},v=()=>{if(T)clearTimeout(T);T=setTimeout(()=>{if(P=!1,L=i2(M),U)U()},q)},l=(d)=>{if(W)return;if(W=!0,F=d,b=d.virtualSize-H,D)return;if(G.cancel(),j.removeEventListener("scroll",G),!J)j.removeEventListener("wheel",_);else if(Y)j.removeEventListener("wheel",O);if(Y)j.style.overflowX="hidden";else j.style.overflow="hidden";if(J)j.addEventListener("wheel",z,{passive:!1});let k=Y?j.scrollLeft:j.scrollTop;if(k>0){let a=Y?F?.actualSize??j.scrollWidth:F?.actualSize??j.scrollHeight;M=k/a*b}if(Y)j.scrollLeft=0;else j.scrollTop=0},Z=()=>{if(!W)return;if(W=!1,D){F=void 0;return}if(j.removeEventListener("wheel",z),Y)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",G,{passive:!0}),!J)j.addEventListener("wheel",_,{passive:!1});else if(Y)j.addEventListener("wheel",O,{passive:!1});if(F&&M>0){let k=M/b*(F.actualSize-H);if(Y)j.scrollLeft=k;else j.scrollTop=k}F=void 0},h=()=>{if(D||W)return M;return Y?j.scrollLeft:j.scrollTop},g=(d,k=!1)=>{let a=Math.max(0,Math.min(d,b||1/0));if(D){let q0=j.getBoundingClientRect();if(Y){let n=q0.left+window.scrollX;window.scrollTo({left:n+a,behavior:k?"smooth":"auto"})}else{let n=q0.top+window.scrollY;window.scrollTo({top:n+a,behavior:k?"smooth":"auto"})}}else if(W){if(a===M)return;let n=a>=M?"down":"up";if(L=i0(L,a),M=a,!P)P=!0;if(B)B({scrollTop:M,direction:n,velocity:L.velocity});v()}else if(Y)j.scrollTo({left:a,behavior:k?"smooth":"auto"});else j.scrollTo({top:a,behavior:k?"smooth":"auto"})},C=(d)=>{g(h()+d)},$=()=>{return h()<=0},p=(d=0)=>{let k=h(),a=D||W?b:Y?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return k>=a-d},S=()=>{let d=h(),k=D||W?b:Y?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(k<=0)return 0;return Math.min(1,Math.max(0,d/k))},x=(d)=>{if(d.compression)F=d.compression,b=F.virtualSize-H},R=()=>W,f=()=>Math.abs(L.velocity),c=()=>gj(L),o=()=>P,t=()=>D,i=(d)=>{if(H=d,F)b=F.virtualSize-H},X0=()=>{if(T)clearTimeout(T);if(D)A.cancel(),window.removeEventListener("scroll",A);else G.cancel(),j.removeEventListener("scroll",G),j.removeEventListener("wheel",z),j.removeEventListener("wheel",_),j.removeEventListener("wheel",O)};if(D){if(W&&F)b=F.virtualSize-H;window.addEventListener("scroll",A,{passive:!0})}else if(W&&F){if(b=F.virtualSize-H,Y)j.style.overflowX="hidden";else j.style.overflow="hidden";if(J)j.addEventListener("wheel",z,{passive:!1})}else{if(Y)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",G,{passive:!0}),!J)j.addEventListener("wheel",_,{passive:!1});else if(Y)j.addEventListener("wheel",O,{passive:!1})}return{getScrollTop:h,scrollTo:g,scrollBy:C,isAtTop:$,isAtBottom:p,getScrollPercentage:S,getVelocity:f,isTracking:c,isScrolling:o,updateConfig:x,enableCompression:l,disableCompression:Z,isCompressed:R,isWindowMode:t,updateContainerHeight:i,destroy:X0}},t0=(j)=>{let X=null,J=null,Q=(...K)=>{if(J=K,X===null)X=requestAnimationFrame(()=>{if(X=null,J)j(...J)})};return Q.cancel=()=>{if(X!==null)cancelAnimationFrame(X),X=null},Q};var xj=0.65,mj=0.5,dj=0.95,cj=0.1,lj=5,aj=100,e2=()=>{let j=null,X=0,J=!1,Q=0,K=null,q=0,B=0,U=null,V=[];return{name:"withScale",priority:20,setup(Y){let{dom:D,config:M}=Y,{classPrefix:b,horizontal:H}=M,W=()=>{let T=Y.getVirtualTotal(),y=V0(T,Y.sizeCache);if(y.isCompressed&&!J){J=!0,Y.scrollController.enableCompression(y),Y.updateContentSize(y.virtualSize),Y.setScrollFns(()=>X,(Z)=>{if(X=Z,Q=Z,K!==null)cancelAnimationFrame(K),K=null});let G=()=>{let Z=Q-X;if(Math.abs(Z)<mj)X=Q,K=null;else{X+=Z*xj;let g=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;X=Math.max(0,Math.min(X,g)),K=requestAnimationFrame(G)}Y.scrollController.scrollTo(X)},N=D.viewport,A=(Z)=>{Z.preventDefault();let g=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(Q=Math.max(0,Math.min(Q+Z.deltaY,g)),K===null)K=requestAnimationFrame(G)};N.addEventListener("wheel",A,{passive:!1});let _=()=>{if(U!==null)cancelAnimationFrame(U),U=null},O=(Z)=>{if(_(),K!==null)cancelAnimationFrame(K),K=null;let h=Z.touches[0];if(!h)return;let g=H?h.clientX:h.clientY;q=g,B=X,V=[{time:performance.now(),y:g}]},z=(Z)=>{Z.preventDefault();let h=Z.touches[0];if(!h)return;let g=H?h.clientX:h.clientY,C=performance.now();if(V.push({time:C,y:g}),V.length>lj)V.shift();let $=q-g,S=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,x=Math.max(0,Math.min(B+$,S));X=x,Q=x,Y.scrollController.scrollTo(x)},v=(Z)=>{let h=performance.now(),g=V.filter((S)=>h-S.time<aj),C=0;if(g.length>=2){let S=g[0],x=g[g.length-1],R=x.time-S.time;if(R>0)C=(S.y-x.y)/R}if(V=[],Math.abs(C)<cj)return;let $=C*16,p=()=>{if($*=dj,Math.abs($)<0.5){U=null;return}let x=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,R=X+$;if(R=Math.max(0,Math.min(R,x)),R<=0&&$<0||R>=x&&$>0){X=R,Q=R,Y.scrollController.scrollTo(R),U=null;return}X=R,Q=R,Y.scrollController.scrollTo(R),U=requestAnimationFrame(p)};U=requestAnimationFrame(p)};if(N.addEventListener("touchstart",O,{passive:!0}),N.addEventListener("touchmove",z,{passive:!1}),N.addEventListener("touchend",v,{passive:!0}),N.addEventListener("touchcancel",v,{passive:!0}),Y.destroyHandlers.push(()=>{if(N.removeEventListener("wheel",A),N.removeEventListener("touchstart",O),N.removeEventListener("touchmove",z),N.removeEventListener("touchend",v),N.removeEventListener("touchcancel",v),_(),K!==null)cancelAnimationFrame(K),K=null}),!D.viewport.querySelector(`.${b}-scrollbar-track`)){if(j=z0(D.viewport,(h)=>Y.scrollController.scrollTo(h),{},b,H),!D.viewport.classList.contains(`${b}-viewport--custom-scrollbar`))D.viewport.classList.add(`${b}-viewport--custom-scrollbar`);j.updateBounds(y.virtualSize,Y.state.viewportState.containerSize);let Z=j;Y.afterScroll.push((h,g)=>{if(Z)Z.updatePosition(h),Z.show()}),Y.resizeHandlers.push((h,g)=>{if(Z){let C=Y.getCachedCompression();Z.updateBounds(C.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!y.isCompressed&&J)J=!1,Y.scrollController.disableCompression(),Y.updateContentSize(y.actualSize);else if(y.isCompressed)Y.scrollController.updateConfig({compression:y}),Y.updateContentSize(y.virtualSize);if(j)j.updateBounds(y.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:y,totalItems:T}};Y.updateCompressionMode=W;let F=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return F()},Y.setVisibleRangeFn((T,y,G,N,A)=>{L=null,P=null;let _=V0(N,G);r0(T,y,G,N,_,A)}),Y.setScrollToPosFn((T,y,G,N,A)=>{let _=V0(N,y);return n0(T,y,G,N,_,A)});let L=null,P=null;Y.setPositionElementFn((T,y)=>{let G=Y.getVirtualTotal(),N=V0(G,Y.sizeCache);if(N.isCompressed){let A=Y.scrollController.getScrollTop();if(L===null||y<P)P=y,L=Math.round(C0(y,A,Y.sizeCache,G,Y.state.viewportState.containerSize,N));let _=L+Y.sizeCache.getOffset(y)-Y.sizeCache.getOffset(P),O=Y.config.horizontal;T.style.transform=O?`translateX(${_}px)`:`translateY(${_}px)`}else{let A=Math.round(Y.sizeCache.getOffset(y)),_=Y.config.horizontal;T.style.transform=_?`translateX(${A}px)`:`translateY(${A}px)`}}),W(),Y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null;if(U!==null)cancelAnimationFrame(U),U=null}}};var e0=(j={})=>{let{chunkSize:X=100,maxCachedItems:J=5000,evictionBuffer:Q=200,onEvict:K}=j,q=new Map,B=0,U=0,V=(C)=>{let $=q.get(C);if(!$)$={items:Array(X),count:0,lastAccess:Date.now()},q.set(C,$);else $.lastAccess=Date.now();return $},Y=(C)=>{return Math.floor(C/X)},D=(C)=>{return C%X},M=()=>B,b=(C)=>{B=C},H=(C)=>{if(C<0||C>=B)return;let $=Y(C),p=q.get($);if(!p)return;return p.items[D(C)]},W=(C)=>{if(C<0||C>=B)return!1;let $=Y(C),p=q.get($);if(!p)return!1;return p.items[D(C)]!==void 0},F=(C,$)=>{let p=Y(C),S=V(p),x=D(C),R=S.items[x]===void 0;if(S.items[x]=$,R)S.count++,U++;if(C>=B)B=C+1},L=(C,$)=>{for(let p=0;p<$.length;p++){let S=$[p];if(S!==void 0)F(C+p,S)}},P=(C)=>{if(C<0||C>=B)return!1;let $=Y(C),p=q.get($);if(!p)return!1;let S=D(C);if(p.items[S]===void 0)return!1;if(p.items[S]=void 0,p.count--,U--,p.count===0)q.delete($);return!0},T=(C,$)=>{let p=[];for(let S=C;S<=$&&S<B;S++)p.push(H(S));return p},y=(C,$)=>{for(let p=C;p<=$&&p<B;p++)if(!W(p))return!1;return!0},G=()=>{let C=[],$=null,p=Array.from(q.keys()).sort((S,x)=>S-x);for(let S of p){let x=q.get(S);if(!x)continue;let R=S*X;for(let f=0;f<X;f++){let c=R+f;if(c>=B)break;if(x.items[f]!==void 0)if($===null)$={start:c,end:c};else if(c===$.end+1)$.end=c;else C.push($),$={start:c,end:c};else if($!==null)C.push($),$=null}}if($!==null)C.push($);return C},N=(C,$)=>{let p=[],S=null;for(let x=C;x<=$&&x<B;x++)if(!W(x))if(S===null)S={start:x,end:x};else S.end=x;else if(S!==null)p.push(S),S=null;if(S!==null)p.push(S);return p},A=(C)=>{return q.has(C)},_=(C)=>{let $=q.get(C);if($)$.lastAccess=Date.now()},O=(C,$)=>{if(C>$||q.size===0)return;let p=Date.now(),S=Y(Math.max(0,C)),x=Y(Math.min(B-1,$));for(let R=S;R<=x;R++){let f=q.get(R);if(f)f.lastAccess=p}},z=(C,$)=>{if(U<=J)return 0;let p=Math.max(0,C-Q),S=Math.min(B-1,$+Q),x=Y(p),R=Y(S),f=0,c=[];for(let[o,t]of q)if(o<x||o>R)f+=t.count,c.push(o),U-=t.count,q.delete(o);if(f>0&&K)K(f,c);return f},v=()=>{if(U<=J)return 0;let C=Array.from(q.entries()).sort(([,S],[,x])=>S.lastAccess-x.lastAccess),$=0,p=[];for(let[S,x]of C){if(U<=J)break;$+=x.count,U-=x.count,p.push(S),q.delete(S)}if($>0&&K)K($,p);return $},l=()=>{return{totalItems:B,cachedItems:U,cachedChunks:q.size,chunkSize:X,maxCachedItems:J,memoryEfficiency:B>0?1-U/B:1}},Z=()=>U,h=()=>{q.clear(),U=0};return{chunkSize:X,maxCachedItems:J,getTotal:M,setTotal:b,get:H,has:W,set:F,setRange:L,delete:P,getRange:T,isRangeLoaded:y,getLoadedRanges:G,findUnloadedRanges:N,getChunkIndex:Y,isChunkLoaded:A,touchChunk:_,touchChunksForRange:O,evictDistant:z,evictToLimit:v,getStats:l,getCachedCount:Z,clear:h,reset:()=>{h(),B=0}}},j2=(j)=>{if(j.length===0)return[];let X=[...j].sort((Q,K)=>Q.start-K.start),J=[{...X[0]}];for(let Q=1;Q<X.length;Q++){let K=X[Q],q=J[J.length-1];if(K.start<=q.end+1)q.end=Math.max(q.end,K.end);else J.push({...K})}return J},h0=(j,X,J)=>{let Q=Math.floor(j.start/J)*J,K=Math.ceil((j.end+1)/J)*J-1,q={start:Q,end:K};if(X.length===0)return[q];let B=[],U=j2(X),V=q.start;for(let Y of U){if(Y.end<V)continue;if(Y.start>q.end)break;if(Y.start>V)B.push({start:V,end:Math.min(Y.start-1,q.end)});if(V=Y.end+1,V>q.end)break}if(V<=q.end)B.push({start:V,end:q.end});return B};var J2=(j={})=>{let{enabled:X=!0,maskCharacter:J="█",randomVariance:Q=!0,maxSampleSize:K=20,customGenerator:q}=j,B=null,U=!1,V=0,Y=(P)=>{if(!X||U||P.length===0)return;let T=new Map,y=new Map,G=Math.min(P.length,K);for(let N=0;N<G;N++){let A=P[N];if(!A||typeof A!=="object")continue;for(let[_,O]of Object.entries(A)){if(_.startsWith("_")||_==="id")continue;if(!y.has(_))y.set(_,{lengths:[],types:new Set});let z=y.get(_),v=Array.isArray(O)?"array":typeof O;if(z.types.add(v),typeof O==="string")z.lengths.push(O.length);else if(O!==null&&O!==void 0)z.lengths.push(String(O).length)}}for(let[N,A]of y){if(A.lengths.length===0)continue;let _=Math.min(...A.lengths),O=Math.max(...A.lengths),z=Math.round(A.lengths.reduce((l,Z)=>l+Z,0)/A.lengths.length),v="string";if(A.types.has("number")&&A.types.size===1)v="number";else if(A.types.has("boolean")&&A.types.size===1)v="boolean";else if(A.types.has("array"))v="array";else if(A.types.has("object")&&!A.types.has("string"))v="object";T.set(N,{minLength:_,maxLength:O,avgLength:z,type:v})}B=T,U=!0},D=()=>U,M=(P)=>{let T=P.avgLength;if(Q&&P.minLength!==P.maxLength){if(T=Math.floor(Math.random()*(P.maxLength-P.minLength+1)+P.minLength),Math.random()<0.3)T=Math.max(1,T+Math.floor(Math.random()*3)-1)}return J.repeat(Math.max(1,T))},b=(P)=>{if(q)return{...q(P),["_isPlaceholder"]:!0};let T={id:`__placeholder_${V++}`,["_isPlaceholder"]:!0,_index:P};if(!B||B.size===0)return T.label=J.repeat(12),T;for(let[y,G]of B)switch(G.type){case"string":T[y]=M(G);break;case"number":T[y]=0;break;case"boolean":T[y]=!1;break;case"array":T[y]=[];break;case"object":T[y]={};break;default:T[y]=M(G)}return T};return{analyzeStructure:Y,hasAnalyzedStructure:D,generate:b,generateRange:(P,T)=>{let y=[];for(let G=P;G<=T;G++)y.push(b(G));return y},isPlaceholder:(P)=>{if(!P||typeof P!=="object")return!1;return P._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{B=null,U=!1,V=0}}},H0=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},_2=(j)=>{return j.filter((X)=>!H0(X))};var rj=50,Q2=(j={})=>{let{adapter:X,initialItems:J,initialTotal:Q,storage:K,placeholder:q,pageSize:B=rj,onStateChange:U,onItemsLoaded:V,onItemsEvicted:Y}=j,D=e0({...K,onEvict:(w,u)=>{Y?.(w),N()}}),M=null,b=()=>{if(!M)M=J2(q);return M},H=new Map,W=!1,F,L=!0,P,T=[],y=0,G=new Map,N=()=>{U?.(g())},A=()=>{H.clear();let w=D.getLoadedRanges();for(let u of w)for(let r=u.start;r<=u.end;r++){let J0=D.get(r);if(J0&&!H0(J0))H.set(J0.id,r)}},_=(w,u)=>{if(!H0(u))H.set(u.id,w)},O=(w)=>{H.delete(w)},z=(w,u)=>{return`${w}-${u}`},v=()=>D.getTotal(),l=()=>D.getCachedCount(),Z=()=>W,h=()=>L,g=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:W,pendingRanges:T,error:F,hasMore:L,cursor:P}),C=()=>D,$=()=>b(),p=(w)=>{let u=D.get(w);if(u!==void 0)return u;if(w>=0&&w<D.getTotal())return b().generate(w);return},S=(w)=>{let u=H.get(w);if(u===void 0)return;return D.get(u)},x=(w)=>{return H.get(w)??-1},R=(w)=>{let u=D.get(w);return u!==void 0&&!H0(u)},f=(w,u)=>{let r=[],J0=D.getTotal(),K0=0,U0=0;D.touchChunksForRange(w,Math.min(u,J0-1));for(let _0=w;_0<=u&&_0<J0;_0++){let M0=D.get(_0);if(M0!==void 0)r.push(M0),K0++;else r.push(b().generate(_0)),U0++}return r},c=(w)=>{D.setTotal(w),L=D.getCachedCount()<w,N()},o=(w,u=0,r)=>{if(M&&!M.hasAnalyzedStructure()&&w.length>0)M.analyzeStructure(w);for(let J0=0;J0<w.length;J0++){let K0=w[J0];if(K0!==void 0){let U0=u+J0;D.set(U0,K0),_(U0,K0)}}if(r!==void 0)D.setTotal(r);else if(u+w.length>D.getTotal())D.setTotal(u+w.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)L=!1;V?.(w,u,D.getTotal()),N()},t=(w,u)=>{let r=H.get(w);if(r===void 0)return!1;let J0=D.get(r);if(!J0)return!1;let K0={...J0,...u};if(D.set(r,K0),u.id!==void 0&&u.id!==w)O(w),_(r,K0);return N(),!0},i=(w)=>{let u=H.get(w);if(u===void 0)return!1;D.delete(u),O(w);let r=D.getTotal();if(r>0)D.setTotal(r-1);return N(),!0},X0=async(w,u)=>{if(!X)return;let r=z(w,u);if(G.has(r))return;let J0=D.getLoadedRanges(),K0=h0({start:w,end:u},J0,D.chunkSize);if(K0.length===0)return;let U0=D.chunkSize,_0=[];for(let e of K0){let F0=Math.floor(e.start/U0),O0=Math.floor(e.end/U0);for(let N0=F0;N0<=O0;N0++){let A0=N0*U0,G0=A0+U0-1,E0=z(A0,G0);if(!_0.some(($0)=>$0.start===A0)&&!G.has(E0))_0.push({start:A0,end:G0})}}let M0=[];for(let e of K0){let F0=Math.floor(e.start/U0),O0=Math.floor(e.end/U0);for(let N0=F0;N0<=O0;N0++){let A0=N0*U0,G0=A0+U0-1,E0=z(A0,G0);if(G.has(E0)){let $0=G.get(E0);if(!M0.includes($0))M0.push($0)}}}for(let e of _0){let F0=z(e.start,e.end),O0=(async()=>{T.push(e),W=!0,F=void 0,N();try{let N0=e.end-e.start+1,A0={offset:e.start,limit:N0,cursor:void 0},G0=await X.read(A0);if(o(G0.items,e.start,G0.total),G0.cursor)P=G0.cursor;let E0=e.start+G0.items.length;if(E0>=y){if(y=E0,G0.hasMore!==void 0)L=G0.hasMore;else if(G0.total!==void 0)L=E0<G0.total}}catch(N0){F=N0 instanceof Error?N0:Error(String(N0))}finally{G.delete(F0),T=T.filter((N0)=>N0.start!==e.start||N0.end!==e.end),W=G.size>0,N()}})();G.set(F0,O0),M0.push(O0)}await Promise.all(M0)},d=async(w,u)=>{if(D.isRangeLoaded(w,u))return;await X0(w,u)},k=async()=>{if(!X)return;await X0(0,B-1)},a=async()=>{if(!X||W||!L)return!1;let w=D.getCachedCount(),u=D.getTotal(),r=w,J0=Math.min(r+B-1,u>0?u-1:r+B-1);if(r>=u&&u>0)return L=!1,!1;return await X0(r,J0),D.getCachedCount()>w},q0=async()=>{if(D.clear(),D.setTotal(0),H.clear(),M)M.clear();G.clear(),T=[],W=!1,P=void 0,L=!0,y=0,F=void 0,N()},n=(w,u)=>{if(D.evictDistant(w,u)>0)A()},Z0=()=>{D.clear(),H.clear(),P=void 0,F=void 0,T=[],W=!1,N()},Y0=()=>{if(D.reset(),H.clear(),M)M.clear();P=void 0,L=!0,y=0,F=void 0,T=[],W=!1,N()};if(J&&J.length>0)o(J,0,Q??J.length);else if(Q!==void 0)D.setTotal(Q),N();return{getState:g,getTotal:v,getCached:l,getIsLoading:Z,getHasMore:h,getStorage:C,getPlaceholders:$,getItem:p,getItemById:S,getIndexById:x,isItemLoaded:R,getItemsInRange:f,setTotal:c,setItems:o,updateItem:t,removeItem:i,loadRange:X0,ensureRange:d,loadInitial:k,loadMore:a,reload:q0,evictDistant:n,clear:Z0,reset:Y0}};var jj=(j)=>{let{adapter:X,loading:J,storage:Q,total:K,autoLoad:q=!0}=j,B=J?.cancelThreshold??m2,U=J?.preloadThreshold??d2,V=J?.preloadAhead??c2;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:D}=Y,M=Y.config.reverse,b=Q2({adapter:X,...K!==void 0&&{initialTotal:K},pageSize:Q?.chunkSize??k0,...Q&&{storage:{...Q.chunkSize!==void 0&&{chunkSize:Q.chunkSize},...Q.maxCachedItems!==void 0&&{maxCachedItems:Q.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let y=Y.getVirtualTotal();Y.sizeCache.rebuild(y),Y.updateCompressionMode();let G=Y.getCachedCompression();Y.state.viewportState.totalSize=G.virtualSize,Y.state.viewportState.actualSize=G.actualSize,Y.state.viewportState.isCompressed=G.isCompressed,Y.state.viewportState.compressionRatio=G.ratio,Y.updateContentSize(G.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(y,G,N)=>{if(Y.state.isInitialized)Y.forceRender(),D.emit("load:end",{items:y,total:N})}});Y.replaceDataManager(b);let H=null,W=null,F=0,L=()=>{if(W){let y=W;W=null,Y.dataManager.ensureRange(y.start,y.end).catch((G)=>{D.emit("error",{error:G,context:"ensureRange"})})}};Y.afterScroll.push((y,G)=>{if(Y.state.isDestroyed)return;let N=Y.scrollController.getVelocity(),_=Y.scrollController.isTracking()&&N<=B;if(W&&F>B&&N<=B){let v=W;W=null,Y.dataManager.ensureRange(v.start,v.end).catch((l)=>{D.emit("error",{error:l,context:"ensureRange"})})}if(F=N,_&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(M){if(y<G2)D.emit("load:start",{offset:Y.dataManager.getCached(),limit:k0}),Y.dataManager.loadMore().catch((v)=>{D.emit("error",{error:v,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-y-Y.state.viewportState.containerSize<G2)D.emit("load:start",{offset:Y.dataManager.getCached(),limit:k0}),Y.dataManager.loadMore().catch((l)=>{D.emit("error",{error:l,context:"loadMore"})})}let{renderRange:O}=Y.state.viewportState;if(!H||O.start!==H.start||O.end!==H.end)if(H={start:O.start,end:O.end},_){W=null;let{start:v,end:l}=O,Z=Y.getVirtualTotal();if(N>U)if(G==="down")l=Math.min(O.end+V,Z-1);else v=Math.max(O.start-V,0);Y.dataManager.ensureRange(v,l).catch((h)=>{D.emit("error",{error:h,context:"ensureRange"})})}else W={start:O.start,end:O.end}});let P=200,T=null;if(Y.afterScroll.push((y,G)=>{if(T!==null)clearTimeout(T);T=setTimeout(()=>{T=null,L()},P)}),Y.destroyHandlers.push(()=>{if(T!==null)clearTimeout(T),T=null}),D.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{H=null,W=null,Y.forceRender();let{renderRange:y}=Y.state.viewportState;if(y.end>0)D.emit("load:start",{offset:y.start,limit:y.end-y.start+1}),await Y.dataManager.ensureRange(y.start,y.end)}),Y.methods.set("reload",async()=>{H=null,W=null,Y.invalidateRendered(),await Y.dataManager.reload(),D.emit("load:start",{offset:0,limit:k0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:y}=Y.state.viewportState;if(y.end>0)await Y.dataManager.ensureRange(y.start,y.end)}),q)D.emit("load:start",{offset:0,limit:k0}),Y.dataManager.loadInitial().catch((y)=>{D.emit("error",{error:y,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var Jj=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:J,state:Q,config:K,emitter:q}=X;if(J.root.style.overflow="visible",J.root.style.height="auto",K.horizontal)J.viewport.style.overflowX="visible",J.viewport.style.overflowY="visible";else J.viewport.style.overflow="visible";J.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.disableWheelHandler(),X.setScrollTarget(window),X.setScrollFns(()=>{let Y=J.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let D=J.viewport.getBoundingClientRect();if(K.horizontal){let M=D.left+window.scrollX;window.scrollTo(M+Y,window.scrollY)}else{let M=D.top+window.scrollY;window.scrollTo(window.scrollX,M+Y)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),Q.viewportState.containerSize=window.innerHeight;let{innerHeight:B,innerWidth:U}=window,V=()=>{let{innerWidth:Y,innerHeight:D}=window,M=K.horizontal?Y:D,b=K.horizontal?U:B;if(Math.abs(M-b)<=1)return;B=D,U=Y,Q.viewportState.containerSize=D,q.emit("resize",{width:Y,height:D});for(let H=0;H<X.resizeHandlers.length;H++)X.resizeHandlers[H](Y,D);X.renderIfNeeded()};window.addEventListener("resize",V,{passive:!0}),j=()=>{window.removeEventListener("resize",V)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var V2=(j,X)=>{let J=0,Q=j.length-1;while(J<Q){let K=J+Q+1>>>1;if(j[K].headerLayoutIndex<=X)J=K;else Q=K-1}return J},Qj=(j,X)=>{let J=0,Q=j.length-1;while(J<Q){let K=J+Q+1>>>1;if(j[K].firstDataIndex<=X)J=K;else Q=K-1}return J},Xj=(j,X)=>{if(j===0)return[];let J=[],Q=X(0),K=0,q=0;for(let B=1;B<j;B++){let U=X(B);if(U!==Q){let V=B-K;J.push({key:Q,groupIndex:J.length,headerLayoutIndex:q,firstDataIndex:K,count:V}),q=q+1+V,Q=U,K=B}}return J.push({key:Q,groupIndex:J.length,headerLayoutIndex:q,firstDataIndex:K,count:j-K}),J},u0=(j,X)=>{if(j.length===0||X.length===0)return[];let J=j.length+X.length,Q=Array(J),K=0;for(let q of X){Q[K]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},K++;for(let B=0;B<q.count;B++)Q[K]=j[q.firstDataIndex+B],K++}return Q},g0=(j,X)=>{let J=typeof X==="number"?(Q)=>X:X;return(Q)=>{let K=j.getEntry(Q);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return J(K.dataIndex)}},X2=(j,X)=>{let J=Xj(j,X.getGroupForIndex),Q=j+J.length,K=X.headerHeight;return{get totalEntries(){return Q},get groupCount(){return J.length},get groups(){return J},getEntry:(b)=>{if(J.length===0)return{type:"item",dataIndex:b,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=V2(J,b),W=J[H];if(b===W.headerLayoutIndex)return{type:"header",group:W};let F=b-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+F,group:W}},layoutToDataIndex:(b)=>{if(J.length===0)return b;let H=V2(J,b),W=J[H];if(b===W.headerLayoutIndex)return-1;let F=b-W.headerLayoutIndex-1;return W.firstDataIndex+F},dataToLayoutIndex:(b)=>{if(J.length===0)return b;let H=Qj(J,b),W=J[H],F=b-W.firstDataIndex;return W.headerLayoutIndex+1+F},getGroupAtLayoutIndex:(b)=>{if(J.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=V2(J,b);return J[H]},getGroupAtDataIndex:(b)=>{if(J.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=Qj(J,b);return J[H]},getHeaderHeight:typeof K==="number"?(b)=>K:(b)=>{let H=J[b];if(!H)return 0;return K(H.key,b)},rebuild:(b)=>{J=Xj(b,X.getGroupForIndex),Q=b+J.length}}};var q2=(j,X,J,Q,K,q=!1)=>{let B=document.createElement("div");if(B.className=`${K}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.position="absolute",B.style.zIndex="5",B.style.pointerEvents="none",B.style.willChange="transform",B.style.overflow="hidden",q)B.style.top="0",B.style.bottom="0",B.style.left="0";else B.style.top="0",B.style.left="0",B.style.right="0";j.insertBefore(B,j.firstChild);let U=-1,V=!1,Y=0,D=(L)=>{if(L===U)return;U=L;let P=X.groups;if(L<0||L>=P.length){B.textContent="";return}let T=P[L],y=Q.headerTemplate(T.key,T.groupIndex),G=X.getHeaderHeight(L);if(q)B.style.width=`${G}px`;else B.style.height=`${G}px`;if(typeof y==="string")B.innerHTML=y;else B.replaceChildren(y)},M=(L)=>{let P=X.groups;if(P.length===0){H();return}let T=0;for(let _=P.length-1;_>=0;_--)if(J.getOffset(P[_].headerLayoutIndex)<=L){T=_;break}let y=J.getOffset(P[0].headerLayoutIndex);if(L<y){H();return}if(!V)b();D(T);let G=X.getHeaderHeight(T),N=0,A=T+1;if(A<P.length){let O=J.getOffset(P[A].headerLayoutIndex)-L;if(O<G)N=O-G}if(N!==Y)if(Y=N,N===0)B.style.transform="";else{let _=Math.round(N);B.style.transform=q?`translateX(${_}px)`:`translateY(${_}px)`}},b=()=>{if(V)return;V=!0,B.style.display=""},H=()=>{if(!V)return;V=!1,B.style.display="none",U=-1,Y=0,B.style.transform=""},W=()=>{let L=U;if(U=-1,L>=0)D(L)},F=()=>{B.remove(),U=-1,V=!1};return B.style.display="none",{update:M,refresh:W,show:b,hide:H,destroy:F}};var qj=(j,X,J,Q,K,q)=>{if(Q===0||X===0)return q.start=0,q.end=-1,q;let B=J.indexAtOffset(j),U=J.indexAtOffset(j+X);if(U<Q-1)U++;return q.start=Math.max(0,B),q.end=Math.min(Q-1,Math.max(0,U)),q},Yj=(j,X,J,Q)=>{if(J===0)return Q.start=0,Q.end=-1,Q;return Q.start=Math.max(0,j.start-X),Q.end=Math.min(J-1,j.end+X),Q},Kj=(j,X,J,Q,K,q)=>{if(Q===0)return 0;let B=Math.max(0,Math.min(j,Q-1)),U=X.getOffset(B),V=X.getSize(B),Y=X.getTotalSize(),D=Math.max(0,Y-J),M;switch(q){case"center":M=U-J/2+V/2;break;case"end":M=U-J+V;break;case"start":default:M=U;break}return Math.max(0,Math.min(M,D))},Zj=(j,X,J)=>{if(J&&J.isCompressed)return J.virtualSize;return X.getTotalSize()},Bj=(j,X)=>{return X.getTotalSize()},Uj=(j,X)=>{return X.getOffset(j)},Nj=(j,X,J)=>{let Q=Math.max(0,X-J);return Math.max(0,Math.min(j,Q))};var P0=(j,X,J,Q,K="start",q,B=Kj)=>{return B(j,X,J,Q,q,K)},Dj=(j,X)=>{return j.start===X.start&&j.end===X.end},Wj=(j,X)=>{return j>=X.start&&j<=X.end},Gj=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var _j=(j,X)=>{let J=[],Q=[];for(let K=j.start;K<=j.end;K++)if(K<X.start||K>X.end)Q.push(K);for(let K=X.start;K<=X.end;K++)if(K<j.start||K>j.end)J.push(K);return{add:J,remove:Q}};o0();var Mj=(j)=>{if(!j.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(j.headerHeight==null||j.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!j.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let X=null,J=null,Q=[],K=[];return{name:"withSections",priority:10,setup(q){let{dom:B,config:U,rawConfig:V}=q,{classPrefix:Y}=U,M=V.item.height;Q=V.items?[...V.items]:[];let b=Q.length,H={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=X2(b,H),K=u0(Q,X.groups);let W=g0(X,M);q.setSizeConfig(W),q.rebuildSizeCache(K.length),q.dataManager.setItems(K,0,K.length);let F=V.item.template,{headerTemplate:L}=j,P=(O,z,v)=>{if(T0(O))return L(O.groupKey,O.groupIndex);return F(O,z,v)},T=q.methods.get("_getGridLayout"),y=q.methods.get("_replaceGridRenderer"),G=q.methods.get("_updateGridLayoutForGroups");if(T&&y){if(G)G((l)=>{let Z=K[l];return!!(Z&&T0(Z))});let{createGridRenderer:O}=(Y2(),vj(Vj)),z=T(),v=O(B.items,P,q.sizeCache,z,Y,q.getContainerWidth(),()=>q.dataManager.getTotal(),U.ariaIdPrefix);y(v)}else q.replaceTemplate(P);if(B.root.classList.add(`${Y}--grouped`),j.sticky!==!1){J=q2(B.root,X,q.sizeCache,{...H,sticky:H.sticky??!1},Y,U.horizontal);let O=J;q.afterScroll.push((z,v)=>{O.update(z)}),J.update(q.scrollController.getScrollTop())}let N=()=>{if(!X)return;X.rebuild(Q.length),K=u0(Q,X.groups);let O=g0(X,M);if(q.setSizeConfig(O),q.rebuildSizeCache(K.length),q.dataManager.setItems(K,0,K.length),J)J.refresh()};q.methods.set("setItems",(O)=>{Q=[...O],N()}),q.methods.set("appendItems",(O)=>{Q=[...Q,...O],N()}),q.methods.set("prependItems",(O)=>{Q=[...O,...Q],N()}),q.methods.set("removeItem",(O)=>{Q=Q.filter((z)=>z.id!==O),N()});let{animateScroll:A,cancelScroll:_}=ij(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(O,z)=>{let v=X.dataToLayoutIndex(O),{align:l,behavior:Z,duration:h}=tj(z),g=q.dataManager.getTotal(),C=P0(v,q.sizeCache,q.state.viewportState.containerSize,g,l,q.getCachedCompression());if(Z==="smooth")A(q.scrollController.getScrollTop(),C,h);else _(),q.scrollController.scrollTo(C)}),q.methods.set("_getItems",()=>Q),q.methods.set("_getTotal",()=>Q.length),q.destroyHandlers.push(()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null;if(J)J.destroy(),J=null;B.root.classList.remove(`${Y}--grouped`)})},destroy(){if(J)J.destroy(),J=null}}},M2=300,oj=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,L0=null,ij=(j,X)=>{let J=()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null};return{animateScroll:(K,q,B)=>{if(J(),Math.abs(q-K)<1){j.scrollTo(q);return}let U=performance.now(),V=(Y)=>{let D=Y-U,M=Math.min(D/B,1),b=K+(q-K)*oj(M);if(j.scrollTo(b),X(),M<1)L0=requestAnimationFrame(V);else L0=null};L0=requestAnimationFrame(V)},cancelScroll:J}},tj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:M2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??M2};return{align:"start",behavior:"auto",duration:M2}};var K2=(j)=>{let X=Math.max(1,Math.floor(j.columns)),J=j.gap??0,Q=j.isHeaderFn,K={row:0,col:0},q=(W)=>{if(W<=0)return 0;if(!Q)return Math.ceil(W/X);let F=0,L=0,P=0;for(let T=0;T<W;T++)if(Q(T)){if(P++,L>0)F++,L=0;F++,L=0}else if(L++,L>=X)F++,L=0;if(L>0)F++;return F},B=(W)=>{return K.row=U(W),K.col=V(W),K},U=(W)=>{if(!Q)return Math.floor(W/X);let F=0,L=0;for(let P=0;P<=W;P++)if(Q(P)){if(L>0)F++,L=0;if(P===W)return F;F++,L=0}else{if(P===W)return F;if(L++,L>=X)F++,L=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${F}`),F},V=(W)=>{if(!Q)return W%X;if(Q(W))return 0;let F=0;for(let L=0;L<=W;L++)if(Q(L))F=0;else{if(L===W)return F;if(F++,F>=X)F=0}return F},Y=(W,F,L)=>{if(L<=0)return{start:0,end:-1};if(!Q){let N=Math.max(0,W*X),A=Math.min(L-1,(F+1)*X-1);return{start:N,end:A}}let P=-1,T=-1,y=0,G=0;for(let N=0;N<L;N++){if(Q(N)){if(G>0)y++,G=0;if(y>=W&&y<=F){if(P===-1)P=N;T=N}y++,G=0}else{if(y>=W&&y<=F){if(P===-1)P=N;T=N}if(G++,G>=X)y++,G=0}if(y>F&&G===0)break}if(P===-1)return{start:0,end:-1};return{start:P,end:T}},D=(W,F,L)=>{if(F<0||F>=X)return-1;let P=W*X+F;if(P<0||P>=L)return-1;return P},M=(W)=>{let F=(X-1)*J;return Math.max(0,(W-F)/X)};return{get columns(){return X},get gap(){return J},update:(W)=>{if(W.columns!==void 0)X=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)J=W.gap;if(W.isHeaderFn!==void 0)Q=W.isHeaderFn},getTotalRows:q,getPosition:B,getRow:U,getCol:V,getItemRange:Y,getItemIndex:D,getColumnWidth:M,getColumnOffset:(W,F)=>{let L=M(F);return W*(L+J)}}};Y2();var Aj=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,J=null;return{name:"withGrid",priority:10,setup(Q){let{dom:K,emitter:q,config:B,rawConfig:U}=Q,{classPrefix:V}=B;if(B.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=U.items?.some((G)=>G.__groupHeader===!0),D={columns:j.columns,gap:j.gap??0};if(Y)D.isHeaderFn=(G)=>{let N=Q.dataManager.getItem(G);return!!(N&&N.__groupHeader===!0)};X=K2(D);let M=X.gap;Q.setVirtualTotalFn(()=>{let G=Q.dataManager.getTotal();return X.getTotalRows(G)});let b=U.item,H=B.horizontal?b.width:b.height,W={containerWidth:Q.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof H==="function")Q.setSizeConfig((G)=>{let N=W.containerWidth-2,A=(W.columns-1)*W.gap,_=(N-A)/W.columns,O={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:_,row:X.getRow(G),column:X.getCol(G),totalRows:X.getTotalRows(Q.dataManager.getTotal()),totalColumns:W.columns};return H(G,O)+W.gap});else if(M>0)Q.setSizeConfig(H+M);Q.rebuildSizeCache(),K.root.classList.add(`${V}--grid`);let F=Q.getContainerWidth(),L=U.item.template,P=()=>{J=x0(K.items,L,Q.sizeCache,X,V,F,()=>Q.dataManager.getTotal(),B.ariaIdPrefix,B.horizontal),Q.replaceRenderer(J)};P(),Q.methods.set("_getGridLayout",()=>X),Q.methods.set("_getGridConfig",()=>D),Q.methods.set("_replaceGridRenderer",(G)=>{J=G}),Q.methods.set("_updateGridLayoutForGroups",(G)=>{X.update({isHeaderFn:G});let N=Q.dataManager.getTotal(),A=0;for(let _=0;_<N;_++)if(X.getCol(_)===0){let O=Q.sizeCache.getSize(_);A+=O}if(Q.sizeCache.getTotalSize=()=>A,B.horizontal)Q.dom.content.style.width=`${A}px`;else Q.dom.content.style.height=`${A}px`;P()}),Q.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");D.columns=G.columns}if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");D.gap=G.gap}if(X)X.update(D);let N=Q.getContainerWidth();if(W.containerWidth=N,W.columns=D.columns,W.gap=D.gap??0,J)J.updateContainerWidth(N);Q.rebuildSizeCache(),Q.updateContentSize(Q.sizeCache.getTotalSize()),Q.updateCompressionMode();for(let A=0;A<Q.contentSizeHandlers.length;A++)Q.contentSizeHandlers[A]();if(J)J.clear();Q.forceRender()});let T=()=>{if(Q.state.isDestroyed)return;let G=Q.scrollController.getScrollTop(),N=Q.state.viewportState.containerSize,A=Q.getVirtualTotal(),_={start:0,end:0};if(A===0||N===0)_.start=0,_.end=0;else{_.start=Math.max(0,Q.sizeCache.indexAtOffset(G));let $=Q.sizeCache.indexAtOffset(G+N);if($<A-1)$++;_.end=Math.min(A-1,Math.max(0,$))}let O=B.overscan??3,z={start:Math.max(0,_.start-O),end:Math.min(A-1,_.end+O)};Q.state.viewportState.scrollPosition=G,Q.state.viewportState.visibleRange=_,Q.state.viewportState.renderRange=z;let v=Q.state.lastRenderRange,l=Q.state.viewportState.isCompressed;if(z.start===v.start&&z.end===v.end){if(l)J.updatePositions(Q.getCompressionContext());return}let Z=Q.dataManager.getTotal(),h=X.getItemRange(z.start,z.end,Z),g=Q.dataManager.getItemsInRange(h.start,h.end),C=l?Q.getCompressionContext():void 0;J.render(g,h,new Set,-1,C),Q.state.lastRenderRange={...z},q.emit("range:change",{range:z})},y=()=>{if(Q.state.isDestroyed)return;Q.state.lastRenderRange={start:-1,end:-1},T()};if(Q.setRenderFns(T,y),Q.resizeHandlers.push((G,N)=>{if(J)J.updateContainerWidth(G)}),Q.methods.set("scrollToIndex",(G,N)=>{let A=Math.floor(G/j.columns),{align:_,behavior:O}=ej(N),z=Q.dataManager.getState(),v=X.getTotalRows(z.total),l=Math.max(0,Math.min(A,v-1)),Z=P0(l,Q.sizeCache,Q.state.viewportState.containerSize,v,_,Q.getCachedCompression());if(O==="smooth")Q.scrollController.scrollTo(Z);else Q.scrollController.scrollTo(Z)}),!Q.methods.has("_getTotal"))Q.methods.set("_getTotal",()=>Q.dataManager.getTotal());Q.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;K.root.classList.remove(`${V}--grid`)})},destroy(){if(J)J.destroy(),J=null}}},A2=300,ej=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:A2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??A2};return{align:"start",behavior:"auto",duration:A2}};Y2();var Z2=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),m0=(j,X,J)=>{if(J==="none")return j;let Q=new Set(j.selected);if(J==="single"){if(Q.clear(),X.length>0)Q.add(X[0])}else for(let K of X)Q.add(K);return{...j,selected:Q}},d0=(j,X)=>{let J=new Set(j.selected);for(let Q of X)J.delete(Q);return{...j,selected:J}},v0=(j,X,J)=>{if(J==="none")return j;if(j.selected.has(X))return d0(j,[X]);else return m0(j,[X],J)},B2=(j,X,J)=>{if(J!=="multiple")return j;return{...j,selected:new Set(X.map((Q)=>Q.id))}},U2=(j)=>({...j,selected:new Set}),E2=(j,X)=>{return j.focusedIndex=X,j},F2=(j,X,J=!0)=>{if(X===0)return j;let Q=j.focusedIndex-1;if(Q<0)Q=J?X-1:0;return j.focusedIndex=Q,j},L2=(j,X,J=!0)=>{if(X===0)return j;let Q=j.focusedIndex+1;if(Q>=X)Q=J?0:X-1;return j.focusedIndex=Q,j},O2=(j,X)=>{if(X===0)return j;return j.focusedIndex=0,j},b2=(j,X)=>{if(X===0)return j;return j.focusedIndex=X-1,j};var Ej=(j,X)=>{return j.selected.has(X)},w0=(j)=>{return Array.from(j.selected)},S0=(j,X)=>{let J=[];for(let Q of j.selected){let K=X(Q);if(K)J.push(K)}return J};var Fj=(j)=>{let X=j?.mode??"single",J=j?.initial,Q=Z2(J),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:B,emitter:U,config:V}=q,{classPrefix:Y,ariaIdPrefix:D}=V;if(X==="none"){q.methods.set("select",()=>{}),q.methods.set("deselect",()=>{}),q.methods.set("toggleSelect",()=>{}),q.methods.set("selectAll",()=>{}),q.methods.set("clearSelection",()=>{}),q.methods.set("getSelected",()=>[]),q.methods.set("getSelectedItems",()=>[]),q.methods.set("setSelectionMode",()=>{});return}let M=new Map,b=()=>{M.clear();let G=q.dataManager.getTotal();for(let N=0;N<G;N++){let A=q.dataManager.getItem(N);if(A)M.set(A.id,N)}};b();let{renderIfNeeded:H,forceRender:W}=q.getRenderFns(),F=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((N)=>{let A=N,_=A.dataset.id;if(_!==void 0){let O=/^\d+$/.test(_)?parseInt(_,10):_,z=Q.selected.has(O),l=parseInt(A.dataset.index??"-1",10)===Q.focusedIndex;A.classList.toggle(`${Y}-item--selected`,z),A.classList.toggle(`${Y}-item--focused`,l),A.ariaSelected=z?"true":"false"}})},L=()=>{if(q.state.isDestroyed)return;H(),F()},P=()=>{if(q.state.isDestroyed)return;W(),F()};q.setRenderFns(L,P);let T=()=>{F();let G=(N)=>{let A=M.get(N);if(A===void 0)return;return q.dataManager.getItem(A)};U.emit("selection:change",{selected:w0(Q),items:S0(Q,G)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",B.root.appendChild(K);let y=K;U.on("selection:change",({selected:G})=>{let N=G.length;if(N===0)y.textContent="";else if(N===1)y.textContent="1 item selected";else y.textContent=`${N} items selected`}),q.clickHandlers.push((G)=>{if(q.state.isDestroyed)return;let A=G.target.closest("[data-index]");if(!A)return;let _=parseInt(A.dataset.index??"-1",10);if(_<0)return;let O=q.dataManager.getItem(_);if(!O)return;U.emit("item:click",{item:O,index:_,event:G}),Q=E2(Q,_),B.root.setAttribute("aria-activedescendant",`${D}-item-${_}`),Q=v0(Q,O.id,X),T()}),q.keydownHandlers.push((G)=>{if(q.state.isDestroyed)return;let N=q.dataManager.getTotal(),A=Q.focusedIndex,_=!1,O=!1,z=Q;switch(G.key){case"ArrowUp":z=F2(Q,N),_=!0,O=!0;break;case"ArrowDown":z=L2(Q,N),_=!0,O=!0;break;case"Home":z=O2(Q,N),_=!0,O=!0;break;case"End":z=b2(Q,N),_=!0,O=!0;break;case" ":case"Enter":if(Q.focusedIndex>=0){let v=q.dataManager.getItem(Q.focusedIndex);if(v)z=v0(Q,v.id,X);_=!0}break}if(_){G.preventDefault(),Q=z;let v=Q.focusedIndex;if(v>=0){let l=q.dataManager.getState(),Z=P0(v,q.sizeCache,q.state.viewportState.containerSize,l.total,"center",q.getCachedCompression());q.scrollController.scrollTo(Z),B.root.setAttribute("aria-activedescendant",`${D}-item-${v}`)}else B.root.removeAttribute("aria-activedescendant");if(O){let{selected:l}=Q;if(A>=0&&A!==v){let Z=q.dataManager.getItem(A);if(Z)q.renderer.updateItemClasses(A,l.has(Z.id),!1)}if(v>=0){let Z=q.dataManager.getItem(v);if(Z)q.renderer.updateItemClasses(v,l.has(Z.id),!0)}}else{P();let l=(Z)=>{let h=M.get(Z);if(h===void 0)return;return q.dataManager.getItem(h)};U.emit("selection:change",{selected:w0(Q),items:S0(Q,l)})}}}),q.methods.set("select",(...G)=>{Q=m0(Q,G,X),T()}),q.methods.set("deselect",(...G)=>{Q=d0(Q,G),T()}),q.methods.set("toggleSelect",(G)=>{Q=v0(Q,G,X),T()}),q.methods.set("selectAll",()=>{if(X!=="multiple")return;let G=q.getAllLoadedItems();Q=B2(Q,G,X),b(),T()}),q.methods.set("clearSelection",()=>{Q=U2(Q);let{renderRange:G,isCompressed:N}=q.state.viewportState,A=q.getItemsForRange(G),_=N?q.getCompressionContext():void 0;q.renderer.render(A,G,Q.selected,Q.focusedIndex,_),U.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return w0(Q)}),q.methods.set("getSelectedItems",()=>{return S0(Q,(N)=>{let A=M.get(N);if(A===void 0)return;return q.dataManager.getItem(A)})}),q.destroyHandlers.push(()=>{if(y&&y.parentNode)y.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var Lj=(j)=>{let X=j?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(J){J.methods.set("getScrollSnapshot",()=>{let K=J.scrollController.getScrollTop(),q=J.getCachedCompression(),B=J.getVirtualTotal(),U=J.methods.get("getSelected"),V=U&&U().length>0?U():void 0;if(B===0){let b={index:0,offsetInItem:0,total:0};if(V)b.selectedIds=V;return b}let Y,D;if(q.isCompressed){let H=K/q.virtualSize*B;Y=Math.max(0,Math.min(Math.floor(H),B-1)),D=(H-Y)*J.sizeCache.getSize(Y)}else Y=J.sizeCache.indexAtOffset(K),D=K-J.sizeCache.getOffset(Y);D=Math.max(0,D);let M={index:Y,offsetInItem:D,total:B};if(V)M.selectedIds=V;return M});let Q=(K)=>{let{index:q,offsetInItem:B,selectedIds:U}=K,V=J.getVirtualTotal();if(V===0)return;if(!Number.isFinite(q)||!Number.isFinite(B))return;if(J.sizeCache.getTotal()!==V){J.sizeCache.rebuild(V),J.updateCompressionMode();let L=J.getCachedCompression();J.updateContentSize(L.virtualSize)}let D=J.getCachedCompression(),M=Math.max(0,Math.min(q,V-1)),b;if(D.isCompressed){let L=J.sizeCache.getSize(M),P=L>0?B/L:0;b=(M+P)/V*D.virtualSize}else b=J.sizeCache.getOffset(M)+B;let H=J.state.viewportState.containerSize,W=Math.max(0,D.virtualSize-H);if(b=Math.max(0,Math.min(b,W)),J.scrollController.scrollTo(b),U&&U.length>0){let L=J.methods.get("select");if(L)L(...U)}let F=J.methods.get("loadVisibleRange");if(F)requestAnimationFrame(()=>{F()});else{let L=J.methods.get("reload");if(L)requestAnimationFrame(()=>{L()})}};if(J.methods.set("restoreScroll",Q),X)queueMicrotask(()=>{Q(X)})}}};export{Lj as withSnapshots,Fj as withSelection,Mj as withSections,o2 as withScrollbar,e2 as withScale,Jj as withPage,Aj as withGrid,jj as withAsync,x2 as vlist,v0 as toggleSelection,qj as simpleVisibleRange,m0 as selectItems,B2 as selectAll,Dj as rangesEqual,t0 as rafThrottle,s2 as needsScaling,j2 as mergeRanges,Ej as isSelected,T0 as isSectionHeader,H0 as isPlaceholderItem,Wj as isInRange,S0 as getSelectedItems,w0 as getSelectedIds,V0 as getScaleState,n2 as getScaleInfo,V0 as getScale,Gj as getRangeCount,r2 as getMaxItemsWithoutScaling,_2 as filterPlaceholders,_j as diffRanges,d0 as deselectItems,q2 as createStickyHeader,e0 as createSparseStorage,R0 as createSizeCache,Z2 as createSelectionState,g0 as createSectionedSizeFn,X2 as createSectionLayout,z0 as createScrollbar,t2 as createScrollController,J2 as createPlaceholderManager,x0 as createGridRenderer,K2 as createGridLayout,s0 as createEmitter,Q2 as createAsyncManager,U2 as clearSelection,Nj as clampScrollPosition,Zj as calculateTotalSize,P0 as calculateScrollToIndex,r0 as calculateScaledVisibleRange,n0 as calculateScaledScrollToIndex,l2 as calculateScaledRenderRange,C0 as calculateScaledItemPosition,Yj as calculateRenderRange,h0 as calculateMissingRanges,Uj as calculateItemOffset,a2 as calculateIndexFromScrollPosition,Bj as calculateActualSize,u0 as buildLayoutItems,y0 as MAX_VIRTUAL_HEIGHT};
|
|
1
|
+
var{defineProperty:_2,getOwnPropertyNames:lj,getOwnPropertyDescriptor:aj}=Object,sj=Object.prototype.hasOwnProperty;var v2=new WeakMap,rj=(j)=>{var q=v2.get(j),J;if(q)return q;if(q=_2({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")lj(j).map((Q)=>!sj.call(q,Q)&&_2(q,Q,{get:()=>j[Q],enumerable:!(J=aj(j,Q))||J.enumerable}));return v2.set(j,q),q};var nj=(j,q)=>{for(var J in q)_2(j,J,{get:q[J],enumerable:!0,configurable:!0,set:(Q)=>q[J]=()=>Q})};var w2=(j,q)=>()=>(j&&(q=j(j=0)),q);var oj=(j,q)=>{let J=q;return{getOffset:(Q)=>Q*j,getSize:(Q)=>j,indexAtOffset:(Q)=>{if(J===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(Q/j),J-1))},getTotalSize:()=>J*j,getTotal:()=>J,rebuild:(Q)=>{J=Q},isVariable:()=>!1}},ij=(j,q)=>{let J=q,Q=new Float64Array(0),K=(Z)=>{J=Z,Q=new Float64Array(Z+1),Q[0]=0;for(let N=0;N<Z;N++)Q[N+1]=Q[N]+j(N)};K(q);let X=(Z)=>{if(J===0)return 0;if(Z<=0)return 0;if(Z>=Q[J])return J-1;let N=0,W=J-1;while(N<W){let Y=N+W+1>>>1;if(Q[Y]<=Z)N=Y;else W=Y-1}return N};return{getOffset:(Z)=>{if(Z<=0)return 0;if(Z>=J)return Q[J];return Q[Z]},getSize:(Z)=>j(Z),indexAtOffset:(Z)=>X(Z),getTotalSize:()=>Q[J]??0,getTotal:()=>J,rebuild:(Z)=>K(Z),isVariable:()=>!0}},y0=(j,q)=>{if(typeof j==="number")return oj(j,q);return ij(j,q)},u0=(j,q,J,Q)=>{if(Q===0)return 0;if(!j.isVariable())return Math.ceil(J/j.getSize(0));let K=0,X=0,Z=q;while(Z<Q&&X<J)X+=j.getSize(Z),K++,Z++;return Math.max(1,K)},r0=(j,q,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.floor(q/j.getSize(0));let Q=0,K=0;for(let X=J-1;X>=0;X--){let Z=j.getSize(X);if(K+Z>q)break;K+=Z,Q++}return Math.max(Q,1)},M2=(j,q,J)=>{if(J===0)return 0;let Q=Math.floor(q),K=q-Q,X=Math.max(0,Math.min(Q,J-1));return j.getOffset(X)+K*j.getSize(X)};var F2=200,z0=50,n2=15,o2=2,i2=50,$0=16000000,t2="x",e2=20,A2="_isPlaceholder",jj="__placeholder_";var A0=(j,q)=>{let J=q.getTotalSize(),Q=J>$0,K=Q?$0:J,X=J>0?K/J:1;return{isCompressed:Q,actualSize:J,virtualSize:K,ratio:X}},i0=(j,q,J,Q,K,X)=>{if(Q===0||q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let D=J.indexAtOffset(j),M=J.indexAtOffset(j+q);if(M<Q-1)M++;return X.start=Math.max(0,D),X.end=Math.min(Q-1,Math.max(0,M)),X}let{virtualSize:Z}=K,W=j/Z*Q,Y=Math.floor(W),U=u0(J,Math.max(0,Y),q,Q),A=Math.ceil(W)+U,O=Z-q-j;if(O<=q&&O>=-1){let D=r0(J,q,Q),M=Math.max(0,Q-D),_=Math.max(0,Math.min(1,1-O/q));Y=Math.floor(Y+(M-Y)*_),A=O<=1?Q-1:Math.min(Q-1,Y+U)}return X.start=Math.max(0,Y),X.end=Math.min(Q-1,Math.max(0,A)),X},Jj=(j,q,J,Q)=>{if(J===0)return Q.start=0,Q.end=-1,Q;return Q.start=Math.max(0,j.start-q),Q.end=Math.min(J-1,j.end+q),Q},v0=(j,q,J,Q,K,X,Z)=>{if(!X.isCompressed||Q===0)return J.getOffset(j);let{virtualSize:N}=X,W=N-K,Y=W-q;if(Y<=K&&Y>=-1){if(q>=W-1){let b=J.getTotalSize()-J.getOffset(j);return K-b}let O=r0(J,K,Q),D=Math.max(0,Q-O),_=q/N*Q,v=Math.max(0,Math.min(1,1-Y/K)),k=J.getOffset(j)-J.getOffset(D),T=J.getOffset(j)-M2(J,_,Q);return T+(k-T)*v}let U=q/N,A=J.getTotalSize(),V=U*A;return J.getOffset(j)-V},t0=(j,q,J,Q,K,X="start")=>{if(Q===0)return 0;let Z;if(K.isCompressed){if(X==="end"&&j===Q-1)return Math.max(0,K.virtualSize-J);Z=j/Q*K.virtualSize}else Z=q.getOffset(j);let N=q.getSize(j);switch(X){case"center":Z-=(J-N)/2;break;case"end":Z-=J-N;break}let W=K.virtualSize-J;return Math.max(0,Math.min(Z,W))},Qj=(j,q,J,Q)=>{if(J===0)return 0;if(Q.isCompressed){let K=j/Q.virtualSize;return Math.floor(K*J)}return q.indexAtOffset(j)},qj=(j,q)=>{if(typeof q==="number")return j*q>$0;return q.getTotalSize()>$0},Xj=(j)=>{if(j<=0)return 0;return Math.floor($0/j)},Yj=(j,q)=>{let J=A0(j,q);if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(J.ratio*100).toFixed(1)}% (${j} items, ${(J.actualSize/1e6).toFixed(1)}M px → ${(J.virtualSize/1e6).toFixed(1)}M px virtual)`};var e0=()=>{};var R0=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var Hj={};nj(Hj,{createGridRenderer:()=>d0});var GJ=(j=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let Z=document.createElement("div");return Z.setAttribute("role","option"),Z},release:(X)=>{if(q.length<j)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},d0=(j,q,J,Q,K,X,Z,N,W=!1)=>{let Y=GJ(),U=new Map,A=X,V=!1,O=null,D=0,M="",_=(H)=>{if(O&&D===H)return O;return O=A0(H,J),D=H,O},v={selected:!1,focused:!1},k=(H,w)=>{return v.selected=H,v.focused=w,v},T=`${K}-item ${K}-grid-item`,b=`${K}-item--selected`,G=`${K}-item--focused`,P=(H,w)=>{if(typeof w==="string")H.innerHTML=w;else H.replaceChildren(w)},L=(H,w,c)=>{H.classList.toggle(b,w),H.classList.toggle(G,c)},y=(H,w)=>{let c=Q.getRow(H);if(w){let t=w.totalItems,s=_(t);if(s.isCompressed)return v0(c,w.scrollPosition,J,t,w.containerSize,s,w.rangeStart)}return J.getOffset(c)},E=(H,w,c)=>{let t=H.dataset.id?.startsWith("__group_header"),s=t?0:Q.getCol(w),o=t?0:Q.getColumnOffset(s,A),Q0;if(V){let l=Q.getRow(w),u=0,n=new Set;for(let K0=0;K0<w;K0++){let i=Q.getRow(K0);if(i<l&&!n.has(i)){let B0=J.getSize(K0);u+=B0,n.add(i)}}Q0=u}else Q0=y(w,c);if(W)H.style.transform=`translate(${Math.round(Q0)}px, ${Math.round(o)}px)`;else H.style.transform=`translate(${Math.round(o)}px, ${Math.round(Q0)}px)`},$=(H,w)=>{let c=H.dataset.id?.startsWith("__group_header"),t=c?A:Q.getColumnWidth(A),s;if(V||c)s=J.getSize(w)-Q.gap;else{let o=Q.getRow(w);s=J.getSize(o)-Q.gap}if(W)H.style.width=`${s}px`,H.style.height=`${t}px`;else H.style.width=`${t}px`,H.style.height=`${s}px`},r=(H,w,c,t,s)=>{let o=Y.acquire(),Q0=k(c,t);if(o.className=T,o.dataset.index=String(H),o.dataset.id=String(w.id),o.dataset.row=String(Q.getRow(H)),o.dataset.col=String(Q.getCol(H)),o.ariaSelected=String(c),N)o.id=`${N}-item-${H}`;if(Z)M=String(Z()),o.setAttribute("aria-setsize",M),o.setAttribute("aria-posinset",String(H+1));$(o,H);let l=q(w,H,Q0);return P(o,l),L(o,c,t),E(o,H,s),o},z=(H,w,c,t,s)=>{if(w.start===0&&H.length>0)V=R0(H[0]);for(let[u,n]of U)if(u<w.start||u>w.end)n.element.remove(),Y.release(n.element),U.delete(u);let o=!1;if(Z){let u=String(Z());o=u!==M,M=u}let Q0=document.createDocumentFragment(),l=[];for(let u=w.start;u<=w.end;u++){let n=u-w.start,K0=H[n];if(!K0){console.warn(`⚠️ RENDER: Missing item at index ${u} (range: ${w.start}-${w.end}, items.length: ${H.length})`);continue}let i=c.has(K0.id),B0=u===t,X0=U.get(u);if(X0){let S=X0.element.dataset.id,d=String(K0.id);if(S!==d){let a=k(i,B0),Z0=q(K0,u,a);P(X0.element,Z0),X0.element.dataset.id=d,X0.element.dataset.row=String(Q.getRow(u)),X0.element.dataset.col=String(Q.getCol(u)),$(X0.element,u)}if(L(X0.element,i,B0),X0.element.ariaSelected=String(i),E(X0.element,u,s),o)X0.element.setAttribute("aria-setsize",M)}else{let S=r(u,K0,i,B0,s);Q0.appendChild(S),l.push({index:u,element:S})}}if(l.length>0){j.appendChild(Q0);for(let{index:u,element:n}of l)U.set(u,{index:u,element:n})}},m=(H)=>{for(let[w,c]of U)E(c.element,w,H)},B=(H,w,c,t)=>{let s=U.get(H);if(s){let o=k(c,t),Q0=q(w,H,o);P(s.element,Q0),L(s.element,c,t),s.element.dataset.id=String(w.id),s.element.ariaSelected=String(c),$(s.element,H)}},R=(H,w,c)=>{let t=U.get(H);if(t)L(t.element,w,c)},C=(H)=>{return U.get(H)?.element},h=(H)=>{if(Math.abs(H-A)<1)return;A=H;for(let[w,c]of U)$(c.element,w),E(c.element,w)},I=()=>{for(let[,H]of U)H.element.remove(),Y.release(H.element);U.clear()};return{render:z,updatePositions:m,updateItem:B,updateItemClasses:R,getElement:C,updateContainerWidth:h,clear:I,destroy:()=>{I(),Y.clear()}}};var B2=w2(()=>{e0()});var f2=2,S2=(j=0)=>{let q=[,,,,,];for(let J=0;J<5;J++)q[J]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},V2=(j,q)=>{let J=performance.now(),Q=J-j.lastTime;if(Q===0)return j;if(Q>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=q,X.time=J,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=q,j.lastTime=J,j}let K=j.samples[j.sampleIndex];if(K.position=q,K.time=J,j.sampleIndex=(j.sampleIndex+1)%5,j.sampleCount=Math.min(j.sampleCount+1,5),j.sampleCount>=2){let X=(j.sampleIndex-j.sampleCount+5)%5,Z=j.samples[X],N=q-Z.position,W=J-Z.time;j.velocity=W>0?Math.abs(N)/W:0}return j.lastPosition=q,j.lastTime=J,j};var n0=(j,q)=>{let J=new Map,Q=(X)=>{let Z=J.get(X);return Z!==void 0?Z:j},K=y0(Q,q);return{getOffset(X){return K.getOffset(X)},getSize(X){return Q(X)},indexAtOffset(X){return K.indexAtOffset(X)},getTotalSize(){return K.getTotalSize()},getTotal(){return K.getTotal()},rebuild(X){if(X<K.getTotal()){for(let Z of J.keys())if(Z>=X)J.delete(Z)}K=y0(Q,X)},isVariable(){return!0},setMeasuredSize(X,Z){J.set(X,Z)},isMeasured(X){return J.has(X)},getEstimatedSize(){return j},measuredCount(){return J.size}}};var o0=()=>{let j={},q=(N,W)=>{if(!j[N])j[N]=new Set;return j[N].add(W),()=>J(N,W)},J=(N,W)=>{j[N]?.delete(W)};return{on:q,off:J,emit:(N,W)=>{j[N]?.forEach((Y)=>{try{Y(W)}catch(U){console.error(`[vlist] Error in event handler for "${String(N)}":`,U)}})},once:(N,W)=>{let Y=(U)=>{J(N,Y),W(U)};return q(N,Y)},clear:(N)=>{if(N)delete j[N];else for(let W in j)delete j[W]},listenerCount:(N)=>{return j[N]?.size??0}}};var I2=(j)=>{if(typeof j==="string"){let q=document.querySelector(j);if(!q)throw Error(`[vlist/builder] Container not found: ${j}`);return q}return j},p2=(j,q,J,Q)=>{let K=document.createElement("div");if(K.className=q,Q)K.classList.add(`${q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),J)K.setAttribute("aria-label",J);if(Q)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${q}-viewport`,Q)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let Z=document.createElement("div");if(Z.className=`${q}-content`,Z.style.position="relative",Q)Z.style.height="100%";else Z.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",Q)N.style.height="100%";else N.style.width="100%";return Z.appendChild(N),X.appendChild(Z),K.appendChild(X),j.appendChild(K),{root:K,viewport:X,content:Z,items:N}};var h2=(j=100)=>{let q=[];return{acquire:()=>{let J=q.pop();if(J)return J;let Q=document.createElement("div");return Q.setAttribute("role","option"),Q},release:(J)=>{if(q.length<j)J.className="",J.textContent="",J.removeAttribute("style"),J.removeAttribute("data-index"),J.removeAttribute("data-id"),q.push(J)},clear:()=>{q.length=0}}};var u2=(j,q,J,Q,K)=>{if(Q===0||q===0){K.start=0,K.end=0;return}let X=J.indexAtOffset(j),Z=u0(J,X,q,Q),N=X+Z;K.start=Math.max(0,X),K.end=Math.min(Q-1,Math.max(0,N))},g2=(j,q,J,Q)=>{if(J===0){Q.start=0,Q.end=0;return}Q.start=Math.max(0,j.start-q),Q.end=Math.min(J-1,j.end+q)},x2=(j,q,J,Q,K)=>{if(Q===0)return 0;let X=Math.max(0,Math.min(j,Q-1)),Z=q.getOffset(X),N=q.getSize(X),W=Math.max(0,q.getTotalSize()-J),Y;switch(K){case"center":Y=Z-(J-N)/2;break;case"end":Y=Z-J+N;break;default:Y=Z}return Math.max(0,Math.min(Y,W))};var m2=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,d2=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:300};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??300};return{align:"start",behavior:"auto",duration:300}};var c2=(j,q)=>{let{dom:J,emitter:Q,resolvedConfig:K,rawConfig:X,rendered:Z,pool:N,sharedState:W,isHorizontal:Y,classPrefix:U,contentSizeHandlers:A,afterScroll:V,clickHandlers:O,keydownHandlers:D,resizeHandlers:M,destroyHandlers:_,methods:v,onScrollFrame:k,resizeObserver:T,renderRange:b}=q;return{get dom(){return J},get sizeCache(){return j.hc},get emitter(){return Q},get config(){return K},get rawConfig(){return X},get renderer(){return{render:(G,P,L,y,E)=>{j.ss=L,j.fi=y,j.ffn()},updateItemClasses:(G,P,L)=>{let y=Z.get(G);if(!y)return;y.classList.toggle(`${U}-item--selected`,P),y.classList.toggle(`${U}-item--focused`,L),y.ariaSelected=P?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(G)=>Z.get(G)??null,clear:()=>{},destroy:()=>{}}},set renderer(G){},get dataManager(){return j.dm},set dataManager(G){j.dm=G},get scrollController(){return j.sc},set scrollController(G){j.sc=G},state:W,getContainerWidth(){return j.cw},afterScroll:V,clickHandlers:O,keydownHandlers:D,resizeHandlers:M,contentSizeHandlers:A,destroyHandlers:_,methods:v,replaceTemplate(G){j.at=G},replaceRenderer(G){},replaceDataManager(G){j.dm=G},replaceScrollController(G){j.sc=G},getItemsForRange(G){let{dm:P,it:L}=j,y=[];for(let E=G.start;E<=G.end;E++){let $=P?P.getItem(E):L[E];if($)y.push($)}return y},getAllLoadedItems(){let G=j.dm;if(G){let P=G.getTotal(),L=[];for(let y=0;y<P;y++){let E=G.getItem(y);if(E)L.push(E)}return L}return[...j.it]},getVirtualTotal(){return j.vtf()},getCachedCompression(){let G=j.hc;return{isCompressed:!1,actualSize:G.getTotalSize(),virtualSize:G.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:j.ls,totalItems:j.vtf(),containerSize:j.ch,rangeStart:b.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,G]of Z)G.remove(),N.release(G);Z.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(G,P){j.rfn=G,j.ffn=P},setVirtualTotalFn(G){j.vtf=G},rebuildSizeCache(G){j.hc.rebuild(G??j.vtf())},setSizeConfig(G){j.hc=y0(G,j.vtf())},updateContentSize(G){let P=`${G}px`;if(Y)J.content.style.width=P;else J.content.style.height=P},updateCompressionMode(){},setVisibleRangeFn(G){j.gvr=G},setScrollToPosFn(G){j.gsp=G},setPositionElementFn(G){j.pef=G},setScrollFns(G,P){j.sgt=G,j.sst=(L)=>{P(L),k()}},setScrollTarget(G){j.st.removeEventListener("scroll",k),j.st=G,j.st.addEventListener("scroll",k,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(G){j.gcw=G.width,j.gch=G.height,j.cw=G.width(),j.ch=G.height(),W.viewportState.containerSize=Y?j.cw:j.ch},disableViewportResize(){if(j.vre)j.vre=!1,T.unobserve(J.viewport)},disableWheelHandler(){if(j.wh)J.viewport.removeEventListener("wheel",j.wh),j.wh=null}}},l2=(j,q,J)=>{let{rendered:Q,itemState:K,contentSizeHandlers:X,applyTemplate:Z,updateContentSize:N}=q,W=()=>{j.hc.rebuild(j.vtf()),N(),J.updateCompressionMode();for(let Y=0;Y<X.length;Y++)X[Y]();j.ffn()};return{getState:()=>({total:j.it.length,cached:j.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>j.it.length,getCached:()=>j.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>j.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<j.it.length&&j.it[Y]!==void 0,getItemsInRange:(Y,U)=>{let A=j.it,V=[],O=Math.max(0,Y),D=Math.min(U,A.length-1);for(let M=O;M<=D;M++)V.push(A[M]);return V},setTotal:(Y)=>{},setItems:(Y,U=0,A)=>{let V=j.it;if(U===0&&(A!==void 0||V.length===0))j.it=Y;else{let O=U+Y.length;if(V.length<O)V.length=O;for(let D=0;D<Y.length;D++)V[U+D]=Y[D]}if(j.ii)W()},updateItem:(Y,U)=>{let A=j.it;if(Y<0||Y>=A.length)return!1;let V=A[Y];if(!V)return!1;A[Y]={...V,...U};let O=Q.get(Y);if(O)Z(O,j.at(A[Y],Y,K)),O.dataset.id=String(A[Y].id);return!0},removeItem:(Y)=>{if(Y<0||Y>=j.it.length)return!1;if(j.it.splice(Y,1),j.ii)W();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{j.it=[]},reset:()=>{if(j.it=[],j.ii)j.hc.rebuild(0),N(),j.ffn()}}},a2=(j,q)=>{let{dom:J,classPrefix:Q}=q;return{getScrollTop:()=>j.sgt(),scrollTo:(K)=>{j.sst(K),j.ls=K,j.rfn()},scrollBy:(K)=>{let X=j.sgt()+K;j.sst(X),j.ls=X,j.rfn()},isAtTop:()=>j.ls<=2,isAtBottom:(K=2)=>j.sab(K),getScrollPercentage:()=>{let K=j.hc.getTotalSize(),X=Math.max(0,K-j.ch);return X>0?j.ls/X:0},getVelocity:()=>j.vt.velocity,isTracking:()=>j.vt.sampleCount>=2,isScrolling:()=>J.root.classList.contains(`${Q}--scrolling`),updateConfig:()=>{},enableCompression:()=>{j.sic=!0},disableCompression:()=>{j.sic=!1},isCompressed:()=>j.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{j.ch=K},destroy:()=>{}}};var tj=3,ej="vlist",s2=150,jJ=0,r2=(j)=>{if(!j.container)throw Error("[vlist/builder] Container is required");if(!j.item)throw Error("[vlist/builder] item configuration is required");let q=j.orientation==="horizontal",J=q?"width":"height",Q=q?"estimatedWidth":"estimatedHeight",K=q?j.item.width:j.item.height,X=q?j.item.estimatedWidth:j.item.estimatedHeight;if(K==null&&X==null)throw Error(`[vlist/builder] item.${J} or item.${Q} is required${q?" when orientation is 'horizontal'":""}`);if(K!=null){if(typeof K==="number"&&K<=0)throw Error(`[vlist/builder] item.${J} must be a positive number`);if(typeof K!=="number"&&typeof K!=="function")throw Error(`[vlist/builder] item.${J} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`)}if(!j.item.template)throw Error("[vlist/builder] item.template is required");if(q&&j.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let Z=new Map,N=!1,W={use(Y){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return Z.set(Y.name,Y),W},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,JJ(j,Z,q,K,X??null)}};return W};function JJ(j,q,J,Q,K){let{item:X,items:Z,overscan:N=tj,classPrefix:W=ej,ariaLabel:Y,reverse:U=!1,scroll:A}=j,V=A,O=V?.wheel??!0,D=V?.wrap??!1,M=U,_=`${W}-${jJ++}`,v=Q??K,k=Q==null&&K!=null,T=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,b=J?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,G={overscan:N,classPrefix:W,reverse:M,wrap:D,horizontal:J,ariaIdPrefix:_},P=Array.from(q.values()).sort((F,f)=>(F.priority??50)-(f.priority??50)),L=new Set(P.map((F)=>F.name));for(let F of P)if(F.conflicts){for(let f of F.conflicts)if(L.has(f))throw Error(`[vlist/builder] ${F.name} and ${f} cannot be combined`)}if(M){if(L.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let y=I2(j.container),E=p2(y,W,Y,J);if(V?.wheel===!1)if(J)E.viewport.style.overflowX="hidden";else E.viewport.style.overflow="hidden";if(V?.scrollbar==="none")E.viewport.classList.add(`${W}-viewport--no-scrollbar`);let $=o0(),r=Z||[],z=k?n0(K,r.length):y0(v,r.length),m=h2(),B={it:r,hc:z,ch:E.viewport.clientHeight,cw:E.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:S2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:J?()=>E.viewport.scrollLeft:()=>E.viewport.scrollTop,sst:J?(F)=>{E.viewport.scrollLeft=F}:(F)=>{E.viewport.scrollTop=F},sab:(F=2)=>{let f=B.hc.getTotalSize();return B.ls+B.ch>=f-F},sic:!1,rfn:null,ffn:null,gvr:(F,f,g,x,j0)=>{u2(F,f,g,x,j0)},gsp:(F,f,g,x,j0)=>{return x2(F,f,g,x,j0)},pef:null,at:X.template,vre:!0,st:E.viewport,wh:null,gcw:()=>B.cw,gch:()=>B.ch};B.vtf=()=>B.dm?B.dm.getTotal():B.it.length;let R=null,C=null,h=!1,I={start:0,end:0},p={start:0,end:0},H={start:-1,end:-1},w={viewportState:{scrollPosition:0,containerSize:J?B.cw:B.ch,totalSize:B.hc.getTotalSize(),actualSize:B.hc.getTotalSize(),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},c=new Map,t=k?new WeakMap:null,s=k?z:null,o=null,Q0=0,l=!1,u=()=>{if(!k)return;if(l){let F=B.sgt(),f=J?E.viewport.scrollWidth-E.viewport.clientWidth:E.viewport.scrollHeight-E.viewport.clientHeight,g=f>0&&F>=f-2;if(M0(),l=!1,g){let x=Math.max(0,B.hc.getTotalSize()-(J?B.cw:B.ch));if(x>F)B.sst(x),B.ls=x,B.rfn()}}};if(k&&s&&t)o=new ResizeObserver((F)=>{if(B.id)return;let f=!1,g=I.start;for(let x of F){let j0=t.get(x.target);if(j0===void 0)continue;let q0=J?x.borderBoxSize[0].inlineSize:x.borderBoxSize[0].blockSize;if(!s.isMeasured(j0)){let U0=s.getSize(j0);if(s.setMeasuredSize(j0,q0),f=!0,j0<g&&q0!==U0)Q0+=q0-U0;o.unobserve(x.target);let J0=x.target;if(J)J0.style.width=`${q0}px`;else J0.style.height=`${q0}px`}}if(!f)return;if(s.rebuild(B.vtf()),B.hc=s,Q0!==0){let x=B.sgt();B.sst(x+Q0),B.ls=x+Q0,Q0=0}if(h)l=!0;else{let x=B.sgt(),j0=J?E.viewport.scrollWidth-E.viewport.clientWidth:E.viewport.scrollHeight-E.viewport.clientHeight,q0=j0>0&&x>=j0-2;if(M0(),l=!1,q0){let U0=Math.max(0,B.hc.getTotalSize()-(J?B.cw:B.ch));if(U0>x)B.sst(U0),B.ls=U0}}H.start=-1,H.end=-1,B.rfn()});let n={selected:!1,focused:!1},K0=`${W}-item`,i=[],B0=[],X0=[],S=[],d=[],e=[],a=new Map,Z0=(F,f)=>{if(typeof f==="string")F.innerHTML=f;else F.replaceChildren(f)},W0=(F,f)=>{let g=Math.round(B.hc.getOffset(f));if(J)F.style.transform=`translateX(${g}px)`;else F.style.transform=`translateY(${g}px)`};B.pef=W0;let E0=(F,f)=>{let g=m.acquire();g.className=K0;let x=!k||s&&s.isMeasured(F);if(J){if(x)g.style.width=`${B.hc.getSize(F)}px`;else g.style.width="";if(b!=null)g.style.height=`${b}px`}else if(x)g.style.height=`${B.hc.getSize(F)}px`;else g.style.height="";if(g.dataset.index=String(F),g.dataset.id=String(f.id),g.ariaSelected="false",g.id=`${_}-item-${F}`,B.la=String(B.vtf()),g.setAttribute("aria-setsize",B.la),g.setAttribute("aria-posinset",String(F+1)),String(f.id).startsWith("__placeholder_"))g.classList.add(`${W}-item--placeholder`);return Z0(g,B.at(f,F,n)),B.pef(g,F),g},M0=()=>{let F=`${B.hc.getTotalSize()}px`;if(J)E.content.style.width=F;else E.content.style.height=F},G0=()=>{if(B.id)return;let F=B.vtf(),f=J?B.cw:B.ch;if(B.gvr(B.ls,f,B.hc,F,I),g2(I,N,F,p),p.start===H.start&&p.end===H.end){if(B.sic)for(let[J0,N0]of c)B.pef(N0,J0);return}let g=String(F),x=g!==B.la;B.la=g;for(let[J0,N0]of c)if(J0<p.start||J0>p.end)N0.remove(),m.release(N0),c.delete(J0);let j0=document.createDocumentFragment(),q0=[],U0=[];for(let J0=p.start;J0<=p.end;J0++){let N0=B.dm?B.dm.getItem(J0):B.it[J0];if(!N0)continue;let V0=c.get(J0);if(V0){let b0=V0.dataset.id,p0=String(N0.id);if(b0!==p0){let cj=b0?.startsWith("__placeholder_"),C2=p0.startsWith("__placeholder_");Z0(V0,B.at(N0,J0,n)),V0.dataset.id=p0;let z2=!k||s&&s.isMeasured(J0);if(J)V0.style.width=z2?`${B.hc.getSize(J0)}px`:"";else V0.style.height=z2?`${B.hc.getSize(J0)}px`:"";if(C2)V0.classList.add(`${W}-item--placeholder`);else V0.classList.remove(`${W}-item--placeholder`);if(cj&&!C2)V0.classList.add(`${W}-item--replaced`),setTimeout(()=>{V0.classList.remove(`${W}-item--replaced`)},300)}B.pef(V0,J0);let s0=B.ss.has(N0.id),dj=J0===B.fi;if(V0.classList.toggle(`${W}-item--selected`,s0),V0.classList.toggle(`${W}-item--focused`,dj),V0.ariaSelected=s0?"true":"false",x)V0.setAttribute("aria-setsize",B.la)}else{let b0=E0(J0,N0);U0.push({index:J0,element:b0});let p0=B.ss.has(N0.id),s0=J0===B.fi;if(p0)b0.classList.add(`${W}-item--selected`),b0.ariaSelected="true";if(s0)b0.classList.add(`${W}-item--focused`);j0.appendChild(b0),q0.push({index:J0,element:b0})}}if(q0.length>0){E.items.appendChild(j0);for(let{index:J0,element:N0}of q0)c.set(J0,N0)}if(k&&o&&s&&t){for(let{index:J0,element:N0}of U0)if(!s.isMeasured(J0))t.set(N0,J0),o.observe(N0)}H.start=p.start,H.end=p.end,w.lastRenderRange.start=p.start,w.lastRenderRange.end=p.end,w.viewportState.scrollPosition=B.ls,w.viewportState.visibleRange.start=I.start,w.viewportState.visibleRange.end=I.end,w.viewportState.renderRange.start=p.start,w.viewportState.renderRange.end=p.end,$.emit("range:change",{range:{start:p.start,end:p.end}})},H0=()=>{H.start=-1,H.end=-1,B.rfn()};B.rfn=G0,B.ffn=H0;let O0=()=>{if(B.id)return;let F=B.sgt(),f=F>=B.ls?"down":"up";if(B.vt=V2(B.vt,F),!E.root.classList.contains(`${W}--scrolling`))E.root.classList.add(`${W}--scrolling`);h=!0,B.ls=F,B.rfn(),$.emit("scroll",{scrollPosition:F,direction:f}),$.emit("velocity:change",{velocity:B.vt.velocity,reliable:B.vt.sampleCount>=f2});for(let g=0;g<i.length;g++)i[g](F,f);if(C)clearTimeout(C);C=setTimeout(()=>{E.root.classList.remove(`${W}--scrolling`),h=!1,B.vt.velocity=0,B.vt.sampleCount=0,$.emit("velocity:change",{velocity:0,reliable:!1}),u()},V?.idleTimeout??s2)},Y0=null;if(B.st.addEventListener("scroll",O0,{passive:!0}),O&&!J&&!T)Y0=(F)=>{F.preventDefault();let f=B.sgt(),g=F.deltaY,x=Math.max(0,Math.min(f+g,B.hc.getTotalSize()-B.ch));B.sst(x),B.ls=x,B.vt=V2(B.vt,x),B.rfn();let j0=x>=f?"down":"up";if($.emit("scroll",{scrollPosition:x,direction:j0}),!E.root.classList.contains(`${W}--scrolling`))E.root.classList.add(`${W}--scrolling`);if(h=!0,C)clearTimeout(C);C=setTimeout(()=>{E.root.classList.remove(`${W}--scrolling`),h=!1,B.vt.velocity=0,B.vt.sampleCount=0,$.emit("velocity:change",{velocity:0,reliable:!1}),u()},V?.idleTimeout??s2)},B.wh=Y0,E.viewport.addEventListener("wheel",Y0,{passive:!1});else if(J&&O)Y0=(F)=>{if(F.deltaX)return;F.preventDefault(),E.viewport.scrollLeft+=F.deltaY},B.wh=Y0,E.viewport.addEventListener("wheel",Y0,{passive:!1});let F0=(F)=>{let g=F.target.closest("[data-index]");if(g){let x=parseInt(g.dataset.index??"-1",10);if(x>=0){let j0=B.dm?.getItem(x)??B.it[x];if(j0){if(j0.__groupHeader)return;$.emit("item:click",{item:j0,index:x,event:F})}}}for(let x=0;x<B0.length;x++)B0[x](F)},D0=(F)=>{let g=F.target.closest("[data-index]");if(g){let x=parseInt(g.dataset.index??"-1",10);if(x>=0){let j0=B.dm?.getItem(x)??B.it[x];if(j0){if(j0.__groupHeader)return;$.emit("item:dblclick",{item:j0,index:x,event:F})}}}},L0=(F)=>{for(let f=0;f<X0.length;f++)X0[f](F)};E.items.addEventListener("click",F0),E.items.addEventListener("dblclick",D0),E.root.addEventListener("keydown",L0);let P0=new ResizeObserver((F)=>{if(B.id)return;for(let f of F){let g=f.contentRect.height,x=f.contentRect.width,j0=J?x:g,q0=J?B.cw:B.ch;if(B.cw=x,B.ch=g,Math.abs(j0-q0)>1){if(w.viewportState.containerSize=j0,B.ii)M0(),B.rfn(),$.emit("resize",{height:g,width:x})}if(B.ii)for(let U0=0;U0<S.length;U0++)S[U0](x,g)}});if(B.vre)P0.observe(E.viewport);let D2={dom:E,emitter:$,resolvedConfig:G,rawConfig:j,rendered:c,pool:m,itemState:n,sharedState:w,renderRange:p,isHorizontal:J,classPrefix:W,contentSizeHandlers:d,afterScroll:i,clickHandlers:B0,keydownHandlers:X0,resizeHandlers:S,destroyHandlers:e,methods:a,onScrollFrame:O0,resizeObserver:P0,applyTemplate:Z0,updateContentSize:M0},_0=c2(B,D2);B.dm=l2(B,D2,_0),B.sc=a2(B,D2);let k2=new Map;for(let F of P)if(F.methods)for(let f of F.methods){let g=k2.get(f);if(g)throw Error(`[vlist/builder] Method "${f}" is registered by both "${g}" and "${F.name}"`);k2.set(f,F.name)}for(let F of P)F.setup(_0);if(B.ii=!0,_0.state.isInitialized=!0,M0(),B.rfn(),M&&B.it.length>0){let F=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(F),B.ls=F,B.rfn()}let zj=(F)=>{_0.dataManager.setItems(F,0,F.length)},vj=M?(F)=>{let f=B.sab(2),g=B.it.length;if(_0.dataManager.setItems(F,g),f&&B.it.length>0){let x=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(x),B.ls=x,B.rfn()}}:(F)=>{let f=B.it.length;_0.dataManager.setItems(F,f)},wj=M?(F)=>{let f=B.sgt(),g=B.hc.getTotalSize(),x=[...B.it];_0.dataManager.clear(),_0.dataManager.setItems([...F,...x],0);let q0=B.hc.getTotalSize()-g;if(q0>0)B.sst(f+q0),B.ls=f+q0}:(F)=>{let f=[...B.it];_0.dataManager.clear(),_0.dataManager.setItems([...F,...f],0)},fj=(F,f)=>{_0.dataManager.updateItem(F,f)},Sj=(F)=>{_0.dataManager.removeItem(F)},Ij=async()=>{if(_0.dataManager.reload)await _0.dataManager.reload()},a0=()=>{if(R!==null)cancelAnimationFrame(R),R=null},pj=(F,f,g)=>{if(a0(),Math.abs(f-F)<1){B.sst(f),B.ls=f,B.rfn();return}let x=performance.now(),j0=(q0)=>{let U0=q0-x,J0=Math.min(U0/g,1),N0=F+(f-F)*m2(J0);if(B.sst(N0),B.ls=N0,B.rfn(),J0<1)R=requestAnimationFrame(j0);else R=null};R=requestAnimationFrame(j0)},hj=(F,f)=>{let{align:g,behavior:x,duration:j0}=d2(f),q0=B.vtf(),U0=F;if(D&&q0>0)U0=(U0%q0+q0)%q0;let J0=B.gsp(U0,B.hc,B.ch,q0,g);if(x==="smooth")pj(B.sgt(),J0,j0);else a0(),B.sst(J0)},uj=()=>B.sgt(),gj=(F,f)=>{return $.on(F,f)},xj=(F,f)=>{$.off(F,f)},mj=()=>{if(B.id)return;if(B.id=!0,_0.state.isDestroyed=!0,E.items.removeEventListener("click",F0),E.root.removeEventListener("keydown",L0),B.st.removeEventListener("scroll",O0),P0.disconnect(),o)o.disconnect(),o=null;if(B.wh)E.viewport.removeEventListener("wheel",B.wh);if(C)clearTimeout(C);for(let F=0;F<e.length;F++)e[F]();for(let F of P)if(F.destroy)F.destroy();a0();for(let[,F]of c)F.remove(),m.release(F);c.clear(),m.clear(),$.clear(),E.root.remove()},R2={get element(){return E.root},get items(){if(a.has("_getItems"))return a.get("_getItems")();return B.it},get total(){if(a.has("_getTotal"))return a.get("_getTotal")();return B.vtf()},setItems:a.has("setItems")?a.get("setItems"):zj,appendItems:a.has("appendItems")?a.get("appendItems"):vj,prependItems:a.has("prependItems")?a.get("prependItems"):wj,updateItem:a.has("updateItem")?a.get("updateItem"):fj,removeItem:a.has("removeItem")?a.get("removeItem"):Sj,reload:a.has("reload")?a.get("reload"):Ij,scrollToIndex:a.has("scrollToIndex")?a.get("scrollToIndex"):hj,cancelScroll:a.has("cancelScroll")?a.get("cancelScroll"):a0,getScrollPosition:a.has("getScrollPosition")?a.get("getScrollPosition"):uj,on:gj,off:xj,destroy:mj};for(let[F,f]of a){if(F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;R2[F]=f}return R2}e0();var w0=(j,q,J={},Q="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:Z=1000,minThumbSize:N=30,showOnHover:W=!0,hoverZoneWidth:Y=16,showOnViewportEnter:U=!0}=J,A=0,V=0,O=0,D=0,M=!1,_=!1,v=0,k=0,T=0,b=null,G=!1,P=null,L=null,y=K?"width":"height",E=K?"translateX":"translateY",$=K?(i)=>i.clientX:(i)=>i.clientY,r=K?"left":"top",z=document.createElement("div"),m=document.createElement("div"),B=W?document.createElement("div"):null,R=()=>{if(z.className=`${Q}-scrollbar`,m.className=`${Q}-scrollbar-thumb`,K)z.classList.add(`${Q}-scrollbar--horizontal`);if(z.appendChild(m),j.appendChild(z),B){if(B.className=`${Q}-scrollbar-hover`,K)B.classList.add(`${Q}-scrollbar-hover--horizontal`),B.style.height=`${Y}px`;else B.style.width=`${Y}px`;j.appendChild(B)}},C=()=>{if(b)clearTimeout(b),b=null},h=()=>{if(!X)return;C(),b=setTimeout(p,Z)},I=()=>{if(A<=V)return;if(C(),!G)z.classList.add(`${Q}-scrollbar--visible`),G=!0;if(X&&!M&&!_)h()},p=()=>{if(M||_)return;z.classList.remove(`${Q}-scrollbar--visible`),G=!1},H=(i,B0)=>{A=i,V=B0;let X0=A>V;if(z.style.display=X0?"":"none",!X0){p();return}let S=V/A;O=Math.max(N,S*V),m.style[y]=`${O}px`,D=V-O,w(T)},w=(i)=>{if(T=i,A<=V||D<=0)return;let B0=A-V,S=Math.min(1,Math.max(0,i/B0))*D;m.style.transform=`${E}(${S}px)`},c=(i)=>{if(i.target===m)return;let B0=z.getBoundingClientRect(),d=$(i)-B0[r]-O/2,a=Math.max(0,Math.min(d,D))/D,Z0=A-V,W0=a*Z0;q(W0),I()},t=(i)=>{i.preventDefault(),i.stopPropagation(),M=!0,v=$(i),k=T,C(),z.classList.add(`${Q}-scrollbar--dragging`),document.addEventListener("mousemove",s),document.addEventListener("mouseup",o)},s=(i)=>{if(!M)return;let B0=$(i)-v,X0=D>0?B0/D:0,S=A-V,d=X0*S,e=Math.max(0,Math.min(k+d,S)),Z0=e/S*D;if(m.style.transform=`${E}(${Z0}px)`,L=e,P===null)P=requestAnimationFrame(()=>{if(L!==null)q(L);P=null})},o=()=>{if(M=!1,P!==null)cancelAnimationFrame(P),P=null;if(L!==null)q(L),L=null;if(z.classList.remove(`${Q}-scrollbar--dragging`),X&&!_)h();document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o)},Q0=()=>{if(U)I()},l=()=>{if(!M){if(_=!1,X)h()}},u=()=>{_=!0,C(),I()},n=()=>{if(_=!1,!M&&X)h()},K0=()=>{if(C(),P!==null)cancelAnimationFrame(P),P=null;if(z.removeEventListener("click",c),z.removeEventListener("mouseenter",u),z.removeEventListener("mouseleave",n),m.removeEventListener("mousedown",t),j.removeEventListener("mouseenter",Q0),j.removeEventListener("mouseleave",l),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o),B){if(B.removeEventListener("mouseenter",u),B.removeEventListener("mouseleave",n),B.parentNode)B.parentNode.removeChild(B)}if(z.parentNode)z.parentNode.removeChild(z)};if(R(),z.addEventListener("click",c),z.addEventListener("mouseenter",u),z.addEventListener("mouseleave",n),m.addEventListener("mousedown",t),j.addEventListener("mouseenter",Q0),j.addEventListener("mouseleave",l),B)B.addEventListener("mouseenter",u),B.addEventListener("mouseleave",n);return{show:I,hide:p,updateBounds:H,updatePosition:w,isVisible:()=>G,destroy:K0}};var Kj=(j)=>{let q=null;return{name:"withScrollbar",priority:30,setup(J){let{dom:Q,config:K}=J,{classPrefix:X,horizontal:Z}=K;if(q=w0(Q.viewport,(Y)=>J.scrollController.scrollTo(Y),j??{},X,Z),!Q.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))Q.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=J.getCachedCompression();q.updateBounds(N.virtualSize,J.state.viewportState.containerSize);let W=q;J.afterScroll.push((Y,U)=>{W.updatePosition(Y),W.show()}),J.resizeHandlers.push((Y,U)=>{if(W){let A=J.getCachedCompression();W.updateBounds(A.virtualSize,J.state.viewportState.containerSize)}}),J.contentSizeHandlers.push(()=>{if(W){let Y=J.getCachedCompression();W.updateBounds(Y.virtualSize,J.state.viewportState.containerSize)}}),J.destroyHandlers.push(()=>{if(W)W.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var Zj=(j=0)=>{let q=[,,,,,,,,];for(let J=0;J<8;J++)q[J]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},j2=(j,q)=>{let J=performance.now(),Q=J-j.lastTime;if(Q===0)return j;if(Q>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=q,X.time=J,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=q,j.lastTime=J,j}let K=j.samples[j.sampleIndex];if(K.position=q,K.time=J,j.sampleIndex=(j.sampleIndex+1)%8,j.sampleCount=Math.min(j.sampleCount+1,8),j.sampleCount>=2){let X=(j.sampleIndex-j.sampleCount+8)%8,Z=j.samples[X],N=q-Z.position,W=J-Z.time;j.velocity=W>0?N/W:0}return j.lastPosition=q,j.lastTime=J,j},QJ=(j)=>j.sampleCount>=3,Bj=(j,q={})=>{let{wheel:J=!0,sensitivity:Q=1,smoothing:K=!1,idleTimeout:X=150,onScroll:Z,onIdle:N,scrollElement:W,horizontal:Y=!1}=q,U=!!W,A=0,V=0,O=U?Y?window.innerWidth:window.innerHeight:Y?j.clientWidth:j.clientHeight,D=q.compressed??!1,M=q.compression,_=Zj(),v=!1,k=null,b=J2(()=>{let l=Y?j.scrollLeft:j.scrollTop,u=l>=A?"down":"up";if(_=j2(_,l),A=l,Z)Z({scrollTop:A,direction:u,velocity:_.velocity});$()}),P=J2(()=>{let l=j.getBoundingClientRect(),u=Y?Math.max(0,-l.left):Math.max(0,-l.top),n=u>=A?"down":"up";if(_=j2(_,u),A=u,!v)v=!0;if(Z)Z({scrollTop:A,direction:n,velocity:_.velocity});$()}),L=(l)=>{l.preventDefault()},y=(l)=>{if(l.deltaX)return;l.preventDefault(),j.scrollLeft+=l.deltaY},E=(l)=>{if(!D)return;l.preventDefault();let u=(Y?l.deltaX||l.deltaY:l.deltaY)*Q,n=A+u;if(K)n=A+u*0.3;if(n=Math.max(0,Math.min(n,V)),n!==A){let i=n>=A?"down":"up";if(_=j2(_,n),A=n,!v)v=!0;if(Z)Z({scrollTop:A,direction:i,velocity:_.velocity});$()}},$=()=>{if(k)clearTimeout(k);k=setTimeout(()=>{if(v=!1,_=Zj(A),N)N()},X)},r=(l)=>{if(D)return;if(D=!0,M=l,V=l.virtualSize-O,U)return;if(b.cancel(),j.removeEventListener("scroll",b),!J)j.removeEventListener("wheel",L);else if(Y)j.removeEventListener("wheel",y);if(Y)j.style.overflowX="hidden";else j.style.overflow="hidden";if(J)j.addEventListener("wheel",E,{passive:!1});let u=Y?j.scrollLeft:j.scrollTop;if(u>0){let n=Y?M?.actualSize??j.scrollWidth:M?.actualSize??j.scrollHeight;A=u/n*V}if(Y)j.scrollLeft=0;else j.scrollTop=0},z=()=>{if(!D)return;if(D=!1,U){M=void 0;return}if(j.removeEventListener("wheel",E),Y)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",b,{passive:!0}),!J)j.addEventListener("wheel",L,{passive:!1});else if(Y)j.addEventListener("wheel",y,{passive:!1});if(M&&A>0){let u=A/V*(M.actualSize-O);if(Y)j.scrollLeft=u;else j.scrollTop=u}M=void 0},m=()=>{if(U||D)return A;return Y?j.scrollLeft:j.scrollTop},B=(l,u=!1)=>{let n=Math.max(0,Math.min(l,V||1/0));if(U){let K0=j.getBoundingClientRect();if(Y){let i=K0.left+window.scrollX;window.scrollTo({left:i+n,behavior:u?"smooth":"auto"})}else{let i=K0.top+window.scrollY;window.scrollTo({top:i+n,behavior:u?"smooth":"auto"})}}else if(D){if(n===A)return;let i=n>=A?"down":"up";if(_=j2(_,n),A=n,!v)v=!0;if(Z)Z({scrollTop:A,direction:i,velocity:_.velocity});$()}else if(Y)j.scrollTo({left:n,behavior:u?"smooth":"auto"});else j.scrollTo({top:n,behavior:u?"smooth":"auto"})},R=(l)=>{B(m()+l)},C=()=>{return m()<=0},h=(l=0)=>{let u=m(),n=U||D?V:Y?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return u>=n-l},I=()=>{let l=m(),u=U||D?V:Y?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(u<=0)return 0;return Math.min(1,Math.max(0,l/u))},p=(l)=>{if(l.compression)M=l.compression,V=M.virtualSize-O},H=()=>D,w=()=>Math.abs(_.velocity),c=()=>QJ(_),t=()=>v,s=()=>U,o=(l)=>{if(O=l,M)V=M.virtualSize-O},Q0=()=>{if(k)clearTimeout(k);if(U)P.cancel(),window.removeEventListener("scroll",P);else b.cancel(),j.removeEventListener("scroll",b),j.removeEventListener("wheel",E),j.removeEventListener("wheel",L),j.removeEventListener("wheel",y)};if(U){if(D&&M)V=M.virtualSize-O;window.addEventListener("scroll",P,{passive:!0})}else if(D&&M){if(V=M.virtualSize-O,Y)j.style.overflowX="hidden";else j.style.overflow="hidden";if(J)j.addEventListener("wheel",E,{passive:!1})}else{if(Y)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",b,{passive:!0}),!J)j.addEventListener("wheel",L,{passive:!1});else if(Y)j.addEventListener("wheel",y,{passive:!1})}return{getScrollTop:m,scrollTo:B,scrollBy:R,isAtTop:C,isAtBottom:h,getScrollPercentage:I,getVelocity:w,isTracking:c,isScrolling:t,updateConfig:p,enableCompression:r,disableCompression:z,isCompressed:H,isWindowMode:s,updateContainerHeight:o,destroy:Q0}},J2=(j)=>{let q=null,J=null,Q=(...K)=>{if(J=K,q===null)q=requestAnimationFrame(()=>{if(q=null,J)j(...J)})};return Q.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},Q};var qJ=0.65,XJ=0.5,YJ=0.95,KJ=0.1,ZJ=5,BJ=100,Uj=()=>{let j=null,q=0,J=!1,Q=0,K=null,X=0,Z=0,N=null,W=[];return{name:"withScale",priority:20,setup(Y){let{dom:U,config:A}=Y,{classPrefix:V,horizontal:O}=A,D=()=>{let k=Y.getVirtualTotal(),T=A0(k,Y.sizeCache);if(T.isCompressed&&!J){J=!0,Y.scrollController.enableCompression(T),Y.updateContentSize(T.virtualSize),Y.setScrollFns(()=>q,(z)=>{if(q=z,Q=z,K!==null)cancelAnimationFrame(K),K=null});let b=()=>{let z=Q-q;if(Math.abs(z)<XJ)q=Q,K=null;else{q+=z*qJ;let B=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,B)),K=requestAnimationFrame(b)}Y.scrollController.scrollTo(q)},G=U.viewport,P=(z)=>{z.preventDefault();let B=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(Q=Math.max(0,Math.min(Q+z.deltaY,B)),K===null)K=requestAnimationFrame(b)};G.addEventListener("wheel",P,{passive:!1});let L=()=>{if(N!==null)cancelAnimationFrame(N),N=null},y=(z)=>{if(L(),K!==null)cancelAnimationFrame(K),K=null;let m=z.touches[0];if(!m)return;let B=O?m.clientX:m.clientY;X=B,Z=q,W=[{time:performance.now(),y:B}]},E=(z)=>{z.preventDefault();let m=z.touches[0];if(!m)return;let B=O?m.clientX:m.clientY,R=performance.now();if(W.push({time:R,y:B}),W.length>ZJ)W.shift();let C=X-B,I=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,p=Math.max(0,Math.min(Z+C,I));q=p,Q=p,Y.scrollController.scrollTo(p)},$=(z)=>{let m=performance.now(),B=W.filter((I)=>m-I.time<BJ),R=0;if(B.length>=2){let I=B[0],p=B[B.length-1],H=p.time-I.time;if(H>0)R=(I.y-p.y)/H}if(W=[],Math.abs(R)<KJ)return;let C=R*16,h=()=>{if(C*=YJ,Math.abs(C)<0.5){N=null;return}let p=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,H=q+C;if(H=Math.max(0,Math.min(H,p)),H<=0&&C<0||H>=p&&C>0){q=H,Q=H,Y.scrollController.scrollTo(H),N=null;return}q=H,Q=H,Y.scrollController.scrollTo(H),N=requestAnimationFrame(h)};N=requestAnimationFrame(h)};if(G.addEventListener("touchstart",y,{passive:!0}),G.addEventListener("touchmove",E,{passive:!1}),G.addEventListener("touchend",$,{passive:!0}),G.addEventListener("touchcancel",$,{passive:!0}),Y.destroyHandlers.push(()=>{if(G.removeEventListener("wheel",P),G.removeEventListener("touchstart",y),G.removeEventListener("touchmove",E),G.removeEventListener("touchend",$),G.removeEventListener("touchcancel",$),L(),K!==null)cancelAnimationFrame(K),K=null}),!U.viewport.querySelector(`.${V}-scrollbar-track`)){if(j=w0(U.viewport,(m)=>Y.scrollController.scrollTo(m),{},V,O),!U.viewport.classList.contains(`${V}-viewport--custom-scrollbar`))U.viewport.classList.add(`${V}-viewport--custom-scrollbar`);j.updateBounds(T.virtualSize,Y.state.viewportState.containerSize);let z=j;Y.afterScroll.push((m,B)=>{if(z)z.updatePosition(m),z.show()}),Y.resizeHandlers.push((m,B)=>{if(z){let R=Y.getCachedCompression();z.updateBounds(R.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!T.isCompressed&&J)J=!1,Y.scrollController.disableCompression(),Y.updateContentSize(T.actualSize);else if(T.isCompressed)Y.scrollController.updateConfig({compression:T}),Y.updateContentSize(T.virtualSize);if(j)j.updateBounds(T.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:T,totalItems:k}};Y.updateCompressionMode=D;let M=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return M()},Y.setVisibleRangeFn((k,T,b,G,P)=>{_=null,v=null;let L=A0(G,b);i0(k,T,b,G,L,P)}),Y.setScrollToPosFn((k,T,b,G,P)=>{let L=A0(G,T);return t0(k,T,b,G,L,P)});let _=null,v=null;Y.setPositionElementFn((k,T)=>{let b=Y.getVirtualTotal(),G=A0(b,Y.sizeCache);if(G.isCompressed){let P=Y.scrollController.getScrollTop();if(_===null||T<v)v=T,_=Math.round(v0(T,P,Y.sizeCache,b,Y.state.viewportState.containerSize,G));let L=_+Y.sizeCache.getOffset(T)-Y.sizeCache.getOffset(v),y=Y.config.horizontal;k.style.transform=y?`translateX(${L}px)`:`translateY(${L}px)`}else{let P=Math.round(Y.sizeCache.getOffset(T)),L=Y.config.horizontal;k.style.transform=L?`translateX(${P}px)`:`translateY(${P}px)`}}),D(),Y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(j)j.destroy(),j=null;if(K!==null)cancelAnimationFrame(K),K=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var Q2=(j={})=>{let{chunkSize:q=100,maxCachedItems:J=5000,evictionBuffer:Q=200,onEvict:K}=j,X=new Map,Z=0,N=0,W=(R)=>{let C=X.get(R);if(!C)C={items:Array(q),count:0,lastAccess:Date.now()},X.set(R,C);else C.lastAccess=Date.now();return C},Y=(R)=>{return Math.floor(R/q)},U=(R)=>{return R%q},A=()=>Z,V=(R)=>{Z=R},O=(R)=>{if(R<0||R>=Z)return;let C=Y(R),h=X.get(C);if(!h)return;return h.items[U(R)]},D=(R)=>{if(R<0||R>=Z)return!1;let C=Y(R),h=X.get(C);if(!h)return!1;return h.items[U(R)]!==void 0},M=(R,C)=>{let h=Y(R),I=W(h),p=U(R),H=I.items[p]===void 0;if(I.items[p]=C,H)I.count++,N++;if(R>=Z)Z=R+1},_=(R,C)=>{for(let h=0;h<C.length;h++){let I=C[h];if(I!==void 0)M(R+h,I)}},v=(R)=>{if(R<0||R>=Z)return!1;let C=Y(R),h=X.get(C);if(!h)return!1;let I=U(R);if(h.items[I]===void 0)return!1;if(h.items[I]=void 0,h.count--,N--,h.count===0)X.delete(C);return!0},k=(R,C)=>{let h=[];for(let I=R;I<=C&&I<Z;I++)h.push(O(I));return h},T=(R,C)=>{for(let h=R;h<=C&&h<Z;h++)if(!D(h))return!1;return!0},b=()=>{let R=[],C=null,h=Array.from(X.keys()).sort((I,p)=>I-p);for(let I of h){let p=X.get(I);if(!p)continue;let H=I*q;for(let w=0;w<q;w++){let c=H+w;if(c>=Z)break;if(p.items[w]!==void 0)if(C===null)C={start:c,end:c};else if(c===C.end+1)C.end=c;else R.push(C),C={start:c,end:c};else if(C!==null)R.push(C),C=null}}if(C!==null)R.push(C);return R},G=(R,C)=>{let h=[],I=null;for(let p=R;p<=C&&p<Z;p++)if(!D(p))if(I===null)I={start:p,end:p};else I.end=p;else if(I!==null)h.push(I),I=null;if(I!==null)h.push(I);return h},P=(R)=>{return X.has(R)},L=(R)=>{let C=X.get(R);if(C)C.lastAccess=Date.now()},y=(R,C)=>{if(R>C||X.size===0)return;let h=Date.now(),I=Y(Math.max(0,R)),p=Y(Math.min(Z-1,C));for(let H=I;H<=p;H++){let w=X.get(H);if(w)w.lastAccess=h}},E=(R,C)=>{if(N<=J)return 0;let h=Math.max(0,R-Q),I=Math.min(Z-1,C+Q),p=Y(h),H=Y(I),w=0,c=[];for(let[t,s]of X)if(t<p||t>H)w+=s.count,c.push(t),N-=s.count,X.delete(t);if(w>0&&K)K(w,c);return w},$=()=>{if(N<=J)return 0;let R=Array.from(X.entries()).sort(([,I],[,p])=>I.lastAccess-p.lastAccess),C=0,h=[];for(let[I,p]of R){if(N<=J)break;C+=p.count,N-=p.count,h.push(I),X.delete(I)}if(C>0&&K)K(C,h);return C},r=()=>{return{totalItems:Z,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:J,memoryEfficiency:Z>0?1-N/Z:1}},z=()=>N,m=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:J,getTotal:A,setTotal:V,get:O,has:D,set:M,setRange:_,delete:v,getRange:k,isRangeLoaded:T,getLoadedRanges:b,findUnloadedRanges:G,getChunkIndex:Y,isChunkLoaded:P,touchChunk:L,touchChunksForRange:y,evictDistant:E,evictToLimit:$,getStats:r,getCachedCount:z,clear:m,reset:()=>{m(),Z=0}}},q2=(j)=>{if(j.length===0)return[];let q=[...j].sort((Q,K)=>Q.start-K.start),J=[{...q[0]}];for(let Q=1;Q<q.length;Q++){let K=q[Q],X=J[J.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else J.push({...K})}return J},g0=(j,q,J)=>{let Q=Math.floor(j.start/J)*J,K=Math.ceil((j.end+1)/J)*J-1,X={start:Q,end:K};if(q.length===0)return[X];let Z=[],N=q2(q),W=X.start;for(let Y of N){if(Y.end<W)continue;if(Y.start>X.end)break;if(Y.start>W)Z.push({start:W,end:Math.min(Y.start-1,X.end)});if(W=Y.end+1,W>X.end)break}if(W<=X.end)Z.push({start:W,end:X.end});return Z};var X2=(j={})=>{let{maskCharacter:q=t2,maxSampleSize:J=e2}=j,Q=[],K=!1,X=0,Z=(A)=>{if(K||A.length===0)return;let V=Math.min(A.length,J);for(let O=0;O<V;O++){let D=A[O];if(!D||typeof D!=="object")continue;let M={};for(let[_,v]of Object.entries(D)){if(_.startsWith("_")||_==="id")continue;M[_]=String(v??"").length}if(Object.keys(M).length>0)Q.push(M)}K=!0},N=()=>K,W=(A)=>{let V={id:`${jj}${X++}`,[A2]:!0,_index:A};if(Q.length===0)return V.label=q.repeat(12),V;let O=Q[A%Q.length];for(let[D,M]of Object.entries(O))V[D]=q.repeat(Math.max(1,M));return V};return{analyzeStructure:Z,hasAnalyzedStructure:N,generate:W,generateRange:(A,V)=>{let O=[];for(let D=A;D<=V;D++)O.push(W(D));return O},clear:()=>{Q=[],K=!1,X=0}}},k0=(j)=>{if(!j||typeof j!=="object")return!1;return j[A2]===!0},E2=(j)=>{return j.filter((q)=>!k0(q))};var NJ=50,Y2=(j={})=>{let{adapter:q,initialItems:J,initialTotal:Q,storage:K,placeholder:X,pageSize:Z=NJ,onStateChange:N,onItemsLoaded:W,onItemsEvicted:Y}=j,U=Q2({...K,onEvict:(S,d)=>{Y?.(S),G()}}),A=null,V=()=>{if(!A)A=X2(X);return A},O=new Map,D=!1,M,_=!0,v,k=[],T=0,b=new Map,G=()=>{N?.(B())},P=()=>{O.clear();let S=U.getLoadedRanges();for(let d of S)for(let e=d.start;e<=d.end;e++){let a=U.get(e);if(a&&!k0(a))O.set(a.id,e)}},L=(S,d)=>{if(!k0(d))O.set(d.id,S)},y=(S)=>{O.delete(S)},E=(S,d)=>{return`${S}-${d}`},$=()=>U.getTotal(),r=()=>U.getCachedCount(),z=()=>D,m=()=>_,B=()=>({total:U.getTotal(),cached:U.getCachedCount(),isLoading:D,pendingRanges:k,error:M,hasMore:_,cursor:v}),R=()=>U,C=()=>V(),h=(S)=>{let d=U.get(S);if(d!==void 0)return d;if(S>=0&&S<U.getTotal())return V().generate(S);return},I=(S)=>{let d=O.get(S);if(d===void 0)return;return U.get(d)},p=(S)=>{return O.get(S)??-1},H=(S)=>{let d=U.get(S);return d!==void 0&&!k0(d)},w=(S,d)=>{let e=[],a=U.getTotal(),Z0=0,W0=0;U.touchChunksForRange(S,Math.min(d,a-1));for(let E0=S;E0<=d&&E0<a;E0++){let M0=U.get(E0);if(M0!==void 0)e.push(M0),Z0++;else e.push(V().generate(E0)),W0++}return e},c=(S)=>{U.setTotal(S),_=U.getCachedCount()<S,G()},t=(S,d=0,e)=>{if(A&&!A.hasAnalyzedStructure()&&S.length>0)A.analyzeStructure(S);for(let a=0;a<S.length;a++){let Z0=S[a];if(Z0!==void 0){let W0=d+a;U.set(W0,Z0),L(W0,Z0)}}if(e!==void 0)U.setTotal(e);else if(d+S.length>U.getTotal())U.setTotal(d+S.length);if(U.getCachedCount()>=U.getTotal()&&U.getTotal()>0)_=!1;W?.(S,d,U.getTotal()),G()},s=(S,d)=>{let e=O.get(S);if(e===void 0)return!1;let a=U.get(e);if(!a)return!1;let Z0={...a,...d};if(U.set(e,Z0),d.id!==void 0&&d.id!==S)y(S),L(e,Z0);return G(),!0},o=(S)=>{let d=O.get(S);if(d===void 0)return!1;U.delete(d),y(S);let e=U.getTotal();if(e>0)U.setTotal(e-1);return G(),!0},Q0=async(S,d)=>{if(!q)return;let e=E(S,d);if(b.has(e))return;let a=U.getLoadedRanges(),Z0=g0({start:S,end:d},a,U.chunkSize);if(Z0.length===0)return;let W0=U.chunkSize,E0=[];for(let G0 of Z0){let H0=Math.floor(G0.start/W0),O0=Math.floor(G0.end/W0);for(let Y0=H0;Y0<=O0;Y0++){let F0=Y0*W0,D0=F0+W0-1,L0=E(F0,D0);if(!E0.some((P0)=>P0.start===F0)&&!b.has(L0))E0.push({start:F0,end:D0})}}let M0=[];for(let G0 of Z0){let H0=Math.floor(G0.start/W0),O0=Math.floor(G0.end/W0);for(let Y0=H0;Y0<=O0;Y0++){let F0=Y0*W0,D0=F0+W0-1,L0=E(F0,D0);if(b.has(L0)){let P0=b.get(L0);if(!M0.includes(P0))M0.push(P0)}}}for(let G0 of E0){let H0=E(G0.start,G0.end),O0=(async()=>{k.push(G0),D=!0,M=void 0,G();try{let Y0=G0.end-G0.start+1,F0={offset:G0.start,limit:Y0,cursor:void 0},D0=await q.read(F0);if(t(D0.items,G0.start,D0.total),D0.cursor)v=D0.cursor;let L0=G0.start+D0.items.length;if(L0>=T){if(T=L0,D0.hasMore!==void 0)_=D0.hasMore;else if(D0.total!==void 0)_=L0<D0.total}}catch(Y0){M=Y0 instanceof Error?Y0:Error(String(Y0))}finally{b.delete(H0),k=k.filter((Y0)=>Y0.start!==G0.start||Y0.end!==G0.end),D=b.size>0,G()}})();b.set(H0,O0),M0.push(O0)}await Promise.all(M0)},l=async(S,d)=>{if(U.isRangeLoaded(S,d))return;await Q0(S,d)},u=async()=>{if(!q)return;await Q0(0,Z-1)},n=async()=>{if(!q||D||!_)return!1;let S=U.getCachedCount(),d=U.getTotal(),e=S,a=Math.min(e+Z-1,d>0?d-1:e+Z-1);if(e>=d&&d>0)return _=!1,!1;return await Q0(e,a),U.getCachedCount()>S},K0=async()=>{if(U.clear(),U.setTotal(0),O.clear(),A)A.clear();b.clear(),k=[],D=!1,v=void 0,_=!0,T=0,M=void 0,G()},i=(S,d)=>{if(U.evictDistant(S,d)>0)P()},B0=()=>{U.clear(),O.clear(),v=void 0,M=void 0,k=[],D=!1,G()},X0=()=>{if(U.reset(),O.clear(),A)A.clear();v=void 0,_=!0,T=0,M=void 0,k=[],D=!1,G()};if(J&&J.length>0)t(J,0,Q??J.length);else if(Q!==void 0)U.setTotal(Q),G();return{getState:B,getTotal:$,getCached:r,getIsLoading:z,getHasMore:m,getStorage:R,getPlaceholders:C,getItem:h,getItemById:I,getIndexById:p,isItemLoaded:H,getItemsInRange:w,setTotal:c,setItems:t,updateItem:s,removeItem:o,loadRange:Q0,ensureRange:l,loadInitial:u,loadMore:n,reload:K0,evictDistant:i,clear:B0,reset:X0}};var Nj=(j)=>{let{adapter:q,loading:J,storage:Q,total:K,autoLoad:X=!0}=j,Z=J?.cancelThreshold??n2,N=J?.preloadThreshold??o2,W=J?.preloadAhead??i2;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:U}=Y,A=Y.config.reverse,V=Y2({adapter:q,...K!==void 0&&{initialTotal:K},pageSize:Q?.chunkSize??z0,...Q&&{storage:{...Q.chunkSize!==void 0&&{chunkSize:Q.chunkSize},...Q.maxCachedItems!==void 0&&{maxCachedItems:Q.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let T=Y.getVirtualTotal();Y.sizeCache.rebuild(T),Y.updateCompressionMode();let b=Y.getCachedCompression();Y.state.viewportState.totalSize=b.virtualSize,Y.state.viewportState.actualSize=b.actualSize,Y.state.viewportState.isCompressed=b.isCompressed,Y.state.viewportState.compressionRatio=b.ratio,Y.updateContentSize(b.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(T,b,G)=>{if(Y.state.isInitialized)Y.forceRender(),U.emit("load:end",{items:T,total:G})}});Y.replaceDataManager(V);let O=null,D=null,M=0,_=()=>{if(D){let T=D;D=null,Y.dataManager.ensureRange(T.start,T.end).catch((b)=>{U.emit("error",{error:b,context:"ensureRange"})})}};Y.afterScroll.push((T,b)=>{if(Y.state.isDestroyed)return;let G=Y.scrollController.getVelocity(),L=Y.scrollController.isTracking()&&G<=Z;if(D&&M>Z&&G<=Z){let $=D;D=null,Y.dataManager.ensureRange($.start,$.end).catch((r)=>{U.emit("error",{error:r,context:"ensureRange"})})}if(M=G,L&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(A){if(T<F2)U.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch(($)=>{U.emit("error",{error:$,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-T-Y.state.viewportState.containerSize<F2)U.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((r)=>{U.emit("error",{error:r,context:"loadMore"})})}let{renderRange:y}=Y.state.viewportState;if(!O||y.start!==O.start||y.end!==O.end)if(O={start:y.start,end:y.end},L){D=null;let{start:$,end:r}=y,z=Y.getVirtualTotal();if(G>N)if(b==="down")r=Math.min(y.end+W,z-1);else $=Math.max(y.start-W,0);Y.dataManager.ensureRange($,r).catch((m)=>{U.emit("error",{error:m,context:"ensureRange"})})}else D={start:y.start,end:y.end}});let v=200,k=null;if(Y.afterScroll.push((T,b)=>{if(k!==null)clearTimeout(k);k=setTimeout(()=>{k=null,_()},v)}),Y.destroyHandlers.push(()=>{if(k!==null)clearTimeout(k),k=null}),U.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),U.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{O=null,D=null,Y.forceRender();let{renderRange:T}=Y.state.viewportState;if(T.end>0)U.emit("load:start",{offset:T.start,limit:T.end-T.start+1}),await Y.dataManager.ensureRange(T.start,T.end)}),Y.methods.set("reload",async()=>{O=null,D=null,Y.invalidateRendered(),await Y.dataManager.reload(),U.emit("load:start",{offset:0,limit:z0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:T}=Y.state.viewportState;if(T.end>0)await Y.dataManager.ensureRange(T.start,T.end)}),X)U.emit("load:start",{offset:0,limit:z0}),Y.dataManager.loadInitial().catch((T)=>{U.emit("error",{error:T,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var Gj=()=>{let j=null;return{name:"withPage",priority:5,setup(q){let{dom:J,state:Q,config:K,emitter:X}=q;if(J.root.style.overflow="visible",J.root.style.height="auto",K.horizontal)J.viewport.style.overflowX="visible",J.viewport.style.overflowY="visible";else J.viewport.style.overflow="visible";J.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let Y=J.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let U=J.viewport.getBoundingClientRect();if(K.horizontal){let A=U.left+window.scrollX;window.scrollTo(A+Y,window.scrollY)}else{let A=U.top+window.scrollY;window.scrollTo(window.scrollX,A+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),Q.viewportState.containerSize=window.innerHeight;let{innerHeight:Z,innerWidth:N}=window,W=()=>{let{innerWidth:Y,innerHeight:U}=window,A=K.horizontal?Y:U,V=K.horizontal?N:Z;if(Math.abs(A-V)<=1)return;Z=U,N=Y,Q.viewportState.containerSize=U,X.emit("resize",{width:Y,height:U});for(let O=0;O<q.resizeHandlers.length;O++)q.resizeHandlers[O](Y,U);q.renderIfNeeded()};window.addEventListener("resize",W,{passive:!0}),j=()=>{window.removeEventListener("resize",W)},q.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var L2=(j,q)=>{let J=0,Q=j.length-1;while(J<Q){let K=J+Q+1>>>1;if(j[K].headerLayoutIndex<=q)J=K;else Q=K-1}return J},Wj=(j,q)=>{let J=0,Q=j.length-1;while(J<Q){let K=J+Q+1>>>1;if(j[K].firstDataIndex<=q)J=K;else Q=K-1}return J},Dj=(j,q)=>{if(j===0)return[];let J=[],Q=q(0),K=0,X=0;for(let Z=1;Z<j;Z++){let N=q(Z);if(N!==Q){let W=Z-K;J.push({key:Q,groupIndex:J.length,headerLayoutIndex:X,firstDataIndex:K,count:W}),X=X+1+W,Q=N,K=Z}}return J.push({key:Q,groupIndex:J.length,headerLayoutIndex:X,firstDataIndex:K,count:j-K}),J},x0=(j,q)=>{if(j.length===0||q.length===0)return[];let J=j.length+q.length,Q=Array(J),K=0;for(let X of q){Q[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let Z=0;Z<X.count;Z++)Q[K]=j[X.firstDataIndex+Z],K++}return Q},m0=(j,q)=>{let J=typeof q==="number"?(Q)=>q:q;return(Q)=>{let K=j.getEntry(Q);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return J(K.dataIndex)}},K2=(j,q)=>{let J=Dj(j,q.getGroupForIndex),Q=j+J.length,K=q.headerHeight;return{get totalEntries(){return Q},get groupCount(){return J.length},get groups(){return J},getEntry:(V)=>{if(J.length===0)return{type:"item",dataIndex:V,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let O=L2(J,V),D=J[O];if(V===D.headerLayoutIndex)return{type:"header",group:D};let M=V-D.headerLayoutIndex-1;return{type:"item",dataIndex:D.firstDataIndex+M,group:D}},layoutToDataIndex:(V)=>{if(J.length===0)return V;let O=L2(J,V),D=J[O];if(V===D.headerLayoutIndex)return-1;let M=V-D.headerLayoutIndex-1;return D.firstDataIndex+M},dataToLayoutIndex:(V)=>{if(J.length===0)return V;let O=Wj(J,V),D=J[O],M=V-D.firstDataIndex;return D.headerLayoutIndex+1+M},getGroupAtLayoutIndex:(V)=>{if(J.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let O=L2(J,V);return J[O]},getGroupAtDataIndex:(V)=>{if(J.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let O=Wj(J,V);return J[O]},getHeaderHeight:typeof K==="number"?(V)=>K:(V)=>{let O=J[V];if(!O)return 0;return K(O.key,V)},rebuild:(V)=>{J=Dj(V,q.getGroupForIndex),Q=V+J.length}}};var Z2=(j,q,J,Q,K,X=!1)=>{let Z=document.createElement("div");if(Z.className=`${K}-sticky-header`,Z.setAttribute("role","presentation"),Z.setAttribute("aria-hidden","true"),Z.style.position="absolute",Z.style.zIndex="5",Z.style.pointerEvents="none",Z.style.willChange="transform",Z.style.overflow="hidden",X)Z.style.top="0",Z.style.bottom="0",Z.style.left="0";else Z.style.top="0",Z.style.left="0",Z.style.right="0";j.insertBefore(Z,j.firstChild);let N=-1,W=!1,Y=0,U=(_)=>{if(_===N)return;N=_;let v=q.groups;if(_<0||_>=v.length){Z.textContent="";return}let k=v[_],T=Q.headerTemplate(k.key,k.groupIndex),b=q.getHeaderHeight(_);if(X)Z.style.width=`${b}px`;else Z.style.height=`${b}px`;if(typeof T==="string")Z.innerHTML=T;else Z.replaceChildren(T)},A=(_)=>{let v=q.groups;if(v.length===0){O();return}let k=0;for(let L=v.length-1;L>=0;L--)if(J.getOffset(v[L].headerLayoutIndex)<=_){k=L;break}let T=J.getOffset(v[0].headerLayoutIndex);if(_<T){O();return}if(!W)V();U(k);let b=q.getHeaderHeight(k),G=0,P=k+1;if(P<v.length){let y=J.getOffset(v[P].headerLayoutIndex)-_;if(y<b)G=y-b}if(G!==Y)if(Y=G,G===0)Z.style.transform="";else{let L=Math.round(G);Z.style.transform=X?`translateX(${L}px)`:`translateY(${L}px)`}},V=()=>{if(W)return;W=!0,Z.style.display=""},O=()=>{if(!W)return;W=!1,Z.style.display="none",N=-1,Y=0,Z.style.transform=""},D=()=>{let _=N;if(N=-1,_>=0)U(_)},M=()=>{Z.remove(),N=-1,W=!1};return Z.style.display="none",{update:A,refresh:D,show:V,hide:O,destroy:M}};var _j=(j,q,J,Q,K,X)=>{if(Q===0||q===0)return X.start=0,X.end=-1,X;let Z=J.indexAtOffset(j),N=J.indexAtOffset(j+q);if(N<Q-1)N++;return X.start=Math.max(0,Z),X.end=Math.min(Q-1,Math.max(0,N)),X},Vj=(j,q,J,Q)=>{if(J===0)return Q.start=0,Q.end=-1,Q;return Q.start=Math.max(0,j.start-q),Q.end=Math.min(J-1,j.end+q),Q},Mj=(j,q,J,Q,K,X)=>{if(Q===0)return 0;let Z=Math.max(0,Math.min(j,Q-1)),N=q.getOffset(Z),W=q.getSize(Z),Y=q.getTotalSize(),U=Math.max(0,Y-J),A;switch(X){case"center":A=N-J/2+W/2;break;case"end":A=N-J+W;break;case"start":default:A=N;break}return Math.max(0,Math.min(A,U))},Fj=(j,q,J)=>{if(J&&J.isCompressed)return J.virtualSize;return q.getTotalSize()},Aj=(j,q)=>{return q.getTotalSize()},Ej=(j,q)=>{return q.getOffset(j)},Lj=(j,q,J)=>{let Q=Math.max(0,q-J);return Math.max(0,Math.min(j,Q))};var C0=(j,q,J,Q,K="start",X,Z=Mj)=>{return Z(j,q,J,Q,X,K)},Oj=(j,q)=>{return j.start===q.start&&j.end===q.end},bj=(j,q)=>{return j>=q.start&&j<=q.end},yj=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var Tj=(j,q)=>{let J=[],Q=[];for(let K=j.start;K<=j.end;K++)if(K<q.start||K>q.end)Q.push(K);for(let K=q.start;K<=q.end;K++)if(K<j.start||K>j.end)J.push(K);return{add:J,remove:Q}};e0();var Pj=(j)=>{if(!j.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(j.headerHeight==null||j.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!j.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,J=null,Q=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:Z,config:N,rawConfig:W}=X,{classPrefix:Y}=N,A=W.item.height;Q=W.items?[...W.items]:[];let V=Q.length,O={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};q=K2(V,O),K=x0(Q,q.groups);let D=m0(q,A);X.setSizeConfig(D),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let M=W.item.template,{headerTemplate:_}=j,v=(y,E,$)=>{if(R0(y))return _(y.groupKey,y.groupIndex);return M(y,E,$)},k=X.methods.get("_getGridLayout"),T=X.methods.get("_replaceGridRenderer"),b=X.methods.get("_updateGridLayoutForGroups");if(k&&T){if(b)b((r)=>{let z=K[r];return!!(z&&R0(z))});let{createGridRenderer:y}=(B2(),rj(Hj)),E=k(),$=y(Z.items,v,X.sizeCache,E,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);T($)}else X.replaceTemplate(v);if(Z.root.classList.add(`${Y}--grouped`),j.sticky!==!1){J=Z2(Z.root,q,X.sizeCache,{...O,sticky:O.sticky??!1},Y,N.horizontal);let y=J;X.afterScroll.push((E,$)=>{y.update(E)}),J.update(X.scrollController.getScrollTop())}let G=()=>{if(!q)return;q.rebuild(Q.length),K=x0(Q,q.groups);let y=m0(q,A);if(X.setSizeConfig(y),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),J)J.refresh()};X.methods.set("setItems",(y)=>{Q=[...y],G()}),X.methods.set("appendItems",(y)=>{Q=[...Q,...y],G()}),X.methods.set("prependItems",(y)=>{Q=[...y,...Q],G()}),X.methods.set("removeItem",(y)=>{Q=Q.filter((E)=>E.id!==y),G()});let{animateScroll:P,cancelScroll:L}=DJ(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(y,E)=>{let $=q.dataToLayoutIndex(y),{align:r,behavior:z,duration:m}=_J(E),B=X.dataManager.getTotal(),R=C0($,X.sizeCache,X.state.viewportState.containerSize,B,r,X.getCachedCompression());if(z==="smooth")P(X.scrollController.getScrollTop(),R,m);else L(),X.scrollController.scrollTo(R)}),X.methods.set("_getItems",()=>Q),X.methods.set("_getTotal",()=>Q.length),X.destroyHandlers.push(()=>{if(T0!==null)cancelAnimationFrame(T0),T0=null;if(J)J.destroy(),J=null;Z.root.classList.remove(`${Y}--grouped`)})},destroy(){if(J)J.destroy(),J=null}}},O2=300,WJ=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,T0=null,DJ=(j,q)=>{let J=()=>{if(T0!==null)cancelAnimationFrame(T0),T0=null};return{animateScroll:(K,X,Z)=>{if(J(),Math.abs(X-K)<1){j.scrollTo(X);return}let N=performance.now(),W=(Y)=>{let U=Y-N,A=Math.min(U/Z,1),V=K+(X-K)*WJ(A);if(j.scrollTo(V),q(),A<1)T0=requestAnimationFrame(W);else T0=null};T0=requestAnimationFrame(W)},cancelScroll:J}},_J=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:O2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??O2};return{align:"start",behavior:"auto",duration:O2}};var U2=(j)=>{let q=Math.max(1,Math.floor(j.columns)),J=j.gap??0,Q=j.isHeaderFn,K={row:0,col:0},X=(D)=>{if(D<=0)return 0;if(!Q)return Math.ceil(D/q);let M=0,_=0,v=0;for(let k=0;k<D;k++)if(Q(k)){if(v++,_>0)M++,_=0;M++,_=0}else if(_++,_>=q)M++,_=0;if(_>0)M++;return M},Z=(D)=>{return K.row=N(D),K.col=W(D),K},N=(D)=>{if(!Q)return Math.floor(D/q);let M=0,_=0;for(let v=0;v<=D;v++)if(Q(v)){if(_>0)M++,_=0;if(v===D)return M;M++,_=0}else{if(v===D)return M;if(_++,_>=q)M++,_=0}return console.warn(`⚠️ getRow(${D}) fell through - returning ${M}`),M},W=(D)=>{if(!Q)return D%q;if(Q(D))return 0;let M=0;for(let _=0;_<=D;_++)if(Q(_))M=0;else{if(_===D)return M;if(M++,M>=q)M=0}return M},Y=(D,M,_)=>{if(_<=0)return{start:0,end:-1};if(!Q){let G=Math.max(0,D*q),P=Math.min(_-1,(M+1)*q-1);return{start:G,end:P}}let v=-1,k=-1,T=0,b=0;for(let G=0;G<_;G++){if(Q(G)){if(b>0)T++,b=0;if(T>=D&&T<=M){if(v===-1)v=G;k=G}T++,b=0}else{if(T>=D&&T<=M){if(v===-1)v=G;k=G}if(b++,b>=q)T++,b=0}if(T>M&&b===0)break}if(v===-1)return{start:0,end:-1};return{start:v,end:k}},U=(D,M,_)=>{if(M<0||M>=q)return-1;let v=D*q+M;if(v<0||v>=_)return-1;return v},A=(D)=>{let M=(q-1)*J;return Math.max(0,(D-M)/q)};return{get columns(){return q},get gap(){return J},update:(D)=>{if(D.columns!==void 0)q=Math.max(1,Math.floor(D.columns));if(D.gap!==void 0)J=D.gap;if(D.isHeaderFn!==void 0)Q=D.isHeaderFn},getTotalRows:X,getPosition:Z,getRow:N,getCol:W,getItemRange:Y,getItemIndex:U,getColumnWidth:A,getColumnOffset:(D,M)=>{let _=A(M);return D*(_+J)}}};B2();var $j=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,J=null;return{name:"withGrid",priority:10,setup(Q){let{dom:K,emitter:X,config:Z,rawConfig:N}=Q,{classPrefix:W}=Z;if(Z.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=Z.horizontal,U=()=>Y?K.viewport.clientHeight:Q.getContainerWidth(),A=N.items?.some((L)=>L.__groupHeader===!0),V={columns:j.columns,gap:j.gap??0};if(A)V.isHeaderFn=(L)=>{let y=Q.dataManager.getItem(L);return!!(y&&y.__groupHeader===!0)};q=U2(V);let O=q.gap;Q.setVirtualTotalFn(()=>{let L=Q.dataManager.getTotal();return q.getTotalRows(L)});let D=N.item,M=Z.horizontal?D.width:D.height,_={containerWidth:U(),columns:q.columns,gap:q.gap};if(typeof M==="function")Q.setSizeConfig((L)=>{let y=_.containerWidth-2,E=(_.columns-1)*_.gap,$=(y-E)/_.columns,r={containerWidth:_.containerWidth,columns:_.columns,gap:_.gap,columnWidth:$,row:q.getRow(L),column:q.getCol(L),totalRows:q.getTotalRows(Q.dataManager.getTotal()),totalColumns:_.columns};return M(L,r)+_.gap});else if(O>0)Q.setSizeConfig(M+O);Q.rebuildSizeCache(),K.root.classList.add(`${W}--grid`);let v=U(),k=N.item.template,T=()=>{J=d0(K.items,k,Q.sizeCache,q,W,v,()=>Q.dataManager.getTotal(),Z.ariaIdPrefix,Z.horizontal),Q.replaceRenderer(J)};T(),Q.methods.set("_getGridLayout",()=>q),Q.methods.set("_getGridConfig",()=>V),Q.methods.set("_replaceGridRenderer",(L)=>{J=L}),Q.methods.set("_updateGridLayoutForGroups",(L)=>{q.update({isHeaderFn:L});let y=Q.dataManager.getTotal(),E=0;for(let $=0;$<y;$++)if(q.getCol($)===0){let r=Q.sizeCache.getSize($);E+=r}if(Q.sizeCache.getTotalSize=()=>E,Z.horizontal)Q.dom.content.style.width=`${E}px`;else Q.dom.content.style.height=`${E}px`;T()}),Q.methods.set("updateGrid",(L)=>{if(L.columns!==void 0){if(!Number.isInteger(L.columns)||L.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");V.columns=L.columns}if(L.gap!==void 0){if(L.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");V.gap=L.gap}if(q)q.update(V);let y=U();if(_.containerWidth=y,_.columns=V.columns,_.gap=V.gap??0,J)J.updateContainerWidth(y);Q.rebuildSizeCache(),Q.updateContentSize(Q.sizeCache.getTotalSize()),Q.updateCompressionMode();for(let E=0;E<Q.contentSizeHandlers.length;E++)Q.contentSizeHandlers[E]();if(J)J.clear();Q.forceRender()});let b=()=>{if(Q.state.isDestroyed)return;let L=Q.scrollController.getScrollTop(),y=Q.state.viewportState.containerSize,E=Q.getVirtualTotal(),$={start:0,end:0};if(E===0||y===0)$.start=0,$.end=0;else{$.start=Math.max(0,Q.sizeCache.indexAtOffset(L));let p=Q.sizeCache.indexAtOffset(L+y);if(p<E-1)p++;$.end=Math.min(E-1,Math.max(0,p))}let r=Z.overscan??3,z={start:Math.max(0,$.start-r),end:Math.min(E-1,$.end+r)};Q.state.viewportState.scrollPosition=L,Q.state.viewportState.visibleRange=$,Q.state.viewportState.renderRange=z;let m=Q.state.lastRenderRange,B=Q.state.viewportState.isCompressed;if(z.start===m.start&&z.end===m.end){if(B)J.updatePositions(Q.getCompressionContext());return}let R=Q.dataManager.getTotal(),C=q.getItemRange(z.start,z.end,R),h=Q.dataManager.getItemsInRange(C.start,C.end),I=B?Q.getCompressionContext():void 0;J.render(h,C,new Set,-1,I),Q.state.lastRenderRange={...z},X.emit("range:change",{range:z})},G=()=>{if(Q.state.isDestroyed)return;Q.state.lastRenderRange={start:-1,end:-1},b()};Q.setRenderFns(b,G);let P=typeof M==="function";if(Q.resizeHandlers.push((L,y)=>{let E=Y?y:L;if(_.containerWidth=E,J)J.updateContainerWidth(E);if(P){Q.rebuildSizeCache(),Q.updateContentSize(Q.sizeCache.getTotalSize()),Q.updateCompressionMode();for(let $=0;$<Q.contentSizeHandlers.length;$++)Q.contentSizeHandlers[$]();if(J)J.clear();Q.forceRender()}}),Q.methods.set("scrollToIndex",(L,y)=>{let E=Math.floor(L/j.columns),{align:$,behavior:r}=VJ(y),z=Q.dataManager.getState(),m=q.getTotalRows(z.total),B=Math.max(0,Math.min(E,m-1)),R=C0(B,Q.sizeCache,Q.state.viewportState.containerSize,m,$,Q.getCachedCompression());if(r==="smooth")Q.scrollController.scrollTo(R);else Q.scrollController.scrollTo(R)}),!Q.methods.has("_getTotal"))Q.methods.set("_getTotal",()=>Q.dataManager.getTotal());Q.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;K.root.classList.remove(`${W}--grid`)})},destroy(){if(J)J.destroy(),J=null}}},b2=300,VJ=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:b2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??b2};return{align:"start",behavior:"auto",duration:b2}};B2();var N2=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),c0=(j,q,J)=>{if(J==="none")return j;let Q=new Set(j.selected);if(J==="single"){if(Q.clear(),q.length>0)Q.add(q[0])}else for(let K of q)Q.add(K);return{...j,selected:Q}},l0=(j,q)=>{let J=new Set(j.selected);for(let Q of q)J.delete(Q);return{...j,selected:J}},f0=(j,q,J)=>{if(J==="none")return j;if(j.selected.has(q))return l0(j,[q]);else return c0(j,[q],J)},G2=(j,q,J)=>{if(J!=="multiple")return j;return{...j,selected:new Set(q.map((Q)=>Q.id))}},W2=(j)=>({...j,selected:new Set}),y2=(j,q)=>{return j.focusedIndex=q,j},T2=(j,q,J=!0)=>{if(q===0)return j;let Q=j.focusedIndex-1;if(Q<0)Q=J?q-1:0;return j.focusedIndex=Q,j},H2=(j,q,J=!0)=>{if(q===0)return j;let Q=j.focusedIndex+1;if(Q>=q)Q=J?0:q-1;return j.focusedIndex=Q,j},P2=(j,q)=>{if(q===0)return j;return j.focusedIndex=0,j},$2=(j,q)=>{if(q===0)return j;return j.focusedIndex=q-1,j};var kj=(j,q)=>{return j.selected.has(q)},S0=(j)=>{return Array.from(j.selected)},I0=(j,q)=>{let J=[];for(let Q of j.selected){let K=q(Q);if(K)J.push(K)}return J};var Rj=(j)=>{let q=j?.mode??"single",J=j?.initial,Q=N2(J),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:Z,emitter:N,config:W}=X,{classPrefix:Y,ariaIdPrefix:U}=W;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}let A=new Map,V=()=>{A.clear();let b=X.dataManager.getTotal();for(let G=0;G<b;G++){let P=X.dataManager.getItem(G);if(P)A.set(P.id,G)}};V();let{renderIfNeeded:O,forceRender:D}=X.getRenderFns(),M=()=>{X.dom.items.querySelectorAll("[data-index]").forEach((G)=>{let P=G,L=P.dataset.id;if(L!==void 0){let y=/^\d+$/.test(L)?parseInt(L,10):L,E=Q.selected.has(y),r=parseInt(P.dataset.index??"-1",10)===Q.focusedIndex;P.classList.toggle(`${Y}-item--selected`,E),P.classList.toggle(`${Y}-item--focused`,r),P.ariaSelected=E?"true":"false"}})},_=()=>{if(X.state.isDestroyed)return;O(),M()},v=()=>{if(X.state.isDestroyed)return;D(),M()};X.setRenderFns(_,v);let k=()=>{M();let b=(G)=>{let P=A.get(G);if(P===void 0)return;return X.dataManager.getItem(P)};N.emit("selection:change",{selected:S0(Q),items:I0(Q,b)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",Z.root.appendChild(K);let T=K;N.on("selection:change",({selected:b})=>{let G=b.length;if(G===0)T.textContent="";else if(G===1)T.textContent="1 item selected";else T.textContent=`${G} items selected`}),X.clickHandlers.push((b)=>{if(X.state.isDestroyed)return;let P=b.target.closest("[data-index]");if(!P)return;let L=parseInt(P.dataset.index??"-1",10);if(L<0)return;let y=X.dataManager.getItem(L);if(!y)return;N.emit("item:click",{item:y,index:L,event:b}),Q=y2(Q,L),Z.root.setAttribute("aria-activedescendant",`${U}-item-${L}`),Q=f0(Q,y.id,q),k()}),X.keydownHandlers.push((b)=>{if(X.state.isDestroyed)return;let G=X.dataManager.getTotal(),P=Q.focusedIndex,L=!1,y=!1,E=Q;switch(b.key){case"ArrowUp":E=T2(Q,G),L=!0,y=!0;break;case"ArrowDown":E=H2(Q,G),L=!0,y=!0;break;case"Home":E=P2(Q,G),L=!0,y=!0;break;case"End":E=$2(Q,G),L=!0,y=!0;break;case" ":case"Enter":if(Q.focusedIndex>=0){let $=X.dataManager.getItem(Q.focusedIndex);if($)E=f0(Q,$.id,q);L=!0}break}if(L){b.preventDefault(),Q=E;let $=Q.focusedIndex;if($>=0){let r=X.dataManager.getState(),z=C0($,X.sizeCache,X.state.viewportState.containerSize,r.total,"center",X.getCachedCompression());X.scrollController.scrollTo(z),Z.root.setAttribute("aria-activedescendant",`${U}-item-${$}`)}else Z.root.removeAttribute("aria-activedescendant");if(y){let{selected:r}=Q;if(P>=0&&P!==$){let z=X.dataManager.getItem(P);if(z)X.renderer.updateItemClasses(P,r.has(z.id),!1)}if($>=0){let z=X.dataManager.getItem($);if(z)X.renderer.updateItemClasses($,r.has(z.id),!0)}}else{v();let r=(z)=>{let m=A.get(z);if(m===void 0)return;return X.dataManager.getItem(m)};N.emit("selection:change",{selected:S0(Q),items:I0(Q,r)})}}}),X.methods.set("select",(...b)=>{Q=c0(Q,b,q),k()}),X.methods.set("deselect",(...b)=>{Q=l0(Q,b),k()}),X.methods.set("toggleSelect",(b)=>{Q=f0(Q,b,q),k()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let b=X.getAllLoadedItems();Q=G2(Q,b,q),V(),k()}),X.methods.set("clearSelection",()=>{Q=W2(Q);let{renderRange:b,isCompressed:G}=X.state.viewportState,P=X.getItemsForRange(b),L=G?X.getCompressionContext():void 0;X.renderer.render(P,b,Q.selected,Q.focusedIndex,L),N.emit("selection:change",{selected:[],items:[]})}),X.methods.set("getSelected",()=>{return S0(Q)}),X.methods.set("getSelectedItems",()=>{return I0(Q,(G)=>{let P=A.get(G);if(P===void 0)return;return X.dataManager.getItem(P)})}),X.destroyHandlers.push(()=>{if(T&&T.parentNode)T.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var Cj=(j)=>{let q=j?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(J){J.methods.set("getScrollSnapshot",()=>{let K=J.scrollController.getScrollTop(),X=J.getCachedCompression(),Z=J.getVirtualTotal(),N=J.methods.get("getSelected"),W=N&&N().length>0?N():void 0;if(Z===0){let V={index:0,offsetInItem:0,total:0};if(W)V.selectedIds=W;return V}let Y,U;if(X.isCompressed){let O=K/X.virtualSize*Z;Y=Math.max(0,Math.min(Math.floor(O),Z-1)),U=(O-Y)*J.sizeCache.getSize(Y)}else Y=J.sizeCache.indexAtOffset(K),U=K-J.sizeCache.getOffset(Y);U=Math.max(0,U);let A={index:Y,offsetInItem:U,total:Z};if(W)A.selectedIds=W;return A});let Q=(K)=>{let{index:X,offsetInItem:Z,selectedIds:N}=K,W=J.getVirtualTotal();if(W===0)return;if(!Number.isFinite(X)||!Number.isFinite(Z))return;if(J.sizeCache.getTotal()!==W){J.sizeCache.rebuild(W),J.updateCompressionMode();let _=J.getCachedCompression();J.updateContentSize(_.virtualSize)}let U=J.getCachedCompression(),A=Math.max(0,Math.min(X,W-1)),V;if(U.isCompressed){let _=J.sizeCache.getSize(A),v=_>0?Z/_:0;V=(A+v)/W*U.virtualSize}else V=J.sizeCache.getOffset(A)+Z;let O=J.state.viewportState.containerSize,D=Math.max(0,U.virtualSize-O);if(V=Math.max(0,Math.min(V,D)),J.scrollController.scrollTo(V),N&&N.length>0){let _=J.methods.get("select");if(_)_(...N)}let M=J.methods.get("loadVisibleRange");if(M)requestAnimationFrame(()=>{M()});else{let _=J.methods.get("reload");if(_)requestAnimationFrame(()=>{_()})}};if(J.methods.set("restoreScroll",Q),q)queueMicrotask(()=>{Q(q)})}}};export{Cj as withSnapshots,Rj as withSelection,Pj as withSections,Kj as withScrollbar,Uj as withScale,Gj as withPage,$j as withGrid,Nj as withAsync,r2 as vlist,f0 as toggleSelection,_j as simpleVisibleRange,c0 as selectItems,G2 as selectAll,Oj as rangesEqual,J2 as rafThrottle,qj as needsScaling,q2 as mergeRanges,kj as isSelected,R0 as isSectionHeader,k0 as isPlaceholderItem,bj as isInRange,I0 as getSelectedItems,S0 as getSelectedIds,A0 as getScaleState,Yj as getScaleInfo,A0 as getScale,yj as getRangeCount,Xj as getMaxItemsWithoutScaling,E2 as filterPlaceholders,Tj as diffRanges,l0 as deselectItems,Z2 as createStickyHeader,Q2 as createSparseStorage,y0 as createSizeCache,N2 as createSelectionState,m0 as createSectionedSizeFn,K2 as createSectionLayout,w0 as createScrollbar,Bj as createScrollController,X2 as createPlaceholderManager,n0 as createMeasuredSizeCache,d0 as createGridRenderer,U2 as createGridLayout,o0 as createEmitter,Y2 as createAsyncManager,W2 as clearSelection,Lj as clampScrollPosition,Fj as calculateTotalSize,C0 as calculateScrollToIndex,i0 as calculateScaledVisibleRange,t0 as calculateScaledScrollToIndex,Jj as calculateScaledRenderRange,v0 as calculateScaledItemPosition,Vj as calculateRenderRange,g0 as calculateMissingRanges,Ej as calculateItemOffset,Qj as calculateIndexFromScrollPosition,Aj as calculateActualSize,x0 as buildLayoutItems,$0 as MAX_VIRTUAL_HEIGHT};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Rendering, virtualization, and scaling for large datasets
|
|
4
4
|
*/
|
|
5
5
|
export { createSizeCache, countVisibleItems, countItemsFittingFromBottom, getOffsetForVirtualIndex, type SizeCache, } from "./sizes";
|
|
6
|
+
export { createMeasuredSizeCache, type MeasuredSizeCache, } from "./measured";
|
|
6
7
|
export { createRenderer, createDOMStructure, updateContentHeight, updateContentWidth, resolveContainer, getContainerDimensions, type Renderer, type DOMStructure, type CompressionContext, type CompressedPositionFn, type CompressionStateFn, } from "./renderer";
|
|
7
8
|
export { createViewportState, updateViewportState, updateViewportSize, updateViewportItems, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, getScrollDirection, rangesEqual, isInRange, getRangeCount, rangeToIndices, diffRanges, getSimpleCompressionState, simpleVisibleRange, simpleScrollToIndex, NO_COMPRESSION, type CompressionState, type VisibleRangeFn, type ScrollToIndexFn, } from "./viewport";
|
|
8
9
|
export { MAX_VIRTUAL_HEIGHT, getCompressionState, getCompressionState as getCompression, needsCompression, getMaxItemsWithoutCompression, getCompressionInfo, calculateCompressedVisibleRange, calculateCompressedRenderRange, calculateCompressedItemPosition, calculateCompressedScrollToIndex, calculateIndexFromScrollPosition, } from "./scale";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist - Measured Size Cache
|
|
3
|
+
* Auto-measurement support for items with unknown sizes (Mode B)
|
|
4
|
+
*
|
|
5
|
+
* Wraps the existing variable SizeCache with measurement tracking.
|
|
6
|
+
* Once an item is measured, it behaves identically to Mode A (known size).
|
|
7
|
+
* Unmeasured items use the estimated size as a fallback.
|
|
8
|
+
*
|
|
9
|
+
* Fully axis-neutral: works identically for vertical (estimatedHeight)
|
|
10
|
+
* and horizontal (estimatedWidth) orientations. This cache stores plain
|
|
11
|
+
* numbers representing the main-axis dimension — it never knows whether
|
|
12
|
+
* those numbers are heights or widths. The axis-specific translation
|
|
13
|
+
* happens in builder/core.ts at the DOM boundary.
|
|
14
|
+
*
|
|
15
|
+
* Implements the SizeCache interface so all downstream code
|
|
16
|
+
* (viewport, scale, features) works unchanged.
|
|
17
|
+
*/
|
|
18
|
+
import type { SizeCache } from "./sizes";
|
|
19
|
+
/** Extended SizeCache with measurement tracking */
|
|
20
|
+
export interface MeasuredSizeCache extends SizeCache {
|
|
21
|
+
/** Record actual measured size for an item */
|
|
22
|
+
setMeasuredSize(index: number, size: number): void;
|
|
23
|
+
/** Check if an item has been measured */
|
|
24
|
+
isMeasured(index: number): boolean;
|
|
25
|
+
/** Get the estimated size (used for unmeasured items) */
|
|
26
|
+
getEstimatedSize(): number;
|
|
27
|
+
/** Number of items that have been measured */
|
|
28
|
+
measuredCount(): number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a measured size cache for auto-measurement (Mode B)
|
|
32
|
+
*
|
|
33
|
+
* Works for both orientations:
|
|
34
|
+
* - Vertical: estimatedSize = estimatedHeight, measures block size
|
|
35
|
+
* - Horizontal: estimatedSize = estimatedWidth, measures inline size
|
|
36
|
+
*
|
|
37
|
+
* The cache itself is axis-neutral — it only stores numbers. The caller
|
|
38
|
+
* (builder/core.ts) is responsible for reading the correct axis from
|
|
39
|
+
* the config and from ResizeObserver entries (blockSize vs inlineSize).
|
|
40
|
+
*
|
|
41
|
+
* Internally maintains a Map of measured sizes keyed by item index.
|
|
42
|
+
* Unmeasured items fall back to the estimated size. The underlying
|
|
43
|
+
* prefix-sum array is rebuilt when measurements change.
|
|
44
|
+
*
|
|
45
|
+
* The size function fed into the variable SizeCache becomes:
|
|
46
|
+
* (index) => measuredSizes.has(index) ? measuredSizes.get(index) : estimatedSize
|
|
47
|
+
*
|
|
48
|
+
* This means all existing viewport, compression, and range calculations
|
|
49
|
+
* work unchanged — they only see a SizeCache with variable sizes.
|
|
50
|
+
*/
|
|
51
|
+
export declare const createMeasuredSizeCache: (estimatedSize: number, initialTotal: number) => MeasuredSizeCache;
|
|
52
|
+
//# sourceMappingURL=measured.d.ts.map
|
package/dist/types.d.ts
CHANGED
|
@@ -99,6 +99,35 @@ export interface ItemConfig<T extends VListItem = VListItem> {
|
|
|
99
99
|
* Ignored when `orientation` is `'vertical'` (default).
|
|
100
100
|
*/
|
|
101
101
|
width?: number | ((index: number) => number);
|
|
102
|
+
/**
|
|
103
|
+
* Estimated item height for auto-measurement (Mode B — vertical scrolling)
|
|
104
|
+
*
|
|
105
|
+
* When set, vlist renders items using this estimated size, measures their
|
|
106
|
+
* actual DOM height after render via ResizeObserver, caches the result,
|
|
107
|
+
* and adjusts scroll position to prevent visual jumps.
|
|
108
|
+
*
|
|
109
|
+
* Use this for content with unknown heights: variable-length text,
|
|
110
|
+
* images with unknown aspect ratios, mixed-media feeds, etc.
|
|
111
|
+
*
|
|
112
|
+
* Takes precedence only when `height` is not set — if both are provided,
|
|
113
|
+
* `height` wins (Mode A) and `estimatedHeight` is ignored.
|
|
114
|
+
*
|
|
115
|
+
* Ignored when `orientation` is `'horizontal'`.
|
|
116
|
+
*/
|
|
117
|
+
estimatedHeight?: number;
|
|
118
|
+
/**
|
|
119
|
+
* Estimated item width for auto-measurement (Mode B — horizontal scrolling)
|
|
120
|
+
*
|
|
121
|
+
* Horizontal equivalent of `estimatedHeight`. When set, vlist renders items
|
|
122
|
+
* using this estimated width, measures actual DOM width after render,
|
|
123
|
+
* caches the result, and adjusts scroll position to prevent visual jumps.
|
|
124
|
+
*
|
|
125
|
+
* Takes precedence only when `width` is not set — if both are provided,
|
|
126
|
+
* `width` wins (Mode A) and `estimatedWidth` is ignored.
|
|
127
|
+
*
|
|
128
|
+
* Only used when `orientation` is `'horizontal'`.
|
|
129
|
+
*/
|
|
130
|
+
estimatedWidth?: number;
|
|
102
131
|
/** Template function to render each item */
|
|
103
132
|
template: ItemTemplate<T>;
|
|
104
133
|
}
|