@floor/vlist 1.0.0 → 1.1.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 +38 -33
- package/dist/builder/core.d.ts +0 -13
- package/dist/builder/index.d.ts +1 -1
- package/dist/builder/materialize.d.ts +1 -2
- package/dist/builder/types.d.ts +10 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/types.d.ts +0 -237
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Lightweight, high-performance virtual list with zero dependencies and dimension-
|
|
|
9
9
|
|
|
10
10
|
- **Zero dependencies** — no external libraries
|
|
11
11
|
- **Ultra memory efficient** — ~0.1-0.2 MB constant overhead regardless of dataset size
|
|
12
|
-
-
|
|
12
|
+
- **~8 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
|
|
13
13
|
- **Builder API** — composable features with perfect tree-shaking
|
|
14
14
|
- **Grid, masonry, sections, async, selection, scale** — all opt-in
|
|
15
15
|
- **Horizontal & vertical** — semantically correct orientation support
|
|
@@ -19,13 +19,14 @@ Lightweight, high-performance virtual list with zero dependencies and dimension-
|
|
|
19
19
|
|
|
20
20
|
**30+ interactive examples → [vlist.dev](https://vlist.dev)**
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Highlights
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
24
|
+
|
|
25
|
+
- **Dimension-agnostic API** — semantically correct terminology for both orientations
|
|
26
|
+
- **Performance optimized** — 13-pattern optimization playbook applied across the entire rendering pipeline
|
|
27
|
+
- **Horizontal sections** — sticky headers work in horizontal carousels
|
|
28
|
+
- **Horizontal grid layouts** — 2D grids work in both orientations
|
|
29
|
+
- **Masonry** — shortest-lane placement via `withMasonry()`
|
|
29
30
|
|
|
30
31
|
## Installation
|
|
31
32
|
|
|
@@ -79,20 +80,20 @@ const list = vlist({
|
|
|
79
80
|
.build()
|
|
80
81
|
```
|
|
81
82
|
|
|
82
|
-
###
|
|
83
|
+
### Features
|
|
83
84
|
|
|
84
85
|
| Feature | Size | Description |
|
|
85
86
|
|---------|------|-------------|
|
|
86
|
-
| **Base** |
|
|
87
|
-
| `withGrid()` | +
|
|
88
|
-
| `withMasonry()` | +2.
|
|
89
|
-
| `withSections()` | +4.
|
|
90
|
-
| `withAsync()` | +
|
|
91
|
-
| `withSelection()` | +
|
|
92
|
-
| `withScale()` | +2.
|
|
93
|
-
| `withScrollbar()` | +1.
|
|
94
|
-
| `withPage()` | +0.
|
|
95
|
-
| `withSnapshots()` |
|
|
87
|
+
| **Base** | 8.1 KB | Core virtualization |
|
|
88
|
+
| `withGrid()` | +3.8 KB | 2D grid layout |
|
|
89
|
+
| `withMasonry()` | +2.3 KB | Pinterest-style masonry layout |
|
|
90
|
+
| `withSections()` | +4.1 KB | Grouped lists with sticky/inline headers |
|
|
91
|
+
| `withAsync()` | +3.9 KB | Lazy loading with adapters |
|
|
92
|
+
| `withSelection()` | +1.6 KB | Single/multiple selection + keyboard nav |
|
|
93
|
+
| `withScale()` | +2.6 KB | 1M+ items via scroll compression |
|
|
94
|
+
| `withScrollbar()` | +1.2 KB | Custom scrollbar UI |
|
|
95
|
+
| `withPage()` | +0.4 KB | Document-level scrolling |
|
|
96
|
+
| `withSnapshots()` | +0.5 KB | Scroll save/restore |
|
|
96
97
|
|
|
97
98
|
## Examples
|
|
98
99
|
|
|
@@ -190,7 +191,7 @@ See **[vlist.dev](https://vlist.dev)** for live demos of each.
|
|
|
190
191
|
## API
|
|
191
192
|
|
|
192
193
|
```typescript
|
|
193
|
-
const list = vlist(config).use(...
|
|
194
|
+
const list = vlist(config).use(...features).build()
|
|
194
195
|
```
|
|
195
196
|
|
|
196
197
|
### Data
|
|
@@ -212,7 +213,11 @@ const list = vlist(config).use(...plugins).build()
|
|
|
212
213
|
| `list.scrollToIndex(i, opts?)` | With `{ align, behavior: 'smooth', duration }` |
|
|
213
214
|
| `list.cancelScroll()` | Cancel smooth scroll animation |
|
|
214
215
|
| `list.getScrollPosition()` | Current scroll offset |
|
|
215
|
-
|
|
216
|
+
|
|
217
|
+
### Snapshots (with `withSnapshots()`)
|
|
218
|
+
|
|
219
|
+
| Method | Description |
|
|
220
|
+
|--------|-------------|
|
|
216
221
|
| `list.getScrollSnapshot()` | Save scroll state (for SPA navigation) |
|
|
217
222
|
| `list.restoreScroll(snapshot)` | Restore saved scroll state |
|
|
218
223
|
|
|
@@ -220,11 +225,11 @@ const list = vlist(config).use(...plugins).build()
|
|
|
220
225
|
|
|
221
226
|
| Method | Description |
|
|
222
227
|
|--------|-------------|
|
|
223
|
-
| `list.
|
|
224
|
-
| `list.
|
|
225
|
-
| `list.
|
|
228
|
+
| `list.select(...ids)` | Select item(s) |
|
|
229
|
+
| `list.deselect(...ids)` | Deselect item(s) |
|
|
230
|
+
| `list.toggleSelect(id)` | Toggle |
|
|
226
231
|
| `list.selectAll()` / `list.clearSelection()` | Bulk operations |
|
|
227
|
-
| `list.
|
|
232
|
+
| `list.getSelected()` | Array of selected IDs |
|
|
228
233
|
| `list.getSelectedItems()` | Array of selected items |
|
|
229
234
|
|
|
230
235
|
### Grid (with `withGrid()`)
|
|
@@ -263,9 +268,9 @@ list.on('velocity:change', ({ velocity, reliable }) => {})
|
|
|
263
268
|
list.destroy()
|
|
264
269
|
```
|
|
265
270
|
|
|
266
|
-
##
|
|
271
|
+
## Feature Configuration
|
|
267
272
|
|
|
268
|
-
Each
|
|
273
|
+
Each feature's config is fully typed — hover in your IDE for details.
|
|
269
274
|
|
|
270
275
|
```typescript
|
|
271
276
|
withGrid({ columns: 4, gap: 16 })
|
|
@@ -288,9 +293,10 @@ Full configuration reference → **[vlist.dev](https://vlist.dev)**
|
|
|
288
293
|
| React | [`vlist-react`](https://github.com/floor/vlist-react) | 0.6 KB gzip |
|
|
289
294
|
| Vue | [`vlist-vue`](https://github.com/floor/vlist-vue) | 0.6 KB gzip |
|
|
290
295
|
| Svelte | [`vlist-svelte`](https://github.com/floor/vlist-svelte) | 0.5 KB gzip |
|
|
296
|
+
| SolidJS | [`vlist-solidjs`](https://github.com/floor/vlist-solidjs) | 0.5 KB gzip |
|
|
291
297
|
|
|
292
298
|
```bash
|
|
293
|
-
npm install @floor/vlist vlist-react # or vlist-vue / vlist-svelte
|
|
299
|
+
npm install @floor/vlist vlist-react # or vlist-vue / vlist-svelte / vlist-solidjs
|
|
294
300
|
```
|
|
295
301
|
|
|
296
302
|
Each adapter README has setup examples and API docs.
|
|
@@ -331,11 +337,10 @@ This makes the codebase clearer and eliminates semantic confusion when working w
|
|
|
331
337
|
|
|
332
338
|
| Configuration | Gzipped |
|
|
333
339
|
|---------------|---------|
|
|
334
|
-
| Base only |
|
|
335
|
-
| + Grid | 11.
|
|
336
|
-
| + Sections | 12.
|
|
337
|
-
| + Async |
|
|
338
|
-
| All plugins | ~16 KB |
|
|
340
|
+
| Base only | 8.1 KB |
|
|
341
|
+
| + Grid | 11.9 KB |
|
|
342
|
+
| + Sections | 12.2 KB |
|
|
343
|
+
| + Async | 12.0 KB |
|
|
339
344
|
|
|
340
345
|
### Memory Efficiency
|
|
341
346
|
|
|
@@ -406,4 +411,4 @@ See [CHANGELOG.md](https://vlist.dev/docs/CHANGELOG.md) for the full release his
|
|
|
406
411
|
|
|
407
412
|
---
|
|
408
413
|
|
|
409
|
-
Built by [Floor IO](https://floor.io)
|
|
414
|
+
Built by [Floor IO](https://floor.io)
|
package/dist/builder/core.d.ts
CHANGED
|
@@ -12,18 +12,5 @@
|
|
|
12
12
|
import type { VListItem } from "../types";
|
|
13
13
|
import type { BuilderConfig, VListBuilder } from "./types";
|
|
14
14
|
export type { CompressionState } from "../rendering/viewport";
|
|
15
|
-
export interface TrackedItem {
|
|
16
|
-
element: HTMLElement;
|
|
17
|
-
/** Item id at last render (to detect data changes / placeholder replacement) */
|
|
18
|
-
lastItemId: string | number;
|
|
19
|
-
/** Selected state at last render */
|
|
20
|
-
lastSelected: boolean;
|
|
21
|
-
/** Focused state at last render */
|
|
22
|
-
lastFocused: boolean;
|
|
23
|
-
/** Computed offset at last render (to detect position changes) */
|
|
24
|
-
lastOffset: number;
|
|
25
|
-
/** Render frame when this item was last in the render range */
|
|
26
|
-
lastSeenFrame: number;
|
|
27
|
-
}
|
|
28
15
|
export declare const vlist: <T extends VListItem = VListItem>(config: BuilderConfig<T>) => VListBuilder<T>;
|
|
29
16
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/builder/index.d.ts
CHANGED
|
@@ -21,5 +21,5 @@
|
|
|
21
21
|
* @packageDocumentation
|
|
22
22
|
*/
|
|
23
23
|
export { vlist } from "./core";
|
|
24
|
-
export type { VListBuilder,
|
|
24
|
+
export type { VListBuilder, VList, BuilderConfig, VListFeature, FeatureFactory, BuilderContext, BuilderState, ResolvedBuilderConfig, } from "./types";
|
|
25
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -17,7 +17,6 @@ import type { SizeCache } from "../rendering/sizes";
|
|
|
17
17
|
import type { Emitter } from "../events/emitter";
|
|
18
18
|
import type { DOMStructure } from "./dom";
|
|
19
19
|
import type { createElementPool } from "./pool";
|
|
20
|
-
import type { TrackedItem } from "./core";
|
|
21
20
|
import type { BuilderConfig, BuilderContext, BuilderState, ResolvedBuilderConfig } from "./types";
|
|
22
21
|
/**
|
|
23
22
|
* Mutable refs object shared between core.ts materialize() and context factories.
|
|
@@ -124,7 +123,7 @@ export interface MDeps<T extends VListItem = VListItem> {
|
|
|
124
123
|
readonly emitter: Emitter<VListEvents<T>>;
|
|
125
124
|
readonly resolvedConfig: ResolvedBuilderConfig;
|
|
126
125
|
readonly rawConfig: BuilderConfig<T>;
|
|
127
|
-
readonly rendered: Map<number,
|
|
126
|
+
readonly rendered: Map<number, HTMLElement>;
|
|
128
127
|
readonly pool: ReturnType<typeof createElementPool>;
|
|
129
128
|
readonly itemState: ItemState;
|
|
130
129
|
readonly sharedState: BuilderState;
|
package/dist/builder/types.d.ts
CHANGED
|
@@ -243,10 +243,17 @@ export interface VListBuilder<T extends VListItem = VListItem> {
|
|
|
243
243
|
/** Register a feature. Chainable. */
|
|
244
244
|
use(feature: VListFeature<T>): VListBuilder<T>;
|
|
245
245
|
/** Materialize the virtual list. Creates DOM, initializes features, returns API. */
|
|
246
|
-
build():
|
|
246
|
+
build(): VList<T>;
|
|
247
247
|
}
|
|
248
|
-
/**
|
|
249
|
-
|
|
248
|
+
/**
|
|
249
|
+
* VList instance API — returned by `vlist(config).build()`.
|
|
250
|
+
*
|
|
251
|
+
* Always-available methods (data, scroll, events, lifecycle) are required.
|
|
252
|
+
* Feature methods (selection, snapshots, grid, etc.) are optional —
|
|
253
|
+
* they exist on the instance only when the corresponding feature is
|
|
254
|
+
* registered via `.use()`.
|
|
255
|
+
*/
|
|
256
|
+
export interface VList<T extends VListItem = VListItem> {
|
|
250
257
|
/** The root DOM element */
|
|
251
258
|
readonly element: HTMLElement;
|
|
252
259
|
/** Current items */
|
package/dist/index.d.ts
CHANGED
|
@@ -15,8 +15,8 @@ export { withGrid } from "./features/grid";
|
|
|
15
15
|
export { withMasonry } from "./features/masonry";
|
|
16
16
|
export { withSelection } from "./features/selection";
|
|
17
17
|
export { withSnapshots } from "./features/snapshots";
|
|
18
|
-
export type {
|
|
19
|
-
export type { VListBuilder,
|
|
18
|
+
export type { VListItem, VListEvents, ItemTemplate, ItemState, SelectionMode, SelectionConfig, SelectionState, ScrollbarConfig, ScrollbarOptions, ScrollConfig, ScrollToOptions, ScrollSnapshot, VListAdapter, AdapterParams, AdapterResponse, Range, ViewportState, EventHandler, Unsubscribe, } from "./types";
|
|
19
|
+
export type { VListBuilder, VList, BuilderConfig, VListFeature, BuilderContext, } from "./builder";
|
|
20
20
|
export { createGroupLayout as createSectionLayout, buildLayoutItems, createGroupedSizeFn as createSectionedSizeFn, createStickyHeader, isGroupHeader as isSectionHeader, type GroupsConfig as SectionsConfig, type GroupBoundary as SectionBoundary, type LayoutEntry, type GroupHeaderItem as SectionHeaderItem, type GroupLayout as SectionLayout, type StickyHeader, } from "./features/sections";
|
|
21
21
|
export { createGridLayout, createGridRenderer, type GridConfig, type GridLayout, type GridPosition, type GridRenderer, type ItemRange, } from "./features/grid";
|
|
22
22
|
export { createMasonryLayout, createMasonryRenderer, type MasonryConfig, type MasonryLayout, type MasonryRenderer, type GetItemFn, type ItemPlacement, } from "./features/masonry";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var{defineProperty:F2,getOwnPropertyNames:Z1,getOwnPropertyDescriptor:U1}=Object,B1=Object.prototype.hasOwnProperty;var x2=new WeakMap,N1=(J)=>{var q=x2.get(J),Q;if(q)return q;if(q=F2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")Z1(J).map((j)=>!B1.call(q,j)&&F2(q,j,{get:()=>J[j],enumerable:!(Q=U1(J,j))||Q.enumerable}));return x2.set(J,q),q};var W1=(J,q)=>{for(var Q in q)F2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var m2=(J,q)=>()=>(J&&(q=J(J=0)),q);var D1=(J,q)=>{let Q=q;return{getOffset:(j)=>j*J,getSize:(j)=>J,indexAtOffset:(j)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(j/J),Q-1))},getTotalSize:()=>Q*J,getTotal:()=>Q,rebuild:(j)=>{Q=j},isVariable:()=>!1}},_1=(J,q)=>{let Q=q,j=new Float64Array(0),K=(U)=>{Q=U,j=new Float64Array(U+1),j[0]=0;for(let N=0;N<U;N++)j[N+1]=j[N]+J(N)};K(q);let X=(U)=>{if(Q===0)return 0;if(U<=0)return 0;if(U>=j[Q])return Q-1;let N=0,_=Q-1;while(N<_){let Y=N+_+1>>>1;if(j[Y]<=U)N=Y;else _=Y-1}return N};return{getOffset:(U)=>{if(U<=0)return 0;if(U>=Q)return j[Q];return j[U]},getSize:(U)=>J(U),indexAtOffset:(U)=>X(U),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(U)=>K(U),isVariable:()=>!0}},y0=(J,q)=>{if(typeof J==="number")return D1(J,q);return _1(J,q)},u0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let K=0,X=0,U=q;while(U<j&&X<Q)X+=J.getSize(U),K++,U++;return Math.max(1,K)},o0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,K=0;for(let X=Q-1;X>=0;X--){let U=J.getSize(X);if(K+U>q)break;K+=U,j++}return Math.max(j,1)},b2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),K=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+K*J.getSize(X)};var T2=200,w0=50,XJ=5,YJ=2,KJ=50,H0=16000000,ZJ="x",UJ=20,H2="_isPlaceholder",BJ="__placeholder_";var L0=(J,q)=>{let Q=q.getTotalSize(),j=Q>H0,K=j?H0:Q,X=Q>0?K/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:K,ratio:X}},e0=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let V=Q.indexAtOffset(J),A=Q.indexAtOffset(J+q);if(A<j-1)A++;return X.start=Math.max(0,V),X.end=Math.min(j-1,Math.max(0,A)),X}let{virtualSize:U}=K,_=J/U*j,Y=Math.floor(_),W=u0(Q,Math.max(0,Y),q,j),E=Math.ceil(_)+W,H=U-q-J;if(H<=q&&H>=-1){let V=o0(Q,q,j),A=Math.max(0,j-V),B=Math.max(0,Math.min(1,1-H/q));Y=Math.floor(Y+(A-Y)*B),E=H<=1?j-1:Math.min(j-1,Y+W)}return X.start=Math.max(0,Y),X.end=Math.min(j-1,Math.max(0,E)),X},NJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},S0=(J,q,Q,j,K,X,U)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,_=N-K,Y=_-q;if(Y<=K&&Y>=-1){if(q>=_-1){let O=Q.getTotalSize()-Q.getOffset(J);return K-O}let H=o0(Q,K,j),V=Math.max(0,j-H),B=q/N*j,y=Math.max(0,Math.min(1,1-Y/K)),L=Q.getOffset(J)-Q.getOffset(V),F=Q.getOffset(J)-b2(Q,B,j);return F+(L-F)*y}let W=q/N,E=Q.getTotalSize(),M=W*E;return Q.getOffset(J)-M},J2=(J,q,Q,j,K,X="start")=>{if(j===0)return 0;let U;if(K.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,K.virtualSize-Q);U=J/j*K.virtualSize}else U=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":U-=(Q-N)/2;break;case"end":U-=Q-N;break}let _=K.virtualSize-Q;return Math.max(0,Math.min(U,_))},WJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let K=J/j.virtualSize;return Math.floor(K*Q)}return q.indexAtOffset(J)},DJ=(J,q)=>{if(typeof q==="number")return J*q>H0;return q.getTotalSize()>H0},_J=(J)=>{if(J<=0)return 0;return Math.floor(H0/J)},VJ=(J,q)=>{let Q=L0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var Q2=()=>{};var P0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var SJ={};W1(SJ,{createGridRenderer:()=>d0});var P1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),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}}},k1=2,d0=(J,q,Q,j,K,X,U,N,_=!1)=>{let Y=P1(),W=new Map,E=X,M=!1,H=null,V=0,A=0,B="",y=-1,L=(z)=>{if(H&&V===z)return H;return H=L0(z,Q),V=z,H},F={selected:!1,focused:!1},O=(z,u)=>{return F.selected=z,F.focused=u,F},D=`${K}-item ${K}-grid-item`,$=`${K}-item--selected`,I=`${K}-item--focused`,C=(z,u)=>{if(typeof u==="string")z.innerHTML=u;else z.replaceChildren(u)},G=(z,u,a)=>{z.classList.toggle($,u),z.classList.toggle(I,a)},p=(z,u)=>{let a=j.getRow(z);if(u){let n=u.totalItems,f=L(n);if(f.isCompressed)return S0(a,u.scrollPosition,Q,n,u.containerSize,f,u.rangeStart)}return Q.getOffset(a)},t=(z,u)=>{let a=M&&j.getCol(z)===0,n=a?0:j.getCol(z),f=a?0:j.getColumnOffset(n,E),x;if(M){let l=j.getRow(z),i=0,o=new Set;for(let Y0=0;Y0<z;Y0++){let U0=j.getRow(Y0);if(U0<l&&!o.has(U0)){let g=Q.getSize(Y0);i+=g,o.add(U0)}}x=i}else x=p(z,u);if(_)return`translate(${Math.round(x)}px, ${Math.round(f)}px)`;return`translate(${Math.round(f)}px, ${Math.round(x)}px)`},w=(z,u)=>{z.style.transform=u},h=(z,u)=>{let a=z.dataset.id?.startsWith("__group_header"),n=a?E:j.getColumnWidth(E),f;if(M||a)f=Q.getSize(u)-j.gap;else{let x=j.getRow(u);f=Q.getSize(x)-j.gap}if(_)z.style.width=`${f}px`,z.style.height=`${n}px`;else z.style.width=`${n}px`,z.style.height=`${f}px`},Z=(z,u,a,n,f)=>{let x=Y.acquire(),l=O(a,n);if(x.className=D,x.dataset.index=String(z),x.dataset.id=String(u.id),x.dataset.row=String(j.getRow(z)),x.dataset.col=String(j.getCol(z)),x.ariaSelected=String(a),N)x.id=`${N}-item-${z}`;if(U){let o=U();if(o!==y)y=o,B=String(o);x.setAttribute("aria-setsize",B),x.setAttribute("aria-posinset",String(z+1))}h(x,z);let i=q(u,z,l);return C(x,i),G(x,a,n),w(x,f),{element:x,lastItemId:u.id,lastSelected:a,lastFocused:n,lastTransform:f,lastSeenFrame:A}},R=(z,u,a,n,f)=>{if(A++,u.start===0&&z.length>0)M=P0(z[0]);for(let[i,o]of W)if(i>=u.start&&i<=u.end)o.lastSeenFrame=A;else if(A-o.lastSeenFrame>k1)Y.release(o.element),W.delete(i);let x=!1;if(U){let i=U();if(i!==y)y=i,B=String(i),x=!0}let l=null;for(let i=u.start;i<=u.end;i++){let o=i-u.start,Y0=z[o];if(!Y0){console.warn(`⚠️ RENDER: Missing item at index ${i} (range: ${u.start}-${u.end}, items.length: ${z.length})`);continue}let U0=a.has(Y0.id),g=i===n,d=W.get(i);if(d){let Q0=d.lastItemId!==Y0.id,q0=d.lastSelected!==U0,B0=d.lastFocused!==g;if(Q0||q0||B0){if(Q0){let A0=O(U0,g),E0=q(Y0,i,A0);C(d.element,E0),d.element.dataset.id=String(Y0.id),d.element.dataset.row=String(j.getRow(i)),d.element.dataset.col=String(j.getCol(i)),h(d.element,i)}G(d.element,U0,g),d.element.ariaSelected=String(U0),d.lastItemId=Y0.id,d.lastSelected=U0,d.lastFocused=g}let Z0=t(i,f);if(d.lastTransform!==Z0)w(d.element,Z0),d.lastTransform=Z0;if(x)d.element.setAttribute("aria-setsize",B)}else{let Q0=t(i,f),q0=Z(i,Y0,U0,g,Q0);if(!l)l=document.createDocumentFragment();l.appendChild(q0.element),W.set(i,q0)}}if(l)J.appendChild(l)},v=(z)=>{for(let[u,a]of W){let n=t(u,z);if(a.lastTransform!==n)w(a.element,n),a.lastTransform=n}},T=(z,u,a,n)=>{let f=W.get(z);if(!f)return;let x=f.lastItemId!==u.id,l=f.lastSelected!==a,i=f.lastFocused!==n;if(x||l||i){let o=O(a,n),Y0=q(u,z,o);C(f.element,Y0),G(f.element,a,n),f.element.dataset.id=String(u.id),f.element.ariaSelected=String(a),h(f.element,z),f.lastItemId=u.id,f.lastSelected=a,f.lastFocused=n}},P=(z,u,a)=>{let n=W.get(z);if(!n)return;let f=n.lastSelected!==u,x=n.lastFocused!==a;if(f||x)G(n.element,u,a),n.lastSelected=u,n.lastFocused=a},k=(z)=>{return W.get(z)?.element},S=(z)=>{if(Math.abs(z-E)<1)return;E=z;for(let[u,a]of W){h(a.element,u);let n=t(u);w(a.element,n),a.lastTransform=n}},c=()=>{for(let[,z]of W)Y.release(z.element);W.clear()};return{render:R,updatePositions:v,updateItem:T,updateItemClasses:P,getElement:k,updateContainerWidth:S,clear:c,destroy:()=>{c(),Y.clear()}}};var N2=m2(()=>{Q2()});var d2=2,c2=(J=0)=>{let q=[,,,,,];for(let Q=0;Q<5;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},L2=(J,q)=>{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 X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,U=J.samples[X],N=q-U.position,_=Q-U.time;J.velocity=_>0?Math.abs(N)/_:0}return J.lastPosition=q,J.lastTime=Q,J};var i0=(J,q)=>{let Q=new Map,j=(X)=>{let U=Q.get(X);return U!==void 0?U:J},K=y0(j,q);return{getOffset(X){return K.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return K.indexAtOffset(X)},getTotalSize(){return K.getTotalSize()},getTotal(){return K.getTotal()},rebuild(X){if(X<K.getTotal()){for(let U of Q.keys())if(U>=X)Q.delete(U)}K=y0(j,X)},isVariable(){return!0},setMeasuredSize(X,U){Q.set(X,U)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var t0=()=>{let J={},q=(N,_)=>{if(!J[N])J[N]=new Set;return J[N].add(_),()=>Q(N,_)},Q=(N,_)=>{J[N]?.delete(_)};return{on:q,off:Q,emit:(N,_)=>{J[N]?.forEach((Y)=>{try{Y(_)}catch(W){console.error(`[vlist] Error in event handler for "${String(N)}":`,W)}})},once:(N,_)=>{let Y=(W)=>{Q(N,Y),_(W)};return q(N,Y)},clear:(N)=>{if(N)delete J[N];else for(let _ in J)delete J[_]},listenerCount:(N)=>{return J[N]?.size??0}}};var l2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},r2=(J,q,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"),Q)K.setAttribute("aria-label",Q);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 U=document.createElement("div");if(U.className=`${q}-content`,U.style.position="relative",j)U.style.height="100%";else U.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return U.appendChild(N),X.appendChild(U),K.appendChild(X),J.appendChild(K),{root:K,viewport:X,content:U,items:N}};var a2=(J=100)=>{let q=[];return{acquire:()=>{let Q=q.pop();if(Q)return Q;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:(Q)=>{if(q.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),q.push(Q)},clear:()=>{q.length=0}}};var s2=(J,q,Q,j,K)=>{if(j===0||q===0){K.start=0,K.end=0;return}let X=Q.indexAtOffset(J),U=u0(Q,X,q,j),N=X+U;K.start=Math.max(0,X),K.end=Math.min(j-1,Math.max(0,N))},n2=(J,q,Q,j)=>{if(Q===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q)},o2=(J,q,Q,j,K)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),U=q.getOffset(X),N=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),Y;switch(K){case"center":Y=U-(Q-N)/2;break;case"end":Y=U-Q+N;break;default:Y=U}return Math.max(0,Math.min(Y,_))};var y2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,z0=(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}},i2=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,U,N)=>{if(j(),Math.abs(U-X)<1){J.scrollTo(U);return}let _=performance.now(),Y=(W)=>{let E=W-_,M=Math.min(E/N,1),H=X+(U-X)*y2(M);if(J.scrollTo(H),q(),M<1)Q=requestAnimationFrame(Y);else Q=null};Q=requestAnimationFrame(Y)},cancelScroll:j}};var t2=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:K,rawConfig:X,rendered:U,pool:N,sharedState:_,isHorizontal:Y,classPrefix:W,contentSizeHandlers:E,afterScroll:M,clickHandlers:H,keydownHandlers:V,resizeHandlers:A,destroyHandlers:B,methods:y,onScrollFrame:L,resizeObserver:F,renderRange:O}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return K},get rawConfig(){return X},get renderer(){return{render:(D,$,I,C,G)=>{J.ss=I,J.fi=C,J.ffn()},updateItemClasses:(D,$,I)=>{let C=U.get(D);if(!C)return;C.element.classList.toggle(`${W}-item--selected`,$),C.element.classList.toggle(`${W}-item--focused`,I),C.element.ariaSelected=$?"true":"false",C.lastSelected=$,C.lastFocused=I},updatePositions:()=>{},updateItem:()=>{},getElement:(D)=>U.get(D)?.element??null,clear:()=>{},destroy:()=>{}}},set renderer(D){},get dataManager(){return J.dm},set dataManager(D){J.dm=D},get scrollController(){return J.sc},set scrollController(D){J.sc=D},state:_,getContainerWidth(){return J.cw},afterScroll:M,clickHandlers:H,keydownHandlers:V,resizeHandlers:A,contentSizeHandlers:E,destroyHandlers:B,methods:y,replaceTemplate(D){J.at=D},replaceRenderer(D){},replaceDataManager(D){J.dm=D},replaceScrollController(D){J.sc=D},getItemsForRange(D){let{dm:$,it:I}=J,C=[];for(let G=D.start;G<=D.end;G++){let p=$?$.getItem(G):I[G];if(p)C.push(p)}return C},getAllLoadedItems(){let D=J.dm;if(D){let $=D.getTotal(),I=[];for(let C=0;C<$;C++){let G=D.getItem(C);if(G)I.push(G)}return I}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let D=J.hc;return{isCompressed:!1,actualSize:D.getTotalSize(),virtualSize:D.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:O.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,D]of U)D.element.remove(),N.release(D.element);U.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(D,$){J.rfn=D,J.ffn=$},setVirtualTotalFn(D){J.vtf=D},rebuildSizeCache(D){J.hc.rebuild(D??J.vtf())},setSizeConfig(D){J.hc=y0(D,J.vtf())},updateContentSize(D){let $=`${D}px`;if(Y)Q.content.style.width=$;else Q.content.style.height=$},updateCompressionMode(){},setVisibleRangeFn(D){J.gvr=D},setScrollToPosFn(D){J.gsp=D},setPositionElementFn(D){J.pef=D},setScrollFns(D,$){J.sgt=D,J.sst=(I)=>{$(I),L()}},setScrollTarget(D){J.st.removeEventListener("scroll",L),J.st=D,J.st.addEventListener("scroll",L,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(D){J.gcw=D.width,J.gch=D.height,J.cw=D.width(),J.ch=D.height(),_.viewportState.containerSize=Y?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,F.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},e2=(J,q,Q)=>{let{rendered:j,itemState:K,contentSizeHandlers:X,applyTemplate:U,updateContentSize:N}=q,_=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let Y=0;Y<X.length;Y++)X[Y]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>J.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<J.it.length&&J.it[Y]!==void 0,getItemsInRange:(Y,W)=>{let E=J.it,M=[],H=Math.max(0,Y),V=Math.min(W,E.length-1);for(let A=H;A<=V;A++)M.push(E[A]);return M},setTotal:(Y)=>{},setItems:(Y,W=0,E)=>{let M=J.it;if(W===0&&(E!==void 0||M.length===0))J.it=Y;else{let H=W+Y.length;if(M.length<H)M.length=H;for(let V=0;V<Y.length;V++)M[W+V]=Y[V]}if(J.ii)_()},updateItem:(Y,W)=>{let E=J.it;if(Y<0||Y>=E.length)return!1;let M=E[Y];if(!M)return!1;E[Y]={...M,...W};let H=j.get(Y);if(H)U(H.element,J.at(E[Y],Y,K)),H.element.dataset.id=String(E[Y].id),H.lastItemId=E[Y].id;return!0},removeItem:(Y)=>{if(Y<0||Y>=J.it.length)return!1;if(J.it.splice(Y,1),J.ii)_();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},JJ=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(K)=>{J.sst(K),J.ls=K,J.rfn()},scrollBy:(K)=>{let X=J.sgt()+K;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(K=2)=>J.sab(K),getScrollPercentage:()=>{let K=J.hc.getTotalSize(),X=Math.max(0,K-J.ch);return X>0?J.ls/X:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>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 V1=3,G1="vlist",QJ=150,jJ=2,M1=0,qJ=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",K=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(K==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(K!=null){if(typeof K==="number"&&K<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof K!=="number"&&typeof K!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let U=new Map,N=!1,_={use(Y){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return U.set(Y.name,Y),_},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,O1(J,U,q,K,X??null)}};return _};function O1(J,q,Q,j,K){let{item:X,items:U,overscan:N=V1,classPrefix:_=G1,ariaLabel:Y,reverse:W=!1,scroll:E}=J,M=E,H=M?.wheel??!0,V=M?.wrap??!1,A=W,B=`${_}-${M1++}`,y=j??K,L=j==null&&K!=null,F=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,O=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,D={overscan:N,classPrefix:_,reverse:A,wrap:V,horizontal:Q,ariaIdPrefix:B},$=Array.from(q.values()).sort((b,m)=>(b.priority??50)-(m.priority??50)),I=new Set($.map((b)=>b.name));for(let b of $)if(b.conflicts){for(let m of b.conflicts)if(I.has(m))throw Error(`[vlist/builder] ${b.name} and ${m} cannot be combined`)}if(A){if(I.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let C=l2(J.container),G=r2(C,_,Y,Q);if(M?.wheel===!1)if(Q)G.viewport.style.overflowX="hidden";else G.viewport.style.overflow="hidden";if(M?.scrollbar==="none")G.viewport.classList.add(`${_}-viewport--no-scrollbar`);let p=t0(),t=U||[],w=L?i0(K,t.length):y0(y,t.length),h=a2(),Z={it:t,hc:w,ch:G.viewport.clientHeight,cw:G.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:c2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>G.viewport.scrollLeft:()=>G.viewport.scrollTop,sst:Q?(b)=>{G.viewport.scrollLeft=b}:(b)=>{G.viewport.scrollTop=b},sab:(b=2)=>{let m=Z.hc.getTotalSize();return Z.ls+Z.ch>=m-b},sic:!1,rfn:null,ffn:null,gvr:(b,m,e,r,s)=>{s2(b,m,e,r,s)},gsp:(b,m,e,r,s)=>{return o2(b,m,e,r,s)},pef:null,at:X.template,vre:!0,st:G.viewport,wh:null,gcw:()=>Z.cw,gch:()=>Z.ch};Z.vtf=()=>Z.dm?Z.dm.getTotal():Z.it.length;let R=null,v=null,T=!1,P={start:0,end:0},k={start:0,end:0},S={start:-1,end:-1},c={viewportState:{scrollPosition:0,containerSize:Q?Z.cw:Z.ch,totalSize:Z.hc.getTotalSize(),actualSize:Z.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},j0=new Map,z=0,u=`${_}-item--selected`,a=`${_}-item--focused`,n=`${_}-item--placeholder`,f=`${_}-item--replaced`,x=L?new WeakMap:null,l=L?w:null,i=null,o=0,Y0=!1,U0=()=>{if(!L)return;if(Y0){let b=Z.sgt(),m=Q?G.viewport.scrollWidth-G.viewport.clientWidth:G.viewport.scrollHeight-G.viewport.clientHeight,e=m>0&&b>=m-2;if(G0(),Y0=!1,e){let r=Math.max(0,Z.hc.getTotalSize()-(Q?Z.cw:Z.ch));if(r>b)Z.sst(r),Z.ls=r,Z.rfn()}}};if(L&&l&&x)i=new ResizeObserver((b)=>{if(Z.id)return;let m=!1,e=P.start;for(let r of b){let s=x.get(r.target);if(s===void 0)continue;let X0=Q?r.borderBoxSize[0].inlineSize:r.borderBoxSize[0].blockSize;if(!l.isMeasured(s)){let W0=l.getSize(s);if(l.setMeasuredSize(s,X0),m=!0,s<e&&X0!==W0)o+=X0-W0;i.unobserve(r.target);let O0=r.target;if(Q)O0.style.width=`${X0}px`;else O0.style.height=`${X0}px`}}if(!m)return;if(l.rebuild(Z.vtf()),Z.hc=l,o!==0){let r=Z.sgt();Z.sst(r+o),Z.ls=r+o,o=0}if(T)Y0=!0;else{let r=Z.sgt(),s=Q?G.viewport.scrollWidth-G.viewport.clientWidth:G.viewport.scrollHeight-G.viewport.clientHeight,X0=s>0&&r>=s-2;if(G0(),Y0=!1,X0){let W0=Math.max(0,Z.hc.getTotalSize()-(Q?Z.cw:Z.ch));if(W0>r)Z.sst(W0),Z.ls=W0}}S.start=-1,S.end=-1,Z.rfn()});let g={selected:!1,focused:!1},d=`${_}-item`,Q0=[],q0=[],B0=[],Z0=[],A0=[],E0=[],J0=new Map,b0=(b,m)=>{if(typeof m==="string")b.innerHTML=m;else b.replaceChildren(m)},T0=(b,m)=>{let e=Math.round(Z.hc.getOffset(m));if(Q)b.style.transform=`translateX(${e}px)`;else b.style.transform=`translateY(${e}px)`};Z.pef=T0;let D0=(b,m,e,r)=>{let s=h.acquire();s.className=d;let X0=!L||l&&l.isMeasured(b);if(Q){if(X0)s.style.width=`${Z.hc.getSize(b)}px`;else s.style.width="";if(O!=null)s.style.height=`${O}px`}else if(X0)s.style.height=`${Z.hc.getSize(b)}px`;else s.style.height="";if(s.dataset.index=String(b),s.dataset.id=String(m.id),s.ariaSelected=e?"true":"false",s.id=`${B}-item-${b}`,Z.la=String(Z.vtf()),s.setAttribute("aria-setsize",Z.la),s.setAttribute("aria-posinset",String(b+1)),String(m.id).startsWith("__placeholder_"))s.classList.add(n);if(e)s.classList.add(u);if(r)s.classList.add(a);b0(s,Z.at(m,b,g));let O0=Math.round(Z.hc.getOffset(b));if(Q)s.style.transform=`translateX(${O0}px)`;else s.style.transform=`translateY(${O0}px)`;return{element:s,lastItemId:m.id,lastSelected:e,lastFocused:r,lastOffset:O0,lastSeenFrame:z}},G0=()=>{let b=`${Z.hc.getTotalSize()}px`;if(Q)G.content.style.width=b;else G.content.style.height=b},_0=null,F0=null,R0=!1,xJ=()=>{if(R0)return;R0=!0,_0=J0.get("_getSelectedIds")??null,F0=J0.get("_getFocusedIndex")??null},mJ=()=>{if(Z.id)return;z++;let b=Z.vtf(),m=Q?Z.cw:Z.ch;Z.gvr(Z.ls,m,Z.hc,b,P),n2(P,N,b,k);for(let[K0,V0]of j0)if(K0>=k.start&&K0<=k.end)V0.lastSeenFrame=z;else if(z-V0.lastSeenFrame>jJ)V0.element.remove(),h.release(V0.element),j0.delete(K0);if(k.start===S.start&&k.end===S.end){if(Z.sic){for(let[K0,V0]of j0)if(K0>=k.start&&K0<=k.end)Z.pef(V0.element,K0)}return}let e=String(b),r=e!==Z.la;Z.la=e;let s=null,X0=null;xJ();let W0=_0?_0():Z.ss,O0=F0?F0():Z.fi;for(let K0=k.start;K0<=k.end;K0++){let V0=Z.dm?Z.dm.getItem(K0):Z.it[K0];if(!V0)continue;let p0=W0.has(V0.id),n0=K0===O0,N0=j0.get(K0);if(N0){let v0=N0.lastItemId!==V0.id,q1=N0.lastSelected!==p0,X1=N0.lastFocused!==n0;if(v0){let Y1=String(N0.lastItemId),h2=String(V0.id),K1=Y1.startsWith("__placeholder_"),u2=h2.startsWith("__placeholder_");b0(N0.element,Z.at(V0,K0,g)),N0.element.dataset.id=h2;let g2=!L||l&&l.isMeasured(K0);if(Q)N0.element.style.width=g2?`${Z.hc.getSize(K0)}px`:"";else N0.element.style.height=g2?`${Z.hc.getSize(K0)}px`:"";if(N0.element.classList.toggle(n,u2),K1&&!u2)N0.element.classList.add(f),setTimeout(()=>{N0.element.classList.remove(f)},300);N0.lastItemId=V0.id}if(v0||q1||X1)N0.element.classList.toggle(u,p0),N0.element.classList.toggle(a,n0),N0.element.ariaSelected=p0?"true":"false",N0.lastSelected=p0,N0.lastFocused=n0;let p2=Math.round(Z.hc.getOffset(K0));if(N0.lastOffset!==p2)Z.pef(N0.element,K0),N0.lastOffset=p2;if(r)N0.element.setAttribute("aria-setsize",Z.la)}else{let v0=D0(K0,V0,p0,n0);if(L){if(!X0)X0=[];X0.push({index:K0,element:v0.element})}if(!s)s=document.createDocumentFragment();s.appendChild(v0.element),j0.set(K0,v0)}}if(s)G.items.appendChild(s);if(X0&&i&&l&&x){for(let{index:K0,element:V0}of X0)if(!l.isMeasured(K0))x.set(V0,K0),i.observe(V0)}S.start=k.start,S.end=k.end,c.lastRenderRange.start=k.start,c.lastRenderRange.end=k.end,c.viewportState.scrollPosition=Z.ls,c.viewportState.visibleRange.start=P.start,c.viewportState.visibleRange.end=P.end,c.viewportState.renderRange.start=k.start,c.viewportState.renderRange.end=k.end,p.emit("range:change",{range:{start:k.start,end:k.end}})},dJ=()=>{S.start=-1,S.end=-1,z+=jJ+1,Z.rfn()};Z.rfn=mJ,Z.ffn=dJ;let O2=()=>{if(Z.id)return;let b=Z.sgt(),m=b>=Z.ls?"down":"up";if(Z.vt=L2(Z.vt,b),!G.root.classList.contains(`${_}--scrolling`))G.root.classList.add(`${_}--scrolling`);T=!0,Z.ls=b,Z.rfn(),p.emit("scroll",{scrollPosition:b,direction:m}),p.emit("velocity:change",{velocity:Z.vt.velocity,reliable:Z.vt.sampleCount>=d2});for(let e=0;e<Q0.length;e++)Q0[e](b,m);if(v)clearTimeout(v);v=setTimeout(()=>{G.root.classList.remove(`${_}--scrolling`),T=!1,Z.vt.velocity=0,Z.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),U0()},M?.idleTimeout??QJ)},C0=null;if(Z.st.addEventListener("scroll",O2,{passive:!0}),H&&!Q&&!F)C0=(b)=>{b.preventDefault();let m=Z.sgt(),e=b.deltaY,r=Math.max(0,Math.min(m+e,Z.hc.getTotalSize()-Z.ch));Z.sst(r),Z.ls=r,Z.vt=L2(Z.vt,r),Z.rfn();let s=r>=m?"down":"up";if(p.emit("scroll",{scrollPosition:r,direction:s}),!G.root.classList.contains(`${_}--scrolling`))G.root.classList.add(`${_}--scrolling`);if(T=!0,v)clearTimeout(v);v=setTimeout(()=>{G.root.classList.remove(`${_}--scrolling`),T=!1,Z.vt.velocity=0,Z.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),U0()},M?.idleTimeout??QJ)},Z.wh=C0,G.viewport.addEventListener("wheel",C0,{passive:!1});else if(Q&&H)C0=(b)=>{if(b.deltaX)return;b.preventDefault(),G.viewport.scrollLeft+=b.deltaY},Z.wh=C0,G.viewport.addEventListener("wheel",C0,{passive:!1});let w2=(b)=>{let e=b.target.closest("[data-index]");if(e){let r=parseInt(e.dataset.index??"-1",10);if(r>=0){let s=Z.dm?.getItem(r)??Z.it[r];if(s){if(s.__groupHeader)return;p.emit("item:click",{item:s,index:r,event:b})}}}for(let r=0;r<q0.length;r++)q0[r](b)},cJ=(b)=>{let e=b.target.closest("[data-index]");if(e){let r=parseInt(e.dataset.index??"-1",10);if(r>=0){let s=Z.dm?.getItem(r)??Z.it[r];if(s){if(s.__groupHeader)return;p.emit("item:dblclick",{item:s,index:r,event:b})}}}},S2=(b)=>{for(let m=0;m<B0.length;m++)B0[m](b)};G.items.addEventListener("click",w2),G.items.addEventListener("dblclick",cJ),G.root.addEventListener("keydown",S2);let A2=new ResizeObserver((b)=>{if(Z.id)return;for(let m of b){let e=m.contentRect.height,r=m.contentRect.width,s=Q?r:e,X0=Q?Z.cw:Z.ch;if(Z.cw=r,Z.ch=e,Math.abs(s-X0)>1){if(c.viewportState.containerSize=s,Z.ii)G0(),Z.rfn(),p.emit("resize",{height:e,width:r})}if(Z.ii)for(let W0=0;W0<Z0.length;W0++)Z0[W0](r,e)}});if(Z.vre)A2.observe(G.viewport);let E2={dom:G,emitter:p,resolvedConfig:D,rawConfig:J,rendered:j0,pool:h,itemState:g,sharedState:c,renderRange:k,isHorizontal:Q,classPrefix:_,contentSizeHandlers:A0,afterScroll:Q0,clickHandlers:q0,keydownHandlers:B0,resizeHandlers:Z0,destroyHandlers:E0,methods:J0,onScrollFrame:O2,resizeObserver:A2,applyTemplate:b0,updateContentSize:G0},M0=t2(Z,E2);Z.dm=e2(Z,E2,M0),Z.sc=JJ(Z,E2);let f2=new Map;for(let b of $)if(b.methods)for(let m of b.methods){let e=f2.get(m);if(e)throw Error(`[vlist/builder] Method "${m}" is registered by both "${e}" and "${b.name}"`);f2.set(m,b.name)}for(let b of $)b.setup(M0);if(Z.ii=!0,M0.state.isInitialized=!0,G0(),Z.rfn(),A&&Z.it.length>0){let b=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(b),Z.ls=b,Z.rfn()}let lJ=(b)=>{M0.dataManager.setItems(b,0,b.length)},rJ=A?(b)=>{let m=Z.sab(2),e=Z.it.length;if(M0.dataManager.setItems(b,e),m&&Z.it.length>0){let r=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(r),Z.ls=r,Z.rfn()}}:(b)=>{let m=Z.it.length;M0.dataManager.setItems(b,m)},aJ=A?(b)=>{let m=Z.sgt(),e=Z.hc.getTotalSize(),r=[...Z.it];M0.dataManager.clear(),M0.dataManager.setItems([...b,...r],0);let X0=Z.hc.getTotalSize()-e;if(X0>0)Z.sst(m+X0),Z.ls=m+X0}:(b)=>{let m=[...Z.it];M0.dataManager.clear(),M0.dataManager.setItems([...b,...m],0)},sJ=(b,m)=>{M0.dataManager.updateItem(b,m)},nJ=(b)=>{M0.dataManager.removeItem(b)},oJ=async()=>{if(M0.dataManager.reload)await M0.dataManager.reload()},s0=()=>{if(R!==null)cancelAnimationFrame(R),R=null},iJ=(b,m,e)=>{if(s0(),Math.abs(m-b)<1){Z.sst(m),Z.ls=m,Z.rfn();return}let r=performance.now(),s=(X0)=>{let W0=X0-r,O0=Math.min(W0/e,1),K0=b+(m-b)*y2(O0);if(Z.sst(K0),Z.ls=K0,Z.rfn(),O0<1)R=requestAnimationFrame(s);else R=null};R=requestAnimationFrame(s)},tJ=(b,m)=>{let{align:e,behavior:r,duration:s}=z0(m),X0=Z.vtf(),W0=b;if(V&&X0>0)W0=(W0%X0+X0)%X0;let O0=Z.gsp(W0,Z.hc,Z.ch,X0,e);if(r==="smooth")iJ(Z.sgt(),O0,s);else s0(),Z.sst(O0)},eJ=()=>Z.sgt(),J1=(b,m)=>{return p.on(b,m)},Q1=(b,m)=>{p.off(b,m)},j1=()=>{if(Z.id)return;if(Z.id=!0,M0.state.isDestroyed=!0,G.items.removeEventListener("click",w2),G.root.removeEventListener("keydown",S2),Z.st.removeEventListener("scroll",O2),A2.disconnect(),i)i.disconnect(),i=null;if(Z.wh)G.viewport.removeEventListener("wheel",Z.wh);if(v)clearTimeout(v);for(let b=0;b<E0.length;b++)E0[b]();for(let b of $)if(b.destroy)b.destroy();s0();for(let[,b]of j0)b.element.remove(),h.release(b.element);j0.clear(),h.clear(),p.clear(),G.root.remove()},I2={get element(){return G.root},get items(){if(J0.has("_getItems"))return J0.get("_getItems")();return Z.it},get total(){if(J0.has("_getTotal"))return J0.get("_getTotal")();return Z.vtf()},setItems:J0.has("setItems")?J0.get("setItems"):lJ,appendItems:J0.has("appendItems")?J0.get("appendItems"):rJ,prependItems:J0.has("prependItems")?J0.get("prependItems"):aJ,updateItem:J0.has("updateItem")?J0.get("updateItem"):sJ,removeItem:J0.has("removeItem")?J0.get("removeItem"):nJ,reload:J0.has("reload")?J0.get("reload"):oJ,scrollToIndex:J0.has("scrollToIndex")?J0.get("scrollToIndex"):tJ,cancelScroll:J0.has("cancelScroll")?J0.get("cancelScroll"):s0,getScrollPosition:J0.has("getScrollPosition")?J0.get("getScrollPosition"):eJ,on:J1,off:Q1,destroy:j1};for(let[b,m]of J0){if(b.charCodeAt(0)===95||b==="setItems"||b==="appendItems"||b==="prependItems"||b==="updateItem"||b==="removeItem"||b==="reload"||b==="scrollToIndex"||b==="scrollToItem"||b==="cancelScroll"||b==="getScrollPosition")continue;I2[b]=m}return I2}Q2();var f0=(J,q,Q={},j="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:U=1000,minThumbSize:N=30,showOnHover:_=!0,hoverZoneWidth:Y=16,showOnViewportEnter:W=!0}=Q,E=0,M=0,H=0,V=0,A=!1,B=!1,y=0,L=0,F=0,O=null,D=!1,$=null,I=null,C=K?"width":"height",G=K?"translateX":"translateY",p=K?(o)=>o.clientX:(o)=>o.clientY,t=K?"left":"top",w=document.createElement("div"),h=document.createElement("div"),Z=_?document.createElement("div"):null,R=()=>{if(w.className=`${j}-scrollbar`,h.className=`${j}-scrollbar-thumb`,K)w.classList.add(`${j}-scrollbar--horizontal`);if(w.appendChild(h),J.appendChild(w),Z){if(Z.className=`${j}-scrollbar-hover`,K)Z.classList.add(`${j}-scrollbar-hover--horizontal`),Z.style.height=`${Y}px`;else Z.style.width=`${Y}px`;J.appendChild(Z)}},v=()=>{if(O)clearTimeout(O),O=null},T=()=>{if(!X)return;v(),O=setTimeout(k,U)},P=()=>{if(E<=M)return;if(v(),!D)w.classList.add(`${j}-scrollbar--visible`),D=!0;if(X&&!A&&!B)T()},k=()=>{if(A||B)return;w.classList.remove(`${j}-scrollbar--visible`),D=!1},S=(o,Y0)=>{E=o,M=Y0;let U0=E>M;if(w.style.display=U0?"":"none",!U0){k();return}let g=M/E;H=Math.max(N,g*M),h.style[C]=`${H}px`,V=M-H,c(F)},c=(o)=>{if(F=o,E<=M||V<=0)return;let Y0=E-M,g=Math.min(1,Math.max(0,o/Y0))*V;h.style.transform=`${G}(${g}px)`},j0=(o)=>{if(o.target===h)return;let Y0=w.getBoundingClientRect(),d=p(o)-Y0[t]-H/2,q0=Math.max(0,Math.min(d,V))/V,B0=E-M,Z0=q0*B0;q(Z0),P()},z=(o)=>{o.preventDefault(),o.stopPropagation(),A=!0,y=p(o),L=F,v(),w.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",u),document.addEventListener("mouseup",a)},u=(o)=>{if(!A)return;let Y0=p(o)-y,U0=V>0?Y0/V:0,g=E-M,d=U0*g,Q0=Math.max(0,Math.min(L+d,g)),B0=Q0/g*V;if(h.style.transform=`${G}(${B0}px)`,I=Q0,$===null)$=requestAnimationFrame(()=>{if(I!==null)q(I);$=null})},a=()=>{if(A=!1,$!==null)cancelAnimationFrame($),$=null;if(I!==null)q(I),I=null;if(w.classList.remove(`${j}-scrollbar--dragging`),X&&!B)T();document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",a)},n=()=>{if(W)P()},f=()=>{if(!A){if(B=!1,X)T()}},x=()=>{B=!0,v(),P()},l=()=>{if(B=!1,!A&&X)T()},i=()=>{if(v(),$!==null)cancelAnimationFrame($),$=null;if(w.removeEventListener("click",j0),w.removeEventListener("mouseenter",x),w.removeEventListener("mouseleave",l),h.removeEventListener("mousedown",z),J.removeEventListener("mouseenter",n),J.removeEventListener("mouseleave",f),document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",a),Z){if(Z.removeEventListener("mouseenter",x),Z.removeEventListener("mouseleave",l),Z.parentNode)Z.parentNode.removeChild(Z)}if(w.parentNode)w.parentNode.removeChild(w)};if(R(),w.addEventListener("click",j0),w.addEventListener("mouseenter",x),w.addEventListener("mouseleave",l),h.addEventListener("mousedown",z),J.addEventListener("mouseenter",n),J.addEventListener("mouseleave",f),Z)Z.addEventListener("mouseenter",x),Z.addEventListener("mouseleave",l);return{show:P,hide:k,updateBounds:S,updatePosition:c,isVisible:()=>D,destroy:i}};var GJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:K}=Q,{classPrefix:X,horizontal:U}=K;if(q=f0(j.viewport,(Y)=>Q.scrollController.scrollTo(Y),J??{},X,U),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let _=q;Q.afterScroll.push((Y,W)=>{_.updatePosition(Y),_.show()}),Q.resizeHandlers.push((Y,W)=>{if(_){let E=Q.getCachedCompression();_.updateBounds(E.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let Y=Q.getCachedCompression();_.updateBounds(Y.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var MJ=(J=0)=>{let q=[,,,,,,,,];for(let Q=0;Q<8;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},j2=(J,q)=>{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 X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,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,U=J.samples[X],N=q-U.position,_=Q-U.time;J.velocity=_>0?N/_:0}return J.lastPosition=q,J.lastTime=Q,J},A1=(J)=>J.sampleCount>=3,OJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:K=!1,idleTimeout:X=150,onScroll:U,onIdle:N,scrollElement:_,horizontal:Y=!1}=q,W=!!_,E=0,M=0,H=W?Y?window.innerWidth:window.innerHeight:Y?J.clientWidth:J.clientHeight,V=q.compressed??!1,A=q.compression,B=MJ(),y=!1,L=null,O=q2(()=>{let f=Y?J.scrollLeft:J.scrollTop,x=f>=E?"down":"up";if(B=j2(B,f),E=f,U)U({scrollTop:E,direction:x,velocity:B.velocity});p()}),$=q2(()=>{let f=J.getBoundingClientRect(),x=Y?Math.max(0,-f.left):Math.max(0,-f.top),l=x>=E?"down":"up";if(B=j2(B,x),E=x,!y)y=!0;if(U)U({scrollTop:E,direction:l,velocity:B.velocity});p()}),I=(f)=>{f.preventDefault()},C=(f)=>{if(f.deltaX)return;f.preventDefault(),J.scrollLeft+=f.deltaY},G=(f)=>{if(!V)return;f.preventDefault();let x=(Y?f.deltaX||f.deltaY:f.deltaY)*j,l=E+x;if(K)l=E+x*0.3;if(l=Math.max(0,Math.min(l,M)),l!==E){let o=l>=E?"down":"up";if(B=j2(B,l),E=l,!y)y=!0;if(U)U({scrollTop:E,direction:o,velocity:B.velocity});p()}},p=()=>{if(L)clearTimeout(L);L=setTimeout(()=>{if(y=!1,B=MJ(E),N)N()},X)},t=(f)=>{if(V)return;if(V=!0,A=f,M=f.virtualSize-H,W)return;if(O.cancel(),J.removeEventListener("scroll",O),!Q)J.removeEventListener("wheel",I);else if(Y)J.removeEventListener("wheel",C);if(Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",G,{passive:!1});let x=Y?J.scrollLeft:J.scrollTop;if(x>0){let l=Y?A?.actualSize??J.scrollWidth:A?.actualSize??J.scrollHeight;E=x/l*M}if(Y)J.scrollLeft=0;else J.scrollTop=0},w=()=>{if(!V)return;if(V=!1,W){A=void 0;return}if(J.removeEventListener("wheel",G),Y)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",O,{passive:!0}),!Q)J.addEventListener("wheel",I,{passive:!1});else if(Y)J.addEventListener("wheel",C,{passive:!1});if(A&&E>0){let x=E/M*(A.actualSize-H);if(Y)J.scrollLeft=x;else J.scrollTop=x}A=void 0},h=()=>{if(W||V)return E;return Y?J.scrollLeft:J.scrollTop},Z=(f,x=!1)=>{let l=Math.max(0,Math.min(f,M||1/0));if(W){let i=J.getBoundingClientRect();if(Y){let o=i.left+window.scrollX;window.scrollTo({left:o+l,behavior:x?"smooth":"auto"})}else{let o=i.top+window.scrollY;window.scrollTo({top:o+l,behavior:x?"smooth":"auto"})}}else if(V){if(l===E)return;let o=l>=E?"down":"up";if(B=j2(B,l),E=l,!y)y=!0;if(U)U({scrollTop:E,direction:o,velocity:B.velocity});p()}else if(Y)J.scrollTo({left:l,behavior:x?"smooth":"auto"});else J.scrollTo({top:l,behavior:x?"smooth":"auto"})},R=(f)=>{Z(h()+f)},v=()=>{return h()<=0},T=(f=0)=>{let x=h(),l=W||V?M:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return x>=l-f},P=()=>{let f=h(),x=W||V?M:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(x<=0)return 0;return Math.min(1,Math.max(0,f/x))},k=(f)=>{if(f.compression)A=f.compression,M=A.virtualSize-H},S=()=>V,c=()=>Math.abs(B.velocity),j0=()=>A1(B),z=()=>y,u=()=>W,a=(f)=>{if(H=f,A)M=A.virtualSize-H},n=()=>{if(L)clearTimeout(L);if(W)$.cancel(),window.removeEventListener("scroll",$);else O.cancel(),J.removeEventListener("scroll",O),J.removeEventListener("wheel",G),J.removeEventListener("wheel",I),J.removeEventListener("wheel",C)};if(W){if(V&&A)M=A.virtualSize-H;window.addEventListener("scroll",$,{passive:!0})}else if(V&&A){if(M=A.virtualSize-H,Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",G,{passive:!1})}else{if(Y)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",O,{passive:!0}),!Q)J.addEventListener("wheel",I,{passive:!1});else if(Y)J.addEventListener("wheel",C,{passive:!1})}return{getScrollTop:h,scrollTo:Z,scrollBy:R,isAtTop:v,isAtBottom:T,getScrollPercentage:P,getVelocity:c,isTracking:j0,isScrolling:z,updateConfig:k,enableCompression:t,disableCompression:w,isCompressed:S,isWindowMode:u,updateContainerHeight:a,destroy:n}},q2=(J)=>{let q=null,Q=null,j=(...K)=>{if(Q=K,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var E1=0.65,F1=0.5,L1=0.95,b1=0.1,y1=5,T1=100,AJ=()=>{let J=null,q=0,Q=!1,j=0,K=null,X=0,U=0,N=null,_=[];return{name:"withScale",priority:20,setup(Y){let{dom:W,config:E}=Y,{classPrefix:M,horizontal:H}=E,V=()=>{let L=Y.getVirtualTotal(),F=L0(L,Y.sizeCache);if(F.isCompressed&&!Q){Q=!0,Y.scrollController.enableCompression(F),Y.updateContentSize(F.virtualSize),Y.setScrollFns(()=>q,(w)=>{if(q=w,j=w,K!==null)cancelAnimationFrame(K),K=null});let O=()=>{let w=j-q;if(Math.abs(w)<F1)q=j,K=null;else{q+=w*E1;let Z=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,Z)),K=requestAnimationFrame(O)}Y.scrollController.scrollTo(q)},D=W.viewport,$=(w)=>{w.preventDefault();let Z=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+w.deltaY,Z)),K===null)K=requestAnimationFrame(O)};D.addEventListener("wheel",$,{passive:!1});let I=()=>{if(N!==null)cancelAnimationFrame(N),N=null},C=(w)=>{if(I(),K!==null)cancelAnimationFrame(K),K=null;let h=w.touches[0];if(!h)return;let Z=H?h.clientX:h.clientY;X=Z,U=q,_=[{time:performance.now(),y:Z}]},G=(w)=>{w.preventDefault();let h=w.touches[0];if(!h)return;let Z=H?h.clientX:h.clientY,R=performance.now();if(_.push({time:R,y:Z}),_.length>y1)_.shift();let v=X-Z,P=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,k=Math.max(0,Math.min(U+v,P));q=k,j=k,Y.scrollController.scrollTo(k)},p=(w)=>{let h=performance.now(),Z=_.filter((P)=>h-P.time<T1),R=0;if(Z.length>=2){let P=Z[0],k=Z[Z.length-1],S=k.time-P.time;if(S>0)R=(P.y-k.y)/S}if(_=[],Math.abs(R)<b1)return;let v=R*16,T=()=>{if(v*=L1,Math.abs(v)<0.5){N=null;return}let k=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,S=q+v;if(S=Math.max(0,Math.min(S,k)),S<=0&&v<0||S>=k&&v>0){q=S,j=S,Y.scrollController.scrollTo(S),N=null;return}q=S,j=S,Y.scrollController.scrollTo(S),N=requestAnimationFrame(T)};N=requestAnimationFrame(T)};if(D.addEventListener("touchstart",C,{passive:!0}),D.addEventListener("touchmove",G,{passive:!1}),D.addEventListener("touchend",p,{passive:!0}),D.addEventListener("touchcancel",p,{passive:!0}),Y.destroyHandlers.push(()=>{if(D.removeEventListener("wheel",$),D.removeEventListener("touchstart",C),D.removeEventListener("touchmove",G),D.removeEventListener("touchend",p),D.removeEventListener("touchcancel",p),I(),K!==null)cancelAnimationFrame(K),K=null}),!W.viewport.querySelector(`.${M}-scrollbar`)){if(J=f0(W.viewport,(h)=>Y.scrollController.scrollTo(h),{},M,H),!W.viewport.classList.contains(`${M}-viewport--custom-scrollbar`))W.viewport.classList.add(`${M}-viewport--custom-scrollbar`);J.updateBounds(F.virtualSize,Y.state.viewportState.containerSize);let w=J;Y.afterScroll.push((h,Z)=>{if(w)w.updatePosition(h),w.show()}),Y.resizeHandlers.push((h,Z)=>{if(w){let R=Y.getCachedCompression();w.updateBounds(R.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!F.isCompressed&&Q)Q=!1,Y.scrollController.disableCompression(),Y.updateContentSize(F.actualSize);else if(F.isCompressed)Y.scrollController.updateConfig({compression:F}),Y.updateContentSize(F.virtualSize);if(J)J.updateBounds(F.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:F,totalItems:L}};Y.updateCompressionMode=V;let A=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return A()},Y.setVisibleRangeFn((L,F,O,D,$)=>{B=null,y=null;let I=L0(D,O);e0(L,F,O,D,I,$)}),Y.setScrollToPosFn((L,F,O,D,$)=>{let I=L0(D,F);return J2(L,F,O,D,I,$)});let B=null,y=null;Y.setPositionElementFn((L,F)=>{let O=Y.getVirtualTotal(),D=L0(O,Y.sizeCache);if(D.isCompressed){let $=Y.scrollController.getScrollTop();if(B===null||F<y)y=F,B=Math.round(S0(F,$,Y.sizeCache,O,Y.state.viewportState.containerSize,D));let I=B+Y.sizeCache.getOffset(F)-Y.sizeCache.getOffset(y),C=Y.config.horizontal;L.style.transform=C?`translateX(${I}px)`:`translateY(${I}px)`}else{let $=Math.round(Y.sizeCache.getOffset(F)),I=Y.config.horizontal;L.style.transform=I?`translateX(${$}px)`:`translateY(${$}px)`}}),V(),Y.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var X2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:K}=J,X=new Map,U=0,N=0,_=(R)=>{let v=X.get(R);if(!v)v={items:Array(q),count:0,lastAccess:Date.now()},X.set(R,v);else v.lastAccess=Date.now();return v},Y=(R)=>{return Math.floor(R/q)},W=(R)=>{return R%q},E=()=>U,M=(R)=>{U=R},H=(R)=>{if(R<0||R>=U)return;let v=Y(R),T=X.get(v);if(!T)return;return T.items[W(R)]},V=(R)=>{if(R<0||R>=U)return!1;let v=Y(R),T=X.get(v);if(!T)return!1;return T.items[W(R)]!==void 0},A=(R,v)=>{let T=Y(R),P=_(T),k=W(R),S=P.items[k]===void 0;if(P.items[k]=v,S)P.count++,N++;if(R>=U)U=R+1},B=(R,v)=>{for(let T=0;T<v.length;T++){let P=v[T];if(P!==void 0)A(R+T,P)}},y=(R)=>{if(R<0||R>=U)return!1;let v=Y(R),T=X.get(v);if(!T)return!1;let P=W(R);if(T.items[P]===void 0)return!1;if(T.items[P]=void 0,T.count--,N--,T.count===0)X.delete(v);return!0},L=(R,v)=>{let T=[];for(let P=R;P<=v&&P<U;P++)T.push(H(P));return T},F=(R,v)=>{for(let T=R;T<=v&&T<U;T++)if(!V(T))return!1;return!0},O=()=>{let R=[],v=null,T=Array.from(X.keys()).sort((P,k)=>P-k);for(let P of T){let k=X.get(P);if(!k)continue;let S=P*q;for(let c=0;c<q;c++){let j0=S+c;if(j0>=U)break;if(k.items[c]!==void 0)if(v===null)v={start:j0,end:j0};else if(j0===v.end+1)v.end=j0;else R.push(v),v={start:j0,end:j0};else if(v!==null)R.push(v),v=null}}if(v!==null)R.push(v);return R},D=(R,v)=>{let T=[],P=null;for(let k=R;k<=v&&k<U;k++)if(!V(k))if(P===null)P={start:k,end:k};else P.end=k;else if(P!==null)T.push(P),P=null;if(P!==null)T.push(P);return T},$=(R)=>{return X.has(R)},I=(R)=>{let v=X.get(R);if(v)v.lastAccess=Date.now()},C=(R,v)=>{if(R>v||X.size===0)return;let T=Date.now(),P=Y(Math.max(0,R)),k=Y(Math.min(U-1,v));for(let S=P;S<=k;S++){let c=X.get(S);if(c)c.lastAccess=T}},G=(R,v)=>{if(N<=Q)return 0;let T=Math.max(0,R-j),P=Math.min(U-1,v+j),k=Y(T),S=Y(P),c=0,j0=[];for(let[z,u]of X)if(z<k||z>S)c+=u.count,j0.push(z),N-=u.count,X.delete(z);if(c>0&&K)K(c,j0);return c},p=()=>{if(N<=Q)return 0;let R=Array.from(X.entries()).sort(([,P],[,k])=>P.lastAccess-k.lastAccess),v=0,T=[];for(let[P,k]of R){if(N<=Q)break;v+=k.count,N-=k.count,T.push(P),X.delete(P)}if(v>0&&K)K(v,T);return v},t=()=>{return{totalItems:U,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:U>0?1-N/U:1}},w=()=>N,h=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:E,setTotal:M,get:H,has:V,set:A,setRange:B,delete:y,getRange:L,isRangeLoaded:F,getLoadedRanges:O,findUnloadedRanges:D,getChunkIndex:Y,isChunkLoaded:$,touchChunk:I,touchChunksForRange:C,evictDistant:G,evictToLimit:p,getStats:t,getCachedCount:w,clear:h,reset:()=>{h(),U=0}}},Y2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,K)=>j.start-K.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let K=q[j],X=Q[Q.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else Q.push({...K})}return Q},g0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,K=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:K};if(q.length===0)return[X];let U=[],N=Y2(q),_=X.start;for(let Y of N){if(Y.end<_)continue;if(Y.start>X.end)break;if(Y.start>_)U.push({start:_,end:Math.min(Y.start-1,X.end)});if(_=Y.end+1,_>X.end)break}if(_<=X.end)U.push({start:_,end:X.end});return U};var K2=(J={})=>{let{maskCharacter:q=ZJ,maxSampleSize:Q=UJ}=J,j=[],K=!1,X=0,U=(E)=>{if(K||E.length===0)return;let M=Math.min(E.length,Q);for(let H=0;H<M;H++){let V=E[H];if(!V||typeof V!=="object")continue;let A={};for(let[B,y]of Object.entries(V)){if(B.startsWith("_")||B==="id")continue;A[B]=String(y??"").length}if(Object.keys(A).length>0)j.push(A)}K=!0},N=()=>K,_=(E)=>{let M={id:`${BJ}${X++}`,[H2]:!0,_index:E};if(j.length===0)return M.label=q.repeat(12),M;let H=j[E%j.length];for(let[V,A]of Object.entries(H))M[V]=q.repeat(Math.max(1,A));return M};return{analyzeStructure:U,hasAnalyzedStructure:N,generate:_,generateRange:(E,M)=>{let H=[];for(let V=E;V<=M;V++)H.push(_(V));return H},clear:()=>{j=[],K=!1,X=0}}},$0=(J)=>{if(!J||typeof J!=="object")return!1;return J[H2]===!0},$2=(J)=>{return J.filter((q)=>!$0(q))};var $1=50,Z2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:K,placeholder:X,pageSize:U=$1,onStateChange:N,onItemsLoaded:_,onItemsEvicted:Y}=J,W=X2({...K,onEvict:(g,d)=>{Y?.(g),D()}}),E=null,M=()=>{if(!E)E=K2(X);return E},H=new Map,V=!1,A,B=!0,y,L=[],F=0,O=new Map,D=()=>{N?.(Z())},$=()=>{H.clear();let g=W.getLoadedRanges();for(let d of g)for(let Q0=d.start;Q0<=d.end;Q0++){let q0=W.get(Q0);if(q0&&!$0(q0))H.set(q0.id,Q0)}},I=(g,d)=>{if(!$0(d))H.set(d.id,g)},C=(g)=>{H.delete(g)},G=(g,d)=>{return`${g}-${d}`},p=()=>W.getTotal(),t=()=>W.getCachedCount(),w=()=>V,h=()=>B,Z=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:V,pendingRanges:L,error:A,hasMore:B,cursor:y}),R=()=>W,v=()=>M(),T=(g)=>{let d=W.get(g);if(d!==void 0)return d;if(g>=0&&g<W.getTotal())return M().generate(g);return},P=(g)=>{let d=H.get(g);if(d===void 0)return;return W.get(d)},k=(g)=>{return H.get(g)??-1},S=(g)=>{let d=W.get(g);return d!==void 0&&!$0(d)},c=(g,d)=>{let Q0=[],q0=W.getTotal(),B0=0,Z0=0;W.touchChunksForRange(g,Math.min(d,q0-1));for(let A0=g;A0<=d&&A0<q0;A0++){let E0=W.get(A0);if(E0!==void 0)Q0.push(E0),B0++;else Q0.push(M().generate(A0)),Z0++}return Q0},j0=(g)=>{W.setTotal(g),B=W.getCachedCount()<g,D()},z=(g,d=0,Q0)=>{if(E&&!E.hasAnalyzedStructure()&&g.length>0)E.analyzeStructure(g);for(let q0=0;q0<g.length;q0++){let B0=g[q0];if(B0!==void 0){let Z0=d+q0;W.set(Z0,B0),I(Z0,B0)}}if(Q0!==void 0)W.setTotal(Q0);else if(d+g.length>W.getTotal())W.setTotal(d+g.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)B=!1;_?.(g,d,W.getTotal()),D()},u=(g,d)=>{let Q0=H.get(g);if(Q0===void 0)return!1;let q0=W.get(Q0);if(!q0)return!1;let B0={...q0,...d};if(W.set(Q0,B0),d.id!==void 0&&d.id!==g)C(g),I(Q0,B0);return D(),!0},a=(g)=>{let d=H.get(g);if(d===void 0)return!1;W.delete(d),C(g);let Q0=W.getTotal();if(Q0>0)W.setTotal(Q0-1);return D(),!0},n=async(g,d)=>{if(!q)return;let Q0=G(g,d);if(O.has(Q0))return;let q0=W.getLoadedRanges(),B0=g0({start:g,end:d},q0,W.chunkSize);if(B0.length===0)return;let Z0=W.chunkSize,A0=[];for(let J0 of B0){let b0=Math.floor(J0.start/Z0),T0=Math.floor(J0.end/Z0);for(let D0=b0;D0<=T0;D0++){let G0=D0*Z0,_0=G0+Z0-1,F0=G(G0,_0);if(!A0.some((R0)=>R0.start===G0)&&!O.has(F0))A0.push({start:G0,end:_0})}}let E0=[];for(let J0 of B0){let b0=Math.floor(J0.start/Z0),T0=Math.floor(J0.end/Z0);for(let D0=b0;D0<=T0;D0++){let G0=D0*Z0,_0=G0+Z0-1,F0=G(G0,_0);if(O.has(F0)){let R0=O.get(F0);if(!E0.includes(R0))E0.push(R0)}}}for(let J0 of A0){let b0=G(J0.start,J0.end),T0=(async()=>{L.push(J0),V=!0,A=void 0,D();try{let D0=J0.end-J0.start+1,G0={offset:J0.start,limit:D0,cursor:void 0},_0=await q.read(G0);if(z(_0.items,J0.start,_0.total),_0.cursor)y=_0.cursor;let F0=J0.start+_0.items.length;if(F0>=F){if(F=F0,_0.hasMore!==void 0)B=_0.hasMore;else if(_0.total!==void 0)B=F0<_0.total}}catch(D0){A=D0 instanceof Error?D0:Error(String(D0))}finally{O.delete(b0),L=L.filter((D0)=>D0.start!==J0.start||D0.end!==J0.end),V=O.size>0,D()}})();O.set(b0,T0),E0.push(T0)}await Promise.all(E0)},f=async(g,d)=>{if(W.isRangeLoaded(g,d))return;await n(g,d)},x=async()=>{if(!q)return;await n(0,U-1)},l=async()=>{if(!q||V||!B)return!1;let g=W.getCachedCount(),d=W.getTotal(),Q0=g,q0=Math.min(Q0+U-1,d>0?d-1:Q0+U-1);if(Q0>=d&&d>0)return B=!1,!1;return await n(Q0,q0),W.getCachedCount()>g},i=async()=>{if(W.clear(),W.setTotal(0),H.clear(),E)E.clear();O.clear(),L=[],V=!1,y=void 0,B=!0,F=0,A=void 0,D()},o=(g,d)=>{if(W.evictDistant(g,d)>0)$()},Y0=()=>{W.clear(),H.clear(),y=void 0,A=void 0,L=[],V=!1,D()},U0=()=>{if(W.reset(),H.clear(),E)E.clear();y=void 0,B=!0,F=0,A=void 0,L=[],V=!1,D()};if(Q&&Q.length>0)z(Q,0,j??Q.length);else if(j!==void 0)W.setTotal(j),D();return{getState:Z,getTotal:p,getCached:t,getIsLoading:w,getHasMore:h,getStorage:R,getPlaceholders:v,getItem:T,getItemById:P,getIndexById:k,isItemLoaded:S,getItemsInRange:c,setTotal:j0,setItems:z,updateItem:u,removeItem:a,loadRange:n,ensureRange:f,loadInitial:x,loadMore:l,reload:i,evictDistant:o,clear:Y0,reset:U0}};var EJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:K,autoLoad:X=!0}=J,U=Q?.cancelThreshold??XJ,N=Q?.preloadThreshold??YJ,_=Q?.preloadAhead??KJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:W}=Y,E=Y.config.reverse,M=Z2({adapter:q,...K!==void 0&&{initialTotal:K},pageSize:j?.chunkSize??w0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let O=Y.getVirtualTotal();Y.sizeCache.rebuild(O),Y.updateCompressionMode();let D=Y.getCachedCompression();Y.state.viewportState.totalSize=D.virtualSize,Y.state.viewportState.actualSize=D.actualSize,Y.state.viewportState.isCompressed=D.isCompressed,Y.state.viewportState.compressionRatio=D.ratio,Y.updateContentSize(D.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(O,D,$)=>{if(Y.state.isInitialized)Y.forceRender(),W.emit("load:end",{items:O,total:$,offset:D})}});Y.replaceDataManager(M);let H=null,V=null,A=0,B=()=>{if(V){let O=V;V=null,Y.dataManager.ensureRange(O.start,O.end).catch((D)=>{W.emit("error",{error:D,context:"ensureRange"})})}};Y.afterScroll.push((O,D)=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getVelocity(),C=Y.scrollController.isTracking()&&$<=U;if(V&&A>U&&$<=U){let t=V;V=null,Y.dataManager.ensureRange(t.start,t.end).catch((w)=>{W.emit("error",{error:w,context:"ensureRange"})})}if(A=$,C&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(E){if(O<T2)W.emit("load:start",{offset:Y.dataManager.getCached(),limit:w0}),Y.dataManager.loadMore().catch((t)=>{W.emit("error",{error:t,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-O-Y.state.viewportState.containerSize<T2)W.emit("load:start",{offset:Y.dataManager.getCached(),limit:w0}),Y.dataManager.loadMore().catch((w)=>{W.emit("error",{error:w,context:"loadMore"})})}let{renderRange:G}=Y.state.viewportState;if(!H||G.start!==H.start||G.end!==H.end)if(H={start:G.start,end:G.end},C){V=null;let{start:t,end:w}=G,h=Y.getVirtualTotal();if($>N)if(D==="down")w=Math.min(G.end+_,h-1);else t=Math.max(G.start-_,0);Y.dataManager.ensureRange(t,w).catch((Z)=>{W.emit("error",{error:Z,context:"ensureRange"})})}else V={start:G.start,end:G.end}});let y=200,L=null;Y.afterScroll.push((O,D)=>{if(L!==null)clearTimeout(L);L=setTimeout(()=>{L=null,B()},y)}),Y.destroyHandlers.push(()=>{if(L!==null)clearTimeout(L),L=null});let F=()=>{if(Y.state.isDestroyed)return;H=null;let{renderRange:O}=Y.state.viewportState;if(O.end>0)Y.dataManager.ensureRange(O.start,O.end).catch((D)=>{W.emit("error",{error:D,context:"ensureRange"})});B()};if(window.addEventListener("online",F),Y.destroyHandlers.push(()=>{window.removeEventListener("online",F)}),W.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{H=null,V=null,Y.forceRender();let{renderRange:O}=Y.state.viewportState;if(O.end>0)W.emit("load:start",{offset:O.start,limit:O.end-O.start+1}),await Y.dataManager.ensureRange(O.start,O.end)}),Y.methods.set("reload",async()=>{H=null,V=null,Y.invalidateRendered(),await Y.dataManager.reload(),W.emit("load:start",{offset:0,limit:w0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:O}=Y.state.viewportState;if(O.end>0)await Y.dataManager.ensureRange(O.start,O.end)}),X)W.emit("load:start",{offset:0,limit:w0}),Y.dataManager.loadInitial().catch((O)=>{W.emit("error",{error:O,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var FJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:K,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",K.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let Y=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let W=Q.viewport.getBoundingClientRect();if(K.horizontal){let E=W.left+window.scrollX;window.scrollTo(E+Y,window.scrollY)}else{let E=W.top+window.scrollY;window.scrollTo(window.scrollX,E+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:U,innerWidth:N}=window,_=()=>{let{innerWidth:Y,innerHeight:W}=window,E=K.horizontal?Y:W,M=K.horizontal?N:U;if(Math.abs(E-M)<=1)return;U=W,N=Y,j.viewportState.containerSize=W,X.emit("resize",{width:Y,height:W});for(let H=0;H<q.resizeHandlers.length;H++)q.resizeHandlers[H](Y,W);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var P2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].headerLayoutIndex<=q)Q=K;else j=K-1}return Q},LJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].firstDataIndex<=q)Q=K;else j=K-1}return Q},bJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),K=0,X=0;for(let U=1;U<J;U++){let N=q(U);if(N!==j){let _=U-K;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:_}),X=X+1+_,j=N,K=U}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:J-K}),Q},x0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),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 U=0;U<X.count;U++)j[K]=J[X.firstDataIndex+U],K++}return j},m0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let K=J.getEntry(j);if(K.type==="header")return J.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},U2=(J,q)=>{let Q=bJ(J,q.getGroupForIndex),j=J+Q.length,K=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(M)=>{if(Q.length===0)return{type:"item",dataIndex:M,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=P2(Q,M),V=Q[H];if(M===V.headerLayoutIndex)return{type:"header",group:V};let A=M-V.headerLayoutIndex-1;return{type:"item",dataIndex:V.firstDataIndex+A,group:V}},layoutToDataIndex:(M)=>{if(Q.length===0)return M;let H=P2(Q,M),V=Q[H];if(M===V.headerLayoutIndex)return-1;let A=M-V.headerLayoutIndex-1;return V.firstDataIndex+A},dataToLayoutIndex:(M)=>{if(Q.length===0)return M;let H=LJ(Q,M),V=Q[H],A=M-V.firstDataIndex;return V.headerLayoutIndex+1+A},getGroupAtLayoutIndex:(M)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=P2(Q,M);return Q[H]},getGroupAtDataIndex:(M)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=LJ(Q,M);return Q[H]},getHeaderHeight:typeof K==="number"?(M)=>K:(M)=>{let H=Q[M];if(!H)return 0;return K(H.key,M)},rebuild:(M)=>{Q=bJ(M,q.getGroupForIndex),j=M+Q.length}}};var B2=(J,q,Q,j,K,X=!1)=>{let U=document.createElement("div");if(U.className=`${K}-sticky-header`,U.setAttribute("role","presentation"),U.setAttribute("aria-hidden","true"),U.style.position="absolute",U.style.zIndex="5",U.style.pointerEvents="none",U.style.willChange="transform",U.style.overflow="hidden",X)U.style.top="0",U.style.bottom="0",U.style.left="0";else U.style.top="0",U.style.left="0",U.style.right="0";J.insertBefore(U,J.firstChild);let N=-1,_=!1,Y=0,W=(B)=>{if(B===N)return;N=B;let y=q.groups;if(B<0||B>=y.length){U.textContent="";return}let L=y[B],F=j.headerTemplate(L.key,L.groupIndex),O=q.getHeaderHeight(B);if(X)U.style.width=`${O}px`;else U.style.height=`${O}px`;if(typeof F==="string")U.innerHTML=F;else U.replaceChildren(F)},E=(B)=>{let y=q.groups;if(y.length===0){H();return}let L=Q.getOffset(y[0].headerLayoutIndex);if(B<L){H();return}let F=0,O=y.length-1;while(F<O){let G=F+O+1>>>1;if(Q.getOffset(y[G].headerLayoutIndex)<=B)F=G;else O=G-1}let D=F;if(!_)M();W(D);let $=q.getHeaderHeight(D),I=0,C=D+1;if(C<y.length){let p=Q.getOffset(y[C].headerLayoutIndex)-B;if(p<$)I=p-$}if(I!==Y)if(Y=I,I===0)U.style.transform="";else{let G=Math.round(I);U.style.transform=X?`translateX(${G}px)`:`translateY(${G}px)`}},M=()=>{if(_)return;_=!0,U.style.display=""},H=()=>{if(!_)return;_=!1,U.style.display="none",N=-1,Y=0,U.style.transform=""},V=()=>{let B=N;if(N=-1,B>=0)W(B)},A=()=>{U.remove(),N=-1,_=!1};return U.style.display="none",{update:E,refresh:V,show:M,hide:H,destroy:A}};var yJ=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let U=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,N)),X},TJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},HJ=(J,q,Q,j,K,X)=>{if(j===0)return 0;let U=Math.max(0,Math.min(J,j-1)),N=q.getOffset(U),_=q.getSize(U),Y=q.getTotalSize(),W=Math.max(0,Y-Q),E;switch(X){case"center":E=N-Q/2+_/2;break;case"end":E=N-Q+_;break;case"start":default:E=N;break}return Math.max(0,Math.min(E,W))},$J=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},PJ=(J,q)=>{return q.getTotalSize()},kJ=(J,q)=>{return q.getOffset(J)},RJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var k0=(J,q,Q,j,K="start",X,U=HJ)=>{return U(J,q,Q,j,X,K)},CJ=(J,q)=>{return J.start===q.start&&J.end===q.end},vJ=(J,q)=>{return J>=q.start&&J<=q.end},zJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var wJ=(J,q)=>{let Q=[],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)Q.push(K);return{add:Q,remove:j}};Q2();var fJ=(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,Q=null,j=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:U,config:N,rawConfig:_}=X,{classPrefix:Y}=N,E=_.item.height;j=_.items?[..._.items]:[];let M=j.length,H={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=U2(M,H),K=x0(j,q.groups);let V=m0(q,E);X.setSizeConfig(V),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let A=_.item.template,{headerTemplate:B}=J,y=(C,G,p)=>{if(P0(C))return B(C.groupKey,C.groupIndex);return A(C,G,p)},L=X.methods.get("_getGridLayout"),F=X.methods.get("_replaceGridRenderer"),O=X.methods.get("_updateGridLayoutForGroups");if(L&&F){if(O)O((t)=>{let w=K[t];return!!(w&&P0(w))});let{createGridRenderer:C}=(N2(),N1(SJ)),G=L(),p=C(U.items,y,X.sizeCache,G,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);F(p)}else X.replaceTemplate(y);if(U.root.classList.add(`${Y}--grouped`),J.sticky!==!1){Q=B2(U.root,q,X.sizeCache,{...H,sticky:H.sticky??!1},Y,N.horizontal);let C=Q;X.afterScroll.push((G,p)=>{C.update(G)}),Q.update(X.scrollController.getScrollTop())}let D=()=>{if(!q)return;q.rebuild(j.length),K=x0(j,q.groups);let C=m0(q,E);if(X.setSizeConfig(C),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),Q)Q.refresh()};X.methods.set("setItems",(C)=>{j=C.slice(),D()}),X.methods.set("appendItems",(C)=>{j.push(...C),D()}),X.methods.set("prependItems",(C)=>{j.unshift(...C),D()}),X.methods.set("removeItem",(C)=>{j=j.filter((G)=>G.id!==C),D()});let{animateScroll:$,cancelScroll:I}=i2(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(C,G)=>{let p=q.dataToLayoutIndex(C),{align:t,behavior:w,duration:h}=z0(G),Z=X.dataManager.getTotal(),R=k0(p,X.sizeCache,X.state.viewportState.containerSize,Z,t,X.getCachedCompression());if(w==="smooth")$(X.scrollController.getScrollTop(),R,h);else I(),X.scrollController.scrollTo(R)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(I(),Q)Q.destroy(),Q=null;U.root.classList.remove(`${Y}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var W2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,K={row:0,col:0},X=(V)=>{if(V<=0)return 0;if(!j)return Math.ceil(V/q);let A=0,B=0,y=0;for(let L=0;L<V;L++)if(j(L)){if(y++,B>0)A++,B=0;A++,B=0}else if(B++,B>=q)A++,B=0;if(B>0)A++;return A},U=(V)=>{return K.row=N(V),K.col=_(V),K},N=(V)=>{if(!j)return Math.floor(V/q);let A=0,B=0;for(let y=0;y<=V;y++)if(j(y)){if(B>0)A++,B=0;if(y===V)return A;A++,B=0}else{if(y===V)return A;if(B++,B>=q)A++,B=0}return console.warn(`⚠️ getRow(${V}) fell through - returning ${A}`),A},_=(V)=>{if(!j)return V%q;if(j(V))return 0;let A=0;for(let B=0;B<=V;B++)if(j(B))A=0;else{if(B===V)return A;if(A++,A>=q)A=0}return A},Y=(V,A,B)=>{if(B<=0)return{start:0,end:-1};if(!j){let D=Math.max(0,V*q),$=Math.min(B-1,(A+1)*q-1);return{start:D,end:$}}let y=-1,L=-1,F=0,O=0;for(let D=0;D<B;D++){if(j(D)){if(O>0)F++,O=0;if(F>=V&&F<=A){if(y===-1)y=D;L=D}F++,O=0}else{if(F>=V&&F<=A){if(y===-1)y=D;L=D}if(O++,O>=q)F++,O=0}if(F>A&&O===0)break}if(y===-1)return{start:0,end:-1};return{start:y,end:L}},W=(V,A,B)=>{if(A<0||A>=q)return-1;let y=V*q+A;if(y<0||y>=B)return-1;return y},E=(V)=>{let A=(q-1)*Q;return Math.max(0,(V-A)/q)};return{get columns(){return q},get gap(){return Q},update:(V)=>{if(V.columns!==void 0)q=Math.max(1,Math.floor(V.columns));if(V.gap!==void 0)Q=V.gap;if(V.isHeaderFn!==void 0)j=V.isHeaderFn},getTotalRows:X,getPosition:U,getRow:N,getCol:_,getItemRange:Y,getItemIndex:W,getColumnWidth:E,getColumnOffset:(V,A)=>{let B=E(A);return V*(B+Q)}}};N2();var R1=new Set,IJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:K,emitter:X,config:U,rawConfig:N}=j,{classPrefix:_}=U;if(U.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=U.horizontal,W=()=>Y?K.viewport.clientHeight:j.getContainerWidth(),E=N.items?.some((T)=>T.__groupHeader===!0),M={columns:J.columns,gap:J.gap??0};if(E)M.isHeaderFn=(T)=>{let P=j.dataManager.getItem(T);return!!(P&&P.__groupHeader===!0)};q=W2(M);let H=q.gap;j.setVirtualTotalFn(()=>{let T=j.dataManager.getTotal();return q.getTotalRows(T)});let V=N.item,A=U.horizontal?V.width:V.height,B={containerWidth:W(),columns:q.columns,gap:q.gap};if(typeof A==="function")j.setSizeConfig((T)=>{let P=B.containerWidth-2,k=(B.columns-1)*B.gap,S=(P-k)/B.columns,c={containerWidth:B.containerWidth,columns:B.columns,gap:B.gap,columnWidth:S,row:q.getRow(T),column:q.getCol(T),totalRows:q.getTotalRows(j.dataManager.getTotal()),totalColumns:B.columns};return A(T,c)+B.gap});else if(H>0)j.setSizeConfig(A+H);j.rebuildSizeCache(),K.root.classList.add(`${_}--grid`);let y=W(),L=N.item.template,F=()=>{Q=d0(K.items,L,j.sizeCache,q,_,y,()=>j.dataManager.getTotal(),U.ariaIdPrefix,U.horizontal),j.replaceRenderer(Q)};F(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>M),j.methods.set("_replaceGridRenderer",(T)=>{Q=T}),j.methods.set("_updateGridLayoutForGroups",(T)=>{q.update({isHeaderFn:T});let P=j.dataManager.getTotal(),k=0;for(let S=0;S<P;S++)if(q.getCol(S)===0){let c=j.sizeCache.getSize(S);k+=c}if(j.sizeCache.getTotalSize=()=>k,U.horizontal)j.dom.content.style.width=`${k}px`;else j.dom.content.style.height=`${k}px`;F()}),j.methods.set("updateGrid",(T)=>{if(T.columns!==void 0){if(!Number.isInteger(T.columns)||T.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");M.columns=T.columns}if(T.gap!==void 0){if(T.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");M.gap=T.gap}if(q)q.update(M);let P=W();if(B.containerWidth=P,B.columns=M.columns,B.gap=M.gap??0,Q)Q.updateContainerWidth(P);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let k=0;k<j.contentSizeHandlers.length;k++)j.contentSizeHandlers[k]();if(Q)Q.clear();j.forceRender()});let O=null,D=null,$=!1,I=()=>{if($)return;$=!0,O=j.methods.get("_getSelectedIds")??null,D=j.methods.get("_getFocusedIndex")??null},C=-1,G=-1,p=!0,t=U.overscan??3,w={start:0,end:0},h={start:0,end:0},Z=()=>{if(j.state.isDestroyed)return;let T=j.scrollController.getScrollTop(),P=j.state.viewportState.containerSize;if(!p&&T===C&&P===G)return;C=T,G=P,p=!1;let k=j.getVirtualTotal();if(k===0||P===0)w.start=0,w.end=0;else{w.start=Math.max(0,j.sizeCache.indexAtOffset(T));let l=j.sizeCache.indexAtOffset(T+P);if(l<k-1)l++;w.end=Math.min(k-1,Math.max(0,l))}h.start=Math.max(0,w.start-t),h.end=Math.min(k-1,w.end+t);let S=j.state.viewportState;S.scrollPosition=T,S.visibleRange.start=w.start,S.visibleRange.end=w.end,S.renderRange.start=h.start,S.renderRange.end=h.end;let c=j.state.lastRenderRange,j0=S.isCompressed,z=j.dataManager.getTotal(),u=q.getItemRange(h.start,h.end,z),a=j.dataManager.getItemsInRange(u.start,u.end),n=j0?j.getCompressionContext():void 0;I();let f=O?O():R1,x=D?D():-1;if(Q.render(a,u,f,x,n),c.start!==h.start||c.end!==h.end)c.start=h.start,c.end=h.end,X.emit("range:change",{range:{start:h.start,end:h.end}})},R=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,p=!0,Z()};j.setRenderFns(Z,R);let v=typeof A==="function";if(j.resizeHandlers.push((T,P)=>{let k=Y?P:T;if(B.containerWidth=k,Q)Q.updateContainerWidth(k);if(v){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let S=0;S<j.contentSizeHandlers.length;S++)j.contentSizeHandlers[S]();if(Q)Q.clear();j.forceRender()}}),j.methods.set("scrollToIndex",(T,P)=>{let k=Math.floor(T/J.columns),{align:S,behavior:c}=z0(P),j0=j.dataManager.getState(),z=q.getTotalRows(j0.total),u=Math.max(0,Math.min(k,z-1)),a=k0(u,j.sizeCache,j.state.viewportState.containerSize,z,S,j.getCachedCompression());if(c==="smooth")j.scrollController.scrollTo(a);else j.scrollController.scrollTo(a)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};N2();var D2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,K=0,X=[],U=()=>{let B=(q-1)*Q;K=Math.max(0,(j-B)/q),X=Array(q);let y=K+Q;for(let L=0;L<q;L++)X[L]=L*y};U();let N=[],_=0,Y=[],W=(B)=>{let y=0,L=B[0];for(let F=1;F<B.length;F++){let O=B[F];if(O<L)L=O,y=F}return y},E=(B,y)=>{if(B<=0)return _=0,N=[],[];let L=Array(q).fill(0),F=Array(q);for(let $=0;$<q;$++)F[$]=[];let O=Array(B);for(let $=0;$<B;$++){let I=W(L),C=y($),G=L[I];O[$]={index:$,x:X[I],y:G,lane:I,size:C,crossSize:K},F[I].push($),L[I]=G+C+Q}N=F;let D=0;for(let $=0;$<q;$++){let I=L[$],C=I>0?I-Q:0;if(C>D)D=C}return _=D,O},M=(B)=>{if(B.length===0)return _>0?_:0;if(_>0)return _;let y=Array(q).fill(0);for(let F of B){let O=F.y+F.size,D=y[F.lane];if(O>D)y[F.lane]=O}let L=0;for(let F=0;F<q;F++)if(y[F]>L)L=y[F];return L},H=(B,y,L)=>{if(B.length===0||L<=y)return Y.length=0,Y;if(N.length===0||N.length!==q)return V(B,y,L);Y.length=0;for(let F=0;F<q;F++){let O=N[F],D=O.length;if(D===0)continue;let $=0,I=D;while($<I){let C=$+I>>>1,G=B[O[C]];if(G.y+G.size<=y)$=C+1;else I=C}for(let C=$;C<D;C++){let G=B[O[C]];if(G.y>=L)break;Y.push(G)}}return Y},V=(B,y,L)=>{let F=[];for(let O of B)if(O.y+O.size>y&&O.y<L)F.push(O);return F};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(B)=>{let y=!1;if(B.columns!==void 0){let L=Math.max(1,Math.floor(B.columns));if(L!==q)q=L,y=!0}if(B.gap!==void 0&&B.gap!==Q)Q=B.gap,y=!0;if(B.containerSize!==void 0&&B.containerSize!==j)j=B.containerSize,y=!0;if(y)U()},calculateLayout:E,getTotalSize:M,getVisibleItems:H}};var C1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var _2=(J,q,Q,j=!1,K,X)=>{let U=C1(),N=new Map,_=new Set,Y=0,W="",E=-1,M={selected:!1,focused:!1},H=(G,p)=>{return M.selected=G,M.focused=p,M},V=`${Q}-item ${Q}-masonry-item`,A=`${Q}-item--selected`,B=`${Q}-item--focused`,y=(G,p)=>{if(typeof p==="string")G.innerHTML=p;else G.replaceChildren(p)},L=(G,p,t)=>{G.classList.toggle(A,p),G.classList.toggle(B,t)},F=(G,p)=>{if(j)G.style.transform=`translate(${Math.round(p.y)}px, ${Math.round(p.x)}px)`;else G.style.transform=`translate(${Math.round(p.x)}px, ${Math.round(p.y)}px)`},O=(G,p)=>{if(j)G.style.width=`${p.size}px`,G.style.height=`${p.crossSize}px`;else G.style.width=`${p.crossSize}px`,G.style.height=`${p.size}px`},D=(G,p,t,w,h)=>{let Z=U.acquire(),R=H(w,h);if(Z.className=V,Z.dataset.index=String(G),Z.dataset.id=String(p.id),Z.dataset.lane=String(t.lane),Z.ariaSelected=String(w),X)Z.id=`${X}-item-${G}`;if(K){let T=K();if(T!==E)E=T,W=String(T);Z.setAttribute("aria-setsize",W),Z.setAttribute("aria-posinset",String(G+1))}O(Z,t);let v=q(p,G,R);return y(Z,v),L(Z,w,h),F(Z,t),{element:Z,lastItemId:p.id,lastSelected:w,lastFocused:h,lastY:t.y,lastX:t.x,lastSeenFrame:Y}},$=(G,p,t,w)=>{Y++,_.clear();for(let Z=0;Z<p.length;Z++)_.add(p[Z].index);for(let[Z,R]of N)if(_.has(Z))R.lastSeenFrame=Y;else if(Y-R.lastSeenFrame>2)U.release(R.element),N.delete(Z);let h=null;for(let Z=0;Z<p.length;Z++){let R=p[Z],v=R.index,T=G(v);if(!T)continue;let P=t.has(T.id),k=v===w,S=N.get(v);if(S){let c=S.lastItemId!==T.id,j0=S.lastSelected!==P,z=S.lastFocused!==k,u=S.lastY!==R.y||S.lastX!==R.x;if(c||j0||z){let a=H(P,k),n=q(T,v,a);y(S.element,n),L(S.element,P,k),S.element.dataset.id=String(T.id),S.element.ariaSelected=String(P),S.lastItemId=T.id,S.lastSelected=P,S.lastFocused=k}if(u)F(S.element,R),S.lastY=R.y,S.lastX=R.x}else{let c=D(v,T,R,P,k);if(!h)h=document.createDocumentFragment();h.appendChild(c.element),N.set(v,c)}}if(h)J.appendChild(h)},I=()=>{for(let{element:G}of N.values())U.release(G);N.clear(),J.innerHTML=""};return{render:$,getElement:(G)=>N.get(G)?.element,clear:I,destroy:()=>{I(),U.clear()}}};var v1=new Set,pJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(K){let{dom:X,emitter:U,config:N,rawConfig:_}=K,Y=N.classPrefix,W=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${Y}--masonry`);let E=()=>{return W?X.viewport.clientHeight:X.viewport.clientWidth},M={columns:J.columns,gap:J.gap??0,containerSize:E()};q=D2(M);let H=_.item,V=typeof H.height==="function"?H.height:(T)=>H.height,A=W&&_.item.width?typeof _.item.width==="function"?_.item.width:(T)=>_.item.width:V,B=()=>{let T=K.dataManager.getTotal();j=q.calculateLayout(T,(k)=>{return A(k)});let P=q.getTotalSize(j);if(K.sizeCache.getTotalSize=()=>P,W)X.content.style.width=`${P}px`;else X.content.style.height=`${P}px`},y=_.item.template;Q=_2(X.items,y,Y,W,()=>K.dataManager.getTotal(),N.ariaIdPrefix);let L=null,F=null,O=!1,D=()=>{if(O)return;O=!0,L=K.methods.get("_getSelectedIds")??null,F=K.methods.get("_getFocusedIndex")??null},$=(T)=>K.dataManager.getItem(T),I=-1,C=-1,G=!0,p=(N.overscan??3)*100,t=()=>{if(K.state.isDestroyed)return;D();let T=K.scrollController.getScrollTop(),P=K.state.viewportState.containerSize;if(!G&&T===I&&P===C)return;I=T,C=P,G=!1;let k=Math.max(0,T-p),S=T+P+p,c=q.getVisibleItems(j,k,S),j0=L?L():v1,z=F?F():-1;if(Q&&c.length>0)Q.render($,c,j0,z);let u=K.state.viewportState;u.scrollPosition=T;let a=c.length,n=a>0?c[0].index:0,f=a>0?c[a-1].index:0;u.visibleRange.start=n,u.visibleRange.end=f,u.renderRange.start=n,u.renderRange.end=f;let x=K.state.lastRenderRange;if(x.start!==n||x.end!==f)x.start=n,x.end=f,U.emit("range:change",{range:{start:n,end:f}})},w=()=>{K.state.lastRenderRange.start=-1,K.state.lastRenderRange.end=-1,G=!0,t()};K.setRenderFns(t,w);let h=(T,P)=>{let k=W?P:T;if(q&&q.containerSize!==k)q.update({containerSize:k}),B(),w()};K.resizeHandlers.push(h);let Z=()=>{B(),w()},R=K.dataManager,v=(T)=>{if(typeof R[T]!=="function")return;let P=R[T].bind(R);R[T]=(...k)=>{P(...k),Z()}};v("setItems"),v("appendItems"),v("prependItems"),v("updateItem"),v("removeItem"),K.methods.set("scrollToIndex",(T,P,k)=>{let S=j[T];if(!S)return;let c=S.y,j0=K.state.viewportState.containerSize,z=c;if(P==="center")z=c-j0/2+S.size/2;else if(P==="end")z=c-j0+S.size;z=Math.max(0,z),K.scrollController.scrollTo(z,k==="smooth")}),B(),K.destroyHandlers.push(()=>{if(Q)Q.destroy();X.root.classList.remove(`${Y}--masonry`)})}}};var V2=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),c0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let K of q)j.add(K);return{...J,selected:j}},l0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},I0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return l0(J,[q]);else return c0(J,[q],Q)},G2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},M2=(J)=>({...J,selected:new Set}),k2=(J,q)=>{return J.focusedIndex=q,J},R2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},C2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},v2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},z2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var hJ=(J,q)=>{return J.selected.has(q)},r0=(J)=>{return Array.from(J.selected)},a0=(J,q)=>{let Q=[];for(let j of J.selected){let K=q(j);if(K)Q.push(K)}return Q};var uJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=V2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:U,emitter:N,config:_}=X,{classPrefix:Y,ariaIdPrefix:W}=_;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}let E=new Map,M=()=>{E.clear();let B=X.dataManager.getTotal(),y=X.dataManager.getCached();if(y===0)return;if(y>=B){for(let F=0;F<B;F++){let O=X.dataManager.getItem(F);if(O)E.set(O.id,F)}return}let L=X.dataManager.getStorage();if(L&&typeof L.getLoadedRanges==="function"){let F=L.getLoadedRanges();for(let O of F)for(let D=O.start;D<=O.end;D++){let $=X.dataManager.getItem(D);if($)E.set($.id,D)}}};N.on("load:end",({items:B,offset:y})=>{if(!B||B.length===0)return;if(y!==void 0)for(let L=0;L<B.length;L++){let F=B[L];if(F&&F.id!==void 0)E.set(F.id,y+L)}else M()}),M(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusedIndex});let{forceRender:H}=X.getRenderFns(),V=()=>{H();let B=(y)=>{let L=E.get(y);if(L===void 0)return;return X.dataManager.getItem(L)};N.emit("selection:change",{selected:r0(j),items:a0(j,B)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",U.root.appendChild(K);let A=K;N.on("selection:change",({selected:B})=>{let y=B.length;if(y===0)A.textContent="";else if(y===1)A.textContent="1 item selected";else A.textContent=`${y} items selected`}),X.clickHandlers.push((B)=>{if(X.state.isDestroyed)return;let L=B.target.closest("[data-index]");if(!L)return;let F=parseInt(L.dataset.index??"-1",10);if(F<0)return;let O=X.dataManager.getItem(F);if(!O)return;N.emit("item:click",{item:O,index:F,event:B}),j=k2(j,F),U.root.setAttribute("aria-activedescendant",`${W}-item-${F}`),j=I0(j,O.id,q),V()}),X.keydownHandlers.push((B)=>{if(X.state.isDestroyed)return;let y=X.dataManager.getTotal(),L=j.focusedIndex,F=!1,O=!1,D=j;switch(B.key){case"ArrowUp":D=R2(j,y),F=!0,O=!0;break;case"ArrowDown":D=C2(j,y),F=!0,O=!0;break;case"Home":D=v2(j,y),F=!0,O=!0;break;case"End":D=z2(j,y),F=!0,O=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let $=X.dataManager.getItem(j.focusedIndex);if($)D=I0(j,$.id,q);F=!0}break}if(F){B.preventDefault(),j=D;let $=j.focusedIndex;if($>=0){let I=X.dataManager.getState(),C=k0($,X.sizeCache,X.state.viewportState.containerSize,I.total,"center",X.getCachedCompression());X.scrollController.scrollTo(C),U.root.setAttribute("aria-activedescendant",`${W}-item-${$}`)}else U.root.removeAttribute("aria-activedescendant");if(O){let{selected:I}=j;if(L>=0&&L!==$){let C=X.dataManager.getItem(L);if(C)X.renderer.updateItemClasses(L,I.has(C.id),!1)}if($>=0){let C=X.dataManager.getItem($);if(C)X.renderer.updateItemClasses($,I.has(C.id),!0)}}else V()}}),X.methods.set("select",(...B)=>{j=c0(j,B,q),V()}),X.methods.set("deselect",(...B)=>{j=l0(j,B),V()}),X.methods.set("toggleSelect",(B)=>{j=I0(j,B,q),V()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let B=X.getAllLoadedItems();j=G2(j,B,q),M(),V()}),X.methods.set("clearSelection",()=>{j=M2(j),V()}),X.methods.set("getSelected",()=>{return r0(j)}),X.methods.set("getSelectedItems",()=>{return a0(j,(y)=>{let L=E.get(y);if(L===void 0)return;return X.dataManager.getItem(L)})}),X.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var gJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let K=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),U=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),_=N&&N().length>0?N():void 0;if(U===0){let M={index:0,offsetInItem:0,total:0};if(_)M.selectedIds=_;return M}let Y,W;if(X.isCompressed){let H=K/X.virtualSize*U;Y=Math.max(0,Math.min(Math.floor(H),U-1)),W=(H-Y)*Q.sizeCache.getSize(Y)}else Y=Q.sizeCache.indexAtOffset(K),W=K-Q.sizeCache.getOffset(Y);W=Math.max(0,W);let E={index:Y,offsetInItem:W,total:U};if(_)E.selectedIds=_;return E});let j=(K)=>{let{index:X,offsetInItem:U,selectedIds:N}=K,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(U))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let B=Q.getCachedCompression();Q.updateContentSize(B.virtualSize)}let W=Q.getCachedCompression(),E=Math.max(0,Math.min(X,_-1)),M;if(W.isCompressed){let B=Q.sizeCache.getSize(E),y=B>0?U/B:0;M=(E+y)/_*W.virtualSize}else M=Q.sizeCache.getOffset(E)+U;let H=Q.state.viewportState.containerSize,V=Math.max(0,W.virtualSize-H);if(M=Math.max(0,Math.min(M,V)),Q.scrollController.scrollTo(M),N&&N.length>0){let B=Q.methods.get("select");if(B)B(...N)}let A=Q.methods.get("loadVisibleRange");if(A)requestAnimationFrame(()=>{A()});else{let B=Q.methods.get("reload");if(B)requestAnimationFrame(()=>{B()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};export{gJ as withSnapshots,uJ as withSelection,fJ as withSections,GJ as withScrollbar,AJ as withScale,FJ as withPage,pJ as withMasonry,IJ as withGrid,EJ as withAsync,qJ as vlist,I0 as toggleSelection,yJ as simpleVisibleRange,c0 as selectItems,G2 as selectAll,CJ as rangesEqual,q2 as rafThrottle,DJ as needsScaling,Y2 as mergeRanges,hJ as isSelected,P0 as isSectionHeader,$0 as isPlaceholderItem,vJ as isInRange,a0 as getSelectedItems,r0 as getSelectedIds,L0 as getScaleState,VJ as getScaleInfo,L0 as getScale,zJ as getRangeCount,_J as getMaxItemsWithoutScaling,$2 as filterPlaceholders,wJ as diffRanges,l0 as deselectItems,B2 as createStickyHeader,X2 as createSparseStorage,y0 as createSizeCache,V2 as createSelectionState,m0 as createSectionedSizeFn,U2 as createSectionLayout,f0 as createScrollbar,OJ as createScrollController,K2 as createPlaceholderManager,i0 as createMeasuredSizeCache,_2 as createMasonryRenderer,D2 as createMasonryLayout,d0 as createGridRenderer,W2 as createGridLayout,t0 as createEmitter,Z2 as createAsyncManager,M2 as clearSelection,RJ as clampScrollPosition,$J as calculateTotalSize,k0 as calculateScrollToIndex,e0 as calculateScaledVisibleRange,J2 as calculateScaledScrollToIndex,NJ as calculateScaledRenderRange,S0 as calculateScaledItemPosition,TJ as calculateRenderRange,g0 as calculateMissingRanges,kJ as calculateItemOffset,WJ as calculateIndexFromScrollPosition,PJ as calculateActualSize,x0 as buildLayoutItems,H0 as MAX_VIRTUAL_HEIGHT};
|
|
1
|
+
var{defineProperty:F2,getOwnPropertyNames:tJ,getOwnPropertyDescriptor:eJ}=Object,J1=Object.prototype.hasOwnProperty;var h2=new WeakMap,Q1=(J)=>{var q=h2.get(J),Q;if(q)return q;if(q=F2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")tJ(J).map((j)=>!J1.call(q,j)&&F2(q,j,{get:()=>J[j],enumerable:!(Q=eJ(J,j))||Q.enumerable}));return h2.set(J,q),q};var j1=(J,q)=>{for(var Q in q)F2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var u2=(J,q)=>()=>(J&&(q=J(J=0)),q);var q1=(J,q)=>{let Q=q;return{getOffset:(j)=>j*J,getSize:(j)=>J,indexAtOffset:(j)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(j/J),Q-1))},getTotalSize:()=>Q*J,getTotal:()=>Q,rebuild:(j)=>{Q=j},isVariable:()=>!1}},X1=(J,q)=>{let Q=q,j=new Float64Array(0),K=(U)=>{Q=U,j=new Float64Array(U+1),j[0]=0;for(let N=0;N<U;N++)j[N+1]=j[N]+J(N)};K(q);let X=(U)=>{if(Q===0)return 0;if(U<=0)return 0;if(U>=j[Q])return Q-1;let N=0,D=Q-1;while(N<D){let Y=N+D+1>>>1;if(j[Y]<=U)N=Y;else D=Y-1}return N};return{getOffset:(U)=>{if(U<=0)return 0;if(U>=Q)return j[Q];return j[U]},getSize:(U)=>J(U),indexAtOffset:(U)=>X(U),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(U)=>K(U),isVariable:()=>!0}},T0=(J,q)=>{if(typeof J==="number")return q1(J,q);return X1(J,q)},u0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let K=0,X=0,U=q;while(U<j&&X<Q)X+=J.getSize(U),K++,U++;return Math.max(1,K)},o0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,K=0;for(let X=Q-1;X>=0;X--){let U=J.getSize(X);if(K+U>q)break;K+=U,j++}return Math.max(j,1)},L2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),K=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+K*J.getSize(X)};var y2=200,z0=50,JJ=5,QJ=2,jJ=50,k0=16000000,qJ="x",XJ=20,T2="_isPlaceholder",YJ="__placeholder_";var F0=(J,q)=>{let Q=q.getTotalSize(),j=Q>k0,K=j?k0:Q,X=Q>0?K/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:K,ratio:X}},e0=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let V=Q.indexAtOffset(J),A=Q.indexAtOffset(J+q);if(A<j-1)A++;return X.start=Math.max(0,V),X.end=Math.min(j-1,Math.max(0,A)),X}let{virtualSize:U}=K,D=J/U*j,Y=Math.floor(D),W=u0(Q,Math.max(0,Y),q,j),F=Math.ceil(D)+W,H=U-q-J;if(H<=q&&H>=-1){let V=o0(Q,q,j),A=Math.max(0,j-V),B=Math.max(0,Math.min(1,1-H/q));Y=Math.floor(Y+(A-Y)*B),F=H<=1?j-1:Math.min(j-1,Y+W)}return X.start=Math.max(0,Y),X.end=Math.min(j-1,Math.max(0,F)),X},KJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},w0=(J,q,Q,j,K,X,U)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,D=N-K,Y=D-q;if(Y<=K&&Y>=-1){if(q>=D-1){let O=Q.getTotalSize()-Q.getOffset(J);return K-O}let H=o0(Q,K,j),V=Math.max(0,j-H),B=q/N*j,y=Math.max(0,Math.min(1,1-Y/K)),L=Q.getOffset(J)-Q.getOffset(V),E=Q.getOffset(J)-L2(Q,B,j);return E+(L-E)*y}let W=q/N,F=Q.getTotalSize(),M=W*F;return Q.getOffset(J)-M},J2=(J,q,Q,j,K,X="start")=>{if(j===0)return 0;let U;if(K.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,K.virtualSize-Q);U=J/j*K.virtualSize}else U=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":U-=(Q-N)/2;break;case"end":U-=Q-N;break}let D=K.virtualSize-Q;return Math.max(0,Math.min(U,D))},ZJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let K=J/j.virtualSize;return Math.floor(K*Q)}return q.indexAtOffset(J)},UJ=(J,q)=>{if(typeof q==="number")return J*q>k0;return q.getTotalSize()>k0},BJ=(J)=>{if(J<=0)return 0;return Math.floor(k0/J)},NJ=(J,q)=>{let Q=F0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var Q2=()=>{};var R0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var CJ={};j1(CJ,{createGridRenderer:()=>d0});var A1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),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}}},F1=2,d0=(J,q,Q,j,K,X,U,N,D=!1)=>{let Y=A1(),W=new Map,F=X,M=!1,H=null,V=0,A=0,B="",y=-1,L=(z)=>{if(H&&V===z)return H;return H=F0(z,Q),V=z,H},E={selected:!1,focused:!1},O=(z,S)=>{return E.selected=z,E.focused=S,E},_=`${K}-item ${K}-grid-item`,$=`${K}-item--selected`,h=`${K}-item--focused`,v=(z,S)=>{if(typeof S==="string")z.innerHTML=S;else z.replaceChildren(S)},G=(z,S,c)=>{z.classList.toggle($,S),z.classList.toggle(h,c)},p=(z,S)=>{let c=j.getRow(z);if(S){let a=S.totalItems,I=L(a);if(I.isCompressed)return w0(c,S.scrollPosition,Q,a,S.containerSize,I,S.rangeStart)}return Q.getOffset(c)},i=(z,S)=>{let c=M&&j.getCol(z)===0,a=c?0:j.getCol(z),I=c?0:j.getColumnOffset(a,F),m;if(M){let o=j.getRow(z),e=0,t=new Set;for(let q0=0;q0<z;q0++){let Y0=j.getRow(q0);if(Y0<o&&!t.has(Y0)){let g=Q.getSize(q0);e+=g,t.add(Y0)}}m=e}else m=p(z,S);if(D)return`translate(${Math.round(m)}px, ${Math.round(I)}px)`;return`translate(${Math.round(I)}px, ${Math.round(m)}px)`},w=(z,S)=>{z.style.transform=S},u=(z,S)=>{let c=z.dataset.id?.startsWith("__group_header"),a=c?F:j.getColumnWidth(F),I;if(M||c)I=Q.getSize(S)-j.gap;else{let m=j.getRow(S);I=Q.getSize(m)-j.gap}if(D)z.style.width=`${I}px`,z.style.height=`${a}px`;else z.style.width=`${a}px`,z.style.height=`${I}px`},Z=(z,S,c,a,I)=>{let m=Y.acquire(),o=O(c,a);if(m.className=_,m.dataset.index=String(z),m.dataset.id=String(S.id),m.dataset.row=String(j.getRow(z)),m.dataset.col=String(j.getCol(z)),m.ariaSelected=String(c),N)m.id=`${N}-item-${z}`;if(U){let t=U();if(t!==y)y=t,B=String(t);m.setAttribute("aria-setsize",B),m.setAttribute("aria-posinset",String(z+1))}u(m,z);let e=q(S,z,o);return v(m,e),G(m,c,a),w(m,I),{element:m,lastItemId:S.id,lastSelected:c,lastFocused:a,lastTransform:I,lastSeenFrame:A}},P=(z,S,c,a,I)=>{if(A++,S.start===0&&z.length>0)M=R0(z[0]);for(let[e,t]of W)if(e>=S.start&&e<=S.end)t.lastSeenFrame=A;else if(A-t.lastSeenFrame>F1)Y.release(t.element),W.delete(e);let m=!1;if(U){let e=U();if(e!==y)y=e,B=String(e),m=!0}let o=null;for(let e=S.start;e<=S.end;e++){let t=e-S.start,q0=z[t];if(!q0){console.warn(`⚠️ RENDER: Missing item at index ${e} (range: ${S.start}-${S.end}, items.length: ${z.length})`);continue}let Y0=c.has(q0.id),g=e===a,d=W.get(e);if(d){let J0=d.lastItemId!==q0.id,n=d.lastSelected!==Y0,U0=d.lastFocused!==g;if(J0||n||U0){if(J0){let M0=O(Y0,g),E0=q(q0,e,M0);v(d.element,E0),d.element.dataset.id=String(q0.id),d.element.dataset.row=String(j.getRow(e)),d.element.dataset.col=String(j.getCol(e)),u(d.element,e)}G(d.element,Y0,g),d.element.ariaSelected=String(Y0),d.lastItemId=q0.id,d.lastSelected=Y0,d.lastFocused=g}let K0=i(e,I);if(d.lastTransform!==K0)w(d.element,K0),d.lastTransform=K0;if(m)d.element.setAttribute("aria-setsize",B)}else{let J0=i(e,I),n=Z(e,q0,Y0,g,J0);if(!o)o=document.createDocumentFragment();o.appendChild(n.element),W.set(e,n)}}if(o)J.appendChild(o)},C=(z)=>{for(let[S,c]of W){let a=i(S,z);if(c.lastTransform!==a)w(c.element,a),c.lastTransform=a}},T=(z,S,c,a)=>{let I=W.get(z);if(!I)return;let m=I.lastItemId!==S.id,o=I.lastSelected!==c,e=I.lastFocused!==a;if(m||o||e){let t=O(c,a),q0=q(S,z,t);v(I.element,q0),G(I.element,c,a),I.element.dataset.id=String(S.id),I.element.ariaSelected=String(c),u(I.element,z),I.lastItemId=S.id,I.lastSelected=c,I.lastFocused=a}},k=(z,S,c)=>{let a=W.get(z);if(!a)return;let I=a.lastSelected!==S,m=a.lastFocused!==c;if(I||m)G(a.element,S,c),a.lastSelected=S,a.lastFocused=c},R=(z)=>{return W.get(z)?.element},f=(z)=>{if(Math.abs(z-F)<1)return;F=z;for(let[S,c]of W){u(c.element,S);let a=i(S);w(c.element,a),c.lastTransform=a}},r=()=>{for(let[,z]of W)Y.release(z.element);W.clear()};return{render:P,updatePositions:C,updateItem:T,updateItemClasses:k,getElement:R,updateContainerWidth:f,clear:r,destroy:()=>{r(),Y.clear()}}};var N2=u2(()=>{Q2()});var g2=2,x2=(J=0)=>{let q=[,,,,,];for(let Q=0;Q<5;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},E2=(J,q)=>{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 X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,U=J.samples[X],N=q-U.position,D=Q-U.time;J.velocity=D>0?Math.abs(N)/D:0}return J.lastPosition=q,J.lastTime=Q,J};var i0=(J,q)=>{let Q=new Map,j=(X)=>{let U=Q.get(X);return U!==void 0?U:J},K=T0(j,q);return{getOffset(X){return K.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return K.indexAtOffset(X)},getTotalSize(){return K.getTotalSize()},getTotal(){return K.getTotal()},rebuild(X){if(X<K.getTotal()){for(let U of Q.keys())if(U>=X)Q.delete(U)}K=T0(j,X)},isVariable(){return!0},setMeasuredSize(X,U){Q.set(X,U)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var t0=()=>{let J={},q=(N,D)=>{if(!J[N])J[N]=new Set;return J[N].add(D),()=>Q(N,D)},Q=(N,D)=>{J[N]?.delete(D)};return{on:q,off:Q,emit:(N,D)=>{J[N]?.forEach((Y)=>{try{Y(D)}catch(W){console.error(`[vlist] Error in event handler for "${String(N)}":`,W)}})},once:(N,D)=>{let Y=(W)=>{Q(N,Y),D(W)};return q(N,Y)},clear:(N)=>{if(N)delete J[N];else for(let D in J)delete J[D]},listenerCount:(N)=>{return J[N]?.size??0}}};var m2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},d2=(J,q,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"),Q)K.setAttribute("aria-label",Q);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 U=document.createElement("div");if(U.className=`${q}-content`,U.style.position="relative",j)U.style.height="100%";else U.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return U.appendChild(N),X.appendChild(U),K.appendChild(X),J.appendChild(K),{root:K,viewport:X,content:U,items:N}};var c2=(J=100)=>{let q=[];return{acquire:()=>{let Q=q.pop();if(Q)return Q;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:(Q)=>{if(q.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),q.push(Q)},clear:()=>{q.length=0}}};var l2=(J,q,Q,j,K)=>{if(j===0||q===0){K.start=0,K.end=0;return}let X=Q.indexAtOffset(J),U=u0(Q,X,q,j),N=X+U;K.start=Math.max(0,X),K.end=Math.min(j-1,Math.max(0,N))},r2=(J,q,Q,j)=>{if(Q===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q)},a2=(J,q,Q,j,K)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),U=q.getOffset(X),N=q.getSize(X),D=Math.max(0,q.getTotalSize()-Q),Y;switch(K){case"center":Y=U-(Q-N)/2;break;case"end":Y=U-Q+N;break;default:Y=U}return Math.max(0,Math.min(Y,D))};var b2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,v0=(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}},s2=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,U,N)=>{if(j(),Math.abs(U-X)<1){J.scrollTo(U);return}let D=performance.now(),Y=(W)=>{let F=W-D,M=Math.min(F/N,1),H=X+(U-X)*b2(M);if(J.scrollTo(H),q(),M<1)Q=requestAnimationFrame(Y);else Q=null};Q=requestAnimationFrame(Y)},cancelScroll:j}};var n2=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:K,rawConfig:X,rendered:U,pool:N,sharedState:D,isHorizontal:Y,classPrefix:W,contentSizeHandlers:F,afterScroll:M,clickHandlers:H,keydownHandlers:V,resizeHandlers:A,destroyHandlers:B,methods:y,onScrollFrame:L,resizeObserver:E,renderRange:O}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return K},get rawConfig(){return X},get renderer(){return{render:(_,$,h,v,G)=>{J.ss=h,J.fi=v,J.ffn()},updateItemClasses:(_,$,h)=>{let v=U.get(_);if(!v)return;v.classList.toggle(`${W}-item--selected`,$),v.classList.toggle(`${W}-item--focused`,h),v.ariaSelected=$?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(_)=>U.get(_)??null,clear:()=>{},destroy:()=>{}}},set renderer(_){},get dataManager(){return J.dm},set dataManager(_){J.dm=_},get scrollController(){return J.sc},set scrollController(_){J.sc=_},state:D,getContainerWidth(){return J.cw},afterScroll:M,clickHandlers:H,keydownHandlers:V,resizeHandlers:A,contentSizeHandlers:F,destroyHandlers:B,methods:y,replaceTemplate(_){J.at=_},replaceRenderer(_){},replaceDataManager(_){J.dm=_},replaceScrollController(_){J.sc=_},getItemsForRange(_){let{dm:$,it:h}=J,v=[];for(let G=_.start;G<=_.end;G++){let p=$?$.getItem(G):h[G];if(p)v.push(p)}return v},getAllLoadedItems(){let _=J.dm;if(_){let $=_.getTotal(),h=[];for(let v=0;v<$;v++){let G=_.getItem(v);if(G)h.push(G)}return h}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let _=J.hc;return{isCompressed:!1,actualSize:_.getTotalSize(),virtualSize:_.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:O.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,_]of U)_.remove(),N.release(_);U.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(_,$){J.rfn=_,J.ffn=$},setVirtualTotalFn(_){J.vtf=_},rebuildSizeCache(_){J.hc.rebuild(_??J.vtf())},setSizeConfig(_){J.hc=T0(_,J.vtf())},updateContentSize(_){let $=`${_}px`;if(Y)Q.content.style.width=$;else Q.content.style.height=$},updateCompressionMode(){},setVisibleRangeFn(_){J.gvr=_},setScrollToPosFn(_){J.gsp=_},setPositionElementFn(_){J.pef=_},setScrollFns(_,$){J.sgt=_,J.sst=(h)=>{$(h),L()}},setScrollTarget(_){J.st.removeEventListener("scroll",L),J.st=_,J.st.addEventListener("scroll",L,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(_){J.gcw=_.width,J.gch=_.height,J.cw=_.width(),J.ch=_.height(),D.viewportState.containerSize=Y?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,E.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},o2=(J,q,Q)=>{let{rendered:j,itemState:K,contentSizeHandlers:X,applyTemplate:U,updateContentSize:N}=q,D=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let Y=0;Y<X.length;Y++)X[Y]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>J.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<J.it.length&&J.it[Y]!==void 0,getItemsInRange:(Y,W)=>{let F=J.it,M=[],H=Math.max(0,Y),V=Math.min(W,F.length-1);for(let A=H;A<=V;A++)M.push(F[A]);return M},setTotal:(Y)=>{},setItems:(Y,W=0,F)=>{let M=J.it;if(W===0&&(F!==void 0||M.length===0))J.it=Y;else{let H=W+Y.length;if(M.length<H)M.length=H;for(let V=0;V<Y.length;V++)M[W+V]=Y[V]}if(J.ii)D()},updateItem:(Y,W)=>{let F=J.it;if(Y<0||Y>=F.length)return!1;let M=F[Y];if(!M)return!1;F[Y]={...M,...W};let H=j.get(Y);if(H)U(H,J.at(F[Y],Y,K)),H.dataset.id=String(F[Y].id);return!0},removeItem:(Y)=>{if(Y<0||Y>=J.it.length)return!1;if(J.it.splice(Y,1),J.ii)D();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},i2=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(K)=>{J.sst(K),J.ls=K,J.rfn()},scrollBy:(K)=>{let X=J.sgt()+K;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(K=2)=>J.sab(K),getScrollPercentage:()=>{let K=J.hc.getTotalSize(),X=Math.max(0,K-J.ch);return X>0?J.ls/X:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>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 Y1=3,K1="vlist",t2=150,Z1=0,e2=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",K=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(K==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(K!=null){if(typeof K==="number"&&K<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof K!=="number"&&typeof K!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let U=new Map,N=!1,D={use(Y){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return U.set(Y.name,Y),D},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,U1(J,U,q,K,X??null)}};return D};function U1(J,q,Q,j,K){let{item:X,items:U,overscan:N=Y1,classPrefix:D=K1,ariaLabel:Y,reverse:W=!1,scroll:F}=J,M=F,H=M?.wheel??!0,V=M?.wrap??!1,A=W,B=`${D}-${Z1++}`,y=j??K,L=j==null&&K!=null,E=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,O=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,_={overscan:N,classPrefix:D,reverse:A,wrap:V,horizontal:Q,ariaIdPrefix:B},$=Array.from(q.values()).sort((b,x)=>(b.priority??50)-(x.priority??50)),h=new Set($.map((b)=>b.name));for(let b of $)if(b.conflicts){for(let x of b.conflicts)if(h.has(x))throw Error(`[vlist/builder] ${b.name} and ${x} cannot be combined`)}if(A){if(h.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let v=m2(J.container),G=d2(v,D,Y,Q);if(M?.wheel===!1)if(Q)G.viewport.style.overflowX="hidden";else G.viewport.style.overflow="hidden";if(M?.scrollbar==="none")G.viewport.classList.add(`${D}-viewport--no-scrollbar`);let p=t0(),i=U||[],w=L?i0(K,i.length):T0(y,i.length),u=c2(),Z={it:i,hc:w,ch:G.viewport.clientHeight,cw:G.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:x2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>G.viewport.scrollLeft:()=>G.viewport.scrollTop,sst:Q?(b)=>{G.viewport.scrollLeft=b}:(b)=>{G.viewport.scrollTop=b},sab:(b=2)=>{let x=Z.hc.getTotalSize();return Z.ls+Z.ch>=x-b},sic:!1,rfn:null,ffn:null,gvr:(b,x,l,s,j0)=>{l2(b,x,l,s,j0)},gsp:(b,x,l,s,j0)=>{return a2(b,x,l,s,j0)},pef:null,at:X.template,vre:!0,st:G.viewport,wh:null,gcw:()=>Z.cw,gch:()=>Z.ch};Z.vtf=()=>Z.dm?Z.dm.getTotal():Z.it.length;let P=null,C=null,T=!1,k={start:0,end:0},R={start:0,end:0},f={start:-1,end:-1},r={viewportState:{scrollPosition:0,containerSize:Q?Z.cw:Z.ch,totalSize:Z.hc.getTotalSize(),actualSize:Z.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},Q0=new Map,z=L?new WeakMap:null,S=L?w:null,c=null,a=0,I=!1,m=()=>{if(!L)return;if(I){let b=Z.sgt(),x=Q?G.viewport.scrollWidth-G.viewport.clientWidth:G.viewport.scrollHeight-G.viewport.clientHeight,l=x>0&&b>=x-2;if(B0(),I=!1,l){let s=Math.max(0,Z.hc.getTotalSize()-(Q?Z.cw:Z.ch));if(s>b)Z.sst(s),Z.ls=s,Z.rfn()}}};if(L&&S&&z)c=new ResizeObserver((b)=>{if(Z.id)return;let x=!1,l=k.start;for(let s of b){let j0=z.get(s.target);if(j0===void 0)continue;let Z0=Q?s.borderBoxSize[0].inlineSize:s.borderBoxSize[0].blockSize;if(!S.isMeasured(j0)){let W0=S.getSize(j0);if(S.setMeasuredSize(j0,Z0),x=!0,j0<l&&Z0!==W0)a+=Z0-W0;c.unobserve(s.target);let A0=s.target;if(Q)A0.style.width=`${Z0}px`;else A0.style.height=`${Z0}px`}}if(!x)return;if(S.rebuild(Z.vtf()),Z.hc=S,a!==0){let s=Z.sgt();Z.sst(s+a),Z.ls=s+a,a=0}if(T)I=!0;else{let s=Z.sgt(),j0=Q?G.viewport.scrollWidth-G.viewport.clientWidth:G.viewport.scrollHeight-G.viewport.clientHeight,Z0=j0>0&&s>=j0-2;if(B0(),I=!1,Z0){let W0=Math.max(0,Z.hc.getTotalSize()-(Q?Z.cw:Z.ch));if(W0>s)Z.sst(W0),Z.ls=W0}}f.start=-1,f.end=-1,Z.rfn()});let o={selected:!1,focused:!1},e=`${D}-item`,t=[],q0=[],Y0=[],g=[],d=[],J0=[],n=new Map,U0=null,K0=null,M0=!1,E0=()=>{if(M0)return;M0=!0,U0=n.get("_getSelectedIds")??null,K0=n.get("_getFocusedIndex")??null},N0=(b,x)=>{if(typeof x==="string")b.innerHTML=x;else b.replaceChildren(x)},H0=(b,x)=>{let l=Math.round(Z.hc.getOffset(x));if(Q)b.style.transform=`translateX(${l}px)`;else b.style.transform=`translateY(${l}px)`};Z.pef=H0;let $0=(b,x)=>{let l=u.acquire();l.className=e;let s=!L||S&&S.isMeasured(b);if(Q){if(s)l.style.width=`${Z.hc.getSize(b)}px`;else l.style.width="";if(O!=null)l.style.height=`${O}px`}else if(s)l.style.height=`${Z.hc.getSize(b)}px`;else l.style.height="";if(l.dataset.index=String(b),l.dataset.id=String(x.id),l.ariaSelected="false",l.id=`${B}-item-${b}`,Z.la=String(Z.vtf()),l.setAttribute("aria-setsize",Z.la),l.setAttribute("aria-posinset",String(b+1)),String(x.id).startsWith("__placeholder_"))l.classList.add(`${D}-item--placeholder`);return N0(l,Z.at(x,b,o)),Z.pef(l,b),l},B0=()=>{let b=`${Z.hc.getTotalSize()}px`;if(Q)G.content.style.width=b;else G.content.style.height=b},L0=()=>{if(Z.id)return;E0();let b=U0?U0():Z.ss,x=K0?K0():Z.fi,l=Z.vtf(),s=Q?Z.cw:Z.ch;if(Z.gvr(Z.ls,s,Z.hc,l,k),r2(k,N,l,R),R.start===f.start&&R.end===f.end){if(Z.sic)for(let[X0,_0]of Q0)Z.pef(_0,X0);return}let j0=String(l),Z0=j0!==Z.la;Z.la=j0;for(let[X0,_0]of Q0)if(X0<R.start||X0>R.end)_0.remove(),u.release(_0),Q0.delete(X0);let W0=document.createDocumentFragment(),A0=[],I0=[];for(let X0=R.start;X0<=R.end;X0++){let _0=Z.dm?Z.dm.getItem(X0):Z.it[X0];if(!_0)continue;let G0=Q0.get(X0);if(G0){let y0=G0.dataset.id,p0=String(_0.id);if(y0!==p0){let iJ=y0?.startsWith("__placeholder_"),I2=p0.startsWith("__placeholder_");N0(G0,Z.at(_0,X0,o)),G0.dataset.id=p0;let p2=!L||S&&S.isMeasured(X0);if(Q)G0.style.width=p2?`${Z.hc.getSize(X0)}px`:"";else G0.style.height=p2?`${Z.hc.getSize(X0)}px`:"";if(I2)G0.classList.add(`${D}-item--placeholder`);else G0.classList.remove(`${D}-item--placeholder`);if(iJ&&!I2)G0.classList.add(`${D}-item--replaced`),setTimeout(()=>{G0.classList.remove(`${D}-item--replaced`)},300)}Z.pef(G0,X0);let n0=b.has(_0.id),oJ=X0===x;if(G0.classList.toggle(`${D}-item--selected`,n0),G0.classList.toggle(`${D}-item--focused`,oJ),G0.ariaSelected=n0?"true":"false",Z0)G0.setAttribute("aria-setsize",Z.la)}else{let y0=$0(X0,_0);I0.push({index:X0,element:y0});let p0=b.has(_0.id),n0=X0===x;if(p0)y0.classList.add(`${D}-item--selected`),y0.ariaSelected="true";if(n0)y0.classList.add(`${D}-item--focused`);W0.appendChild(y0),A0.push({index:X0,element:y0})}}if(A0.length>0){G.items.appendChild(W0);for(let{index:X0,element:_0}of A0)Q0.set(X0,_0)}if(L&&c&&S&&z){for(let{index:X0,element:_0}of I0)if(!S.isMeasured(X0))z.set(_0,X0),c.observe(_0)}f.start=R.start,f.end=R.end,r.lastRenderRange.start=R.start,r.lastRenderRange.end=R.end,r.viewportState.scrollPosition=Z.ls,r.viewportState.visibleRange.start=k.start,r.viewportState.visibleRange.end=k.end,r.viewportState.renderRange.start=R.start,r.viewportState.renderRange.end=R.end,p.emit("range:change",{range:{start:R.start,end:R.end}})},D0=()=>{f.start=-1,f.end=-1,Z.rfn()};Z.rfn=L0,Z.ffn=D0;let O0=()=>{if(Z.id)return;let b=Z.sgt(),x=b>=Z.ls?"down":"up";if(Z.vt=E2(Z.vt,b),!G.root.classList.contains(`${D}--scrolling`))G.root.classList.add(`${D}--scrolling`);T=!0,Z.ls=b,Z.rfn(),p.emit("scroll",{scrollPosition:b,direction:x}),p.emit("velocity:change",{velocity:Z.vt.velocity,reliable:Z.vt.sampleCount>=g2});for(let l=0;l<t.length;l++)t[l](b,x);if(C)clearTimeout(C);C=setTimeout(()=>{G.root.classList.remove(`${D}--scrolling`),T=!1,Z.vt.velocity=0,Z.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),m()},M?.idleTimeout??t2)},b0=null;if(Z.st.addEventListener("scroll",O0,{passive:!0}),H&&!Q&&!E)b0=(b)=>{b.preventDefault();let x=Z.sgt(),l=b.deltaY,s=Math.max(0,Math.min(x+l,Z.hc.getTotalSize()-Z.ch));Z.sst(s),Z.ls=s,Z.vt=E2(Z.vt,s),Z.rfn();let j0=s>=x?"down":"up";if(p.emit("scroll",{scrollPosition:s,direction:j0}),!G.root.classList.contains(`${D}--scrolling`))G.root.classList.add(`${D}--scrolling`);if(T=!0,C)clearTimeout(C);C=setTimeout(()=>{G.root.classList.remove(`${D}--scrolling`),T=!1,Z.vt.velocity=0,Z.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),m()},M?.idleTimeout??t2)},Z.wh=b0,G.viewport.addEventListener("wheel",b0,{passive:!1});else if(Q&&H)b0=(b)=>{if(b.deltaX)return;b.preventDefault(),G.viewport.scrollLeft+=b.deltaY},Z.wh=b0,G.viewport.addEventListener("wheel",b0,{passive:!1});let z2=(b)=>{let l=b.target.closest("[data-index]");if(l){let s=parseInt(l.dataset.index??"-1",10);if(s>=0){let j0=Z.dm?.getItem(s)??Z.it[s];if(j0){if(j0.__groupHeader)return;p.emit("item:click",{item:j0,index:s,event:b})}}}for(let s=0;s<q0.length;s++)q0[s](b)},pJ=(b)=>{let l=b.target.closest("[data-index]");if(l){let s=parseInt(l.dataset.index??"-1",10);if(s>=0){let j0=Z.dm?.getItem(s)??Z.it[s];if(j0){if(j0.__groupHeader)return;p.emit("item:dblclick",{item:j0,index:s,event:b})}}}},w2=(b)=>{for(let x=0;x<Y0.length;x++)Y0[x](b)};G.items.addEventListener("click",z2),G.items.addEventListener("dblclick",pJ),G.root.addEventListener("keydown",w2);let O2=new ResizeObserver((b)=>{if(Z.id)return;for(let x of b){let l=x.contentRect.height,s=x.contentRect.width,j0=Q?s:l,Z0=Q?Z.cw:Z.ch;if(Z.cw=s,Z.ch=l,Math.abs(j0-Z0)>1){if(r.viewportState.containerSize=j0,Z.ii)B0(),Z.rfn(),p.emit("resize",{height:l,width:s})}if(Z.ii)for(let W0=0;W0<g.length;W0++)g[W0](s,l)}});if(Z.vre)O2.observe(G.viewport);let A2={dom:G,emitter:p,resolvedConfig:_,rawConfig:J,rendered:Q0,pool:u,itemState:o,sharedState:r,renderRange:R,isHorizontal:Q,classPrefix:D,contentSizeHandlers:d,afterScroll:t,clickHandlers:q0,keydownHandlers:Y0,resizeHandlers:g,destroyHandlers:J0,methods:n,onScrollFrame:O0,resizeObserver:O2,applyTemplate:N0,updateContentSize:B0},V0=n2(Z,A2);Z.dm=o2(Z,A2,V0),Z.sc=i2(Z,A2);let S2=new Map;for(let b of $)if(b.methods)for(let x of b.methods){let l=S2.get(x);if(l)throw Error(`[vlist/builder] Method "${x}" is registered by both "${l}" and "${b.name}"`);S2.set(x,b.name)}for(let b of $)b.setup(V0);if(Z.ii=!0,V0.state.isInitialized=!0,B0(),Z.rfn(),A&&Z.it.length>0){let b=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(b),Z.ls=b,Z.rfn()}let hJ=(b)=>{V0.dataManager.setItems(b,0,b.length)},uJ=A?(b)=>{let x=Z.sab(2),l=Z.it.length;if(V0.dataManager.setItems(b,l),x&&Z.it.length>0){let s=Z.gsp(Z.it.length-1,Z.hc,Z.ch,Z.it.length,"end");Z.sst(s),Z.ls=s,Z.rfn()}}:(b)=>{let x=Z.it.length;V0.dataManager.setItems(b,x)},gJ=A?(b)=>{let x=Z.sgt(),l=Z.hc.getTotalSize(),s=[...Z.it];V0.dataManager.clear(),V0.dataManager.setItems([...b,...s],0);let Z0=Z.hc.getTotalSize()-l;if(Z0>0)Z.sst(x+Z0),Z.ls=x+Z0}:(b)=>{let x=[...Z.it];V0.dataManager.clear(),V0.dataManager.setItems([...b,...x],0)},xJ=(b,x)=>{V0.dataManager.updateItem(b,x)},mJ=(b)=>{V0.dataManager.removeItem(b)},dJ=async()=>{if(V0.dataManager.reload)await V0.dataManager.reload()},s0=()=>{if(P!==null)cancelAnimationFrame(P),P=null},cJ=(b,x,l)=>{if(s0(),Math.abs(x-b)<1){Z.sst(x),Z.ls=x,Z.rfn();return}let s=performance.now(),j0=(Z0)=>{let W0=Z0-s,A0=Math.min(W0/l,1),I0=b+(x-b)*b2(A0);if(Z.sst(I0),Z.ls=I0,Z.rfn(),A0<1)P=requestAnimationFrame(j0);else P=null};P=requestAnimationFrame(j0)},lJ=(b,x)=>{let{align:l,behavior:s,duration:j0}=v0(x),Z0=Z.vtf(),W0=b;if(V&&Z0>0)W0=(W0%Z0+Z0)%Z0;let A0=Z.gsp(W0,Z.hc,Z.ch,Z0,l);if(s==="smooth")cJ(Z.sgt(),A0,j0);else s0(),Z.sst(A0)},rJ=()=>Z.sgt(),aJ=(b,x)=>{return p.on(b,x)},sJ=(b,x)=>{p.off(b,x)},nJ=()=>{if(Z.id)return;if(Z.id=!0,V0.state.isDestroyed=!0,G.items.removeEventListener("click",z2),G.root.removeEventListener("keydown",w2),Z.st.removeEventListener("scroll",O0),O2.disconnect(),c)c.disconnect(),c=null;if(Z.wh)G.viewport.removeEventListener("wheel",Z.wh);if(C)clearTimeout(C);for(let b=0;b<J0.length;b++)J0[b]();for(let b of $)if(b.destroy)b.destroy();s0();for(let[,b]of Q0)b.remove(),u.release(b);Q0.clear(),u.clear(),p.clear(),G.root.remove()},f2={get element(){return G.root},get items(){if(n.has("_getItems"))return n.get("_getItems")();return Z.it},get total(){if(n.has("_getTotal"))return n.get("_getTotal")();return Z.vtf()},setItems:n.has("setItems")?n.get("setItems"):hJ,appendItems:n.has("appendItems")?n.get("appendItems"):uJ,prependItems:n.has("prependItems")?n.get("prependItems"):gJ,updateItem:n.has("updateItem")?n.get("updateItem"):xJ,removeItem:n.has("removeItem")?n.get("removeItem"):mJ,reload:n.has("reload")?n.get("reload"):dJ,scrollToIndex:n.has("scrollToIndex")?n.get("scrollToIndex"):lJ,cancelScroll:n.has("cancelScroll")?n.get("cancelScroll"):s0,getScrollPosition:n.has("getScrollPosition")?n.get("getScrollPosition"):rJ,on:aJ,off:sJ,destroy:nJ};for(let[b,x]of n){if(b.charCodeAt(0)===95||b==="setItems"||b==="appendItems"||b==="prependItems"||b==="updateItem"||b==="removeItem"||b==="reload"||b==="scrollToIndex"||b==="scrollToItem"||b==="cancelScroll"||b==="getScrollPosition")continue;f2[b]=x}return f2}Q2();var S0=(J,q,Q={},j="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:U=1000,minThumbSize:N=30,showOnHover:D=!0,hoverZoneWidth:Y=16,showOnViewportEnter:W=!0}=Q,F=0,M=0,H=0,V=0,A=!1,B=!1,y=0,L=0,E=0,O=null,_=!1,$=null,h=null,v=K?"width":"height",G=K?"translateX":"translateY",p=K?(t)=>t.clientX:(t)=>t.clientY,i=K?"left":"top",w=document.createElement("div"),u=document.createElement("div"),Z=D?document.createElement("div"):null,P=()=>{if(w.className=`${j}-scrollbar`,u.className=`${j}-scrollbar-thumb`,K)w.classList.add(`${j}-scrollbar--horizontal`);if(w.appendChild(u),J.appendChild(w),Z){if(Z.className=`${j}-scrollbar-hover`,K)Z.classList.add(`${j}-scrollbar-hover--horizontal`),Z.style.height=`${Y}px`;else Z.style.width=`${Y}px`;J.appendChild(Z)}},C=()=>{if(O)clearTimeout(O),O=null},T=()=>{if(!X)return;C(),O=setTimeout(R,U)},k=()=>{if(F<=M)return;if(C(),!_)w.classList.add(`${j}-scrollbar--visible`),_=!0;if(X&&!A&&!B)T()},R=()=>{if(A||B)return;w.classList.remove(`${j}-scrollbar--visible`),_=!1},f=(t,q0)=>{F=t,M=q0;let Y0=F>M;if(w.style.display=Y0?"":"none",!Y0){R();return}let g=M/F;H=Math.max(N,g*M),u.style[v]=`${H}px`,V=M-H,r(E)},r=(t)=>{if(E=t,F<=M||V<=0)return;let q0=F-M,g=Math.min(1,Math.max(0,t/q0))*V;u.style.transform=`${G}(${g}px)`},Q0=(t)=>{if(t.target===u)return;let q0=w.getBoundingClientRect(),d=p(t)-q0[i]-H/2,n=Math.max(0,Math.min(d,V))/V,U0=F-M,K0=n*U0;q(K0),k()},z=(t)=>{t.preventDefault(),t.stopPropagation(),A=!0,y=p(t),L=E,C(),w.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",S),document.addEventListener("mouseup",c)},S=(t)=>{if(!A)return;let q0=p(t)-y,Y0=V>0?q0/V:0,g=F-M,d=Y0*g,J0=Math.max(0,Math.min(L+d,g)),U0=J0/g*V;if(u.style.transform=`${G}(${U0}px)`,h=J0,$===null)$=requestAnimationFrame(()=>{if(h!==null)q(h);$=null})},c=()=>{if(A=!1,$!==null)cancelAnimationFrame($),$=null;if(h!==null)q(h),h=null;if(w.classList.remove(`${j}-scrollbar--dragging`),X&&!B)T();document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",c)},a=()=>{if(W)k()},I=()=>{if(!A){if(B=!1,X)T()}},m=()=>{B=!0,C(),k()},o=()=>{if(B=!1,!A&&X)T()},e=()=>{if(C(),$!==null)cancelAnimationFrame($),$=null;if(w.removeEventListener("click",Q0),w.removeEventListener("mouseenter",m),w.removeEventListener("mouseleave",o),u.removeEventListener("mousedown",z),J.removeEventListener("mouseenter",a),J.removeEventListener("mouseleave",I),document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",c),Z){if(Z.removeEventListener("mouseenter",m),Z.removeEventListener("mouseleave",o),Z.parentNode)Z.parentNode.removeChild(Z)}if(w.parentNode)w.parentNode.removeChild(w)};if(P(),w.addEventListener("click",Q0),w.addEventListener("mouseenter",m),w.addEventListener("mouseleave",o),u.addEventListener("mousedown",z),J.addEventListener("mouseenter",a),J.addEventListener("mouseleave",I),Z)Z.addEventListener("mouseenter",m),Z.addEventListener("mouseleave",o);return{show:k,hide:R,updateBounds:f,updatePosition:r,isVisible:()=>_,destroy:e}};var WJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:K}=Q,{classPrefix:X,horizontal:U}=K;if(q=S0(j.viewport,(Y)=>Q.scrollController.scrollTo(Y),J??{},X,U),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let D=q;Q.afterScroll.push((Y,W)=>{D.updatePosition(Y),D.show()}),Q.resizeHandlers.push((Y,W)=>{if(D){let F=Q.getCachedCompression();D.updateBounds(F.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(D){let Y=Q.getCachedCompression();D.updateBounds(Y.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(D)D.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var DJ=(J=0)=>{let q=[,,,,,,,,];for(let Q=0;Q<8;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},j2=(J,q)=>{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 X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,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,U=J.samples[X],N=q-U.position,D=Q-U.time;J.velocity=D>0?N/D:0}return J.lastPosition=q,J.lastTime=Q,J},B1=(J)=>J.sampleCount>=3,_J=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:K=!1,idleTimeout:X=150,onScroll:U,onIdle:N,scrollElement:D,horizontal:Y=!1}=q,W=!!D,F=0,M=0,H=W?Y?window.innerWidth:window.innerHeight:Y?J.clientWidth:J.clientHeight,V=q.compressed??!1,A=q.compression,B=DJ(),y=!1,L=null,O=q2(()=>{let I=Y?J.scrollLeft:J.scrollTop,m=I>=F?"down":"up";if(B=j2(B,I),F=I,U)U({scrollTop:F,direction:m,velocity:B.velocity});p()}),$=q2(()=>{let I=J.getBoundingClientRect(),m=Y?Math.max(0,-I.left):Math.max(0,-I.top),o=m>=F?"down":"up";if(B=j2(B,m),F=m,!y)y=!0;if(U)U({scrollTop:F,direction:o,velocity:B.velocity});p()}),h=(I)=>{I.preventDefault()},v=(I)=>{if(I.deltaX)return;I.preventDefault(),J.scrollLeft+=I.deltaY},G=(I)=>{if(!V)return;I.preventDefault();let m=(Y?I.deltaX||I.deltaY:I.deltaY)*j,o=F+m;if(K)o=F+m*0.3;if(o=Math.max(0,Math.min(o,M)),o!==F){let t=o>=F?"down":"up";if(B=j2(B,o),F=o,!y)y=!0;if(U)U({scrollTop:F,direction:t,velocity:B.velocity});p()}},p=()=>{if(L)clearTimeout(L);L=setTimeout(()=>{if(y=!1,B=DJ(F),N)N()},X)},i=(I)=>{if(V)return;if(V=!0,A=I,M=I.virtualSize-H,W)return;if(O.cancel(),J.removeEventListener("scroll",O),!Q)J.removeEventListener("wheel",h);else if(Y)J.removeEventListener("wheel",v);if(Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",G,{passive:!1});let m=Y?J.scrollLeft:J.scrollTop;if(m>0){let o=Y?A?.actualSize??J.scrollWidth:A?.actualSize??J.scrollHeight;F=m/o*M}if(Y)J.scrollLeft=0;else J.scrollTop=0},w=()=>{if(!V)return;if(V=!1,W){A=void 0;return}if(J.removeEventListener("wheel",G),Y)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",O,{passive:!0}),!Q)J.addEventListener("wheel",h,{passive:!1});else if(Y)J.addEventListener("wheel",v,{passive:!1});if(A&&F>0){let m=F/M*(A.actualSize-H);if(Y)J.scrollLeft=m;else J.scrollTop=m}A=void 0},u=()=>{if(W||V)return F;return Y?J.scrollLeft:J.scrollTop},Z=(I,m=!1)=>{let o=Math.max(0,Math.min(I,M||1/0));if(W){let e=J.getBoundingClientRect();if(Y){let t=e.left+window.scrollX;window.scrollTo({left:t+o,behavior:m?"smooth":"auto"})}else{let t=e.top+window.scrollY;window.scrollTo({top:t+o,behavior:m?"smooth":"auto"})}}else if(V){if(o===F)return;let t=o>=F?"down":"up";if(B=j2(B,o),F=o,!y)y=!0;if(U)U({scrollTop:F,direction:t,velocity:B.velocity});p()}else if(Y)J.scrollTo({left:o,behavior:m?"smooth":"auto"});else J.scrollTo({top:o,behavior:m?"smooth":"auto"})},P=(I)=>{Z(u()+I)},C=()=>{return u()<=0},T=(I=0)=>{let m=u(),o=W||V?M:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return m>=o-I},k=()=>{let I=u(),m=W||V?M:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(m<=0)return 0;return Math.min(1,Math.max(0,I/m))},R=(I)=>{if(I.compression)A=I.compression,M=A.virtualSize-H},f=()=>V,r=()=>Math.abs(B.velocity),Q0=()=>B1(B),z=()=>y,S=()=>W,c=(I)=>{if(H=I,A)M=A.virtualSize-H},a=()=>{if(L)clearTimeout(L);if(W)$.cancel(),window.removeEventListener("scroll",$);else O.cancel(),J.removeEventListener("scroll",O),J.removeEventListener("wheel",G),J.removeEventListener("wheel",h),J.removeEventListener("wheel",v)};if(W){if(V&&A)M=A.virtualSize-H;window.addEventListener("scroll",$,{passive:!0})}else if(V&&A){if(M=A.virtualSize-H,Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",G,{passive:!1})}else{if(Y)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",O,{passive:!0}),!Q)J.addEventListener("wheel",h,{passive:!1});else if(Y)J.addEventListener("wheel",v,{passive:!1})}return{getScrollTop:u,scrollTo:Z,scrollBy:P,isAtTop:C,isAtBottom:T,getScrollPercentage:k,getVelocity:r,isTracking:Q0,isScrolling:z,updateConfig:R,enableCompression:i,disableCompression:w,isCompressed:f,isWindowMode:S,updateContainerHeight:c,destroy:a}},q2=(J)=>{let q=null,Q=null,j=(...K)=>{if(Q=K,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var N1=0.65,W1=0.5,D1=0.95,_1=0.1,V1=5,G1=100,VJ=()=>{let J=null,q=0,Q=!1,j=0,K=null,X=0,U=0,N=null,D=[];return{name:"withScale",priority:20,setup(Y){let{dom:W,config:F}=Y,{classPrefix:M,horizontal:H}=F,V=()=>{let L=Y.getVirtualTotal(),E=F0(L,Y.sizeCache);if(E.isCompressed&&!Q){Q=!0,Y.scrollController.enableCompression(E),Y.updateContentSize(E.virtualSize),Y.setScrollFns(()=>q,(w)=>{if(q=w,j=w,K!==null)cancelAnimationFrame(K),K=null});let O=()=>{let w=j-q;if(Math.abs(w)<W1)q=j,K=null;else{q+=w*N1;let Z=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,Z)),K=requestAnimationFrame(O)}Y.scrollController.scrollTo(q)},_=W.viewport,$=(w)=>{w.preventDefault();let Z=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+w.deltaY,Z)),K===null)K=requestAnimationFrame(O)};_.addEventListener("wheel",$,{passive:!1});let h=()=>{if(N!==null)cancelAnimationFrame(N),N=null},v=(w)=>{if(h(),K!==null)cancelAnimationFrame(K),K=null;let u=w.touches[0];if(!u)return;let Z=H?u.clientX:u.clientY;X=Z,U=q,D=[{time:performance.now(),y:Z}]},G=(w)=>{w.preventDefault();let u=w.touches[0];if(!u)return;let Z=H?u.clientX:u.clientY,P=performance.now();if(D.push({time:P,y:Z}),D.length>V1)D.shift();let C=X-Z,k=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,R=Math.max(0,Math.min(U+C,k));q=R,j=R,Y.scrollController.scrollTo(R)},p=(w)=>{let u=performance.now(),Z=D.filter((k)=>u-k.time<G1),P=0;if(Z.length>=2){let k=Z[0],R=Z[Z.length-1],f=R.time-k.time;if(f>0)P=(k.y-R.y)/f}if(D=[],Math.abs(P)<_1)return;let C=P*16,T=()=>{if(C*=D1,Math.abs(C)<0.5){N=null;return}let R=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,f=q+C;if(f=Math.max(0,Math.min(f,R)),f<=0&&C<0||f>=R&&C>0){q=f,j=f,Y.scrollController.scrollTo(f),N=null;return}q=f,j=f,Y.scrollController.scrollTo(f),N=requestAnimationFrame(T)};N=requestAnimationFrame(T)};if(_.addEventListener("touchstart",v,{passive:!0}),_.addEventListener("touchmove",G,{passive:!1}),_.addEventListener("touchend",p,{passive:!0}),_.addEventListener("touchcancel",p,{passive:!0}),Y.destroyHandlers.push(()=>{if(_.removeEventListener("wheel",$),_.removeEventListener("touchstart",v),_.removeEventListener("touchmove",G),_.removeEventListener("touchend",p),_.removeEventListener("touchcancel",p),h(),K!==null)cancelAnimationFrame(K),K=null}),!W.viewport.querySelector(`.${M}-scrollbar`)){if(J=S0(W.viewport,(u)=>Y.scrollController.scrollTo(u),{},M,H),!W.viewport.classList.contains(`${M}-viewport--custom-scrollbar`))W.viewport.classList.add(`${M}-viewport--custom-scrollbar`);J.updateBounds(E.virtualSize,Y.state.viewportState.containerSize);let w=J;Y.afterScroll.push((u,Z)=>{if(w)w.updatePosition(u),w.show()}),Y.resizeHandlers.push((u,Z)=>{if(w){let P=Y.getCachedCompression();w.updateBounds(P.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!E.isCompressed&&Q)Q=!1,Y.scrollController.disableCompression(),Y.updateContentSize(E.actualSize);else if(E.isCompressed)Y.scrollController.updateConfig({compression:E}),Y.updateContentSize(E.virtualSize);if(J)J.updateBounds(E.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:E,totalItems:L}};Y.updateCompressionMode=V;let A=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return A()},Y.setVisibleRangeFn((L,E,O,_,$)=>{B=null,y=null;let h=F0(_,O);e0(L,E,O,_,h,$)}),Y.setScrollToPosFn((L,E,O,_,$)=>{let h=F0(_,E);return J2(L,E,O,_,h,$)});let B=null,y=null;Y.setPositionElementFn((L,E)=>{let O=Y.getVirtualTotal(),_=F0(O,Y.sizeCache);if(_.isCompressed){let $=Y.scrollController.getScrollTop();if(B===null||E<y)y=E,B=Math.round(w0(E,$,Y.sizeCache,O,Y.state.viewportState.containerSize,_));let h=B+Y.sizeCache.getOffset(E)-Y.sizeCache.getOffset(y),v=Y.config.horizontal;L.style.transform=v?`translateX(${h}px)`:`translateY(${h}px)`}else{let $=Math.round(Y.sizeCache.getOffset(E)),h=Y.config.horizontal;L.style.transform=h?`translateX(${$}px)`:`translateY(${$}px)`}}),V(),Y.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var X2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:K}=J,X=new Map,U=0,N=0,D=(P)=>{let C=X.get(P);if(!C)C={items:Array(q),count:0,lastAccess:Date.now()},X.set(P,C);else C.lastAccess=Date.now();return C},Y=(P)=>{return Math.floor(P/q)},W=(P)=>{return P%q},F=()=>U,M=(P)=>{U=P},H=(P)=>{if(P<0||P>=U)return;let C=Y(P),T=X.get(C);if(!T)return;return T.items[W(P)]},V=(P)=>{if(P<0||P>=U)return!1;let C=Y(P),T=X.get(C);if(!T)return!1;return T.items[W(P)]!==void 0},A=(P,C)=>{let T=Y(P),k=D(T),R=W(P),f=k.items[R]===void 0;if(k.items[R]=C,f)k.count++,N++;if(P>=U)U=P+1},B=(P,C)=>{for(let T=0;T<C.length;T++){let k=C[T];if(k!==void 0)A(P+T,k)}},y=(P)=>{if(P<0||P>=U)return!1;let C=Y(P),T=X.get(C);if(!T)return!1;let k=W(P);if(T.items[k]===void 0)return!1;if(T.items[k]=void 0,T.count--,N--,T.count===0)X.delete(C);return!0},L=(P,C)=>{let T=[];for(let k=P;k<=C&&k<U;k++)T.push(H(k));return T},E=(P,C)=>{for(let T=P;T<=C&&T<U;T++)if(!V(T))return!1;return!0},O=()=>{let P=[],C=null,T=Array.from(X.keys()).sort((k,R)=>k-R);for(let k of T){let R=X.get(k);if(!R)continue;let f=k*q;for(let r=0;r<q;r++){let Q0=f+r;if(Q0>=U)break;if(R.items[r]!==void 0)if(C===null)C={start:Q0,end:Q0};else if(Q0===C.end+1)C.end=Q0;else P.push(C),C={start:Q0,end:Q0};else if(C!==null)P.push(C),C=null}}if(C!==null)P.push(C);return P},_=(P,C)=>{let T=[],k=null;for(let R=P;R<=C&&R<U;R++)if(!V(R))if(k===null)k={start:R,end:R};else k.end=R;else if(k!==null)T.push(k),k=null;if(k!==null)T.push(k);return T},$=(P)=>{return X.has(P)},h=(P)=>{let C=X.get(P);if(C)C.lastAccess=Date.now()},v=(P,C)=>{if(P>C||X.size===0)return;let T=Date.now(),k=Y(Math.max(0,P)),R=Y(Math.min(U-1,C));for(let f=k;f<=R;f++){let r=X.get(f);if(r)r.lastAccess=T}},G=(P,C)=>{if(N<=Q)return 0;let T=Math.max(0,P-j),k=Math.min(U-1,C+j),R=Y(T),f=Y(k),r=0,Q0=[];for(let[z,S]of X)if(z<R||z>f)r+=S.count,Q0.push(z),N-=S.count,X.delete(z);if(r>0&&K)K(r,Q0);return r},p=()=>{if(N<=Q)return 0;let P=Array.from(X.entries()).sort(([,k],[,R])=>k.lastAccess-R.lastAccess),C=0,T=[];for(let[k,R]of P){if(N<=Q)break;C+=R.count,N-=R.count,T.push(k),X.delete(k)}if(C>0&&K)K(C,T);return C},i=()=>{return{totalItems:U,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:U>0?1-N/U:1}},w=()=>N,u=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:F,setTotal:M,get:H,has:V,set:A,setRange:B,delete:y,getRange:L,isRangeLoaded:E,getLoadedRanges:O,findUnloadedRanges:_,getChunkIndex:Y,isChunkLoaded:$,touchChunk:h,touchChunksForRange:v,evictDistant:G,evictToLimit:p,getStats:i,getCachedCount:w,clear:u,reset:()=>{u(),U=0}}},Y2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,K)=>j.start-K.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let K=q[j],X=Q[Q.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else Q.push({...K})}return Q},g0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,K=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:K};if(q.length===0)return[X];let U=[],N=Y2(q),D=X.start;for(let Y of N){if(Y.end<D)continue;if(Y.start>X.end)break;if(Y.start>D)U.push({start:D,end:Math.min(Y.start-1,X.end)});if(D=Y.end+1,D>X.end)break}if(D<=X.end)U.push({start:D,end:X.end});return U};var K2=(J={})=>{let{maskCharacter:q=qJ,maxSampleSize:Q=XJ}=J,j=[],K=!1,X=0,U=(F)=>{if(K||F.length===0)return;let M=Math.min(F.length,Q);for(let H=0;H<M;H++){let V=F[H];if(!V||typeof V!=="object")continue;let A={};for(let[B,y]of Object.entries(V)){if(B.startsWith("_")||B==="id")continue;A[B]=String(y??"").length}if(Object.keys(A).length>0)j.push(A)}K=!0},N=()=>K,D=(F)=>{let M={id:`${YJ}${X++}`,[T2]:!0,_index:F};if(j.length===0)return M.label=q.repeat(12),M;let H=j[F%j.length];for(let[V,A]of Object.entries(H))M[V]=q.repeat(Math.max(1,A));return M};return{analyzeStructure:U,hasAnalyzedStructure:N,generate:D,generateRange:(F,M)=>{let H=[];for(let V=F;V<=M;V++)H.push(D(V));return H},clear:()=>{j=[],K=!1,X=0}}},P0=(J)=>{if(!J||typeof J!=="object")return!1;return J[T2]===!0},H2=(J)=>{return J.filter((q)=>!P0(q))};var O1=50,Z2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:K,placeholder:X,pageSize:U=O1,onStateChange:N,onItemsLoaded:D,onItemsEvicted:Y}=J,W=X2({...K,onEvict:(g,d)=>{Y?.(g),_()}}),F=null,M=()=>{if(!F)F=K2(X);return F},H=new Map,V=!1,A,B=!0,y,L=[],E=0,O=new Map,_=()=>{N?.(Z())},$=()=>{H.clear();let g=W.getLoadedRanges();for(let d of g)for(let J0=d.start;J0<=d.end;J0++){let n=W.get(J0);if(n&&!P0(n))H.set(n.id,J0)}},h=(g,d)=>{if(!P0(d))H.set(d.id,g)},v=(g)=>{H.delete(g)},G=(g,d)=>{return`${g}-${d}`},p=()=>W.getTotal(),i=()=>W.getCachedCount(),w=()=>V,u=()=>B,Z=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:V,pendingRanges:L,error:A,hasMore:B,cursor:y}),P=()=>W,C=()=>M(),T=(g)=>{let d=W.get(g);if(d!==void 0)return d;if(g>=0&&g<W.getTotal())return M().generate(g);return},k=(g)=>{let d=H.get(g);if(d===void 0)return;return W.get(d)},R=(g)=>{return H.get(g)??-1},f=(g)=>{let d=W.get(g);return d!==void 0&&!P0(d)},r=(g,d)=>{let J0=[],n=W.getTotal(),U0=0,K0=0;W.touchChunksForRange(g,Math.min(d,n-1));for(let M0=g;M0<=d&&M0<n;M0++){let E0=W.get(M0);if(E0!==void 0)J0.push(E0),U0++;else J0.push(M().generate(M0)),K0++}return J0},Q0=(g)=>{W.setTotal(g),B=W.getCachedCount()<g,_()},z=(g,d=0,J0)=>{if(F&&!F.hasAnalyzedStructure()&&g.length>0)F.analyzeStructure(g);for(let n=0;n<g.length;n++){let U0=g[n];if(U0!==void 0){let K0=d+n;W.set(K0,U0),h(K0,U0)}}if(J0!==void 0)W.setTotal(J0);else if(d+g.length>W.getTotal())W.setTotal(d+g.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)B=!1;D?.(g,d,W.getTotal()),_()},S=(g,d)=>{let J0=H.get(g);if(J0===void 0)return!1;let n=W.get(J0);if(!n)return!1;let U0={...n,...d};if(W.set(J0,U0),d.id!==void 0&&d.id!==g)v(g),h(J0,U0);return _(),!0},c=(g)=>{let d=H.get(g);if(d===void 0)return!1;W.delete(d),v(g);let J0=W.getTotal();if(J0>0)W.setTotal(J0-1);return _(),!0},a=async(g,d)=>{if(!q)return;let J0=G(g,d);if(O.has(J0))return;let n=W.getLoadedRanges(),U0=g0({start:g,end:d},n,W.chunkSize);if(U0.length===0)return;let K0=W.chunkSize,M0=[];for(let N0 of U0){let H0=Math.floor(N0.start/K0),$0=Math.floor(N0.end/K0);for(let B0=H0;B0<=$0;B0++){let L0=B0*K0,D0=L0+K0-1,O0=G(L0,D0);if(!M0.some((b0)=>b0.start===L0)&&!O.has(O0))M0.push({start:L0,end:D0})}}let E0=[];for(let N0 of U0){let H0=Math.floor(N0.start/K0),$0=Math.floor(N0.end/K0);for(let B0=H0;B0<=$0;B0++){let L0=B0*K0,D0=L0+K0-1,O0=G(L0,D0);if(O.has(O0)){let b0=O.get(O0);if(!E0.includes(b0))E0.push(b0)}}}for(let N0 of M0){let H0=G(N0.start,N0.end),$0=(async()=>{L.push(N0),V=!0,A=void 0,_();try{let B0=N0.end-N0.start+1,L0={offset:N0.start,limit:B0,cursor:void 0},D0=await q.read(L0);if(z(D0.items,N0.start,D0.total),D0.cursor)y=D0.cursor;let O0=N0.start+D0.items.length;if(O0>=E){if(E=O0,D0.hasMore!==void 0)B=D0.hasMore;else if(D0.total!==void 0)B=O0<D0.total}}catch(B0){A=B0 instanceof Error?B0:Error(String(B0))}finally{O.delete(H0),L=L.filter((B0)=>B0.start!==N0.start||B0.end!==N0.end),V=O.size>0,_()}})();O.set(H0,$0),E0.push($0)}await Promise.all(E0)},I=async(g,d)=>{if(W.isRangeLoaded(g,d))return;await a(g,d)},m=async()=>{if(!q)return;await a(0,U-1)},o=async()=>{if(!q||V||!B)return!1;let g=W.getCachedCount(),d=W.getTotal(),J0=g,n=Math.min(J0+U-1,d>0?d-1:J0+U-1);if(J0>=d&&d>0)return B=!1,!1;return await a(J0,n),W.getCachedCount()>g},e=async()=>{if(W.clear(),W.setTotal(0),H.clear(),F)F.clear();O.clear(),L=[],V=!1,y=void 0,B=!0,E=0,A=void 0,_()},t=(g,d)=>{if(W.evictDistant(g,d)>0)$()},q0=()=>{W.clear(),H.clear(),y=void 0,A=void 0,L=[],V=!1,_()},Y0=()=>{if(W.reset(),H.clear(),F)F.clear();y=void 0,B=!0,E=0,A=void 0,L=[],V=!1,_()};if(Q&&Q.length>0)z(Q,0,j??Q.length);else if(j!==void 0)W.setTotal(j),_();return{getState:Z,getTotal:p,getCached:i,getIsLoading:w,getHasMore:u,getStorage:P,getPlaceholders:C,getItem:T,getItemById:k,getIndexById:R,isItemLoaded:f,getItemsInRange:r,setTotal:Q0,setItems:z,updateItem:S,removeItem:c,loadRange:a,ensureRange:I,loadInitial:m,loadMore:o,reload:e,evictDistant:t,clear:q0,reset:Y0}};var GJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:K,autoLoad:X=!0}=J,U=Q?.cancelThreshold??JJ,N=Q?.preloadThreshold??QJ,D=Q?.preloadAhead??jJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:W}=Y,F=Y.config.reverse,M=Z2({adapter:q,...K!==void 0&&{initialTotal:K},pageSize:j?.chunkSize??z0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let O=Y.getVirtualTotal();Y.sizeCache.rebuild(O),Y.updateCompressionMode();let _=Y.getCachedCompression();Y.state.viewportState.totalSize=_.virtualSize,Y.state.viewportState.actualSize=_.actualSize,Y.state.viewportState.isCompressed=_.isCompressed,Y.state.viewportState.compressionRatio=_.ratio,Y.updateContentSize(_.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(O,_,$)=>{if(Y.state.isInitialized)Y.forceRender(),W.emit("load:end",{items:O,total:$,offset:_})}});Y.replaceDataManager(M);let H=null,V=null,A=0,B=()=>{if(V){let O=V;V=null,Y.dataManager.ensureRange(O.start,O.end).catch((_)=>{W.emit("error",{error:_,context:"ensureRange"})})}};Y.afterScroll.push((O,_)=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getVelocity(),v=Y.scrollController.isTracking()&&$<=U;if(V&&A>U&&$<=U){let i=V;V=null,Y.dataManager.ensureRange(i.start,i.end).catch((w)=>{W.emit("error",{error:w,context:"ensureRange"})})}if(A=$,v&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(F){if(O<y2)W.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((i)=>{W.emit("error",{error:i,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-O-Y.state.viewportState.containerSize<y2)W.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((w)=>{W.emit("error",{error:w,context:"loadMore"})})}let{renderRange:G}=Y.state.viewportState;if(!H||G.start!==H.start||G.end!==H.end)if(H={start:G.start,end:G.end},v){V=null;let{start:i,end:w}=G,u=Y.getVirtualTotal();if($>N)if(_==="down")w=Math.min(G.end+D,u-1);else i=Math.max(G.start-D,0);Y.dataManager.ensureRange(i,w).catch((Z)=>{W.emit("error",{error:Z,context:"ensureRange"})})}else V={start:G.start,end:G.end}});let y=200,L=null;Y.afterScroll.push((O,_)=>{if(L!==null)clearTimeout(L);L=setTimeout(()=>{L=null,B()},y)}),Y.destroyHandlers.push(()=>{if(L!==null)clearTimeout(L),L=null});let E=()=>{if(Y.state.isDestroyed)return;H=null;let{renderRange:O}=Y.state.viewportState;if(O.end>0)Y.dataManager.ensureRange(O.start,O.end).catch((_)=>{W.emit("error",{error:_,context:"ensureRange"})});B()};if(window.addEventListener("online",E),Y.destroyHandlers.push(()=>{window.removeEventListener("online",E)}),W.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{H=null,V=null,Y.forceRender();let{renderRange:O}=Y.state.viewportState;if(O.end>0)W.emit("load:start",{offset:O.start,limit:O.end-O.start+1}),await Y.dataManager.ensureRange(O.start,O.end)}),Y.methods.set("reload",async()=>{H=null,V=null,Y.invalidateRendered(),await Y.dataManager.reload(),W.emit("load:start",{offset:0,limit:z0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:O}=Y.state.viewportState;if(O.end>0)await Y.dataManager.ensureRange(O.start,O.end)}),X)W.emit("load:start",{offset:0,limit:z0}),Y.dataManager.loadInitial().catch((O)=>{W.emit("error",{error:O,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var MJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:K,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",K.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let Y=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let W=Q.viewport.getBoundingClientRect();if(K.horizontal){let F=W.left+window.scrollX;window.scrollTo(F+Y,window.scrollY)}else{let F=W.top+window.scrollY;window.scrollTo(window.scrollX,F+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:U,innerWidth:N}=window,D=()=>{let{innerWidth:Y,innerHeight:W}=window,F=K.horizontal?Y:W,M=K.horizontal?N:U;if(Math.abs(F-M)<=1)return;U=W,N=Y,j.viewportState.containerSize=W,X.emit("resize",{width:Y,height:W});for(let H=0;H<q.resizeHandlers.length;H++)q.resizeHandlers[H](Y,W);q.renderIfNeeded()};window.addEventListener("resize",D,{passive:!0}),J=()=>{window.removeEventListener("resize",D)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var $2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].headerLayoutIndex<=q)Q=K;else j=K-1}return Q},OJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].firstDataIndex<=q)Q=K;else j=K-1}return Q},AJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),K=0,X=0;for(let U=1;U<J;U++){let N=q(U);if(N!==j){let D=U-K;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:D}),X=X+1+D,j=N,K=U}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:J-K}),Q},x0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),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 U=0;U<X.count;U++)j[K]=J[X.firstDataIndex+U],K++}return j},m0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let K=J.getEntry(j);if(K.type==="header")return J.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},U2=(J,q)=>{let Q=AJ(J,q.getGroupForIndex),j=J+Q.length,K=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(M)=>{if(Q.length===0)return{type:"item",dataIndex:M,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=$2(Q,M),V=Q[H];if(M===V.headerLayoutIndex)return{type:"header",group:V};let A=M-V.headerLayoutIndex-1;return{type:"item",dataIndex:V.firstDataIndex+A,group:V}},layoutToDataIndex:(M)=>{if(Q.length===0)return M;let H=$2(Q,M),V=Q[H];if(M===V.headerLayoutIndex)return-1;let A=M-V.headerLayoutIndex-1;return V.firstDataIndex+A},dataToLayoutIndex:(M)=>{if(Q.length===0)return M;let H=OJ(Q,M),V=Q[H],A=M-V.firstDataIndex;return V.headerLayoutIndex+1+A},getGroupAtLayoutIndex:(M)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=$2(Q,M);return Q[H]},getGroupAtDataIndex:(M)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=OJ(Q,M);return Q[H]},getHeaderHeight:typeof K==="number"?(M)=>K:(M)=>{let H=Q[M];if(!H)return 0;return K(H.key,M)},rebuild:(M)=>{Q=AJ(M,q.getGroupForIndex),j=M+Q.length}}};var B2=(J,q,Q,j,K,X=!1)=>{let U=document.createElement("div");if(U.className=`${K}-sticky-header`,U.setAttribute("role","presentation"),U.setAttribute("aria-hidden","true"),U.style.position="absolute",U.style.zIndex="5",U.style.pointerEvents="none",U.style.willChange="transform",U.style.overflow="hidden",X)U.style.top="0",U.style.bottom="0",U.style.left="0";else U.style.top="0",U.style.left="0",U.style.right="0";J.insertBefore(U,J.firstChild);let N=-1,D=!1,Y=0,W=(B)=>{if(B===N)return;N=B;let y=q.groups;if(B<0||B>=y.length){U.textContent="";return}let L=y[B],E=j.headerTemplate(L.key,L.groupIndex),O=q.getHeaderHeight(B);if(X)U.style.width=`${O}px`;else U.style.height=`${O}px`;if(typeof E==="string")U.innerHTML=E;else U.replaceChildren(E)},F=(B)=>{let y=q.groups;if(y.length===0){H();return}let L=Q.getOffset(y[0].headerLayoutIndex);if(B<L){H();return}let E=0,O=y.length-1;while(E<O){let G=E+O+1>>>1;if(Q.getOffset(y[G].headerLayoutIndex)<=B)E=G;else O=G-1}let _=E;if(!D)M();W(_);let $=q.getHeaderHeight(_),h=0,v=_+1;if(v<y.length){let p=Q.getOffset(y[v].headerLayoutIndex)-B;if(p<$)h=p-$}if(h!==Y)if(Y=h,h===0)U.style.transform="";else{let G=Math.round(h);U.style.transform=X?`translateX(${G}px)`:`translateY(${G}px)`}},M=()=>{if(D)return;D=!0,U.style.display=""},H=()=>{if(!D)return;D=!1,U.style.display="none",N=-1,Y=0,U.style.transform=""},V=()=>{let B=N;if(N=-1,B>=0)W(B)},A=()=>{U.remove(),N=-1,D=!1};return U.style.display="none",{update:F,refresh:V,show:M,hide:H,destroy:A}};var FJ=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let U=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,N)),X},EJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},LJ=(J,q,Q,j,K,X)=>{if(j===0)return 0;let U=Math.max(0,Math.min(J,j-1)),N=q.getOffset(U),D=q.getSize(U),Y=q.getTotalSize(),W=Math.max(0,Y-Q),F;switch(X){case"center":F=N-Q/2+D/2;break;case"end":F=N-Q+D;break;case"start":default:F=N;break}return Math.max(0,Math.min(F,W))},bJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},yJ=(J,q)=>{return q.getTotalSize()},TJ=(J,q)=>{return q.getOffset(J)},HJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var C0=(J,q,Q,j,K="start",X,U=LJ)=>{return U(J,q,Q,j,X,K)},$J=(J,q)=>{return J.start===q.start&&J.end===q.end},kJ=(J,q)=>{return J>=q.start&&J<=q.end},PJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var RJ=(J,q)=>{let Q=[],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)Q.push(K);return{add:Q,remove:j}};Q2();var vJ=(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,Q=null,j=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:U,config:N,rawConfig:D}=X,{classPrefix:Y}=N,F=D.item.height;j=D.items?[...D.items]:[];let M=j.length,H={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=U2(M,H),K=x0(j,q.groups);let V=m0(q,F);X.setSizeConfig(V),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let A=D.item.template,{headerTemplate:B}=J,y=(v,G,p)=>{if(R0(v))return B(v.groupKey,v.groupIndex);return A(v,G,p)},L=X.methods.get("_getGridLayout"),E=X.methods.get("_replaceGridRenderer"),O=X.methods.get("_updateGridLayoutForGroups");if(L&&E){if(O)O((i)=>{let w=K[i];return!!(w&&R0(w))});let{createGridRenderer:v}=(N2(),Q1(CJ)),G=L(),p=v(U.items,y,X.sizeCache,G,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);E(p)}else X.replaceTemplate(y);if(U.root.classList.add(`${Y}--grouped`),J.sticky!==!1){Q=B2(U.root,q,X.sizeCache,{...H,sticky:H.sticky??!1},Y,N.horizontal);let v=Q;X.afterScroll.push((G,p)=>{v.update(G)}),Q.update(X.scrollController.getScrollTop())}let _=()=>{if(!q)return;q.rebuild(j.length),K=x0(j,q.groups);let v=m0(q,F);if(X.setSizeConfig(v),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),Q)Q.refresh()};X.methods.set("setItems",(v)=>{j=v.slice(),_()}),X.methods.set("appendItems",(v)=>{j.push(...v),_()}),X.methods.set("prependItems",(v)=>{j.unshift(...v),_()}),X.methods.set("removeItem",(v)=>{j=j.filter((G)=>G.id!==v),_()});let{animateScroll:$,cancelScroll:h}=s2(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(v,G)=>{let p=q.dataToLayoutIndex(v),{align:i,behavior:w,duration:u}=v0(G),Z=X.dataManager.getTotal(),P=C0(p,X.sizeCache,X.state.viewportState.containerSize,Z,i,X.getCachedCompression());if(w==="smooth")$(X.scrollController.getScrollTop(),P,u);else h(),X.scrollController.scrollTo(P)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(h(),Q)Q.destroy(),Q=null;U.root.classList.remove(`${Y}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var W2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,K={row:0,col:0},X=(V)=>{if(V<=0)return 0;if(!j)return Math.ceil(V/q);let A=0,B=0,y=0;for(let L=0;L<V;L++)if(j(L)){if(y++,B>0)A++,B=0;A++,B=0}else if(B++,B>=q)A++,B=0;if(B>0)A++;return A},U=(V)=>{return K.row=N(V),K.col=D(V),K},N=(V)=>{if(!j)return Math.floor(V/q);let A=0,B=0;for(let y=0;y<=V;y++)if(j(y)){if(B>0)A++,B=0;if(y===V)return A;A++,B=0}else{if(y===V)return A;if(B++,B>=q)A++,B=0}return console.warn(`⚠️ getRow(${V}) fell through - returning ${A}`),A},D=(V)=>{if(!j)return V%q;if(j(V))return 0;let A=0;for(let B=0;B<=V;B++)if(j(B))A=0;else{if(B===V)return A;if(A++,A>=q)A=0}return A},Y=(V,A,B)=>{if(B<=0)return{start:0,end:-1};if(!j){let _=Math.max(0,V*q),$=Math.min(B-1,(A+1)*q-1);return{start:_,end:$}}let y=-1,L=-1,E=0,O=0;for(let _=0;_<B;_++){if(j(_)){if(O>0)E++,O=0;if(E>=V&&E<=A){if(y===-1)y=_;L=_}E++,O=0}else{if(E>=V&&E<=A){if(y===-1)y=_;L=_}if(O++,O>=q)E++,O=0}if(E>A&&O===0)break}if(y===-1)return{start:0,end:-1};return{start:y,end:L}},W=(V,A,B)=>{if(A<0||A>=q)return-1;let y=V*q+A;if(y<0||y>=B)return-1;return y},F=(V)=>{let A=(q-1)*Q;return Math.max(0,(V-A)/q)};return{get columns(){return q},get gap(){return Q},update:(V)=>{if(V.columns!==void 0)q=Math.max(1,Math.floor(V.columns));if(V.gap!==void 0)Q=V.gap;if(V.isHeaderFn!==void 0)j=V.isHeaderFn},getTotalRows:X,getPosition:U,getRow:N,getCol:D,getItemRange:Y,getItemIndex:W,getColumnWidth:F,getColumnOffset:(V,A)=>{let B=F(A);return V*(B+Q)}}};N2();var E1=new Set,zJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:K,emitter:X,config:U,rawConfig:N}=j,{classPrefix:D}=U;if(U.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=U.horizontal,W=()=>Y?K.viewport.clientHeight:j.getContainerWidth(),F=N.items?.some((T)=>T.__groupHeader===!0),M={columns:J.columns,gap:J.gap??0};if(F)M.isHeaderFn=(T)=>{let k=j.dataManager.getItem(T);return!!(k&&k.__groupHeader===!0)};q=W2(M);let H=q.gap;j.setVirtualTotalFn(()=>{let T=j.dataManager.getTotal();return q.getTotalRows(T)});let V=N.item,A=U.horizontal?V.width:V.height,B={containerWidth:W(),columns:q.columns,gap:q.gap};if(typeof A==="function")j.setSizeConfig((T)=>{let k=B.containerWidth-2,R=(B.columns-1)*B.gap,f=(k-R)/B.columns,r={containerWidth:B.containerWidth,columns:B.columns,gap:B.gap,columnWidth:f,row:q.getRow(T),column:q.getCol(T),totalRows:q.getTotalRows(j.dataManager.getTotal()),totalColumns:B.columns};return A(T,r)+B.gap});else if(H>0)j.setSizeConfig(A+H);j.rebuildSizeCache(),K.root.classList.add(`${D}--grid`);let y=W(),L=N.item.template,E=()=>{Q=d0(K.items,L,j.sizeCache,q,D,y,()=>j.dataManager.getTotal(),U.ariaIdPrefix,U.horizontal),j.replaceRenderer(Q)};E(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>M),j.methods.set("_replaceGridRenderer",(T)=>{Q=T}),j.methods.set("_updateGridLayoutForGroups",(T)=>{q.update({isHeaderFn:T});let k=j.dataManager.getTotal(),R=0;for(let f=0;f<k;f++)if(q.getCol(f)===0){let r=j.sizeCache.getSize(f);R+=r}if(j.sizeCache.getTotalSize=()=>R,U.horizontal)j.dom.content.style.width=`${R}px`;else j.dom.content.style.height=`${R}px`;E()}),j.methods.set("updateGrid",(T)=>{if(T.columns!==void 0){if(!Number.isInteger(T.columns)||T.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");M.columns=T.columns}if(T.gap!==void 0){if(T.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");M.gap=T.gap}if(q)q.update(M);let k=W();if(B.containerWidth=k,B.columns=M.columns,B.gap=M.gap??0,Q)Q.updateContainerWidth(k);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let R=0;R<j.contentSizeHandlers.length;R++)j.contentSizeHandlers[R]();if(Q)Q.clear();j.forceRender()});let O=null,_=null,$=!1,h=()=>{if($)return;$=!0,O=j.methods.get("_getSelectedIds")??null,_=j.methods.get("_getFocusedIndex")??null},v=-1,G=-1,p=!0,i=U.overscan??3,w={start:0,end:0},u={start:0,end:0},Z=()=>{if(j.state.isDestroyed)return;let T=j.scrollController.getScrollTop(),k=j.state.viewportState.containerSize;if(!p&&T===v&&k===G)return;v=T,G=k,p=!1;let R=j.getVirtualTotal();if(R===0||k===0)w.start=0,w.end=0;else{w.start=Math.max(0,j.sizeCache.indexAtOffset(T));let o=j.sizeCache.indexAtOffset(T+k);if(o<R-1)o++;w.end=Math.min(R-1,Math.max(0,o))}u.start=Math.max(0,w.start-i),u.end=Math.min(R-1,w.end+i);let f=j.state.viewportState;f.scrollPosition=T,f.visibleRange.start=w.start,f.visibleRange.end=w.end,f.renderRange.start=u.start,f.renderRange.end=u.end;let r=j.state.lastRenderRange,Q0=f.isCompressed,z=j.dataManager.getTotal(),S=q.getItemRange(u.start,u.end,z),c=j.dataManager.getItemsInRange(S.start,S.end),a=Q0?j.getCompressionContext():void 0;h();let I=O?O():E1,m=_?_():-1;if(Q.render(c,S,I,m,a),r.start!==u.start||r.end!==u.end)r.start=u.start,r.end=u.end,X.emit("range:change",{range:{start:u.start,end:u.end}})},P=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,p=!0,Z()};j.setRenderFns(Z,P);let C=typeof A==="function";if(j.resizeHandlers.push((T,k)=>{let R=Y?k:T;if(B.containerWidth=R,Q)Q.updateContainerWidth(R);if(C){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let f=0;f<j.contentSizeHandlers.length;f++)j.contentSizeHandlers[f]();if(Q)Q.clear();j.forceRender()}}),j.methods.set("scrollToIndex",(T,k)=>{let R=Math.floor(T/J.columns),{align:f,behavior:r}=v0(k),Q0=j.dataManager.getState(),z=q.getTotalRows(Q0.total),S=Math.max(0,Math.min(R,z-1)),c=C0(S,j.sizeCache,j.state.viewportState.containerSize,z,f,j.getCachedCompression());if(r==="smooth")j.scrollController.scrollTo(c);else j.scrollController.scrollTo(c)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${D}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};N2();var D2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,K=0,X=[],U=()=>{let B=(q-1)*Q;K=Math.max(0,(j-B)/q),X=Array(q);let y=K+Q;for(let L=0;L<q;L++)X[L]=L*y};U();let N=[],D=0,Y=[],W=(B)=>{let y=0,L=B[0];for(let E=1;E<B.length;E++){let O=B[E];if(O<L)L=O,y=E}return y},F=(B,y)=>{if(B<=0)return D=0,N=[],[];let L=Array(q).fill(0),E=Array(q);for(let $=0;$<q;$++)E[$]=[];let O=Array(B);for(let $=0;$<B;$++){let h=W(L),v=y($),G=L[h];O[$]={index:$,x:X[h],y:G,lane:h,size:v,crossSize:K},E[h].push($),L[h]=G+v+Q}N=E;let _=0;for(let $=0;$<q;$++){let h=L[$],v=h>0?h-Q:0;if(v>_)_=v}return D=_,O},M=(B)=>{if(B.length===0)return D>0?D:0;if(D>0)return D;let y=Array(q).fill(0);for(let E of B){let O=E.y+E.size,_=y[E.lane];if(O>_)y[E.lane]=O}let L=0;for(let E=0;E<q;E++)if(y[E]>L)L=y[E];return L},H=(B,y,L)=>{if(B.length===0||L<=y)return Y.length=0,Y;if(N.length===0||N.length!==q)return V(B,y,L);Y.length=0;for(let E=0;E<q;E++){let O=N[E],_=O.length;if(_===0)continue;let $=0,h=_;while($<h){let v=$+h>>>1,G=B[O[v]];if(G.y+G.size<=y)$=v+1;else h=v}for(let v=$;v<_;v++){let G=B[O[v]];if(G.y>=L)break;Y.push(G)}}return Y},V=(B,y,L)=>{let E=[];for(let O of B)if(O.y+O.size>y&&O.y<L)E.push(O);return E};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(B)=>{let y=!1;if(B.columns!==void 0){let L=Math.max(1,Math.floor(B.columns));if(L!==q)q=L,y=!0}if(B.gap!==void 0&&B.gap!==Q)Q=B.gap,y=!0;if(B.containerSize!==void 0&&B.containerSize!==j)j=B.containerSize,y=!0;if(y)U()},calculateLayout:F,getTotalSize:M,getVisibleItems:H}};var L1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var _2=(J,q,Q,j=!1,K,X)=>{let U=L1(),N=new Map,D=new Set,Y=0,W="",F=-1,M={selected:!1,focused:!1},H=(G,p)=>{return M.selected=G,M.focused=p,M},V=`${Q}-item ${Q}-masonry-item`,A=`${Q}-item--selected`,B=`${Q}-item--focused`,y=(G,p)=>{if(typeof p==="string")G.innerHTML=p;else G.replaceChildren(p)},L=(G,p,i)=>{G.classList.toggle(A,p),G.classList.toggle(B,i)},E=(G,p)=>{if(j)G.style.transform=`translate(${Math.round(p.y)}px, ${Math.round(p.x)}px)`;else G.style.transform=`translate(${Math.round(p.x)}px, ${Math.round(p.y)}px)`},O=(G,p)=>{if(j)G.style.width=`${p.size}px`,G.style.height=`${p.crossSize}px`;else G.style.width=`${p.crossSize}px`,G.style.height=`${p.size}px`},_=(G,p,i,w,u)=>{let Z=U.acquire(),P=H(w,u);if(Z.className=V,Z.dataset.index=String(G),Z.dataset.id=String(p.id),Z.dataset.lane=String(i.lane),Z.ariaSelected=String(w),X)Z.id=`${X}-item-${G}`;if(K){let T=K();if(T!==F)F=T,W=String(T);Z.setAttribute("aria-setsize",W),Z.setAttribute("aria-posinset",String(G+1))}O(Z,i);let C=q(p,G,P);return y(Z,C),L(Z,w,u),E(Z,i),{element:Z,lastItemId:p.id,lastSelected:w,lastFocused:u,lastY:i.y,lastX:i.x,lastSeenFrame:Y}},$=(G,p,i,w)=>{Y++,D.clear();for(let Z=0;Z<p.length;Z++)D.add(p[Z].index);for(let[Z,P]of N)if(D.has(Z))P.lastSeenFrame=Y;else if(Y-P.lastSeenFrame>2)U.release(P.element),N.delete(Z);let u=null;for(let Z=0;Z<p.length;Z++){let P=p[Z],C=P.index,T=G(C);if(!T)continue;let k=i.has(T.id),R=C===w,f=N.get(C);if(f){let r=f.lastItemId!==T.id,Q0=f.lastSelected!==k,z=f.lastFocused!==R,S=f.lastY!==P.y||f.lastX!==P.x;if(r||Q0||z){let c=H(k,R),a=q(T,C,c);y(f.element,a),L(f.element,k,R),f.element.dataset.id=String(T.id),f.element.ariaSelected=String(k),f.lastItemId=T.id,f.lastSelected=k,f.lastFocused=R}if(S)E(f.element,P),f.lastY=P.y,f.lastX=P.x}else{let r=_(C,T,P,k,R);if(!u)u=document.createDocumentFragment();u.appendChild(r.element),N.set(C,r)}}if(u)J.appendChild(u)},h=()=>{for(let{element:G}of N.values())U.release(G);N.clear(),J.innerHTML=""};return{render:$,getElement:(G)=>N.get(G)?.element,clear:h,destroy:()=>{h(),U.clear()}}};var b1=new Set,wJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(K){let{dom:X,emitter:U,config:N,rawConfig:D}=K,Y=N.classPrefix,W=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${Y}--masonry`);let F=()=>{return W?X.viewport.clientHeight:X.viewport.clientWidth},M={columns:J.columns,gap:J.gap??0,containerSize:F()};q=D2(M);let H=D.item,V=typeof H.height==="function"?H.height:(T)=>H.height,A=W&&D.item.width?typeof D.item.width==="function"?D.item.width:(T)=>D.item.width:V,B=()=>{let T=K.dataManager.getTotal();j=q.calculateLayout(T,(R)=>{return A(R)});let k=q.getTotalSize(j);if(K.sizeCache.getTotalSize=()=>k,W)X.content.style.width=`${k}px`;else X.content.style.height=`${k}px`},y=D.item.template;Q=_2(X.items,y,Y,W,()=>K.dataManager.getTotal(),N.ariaIdPrefix);let L=null,E=null,O=!1,_=()=>{if(O)return;O=!0,L=K.methods.get("_getSelectedIds")??null,E=K.methods.get("_getFocusedIndex")??null},$=(T)=>K.dataManager.getItem(T),h=-1,v=-1,G=!0,p=(N.overscan??3)*100,i=()=>{if(K.state.isDestroyed)return;_();let T=K.scrollController.getScrollTop(),k=K.state.viewportState.containerSize;if(!G&&T===h&&k===v)return;h=T,v=k,G=!1;let R=Math.max(0,T-p),f=T+k+p,r=q.getVisibleItems(j,R,f),Q0=L?L():b1,z=E?E():-1;if(Q&&r.length>0)Q.render($,r,Q0,z);let S=K.state.viewportState;S.scrollPosition=T;let c=r.length,a=c>0?r[0].index:0,I=c>0?r[c-1].index:0;S.visibleRange.start=a,S.visibleRange.end=I,S.renderRange.start=a,S.renderRange.end=I;let m=K.state.lastRenderRange;if(m.start!==a||m.end!==I)m.start=a,m.end=I,U.emit("range:change",{range:{start:a,end:I}})},w=()=>{K.state.lastRenderRange.start=-1,K.state.lastRenderRange.end=-1,G=!0,i()};K.setRenderFns(i,w);let u=(T,k)=>{let R=W?k:T;if(q&&q.containerSize!==R)q.update({containerSize:R}),B(),w()};K.resizeHandlers.push(u);let Z=()=>{B(),w()},P=K.dataManager,C=(T)=>{if(typeof P[T]!=="function")return;let k=P[T].bind(P);P[T]=(...R)=>{k(...R),Z()}};C("setItems"),C("appendItems"),C("prependItems"),C("updateItem"),C("removeItem"),K.methods.set("scrollToIndex",(T,k,R)=>{let f=j[T];if(!f)return;let r=f.y,Q0=K.state.viewportState.containerSize,z=r;if(k==="center")z=r-Q0/2+f.size/2;else if(k==="end")z=r-Q0+f.size;z=Math.max(0,z),K.scrollController.scrollTo(z,R==="smooth")}),B(),K.destroyHandlers.push(()=>{if(Q)Q.destroy();X.root.classList.remove(`${Y}--masonry`)})}}};var V2=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),c0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let K of q)j.add(K);return{...J,selected:j}},l0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},f0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return l0(J,[q]);else return c0(J,[q],Q)},G2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},M2=(J)=>({...J,selected:new Set}),k2=(J,q)=>{return J.focusedIndex=q,J},P2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},R2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},C2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},v2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var SJ=(J,q)=>{return J.selected.has(q)},r0=(J)=>{return Array.from(J.selected)},a0=(J,q)=>{let Q=[];for(let j of J.selected){let K=q(j);if(K)Q.push(K)}return Q};var fJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=V2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:U,emitter:N,config:D}=X,{classPrefix:Y,ariaIdPrefix:W}=D;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}let F=new Map,M=()=>{F.clear();let B=X.dataManager.getTotal(),y=X.dataManager.getCached();if(y===0)return;if(y>=B){for(let E=0;E<B;E++){let O=X.dataManager.getItem(E);if(O)F.set(O.id,E)}return}let L=X.dataManager.getStorage();if(L&&typeof L.getLoadedRanges==="function"){let E=L.getLoadedRanges();for(let O of E)for(let _=O.start;_<=O.end;_++){let $=X.dataManager.getItem(_);if($)F.set($.id,_)}}};N.on("load:end",({items:B,offset:y})=>{if(!B||B.length===0)return;if(y!==void 0)for(let L=0;L<B.length;L++){let E=B[L];if(E&&E.id!==void 0)F.set(E.id,y+L)}else M()}),M(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusedIndex});let{forceRender:H}=X.getRenderFns(),V=()=>{H();let B=(y)=>{let L=F.get(y);if(L===void 0)return;return X.dataManager.getItem(L)};N.emit("selection:change",{selected:r0(j),items:a0(j,B)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",U.root.appendChild(K);let A=K;N.on("selection:change",({selected:B})=>{let y=B.length;if(y===0)A.textContent="";else if(y===1)A.textContent="1 item selected";else A.textContent=`${y} items selected`}),X.clickHandlers.push((B)=>{if(X.state.isDestroyed)return;let L=B.target.closest("[data-index]");if(!L)return;let E=parseInt(L.dataset.index??"-1",10);if(E<0)return;let O=X.dataManager.getItem(E);if(!O)return;N.emit("item:click",{item:O,index:E,event:B}),j=k2(j,E),U.root.setAttribute("aria-activedescendant",`${W}-item-${E}`),j=f0(j,O.id,q),V()}),X.keydownHandlers.push((B)=>{if(X.state.isDestroyed)return;let y=X.dataManager.getTotal(),L=j.focusedIndex,E=!1,O=!1,_=j;switch(B.key){case"ArrowUp":_=P2(j,y),E=!0,O=!0;break;case"ArrowDown":_=R2(j,y),E=!0,O=!0;break;case"Home":_=C2(j,y),E=!0,O=!0;break;case"End":_=v2(j,y),E=!0,O=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let $=X.dataManager.getItem(j.focusedIndex);if($)_=f0(j,$.id,q);E=!0}break}if(E){B.preventDefault(),j=_;let $=j.focusedIndex;if($>=0){let h=X.dataManager.getState(),v=C0($,X.sizeCache,X.state.viewportState.containerSize,h.total,"center",X.getCachedCompression());X.scrollController.scrollTo(v),U.root.setAttribute("aria-activedescendant",`${W}-item-${$}`)}else U.root.removeAttribute("aria-activedescendant");if(O){let{selected:h}=j;if(L>=0&&L!==$){let v=X.dataManager.getItem(L);if(v)X.renderer.updateItemClasses(L,h.has(v.id),!1)}if($>=0){let v=X.dataManager.getItem($);if(v)X.renderer.updateItemClasses($,h.has(v.id),!0)}}else V()}}),X.methods.set("select",(...B)=>{j=c0(j,B,q),V()}),X.methods.set("deselect",(...B)=>{j=l0(j,B),V()}),X.methods.set("toggleSelect",(B)=>{j=f0(j,B,q),V()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let B=X.getAllLoadedItems();j=G2(j,B,q),M(),V()}),X.methods.set("clearSelection",()=>{j=M2(j),V()}),X.methods.set("getSelected",()=>{return r0(j)}),X.methods.set("getSelectedItems",()=>{return a0(j,(y)=>{let L=F.get(y);if(L===void 0)return;return X.dataManager.getItem(L)})}),X.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var IJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let K=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),U=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),D=N&&N().length>0?N():void 0;if(U===0){let M={index:0,offsetInItem:0,total:0};if(D)M.selectedIds=D;return M}let Y,W;if(X.isCompressed){let H=K/X.virtualSize*U;Y=Math.max(0,Math.min(Math.floor(H),U-1)),W=(H-Y)*Q.sizeCache.getSize(Y)}else Y=Q.sizeCache.indexAtOffset(K),W=K-Q.sizeCache.getOffset(Y);W=Math.max(0,W);let F={index:Y,offsetInItem:W,total:U};if(D)F.selectedIds=D;return F});let j=(K)=>{let{index:X,offsetInItem:U,selectedIds:N}=K,D=Q.getVirtualTotal();if(D===0)return;if(!Number.isFinite(X)||!Number.isFinite(U))return;if(Q.sizeCache.getTotal()!==D){Q.sizeCache.rebuild(D),Q.updateCompressionMode();let B=Q.getCachedCompression();Q.updateContentSize(B.virtualSize)}let W=Q.getCachedCompression(),F=Math.max(0,Math.min(X,D-1)),M;if(W.isCompressed){let B=Q.sizeCache.getSize(F),y=B>0?U/B:0;M=(F+y)/D*W.virtualSize}else M=Q.sizeCache.getOffset(F)+U;let H=Q.state.viewportState.containerSize,V=Math.max(0,W.virtualSize-H);if(M=Math.max(0,Math.min(M,V)),Q.scrollController.scrollTo(M),N&&N.length>0){let B=Q.methods.get("select");if(B)B(...N)}let A=Q.methods.get("loadVisibleRange");if(A)requestAnimationFrame(()=>{A()});else{let B=Q.methods.get("reload");if(B)requestAnimationFrame(()=>{B()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};export{IJ as withSnapshots,fJ as withSelection,vJ as withSections,WJ as withScrollbar,VJ as withScale,MJ as withPage,wJ as withMasonry,zJ as withGrid,GJ as withAsync,e2 as vlist,f0 as toggleSelection,FJ as simpleVisibleRange,c0 as selectItems,G2 as selectAll,$J as rangesEqual,q2 as rafThrottle,UJ as needsScaling,Y2 as mergeRanges,SJ as isSelected,R0 as isSectionHeader,P0 as isPlaceholderItem,kJ as isInRange,a0 as getSelectedItems,r0 as getSelectedIds,F0 as getScaleState,NJ as getScaleInfo,F0 as getScale,PJ as getRangeCount,BJ as getMaxItemsWithoutScaling,H2 as filterPlaceholders,RJ as diffRanges,l0 as deselectItems,B2 as createStickyHeader,X2 as createSparseStorage,T0 as createSizeCache,V2 as createSelectionState,m0 as createSectionedSizeFn,U2 as createSectionLayout,S0 as createScrollbar,_J as createScrollController,K2 as createPlaceholderManager,i0 as createMeasuredSizeCache,_2 as createMasonryRenderer,D2 as createMasonryLayout,d0 as createGridRenderer,W2 as createGridLayout,t0 as createEmitter,Z2 as createAsyncManager,M2 as clearSelection,HJ as clampScrollPosition,bJ as calculateTotalSize,C0 as calculateScrollToIndex,e0 as calculateScaledVisibleRange,J2 as calculateScaledScrollToIndex,KJ as calculateScaledRenderRange,w0 as calculateScaledItemPosition,EJ as calculateRenderRange,g0 as calculateMissingRanges,TJ as calculateItemOffset,ZJ as calculateIndexFromScrollPosition,yJ as calculateActualSize,x0 as buildLayoutItems,k0 as MAX_VIRTUAL_HEIGHT};
|
package/dist/types.d.ts
CHANGED
|
@@ -146,171 +146,6 @@ export interface ItemConfig<T extends VListItem = VListItem> {
|
|
|
146
146
|
/** Template function to render each item */
|
|
147
147
|
template: ItemTemplate<T>;
|
|
148
148
|
}
|
|
149
|
-
/** Main configuration for createVList */
|
|
150
|
-
export interface VListConfig<T extends VListItem = VListItem> {
|
|
151
|
-
/** Container element or selector */
|
|
152
|
-
container: HTMLElement | string;
|
|
153
|
-
/**
|
|
154
|
-
* Layout orientation (default: 'vertical').
|
|
155
|
-
*
|
|
156
|
-
* - `'vertical'` — Standard top-to-bottom scrolling (default)
|
|
157
|
-
* - `'horizontal'` — Left-to-right scrolling (carousel, timeline, etc.)
|
|
158
|
-
*
|
|
159
|
-
* When `'horizontal'`:
|
|
160
|
-
* - `item.width` is required (main-axis size for virtualization)
|
|
161
|
-
* - `item.height` is optional (cross-axis size, can be set via CSS)
|
|
162
|
-
* - Items are positioned with `translateX` instead of `translateY`
|
|
163
|
-
* - The viewport scrolls on the X axis
|
|
164
|
-
*
|
|
165
|
-
* Cannot be combined with `groups`, `grid`, or `reverse`.
|
|
166
|
-
*/
|
|
167
|
-
orientation?: "vertical" | "horizontal";
|
|
168
|
-
/** Item configuration (height and template) */
|
|
169
|
-
item: ItemConfig<T>;
|
|
170
|
-
/** Static items array (optional if using adapter) */
|
|
171
|
-
items?: T[];
|
|
172
|
-
/** Async data adapter for infinite scroll */
|
|
173
|
-
adapter?: VListAdapter<T>;
|
|
174
|
-
/** Number of extra items to render outside viewport (default: 3) */
|
|
175
|
-
overscan?: number;
|
|
176
|
-
/** Selection configuration */
|
|
177
|
-
selection?: SelectionConfig;
|
|
178
|
-
/**
|
|
179
|
-
* External scroll element for document/window scrolling.
|
|
180
|
-
* @deprecated Use `scroll.element` instead.
|
|
181
|
-
*/
|
|
182
|
-
scrollElement?: Window;
|
|
183
|
-
/** Scroll behavior configuration */
|
|
184
|
-
scroll?: ScrollConfig;
|
|
185
|
-
/**
|
|
186
|
-
* Custom scrollbar configuration.
|
|
187
|
-
* @deprecated Use `scroll.scrollbar` instead.
|
|
188
|
-
*/
|
|
189
|
-
scrollbar?: ScrollbarConfig;
|
|
190
|
-
/** Loading behavior configuration */
|
|
191
|
-
loading?: LoadingConfig;
|
|
192
|
-
/**
|
|
193
|
-
* Scroll idle detection timeout in ms (default: 150).
|
|
194
|
-
* @deprecated Use `scroll.idleTimeout` instead.
|
|
195
|
-
*/
|
|
196
|
-
idleTimeout?: number;
|
|
197
|
-
/** Custom CSS class prefix (default: 'vlist') */
|
|
198
|
-
classPrefix?: string;
|
|
199
|
-
/** Accessible label for the listbox (sets aria-label on the root element) */
|
|
200
|
-
ariaLabel?: string;
|
|
201
|
-
/**
|
|
202
|
-
* Groups configuration for sticky headers / grouped lists.
|
|
203
|
-
* When set, items are automatically grouped and section headers
|
|
204
|
-
* are inserted at group boundaries.
|
|
205
|
-
*
|
|
206
|
-
* Items MUST be pre-sorted by group — a new header is inserted
|
|
207
|
-
* whenever `getGroupForIndex` returns a different value.
|
|
208
|
-
*/
|
|
209
|
-
groups?: GroupsConfig;
|
|
210
|
-
/**
|
|
211
|
-
* Layout mode (default: 'list').
|
|
212
|
-
* - `'list'` — Standard vertical list (one item per row)
|
|
213
|
-
* - `'grid'` — 2D grid layout (multiple items per row, requires `grid` config)
|
|
214
|
-
*
|
|
215
|
-
* In grid mode:
|
|
216
|
-
* - Virtualization operates on ROWS, not individual items
|
|
217
|
-
* - Each row contains `grid.columns` items side by side
|
|
218
|
-
* - Item width is automatically calculated: (containerWidth - gaps) / columns
|
|
219
|
-
* - Compression applies to row count, not item count
|
|
220
|
-
*/
|
|
221
|
-
layout?: "list" | "grid";
|
|
222
|
-
/**
|
|
223
|
-
* Grid configuration (required when `layout: 'grid'`).
|
|
224
|
-
*
|
|
225
|
-
* ```ts
|
|
226
|
-
* createVList({
|
|
227
|
-
* container: '#gallery',
|
|
228
|
-
* layout: 'grid',
|
|
229
|
-
* grid: { columns: 4, gap: 8 },
|
|
230
|
-
* item: {
|
|
231
|
-
* height: 200,
|
|
232
|
-
* template: (item) => `<img src="${item.thumbnail}" />`,
|
|
233
|
-
* },
|
|
234
|
-
* items: photos,
|
|
235
|
-
* });
|
|
236
|
-
* ```
|
|
237
|
-
*/
|
|
238
|
-
grid?: GridConfig;
|
|
239
|
-
/**
|
|
240
|
-
* Reverse mode for chat-style UIs.
|
|
241
|
-
* When enabled:
|
|
242
|
-
* - The list starts scrolled to the bottom (newest items visible)
|
|
243
|
-
* - `appendItems()` auto-scrolls to bottom if the user was already at bottom
|
|
244
|
-
* - `prependItems()` preserves scroll position (older messages load above without jumping)
|
|
245
|
-
* - With an adapter, "load more" triggers near the TOP (loading older content)
|
|
246
|
-
*
|
|
247
|
-
* Items stay in chronological order (oldest = index 0, newest = last).
|
|
248
|
-
* Cannot be combined with `groups` or `grid` layout.
|
|
249
|
-
*
|
|
250
|
-
* ```ts
|
|
251
|
-
* const chat = createVList({
|
|
252
|
-
* container: '#messages',
|
|
253
|
-
* reverse: true,
|
|
254
|
-
* item: { height: 60, template: messageTemplate },
|
|
255
|
-
* items: messages,
|
|
256
|
-
* });
|
|
257
|
-
*
|
|
258
|
-
* chat.appendItems([newMessage]); // auto-scrolls to bottom
|
|
259
|
-
* chat.prependItems(olderMessages); // scroll position preserved
|
|
260
|
-
* ```
|
|
261
|
-
*/
|
|
262
|
-
reverse?: boolean;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Configuration options that can be updated dynamically without recreating the instance.
|
|
266
|
-
* Used by the update() method.
|
|
267
|
-
*/
|
|
268
|
-
export interface VListUpdateConfig {
|
|
269
|
-
/**
|
|
270
|
-
* Grid configuration (columns and gap).
|
|
271
|
-
* Only applicable when layout is 'grid'.
|
|
272
|
-
*/
|
|
273
|
-
grid?: {
|
|
274
|
-
columns?: number;
|
|
275
|
-
gap?: number;
|
|
276
|
-
};
|
|
277
|
-
/**
|
|
278
|
-
* Item height (for variable height updates).
|
|
279
|
-
* Can be a number or a function.
|
|
280
|
-
*/
|
|
281
|
-
itemHeight?: number | ((index: number) => number);
|
|
282
|
-
/**
|
|
283
|
-
* Selection mode.
|
|
284
|
-
* Changes selection behavior without recreating the list.
|
|
285
|
-
*/
|
|
286
|
-
selectionMode?: SelectionMode;
|
|
287
|
-
/**
|
|
288
|
-
* Overscan value (number of items to render outside viewport).
|
|
289
|
-
*/
|
|
290
|
-
overscan?: number;
|
|
291
|
-
}
|
|
292
|
-
/** Loading behavior configuration */
|
|
293
|
-
export interface LoadingConfig {
|
|
294
|
-
/**
|
|
295
|
-
* Velocity threshold above which data loading is skipped (px/ms)
|
|
296
|
-
* When scrolling faster than this, loading is deferred until scroll stops.
|
|
297
|
-
* Default: 25 px/ms
|
|
298
|
-
*/
|
|
299
|
-
cancelThreshold?: number;
|
|
300
|
-
/**
|
|
301
|
-
* Velocity threshold for preloading (px/ms)
|
|
302
|
-
* When scrolling faster than this but slower than cancelThreshold,
|
|
303
|
-
* extra items are preloaded in the scroll direction.
|
|
304
|
-
* Default: 2 px/ms
|
|
305
|
-
*/
|
|
306
|
-
preloadThreshold?: number;
|
|
307
|
-
/**
|
|
308
|
-
* Number of extra items to preload ahead of scroll direction
|
|
309
|
-
* Only applies when velocity is between preloadThreshold and cancelThreshold.
|
|
310
|
-
* Default: 50 items
|
|
311
|
-
*/
|
|
312
|
-
preloadAhead?: number;
|
|
313
|
-
}
|
|
314
149
|
/** Scroll position snapshot for save/restore */
|
|
315
150
|
export interface ScrollSnapshot {
|
|
316
151
|
/** First visible item index */
|
|
@@ -533,76 +368,4 @@ export interface VListEvents<T extends VListItem = VListItem> extends EventMap {
|
|
|
533
368
|
export type EventHandler<T> = (payload: T) => void;
|
|
534
369
|
/** Unsubscribe function */
|
|
535
370
|
export type Unsubscribe = () => void;
|
|
536
|
-
/** VList instance API */
|
|
537
|
-
export interface VList<T extends VListItem = VListItem> {
|
|
538
|
-
/** The root DOM element */
|
|
539
|
-
readonly element: HTMLElement;
|
|
540
|
-
/** Current items */
|
|
541
|
-
readonly items: readonly T[];
|
|
542
|
-
/** Total item count */
|
|
543
|
-
readonly total: number;
|
|
544
|
-
/** Set items (replaces all) */
|
|
545
|
-
setItems: (items: T[]) => void;
|
|
546
|
-
/** Append items */
|
|
547
|
-
appendItems: (items: T[]) => void;
|
|
548
|
-
/** Prepend items */
|
|
549
|
-
prependItems: (items: T[]) => void;
|
|
550
|
-
/** Update a single item by ID */
|
|
551
|
-
updateItem: (id: string | number, updates: Partial<T>) => void;
|
|
552
|
-
/** Remove item by ID */
|
|
553
|
-
removeItem: (id: string | number) => void;
|
|
554
|
-
/** Reload data (clears and re-fetches if using adapter) */
|
|
555
|
-
reload: () => Promise<void>;
|
|
556
|
-
/** Load data for the currently visible range without resetting (used by restoreScroll) */
|
|
557
|
-
loadVisibleRange: () => Promise<void>;
|
|
558
|
-
/** Update configuration without recreating the instance */
|
|
559
|
-
update: (config: Partial<VListUpdateConfig>) => void;
|
|
560
|
-
/** Scroll to specific index */
|
|
561
|
-
scrollToIndex: (index: number, alignOrOptions?: "start" | "center" | "end" | ScrollToOptions) => void;
|
|
562
|
-
/** Scroll to specific item by ID */
|
|
563
|
-
scrollToItem: (id: string | number, alignOrOptions?: "start" | "center" | "end" | ScrollToOptions) => void;
|
|
564
|
-
/** Cancel any in-progress smooth scroll animation */
|
|
565
|
-
cancelScroll: () => void;
|
|
566
|
-
/** Get current scroll position */
|
|
567
|
-
getScrollPosition: () => number;
|
|
568
|
-
/** Get a snapshot of the current scroll position for save/restore */
|
|
569
|
-
getScrollSnapshot: () => ScrollSnapshot;
|
|
570
|
-
/** Restore scroll position (and optionally selection) from a snapshot */
|
|
571
|
-
restoreScroll: (snapshot: ScrollSnapshot) => void;
|
|
572
|
-
/** Select item(s) by ID */
|
|
573
|
-
select: (...ids: Array<string | number>) => void;
|
|
574
|
-
/** Deselect item(s) by ID */
|
|
575
|
-
deselect: (...ids: Array<string | number>) => void;
|
|
576
|
-
/** Toggle selection */
|
|
577
|
-
toggleSelect: (id: string | number) => void;
|
|
578
|
-
/** Select all items */
|
|
579
|
-
selectAll: () => void;
|
|
580
|
-
/** Clear selection */
|
|
581
|
-
clearSelection: () => void;
|
|
582
|
-
/** Get selected item IDs */
|
|
583
|
-
getSelected: () => Array<string | number>;
|
|
584
|
-
/** Get selected items */
|
|
585
|
-
getSelectedItems: () => T[];
|
|
586
|
-
/** Subscribe to an event */
|
|
587
|
-
on: <K extends keyof VListEvents<T>>(event: K, handler: EventHandler<VListEvents<T>[K]>) => Unsubscribe;
|
|
588
|
-
/** Unsubscribe from an event */
|
|
589
|
-
off: <K extends keyof VListEvents<T>>(event: K, handler: EventHandler<VListEvents<T>[K]>) => void;
|
|
590
|
-
/** Destroy the instance and cleanup */
|
|
591
|
-
destroy: () => void;
|
|
592
|
-
}
|
|
593
|
-
/** Internal state */
|
|
594
|
-
export interface InternalState<T extends VListItem = VListItem> {
|
|
595
|
-
items: T[];
|
|
596
|
-
total: number;
|
|
597
|
-
viewport: ViewportState;
|
|
598
|
-
selection: SelectionState;
|
|
599
|
-
isLoading: boolean;
|
|
600
|
-
cursor?: string;
|
|
601
|
-
hasMore: boolean;
|
|
602
|
-
}
|
|
603
|
-
/** Rendered item tracking */
|
|
604
|
-
export interface RenderedItem {
|
|
605
|
-
index: number;
|
|
606
|
-
element: HTMLElement;
|
|
607
|
-
}
|
|
608
371
|
//# sourceMappingURL=types.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floor/vlist",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Lightweight, high-performance virtual list with zero dependencies",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Floor IO",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"dev": "bun run build.ts --watch",
|
|
53
53
|
"test": "bun test",
|
|
54
54
|
"typecheck": "tsc --noEmit",
|
|
55
|
+
"size": "bun run scripts/measure-size.ts",
|
|
55
56
|
"prepublishOnly": "bun run build --types"
|
|
56
57
|
},
|
|
57
58
|
"bugs": {
|