@floor/vlist 0.7.7 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,10 +4,11 @@ Lightweight, high-performance virtual list with zero dependencies and optimal tr
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/%40floor%2Fvlist.svg)](https://www.npmjs.com/package/@floor/vlist)
6
6
  [![bundle size](https://img.shields.io/bundlephobia/minzip/@floor/vlist)](https://bundlephobia.com/package/@floor/vlist)
7
- [![tests](https://img.shields.io/badge/tests-1739%20passing-brightgreen)](https://github.com/floor/vlist)
7
+ [![tests](https://img.shields.io/badge/tests-1181%20passing-brightgreen)](https://github.com/floor/vlist)
8
8
  [![license](https://img.shields.io/npm/l/vlist.svg)](https://github.com/floor/vlist/blob/main/LICENSE)
9
9
 
10
10
  - **Zero dependencies** — no external libraries
11
+ - **Ultra memory efficient** — ~0.1-0.2 MB constant overhead regardless of dataset size
11
12
  - **8–12 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
12
13
  - **Builder API** — composable plugins with perfect tree-shaking
13
14
  - **Grid, sections, async, selection, scale** — all opt-in
@@ -186,8 +187,8 @@ const list = vlist(config).use(...plugins).build()
186
187
  | `list.setItems(items)` | Replace all items |
187
188
  | `list.appendItems(items)` | Add to end (auto-scrolls in reverse mode) |
188
189
  | `list.prependItems(items)` | Add to start (preserves scroll position) |
189
- | `list.updateItem(id, partial)` | Update a single item |
190
- | `list.removeItem(id)` | Remove by ID |
190
+ | `list.updateItem(index, partial)` | Update a single item by index |
191
+ | `list.removeItem(index)` | Remove by index |
191
192
  | `list.reload()` | Re-fetch from adapter (async) |
192
193
 
193
194
  ### Navigation
@@ -196,7 +197,6 @@ const list = vlist(config).use(...plugins).build()
196
197
  |--------|-------------|
197
198
  | `list.scrollToIndex(i, align?)` | Scroll to index (`'start'` \| `'center'` \| `'end'`) |
198
199
  | `list.scrollToIndex(i, opts?)` | With `{ align, behavior: 'smooth', duration }` |
199
- | `list.scrollToItem(id, align?)` | Scroll to item by ID |
200
200
  | `list.cancelScroll()` | Cancel smooth scroll animation |
201
201
  | `list.getScrollPosition()` | Current scroll offset |
202
202
  | `list.getVisibleRange()` | `{ start, end }` of visible indices |
@@ -292,6 +292,8 @@ Override with your own CSS using the `.vlist`, `.vlist-item`, `.vlist-item--sele
292
292
 
293
293
  ## Performance
294
294
 
295
+ ### Bundle Size
296
+
295
297
  | Configuration | Gzipped |
296
298
  |---------------|---------|
297
299
  | Base only | 7.7 KB |
@@ -300,8 +302,31 @@ Override with your own CSS using the `.vlist`, `.vlist-item`, `.vlist-item--sele
300
302
  | + Async | 13.5 KB |
301
303
  | All plugins | ~16 KB |
302
304
 
305
+ ### Memory Efficiency
306
+
307
+ vlist uses **constant memory** regardless of dataset size through optimized internal architecture:
308
+
309
+ | Dataset Size | Memory Usage | Notes |
310
+ |--------------|--------------|-------|
311
+ | 10K items | ~0.2 MB | Constant baseline |
312
+ | 100K items | ~0.2 MB | 10× items, same memory |
313
+ | 1M items | ~0.4 MB | 100× items, 2× memory |
314
+
315
+ **Key advantages:**
316
+ - No array copying — uses references for zero-copy performance
317
+ - No ID indexing overhead — O(1) memory complexity
318
+ - Industry-leading memory efficiency for virtual list libraries
319
+
320
+ ### DOM Efficiency
321
+
303
322
  With 100K items: **~26 DOM nodes** in the document (visible + overscan) instead of 100,000.
304
323
 
324
+ ### Render Performance
325
+
326
+ - **Initial render:** ~8ms (constant, regardless of item count)
327
+ - **Scroll performance:** 120 FPS (perfect smoothness)
328
+ - **1M items:** Same performance as 10K items
329
+
305
330
  ## TypeScript
306
331
 
307
332
  Fully typed. Generic over your item type:
@@ -1,9 +1,9 @@
1
1
  /**
2
- * vlist/builder — Self-contained composable virtual list builder
2
+ * vlist/builder — Composable virtual list builder
3
3
  *
4
- * Everything inlined height cache, emitter, DOM, element pool, renderer,
5
- * range calculations, scroll handling. Zero module imports means the builder
6
- * core is ~12 KB minified instead of ~25 KB.
4
+ * Pure utilities (velocity, DOM, pool, range, scroll) live in sibling files.
5
+ * Height cache and emitter are reused from rendering/ and events/ modules.
6
+ * Bun.build inlines everything into a single bundle automatically.
7
7
  *
8
8
  * Plugins compose features *around* the hot path via extension points:
9
9
  * afterScroll, clickHandlers, keydownHandlers, resizeHandlers, destroyHandlers,
@@ -36,18 +36,16 @@ export interface SimpleDataManager<T extends VListItem = VListItem> {
36
36
  getStorage: () => unknown;
37
37
  getPlaceholders: () => unknown;
38
38
  getItem: (index: number) => T | undefined;
39
- getItemById: (id: string | number) => T | undefined;
40
- getIndexById: (id: string | number) => number;
41
39
  isItemLoaded: (index: number) => boolean;
42
40
  getItemsInRange: (start: number, end: number) => T[];
43
41
  setTotal: (total: number) => void;
44
42
  setItems: (items: T[], offset?: number, total?: number) => void;
45
- updateItem: (id: string | number, updates: Partial<T>) => boolean;
46
- removeItem: (id: string | number) => boolean;
43
+ updateItem: (index: number, updates: Partial<T>) => boolean;
44
+ removeItem: (index: number) => boolean;
47
45
  loadRange: (start: number, end: number) => Promise<void>;
48
46
  ensureRange: (start: number, end: number) => Promise<void>;
49
47
  loadInitial: () => Promise<void>;
50
- loadMore: () => Promise<boolean>;
48
+ loadMore: (direction?: "down" | "up") => Promise<boolean>;
51
49
  reload: () => Promise<void>;
52
50
  evictDistant: (visibleStart: number, visibleEnd: number) => void;
53
51
  clear: () => void;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * vlist/builder — DOM Structure
3
+ * Container resolution and DOM scaffold creation for the virtual list.
4
+ */
5
+ export interface DOMStructure {
6
+ root: HTMLElement;
7
+ viewport: HTMLElement;
8
+ content: HTMLElement;
9
+ items: HTMLElement;
10
+ }
11
+ export declare const resolveContainer: (container: HTMLElement | string) => HTMLElement;
12
+ export declare const createDOMStructure: (container: HTMLElement, classPrefix: string, ariaLabel?: string, horizontal?: boolean) => DOMStructure;
13
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1,146 @@
1
+ /**
2
+ * vlist/builder — Materialize Context Factory
3
+ *
4
+ * Extracts the BuilderContext object, default data-manager proxy, and default
5
+ * scroll-controller proxy out of materialize() in core.ts.
6
+ *
7
+ * All shared mutable state lives in a single `$` (MRefs) object that both
8
+ * core.ts and this module read/write through. Property names are kept short
9
+ * (2–3 chars) so they survive minification without bloating the bundle.
10
+ * Each factory destructures to readable locals on entry.
11
+ *
12
+ * Immutable dependencies are passed via a `deps` (MDeps) object — these are
13
+ * destructured once and never re-read, so their names don't matter at runtime.
14
+ */
15
+ import type { VListItem, VListEvents, ItemTemplate, ItemState, Range } from "../types";
16
+ import type { HeightCache } from "../rendering/heights";
17
+ import type { Emitter } from "../events/emitter";
18
+ import type { DOMStructure } from "./dom";
19
+ import type { createElementPool } from "./pool";
20
+ import type { BuilderConfig, BuilderContext, BuilderState, ResolvedBuilderConfig } from "./types";
21
+ /**
22
+ * Mutable refs object shared between core.ts materialize() and context factories.
23
+ *
24
+ * Key mapping (short → long):
25
+ *
26
+ * | Key | Meaning |
27
+ * |------|------------------------|
28
+ * | it | items |
29
+ * | hc | heightCache |
30
+ * | ch | containerHeight |
31
+ * | cw | containerWidth |
32
+ * | id | isDestroyed |
33
+ * | ii | isInitialized |
34
+ * | ls | lastScrollTop |
35
+ * | vt | velocityTracker |
36
+ * | ss | selectionSet |
37
+ * | fi | focusedIndex |
38
+ * | la | lastAriaSetSize |
39
+ * | dm | dataManagerProxy |
40
+ * | sc | scrollControllerProxy |
41
+ * | vtf | virtualTotalFn |
42
+ * | sgt | scrollGetTop |
43
+ * | sst | scrollSetTop |
44
+ * | sab | scrollIsAtBottom |
45
+ * | sic | scrollIsCompressed |
46
+ * | rfn | renderIfNeededFn |
47
+ * | ffn | forceRenderFn |
48
+ * | gvr | getVisibleRange |
49
+ * | gsp | getScrollToPos |
50
+ * | pef | positionElementFn |
51
+ * | at | activeTemplate |
52
+ * | vre | viewportResizeEnabled |
53
+ * | st | scrollTarget |
54
+ * | gcw | getContainerWidth |
55
+ * | gch | getContainerHeight |
56
+ */
57
+ export interface MRefs<T extends VListItem = VListItem> {
58
+ /** items */
59
+ it: T[];
60
+ /** heightCache */
61
+ hc: HeightCache;
62
+ /** containerHeight */
63
+ ch: number;
64
+ /** containerWidth */
65
+ cw: number;
66
+ /** isDestroyed */
67
+ id: boolean;
68
+ /** isInitialized */
69
+ ii: boolean;
70
+ /** lastScrollTop */
71
+ ls: number;
72
+ /** velocityTracker */
73
+ vt: {
74
+ velocity: number;
75
+ sampleCount: number;
76
+ };
77
+ /** selectionSet */
78
+ ss: Set<string | number>;
79
+ /** focusedIndex */
80
+ fi: number;
81
+ /** lastAriaSetSize */
82
+ la: string;
83
+ /** dataManagerProxy */
84
+ dm: any;
85
+ /** scrollControllerProxy */
86
+ sc: any;
87
+ /** virtualTotalFn */
88
+ vtf: () => number;
89
+ /** scrollGetTop */
90
+ sgt: () => number;
91
+ /** scrollSetTop */
92
+ sst: (pos: number) => void;
93
+ /** scrollIsAtBottom */
94
+ sab: (threshold?: number) => boolean;
95
+ /** scrollIsCompressed */
96
+ sic: boolean;
97
+ /** renderIfNeededFn */
98
+ rfn: () => void;
99
+ /** forceRenderFn */
100
+ ffn: () => void;
101
+ /** getVisibleRange */
102
+ gvr: (scrollTop: number, cHeight: number, hc: HeightCache, total: number, out: Range) => void;
103
+ /** getScrollToPos */
104
+ gsp: (index: number, hc: HeightCache, cHeight: number, total: number, align: "start" | "center" | "end") => number;
105
+ /** positionElementFn */
106
+ pef: (element: HTMLElement, index: number) => void;
107
+ /** activeTemplate */
108
+ at: ItemTemplate<T>;
109
+ /** viewportResizeEnabled */
110
+ vre: boolean;
111
+ /** scrollTarget */
112
+ st: HTMLElement | Window;
113
+ /** getContainerWidth */
114
+ gcw: () => number;
115
+ /** getContainerHeight */
116
+ gch: () => number;
117
+ }
118
+ /** Immutable dependencies the context factory needs from materialize(). */
119
+ export interface MDeps<T extends VListItem = VListItem> {
120
+ readonly dom: DOMStructure;
121
+ readonly emitter: Emitter<VListEvents<T>>;
122
+ readonly resolvedConfig: ResolvedBuilderConfig;
123
+ readonly rawConfig: BuilderConfig<T>;
124
+ readonly rendered: Map<number, HTMLElement>;
125
+ readonly pool: ReturnType<typeof createElementPool>;
126
+ readonly itemState: ItemState;
127
+ readonly sharedState: BuilderState;
128
+ readonly renderRange: Range;
129
+ readonly isHorizontal: boolean;
130
+ readonly classPrefix: string;
131
+ readonly contentSizeHandlers: Array<() => void>;
132
+ readonly afterScroll: Array<(scrollTop: number, direction: string) => void>;
133
+ readonly clickHandlers: Array<(event: MouseEvent) => void>;
134
+ readonly keydownHandlers: Array<(event: KeyboardEvent) => void>;
135
+ readonly resizeHandlers: Array<(width: number, height: number) => void>;
136
+ readonly destroyHandlers: Array<() => void>;
137
+ readonly methods: Map<string, Function>;
138
+ readonly onScrollFrame: () => void;
139
+ readonly resizeObserver: ResizeObserver;
140
+ readonly applyTemplate: (element: HTMLElement, result: string | HTMLElement) => void;
141
+ readonly updateContentSize: () => void;
142
+ }
143
+ export declare const createMaterializeCtx: <T extends VListItem = VListItem>($: MRefs<T>, deps: MDeps<T>) => BuilderContext<T>;
144
+ export declare const createDefaultDataProxy: <T extends VListItem = VListItem>($: MRefs<T>, deps: Pick<MDeps<T>, "rendered" | "itemState" | "contentSizeHandlers" | "applyTemplate" | "updateContentSize">, ctx: BuilderContext<T>) => any;
145
+ export declare const createDefaultScrollProxy: <T extends VListItem = VListItem>($: MRefs<T>, deps: Pick<MDeps<T>, "dom" | "classPrefix">) => any;
146
+ //# sourceMappingURL=materializectx.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * vlist/builder — Element Pool
3
+ * Recycling pool for DOM elements to reduce allocation during scrolling.
4
+ */
5
+ export declare const createElementPool: (maxSize?: number) => {
6
+ acquire: () => HTMLElement;
7
+ release: (el: HTMLElement) => void;
8
+ clear: () => void;
9
+ };
10
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * vlist/builder — Range Calculations
3
+ * Visible range detection, overscan application, and scroll-to-index positioning.
4
+ */
5
+ import type { Range } from "../types";
6
+ import type { HeightCache } from "../rendering/heights";
7
+ export declare const calcVisibleRange: (scrollTop: number, containerHeight: number, hc: HeightCache, totalItems: number, out: Range) => void;
8
+ export declare const applyOverscan: (visible: Range, overscan: number, totalItems: number, out: Range) => void;
9
+ export declare const calcScrollToPosition: (index: number, hc: HeightCache, containerHeight: number, totalItems: number, align: "start" | "center" | "end") => number;
10
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * vlist/builder — Scroll Utilities
3
+ * Easing function and scroll-argument resolution for smooth scrolling.
4
+ */
5
+ import type { ScrollToOptions } from "../types";
6
+ export declare const DEFAULT_SMOOTH_DURATION = 300;
7
+ export declare const easeInOutQuad: (t: number) => number;
8
+ export declare const resolveScrollArgs: (alignOrOptions?: "start" | "center" | "end" | ScrollToOptions) => {
9
+ align: "start" | "center" | "end";
10
+ behavior: "auto" | "smooth";
11
+ duration: number;
12
+ };
13
+ //# sourceMappingURL=scroll.d.ts.map
@@ -255,7 +255,6 @@ export interface BuiltVList<T extends VListItem = VListItem> {
255
255
  removeItem: (id: string | number) => void;
256
256
  reload: () => Promise<void>;
257
257
  scrollToIndex: (index: number, alignOrOptions?: "start" | "center" | "end" | ScrollToOptions) => void;
258
- scrollToItem: (id: string | number, alignOrOptions?: "start" | "center" | "end" | ScrollToOptions) => void;
259
258
  cancelScroll: () => void;
260
259
  getScrollPosition: () => number;
261
260
  on: <K extends keyof VListEvents<T>>(event: K, handler: EventHandler<VListEvents<T>[K]>) => Unsubscribe;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * vlist/builder — Velocity Tracking
3
+ * Circular-buffer velocity tracker for scroll momentum detection.
4
+ */
5
+ export declare const VELOCITY_SAMPLE_COUNT = 5;
6
+ export declare const STALE_GAP_MS = 100;
7
+ export declare const MIN_RELIABLE_SAMPLES = 2;
8
+ export interface VelocitySample {
9
+ position: number;
10
+ time: number;
11
+ }
12
+ export interface VelocityTracker {
13
+ velocity: number;
14
+ lastPosition: number;
15
+ lastTime: number;
16
+ samples: VelocitySample[];
17
+ sampleIndex: number;
18
+ sampleCount: number;
19
+ }
20
+ export declare const createVelocityTracker: (initialPosition?: number) => VelocityTracker;
21
+ export declare const updateVelocityTracker: (tracker: VelocityTracker, newPosition: number) => VelocityTracker;
22
+ //# sourceMappingURL=velocity.d.ts.map
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:Mj,getOwnPropertyNames:gJ,getOwnPropertyDescriptor:mJ}=Object,dJ=Object.prototype.hasOwnProperty;var pj=new WeakMap,cJ=(j)=>{var Q=pj.get(j),$;if(Q)return Q;if(Q=Mj({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")gJ(j).map((J)=>!dJ.call(Q,J)&&Mj(Q,J,{get:()=>j[J],enumerable:!($=mJ(j,J))||$.enumerable}));return pj.set(j,Q),Q};var lJ=(j,Q)=>{for(var $ in Q)Mj(j,$,{get:Q[$],enumerable:!0,configurable:!0,set:(J)=>Q[$]=()=>J})};var uj=(j,Q)=>()=>(j&&(Q=j(j=0)),Q);var Ej=200,x2=50,gj=15,mj=2,dj=50,z2=16000000;var K4=(j,Q)=>{let $=Q;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if($===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),$-1))},getTotalHeight:()=>$*j,getTotal:()=>$,rebuild:(J)=>{$=J},isVariable:()=>!1}},Y4=(j,Q)=>{let $=Q,J=new Float64Array(0),K=(q)=>{$=q,J=new Float64Array(q+1),J[0]=0;for(let Z=0;Z<q;Z++)J[Z+1]=J[Z]+j(Z)};K(Q);let X=(q)=>{if($===0)return 0;if(q<=0)return 0;if(q>=J[$])return $-1;let Z=0,V=$-1;while(Z<V){let B=Z+V+1>>>1;if(J[B]<=q)Z=B;else V=B-1}return Z};return{getOffset:(q)=>{if(q<=0)return 0;if(q>=$)return J[$];return J[q]},getHeight:(q)=>j(q),indexAtOffset:(q)=>X(q),getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(q)=>K(q),isVariable:()=>!0}},cj=(j,Q)=>{if(typeof j==="number")return K4(j,Q);return Y4(j,Q)},Fj=(j,Q,$,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil($/j.getHeight(0));let K=0,X=0,q=Q;while(q<J&&X<$)X+=j.getHeight(q),K++,q++;return Math.max(1,K)},n2=(j,Q,$)=>{if($===0)return 0;if(!j.isVariable())return Math.floor(Q/j.getHeight(0));let J=0,K=0;for(let X=$-1;X>=0;X--){let q=j.getHeight(X);if(K+q>Q)break;K+=q,J++}return Math.max(J,1)},Lj=(j,Q,$)=>{if($===0)return 0;let J=Math.floor(Q),K=Q-J,X=Math.max(0,Math.min(J,$-1));return j.getOffset(X)+K*j.getHeight(X)};var E2=(j,Q)=>{let $=Q.getTotalHeight(),J=$>z2,K=J?z2:$,X=$>0?K/$:1;return{isCompressed:J,actualHeight:$,virtualHeight:K,ratio:X}},o2=(j,Q,$,J,K,X)=>{if(J===0||Q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let W=$.indexAtOffset(j),M=$.indexAtOffset(j+Q);if(M<J-1)M++;return X.start=Math.max(0,W),X.end=Math.min(J-1,Math.max(0,M)),X}let{virtualHeight:q}=K,V=j/q*J,B=Math.floor(V),U=Fj($,Math.max(0,B),Q,J),L=Math.ceil(V)+U,T=q-Q-j;if(T<=Q&&T>=-1){let W=n2($,Q,J),M=Math.max(0,J-W),N=Math.max(0,Math.min(1,1-T/Q));B=Math.floor(B+(M-B)*N),L=T<=1?J-1:Math.min(J-1,B+U)}return X.start=Math.max(0,B),X.end=Math.min(J-1,Math.max(0,L)),X},lj=(j,Q,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q),J},C2=(j,Q,$,J,K,X,q)=>{if(!X.isCompressed||J===0)return $.getOffset(j);let{virtualHeight:Z}=X,V=Z-K,B=V-Q;if(B<=K&&B>=-1){if(Q>=V-1){let _=$.getTotalHeight()-$.getOffset(j);return K-_}let T=n2($,K,J),W=Math.max(0,J-T),N=Q/Z*J,O=Math.max(0,Math.min(1,1-B/K)),F=$.getOffset(j)-$.getOffset(W),b=$.getOffset(j)-Lj($,N,J);return b+(F-b)*O}let U=Q/Z,L=$.getTotalHeight(),y=U*L;return $.getOffset(j)-y},i2=(j,Q,$,J,K,X="start")=>{if(J===0)return 0;let q;if(K.isCompressed){if(X==="end"&&j===J-1)return Math.max(0,K.virtualHeight-$);q=j/J*K.virtualHeight}else q=Q.getOffset(j);let Z=Q.getHeight(j);switch(X){case"center":q-=($-Z)/2;break;case"end":q-=$-Z;break}let V=K.virtualHeight-$;return Math.max(0,Math.min(q,V))},sj=(j,Q,$,J)=>{if($===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*$)}return Q.indexAtOffset(j)},aj=(j,Q)=>{if(typeof Q==="number")return j*Q>z2;return Q.getTotalHeight()>z2},rj=(j)=>{if(j<=0)return 0;return Math.floor(z2/j)},nj=(j,Q)=>{let $=E2(j,Q);if(!$.isCompressed)return`No compression needed (${j} items, ${($.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${j} items, ${($.actualHeight/1e6).toFixed(1)}M px → ${($.virtualHeight/1e6).toFixed(1)}M px virtual)`};var t2=()=>{};var P2=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var VJ={};lJ(VJ,{createGridRenderer:()=>d2});var M4=(j=200)=>{let Q=[];return{acquire:()=>{let X=Q.pop();if(X)return X;let q=document.createElement("div");return q.setAttribute("role","option"),q},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}}},d2=(j,Q,$,J,K,X,q,Z)=>{let V=M4(),B=new Map,U=X,L=!1,y=null,T=0,W="",M=(z)=>{if(y&&T===z)return y;return y=E2(z,$),T=z,y},N={selected:!1,focused:!1},O=(z,H)=>{return N.selected=z,N.focused=H,N},F=`${K}-item ${K}-grid-item`,b=`${K}-item--selected`,_=`${K}-item--focused`,A=(z,H)=>{if(typeof H==="string")z.innerHTML=H;else z.replaceChildren(H)},G=(z,H,m)=>{z.classList.toggle(b,H),z.classList.toggle(_,m)},P=(z,H)=>{let m=J.getRow(z);if(H){let s=H.totalItems,a=M(s);if(a.isCompressed)return C2(m,H.scrollTop,$,s,H.containerHeight,a,H.rangeStart)}return $.getOffset(m)},D=(z,H,m)=>{let s=z.dataset.id?.startsWith("__group_header"),a=s?0:J.getCol(H),o=s?0:J.getColumnOffset(a,U),B2;if(L){let K2=J.getRow(H),v=0,r=new Set;for(let h=0;h<H;h++){let $2=J.getRow(h);if($2<K2&&!r.has($2)){let i=$.getHeight(h);v+=i,r.add($2)}}B2=v}else B2=P(H,m);z.style.transform=`translate(${Math.round(o)}px, ${Math.round(B2)}px)`},k=(z,H)=>{let m=z.dataset.id?.startsWith("__group_header"),s=m?U:J.getColumnWidth(U),a;if(L||m)a=$.getHeight(H)-J.gap;else{let o=J.getRow(H);a=$.getHeight(o)-J.gap}z.style.width=`${s}px`,z.style.height=`${a}px`},x=(z,H,m,s,a)=>{let o=V.acquire(),B2=O(m,s);if(o.className=F,o.dataset.index=String(z),o.dataset.id=String(H.id),o.dataset.row=String(J.getRow(z)),o.dataset.col=String(J.getCol(z)),o.ariaSelected=String(m),Z)o.id=`${Z}-item-${z}`;if(q)W=String(q()),o.setAttribute("aria-setsize",W),o.setAttribute("aria-posinset",String(z+1));k(o,z);let K2=Q(H,z,B2);return A(o,K2),G(o,m,s),D(o,z,a),o},j2=(z,H,m,s,a)=>{if(H.start===0&&z.length>0)L=P2(z[0]);for(let[v,r]of B)if(v<H.start||v>H.end)r.element.remove(),V.release(r.element),B.delete(v);let o=!1;if(q){let v=String(q());o=v!==W,W=v}let B2=document.createDocumentFragment(),K2=[];for(let v=H.start;v<=H.end;v++){let r=v-H.start,h=z[r];if(!h){console.warn(`⚠️ RENDER: Missing item at index ${v} (range: ${H.start}-${H.end}, items.length: ${z.length})`);continue}let $2=m.has(h.id),i=v===s,Q2=B.get(v);if(Q2){let D2=Q2.element.dataset.id,S=String(h.id);if(D2!==S){let t=O($2,i),c=Q(h,v,t);A(Q2.element,c),Q2.element.dataset.id=S,Q2.element.dataset.row=String(J.getRow(v)),Q2.element.dataset.col=String(J.getCol(v)),k(Q2.element,v)}if(G(Q2.element,$2,i),Q2.element.ariaSelected=String($2),D(Q2.element,v,a),o)Q2.element.setAttribute("aria-setsize",W)}else{let D2=x(v,h,$2,i,a);B2.appendChild(D2),K2.push({index:v,element:D2})}}if(K2.length>0){j.appendChild(B2);for(let{index:v,element:r}of K2)B.set(v,{index:v,element:r})}},f=(z)=>{for(let[H,m]of B)D(m.element,H,z)},l=(z,H,m,s)=>{let a=B.get(z);if(a){let o=O(m,s),B2=Q(H,z,o);A(a.element,B2),G(a.element,m,s),a.element.dataset.id=String(H.id),a.element.ariaSelected=String(m),k(a.element,z)}},d=(z,H,m)=>{let s=B.get(z);if(s)G(s.element,H,m)},R=(z)=>{return B.get(z)?.element},w=(z)=>{if(Math.abs(z-U)<1)return;U=z;for(let[H,m]of B)k(m.element,H),D(m.element,H)},p=()=>{for(let[,z]of B)z.element.remove(),V.release(z.element);B.clear()};return{render:j2,updatePositions:f,updateItem:l,updateItemClasses:d,getElement:R,updateContainerWidth:w,clear:p,destroy:()=>{p(),V.clear()}}};var Yj=uj(()=>{t2()});var sJ=0,k2=5,aJ=100,Aj=2,rJ=(j=0)=>{let Q=Array(k2);for(let $=0;$<k2;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},nJ=(j,Q)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>aJ){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=Q,X.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=Q,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=Q,K.time=$,j.sampleIndex=(j.sampleIndex+1)%k2,j.sampleCount=Math.min(j.sampleCount+1,k2),j.sampleCount>=Aj){let X=(j.sampleIndex-j.sampleCount+k2)%k2,q=j.samples[X],Z=Q-q.position,V=$-q.time;j.velocity=V>0?Math.abs(Z)/V:0}return j.lastPosition=Q,j.lastTime=$,j},xj=(j,Q)=>{if(typeof j==="number"){let X=Q;return{getOffset:(q)=>q*j,getHeight:()=>j,indexAtOffset:(q)=>{if(X===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(q/j),X-1))},getTotalHeight:()=>X*j,getTotal:()=>X,rebuild:(q)=>{X=q},isVariable:()=>!1}}let $=Q,J=new Float64Array(0),K=(X)=>{$=X,J=new Float64Array(X+1),J[0]=0;for(let q=0;q<X;q++)J[q+1]=J[q]+j(q)};return K(Q),{getOffset:(X)=>{if(X<=0)return 0;if(X>=$)return J[$];return J[X]},getHeight:(X)=>j(X),indexAtOffset:(X)=>{if($===0)return 0;if(X<=0)return 0;if(X>=J[$])return $-1;let q=0,Z=$-1;while(q<Z){let V=q+Z+1>>>1;if(J[V]<=X)q=V;else Z=V-1}return q},getTotalHeight:()=>J[$]??0,getTotal:()=>$,rebuild:(X)=>K(X),isVariable:()=>!0}},oJ=()=>{let j={},Q=(X,q)=>{if(!j[X])j[X]=new Set;return j[X].add(q),()=>$(X,q)},$=(X,q)=>{j[X]?.delete(q)};return{on:Q,off:$,emit:(X,q)=>{j[X]?.forEach((Z)=>{try{Z(q)}catch(V){console.error(`[vlist] Error in "${X}" handler:`,V)}})},clear:()=>{for(let X in j)delete j[X]}}},iJ=(j)=>{if(typeof j==="string"){let Q=document.querySelector(j);if(!Q)throw Error(`[vlist/builder] Container not found: ${j}`);return Q}return j},tJ=(j,Q,$,J)=>{let K=document.createElement("div");if(K.className=Q,J)K.classList.add(`${Q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),$)K.setAttribute("aria-label",$);if(J)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${Q}-viewport`,J)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let q=document.createElement("div");if(q.className=`${Q}-content`,q.style.position="relative",J)q.style.height="100%";else q.style.width="100%";let Z=document.createElement("div");if(Z.className=`${Q}-items`,Z.style.position="relative",J)Z.style.height="100%";else Z.style.width="100%";return q.appendChild(Z),X.appendChild(q),K.appendChild(X),j.appendChild(K),{root:K,viewport:X,content:q,items:Z}},eJ=(j=100)=>{let Q=[];return{acquire:()=>{let $=Q.pop();if($)return $;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:($)=>{if(Q.length<j)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),Q.push($)},clear:()=>{Q.length=0}}},j4=(j,Q,$,J,K)=>{if(J===0||Q===0){K.start=0,K.end=0;return}let X=$.indexAtOffset(j),q=$.indexAtOffset(j+Q);if(q<J-1)q++;K.start=Math.max(0,X),K.end=Math.min(J-1,Math.max(0,q))},J4=(j,Q,$,J)=>{if($===0){J.start=0,J.end=0;return}J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q)},$4=(j,Q,$,J,K)=>{if(J===0)return 0;let X=Math.max(0,Math.min(j,J-1)),q=Q.getOffset(X),Z=Q.getHeight(X),V=Math.max(0,Q.getTotalHeight()-$),B;switch(K){case"center":B=q-($-Z)/2;break;case"end":B=q-$+Z;break;default:B=q}return Math.max(0,Math.min(B,V))},Q4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,X4=(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}},hj=(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.direction==="horizontal",$=Q?"width":"height",J=Q?j.item.width:j.item.height;if(J==null)throw Error(`[vlist/builder] item.${$} is required${Q?" when direction is 'horizontal'":""}`);if(typeof J==="number"&&J<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof J!=="number"&&typeof J!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => 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 K=new Map,X=!1,q={use(Z){if(X)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(Z.name,Z),q},build(){if(X)throw Error("[vlist/builder] .build() can only be called once");return X=!0,q4(j,K,Q,J)}};return q};function q4(j,Q,$,J){let{item:K,items:X,overscan:q=3,classPrefix:Z="vlist",ariaLabel:V,reverse:B=!1,scroll:U}=j,L=U?.wheel??!0,y=U?.wrap??!1,T=B,W=`${Z}-${sJ++}`,M=J,N=$?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,O=K.template,F={overscan:q,classPrefix:Z,reverse:T,wrap:y,horizontal:$,ariaIdPrefix:W},b=Array.from(Q.values()).sort((Y,E)=>(Y.priority??50)-(E.priority??50)),_=new Set(b.map((Y)=>Y.name));for(let Y of b)if(Y.conflicts){for(let E of Y.conflicts)if(_.has(E))throw Error(`[vlist/builder] ${Y.name} and ${E} cannot be combined`)}if($){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(_.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(T){if(_.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let A=iJ(j.container),G=tJ(A,Z,V,$),P=oJ(),D=X?[...X]:[],k=xj(M,D.length),x=eJ(),j2=G.viewport.clientHeight,f=G.viewport.clientWidth,l=!1,d=!1,R=0,w=null,p=null,I=rJ(0),z={start:0,end:0},H={start:0,end:0},m={start:-1,end:-1},s={viewportState:{scrollTop:0,containerHeight:j2,totalHeight:k.getTotalHeight(),actualHeight:k.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},a=new Map,o={selected:!1,focused:!1},B2=`${Z}-item`,K2="",v=new Map,r=()=>{v.clear();for(let Y=0;Y<D.length;Y++){let E=D[Y];if(E)v.set(E.id,Y)}};r();let h=null,$2=()=>h?h.getTotal():D.length,i=[],Q2=[],D2=[],S=[],g=[],t=[],c=new Map,q2=()=>{return $?G.viewport.scrollLeft:G.viewport.scrollTop},X2=(Y)=>{if($)G.viewport.scrollLeft=Y;else G.viewport.scrollTop=Y},M2=(Y=2)=>{let E=k.getTotalHeight();return R+j2>=E-Y},A2=!1,J2,N2,L2=(Y,E,C,u,e)=>{j4(Y,E,C,u,e)},Y2=(Y,E,C,u,e)=>{return $4(Y,E,C,u,e)},V2=(Y,E)=>{if(typeof E==="string")Y.innerHTML=E;else Y.replaceChildren(E)},_2=(Y,E)=>{let C=Math.round(k.getOffset(E));if($)Y.style.transform=`translateX(${C}px)`;else Y.style.transform=`translateY(${C}px)`},H2=(Y,E)=>{let C=x.acquire();if(C.className=B2,$){if(C.style.width=`${k.getHeight(Y)}px`,N!=null)C.style.height=`${N}px`}else C.style.height=`${k.getHeight(Y)}px`;if(C.dataset.index=String(Y),C.dataset.id=String(E.id),C.ariaSelected="false",C.id=`${W}-item-${Y}`,K2=String($2()),C.setAttribute("aria-setsize",K2),C.setAttribute("aria-posinset",String(Y+1)),String(E.id).startsWith("__placeholder_"))C.classList.add(`${Z}-item--placeholder`);return V2(C,O(E,Y,o)),_2(C,Y),C},f2=()=>{let Y=`${k.getTotalHeight()}px`;if($)G.content.style.width=Y;else G.content.style.height=Y},Wj=new Set,Nj=-1,OJ=()=>{if(l)return;let Y=$2();if(L2(R,j2,k,Y,z),J4(z,q,Y,H),H.start===m.start&&H.end===m.end){if(A2)for(let[n,U2]of a)_2(U2,n);return}let E=String(Y),C=E!==K2;K2=E;for(let[n,U2]of a)if(n<H.start||n>H.end)U2.remove(),x.release(U2),a.delete(n);let u=document.createDocumentFragment(),e=[];for(let n=H.start;n<=H.end;n++){let U2=h?h.getItem(n):D[n];if(!U2)continue;let Z2=a.get(n);if(Z2){let F2=Z2.dataset.id,p2=String(U2.id);if(F2!==p2){let hJ=F2?.startsWith("__placeholder_"),Ij=p2.startsWith("__placeholder_");if(V2(Z2,O(U2,n,o)),Z2.dataset.id=p2,$)Z2.style.width=`${k.getHeight(n)}px`;else Z2.style.height=`${k.getHeight(n)}px`;if(Ij)Z2.classList.add(`${Z}-item--placeholder`);else Z2.classList.remove(`${Z}-item--placeholder`);if(hJ&&!Ij)Z2.classList.add(`${Z}-item--replaced`),setTimeout(()=>{Z2.classList.remove(`${Z}-item--replaced`)},300)}_2(Z2,n);let r2=Wj.has(U2.id),xJ=n===Nj;if(Z2.classList.toggle(`${Z}-item--selected`,r2),Z2.classList.toggle(`${Z}-item--focused`,xJ),Z2.ariaSelected=r2?"true":"false",C)Z2.setAttribute("aria-setsize",K2)}else{let F2=H2(n,U2),p2=Wj.has(U2.id),r2=n===Nj;if(p2)F2.classList.add(`${Z}-item--selected`),F2.ariaSelected="true";if(r2)F2.classList.add(`${Z}-item--focused`);u.appendChild(F2),e.push({index:n,element:F2})}}if(e.length>0){G.items.appendChild(u);for(let{index:n,element:U2}of e)a.set(n,U2)}m.start=H.start,m.end=H.end,s.lastRenderRange.start=H.start,s.lastRenderRange.end=H.end,s.viewportState.scrollTop=R,s.viewportState.visibleRange.start=z.start,s.viewportState.visibleRange.end=z.end,s.viewportState.renderRange.start=H.start,s.viewportState.renderRange.end=H.end,P.emit("range:change",{range:{start:H.start,end:H.end}})},zJ=()=>{m.start=-1,m.end=-1,J2()};J2=OJ,N2=zJ;let I2=()=>{if(l)return;let Y=q2(),E=Y>=R?"down":"up";if(I=nJ(I,Y),!G.root.classList.contains(`${Z}--scrolling`))G.root.classList.add(`${Z}--scrolling`);R=Y,J2(),P.emit("scroll",{scrollTop:Y,direction:E}),P.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Aj});for(let C=0;C<i.length;C++)i[C](Y,E);if(p)clearTimeout(p);p=setTimeout(()=>{G.root.classList.remove(`${Z}--scrolling`),I.velocity=0,I.sampleCount=0,P.emit("velocity:change",{velocity:0,reliable:!1})},U?.idleTimeout??150)},s2=null,R2=G.viewport;if(R2.addEventListener("scroll",I2,{passive:!0}),$&&L)s2=(Y)=>{if(Y.deltaX)return;Y.preventDefault(),G.viewport.scrollLeft+=Y.deltaY},G.viewport.addEventListener("wheel",s2);let Tj=(Y)=>{let C=Y.target.closest("[data-index]");if(C){let u=parseInt(C.dataset.index??"-1",10);if(u>=0){let e=h?.getItem(u)??D[u];if(e){if(e.__groupHeader)return;P.emit("item:click",{item:e,index:u,event:Y})}}}for(let u=0;u<Q2.length;u++)Q2[u](Y)},bJ=(Y)=>{let C=Y.target.closest("[data-index]");if(C){let u=parseInt(C.dataset.index??"-1",10);if(u>=0){let e=h?.getItem(u)??D[u];if(e){if(e.__groupHeader)return;P.emit("item:dblclick",{item:e,index:u,event:Y})}}}},wj=(Y)=>{for(let E=0;E<D2.length;E++)D2[E](Y)};G.items.addEventListener("click",Tj),G.items.addEventListener("dblclick",bJ),G.root.addEventListener("keydown",wj);let Gj=!0,PJ=()=>f,yJ=()=>j2,Vj=new ResizeObserver((Y)=>{if(l)return;for(let E of Y){let C=E.contentRect.height,u=E.contentRect.width,e=$?u:C;if(f=u,Math.abs(e-j2)>1){if(j2=e,s.viewportState.containerHeight=e,d)f2(),J2(),P.emit("resize",{height:C,width:u})}if(d)for(let n=0;n<S.length;n++)S[n](u,C)}});if(Gj)Vj.observe(G.viewport);let W2={get dom(){return G},get heightCache(){return k},get emitter(){return P},get config(){return F},get rawConfig(){return j},get renderer(){return{render:(Y,E,C,u,e)=>{Wj=C,Nj=u,N2()},updateItemClasses:(Y,E,C)=>{let u=a.get(Y);if(!u)return;u.classList.toggle(`${Z}-item--selected`,E),u.classList.toggle(`${Z}-item--focused`,C),u.ariaSelected=E?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Y)=>a.get(Y)??null,clear:()=>{},destroy:()=>{}}},set renderer(Y){},get dataManager(){return h},set dataManager(Y){h=Y},get scrollController(){return _j},set scrollController(Y){_j=Y},state:s,getContainerWidth(){return f},afterScroll:i,clickHandlers:Q2,keydownHandlers:D2,resizeHandlers:S,contentSizeHandlers:g,destroyHandlers:t,methods:c,replaceTemplate(Y){O=Y},replaceRenderer(Y){},replaceDataManager(Y){h=Y},replaceScrollController(Y){_j=Y},getItemsForRange(Y){let E=[];for(let C=Y.start;C<=Y.end;C++){let u=h?h.getItem(C):D[C];if(u)E.push(u)}return E},getAllLoadedItems(){if(h){let Y=h.getTotal(),E=[];for(let C=0;C<Y;C++){let u=h.getItem(C);if(u)E.push(u)}return E}return[...D]},getVirtualTotal(){return $2()},getCachedCompression(){return{isCompressed:!1,actualHeight:k.getTotalHeight(),virtualHeight:k.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:R,totalItems:$2(),containerHeight:j2,rangeStart:H.start}},renderIfNeeded(){J2()},forceRender(){N2()},invalidateRendered(){for(let[,Y]of a)Y.remove(),x.release(Y);a.clear()},getRenderFns(){return{renderIfNeeded:J2,forceRender:N2}},setRenderFns(Y,E){J2=Y,N2=E},setVirtualTotalFn(Y){$2=Y},rebuildHeightCache(Y){k.rebuild(Y??$2())},setHeightConfig(Y){k=xj(Y,$2())},updateContentSize(Y){let E=`${Y}px`;if($)G.content.style.width=E;else G.content.style.height=E},updateCompressionMode(){},setVisibleRangeFn(Y){L2=Y},setScrollToPosFn(Y){Y2=Y},setPositionElementFn(Y){_2=Y},setScrollFns(Y,E){q2=Y,X2=(C)=>{E(C),I2()}},setScrollTarget(Y){R2.removeEventListener("scroll",I2),R2=Y,R2.addEventListener("scroll",I2,{passive:!0})},getScrollTarget(){return R2},setContainerDimensions(Y){PJ=Y.width,yJ=Y.height,f=Y.width(),j2=Y.height(),s.viewportState.containerHeight=j2},disableViewportResize(){if(Gj)Gj=!1,Vj.unobserve(G.viewport)}};h={getState:()=>({total:D.length,cached:D.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>D.length,getCached:()=>D.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>D[Y],getItemById:(Y)=>{let E=v.get(Y);return E!==void 0?D[E]:void 0},getIndexById:(Y)=>v.get(Y)??-1,isItemLoaded:(Y)=>Y>=0&&Y<D.length&&D[Y]!==void 0,getItemsInRange:(Y,E)=>{let C=[],u=Math.max(0,Y),e=Math.min(E,D.length-1);for(let n=u;n<=e;n++)C.push(D[n]);return C},setTotal:(Y)=>{},setItems:(Y,E=0,C)=>{if(E===0&&(C!==void 0||D.length===0))D=[...Y];else{let u=E+Y.length;if(D.length<u)D.length=u;for(let e=0;e<Y.length;e++)D[E+e]=Y[e]}if(r(),d){k.rebuild($2()),f2(),W2.updateCompressionMode();for(let u=0;u<g.length;u++)g[u]();N2()}},updateItem:(Y,E)=>{let C=v.get(Y);if(C===void 0)return!1;let u=D[C];if(!u)return!1;if(D[C]={...u,...E},E.id!==void 0&&E.id!==Y)v.delete(Y),v.set(E.id,C);let e=a.get(C);if(e)V2(e,O(D[C],C,o)),e.dataset.id=String(D[C].id);return!0},removeItem:(Y)=>{let E=v.get(Y);if(E===void 0)return!1;if(D.splice(E,1),r(),d){k.rebuild($2()),f2(),W2.updateCompressionMode();for(let C=0;C<g.length;C++)g[C]();N2()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{D=[],v.clear()},reset:()=>{if(D=[],v.clear(),d)k.rebuild(0),f2(),N2()}};let _j={getScrollTop:()=>q2(),scrollTo:(Y)=>{X2(Y),R=Y,J2()},scrollBy:(Y)=>{let E=q2()+Y;X2(E),R=E,J2()},isAtTop:()=>R<=2,isAtBottom:(Y=2)=>M2(Y),getScrollPercentage:()=>{let Y=k.getTotalHeight(),E=Math.max(0,Y-j2);return E>0?R/E:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Aj,isScrolling:()=>G.root.classList.contains(`${Z}--scrolling`),updateConfig:()=>{},enableCompression:()=>{A2=!0},disableCompression:()=>{A2=!1},isCompressed:()=>A2,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{j2=Y},destroy:()=>{}},vj=new Map;for(let Y of b)if(Y.methods)for(let E of Y.methods){let C=vj.get(E);if(C)throw Error(`[vlist/builder] Method "${E}" is registered by both "${C}" and "${Y.name}"`);vj.set(E,Y.name)}for(let Y of b)Y.setup(W2);if(d=!0,W2.state.isInitialized=!0,f2(),J2(),T&&D.length>0){let Y=Y2(D.length-1,k,j2,D.length,"end");X2(Y),R=Y,J2()}let HJ=(Y)=>{W2.dataManager.setItems(Y,0,Y.length)},RJ=T?(Y)=>{let E=M2(2),C=D.length;if(W2.dataManager.setItems(Y,C),E&&D.length>0){let u=Y2(D.length-1,k,j2,D.length,"end");X2(u),R=u,J2()}}:(Y)=>{let E=D.length;W2.dataManager.setItems(Y,E)},kJ=T?(Y)=>{let E=q2(),C=k.getTotalHeight(),u=[...D];W2.dataManager.clear(),W2.dataManager.setItems([...Y,...u],0);let n=k.getTotalHeight()-C;if(n>0)X2(E+n),R=E+n}:(Y)=>{let E=[...D];W2.dataManager.clear(),W2.dataManager.setItems([...Y,...E],0)},CJ=(Y,E)=>{W2.dataManager.updateItem(Y,E)},TJ=(Y)=>{W2.dataManager.removeItem(Y)},wJ=async()=>{if(W2.dataManager.reload)await W2.dataManager.reload()},a2=()=>{if(w!==null)cancelAnimationFrame(w),w=null},vJ=(Y,E,C)=>{if(a2(),Math.abs(E-Y)<1){X2(E),R=E,J2();return}let u=performance.now(),e=(n)=>{let U2=n-u,Z2=Math.min(U2/C,1),F2=Y+(E-Y)*Q4(Z2);if(X2(F2),R=F2,J2(),Z2<1)w=requestAnimationFrame(e);else w=null};w=requestAnimationFrame(e)},Sj=(Y,E)=>{let{align:C,behavior:u,duration:e}=X4(E),n=$2(),U2=Y;if(y&&n>0)U2=(U2%n+n)%n;let Z2=Y2(U2,k,j2,n,C);if(u==="smooth")vJ(q2(),Z2,e);else a2(),X2(Z2)},SJ=(Y,E)=>{let C=v.get(Y)??W2.dataManager.getIndexById(Y);if(C>=0)Sj(C,E)},fJ=()=>q2(),IJ=(Y,E)=>{return P.on(Y,E)},pJ=(Y,E)=>{P.off(Y,E)},uJ=()=>{if(l)return;if(l=!0,W2.state.isDestroyed=!0,G.items.removeEventListener("click",Tj),G.root.removeEventListener("keydown",wj),R2.removeEventListener("scroll",I2),Vj.disconnect(),s2)G.viewport.removeEventListener("wheel",s2);if(p)clearTimeout(p);for(let Y=0;Y<t.length;Y++)t[Y]();for(let Y of b)if(Y.destroy)Y.destroy();a2();for(let[,Y]of a)Y.remove(),x.release(Y);a.clear(),x.clear(),P.clear(),G.root.remove()},fj={get element(){return G.root},get items(){if(c.has("_getItems"))return c.get("_getItems")();return D},get total(){if(c.has("_getTotal"))return c.get("_getTotal")();return $2()},setItems:c.has("setItems")?c.get("setItems"):HJ,appendItems:c.has("appendItems")?c.get("appendItems"):RJ,prependItems:c.has("prependItems")?c.get("prependItems"):kJ,updateItem:c.has("updateItem")?c.get("updateItem"):CJ,removeItem:c.has("removeItem")?c.get("removeItem"):TJ,reload:c.has("reload")?c.get("reload"):wJ,scrollToIndex:c.has("scrollToIndex")?c.get("scrollToIndex"):Sj,scrollToItem:c.has("scrollToItem")?c.get("scrollToItem"):SJ,cancelScroll:c.has("cancelScroll")?c.get("cancelScroll"):a2,getScrollPosition:c.has("getScrollPosition")?c.get("getScrollPosition"):fJ,on:IJ,off:pJ,destroy:uJ};for(let[Y,E]of c){if(Y==="setItems"||Y==="appendItems"||Y==="prependItems"||Y==="updateItem"||Y==="removeItem"||Y==="reload"||Y==="scrollToIndex"||Y==="scrollToItem"||Y==="cancelScroll"||Y==="getScrollPosition")continue;fj[Y]=E}return fj}t2();var T2=(j,Q,$={},J="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:q=1000,minThumbSize:Z=30,showOnHover:V=!0,hoverZoneWidth:B=16,showOnViewportEnter:U=!0}=$,L=0,y=0,T=0,W=0,M=!1,N=!1,O=0,F=0,b=0,_=null,A=!1,G=null,P=null,D=K?"width":"height",k=K?"translateX":"translateY",x=K?(i)=>i.clientX:(i)=>i.clientY,j2=K?"left":"top",f=document.createElement("div"),l=document.createElement("div"),d=V?document.createElement("div"):null,R=()=>{if(f.className=`${J}-scrollbar`,l.className=`${J}-scrollbar-thumb`,K)f.classList.add(`${J}-scrollbar--horizontal`);if(f.appendChild(l),j.appendChild(f),d){if(d.className=`${J}-scrollbar-hover`,K)d.classList.add(`${J}-scrollbar-hover--horizontal`),d.style.height=`${B}px`;else d.style.width=`${B}px`;j.appendChild(d)}},w=()=>{if(_)clearTimeout(_),_=null},p=()=>{if(!X)return;w(),_=setTimeout(z,q)},I=()=>{if(L<=y)return;if(w(),!A)f.classList.add(`${J}-scrollbar--visible`),A=!0;if(X&&!M&&!N)p()},z=()=>{if(M||N)return;f.classList.remove(`${J}-scrollbar--visible`),A=!1},H=(i,Q2)=>{L=i,y=Q2;let D2=L>y;if(f.style.display=D2?"":"none",!D2){z();return}let S=y/L;T=Math.max(Z,S*y),l.style[D]=`${T}px`,W=y-T,m(b)},m=(i)=>{if(b=i,L<=y||W<=0)return;let Q2=L-y,S=Math.min(1,Math.max(0,i/Q2))*W;l.style.transform=`${k}(${S}px)`},s=(i)=>{if(i.target===l)return;let Q2=f.getBoundingClientRect(),g=x(i)-Q2[j2]-T/2,c=Math.max(0,Math.min(g,W))/W,q2=L-y,X2=c*q2;Q(X2),I()},a=(i)=>{i.preventDefault(),i.stopPropagation(),M=!0,O=x(i),F=b,w(),f.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",o),document.addEventListener("mouseup",B2)},o=(i)=>{if(!M)return;let Q2=x(i)-O,D2=W>0?Q2/W:0,S=L-y,g=D2*S,t=Math.max(0,Math.min(F+g,S)),q2=t/S*W;if(l.style.transform=`${k}(${q2}px)`,P=t,G===null)G=requestAnimationFrame(()=>{if(P!==null)Q(P);G=null})},B2=()=>{if(M=!1,G!==null)cancelAnimationFrame(G),G=null;if(P!==null)Q(P),P=null;if(f.classList.remove(`${J}-scrollbar--dragging`),X&&!N)p();document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",B2)},K2=()=>{if(U)I()},v=()=>{if(!M){if(N=!1,X)p()}},r=()=>{N=!0,w(),I()},h=()=>{if(N=!1,!M&&X)p()},$2=()=>{if(w(),G!==null)cancelAnimationFrame(G),G=null;if(f.removeEventListener("click",s),f.removeEventListener("mouseenter",r),f.removeEventListener("mouseleave",h),l.removeEventListener("mousedown",a),j.removeEventListener("mouseenter",K2),j.removeEventListener("mouseleave",v),document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",B2),d){if(d.removeEventListener("mouseenter",r),d.removeEventListener("mouseleave",h),d.parentNode)d.parentNode.removeChild(d)}if(f.parentNode)f.parentNode.removeChild(f)};if(R(),f.addEventListener("click",s),f.addEventListener("mouseenter",r),f.addEventListener("mouseleave",h),l.addEventListener("mousedown",a),j.addEventListener("mouseenter",K2),j.addEventListener("mouseleave",v),d)d.addEventListener("mouseenter",r),d.addEventListener("mouseleave",h);return{show:I,hide:z,updateBounds:H,updatePosition:m,isVisible:()=>A,destroy:$2}};var oj=(j)=>{let Q=null;return{name:"withScrollbar",priority:30,setup($){let{dom:J,config:K}=$,{classPrefix:X,horizontal:q}=K;if(Q=T2(J.viewport,(B)=>$.scrollController.scrollTo(B),j??{},X,q),!J.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))J.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let Z=$.getCachedCompression();Q.updateBounds(Z.virtualHeight,$.state.viewportState.containerHeight);let V=Q;$.afterScroll.push((B,U)=>{V.updatePosition(B),V.show()}),$.resizeHandlers.push((B,U)=>{if(V){let L=$.getCachedCompression();V.updateBounds(L.virtualHeight,$.state.viewportState.containerHeight)}}),$.contentSizeHandlers.push(()=>{if(V){let B=$.getCachedCompression();V.updateBounds(B.virtualHeight,$.state.viewportState.containerHeight)}}),$.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(Q)Q.destroy(),Q=null}}};var ij=(j=0)=>{let Q=[,,,,,,,,];for(let $=0;$<8;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:j,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},e2=(j,Q)=>{let $=performance.now(),J=$-j.lastTime;if(J===0)return j;if(J>100){j.sampleCount=0,j.sampleIndex=0,j.velocity=0;let X=j.samples[0];return X.position=Q,X.time=$,j.sampleIndex=1,j.sampleCount=1,j.lastPosition=Q,j.lastTime=$,j}let K=j.samples[j.sampleIndex];if(K.position=Q,K.time=$,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,q=j.samples[X],Z=Q-q.position,V=$-q.time;j.velocity=V>0?Z/V:0}return j.lastPosition=Q,j.lastTime=$,j},Z4=(j)=>j.sampleCount>=3,tj=(j,Q={})=>{let{wheel:$=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:X=150,onScroll:q,onIdle:Z,scrollElement:V,horizontal:B=!1}=Q,U=!!V,L=0,y=0,T=U?B?window.innerWidth:window.innerHeight:B?j.clientWidth:j.clientHeight,W=Q.compressed??!1,M=Q.compression,N=ij(),O=!1,F=null,_=jj(()=>{let v=B?j.scrollLeft:j.scrollTop,r=v>=L?"down":"up";if(N=e2(N,v),L=v,q)q({scrollTop:L,direction:r,velocity:N.velocity});x()}),G=jj(()=>{let v=j.getBoundingClientRect(),r=B?Math.max(0,-v.left):Math.max(0,-v.top),h=r>=L?"down":"up";if(N=e2(N,r),L=r,!O)O=!0;if(q)q({scrollTop:L,direction:h,velocity:N.velocity});x()}),P=(v)=>{v.preventDefault()},D=(v)=>{if(v.deltaX)return;v.preventDefault(),j.scrollLeft+=v.deltaY},k=(v)=>{if(!W)return;v.preventDefault();let r=(B?v.deltaX||v.deltaY:v.deltaY)*J,h=L+r;if(K)h=L+r*0.3;if(h=Math.max(0,Math.min(h,y)),h!==L){let i=h>=L?"down":"up";if(N=e2(N,h),L=h,!O)O=!0;if(q)q({scrollTop:L,direction:i,velocity:N.velocity});x()}},x=()=>{if(F)clearTimeout(F);F=setTimeout(()=>{if(O=!1,N=ij(L),Z)Z()},X)},j2=(v)=>{if(W)return;if(W=!0,M=v,y=v.virtualHeight-T,U)return;if(_.cancel(),j.removeEventListener("scroll",_),!$)j.removeEventListener("wheel",P);else if(B)j.removeEventListener("wheel",D);if(B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",k,{passive:!1});let r=B?j.scrollLeft:j.scrollTop;if(r>0){let h=B?M?.actualHeight??j.scrollWidth:M?.actualHeight??j.scrollHeight;L=r/h*y}if(B)j.scrollLeft=0;else j.scrollTop=0},f=()=>{if(!W)return;if(W=!1,U){M=void 0;return}if(j.removeEventListener("wheel",k),B)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!$)j.addEventListener("wheel",P,{passive:!1});else if(B)j.addEventListener("wheel",D,{passive:!1});if(M&&L>0){let r=L/y*(M.actualHeight-T);if(B)j.scrollLeft=r;else j.scrollTop=r}M=void 0},l=()=>{if(U||W)return L;return B?j.scrollLeft:j.scrollTop},d=(v,r=!1)=>{let h=Math.max(0,Math.min(v,y||1/0));if(U){let $2=j.getBoundingClientRect();if(B){let i=$2.left+window.scrollX;window.scrollTo({left:i+h,behavior:r?"smooth":"auto"})}else{let i=$2.top+window.scrollY;window.scrollTo({top:i+h,behavior:r?"smooth":"auto"})}}else if(W){if(h===L)return;let i=h>=L?"down":"up";if(N=e2(N,h),L=h,!O)O=!0;if(q)q({scrollTop:L,direction:i,velocity:N.velocity});x()}else if(B)j.scrollTo({left:h,behavior:r?"smooth":"auto"});else j.scrollTo({top:h,behavior:r?"smooth":"auto"})},R=(v)=>{d(l()+v)},w=()=>{return l()<=0},p=(v=0)=>{let r=l(),h=U||W?y:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return r>=h-v},I=()=>{let v=l(),r=U||W?y:B?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(r<=0)return 0;return Math.min(1,Math.max(0,v/r))},z=(v)=>{if(v.compression)M=v.compression,y=M.virtualHeight-T},H=()=>W,m=()=>Math.abs(N.velocity),s=()=>Z4(N),a=()=>O,o=()=>U,B2=(v)=>{if(T=v,M)y=M.virtualHeight-T},K2=()=>{if(F)clearTimeout(F);if(U)G.cancel(),window.removeEventListener("scroll",G);else _.cancel(),j.removeEventListener("scroll",_),j.removeEventListener("wheel",k),j.removeEventListener("wheel",P),j.removeEventListener("wheel",D)};if(U){if(W&&M)y=M.virtualHeight-T;window.addEventListener("scroll",G,{passive:!0})}else if(W&&M){if(y=M.virtualHeight-T,B)j.style.overflowX="hidden";else j.style.overflow="hidden";if($)j.addEventListener("wheel",k,{passive:!1})}else{if(B)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",_,{passive:!0}),!$)j.addEventListener("wheel",P,{passive:!1});else if(B)j.addEventListener("wheel",D,{passive:!1})}return{getScrollTop:l,scrollTo:d,scrollBy:R,isAtTop:w,isAtBottom:p,getScrollPercentage:I,getVelocity:m,isTracking:s,isScrolling:a,updateConfig:z,enableCompression:j2,disableCompression:f,isCompressed:H,isWindowMode:o,updateContainerHeight:B2,destroy:K2}},jj=(j)=>{let Q=null,$=null,J=(...K)=>{if($=K,Q===null)Q=requestAnimationFrame(()=>{if(Q=null,$)j(...$)})};return J.cancel=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null},J};var B4=0.65,U4=0.5,D4=0.95,W4=0.1,N4=5,G4=100,ej=()=>{let j=null,Q=0,$=!1,J=0,K=null,X=0,q=0,Z=null,V=[];return{name:"withScale",priority:20,setup(B){let{dom:U,config:L}=B,{classPrefix:y,horizontal:T}=L,W=()=>{let F=B.getVirtualTotal(),b=E2(F,B.heightCache);if(b.isCompressed&&!$){$=!0,B.scrollController.enableCompression(b),B.updateContentSize(b.virtualHeight),B.setScrollFns(()=>Q,(f)=>{if(Q=f,J=f,K!==null)cancelAnimationFrame(K),K=null});let _=()=>{let f=J-Q;if(Math.abs(f)<U4)Q=J,K=null;else Q+=f*B4,K=requestAnimationFrame(_);B.scrollController.scrollTo(Q)},A=U.viewport,G=(f)=>{f.preventDefault();let d=B.getCachedCompression().virtualHeight-B.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+f.deltaY,d)),K===null)K=requestAnimationFrame(_)};A.addEventListener("wheel",G,{passive:!1});let P=()=>{if(Z!==null)cancelAnimationFrame(Z),Z=null},D=(f)=>{if(P(),K!==null)cancelAnimationFrame(K),K=null;let l=f.touches[0];if(!l)return;let d=T?l.clientX:l.clientY;X=d,q=Q,V=[{time:performance.now(),y:d}]},k=(f)=>{f.preventDefault();let l=f.touches[0];if(!l)return;let d=T?l.clientX:l.clientY,R=performance.now();if(V.push({time:R,y:d}),V.length>N4)V.shift();let w=X-d,I=B.getCachedCompression().virtualHeight-B.state.viewportState.containerHeight,z=Math.max(0,Math.min(q+w,I));Q=z,J=z,B.scrollController.scrollTo(z)},x=(f)=>{let l=performance.now(),d=V.filter((I)=>l-I.time<G4),R=0;if(d.length>=2){let I=d[0],z=d[d.length-1],H=z.time-I.time;if(H>0)R=(I.y-z.y)/H}if(V=[],Math.abs(R)<W4)return;let w=R*16,p=()=>{if(w*=D4,Math.abs(w)<0.5){Z=null;return}let z=B.getCachedCompression().virtualHeight-B.state.viewportState.containerHeight,H=Q+w;if(H=Math.max(0,Math.min(H,z)),H<=0&&w<0||H>=z&&w>0){Q=H,J=H,B.scrollController.scrollTo(H),Z=null;return}Q=H,J=H,B.scrollController.scrollTo(H),Z=requestAnimationFrame(p)};Z=requestAnimationFrame(p)};if(A.addEventListener("touchstart",D,{passive:!0}),A.addEventListener("touchmove",k,{passive:!1}),A.addEventListener("touchend",x,{passive:!0}),A.addEventListener("touchcancel",x,{passive:!0}),B.destroyHandlers.push(()=>{if(A.removeEventListener("wheel",G),A.removeEventListener("touchstart",D),A.removeEventListener("touchmove",k),A.removeEventListener("touchend",x),A.removeEventListener("touchcancel",x),P(),K!==null)cancelAnimationFrame(K),K=null}),!U.viewport.querySelector(`.${y}-scrollbar-track`)){if(j=T2(U.viewport,(l)=>B.scrollController.scrollTo(l),{},y,T),!U.viewport.classList.contains(`${y}-viewport--custom-scrollbar`))U.viewport.classList.add(`${y}-viewport--custom-scrollbar`);j.updateBounds(b.virtualHeight,B.state.viewportState.containerHeight);let f=j;B.afterScroll.push((l,d)=>{if(f)f.updatePosition(l),f.show()}),B.resizeHandlers.push((l,d)=>{if(f){let R=B.getCachedCompression();f.updateBounds(R.virtualHeight,B.state.viewportState.containerHeight)}})}}else if(!b.isCompressed&&$)$=!1,B.scrollController.disableCompression(),B.updateContentSize(b.actualHeight);else if(b.isCompressed)B.scrollController.updateConfig({compression:b}),B.updateContentSize(b.virtualHeight);if(j)j.updateBounds(b.virtualHeight,B.state.viewportState.containerHeight);B.state.cachedCompression={state:b,totalItems:F}};B.updateCompressionMode=W;let M=B.getCachedCompression.bind(B);B.getCachedCompression=()=>{if(B.state.cachedCompression)return B.state.cachedCompression.state;return M()},B.setVisibleRangeFn((F,b,_,A,G)=>{N=null,O=null;let P=E2(A,_);o2(F,b,_,A,P,G)}),B.setScrollToPosFn((F,b,_,A,G)=>{let P=E2(A,b);return i2(F,b,_,A,P,G)});let N=null,O=null;B.setPositionElementFn((F,b)=>{let _=B.getVirtualTotal(),A=E2(_,B.heightCache);if(A.isCompressed){let G=B.scrollController.getScrollTop();if(N===null||b<O)O=b,N=Math.round(C2(b,G,B.heightCache,_,B.state.viewportState.containerHeight,A));let P=N+B.heightCache.getOffset(b)-B.heightCache.getOffset(O),D=B.config.horizontal;F.style.transform=D?`translateX(${P}px)`:`translateY(${P}px)`}else{let G=Math.round(B.heightCache.getOffset(b)),P=B.config.horizontal;F.style.transform=P?`translateX(${G}px)`:`translateY(${G}px)`}}),W(),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(Z!==null)cancelAnimationFrame(Z),Z=null}}};var Jj=(j={})=>{let{chunkSize:Q=100,maxCachedItems:$=5000,evictionBuffer:J=200,onEvict:K}=j,X=new Map,q=0,Z=0,V=(R)=>{let w=X.get(R);if(!w)w={items:Array(Q),count:0,lastAccess:Date.now()},X.set(R,w);else w.lastAccess=Date.now();return w},B=(R)=>{return Math.floor(R/Q)},U=(R)=>{return R%Q},L=()=>q,y=(R)=>{q=R},T=(R)=>{if(R<0||R>=q)return;let w=B(R),p=X.get(w);if(!p)return;return p.items[U(R)]},W=(R)=>{if(R<0||R>=q)return!1;let w=B(R),p=X.get(w);if(!p)return!1;return p.items[U(R)]!==void 0},M=(R,w)=>{let p=B(R),I=V(p),z=U(R),H=I.items[z]===void 0;if(I.items[z]=w,H)I.count++,Z++;if(R>=q)q=R+1},N=(R,w)=>{for(let p=0;p<w.length;p++){let I=w[p];if(I!==void 0)M(R+p,I)}},O=(R)=>{if(R<0||R>=q)return!1;let w=B(R),p=X.get(w);if(!p)return!1;let I=U(R);if(p.items[I]===void 0)return!1;if(p.items[I]=void 0,p.count--,Z--,p.count===0)X.delete(w);return!0},F=(R,w)=>{let p=[];for(let I=R;I<=w&&I<q;I++)p.push(T(I));return p},b=(R,w)=>{for(let p=R;p<=w&&p<q;p++)if(!W(p))return!1;return!0},_=()=>{let R=[],w=null,p=Array.from(X.keys()).sort((I,z)=>I-z);for(let I of p){let z=X.get(I);if(!z)continue;let H=I*Q;for(let m=0;m<Q;m++){let s=H+m;if(s>=q)break;if(z.items[m]!==void 0)if(w===null)w={start:s,end:s};else if(s===w.end+1)w.end=s;else R.push(w),w={start:s,end:s};else if(w!==null)R.push(w),w=null}}if(w!==null)R.push(w);return R},A=(R,w)=>{let p=[],I=null;for(let z=R;z<=w&&z<q;z++)if(!W(z))if(I===null)I={start:z,end:z};else I.end=z;else if(I!==null)p.push(I),I=null;if(I!==null)p.push(I);return p},G=(R)=>{return X.has(R)},P=(R)=>{let w=X.get(R);if(w)w.lastAccess=Date.now()},D=(R,w)=>{if(R>w||X.size===0)return;let p=Date.now(),I=B(Math.max(0,R)),z=B(Math.min(q-1,w));for(let H=I;H<=z;H++){let m=X.get(H);if(m)m.lastAccess=p}},k=(R,w)=>{if(Z<=$)return 0;let p=Math.max(0,R-J),I=Math.min(q-1,w+J),z=B(p),H=B(I),m=0,s=[];for(let[a,o]of X)if(a<z||a>H)m+=o.count,s.push(a),Z-=o.count,X.delete(a);if(m>0&&K)K(m,s);return m},x=()=>{if(Z<=$)return 0;let R=Array.from(X.entries()).sort(([,I],[,z])=>I.lastAccess-z.lastAccess),w=0,p=[];for(let[I,z]of R){if(Z<=$)break;w+=z.count,Z-=z.count,p.push(I),X.delete(I)}if(w>0&&K)K(w,p);return w},j2=()=>{return{totalItems:q,cachedItems:Z,cachedChunks:X.size,chunkSize:Q,maxCachedItems:$,memoryEfficiency:q>0?1-Z/q:1}},f=()=>Z,l=()=>{X.clear(),Z=0};return{chunkSize:Q,maxCachedItems:$,getTotal:L,setTotal:y,get:T,has:W,set:M,setRange:N,delete:O,getRange:F,isRangeLoaded:b,getLoadedRanges:_,findUnloadedRanges:A,getChunkIndex:B,isChunkLoaded:G,touchChunk:P,touchChunksForRange:D,evictDistant:k,evictToLimit:x,getStats:j2,getCachedCount:f,clear:l,reset:()=>{l(),q=0}}},$j=(j)=>{if(j.length===0)return[];let Q=[...j].sort((J,K)=>J.start-K.start),$=[{...Q[0]}];for(let J=1;J<Q.length;J++){let K=Q[J],X=$[$.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else $.push({...K})}return $},h2=(j,Q,$)=>{let J=Math.floor(j.start/$)*$,K=Math.ceil((j.end+1)/$)*$-1,X={start:J,end:K};if(Q.length===0)return[X];let q=[],Z=$j(Q),V=X.start;for(let B of Z){if(B.end<V)continue;if(B.start>X.end)break;if(B.start>V)q.push({start:V,end:Math.min(B.start-1,X.end)});if(V=B.end+1,V>X.end)break}if(V<=X.end)q.push({start:V,end:X.end});return q};var Qj=(j={})=>{let{enabled:Q=!0,maskCharacter:$="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:X}=j,q=null,Z=!1,V=0,B=(O)=>{if(!Q||Z||O.length===0)return;let F=new Map,b=new Map,_=Math.min(O.length,K);for(let A=0;A<_;A++){let G=O[A];if(!G||typeof G!=="object")continue;for(let[P,D]of Object.entries(G)){if(P.startsWith("_")||P==="id")continue;if(!b.has(P))b.set(P,{lengths:[],types:new Set});let k=b.get(P),x=Array.isArray(D)?"array":typeof D;if(k.types.add(x),typeof D==="string")k.lengths.push(D.length);else if(D!==null&&D!==void 0)k.lengths.push(String(D).length)}}for(let[A,G]of b){if(G.lengths.length===0)continue;let P=Math.min(...G.lengths),D=Math.max(...G.lengths),k=Math.round(G.lengths.reduce((j2,f)=>j2+f,0)/G.lengths.length),x="string";if(G.types.has("number")&&G.types.size===1)x="number";else if(G.types.has("boolean")&&G.types.size===1)x="boolean";else if(G.types.has("array"))x="array";else if(G.types.has("object")&&!G.types.has("string"))x="object";F.set(A,{minLength:P,maxLength:D,avgLength:k,type:x})}q=F,Z=!0},U=()=>Z,L=(O)=>{let F=O.avgLength;if(J&&O.minLength!==O.maxLength){if(F=Math.floor(Math.random()*(O.maxLength-O.minLength+1)+O.minLength),Math.random()<0.3)F=Math.max(1,F+Math.floor(Math.random()*3)-1)}return $.repeat(Math.max(1,F))},y=(O)=>{if(X)return{...X(O),["_isPlaceholder"]:!0};let F={id:`__placeholder_${V++}`,["_isPlaceholder"]:!0,_index:O};if(!q||q.size===0)return F.label=$.repeat(12),F;for(let[b,_]of q)switch(_.type){case"string":F[b]=L(_);break;case"number":F[b]=0;break;case"boolean":F[b]=!1;break;case"array":F[b]=[];break;case"object":F[b]={};break;default:F[b]=L(_)}return F};return{analyzeStructure:B,hasAnalyzedStructure:U,generate:y,generateRange:(O,F)=>{let b=[];for(let _=O;_<=F;_++)b.push(y(_));return b},isPlaceholder:(O)=>{if(!O||typeof O!=="object")return!1;return O._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{q=null,Z=!1,V=0}}},b2=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},Oj=(j)=>{return j.filter((Q)=>!b2(Q))};var _4=50,Xj=(j={})=>{let{adapter:Q,initialItems:$,initialTotal:J,storage:K,placeholder:X,pageSize:q=_4,onStateChange:Z,onItemsLoaded:V,onItemsEvicted:B}=j,U=Jj({...K,onEvict:(S,g)=>{B?.(S),A()}}),L=null,y=()=>{if(!L)L=Qj(X);return L},T=new Map,W=!1,M,N=!0,O,F=[],b=0,_=new Map,A=()=>{Z?.(d())},G=()=>{T.clear();let S=U.getLoadedRanges();for(let g of S)for(let t=g.start;t<=g.end;t++){let c=U.get(t);if(c&&!b2(c))T.set(c.id,t)}},P=(S,g)=>{if(!b2(g))T.set(g.id,S)},D=(S)=>{T.delete(S)},k=(S,g)=>{return`${S}-${g}`},x=()=>U.getTotal(),j2=()=>U.getCachedCount(),f=()=>W,l=()=>N,d=()=>({total:U.getTotal(),cached:U.getCachedCount(),isLoading:W,pendingRanges:F,error:M,hasMore:N,cursor:O}),R=()=>U,w=()=>y(),p=(S)=>{let g=U.get(S);if(g!==void 0)return g;if(S>=0&&S<U.getTotal())return y().generate(S);return},I=(S)=>{let g=T.get(S);if(g===void 0)return;return U.get(g)},z=(S)=>{return T.get(S)??-1},H=(S)=>{let g=U.get(S);return g!==void 0&&!b2(g)},m=(S,g)=>{let t=[],c=U.getTotal(),q2=0,X2=0;U.touchChunksForRange(S,Math.min(g,c-1));for(let M2=S;M2<=g&&M2<c;M2++){let A2=U.get(M2);if(A2!==void 0)t.push(A2),q2++;else t.push(y().generate(M2)),X2++}return t},s=(S)=>{U.setTotal(S),N=U.getCachedCount()<S,A()},a=(S,g=0,t)=>{if(L&&!L.hasAnalyzedStructure()&&S.length>0)L.analyzeStructure(S);for(let c=0;c<S.length;c++){let q2=S[c];if(q2!==void 0){let X2=g+c;U.set(X2,q2),P(X2,q2)}}if(t!==void 0)U.setTotal(t);else if(g+S.length>U.getTotal())U.setTotal(g+S.length);if(U.getCachedCount()>=U.getTotal()&&U.getTotal()>0)N=!1;V?.(S,g,U.getTotal()),A()},o=(S,g)=>{let t=T.get(S);if(t===void 0)return!1;let c=U.get(t);if(!c)return!1;let q2={...c,...g};if(U.set(t,q2),g.id!==void 0&&g.id!==S)D(S),P(t,q2);return A(),!0},B2=(S)=>{let g=T.get(S);if(g===void 0)return!1;U.delete(g),D(S);let t=U.getTotal();if(t>0)U.setTotal(t-1);return A(),!0},K2=async(S,g)=>{if(!Q)return;let t=k(S,g);if(_.has(t))return;let c=U.getLoadedRanges(),q2=h2({start:S,end:g},c,U.chunkSize);if(q2.length===0)return;let X2=U.chunkSize,M2=[];for(let J2 of q2){let N2=Math.floor(J2.start/X2),L2=Math.floor(J2.end/X2);for(let Y2=N2;Y2<=L2;Y2++){let V2=Y2*X2,G2=V2+X2-1,_2=k(V2,G2);if(!M2.some((H2)=>H2.start===V2)&&!_.has(_2))M2.push({start:V2,end:G2})}}let A2=[];for(let J2 of q2){let N2=Math.floor(J2.start/X2),L2=Math.floor(J2.end/X2);for(let Y2=N2;Y2<=L2;Y2++){let V2=Y2*X2,G2=V2+X2-1,_2=k(V2,G2);if(_.has(_2)){let H2=_.get(_2);if(!A2.includes(H2))A2.push(H2)}}}for(let J2 of M2){let N2=k(J2.start,J2.end),L2=(async()=>{F.push(J2),W=!0,M=void 0,A();try{let Y2=J2.end-J2.start+1,V2={offset:J2.start,limit:Y2,cursor:void 0},G2=await Q.read(V2);if(a(G2.items,J2.start,G2.total),G2.cursor)O=G2.cursor;let _2=J2.start+G2.items.length;if(_2>=b){if(b=_2,G2.hasMore!==void 0)N=G2.hasMore;else if(G2.total!==void 0)N=_2<G2.total}}catch(Y2){M=Y2 instanceof Error?Y2:Error(String(Y2))}finally{_.delete(N2),F=F.filter((Y2)=>Y2.start!==J2.start||Y2.end!==J2.end),W=_.size>0,A()}})();_.set(N2,L2),A2.push(L2)}await Promise.all(A2)},v=async(S,g)=>{if(U.isRangeLoaded(S,g))return;await K2(S,g)},r=async()=>{if(!Q)return;await K2(0,q-1)},h=async()=>{if(!Q||W||!N)return!1;let S=U.getCachedCount(),g=U.getTotal(),t=S,c=Math.min(t+q-1,g>0?g-1:t+q-1);if(t>=g&&g>0)return N=!1,!1;return await K2(t,c),U.getCachedCount()>S},$2=async()=>{if(U.clear(),T.clear(),L)L.clear();_.clear(),F=[],W=!1,O=void 0,N=!0,b=0,M=void 0,A()},i=(S,g)=>{if(U.evictDistant(S,g)>0)G()},Q2=()=>{U.clear(),T.clear(),O=void 0,M=void 0,F=[],W=!1,A()},D2=()=>{if(U.reset(),T.clear(),L)L.clear();O=void 0,N=!0,b=0,M=void 0,F=[],W=!1,A()};if($&&$.length>0)a($,0,J??$.length);else if(J!==void 0)U.setTotal(J);return{getState:d,getTotal:x,getCached:j2,getIsLoading:f,getHasMore:l,getStorage:R,getPlaceholders:w,getItem:p,getItemById:I,getIndexById:z,isItemLoaded:H,getItemsInRange:m,setTotal:s,setItems:a,updateItem:o,removeItem:B2,loadRange:K2,ensureRange:v,loadInitial:r,loadMore:h,reload:$2,evictDistant:i,clear:Q2,reset:D2}};var jJ=(j)=>{let{adapter:Q,loading:$}=j,J=$?.cancelThreshold??gj,K=$?.preloadThreshold??mj,X=$?.preloadAhead??dj;return{name:"withAsync",priority:20,methods:["reload"],setup(q){let{emitter:Z}=q,V=q.config.reverse,B=Xj({adapter:Q,pageSize:x2,onStateChange:()=>{if(q.state.isInitialized){q.heightCache.rebuild(q.getVirtualTotal()),q.updateCompressionMode();let N=q.getCachedCompression();q.state.viewportState.totalHeight=N.virtualHeight,q.state.viewportState.actualHeight=N.actualHeight,q.state.viewportState.isCompressed=N.isCompressed,q.state.viewportState.compressionRatio=N.ratio,q.updateContentSize(N.virtualHeight),q.renderIfNeeded()}},onItemsLoaded:(N,O,F)=>{if(q.state.isInitialized)q.heightCache.rebuild(q.getVirtualTotal()),q.forceRender(),Z.emit("load:end",{items:N,total:F})}});q.replaceDataManager(B);let U=null,L=null,y=0,T=()=>{if(L){let N=L;L=null,q.dataManager.ensureRange(N.start,N.end).catch((O)=>{Z.emit("error",{error:O,context:"ensureRange"})})}};q.afterScroll.push((N,O)=>{if(q.state.isDestroyed)return;let F=q.scrollController.getVelocity(),_=q.scrollController.isTracking()&&F<=J;if(L&&y>J&&F<=J){let P=L;L=null,q.dataManager.ensureRange(P.start,P.end).catch((D)=>{Z.emit("error",{error:D,context:"ensureRange"})})}if(y=F,_&&!q.dataManager.getIsLoading()&&q.dataManager.getHasMore()){if(V){if(N<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:x2}),q.dataManager.loadMore().catch((P)=>{Z.emit("error",{error:P,context:"loadMore"})})}else if(q.state.viewportState.totalHeight-N-q.state.viewportState.containerHeight<Ej)Z.emit("load:start",{offset:q.dataManager.getCached(),limit:x2}),q.dataManager.loadMore().catch((D)=>{Z.emit("error",{error:D,context:"loadMore"})})}let{renderRange:A}=q.state.viewportState;if(!U||A.start!==U.start||A.end!==U.end)if(U={start:A.start,end:A.end},_){L=null;let{start:P,end:D}=A,k=q.getVirtualTotal();if(F>K)if(O==="down")D=Math.min(A.end+X,k-1);else P=Math.max(A.start-X,0);q.dataManager.ensureRange(P,D).catch((x)=>{Z.emit("error",{error:x,context:"ensureRange"})})}else L={start:A.start,end:A.end}});let W=200,M=null;q.afterScroll.push((N,O)=>{if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,T()},W)}),q.destroyHandlers.push(()=>{if(M!==null)clearTimeout(M),M=null}),Z.on("load:start",()=>{q.dom.root.setAttribute("aria-busy","true")}),Z.on("load:end",()=>{q.dom.root.removeAttribute("aria-busy")}),q.methods.set("reload",async()=>{U=null,L=null,q.invalidateRendered(),await q.dataManager.reload(),q.forceRender();let{renderRange:N}=q.state.viewportState;if(N.end>0)await q.dataManager.ensureRange(N.start,N.end)}),Z.emit("load:start",{offset:0,limit:x2}),q.dataManager.loadInitial().catch((N)=>{Z.emit("error",{error:N,context:"loadInitial"})})}}};var JJ=()=>{let j=null;return{name:"withPage",priority:5,setup(Q){let{dom:$,state:J,config:K,emitter:X}=Q;$.root.style.overflow="visible",$.root.style.height="auto",$.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),Q.disableViewportResize(),Q.setScrollTarget(window),Q.setScrollFns(()=>{let B=$.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-B.left);else return Math.max(0,-B.top)},(B)=>{let U=$.viewport.getBoundingClientRect();if(K.horizontal){let L=U.left+window.scrollX;window.scrollTo(L+B,window.scrollY)}else{let L=U.top+window.scrollY;window.scrollTo(window.scrollX,L+B)}}),Q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:q,innerWidth:Z}=window,V=()=>{let{innerWidth:B,innerHeight:U}=window,L=K.horizontal?B:U,y=K.horizontal?Z:q;if(Math.abs(L-y)<=1)return;q=U,Z=B,J.viewportState.containerHeight=U,X.emit("resize",{width:B,height:U});for(let T=0;T<Q.resizeHandlers.length;T++)Q.resizeHandlers[T](B,U);Q.renderIfNeeded()};window.addEventListener("resize",V,{passive:!0}),j=()=>{window.removeEventListener("resize",V)},Q.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var zj=(j,Q)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].headerLayoutIndex<=Q)$=K;else J=K-1}return $},$J=(j,Q)=>{let $=0,J=j.length-1;while($<J){let K=$+J+1>>>1;if(j[K].firstDataIndex<=Q)$=K;else J=K-1}return $},QJ=(j,Q)=>{if(j===0)return[];let $=[],J=Q(0),K=0,X=0;for(let q=1;q<j;q++){let Z=Q(q);if(Z!==J){let V=q-K;$.push({key:J,groupIndex:$.length,headerLayoutIndex:X,firstDataIndex:K,count:V}),X=X+1+V,J=Z,K=q}}return $.push({key:J,groupIndex:$.length,headerLayoutIndex:X,firstDataIndex:K,count:j-K}),$},g2=(j,Q)=>{if(j.length===0||Q.length===0)return[];let $=j.length+Q.length,J=Array($),K=0;for(let X of Q){J[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let q=0;q<X.count;q++)J[K]=j[X.firstDataIndex+q],K++}return J},m2=(j,Q)=>{let $=typeof Q==="number"?(J)=>Q:Q;return(J)=>{let K=j.getEntry(J);if(K.type==="header")return j.getHeaderHeight(K.group.groupIndex);return $(K.dataIndex)}},qj=(j,Q)=>{let $=QJ(j,Q.getGroupForIndex),J=j+$.length,K=Q.headerHeight;return{get totalEntries(){return J},get groupCount(){return $.length},get groups(){return $},getEntry:(y)=>{if($.length===0)return{type:"item",dataIndex:y,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let T=zj($,y),W=$[T];if(y===W.headerLayoutIndex)return{type:"header",group:W};let M=y-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+M,group:W}},layoutToDataIndex:(y)=>{if($.length===0)return y;let T=zj($,y),W=$[T];if(y===W.headerLayoutIndex)return-1;let M=y-W.headerLayoutIndex-1;return W.firstDataIndex+M},dataToLayoutIndex:(y)=>{if($.length===0)return y;let T=$J($,y),W=$[T],M=y-W.firstDataIndex;return W.headerLayoutIndex+1+M},getGroupAtLayoutIndex:(y)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=zj($,y);return $[T]},getGroupAtDataIndex:(y)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let T=$J($,y);return $[T]},getHeaderHeight:typeof K==="number"?(y)=>K:(y)=>{let T=$[y];if(!T)return 0;return K(T.key,y)},rebuild:(y)=>{$=QJ(y,Q.getGroupForIndex),J=y+$.length}}};var Kj=(j,Q,$,J,K)=>{let X=document.createElement("div");X.className=`${K}-sticky-header`,X.setAttribute("role","presentation"),X.setAttribute("aria-hidden","true"),X.style.position="absolute",X.style.top="0",X.style.left="0",X.style.right="0",X.style.zIndex="5",X.style.pointerEvents="none",X.style.willChange="transform",X.style.overflow="hidden",j.insertBefore(X,j.firstChild);let q=-1,Z=!1,V=0,B=(M)=>{if(M===q)return;q=M;let N=Q.groups;if(M<0||M>=N.length){X.textContent="";return}let O=N[M],F=J.headerTemplate(O.key,O.groupIndex),b=Q.getHeaderHeight(M);if(X.style.height=`${b}px`,typeof F==="string")X.innerHTML=F;else X.replaceChildren(F)},U=(M)=>{let N=Q.groups;if(N.length===0){y();return}let O=0;for(let G=N.length-1;G>=0;G--)if($.getOffset(N[G].headerLayoutIndex)<=M){O=G;break}let F=$.getOffset(N[0].headerLayoutIndex);if(M<F){y();return}if(!Z)L();B(O);let b=Q.getHeaderHeight(O),_=0,A=O+1;if(A<N.length){let P=$.getOffset(N[A].headerLayoutIndex)-M;if(P<b)_=P-b}if(_!==V)V=_,X.style.transform=_===0?"":`translateY(${Math.round(_)}px)`},L=()=>{if(Z)return;Z=!0,X.style.display=""},y=()=>{if(!Z)return;Z=!1,X.style.display="none",q=-1,V=0,X.style.transform=""},T=()=>{let M=q;if(q=-1,M>=0)B(M)},W=()=>{X.remove(),q=-1,Z=!1};return X.style.display="none",{update:U,refresh:T,show:L,hide:y,destroy:W}};var XJ=(j,Q,$,J,K,X)=>{if(J===0||Q===0)return X.start=0,X.end=-1,X;let q=$.indexAtOffset(j),Z=$.indexAtOffset(j+Q);if(Z<J-1)Z++;return X.start=Math.max(0,q),X.end=Math.min(J-1,Math.max(0,Z)),X},qJ=(j,Q,$,J)=>{if($===0)return J.start=0,J.end=-1,J;return J.start=Math.max(0,j.start-Q),J.end=Math.min($-1,j.end+Q),J},KJ=(j,Q,$,J,K,X)=>{if(J===0)return 0;let q=Math.max(0,Math.min(j,J-1)),Z=Q.getOffset(q),V=Q.getHeight(q),B=Q.getTotalHeight(),U=Math.max(0,B-$),L;switch(X){case"center":L=Z-$/2+V/2;break;case"end":L=Z-$+V;break;case"start":default:L=Z;break}return Math.max(0,Math.min(L,U))},YJ=(j,Q,$)=>{if($&&$.isCompressed)return $.virtualHeight;return Q.getTotalHeight()},ZJ=(j,Q)=>{return Q.getTotalHeight()},BJ=(j,Q)=>{return Q.getOffset(j)},UJ=(j,Q,$)=>{let J=Math.max(0,Q-$);return Math.max(0,Math.min(j,J))};var y2=(j,Q,$,J,K="start",X,q=KJ)=>{return q(j,Q,$,J,X,K)},DJ=(j,Q)=>{return j.start===Q.start&&j.end===Q.end},WJ=(j,Q)=>{return j>=Q.start&&j<=Q.end},NJ=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var GJ=(j,Q)=>{let $=[],J=[];for(let K=j.start;K<=j.end;K++)if(K<Q.start||K>Q.end)J.push(K);for(let K=Q.start;K<=Q.end;K++)if(K<j.start||K>j.end)$.push(K);return{add:$,remove:J}};t2();var _J=(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,$=null,J=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:q,config:Z,rawConfig:V}=X,{classPrefix:B}=Z;if(Z.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let L=V.item.height;J=V.items?[...V.items]:[];let y=J.length,T={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};Q=qj(y,T),K=g2(J,Q.groups);let W=m2(Q,L);X.setHeightConfig(W),X.rebuildHeightCache(K.length),X.dataManager.setItems(K,0,K.length);let M=V.item.template,{headerTemplate:N}=j,O=(D,k,x)=>{if(P2(D))return N(D.groupKey,D.groupIndex);return M(D,k,x)},F=X.methods.get("_getGridLayout"),b=X.methods.get("_replaceGridRenderer"),_=X.methods.get("_updateGridLayoutForGroups");if(F&&b){if(_)_((j2)=>{let f=K[j2];return!!(f&&P2(f))});let{createGridRenderer:D}=(Yj(),cJ(VJ)),k=F(),x=D(q.items,O,X.heightCache,k,B,X.getContainerWidth(),()=>X.dataManager.getTotal(),Z.ariaIdPrefix);b(x)}else X.replaceTemplate(O);if(q.root.classList.add(`${B}--grouped`),j.sticky!==!1){$=Kj(q.root,Q,X.heightCache,{...T,sticky:T.sticky??!1},B);let D=$;X.afterScroll.push((k,x)=>{D.update(k)}),$.update(X.scrollController.getScrollTop())}let A=()=>{if(!Q)return;Q.rebuild(J.length),K=g2(J,Q.groups);let D=m2(Q,L);if(X.setHeightConfig(D),X.rebuildHeightCache(K.length),X.dataManager.setItems(K,0,K.length),$)$.refresh()};X.methods.set("setItems",(D)=>{J=[...D],A()}),X.methods.set("appendItems",(D)=>{J=[...J,...D],A()}),X.methods.set("prependItems",(D)=>{J=[...D,...J],A()}),X.methods.set("removeItem",(D)=>{J=J.filter((k)=>k.id!==D),A()});let{animateScroll:G,cancelScroll:P}=E4(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(D,k)=>{let x=Q.dataToLayoutIndex(D),{align:j2,behavior:f,duration:l}=F4(k),d=X.dataManager.getTotal(),R=y2(x,X.heightCache,X.state.viewportState.containerHeight,d,j2,X.getCachedCompression());if(f==="smooth")G(X.scrollController.getScrollTop(),R,l);else P(),X.scrollController.scrollTo(R)}),X.methods.set("_getItems",()=>J),X.methods.set("_getTotal",()=>J.length),X.destroyHandlers.push(()=>{if(O2!==null)cancelAnimationFrame(O2),O2=null;if($)$.destroy(),$=null;q.root.classList.remove(`${B}--grouped`)})},destroy(){if($)$.destroy(),$=null}}},bj=300,A4=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,O2=null,E4=(j,Q)=>{let $=()=>{if(O2!==null)cancelAnimationFrame(O2),O2=null};return{animateScroll:(K,X,q)=>{if($(),Math.abs(X-K)<1){j.scrollTo(X);return}let Z=performance.now(),V=(B)=>{let U=B-Z,L=Math.min(U/q,1),y=K+(X-K)*A4(L);if(j.scrollTo(y),Q(),L<1)O2=requestAnimationFrame(V);else O2=null};O2=requestAnimationFrame(V)},cancelScroll:$}},F4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:bj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??bj};return{align:"start",behavior:"auto",duration:bj}};var Zj=(j)=>{let Q=Math.max(1,Math.floor(j.columns)),$=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},X=(W)=>{if(W<=0)return 0;if(!J)return Math.ceil(W/Q);let M=0,N=0,O=0;for(let F=0;F<W;F++)if(J(F)){if(O++,N>0)M++,N=0;M++,N=0}else if(N++,N>=Q)M++,N=0;if(N>0)M++;return M},q=(W)=>{return K.row=Z(W),K.col=V(W),K},Z=(W)=>{if(!J)return Math.floor(W/Q);let M=0,N=0;for(let O=0;O<=W;O++)if(J(O)){if(N>0)M++,N=0;if(O===W)return M;M++,N=0}else{if(O===W)return M;if(N++,N>=Q)M++,N=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${M}`),M},V=(W)=>{if(!J)return W%Q;if(J(W))return 0;let M=0;for(let N=0;N<=W;N++)if(J(N))M=0;else{if(N===W)return M;if(M++,M>=Q)M=0}return M},B=(W,M,N)=>{if(N<=0)return{start:0,end:-1};if(!J){let A=Math.max(0,W*Q),G=Math.min(N-1,(M+1)*Q-1);return{start:A,end:G}}let O=-1,F=-1,b=0,_=0;for(let A=0;A<N;A++){if(J(A)){if(_>0)b++,_=0;if(b>=W&&b<=M){if(O===-1)O=A;F=A}b++,_=0}else{if(b>=W&&b<=M){if(O===-1)O=A;F=A}if(_++,_>=Q)b++,_=0}if(b>M&&_===0)break}if(O===-1)return{start:0,end:-1};return{start:O,end:F}},U=(W,M,N)=>{if(M<0||M>=Q)return-1;let O=W*Q+M;if(O<0||O>=N)return-1;return O},L=(W)=>{let M=(Q-1)*$;return Math.max(0,(W-M)/Q)};return{get columns(){return Q},get gap(){return $},update:(W)=>{if(W.columns!==void 0)Q=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)$=W.gap;if(W.isHeaderFn!==void 0)J=W.isHeaderFn},getTotalRows:X,getPosition:q,getRow:Z,getCol:V,getItemRange:B,getItemIndex:U,getColumnWidth:L,getColumnOffset:(W,M)=>{let N=L(M);return W*(N+$)}}};Yj();var MJ=(j)=>{if(!j.columns||j.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let Q=null,$=null;return{name:"withGrid",priority:10,setup(J){let{dom:K,emitter:X,config:q,rawConfig:Z}=J,{classPrefix:V}=q;if(q.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(q.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let B=Z.items?.some((_)=>_.__groupHeader===!0),U={columns:j.columns,gap:j.gap??0};if(B)U.isHeaderFn=(_)=>{let A=J.dataManager.getItem(_);return!!(A&&A.__groupHeader===!0)};Q=Zj(U);let L=Q.gap;J.setVirtualTotalFn(()=>{let _=J.dataManager.getTotal();return Q.getTotalRows(_)});let y=Z.item,T=q.horizontal?y.width:y.height,W={containerWidth:J.getContainerWidth(),columns:Q.columns,gap:Q.gap};if(typeof T==="function")J.setHeightConfig((_)=>{let A=W.containerWidth-2,G=(W.columns-1)*W.gap,P=(A-G)/W.columns,D={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:P,row:Q.getRow(_),column:Q.getCol(_),totalRows:Q.getTotalRows(J.dataManager.getTotal()),totalColumns:W.columns};return T(_,D)+W.gap});else if(L>0)J.setHeightConfig(T+L);J.rebuildHeightCache(),K.root.classList.add(`${V}--grid`);let M=J.getContainerWidth(),N=Z.item.template,O=()=>{$=d2(K.items,N,J.heightCache,Q,V,M,()=>J.dataManager.getTotal(),q.ariaIdPrefix),J.replaceRenderer($)};O(),J.methods.set("_getGridLayout",()=>Q),J.methods.set("_getGridConfig",()=>U),J.methods.set("_replaceGridRenderer",(_)=>{$=_}),J.methods.set("_updateGridLayoutForGroups",(_)=>{Q.update({isHeaderFn:_});let A=J.dataManager.getTotal(),G=0;for(let P=0;P<A;P++)if(Q.getCol(P)===0){let D=J.heightCache.getHeight(P);G+=D}J.heightCache.getTotalHeight=()=>G,J.dom.content.style.height=`${G}px`,O()}),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");U.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");U.gap=_.gap}if(Q)Q.update(U);let A=J.getContainerWidth();if(W.containerWidth=A,W.columns=U.columns,W.gap=U.gap??0,$)$.updateContainerWidth(A);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let G=0;G<J.contentSizeHandlers.length;G++)J.contentSizeHandlers[G]();if($)$.clear();J.forceRender()});let F=()=>{if(J.state.isDestroyed)return;let _=J.scrollController.getScrollTop(),A=J.state.viewportState.containerHeight,G=J.getVirtualTotal(),P={start:0,end:0};if(G===0||A===0)P.start=0,P.end=0;else{P.start=Math.max(0,J.heightCache.indexAtOffset(_));let w=J.heightCache.indexAtOffset(_+A);if(w<G-1)w++;P.end=Math.min(G-1,Math.max(0,w))}let D=q.overscan??3,k={start:Math.max(0,P.start-D),end:Math.min(G-1,P.end+D)};J.state.viewportState.scrollTop=_,J.state.viewportState.visibleRange=P,J.state.viewportState.renderRange=k;let x=J.state.lastRenderRange,j2=J.state.viewportState.isCompressed;if(k.start===x.start&&k.end===x.end){if(j2)$.updatePositions(J.getCompressionContext());return}let f=J.dataManager.getTotal(),l=Q.getItemRange(k.start,k.end,f),d=J.dataManager.getItemsInRange(l.start,l.end),R=j2?J.getCompressionContext():void 0;$.render(d,l,new Set,-1,R),J.state.lastRenderRange={...k},X.emit("range:change",{range:k})},b=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},F()};if(J.setRenderFns(F,b),J.resizeHandlers.push((_,A)=>{if($)$.updateContainerWidth(_)}),J.methods.set("scrollToIndex",(_,A)=>{let G=Math.floor(_/j.columns),{align:P,behavior:D}=L4(A),k=J.dataManager.getState(),x=Q.getTotalRows(k.total),j2=Math.max(0,Math.min(G,x-1)),f=y2(j2,J.heightCache,J.state.viewportState.containerHeight,x,P,J.getCachedCompression());if(D==="smooth")J.scrollController.scrollTo(f);else J.scrollController.scrollTo(f)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if($)$.destroy(),$=null;K.root.classList.remove(`${V}--grid`)})},destroy(){if($)$.destroy(),$=null}}},Pj=300,L4=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:Pj};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??Pj};return{align:"start",behavior:"auto",duration:Pj}};Yj();var Bj=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),c2=(j,Q,$)=>{if($==="none")return j;let J=new Set(j.selected);if($==="single"){if(J.clear(),Q.length>0)J.add(Q[0])}else for(let K of Q)J.add(K);return{...j,selected:J}},l2=(j,Q)=>{let $=new Set(j.selected);for(let J of Q)$.delete(J);return{...j,selected:$}},w2=(j,Q,$)=>{if($==="none")return j;if(j.selected.has(Q))return l2(j,[Q]);else return c2(j,[Q],$)},Uj=(j,Q,$)=>{if($!=="multiple")return j;return{...j,selected:new Set(Q.map((J)=>J.id))}},Dj=(j)=>({...j,selected:new Set}),yj=(j,Q)=>{return j.focusedIndex=Q,j},Hj=(j,Q,$=!0)=>{if(Q===0)return j;let J=j.focusedIndex-1;if(J<0)J=$?Q-1:0;return j.focusedIndex=J,j},Rj=(j,Q,$=!0)=>{if(Q===0)return j;let J=j.focusedIndex+1;if(J>=Q)J=$?0:Q-1;return j.focusedIndex=J,j},kj=(j,Q)=>{if(Q===0)return j;return j.focusedIndex=0,j},Cj=(j,Q)=>{if(Q===0)return j;return j.focusedIndex=Q-1,j};var AJ=(j,Q)=>{return j.selected.has(Q)},v2=(j)=>{return Array.from(j.selected)},S2=(j,Q)=>{let $=[];for(let J of j.selected){let K=Q(J);if(K)$.push(K)}return $};var EJ=(j)=>{let Q=j?.mode??"single",$=j?.initial,J=Bj($),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:q,emitter:Z,config:V}=X,{classPrefix:B,ariaIdPrefix:U}=V;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{renderIfNeeded:L,forceRender:y}=X.getRenderFns(),T=()=>{X.dom.items.querySelectorAll("[data-index]").forEach((b)=>{let _=b,A=_.dataset.id;if(A!==void 0){let G=/^\d+$/.test(A)?parseInt(A,10):A,P=J.selected.has(G),k=parseInt(_.dataset.index??"-1",10)===J.focusedIndex;_.classList.toggle(`${B}-item--selected`,P),_.classList.toggle(`${B}-item--focused`,k),_.ariaSelected=P?"true":"false"}})},W=()=>{if(X.state.isDestroyed)return;L(),T()},M=()=>{if(X.state.isDestroyed)return;y(),T()};X.setRenderFns(W,M);let N=()=>{T(),Z.emit("selection:change",{selected:v2(J),items:S2(J,(F)=>X.dataManager.getItemById(F))})};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",q.root.appendChild(K);let O=K;Z.on("selection:change",({selected:F})=>{let b=F.length;if(b===0)O.textContent="";else if(b===1)O.textContent="1 item selected";else O.textContent=`${b} items selected`}),X.clickHandlers.push((F)=>{if(X.state.isDestroyed)return;let _=F.target.closest("[data-index]");if(!_)return;let A=parseInt(_.dataset.index??"-1",10);if(A<0)return;let G=X.dataManager.getItem(A);if(!G)return;Z.emit("item:click",{item:G,index:A,event:F}),J=yj(J,A),q.root.setAttribute("aria-activedescendant",`${U}-item-${A}`),J=w2(J,G.id,Q),N()}),X.keydownHandlers.push((F)=>{if(X.state.isDestroyed)return;let b=X.dataManager.getTotal(),_=J.focusedIndex,A=!1,G=!1,P=J;switch(F.key){case"ArrowUp":P=Hj(J,b),A=!0,G=!0;break;case"ArrowDown":P=Rj(J,b),A=!0,G=!0;break;case"Home":P=kj(J,b),A=!0,G=!0;break;case"End":P=Cj(J,b),A=!0,G=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let D=X.dataManager.getItem(J.focusedIndex);if(D)P=w2(J,D.id,Q);A=!0}break}if(A){F.preventDefault(),J=P;let D=J.focusedIndex;if(D>=0){let k=X.dataManager.getState(),x=y2(D,X.heightCache,X.state.viewportState.containerHeight,k.total,"center",X.getCachedCompression());X.scrollController.scrollTo(x),q.root.setAttribute("aria-activedescendant",`${U}-item-${D}`)}else q.root.removeAttribute("aria-activedescendant");if(G){let{selected:k}=J;if(_>=0&&_!==D){let x=X.dataManager.getItem(_);if(x)X.renderer.updateItemClasses(_,k.has(x.id),!1)}if(D>=0){let x=X.dataManager.getItem(D);if(x)X.renderer.updateItemClasses(D,k.has(x.id),!0)}}else M(),Z.emit("selection:change",{selected:v2(J),items:S2(J,(k)=>X.dataManager.getItemById(k))})}}),X.methods.set("select",(...F)=>{J=c2(J,F,Q),N()}),X.methods.set("deselect",(...F)=>{J=l2(J,F),N()}),X.methods.set("toggleSelect",(F)=>{J=w2(J,F,Q),N()}),X.methods.set("selectAll",()=>{if(Q!=="multiple")return;let F=X.getAllLoadedItems();J=Uj(J,F,Q),N()}),X.methods.set("clearSelection",()=>{J=Dj(J);let{renderRange:F,isCompressed:b}=X.state.viewportState,_=X.getItemsForRange(F),A=b?X.getCompressionContext():void 0;X.renderer.render(_,F,J.selected,J.focusedIndex,A),Z.emit("selection:change",{selected:[],items:[]})}),X.methods.set("getSelected",()=>{return v2(J)}),X.methods.set("getSelectedItems",()=>{return S2(J,(F)=>X.dataManager.getItemById(F))}),X.destroyHandlers.push(()=>{if(O&&O.parentNode)O.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var FJ=()=>{return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(j){j.methods.set("getScrollSnapshot",()=>{let Q=j.scrollController.getScrollTop(),$=j.getCachedCompression(),J=j.getVirtualTotal(),K=j.methods.get("getSelected"),X=K&&K().length>0?K():void 0;if(J===0){let B={index:0,offsetInItem:0};if(X)B.selectedIds=X;return B}let q,Z;if($.isCompressed){let U=Q/$.virtualHeight*J;q=Math.max(0,Math.min(Math.floor(U),J-1)),Z=(U-q)*j.heightCache.getHeight(q)}else q=j.heightCache.indexAtOffset(Q),Z=Q-j.heightCache.getOffset(q);Z=Math.max(0,Z);let V={index:q,offsetInItem:Z};if(X)V.selectedIds=X;return V}),j.methods.set("restoreScroll",(Q)=>{let{index:$,offsetInItem:J,selectedIds:K}=Q,X=j.getCachedCompression(),q=j.getVirtualTotal();if(q===0)return;let Z=Math.max(0,Math.min($,q-1)),V;if(X.isCompressed){let U=j.heightCache.getHeight(Z),L=U>0?J/U:0;V=(Z+L)/q*X.virtualHeight}else V=j.heightCache.getOffset(Z)+J;let B=Math.max(0,X.virtualHeight-j.state.viewportState.containerHeight);if(V=Math.max(0,Math.min(V,B)),j.scrollController.scrollTo(V),K&&K.length>0){let U=j.methods.get("select");if(U)U(...K)}})}}};var LJ=()=>{let j={},Q=(Z,V)=>{if(!j[Z])j[Z]=new Set;return j[Z].add(V),()=>$(Z,V)},$=(Z,V)=>{j[Z]?.delete(V)};return{on:Q,off:$,emit:(Z,V)=>{j[Z]?.forEach((B)=>{try{B(V)}catch(U){console.error(`[vlist] Error in event handler for "${String(Z)}":`,U)}})},once:(Z,V)=>{let B=(U)=>{$(Z,B),V(U)};return Q(Z,B)},clear:(Z)=>{if(Z)delete j[Z];else for(let V in j)delete j[V]},listenerCount:(Z)=>{return j[Z]?.size??0}}};export{FJ as withSnapshots,EJ as withSelection,_J as withSections,oj as withScrollbar,ej as withScale,JJ as withPage,MJ as withGrid,jJ as withAsync,hj as vlist,w2 as toggleSelection,XJ as simpleVisibleRange,c2 as selectItems,Uj as selectAll,DJ as rangesEqual,jj as rafThrottle,aj as needsScaling,$j as mergeRanges,AJ as isSelected,P2 as isSectionHeader,b2 as isPlaceholderItem,WJ as isInRange,S2 as getSelectedItems,v2 as getSelectedIds,E2 as getScaleState,nj as getScaleInfo,E2 as getScale,NJ as getRangeCount,rj as getMaxItemsWithoutScaling,Oj as filterPlaceholders,GJ as diffRanges,l2 as deselectItems,Kj as createStickyHeader,Jj as createSparseStorage,Bj as createSelectionState,m2 as createSectionedHeightFn,qj as createSectionLayout,T2 as createScrollbar,tj as createScrollController,Qj as createPlaceholderManager,cj as createHeightCache,d2 as createGridRenderer,Zj as createGridLayout,LJ as createEmitter,Xj as createAsyncManager,Dj as clearSelection,UJ as clampScrollPosition,YJ as calculateTotalHeight,y2 as calculateScrollToIndex,o2 as calculateScaledVisibleRange,i2 as calculateScaledScrollToIndex,lj as calculateScaledRenderRange,C2 as calculateScaledItemPosition,qJ as calculateRenderRange,h2 as calculateMissingRanges,BJ as calculateItemOffset,sj as calculateIndexFromScrollPosition,ZJ as calculateActualHeight,g2 as buildLayoutItems,z2 as MAX_VIRTUAL_HEIGHT};
1
+ var{defineProperty:Z2,getOwnPropertyNames:yj,getOwnPropertyDescriptor:$j}=Object,Hj=Object.prototype.hasOwnProperty;var z2=new WeakMap,Tj=(j)=>{var X=z2.get(j),Q;if(X)return X;if(X=Z2({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")yj(j).map((J)=>!Hj.call(X,J)&&Z2(X,J,{get:()=>j[J],enumerable:!(Q=$j(j,J))||Q.enumerable}));return z2.set(j,X),X};var Rj=(j,X)=>{for(var Q in X)Z2(j,Q,{get:X[Q],enumerable:!0,configurable:!0,set:(J)=>X[Q]=()=>J})};var b2=(j,X)=>()=>(j&&(X=j(j=0)),X);var kj=(j,X)=>{let Q=X;return{getOffset:(J)=>J*j,getHeight:(J)=>j,indexAtOffset:(J)=>{if(Q===0||j===0)return 0;return Math.max(0,Math.min(Math.floor(J/j),Q-1))},getTotalHeight:()=>Q*j,getTotal:()=>Q,rebuild:(J)=>{Q=J},isVariable:()=>!1}},Cj=(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,V=Q-1;while(U<V){let Z=U+V+1>>>1;if(J[Z]<=Y)U=Z;else V=Z-1}return U};return{getOffset:(Y)=>{if(Y<=0)return 0;if(Y>=Q)return J[Q];return J[Y]},getHeight:(Y)=>j(Y),indexAtOffset:(Y)=>q(Y),getTotalHeight:()=>J[Q]??0,getTotal:()=>Q,rebuild:(Y)=>K(Y),isVariable:()=>!0}},H0=(j,X)=>{if(typeof j==="number")return kj(j,X);return Cj(j,X)},B2=(j,X,Q,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.ceil(Q/j.getHeight(0));let K=0,q=0,Y=X;while(Y<J&&q<Q)q+=j.getHeight(Y),K++,Y++;return Math.max(1,K)},d0=(j,X,Q)=>{if(Q===0)return 0;if(!j.isVariable())return Math.floor(X/j.getHeight(0));let J=0,K=0;for(let q=Q-1;q>=0;q--){let Y=j.getHeight(q);if(K+Y>X)break;K+=Y,J++}return Math.max(J,1)},U2=(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.getHeight(q)};var N2=200,f0=50,h2=15,x2=2,g2=50,z0=16000000;var V0=(j,X)=>{let Q=X.getTotalHeight(),J=Q>z0,K=J?z0:Q,q=Q>0?K/Q:1;return{isCompressed:J,actualHeight:Q,virtualHeight:K,ratio:q}},c0=(j,X,Q,J,K,q)=>{if(J===0||X===0)return q.start=0,q.end=-1,q;if(!K.isCompressed){let W=Q.indexAtOffset(j),_=Q.indexAtOffset(j+X);if(_<J-1)_++;return q.start=Math.max(0,W),q.end=Math.min(J-1,Math.max(0,_)),q}let{virtualHeight:Y}=K,V=j/Y*J,Z=Math.floor(V),D=B2(Q,Math.max(0,Z),X,J),A=Math.ceil(V)+D,H=Y-X-j;if(H<=X&&H>=-1){let W=d0(Q,X,J),_=Math.max(0,J-W),G=Math.max(0,Math.min(1,1-H/X));Z=Math.floor(Z+(_-Z)*G),A=H<=1?J-1:Math.min(J-1,Z+D)}return q.start=Math.max(0,Z),q.end=Math.min(J-1,Math.max(0,A)),q},m2=(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},T0=(j,X,Q,J,K,q,Y)=>{if(!q.isCompressed||J===0)return Q.getOffset(j);let{virtualHeight:U}=q,V=U-K,Z=V-X;if(Z<=K&&Z>=-1){if(X>=V-1){let E=Q.getTotalHeight()-Q.getOffset(j);return K-E}let H=d0(Q,K,J),W=Math.max(0,J-H),G=X/U*J,z=Math.max(0,Math.min(1,1-Z/K)),L=Q.getOffset(j)-Q.getOffset(W),b=Q.getOffset(j)-U2(Q,G,J);return b+(L-b)*z}let D=X/U,A=Q.getTotalHeight(),O=D*A;return Q.getOffset(j)-O},s0=(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.virtualHeight-Q);Y=j/J*K.virtualHeight}else Y=X.getOffset(j);let U=X.getHeight(j);switch(q){case"center":Y-=(Q-U)/2;break;case"end":Y-=Q-U;break}let V=K.virtualHeight-Q;return Math.max(0,Math.min(Y,V))},d2=(j,X,Q,J)=>{if(Q===0)return 0;if(J.isCompressed){let K=j/J.virtualHeight;return Math.floor(K*Q)}return X.indexAtOffset(j)},l2=(j,X)=>{if(typeof X==="number")return j*X>z0;return X.getTotalHeight()>z0},c2=(j)=>{if(j<=0)return 0;return Math.floor(z0/j)},s2=(j,X)=>{let Q=V0(j,X);if(!Q.isCompressed)return`No compression needed (${j} items, ${(Q.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${j} items, ${(Q.actualHeight/1e6).toFixed(1)}M px → ${(Q.virtualHeight/1e6).toFixed(1)}M px virtual)`};var a0=()=>{};var P0=(j)=>{return j!==null&&typeof j==="object"&&j.__groupHeader===!0};var Wj={};Rj(Wj,{createGridRenderer:()=>h0});var sj=(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}}},h0=(j,X,Q,J,K,q,Y,U)=>{let V=sj(),Z=new Map,D=q,A=!1,O=null,H=0,W="",_=(y)=>{if(O&&H===y)return O;return O=V0(y,Q),H=y,O},G={selected:!1,focused:!1},z=(y,k)=>{return G.selected=y,G.focused=k,G},L=`${K}-item ${K}-grid-item`,b=`${K}-item--selected`,E=`${K}-item--focused`,B=(y,k)=>{if(typeof k==="string")y.innerHTML=k;else y.replaceChildren(k)},M=(y,k,x)=>{y.classList.toggle(b,k),y.classList.toggle(E,x)},$=(y,k)=>{let x=J.getRow(y);if(k){let s=k.totalItems,a=_(s);if(a.isCompressed)return T0(x,k.scrollTop,Q,s,k.containerHeight,a,k.rangeStart)}return Q.getOffset(x)},P=(y,k,x)=>{let s=y.dataset.id?.startsWith("__group_header"),a=s?0:J.getCol(k),n=s?0:J.getColumnOffset(a,D),q0;if(A){let l=J.getRow(k),S=0,d=new Set;for(let c=0;c<k;c++){let K0=J.getRow(c);if(K0<l&&!d.has(K0)){let o=Q.getHeight(c);S+=o,d.add(K0)}}q0=S}else q0=$(k,x);y.style.transform=`translate(${Math.round(n)}px, ${Math.round(q0)}px)`},C=(y,k)=>{let x=y.dataset.id?.startsWith("__group_header"),s=x?D:J.getColumnWidth(D),a;if(A||x)a=Q.getHeight(k)-J.gap;else{let n=J.getRow(k);a=Q.getHeight(n)-J.gap}y.style.width=`${s}px`,y.style.height=`${a}px`},N=(y,k,x,s,a)=>{let n=V.acquire(),q0=z(x,s);if(n.className=L,n.dataset.index=String(y),n.dataset.id=String(k.id),n.dataset.row=String(J.getRow(y)),n.dataset.col=String(J.getCol(y)),n.ariaSelected=String(x),U)n.id=`${U}-item-${y}`;if(Y)W=String(Y()),n.setAttribute("aria-setsize",W),n.setAttribute("aria-posinset",String(y+1));C(n,y);let l=X(k,y,q0);return B(n,l),M(n,x,s),P(n,y,a),n},e=(y,k,x,s,a)=>{if(k.start===0&&y.length>0)A=P0(y[0]);for(let[S,d]of Z)if(S<k.start||S>k.end)d.element.remove(),V.release(d.element),Z.delete(S);let n=!1;if(Y){let S=String(Y());n=S!==W,W=S}let q0=document.createDocumentFragment(),l=[];for(let S=k.start;S<=k.end;S++){let d=S-k.start,c=y[d];if(!c){console.warn(`⚠️ RENDER: Missing item at index ${S} (range: ${k.start}-${k.end}, items.length: ${y.length})`);continue}let K0=x.has(c.id),o=S===s,X0=Z.get(S);if(X0){let W0=X0.element.dataset.id,w=String(c.id);if(W0!==w){let i=z(K0,o),j0=X(c,S,i);B(X0.element,j0),X0.element.dataset.id=w,X0.element.dataset.row=String(J.getRow(S)),X0.element.dataset.col=String(J.getCol(S)),C(X0.element,S)}if(M(X0.element,K0,o),X0.element.ariaSelected=String(K0),P(X0.element,S,a),n)X0.element.setAttribute("aria-setsize",W)}else{let W0=N(S,c,K0,o,a);q0.appendChild(W0),l.push({index:S,element:W0})}}if(l.length>0){j.appendChild(q0);for(let{index:S,element:d}of l)Z.set(S,{index:S,element:d})}},v=(y)=>{for(let[k,x]of Z)P(x.element,k,y)},g=(y,k,x,s)=>{let a=Z.get(y);if(a){let n=z(x,s),q0=X(k,y,n);B(a.element,q0),M(a.element,x,s),a.element.dataset.id=String(k.id),a.element.ariaSelected=String(x),C(a.element,y)}},p=(y,k,x)=>{let s=Z.get(y);if(s)M(s.element,k,x)},R=(y)=>{return Z.get(y)?.element},T=(y)=>{if(Math.abs(y-D)<1)return;D=y;for(let[k,x]of Z)C(x.element,k),P(x.element,k)},f=()=>{for(let[,y]of Z)y.element.remove(),V.release(y.element);Z.clear()};return{render:e,updatePositions:v,updateItem:g,updateItemClasses:p,getElement:R,updateContainerWidth:T,clear:f,destroy:()=>{f(),V.clear()}}};var Q2=b2(()=>{a0()});var P2=2,y2=(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}},$2=(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,V=Q-Y.time;j.velocity=V>0?Math.abs(U)/V:0}return j.lastPosition=X,j.lastTime=Q,j};var l0=()=>{let j={},X=(U,V)=>{if(!j[U])j[U]=new Set;return j[U].add(V),()=>Q(U,V)},Q=(U,V)=>{j[U]?.delete(V)};return{on:X,off:Q,emit:(U,V)=>{j[U]?.forEach((Z)=>{try{Z(V)}catch(D){console.error(`[vlist] Error in event handler for "${String(U)}":`,D)}})},once:(U,V)=>{let Z=(D)=>{Q(U,Z),V(D)};return X(U,Z)},clear:(U)=>{if(U)delete j[U];else for(let V in j)delete j[V]},listenerCount:(U)=>{return j[U]?.size??0}}};var H2=(j)=>{if(typeof j==="string"){let X=document.querySelector(j);if(!X)throw Error(`[vlist/builder] Container not found: ${j}`);return X}return j},T2=(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 R2=(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 k2=(j,X,Q,J,K)=>{if(J===0||X===0){K.start=0,K.end=0;return}let q=Q.indexAtOffset(j),Y=Q.indexAtOffset(j+X);if(Y<J-1)Y++;K.start=Math.max(0,q),K.end=Math.min(J-1,Math.max(0,Y))},C2=(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.getHeight(q),V=Math.max(0,X.getTotalHeight()-Q),Z;switch(K){case"center":Z=Y-(Q-U)/2;break;case"end":Z=Y-Q+U;break;default:Z=Y}return Math.max(0,Math.min(Z,V))};var v2=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,w2=(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 f2=(j,X)=>{let{dom:Q,emitter:J,resolvedConfig:K,rawConfig:q,rendered:Y,pool:U,sharedState:V,isHorizontal:Z,classPrefix:D,contentSizeHandlers:A,afterScroll:O,clickHandlers:H,keydownHandlers:W,resizeHandlers:_,destroyHandlers:G,methods:z,onScrollFrame:L,resizeObserver:b,renderRange:E}=X;return{get dom(){return Q},get heightCache(){return j.hc},get emitter(){return J},get config(){return K},get rawConfig(){return q},get renderer(){return{render:(B,M,$,P,C)=>{j.ss=$,j.fi=P,j.ffn()},updateItemClasses:(B,M,$)=>{let P=Y.get(B);if(!P)return;P.classList.toggle(`${D}-item--selected`,M),P.classList.toggle(`${D}-item--focused`,$),P.ariaSelected=M?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(B)=>Y.get(B)??null,clear:()=>{},destroy:()=>{}}},set renderer(B){},get dataManager(){return j.dm},set dataManager(B){j.dm=B},get scrollController(){return j.sc},set scrollController(B){j.sc=B},state:V,getContainerWidth(){return j.cw},afterScroll:O,clickHandlers:H,keydownHandlers:W,resizeHandlers:_,contentSizeHandlers:A,destroyHandlers:G,methods:z,replaceTemplate(B){j.at=B},replaceRenderer(B){},replaceDataManager(B){j.dm=B},replaceScrollController(B){j.sc=B},getItemsForRange(B){let{dm:M,it:$}=j,P=[];for(let C=B.start;C<=B.end;C++){let N=M?M.getItem(C):$[C];if(N)P.push(N)}return P},getAllLoadedItems(){let B=j.dm;if(B){let M=B.getTotal(),$=[];for(let P=0;P<M;P++){let C=B.getItem(P);if(C)$.push(C)}return $}return[...j.it]},getVirtualTotal(){return j.vtf()},getCachedCompression(){let B=j.hc;return{isCompressed:!1,actualHeight:B.getTotalHeight(),virtualHeight:B.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:j.ls,totalItems:j.vtf(),containerHeight:j.ch,rangeStart:E.start}},renderIfNeeded(){j.rfn()},forceRender(){j.ffn()},invalidateRendered(){for(let[,B]of Y)B.remove(),U.release(B);Y.clear()},getRenderFns(){return{renderIfNeeded:j.rfn,forceRender:j.ffn}},setRenderFns(B,M){j.rfn=B,j.ffn=M},setVirtualTotalFn(B){j.vtf=B},rebuildHeightCache(B){j.hc.rebuild(B??j.vtf())},setHeightConfig(B){j.hc=H0(B,j.vtf())},updateContentSize(B){let M=`${B}px`;if(Z)Q.content.style.width=M;else Q.content.style.height=M},updateCompressionMode(){},setVisibleRangeFn(B){j.gvr=B},setScrollToPosFn(B){j.gsp=B},setPositionElementFn(B){j.pef=B},setScrollFns(B,M){j.sgt=B,j.sst=($)=>{M($),L()}},setScrollTarget(B){j.st.removeEventListener("scroll",L),j.st=B,j.st.addEventListener("scroll",L,{passive:!0})},getScrollTarget(){return j.st},setContainerDimensions(B){j.gcw=B.width,j.gch=B.height,j.cw=B.width(),j.ch=B.height(),V.viewportState.containerHeight=j.ch},disableViewportResize(){if(j.vre)j.vre=!1,b.unobserve(Q.viewport)}}},I2=(j,X,Q)=>{let{rendered:J,itemState:K,contentSizeHandlers:q,applyTemplate:Y,updateContentSize:U}=X,V=()=>{j.hc.rebuild(j.vtf()),U(),Q.updateCompressionMode();for(let Z=0;Z<q.length;Z++)q[Z]();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:(Z)=>j.it[Z],isItemLoaded:(Z)=>Z>=0&&Z<j.it.length&&j.it[Z]!==void 0,getItemsInRange:(Z,D)=>{let A=j.it,O=[],H=Math.max(0,Z),W=Math.min(D,A.length-1);for(let _=H;_<=W;_++)O.push(A[_]);return O},setTotal:(Z)=>{},setItems:(Z,D=0,A)=>{let O=j.it;if(D===0&&(A!==void 0||O.length===0))j.it=Z;else{let H=D+Z.length;if(O.length<H)O.length=H;for(let W=0;W<Z.length;W++)O[D+W]=Z[W]}if(j.ii)V()},updateItem:(Z,D)=>{let A=j.it;if(Z<0||Z>=A.length)return!1;let O=A[Z];if(!O)return!1;A[Z]={...O,...D};let H=J.get(Z);if(H)Y(H,j.at(A[Z],Z,K)),H.dataset.id=String(A[Z].id);return!0},removeItem:(Z)=>{if(Z<0||Z>=j.it.length)return!1;if(j.it.splice(Z,1),j.ii)V();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{j.it=[]},reset:()=>{if(j.it=[],j.ii)j.hc.rebuild(0),U(),j.ffn()}}},p2=(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.getTotalHeight(),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 Sj=3,vj="vlist",wj=150,fj=0,u2=(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.direction==="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 direction 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,Ij(j,K,X,J)}};return Y};function Ij(j,X,Q,J){let{item:K,items:q,overscan:Y=Sj,classPrefix:U=vj,ariaLabel:V,reverse:Z=!1,scroll:D}=j,A=D?.wheel??!0,O=D?.wrap??!1,H=Z,W=`${U}-${fj++}`,_=J,G=Q?typeof K.height==="number"?K.height:void 0:typeof K.width==="number"?K.width:void 0,z={overscan:Y,classPrefix:U,reverse:H,wrap:O,horizontal:Q,ariaIdPrefix:W},L=Array.from(X.values()).sort((F,I)=>(F.priority??50)-(I.priority??50)),b=new Set(L.map((F)=>F.name));for(let F of L)if(F.conflicts){for(let I of F.conflicts)if(b.has(I))throw Error(`[vlist/builder] ${F.name} and ${I} cannot be combined`)}if(Q){if(b.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(b.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(H){if(b.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let E=H2(j.container),B=T2(E,U,V,Q),M=l0(),$=q||[],P=H0(_,$.length),C=R2(),N={it:$,hc:P,ch:B.viewport.clientHeight,cw:B.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:y2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>B.viewport.scrollLeft:()=>B.viewport.scrollTop,sst:Q?(F)=>{B.viewport.scrollLeft=F}:(F)=>{B.viewport.scrollTop=F},sab:(F=2)=>{let I=N.hc.getTotalHeight();return N.ls+N.ch>=I-F},sic:!1,rfn:null,ffn:null,gvr:(F,I,m,t,Q0)=>{k2(F,I,m,t,Q0)},gsp:(F,I,m,t,Q0)=>{return S2(F,I,m,t,Q0)},pef:null,at:K.template,vre:!0,st:B.viewport,gcw:()=>N.cw,gch:()=>N.ch};N.vtf=()=>N.dm?N.dm.getTotal():N.it.length;let e=null,v=null,g={start:0,end:0},p={start:0,end:0},R={start:-1,end:-1},T={viewportState:{scrollTop:0,containerHeight:N.ch,totalHeight:N.hc.getTotalHeight(),actualHeight:N.hc.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},f=new Map,u={selected:!1,focused:!1},y=`${U}-item`,k=[],x=[],s=[],a=[],n=[],q0=[],l=new Map,S=(F,I)=>{if(typeof I==="string")F.innerHTML=I;else F.replaceChildren(I)},d=(F,I)=>{let m=Math.round(N.hc.getOffset(I));if(Q)F.style.transform=`translateX(${m}px)`;else F.style.transform=`translateY(${m}px)`};N.pef=d;let c=(F,I)=>{let m=C.acquire();if(m.className=y,Q){if(m.style.width=`${N.hc.getHeight(F)}px`,G!=null)m.style.height=`${G}px`}else m.style.height=`${N.hc.getHeight(F)}px`;if(m.dataset.index=String(F),m.dataset.id=String(I.id),m.ariaSelected="false",m.id=`${W}-item-${F}`,N.la=String(N.vtf()),m.setAttribute("aria-setsize",N.la),m.setAttribute("aria-posinset",String(F+1)),String(I.id).startsWith("__placeholder_"))m.classList.add(`${U}-item--placeholder`);return S(m,N.at(I,F,u)),N.pef(m,F),m},K0=()=>{let F=`${N.hc.getTotalHeight()}px`;if(Q)B.content.style.width=F;else B.content.style.height=F},o=()=>{if(N.id)return;let F=N.vtf();if(N.gvr(N.ls,N.ch,N.hc,F,g),C2(g,Y,F,p),p.start===R.start&&p.end===R.end){if(N.sic)for(let[r,U0]of f)N.pef(U0,r);return}let I=String(F),m=I!==N.la;N.la=I;for(let[r,U0]of f)if(r<p.start||r>p.end)U0.remove(),C.release(U0),f.delete(r);let t=document.createDocumentFragment(),Q0=[];for(let r=p.start;r<=p.end;r++){let U0=N.dm?N.dm.getItem(r):N.it[r];if(!U0)continue;let Y0=f.get(r);if(Y0){let E0=Y0.dataset.id,v0=String(U0.id);if(E0!==v0){let Pj=E0?.startsWith("__placeholder_"),O2=v0.startsWith("__placeholder_");if(S(Y0,N.at(U0,r,u)),Y0.dataset.id=v0,Q)Y0.style.width=`${N.hc.getHeight(r)}px`;else Y0.style.height=`${N.hc.getHeight(r)}px`;if(O2)Y0.classList.add(`${U}-item--placeholder`);else Y0.classList.remove(`${U}-item--placeholder`);if(Pj&&!O2)Y0.classList.add(`${U}-item--replaced`),setTimeout(()=>{Y0.classList.remove(`${U}-item--replaced`)},300)}N.pef(Y0,r);let m0=N.ss.has(U0.id),bj=r===N.fi;if(Y0.classList.toggle(`${U}-item--selected`,m0),Y0.classList.toggle(`${U}-item--focused`,bj),Y0.ariaSelected=m0?"true":"false",m)Y0.setAttribute("aria-setsize",N.la)}else{let E0=c(r,U0),v0=N.ss.has(U0.id),m0=r===N.fi;if(v0)E0.classList.add(`${U}-item--selected`),E0.ariaSelected="true";if(m0)E0.classList.add(`${U}-item--focused`);t.appendChild(E0),Q0.push({index:r,element:E0})}}if(Q0.length>0){B.items.appendChild(t);for(let{index:r,element:U0}of Q0)f.set(r,U0)}R.start=p.start,R.end=p.end,T.lastRenderRange.start=p.start,T.lastRenderRange.end=p.end,T.viewportState.scrollTop=N.ls,T.viewportState.visibleRange.start=g.start,T.viewportState.visibleRange.end=g.end,T.viewportState.renderRange.start=p.start,T.viewportState.renderRange.end=p.end,M.emit("range:change",{range:{start:p.start,end:p.end}})},X0=()=>{R.start=-1,R.end=-1,N.rfn()};N.rfn=o,N.ffn=X0;let W0=()=>{if(N.id)return;let F=N.sgt(),I=F>=N.ls?"down":"up";if(N.vt=$2(N.vt,F),!B.root.classList.contains(`${U}--scrolling`))B.root.classList.add(`${U}--scrolling`);N.ls=F,N.rfn(),M.emit("scroll",{scrollTop:F,direction:I}),M.emit("velocity:change",{velocity:N.vt.velocity,reliable:N.vt.sampleCount>=P2});for(let m=0;m<k.length;m++)k[m](F,I);if(v)clearTimeout(v);v=setTimeout(()=>{B.root.classList.remove(`${U}--scrolling`),N.vt.velocity=0,N.vt.sampleCount=0,M.emit("velocity:change",{velocity:0,reliable:!1})},D?.idleTimeout??wj)},w=null;if(N.st.addEventListener("scroll",W0,{passive:!0}),Q&&A)w=(F)=>{if(F.deltaX)return;F.preventDefault(),B.viewport.scrollLeft+=F.deltaY},B.viewport.addEventListener("wheel",w);let h=(F)=>{let m=F.target.closest("[data-index]");if(m){let t=parseInt(m.dataset.index??"-1",10);if(t>=0){let Q0=N.dm?.getItem(t)??N.it[t];if(Q0){if(Q0.__groupHeader)return;M.emit("item:click",{item:Q0,index:t,event:F})}}}for(let t=0;t<x.length;t++)x[t](F)},i=(F)=>{let m=F.target.closest("[data-index]");if(m){let t=parseInt(m.dataset.index??"-1",10);if(t>=0){let Q0=N.dm?.getItem(t)??N.it[t];if(Q0){if(Q0.__groupHeader)return;M.emit("item:dblclick",{item:Q0,index:t,event:F})}}}},j0=(F)=>{for(let I=0;I<s.length;I++)s[I](F)};B.items.addEventListener("click",h),B.items.addEventListener("dblclick",i),B.root.addEventListener("keydown",j0);let Z0=new ResizeObserver((F)=>{if(N.id)return;for(let I of F){let m=I.contentRect.height,t=I.contentRect.width,Q0=Q?t:m;if(N.cw=t,Math.abs(Q0-N.ch)>1){if(N.ch=Q0,T.viewportState.containerHeight=Q0,N.ii)K0(),N.rfn(),M.emit("resize",{height:m,width:t})}if(N.ii)for(let r=0;r<a.length;r++)a[r](t,m)}});if(N.vre)Z0.observe(B.viewport);let B0={dom:B,emitter:M,resolvedConfig:z,rawConfig:j,rendered:f,pool:C,itemState:u,sharedState:T,renderRange:p,isHorizontal:Q,classPrefix:U,contentSizeHandlers:n,afterScroll:k,clickHandlers:x,keydownHandlers:s,resizeHandlers:a,destroyHandlers:q0,methods:l,onScrollFrame:W0,resizeObserver:Z0,applyTemplate:S,updateContentSize:K0},J0=f2(N,B0);N.dm=I2(N,B0,J0),N.sc=p2(N,B0);let A0=new Map;for(let F of L)if(F.methods)for(let I of F.methods){let m=A0.get(I);if(m)throw Error(`[vlist/builder] Method "${I}" is registered by both "${m}" and "${F.name}"`);A0.set(I,F.name)}for(let F of L)F.setup(J0);if(N.ii=!0,J0.state.isInitialized=!0,K0(),N.rfn(),H&&N.it.length>0){let F=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(F),N.ls=F,N.rfn()}let N0=(F)=>{J0.dataManager.setItems(F,0,F.length)},L0=H?(F)=>{let I=N.sab(2),m=N.it.length;if(J0.dataManager.setItems(F,m),I&&N.it.length>0){let t=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(t),N.ls=t,N.rfn()}}:(F)=>{let I=N.it.length;J0.dataManager.setItems(F,I)},O0=H?(F)=>{let I=N.sgt(),m=N.hc.getTotalHeight(),t=[...N.it];J0.dataManager.clear(),J0.dataManager.setItems([...F,...t],0);let r=N.hc.getTotalHeight()-m;if(r>0)N.sst(I+r),N.ls=I+r}:(F)=>{let I=[...N.it];J0.dataManager.clear(),J0.dataManager.setItems([...F,...I],0)},D0=(F,I)=>{J0.dataManager.updateItem(F,I)},M0=(F)=>{J0.dataManager.removeItem(F)},G0=async()=>{if(J0.dataManager.reload)await J0.dataManager.reload()},_0=()=>{if(e!==null)cancelAnimationFrame(e),e=null},$0=(F,I,m)=>{if(_0(),Math.abs(I-F)<1){N.sst(I),N.ls=I,N.rfn();return}let t=performance.now(),Q0=(r)=>{let U0=r-t,Y0=Math.min(U0/m,1),E0=F+(I-F)*v2(Y0);if(N.sst(E0),N.ls=E0,N.rfn(),Y0<1)e=requestAnimationFrame(Q0);else e=null};e=requestAnimationFrame(Q0)},Aj=(F,I)=>{let{align:m,behavior:t,duration:Q0}=w2(I),r=N.vtf(),U0=F;if(O&&r>0)U0=(U0%r+r)%r;let Y0=N.gsp(U0,N.hc,N.ch,r,m);if(t==="smooth")$0(N.sgt(),Y0,Q0);else _0(),N.sst(Y0)},Fj=()=>N.sgt(),Lj=(F,I)=>{return M.on(F,I)},Oj=(F,I)=>{M.off(F,I)},zj=()=>{if(N.id)return;if(N.id=!0,J0.state.isDestroyed=!0,B.items.removeEventListener("click",h),B.root.removeEventListener("keydown",j0),N.st.removeEventListener("scroll",W0),Z0.disconnect(),w)B.viewport.removeEventListener("wheel",w);if(v)clearTimeout(v);for(let F=0;F<q0.length;F++)q0[F]();for(let F of L)if(F.destroy)F.destroy();_0();for(let[,F]of f)F.remove(),C.release(F);f.clear(),C.clear(),M.clear(),B.root.remove()},L2={get element(){return B.root},get items(){if(l.has("_getItems"))return l.get("_getItems")();return N.it},get total(){if(l.has("_getTotal"))return l.get("_getTotal")();return N.vtf()},setItems:l.has("setItems")?l.get("setItems"):N0,appendItems:l.has("appendItems")?l.get("appendItems"):L0,prependItems:l.has("prependItems")?l.get("prependItems"):O0,updateItem:l.has("updateItem")?l.get("updateItem"):D0,removeItem:l.has("removeItem")?l.get("removeItem"):M0,reload:l.has("reload")?l.get("reload"):G0,scrollToIndex:l.has("scrollToIndex")?l.get("scrollToIndex"):Aj,cancelScroll:l.has("cancelScroll")?l.get("cancelScroll"):_0,getScrollPosition:l.has("getScrollPosition")?l.get("getScrollPosition"):Fj,on:Lj,off:Oj,destroy:zj};for(let[F,I]of l){if(F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;L2[F]=I}return L2}a0();var R0=(j,X,Q={},J="vlist",K=!1)=>{let{autoHide:q=!0,autoHideDelay:Y=1000,minThumbSize:U=30,showOnHover:V=!0,hoverZoneWidth:Z=16,showOnViewportEnter:D=!0}=Q,A=0,O=0,H=0,W=0,_=!1,G=!1,z=0,L=0,b=0,E=null,B=!1,M=null,$=null,P=K?"width":"height",C=K?"translateX":"translateY",N=K?(o)=>o.clientX:(o)=>o.clientY,e=K?"left":"top",v=document.createElement("div"),g=document.createElement("div"),p=V?document.createElement("div"):null,R=()=>{if(v.className=`${J}-scrollbar`,g.className=`${J}-scrollbar-thumb`,K)v.classList.add(`${J}-scrollbar--horizontal`);if(v.appendChild(g),j.appendChild(v),p){if(p.className=`${J}-scrollbar-hover`,K)p.classList.add(`${J}-scrollbar-hover--horizontal`),p.style.height=`${Z}px`;else p.style.width=`${Z}px`;j.appendChild(p)}},T=()=>{if(E)clearTimeout(E),E=null},f=()=>{if(!q)return;T(),E=setTimeout(y,Y)},u=()=>{if(A<=O)return;if(T(),!B)v.classList.add(`${J}-scrollbar--visible`),B=!0;if(q&&!_&&!G)f()},y=()=>{if(_||G)return;v.classList.remove(`${J}-scrollbar--visible`),B=!1},k=(o,X0)=>{A=o,O=X0;let W0=A>O;if(v.style.display=W0?"":"none",!W0){y();return}let w=O/A;H=Math.max(U,w*O),g.style[P]=`${H}px`,W=O-H,x(b)},x=(o)=>{if(b=o,A<=O||W<=0)return;let X0=A-O,w=Math.min(1,Math.max(0,o/X0))*W;g.style.transform=`${C}(${w}px)`},s=(o)=>{if(o.target===g)return;let X0=v.getBoundingClientRect(),h=N(o)-X0[e]-H/2,j0=Math.max(0,Math.min(h,W))/W,Z0=A-O,B0=j0*Z0;X(B0),u()},a=(o)=>{o.preventDefault(),o.stopPropagation(),_=!0,z=N(o),L=b,T(),v.classList.add(`${J}-scrollbar--dragging`),document.addEventListener("mousemove",n),document.addEventListener("mouseup",q0)},n=(o)=>{if(!_)return;let X0=N(o)-z,W0=W>0?X0/W:0,w=A-O,h=W0*w,i=Math.max(0,Math.min(L+h,w)),Z0=i/w*W;if(g.style.transform=`${C}(${Z0}px)`,$=i,M===null)M=requestAnimationFrame(()=>{if($!==null)X($);M=null})},q0=()=>{if(_=!1,M!==null)cancelAnimationFrame(M),M=null;if($!==null)X($),$=null;if(v.classList.remove(`${J}-scrollbar--dragging`),q&&!G)f();document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",q0)},l=()=>{if(D)u()},S=()=>{if(!_){if(G=!1,q)f()}},d=()=>{G=!0,T(),u()},c=()=>{if(G=!1,!_&&q)f()},K0=()=>{if(T(),M!==null)cancelAnimationFrame(M),M=null;if(v.removeEventListener("click",s),v.removeEventListener("mouseenter",d),v.removeEventListener("mouseleave",c),g.removeEventListener("mousedown",a),j.removeEventListener("mouseenter",l),j.removeEventListener("mouseleave",S),document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",q0),p){if(p.removeEventListener("mouseenter",d),p.removeEventListener("mouseleave",c),p.parentNode)p.parentNode.removeChild(p)}if(v.parentNode)v.parentNode.removeChild(v)};if(R(),v.addEventListener("click",s),v.addEventListener("mouseenter",d),v.addEventListener("mouseleave",c),g.addEventListener("mousedown",a),j.addEventListener("mouseenter",l),j.addEventListener("mouseleave",S),p)p.addEventListener("mouseenter",d),p.addEventListener("mouseleave",c);return{show:u,hide:y,updateBounds:k,updatePosition:x,isVisible:()=>B,destroy:K0}};var a2=(j)=>{let X=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:J,config:K}=Q,{classPrefix:q,horizontal:Y}=K;if(X=R0(J.viewport,(Z)=>Q.scrollController.scrollTo(Z),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.virtualHeight,Q.state.viewportState.containerHeight);let V=X;Q.afterScroll.push((Z,D)=>{V.updatePosition(Z),V.show()}),Q.resizeHandlers.push((Z,D)=>{if(V){let A=Q.getCachedCompression();V.updateBounds(A.virtualHeight,Q.state.viewportState.containerHeight)}}),Q.contentSizeHandlers.push(()=>{if(V){let Z=Q.getCachedCompression();V.updateBounds(Z.virtualHeight,Q.state.viewportState.containerHeight)}}),Q.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var r2=(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}},r0=(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,V=Q-Y.time;j.velocity=V>0?U/V:0}return j.lastPosition=X,j.lastTime=Q,j},pj=(j)=>j.sampleCount>=3,n2=(j,X={})=>{let{wheel:Q=!0,sensitivity:J=1,smoothing:K=!1,idleTimeout:q=150,onScroll:Y,onIdle:U,scrollElement:V,horizontal:Z=!1}=X,D=!!V,A=0,O=0,H=D?Z?window.innerWidth:window.innerHeight:Z?j.clientWidth:j.clientHeight,W=X.compressed??!1,_=X.compression,G=r2(),z=!1,L=null,E=n0(()=>{let S=Z?j.scrollLeft:j.scrollTop,d=S>=A?"down":"up";if(G=r0(G,S),A=S,Y)Y({scrollTop:A,direction:d,velocity:G.velocity});N()}),M=n0(()=>{let S=j.getBoundingClientRect(),d=Z?Math.max(0,-S.left):Math.max(0,-S.top),c=d>=A?"down":"up";if(G=r0(G,d),A=d,!z)z=!0;if(Y)Y({scrollTop:A,direction:c,velocity:G.velocity});N()}),$=(S)=>{S.preventDefault()},P=(S)=>{if(S.deltaX)return;S.preventDefault(),j.scrollLeft+=S.deltaY},C=(S)=>{if(!W)return;S.preventDefault();let d=(Z?S.deltaX||S.deltaY:S.deltaY)*J,c=A+d;if(K)c=A+d*0.3;if(c=Math.max(0,Math.min(c,O)),c!==A){let o=c>=A?"down":"up";if(G=r0(G,c),A=c,!z)z=!0;if(Y)Y({scrollTop:A,direction:o,velocity:G.velocity});N()}},N=()=>{if(L)clearTimeout(L);L=setTimeout(()=>{if(z=!1,G=r2(A),U)U()},q)},e=(S)=>{if(W)return;if(W=!0,_=S,O=S.virtualHeight-H,D)return;if(E.cancel(),j.removeEventListener("scroll",E),!Q)j.removeEventListener("wheel",$);else if(Z)j.removeEventListener("wheel",P);if(Z)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",C,{passive:!1});let d=Z?j.scrollLeft:j.scrollTop;if(d>0){let c=Z?_?.actualHeight??j.scrollWidth:_?.actualHeight??j.scrollHeight;A=d/c*O}if(Z)j.scrollLeft=0;else j.scrollTop=0},v=()=>{if(!W)return;if(W=!1,D){_=void 0;return}if(j.removeEventListener("wheel",C),Z)j.style.overflowX="auto";else j.style.overflow="auto";if(j.addEventListener("scroll",E,{passive:!0}),!Q)j.addEventListener("wheel",$,{passive:!1});else if(Z)j.addEventListener("wheel",P,{passive:!1});if(_&&A>0){let d=A/O*(_.actualHeight-H);if(Z)j.scrollLeft=d;else j.scrollTop=d}_=void 0},g=()=>{if(D||W)return A;return Z?j.scrollLeft:j.scrollTop},p=(S,d=!1)=>{let c=Math.max(0,Math.min(S,O||1/0));if(D){let K0=j.getBoundingClientRect();if(Z){let o=K0.left+window.scrollX;window.scrollTo({left:o+c,behavior:d?"smooth":"auto"})}else{let o=K0.top+window.scrollY;window.scrollTo({top:o+c,behavior:d?"smooth":"auto"})}}else if(W){if(c===A)return;let o=c>=A?"down":"up";if(G=r0(G,c),A=c,!z)z=!0;if(Y)Y({scrollTop:A,direction:o,velocity:G.velocity});N()}else if(Z)j.scrollTo({left:c,behavior:d?"smooth":"auto"});else j.scrollTo({top:c,behavior:d?"smooth":"auto"})},R=(S)=>{p(g()+S)},T=()=>{return g()<=0},f=(S=0)=>{let d=g(),c=D||W?O:Z?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;return d>=c-S},u=()=>{let S=g(),d=D||W?O:Z?j.scrollWidth-j.clientWidth:j.scrollHeight-j.clientHeight;if(d<=0)return 0;return Math.min(1,Math.max(0,S/d))},y=(S)=>{if(S.compression)_=S.compression,O=_.virtualHeight-H},k=()=>W,x=()=>Math.abs(G.velocity),s=()=>pj(G),a=()=>z,n=()=>D,q0=(S)=>{if(H=S,_)O=_.virtualHeight-H},l=()=>{if(L)clearTimeout(L);if(D)M.cancel(),window.removeEventListener("scroll",M);else E.cancel(),j.removeEventListener("scroll",E),j.removeEventListener("wheel",C),j.removeEventListener("wheel",$),j.removeEventListener("wheel",P)};if(D){if(W&&_)O=_.virtualHeight-H;window.addEventListener("scroll",M,{passive:!0})}else if(W&&_){if(O=_.virtualHeight-H,Z)j.style.overflowX="hidden";else j.style.overflow="hidden";if(Q)j.addEventListener("wheel",C,{passive:!1})}else{if(Z)j.style.overflowX="auto",j.style.overflowY="hidden";else j.style.overflow="auto";if(j.addEventListener("scroll",E,{passive:!0}),!Q)j.addEventListener("wheel",$,{passive:!1});else if(Z)j.addEventListener("wheel",P,{passive:!1})}return{getScrollTop:g,scrollTo:p,scrollBy:R,isAtTop:T,isAtBottom:f,getScrollPercentage:u,getVelocity:x,isTracking:s,isScrolling:a,updateConfig:y,enableCompression:e,disableCompression:v,isCompressed:k,isWindowMode:n,updateContainerHeight:q0,destroy:l}},n0=(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 uj=0.65,hj=0.5,xj=0.95,gj=0.1,mj=5,dj=100,o2=()=>{let j=null,X=0,Q=!1,J=0,K=null,q=0,Y=0,U=null,V=[];return{name:"withScale",priority:20,setup(Z){let{dom:D,config:A}=Z,{classPrefix:O,horizontal:H}=A,W=()=>{let L=Z.getVirtualTotal(),b=V0(L,Z.heightCache);if(b.isCompressed&&!Q){Q=!0,Z.scrollController.enableCompression(b),Z.updateContentSize(b.virtualHeight),Z.setScrollFns(()=>X,(v)=>{if(X=v,J=v,K!==null)cancelAnimationFrame(K),K=null});let E=()=>{let v=J-X;if(Math.abs(v)<hj)X=J,K=null;else X+=v*uj,K=requestAnimationFrame(E);Z.scrollController.scrollTo(X)},B=D.viewport,M=(v)=>{v.preventDefault();let p=Z.getCachedCompression().virtualHeight-Z.state.viewportState.containerHeight;if(J=Math.max(0,Math.min(J+v.deltaY,p)),K===null)K=requestAnimationFrame(E)};B.addEventListener("wheel",M,{passive:!1});let $=()=>{if(U!==null)cancelAnimationFrame(U),U=null},P=(v)=>{if($(),K!==null)cancelAnimationFrame(K),K=null;let g=v.touches[0];if(!g)return;let p=H?g.clientX:g.clientY;q=p,Y=X,V=[{time:performance.now(),y:p}]},C=(v)=>{v.preventDefault();let g=v.touches[0];if(!g)return;let p=H?g.clientX:g.clientY,R=performance.now();if(V.push({time:R,y:p}),V.length>mj)V.shift();let T=q-p,u=Z.getCachedCompression().virtualHeight-Z.state.viewportState.containerHeight,y=Math.max(0,Math.min(Y+T,u));X=y,J=y,Z.scrollController.scrollTo(y)},N=(v)=>{let g=performance.now(),p=V.filter((u)=>g-u.time<dj),R=0;if(p.length>=2){let u=p[0],y=p[p.length-1],k=y.time-u.time;if(k>0)R=(u.y-y.y)/k}if(V=[],Math.abs(R)<gj)return;let T=R*16,f=()=>{if(T*=xj,Math.abs(T)<0.5){U=null;return}let y=Z.getCachedCompression().virtualHeight-Z.state.viewportState.containerHeight,k=X+T;if(k=Math.max(0,Math.min(k,y)),k<=0&&T<0||k>=y&&T>0){X=k,J=k,Z.scrollController.scrollTo(k),U=null;return}X=k,J=k,Z.scrollController.scrollTo(k),U=requestAnimationFrame(f)};U=requestAnimationFrame(f)};if(B.addEventListener("touchstart",P,{passive:!0}),B.addEventListener("touchmove",C,{passive:!1}),B.addEventListener("touchend",N,{passive:!0}),B.addEventListener("touchcancel",N,{passive:!0}),Z.destroyHandlers.push(()=>{if(B.removeEventListener("wheel",M),B.removeEventListener("touchstart",P),B.removeEventListener("touchmove",C),B.removeEventListener("touchend",N),B.removeEventListener("touchcancel",N),$(),K!==null)cancelAnimationFrame(K),K=null}),!D.viewport.querySelector(`.${O}-scrollbar-track`)){if(j=R0(D.viewport,(g)=>Z.scrollController.scrollTo(g),{},O,H),!D.viewport.classList.contains(`${O}-viewport--custom-scrollbar`))D.viewport.classList.add(`${O}-viewport--custom-scrollbar`);j.updateBounds(b.virtualHeight,Z.state.viewportState.containerHeight);let v=j;Z.afterScroll.push((g,p)=>{if(v)v.updatePosition(g),v.show()}),Z.resizeHandlers.push((g,p)=>{if(v){let R=Z.getCachedCompression();v.updateBounds(R.virtualHeight,Z.state.viewportState.containerHeight)}})}}else if(!b.isCompressed&&Q)Q=!1,Z.scrollController.disableCompression(),Z.updateContentSize(b.actualHeight);else if(b.isCompressed)Z.scrollController.updateConfig({compression:b}),Z.updateContentSize(b.virtualHeight);if(j)j.updateBounds(b.virtualHeight,Z.state.viewportState.containerHeight);Z.state.cachedCompression={state:b,totalItems:L}};Z.updateCompressionMode=W;let _=Z.getCachedCompression.bind(Z);Z.getCachedCompression=()=>{if(Z.state.cachedCompression)return Z.state.cachedCompression.state;return _()},Z.setVisibleRangeFn((L,b,E,B,M)=>{G=null,z=null;let $=V0(B,E);c0(L,b,E,B,$,M)}),Z.setScrollToPosFn((L,b,E,B,M)=>{let $=V0(B,b);return s0(L,b,E,B,$,M)});let G=null,z=null;Z.setPositionElementFn((L,b)=>{let E=Z.getVirtualTotal(),B=V0(E,Z.heightCache);if(B.isCompressed){let M=Z.scrollController.getScrollTop();if(G===null||b<z)z=b,G=Math.round(T0(b,M,Z.heightCache,E,Z.state.viewportState.containerHeight,B));let $=G+Z.heightCache.getOffset(b)-Z.heightCache.getOffset(z),P=Z.config.horizontal;L.style.transform=P?`translateX(${$}px)`:`translateY(${$}px)`}else{let M=Math.round(Z.heightCache.getOffset(b)),$=Z.config.horizontal;L.style.transform=$?`translateX(${M}px)`:`translateY(${M}px)`}}),W(),Z.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 o0=(j={})=>{let{chunkSize:X=100,maxCachedItems:Q=5000,evictionBuffer:J=200,onEvict:K}=j,q=new Map,Y=0,U=0,V=(R)=>{let T=q.get(R);if(!T)T={items:Array(X),count:0,lastAccess:Date.now()},q.set(R,T);else T.lastAccess=Date.now();return T},Z=(R)=>{return Math.floor(R/X)},D=(R)=>{return R%X},A=()=>Y,O=(R)=>{Y=R},H=(R)=>{if(R<0||R>=Y)return;let T=Z(R),f=q.get(T);if(!f)return;return f.items[D(R)]},W=(R)=>{if(R<0||R>=Y)return!1;let T=Z(R),f=q.get(T);if(!f)return!1;return f.items[D(R)]!==void 0},_=(R,T)=>{let f=Z(R),u=V(f),y=D(R),k=u.items[y]===void 0;if(u.items[y]=T,k)u.count++,U++;if(R>=Y)Y=R+1},G=(R,T)=>{for(let f=0;f<T.length;f++){let u=T[f];if(u!==void 0)_(R+f,u)}},z=(R)=>{if(R<0||R>=Y)return!1;let T=Z(R),f=q.get(T);if(!f)return!1;let u=D(R);if(f.items[u]===void 0)return!1;if(f.items[u]=void 0,f.count--,U--,f.count===0)q.delete(T);return!0},L=(R,T)=>{let f=[];for(let u=R;u<=T&&u<Y;u++)f.push(H(u));return f},b=(R,T)=>{for(let f=R;f<=T&&f<Y;f++)if(!W(f))return!1;return!0},E=()=>{let R=[],T=null,f=Array.from(q.keys()).sort((u,y)=>u-y);for(let u of f){let y=q.get(u);if(!y)continue;let k=u*X;for(let x=0;x<X;x++){let s=k+x;if(s>=Y)break;if(y.items[x]!==void 0)if(T===null)T={start:s,end:s};else if(s===T.end+1)T.end=s;else R.push(T),T={start:s,end:s};else if(T!==null)R.push(T),T=null}}if(T!==null)R.push(T);return R},B=(R,T)=>{let f=[],u=null;for(let y=R;y<=T&&y<Y;y++)if(!W(y))if(u===null)u={start:y,end:y};else u.end=y;else if(u!==null)f.push(u),u=null;if(u!==null)f.push(u);return f},M=(R)=>{return q.has(R)},$=(R)=>{let T=q.get(R);if(T)T.lastAccess=Date.now()},P=(R,T)=>{if(R>T||q.size===0)return;let f=Date.now(),u=Z(Math.max(0,R)),y=Z(Math.min(Y-1,T));for(let k=u;k<=y;k++){let x=q.get(k);if(x)x.lastAccess=f}},C=(R,T)=>{if(U<=Q)return 0;let f=Math.max(0,R-J),u=Math.min(Y-1,T+J),y=Z(f),k=Z(u),x=0,s=[];for(let[a,n]of q)if(a<y||a>k)x+=n.count,s.push(a),U-=n.count,q.delete(a);if(x>0&&K)K(x,s);return x},N=()=>{if(U<=Q)return 0;let R=Array.from(q.entries()).sort(([,u],[,y])=>u.lastAccess-y.lastAccess),T=0,f=[];for(let[u,y]of R){if(U<=Q)break;T+=y.count,U-=y.count,f.push(u),q.delete(u)}if(T>0&&K)K(T,f);return T},e=()=>{return{totalItems:Y,cachedItems:U,cachedChunks:q.size,chunkSize:X,maxCachedItems:Q,memoryEfficiency:Y>0?1-U/Y:1}},v=()=>U,g=()=>{q.clear(),U=0};return{chunkSize:X,maxCachedItems:Q,getTotal:A,setTotal:O,get:H,has:W,set:_,setRange:G,delete:z,getRange:L,isRangeLoaded:b,getLoadedRanges:E,findUnloadedRanges:B,getChunkIndex:Z,isChunkLoaded:M,touchChunk:$,touchChunksForRange:P,evictDistant:C,evictToLimit:N,getStats:e,getCachedCount:v,clear:g,reset:()=>{g(),Y=0}}},i0=(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},I0=(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=i0(X),V=q.start;for(let Z of U){if(Z.end<V)continue;if(Z.start>q.end)break;if(Z.start>V)Y.push({start:V,end:Math.min(Z.start-1,q.end)});if(V=Z.end+1,V>q.end)break}if(V<=q.end)Y.push({start:V,end:q.end});return Y};var t0=(j={})=>{let{enabled:X=!0,maskCharacter:Q="█",randomVariance:J=!0,maxSampleSize:K=20,customGenerator:q}=j,Y=null,U=!1,V=0,Z=(z)=>{if(!X||U||z.length===0)return;let L=new Map,b=new Map,E=Math.min(z.length,K);for(let B=0;B<E;B++){let M=z[B];if(!M||typeof M!=="object")continue;for(let[$,P]of Object.entries(M)){if($.startsWith("_")||$==="id")continue;if(!b.has($))b.set($,{lengths:[],types:new Set});let C=b.get($),N=Array.isArray(P)?"array":typeof P;if(C.types.add(N),typeof P==="string")C.lengths.push(P.length);else if(P!==null&&P!==void 0)C.lengths.push(String(P).length)}}for(let[B,M]of b){if(M.lengths.length===0)continue;let $=Math.min(...M.lengths),P=Math.max(...M.lengths),C=Math.round(M.lengths.reduce((e,v)=>e+v,0)/M.lengths.length),N="string";if(M.types.has("number")&&M.types.size===1)N="number";else if(M.types.has("boolean")&&M.types.size===1)N="boolean";else if(M.types.has("array"))N="array";else if(M.types.has("object")&&!M.types.has("string"))N="object";L.set(B,{minLength:$,maxLength:P,avgLength:C,type:N})}Y=L,U=!0},D=()=>U,A=(z)=>{let L=z.avgLength;if(J&&z.minLength!==z.maxLength){if(L=Math.floor(Math.random()*(z.maxLength-z.minLength+1)+z.minLength),Math.random()<0.3)L=Math.max(1,L+Math.floor(Math.random()*3)-1)}return Q.repeat(Math.max(1,L))},O=(z)=>{if(q)return{...q(z),["_isPlaceholder"]:!0};let L={id:`__placeholder_${V++}`,["_isPlaceholder"]:!0,_index:z};if(!Y||Y.size===0)return L.label=Q.repeat(12),L;for(let[b,E]of Y)switch(E.type){case"string":L[b]=A(E);break;case"number":L[b]=0;break;case"boolean":L[b]=!1;break;case"array":L[b]=[];break;case"object":L[b]={};break;default:L[b]=A(E)}return L};return{analyzeStructure:Z,hasAnalyzedStructure:D,generate:O,generateRange:(z,L)=>{let b=[];for(let E=z;E<=L;E++)b.push(O(E));return b},isPlaceholder:(z)=>{if(!z||typeof z!=="object")return!1;return z._isPlaceholder===!0},getPlaceholderKey:()=>"_isPlaceholder",clear:()=>{Y=null,U=!1,V=0}}},b0=(j)=>{if(!j||typeof j!=="object")return!1;return j._isPlaceholder===!0},D2=(j)=>{return j.filter((X)=>!b0(X))};var cj=50,e0=(j={})=>{let{adapter:X,initialItems:Q,initialTotal:J,storage:K,placeholder:q,pageSize:Y=cj,onStateChange:U,onItemsLoaded:V,onItemsEvicted:Z}=j,D=o0({...K,onEvict:(w,h)=>{Z?.(w),B()}}),A=null,O=()=>{if(!A)A=t0(q);return A},H=new Map,W=!1,_,G=!0,z,L=[],b=0,E=new Map,B=()=>{U?.(p())},M=()=>{H.clear();let w=D.getLoadedRanges();for(let h of w)for(let i=h.start;i<=h.end;i++){let j0=D.get(i);if(j0&&!b0(j0))H.set(j0.id,i)}},$=(w,h)=>{if(!b0(h))H.set(h.id,w)},P=(w)=>{H.delete(w)},C=(w,h)=>{return`${w}-${h}`},N=()=>D.getTotal(),e=()=>D.getCachedCount(),v=()=>W,g=()=>G,p=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:W,pendingRanges:L,error:_,hasMore:G,cursor:z}),R=()=>D,T=()=>O(),f=(w)=>{let h=D.get(w);if(h!==void 0)return h;if(w>=0&&w<D.getTotal())return O().generate(w);return},u=(w)=>{let h=H.get(w);if(h===void 0)return;return D.get(h)},y=(w)=>{return H.get(w)??-1},k=(w)=>{let h=D.get(w);return h!==void 0&&!b0(h)},x=(w,h)=>{let i=[],j0=D.getTotal(),Z0=0,B0=0;D.touchChunksForRange(w,Math.min(h,j0-1));for(let J0=w;J0<=h&&J0<j0;J0++){let A0=D.get(J0);if(A0!==void 0)i.push(A0),Z0++;else i.push(O().generate(J0)),B0++}return i},s=(w)=>{D.setTotal(w),G=D.getCachedCount()<w,B()},a=(w,h=0,i)=>{if(A&&!A.hasAnalyzedStructure()&&w.length>0)A.analyzeStructure(w);for(let j0=0;j0<w.length;j0++){let Z0=w[j0];if(Z0!==void 0){let B0=h+j0;D.set(B0,Z0),$(B0,Z0)}}if(i!==void 0)D.setTotal(i);else if(h+w.length>D.getTotal())D.setTotal(h+w.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)G=!1;V?.(w,h,D.getTotal()),B()},n=(w,h)=>{let i=H.get(w);if(i===void 0)return!1;let j0=D.get(i);if(!j0)return!1;let Z0={...j0,...h};if(D.set(i,Z0),h.id!==void 0&&h.id!==w)P(w),$(i,Z0);return B(),!0},q0=(w)=>{let h=H.get(w);if(h===void 0)return!1;D.delete(h),P(w);let i=D.getTotal();if(i>0)D.setTotal(i-1);return B(),!0},l=async(w,h)=>{if(!X)return;let i=C(w,h);if(E.has(i))return;let j0=D.getLoadedRanges(),Z0=I0({start:w,end:h},j0,D.chunkSize);if(Z0.length===0)return;let B0=D.chunkSize,J0=[];for(let N0 of Z0){let L0=Math.floor(N0.start/B0),O0=Math.floor(N0.end/B0);for(let D0=L0;D0<=O0;D0++){let M0=D0*B0,G0=M0+B0-1,_0=C(M0,G0);if(!J0.some(($0)=>$0.start===M0)&&!E.has(_0))J0.push({start:M0,end:G0})}}let A0=[];for(let N0 of Z0){let L0=Math.floor(N0.start/B0),O0=Math.floor(N0.end/B0);for(let D0=L0;D0<=O0;D0++){let M0=D0*B0,G0=M0+B0-1,_0=C(M0,G0);if(E.has(_0)){let $0=E.get(_0);if(!A0.includes($0))A0.push($0)}}}for(let N0 of J0){let L0=C(N0.start,N0.end),O0=(async()=>{L.push(N0),W=!0,_=void 0,B();try{let D0=N0.end-N0.start+1,M0={offset:N0.start,limit:D0,cursor:void 0},G0=await X.read(M0);if(a(G0.items,N0.start,G0.total),G0.cursor)z=G0.cursor;let _0=N0.start+G0.items.length;if(_0>=b){if(b=_0,G0.hasMore!==void 0)G=G0.hasMore;else if(G0.total!==void 0)G=_0<G0.total}}catch(D0){_=D0 instanceof Error?D0:Error(String(D0))}finally{E.delete(L0),L=L.filter((D0)=>D0.start!==N0.start||D0.end!==N0.end),W=E.size>0,B()}})();E.set(L0,O0),A0.push(O0)}await Promise.all(A0)},S=async(w,h)=>{if(D.isRangeLoaded(w,h))return;await l(w,h)},d=async()=>{if(!X)return;await l(0,Y-1)},c=async()=>{if(!X||W||!G)return!1;let w=D.getCachedCount(),h=D.getTotal(),i=w,j0=Math.min(i+Y-1,h>0?h-1:i+Y-1);if(i>=h&&h>0)return G=!1,!1;return await l(i,j0),D.getCachedCount()>w},K0=async()=>{if(D.clear(),H.clear(),A)A.clear();E.clear(),L=[],W=!1,z=void 0,G=!0,b=0,_=void 0,B()},o=(w,h)=>{if(D.evictDistant(w,h)>0)M()},X0=()=>{D.clear(),H.clear(),z=void 0,_=void 0,L=[],W=!1,B()},W0=()=>{if(D.reset(),H.clear(),A)A.clear();z=void 0,G=!0,b=0,_=void 0,L=[],W=!1,B()};if(Q&&Q.length>0)a(Q,0,J??Q.length);else if(J!==void 0)D.setTotal(J);return{getState:p,getTotal:N,getCached:e,getIsLoading:v,getHasMore:g,getStorage:R,getPlaceholders:T,getItem:f,getItemById:u,getIndexById:y,isItemLoaded:k,getItemsInRange:x,setTotal:s,setItems:a,updateItem:n,removeItem:q0,loadRange:l,ensureRange:S,loadInitial:d,loadMore:c,reload:K0,evictDistant:o,clear:X0,reset:W0}};var i2=(j)=>{let{adapter:X,loading:Q}=j,J=Q?.cancelThreshold??h2,K=Q?.preloadThreshold??x2,q=Q?.preloadAhead??g2;return{name:"withAsync",priority:20,methods:["reload"],setup(Y){let{emitter:U}=Y,V=Y.config.reverse,Z=e0({adapter:X,pageSize:f0,onStateChange:()=>{if(Y.state.isInitialized){Y.heightCache.rebuild(Y.getVirtualTotal()),Y.updateCompressionMode();let G=Y.getCachedCompression();Y.state.viewportState.totalHeight=G.virtualHeight,Y.state.viewportState.actualHeight=G.actualHeight,Y.state.viewportState.isCompressed=G.isCompressed,Y.state.viewportState.compressionRatio=G.ratio,Y.updateContentSize(G.virtualHeight),Y.renderIfNeeded()}},onItemsLoaded:(G,z,L)=>{if(Y.state.isInitialized)Y.heightCache.rebuild(Y.getVirtualTotal()),Y.forceRender(),U.emit("load:end",{items:G,total:L})}});Y.replaceDataManager(Z);let D=null,A=null,O=0,H=()=>{if(A){let G=A;A=null,Y.dataManager.ensureRange(G.start,G.end).catch((z)=>{U.emit("error",{error:z,context:"ensureRange"})})}};Y.afterScroll.push((G,z)=>{if(Y.state.isDestroyed)return;let L=Y.scrollController.getVelocity(),E=Y.scrollController.isTracking()&&L<=J;if(A&&O>J&&L<=J){let $=A;A=null,Y.dataManager.ensureRange($.start,$.end).catch((P)=>{U.emit("error",{error:P,context:"ensureRange"})})}if(O=L,E&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(V){if(G<N2)U.emit("load:start",{offset:Y.dataManager.getCached(),limit:f0}),Y.dataManager.loadMore().catch(($)=>{U.emit("error",{error:$,context:"loadMore"})})}else if(Y.state.viewportState.totalHeight-G-Y.state.viewportState.containerHeight<N2)U.emit("load:start",{offset:Y.dataManager.getCached(),limit:f0}),Y.dataManager.loadMore().catch((P)=>{U.emit("error",{error:P,context:"loadMore"})})}let{renderRange:B}=Y.state.viewportState;if(!D||B.start!==D.start||B.end!==D.end)if(D={start:B.start,end:B.end},E){A=null;let{start:$,end:P}=B,C=Y.getVirtualTotal();if(L>K)if(z==="down")P=Math.min(B.end+q,C-1);else $=Math.max(B.start-q,0);Y.dataManager.ensureRange($,P).catch((N)=>{U.emit("error",{error:N,context:"ensureRange"})})}else A={start:B.start,end:B.end}});let W=200,_=null;Y.afterScroll.push((G,z)=>{if(_!==null)clearTimeout(_);_=setTimeout(()=>{_=null,H()},W)}),Y.destroyHandlers.push(()=>{if(_!==null)clearTimeout(_),_=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,A=null,Y.invalidateRendered(),await Y.dataManager.reload(),Y.forceRender();let{renderRange:G}=Y.state.viewportState;if(G.end>0)await Y.dataManager.ensureRange(G.start,G.end)}),U.emit("load:start",{offset:0,limit:f0}),Y.dataManager.loadInitial().catch((G)=>{U.emit("error",{error:G,context:"loadInitial"})})}}};var t2=()=>{let j=null;return{name:"withPage",priority:5,setup(X){let{dom:Q,state:J,config:K,emitter:q}=X;Q.root.style.overflow="visible",Q.root.style.height="auto",Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.setScrollTarget(window),X.setScrollFns(()=>{let Z=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Z.left);else return Math.max(0,-Z.top)},(Z)=>{let D=Q.viewport.getBoundingClientRect();if(K.horizontal){let A=D.left+window.scrollX;window.scrollTo(A+Z,window.scrollY)}else{let A=D.top+window.scrollY;window.scrollTo(window.scrollX,A+Z)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),J.viewportState.containerHeight=window.innerHeight;let{innerHeight:Y,innerWidth:U}=window,V=()=>{let{innerWidth:Z,innerHeight:D}=window,A=K.horizontal?Z:D,O=K.horizontal?U:Y;if(Math.abs(A-O)<=1)return;Y=D,U=Z,J.viewportState.containerHeight=D,q.emit("resize",{width:Z,height:D});for(let H=0;H<X.resizeHandlers.length;H++)X.resizeHandlers[H](Z,D);X.renderIfNeeded()};window.addEventListener("resize",V,{passive:!0}),j=()=>{window.removeEventListener("resize",V)},X.destroyHandlers.push(j)},destroy(){if(j)j(),j=null}}};var W2=(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},e2=(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},jj=(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 V=Y-K;Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:V}),q=q+1+V,J=U,K=Y}}return Q.push({key:J,groupIndex:Q.length,headerLayoutIndex:q,firstDataIndex:K,count:j-K}),Q},p0=(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},u0=(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)}},j2=(j,X)=>{let Q=jj(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:(O)=>{if(Q.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=W2(Q,O),W=Q[H];if(O===W.headerLayoutIndex)return{type:"header",group:W};let _=O-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+_,group:W}},layoutToDataIndex:(O)=>{if(Q.length===0)return O;let H=W2(Q,O),W=Q[H];if(O===W.headerLayoutIndex)return-1;let _=O-W.headerLayoutIndex-1;return W.firstDataIndex+_},dataToLayoutIndex:(O)=>{if(Q.length===0)return O;let H=e2(Q,O),W=Q[H],_=O-W.firstDataIndex;return W.headerLayoutIndex+1+_},getGroupAtLayoutIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=W2(Q,O);return Q[H]},getGroupAtDataIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=e2(Q,O);return Q[H]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let H=Q[O];if(!H)return 0;return K(H.key,O)},rebuild:(O)=>{Q=jj(O,X.getGroupForIndex),J=O+Q.length}}};var J2=(j,X,Q,J,K)=>{let q=document.createElement("div");q.className=`${K}-sticky-header`,q.setAttribute("role","presentation"),q.setAttribute("aria-hidden","true"),q.style.position="absolute",q.style.top="0",q.style.left="0",q.style.right="0",q.style.zIndex="5",q.style.pointerEvents="none",q.style.willChange="transform",q.style.overflow="hidden",j.insertBefore(q,j.firstChild);let Y=-1,U=!1,V=0,Z=(_)=>{if(_===Y)return;Y=_;let G=X.groups;if(_<0||_>=G.length){q.textContent="";return}let z=G[_],L=J.headerTemplate(z.key,z.groupIndex),b=X.getHeaderHeight(_);if(q.style.height=`${b}px`,typeof L==="string")q.innerHTML=L;else q.replaceChildren(L)},D=(_)=>{let G=X.groups;if(G.length===0){O();return}let z=0;for(let M=G.length-1;M>=0;M--)if(Q.getOffset(G[M].headerLayoutIndex)<=_){z=M;break}let L=Q.getOffset(G[0].headerLayoutIndex);if(_<L){O();return}if(!U)A();Z(z);let b=X.getHeaderHeight(z),E=0,B=z+1;if(B<G.length){let $=Q.getOffset(G[B].headerLayoutIndex)-_;if($<b)E=$-b}if(E!==V)V=E,q.style.transform=E===0?"":`translateY(${Math.round(E)}px)`},A=()=>{if(U)return;U=!0,q.style.display=""},O=()=>{if(!U)return;U=!1,q.style.display="none",Y=-1,V=0,q.style.transform=""},H=()=>{let _=Y;if(Y=-1,_>=0)Z(_)},W=()=>{q.remove(),Y=-1,U=!1};return q.style.display="none",{update:D,refresh:H,show:A,hide:O,destroy:W}};var Jj=(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},Qj=(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},Xj=(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),V=X.getHeight(Y),Z=X.getTotalHeight(),D=Math.max(0,Z-Q),A;switch(q){case"center":A=U-Q/2+V/2;break;case"end":A=U-Q+V;break;case"start":default:A=U;break}return Math.max(0,Math.min(A,D))},qj=(j,X,Q)=>{if(Q&&Q.isCompressed)return Q.virtualHeight;return X.getTotalHeight()},Kj=(j,X)=>{return X.getTotalHeight()},Yj=(j,X)=>{return X.getOffset(j)},Zj=(j,X,Q)=>{let J=Math.max(0,X-Q);return Math.max(0,Math.min(j,J))};var y0=(j,X,Q,J,K="start",q,Y=Xj)=>{return Y(j,X,Q,J,q,K)},Bj=(j,X)=>{return j.start===X.start&&j.end===X.end},Uj=(j,X)=>{return j>=X.start&&j<=X.end},Nj=(j)=>{if(j.end<j.start)return 0;return j.end-j.start+1};var Dj=(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}};a0();var Gj=(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:V}=q,{classPrefix:Z}=U;if(U.horizontal)throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'");let A=V.item.height;J=V.items?[...V.items]:[];let O=J.length,H={getGroupForIndex:j.getGroupForIndex,headerHeight:j.headerHeight,headerTemplate:j.headerTemplate,sticky:j.sticky??!1};X=j2(O,H),K=p0(J,X.groups);let W=u0(X,A);q.setHeightConfig(W),q.rebuildHeightCache(K.length),q.dataManager.setItems(K,0,K.length);let _=V.item.template,{headerTemplate:G}=j,z=(P,C,N)=>{if(P0(P))return G(P.groupKey,P.groupIndex);return _(P,C,N)},L=q.methods.get("_getGridLayout"),b=q.methods.get("_replaceGridRenderer"),E=q.methods.get("_updateGridLayoutForGroups");if(L&&b){if(E)E((e)=>{let v=K[e];return!!(v&&P0(v))});let{createGridRenderer:P}=(Q2(),Tj(Wj)),C=L(),N=P(Y.items,z,q.heightCache,C,Z,q.getContainerWidth(),()=>q.dataManager.getTotal(),U.ariaIdPrefix);b(N)}else q.replaceTemplate(z);if(Y.root.classList.add(`${Z}--grouped`),j.sticky!==!1){Q=J2(Y.root,X,q.heightCache,{...H,sticky:H.sticky??!1},Z);let P=Q;q.afterScroll.push((C,N)=>{P.update(C)}),Q.update(q.scrollController.getScrollTop())}let B=()=>{if(!X)return;X.rebuild(J.length),K=p0(J,X.groups);let P=u0(X,A);if(q.setHeightConfig(P),q.rebuildHeightCache(K.length),q.dataManager.setItems(K,0,K.length),Q)Q.refresh()};q.methods.set("setItems",(P)=>{J=[...P],B()}),q.methods.set("appendItems",(P)=>{J=[...J,...P],B()}),q.methods.set("prependItems",(P)=>{J=[...P,...J],B()}),q.methods.set("removeItem",(P)=>{J=J.filter((C)=>C.id!==P),B()});let{animateScroll:M,cancelScroll:$}=rj(q.scrollController,q.renderIfNeeded);q.methods.set("scrollToIndex",(P,C)=>{let N=X.dataToLayoutIndex(P),{align:e,behavior:v,duration:g}=nj(C),p=q.dataManager.getTotal(),R=y0(N,q.heightCache,q.state.viewportState.containerHeight,p,e,q.getCachedCompression());if(v==="smooth")M(q.scrollController.getScrollTop(),R,g);else $(),q.scrollController.scrollTo(R)}),q.methods.set("_getItems",()=>J),q.methods.set("_getTotal",()=>J.length),q.destroyHandlers.push(()=>{if(F0!==null)cancelAnimationFrame(F0),F0=null;if(Q)Q.destroy(),Q=null;Y.root.classList.remove(`${Z}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}},G2=300,aj=(j)=>j<0.5?2*j*j:-1+(4-2*j)*j,F0=null,rj=(j,X)=>{let Q=()=>{if(F0!==null)cancelAnimationFrame(F0),F0=null};return{animateScroll:(K,q,Y)=>{if(Q(),Math.abs(q-K)<1){j.scrollTo(q);return}let U=performance.now(),V=(Z)=>{let D=Z-U,A=Math.min(D/Y,1),O=K+(q-K)*aj(A);if(j.scrollTo(O),X(),A<1)F0=requestAnimationFrame(V);else F0=null};F0=requestAnimationFrame(V)},cancelScroll:Q}},nj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:G2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??G2};return{align:"start",behavior:"auto",duration:G2}};var X2=(j)=>{let X=Math.max(1,Math.floor(j.columns)),Q=j.gap??0,J=j.isHeaderFn,K={row:0,col:0},q=(W)=>{if(W<=0)return 0;if(!J)return Math.ceil(W/X);let _=0,G=0,z=0;for(let L=0;L<W;L++)if(J(L)){if(z++,G>0)_++,G=0;_++,G=0}else if(G++,G>=X)_++,G=0;if(G>0)_++;return _},Y=(W)=>{return K.row=U(W),K.col=V(W),K},U=(W)=>{if(!J)return Math.floor(W/X);let _=0,G=0;for(let z=0;z<=W;z++)if(J(z)){if(G>0)_++,G=0;if(z===W)return _;_++,G=0}else{if(z===W)return _;if(G++,G>=X)_++,G=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${_}`),_},V=(W)=>{if(!J)return W%X;if(J(W))return 0;let _=0;for(let G=0;G<=W;G++)if(J(G))_=0;else{if(G===W)return _;if(_++,_>=X)_=0}return _},Z=(W,_,G)=>{if(G<=0)return{start:0,end:-1};if(!J){let B=Math.max(0,W*X),M=Math.min(G-1,(_+1)*X-1);return{start:B,end:M}}let z=-1,L=-1,b=0,E=0;for(let B=0;B<G;B++){if(J(B)){if(E>0)b++,E=0;if(b>=W&&b<=_){if(z===-1)z=B;L=B}b++,E=0}else{if(b>=W&&b<=_){if(z===-1)z=B;L=B}if(E++,E>=X)b++,E=0}if(b>_&&E===0)break}if(z===-1)return{start:0,end:-1};return{start:z,end:L}},D=(W,_,G)=>{if(_<0||_>=X)return-1;let z=W*X+_;if(z<0||z>=G)return-1;return z},A=(W)=>{let _=(X-1)*Q;return Math.max(0,(W-_)/X)};return{get columns(){return X},get gap(){return Q},update:(W)=>{if(W.columns!==void 0)X=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)Q=W.gap;if(W.isHeaderFn!==void 0)J=W.isHeaderFn},getTotalRows:q,getPosition:Y,getRow:U,getCol:V,getItemRange:Z,getItemIndex:D,getColumnWidth:A,getColumnOffset:(W,_)=>{let G=A(_);return W*(G+Q)}}};Q2();var _j=(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:V}=Y;if(Y.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(Y.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Z=U.items?.some((E)=>E.__groupHeader===!0),D={columns:j.columns,gap:j.gap??0};if(Z)D.isHeaderFn=(E)=>{let B=J.dataManager.getItem(E);return!!(B&&B.__groupHeader===!0)};X=X2(D);let A=X.gap;J.setVirtualTotalFn(()=>{let E=J.dataManager.getTotal();return X.getTotalRows(E)});let O=U.item,H=Y.horizontal?O.width:O.height,W={containerWidth:J.getContainerWidth(),columns:X.columns,gap:X.gap};if(typeof H==="function")J.setHeightConfig((E)=>{let B=W.containerWidth-2,M=(W.columns-1)*W.gap,$=(B-M)/W.columns,P={containerWidth:W.containerWidth,columns:W.columns,gap:W.gap,columnWidth:$,row:X.getRow(E),column:X.getCol(E),totalRows:X.getTotalRows(J.dataManager.getTotal()),totalColumns:W.columns};return H(E,P)+W.gap});else if(A>0)J.setHeightConfig(H+A);J.rebuildHeightCache(),K.root.classList.add(`${V}--grid`);let _=J.getContainerWidth(),G=U.item.template,z=()=>{Q=h0(K.items,G,J.heightCache,X,V,_,()=>J.dataManager.getTotal(),Y.ariaIdPrefix),J.replaceRenderer(Q)};z(),J.methods.set("_getGridLayout",()=>X),J.methods.set("_getGridConfig",()=>D),J.methods.set("_replaceGridRenderer",(E)=>{Q=E}),J.methods.set("_updateGridLayoutForGroups",(E)=>{X.update({isHeaderFn:E});let B=J.dataManager.getTotal(),M=0;for(let $=0;$<B;$++)if(X.getCol($)===0){let P=J.heightCache.getHeight($);M+=P}J.heightCache.getTotalHeight=()=>M,J.dom.content.style.height=`${M}px`,z()}),J.methods.set("updateGrid",(E)=>{if(E.columns!==void 0){if(!Number.isInteger(E.columns)||E.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");D.columns=E.columns}if(E.gap!==void 0){if(E.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");D.gap=E.gap}if(X)X.update(D);let B=J.getContainerWidth();if(W.containerWidth=B,W.columns=D.columns,W.gap=D.gap??0,Q)Q.updateContainerWidth(B);J.rebuildHeightCache(),J.updateContentSize(J.heightCache.getTotalHeight()),J.updateCompressionMode();for(let M=0;M<J.contentSizeHandlers.length;M++)J.contentSizeHandlers[M]();if(Q)Q.clear();J.forceRender()});let L=()=>{if(J.state.isDestroyed)return;let E=J.scrollController.getScrollTop(),B=J.state.viewportState.containerHeight,M=J.getVirtualTotal(),$={start:0,end:0};if(M===0||B===0)$.start=0,$.end=0;else{$.start=Math.max(0,J.heightCache.indexAtOffset(E));let T=J.heightCache.indexAtOffset(E+B);if(T<M-1)T++;$.end=Math.min(M-1,Math.max(0,T))}let P=Y.overscan??3,C={start:Math.max(0,$.start-P),end:Math.min(M-1,$.end+P)};J.state.viewportState.scrollTop=E,J.state.viewportState.visibleRange=$,J.state.viewportState.renderRange=C;let N=J.state.lastRenderRange,e=J.state.viewportState.isCompressed;if(C.start===N.start&&C.end===N.end){if(e)Q.updatePositions(J.getCompressionContext());return}let v=J.dataManager.getTotal(),g=X.getItemRange(C.start,C.end,v),p=J.dataManager.getItemsInRange(g.start,g.end),R=e?J.getCompressionContext():void 0;Q.render(p,g,new Set,-1,R),J.state.lastRenderRange={...C},q.emit("range:change",{range:C})},b=()=>{if(J.state.isDestroyed)return;J.state.lastRenderRange={start:-1,end:-1},L()};if(J.setRenderFns(L,b),J.resizeHandlers.push((E,B)=>{if(Q)Q.updateContainerWidth(E)}),J.methods.set("scrollToIndex",(E,B)=>{let M=Math.floor(E/j.columns),{align:$,behavior:P}=oj(B),C=J.dataManager.getState(),N=X.getTotalRows(C.total),e=Math.max(0,Math.min(M,N-1)),v=y0(e,J.heightCache,J.state.viewportState.containerHeight,N,$,J.getCachedCompression());if(P==="smooth")J.scrollController.scrollTo(v);else J.scrollController.scrollTo(v)}),!J.methods.has("_getTotal"))J.methods.set("_getTotal",()=>J.dataManager.getTotal());J.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${V}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}},_2=300,oj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:_2};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??_2};return{align:"start",behavior:"auto",duration:_2}};Q2();var q2=(j)=>({selected:new Set(j??[]),focusedIndex:-1}),x0=(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}},g0=(j,X)=>{let Q=new Set(j.selected);for(let J of X)Q.delete(J);return{...j,selected:Q}},k0=(j,X,Q)=>{if(Q==="none")return j;if(j.selected.has(X))return g0(j,[X]);else return x0(j,[X],Q)},K2=(j,X,Q)=>{if(Q!=="multiple")return j;return{...j,selected:new Set(X.map((J)=>J.id))}},Y2=(j)=>({...j,selected:new Set}),V2=(j,X)=>{return j.focusedIndex=X,j},M2=(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},E2=(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},A2=(j,X)=>{if(X===0)return j;return j.focusedIndex=0,j},F2=(j,X)=>{if(X===0)return j;return j.focusedIndex=X-1,j};var Vj=(j,X)=>{return j.selected.has(X)},C0=(j)=>{return Array.from(j.selected)},S0=(j,X)=>{let Q=[];for(let J of j.selected){let K=X(J);if(K)Q.push(K)}return Q};var Mj=(j)=>{let X=j?.mode??"single",Q=j?.initial,J=q2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(q){let{dom:Y,emitter:U,config:V}=q,{classPrefix:Z,ariaIdPrefix:D}=V;if(X==="none"){q.methods.set("select",()=>{}),q.methods.set("deselect",()=>{}),q.methods.set("toggleSelect",()=>{}),q.methods.set("selectAll",()=>{}),q.methods.set("clearSelection",()=>{}),q.methods.set("getSelected",()=>[]),q.methods.set("getSelectedItems",()=>[]),q.methods.set("setSelectionMode",()=>{});return}let{renderIfNeeded:A,forceRender:O}=q.getRenderFns(),H=()=>{q.dom.items.querySelectorAll("[data-index]").forEach((b)=>{let E=b,B=E.dataset.id;if(B!==void 0){let M=/^\d+$/.test(B)?parseInt(B,10):B,$=J.selected.has(M),C=parseInt(E.dataset.index??"-1",10)===J.focusedIndex;E.classList.toggle(`${Z}-item--selected`,$),E.classList.toggle(`${Z}-item--focused`,C),E.ariaSelected=$?"true":"false"}})},W=()=>{if(q.state.isDestroyed)return;A(),H()},_=()=>{if(q.state.isDestroyed)return;O(),H()};q.setRenderFns(W,_);let G=()=>{H();let L=(b)=>{return q.dataManager.getItemsInRange(0,q.dataManager.getTotal()-1).find((B)=>B&&B.id===b)};U.emit("selection:change",{selected:C0(J),items:S0(J,L)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Z}-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 z=K;U.on("selection:change",({selected:L})=>{let b=L.length;if(b===0)z.textContent="";else if(b===1)z.textContent="1 item selected";else z.textContent=`${b} items selected`}),q.clickHandlers.push((L)=>{if(q.state.isDestroyed)return;let E=L.target.closest("[data-index]");if(!E)return;let B=parseInt(E.dataset.index??"-1",10);if(B<0)return;let M=q.dataManager.getItem(B);if(!M)return;U.emit("item:click",{item:M,index:B,event:L}),J=V2(J,B),Y.root.setAttribute("aria-activedescendant",`${D}-item-${B}`),J=k0(J,M.id,X),G()}),q.keydownHandlers.push((L)=>{if(q.state.isDestroyed)return;let b=q.dataManager.getTotal(),E=J.focusedIndex,B=!1,M=!1,$=J;switch(L.key){case"ArrowUp":$=M2(J,b),B=!0,M=!0;break;case"ArrowDown":$=E2(J,b),B=!0,M=!0;break;case"Home":$=A2(J,b),B=!0,M=!0;break;case"End":$=F2(J,b),B=!0,M=!0;break;case" ":case"Enter":if(J.focusedIndex>=0){let P=q.dataManager.getItem(J.focusedIndex);if(P)$=k0(J,P.id,X);B=!0}break}if(B){L.preventDefault(),J=$;let P=J.focusedIndex;if(P>=0){let C=q.dataManager.getState(),N=y0(P,q.heightCache,q.state.viewportState.containerHeight,C.total,"center",q.getCachedCompression());q.scrollController.scrollTo(N),Y.root.setAttribute("aria-activedescendant",`${D}-item-${P}`)}else Y.root.removeAttribute("aria-activedescendant");if(M){let{selected:C}=J;if(E>=0&&E!==P){let N=q.dataManager.getItem(E);if(N)q.renderer.updateItemClasses(E,C.has(N.id),!1)}if(P>=0){let N=q.dataManager.getItem(P);if(N)q.renderer.updateItemClasses(P,C.has(N.id),!0)}}else{_();let C=(N)=>{return q.dataManager.getItemsInRange(0,q.dataManager.getTotal()-1).find((v)=>v&&v.id===N)};U.emit("selection:change",{selected:C0(J),items:S0(J,C)})}}}),q.methods.set("select",(...L)=>{J=x0(J,L,X),G()}),q.methods.set("deselect",(...L)=>{J=g0(J,L),G()}),q.methods.set("toggleSelect",(L)=>{J=k0(J,L,X),G()}),q.methods.set("selectAll",()=>{if(X!=="multiple")return;let L=q.getAllLoadedItems();J=K2(J,L,X),G()}),q.methods.set("clearSelection",()=>{J=Y2(J);let{renderRange:L,isCompressed:b}=q.state.viewportState,E=q.getItemsForRange(L),B=b?q.getCompressionContext():void 0;q.renderer.render(E,L,J.selected,J.focusedIndex,B),U.emit("selection:change",{selected:[],items:[]})}),q.methods.set("getSelected",()=>{return C0(J)}),q.methods.set("getSelectedItems",()=>{return S0(J,(b)=>{return q.dataManager.getItemsInRange(0,q.dataManager.getTotal()-1).find((B)=>B&&B.id===b)})}),q.destroyHandlers.push(()=>{if(z&&z.parentNode)z.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var Ej=()=>{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 Z={index:0,offsetInItem:0};if(q)Z.selectedIds=q;return Z}let Y,U;if(Q.isCompressed){let D=X/Q.virtualHeight*J;Y=Math.max(0,Math.min(Math.floor(D),J-1)),U=(D-Y)*j.heightCache.getHeight(Y)}else Y=j.heightCache.indexAtOffset(X),U=X-j.heightCache.getOffset(Y);U=Math.max(0,U);let V={index:Y,offsetInItem:U};if(q)V.selectedIds=q;return V}),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)),V;if(q.isCompressed){let D=j.heightCache.getHeight(U),A=D>0?J/D:0;V=(U+A)/Y*q.virtualHeight}else V=j.heightCache.getOffset(U)+J;let Z=Math.max(0,q.virtualHeight-j.state.viewportState.containerHeight);if(V=Math.max(0,Math.min(V,Z)),j.scrollController.scrollTo(V),K&&K.length>0){let D=j.methods.get("select");if(D)D(...K)}})}}};export{Ej as withSnapshots,Mj as withSelection,Gj as withSections,a2 as withScrollbar,o2 as withScale,t2 as withPage,_j as withGrid,i2 as withAsync,u2 as vlist,k0 as toggleSelection,Jj as simpleVisibleRange,x0 as selectItems,K2 as selectAll,Bj as rangesEqual,n0 as rafThrottle,l2 as needsScaling,i0 as mergeRanges,Vj as isSelected,P0 as isSectionHeader,b0 as isPlaceholderItem,Uj as isInRange,S0 as getSelectedItems,C0 as getSelectedIds,V0 as getScaleState,s2 as getScaleInfo,V0 as getScale,Nj as getRangeCount,c2 as getMaxItemsWithoutScaling,D2 as filterPlaceholders,Dj as diffRanges,g0 as deselectItems,J2 as createStickyHeader,o0 as createSparseStorage,q2 as createSelectionState,u0 as createSectionedHeightFn,j2 as createSectionLayout,R0 as createScrollbar,n2 as createScrollController,t0 as createPlaceholderManager,H0 as createHeightCache,h0 as createGridRenderer,X2 as createGridLayout,l0 as createEmitter,e0 as createAsyncManager,Y2 as clearSelection,Zj as clampScrollPosition,qj as calculateTotalHeight,y0 as calculateScrollToIndex,c0 as calculateScaledVisibleRange,s0 as calculateScaledScrollToIndex,m2 as calculateScaledRenderRange,T0 as calculateScaledItemPosition,Qj as calculateRenderRange,I0 as calculateMissingRanges,Yj as calculateItemOffset,d2 as calculateIndexFromScrollPosition,Kj as calculateActualHeight,p0 as buildLayoutItems,z0 as MAX_VIRTUAL_HEIGHT};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "0.7.7",
3
+ "version": "0.8.0",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",
@@ -42,11 +42,7 @@
42
42
  "dist/index.js",
43
43
  "dist/**/*.d.ts",
44
44
  "dist/**/*.css",
45
- "!dist/**/*.d.ts.map",
46
- "!dist/core/lite.d.ts",
47
- "!dist/core/minimal.d.ts",
48
- "!dist/core/full.d.ts",
49
- "!dist/adapters/**"
45
+ "!dist/**/*.d.ts.map"
50
46
  ],
51
47
  "sideEffects": [
52
48
  "*.css"