@floor/vlist 0.9.4 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 = "\u2588";
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 */
@@ -21,6 +21,17 @@ import type { VListFeature } from "../../builder/types";
21
21
  export interface DataFeatureConfig<T extends VListItem = VListItem> {
22
22
  /** Async data source (required) */
23
23
  adapter: VListAdapter<T>;
24
+ /** Total number of items (optional - if not provided, adapter must return it) */
25
+ total?: number;
26
+ /** Whether to automatically load initial data. Default: true */
27
+ autoLoad?: boolean;
28
+ /** Storage configuration */
29
+ storage?: {
30
+ /** Number of items per chunk. Default: 100 */
31
+ chunkSize?: number;
32
+ /** Maximum cached items before eviction. Default: 10000 */
33
+ maxCachedItems?: number;
34
+ };
24
35
  /** Loading behavior configuration */
25
36
  loading?: {
26
37
  /** Velocity threshold above which data loading is skipped (px/ms). Default: 25 */
@@ -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, replacePlaceholders, type PlaceholderManager, type PlaceholderConfig, } from "./placeholder";
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
- * - Analyzes loaded data to generate realistic placeholders
7
- * - Supports masked text with configurable character
8
- * - Random length variance for natural appearance
9
- * - Efficient placeholder detection
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
- /** Add random variance to text lengths (default: true) */
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 (standalone function)
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
@@ -16,8 +16,33 @@
16
16
  *
17
17
  * Added methods: getScrollSnapshot, restoreScroll
18
18
  */
19
- import type { VListItem } from "../../types";
19
+ import type { VListItem, ScrollSnapshot } from "../../types";
20
20
  import type { VListFeature } from "../../builder/types";
21
+ /** Configuration for the snapshots feature. */
22
+ export interface SnapshotConfig {
23
+ /**
24
+ * Snapshot to restore automatically after `build()` completes.
25
+ *
26
+ * When provided, `restoreScroll(restore)` is scheduled via
27
+ * `queueMicrotask` — it runs right after `.build()` returns but
28
+ * before the browser paints, so the user never sees position 0.
29
+ *
30
+ * ```ts
31
+ * const saved = sessionStorage.getItem('scroll');
32
+ * const snapshot = saved ? JSON.parse(saved) : undefined;
33
+ *
34
+ * const list = vlist({ ... })
35
+ * .use(withAsync({
36
+ * adapter,
37
+ * autoLoad: !snapshot, // skip autoLoad when restoring
38
+ * total: snapshot?.total, // from snapshot — no hardcoded constant needed
39
+ * }))
40
+ * .use(withSnapshots({ restore: snapshot })) // auto-restores after build()
41
+ * .build();
42
+ * ```
43
+ */
44
+ restore?: ScrollSnapshot;
45
+ }
21
46
  /**
22
47
  * Create a snapshots feature for the builder.
23
48
  *
@@ -40,5 +65,5 @@ import type { VListFeature } from "../../builder/types";
40
65
  * if (saved) list.restoreScroll(saved)
41
66
  * ```
42
67
  */
43
- export declare const withSnapshots: <T extends VListItem = VListItem>() => VListFeature<T>;
68
+ export declare const withSnapshots: <T extends VListItem = VListItem>(config?: SnapshotConfig) => VListFeature<T>;
44
69
  //# sourceMappingURL=feature.d.ts.map
@@ -5,4 +5,5 @@
5
5
  * Usage: import { withSnapshots } from 'vlist/snapshots'
6
6
  */
7
7
  export { withSnapshots } from "./feature";
8
+ export type { SnapshotConfig } from "./feature";
8
9
  //# sourceMappingURL=index.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),Q;if(X)return X;if(X=N2({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")kj(j).map((J)=>!zj.call(X,J)&&N2(X,J,{get:()=>j[J],enumerable:!(Q=Cj(j,J))||Q.enumerable}));return T2.set(j,X),X};var wj=(j,X)=>{for(var Q in X)N2(j,Q,{get:X[Q],enumerable:!0,configurable:!0,set:(J)=>X[Q]=()=>J})};var P2=(j,X)=>()=>(j&&(X=j(j=0)),X);var Sj=(j,X)=>{let Q=X;return{getOffset:(J)=>J*j,getSize:(J)=>j,indexAtOffset:(J)=>{if(Q===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),Q-1))},getTotalSize:()=>Q*j,getTotal:()=>Q,rebuild:(J)=>{Q=J},isVariable:()=>!1}},fj=(j,X)=>{let Q=X,J=new Float64Array(0),K=(Y)=>{Q=Y,J=new Float64Array(Y+1),J[0]=0;for(let U=0;U<Y;U++)J[U+1]=J[U]+j(U)};K(X);let q=(Y)=>{if(Q===0)return 0;if(Y<=0)return 0;if(Y>=J[Q])return Q-1;let U=0,A=Q-1;while(U<A){let B=U+A+1>>>1;if(J[B]<=Y)U=B;else A=B-1}return U};return{getOffset:(Y)=>{if(Y<=0)return 0;if(Y>=Q)return J[Q];return J[Y]},getSize:(Y)=>j(Y),indexAtOffset:(Y)=>q(Y),getTotalSize:()=>J[Q]??0,getTotal:()=>Q,rebuild:(Y)=>K(Y),isVariable:()=>!0}},R0=(j,X)=>{if(typeof j==="number")return Sj(j,X);return fj(j,X)},I0=(j,X,Q,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil(Q/j.getSize(0));let K=0,q=0,Y=X;while(Y<J&&q<Q)q+=j.getSize(Y),K++,Y++;return Math.max(1,K)},a0=(j,X,Q)=>{if(Q===0)return 0;if(!j.isVariable())return Math.floor(X/j.getSize(0));let J=0,K=0;for(let q=Q-1;q>=0;q--){let Y=j.getSize(q);if(K+Y>X)break;K+=Y,J++}return Math.max(J,1)},W2=(j,X,Q)=>{if(Q===0)return 0;let J=Math.floor(X),K=X-J,q=Math.max(0,Math.min(J,Q-1));return j.getOffset(q)+K*j.getSize(q)};var G2=200,p0=50,m2=15,d2=2,c2=50,y0=16000000;var V0=(j,X)=>{let Q=X.getTotalSize(),J=Q>y0,K=J?y0:Q,q=Q>0?K/Q:1;return{isCompressed:J,actualSize:Q,virtualSize:K,ratio:q}},r0=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;if(!K.isCompressed){let G=Q.indexAtOffset(j),L=Q.indexAtOffset(j+X);if(L<J-1)L++;return q.start=Math.max(0,G),q.end=Math.min(J-1,Math.max(0,L)),q}let{virtualSize:Y}=K,A=j/Y*J,B=Math.floor(A),D=I0(Q,Math.max(0,B),X,J),V=Math.ceil(A)+D,T=Y-X-j;if(T<=X&&T>=-1){let G=a0(Q,X,J),L=Math.max(0,J-G),M=Math.max(0,Math.min(1,1-T/X));B=Math.floor(B+(L-B)*M),V=T<=1?J-1:Math.min(J-1,B+D)}return q.start=Math.max(0,B),q.end=Math.min(J-1,Math.max(0,V)),q},l2=(j,X,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X),J},k0=(j,X,Q,J,K,q,Y)=>{if(!q.isCompressed||J===0)return Q.getOffset(j);let{virtualSize:U}=q,A=U-K,B=A-X;if(B<=K&&B>=-1){if(X>=A-1){let _=Q.getTotalSize()-Q.getOffset(j);return K-_}let T=a0(Q,K,J),G=Math.max(0,J-T),M=X/U*J,y=Math.max(0,Math.min(1,1-B/K)),H=Q.getOffset(j)-Q.getOffset(G),$=Q.getOffset(j)-W2(Q,M,J);return $+(H-$)*y}let D=X/U,V=Q.getTotalSize(),b=D*V;return Q.getOffset(j)-b},n0=(j,X,Q,J,K,q="start")=>{if(J===0)return 0;let Y;if(K.isCompressed){if(q==="end"&&j===J-1)return Math.max(0,K.virtualSize-Q);Y=j/J*K.virtualSize}else Y=X.getOffset(j);let U=X.getSize(j);switch(q){case"center":Y-=(Q-U)/2;break;case"end":Y-=Q-U;break}let A=K.virtualSize-Q;return Math.max(0,Math.min(Y,A))},a2=(j,X,Q,J)=>{if(Q===0)return 0;if(J.isCompressed){let K=j/J.virtualSize;return Math.floor(K*Q)}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 Q=V0(j,X);if(!Q.isCompressed)return`No compression needed (${j} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${j} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.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 Y=document.createElement("div");return Y.setAttribute("role","option"),Y},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,Q,J,K,q,Y,U,A=!1)=>{let B=nj(),D=new Map,V=q,b=!1,T=null,G=0,L="",M=(R)=>{if(T&&G===R)return T;return T=V0(R,Q),G=R,T},y={selected:!1,focused:!1},H=(R,S)=>{return y.selected=R,y.focused=S,y},$=`${K}-item ${K}-grid-item`,_=`${K}-item--selected`,N=`${K}-item--focused`,E=(R,S)=>{if(typeof S==="string")R.innerHTML=S;else R.replaceChildren(S)},W=(R,S,c)=>{R.classList.toggle(_,S),R.classList.toggle(N,c)},O=(R,S)=>{let c=J.getRow(R);if(S){let o=S.totalItems,t=M(o);if(t.isCompressed)return k0(c,S.scrollPosition,Q,o,S.containerSize,t,S.rangeStart)}return Q.getOffset(c)},z=(R,S,c)=>{let o=R.dataset.id?.startsWith("__group_header"),t=o?0:J.getCol(S),i=o?0:J.getColumnOffset(t,V),X0;if(b){let d=J.getRow(S),k=0,l=new Set;for(let q0=0;q0<S;q0++){let r=J.getRow(q0);if(r<d&&!l.has(r)){let Z0=Q.getSize(q0);k+=Z0,l.add(r)}}X0=k}else X0=O(S,c);if(A)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)`},I=(R,S)=>{let c=R.dataset.id?.startsWith("__group_header"),o=c?V:J.getColumnWidth(V),t;if(b||c)t=Q.getSize(S)-J.gap;else{let i=J.getRow(S);t=Q.getSize(i)-J.gap}R.style.width=`${o}px`,R.style.height=`${t}px`},n=(R,S,c,o,t)=>{let i=B.acquire(),X0=H(c,o);if(i.className=$,i.dataset.index=String(R),i.dataset.id=String(S.id),i.dataset.row=String(J.getRow(R)),i.dataset.col=String(J.getCol(R)),i.ariaSelected=String(c),U)i.id=`${U}-item-${R}`;if(Y)L=String(Y()),i.setAttribute("aria-setsize",L),i.setAttribute("aria-posinset",String(R+1));I(i,R);let d=X(S,R,X0);return E(i,d),W(i,c,o),z(i,R,t),i},Z=(R,S,c,o,t)=>{if(S.start===0&&R.length>0)b=T0(R[0]);for(let[k,l]of D)if(k<S.start||k>S.end)l.element.remove(),B.release(l.element),D.delete(k);let i=!1;if(Y){let k=String(Y());i=k!==L,L=k}let X0=document.createDocumentFragment(),d=[];for(let k=S.start;k<=S.end;k++){let l=k-S.start,q0=R[l];if(!q0){console.warn(`⚠️ RENDER: Missing item at index ${k} (range: ${S.start}-${S.end}, items.length: ${R.length})`);continue}let r=c.has(q0.id),Z0=k===o,Y0=D.get(k);if(Y0){let v=Y0.element.dataset.id,h=String(q0.id);if(v!==h){let J0=H(r,Z0),K0=X(q0,k,J0);E(Y0.element,K0),Y0.element.dataset.id=h,Y0.element.dataset.row=String(J.getRow(k)),Y0.element.dataset.col=String(J.getCol(k)),I(Y0.element,k)}if(W(Y0.element,r,Z0),Y0.element.ariaSelected=String(r),z(Y0.element,k,t),i)Y0.element.setAttribute("aria-setsize",L)}else{let v=n(k,q0,r,Z0,t);X0.appendChild(v),d.push({index:k,element:v})}}if(d.length>0){j.appendChild(X0);for(let{index:k,element:l}of d)D.set(k,{index:k,element:l})}},u=(R)=>{for(let[S,c]of D)z(c.element,S,R)},g=(R,S,c,o)=>{let t=D.get(R);if(t){let i=H(c,o),X0=X(S,R,i);E(t.element,X0),W(t.element,c,o),t.element.dataset.id=String(S.id),t.element.ariaSelected=String(c),I(t.element,R)}},C=(R,S,c)=>{let o=D.get(R);if(o)W(o.element,S,c)},P=(R)=>{return D.get(R)?.element},p=(R)=>{if(Math.abs(R-V)<1)return;V=R;for(let[S,c]of D)I(c.element,S),z(c.element,S)},w=()=>{for(let[,R]of D)R.element.remove(),B.release(R.element);D.clear()};return{render:Z,updatePositions:u,updateItem:g,updateItemClasses:C,getElement:P,updateContainerWidth:p,clear:w,destroy:()=>{w(),B.clear()}}};var Y2=P2(()=>{o0()});var $2=2,R2=(j=0)=>{let X=[,,,,,];for(let Q=0;Q<5;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},D2=(j,X)=>{let Q=performance.now(),J=Q-j.lastTime;if(J===0)return j;if(J>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let q=j.samples[0];return q.position=X,q.time=Q,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=Q,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=Q,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,Y=j.samples[q],U=X-Y.position,A=Q-Y.time;j.velocity=A>0?Math.abs(U)/A:0}return j.lastPosition=X,j.lastTime=Q,j};var s0=()=>{let j={},X=(U,A)=>{if(!j[U])j[U]=new Set;return j[U].add(A),()=>Q(U,A)},Q=(U,A)=>{j[U]?.delete(A)};return{on:X,off:Q,emit:(U,A)=>{j[U]?.forEach((B)=>{try{B(A)}catch(D){console.error(`[vlist] Error in event handler for "${String(U)}":`,D)}})},once:(U,A)=>{let B=(D)=>{Q(U,B),A(D)};return X(U,B)},clear:(U)=>{if(U)delete j[U];else for(let A in j)delete j[A]},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,Q,J)=>{let K=document.createElement("div");if(K.className=X,J)K.classList.add(`${X}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),Q)K.setAttribute("aria-label",Q);if(J)K.setAttribute("aria-orientation","horizontal");let q=document.createElement("div");if(q.className=`${X}-viewport`,J)q.style.overflowX="auto",q.style.overflowY="hidden";else q.style.overflow="auto";q.style.height="100%",q.style.width="100%";let Y=document.createElement("div");if(Y.className=`${X}-content`,Y.style.position="relative",J)Y.style.height="100%";else Y.style.width="100%";let U=document.createElement("div");if(U.className=`${X}-items`,U.style.position="relative",J)U.style.height="100%";else U.style.width="100%";return Y.appendChild(U),q.appendChild(Y),K.appendChild(q),j.appendChild(K),{root:K,viewport:q,content:Y,items:U}};var z2=(j=100)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:(Q)=>{if(X.length<j)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),X.push(Q)},clear:()=>{X.length=0}}};var v2=(j,X,Q,J,K)=>{if(J===0||X===0){K.start=0,K.end=0;return}let q=Q.indexAtOffset(j),Y=I0(Q,q,X,J),U=q+Y;K.start=Math.max(0,q),K.end=Math.min(J-1,Math.max(0,U))},w2=(j,X,Q,J)=>{if(Q===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X)},S2=(j,X,Q,J,K)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Y=X.getOffset(q),U=X.getSize(q),A=Math.max(0,X.getTotalSize()-Q),B;switch(K){case"center":B=Y-(Q-U)/2;break;case"end":B=Y-Q+U;break;default:B=Y}return Math.max(0,Math.min(B,A))};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:Q,emitter:J,resolvedConfig:K,rawConfig:q,rendered:Y,pool:U,sharedState:A,isHorizontal:B,classPrefix:D,contentSizeHandlers:V,afterScroll:b,clickHandlers:T,keydownHandlers:G,resizeHandlers:L,destroyHandlers:M,methods:y,onScrollFrame:H,resizeObserver:$,renderRange:_}=X;return{get dom(){return Q},get sizeCache(){return j.hc},get emitter(){return J},get config(){return K},get rawConfig(){return q},get renderer(){return{render:(N,E,W,O,z)=>{j.ss=W,j.fi=O,j.ffn()},updateItemClasses:(N,E,W)=>{let O=Y.get(N);if(!O)return;O.classList.toggle(`${D}-item--selected`,E),O.classList.toggle(`${D}-item--focused`,W),O.ariaSelected=E?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(N)=>Y.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:A,getContainerWidth(){return j.cw},afterScroll:b,clickHandlers:T,keydownHandlers:G,resizeHandlers:L,contentSizeHandlers:V,destroyHandlers:M,methods:y,replaceTemplate(N){j.at=N},replaceRenderer(N){},replaceDataManager(N){j.dm=N},replaceScrollController(N){j.sc=N},getItemsForRange(N){let{dm:E,it:W}=j,O=[];for(let z=N.start;z<=N.end;z++){let I=E?E.getItem(z):W[z];if(I)O.push(I)}return O},getAllLoadedItems(){let N=j.dm;if(N){let E=N.getTotal(),W=[];for(let O=0;O<E;O++){let z=N.getItem(O);if(z)W.push(z)}return W}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:_.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,N]of Y)N.remove(),U.release(N);Y.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(N,E){j.rfn=N,j.ffn=E},setVirtualTotalFn(N){j.vtf=N},rebuildSizeCache(N){j.hc.rebuild(N??j.vtf())},setSizeConfig(N){j.hc=R0(N,j.vtf())},updateContentSize(N){let E=`${N}px`;if(B)Q.content.style.width=E;else Q.content.style.height=E},updateCompressionMode(){},setVisibleRangeFn(N){j.gvr=N},setScrollToPosFn(N){j.gsp=N},setPositionElementFn(N){j.pef=N},setScrollFns(N,E){j.sgt=N,j.sst=(W)=>{E(W),H()}},setScrollTarget(N){j.st.removeEventListener("scroll",H),j.st=N,j.st.addEventListener("scroll",H,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(N){j.gcw=N.width,j.gch=N.height,j.cw=N.width(),j.ch=N.height(),A.viewportState.containerSize=j.ch},disableViewportResize(){if(j.vre)j.vre=!1,$.unobserve(Q.viewport)},disableWheelHandler(){if(j.wh)Q.viewport.removeEventListener("wheel",j.wh),j.wh=null}}},h2=(j,X,Q)=>{let{rendered:J,itemState:K,contentSizeHandlers:q,applyTemplate:Y,updateContentSize:U}=X,A=()=>{j.hc.rebuild(j.vtf()),U(),Q.updateCompressionMode();for(let B=0;B<q.length;B++)q[B]();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:(B)=>j.it[B],isItemLoaded:(B)=>B>=0&&B<j.it.length&&j.it[B]!==void 0,getItemsInRange:(B,D)=>{let V=j.it,b=[],T=Math.max(0,B),G=Math.min(D,V.length-1);for(let L=T;L<=G;L++)b.push(V[L]);return b},setTotal:(B)=>{},setItems:(B,D=0,V)=>{let b=j.it;if(D===0&&(V!==void 0||b.length===0))j.it=B;else{let T=D+B.length;if(b.length<T)b.length=T;for(let G=0;G<B.length;G++)b[D+G]=B[G]}if(j.ii)A()},updateItem:(B,D)=>{let V=j.it;if(B<0||B>=V.length)return!1;let b=V[B];if(!b)return!1;V[B]={...b,...D};let T=J.get(B);if(T)Y(T,j.at(V[B],B,K)),T.dataset.id=String(V[B].id);return!0},removeItem:(B)=>{if(B<0||B>=j.it.length)return!1;if(j.it.splice(B,1),j.ii)A();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:Q,classPrefix:J}=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:()=>Q.root.classList.contains(`${J}--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",Q=X?"width":"height",J=X?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${Q} is required${X?" when orientation is 'horizontal'":""}`);if(typeof J==="number"&&J<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof J!=="number"&&typeof J!=="function")throw Error(`[vlist/builder] item.${Q} 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,Y={use(U){if(q)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(U.name,U),Y},build(){if(q)throw Error("[vlist/builder] .build() can only be called once");return q=!0,uj(j,K,X,J)}};return Y};function uj(j,X,Q,J){let{item:K,items:q,overscan:Y=Ij,classPrefix:U=pj,ariaLabel:A,reverse:B=!1,scroll:D}=j,V=D,b=V?.wheel??!0,T=V?.wrap??!1,G=B,L=`${U}-${hj++}`,M=J,y=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,H=Q?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,$={overscan:Y,classPrefix:U,reverse:G,wrap:T,horizontal:Q,ariaIdPrefix:L},_=Array.from(X.values()).sort((F,f)=>(F.priority??50)-(f.priority??50)),N=new Set(_.map((F)=>F.name));for(let F of _)if(F.conflicts){for(let f of F.conflicts)if(N.has(f))throw Error(`[vlist/builder] ${F.name} and ${f} cannot be combined`)}if(G){if(N.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let E=k2(j.container),W=C2(E,U,A,Q);if(V?.wheel===!1)if(Q)W.viewport.style.overflowX="hidden";else W.viewport.style.overflow="hidden";if(V?.scrollbar==="none")W.viewport.classList.add(`${U}-viewport--no-scrollbar`);let O=s0(),z=q||[],I=R0(M,z.length),n=z2(),Z={it:z,hc:I,ch:W.viewport.clientHeight,cw:W.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:R2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>W.viewport.scrollLeft:()=>W.viewport.scrollTop,sst:Q?(F)=>{W.viewport.scrollLeft=F}:(F)=>{W.viewport.scrollTop=F},sab:(F=2)=>{let f=Z.hc.getTotalSize();return Z.ls+Z.ch>=f-F},sic:!1,rfn:null,ffn:null,gvr:(F,f,m,a,Q0)=>{v2(F,f,m,a,Q0)},gsp:(F,f,m,a,Q0)=>{return S2(F,f,m,a,Q0)},pef:null,at:K.template,vre:!0,st:W.viewport,wh:null,gcw:()=>Z.cw,gch:()=>Z.ch};Z.vtf=()=>Z.dm?Z.dm.getTotal():Z.it.length;let u=null,g=null,C={start:0,end:0},P={start:0,end:0},p={start:-1,end:-1},w={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},S=`${U}-item`,c=[],o=[],t=[],i=[],X0=[],d=[],k=new Map,l=(F,f)=>{if(typeof f==="string")F.innerHTML=f;else F.replaceChildren(f)},q0=(F,f)=>{let m=Math.round(Z.hc.getOffset(f));if(Q)F.style.transform=`translateX(${m}px)`;else F.style.transform=`translateY(${m}px)`};Z.pef=q0;let r=(F,f)=>{let m=n.acquire();if(m.className=S,Q){if(m.style.width=`${Z.hc.getSize(F)}px`,H!=null)m.style.height=`${H}px`}else m.style.height=`${Z.hc.getSize(F)}px`;if(m.dataset.index=String(F),m.dataset.id=String(f.id),m.ariaSelected="false",m.id=`${L}-item-${F}`,Z.la=String(Z.vtf()),m.setAttribute("aria-setsize",Z.la),m.setAttribute("aria-posinset",String(F+1)),String(f.id).startsWith("__placeholder_"))m.classList.add(`${U}-item--placeholder`);return l(m,Z.at(f,F,R)),Z.pef(m,F),m},Z0=()=>{let F=`${Z.hc.getTotalSize()}px`;if(Q)W.content.style.width=F;else W.content.style.height=F},Y0=()=>{if(Z.id)return;let F=Z.vtf(),f=Q?Z.cw:Z.ch;if(Z.gvr(Z.ls,f,Z.hc,F,C),w2(C,Y,F,P),P.start===p.start&&P.end===p.end){if(Z.sic)for(let[j0,B0]of x)Z.pef(B0,j0);return}let m=String(F),a=m!==Z.la;Z.la=m;for(let[j0,B0]of x)if(j0<P.start||j0>P.end)B0.remove(),n.release(B0),x.delete(j0);let Q0=document.createDocumentFragment(),W0=[];for(let j0=P.start;j0<=P.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,S0=String(B0.id);if(b0!==S0){let Rj=b0?.startsWith("__placeholder_"),H2=S0.startsWith("__placeholder_");if(l(D0,Z.at(B0,j0,R)),D0.dataset.id=S0,Q)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",a)D0.setAttribute("aria-setsize",Z.la)}else{let b0=r(j0,B0),S0=Z.ss.has(B0.id),l0=j0===Z.fi;if(S0)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){W.items.appendChild(Q0);for(let{index:j0,element:B0}of W0)x.set(j0,B0)}p.start=P.start,p.end=P.end,w.lastRenderRange.start=P.start,w.lastRenderRange.end=P.end,w.viewportState.scrollPosition=Z.ls,w.viewportState.visibleRange.start=C.start,w.viewportState.visibleRange.end=C.end,w.viewportState.renderRange.start=P.start,w.viewportState.renderRange.end=P.end,O.emit("range:change",{range:{start:P.start,end:P.end}})},v=()=>{p.start=-1,p.end=-1,Z.rfn()};Z.rfn=Y0,Z.ffn=v;let h=()=>{if(Z.id)return;let F=Z.sgt(),f=F>=Z.ls?"down":"up";if(Z.vt=D2(Z.vt,F),!W.root.classList.contains(`${U}--scrolling`))W.root.classList.add(`${U}--scrolling`);Z.ls=F,Z.rfn(),O.emit("scroll",{scrollPosition:F,direction:f}),O.emit("velocity:change",{velocity:Z.vt.velocity,reliable:Z.vt.sampleCount>=$2});for(let m=0;m<c.length;m++)c[m](F,f);if(g)clearTimeout(g);g=setTimeout(()=>{W.root.classList.remove(`${U}--scrolling`),Z.vt.velocity=0,Z.vt.sampleCount=0,O.emit("velocity:change",{velocity:0,reliable:!1})},V?.idleTimeout??g2)},s=null;if(Z.st.addEventListener("scroll",h,{passive:!0}),b&&!Q&&!y)s=(F)=>{F.preventDefault();let f=Z.sgt(),m=F.deltaY,a=Math.max(0,Math.min(f+m,Z.hc.getTotalSize()-Z.ch));Z.sst(a),Z.ls=a,Z.vt=D2(Z.vt,a),Z.rfn();let Q0=a>=f?"down":"up";if(O.emit("scroll",{scrollPosition:a,direction:Q0}),!W.root.classList.contains(`${U}--scrolling`))W.root.classList.add(`${U}--scrolling`);if(g)clearTimeout(g);g=setTimeout(()=>{W.root.classList.remove(`${U}--scrolling`),Z.vt.velocity=0,Z.vt.sampleCount=0,O.emit("velocity:change",{velocity:0,reliable:!1})},V?.idleTimeout??g2)},Z.wh=s,W.viewport.addEventListener("wheel",s,{passive:!1});else if(Q&&b)s=(F)=>{if(F.deltaX)return;F.preventDefault(),W.viewport.scrollLeft+=F.deltaY},Z.wh=s,W.viewport.addEventListener("wheel",s,{passive:!1});let J0=(F)=>{let m=F.target.closest("[data-index]");if(m){let a=parseInt(m.dataset.index??"-1",10);if(a>=0){let Q0=Z.dm?.getItem(a)??Z.it[a];if(Q0){if(Q0.__groupHeader)return;O.emit("item:click",{item:Q0,index:a,event:F})}}}for(let a=0;a<o.length;a++)o[a](F)},K0=(F)=>{let m=F.target.closest("[data-index]");if(m){let a=parseInt(m.dataset.index??"-1",10);if(a>=0){let Q0=Z.dm?.getItem(a)??Z.it[a];if(Q0){if(Q0.__groupHeader)return;O.emit("item:dblclick",{item:Q0,index:a,event:F})}}}},U0=(F)=>{for(let f=0;f<t.length;f++)t[f](F)};W.items.addEventListener("click",J0),W.items.addEventListener("dblclick",K0),W.root.addEventListener("keydown",U0);let _0=new ResizeObserver((F)=>{if(Z.id)return;for(let f of F){let m=f.contentRect.height,a=f.contentRect.width,Q0=Q?a:m,W0=Q?Z.cw:Z.ch;if(Z.cw=a,Z.ch=m,Math.abs(Q0-W0)>1){if(w.viewportState.containerSize=Q0,Z.ii)Z0(),Z.rfn(),O.emit("resize",{height:m,width:a})}if(Z.ii)for(let j0=0;j0<i.length;j0++)i[j0](a,m)}});if(Z.vre)_0.observe(W.viewport);let M0={dom:W,emitter:O,resolvedConfig:$,rawConfig:j,rendered:x,pool:n,itemState:R,sharedState:w,renderRange:P,isHorizontal:Q,classPrefix:U,contentSizeHandlers:X0,afterScroll:c,clickHandlers:o,keydownHandlers:t,resizeHandlers:i,destroyHandlers:d,methods:k,onScrollFrame:h,resizeObserver:_0,applyTemplate:l,updateContentSize:Z0},e=p2(Z,M0);Z.dm=h2(Z,M0,e),Z.sc=u2(Z,M0);let F0=new Map;for(let F of _)if(F.methods)for(let f of F.methods){let m=F0.get(f);if(m)throw Error(`[vlist/builder] Method "${f}" is registered by both "${m}" and "${F.name}"`);F0.set(f,F.name)}for(let F of _)F.setup(e);if(Z.ii=!0,e.state.isInitialized=!0,Z0(),Z.rfn(),G&&Z.it.length>0){let F=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(F),Z.ls=F,Z.rfn()}let O0=(F)=>{e.dataManager.setItems(F,0,F.length)},N0=G?(F)=>{let f=Z.sab(2),m=Z.it.length;if(e.dataManager.setItems(F,m),f&&Z.it.length>0){let a=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(a),Z.ls=a,Z.rfn()}}:(F)=>{let f=Z.it.length;e.dataManager.setItems(F,f)},A0=G?(F)=>{let f=Z.sgt(),m=Z.hc.getTotalSize(),a=[...Z.it];e.dataManager.clear(),e.dataManager.setItems([...F,...a],0);let W0=Z.hc.getTotalSize()-m;if(W0>0)Z.sst(f+W0),Z.ls=f+W0}:(F)=>{let f=[...Z.it];e.dataManager.clear(),e.dataManager.setItems([...F,...f],0)},G0=(F,f)=>{e.dataManager.updateItem(F,f)},E0=(F)=>{e.dataManager.removeItem(F)},$0=async()=>{if(e.dataManager.reload)await e.dataManager.reload()},c0=()=>{if(u!==null)cancelAnimationFrame(u),u=null},Oj=(F,f,m)=>{if(c0(),Math.abs(f-F)<1){Z.sst(f),Z.ls=f,Z.rfn();return}let a=performance.now(),Q0=(W0)=>{let j0=W0-a,B0=Math.min(j0/m,1),D0=F+(f-F)*f2(B0);if(Z.sst(D0),Z.ls=D0,Z.rfn(),B0<1)u=requestAnimationFrame(Q0);else u=null};u=requestAnimationFrame(Q0)},bj=(F,f)=>{let{align:m,behavior:a,duration:Q0}=I2(f),W0=Z.vtf(),j0=F;if(T&&W0>0)j0=(j0%W0+W0)%W0;let B0=Z.gsp(j0,Z.hc,Z.ch,W0,m);if(a==="smooth")Oj(Z.sgt(),B0,Q0);else c0(),Z.sst(B0)},yj=()=>Z.sgt(),Hj=(F,f)=>{return O.on(F,f)},Tj=(F,f)=>{O.off(F,f)},Pj=()=>{if(Z.id)return;if(Z.id=!0,e.state.isDestroyed=!0,W.items.removeEventListener("click",J0),W.root.removeEventListener("keydown",U0),Z.st.removeEventListener("scroll",h),_0.disconnect(),Z.wh)W.viewport.removeEventListener("wheel",Z.wh);if(g)clearTimeout(g);for(let F=0;F<d.length;F++)d[F]();for(let F of _)if(F.destroy)F.destroy();c0();for(let[,F]of x)F.remove(),n.release(F);x.clear(),n.clear(),O.clear(),W.root.remove()},y2={get element(){return W.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[F,f]of k){if(F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;y2[F]=f}return y2}o0();var C0=(j,X,Q={},J="vlist",K=!1)=>{let{autoHide:q=!0,autoHideDelay:Y=1000,minThumbSize:U=30,showOnHover:A=!0,hoverZoneWidth:B=16,showOnViewportEnter:D=!0}=Q,V=0,b=0,T=0,G=0,L=!1,M=!1,y=0,H=0,$=0,_=null,N=!1,E=null,W=null,O=K?"width":"height",z=K?"translateX":"translateY",I=K?(r)=>r.clientX:(r)=>r.clientY,n=K?"left":"top",Z=document.createElement("div"),u=document.createElement("div"),g=A?document.createElement("div"):null,C=()=>{if(Z.className=`${J}-scrollbar`,u.className=`${J}-scrollbar-thumb`,K)Z.classList.add(`${J}-scrollbar--horizontal`);if(Z.appendChild(u),j.appendChild(Z),g){if(g.className=`${J}-scrollbar-hover`,K)g.classList.add(`${J}-scrollbar-hover--horizontal`),g.style.height=`${B}px`;else g.style.width=`${B}px`;j.appendChild(g)}},P=()=>{if(_)clearTimeout(_),_=null},p=()=>{if(!q)return;P(),_=setTimeout(x,Y)},w=()=>{if(V<=b)return;if(P(),!N)Z.classList.add(`${J}-scrollbar--visible`),N=!0;if(q&&!L&&!M)p()},x=()=>{if(L||M)return;Z.classList.remove(`${J}-scrollbar--visible`),N=!1},R=(r,Z0)=>{V=r,b=Z0;let Y0=V>b;if(Z.style.display=Y0?"":"none",!Y0){x();return}let v=b/V;T=Math.max(U,v*b),u.style[O]=`${T}px`,G=b-T,S($)},S=(r)=>{if($=r,V<=b||G<=0)return;let Z0=V-b,v=Math.min(1,Math.max(0,r/Z0))*G;u.style.transform=`${z}(${v}px)`},c=(r)=>{if(r.target===u)return;let Z0=Z.getBoundingClientRect(),h=I(r)-Z0[n]-T/2,J0=Math.max(0,Math.min(h,G))/G,K0=V-b,U0=J0*K0;X(U0),w()},o=(r)=>{r.preventDefault(),r.stopPropagation(),L=!0,y=I(r),H=$,P(),Z.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",t),document.addEventListener("mouseup",i)},t=(r)=>{if(!L)return;let Z0=I(r)-y,Y0=G>0?Z0/G:0,v=V-b,h=Y0*v,s=Math.max(0,Math.min(H+h,v)),K0=s/v*G;if(u.style.transform=`${z}(${K0}px)`,W=s,E===null)E=requestAnimationFrame(()=>{if(W!==null)X(W);E=null})},i=()=>{if(L=!1,E!==null)cancelAnimationFrame(E),E=null;if(W!==null)X(W),W=null;if(Z.classList.remove(`${J}-scrollbar--dragging`),q&&!M)p();document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",i)},X0=()=>{if(D)w()},d=()=>{if(!L){if(M=!1,q)p()}},k=()=>{M=!0,P(),w()},l=()=>{if(M=!1,!L&&q)p()},q0=()=>{if(P(),E!==null)cancelAnimationFrame(E),E=null;if(Z.removeEventListener("click",c),Z.removeEventListener("mouseenter",k),Z.removeEventListener("mouseleave",l),u.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",l),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",l),u.addEventListener("mousedown",o),j.addEventListener("mouseenter",X0),j.addEventListener("mouseleave",d),g)g.addEventListener("mouseenter",k),g.addEventListener("mouseleave",l);return{show:w,hide:x,updateBounds:R,updatePosition:S,isVisible:()=>N,destroy:q0}};var o2=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:J,config:K}=Q,{classPrefix:q,horizontal:Y}=K;if(X=C0(J.viewport,(B)=>Q.scrollController.scrollTo(B),j??{},q,Y),!J.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))J.viewport.classList.add(`${q}-viewport--custom-scrollbar`);let U=Q.getCachedCompression();X.updateBounds(U.virtualSize,Q.state.viewportState.containerSize);let A=X;Q.afterScroll.push((B,D)=>{A.updatePosition(B),A.show()}),Q.resizeHandlers.push((B,D)=>{if(A){let V=Q.getCachedCompression();A.updateBounds(V.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(A){let B=Q.getCachedCompression();A.updateBounds(B.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(A)A.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var i2=(j=0)=>{let X=[,,,,,,,,];for(let Q=0;Q<8;Q++)X[Q]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},i0=(j,X)=>{let Q=performance.now(),J=Q-j.lastTime;if(J===0)return j;if(J>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let q=j.samples[0];return q.position=X,q.time=Q,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=X,j.lastTime=Q,j}let K=j.samples[j.sampleIndex];if(K.position=X,K.time=Q,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,Y=j.samples[q],U=X-Y.position,A=Q-Y.time;j.velocity=A>0?U/A:0}return j.lastPosition=X,j.lastTime=Q,j},gj=(j)=>j.sampleCount>=3,t2=(j,X={})=>{let{wheel:Q=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:q=150,onScroll:Y,onIdle:U,scrollElement:A,horizontal:B=!1}=X,D=!!A,V=0,b=0,T=D?B?window.innerWidth:window.innerHeight:B?j.clientWidth:j.clientHeight,G=X.compressed??!1,L=X.compression,M=i2(),y=!1,H=null,_=t0(()=>{let d=B?j.scrollLeft:j.scrollTop,k=d>=V?"down":"up";if(M=i0(M,d),V=d,Y)Y({scrollTop:V,direction:k,velocity:M.velocity});I()}),E=t0(()=>{let d=j.getBoundingClientRect(),k=B?Math.max(0,-d.left):Math.max(0,-d.top),l=k>=V?"down":"up";if(M=i0(M,k),V=k,!y)y=!0;if(Y)Y({scrollTop:V,direction:l,velocity:M.velocity});I()}),W=(d)=>{d.preventDefault()},O=(d)=>{if(d.deltaX)return;d.preventDefault(),j.scrollLeft+=d.deltaY},z=(d)=>{if(!G)return;d.preventDefault();let k=(B?d.deltaX||d.deltaY:d.deltaY)*J,l=V+k;if(K)l=V+k*0.3;if(l=Math.max(0,Math.min(l,b)),l!==V){let r=l>=V?"down":"up";if(M=i0(M,l),V=l,!y)y=!0;if(Y)Y({scrollTop:V,direction:r,velocity:M.velocity});I()}},I=()=>{if(H)clearTimeout(H);H=setTimeout(()=>{if(y=!1,M=i2(V),U)U()},q)},n=(d)=>{if(G)return;if(G=!0,L=d,b=d.virtualSize-T,D)return;if(_.cancel(),j.removeEventListener("scroll",_),!Q)j.removeEventListener("wheel",W);else if(B)j.removeEventListener("wheel",O);if(B)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",z,{passive:!1});let k=B?j.scrollLeft:j.scrollTop;if(k>0){let l=B?L?.actualSize??j.scrollWidth:L?.actualSize??j.scrollHeight;V=k/l*b}if(B)j.scrollLeft=0;else j.scrollTop=0},Z=()=>{if(!G)return;if(G=!1,D){L=void 0;return}if(j.removeEventListener("wheel",z),B)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!Q)j.addEventListener("wheel",W,{passive:!1});else if(B)j.addEventListener("wheel",O,{passive:!1});if(L&&V>0){let k=V/b*(L.actualSize-T);if(B)j.scrollLeft=k;else j.scrollTop=k}L=void 0},u=()=>{if(D||G)return V;return B?j.scrollLeft:j.scrollTop},g=(d,k=!1)=>{let l=Math.max(0,Math.min(d,b||1/0));if(D){let q0=j.getBoundingClientRect();if(B){let r=q0.left+window.scrollX;window.scrollTo({left:r+l,behavior:k?"smooth":"auto"})}else{let r=q0.top+window.scrollY;window.scrollTo({top:r+l,behavior:k?"smooth":"auto"})}}else if(G){if(l===V)return;let r=l>=V?"down":"up";if(M=i0(M,l),V=l,!y)y=!0;if(Y)Y({scrollTop:V,direction:r,velocity:M.velocity});I()}else if(B)j.scrollTo({left:l,behavior:k?"smooth":"auto"});else j.scrollTo({top:l,behavior:k?"smooth":"auto"})},C=(d)=>{g(u()+d)},P=()=>{return u()<=0},p=(d=0)=>{let k=u(),l=D||G?b:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return k>=l-d},w=()=>{let d=u(),k=D||G?b:B?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)L=d.compression,b=L.virtualSize-T},R=()=>G,S=()=>Math.abs(M.velocity),c=()=>gj(M),o=()=>y,t=()=>D,i=(d)=>{if(T=d,L)b=L.virtualSize-T},X0=()=>{if(H)clearTimeout(H);if(D)E.cancel(),window.removeEventListener("scroll",E);else _.cancel(),j.removeEventListener("scroll",_),j.removeEventListener("wheel",z),j.removeEventListener("wheel",W),j.removeEventListener("wheel",O)};if(D){if(G&&L)b=L.virtualSize-T;window.addEventListener("scroll",E,{passive:!0})}else if(G&&L){if(b=L.virtualSize-T,B)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",z,{passive:!1})}else{if(B)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!Q)j.addEventListener("wheel",W,{passive:!1});else if(B)j.addEventListener("wheel",O,{passive:!1})}return{getScrollTop:u,scrollTo:g,scrollBy:C,isAtTop:P,isAtBottom:p,getScrollPercentage:w,getVelocity:S,isTracking:c,isScrolling:o,updateConfig:x,enableCompression:n,disableCompression:Z,isCompressed:R,isWindowMode:t,updateContainerHeight:i,destroy:X0}},t0=(j)=>{let X=null,Q=null,J=(...K)=>{if(Q=K,X===null)X=requestAnimationFrame(()=>{if(X=null,Q)j(...Q)})};return J.cancel=()=>{if(X!==null)cancelAnimationFrame(X),X=null},J};var xj=0.65,mj=0.5,dj=0.95,cj=0.1,lj=5,aj=100,e2=()=>{let j=null,X=0,Q=!1,J=0,K=null,q=0,Y=0,U=null,A=[];return{name:"withScale",priority:20,setup(B){let{dom:D,config:V}=B,{classPrefix:b,horizontal:T}=V,G=()=>{let H=B.getVirtualTotal(),$=V0(H,B.sizeCache);if($.isCompressed&&!Q){Q=!0,B.scrollController.enableCompression($),B.updateContentSize($.virtualSize),B.setScrollFns(()=>X,(Z)=>{if(X=Z,J=Z,K!==null)cancelAnimationFrame(K),K=null});let _=()=>{let Z=J-X;if(Math.abs(Z)<mj)X=J,K=null;else{X+=Z*xj;let g=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize;X=Math.max(0,Math.min(X,g)),K=requestAnimationFrame(_)}B.scrollController.scrollTo(X)},N=D.viewport,E=(Z)=>{Z.preventDefault();let g=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize;if(J=Math.max(0,Math.min(J+Z.deltaY,g)),K===null)K=requestAnimationFrame(_)};N.addEventListener("wheel",E,{passive:!1});let W=()=>{if(U!==null)cancelAnimationFrame(U),U=null},O=(Z)=>{if(W(),K!==null)cancelAnimationFrame(K),K=null;let u=Z.touches[0];if(!u)return;let g=T?u.clientX:u.clientY;q=g,Y=X,A=[{time:performance.now(),y:g}]},z=(Z)=>{Z.preventDefault();let u=Z.touches[0];if(!u)return;let g=T?u.clientX:u.clientY,C=performance.now();if(A.push({time:C,y:g}),A.length>lj)A.shift();let P=q-g,w=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize,x=Math.max(0,Math.min(Y+P,w));X=x,J=x,B.scrollController.scrollTo(x)},I=(Z)=>{let u=performance.now(),g=A.filter((w)=>u-w.time<aj),C=0;if(g.length>=2){let w=g[0],x=g[g.length-1],R=x.time-w.time;if(R>0)C=(w.y-x.y)/R}if(A=[],Math.abs(C)<cj)return;let P=C*16,p=()=>{if(P*=dj,Math.abs(P)<0.5){U=null;return}let x=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize,R=X+P;if(R=Math.max(0,Math.min(R,x)),R<=0&&P<0||R>=x&&P>0){X=R,J=R,B.scrollController.scrollTo(R),U=null;return}X=R,J=R,B.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",I,{passive:!0}),N.addEventListener("touchcancel",I,{passive:!0}),B.destroyHandlers.push(()=>{if(N.removeEventListener("wheel",E),N.removeEventListener("touchstart",O),N.removeEventListener("touchmove",z),N.removeEventListener("touchend",I),N.removeEventListener("touchcancel",I),W(),K!==null)cancelAnimationFrame(K),K=null}),!D.viewport.querySelector(`.${b}-scrollbar-track`)){if(j=C0(D.viewport,(u)=>B.scrollController.scrollTo(u),{},b,T),!D.viewport.classList.contains(`${b}-viewport--custom-scrollbar`))D.viewport.classList.add(`${b}-viewport--custom-scrollbar`);j.updateBounds($.virtualSize,B.state.viewportState.containerSize);let Z=j;B.afterScroll.push((u,g)=>{if(Z)Z.updatePosition(u),Z.show()}),B.resizeHandlers.push((u,g)=>{if(Z){let C=B.getCachedCompression();Z.updateBounds(C.virtualSize,B.state.viewportState.containerSize)}})}}else if(!$.isCompressed&&Q)Q=!1,B.scrollController.disableCompression(),B.updateContentSize($.actualSize);else if($.isCompressed)B.scrollController.updateConfig({compression:$}),B.updateContentSize($.virtualSize);if(j)j.updateBounds($.virtualSize,B.state.viewportState.containerSize);B.state.cachedCompression={state:$,totalItems:H}};B.updateCompressionMode=G;let L=B.getCachedCompression.bind(B);B.getCachedCompression=()=>{if(B.state.cachedCompression)return B.state.cachedCompression.state;return L()},B.setVisibleRangeFn((H,$,_,N,E)=>{M=null,y=null;let W=V0(N,_);r0(H,$,_,N,W,E)}),B.setScrollToPosFn((H,$,_,N,E)=>{let W=V0(N,$);return n0(H,$,_,N,W,E)});let M=null,y=null;B.setPositionElementFn((H,$)=>{let _=B.getVirtualTotal(),N=V0(_,B.sizeCache);if(N.isCompressed){let E=B.scrollController.getScrollTop();if(M===null||$<y)y=$,M=Math.round(k0($,E,B.sizeCache,_,B.state.viewportState.containerSize,N));let W=M+B.sizeCache.getOffset($)-B.sizeCache.getOffset(y),O=B.config.horizontal;H.style.transform=O?`translateX(${W}px)`:`translateY(${W}px)`}else{let E=Math.round(B.sizeCache.getOffset($)),W=B.config.horizontal;H.style.transform=W?`translateX(${E}px)`:`translateY(${E}px)`}}),G(),B.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:Q=5000,evictionBuffer:J=200,onEvict:K}=j,q=new Map,Y=0,U=0,A=(C)=>{let P=q.get(C);if(!P)P={items:Array(X),count:0,lastAccess:Date.now()},q.set(C,P);else P.lastAccess=Date.now();return P},B=(C)=>{return Math.floor(C/X)},D=(C)=>{return C%X},V=()=>Y,b=(C)=>{Y=C},T=(C)=>{if(C<0||C>=Y)return;let P=B(C),p=q.get(P);if(!p)return;return p.items[D(C)]},G=(C)=>{if(C<0||C>=Y)return!1;let P=B(C),p=q.get(P);if(!p)return!1;return p.items[D(C)]!==void 0},L=(C,P)=>{let p=B(C),w=A(p),x=D(C),R=w.items[x]===void 0;if(w.items[x]=P,R)w.count++,U++;if(C>=Y)Y=C+1},M=(C,P)=>{for(let p=0;p<P.length;p++){let w=P[p];if(w!==void 0)L(C+p,w)}},y=(C)=>{if(C<0||C>=Y)return!1;let P=B(C),p=q.get(P);if(!p)return!1;let w=D(C);if(p.items[w]===void 0)return!1;if(p.items[w]=void 0,p.count--,U--,p.count===0)q.delete(P);return!0},H=(C,P)=>{let p=[];for(let w=C;w<=P&&w<Y;w++)p.push(T(w));return p},$=(C,P)=>{for(let p=C;p<=P&&p<Y;p++)if(!G(p))return!1;return!0},_=()=>{let C=[],P=null,p=Array.from(q.keys()).sort((w,x)=>w-x);for(let w of p){let x=q.get(w);if(!x)continue;let R=w*X;for(let S=0;S<X;S++){let c=R+S;if(c>=Y)break;if(x.items[S]!==void 0)if(P===null)P={start:c,end:c};else if(c===P.end+1)P.end=c;else C.push(P),P={start:c,end:c};else if(P!==null)C.push(P),P=null}}if(P!==null)C.push(P);return C},N=(C,P)=>{let p=[],w=null;for(let x=C;x<=P&&x<Y;x++)if(!G(x))if(w===null)w={start:x,end:x};else w.end=x;else if(w!==null)p.push(w),w=null;if(w!==null)p.push(w);return p},E=(C)=>{return q.has(C)},W=(C)=>{let P=q.get(C);if(P)P.lastAccess=Date.now()},O=(C,P)=>{if(C>P||q.size===0)return;let p=Date.now(),w=B(Math.max(0,C)),x=B(Math.min(Y-1,P));for(let R=w;R<=x;R++){let S=q.get(R);if(S)S.lastAccess=p}},z=(C,P)=>{if(U<=Q)return 0;let p=Math.max(0,C-J),w=Math.min(Y-1,P+J),x=B(p),R=B(w),S=0,c=[];for(let[o,t]of q)if(o<x||o>R)S+=t.count,c.push(o),U-=t.count,q.delete(o);if(S>0&&K)K(S,c);return S},I=()=>{if(U<=Q)return 0;let C=Array.from(q.entries()).sort(([,w],[,x])=>w.lastAccess-x.lastAccess),P=0,p=[];for(let[w,x]of C){if(U<=Q)break;P+=x.count,U-=x.count,p.push(w),q.delete(w)}if(P>0&&K)K(P,p);return P},n=()=>{return{totalItems:Y,cachedItems:U,cachedChunks:q.size,chunkSize:X,maxCachedItems:Q,memoryEfficiency:Y>0?1-U/Y:1}},Z=()=>U,u=()=>{q.clear(),U=0};return{chunkSize:X,maxCachedItems:Q,getTotal:V,setTotal:b,get:T,has:G,set:L,setRange:M,delete:y,getRange:H,isRangeLoaded:$,getLoadedRanges:_,findUnloadedRanges:N,getChunkIndex:B,isChunkLoaded:E,touchChunk:W,touchChunksForRange:O,evictDistant:z,evictToLimit:I,getStats:n,getCachedCount:Z,clear:u,reset:()=>{u(),Y=0}}},j2=(j)=>{if(j.length===0)return[];let X=[...j].sort((J,K)=>J.start-K.start),Q=[{...X[0]}];for(let J=1;J<X.length;J++){let K=X[J],q=Q[Q.length-1];if(K.start<=q.end+1)q.end=Math.max(q.end,K.end);else Q.push({...K})}return Q},h0=(j,X,Q)=>{let J=Math.floor(j.start/Q)*Q,K=Math.ceil((j.end+1)/Q)*Q-1,q={start:J,end:K};if(X.length===0)return[q];let Y=[],U=j2(X),A=q.start;for(let B of U){if(B.end<A)continue;if(B.start>q.end)break;if(B.start>A)Y.push({start:A,end:Math.min(B.start-1,q.end)});if(A=B.end+1,A>q.end)break}if(A<=q.end)Y.push({start:A,end:q.end});return Y};var J2=(j={})=>{let{enabled:X=!0,maskCharacter:Q="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:q}=j,Y=null,U=!1,A=0,B=(y)=>{if(!X||U||y.length===0)return;let H=new Map,$=new Map,_=Math.min(y.length,K);for(let N=0;N<_;N++){let E=y[N];if(!E||typeof E!=="object")continue;for(let[W,O]of Object.entries(E)){if(W.startsWith("_")||W==="id")continue;if(!$.has(W))$.set(W,{lengths:[],types:new Set});let z=$.get(W),I=Array.isArray(O)?"array":typeof O;if(z.types.add(I),typeof O==="string")z.lengths.push(O.length);else if(O!==null&&O!==void 0)z.lengths.push(String(O).length)}}for(let[N,E]of $){if(E.lengths.length===0)continue;let W=Math.min(...E.lengths),O=Math.max(...E.lengths),z=Math.round(E.lengths.reduce((n,Z)=>n+Z,0)/E.lengths.length),I="string";if(E.types.has("number")&&E.types.size===1)I="number";else if(E.types.has("boolean")&&E.types.size===1)I="boolean";else if(E.types.has("array"))I="array";else if(E.types.has("object")&&!E.types.has("string"))I="object";H.set(N,{minLength:W,maxLength:O,avgLength:z,type:I})}Y=H,U=!0},D=()=>U,V=(y)=>{let H=y.avgLength;if(J&&y.minLength!==y.maxLength){if(H=Math.floor(Math.random()*(y.maxLength-y.minLength+1)+y.minLength),Math.random()<0.3)H=Math.max(1,H+Math.floor(Math.random()*3)-1)}return Q.repeat(Math.max(1,H))},b=(y)=>{if(q)return{...q(y),["_isPlaceholder"]:!0};let H={id:`__placeholder_${A++}`,["_isPlaceholder"]:!0,_index:y};if(!Y||Y.size===0)return H.label=Q.repeat(12),H;for(let[$,_]of Y)switch(_.type){case"string":H[$]=V(_);break;case"number":H[$]=0;break;case"boolean":H[$]=!1;break;case"array":H[$]=[];break;case"object":H[$]={};break;default:H[$]=V(_)}return H};return{analyzeStructure:B,hasAnalyzedStructure:D,generate:b,generateRange:(y,H)=>{let $=[];for(let _=y;_<=H;_++)$.push(b(_));return $},isPlaceholder:(y)=>{if(!y||typeof y!=="object")return!1;return y._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{Y=null,U=!1,A=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:Q,initialTotal:J,storage:K,placeholder:q,pageSize:Y=rj,onStateChange:U,onItemsLoaded:A,onItemsEvicted:B}=j,D=e0({...K,onEvict:(v,h)=>{B?.(v),N()}}),V=null,b=()=>{if(!V)V=J2(q);return V},T=new Map,G=!1,L,M=!0,y,H=[],$=0,_=new Map,N=()=>{U?.(g())},E=()=>{T.clear();let v=D.getLoadedRanges();for(let h of v)for(let s=h.start;s<=h.end;s++){let J0=D.get(s);if(J0&&!H0(J0))T.set(J0.id,s)}},W=(v,h)=>{if(!H0(h))T.set(h.id,v)},O=(v)=>{T.delete(v)},z=(v,h)=>{return`${v}-${h}`},I=()=>D.getTotal(),n=()=>D.getCachedCount(),Z=()=>G,u=()=>M,g=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:G,pendingRanges:H,error:L,hasMore:M,cursor:y}),C=()=>D,P=()=>b(),p=(v)=>{let h=D.get(v);if(h!==void 0)return h;if(v>=0&&v<D.getTotal())return b().generate(v);return},w=(v)=>{let h=T.get(v);if(h===void 0)return;return D.get(h)},x=(v)=>{return T.get(v)??-1},R=(v)=>{let h=D.get(v);return h!==void 0&&!H0(h)},S=(v,h)=>{let s=[],J0=D.getTotal(),K0=0,U0=0;D.touchChunksForRange(v,Math.min(h,J0-1));for(let _0=v;_0<=h&&_0<J0;_0++){let M0=D.get(_0);if(M0!==void 0)s.push(M0),K0++;else s.push(b().generate(_0)),U0++}return s},c=(v)=>{D.setTotal(v),M=D.getCachedCount()<v,N()},o=(v,h=0,s)=>{if(V&&!V.hasAnalyzedStructure()&&v.length>0)V.analyzeStructure(v);for(let J0=0;J0<v.length;J0++){let K0=v[J0];if(K0!==void 0){let U0=h+J0;D.set(U0,K0),W(U0,K0)}}if(s!==void 0)D.setTotal(s);else if(h+v.length>D.getTotal())D.setTotal(h+v.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)M=!1;A?.(v,h,D.getTotal()),N()},t=(v,h)=>{let s=T.get(v);if(s===void 0)return!1;let J0=D.get(s);if(!J0)return!1;let K0={...J0,...h};if(D.set(s,K0),h.id!==void 0&&h.id!==v)O(v),W(s,K0);return N(),!0},i=(v)=>{let h=T.get(v);if(h===void 0)return!1;D.delete(h),O(v);let s=D.getTotal();if(s>0)D.setTotal(s-1);return N(),!0},X0=async(v,h)=>{if(!X)return;let s=z(v,h);if(_.has(s))return;let J0=D.getLoadedRanges(),K0=h0({start:v,end:h},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)&&!_.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(_.has(E0)){let $0=_.get(E0);if(!M0.includes($0))M0.push($0)}}}for(let e of _0){let F0=z(e.start,e.end),O0=(async()=>{H.push(e),G=!0,L=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)y=G0.cursor;let E0=e.start+G0.items.length;if(E0>=$){if($=E0,G0.hasMore!==void 0)M=G0.hasMore;else if(G0.total!==void 0)M=E0<G0.total}}catch(N0){L=N0 instanceof Error?N0:Error(String(N0))}finally{_.delete(F0),H=H.filter((N0)=>N0.start!==e.start||N0.end!==e.end),G=_.size>0,N()}})();_.set(F0,O0),M0.push(O0)}await Promise.all(M0)},d=async(v,h)=>{if(D.isRangeLoaded(v,h))return;await X0(v,h)},k=async()=>{if(!X)return;await X0(0,Y-1)},l=async()=>{if(!X||G||!M)return!1;let v=D.getCachedCount(),h=D.getTotal(),s=v,J0=Math.min(s+Y-1,h>0?h-1:s+Y-1);if(s>=h&&h>0)return M=!1,!1;return await X0(s,J0),D.getCachedCount()>v},q0=async()=>{if(D.clear(),T.clear(),V)V.clear();_.clear(),H=[],G=!1,y=void 0,M=!0,$=0,L=void 0,N()},r=(v,h)=>{if(D.evictDistant(v,h)>0)E()},Z0=()=>{D.clear(),T.clear(),y=void 0,L=void 0,H=[],G=!1,N()},Y0=()=>{if(D.reset(),T.clear(),V)V.clear();y=void 0,M=!0,$=0,L=void 0,H=[],G=!1,N()};if(Q&&Q.length>0)o(Q,0,J??Q.length);else if(J!==void 0)D.setTotal(J);return{getState:g,getTotal:I,getCached:n,getIsLoading:Z,getHasMore:u,getStorage:C,getPlaceholders:P,getItem:p,getItemById:w,getIndexById:x,isItemLoaded:R,getItemsInRange:S,setTotal:c,setItems:o,updateItem:t,removeItem:i,loadRange:X0,ensureRange:d,loadInitial:k,loadMore:l,reload:q0,evictDistant:r,clear:Z0,reset:Y0}};var jj=(j)=>{let{adapter:X,loading:Q}=j,J=Q?.cancelThreshold??m2,K=Q?.preloadThreshold??d2,q=Q?.preloadAhead??c2;return{name:"withAsync",priority:20,methods:["reload"],setup(Y){let{emitter:U}=Y,A=Y.config.reverse,B=Q2({adapter:X,pageSize:p0,onStateChange:()=>{if(Y.state.isInitialized){Y.sizeCache.rebuild(Y.getVirtualTotal()),Y.updateCompressionMode();let M=Y.getCachedCompression();Y.state.viewportState.totalSize=M.virtualSize,Y.state.viewportState.actualSize=M.actualSize,Y.state.viewportState.isCompressed=M.isCompressed,Y.state.viewportState.compressionRatio=M.ratio,Y.updateContentSize(M.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(M,y,H)=>{if(Y.state.isInitialized)Y.sizeCache.rebuild(Y.getVirtualTotal()),Y.forceRender(),U.emit("load:end",{items:M,total:H})}});Y.replaceDataManager(B);let D=null,V=null,b=0,T=()=>{if(V){let M=V;V=null,Y.dataManager.ensureRange(M.start,M.end).catch((y)=>{U.emit("error",{error:y,context:"ensureRange"})})}};Y.afterScroll.push((M,y)=>{if(Y.state.isDestroyed)return;let H=Y.scrollController.getVelocity(),_=Y.scrollController.isTracking()&&H<=J;if(V&&b>J&&H<=J){let W=V;V=null,Y.dataManager.ensureRange(W.start,W.end).catch((O)=>{U.emit("error",{error:O,context:"ensureRange"})})}if(b=H,_&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(A){if(M<G2)U.emit("load:start",{offset:Y.dataManager.getCached(),limit:p0}),Y.dataManager.loadMore().catch((W)=>{U.emit("error",{error:W,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-M-Y.state.viewportState.containerSize<G2)U.emit("load:start",{offset:Y.dataManager.getCached(),limit:p0}),Y.dataManager.loadMore().catch((O)=>{U.emit("error",{error:O,context:"loadMore"})})}let{renderRange:N}=Y.state.viewportState;if(!D||N.start!==D.start||N.end!==D.end)if(D={start:N.start,end:N.end},_){V=null;let{start:W,end:O}=N,z=Y.getVirtualTotal();if(H>K)if(y==="down")O=Math.min(N.end+q,z-1);else W=Math.max(N.start-q,0);Y.dataManager.ensureRange(W,O).catch((I)=>{U.emit("error",{error:I,context:"ensureRange"})})}else V={start:N.start,end:N.end}});let G=200,L=null;Y.afterScroll.push((M,y)=>{if(L!==null)clearTimeout(L);L=setTimeout(()=>{L=null,T()},G)}),Y.destroyHandlers.push(()=>{if(L!==null)clearTimeout(L),L=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("reload",async()=>{D=null,V=null,Y.invalidateRendered(),await Y.dataManager.reload(),Y.forceRender();let{renderRange:M}=Y.state.viewportState;if(M.end>0)await Y.dataManager.ensureRange(M.start,M.end)}),U.emit("load:start",{offset:0,limit:p0}),Y.dataManager.loadInitial().catch((M)=>{U.emit("error",{error:M,context:"loadInitial"})})}}};var Jj=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:Q,state:J,config:K,emitter:q}=X;if(Q.root.style.overflow="visible",Q.root.style.height="auto",K.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.disableWheelHandler(),X.setScrollTarget(window),X.setScrollFns(()=>{let B=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-B.left);else return Math.max(0,-B.top)},(B)=>{let D=Q.viewport.getBoundingClientRect();if(K.horizontal){let V=D.left+window.scrollX;window.scrollTo(V+B,window.scrollY)}else{let V=D.top+window.scrollY;window.scrollTo(window.scrollX,V+B)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerSize=window.innerHeight;let{innerHeight:Y,innerWidth:U}=window,A=()=>{let{innerWidth:B,innerHeight:D}=window,V=K.horizontal?B:D,b=K.horizontal?U:Y;if(Math.abs(V-b)<=1)return;Y=D,U=B,J.viewportState.containerSize=D,q.emit("resize",{width:B,height:D});for(let T=0;T<X.resizeHandlers.length;T++)X.resizeHandlers[T](B,D);X.renderIfNeeded()};window.addEventListener("resize",A,{passive:!0}),j=()=>{window.removeEventListener("resize",A)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var V2=(j,X)=>{let Q=0,J=j.length-1;while(Q<J){let K=Q+J+1>>>1;if(j[K].headerLayoutIndex<=X)Q=K;else J=K-1}return Q},Qj=(j,X)=>{let Q=0,J=j.length-1;while(Q<J){let K=Q+J+1>>>1;if(j[K].firstDataIndex<=X)Q=K;else J=K-1}return Q},Xj=(j,X)=>{if(j===0)return[];let Q=[],J=X(0),K=0,q=0;for(let Y=1;Y<j;Y++){let U=X(Y);if(U!==J){let A=Y-K;Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:A}),q=q+1+A,J=U,K=Y}}return Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:j-K}),Q},u0=(j,X)=>{if(j.length===0||X.length===0)return[];let Q=j.length+X.length,J=Array(Q),K=0;for(let q of X){J[K]={id:`__group_header_${q.groupIndex}`,__groupHeader:!0,groupKey:q.key,groupIndex:q.groupIndex},K++;for(let Y=0;Y<q.count;Y++)J[K]=j[q.firstDataIndex+Y],K++}return J},g0=(j,X)=>{let Q=typeof X==="number"?(J)=>X:X;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},X2=(j,X)=>{let Q=Xj(j,X.getGroupForIndex),J=j+Q.length,K=X.headerHeight;return{get totalEntries(){return J},get groupCount(){return Q.length},get groups(){return Q},getEntry:(b)=>{if(Q.length===0)return{type:"item",dataIndex:b,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let T=V2(Q,b),G=Q[T];if(b===G.headerLayoutIndex)return{type:"header",group:G};let L=b-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+L,group:G}},layoutToDataIndex:(b)=>{if(Q.length===0)return b;let T=V2(Q,b),G=Q[T];if(b===G.headerLayoutIndex)return-1;let L=b-G.headerLayoutIndex-1;return G.firstDataIndex+L},dataToLayoutIndex:(b)=>{if(Q.length===0)return b;let T=Qj(Q,b),G=Q[T],L=b-G.firstDataIndex;return G.headerLayoutIndex+1+L},getGroupAtLayoutIndex:(b)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=V2(Q,b);return Q[T]},getGroupAtDataIndex:(b)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=Qj(Q,b);return Q[T]},getHeaderHeight:typeof K==="number"?(b)=>K:(b)=>{let T=Q[b];if(!T)return 0;return K(T.key,b)},rebuild:(b)=>{Q=Xj(b,X.getGroupForIndex),J=b+Q.length}}};var q2=(j,X,Q,J,K,q=!1)=>{let Y=document.createElement("div");if(Y.className=`${K}-sticky-header`,Y.setAttribute("role","presentation"),Y.setAttribute("aria-hidden","true"),Y.style.position="absolute",Y.style.zIndex="5",Y.style.pointerEvents="none",Y.style.willChange="transform",Y.style.overflow="hidden",q)Y.style.top="0",Y.style.bottom="0",Y.style.left="0";else Y.style.top="0",Y.style.left="0",Y.style.right="0";j.insertBefore(Y,j.firstChild);let U=-1,A=!1,B=0,D=(M)=>{if(M===U)return;U=M;let y=X.groups;if(M<0||M>=y.length){Y.textContent="";return}let H=y[M],$=J.headerTemplate(H.key,H.groupIndex),_=X.getHeaderHeight(M);if(q)Y.style.width=`${_}px`;else Y.style.height=`${_}px`;if(typeof $==="string")Y.innerHTML=$;else Y.replaceChildren($)},V=(M)=>{let y=X.groups;if(y.length===0){T();return}let H=0;for(let W=y.length-1;W>=0;W--)if(Q.getOffset(y[W].headerLayoutIndex)<=M){H=W;break}let $=Q.getOffset(y[0].headerLayoutIndex);if(M<$){T();return}if(!A)b();D(H);let _=X.getHeaderHeight(H),N=0,E=H+1;if(E<y.length){let O=Q.getOffset(y[E].headerLayoutIndex)-M;if(O<_)N=O-_}if(N!==B)if(B=N,N===0)Y.style.transform="";else{let W=Math.round(N);Y.style.transform=q?`translateX(${W}px)`:`translateY(${W}px)`}},b=()=>{if(A)return;A=!0,Y.style.display=""},T=()=>{if(!A)return;A=!1,Y.style.display="none",U=-1,B=0,Y.style.transform=""},G=()=>{let M=U;if(U=-1,M>=0)D(M)},L=()=>{Y.remove(),U=-1,A=!1};return Y.style.display="none",{update:V,refresh:G,show:b,hide:T,destroy:L}};var qj=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;let Y=Q.indexAtOffset(j),U=Q.indexAtOffset(j+X);if(U<J-1)U++;return q.start=Math.max(0,Y),q.end=Math.min(J-1,Math.max(0,U)),q},Yj=(j,X,Q,J)=>{if(Q===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-X),J.end=Math.min(Q-1,j.end+X),J},Kj=(j,X,Q,J,K,q)=>{if(J===0)return 0;let Y=Math.max(0,Math.min(j,J-1)),U=X.getOffset(Y),A=X.getSize(Y),B=X.getTotalSize(),D=Math.max(0,B-Q),V;switch(q){case"center":V=U-Q/2+A/2;break;case"end":V=U-Q+A;break;case"start":default:V=U;break}return Math.max(0,Math.min(V,D))},Zj=(j,X,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return X.getTotalSize()},Bj=(j,X)=>{return X.getTotalSize()},Uj=(j,X)=>{return X.getOffset(j)},Nj=(j,X,Q)=>{let J=Math.max(0,X-Q);return Math.max(0,Math.min(j,J))};var P0=(j,X,Q,J,K="start",q,Y=Kj)=>{return Y(j,X,Q,J,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 Q=[],J=[];for(let K=j.start;K<=j.end;K++)if(K<X.start||K>X.end)J.push(K);for(let K=X.start;K<=X.end;K++)if(K<j.start||K>j.end)Q.push(K);return{add:Q,remove:J}};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,Q=null,J=[],K=[];return{name:"withSections",priority:10,setup(q){let{dom:Y,config:U,rawConfig:A}=q,{classPrefix:B}=U,V=A.item.height;J=A.items?[...A.items]:[];let b=J.length,T={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=X2(b,T),K=u0(J,X.groups);let G=g0(X,V);q.setSizeConfig(G),q.rebuildSizeCache(K.length),q.dataManager.setItems(K,0,K.length);let L=A.item.template,{headerTemplate:M}=j,y=(O,z,I)=>{if(T0(O))return M(O.groupKey,O.groupIndex);return L(O,z,I)},H=q.methods.get("_getGridLayout"),$=q.methods.get("_replaceGridRenderer"),_=q.methods.get("_updateGridLayoutForGroups");if(H&&$){if(_)_((n)=>{let Z=K[n];return!!(Z&&T0(Z))});let{createGridRenderer:O}=(Y2(),vj(Vj)),z=H(),I=O(Y.items,y,q.sizeCache,z,B,q.getContainerWidth(),()=>q.dataManager.getTotal(),U.ariaIdPrefix);$(I)}else q.replaceTemplate(y);if(Y.root.classList.add(`${B}--grouped`),j.sticky!==!1){Q=q2(Y.root,X,q.sizeCache,{...T,sticky:T.sticky??!1},B,U.horizontal);let O=Q;q.afterScroll.push((z,I)=>{O.update(z)}),Q.update(q.scrollController.getScrollTop())}let N=()=>{if(!X)return;X.rebuild(J.length),K=u0(J,X.groups);let O=g0(X,V);if(q.setSizeConfig(O),q.rebuildSizeCache(K.length),q.dataManager.setItems(K,0,K.length),Q)Q.refresh()};q.methods.set("setItems",(O)=>{J=[...O],N()}),q.methods.set("appendItems",(O)=>{J=[...J,...O],N()}),q.methods.set("prependItems",(O)=>{J=[...O,...J],N()}),q.methods.set("removeItem",(O)=>{J=J.filter((z)=>z.id!==O),N()});let{animateScroll:E,cancelScroll:W}=ij(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(O,z)=>{let I=X.dataToLayoutIndex(O),{align:n,behavior:Z,duration:u}=tj(z),g=q.dataManager.getTotal(),C=P0(I,q.sizeCache,q.state.viewportState.containerSize,g,n,q.getCachedCompression());if(Z==="smooth")E(q.scrollController.getScrollTop(),C,u);else W(),q.scrollController.scrollTo(C)}),q.methods.set("_getItems",()=>J),q.methods.set("_getTotal",()=>J.length),q.destroyHandlers.push(()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null;if(Q)Q.destroy(),Q=null;Y.root.classList.remove(`${B}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}},M2=300,oj=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,L0=null,ij=(j,X)=>{let Q=()=>{if(L0!==null)cancelAnimationFrame(L0),L0=null};return{animateScroll:(K,q,Y)=>{if(Q(),Math.abs(q-K)<1){j.scrollTo(q);return}let U=performance.now(),A=(B)=>{let D=B-U,V=Math.min(D/Y,1),b=K+(q-K)*oj(V);if(j.scrollTo(b),X(),V<1)L0=requestAnimationFrame(A);else L0=null};L0=requestAnimationFrame(A)},cancelScroll:Q}},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)),Q=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},q=(G)=>{if(G<=0)return 0;if(!J)return Math.ceil(G/X);let L=0,M=0,y=0;for(let H=0;H<G;H++)if(J(H)){if(y++,M>0)L++,M=0;L++,M=0}else if(M++,M>=X)L++,M=0;if(M>0)L++;return L},Y=(G)=>{return K.row=U(G),K.col=A(G),K},U=(G)=>{if(!J)return Math.floor(G/X);let L=0,M=0;for(let y=0;y<=G;y++)if(J(y)){if(M>0)L++,M=0;if(y===G)return L;L++,M=0}else{if(y===G)return L;if(M++,M>=X)L++,M=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${L}`),L},A=(G)=>{if(!J)return G%X;if(J(G))return 0;let L=0;for(let M=0;M<=G;M++)if(J(M))L=0;else{if(M===G)return L;if(L++,L>=X)L=0}return L},B=(G,L,M)=>{if(M<=0)return{start:0,end:-1};if(!J){let N=Math.max(0,G*X),E=Math.min(M-1,(L+1)*X-1);return{start:N,end:E}}let y=-1,H=-1,$=0,_=0;for(let N=0;N<M;N++){if(J(N)){if(_>0)$++,_=0;if($>=G&&$<=L){if(y===-1)y=N;H=N}$++,_=0}else{if($>=G&&$<=L){if(y===-1)y=N;H=N}if(_++,_>=X)$++,_=0}if($>L&&_===0)break}if(y===-1)return{start:0,end:-1};return{start:y,end:H}},D=(G,L,M)=>{if(L<0||L>=X)return-1;let y=G*X+L;if(y<0||y>=M)return-1;return y},V=(G)=>{let L=(X-1)*Q;return Math.max(0,(G-L)/X)};return{get columns(){return X},get gap(){return Q},update:(G)=>{if(G.columns!==void 0)X=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)Q=G.gap;if(G.isHeaderFn!==void 0)J=G.isHeaderFn},getTotalRows:q,getPosition:Y,getRow:U,getCol:A,getItemRange:B,getItemIndex:D,getColumnWidth:V,getColumnOffset:(G,L)=>{let M=V(L);return G*(M+Q)}}};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,Q=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:q,config:Y,rawConfig:U}=J,{classPrefix:A}=Y;if(Y.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let B=U.items?.some((_)=>_.__groupHeader===!0),D={columns:j.columns,gap:j.gap??0};if(B)D.isHeaderFn=(_)=>{let N=J.dataManager.getItem(_);return!!(N&&N.__groupHeader===!0)};X=K2(D);let V=X.gap;J.setVirtualTotalFn(()=>{let _=J.dataManager.getTotal();return X.getTotalRows(_)});let b=U.item,T=Y.horizontal?b.width:b.height,G={containerWidth:J.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof T==="function")J.setSizeConfig((_)=>{let N=G.containerWidth-2,E=(G.columns-1)*G.gap,W=(N-E)/G.columns,O={containerWidth:G.containerWidth,columns:G.columns,gap:G.gap,columnWidth:W,row:X.getRow(_),column:X.getCol(_),totalRows:X.getTotalRows(J.dataManager.getTotal()),totalColumns:G.columns};return T(_,O)+G.gap});else if(V>0)J.setSizeConfig(T+V);J.rebuildSizeCache(),K.root.classList.add(`${A}--grid`);let L=J.getContainerWidth(),M=U.item.template,y=()=>{Q=x0(K.items,M,J.sizeCache,X,A,L,()=>J.dataManager.getTotal(),Y.ariaIdPrefix,Y.horizontal),J.replaceRenderer(Q)};y(),J.methods.set("_getGridLayout",()=>X),J.methods.set("_getGridConfig",()=>D),J.methods.set("_replaceGridRenderer",(_)=>{Q=_}),J.methods.set("_updateGridLayoutForGroups",(_)=>{X.update({isHeaderFn:_});let N=J.dataManager.getTotal(),E=0;for(let W=0;W<N;W++)if(X.getCol(W)===0){let O=J.sizeCache.getSize(W);E+=O}if(J.sizeCache.getTotalSize=()=>E,Y.horizontal)J.dom.content.style.width=`${E}px`;else J.dom.content.style.height=`${E}px`;y()}),J.methods.set("updateGrid",(_)=>{if(_.columns!==void 0){if(!Number.isInteger(_.columns)||_.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");D.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");D.gap=_.gap}if(X)X.update(D);let N=J.getContainerWidth();if(G.containerWidth=N,G.columns=D.columns,G.gap=D.gap??0,Q)Q.updateContainerWidth(N);J.rebuildSizeCache(),J.updateContentSize(J.sizeCache.getTotalSize()),J.updateCompressionMode();for(let E=0;E<J.contentSizeHandlers.length;E++)J.contentSizeHandlers[E]();if(Q)Q.clear();J.forceRender()});let H=()=>{if(J.state.isDestroyed)return;let _=J.scrollController.getScrollTop(),N=J.state.viewportState.containerSize,E=J.getVirtualTotal(),W={start:0,end:0};if(E===0||N===0)W.start=0,W.end=0;else{W.start=Math.max(0,J.sizeCache.indexAtOffset(_));let P=J.sizeCache.indexAtOffset(_+N);if(P<E-1)P++;W.end=Math.min(E-1,Math.max(0,P))}let O=Y.overscan??3,z={start:Math.max(0,W.start-O),end:Math.min(E-1,W.end+O)};J.state.viewportState.scrollPosition=_,J.state.viewportState.visibleRange=W,J.state.viewportState.renderRange=z;let I=J.state.lastRenderRange,n=J.state.viewportState.isCompressed;if(z.start===I.start&&z.end===I.end){if(n)Q.updatePositions(J.getCompressionContext());return}let Z=J.dataManager.getTotal(),u=X.getItemRange(z.start,z.end,Z),g=J.dataManager.getItemsInRange(u.start,u.end),C=n?J.getCompressionContext():void 0;Q.render(g,u,new Set,-1,C),J.state.lastRenderRange={...z},q.emit("range:change",{range:z})},$=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},H()};if(J.setRenderFns(H,$),J.resizeHandlers.push((_,N)=>{if(Q)Q.updateContainerWidth(_)}),J.methods.set("scrollToIndex",(_,N)=>{let E=Math.floor(_/j.columns),{align:W,behavior:O}=ej(N),z=J.dataManager.getState(),I=X.getTotalRows(z.total),n=Math.max(0,Math.min(E,I-1)),Z=P0(n,J.sizeCache,J.state.viewportState.containerSize,I,W,J.getCachedCompression());if(O==="smooth")J.scrollController.scrollTo(Z);else J.scrollController.scrollTo(Z)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${A}--grid`)})},destroy(){if(Q)Q.destroy(),Q=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,Q)=>{if(Q==="none")return j;let J=new Set(j.selected);if(Q==="single"){if(J.clear(),X.length>0)J.add(X[0])}else for(let K of X)J.add(K);return{...j,selected:J}},d0=(j,X)=>{let Q=new Set(j.selected);for(let J of X)Q.delete(J);return{...j,selected:Q}},z0=(j,X,Q)=>{if(Q==="none")return j;if(j.selected.has(X))return d0(j,[X]);else return m0(j,[X],Q)},B2=(j,X,Q)=>{if(Q!=="multiple")return j;return{...j,selected:new Set(X.map((J)=>J.id))}},U2=(j)=>({...j,selected:new Set}),E2=(j,X)=>{return j.focusedIndex=X,j},F2=(j,X,Q=!0)=>{if(X===0)return j;let J=j.focusedIndex-1;if(J<0)J=Q?X-1:0;return j.focusedIndex=J,j},L2=(j,X,Q=!0)=>{if(X===0)return j;let J=j.focusedIndex+1;if(J>=X)J=Q?0:X-1;return j.focusedIndex=J,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)},v0=(j)=>{return Array.from(j.selected)},w0=(j,X)=>{let Q=[];for(let J of j.selected){let K=X(J);if(K)Q.push(K)}return Q};var Fj=(j)=>{let X=j?.mode??"single",Q=j?.initial,J=Z2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:Y,emitter:U,config:A}=q,{classPrefix:B,ariaIdPrefix:D}=A;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 V=new Map,b=()=>{V.clear();let _=q.dataManager.getTotal();for(let N=0;N<_;N++){let E=q.dataManager.getItem(N);if(E)V.set(E.id,N)}};b();let{renderIfNeeded:T,forceRender:G}=q.getRenderFns(),L=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((N)=>{let E=N,W=E.dataset.id;if(W!==void 0){let O=/^\d+$/.test(W)?parseInt(W,10):W,z=J.selected.has(O),n=parseInt(E.dataset.index??"-1",10)===J.focusedIndex;E.classList.toggle(`${B}-item--selected`,z),E.classList.toggle(`${B}-item--focused`,n),E.ariaSelected=z?"true":"false"}})},M=()=>{if(q.state.isDestroyed)return;T(),L()},y=()=>{if(q.state.isDestroyed)return;G(),L()};q.setRenderFns(M,y);let H=()=>{L();let _=(N)=>{let E=V.get(N);if(E===void 0)return;return q.dataManager.getItem(E)};U.emit("selection:change",{selected:v0(J),items:w0(J,_)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${B}-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",Y.root.appendChild(K);let $=K;U.on("selection:change",({selected:_})=>{let N=_.length;if(N===0)$.textContent="";else if(N===1)$.textContent="1 item selected";else $.textContent=`${N} items selected`}),q.clickHandlers.push((_)=>{if(q.state.isDestroyed)return;let E=_.target.closest("[data-index]");if(!E)return;let W=parseInt(E.dataset.index??"-1",10);if(W<0)return;let O=q.dataManager.getItem(W);if(!O)return;U.emit("item:click",{item:O,index:W,event:_}),J=E2(J,W),Y.root.setAttribute("aria-activedescendant",`${D}-item-${W}`),J=z0(J,O.id,X),H()}),q.keydownHandlers.push((_)=>{if(q.state.isDestroyed)return;let N=q.dataManager.getTotal(),E=J.focusedIndex,W=!1,O=!1,z=J;switch(_.key){case"ArrowUp":z=F2(J,N),W=!0,O=!0;break;case"ArrowDown":z=L2(J,N),W=!0,O=!0;break;case"Home":z=O2(J,N),W=!0,O=!0;break;case"End":z=b2(J,N),W=!0,O=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let I=q.dataManager.getItem(J.focusedIndex);if(I)z=z0(J,I.id,X);W=!0}break}if(W){_.preventDefault(),J=z;let I=J.focusedIndex;if(I>=0){let n=q.dataManager.getState(),Z=P0(I,q.sizeCache,q.state.viewportState.containerSize,n.total,"center",q.getCachedCompression());q.scrollController.scrollTo(Z),Y.root.setAttribute("aria-activedescendant",`${D}-item-${I}`)}else Y.root.removeAttribute("aria-activedescendant");if(O){let{selected:n}=J;if(E>=0&&E!==I){let Z=q.dataManager.getItem(E);if(Z)q.renderer.updateItemClasses(E,n.has(Z.id),!1)}if(I>=0){let Z=q.dataManager.getItem(I);if(Z)q.renderer.updateItemClasses(I,n.has(Z.id),!0)}}else{y();let n=(Z)=>{let u=V.get(Z);if(u===void 0)return;return q.dataManager.getItem(u)};U.emit("selection:change",{selected:v0(J),items:w0(J,n)})}}}),q.methods.set("select",(..._)=>{J=m0(J,_,X),H()}),q.methods.set("deselect",(..._)=>{J=d0(J,_),H()}),q.methods.set("toggleSelect",(_)=>{J=z0(J,_,X),H()}),q.methods.set("selectAll",()=>{if(X!=="multiple")return;let _=q.getAllLoadedItems();J=B2(J,_,X),b(),H()}),q.methods.set("clearSelection",()=>{J=U2(J);let{renderRange:_,isCompressed:N}=q.state.viewportState,E=q.getItemsForRange(_),W=N?q.getCompressionContext():void 0;q.renderer.render(E,_,J.selected,J.focusedIndex,W),U.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return v0(J)}),q.methods.set("getSelectedItems",()=>{return w0(J,(N)=>{let E=V.get(N);if(E===void 0)return;return q.dataManager.getItem(E)})}),q.destroyHandlers.push(()=>{if($&&$.parentNode)$.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var Lj=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let X=j.scrollController.getScrollTop(),Q=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),q=K&&K().length>0?K():void 0;if(J===0){let B={index:0,offsetInItem:0};if(q)B.selectedIds=q;return B}let Y,U;if(Q.isCompressed){let D=X/Q.virtualSize*J;Y=Math.max(0,Math.min(Math.floor(D),J-1)),U=(D-Y)*j.sizeCache.getSize(Y)}else Y=j.sizeCache.indexAtOffset(X),U=X-j.sizeCache.getOffset(Y);U=Math.max(0,U);let A={index:Y,offsetInItem:U};if(q)A.selectedIds=q;return A}),j.methods.set("restoreScroll",(X)=>{let{index:Q,offsetInItem:J,selectedIds:K}=X,q=j.getCachedCompression(),Y=j.getVirtualTotal();if(Y===0)return;let U=Math.max(0,Math.min(Q,Y-1)),A;if(q.isCompressed){let D=j.sizeCache.getSize(U),V=D>0?J/D:0;A=(U+V)/Y*q.virtualSize}else A=j.sizeCache.getOffset(U)+J;let B=Math.max(0,q.virtualSize-j.state.viewportState.containerSize);if(A=Math.max(0,Math.min(A,B)),j.scrollController.scrollTo(A),K&&K.length>0){let D=j.methods.get("select");if(D)D(...K)}})}}};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,z0 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,w0 as getSelectedItems,v0 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,C0 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,k0 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 W=0;W<Z;W++)Q[W+1]=Q[W]+j(W)};K(q);let X=(Z)=>{if(J===0)return 0;if(Z<=0)return 0;if(Z>=Q[J])return J-1;let W=0,D=J-1;while(W<D){let Y=W+D+1>>>1;if(Q[Y]<=Z)W=Y;else D=Y-1}return W};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 G=J.indexAtOffset(j),A=J.indexAtOffset(j+q);if(A<Q-1)A++;return X.start=Math.max(0,G),X.end=Math.min(Q-1,Math.max(0,A)),X}let{virtualSize:Z}=K,D=j/Z*Q,Y=Math.floor(D),N=u0(J,Math.max(0,Y),q,Q),M=Math.ceil(D)+N,L=Z-q-j;if(L<=q&&L>=-1){let G=r0(J,q,Q),A=Math.max(0,Q-G),E=Math.max(0,Math.min(1,1-L/q));Y=Math.floor(Y+(A-Y)*E),M=L<=1?Q-1:Math.min(Q-1,Y+N)}return X.start=Math.max(0,Y),X.end=Math.min(Q-1,Math.max(0,M)),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:W}=X,D=W-K,Y=D-q;if(Y<=K&&Y>=-1){if(q>=D-1){let _=J.getTotalSize()-J.getOffset(j);return K-_}let L=r0(J,K,Q),G=Math.max(0,Q-L),E=q/W*Q,C=Math.max(0,Math.min(1,1-Y/K)),$=J.getOffset(j)-J.getOffset(G),T=J.getOffset(j)-M2(J,E,Q);return T+($-T)*C}let N=q/W,M=J.getTotalSize(),F=N*M;return J.getOffset(j)-F},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 W=q.getSize(j);switch(X){case"center":Z-=(J-W)/2;break;case"end":Z-=J-W;break}let D=K.virtualSize-J;return Math.max(0,Math.min(Z,D))},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 WJ=(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,W,D=!1)=>{let Y=WJ(),N=new Map,M=X,F=!1,L=null,G=0,A="",E=(P)=>{if(L&&G===P)return L;return L=A0(P,J),G=P,L},C={selected:!1,focused:!1},$=(P,w)=>{return C.selected=P,C.focused=w,C},T=`${K}-item ${K}-grid-item`,_=`${K}-item--selected`,U=`${K}-item--focused`,O=(P,w)=>{if(typeof w==="string")P.innerHTML=w;else P.replaceChildren(w)},y=(P,w,c)=>{P.classList.toggle(_,w),P.classList.toggle(U,c)},H=(P,w)=>{let c=Q.getRow(P);if(w){let t=w.totalItems,s=E(t);if(s.isCompressed)return v0(c,w.scrollPosition,J,t,w.containerSize,s,w.rangeStart)}return J.getOffset(c)},b=(P,w,c)=>{let t=P.dataset.id?.startsWith("__group_header"),s=t?0:Q.getCol(w),n=t?0:Q.getColumnOffset(s,M),Q0;if(F){let l=Q.getRow(w),p=0,r=new Set;for(let K0=0;K0<w;K0++){let o=Q.getRow(K0);if(o<l&&!r.has(o)){let B0=J.getSize(K0);p+=B0,r.add(o)}}Q0=p}else Q0=H(w,c);if(D)P.style.transform=`translate(${Math.round(Q0)}px, ${Math.round(n)}px)`;else P.style.transform=`translate(${Math.round(n)}px, ${Math.round(Q0)}px)`},z=(P,w)=>{let c=P.dataset.id?.startsWith("__group_header"),t=c?M:Q.getColumnWidth(M),s;if(F||c)s=J.getSize(w)-Q.gap;else{let n=Q.getRow(w);s=J.getSize(n)-Q.gap}P.style.width=`${t}px`,P.style.height=`${s}px`},i=(P,w,c,t,s)=>{let n=Y.acquire(),Q0=$(c,t);if(n.className=T,n.dataset.index=String(P),n.dataset.id=String(w.id),n.dataset.row=String(Q.getRow(P)),n.dataset.col=String(Q.getCol(P)),n.ariaSelected=String(c),W)n.id=`${W}-item-${P}`;if(Z)A=String(Z()),n.setAttribute("aria-setsize",A),n.setAttribute("aria-posinset",String(P+1));z(n,P);let l=q(w,P,Q0);return O(n,l),y(n,c,t),b(n,P,s),n},v=(P,w,c,t,s)=>{if(w.start===0&&P.length>0)F=R0(P[0]);for(let[p,r]of N)if(p<w.start||p>w.end)r.element.remove(),Y.release(r.element),N.delete(p);let n=!1;if(Z){let p=String(Z());n=p!==A,A=p}let Q0=document.createDocumentFragment(),l=[];for(let p=w.start;p<=w.end;p++){let r=p-w.start,K0=P[r];if(!K0){console.warn(`⚠️ RENDER: Missing item at index ${p} (range: ${w.start}-${w.end}, items.length: ${P.length})`);continue}let o=c.has(K0.id),B0=p===t,X0=N.get(p);if(X0){let S=X0.element.dataset.id,d=String(K0.id);if(S!==d){let a=$(o,B0),Z0=q(K0,p,a);O(X0.element,Z0),X0.element.dataset.id=d,X0.element.dataset.row=String(Q.getRow(p)),X0.element.dataset.col=String(Q.getCol(p)),z(X0.element,p)}if(y(X0.element,o,B0),X0.element.ariaSelected=String(o),b(X0.element,p,s),n)X0.element.setAttribute("aria-setsize",A)}else{let S=i(p,K0,o,B0,s);Q0.appendChild(S),l.push({index:p,element:S})}}if(l.length>0){j.appendChild(Q0);for(let{index:p,element:r}of l)N.set(p,{index:p,element:r})}},m=(P)=>{for(let[w,c]of N)b(c.element,w,P)},B=(P,w,c,t)=>{let s=N.get(P);if(s){let n=$(c,t),Q0=q(w,P,n);O(s.element,Q0),y(s.element,c,t),s.element.dataset.id=String(w.id),s.element.ariaSelected=String(c),z(s.element,P)}},R=(P,w,c)=>{let t=N.get(P);if(t)y(t.element,w,c)},k=(P)=>{return N.get(P)?.element},h=(P)=>{if(Math.abs(P-M)<1)return;M=P;for(let[w,c]of N)z(c.element,w),b(c.element,w)},I=()=>{for(let[,P]of N)P.element.remove(),Y.release(P.element);N.clear()};return{render:v,updatePositions:m,updateItem:B,updateItemClasses:R,getElement:k,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],W=q-Z.position,D=J-Z.time;j.velocity=D>0?Math.abs(W)/D: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=(W,D)=>{if(!j[W])j[W]=new Set;return j[W].add(D),()=>J(W,D)},J=(W,D)=>{j[W]?.delete(D)};return{on:q,off:J,emit:(W,D)=>{j[W]?.forEach((Y)=>{try{Y(D)}catch(N){console.error(`[vlist] Error in event handler for "${String(W)}":`,N)}})},once:(W,D)=>{let Y=(N)=>{J(W,Y),D(N)};return q(W,Y)},clear:(W)=>{if(W)delete j[W];else for(let D in j)delete j[D]},listenerCount:(W)=>{return j[W]?.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 W=document.createElement("div");if(W.className=`${q}-items`,W.style.position="relative",Q)W.style.height="100%";else W.style.width="100%";return Z.appendChild(W),X.appendChild(Z),K.appendChild(X),j.appendChild(K),{root:K,viewport:X,content:Z,items:W}};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),W=X+Z;K.start=Math.max(0,X),K.end=Math.min(Q-1,Math.max(0,W))},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),W=q.getSize(X),D=Math.max(0,q.getTotalSize()-J),Y;switch(K){case"center":Y=Z-(J-W)/2;break;case"end":Y=Z-J+W;break;default:Y=Z}return Math.max(0,Math.min(Y,D))};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:W,sharedState:D,isHorizontal:Y,classPrefix:N,contentSizeHandlers:M,afterScroll:F,clickHandlers:L,keydownHandlers:G,resizeHandlers:A,destroyHandlers:E,methods:C,onScrollFrame:$,resizeObserver:T,renderRange:_}=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:(U,O,y,H,b)=>{j.ss=y,j.fi=H,j.ffn()},updateItemClasses:(U,O,y)=>{let H=Z.get(U);if(!H)return;H.classList.toggle(`${N}-item--selected`,O),H.classList.toggle(`${N}-item--focused`,y),H.ariaSelected=O?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(U)=>Z.get(U)??null,clear:()=>{},destroy:()=>{}}},set renderer(U){},get dataManager(){return j.dm},set dataManager(U){j.dm=U},get scrollController(){return j.sc},set scrollController(U){j.sc=U},state:D,getContainerWidth(){return j.cw},afterScroll:F,clickHandlers:L,keydownHandlers:G,resizeHandlers:A,contentSizeHandlers:M,destroyHandlers:E,methods:C,replaceTemplate(U){j.at=U},replaceRenderer(U){},replaceDataManager(U){j.dm=U},replaceScrollController(U){j.sc=U},getItemsForRange(U){let{dm:O,it:y}=j,H=[];for(let b=U.start;b<=U.end;b++){let z=O?O.getItem(b):y[b];if(z)H.push(z)}return H},getAllLoadedItems(){let U=j.dm;if(U){let O=U.getTotal(),y=[];for(let H=0;H<O;H++){let b=U.getItem(H);if(b)y.push(b)}return y}return[...j.it]},getVirtualTotal(){return j.vtf()},getCachedCompression(){let U=j.hc;return{isCompressed:!1,actualSize:U.getTotalSize(),virtualSize:U.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:j.ls,totalItems:j.vtf(),containerSize:j.ch,rangeStart:_.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,U]of Z)U.remove(),W.release(U);Z.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(U,O){j.rfn=U,j.ffn=O},setVirtualTotalFn(U){j.vtf=U},rebuildSizeCache(U){j.hc.rebuild(U??j.vtf())},setSizeConfig(U){j.hc=y0(U,j.vtf())},updateContentSize(U){let O=`${U}px`;if(Y)J.content.style.width=O;else J.content.style.height=O},updateCompressionMode(){},setVisibleRangeFn(U){j.gvr=U},setScrollToPosFn(U){j.gsp=U},setPositionElementFn(U){j.pef=U},setScrollFns(U,O){j.sgt=U,j.sst=(y)=>{O(y),$()}},setScrollTarget(U){j.st.removeEventListener("scroll",$),j.st=U,j.st.addEventListener("scroll",$,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(U){j.gcw=U.width,j.gch=U.height,j.cw=U.width(),j.ch=U.height(),D.viewportState.containerSize=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:W}=q,D=()=>{j.hc.rebuild(j.vtf()),W(),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,N)=>{let M=j.it,F=[],L=Math.max(0,Y),G=Math.min(N,M.length-1);for(let A=L;A<=G;A++)F.push(M[A]);return F},setTotal:(Y)=>{},setItems:(Y,N=0,M)=>{let F=j.it;if(N===0&&(M!==void 0||F.length===0))j.it=Y;else{let L=N+Y.length;if(F.length<L)F.length=L;for(let G=0;G<Y.length;G++)F[N+G]=Y[G]}if(j.ii)D()},updateItem:(Y,N)=>{let M=j.it;if(Y<0||Y>=M.length)return!1;let F=M[Y];if(!F)return!1;M[Y]={...F,...N};let L=Q.get(Y);if(L)Z(L,j.at(M[Y],Y,K)),L.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)D();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),W(),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,W=!1,D={use(Y){if(W)throw Error("[vlist/builder] Cannot call .use() after .build()");return Z.set(Y.name,Y),D},build(){if(W)throw Error("[vlist/builder] .build() can only be called once");return W=!0,JJ(j,Z,q,K,X??null)}};return D};function JJ(j,q,J,Q,K){let{item:X,items:Z,overscan:W=tj,classPrefix:D=ej,ariaLabel:Y,reverse:N=!1,scroll:M}=j,F=M,L=F?.wheel??!0,G=F?.wrap??!1,A=N,E=`${D}-${jJ++}`,C=Q??K,$=Q==null&&K!=null,T=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,_=J?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,U={overscan:W,classPrefix:D,reverse:A,wrap:G,horizontal:J,ariaIdPrefix:E},O=Array.from(q.values()).sort((V,f)=>(V.priority??50)-(f.priority??50)),y=new Set(O.map((V)=>V.name));for(let V of O)if(V.conflicts){for(let f of V.conflicts)if(y.has(f))throw Error(`[vlist/builder] ${V.name} and ${f} cannot be combined`)}if(A){if(y.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let H=I2(j.container),b=p2(H,D,Y,J);if(F?.wheel===!1)if(J)b.viewport.style.overflowX="hidden";else b.viewport.style.overflow="hidden";if(F?.scrollbar==="none")b.viewport.classList.add(`${D}-viewport--no-scrollbar`);let z=o0(),i=Z||[],v=$?n0(K,i.length):y0(C,i.length),m=h2(),B={it:i,hc:v,ch:b.viewport.clientHeight,cw:b.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?()=>b.viewport.scrollLeft:()=>b.viewport.scrollTop,sst:J?(V)=>{b.viewport.scrollLeft=V}:(V)=>{b.viewport.scrollTop=V},sab:(V=2)=>{let f=B.hc.getTotalSize();return B.ls+B.ch>=f-V},sic:!1,rfn:null,ffn:null,gvr:(V,f,g,x,j0)=>{u2(V,f,g,x,j0)},gsp:(V,f,g,x,j0)=>{return x2(V,f,g,x,j0)},pef:null,at:X.template,vre:!0,st:b.viewport,wh:null,gcw:()=>B.cw,gch:()=>B.ch};B.vtf=()=>B.dm?B.dm.getTotal():B.it.length;let R=null,k=null,h=!1,I={start:0,end:0},u={start:0,end:0},P={start:-1,end:-1},w={viewportState:{scrollPosition:0,containerSize: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=$?new WeakMap:null,s=$?v:null,n=null,Q0=0,l=!1,p=()=>{if(!$)return;if(l){let V=B.sgt(),f=J?b.viewport.scrollWidth-b.viewport.clientWidth:b.viewport.scrollHeight-b.viewport.clientHeight,g=f>0&&V>=f-2;if(M0(),l=!1,g){let x=Math.max(0,B.hc.getTotalSize()-(J?B.cw:B.ch));if(x>V)B.sst(x),B.ls=x,B.rfn()}}};if($&&s&&t)n=new ResizeObserver((V)=>{if(B.id)return;let f=!1,g=I.start;for(let x of V){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;n.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?b.viewport.scrollWidth-b.viewport.clientWidth:b.viewport.scrollHeight-b.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}}P.start=-1,P.end=-1,B.rfn()});let r={selected:!1,focused:!1},K0=`${D}-item`,o=[],B0=[],X0=[],S=[],d=[],e=[],a=new Map,Z0=(V,f)=>{if(typeof f==="string")V.innerHTML=f;else V.replaceChildren(f)},G0=(V,f)=>{let g=Math.round(B.hc.getOffset(f));if(J)V.style.transform=`translateX(${g}px)`;else V.style.transform=`translateY(${g}px)`};B.pef=G0;let E0=(V,f)=>{let g=m.acquire();g.className=K0;let x=!$||s&&s.isMeasured(V);if(J){if(x)g.style.width=`${B.hc.getSize(V)}px`;else g.style.width="";if(_!=null)g.style.height=`${_}px`}else if(x)g.style.height=`${B.hc.getSize(V)}px`;else g.style.height="";if(g.dataset.index=String(V),g.dataset.id=String(f.id),g.ariaSelected="false",g.id=`${E}-item-${V}`,B.la=String(B.vtf()),g.setAttribute("aria-setsize",B.la),g.setAttribute("aria-posinset",String(V+1)),String(f.id).startsWith("__placeholder_"))g.classList.add(`${D}-item--placeholder`);return Z0(g,B.at(f,V,r)),B.pef(g,V),g},M0=()=>{let V=`${B.hc.getTotalSize()}px`;if(J)b.content.style.width=V;else b.content.style.height=V},W0=()=>{if(B.id)return;let V=B.vtf(),f=J?B.cw:B.ch;if(B.gvr(B.ls,f,B.hc,V,I),g2(I,W,V,u),u.start===P.start&&u.end===P.end){if(B.sic)for(let[J0,N0]of c)B.pef(N0,J0);return}let g=String(V),x=g!==B.la;B.la=g;for(let[J0,N0]of c)if(J0<u.start||J0>u.end)N0.remove(),m.release(N0),c.delete(J0);let j0=document.createDocumentFragment(),q0=[],U0=[];for(let J0=u.start;J0<=u.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,r)),V0.dataset.id=p0;let z2=!$||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(`${D}-item--placeholder`);else V0.classList.remove(`${D}-item--placeholder`);if(cj&&!C2)V0.classList.add(`${D}-item--replaced`),setTimeout(()=>{V0.classList.remove(`${D}-item--replaced`)},300)}B.pef(V0,J0);let s0=B.ss.has(N0.id),dj=J0===B.fi;if(V0.classList.toggle(`${D}-item--selected`,s0),V0.classList.toggle(`${D}-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(`${D}-item--selected`),b0.ariaSelected="true";if(s0)b0.classList.add(`${D}-item--focused`);j0.appendChild(b0),q0.push({index:J0,element:b0})}}if(q0.length>0){b.items.appendChild(j0);for(let{index:J0,element:N0}of q0)c.set(J0,N0)}if($&&n&&s&&t){for(let{index:J0,element:N0}of U0)if(!s.isMeasured(J0))t.set(N0,J0),n.observe(N0)}P.start=u.start,P.end=u.end,w.lastRenderRange.start=u.start,w.lastRenderRange.end=u.end,w.viewportState.scrollPosition=B.ls,w.viewportState.visibleRange.start=I.start,w.viewportState.visibleRange.end=I.end,w.viewportState.renderRange.start=u.start,w.viewportState.renderRange.end=u.end,z.emit("range:change",{range:{start:u.start,end:u.end}})},H0=()=>{P.start=-1,P.end=-1,B.rfn()};B.rfn=W0,B.ffn=H0;let O0=()=>{if(B.id)return;let V=B.sgt(),f=V>=B.ls?"down":"up";if(B.vt=V2(B.vt,V),!b.root.classList.contains(`${D}--scrolling`))b.root.classList.add(`${D}--scrolling`);h=!0,B.ls=V,B.rfn(),z.emit("scroll",{scrollPosition:V,direction:f}),z.emit("velocity:change",{velocity:B.vt.velocity,reliable:B.vt.sampleCount>=f2});for(let g=0;g<o.length;g++)o[g](V,f);if(k)clearTimeout(k);k=setTimeout(()=>{b.root.classList.remove(`${D}--scrolling`),h=!1,B.vt.velocity=0,B.vt.sampleCount=0,z.emit("velocity:change",{velocity:0,reliable:!1}),p()},F?.idleTimeout??s2)},Y0=null;if(B.st.addEventListener("scroll",O0,{passive:!0}),L&&!J&&!T)Y0=(V)=>{V.preventDefault();let f=B.sgt(),g=V.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(z.emit("scroll",{scrollPosition:x,direction:j0}),!b.root.classList.contains(`${D}--scrolling`))b.root.classList.add(`${D}--scrolling`);if(h=!0,k)clearTimeout(k);k=setTimeout(()=>{b.root.classList.remove(`${D}--scrolling`),h=!1,B.vt.velocity=0,B.vt.sampleCount=0,z.emit("velocity:change",{velocity:0,reliable:!1}),p()},F?.idleTimeout??s2)},B.wh=Y0,b.viewport.addEventListener("wheel",Y0,{passive:!1});else if(J&&L)Y0=(V)=>{if(V.deltaX)return;V.preventDefault(),b.viewport.scrollLeft+=V.deltaY},B.wh=Y0,b.viewport.addEventListener("wheel",Y0,{passive:!1});let F0=(V)=>{let g=V.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;z.emit("item:click",{item:j0,index:x,event:V})}}}for(let x=0;x<B0.length;x++)B0[x](V)},D0=(V)=>{let g=V.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;z.emit("item:dblclick",{item:j0,index:x,event:V})}}}},L0=(V)=>{for(let f=0;f<X0.length;f++)X0[f](V)};b.items.addEventListener("click",F0),b.items.addEventListener("dblclick",D0),b.root.addEventListener("keydown",L0);let P0=new ResizeObserver((V)=>{if(B.id)return;for(let f of V){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(),z.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(b.viewport);let D2={dom:b,emitter:z,resolvedConfig:U,rawConfig:j,rendered:c,pool:m,itemState:r,sharedState:w,renderRange:u,isHorizontal:J,classPrefix:D,contentSizeHandlers:d,afterScroll:o,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 V of O)if(V.methods)for(let f of V.methods){let g=k2.get(f);if(g)throw Error(`[vlist/builder] Method "${f}" is registered by both "${g}" and "${V.name}"`);k2.set(f,V.name)}for(let V of O)V.setup(_0);if(B.ii=!0,_0.state.isInitialized=!0,M0(),B.rfn(),A&&B.it.length>0){let V=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(V),B.ls=V,B.rfn()}let zj=(V)=>{_0.dataManager.setItems(V,0,V.length)},vj=A?(V)=>{let f=B.sab(2),g=B.it.length;if(_0.dataManager.setItems(V,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()}}:(V)=>{let f=B.it.length;_0.dataManager.setItems(V,f)},wj=A?(V)=>{let f=B.sgt(),g=B.hc.getTotalSize(),x=[...B.it];_0.dataManager.clear(),_0.dataManager.setItems([...V,...x],0);let q0=B.hc.getTotalSize()-g;if(q0>0)B.sst(f+q0),B.ls=f+q0}:(V)=>{let f=[...B.it];_0.dataManager.clear(),_0.dataManager.setItems([...V,...f],0)},fj=(V,f)=>{_0.dataManager.updateItem(V,f)},Sj=(V)=>{_0.dataManager.removeItem(V)},Ij=async()=>{if(_0.dataManager.reload)await _0.dataManager.reload()},a0=()=>{if(R!==null)cancelAnimationFrame(R),R=null},pj=(V,f,g)=>{if(a0(),Math.abs(f-V)<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=V+(f-V)*m2(J0);if(B.sst(N0),B.ls=N0,B.rfn(),J0<1)R=requestAnimationFrame(j0);else R=null};R=requestAnimationFrame(j0)},hj=(V,f)=>{let{align:g,behavior:x,duration:j0}=d2(f),q0=B.vtf(),U0=V;if(G&&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=(V,f)=>{return z.on(V,f)},xj=(V,f)=>{z.off(V,f)},mj=()=>{if(B.id)return;if(B.id=!0,_0.state.isDestroyed=!0,b.items.removeEventListener("click",F0),b.root.removeEventListener("keydown",L0),B.st.removeEventListener("scroll",O0),P0.disconnect(),n)n.disconnect(),n=null;if(B.wh)b.viewport.removeEventListener("wheel",B.wh);if(k)clearTimeout(k);for(let V=0;V<e.length;V++)e[V]();for(let V of O)if(V.destroy)V.destroy();a0();for(let[,V]of c)V.remove(),m.release(V);c.clear(),m.clear(),z.clear(),b.root.remove()},R2={get element(){return b.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[V,f]of a){if(V==="setItems"||V==="appendItems"||V==="prependItems"||V==="updateItem"||V==="removeItem"||V==="reload"||V==="scrollToIndex"||V==="scrollToItem"||V==="cancelScroll"||V==="getScrollPosition")continue;R2[V]=f}return R2}e0();var w0=(j,q,J={},Q="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:Z=1000,minThumbSize:W=30,showOnHover:D=!0,hoverZoneWidth:Y=16,showOnViewportEnter:N=!0}=J,M=0,F=0,L=0,G=0,A=!1,E=!1,C=0,$=0,T=0,_=null,U=!1,O=null,y=null,H=K?"width":"height",b=K?"translateX":"translateY",z=K?(o)=>o.clientX:(o)=>o.clientY,i=K?"left":"top",v=document.createElement("div"),m=document.createElement("div"),B=D?document.createElement("div"):null,R=()=>{if(v.className=`${Q}-scrollbar`,m.className=`${Q}-scrollbar-thumb`,K)v.classList.add(`${Q}-scrollbar--horizontal`);if(v.appendChild(m),j.appendChild(v),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)}},k=()=>{if(_)clearTimeout(_),_=null},h=()=>{if(!X)return;k(),_=setTimeout(u,Z)},I=()=>{if(M<=F)return;if(k(),!U)v.classList.add(`${Q}-scrollbar--visible`),U=!0;if(X&&!A&&!E)h()},u=()=>{if(A||E)return;v.classList.remove(`${Q}-scrollbar--visible`),U=!1},P=(o,B0)=>{M=o,F=B0;let X0=M>F;if(v.style.display=X0?"":"none",!X0){u();return}let S=F/M;L=Math.max(W,S*F),m.style[H]=`${L}px`,G=F-L,w(T)},w=(o)=>{if(T=o,M<=F||G<=0)return;let B0=M-F,S=Math.min(1,Math.max(0,o/B0))*G;m.style.transform=`${b}(${S}px)`},c=(o)=>{if(o.target===m)return;let B0=v.getBoundingClientRect(),d=z(o)-B0[i]-L/2,a=Math.max(0,Math.min(d,G))/G,Z0=M-F,G0=a*Z0;q(G0),I()},t=(o)=>{o.preventDefault(),o.stopPropagation(),A=!0,C=z(o),$=T,k(),v.classList.add(`${Q}-scrollbar--dragging`),document.addEventListener("mousemove",s),document.addEventListener("mouseup",n)},s=(o)=>{if(!A)return;let B0=z(o)-C,X0=G>0?B0/G:0,S=M-F,d=X0*S,e=Math.max(0,Math.min($+d,S)),Z0=e/S*G;if(m.style.transform=`${b}(${Z0}px)`,y=e,O===null)O=requestAnimationFrame(()=>{if(y!==null)q(y);O=null})},n=()=>{if(A=!1,O!==null)cancelAnimationFrame(O),O=null;if(y!==null)q(y),y=null;if(v.classList.remove(`${Q}-scrollbar--dragging`),X&&!E)h();document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",n)},Q0=()=>{if(N)I()},l=()=>{if(!A){if(E=!1,X)h()}},p=()=>{E=!0,k(),I()},r=()=>{if(E=!1,!A&&X)h()},K0=()=>{if(k(),O!==null)cancelAnimationFrame(O),O=null;if(v.removeEventListener("click",c),v.removeEventListener("mouseenter",p),v.removeEventListener("mouseleave",r),m.removeEventListener("mousedown",t),j.removeEventListener("mouseenter",Q0),j.removeEventListener("mouseleave",l),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",n),B){if(B.removeEventListener("mouseenter",p),B.removeEventListener("mouseleave",r),B.parentNode)B.parentNode.removeChild(B)}if(v.parentNode)v.parentNode.removeChild(v)};if(R(),v.addEventListener("click",c),v.addEventListener("mouseenter",p),v.addEventListener("mouseleave",r),m.addEventListener("mousedown",t),j.addEventListener("mouseenter",Q0),j.addEventListener("mouseleave",l),B)B.addEventListener("mouseenter",p),B.addEventListener("mouseleave",r);return{show:I,hide:u,updateBounds:P,updatePosition:w,isVisible:()=>U,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 W=J.getCachedCompression();q.updateBounds(W.virtualSize,J.state.viewportState.containerSize);let D=q;J.afterScroll.push((Y,N)=>{D.updatePosition(Y),D.show()}),J.resizeHandlers.push((Y,N)=>{if(D){let M=J.getCachedCompression();D.updateBounds(M.virtualSize,J.state.viewportState.containerSize)}}),J.contentSizeHandlers.push(()=>{if(D){let Y=J.getCachedCompression();D.updateBounds(Y.virtualSize,J.state.viewportState.containerSize)}}),J.destroyHandlers.push(()=>{if(D)D.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],W=q-Z.position,D=J-Z.time;j.velocity=D>0?W/D: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:W,scrollElement:D,horizontal:Y=!1}=q,N=!!D,M=0,F=0,L=N?Y?window.innerWidth:window.innerHeight:Y?j.clientWidth:j.clientHeight,G=q.compressed??!1,A=q.compression,E=Zj(),C=!1,$=null,_=J2(()=>{let l=Y?j.scrollLeft:j.scrollTop,p=l>=M?"down":"up";if(E=j2(E,l),M=l,Z)Z({scrollTop:M,direction:p,velocity:E.velocity});z()}),O=J2(()=>{let l=j.getBoundingClientRect(),p=Y?Math.max(0,-l.left):Math.max(0,-l.top),r=p>=M?"down":"up";if(E=j2(E,p),M=p,!C)C=!0;if(Z)Z({scrollTop:M,direction:r,velocity:E.velocity});z()}),y=(l)=>{l.preventDefault()},H=(l)=>{if(l.deltaX)return;l.preventDefault(),j.scrollLeft+=l.deltaY},b=(l)=>{if(!G)return;l.preventDefault();let p=(Y?l.deltaX||l.deltaY:l.deltaY)*Q,r=M+p;if(K)r=M+p*0.3;if(r=Math.max(0,Math.min(r,F)),r!==M){let o=r>=M?"down":"up";if(E=j2(E,r),M=r,!C)C=!0;if(Z)Z({scrollTop:M,direction:o,velocity:E.velocity});z()}},z=()=>{if($)clearTimeout($);$=setTimeout(()=>{if(C=!1,E=Zj(M),W)W()},X)},i=(l)=>{if(G)return;if(G=!0,A=l,F=l.virtualSize-L,N)return;if(_.cancel(),j.removeEventListener("scroll",_),!J)j.removeEventListener("wheel",y);else if(Y)j.removeEventListener("wheel",H);if(Y)j.style.overflowX="hidden";else j.style.overflow="hidden";if(J)j.addEventListener("wheel",b,{passive:!1});let p=Y?j.scrollLeft:j.scrollTop;if(p>0){let r=Y?A?.actualSize??j.scrollWidth:A?.actualSize??j.scrollHeight;M=p/r*F}if(Y)j.scrollLeft=0;else j.scrollTop=0},v=()=>{if(!G)return;if(G=!1,N){A=void 0;return}if(j.removeEventListener("wheel",b),Y)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!J)j.addEventListener("wheel",y,{passive:!1});else if(Y)j.addEventListener("wheel",H,{passive:!1});if(A&&M>0){let p=M/F*(A.actualSize-L);if(Y)j.scrollLeft=p;else j.scrollTop=p}A=void 0},m=()=>{if(N||G)return M;return Y?j.scrollLeft:j.scrollTop},B=(l,p=!1)=>{let r=Math.max(0,Math.min(l,F||1/0));if(N){let K0=j.getBoundingClientRect();if(Y){let o=K0.left+window.scrollX;window.scrollTo({left:o+r,behavior:p?"smooth":"auto"})}else{let o=K0.top+window.scrollY;window.scrollTo({top:o+r,behavior:p?"smooth":"auto"})}}else if(G){if(r===M)return;let o=r>=M?"down":"up";if(E=j2(E,r),M=r,!C)C=!0;if(Z)Z({scrollTop:M,direction:o,velocity:E.velocity});z()}else if(Y)j.scrollTo({left:r,behavior:p?"smooth":"auto"});else j.scrollTo({top:r,behavior:p?"smooth":"auto"})},R=(l)=>{B(m()+l)},k=()=>{return m()<=0},h=(l=0)=>{let p=m(),r=N||G?F:Y?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return p>=r-l},I=()=>{let l=m(),p=N||G?F:Y?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(p<=0)return 0;return Math.min(1,Math.max(0,l/p))},u=(l)=>{if(l.compression)A=l.compression,F=A.virtualSize-L},P=()=>G,w=()=>Math.abs(E.velocity),c=()=>QJ(E),t=()=>C,s=()=>N,n=(l)=>{if(L=l,A)F=A.virtualSize-L},Q0=()=>{if($)clearTimeout($);if(N)O.cancel(),window.removeEventListener("scroll",O);else _.cancel(),j.removeEventListener("scroll",_),j.removeEventListener("wheel",b),j.removeEventListener("wheel",y),j.removeEventListener("wheel",H)};if(N){if(G&&A)F=A.virtualSize-L;window.addEventListener("scroll",O,{passive:!0})}else if(G&&A){if(F=A.virtualSize-L,Y)j.style.overflowX="hidden";else j.style.overflow="hidden";if(J)j.addEventListener("wheel",b,{passive:!1})}else{if(Y)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!J)j.addEventListener("wheel",y,{passive:!1});else if(Y)j.addEventListener("wheel",H,{passive:!1})}return{getScrollTop:m,scrollTo:B,scrollBy:R,isAtTop:k,isAtBottom:h,getScrollPercentage:I,getVelocity:w,isTracking:c,isScrolling:t,updateConfig:u,enableCompression:i,disableCompression:v,isCompressed:P,isWindowMode:s,updateContainerHeight:n,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,W=null,D=[];return{name:"withScale",priority:20,setup(Y){let{dom:N,config:M}=Y,{classPrefix:F,horizontal:L}=M,G=()=>{let $=Y.getVirtualTotal(),T=A0($,Y.sizeCache);if(T.isCompressed&&!J){J=!0,Y.scrollController.enableCompression(T),Y.updateContentSize(T.virtualSize),Y.setScrollFns(()=>q,(v)=>{if(q=v,Q=v,K!==null)cancelAnimationFrame(K),K=null});let _=()=>{let v=Q-q;if(Math.abs(v)<XJ)q=Q,K=null;else{q+=v*qJ;let B=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,B)),K=requestAnimationFrame(_)}Y.scrollController.scrollTo(q)},U=N.viewport,O=(v)=>{v.preventDefault();let B=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(Q=Math.max(0,Math.min(Q+v.deltaY,B)),K===null)K=requestAnimationFrame(_)};U.addEventListener("wheel",O,{passive:!1});let y=()=>{if(W!==null)cancelAnimationFrame(W),W=null},H=(v)=>{if(y(),K!==null)cancelAnimationFrame(K),K=null;let m=v.touches[0];if(!m)return;let B=L?m.clientX:m.clientY;X=B,Z=q,D=[{time:performance.now(),y:B}]},b=(v)=>{v.preventDefault();let m=v.touches[0];if(!m)return;let B=L?m.clientX:m.clientY,R=performance.now();if(D.push({time:R,y:B}),D.length>ZJ)D.shift();let k=X-B,I=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,u=Math.max(0,Math.min(Z+k,I));q=u,Q=u,Y.scrollController.scrollTo(u)},z=(v)=>{let m=performance.now(),B=D.filter((I)=>m-I.time<BJ),R=0;if(B.length>=2){let I=B[0],u=B[B.length-1],P=u.time-I.time;if(P>0)R=(I.y-u.y)/P}if(D=[],Math.abs(R)<KJ)return;let k=R*16,h=()=>{if(k*=YJ,Math.abs(k)<0.5){W=null;return}let u=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,P=q+k;if(P=Math.max(0,Math.min(P,u)),P<=0&&k<0||P>=u&&k>0){q=P,Q=P,Y.scrollController.scrollTo(P),W=null;return}q=P,Q=P,Y.scrollController.scrollTo(P),W=requestAnimationFrame(h)};W=requestAnimationFrame(h)};if(U.addEventListener("touchstart",H,{passive:!0}),U.addEventListener("touchmove",b,{passive:!1}),U.addEventListener("touchend",z,{passive:!0}),U.addEventListener("touchcancel",z,{passive:!0}),Y.destroyHandlers.push(()=>{if(U.removeEventListener("wheel",O),U.removeEventListener("touchstart",H),U.removeEventListener("touchmove",b),U.removeEventListener("touchend",z),U.removeEventListener("touchcancel",z),y(),K!==null)cancelAnimationFrame(K),K=null}),!N.viewport.querySelector(`.${F}-scrollbar-track`)){if(j=w0(N.viewport,(m)=>Y.scrollController.scrollTo(m),{},F,L),!N.viewport.classList.contains(`${F}-viewport--custom-scrollbar`))N.viewport.classList.add(`${F}-viewport--custom-scrollbar`);j.updateBounds(T.virtualSize,Y.state.viewportState.containerSize);let v=j;Y.afterScroll.push((m,B)=>{if(v)v.updatePosition(m),v.show()}),Y.resizeHandlers.push((m,B)=>{if(v){let R=Y.getCachedCompression();v.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:$}};Y.updateCompressionMode=G;let A=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return A()},Y.setVisibleRangeFn(($,T,_,U,O)=>{E=null,C=null;let y=A0(U,_);i0($,T,_,U,y,O)}),Y.setScrollToPosFn(($,T,_,U,O)=>{let y=A0(U,T);return t0($,T,_,U,y,O)});let E=null,C=null;Y.setPositionElementFn(($,T)=>{let _=Y.getVirtualTotal(),U=A0(_,Y.sizeCache);if(U.isCompressed){let O=Y.scrollController.getScrollTop();if(E===null||T<C)C=T,E=Math.round(v0(T,O,Y.sizeCache,_,Y.state.viewportState.containerSize,U));let y=E+Y.sizeCache.getOffset(T)-Y.sizeCache.getOffset(C),H=Y.config.horizontal;$.style.transform=H?`translateX(${y}px)`:`translateY(${y}px)`}else{let O=Math.round(Y.sizeCache.getOffset(T)),y=Y.config.horizontal;$.style.transform=y?`translateX(${O}px)`:`translateY(${O}px)`}}),G(),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(W!==null)cancelAnimationFrame(W),W=null}}};var Q2=(j={})=>{let{chunkSize:q=100,maxCachedItems:J=5000,evictionBuffer:Q=200,onEvict:K}=j,X=new Map,Z=0,W=0,D=(R)=>{let k=X.get(R);if(!k)k={items:Array(q),count:0,lastAccess:Date.now()},X.set(R,k);else k.lastAccess=Date.now();return k},Y=(R)=>{return Math.floor(R/q)},N=(R)=>{return R%q},M=()=>Z,F=(R)=>{Z=R},L=(R)=>{if(R<0||R>=Z)return;let k=Y(R),h=X.get(k);if(!h)return;return h.items[N(R)]},G=(R)=>{if(R<0||R>=Z)return!1;let k=Y(R),h=X.get(k);if(!h)return!1;return h.items[N(R)]!==void 0},A=(R,k)=>{let h=Y(R),I=D(h),u=N(R),P=I.items[u]===void 0;if(I.items[u]=k,P)I.count++,W++;if(R>=Z)Z=R+1},E=(R,k)=>{for(let h=0;h<k.length;h++){let I=k[h];if(I!==void 0)A(R+h,I)}},C=(R)=>{if(R<0||R>=Z)return!1;let k=Y(R),h=X.get(k);if(!h)return!1;let I=N(R);if(h.items[I]===void 0)return!1;if(h.items[I]=void 0,h.count--,W--,h.count===0)X.delete(k);return!0},$=(R,k)=>{let h=[];for(let I=R;I<=k&&I<Z;I++)h.push(L(I));return h},T=(R,k)=>{for(let h=R;h<=k&&h<Z;h++)if(!G(h))return!1;return!0},_=()=>{let R=[],k=null,h=Array.from(X.keys()).sort((I,u)=>I-u);for(let I of h){let u=X.get(I);if(!u)continue;let P=I*q;for(let w=0;w<q;w++){let c=P+w;if(c>=Z)break;if(u.items[w]!==void 0)if(k===null)k={start:c,end:c};else if(c===k.end+1)k.end=c;else R.push(k),k={start:c,end:c};else if(k!==null)R.push(k),k=null}}if(k!==null)R.push(k);return R},U=(R,k)=>{let h=[],I=null;for(let u=R;u<=k&&u<Z;u++)if(!G(u))if(I===null)I={start:u,end:u};else I.end=u;else if(I!==null)h.push(I),I=null;if(I!==null)h.push(I);return h},O=(R)=>{return X.has(R)},y=(R)=>{let k=X.get(R);if(k)k.lastAccess=Date.now()},H=(R,k)=>{if(R>k||X.size===0)return;let h=Date.now(),I=Y(Math.max(0,R)),u=Y(Math.min(Z-1,k));for(let P=I;P<=u;P++){let w=X.get(P);if(w)w.lastAccess=h}},b=(R,k)=>{if(W<=J)return 0;let h=Math.max(0,R-Q),I=Math.min(Z-1,k+Q),u=Y(h),P=Y(I),w=0,c=[];for(let[t,s]of X)if(t<u||t>P)w+=s.count,c.push(t),W-=s.count,X.delete(t);if(w>0&&K)K(w,c);return w},z=()=>{if(W<=J)return 0;let R=Array.from(X.entries()).sort(([,I],[,u])=>I.lastAccess-u.lastAccess),k=0,h=[];for(let[I,u]of R){if(W<=J)break;k+=u.count,W-=u.count,h.push(I),X.delete(I)}if(k>0&&K)K(k,h);return k},i=()=>{return{totalItems:Z,cachedItems:W,cachedChunks:X.size,chunkSize:q,maxCachedItems:J,memoryEfficiency:Z>0?1-W/Z:1}},v=()=>W,m=()=>{X.clear(),W=0};return{chunkSize:q,maxCachedItems:J,getTotal:M,setTotal:F,get:L,has:G,set:A,setRange:E,delete:C,getRange:$,isRangeLoaded:T,getLoadedRanges:_,findUnloadedRanges:U,getChunkIndex:Y,isChunkLoaded:O,touchChunk:y,touchChunksForRange:H,evictDistant:b,evictToLimit:z,getStats:i,getCachedCount:v,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=[],W=q2(q),D=X.start;for(let Y of W){if(Y.end<D)continue;if(Y.start>X.end)break;if(Y.start>D)Z.push({start:D,end:Math.min(Y.start-1,X.end)});if(D=Y.end+1,D>X.end)break}if(D<=X.end)Z.push({start:D,end:X.end});return Z};var X2=(j={})=>{let{maskCharacter:q=t2,maxSampleSize:J=e2}=j,Q=[],K=!1,X=0,Z=(M)=>{if(K||M.length===0)return;let F=Math.min(M.length,J);for(let L=0;L<F;L++){let G=M[L];if(!G||typeof G!=="object")continue;let A={};for(let[E,C]of Object.entries(G)){if(E.startsWith("_")||E==="id")continue;A[E]=String(C??"").length}if(Object.keys(A).length>0)Q.push(A)}K=!0},W=()=>K,D=(M)=>{let F={id:`${jj}${X++}`,[A2]:!0,_index:M};if(Q.length===0)return F.label=q.repeat(12),F;let L=Q[M%Q.length];for(let[G,A]of Object.entries(L))F[G]=q.repeat(Math.max(1,A));return F};return{analyzeStructure:Z,hasAnalyzedStructure:W,generate:D,generateRange:(M,F)=>{let L=[];for(let G=M;G<=F;G++)L.push(D(G));return L},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:W,onItemsLoaded:D,onItemsEvicted:Y}=j,N=Q2({...K,onEvict:(S,d)=>{Y?.(S),U()}}),M=null,F=()=>{if(!M)M=X2(X);return M},L=new Map,G=!1,A,E=!0,C,$=[],T=0,_=new Map,U=()=>{W?.(B())},O=()=>{L.clear();let S=N.getLoadedRanges();for(let d of S)for(let e=d.start;e<=d.end;e++){let a=N.get(e);if(a&&!k0(a))L.set(a.id,e)}},y=(S,d)=>{if(!k0(d))L.set(d.id,S)},H=(S)=>{L.delete(S)},b=(S,d)=>{return`${S}-${d}`},z=()=>N.getTotal(),i=()=>N.getCachedCount(),v=()=>G,m=()=>E,B=()=>({total:N.getTotal(),cached:N.getCachedCount(),isLoading:G,pendingRanges:$,error:A,hasMore:E,cursor:C}),R=()=>N,k=()=>F(),h=(S)=>{let d=N.get(S);if(d!==void 0)return d;if(S>=0&&S<N.getTotal())return F().generate(S);return},I=(S)=>{let d=L.get(S);if(d===void 0)return;return N.get(d)},u=(S)=>{return L.get(S)??-1},P=(S)=>{let d=N.get(S);return d!==void 0&&!k0(d)},w=(S,d)=>{let e=[],a=N.getTotal(),Z0=0,G0=0;N.touchChunksForRange(S,Math.min(d,a-1));for(let E0=S;E0<=d&&E0<a;E0++){let M0=N.get(E0);if(M0!==void 0)e.push(M0),Z0++;else e.push(F().generate(E0)),G0++}return e},c=(S)=>{N.setTotal(S),E=N.getCachedCount()<S,U()},t=(S,d=0,e)=>{if(M&&!M.hasAnalyzedStructure()&&S.length>0)M.analyzeStructure(S);for(let a=0;a<S.length;a++){let Z0=S[a];if(Z0!==void 0){let G0=d+a;N.set(G0,Z0),y(G0,Z0)}}if(e!==void 0)N.setTotal(e);else if(d+S.length>N.getTotal())N.setTotal(d+S.length);if(N.getCachedCount()>=N.getTotal()&&N.getTotal()>0)E=!1;D?.(S,d,N.getTotal()),U()},s=(S,d)=>{let e=L.get(S);if(e===void 0)return!1;let a=N.get(e);if(!a)return!1;let Z0={...a,...d};if(N.set(e,Z0),d.id!==void 0&&d.id!==S)H(S),y(e,Z0);return U(),!0},n=(S)=>{let d=L.get(S);if(d===void 0)return!1;N.delete(d),H(S);let e=N.getTotal();if(e>0)N.setTotal(e-1);return U(),!0},Q0=async(S,d)=>{if(!q)return;let e=b(S,d);if(_.has(e))return;let a=N.getLoadedRanges(),Z0=g0({start:S,end:d},a,N.chunkSize);if(Z0.length===0)return;let G0=N.chunkSize,E0=[];for(let W0 of Z0){let H0=Math.floor(W0.start/G0),O0=Math.floor(W0.end/G0);for(let Y0=H0;Y0<=O0;Y0++){let F0=Y0*G0,D0=F0+G0-1,L0=b(F0,D0);if(!E0.some((P0)=>P0.start===F0)&&!_.has(L0))E0.push({start:F0,end:D0})}}let M0=[];for(let W0 of Z0){let H0=Math.floor(W0.start/G0),O0=Math.floor(W0.end/G0);for(let Y0=H0;Y0<=O0;Y0++){let F0=Y0*G0,D0=F0+G0-1,L0=b(F0,D0);if(_.has(L0)){let P0=_.get(L0);if(!M0.includes(P0))M0.push(P0)}}}for(let W0 of E0){let H0=b(W0.start,W0.end),O0=(async()=>{$.push(W0),G=!0,A=void 0,U();try{let Y0=W0.end-W0.start+1,F0={offset:W0.start,limit:Y0,cursor:void 0},D0=await q.read(F0);if(t(D0.items,W0.start,D0.total),D0.cursor)C=D0.cursor;let L0=W0.start+D0.items.length;if(L0>=T){if(T=L0,D0.hasMore!==void 0)E=D0.hasMore;else if(D0.total!==void 0)E=L0<D0.total}}catch(Y0){A=Y0 instanceof Error?Y0:Error(String(Y0))}finally{_.delete(H0),$=$.filter((Y0)=>Y0.start!==W0.start||Y0.end!==W0.end),G=_.size>0,U()}})();_.set(H0,O0),M0.push(O0)}await Promise.all(M0)},l=async(S,d)=>{if(N.isRangeLoaded(S,d))return;await Q0(S,d)},p=async()=>{if(!q)return;await Q0(0,Z-1)},r=async()=>{if(!q||G||!E)return!1;let S=N.getCachedCount(),d=N.getTotal(),e=S,a=Math.min(e+Z-1,d>0?d-1:e+Z-1);if(e>=d&&d>0)return E=!1,!1;return await Q0(e,a),N.getCachedCount()>S},K0=async()=>{if(N.clear(),N.setTotal(0),L.clear(),M)M.clear();_.clear(),$=[],G=!1,C=void 0,E=!0,T=0,A=void 0,U()},o=(S,d)=>{if(N.evictDistant(S,d)>0)O()},B0=()=>{N.clear(),L.clear(),C=void 0,A=void 0,$=[],G=!1,U()},X0=()=>{if(N.reset(),L.clear(),M)M.clear();C=void 0,E=!0,T=0,A=void 0,$=[],G=!1,U()};if(J&&J.length>0)t(J,0,Q??J.length);else if(Q!==void 0)N.setTotal(Q),U();return{getState:B,getTotal:z,getCached:i,getIsLoading:v,getHasMore:m,getStorage:R,getPlaceholders:k,getItem:h,getItemById:I,getIndexById:u,isItemLoaded:P,getItemsInRange:w,setTotal:c,setItems:t,updateItem:s,removeItem:n,loadRange:Q0,ensureRange:l,loadInitial:p,loadMore:r,reload:K0,evictDistant:o,clear:B0,reset:X0}};var Nj=(j)=>{let{adapter:q,loading:J,storage:Q,total:K,autoLoad:X=!0}=j,Z=J?.cancelThreshold??n2,W=J?.preloadThreshold??o2,D=J?.preloadAhead??i2;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:N}=Y,M=Y.config.reverse,F=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 _=Y.getCachedCompression();Y.state.viewportState.totalSize=_.virtualSize,Y.state.viewportState.actualSize=_.actualSize,Y.state.viewportState.isCompressed=_.isCompressed,Y.state.viewportState.compressionRatio=_.ratio,Y.updateContentSize(_.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(T,_,U)=>{if(Y.state.isInitialized)Y.forceRender(),N.emit("load:end",{items:T,total:U})}});Y.replaceDataManager(F);let L=null,G=null,A=0,E=()=>{if(G){let T=G;G=null,Y.dataManager.ensureRange(T.start,T.end).catch((_)=>{N.emit("error",{error:_,context:"ensureRange"})})}};Y.afterScroll.push((T,_)=>{if(Y.state.isDestroyed)return;let U=Y.scrollController.getVelocity(),y=Y.scrollController.isTracking()&&U<=Z;if(G&&A>Z&&U<=Z){let z=G;G=null,Y.dataManager.ensureRange(z.start,z.end).catch((i)=>{N.emit("error",{error:i,context:"ensureRange"})})}if(A=U,y&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(M){if(T<F2)N.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((z)=>{N.emit("error",{error:z,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-T-Y.state.viewportState.containerSize<F2)N.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((i)=>{N.emit("error",{error:i,context:"loadMore"})})}let{renderRange:H}=Y.state.viewportState;if(!L||H.start!==L.start||H.end!==L.end)if(L={start:H.start,end:H.end},y){G=null;let{start:z,end:i}=H,v=Y.getVirtualTotal();if(U>W)if(_==="down")i=Math.min(H.end+D,v-1);else z=Math.max(H.start-D,0);Y.dataManager.ensureRange(z,i).catch((m)=>{N.emit("error",{error:m,context:"ensureRange"})})}else G={start:H.start,end:H.end}});let C=200,$=null;if(Y.afterScroll.push((T,_)=>{if($!==null)clearTimeout($);$=setTimeout(()=>{$=null,E()},C)}),Y.destroyHandlers.push(()=>{if($!==null)clearTimeout($),$=null}),N.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),N.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{L=null,G=null,Y.forceRender();let{renderRange:T}=Y.state.viewportState;if(T.end>0)N.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()=>{L=null,G=null,Y.invalidateRendered(),await Y.dataManager.reload(),N.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)N.emit("load:start",{offset:0,limit:z0}),Y.dataManager.loadInitial().catch((T)=>{N.emit("error",{error:T,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var Wj=()=>{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 N=J.viewport.getBoundingClientRect();if(K.horizontal){let M=N.left+window.scrollX;window.scrollTo(M+Y,window.scrollY)}else{let M=N.top+window.scrollY;window.scrollTo(window.scrollX,M+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),Q.viewportState.containerSize=window.innerHeight;let{innerHeight:Z,innerWidth:W}=window,D=()=>{let{innerWidth:Y,innerHeight:N}=window,M=K.horizontal?Y:N,F=K.horizontal?W:Z;if(Math.abs(M-F)<=1)return;Z=N,W=Y,Q.viewportState.containerSize=N,X.emit("resize",{width:Y,height:N});for(let L=0;L<q.resizeHandlers.length;L++)q.resizeHandlers[L](Y,N);q.renderIfNeeded()};window.addEventListener("resize",D,{passive:!0}),j=()=>{window.removeEventListener("resize",D)},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},Gj=(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 W=q(Z);if(W!==Q){let D=Z-K;J.push({key:Q,groupIndex:J.length,headerLayoutIndex:X,firstDataIndex:K,count:D}),X=X+1+D,Q=W,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:(F)=>{if(J.length===0)return{type:"item",dataIndex:F,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let L=L2(J,F),G=J[L];if(F===G.headerLayoutIndex)return{type:"header",group:G};let A=F-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+A,group:G}},layoutToDataIndex:(F)=>{if(J.length===0)return F;let L=L2(J,F),G=J[L];if(F===G.headerLayoutIndex)return-1;let A=F-G.headerLayoutIndex-1;return G.firstDataIndex+A},dataToLayoutIndex:(F)=>{if(J.length===0)return F;let L=Gj(J,F),G=J[L],A=F-G.firstDataIndex;return G.headerLayoutIndex+1+A},getGroupAtLayoutIndex:(F)=>{if(J.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let L=L2(J,F);return J[L]},getGroupAtDataIndex:(F)=>{if(J.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let L=Gj(J,F);return J[L]},getHeaderHeight:typeof K==="number"?(F)=>K:(F)=>{let L=J[F];if(!L)return 0;return K(L.key,F)},rebuild:(F)=>{J=Dj(F,q.getGroupForIndex),Q=F+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 W=-1,D=!1,Y=0,N=(E)=>{if(E===W)return;W=E;let C=q.groups;if(E<0||E>=C.length){Z.textContent="";return}let $=C[E],T=Q.headerTemplate($.key,$.groupIndex),_=q.getHeaderHeight(E);if(X)Z.style.width=`${_}px`;else Z.style.height=`${_}px`;if(typeof T==="string")Z.innerHTML=T;else Z.replaceChildren(T)},M=(E)=>{let C=q.groups;if(C.length===0){L();return}let $=0;for(let y=C.length-1;y>=0;y--)if(J.getOffset(C[y].headerLayoutIndex)<=E){$=y;break}let T=J.getOffset(C[0].headerLayoutIndex);if(E<T){L();return}if(!D)F();N($);let _=q.getHeaderHeight($),U=0,O=$+1;if(O<C.length){let H=J.getOffset(C[O].headerLayoutIndex)-E;if(H<_)U=H-_}if(U!==Y)if(Y=U,U===0)Z.style.transform="";else{let y=Math.round(U);Z.style.transform=X?`translateX(${y}px)`:`translateY(${y}px)`}},F=()=>{if(D)return;D=!0,Z.style.display=""},L=()=>{if(!D)return;D=!1,Z.style.display="none",W=-1,Y=0,Z.style.transform=""},G=()=>{let E=W;if(W=-1,E>=0)N(E)},A=()=>{Z.remove(),W=-1,D=!1};return Z.style.display="none",{update:M,refresh:G,show:F,hide:L,destroy:A}};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),W=J.indexAtOffset(j+q);if(W<Q-1)W++;return X.start=Math.max(0,Z),X.end=Math.min(Q-1,Math.max(0,W)),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)),W=q.getOffset(Z),D=q.getSize(Z),Y=q.getTotalSize(),N=Math.max(0,Y-J),M;switch(X){case"center":M=W-J/2+D/2;break;case"end":M=W-J+D;break;case"start":default:M=W;break}return Math.max(0,Math.min(M,N))},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:W,rawConfig:D}=X,{classPrefix:Y}=W,M=D.item.height;Q=D.items?[...D.items]:[];let F=Q.length,L={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};q=K2(F,L),K=x0(Q,q.groups);let G=m0(q,M);X.setSizeConfig(G),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let A=D.item.template,{headerTemplate:E}=j,C=(H,b,z)=>{if(R0(H))return E(H.groupKey,H.groupIndex);return A(H,b,z)},$=X.methods.get("_getGridLayout"),T=X.methods.get("_replaceGridRenderer"),_=X.methods.get("_updateGridLayoutForGroups");if($&&T){if(_)_((i)=>{let v=K[i];return!!(v&&R0(v))});let{createGridRenderer:H}=(B2(),rj(Hj)),b=$(),z=H(Z.items,C,X.sizeCache,b,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),W.ariaIdPrefix);T(z)}else X.replaceTemplate(C);if(Z.root.classList.add(`${Y}--grouped`),j.sticky!==!1){J=Z2(Z.root,q,X.sizeCache,{...L,sticky:L.sticky??!1},Y,W.horizontal);let H=J;X.afterScroll.push((b,z)=>{H.update(b)}),J.update(X.scrollController.getScrollTop())}let U=()=>{if(!q)return;q.rebuild(Q.length),K=x0(Q,q.groups);let H=m0(q,M);if(X.setSizeConfig(H),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),J)J.refresh()};X.methods.set("setItems",(H)=>{Q=[...H],U()}),X.methods.set("appendItems",(H)=>{Q=[...Q,...H],U()}),X.methods.set("prependItems",(H)=>{Q=[...H,...Q],U()}),X.methods.set("removeItem",(H)=>{Q=Q.filter((b)=>b.id!==H),U()});let{animateScroll:O,cancelScroll:y}=DJ(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(H,b)=>{let z=q.dataToLayoutIndex(H),{align:i,behavior:v,duration:m}=_J(b),B=X.dataManager.getTotal(),R=C0(z,X.sizeCache,X.state.viewportState.containerSize,B,i,X.getCachedCompression());if(v==="smooth")O(X.scrollController.getScrollTop(),R,m);else y(),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,GJ=(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 W=performance.now(),D=(Y)=>{let N=Y-W,M=Math.min(N/Z,1),F=K+(X-K)*GJ(M);if(j.scrollTo(F),q(),M<1)T0=requestAnimationFrame(D);else T0=null};T0=requestAnimationFrame(D)},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=(G)=>{if(G<=0)return 0;if(!Q)return Math.ceil(G/q);let A=0,E=0,C=0;for(let $=0;$<G;$++)if(Q($)){if(C++,E>0)A++,E=0;A++,E=0}else if(E++,E>=q)A++,E=0;if(E>0)A++;return A},Z=(G)=>{return K.row=W(G),K.col=D(G),K},W=(G)=>{if(!Q)return Math.floor(G/q);let A=0,E=0;for(let C=0;C<=G;C++)if(Q(C)){if(E>0)A++,E=0;if(C===G)return A;A++,E=0}else{if(C===G)return A;if(E++,E>=q)A++,E=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${A}`),A},D=(G)=>{if(!Q)return G%q;if(Q(G))return 0;let A=0;for(let E=0;E<=G;E++)if(Q(E))A=0;else{if(E===G)return A;if(A++,A>=q)A=0}return A},Y=(G,A,E)=>{if(E<=0)return{start:0,end:-1};if(!Q){let U=Math.max(0,G*q),O=Math.min(E-1,(A+1)*q-1);return{start:U,end:O}}let C=-1,$=-1,T=0,_=0;for(let U=0;U<E;U++){if(Q(U)){if(_>0)T++,_=0;if(T>=G&&T<=A){if(C===-1)C=U;$=U}T++,_=0}else{if(T>=G&&T<=A){if(C===-1)C=U;$=U}if(_++,_>=q)T++,_=0}if(T>A&&_===0)break}if(C===-1)return{start:0,end:-1};return{start:C,end:$}},N=(G,A,E)=>{if(A<0||A>=q)return-1;let C=G*q+A;if(C<0||C>=E)return-1;return C},M=(G)=>{let A=(q-1)*J;return Math.max(0,(G-A)/q)};return{get columns(){return q},get gap(){return J},update:(G)=>{if(G.columns!==void 0)q=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)J=G.gap;if(G.isHeaderFn!==void 0)Q=G.isHeaderFn},getTotalRows:X,getPosition:Z,getRow:W,getCol:D,getItemRange:Y,getItemIndex:N,getColumnWidth:M,getColumnOffset:(G,A)=>{let E=M(A);return G*(E+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:W}=Q,{classPrefix:D}=Z;if(Z.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=W.items?.some((_)=>_.__groupHeader===!0),N={columns:j.columns,gap:j.gap??0};if(Y)N.isHeaderFn=(_)=>{let U=Q.dataManager.getItem(_);return!!(U&&U.__groupHeader===!0)};q=U2(N);let M=q.gap;Q.setVirtualTotalFn(()=>{let _=Q.dataManager.getTotal();return q.getTotalRows(_)});let F=W.item,L=Z.horizontal?F.width:F.height,G={containerWidth:Q.getContainerWidth(),columns:q.columns,gap:q.gap};if(typeof L==="function")Q.setSizeConfig((_)=>{let U=G.containerWidth-2,O=(G.columns-1)*G.gap,y=(U-O)/G.columns,H={containerWidth:G.containerWidth,columns:G.columns,gap:G.gap,columnWidth:y,row:q.getRow(_),column:q.getCol(_),totalRows:q.getTotalRows(Q.dataManager.getTotal()),totalColumns:G.columns};return L(_,H)+G.gap});else if(M>0)Q.setSizeConfig(L+M);Q.rebuildSizeCache(),K.root.classList.add(`${D}--grid`);let A=Q.getContainerWidth(),E=W.item.template,C=()=>{J=d0(K.items,E,Q.sizeCache,q,D,A,()=>Q.dataManager.getTotal(),Z.ariaIdPrefix,Z.horizontal),Q.replaceRenderer(J)};C(),Q.methods.set("_getGridLayout",()=>q),Q.methods.set("_getGridConfig",()=>N),Q.methods.set("_replaceGridRenderer",(_)=>{J=_}),Q.methods.set("_updateGridLayoutForGroups",(_)=>{q.update({isHeaderFn:_});let U=Q.dataManager.getTotal(),O=0;for(let y=0;y<U;y++)if(q.getCol(y)===0){let H=Q.sizeCache.getSize(y);O+=H}if(Q.sizeCache.getTotalSize=()=>O,Z.horizontal)Q.dom.content.style.width=`${O}px`;else Q.dom.content.style.height=`${O}px`;C()}),Q.methods.set("updateGrid",(_)=>{if(_.columns!==void 0){if(!Number.isInteger(_.columns)||_.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");N.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");N.gap=_.gap}if(q)q.update(N);let U=Q.getContainerWidth();if(G.containerWidth=U,G.columns=N.columns,G.gap=N.gap??0,J)J.updateContainerWidth(U);Q.rebuildSizeCache(),Q.updateContentSize(Q.sizeCache.getTotalSize()),Q.updateCompressionMode();for(let O=0;O<Q.contentSizeHandlers.length;O++)Q.contentSizeHandlers[O]();if(J)J.clear();Q.forceRender()});let $=()=>{if(Q.state.isDestroyed)return;let _=Q.scrollController.getScrollTop(),U=Q.state.viewportState.containerSize,O=Q.getVirtualTotal(),y={start:0,end:0};if(O===0||U===0)y.start=0,y.end=0;else{y.start=Math.max(0,Q.sizeCache.indexAtOffset(_));let k=Q.sizeCache.indexAtOffset(_+U);if(k<O-1)k++;y.end=Math.min(O-1,Math.max(0,k))}let H=Z.overscan??3,b={start:Math.max(0,y.start-H),end:Math.min(O-1,y.end+H)};Q.state.viewportState.scrollPosition=_,Q.state.viewportState.visibleRange=y,Q.state.viewportState.renderRange=b;let z=Q.state.lastRenderRange,i=Q.state.viewportState.isCompressed;if(b.start===z.start&&b.end===z.end){if(i)J.updatePositions(Q.getCompressionContext());return}let v=Q.dataManager.getTotal(),m=q.getItemRange(b.start,b.end,v),B=Q.dataManager.getItemsInRange(m.start,m.end),R=i?Q.getCompressionContext():void 0;J.render(B,m,new Set,-1,R),Q.state.lastRenderRange={...b},X.emit("range:change",{range:b})},T=()=>{if(Q.state.isDestroyed)return;Q.state.lastRenderRange={start:-1,end:-1},$()};if(Q.setRenderFns($,T),Q.resizeHandlers.push((_,U)=>{if(J)J.updateContainerWidth(_)}),Q.methods.set("scrollToIndex",(_,U)=>{let O=Math.floor(_/j.columns),{align:y,behavior:H}=VJ(U),b=Q.dataManager.getState(),z=q.getTotalRows(b.total),i=Math.max(0,Math.min(O,z-1)),v=C0(i,Q.sizeCache,Q.state.viewportState.containerSize,z,y,Q.getCachedCompression());if(H==="smooth")Q.scrollController.scrollTo(v);else Q.scrollController.scrollTo(v)}),!Q.methods.has("_getTotal"))Q.methods.set("_getTotal",()=>Q.dataManager.getTotal());Q.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;K.root.classList.remove(`${D}--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)},W2=(j,q,J)=>{if(J!=="multiple")return j;return{...j,selected:new Set(q.map((Q)=>Q.id))}},G2=(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:W,config:D}=X,{classPrefix:Y,ariaIdPrefix:N}=D;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 M=new Map,F=()=>{M.clear();let _=X.dataManager.getTotal();for(let U=0;U<_;U++){let O=X.dataManager.getItem(U);if(O)M.set(O.id,U)}};F();let{renderIfNeeded:L,forceRender:G}=X.getRenderFns(),A=()=>{X.dom.items.querySelectorAll("[data-index]").forEach((U)=>{let O=U,y=O.dataset.id;if(y!==void 0){let H=/^\d+$/.test(y)?parseInt(y,10):y,b=Q.selected.has(H),i=parseInt(O.dataset.index??"-1",10)===Q.focusedIndex;O.classList.toggle(`${Y}-item--selected`,b),O.classList.toggle(`${Y}-item--focused`,i),O.ariaSelected=b?"true":"false"}})},E=()=>{if(X.state.isDestroyed)return;L(),A()},C=()=>{if(X.state.isDestroyed)return;G(),A()};X.setRenderFns(E,C);let $=()=>{A();let _=(U)=>{let O=M.get(U);if(O===void 0)return;return X.dataManager.getItem(O)};W.emit("selection:change",{selected:S0(Q),items:I0(Q,_)})};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;W.on("selection:change",({selected:_})=>{let U=_.length;if(U===0)T.textContent="";else if(U===1)T.textContent="1 item selected";else T.textContent=`${U} items selected`}),X.clickHandlers.push((_)=>{if(X.state.isDestroyed)return;let O=_.target.closest("[data-index]");if(!O)return;let y=parseInt(O.dataset.index??"-1",10);if(y<0)return;let H=X.dataManager.getItem(y);if(!H)return;W.emit("item:click",{item:H,index:y,event:_}),Q=y2(Q,y),Z.root.setAttribute("aria-activedescendant",`${N}-item-${y}`),Q=f0(Q,H.id,q),$()}),X.keydownHandlers.push((_)=>{if(X.state.isDestroyed)return;let U=X.dataManager.getTotal(),O=Q.focusedIndex,y=!1,H=!1,b=Q;switch(_.key){case"ArrowUp":b=T2(Q,U),y=!0,H=!0;break;case"ArrowDown":b=H2(Q,U),y=!0,H=!0;break;case"Home":b=P2(Q,U),y=!0,H=!0;break;case"End":b=$2(Q,U),y=!0,H=!0;break;case" ":case"Enter":if(Q.focusedIndex>=0){let z=X.dataManager.getItem(Q.focusedIndex);if(z)b=f0(Q,z.id,q);y=!0}break}if(y){_.preventDefault(),Q=b;let z=Q.focusedIndex;if(z>=0){let i=X.dataManager.getState(),v=C0(z,X.sizeCache,X.state.viewportState.containerSize,i.total,"center",X.getCachedCompression());X.scrollController.scrollTo(v),Z.root.setAttribute("aria-activedescendant",`${N}-item-${z}`)}else Z.root.removeAttribute("aria-activedescendant");if(H){let{selected:i}=Q;if(O>=0&&O!==z){let v=X.dataManager.getItem(O);if(v)X.renderer.updateItemClasses(O,i.has(v.id),!1)}if(z>=0){let v=X.dataManager.getItem(z);if(v)X.renderer.updateItemClasses(z,i.has(v.id),!0)}}else{C();let i=(v)=>{let m=M.get(v);if(m===void 0)return;return X.dataManager.getItem(m)};W.emit("selection:change",{selected:S0(Q),items:I0(Q,i)})}}}),X.methods.set("select",(..._)=>{Q=c0(Q,_,q),$()}),X.methods.set("deselect",(..._)=>{Q=l0(Q,_),$()}),X.methods.set("toggleSelect",(_)=>{Q=f0(Q,_,q),$()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let _=X.getAllLoadedItems();Q=W2(Q,_,q),F(),$()}),X.methods.set("clearSelection",()=>{Q=G2(Q);let{renderRange:_,isCompressed:U}=X.state.viewportState,O=X.getItemsForRange(_),y=U?X.getCompressionContext():void 0;X.renderer.render(O,_,Q.selected,Q.focusedIndex,y),W.emit("selection:change",{selected:[],items:[]})}),X.methods.set("getSelected",()=>{return S0(Q)}),X.methods.set("getSelectedItems",()=>{return I0(Q,(U)=>{let O=M.get(U);if(O===void 0)return;return X.dataManager.getItem(O)})}),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(),W=J.methods.get("getSelected"),D=W&&W().length>0?W():void 0;if(Z===0){let F={index:0,offsetInItem:0,total:0};if(D)F.selectedIds=D;return F}let Y,N;if(X.isCompressed){let L=K/X.virtualSize*Z;Y=Math.max(0,Math.min(Math.floor(L),Z-1)),N=(L-Y)*J.sizeCache.getSize(Y)}else Y=J.sizeCache.indexAtOffset(K),N=K-J.sizeCache.getOffset(Y);N=Math.max(0,N);let M={index:Y,offsetInItem:N,total:Z};if(D)M.selectedIds=D;return M});let Q=(K)=>{let{index:X,offsetInItem:Z,selectedIds:W}=K,D=J.getVirtualTotal();if(D===0)return;if(!Number.isFinite(X)||!Number.isFinite(Z))return;if(J.sizeCache.getTotal()!==D){J.sizeCache.rebuild(D),J.updateCompressionMode();let E=J.getCachedCompression();J.updateContentSize(E.virtualSize)}let N=J.getCachedCompression(),M=Math.max(0,Math.min(X,D-1)),F;if(N.isCompressed){let E=J.sizeCache.getSize(M),C=E>0?Z/E:0;F=(M+C)/D*N.virtualSize}else F=J.sizeCache.getOffset(M)+Z;let L=J.state.viewportState.containerSize,G=Math.max(0,N.virtualSize-L);if(F=Math.max(0,Math.min(F,G)),J.scrollController.scrollTo(F),W&&W.length>0){let E=J.methods.get("select");if(E)E(...W)}let A=J.methods.get("loadVisibleRange");if(A)requestAnimationFrame(()=>{A()});else{let E=J.methods.get("reload");if(E)requestAnimationFrame(()=>{E()})}};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,Wj as withPage,$j as withGrid,Nj as withAsync,r2 as vlist,f0 as toggleSelection,_j as simpleVisibleRange,c0 as selectItems,W2 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,G2 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
  }
@@ -273,6 +302,8 @@ export interface ScrollSnapshot {
273
302
  index: number;
274
303
  /** Pixel offset within the first visible item (how far it's scrolled off) */
275
304
  offsetInItem: number;
305
+ /** Total item count at snapshot time (used by restore to set sizeCache) */
306
+ total?: number;
276
307
  /** Selected item IDs (optional, included for convenience) */
277
308
  selectedIds?: Array<string | number>;
278
309
  }
@@ -506,6 +537,8 @@ export interface VList<T extends VListItem = VListItem> {
506
537
  removeItem: (id: string | number) => void;
507
538
  /** Reload data (clears and re-fetches if using adapter) */
508
539
  reload: () => Promise<void>;
540
+ /** Load data for the currently visible range without resetting (used by restoreScroll) */
541
+ loadVisibleRange: () => Promise<void>;
509
542
  /** Update configuration without recreating the instance */
510
543
  update: (config: Partial<VListUpdateConfig>) => void;
511
544
  /** Scroll to specific index */
package/dist/vlist.css CHANGED
@@ -1 +1 @@
1
- @keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}:root{--vlist-bg:#ffffff;--vlist-bg-hover:#f9fafb;--vlist-bg-selected:#eff6ff;--vlist-bg-selected-hover:#dbeafe;--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-scrollbar-thumb:#d1d5db;--vlist-scrollbar-thumb-hover:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-track-bg:transparent;--vlist-scrollbar-custom-thumb-bg:rgba(0,0,0,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(0,0,0,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out}@media (prefers-color-scheme:dark){:root{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}}.dark{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}.vlist:focus{outline:none}.vlist:focus-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:2px}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--vlist-scrollbar-thumb) transparent}.vlist-viewport::-webkit-scrollbar{width:6px;height:6px}.vlist-viewport::-webkit-scrollbar-track{background:transparent}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb);border-radius:3px}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover)}.vlist-content{position:relative;width:100%}.vlist-items{position:relative;width:100%;contain:layout style}.vlist-item{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);border-bottom:1px solid var(--vlist-border);background-color:var(--vlist-bg);cursor:pointer;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item{transition:none}.vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:animation:fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:0;right:0;width:var(--vlist-scrollbar-width);height:100%;background-color:var(--vlist-scrollbar-track-bg);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar-hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar-hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar-thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-scrollbar-custom-thumb-bg);border-radius:var(--vlist-scrollbar-custom-thumb-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar-thumb{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist--grouped .vlist-item[data-id^="__group_header_"]{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);z-index:1}.vlist--grouped .vlist-item[data-id^="__group_header_"]:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);contain:content}@media (prefers-color-scheme:dark){:root{--vlist-group-header-bg:#1e2433}}.dark{--vlist-group-header-bg:#1e2433}.vlist--scrolling .vlist-sticky-header{transition:none}.vlist--grid .vlist-items{contain:layout style}.vlist-grid-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--grid .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-grid-item{transition:none}.vlist-grid-item:hover{background-color:var(--vlist-bg-hover)}.vlist-grid-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-grid-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-grid-item.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-items{height:100%;width:auto}.vlist--horizontal .vlist-item{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none;border-right:1px solid var(--vlist-border)}.vlist-scrollbar--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--vlist-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar-thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--no-scrollbar::-webkit-scrollbar{display:none}
1
+ @keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}:root{--vlist-bg:#ffffff;--vlist-bg-hover:#f9fafb;--vlist-bg-selected:#eff6ff;--vlist-bg-selected-hover:#dbeafe;--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-scrollbar-thumb:#d1d5db;--vlist-scrollbar-thumb-hover:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-track-bg:transparent;--vlist-scrollbar-custom-thumb-bg:rgba(0,0,0,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(0,0,0,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out}@media (prefers-color-scheme:dark){:root{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}}.dark{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5)}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}.vlist:focus{outline:none}.vlist:focus-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:2px}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--vlist-scrollbar-thumb) transparent}.vlist-viewport::-webkit-scrollbar{width:6px;height:6px}.vlist-viewport::-webkit-scrollbar-track{background:transparent}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb);border-radius:3px}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover)}.vlist-content{position:relative;width:100%}.vlist-items{position:relative;width:100%;contain:layout style}.vlist-item{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);border-bottom:1px solid var(--vlist-border);background-color:var(--vlist-bg);cursor:pointer;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item{transition:none}.vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:0;right:0;width:var(--vlist-scrollbar-width);height:100%;background-color:var(--vlist-scrollbar-track-bg);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar-hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar-hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar-thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-scrollbar-custom-thumb-bg);border-radius:var(--vlist-scrollbar-custom-thumb-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar-thumb{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist--grouped .vlist-item[data-id^="__group_header_"]{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);z-index:1}.vlist--grouped .vlist-item[data-id^="__group_header_"]:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);contain:content}@media (prefers-color-scheme:dark){:root{--vlist-group-header-bg:#1e2433}}.dark{--vlist-group-header-bg:#1e2433}.vlist--scrolling .vlist-sticky-header{transition:none}.vlist--grid .vlist-items{contain:layout style}.vlist-grid-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--grid .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-grid-item{transition:none}.vlist-grid-item:hover{background-color:var(--vlist-bg-hover)}.vlist-grid-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-grid-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-grid-item.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-items{height:100%;width:auto}.vlist--horizontal .vlist-item{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none;border-right:1px solid var(--vlist-border)}.vlist-scrollbar--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--vlist-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar-thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--no-scrollbar::-webkit-scrollbar{display:none}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",