@floor/vlist 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
  Lightweight, high-performance virtual list with zero dependencies and dimension-agnostic architecture.
4
4
 
5
- **v1.3.1** — [Changelog](./changelog.txt)
5
+ **v1.3.3** — [Changelog](./changelog.txt)
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/%40floor%2Fvlist.svg)](https://www.npmjs.com/package/@floor/vlist)
8
- [![bundle size](https://img.shields.io/bundlephobia/minzip/@floor/vlist)](https://bundlephobia.com/package/@floor/vlist)
9
8
  [![CI](https://github.com/floor/vlist/actions/workflows/ci.yml/badge.svg)](https://github.com/floor/vlist/actions/workflows/ci.yml)
10
9
  [![license](https://img.shields.io/npm/l/vlist.svg)](https://github.com/floor/vlist/blob/main/LICENSE)
11
10
 
12
11
  - **Zero dependencies** — no external libraries
13
12
  - **Ultra memory efficient** — ~0.1-0.2 MB constant overhead regardless of dataset size
14
- - **~8.7 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
13
+ - **~9.3 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
15
14
  - **Builder API** — composable features with perfect tree-shaking
16
15
  - **Grid, masonry, table, groups, async, selection, scale** — all opt-in
17
16
  - **Horizontal & vertical** — semantically correct orientation support
17
+ - **Gap & padding** — built-in item spacing and content inset (CSS shorthand convention)
18
18
  - **Reverse, page-scroll, wrap** — every layout mode
19
19
  - **Accessible** — WAI-ARIA, keyboard navigation, focus-visible, screen-reader DOM ordering
20
20
  - **React, Vue, Svelte** — framework adapters available
@@ -89,15 +89,15 @@ const list = vlist({
89
89
 
90
90
  | Feature | Size | Description |
91
91
  |---------|------|-------------|
92
- | **Base** | 8.7 KB | Core virtualization |
92
+ | **Base** | 9.3 KB | Core virtualization, gap & padding |
93
93
  | `withGrid()` | +4.0 KB | 2D grid layout with context injection |
94
- | `withMasonry()` | +2.6 KB | Pinterest-style masonry layout |
94
+ | `withMasonry()` | +2.7 KB | Pinterest-style masonry layout |
95
95
  | `withGroups()` | +4.2 KB | Grouped lists with sticky/inline headers |
96
96
  | `withAsync()` | +4.0 KB | Lazy loading with adapters |
97
- | `withSelection()` | +1.8 KB | Single/multiple selection + keyboard nav |
97
+ | `withSelection()` | +1.7 KB | Single/multiple selection + keyboard nav |
98
98
  | `withScale()` | +2.6 KB | 1M+ items via scroll compression |
99
99
  | `withScrollbar()` | +1.2 KB | Custom scrollbar UI |
100
- | `withTable()` | +5.0 KB | Data table with columns, resize, sort, groups |
100
+ | `withTable()` | +4.9 KB | Data table with columns, resize, sort, groups |
101
101
  | `withPage()` | +0.4 KB | Document-level scrolling |
102
102
  | `withSnapshots()` | +0.5 KB | Scroll save/restore |
103
103
 
@@ -216,6 +216,8 @@ const list = vlist({
216
216
  | **Horizontal grid** | `orientation: 'horizontal'` + `withGrid()` |
217
217
  | **Data table** | `withTable({ columns, rowHeight, resizable })` |
218
218
  | **Grouped table** | `withTable({ columns, rowHeight })` + `withGroups({ ... })` |
219
+ | **Item gap** | `item: { height: 48, gap: 8 }` |
220
+ | **Content padding** | `padding: 16` or `padding: [16, 12]` or `padding: [16, 12, 20, 8]` |
219
221
  | **Masonry** | `withMasonry({ columns: 4, gap: 16 })` |
220
222
  | **Page-level scroll** | `withPage()` |
221
223
  | **1M+ items** | `withScale()` — auto-compresses scroll space |
@@ -391,11 +393,11 @@ This makes the codebase clearer and eliminates semantic confusion when working w
391
393
 
392
394
  | Configuration | Gzipped |
393
395
  |---------------|---------|
394
- | Base only | 8.7 KB |
395
- | + Grid | 12.8 KB |
396
- | + Groups | 12.9 KB |
397
- | + Async | 12.7 KB |
398
- | + Table | 13.7 KB |
396
+ | Base only | 9.3 KB |
397
+ | + Grid | 13.3 KB |
398
+ | + Groups | 13.4 KB |
399
+ | + Async | 13.3 KB |
400
+ | + Table | 14.2 KB |
399
401
 
400
402
  ### Memory Efficiency
401
403
 
@@ -446,7 +448,7 @@ const list: VList<Photo> = vlist<Photo>({
446
448
  ## Contributing
447
449
 
448
450
  1. Fork → branch → make changes → add tests → pull request
449
- 2. Run `bun test` (2763 tests) and `bun run build` before submitting
451
+ 2. Run `bun test` (2781 tests) and `bun run build` before submitting
450
452
 
451
453
  ## License
452
454
 
@@ -0,0 +1,21 @@
1
+ /**
2
+ * vlist/builder — Public API Assembly
3
+ *
4
+ * Constructs the public VList API object, base data method wrappers,
5
+ * scroll methods (cancelScroll, animateScroll, scrollToIndex), event
6
+ * subscription (on/off), and the destroy teardown.
7
+ *
8
+ * Extracted from core.ts materialize() — pure wiring with no hot-path
9
+ * implications. All mutable state accessed via the `$` refs bag.
10
+ *
11
+ * Uses positional parameters (not a deps object) so the minifier can
12
+ * rename every argument — no long property-name strings in the bundle.
13
+ */
14
+ import type { VListItem, VListEvents } from "../types";
15
+ import type { Emitter } from "../events/emitter";
16
+ import type { DOMStructure } from "./dom";
17
+ import type { createElementPool } from "./pool";
18
+ import type { BuilderContext, VListFeature, VList } from "./types";
19
+ import type { MRefs } from "./materialize";
20
+ export declare const createApi: <T extends VListItem = VListItem>($: MRefs<T>, dom: DOMStructure, emitter: Emitter<VListEvents<T>>, rendered: Map<number, HTMLElement>, pool: ReturnType<typeof createElementPool>, methods: Map<string, Function>, sortedFeatures: VListFeature<T>[], destroyHandlers: Array<() => void>, ctx: BuilderContext<T>, isReverse: boolean, wrapEnabled: boolean, handleClick: (event: MouseEvent) => void, handleDblClick: (event: MouseEvent) => void, handleKeydown: (event: KeyboardEvent) => void, onScrollFrame: () => void, resizeObserver: ResizeObserver, disconnectItemObserver: () => void, clearIdleTimer: () => void) => VList<T>;
21
+ //# sourceMappingURL=api.d.ts.map
@@ -116,6 +116,10 @@ export interface MRefs<T extends VListItem = VListItem> {
116
116
  gcw: () => number;
117
117
  /** getContainerHeight */
118
118
  gch: () => number;
119
+ /** gap — item spacing along main axis (0 = none) */
120
+ gp: number;
121
+ /** mainAxisPadding — sum of CSS padding along scroll axis (0 = none) */
122
+ mp: number;
119
123
  }
120
124
  /** Immutable dependencies the context factory needs from materialize(). */
121
125
  export interface MDeps<T extends VListItem = VListItem> {
@@ -0,0 +1,46 @@
1
+ /**
2
+ * vlist/builder — Mode B Measurement Subsystem
3
+ *
4
+ * Handles dynamic item measurement via ResizeObserver for estimated-size mode:
5
+ * - Creates and manages the item ResizeObserver
6
+ * - Tracks scroll correction deltas for above-viewport items
7
+ * - Defers content size updates during active scrolling for scrollbar stability
8
+ * - Pins scroll position to the end when the user was already there
9
+ *
10
+ * Extracted from core.ts materialize() — all mutable state lives in the
11
+ * returned MeasurementState object or is accessed via the `$` refs bag.
12
+ */
13
+ import type { VListItem, Range } from "../types";
14
+ import type { MeasuredSizeCache } from "../rendering/measured";
15
+ import type { DOMStructure } from "./dom";
16
+ import type { MRefs } from "./materialize";
17
+ /**
18
+ * Short keys survive minification as object property names, so we use
19
+ * 1–2 char keys to keep the bundle small:
20
+ *
21
+ * | Key | Meaning |
22
+ * |-----|------------------|
23
+ * | ob | observer |
24
+ * | ei | elementToIndex |
25
+ * | mc | measuredCache |
26
+ * | fl | flush |
27
+ * | se | stayAtEnd |
28
+ */
29
+ export interface MeasurementState {
30
+ /** observer */
31
+ ob: ResizeObserver | null;
32
+ /** elementToIndex */
33
+ ei: WeakMap<Element, number> | null;
34
+ /** measuredCache */
35
+ mc: MeasuredSizeCache | null;
36
+ /** flush */
37
+ fl: () => void;
38
+ /** stayAtEnd */
39
+ se: (scrollBefore: number, rerender?: boolean) => boolean;
40
+ }
41
+ /**
42
+ * Uses positional parameters (not a deps object) so the minifier can
43
+ * rename every argument — no long property-name strings in the bundle.
44
+ */
45
+ export declare const createMeasurement: <T extends VListItem>($: MRefs<T>, dom: DOMStructure, isHorizontal: boolean, visibleRange: Range, lastRenderRange: Range, isScrollingFn: () => boolean, updateContentSize: () => void, measuredCache: MeasuredSizeCache | null, measurementEnabled: boolean, gap?: number) => MeasurementState;
46
+ //# sourceMappingURL=measurement.d.ts.map
@@ -6,5 +6,5 @@ import type { Range } from "../types";
6
6
  import type { SizeCache } from "../rendering/sizes";
7
7
  export declare const calcVisibleRange: (scrollPosition: number, containerHeight: number, hc: SizeCache, totalItems: number, out: Range) => void;
8
8
  export declare const applyOverscan: (visible: Range, overscan: number, totalItems: number, out: Range) => void;
9
- export declare const calcScrollToPosition: (index: number, hc: SizeCache, containerHeight: number, totalItems: number, align: "start" | "center" | "end") => number;
9
+ export declare const calcScrollToPosition: (index: number, hc: SizeCache, containerHeight: number, totalItems: number, align: "start" | "center" | "end", mainAxisPadding?: number) => number;
10
10
  //# sourceMappingURL=range.d.ts.map
@@ -28,6 +28,26 @@ export interface BuilderConfig<T extends VListItem = VListItem> {
28
28
  * - 'horizontal' — Left-to-right scrolling
29
29
  */
30
30
  orientation?: "vertical" | "horizontal";
31
+ /**
32
+ * Padding around the list content (default: 0).
33
+ *
34
+ * Works exactly like CSS `padding` — adds inset space between the
35
+ * viewport edge and the items. Applied as CSS padding on the content
36
+ * element, so it works identically for list, grid, and masonry
37
+ * layouts with zero positioning overhead.
38
+ *
39
+ * Follows CSS shorthand convention:
40
+ * - `number` — Equal padding on all four sides
41
+ * - `[vertical, horizontal]` — Top/bottom and left/right
42
+ * - `[top, right, bottom, left]` — Per-side (CSS order)
43
+ *
44
+ * ```ts
45
+ * padding: 16 // 16px all sides
46
+ * padding: [16, 12] // 16px top/bottom, 12px left/right
47
+ * padding: [16, 12, 20, 8] // top, right, bottom, left
48
+ * ```
49
+ */
50
+ padding?: number | [number, number] | [number, number, number, number];
31
51
  /** Reverse mode for chat UIs */
32
52
  reverse?: boolean;
33
53
  /** Scroll behavior configuration (non-scrollbar options) */
@@ -113,6 +133,17 @@ export interface BuilderContext<T extends VListItem = VListItem> {
113
133
  readonly config: ResolvedBuilderConfig;
114
134
  /** The raw user-provided builder config (for features that need original values) */
115
135
  readonly rawConfig: BuilderConfig<T>;
136
+ /**
137
+ * Adjust a raw scroll position (from calculateScrollToIndex or similar)
138
+ * to account for CSS padding on the content element.
139
+ *
140
+ * CSS padding expands the scrollable area beyond `getTotalSize()`, so
141
+ * the max-scroll clamp must include the padding. The position itself
142
+ * is unchanged — CSS padding already offsets items visually.
143
+ *
144
+ * No-op when padding is 0 — returns the input unchanged.
145
+ */
146
+ adjustScrollPosition(position: number): number;
116
147
  renderer: Renderer<T>;
117
148
  dataManager: SimpleDataManager<T>;
118
149
  scrollController: ScrollController;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:P2,getOwnPropertyNames:_1,getOwnPropertyDescriptor:W1}=Object,D1=Object.prototype.hasOwnProperty;var s2=new WeakMap,G1=(J)=>{var q=s2.get(J),Q;if(q)return q;if(q=P2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")_1(J).map((j)=>!D1.call(q,j)&&P2(q,j,{get:()=>J[j],enumerable:!(Q=W1(J,j))||Q.enumerable}));return s2.set(J,q),q};var V1=(J,q)=>{for(var Q in q)P2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var n2=(J,q)=>()=>(J&&(q=J(J=0)),q);var M1=(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}},O1=(J,q)=>{let Q=q,j=new Float64Array(0),Y=(B)=>{Q=B,j=new Float64Array(B+1),j[0]=0;for(let Z=0;Z<B;Z++)j[Z+1]=j[Z]+J(Z)};Y(q);let X=(B)=>{if(Q===0)return 0;if(B<=0)return 0;if(B>=j[Q])return Q-1;let Z=0,_=Q-1;while(Z<_){let U=Z+_+1>>>1;if(j[U]<=B)Z=U;else _=U-1}return Z};return{getOffset:(B)=>{if(B<=0)return 0;if(B>=Q)return j[Q];return j[B]},getSize:(B)=>J(B),indexAtOffset:(B)=>X(B),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(B)=>Y(B),isVariable:()=>!0}},y0=(J,q)=>{if(typeof J==="number")return M1(J,q);return O1(J,q)},d0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let Y=0,X=0,B=q;while(B<j&&X<Q)X+=J.getSize(B),Y++,B++;return Math.max(1,Y)},J2=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,Y=0;for(let X=Q-1;X>=0;X--){let B=J.getSize(X);if(Y+B>q)break;Y+=B,j++}return Math.max(j,1)},z2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),Y=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+Y*J.getSize(X)};var I0=(J,q,Q)=>{let j=Array.from(q).sort((B,Z)=>B-Z);if(j.length<=1)return;let Y=[];for(let B=0;B<j.length;B++){let Z=Q(j[B]);if(Z)Y.push(Z)}if(Y.length<=1)return;let X=J.firstChild;for(let B=0;B<Y.length;B++){let Z=Y[B];if(Z===X)X=X.nextSibling;else J.insertBefore(Z,X)}};var KJ=3,BJ="vlist",w2=200,p0=50,ZJ=50,NJ=5,_J=2,H0=16000000,v2=150,WJ="x",DJ=20,S2="_isPlaceholder",GJ="__placeholder_";var L0=(J,q)=>{let Q=q.getTotalSize(),j=Q>H0,Y=j?H0:Q,X=Q>0?Y/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:Y,ratio:X}},q2=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!Y.isCompressed){let G=Q.indexAtOffset(J),$=Q.indexAtOffset(J+q);if($<j-1)$++;return X.start=Math.max(0,G),X.end=Math.min(j-1,Math.max(0,$)),X}let{virtualSize:B}=Y,_=J/B*j,U=Math.floor(_),W=d0(Q,Math.max(0,U),q,j),L=Math.ceil(_)+W,H=B-q-J;if(H<=q&&H>=-1){let G=J2(Q,q,j),$=Math.max(0,j-G),N=Math.max(0,Math.min(1,1-H/q));U=Math.floor(U+($-U)*N),L=H<=1?j-1:Math.min(j-1,U+W)}return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,L)),X},MJ=(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},h0=(J,q,Q,j,Y,X,B)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:Z}=X,_=Z-Y,U=_-q;if(U<=Y&&U>=-1){if(q>=_-1){let T=Q.getTotalSize()-Q.getOffset(J);return Y-T}let H=J2(Q,Y,j),G=Math.max(0,j-H),N=q/Z*j,V=Math.max(0,Math.min(1,1-U/Y)),z=Q.getOffset(J)-Q.getOffset(G),M=Q.getOffset(J)-z2(Q,N,j);return M+(z-M)*V}let W=q/Z,L=Q.getTotalSize(),E=W*L;return Q.getOffset(J)-E},X2=(J,q,Q,j,Y,X="start")=>{if(j===0)return 0;let B;if(Y.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,Y.virtualSize-Q);B=J/j*Y.virtualSize}else B=q.getOffset(J);let Z=q.getSize(J);switch(X){case"center":B-=(Q-Z)/2;break;case"end":B-=Q-Z;break}let _=Y.virtualSize-Q;return Math.max(0,Math.min(B,_))},OJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let Y=J/j.virtualSize;return Math.floor(Y*Q)}return q.indexAtOffset(J)},EJ=(J,q)=>{if(typeof q==="number")return J*q>H0;return q.getTotalSize()>H0},AJ=(J)=>{if(J<=0)return 0;return Math.floor(H0/J)},FJ=(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 Y2=()=>{};var C0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var gJ={};V1(gJ,{createGridRenderer:()=>r0});var R1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},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}}},z1=1,r0=(J,q,Q,j,Y,X,B,Z,_=!1)=>{let U=R1(),W=new Map,L=X,E=!1,H=null,G=0,$=0,N="",V=-1,z=(k)=>{if(H&&G===k)return H;return H=L0(k,Q),G=k,H},M={selected:!1,focused:!1},T=(k,O)=>{return M.selected=k,M.focused=O,M},C=`${Y}-item ${Y}-grid-item`,D=`${Y}-item--selected`,d=`${Y}-item--focused`,p=(k,O)=>{if(typeof O==="string")k.innerHTML=O;else k.replaceChildren(O)},A=(k,O,w)=>{k.classList.toggle(D,O),k.classList.toggle(d,w)},f=(k,O)=>{let w=j.getRow(k);if(O){let F=O.totalItems,I=z(F);if(I.isCompressed)return h0(w,O.scrollPosition,Q,F,O.containerSize,I,O.rangeStart)}return Q.getOffset(w)},n=(k,O)=>{let w=E&&j.getCol(k)===0,F=w?0:j.getCol(k),I=w?0:j.getColumnOffset(F,L),m;if(E){let i=j.getRow(k),s=0,j0=new Set;for(let q0=0;q0<k;q0++){let a=j.getRow(q0);if(a<i&&!j0.has(a)){let t=Q.getSize(q0);s+=t,j0.add(a)}}m=s}else m=f(k,O);if(_)return`translate(${Math.round(m)}px, ${Math.round(I)}px)`;return`translate(${Math.round(I)}px, ${Math.round(m)}px)`},x=(k,O)=>{k.style.transform=O},r=(k,O)=>{let w=k.dataset.id?.startsWith("__group_header"),F=w?L:j.getColumnWidth(L),I;if(E||w)I=Q.getSize(O)-j.gap;else{let m=j.getRow(O);I=Q.getSize(m)-j.gap}if(_)k.style.width=`${I}px`,k.style.height=`${F}px`;else k.style.width=`${F}px`,k.style.height=`${I}px`},l=(k,O,w,F,I)=>{let m=U.acquire(),i=T(w,F);if(m.className=C,m.dataset.index=String(k),m.dataset.id=String(O.id),m.dataset.row=String(j.getRow(k)),m.dataset.col=String(j.getCol(k)),m.ariaSelected=String(w),Z)m.id=`${Z}-item-${k}`;if(B){let j0=B();if(j0!==V)V=j0,N=String(j0);m.setAttribute("aria-setsize",N),m.setAttribute("aria-posinset",String(k+1))}r(m,k);let s=q(O,k,i);return p(m,s),A(m,w,F),x(m,I),{element:m,lastItemId:O.id,lastSelected:w,lastFocused:F,lastTransform:I,lastSeenFrame:$}},K=(k,O,w,F,I)=>{if($++,O.start===0&&k.length>0)E=C0(k[0]);for(let[s,j0]of W)if(s>=O.start&&s<=O.end)j0.lastSeenFrame=$;else if($-j0.lastSeenFrame>z1)U.release(j0.element),W.delete(s);let m=!1;if(B){let s=B();if(s!==V)V=s,N=String(s),m=!0}let i=null;for(let s=O.start;s<=O.end;s++){let j0=s-O.start,q0=k[j0];if(!q0){console.warn(`⚠️ RENDER: Missing item at index ${s} (range: ${O.start}-${O.end}, items.length: ${k.length})`);continue}let a=w.has(q0.id),t=s===F,c=W.get(s);if(c){let Y0=c.lastItemId!==q0.id,B0=c.lastSelected!==a,Z0=c.lastFocused!==t;if(Y0||B0||Z0){if(Y0){let D0=T(a,t),Q0=q(q0,s,D0);p(c.element,Q0),c.element.dataset.id=String(q0.id),c.element.dataset.row=String(j.getRow(s)),c.element.dataset.col=String(j.getCol(s)),r(c.element,s)}A(c.element,a,t),c.element.ariaSelected=String(a),c.lastItemId=q0.id,c.lastSelected=a,c.lastFocused=t}let W0=n(s,I);if(c.lastTransform!==W0)x(c.element,W0),c.lastTransform=W0;if(m)c.element.setAttribute("aria-setsize",N)}else{let Y0=n(s,I),B0=l(s,q0,a,t,Y0);if(!i)i=document.createDocumentFragment();i.appendChild(B0.element),W.set(s,B0)}}if(i)J.appendChild(i)},g=(k)=>{for(let[O,w]of W){let F=n(O,k);if(w.lastTransform!==F)x(w.element,F),w.lastTransform=F}},y=(k,O,w,F)=>{let I=W.get(k);if(!I)return;let m=I.lastItemId!==O.id,i=I.lastSelected!==w,s=I.lastFocused!==F;if(m||i||s){let j0=T(w,F),q0=q(O,k,j0);p(I.element,q0),A(I.element,w,F),I.element.dataset.id=String(O.id),I.element.ariaSelected=String(w),r(I.element,k),I.lastItemId=O.id,I.lastSelected=w,I.lastFocused=F}},R=(k,O,w)=>{let F=W.get(k);if(!F)return;let I=F.lastSelected!==O,m=F.lastFocused!==w;if(I||m)A(F.element,O,w),F.lastSelected=O,F.lastFocused=w},h=(k)=>{return W.get(k)?.element},P=(k)=>{if(Math.abs(k-L)<1)return;L=k;for(let[O,w]of W){r(w.element,O);let F=n(O);x(w.element,F),w.lastTransform=F}},u=()=>{I0(J,W.keys(),(k)=>W.get(k)?.element)},v=()=>{for(let[,k]of W)U.release(k.element);W.clear()};return{render:K,updatePositions:g,updateItem:y,updateItemClasses:R,getElement:h,sortDOM:u,updateContainerWidth:P,clear:v,destroy:()=>{v(),U.clear()}}};var G2=n2(()=>{Y2()});var o2=2,i2=(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}},R2=(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 Y=J.samples[J.sampleIndex];if(Y.position=q,Y.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,B=J.samples[X],Z=q-B.position,_=Q-B.time;J.velocity=_>0?Math.abs(Z)/_:0}return J.lastPosition=q,J.lastTime=Q,J};var Q2=(J,q)=>{let Q=new Map,j=(X)=>{let B=Q.get(X);return B!==void 0?B:J},Y=y0(j,q);return{getOffset(X){return Y.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return Y.indexAtOffset(X)},getTotalSize(){return Y.getTotalSize()},getTotal(){return Y.getTotal()},rebuild(X){if(X<Y.getTotal()){for(let B of Q.keys())if(B>=X)Q.delete(B)}Y=y0(j,X)},isVariable(){return!0},setMeasuredSize(X,B){Q.set(X,B)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var j2=()=>{let J={},q=(Z,_)=>{if(!J[Z])J[Z]=new Set;return J[Z].add(_),()=>Q(Z,_)},Q=(Z,_)=>{J[Z]?.delete(_)};return{on:q,off:Q,emit:(Z,_)=>{J[Z]?.forEach((U)=>{try{U(_)}catch(W){console.error(`[vlist] Error in event handler for "${String(Z)}":`,W)}})},once:(Z,_)=>{let U=(W)=>{Q(Z,U),_(W)};return q(Z,U)},clear:(Z)=>{if(Z)delete J[Z];else for(let _ in J)delete J[_]},listenerCount:(Z)=>{return J[Z]?.size??0}}};var t2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},e2=(J,q,Q,j)=>{let Y=document.createElement("div");if(Y.className=q,j)Y.classList.add(`${q}--horizontal`);Y.setAttribute("tabindex","0");let X=document.createElement("div");if(X.className=`${q}-viewport`,X.setAttribute("tabindex","-1"),j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let B=document.createElement("div");if(B.className=`${q}-content`,B.style.position="relative",j)B.style.height="100%";else B.style.width="100%";let Z=document.createElement("div");if(Z.className=`${q}-items`,Z.setAttribute("role","listbox"),Q)Z.setAttribute("aria-label",Q);if(j)Z.setAttribute("aria-orientation","horizontal");if(Z.style.position="relative",j)Z.style.height="100%";else Z.style.width="100%";return B.appendChild(Z),X.appendChild(B),Y.appendChild(X),J.appendChild(Y),{root:Y,viewport:X,content:B,items:Z}};var JJ=(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 QJ=(J,q,Q,j,Y)=>{if(j===0||q===0){Y.start=0,Y.end=0;return}let X=Q.indexAtOffset(J),B=d0(Q,X,q,j),Z=X+B;Y.start=Math.max(0,X),Y.end=Math.min(j-1,Math.max(0,Z))},jJ=(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)},qJ=(J,q,Q,j,Y)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),B=q.getOffset(X),Z=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),U;switch(Y){case"center":U=B-(Q-Z)/2;break;case"end":U=B-Q+Z;break;default:U=B}return Math.max(0,Math.min(U,_))};var C2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,R0=(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}},f0=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,B,Z)=>{if(j(),Math.abs(B-X)<1){J.scrollTo(B);return}let _=performance.now(),U=(W)=>{let L=W-_,E=Math.min(L/Z,1),H=X+(B-X)*C2(E);if(J.scrollTo(H),q(),E<1)Q=requestAnimationFrame(U);else Q=null};Q=requestAnimationFrame(U)},cancelScroll:j}};var XJ=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:Y,rawConfig:X,rendered:B,pool:Z,sharedState:_,isHorizontal:U,classPrefix:W,contentSizeHandlers:L,idleHandlers:E,afterScroll:H,clickHandlers:G,keydownHandlers:$,resizeHandlers:N,destroyHandlers:V,methods:z,onScrollFrame:M,resizeObserver:T,renderRange:C}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return Y},get rawConfig(){return X},get renderer(){return{render:(D,d,p,A,f)=>{J.ss=p,J.fi=A,J.ffn()},updateItemClasses:(D,d,p)=>{let A=B.get(D);if(!A)return;A.classList.toggle(`${W}-item--selected`,d),A.classList.toggle(`${W}-item--focused`,p),A.ariaSelected=d?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(D)=>B.get(D)??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:H,idleHandlers:E,clickHandlers:G,keydownHandlers:$,resizeHandlers:N,contentSizeHandlers:L,destroyHandlers:V,methods:z,replaceTemplate(D){J.at=D},replaceRenderer(D){},replaceDataManager(D){J.dm=D},replaceScrollController(D){J.sc=D},getItemsForRange(D){let{dm:d,it:p}=J,A=[];for(let f=D.start;f<=D.end;f++){let n=d?d.getItem(f):p[f];if(n)A.push(n)}return A},getAllLoadedItems(){let D=J.dm;if(D){let d=D.getTotal(),p=[];for(let A=0;A<d;A++){let f=D.getItem(A);if(f)p.push(f)}return p}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:C.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,D]of B)D.remove(),Z.release(D);B.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(D,d){J.rfn=D,J.ffn=d},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=`${D}px`;if(U)Q.content.style.width=d;else Q.content.style.height=d},updateCompressionMode(){},setVisibleRangeFn(D){J.gvr=D},setScrollToPosFn(D){J.gsp=D},setPositionElementFn(D){J.pef=D},setScrollFns(D,d){J.sgt=D,J.sst=(p)=>{d(p),M()}},setScrollTarget(D){J.st.removeEventListener("scroll",M),J.st=D,J.st.addEventListener("scroll",M,{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=U?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,T.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},YJ=(J,q,Q)=>{let{rendered:j,itemState:Y,contentSizeHandlers:X,applyTemplate:B,updateContentSize:Z}=q,_=()=>{J.hc.rebuild(J.vtf()),Z(),Q.updateCompressionMode();for(let U=0;U<X.length;U++)X[U]();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:(U)=>J.it[U],isItemLoaded:(U)=>U>=0&&U<J.it.length&&J.it[U]!==void 0,getItemsInRange:(U,W)=>{let L=J.it,E=[],H=Math.max(0,U),G=Math.min(W,L.length-1);for(let $=H;$<=G;$++)E.push(L[$]);return E},setTotal:(U)=>{},setItems:(U,W=0,L)=>{let E=J.it;if(W===0&&(L!==void 0||E.length===0))J.it=U;else{let H=W+U.length;if(E.length<H)E.length=H;for(let G=0;G<U.length;G++)E[W+G]=U[G]}if(J.ii)_()},updateItem:(U,W)=>{let L=J.it;if(U<0||U>=L.length)return!1;let E=L[U];if(!E)return!1;L[U]={...E,...W};let H=j.get(U);if(H)B(H,J.at(L[U],U,Y)),H.dataset.id=String(L[U].id);return!0},removeItem:(U)=>{if(U<0||U>=J.it.length)return!1;if(J.it.splice(U,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),Z(),J.ffn()}}},UJ=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(Y)=>{J.sst(Y),J.ls=Y,J.rfn()},scrollBy:(Y)=>{let X=J.sgt()+Y;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(Y=2)=>J.sab(Y),getScrollPercentage:()=>{let Y=J.hc.getTotalSize(),X=Math.max(0,Y-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:(Y)=>{J.ch=Y},destroy:()=>{}}};var E1=0,VJ=(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",Y=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(Y==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(Y!=null){if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="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 B=new Map,Z=!1,_={use(U){if(Z)throw Error("[vlist/builder] Cannot call .use() after .build()");return B.set(U.name,U),_},build(){if(Z)throw Error("[vlist/builder] .build() can only be called once");return Z=!0,A1(J,B,q,Y,X??null)}};return _};function A1(J,q,Q,j,Y){let{item:X,items:B,overscan:Z=KJ,classPrefix:_=BJ,ariaLabel:U,reverse:W=!1,scroll:L}=J,E=L,H=E?.wheel??!0,G=E?.wrap??!1,$=W,N=`${_}-${E1++}`,V=j??Y,z=j==null&&Y!=null,M=typeof matchMedia==="function"&&matchMedia("(pointer: coarse)").matches&&!matchMedia("(pointer: fine)").matches,T=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,C={overscan:Z,classPrefix:_,reverse:$,wrap:G,horizontal:Q,ariaIdPrefix:N},D=Array.from(q.values()).sort((b,o)=>(b.priority??50)-(o.priority??50)),d=new Set(D.map((b)=>b.name));for(let b of D)if(b.conflicts){for(let o of b.conflicts)if(d.has(o))throw Error(`[vlist/builder] ${b.name} and ${o} cannot be combined`)}if($){if(d.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let p=t2(J.container),A=e2(p,_,U,Q);if(E?.wheel===!1)if(Q)A.viewport.style.overflowX="hidden";else A.viewport.style.overflow="hidden";if(E?.scrollbar==="none")A.viewport.classList.add(`${_}-viewport--no-scrollbar`);let f=j2(),n=B||[],x=typeof V==="function"&&(q.has("withGrid")||q.has("withMasonry")),r=z?Q2(Y,n.length):y0(V,x?0:n.length),l=JJ(),K={it:n,hc:r,ch:A.viewport.clientHeight,cw:A.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:i2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>A.viewport.scrollLeft:()=>A.viewport.scrollTop,sst:Q?(b)=>{A.viewport.scrollLeft=b}:(b)=>{A.viewport.scrollTop=b},sab:(b=2)=>{let o=K.hc.getTotalSize();return K.ls+K.ch>=o-b},sic:!1,rfn:null,ffn:null,gvr:(b,o,e,J0,U0)=>{QJ(b,o,e,J0,U0)},gsp:(b,o,e,J0,U0)=>{return qJ(b,o,e,J0,U0)},pef:null,at:X.template,vre:!0,st:A.viewport,wh:null,gcw:()=>K.cw,gch:()=>K.ch};K.vtf=()=>K.dm?K.dm.getTotal():K.it.length;let g=null,y=null,R=!1,h={start:0,end:0},P={start:0,end:0},u={start:-1,end:-1},v={viewportState:{scrollPosition:0,containerSize:Q?K.cw:K.ch,totalSize:K.hc.getTotalSize(),actualSize:K.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},S=new Map,k=()=>{I0(A.items,S.keys(),(b)=>S.get(b))},O=z?new WeakMap:null,w=z?r:null,F=null,I=0,m=!1,i=()=>{if(!z)return;if(m){let b=K.sgt(),o=Q?A.viewport.scrollWidth-A.viewport.clientWidth:A.viewport.scrollHeight-A.viewport.clientHeight,e=o>0&&b>=o-2;if(x0(),m=!1,e){let J0=Math.max(0,K.hc.getTotalSize()-(Q?K.cw:K.ch));if(J0>b)K.sst(J0),K.ls=J0,K.rfn()}}};if(z&&w&&O)F=new ResizeObserver((b)=>{if(K.id)return;let o=!1,e=h.start;for(let J0 of b){let U0=O.get(J0.target);if(U0===void 0)continue;let X0=Q?J0.borderBoxSize[0].inlineSize:J0.borderBoxSize[0].blockSize;if(!w.isMeasured(U0)){let K0=w.getSize(U0);if(w.setMeasuredSize(U0,X0),o=!0,U0<e&&X0!==K0)I+=X0-K0;F.unobserve(J0.target);let N0=J0.target;if(Q)N0.style.width=`${X0}px`;else N0.style.height=`${X0}px`}}if(!o)return;if(w.rebuild(K.vtf()),K.hc=w,I!==0){let J0=K.sgt();K.sst(J0+I),K.ls=J0+I,I=0}if(R)m=!0;else{let J0=K.sgt(),U0=Q?A.viewport.scrollWidth-A.viewport.clientWidth:A.viewport.scrollHeight-A.viewport.clientHeight,X0=U0>0&&J0>=U0-2;if(x0(),m=!1,X0){let K0=Math.max(0,K.hc.getTotalSize()-(Q?K.cw:K.ch));if(K0>J0)K.sst(K0),K.ls=K0}}u.start=-1,u.end=-1,K.rfn()});let s={selected:!1,focused:!1},j0=`${_}-item`,q0=X.striped===!0,a=`${_}-item--odd`,t=[],c=[],Y0=[],B0=[],Z0=[],W0=[],D0=[],Q0=new Map,M0=null,$0=null,G0=!1,T0=()=>{if(G0)return;G0=!0,M0=Q0.get("_getSelectedIds")??null,$0=Q0.get("_getFocusedIndex")??null},V0=(b,o)=>{if(typeof o==="string")b.innerHTML=o;else b.replaceChildren(o)},b0=(b,o)=>{let e=Math.round(K.hc.getOffset(o));if(Q)b.style.transform=`translateX(${e}px)`;else b.style.transform=`translateY(${e}px)`};K.pef=b0;let v0=(b,o)=>{let e=l.acquire();e.className=j0;let J0=!z||w&&w.isMeasured(b);if(Q){if(J0)e.style.width=`${K.hc.getSize(b)}px`;else e.style.width="";if(T!=null)e.style.height=`${T}px`}else if(J0)e.style.height=`${K.hc.getSize(b)}px`;else e.style.height="";if(e.dataset.index=String(b),e.dataset.id=String(o.id),e.ariaSelected="false",e.id=`${N}-item-${b}`,K.la=String(K.vtf()),e.setAttribute("aria-setsize",K.la),e.setAttribute("aria-posinset",String(b+1)),String(o.id).startsWith("__placeholder_"))e.classList.add(`${_}-item--placeholder`);if(q0)e.classList.toggle(a,(b&1)===1);return V0(e,K.at(o,b,s)),K.pef(e,b),e},x0=()=>{let b=`${K.hc.getTotalSize()}px`;if(Q)A.content.style.width=b;else A.content.style.height=b},sJ=()=>{if(K.id)return;T0();let b=M0?M0():K.ss,o=$0?$0():K.fi,e=K.vtf(),J0=Q?K.cw:K.ch;if(K.gvr(K.ls,J0,K.hc,e,h),jJ(h,Z,e,P),P.start===u.start&&P.end===u.end){if(K.sic)for(let[_0,O0]of S)K.pef(O0,_0);return}let U0=String(e),X0=U0!==K.la;K.la=U0;for(let[_0,O0]of S)if(_0<P.start||_0>P.end)O0.remove(),l.release(O0),S.delete(_0);let K0=document.createDocumentFragment(),N0=[],F0=[];for(let _0=P.start;_0<=P.end;_0++){let O0=K.dm?K.dm.getItem(_0):K.it[_0];if(O0===void 0)continue;let A0=S.get(_0);if(A0){let k0=A0.dataset.id,m0=String(O0.id);if(k0!==m0){let N1=k0?.startsWith("__placeholder_"),a2=m0.startsWith("__placeholder_");V0(A0,K.at(O0,_0,s)),A0.dataset.id=m0;let r2=!z||w&&w.isMeasured(_0);if(Q)A0.style.width=r2?`${K.hc.getSize(_0)}px`:"";else A0.style.height=r2?`${K.hc.getSize(_0)}px`:"";if(a2)A0.classList.add(`${_}-item--placeholder`);else A0.classList.remove(`${_}-item--placeholder`);if(N1&&!a2)A0.classList.add(`${_}-item--replaced`),setTimeout(()=>{A0.classList.remove(`${_}-item--replaced`)},300)}K.pef(A0,_0);let e0=b.has(O0.id),Z1=_0===o;if(A0.classList.toggle(`${_}-item--selected`,e0),A0.classList.toggle(`${_}-item--focused`,Z1),A0.ariaSelected=e0?"true":"false",X0)A0.setAttribute("aria-setsize",K.la)}else{let k0=v0(_0,O0);F0.push({index:_0,element:k0});let m0=b.has(O0.id),e0=_0===o;if(m0)k0.classList.add(`${_}-item--selected`),k0.ariaSelected="true";if(e0)k0.classList.add(`${_}-item--focused`);K0.appendChild(k0),N0.push({index:_0,element:k0})}}if(N0.length>0){A.items.appendChild(K0);for(let{index:_0,element:O0}of N0)S.set(_0,O0)}if(z&&F&&w&&O){for(let{index:_0,element:O0}of F0)if(!w.isMeasured(_0))O.set(O0,_0),F.observe(O0)}u.start=P.start,u.end=P.end,v.lastRenderRange.start=P.start,v.lastRenderRange.end=P.end,v.viewportState.scrollPosition=K.ls,v.viewportState.visibleRange.start=h.start,v.viewportState.visibleRange.end=h.end,v.viewportState.renderRange.start=P.start,v.viewportState.renderRange.end=P.end,f.emit("range:change",{range:{start:P.start,end:P.end}})},nJ=()=>{u.start=-1,u.end=-1,K.rfn()};K.rfn=sJ,K.ffn=nJ;let H2=()=>{if(K.id)return;let b=K.sgt(),o=b>=K.ls?"down":"up";if(K.vt=R2(K.vt,b),!A.root.classList.contains(`${_}--scrolling`))A.root.classList.add(`${_}--scrolling`);R=!0,K.ls=b,K.rfn(),f.emit("scroll",{scrollPosition:b,direction:o}),f.emit("velocity:change",{velocity:K.vt.velocity,reliable:K.vt.sampleCount>=o2});for(let e=0;e<t.length;e++)t[e](b,o);if(y)clearTimeout(y);y=setTimeout(()=>{A.root.classList.remove(`${_}--scrolling`),R=!1,K.vt.velocity=0,K.vt.sampleCount=0,f.emit("velocity:change",{velocity:0,reliable:!1}),i(),k();for(let e=0;e<c.length;e++)c[e]();f.emit("scroll:idle",{scrollPosition:K.ls})},E?.idleTimeout??v2)},S0=null;if(K.st.addEventListener("scroll",H2,{passive:!0}),H&&!Q&&!M)S0=(b)=>{if(v.viewportState.isCompressed)return;let o=A.viewport.scrollWidth>A.viewport.clientWidth;if(o&&Math.abs(b.deltaX)>Math.abs(b.deltaY))return;if(b.preventDefault(),o&&b.deltaX!==0)A.viewport.scrollLeft+=b.deltaX;let e=K.sgt(),J0=b.deltaY,U0=A.viewport.scrollHeight-A.viewport.clientHeight,X0=Math.max(0,Math.min(e+J0,U0));if(Math.abs(X0-e)<1){if(K.vt.velocity!==0)K.vt.velocity=0,K.vt.sampleCount=0,f.emit("velocity:change",{velocity:0,reliable:!1});return}K.sst(X0),K.ls=X0,K.vt=R2(K.vt,X0),K.rfn();let K0=X0>=e?"down":"up";if(f.emit("scroll",{scrollPosition:X0,direction:K0}),!A.root.classList.contains(`${_}--scrolling`))A.root.classList.add(`${_}--scrolling`);if(R=!0,y)clearTimeout(y);y=setTimeout(()=>{A.root.classList.remove(`${_}--scrolling`),R=!1,K.vt.velocity=0,K.vt.sampleCount=0,f.emit("velocity:change",{velocity:0,reliable:!1}),i(),k();for(let N0=0;N0<c.length;N0++)c[N0]();f.emit("scroll:idle",{scrollPosition:K.ls})},E?.idleTimeout??v2)},K.wh=S0,A.viewport.addEventListener("wheel",S0,{passive:!1});else if(Q&&H)S0=(b)=>{if(b.deltaX)return;b.preventDefault(),A.viewport.scrollLeft+=b.deltaY},K.wh=S0,A.viewport.addEventListener("wheel",S0,{passive:!1});let m2=(b)=>{let e=b.target.closest("[data-index]");if(e){let J0=parseInt(e.dataset.index??"-1",10);if(J0>=0){let U0=K.dm?.getItem(J0)??K.it[J0];if(U0){if(U0.__groupHeader)return;f.emit("item:click",{item:U0,index:J0,event:b})}}}for(let J0=0;J0<Y0.length;J0++)Y0[J0](b)},oJ=(b)=>{let e=b.target.closest("[data-index]");if(e){let J0=parseInt(e.dataset.index??"-1",10);if(J0>=0){let U0=K.dm?.getItem(J0)??K.it[J0];if(U0){if(U0.__groupHeader)return;f.emit("item:dblclick",{item:U0,index:J0,event:b})}}}},d2=(b)=>{for(let o=0;o<B0.length;o++)B0[o](b)};A.items.addEventListener("click",m2),A.items.addEventListener("dblclick",oJ),A.root.addEventListener("keydown",d2);let k2=new ResizeObserver((b)=>{if(K.id)return;for(let o of b){let e=o.contentRect.height,J0=o.contentRect.width,U0=Q?J0:e,X0=Q?K.cw:K.ch;if(K.cw=J0,K.ch=e,Math.abs(U0-X0)>1){if(v.viewportState.containerSize=U0,K.ii)x0(),K.rfn(),f.emit("resize",{height:e,width:J0})}if(K.ii)for(let K0=0;K0<Z0.length;K0++)Z0[K0](J0,e)}});if(K.vre)k2.observe(A.viewport);let y2={dom:A,emitter:f,resolvedConfig:C,rawConfig:J,rendered:S,pool:l,itemState:s,sharedState:v,renderRange:P,isHorizontal:Q,classPrefix:_,contentSizeHandlers:W0,idleHandlers:c,afterScroll:t,clickHandlers:Y0,keydownHandlers:B0,resizeHandlers:Z0,destroyHandlers:D0,methods:Q0,onScrollFrame:H2,resizeObserver:k2,applyTemplate:V0,updateContentSize:x0},E0=XJ(K,y2);K.dm=YJ(K,y2,E0),K.sc=UJ(K,y2);let c2=new Map;for(let b of D)if(b.methods)for(let o of b.methods){let e=c2.get(o);if(e)throw Error(`[vlist/builder] Method "${o}" is registered by both "${e}" and "${b.name}"`);c2.set(o,b.name)}for(let b of D)b.setup(E0);if(!Q0.has("_getFocusedIndex")){let b=-1,o=`${_}-item--focused`,e=(X0,K0)=>{let N0=K.vtf();if(K0<0||K0>=N0)return;b=K0,A.root.setAttribute("aria-activedescendant",`${N}-item-${K0}`);let F0=Q?K.cw:K.ch;if(K.sst(K.gsp(K0,K.hc,F0,N0,"center")),K.ls=K.sgt(),K.rfn(),X0>=0&&X0!==K0)S.get(X0)?.classList.remove(o);S.get(K0)?.classList.add(o)},J0=()=>{if(K.id)return;if(!A.root.matches(":focus-visible"))return;let X0=K.vtf();if(X0===0)return;e(-1,b>=0?Math.min(b,X0-1):0)};A.root.addEventListener("focusin",J0);let U0=(X0)=>{if(K.id)return;let K0=X0.relatedTarget;if(K0&&A.root.contains(K0))return;if(b>=0)S.get(b)?.classList.remove(o);A.root.removeAttribute("aria-activedescendant")};A.root.addEventListener("focusout",U0),B0.push((X0)=>{if(K.id)return;let K0=K.vtf();if(K0===0)return;let N0=b,F0=N0;switch(X0.key){case"ArrowUp":F0=N0<=0?K0-1:N0-1;break;case"ArrowDown":F0=N0>=K0-1?0:N0+1;break;case"Home":F0=0;break;case"End":F0=K0-1;break;default:return}X0.preventDefault(),e(N0,F0)}),D0.push(()=>{A.root.removeEventListener("focusin",J0),A.root.removeEventListener("focusout",U0)})}if(K.ii=!0,E0.state.isInitialized=!0,x0(),K.rfn(),$&&K.it.length>0){let b=K.gsp(K.it.length-1,K.hc,K.ch,K.it.length,"end");K.sst(b),K.ls=b,K.rfn()}let iJ=(b)=>{E0.dataManager.setItems(b,0,b.length)},tJ=$?(b)=>{let o=K.sab(2),e=K.it.length;if(E0.dataManager.setItems(b,e),o&&K.it.length>0){let J0=K.gsp(K.it.length-1,K.hc,K.ch,K.it.length,"end");K.sst(J0),K.ls=J0,K.rfn()}}:(b)=>{let o=K.it.length;E0.dataManager.setItems(b,o)},eJ=$?(b)=>{let o=K.sgt(),e=K.hc.getTotalSize(),J0=[...K.it];E0.dataManager.clear(),E0.dataManager.setItems([...b,...J0],0);let X0=K.hc.getTotalSize()-e;if(X0>0)K.sst(o+X0),K.ls=o+X0}:(b)=>{let o=[...K.it];E0.dataManager.clear(),E0.dataManager.setItems([...b,...o],0)},J1=(b,o)=>{E0.dataManager.updateItem(b,o)},Q1=(b)=>{E0.dataManager.removeItem(b)},j1=async()=>{if(E0.dataManager.reload)await E0.dataManager.reload()},t0=()=>{if(g!==null)cancelAnimationFrame(g),g=null},q1=(b,o,e)=>{if(t0(),Math.abs(o-b)<1){K.sst(o),K.ls=o,K.rfn();return}let J0=performance.now(),U0=(X0)=>{let K0=X0-J0,N0=Math.min(K0/e,1),F0=b+(o-b)*C2(N0);if(K.sst(F0),K.ls=F0,K.rfn(),N0<1)g=requestAnimationFrame(U0);else g=null};g=requestAnimationFrame(U0)},X1=(b,o)=>{let{align:e,behavior:J0,duration:U0}=R0(o),X0=K.vtf(),K0=b;if(G&&X0>0)K0=(K0%X0+X0)%X0;let N0=K.gsp(K0,K.hc,K.ch,X0,e);if(J0==="smooth")q1(K.sgt(),N0,U0);else t0(),K.sst(N0)},Y1=()=>K.sgt(),U1=(b,o)=>{return f.on(b,o)},K1=(b,o)=>{f.off(b,o)},B1=()=>{if(K.id)return;if(K.id=!0,E0.state.isDestroyed=!0,A.items.removeEventListener("click",m2),A.root.removeEventListener("keydown",d2),K.st.removeEventListener("scroll",H2),k2.disconnect(),F)F.disconnect(),F=null;if(K.wh)A.viewport.removeEventListener("wheel",K.wh);if(y)clearTimeout(y);for(let b=0;b<D0.length;b++)D0[b]();for(let b of D)if(b.destroy)b.destroy();t0();for(let[,b]of S)b.remove(),l.release(b);S.clear(),l.clear(),f.emit("destroy",void 0),f.clear(),A.root.remove()},l2={get element(){return A.root},get items(){if(Q0.has("_getItems"))return Q0.get("_getItems")();return K.it},get total(){if(Q0.has("_getTotal"))return Q0.get("_getTotal")();return K.vtf()},setItems:Q0.has("setItems")?Q0.get("setItems"):iJ,appendItems:Q0.has("appendItems")?Q0.get("appendItems"):tJ,prependItems:Q0.has("prependItems")?Q0.get("prependItems"):eJ,updateItem:Q0.has("updateItem")?Q0.get("updateItem"):J1,removeItem:Q0.has("removeItem")?Q0.get("removeItem"):Q1,reload:Q0.has("reload")?Q0.get("reload"):j1,scrollToIndex:Q0.has("scrollToIndex")?Q0.get("scrollToIndex"):X1,cancelScroll:Q0.has("cancelScroll")?Q0.get("cancelScroll"):t0,getScrollPosition:Q0.has("getScrollPosition")?Q0.get("getScrollPosition"):Y1,on:U1,off:K1,destroy:B1};for(let[b,o]of Q0){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;l2[b]=o}return l2}Y2();var u0=(J,q,Q={},j="vlist",Y=!1)=>{let{autoHide:X=!0,autoHideDelay:B=1000,minThumbSize:Z=30,showOnHover:_=!0,hoverZoneWidth:U=16,showOnViewportEnter:W=!0}=Q,L=0,E=0,H=0,G=0,$=!1,N=!1,V=0,z=0,M=0,T=null,C=!1,D=null,d=null,p=Y?"width":"height",A=Y?"translateX":"translateY",f=Y?(s)=>s.clientX:(s)=>s.clientY,n=Y?"left":"top",x=document.createElement("div"),r=document.createElement("div"),l=_?document.createElement("div"):null,K=()=>{if(x.className=`${j}-scrollbar`,r.className=`${j}-scrollbar-thumb`,Y)x.classList.add(`${j}-scrollbar--horizontal`);if(x.appendChild(r),J.appendChild(x),l){if(l.className=`${j}-scrollbar-hover`,Y)l.classList.add(`${j}-scrollbar-hover--horizontal`),l.style.height=`${U}px`;else l.style.width=`${U}px`;J.appendChild(l)}},g=()=>{if(T)clearTimeout(T),T=null},y=()=>{if(!X)return;g(),T=setTimeout(h,B)},R=()=>{if(L<=E)return;if(g(),!C)x.classList.add(`${j}-scrollbar--visible`),C=!0;if(X&&!$&&!N)y()},h=()=>{if($||N)return;x.classList.remove(`${j}-scrollbar--visible`),C=!1},P=(s,j0)=>{L=s,E=j0;let q0=L>E;if(x.style.display=q0?"":"none",!q0){h();return}let a=E/L;H=Math.max(Z,a*E),r.style[p]=`${H}px`,G=E-H,u(M)},u=(s)=>{if(M=s,L<=E||G<=0)return;let j0=L-E,a=Math.min(1,Math.max(0,s/j0))*G;r.style.transform=`${A}(${a}px)`},v=(s)=>{if(s.target===r)return;let j0=x.getBoundingClientRect(),t=f(s)-j0[n]-H/2,Y0=Math.max(0,Math.min(t,G))/G,B0=L-E,Z0=Y0*B0;q(Z0),R()},S=(s)=>{s.preventDefault(),s.stopPropagation(),$=!0,V=f(s),z=M,g(),x.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",k),document.addEventListener("mouseup",O)},k=(s)=>{if(!$)return;let j0=f(s)-V,q0=G>0?j0/G:0,a=L-E,t=q0*a,c=Math.max(0,Math.min(z+t,a)),B0=c/a*G;if(r.style.transform=`${A}(${B0}px)`,d=c,D===null)D=requestAnimationFrame(()=>{if(d!==null)q(d);D=null})},O=()=>{if($=!1,D!==null)cancelAnimationFrame(D),D=null;if(d!==null)q(d),d=null;if(x.classList.remove(`${j}-scrollbar--dragging`),X&&!N)y();document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",O)},w=()=>{if(W)R()},F=()=>{if(!$){if(N=!1,X)y()}},I=()=>{N=!0,g(),R()},m=()=>{if(N=!1,!$&&X)y()},i=()=>{if(g(),D!==null)cancelAnimationFrame(D),D=null;if(x.removeEventListener("click",v),x.removeEventListener("mouseenter",I),x.removeEventListener("mouseleave",m),r.removeEventListener("mousedown",S),J.removeEventListener("mouseenter",w),J.removeEventListener("mouseleave",F),document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",O),l){if(l.removeEventListener("mouseenter",I),l.removeEventListener("mouseleave",m),l.parentNode)l.parentNode.removeChild(l)}if(x.parentNode)x.parentNode.removeChild(x)};if(K(),x.addEventListener("click",v),x.addEventListener("mouseenter",I),x.addEventListener("mouseleave",m),r.addEventListener("mousedown",S),J.addEventListener("mouseenter",w),J.addEventListener("mouseleave",F),l)l.addEventListener("mouseenter",I),l.addEventListener("mouseleave",m);return{show:R,hide:h,updateBounds:P,updatePosition:u,isVisible:()=>C,destroy:i}};var LJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:X,horizontal:B}=Y;if(q=u0(j.viewport,(U)=>Q.scrollController.scrollTo(U),J??{},X,B),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let Z=Q.getCachedCompression();q.updateBounds(Z.virtualSize,Q.state.viewportState.containerSize);let _=q;Q.afterScroll.push((U,W)=>{_.updatePosition(U),_.show()}),Q.resizeHandlers.push((U,W)=>{if(_){let L=Q.getCachedCompression();_.updateBounds(L.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let U=Q.getCachedCompression();_.updateBounds(U.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var TJ=(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}},U2=(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 Y=J.samples[J.sampleIndex];if(Y.position=q,Y.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,B=J.samples[X],Z=q-B.position,_=Q-B.time;J.velocity=_>0?Z/_:0}return J.lastPosition=q,J.lastTime=Q,J},F1=(J)=>J.sampleCount>=3,$J=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:Y=!1,idleTimeout:X=150,onScroll:B,onIdle:Z,scrollElement:_,horizontal:U=!1}=q,W=!!_,L=0,E=0,H=W?U?window.innerWidth:window.innerHeight:U?J.clientWidth:J.clientHeight,G=q.compressed??!1,$=q.compression,N=TJ(),V=!1,z=null,T=K2(()=>{let F=U?J.scrollLeft:J.scrollTop,I=F>=L?"down":"up";if(N=U2(N,F),L=F,B)B({scrollTop:L,direction:I,velocity:N.velocity});f()}),D=K2(()=>{let F=J.getBoundingClientRect(),I=U?Math.max(0,-F.left):Math.max(0,-F.top),m=I>=L?"down":"up";if(N=U2(N,I),L=I,!V)V=!0;if(B)B({scrollTop:L,direction:m,velocity:N.velocity});f()}),d=(F)=>{F.preventDefault()},p=(F)=>{if(F.deltaX)return;F.preventDefault(),J.scrollLeft+=F.deltaY},A=(F)=>{if(!G)return;F.preventDefault();let I=(U?F.deltaX||F.deltaY:F.deltaY)*j,m=L+I;if(Y)m=L+I*0.3;if(m=Math.max(0,Math.min(m,E)),m!==L){let s=m>=L?"down":"up";if(N=U2(N,m),L=m,!V)V=!0;if(B)B({scrollTop:L,direction:s,velocity:N.velocity});f()}},f=()=>{if(z)clearTimeout(z);z=setTimeout(()=>{if(V=!1,N=TJ(L),Z)Z()},X)},n=(F)=>{if(G)return;if(G=!0,$=F,E=F.virtualSize-H,W)return;if(T.cancel(),J.removeEventListener("scroll",T),!Q)J.removeEventListener("wheel",d);else if(U)J.removeEventListener("wheel",p);if(U)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",A,{passive:!1});let I=U?J.scrollLeft:J.scrollTop;if(I>0){let m=U?$?.actualSize??J.scrollWidth:$?.actualSize??J.scrollHeight;L=I/m*E}if(U)J.scrollLeft=0;else J.scrollTop=0},x=()=>{if(!G)return;if(G=!1,W){$=void 0;return}if(J.removeEventListener("wheel",A),U)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",T,{passive:!0}),!Q)J.addEventListener("wheel",d,{passive:!1});else if(U)J.addEventListener("wheel",p,{passive:!1});if($&&L>0){let I=L/E*($.actualSize-H);if(U)J.scrollLeft=I;else J.scrollTop=I}$=void 0},r=()=>{if(W||G)return L;return U?J.scrollLeft:J.scrollTop},l=(F,I=!1)=>{let m=Math.max(0,Math.min(F,E||1/0));if(W){let i=J.getBoundingClientRect();if(U){let s=i.left+window.scrollX;window.scrollTo({left:s+m,behavior:I?"smooth":"auto"})}else{let s=i.top+window.scrollY;window.scrollTo({top:s+m,behavior:I?"smooth":"auto"})}}else if(G){if(m===L)return;let s=m>=L?"down":"up";if(N=U2(N,m),L=m,!V)V=!0;if(B)B({scrollTop:L,direction:s,velocity:N.velocity});f()}else if(U)J.scrollTo({left:m,behavior:I?"smooth":"auto"});else J.scrollTo({top:m,behavior:I?"smooth":"auto"})},K=(F)=>{l(r()+F)},g=()=>{return r()<=0},y=(F=0)=>{let I=r(),m=W||G?E:U?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return I>=m-F},R=()=>{let F=r(),I=W||G?E:U?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(I<=0)return 0;return Math.min(1,Math.max(0,F/I))},h=(F)=>{if(F.compression)$=F.compression,E=$.virtualSize-H},P=()=>G,u=()=>Math.abs(N.velocity),v=()=>F1(N),S=()=>V,k=()=>W,O=(F)=>{if(H=F,$)E=$.virtualSize-H},w=()=>{if(z)clearTimeout(z);if(W)D.cancel(),window.removeEventListener("scroll",D);else T.cancel(),J.removeEventListener("scroll",T),J.removeEventListener("wheel",A),J.removeEventListener("wheel",d),J.removeEventListener("wheel",p)};if(W){if(G&&$)E=$.virtualSize-H;window.addEventListener("scroll",D,{passive:!0})}else if(G&&$){if(E=$.virtualSize-H,U)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",A,{passive:!1})}else{if(U)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",T,{passive:!0}),!Q)J.addEventListener("wheel",d,{passive:!1});else if(U)J.addEventListener("wheel",p,{passive:!1})}return{getScrollTop:r,scrollTo:l,scrollBy:K,isAtTop:g,isAtBottom:y,getScrollPercentage:R,getVelocity:u,isTracking:v,isScrolling:S,updateConfig:h,enableCompression:n,disableCompression:x,isCompressed:P,isWindowMode:k,updateContainerHeight:O,destroy:w}},K2=(J)=>{let q=null,Q=null,j=(...Y)=>{if(Q=Y,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var L1=0.65,T1=0.5,$1=0.95,b1=0.1,H1=5,k1=100,bJ=()=>{let J=null,q=0,Q=!1,j=0,Y=null,X=0,B=0,Z=null,_=[];return{name:"withScale",priority:20,setup(U){let{dom:W,config:L}=U,{classPrefix:E,horizontal:H}=L,G=()=>{let z=U.getVirtualTotal(),M=L0(z,U.sizeCache);if(M.isCompressed&&!Q){Q=!0,U.scrollController.enableCompression(M),U.updateContentSize(M.virtualSize),U.setScrollFns(()=>q,(x)=>{if(q=x,j=x,Y!==null)cancelAnimationFrame(Y),Y=null});let T=()=>{let x=j-q;if(Math.abs(x)<T1)q=j,Y=null;else{q+=x*L1;let l=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;q=Math.max(0,Math.min(q,l)),Y=requestAnimationFrame(T)}U.scrollController.scrollTo(q)},C=W.viewport,D=(x)=>{x.preventDefault();let l=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+x.deltaY,l)),Y===null)Y=requestAnimationFrame(T)};C.addEventListener("wheel",D,{passive:!1});let d=()=>{if(Z!==null)cancelAnimationFrame(Z),Z=null},p=(x)=>{if(d(),Y!==null)cancelAnimationFrame(Y),Y=null;let r=x.touches[0];if(!r)return;let l=H?r.clientX:r.clientY;X=l,B=q,_=[{time:performance.now(),y:l}]},A=(x)=>{x.preventDefault();let r=x.touches[0];if(!r)return;let l=H?r.clientX:r.clientY,K=performance.now();if(_.push({time:K,y:l}),_.length>H1)_.shift();let g=X-l,R=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,h=Math.max(0,Math.min(B+g,R));q=h,j=h,U.scrollController.scrollTo(h)},f=(x)=>{let r=performance.now(),l=_.filter((R)=>r-R.time<k1),K=0;if(l.length>=2){let R=l[0],h=l[l.length-1],P=h.time-R.time;if(P>0)K=(R.y-h.y)/P}if(_=[],Math.abs(K)<b1)return;let g=K*16,y=()=>{if(g*=$1,Math.abs(g)<0.5){Z=null;return}let h=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,P=q+g;if(P=Math.max(0,Math.min(P,h)),P<=0&&g<0||P>=h&&g>0){q=P,j=P,U.scrollController.scrollTo(P),Z=null;return}q=P,j=P,U.scrollController.scrollTo(P),Z=requestAnimationFrame(y)};Z=requestAnimationFrame(y)};if(C.addEventListener("touchstart",p,{passive:!0}),C.addEventListener("touchmove",A,{passive:!1}),C.addEventListener("touchend",f,{passive:!0}),C.addEventListener("touchcancel",f,{passive:!0}),U.destroyHandlers.push(()=>{if(C.removeEventListener("wheel",D),C.removeEventListener("touchstart",p),C.removeEventListener("touchmove",A),C.removeEventListener("touchend",f),C.removeEventListener("touchcancel",f),d(),Y!==null)cancelAnimationFrame(Y),Y=null}),!W.viewport.querySelector(`.${E}-scrollbar`)){if(J=u0(W.viewport,(r)=>U.scrollController.scrollTo(r),{},E,H),!W.viewport.classList.contains(`${E}-viewport--custom-scrollbar`))W.viewport.classList.add(`${E}-viewport--custom-scrollbar`);J.updateBounds(M.virtualSize,U.state.viewportState.containerSize);let x=J;U.afterScroll.push((r,l)=>{if(x)x.updatePosition(r),x.show()}),U.resizeHandlers.push((r,l)=>{if(x){let K=U.getCachedCompression();x.updateBounds(K.virtualSize,U.state.viewportState.containerSize)}})}}else if(!M.isCompressed&&Q)Q=!1,U.scrollController.disableCompression(),U.updateContentSize(M.actualSize);else if(M.isCompressed)U.scrollController.updateConfig({compression:M}),U.updateContentSize(M.virtualSize);if(J)J.updateBounds(M.virtualSize,U.state.viewportState.containerSize);U.state.cachedCompression={state:M,totalItems:z}};U.updateCompressionMode=G;let $=U.getCachedCompression.bind(U);U.getCachedCompression=()=>{if(U.state.cachedCompression)return U.state.cachedCompression.state;return $()},U.setVisibleRangeFn((z,M,T,C,D)=>{N=null,V=null;let d=L0(C,T);q2(z,M,T,C,d,D)}),U.setScrollToPosFn((z,M,T,C,D)=>{let d=L0(C,M);return X2(z,M,T,C,d,D)});let N=null,V=null;U.setPositionElementFn((z,M)=>{let T=U.getVirtualTotal(),C=L0(T,U.sizeCache);if(C.isCompressed){let D=U.scrollController.getScrollTop();if(N===null||M<V)V=M,N=Math.round(h0(M,D,U.sizeCache,T,U.state.viewportState.containerSize,C));let d=N+U.sizeCache.getOffset(M)-U.sizeCache.getOffset(V),p=U.config.horizontal;z.style.transform=p?`translateX(${d}px)`:`translateY(${d}px)`}else{let D=Math.round(U.sizeCache.getOffset(M)),d=U.config.horizontal;z.style.transform=d?`translateX(${D}px)`:`translateY(${D}px)`}}),G(),U.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null})},destroy(){if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null;if(Z!==null)cancelAnimationFrame(Z),Z=null}}};var B2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,X=new Map,B=0,Z=0,_=(K)=>{let g=X.get(K);if(!g)g={items:Array(q),count:0,lastAccess:Date.now()},X.set(K,g);else g.lastAccess=Date.now();return g},U=(K)=>{return Math.floor(K/q)},W=(K)=>{return K%q},L=()=>B,E=(K)=>{B=K},H=(K)=>{if(K<0||K>=B)return;let g=U(K),y=X.get(g);if(!y)return;return y.items[W(K)]},G=(K)=>{if(K<0||K>=B)return!1;let g=U(K),y=X.get(g);if(!y)return!1;return y.items[W(K)]!==void 0},$=(K,g)=>{let y=U(K),R=_(y),h=W(K),P=R.items[h]===void 0;if(R.items[h]=g,P)R.count++,Z++;if(K>=B)B=K+1},N=(K,g)=>{for(let y=0;y<g.length;y++){let R=g[y];if(R!==void 0)$(K+y,R)}},V=(K)=>{if(K<0||K>=B)return!1;let g=U(K),y=X.get(g);if(!y)return!1;let R=W(K);if(y.items[R]===void 0)return!1;if(y.items[R]=void 0,y.count--,Z--,y.count===0)X.delete(g);return!0},z=(K,g)=>{let y=[];for(let R=K;R<=g&&R<B;R++)y.push(H(R));return y},M=(K,g)=>{for(let y=K;y<=g&&y<B;y++)if(!G(y))return!1;return!0},T=()=>{let K=[],g=null,y=Array.from(X.keys()).sort((R,h)=>R-h);for(let R of y){let h=X.get(R);if(!h)continue;let P=R*q;for(let u=0;u<q;u++){let v=P+u;if(v>=B)break;if(h.items[u]!==void 0)if(g===null)g={start:v,end:v};else if(v===g.end+1)g.end=v;else K.push(g),g={start:v,end:v};else if(g!==null)K.push(g),g=null}}if(g!==null)K.push(g);return K},C=(K,g)=>{let y=[],R=null;for(let h=K;h<=g&&h<B;h++)if(!G(h))if(R===null)R={start:h,end:h};else R.end=h;else if(R!==null)y.push(R),R=null;if(R!==null)y.push(R);return y},D=(K)=>{return X.has(K)},d=(K)=>{let g=X.get(K);if(g)g.lastAccess=Date.now()},p=(K,g)=>{if(K>g||X.size===0)return;let y=Date.now(),R=U(Math.max(0,K)),h=U(Math.min(B-1,g));for(let P=R;P<=h;P++){let u=X.get(P);if(u)u.lastAccess=y}},A=(K,g)=>{if(Z<=Q)return 0;let y=Math.max(0,K-j),R=Math.min(B-1,g+j),h=U(y),P=U(R),u=0,v=[];for(let[S,k]of X)if(S<h||S>P)u+=k.count,v.push(S),Z-=k.count,X.delete(S);if(u>0&&Y)Y(u,v);return u},f=()=>{if(Z<=Q)return 0;let K=Array.from(X.entries()).sort(([,R],[,h])=>R.lastAccess-h.lastAccess),g=0,y=[];for(let[R,h]of K){if(Z<=Q)break;g+=h.count,Z-=h.count,y.push(R),X.delete(R)}if(g>0&&Y)Y(g,y);return g},n=()=>{return{totalItems:B,cachedItems:Z,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:B>0?1-Z/B:1}},x=()=>Z,r=()=>{X.clear(),Z=0};return{chunkSize:q,maxCachedItems:Q,getTotal:L,setTotal:E,get:H,has:G,set:$,setRange:N,delete:V,getRange:z,isRangeLoaded:M,getLoadedRanges:T,findUnloadedRanges:C,getChunkIndex:U,isChunkLoaded:D,touchChunk:d,touchChunksForRange:p,evictDistant:A,evictToLimit:f,getStats:n,getCachedCount:x,clear:r,reset:()=>{r(),B=0}}},Z2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,Y)=>j.start-Y.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let Y=q[j],X=Q[Q.length-1];if(Y.start<=X.end+1)X.end=Math.max(X.end,Y.end);else Q.push({...Y})}return Q},c0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,Y=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:Y};if(q.length===0)return[X];let B=[],Z=Z2(q),_=X.start;for(let U of Z){if(U.end<_)continue;if(U.start>X.end)break;if(U.start>_)B.push({start:_,end:Math.min(U.start-1,X.end)});if(_=U.end+1,_>X.end)break}if(_<=X.end)B.push({start:_,end:X.end});return B};var N2=(J={})=>{let{maskCharacter:q=WJ,maxSampleSize:Q=DJ}=J,j=[],Y=!1,X=0,B=(L)=>{if(Y||L.length===0)return;let E=Math.min(L.length,Q);for(let H=0;H<E;H++){let G=L[H];if(!G||typeof G!=="object")continue;let $={};for(let[N,V]of Object.entries(G)){if(N.startsWith("_")||N==="id")continue;$[N]=String(V??"").length}if(Object.keys($).length>0)j.push($)}Y=!0},Z=()=>Y,_=(L)=>{let E={id:`${GJ}${X++}`,[S2]:!0,_index:L};if(j.length===0)return E.label=q.repeat(12),E;let H=j[L%j.length];for(let[G,$]of Object.entries(H))E[G]=q.repeat(Math.max(1,$));return E};return{analyzeStructure:B,hasAnalyzedStructure:Z,generate:_,generateRange:(L,E)=>{let H=[];for(let G=L;G<=E;G++)H.push(_(G));return H},clear:()=>{j=[],Y=!1,X=0}}},z0=(J)=>{if(!J||typeof J!=="object")return!1;return J[S2]===!0},f2=(J)=>{return J.filter((q)=>!z0(q))};var P1=50,_2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:Y,placeholder:X,pageSize:B=P1,onStateChange:Z,onItemsLoaded:_,onItemsEvicted:U}=J,W=B2({...Y,onEvict:(a,t)=>{U?.(a),C()}}),L=null,E=()=>{if(!L)L=N2(X);return L},H=new Map,G=!1,$,N=!0,V,z=[],M=0,T=new Map,C=()=>{Z?.(l())},D=()=>{H.clear();let a=W.getLoadedRanges();for(let t of a)for(let c=t.start;c<=t.end;c++){let Y0=W.get(c);if(Y0&&!z0(Y0))H.set(Y0.id,c)}},d=(a,t)=>{if(!z0(t))H.set(t.id,a)},p=(a)=>{H.delete(a)},A=(a,t)=>{return`${a}-${t}`},f=()=>W.getTotal(),n=()=>W.getCachedCount(),x=()=>G,r=()=>N,l=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:G,pendingRanges:z,error:$,hasMore:N,cursor:V}),K=()=>W,g=()=>E(),y=(a)=>{let t=W.get(a);if(t!==void 0)return t;if(a>=0&&a<W.getTotal())return E().generate(a);return},R=(a)=>{let t=H.get(a);if(t===void 0)return;return W.get(t)},h=(a)=>{return H.get(a)??-1},P=(a)=>{let t=W.get(a);return t!==void 0&&!z0(t)},u=(a,t)=>{let c=[],Y0=W.getTotal(),B0=0,Z0=0;W.touchChunksForRange(a,Math.min(t,Y0-1));for(let W0=a;W0<=t&&W0<Y0;W0++){let D0=W.get(W0);if(D0!==void 0)c.push(D0),B0++;else c.push(E().generate(W0)),Z0++}return c},v=(a)=>{W.setTotal(a),N=W.getCachedCount()<a,C()},S=(a,t=0,c)=>{if(L&&!L.hasAnalyzedStructure()&&a.length>0)L.analyzeStructure(a);for(let Y0=0;Y0<a.length;Y0++){let B0=a[Y0];if(B0!==void 0){let Z0=t+Y0;W.set(Z0,B0),d(Z0,B0)}}if(c!==void 0)W.setTotal(c);else if(t+a.length>W.getTotal())W.setTotal(t+a.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)N=!1;_?.(a,t,W.getTotal()),C()},k=(a,t)=>{let c=H.get(a);if(c===void 0)return!1;let Y0=W.get(c);if(!Y0)return!1;let B0={...Y0,...t};if(W.set(c,B0),t.id!==void 0&&t.id!==a)p(a),d(c,B0);return C(),!0},O=(a)=>{let t=H.get(a);if(t===void 0)return!1;W.delete(t),p(a);let c=W.getTotal();if(c>0)W.setTotal(c-1);return C(),!0},w=async(a,t)=>{if(!q)return;let c=A(a,t);if(T.has(c))return;let Y0=W.getLoadedRanges(),B0=c0({start:a,end:t},Y0,W.chunkSize);if(B0.length===0)return;let Z0=W.chunkSize,W0=[];for(let Q0 of B0){let M0=Math.floor(Q0.start/Z0),$0=Math.floor(Q0.end/Z0);for(let G0=M0;G0<=$0;G0++){let T0=G0*Z0,V0=T0+Z0-1,b0=A(T0,V0);if(!W0.some((v0)=>v0.start===T0)&&!T.has(b0))W0.push({start:T0,end:V0})}}let D0=[];for(let Q0 of B0){let M0=Math.floor(Q0.start/Z0),$0=Math.floor(Q0.end/Z0);for(let G0=M0;G0<=$0;G0++){let T0=G0*Z0,V0=T0+Z0-1,b0=A(T0,V0);if(T.has(b0)){let v0=T.get(b0);if(!D0.includes(v0))D0.push(v0)}}}for(let Q0 of W0){let M0=A(Q0.start,Q0.end),$0=(async()=>{z.push(Q0),G=!0,$=void 0,C();try{let G0=Q0.end-Q0.start+1,T0={offset:Q0.start,limit:G0,cursor:void 0},V0=await q.read(T0);if(S(V0.items,Q0.start,V0.total),V0.cursor)V=V0.cursor;let b0=Q0.start+V0.items.length;if(b0>=M){if(M=b0,V0.hasMore!==void 0)N=V0.hasMore;else if(V0.total!==void 0)N=b0<V0.total}}catch(G0){$=G0 instanceof Error?G0:Error(String(G0))}finally{T.delete(M0),z=z.filter((G0)=>G0.start!==Q0.start||G0.end!==Q0.end),G=T.size>0,C()}})();T.set(M0,$0),D0.push($0)}await Promise.all(D0)},F=async(a,t)=>{if(W.isRangeLoaded(a,t))return;await w(a,t)},I=async()=>{if(!q)return;await w(0,B-1)},m=async()=>{if(!q||G||!N)return!1;let a=W.getCachedCount(),t=W.getTotal(),c=a,Y0=Math.min(c+B-1,t>0?t-1:c+B-1);if(c>=t&&t>0)return N=!1,!1;return await w(c,Y0),W.getCachedCount()>a},i=async()=>{if(W.clear(),W.setTotal(0),H.clear(),L)L.clear();T.clear(),z=[],G=!1,V=void 0,N=!0,M=0,$=void 0,C()},s=(a,t)=>{if(W.evictDistant(a,t)>0)D()},j0=()=>{W.clear(),H.clear(),V=void 0,$=void 0,z=[],G=!1,C()},q0=()=>{if(W.reset(),H.clear(),L)L.clear();V=void 0,N=!0,M=0,$=void 0,z=[],G=!1,C()};if(Q&&Q.length>0)S(Q,0,j??Q.length);else if(j!==void 0)W.setTotal(j),C();return{getState:l,getTotal:f,getCached:n,getIsLoading:x,getHasMore:r,getStorage:K,getPlaceholders:g,getItem:y,getItemById:R,getIndexById:h,isItemLoaded:P,getItemsInRange:u,setTotal:v,setItems:S,updateItem:k,removeItem:O,loadRange:w,ensureRange:F,loadInitial:I,loadMore:m,reload:i,evictDistant:s,clear:j0,reset:q0}};var HJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:Y,autoLoad:X=!0}=J,B=Q?.cancelThreshold??NJ,Z=Q?.preloadThreshold??_J,_=Q?.preloadAhead??ZJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(U){let{emitter:W}=U,L=U.config.reverse,E=_2({adapter:q,...Y!==void 0&&{initialTotal:Y},pageSize:j?.chunkSize??p0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(U.state.isInitialized){let p=U.getVirtualTotal();U.sizeCache.rebuild(p),U.updateCompressionMode();let A=U.getCachedCompression();U.state.viewportState.totalSize=A.virtualSize,U.state.viewportState.actualSize=A.actualSize,U.state.viewportState.isCompressed=A.isCompressed,U.state.viewportState.compressionRatio=A.ratio,U.updateContentSize(A.virtualSize),U.renderIfNeeded()}},onItemsLoaded:(p,A,f)=>{if(U.state.isInitialized)U.forceRender(),W.emit("load:end",{items:p,total:f,offset:A})}});U.replaceDataManager(E);let H=null,G=null,$=0,N=!1,V=null,z=120,M=(p=!1)=>{if(N=!1,G=null,p)H=null;if(V!==null)clearTimeout(V),V=null},T=()=>{if(G){let p=G;G=null,U.dataManager.ensureRange(p.start,p.end).catch((A)=>{W.emit("error",{error:A,context:"ensureRange"})})}};U.afterScroll.push((p,A)=>{if(U.state.isDestroyed)return;let f=U.scrollController.getVelocity(),x=U.scrollController.isTracking()&&f<=B;if($>B&&f<=B)N=!0;else if(N&&f>B)M();if(N&&f<0.5)M(!0);if($=f,(U.scrollController.isAtTop()||U.scrollController.isAtBottom())&&(N||G))M(!0),x=!0;let l=N&&f>0.5;if(x&&!U.dataManager.getIsLoading()&&U.dataManager.getHasMore()){if(L){if(p<w2)W.emit("load:start",{offset:U.dataManager.getCached(),limit:p0}),U.dataManager.loadMore().catch((y)=>{W.emit("error",{error:y,context:"loadMore"})})}else if(U.state.viewportState.totalSize-p-U.state.viewportState.containerSize<w2)W.emit("load:start",{offset:U.dataManager.getCached(),limit:p0}),U.dataManager.loadMore().catch((R)=>{W.emit("error",{error:R,context:"loadMore"})})}let{renderRange:K}=U.state.viewportState;if(!H||K.start!==H.start||K.end!==H.end){if(H={start:K.start,end:K.end},x&&!l){if(G=null,V!==null)clearTimeout(V),V=null;let{start:y,end:R}=K,h=U.getVirtualTotal();if(f>Z)if(A==="down")R=Math.min(K.end+_,h-1);else y=Math.max(K.start-_,0);U.dataManager.ensureRange(y,R).catch((P)=>{W.emit("error",{error:P,context:"ensureRange"})})}else if(G={start:K.start,end:K.end},l){if(V!==null)clearTimeout(V);V=setTimeout(()=>{V=null,T(),M()},z)}}});let C=200,D=null;U.afterScroll.push((p,A)=>{if(D!==null)clearTimeout(D);D=setTimeout(()=>{D=null,T(),M()},C)}),U.destroyHandlers.push(()=>{if(D!==null)clearTimeout(D),D=null;M()});let d=()=>{if(U.state.isDestroyed)return;H=null;let{renderRange:p}=U.state.viewportState;if(p.end>0)U.dataManager.ensureRange(p.start,p.end).catch((A)=>{W.emit("error",{error:A,context:"ensureRange"})});T()};if(window.addEventListener("online",d),U.destroyHandlers.push(()=>{window.removeEventListener("online",d)}),W.on("load:start",()=>{U.dom.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{U.dom.root.removeAttribute("aria-busy")}),U.methods.set("loadVisibleRange",async()=>{H=null,G=null,U.forceRender();let{renderRange:p}=U.state.viewportState;if(p.end>0)W.emit("load:start",{offset:p.start,limit:p.end-p.start+1}),await U.dataManager.ensureRange(p.start,p.end)}),U.methods.set("reload",async()=>{H=null,G=null,U.invalidateRendered(),await U.dataManager.reload(),W.emit("load:start",{offset:0,limit:p0}),await U.dataManager.loadInitial(),U.forceRender();let{renderRange:p}=U.state.viewportState;if(p.end>0)await U.dataManager.ensureRange(p.start,p.end)}),X)W.emit("load:start",{offset:0,limit:p0}),U.dataManager.loadInitial().catch((p)=>{W.emit("error",{error:p,context:"loadInitial"})});else if(Y!==void 0)U.dataManager.setTotal(Y)}}};var kJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:Y,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",Y.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let U=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-U.left);else return Math.max(0,-U.top)},(U)=>{let W=Q.viewport.getBoundingClientRect();if(Y.horizontal){let L=W.left+window.scrollX;window.scrollTo(L+U,window.scrollY)}else{let L=W.top+window.scrollY;window.scrollTo(window.scrollX,L+U)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:B,innerWidth:Z}=window,_=()=>{let{innerWidth:U,innerHeight:W}=window,L=Y.horizontal?U:W,E=Y.horizontal?Z:B;if(Math.abs(L-E)<=1)return;B=W,Z=U,j.viewportState.containerSize=W,X.emit("resize",{width:U,height:W});for(let H=0;H<q.resizeHandlers.length;H++)q.resizeHandlers[H](U,W);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var I2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].headerLayoutIndex<=q)Q=Y;else j=Y-1}return Q},yJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].firstDataIndex<=q)Q=Y;else j=Y-1}return Q},PJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),Y=0,X=0;for(let B=1;B<J;B++){let Z=q(B);if(Z!==j){let _=B-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:_}),X=X+1+_,j=Z,Y=B}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:J-Y}),Q},l0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),Y=0;for(let X of q){j[Y]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},Y++;for(let B=0;B<X.count;B++)j[Y]=J[X.firstDataIndex+B],Y++}return j},a0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return Q(Y.dataIndex)}},W2=(J,q)=>{let Q=PJ(J,q.getGroupForIndex),j=J+Q.length,Y=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(E)=>{if(Q.length===0)return{type:"item",dataIndex:E,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=I2(Q,E),G=Q[H];if(E===G.headerLayoutIndex)return{type:"header",group:G};let $=E-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+$,group:G}},layoutToDataIndex:(E)=>{if(Q.length===0)return E;let H=I2(Q,E),G=Q[H];if(E===G.headerLayoutIndex)return-1;let $=E-G.headerLayoutIndex-1;return G.firstDataIndex+$},dataToLayoutIndex:(E)=>{if(Q.length===0)return E;let H=yJ(Q,E),G=Q[H],$=E-G.firstDataIndex;return G.headerLayoutIndex+1+$},getGroupAtLayoutIndex:(E)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=I2(Q,E);return Q[H]},getGroupAtDataIndex:(E)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=yJ(Q,E);return Q[H]},getHeaderHeight:typeof Y==="number"?(E)=>Y:(E)=>{let H=Q[E];if(!H)return 0;return Y(H.key,E)},rebuild:(E)=>{Q=PJ(E,q.getGroupForIndex),j=E+Q.length}}};var D2=(J,q,Q,j,Y,X=!1,B=0)=>{let Z=document.createElement("div");if(Z.className=`${Y}-sticky-header`,Z.setAttribute("role","presentation"),Z.setAttribute("aria-hidden","true"),Z.style.position="absolute",Z.style.zIndex="5",Z.style.pointerEvents="none",Z.style.willChange="transform",Z.style.overflow="hidden",X)Z.style.top="0",Z.style.bottom="0",Z.style.left=B?`${B}px`:"0";else Z.style.top=B?`${B}px`:"0",Z.style.left="0",Z.style.right="0";J.insertBefore(Z,J.firstChild);let _=-1,U=!1,W=0,L=(V)=>{if(V===_)return;_=V;let z=q.groups;if(V<0||V>=z.length){Z.textContent="";return}let M=z[V],T=j.headerTemplate(M.key,M.groupIndex),C=q.getHeaderHeight(V);if(X)Z.style.width=`${C}px`;else Z.style.height=`${C}px`;if(typeof T==="string")Z.innerHTML=T;else Z.replaceChildren(T)},E=(V)=>{let z=q.groups;if(z.length===0){G();return}let M=Q.getOffset(z[0].headerLayoutIndex);if(V<M){G();return}let T=0,C=z.length-1;while(T<C){let f=T+C+1>>>1;if(Q.getOffset(z[f].headerLayoutIndex)<=V)T=f;else C=f-1}let D=T;if(!U)H();L(D);let d=q.getHeaderHeight(D),p=0,A=D+1;if(A<z.length){let n=Q.getOffset(z[A].headerLayoutIndex)-V;if(n<d)p=n-d}if(p!==W)if(W=p,p===0)Z.style.transform="";else{let f=Math.round(p);Z.style.transform=X?`translateX(${f}px)`:`translateY(${f}px)`}},H=()=>{if(U)return;U=!0,Z.style.display=""},G=()=>{if(!U)return;U=!1,Z.style.display="none",_=-1,W=0,Z.style.transform=""},$=()=>{let V=_;if(_=-1,V>=0)L(V)},N=()=>{Z.remove(),_=-1,U=!1};return Z.style.display="none",{update:E,refresh:$,show:H,hide:G,destroy:N}};var RJ=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let B=Q.indexAtOffset(J),Z=Q.indexAtOffset(J+q);if(Z<j-1)Z++;return X.start=Math.max(0,B),X.end=Math.min(j-1,Math.max(0,Z)),X},zJ=(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},CJ=(J,q,Q,j,Y,X)=>{if(j===0)return 0;let B=Math.max(0,Math.min(J,j-1)),Z=q.getOffset(B),_=q.getSize(B),U=q.getTotalSize(),W=Math.max(0,U-Q),L;switch(X){case"center":L=Z-Q/2+_/2;break;case"end":L=Z-Q+_;break;case"start":default:L=Z;break}return Math.max(0,Math.min(L,W))},wJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},vJ=(J,q)=>{return q.getTotalSize()},SJ=(J,q)=>{return q.getOffset(J)},fJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var P0=(J,q,Q,j,Y="start",X,B=CJ)=>{return B(J,q,Q,j,X,Y)},IJ=(J,q)=>{return J.start===q.start&&J.end===q.end},pJ=(J,q)=>{return J>=q.start&&J<=q.end},hJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var uJ=(J,q)=>{let Q=[],j=[];for(let Y=J.start;Y<=J.end;Y++)if(Y<q.start||Y>q.end)j.push(Y);for(let Y=q.start;Y<=q.end;Y++)if(Y<J.start||Y>J.end)Q.push(Y);return{add:Q,remove:j}};Y2();var xJ=(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=[],Y=[];return{name:"withGroups",priority:10,setup(X){let{dom:B,config:Z,rawConfig:_}=X,{classPrefix:U}=Z,L=_.item.height;j=_.items?[..._.items]:[];let E=j.length,H={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=W2(E,H),Y=l0(j,q.groups);let G=a0(q,L);X.setSizeConfig(G),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length);let $=_.item.template,{headerTemplate:N}=J,V=(x,r,l)=>{if(C0(x))return N(x.groupKey,x.groupIndex);return $(x,r,l)},z=X.methods.get("_getGridLayout"),M=X.methods.get("_replaceGridRenderer"),T=X.methods.get("_updateGridLayoutForGroups"),C=X.methods.get("_getTableLayout"),D=X.methods.get("_updateTableForGroups"),d=X.methods.get("_getTableHeaderHeight");if(z&&M){if(T)T((K)=>{let g=Y[K];return!!(g&&C0(g))});let{createGridRenderer:x}=(G2(),G1(gJ)),r=z(),l=x(B.items,V,X.sizeCache,r,U,X.getContainerWidth(),()=>X.dataManager.getTotal(),Z.ariaIdPrefix);M(l)}else if(C&&D)D((x)=>C0(x),J.headerTemplate);else X.replaceTemplate(V);let p=d?d():0;if(B.root.classList.add(`${U}--grouped`),J.sticky!==!1){Q=D2(B.root,q,X.sizeCache,{...H,sticky:H.sticky??!1},U,Z.horizontal,p);let x=Q;X.afterScroll.push((r,l)=>{x.update(r)}),Q.update(X.scrollController.getScrollTop())}let A=()=>{if(!q)return;q.rebuild(j.length),Y=l0(j,q.groups);let x=a0(q,L);if(X.setSizeConfig(x),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};X.methods.set("setItems",(x)=>{j=x.slice(),A()}),X.methods.set("appendItems",(x)=>{j.push(...x),A()}),X.methods.set("prependItems",(x)=>{j.unshift(...x),A()}),X.methods.set("removeItem",(x)=>{j=j.filter((r)=>r.id!==x),A()});let{animateScroll:f,cancelScroll:n}=f0(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(x,r)=>{let l=q.dataToLayoutIndex(x),{align:K,behavior:g,duration:y}=R0(r),R=X.dataManager.getTotal(),h=P0(l,X.sizeCache,X.state.viewportState.containerSize,R,K,X.getCachedCompression());if(g==="smooth")f(X.scrollController.getScrollTop(),h,y);else n(),X.scrollController.scrollTo(h)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(n(),Q)Q.destroy(),Q=null;B.root.classList.remove(`${U}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var V2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},X=(G)=>{if(G<=0)return 0;if(!j)return Math.ceil(G/q);let $=0,N=0,V=0;for(let z=0;z<G;z++)if(j(z)){if(V++,N>0)$++,N=0;$++,N=0}else if(N++,N>=q)$++,N=0;if(N>0)$++;return $},B=(G)=>{return Y.row=Z(G),Y.col=_(G),Y},Z=(G)=>{if(!j)return Math.floor(G/q);let $=0,N=0;for(let V=0;V<=G;V++)if(j(V)){if(N>0)$++,N=0;if(V===G)return $;$++,N=0}else{if(V===G)return $;if(N++,N>=q)$++,N=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${$}`),$},_=(G)=>{if(!j)return G%q;if(j(G))return 0;let $=0;for(let N=0;N<=G;N++)if(j(N))$=0;else{if(N===G)return $;if($++,$>=q)$=0}return $},U=(G,$,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let C=Math.max(0,G*q),D=Math.min(N-1,($+1)*q-1);return{start:C,end:D}}let V=-1,z=-1,M=0,T=0;for(let C=0;C<N;C++){if(j(C)){if(T>0)M++,T=0;if(M>=G&&M<=$){if(V===-1)V=C;z=C}M++,T=0}else{if(M>=G&&M<=$){if(V===-1)V=C;z=C}if(T++,T>=q)M++,T=0}if(M>$&&T===0)break}if(V===-1)return{start:0,end:-1};return{start:V,end:z}},W=(G,$,N)=>{if($<0||$>=q)return-1;let V=G*q+$;if(V<0||V>=N)return-1;return V},L=(G)=>{let $=(q-1)*Q;return Math.max(0,(G-$)/q)};return{get columns(){return q},get gap(){return Q},update:(G)=>{if(G.columns!==void 0)q=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)Q=G.gap;if(G.isHeaderFn!==void 0)j=G.isHeaderFn},getTotalRows:X,getPosition:B,getRow:Z,getCol:_,getItemRange:U,getItemIndex:W,getColumnWidth:L,getColumnOffset:(G,$)=>{let N=L($);return G*(N+Q)}}};G2();var C1=new Set,mJ=(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:Y,emitter:X,config:B,rawConfig:Z}=j,{classPrefix:_}=B;if(B.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let U=B.horizontal,W=()=>U?Y.viewport.clientHeight:j.getContainerWidth(),L=Z.items?.some((P)=>P.__groupHeader===!0),E={columns:J.columns,gap:J.gap??0};if(L)E.isHeaderFn=(P)=>{let u=j.dataManager.getItem(P);return!!(u&&u.__groupHeader===!0)};q=V2(E);let H=q.gap;j.setVirtualTotalFn(()=>{let P=j.dataManager.getTotal();return q.getTotalRows(P)});let G=Z.item,$=B.horizontal?G.width:G.height,N={containerWidth:W(),columns:q.columns,gap:q.gap},V={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof $==="function")j.setSizeConfig((P)=>{let u=N.containerWidth-2,v=(N.columns-1)*N.gap;return V.containerWidth=N.containerWidth,V.columns=N.columns,V.gap=N.gap,V.columnWidth=(u-v)/N.columns,V.row=q.getRow(P),V.column=q.getCol(P),V.totalRows=q.getTotalRows(j.dataManager.getTotal()),V.totalColumns=N.columns,$(P,V)+N.gap});else if(H>0)j.setSizeConfig($+H);if(j.rebuildSizeCache(),H>0){let P=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let u=P();return u>0?u-N.gap:0}}Y.root.classList.add(`${_}--grid`);let z=W(),M=Z.item.template,T=()=>{Q=r0(Y.items,M,j.sizeCache,q,_,z,()=>j.dataManager.getTotal(),B.ariaIdPrefix,B.horizontal),j.replaceRenderer(Q)};T(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>E),j.methods.set("_replaceGridRenderer",(P)=>{Q=P}),j.methods.set("_updateGridLayoutForGroups",(P)=>{q.update({isHeaderFn:P});let u=j.dataManager.getTotal(),v=0;for(let S=0;S<u;S++)if(q.getCol(S)===0){let k=j.sizeCache.getSize(S);v+=k}if(j.sizeCache.getTotalSize=()=>v,B.horizontal)j.dom.content.style.width=`${v}px`;else j.dom.content.style.height=`${v}px`;T()}),j.methods.set("updateGrid",(P)=>{if(P.columns!==void 0){if(!Number.isInteger(P.columns)||P.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");E.columns=P.columns}if(P.gap!==void 0){if(P.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");E.gap=P.gap}if(q)q.update(E);let u=W();if(N.containerWidth=u,N.columns=E.columns,N.gap=E.gap??0,Q)Q.updateContainerWidth(u);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let v=0;v<j.contentSizeHandlers.length;v++)j.contentSizeHandlers[v]();if(Q)Q.clear();j.forceRender()});let C=null,D=null,d=!1,p=()=>{if(d)return;d=!0,C=j.methods.get("_getSelectedIds")??null,D=j.methods.get("_getFocusedIndex")??null},A=-1,f=-1,n=!0,x=B.overscan,r={start:0,end:0},l={start:0,end:0},K=()=>{if(j.state.isDestroyed)return;let P=j.scrollController.getScrollTop(),u=j.state.viewportState.containerSize;if(!n&&P===A&&u===f)return;A=P,f=u,n=!1;let v=j.getVirtualTotal();if(v===0||u===0)r.start=0,r.end=0;else r.start=Math.max(0,j.sizeCache.indexAtOffset(P)),r.end=Math.min(v-1,Math.max(0,j.sizeCache.indexAtOffset(P+u-1)));l.start=Math.max(0,r.start-x),l.end=Math.min(v-1,r.end+x);let S=j.state.viewportState;S.scrollPosition=P,S.visibleRange.start=r.start,S.visibleRange.end=r.end,S.renderRange.start=l.start,S.renderRange.end=l.end;let k=j.state.lastRenderRange,O=S.isCompressed,w=j.dataManager.getTotal(),F=q.getItemRange(l.start,l.end,w),I=j.dataManager.getItemsInRange(F.start,F.end),m=O?j.getCompressionContext():void 0;p();let i=C?C():C1,s=D?D():-1;if(Q.render(I,F,i,s,m),k.start!==l.start||k.end!==l.end)k.start=l.start,k.end=l.end,X.emit("range:change",{range:{start:l.start,end:l.end}})},g=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,n=!0,K()};j.setRenderFns(K,g);let y=typeof $==="function";j.resizeHandlers.push((P,u)=>{let v=U?u:P;if(N.containerWidth=v,Q)Q.updateContainerWidth(v);if(y){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()}});let{animateScroll:R,cancelScroll:h}=f0(j.scrollController,j.renderIfNeeded);if(j.methods.set("cancelScroll",h),j.methods.set("scrollToIndex",(P,u)=>{let v=Math.floor(P/J.columns),{align:S,behavior:k,duration:O}=R0(u),w=j.dataManager.getState(),F=q.getTotalRows(w.total),I=Math.max(0,Math.min(v,F-1)),m=P0(I,j.sizeCache,j.state.viewportState.containerSize,F,S,j.getCachedCompression());if(k==="smooth")R(j.scrollController.getScrollTop(),m,O);else h(),j.scrollController.scrollTo(m)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),j.destroyHandlers.push(()=>{if(h(),Q)Q.destroy(),Q=null;Y.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};G2();var M2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,Y=0,X=[],B=()=>{let N=(q-1)*Q;Y=Math.max(0,(j-N)/q),X=Array(q);let V=Y+Q;for(let z=0;z<q;z++)X[z]=z*V};B();let Z=[],_=0,U=[],W=(N)=>{let V=0,z=N[0];for(let M=1;M<N.length;M++){let T=N[M];if(T<z)z=T,V=M}return V},L=(N,V)=>{if(N<=0)return _=0,Z=[],[];let z=Array(q).fill(0),M=Array(q);for(let D=0;D<q;D++)M[D]=[];let T=Array(N);for(let D=0;D<N;D++){let d=W(z),p=V(D),A=z[d];T[D]={index:D,x:X[d],y:A,lane:d,size:p,crossSize:Y},M[d].push(D),z[d]=A+p+Q}Z=M;let C=0;for(let D=0;D<q;D++){let d=z[D],p=d>0?d-Q:0;if(p>C)C=p}return _=C,T},E=(N)=>{if(N.length===0)return _>0?_:0;if(_>0)return _;let V=Array(q).fill(0);for(let M of N){let T=M.y+M.size,C=V[M.lane];if(T>C)V[M.lane]=T}let z=0;for(let M=0;M<q;M++)if(V[M]>z)z=V[M];return z},H=(N,V,z)=>{if(N.length===0||z<=V)return U.length=0,U;if(Z.length===0||Z.length!==q)return G(N,V,z);U.length=0;for(let M=0;M<q;M++){let T=Z[M],C=T.length;if(C===0)continue;let D=0,d=C;while(D<d){let p=D+d>>>1,A=N[T[p]];if(A.y+A.size<=V)D=p+1;else d=p}for(let p=D;p<C;p++){let A=N[T[p]];if(A.y>=z)break;U.push(A)}}return U},G=(N,V,z)=>{let M=[];for(let T of N)if(T.y+T.size>V&&T.y<z)M.push(T);return M};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(N)=>{let V=!1;if(N.columns!==void 0){let z=Math.max(1,Math.floor(N.columns));if(z!==q)q=z,V=!0}if(N.gap!==void 0&&N.gap!==Q)Q=N.gap,V=!0;if(N.containerSize!==void 0&&N.containerSize!==j)j=N.containerSize,V=!0;if(V)B()},calculateLayout:L,getTotalSize:E,getVisibleItems:H}};var w1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},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}}},v1=1,O2=(J,q,Q,j=!1,Y,X)=>{let B=w1(),Z=new Map,_=new Set,U=0,W="",L=-1,E={selected:!1,focused:!1},H=(f,n)=>{return E.selected=f,E.focused=n,E},G=`${Q}-item ${Q}-masonry-item`,$=`${Q}-item--selected`,N=`${Q}-item--focused`,V=(f,n)=>{if(typeof n==="string")f.innerHTML=n;else f.replaceChildren(n)},z=(f,n,x)=>{f.classList.toggle($,n),f.classList.toggle(N,x)},M=(f,n)=>{if(j)f.style.transform=`translate(${Math.round(n.y)}px, ${Math.round(n.x)}px)`;else f.style.transform=`translate(${Math.round(n.x)}px, ${Math.round(n.y)}px)`},T=(f,n)=>{if(j)f.style.width=`${n.size}px`,f.style.height=`${n.crossSize}px`;else f.style.width=`${n.crossSize}px`,f.style.height=`${n.size}px`},C=(f,n,x,r,l)=>{let K=B.acquire(),g=H(r,l);if(K.className=G,K.dataset.index=String(f),K.dataset.id=String(n.id),K.dataset.lane=String(x.lane),K.ariaSelected=String(r),X)K.id=`${X}-item-${f}`;if(Y){let R=Y();if(R!==L)L=R,W=String(R);K.setAttribute("aria-setsize",W),K.setAttribute("aria-posinset",String(f+1))}T(K,x);let y=q(n,f,g);return V(K,y),z(K,r,l),M(K,x),{element:K,lastItemId:n.id,lastSelected:r,lastFocused:l,lastY:x.y,lastX:x.x,lastSize:x.size,lastCrossSize:x.crossSize,lastSeenFrame:U}},D=(f,n,x,r)=>{U++,_.clear();for(let K=0;K<n.length;K++)_.add(n[K].index);for(let[K,g]of Z)if(_.has(K))g.lastSeenFrame=U;else if(U-g.lastSeenFrame>v1)B.release(g.element),Z.delete(K);let l=null;for(let K=0;K<n.length;K++){let g=n[K],y=g.index,R=f(y);if(!R)continue;let h=x.has(R.id),P=y===r,u=Z.get(y);if(u){let v=u.lastItemId!==R.id,S=u.lastSelected!==h,k=u.lastFocused!==P,O=u.lastY!==g.y||u.lastX!==g.x,w=u.lastSize!==g.size||u.lastCrossSize!==g.crossSize;if(v||S||k){let F=H(h,P),I=q(R,y,F);V(u.element,I),z(u.element,h,P),u.element.dataset.id=String(R.id),u.element.ariaSelected=String(h),u.lastItemId=R.id,u.lastSelected=h,u.lastFocused=P}if(w)T(u.element,g),u.lastSize=g.size,u.lastCrossSize=g.crossSize;if(O)M(u.element,g),u.lastY=g.y,u.lastX=g.x}else{let v=C(y,R,g,h,P);if(!l)l=document.createDocumentFragment();l.appendChild(v.element),Z.set(y,v)}}if(l)J.appendChild(l)},d=()=>{for(let{element:f}of Z.values())B.release(f);Z.clear(),J.innerHTML=""};return{render:D,getElement:(f)=>Z.get(f)?.element,sortDOM:()=>{I0(J,Z.keys(),(f)=>Z.get(f)?.element)},clear:d,destroy:()=>{d(),B.clear()}}};var S1=new Set,f1=100,dJ=(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(Y){let{dom:X,emitter:B,config:Z,rawConfig:_}=Y,U=Z.classPrefix,W=Z.horizontal;if(Z.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${U}--masonry`);let L=()=>{return W?X.viewport.clientHeight:X.viewport.clientWidth},E={columns:J.columns,gap:J.gap??0,containerSize:L()};q=M2(E);let H=_.item,G=W&&_.item.width?_.item.width:H.height,$={containerWidth:0,columns:0,gap:0,columnWidth:0},N=typeof G==="function"?(P)=>G(P,$):()=>G,V=()=>{let P=Y.dataManager.getTotal(),u=q;$.containerWidth=u.containerSize,$.columns=u.columns,$.gap=u.gap;let v=(u.columns-1)*u.gap;$.columnWidth=Math.max(0,($.containerWidth-v)/u.columns),j=u.calculateLayout(P,N);let S=q.getTotalSize(j);if(Y.sizeCache.getTotalSize=()=>S,W)X.content.style.width=`${S}px`;else X.content.style.height=`${S}px`},z=_.item.template;Q=O2(X.items,z,U,W,()=>Y.dataManager.getTotal(),Z.ariaIdPrefix);let M=null,T=null,C=!1,D=()=>{if(C)return;C=!0,M=Y.methods.get("_getSelectedIds")??null,T=Y.methods.get("_getFocusedIndex")??null},d=(P)=>Y.dataManager.getItem(P),p=-1,A=-1,f=!0,n=Z.overscan*f1,x=()=>{if(Y.state.isDestroyed)return;D();let P=Y.scrollController.getScrollTop(),u=Y.state.viewportState.containerSize;if(!f&&P===p&&u===A)return;p=P,A=u,f=!1;let v=Math.max(0,P-n),S=P+u+n,k=q.getVisibleItems(j,v,S),O=M?M():S1,w=T?T():-1;if(Q&&k.length>0)Q.render(d,k,O,w);let F=Y.state.viewportState;F.scrollPosition=P;let I=k.length,m=I>0?k[0].index:0,i=I>0?k[I-1].index:0;F.visibleRange.start=m,F.visibleRange.end=i,F.renderRange.start=m,F.renderRange.end=i;let s=Y.state.lastRenderRange;if(s.start!==m||s.end!==i)s.start=m,s.end=i,B.emit("range:change",{range:{start:m,end:i}})},r=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,f=!0,x()};Y.setRenderFns(x,r);let l=(P,u)=>{let v=W?u:P;if(q&&q.containerSize!==v){if(q.update({containerSize:v}),V(),Q)Q.clear();r()}};Y.resizeHandlers.push(l);let K=()=>{V(),r()},g=Y.dataManager,y=(P)=>{if(typeof g[P]!=="function")return;let u=g[P].bind(g);g[P]=(...v)=>{u(...v),K()}};y("setItems"),y("appendItems"),y("prependItems"),y("updateItem"),y("removeItem");let{animateScroll:R,cancelScroll:h}=f0(Y.scrollController,Y.renderIfNeeded);Y.methods.set("cancelScroll",h),Y.methods.set("scrollToIndex",(P,u)=>{let v=j[P];if(!v)return;let{align:S,behavior:k,duration:O}=R0(u),w=v.y,F=Y.state.viewportState.containerSize,I=w;if(S==="center")I=w-F/2+v.size/2;else if(S==="end")I=w-F+v.size;if(I=Math.max(0,I),k==="smooth")R(Y.scrollController.getScrollTop(),I,O);else h(),Y.scrollController.scrollTo(I)}),V(),Y.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),Y.destroyHandlers.push(()=>{if(h(),Q)Q.destroy();X.root.classList.remove(`${U}--masonry`)})}}};var E2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),s0=(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 Y of q)j.add(Y);return{...J,selected:j}},n0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},g0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return n0(J,[q]);else return s0(J,[q],Q)},A2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},F2=(J)=>({...J,selected:new Set}),L2=(J,q)=>{return J.focusedIndex=q,J},p2=(J,q,Q=!1)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},h2=(J,q,Q=!1)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},u2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},g2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var cJ=(J,q)=>{return J.selected.has(q)},o0=(J)=>{return Array.from(J.selected)},i0=(J,q)=>{let Q=[];for(let j of J.selected){let Y=q(j);if(Y)Q.push(Y)}return Q};var lJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=E2(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:B,emitter:Z,config:_}=X,{classPrefix:U,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}B.root.classList.add(`${U}--selectable`);let L=new Map,E=()=>{L.clear();let M=X.dataManager.getTotal(),T=X.dataManager.getCached();if(T===0)return;if(T>=M){for(let D=0;D<M;D++){let d=X.dataManager.getItem(D);if(d)L.set(d.id,D)}return}let C=X.dataManager.getStorage();if(C&&typeof C.getLoadedRanges==="function"){let D=C.getLoadedRanges();for(let d of D)for(let p=d.start;p<=d.end;p++){let A=X.dataManager.getItem(p);if(A)L.set(A.id,p)}}};Z.on("load:end",({items:M,offset:T})=>{if(!M||M.length===0)return;if(T!==void 0)for(let C=0;C<M.length;C++){let D=M[C];if(D&&D.id!==void 0)L.set(D.id,T+C)}else E()}),E(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:H}=X.getRenderFns(),G=()=>{H();let M=(T)=>{let C=L.get(T);if(C===void 0)return;return X.dataManager.getItem(C)};Z.emit("selection:change",{selected:o0(j),items:i0(j,M)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${U}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",(B.root.getAttribute("role")==="grid"?B.root.parentElement??B.root:B.root).appendChild(Y);let N=Y;Z.on("selection:change",({selected:M})=>{let T=M.length;if(T===0)N.textContent="";else if(T===1)N.textContent="1 item selected";else N.textContent=`${T} items selected`});let V=()=>{if(X.state.isDestroyed)return;if(!B.root.matches(":focus-visible"))return;let M=X.dataManager.getTotal();if(M===0)return;let T=j.focusedIndex>=0?Math.min(j.focusedIndex,M-1):0;j=L2(j,T),j.focusVisible=!0,B.root.setAttribute("aria-activedescendant",`${W}-item-${T}`),X.scrollController.scrollTo(P0(T,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let C=X.dataManager.getItem(T);if(C)X.renderer.updateItemClasses(T,j.selected.has(C.id),!0)};B.root.addEventListener("focusin",V);let z=(M)=>{if(X.state.isDestroyed)return;let T=M.relatedTarget;if(T&&B.root.contains(T))return;let C=j.focusedIndex;if(j.focusVisible=!1,B.root.removeAttribute("aria-activedescendant"),C>=0){let D=X.dataManager.getItem(C);if(D)X.renderer.updateItemClasses(C,j.selected.has(D.id),!1)}};B.root.addEventListener("focusout",z),X.clickHandlers.push((M)=>{if(X.state.isDestroyed)return;let C=M.target.closest("[data-index]");if(!C)return;let D=parseInt(C.dataset.index??"-1",10);if(D<0)return;let d=X.dataManager.getItem(D);if(!d)return;Z.emit("item:click",{item:d,index:D,event:M}),j=L2(j,D),j.focusVisible=!1,B.root.setAttribute("aria-activedescendant",`${W}-item-${D}`),j=g0(j,d.id,q),G()}),X.keydownHandlers.push((M)=>{if(X.state.isDestroyed)return;let T=X.dataManager.getTotal(),C=j.focusedIndex,D=!1,d=!1,p=j;switch(M.key){case"ArrowUp":p=p2(j,T,_.wrap),p.focusVisible=!0,D=!0,d=!0;break;case"ArrowDown":p=h2(j,T,_.wrap),p.focusVisible=!0,D=!0,d=!0;break;case"Home":p=u2(j,T),p.focusVisible=!0,D=!0,d=!0;break;case"End":p=g2(j,T),p.focusVisible=!0,D=!0,d=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let A=X.dataManager.getItem(j.focusedIndex);if(A)p=g0(j,A.id,q),p.focusVisible=!0;D=!0}break}if(D){M.preventDefault(),j=p;let A=j.focusedIndex;if(A>=0){let f=X.dataManager.getState(),n=P0(A,X.sizeCache,X.state.viewportState.containerSize,f.total,"center",X.getCachedCompression());X.scrollController.scrollTo(n),B.root.setAttribute("aria-activedescendant",`${W}-item-${A}`)}else B.root.removeAttribute("aria-activedescendant");if(d){let{selected:f}=j;if(C>=0&&C!==A){let n=X.dataManager.getItem(C);if(n)X.renderer.updateItemClasses(C,f.has(n.id),!1)}if(A>=0){let n=X.dataManager.getItem(A);if(n)X.renderer.updateItemClasses(A,f.has(n.id),!0)}}else G()}}),X.methods.set("select",(...M)=>{j=s0(j,M,q),G()}),X.methods.set("deselect",(...M)=>{j=n0(j,M),G()}),X.methods.set("toggleSelect",(M)=>{j=g0(j,M,q),G()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let M=X.getAllLoadedItems();j=A2(j,M,q),E(),G()}),X.methods.set("clearSelection",()=>{j=F2(j),G()}),X.methods.set("getSelected",()=>{return o0(j)}),X.methods.set("getSelectedItems",()=>{return i0(j,(T)=>{let C=L.get(T);if(C===void 0)return;return X.dataManager.getItem(C)})}),X.destroyHandlers.push(()=>{if(N&&N.parentNode)N.remove();B.root.removeEventListener("focusin",V),B.root.removeEventListener("focusout",z)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var aJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let Y=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),B=Q.getVirtualTotal(),Z=Q.methods.get("getSelected"),_=Z&&Z().length>0?Z():void 0;if(B===0){let E={index:0,offsetInItem:0,total:0};if(_)E.selectedIds=_;return E}let U,W;if(X.isCompressed){let H=Y/X.virtualSize*B;U=Math.max(0,Math.min(Math.floor(H),B-1)),W=(H-U)*Q.sizeCache.getSize(U)}else U=Q.sizeCache.indexAtOffset(Y),W=Y-Q.sizeCache.getOffset(U);W=Math.max(0,W);let L={index:U,offsetInItem:W,total:B};if(_)L.selectedIds=_;return L});let j=(Y)=>{let{index:X,offsetInItem:B,selectedIds:Z}=Y,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(B))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let N=Q.getCachedCompression();Q.updateContentSize(N.virtualSize)}let W=Q.getCachedCompression(),L=Math.max(0,Math.min(X,_-1)),E;if(W.isCompressed){let N=Q.sizeCache.getSize(L),V=N>0?B/N:0;E=(L+V)/_*W.virtualSize}else E=Q.sizeCache.getOffset(L)+B;let H=Q.state.viewportState.containerSize,G=Math.max(0,W.virtualSize-H);if(E=Math.max(0,Math.min(E,G)),Q.scrollController.scrollTo(E),Z&&Z.length>0){let N=Q.methods.get("select");if(N)N(...Z)}let $=Q.methods.get("loadVisibleRange");if($)requestAnimationFrame(()=>{$()});else{let N=Q.methods.get("reload");if(N)requestAnimationFrame(()=>{N()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};var T2=(J,q=50,Q=1/0,j=!0)=>{let Y=J,X=[],B=0,Z=()=>{X=Y.map((N,V)=>({def:N,index:V,width:0,minWidth:I1(N.minWidth??q,1),maxWidth:N.maxWidth??Q,resizable:N.resizable??j,offset:0}))},_=(N)=>{if(X.length===0){B=0;return}let V=0,z=0;for(let M=0;M<X.length;M++){let T=X[M],C=T.def;if(C.width!==void 0)T.width=x2(C.width,T.minWidth,T.maxWidth),V+=T.width;else z++}if(z>0){let T=Math.max(0,N-V)/z;for(let C=0;C<X.length;C++){let D=X[C];if(D.def.width===void 0)D.width=x2(T,D.minWidth,D.maxWidth)}}U()},U=()=>{let N=0;for(let V=0;V<X.length;V++){let z=X[V];z.offset=N,N+=z.width}B=N},W=(N,V)=>{if(N<0||N>=X.length)return 0;let z=X[N];if(!z.resizable)return z.width;let M=x2(V,z.minWidth,z.maxWidth);return z.width=M,U(),M},L=(N)=>{return X[N]},E=(N)=>{if(X.length===0)return;if(N<0)return X[0];if(N>=B)return X[X.length-1];let V=0,z=X.length-1;while(V<z){let M=V+z>>>1,T=X[M];if(N<T.offset)z=M-1;else if(N>=T.offset+T.width)V=M+1;else return T}return X[V]},H=(N)=>{if(N<0||N>=X.length)return 0;return X[N].offset},G=(N)=>{if(N<0||N>=X.length)return 0;return X[N].width},$=(N)=>{Y=N,Z()};return Z(),{get columns(){return X},get totalWidth(){return B},resolve:_,updateColumns:$,resizeColumn:W,getColumn:L,getColumnAtX:E,getColumnOffset:H,getColumnWidth:G}},x2=(J,q,Q)=>Math.min(Q,Math.max(q,J)),I1=(J,q)=>Math.max(q,J);var $2=(J,q,Q,j,Y,X,B)=>{let Z=document.createElement("div");Z.setAttribute("role","rowgroup");let _=document.createElement("div");_.className=`${j}-table-header`,_.setAttribute("role","row"),_.setAttribute("aria-rowindex","1"),_.style.height=`${Q}px`;let U=document.createElement("div");U.className=`${j}-table-header-scroll`,U.setAttribute("role","presentation"),_.appendChild(U),Z.appendChild(_),J.insertBefore(Z,J.firstChild),q.style.position="absolute",q.style.top=`${Q}px`,q.style.left="0",q.style.right="0",q.style.bottom="0",q.style.height="auto";let W=[],L=[],E=[],H=!0,G=null,$="asc",N=null,V=!1,z=-1,M=0,T=0,C=(y,R)=>{let h=document.createElement("div");h.className=`${j}-table-header-cell`,h.setAttribute("role","columnheader"),h.setAttribute("aria-colindex",String(R+1)),h.dataset.columnKey=y.def.key;let P=y.def.align;if(P==="center")h.classList.add(`${j}-table-header-cell--center`);else if(P==="right")h.classList.add(`${j}-table-header-cell--right`);let u=document.createElement("div");u.className=`${j}-table-header-content`;let v=y.def.header?y.def.header(y.def):y.def.label;if(typeof v==="string")u.textContent=v;else u.appendChild(v);if(h.appendChild(u),y.def.sortable){let S=document.createElement("span");S.className=`${j}-table-header-sort`,S.setAttribute("aria-hidden","true"),h.appendChild(S),E.push(S),h.classList.add(`${j}-table-header-cell--sortable`)}else E.push(null);if(y.resizable){let S=document.createElement("div");S.className=`${j}-table-header-resize`,S.dataset.resizeIndex=String(R),h.appendChild(S),L.push(S)}return h},D=(y)=>{N=y,U.textContent="",W=[],L=[],E=[];let R=y.columns;for(let h=0;h<R.length;h++){let P=R[h],u=C(P,h);W.push(u),U.appendChild(u)}if(d(y),G)p(G,$)},d=(y)=>{N=y;let R=y.columns;U.style.width=`${y.totalWidth}px`;for(let h=0;h<W.length&&h<R.length;h++){let P=W[h],u=R[h];P.style.width=`${u.width}px`}},p=(y,R)=>{if(G=y,$=R,!N)return;let h=N.columns;for(let P=0;P<E.length&&P<h.length;P++){let u=E[P];if(!u)continue;if(h[P].def.key===y&&y!==null)u.textContent=R==="asc"?"▲":"▼",u.style.opacity="0.7",W[P].setAttribute("aria-sort",R==="asc"?"ascending":"descending");else u.textContent="",u.style.opacity="0",W[P].removeAttribute("aria-sort")}},A=(y)=>{U.style.transform=`translateX(${-y}px)`},f=(y)=>{let R=y.target;if(!R.dataset.resizeIndex)return;if(y.preventDefault(),y.stopPropagation(),z=parseInt(R.dataset.resizeIndex,10),!N)return;let h=N.getColumn(z);if(!h||!h.resizable)return;V=!0,M=y.clientX,T=h.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",R.classList.add(`${j}-table-header-resize--active`),R.setPointerCapture(y.pointerId),R.addEventListener("pointermove",n),R.addEventListener("pointerup",x),R.addEventListener("pointercancel",x)},n=(y)=>{if(!V||!N)return;let R=y.clientX-M;if(Math.abs(R)<1)return;let h=Math.max(0,T+R);Y(z,h)},x=(y)=>{if(!V)return;let R=y.target;R.removeEventListener("pointermove",n),R.removeEventListener("pointerup",x),R.removeEventListener("pointercancel",x);try{R.releasePointerCapture(y.pointerId)}catch{}R.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",V=!1,z=-1},r=(y)=>{let R=y.target;if(R.dataset.resizeIndex!==void 0)return;if(V)return;let h=R;while(h&&!h.dataset.columnKey)if(h=h.parentElement,h===_||h===null)return;if(!h||!h.dataset.columnKey)return;let P=h.dataset.columnKey;if(!N)return;let u=N.columns,v=-1;for(let k=0;k<u.length;k++)if(u[k].def.key===P){v=k;break}if(v===-1)return;let S=u[v];if(B)B({key:P,index:v,event:y});if(S.def.sortable&&X){let k;if(G===P)if($==="asc")k="desc";else k=null;else k="asc";X({key:P,index:v,direction:k})}};return _.addEventListener("pointerdown",f),_.addEventListener("click",r),{element:_,update:d,updateSort:p,rebuild:D,show:()=>{if(H)return;H=!0,_.style.display=""},hide:()=>{if(!H)return;H=!1,_.style.display="none"},destroy:()=>{_.removeEventListener("pointerdown",f),_.removeEventListener("click",r),q.style.position="",q.style.top="",q.style.left="",q.style.right="",q.style.bottom="",Z.remove(),W=[],L=[],E=[],N=null,H=!1},syncScroll:A}};var p1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;return document.createElement("div")},release:(X)=>{if(X.parentNode)X.parentNode.removeChild(X);if(q.length<J)X.className="",X.removeAttribute("data-id"),X.removeAttribute("data-index"),X.removeAttribute("aria-selected"),X.removeAttribute("aria-rowindex"),X.removeAttribute("role"),X.style.cssText="",X.textContent="",q.push(X)},clear:()=>{q.length=0}}},b2=(J,q,Q,j,Y,X,B,Z)=>{let _=p1(),U=new Map,W=-1,L=Q,E=null,H=null,G=(v,S)=>{E=v,H=S},$=(v,S)=>{if(S)v.setAttribute("aria-selected","true");else v.removeAttribute("aria-selected")},N=`${Y}-item ${Y}-table-row`,V=`${Y}-item--selected`,z=`${Y}-item--focused`,M=`${Y}-table-cell`,T=`${Y}-table-cell--center`,C=`${Y}-table-cell--right`,D=`${Y}-item--odd`,d=`${Y}-item ${Y}-table-row ${Y}-table-group-header`,p=`${Y}-table-group-header-content`,A=(v,S,k,O)=>{if(k.def.cell){let w=k.def.cell(S,k.def,O);if(typeof w==="string")v.innerHTML=w;else v.replaceChildren(w)}else{let w=S[k.def.key];v.textContent=w!=null?String(w):""}},f=(v,S,k,O)=>{let w=N;if(Z&&(S&1)===1)w+=` ${D}`;if(k)w+=` ${V}`;if(O)w+=` ${z}`;v.className=w},n=(v,S)=>{let k=S.def.align;if(k==="center")v.classList.add(T),v.classList.remove(C);else if(k==="right")v.classList.add(C),v.classList.remove(T);else v.classList.remove(T,C)},x=(v,S)=>{let O=L.columns.length;if(S.length===O)return S;let w=[];for(let F=0;F<O;F++){let I;if(F<S.length)I=S[F];else I=document.createElement("div"),I.className=M,v.appendChild(I);w.push(I)}for(let F=O;F<S.length;F++)S[F].remove();return w},r=(v,S,k)=>{let O=_.acquire(),w=v;O.style.width=`${L.totalWidth}px`;let F=k.getSize(S);O.style.height=`${F}px`,O.className=d,O.setAttribute("role","presentation"),O.setAttribute("data-id",String(v.id)),O.setAttribute("data-index",String(S)),O.removeAttribute("aria-selected"),O.removeAttribute("aria-rowindex"),O.replaceChildren();let I=document.createElement("div");if(I.className=p,H){let i=H(w.groupKey,w.groupIndex);if(typeof i==="string")I.innerHTML=i;else I.appendChild(i)}O.appendChild(I);let m=k.getOffset(S);return O.style.transform=`translateY(${m}px)`,{element:O,cells:[],index:S,isGroupHeader:!0,lastItemId:v.id,lastSelected:!1,lastFocused:!1,lastOffset:m,lastHeight:F}},l=(v,S,k,O,w)=>{let F=_.acquire();F.style.width=`${L.totalWidth}px`;let I=w.getSize(S);F.style.height=`${I}px`,f(F,S,k,O),F.setAttribute("role","row"),F.setAttribute("data-id",String(v.id)),F.setAttribute("data-index",String(S)),F.id=`${X}-${S}`,F.setAttribute("aria-rowindex",String(S+2));let m=B();if(m!==W)W=m;$(F,k);let i=x(F,[]),s=L.columns;for(let q0=0;q0<i.length&&q0<s.length;q0++){let a=i[q0],t=s[q0];a.style.left=`${t.offset}px`,a.style.width=`${t.width}px`,a.setAttribute("role","gridcell"),a.setAttribute("aria-colindex",String(q0+1)),n(a,t),A(a,v,t,S)}let j0=w.getOffset(S);return F.style.transform=`translateY(${j0}px)`,{element:F,cells:i,index:S,isGroupHeader:!1,lastItemId:v.id,lastSelected:k,lastFocused:O,lastOffset:j0,lastHeight:I}},K=(v,S,k,O)=>{for(let[i,s]of U)if(i<S.start||i>S.end)_.release(s.element),U.delete(i);let w=!1,F=B();if(F!==W)W=F,w=!0;let I=null,m=q();for(let i=S.start;i<=S.end;i++){let s=i-S.start,j0=v[s];if(!j0)continue;let q0=k.has(j0.id),a=i===O,t=E?E(j0):!1,c=U.get(i);if(c){if(c.isGroupHeader!==t){_.release(c.element),U.delete(i);let Y0=t?r(j0,i,m):l(j0,i,q0,a,m);if(U.set(i,Y0),!I)I=document.createDocumentFragment();I.appendChild(Y0.element);continue}if(t){if(c.lastItemId!==j0.id){let W0=j0,D0=c.element.firstElementChild;if(D0&&H){let Q0=H(W0.groupKey,W0.groupIndex);if(typeof Q0==="string")D0.innerHTML=Q0;else D0.replaceChildren(Q0)}c.element.setAttribute("data-id",String(j0.id)),c.lastItemId=j0.id}let B0=m.getOffset(i);if(c.lastOffset!==B0)c.lastOffset=B0,c.element.style.transform=`translateY(${B0}px)`;let Z0=m.getSize(i);if(c.lastHeight!==Z0)c.lastHeight=Z0,c.element.style.height=`${Z0}px`}else{let Y0=c.lastItemId!==j0.id,B0=c.lastSelected!==q0,Z0=c.lastFocused!==a;if(Y0){let Q0=L.columns;for(let M0=0;M0<c.cells.length&&M0<Q0.length;M0++)A(c.cells[M0],j0,Q0[M0],i);f(c.element,i,q0,a),c.element.setAttribute("data-id",String(j0.id)),$(c.element,q0),c.lastItemId=j0.id,c.lastSelected=q0,c.lastFocused=a}else if(B0||Z0)f(c.element,i,q0,a),$(c.element,q0),c.lastSelected=q0,c.lastFocused=a;let W0=m.getOffset(i);if(c.lastOffset!==W0)c.lastOffset=W0,c.element.style.transform=`translateY(${W0}px)`;let D0=m.getSize(i);if(c.lastHeight!==D0)c.lastHeight=D0,c.element.style.height=`${D0}px`;if(w)c.element.setAttribute("aria-rowindex",String(i+2))}}else{let Y0=t?r(j0,i,m):l(j0,i,q0,a,m);if(U.set(i,Y0),!I)I=document.createDocumentFragment();I.appendChild(Y0.element)}}if(I)J.appendChild(I)},g=(v,S,k,O)=>{let w=U.get(v);if(!w)return;if(w.isGroupHeader)return;let F=w.lastItemId!==S.id,I=w.lastSelected!==k,m=w.lastFocused!==O;if(F||I||m){if(F){let i=L.columns;for(let s=0;s<w.cells.length&&s<i.length;s++)A(w.cells[s],S,i[s],v);w.element.setAttribute("data-id",String(S.id)),w.lastItemId=S.id}f(w.element,v,k,O),$(w.element,k),w.lastSelected=k,w.lastFocused=O}},y=(v,S,k)=>{let O=U.get(v);if(!O)return;if(O.isGroupHeader)return;let w=O.lastSelected!==S,F=O.lastFocused!==k;if(w||F)f(O.element,v,S,k),$(O.element,S),O.lastSelected=S,O.lastFocused=k},R=(v)=>{L=v;let S=v.columns;for(let[,k]of U)if(k.element.style.width=`${v.totalWidth}px`,k.cells.length>0)for(let O=0;O<k.cells.length&&O<S.length;O++){let w=k.cells[O],F=S[O];w.style.left=`${F.offset}px`,w.style.width=`${F.width}px`}},h=(v)=>{return U.get(v)?.element},P=()=>{for(let[,v]of U)_.release(v.element);U.clear(),W=-1};return{render:K,updateItem:g,updateItemClasses:y,getElement:h,updateColumnLayout:R,setGroupHeaderFn:G,clear:P,destroy:()=>{P(),_.clear()}}};var h1=new Set,rJ=(J)=>{if(!J.columns||J.columns.length===0)throw Error("[vlist/builder] withTable: columns must be a non-empty array");if(J.rowHeight===void 0&&J.estimatedRowHeight===void 0)throw Error("[vlist/builder] withTable: either rowHeight or estimatedRowHeight is required");let q=null,Q=null,j=null;return{name:"withTable",priority:10,conflicts:["withGrid","withMasonry"],setup(Y){let{dom:X,emitter:B,config:Z}=Y,{classPrefix:_}=Z;if(Z.horizontal)throw Error("[vlist/builder] withTable cannot be used with orientation: 'horizontal'");if(Z.reverse)throw Error("[vlist/builder] withTable cannot be used with reverse: true");let U=J.resizable??!0,W=J.minColumnWidth??50,L=J.maxColumnWidth??1/0,E=J.columnBorders??!1,H=J.rowBorders??!0,G=J.rowHeight,$=J.headerHeight??(typeof G==="number"?G:40),N=J.sort?.key??null,V=J.sort?.direction??"asc";if(q=T2(J.columns,W,L,U),typeof G==="function")Y.setSizeConfig(G);else if(typeof G==="number")Y.setSizeConfig(G);if(Y.rebuildSizeCache(),X.root.classList.add(`${_}--table`),H)X.root.classList.add(`${_}--table-row-borders`);if(E)X.root.classList.add(`${_}--table-col-borders`);X.root.setAttribute("role","grid"),X.root.setAttribute("aria-colcount",String(J.columns.length));let z=-1,M=X.items.getAttribute("aria-label");if(M)X.root.setAttribute("aria-label",M),X.items.removeAttribute("aria-label");X.items.setAttribute("role","rowgroup"),X.viewport.setAttribute("role","none"),X.content.setAttribute("role","none"),X.viewport.removeAttribute("tabindex");let T=Y.getContainerWidth();q.resolve(T);let C=(O,w)=>{if(!q)return;let F=q.getColumn(O);if(!F)return;let I=F.width,m=q.resizeColumn(O,w);if(Q)Q.update(q);if(j)j.updateColumnLayout(q);p(),B.emit("column:resize",{key:F.def.key,index:O,previousWidth:I,width:m})},D=(O)=>{if(O.direction===null)N=null,V="asc";else N=O.key,V=O.direction;if(Q)Q.updateSort(N,V);B.emit("column:sort",O)},d=(O)=>{B.emit("column:click",O)};if(Q=$2(X.root,X.viewport,$,_,C,D,d),Q.rebuild(q),N)Q.updateSort(N,V);let p=()=>{if(!q)return;let O=q.totalWidth;X.content.style.minWidth=`${O}px`,X.items.style.minWidth=`${O}px`};p(),j=b2(X.items,()=>Y.sizeCache,q,J.columns,_,Z.ariaIdPrefix,()=>Y.dataManager.getTotal(),Y.rawConfig.item?.striped);let A=null,f=null,n=!1,x=()=>{if(n)return;n=!0,A=Y.methods.get("_getSelectedIds")??null,f=Y.methods.get("_getFocusedIndex")??null},r=-1,l=-1,K=!0,g=Z.overscan,y={start:0,end:0},R={start:0,end:0},h=()=>{if(Y.state.isDestroyed)return;let O=Y.scrollController.getScrollTop(),w=Y.state.viewportState.containerSize;if(!K&&O===r&&w===l)return;r=O,l=w,K=!1;let F=Y.getVirtualTotal(),I=F+1;if(I!==z)z=I,X.root.setAttribute("aria-rowcount",String(I));if(F===0||w===0)y.start=0,y.end=0;else y.start=Math.max(0,Y.sizeCache.indexAtOffset(O)),y.end=Math.min(F-1,Math.max(0,Y.sizeCache.indexAtOffset(O+w-1)));R.start=Math.max(0,y.start-g),R.end=Math.min(F-1,y.end+g);let m=Y.state.viewportState;m.scrollPosition=O,m.visibleRange.start=y.start,m.visibleRange.end=y.end,m.renderRange.start=R.start,m.renderRange.end=R.end;let i=Y.state.lastRenderRange,s=Y.dataManager.getItemsInRange(R.start,R.end);x();let j0=A?A():h1,q0=f?f():-1;if(j.render(s,R,j0,q0),i.start!==R.start||i.end!==R.end)i.start=R.start,i.end=R.end,B.emit("range:change",{range:{start:R.start,end:R.end}})},P=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,K=!0,h()};Y.setRenderFns(h,P);let u=Q,v=-1,S=()=>{let O=X.viewport.scrollLeft;if(O!==v){if(v=O,u.syncScroll)u.syncScroll(O)}};Y.afterScroll.push(()=>{S()});let k=()=>{S()};X.viewport.addEventListener("scroll",k,{passive:!0}),Y.resizeHandlers.push((O,w)=>{if(!q)return;if(q.resolve(O),Q)Q.update(q);if(j)j.updateColumnLayout(q);p()}),Y.methods.set("updateColumns",(O)=>{if(!q||!Q)return;if(q.updateColumns(O),q.resolve(Y.getContainerWidth()),Q.rebuild(q),N)Q.updateSort(N,V);if(p(),j)j.updateColumnLayout(q),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",(O,w)=>{if(!q)return;let F;if(typeof O==="string"){let I=q.columns;F=-1;for(let m=0;m<I.length;m++)if(I[m].def.key===O){F=m;break}if(F===-1)return}else F=O;C(F,w)}),Y.methods.set("getColumnWidths",()=>{if(!q)return{};let O={},w=q.columns;for(let F=0;F<w.length;F++)O[w[F].def.key]=w[F].width;return O}),Y.methods.set("setSort",(O,w)=>{if(N=O,V=w??"asc",Q)Q.updateSort(N,V)}),Y.methods.set("getSort",()=>{return{key:N,direction:V}}),Y.methods.set("_getTableLayout",()=>q),Y.methods.set("_replaceTableRenderer",(O)=>{j=O}),Y.methods.set("_updateTableForGroups",(O,w)=>{if(j)j.setGroupHeaderFn(O,w)}),Y.methods.set("_getTableHeaderHeight",()=>$),Y.contentSizeHandlers.push(()=>{p()}),Y.destroyHandlers.push(()=>{if(X.viewport.removeEventListener("scroll",k),Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null;X.content.style.minWidth="",X.items.style.minWidth="",X.root.classList.remove(`${_}--table`),X.root.removeAttribute("role"),X.root.removeAttribute("aria-colcount"),X.viewport.removeAttribute("role"),X.viewport.setAttribute("tabindex","-1"),X.content.removeAttribute("role");let O=X.root.getAttribute("aria-label");if(O)X.items.setAttribute("aria-label",O),X.root.removeAttribute("aria-label");X.root.removeAttribute("aria-rowcount"),X.items.setAttribute("role","listbox")})},destroy(){if(Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null}}};var u1=50,g1=0.1;function x1(J){let q=0,Q=0,j=0;function Y(){return j>0?Q/j:0}function X(_){if(q=_,_>g1&&_<u1)Q+=_,j++}function B(){let _=J.getTotal();if(_===0)return 0;let U=J.getItemSize();if(U<=0)return 0;let W=J.getContainerSize();if(W<=0)return 0;let L=J.getScrollPosition(),E=typeof J.getColumns==="function"?J.getColumns():1,G=Math.ceil(_/E)*U,N=Math.min(G,H0)-W,V=G-W,z=N>0?V/N:1,M=L*z,T=Math.ceil((M+W)/U);return Math.min(T*E,_)}function Z(){let _=J.getTotal(),U=B();return{progress:_>0?Math.min(100,Math.max(0,U/_*100)):0,velocity:q,velocityAvg:Y(),itemCount:U,total:_}}return{getState:Z,onVelocity:X}}export{rJ as withTable,aJ as withSnapshots,lJ as withSelection,LJ as withScrollbar,bJ as withScale,kJ as withPage,dJ as withMasonry,xJ as withGroups,mJ as withGrid,HJ as withAsync,VJ as vlist,g0 as toggleSelection,RJ as simpleVisibleRange,s0 as selectItems,A2 as selectAll,IJ as rangesEqual,K2 as rafThrottle,EJ as needsScaling,Z2 as mergeRanges,cJ as isSelected,z0 as isPlaceholderItem,pJ as isInRange,C0 as isGroupHeader,i0 as getSelectedItems,o0 as getSelectedIds,L0 as getScaleState,FJ as getScaleInfo,L0 as getScale,hJ as getRangeCount,AJ as getMaxItemsWithoutScaling,f2 as filterPlaceholders,uJ as diffRanges,n0 as deselectItems,b2 as createTableRenderer,T2 as createTableLayout,$2 as createTableHeader,D2 as createStickyHeader,x1 as createStats,B2 as createSparseStorage,y0 as createSizeCache,E2 as createSelectionState,u0 as createScrollbar,$J as createScrollController,N2 as createPlaceholderManager,Q2 as createMeasuredSizeCache,O2 as createMasonryRenderer,M2 as createMasonryLayout,a0 as createGroupedSizeFn,W2 as createGroupLayout,r0 as createGridRenderer,V2 as createGridLayout,j2 as createEmitter,_2 as createAsyncManager,F2 as clearSelection,fJ as clampScrollPosition,wJ as calculateTotalSize,P0 as calculateScrollToIndex,q2 as calculateScaledVisibleRange,X2 as calculateScaledScrollToIndex,MJ as calculateScaledRenderRange,h0 as calculateScaledItemPosition,zJ as calculateRenderRange,c0 as calculateMissingRanges,SJ as calculateItemOffset,OJ as calculateIndexFromScrollPosition,vJ as calculateActualSize,l0 as buildLayoutItems,H0 as MAX_VIRTUAL_SIZE};
1
+ var{defineProperty:z2,getOwnPropertyNames:U1,getOwnPropertyDescriptor:K1}=Object,B1=Object.prototype.hasOwnProperty;var n2=new WeakMap,Z1=(J)=>{var q=n2.get(J),Q;if(q)return q;if(q=z2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")U1(J).map((j)=>!B1.call(q,j)&&z2(q,j,{get:()=>J[j],enumerable:!(Q=K1(J,j))||Q.enumerable}));return n2.set(J,q),q};var N1=(J,q)=>{for(var Q in q)z2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var o2=(J,q)=>()=>(J&&(q=J(J=0)),q);var _1=(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}},D1=(J,q)=>{let Q=q,j=new Float64Array(0),Y=(K)=>{Q=K,j=new Float64Array(K+1),j[0]=0;for(let B=0;B<K;B++)j[B+1]=j[B]+J(B)};Y(q);let X=(K)=>{if(Q===0)return 0;if(K<=0)return 0;if(K>=j[Q])return Q-1;let B=0,Z=Q-1;while(B<Z){let U=B+Z+1>>>1;if(j[U]<=K)B=U;else Z=U-1}return B};return{getOffset:(K)=>{if(K<=0)return 0;if(K>=Q)return j[Q];return j[K]},getSize:(K)=>J(K),indexAtOffset:(K)=>X(K),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(K)=>Y(K),isVariable:()=>!0}},k0=(J,q)=>{if(typeof J==="number")return _1(J,q);return D1(J,q)},m0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let Y=0,X=0,K=q;while(K<j&&X<Q)X+=J.getSize(K),Y++,K++;return Math.max(1,Y)},J2=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,Y=0;for(let X=Q-1;X>=0;X--){let K=J.getSize(X);if(Y+K>q)break;Y+=K,j++}return Math.max(j,1)},C2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),Y=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+Y*J.getSize(X)};var f0=(J,q,Q)=>{let j=Array.from(q).sort((K,B)=>K-B);if(j.length<=1)return;let Y=[];for(let K=0;K<j.length;K++){let B=Q(j[K]);if(B)Y.push(B)}if(Y.length<=1)return;let X=J.firstChild;for(let K=0;K<Y.length;K++){let B=Y[K];if(B===X)X=X.nextSibling;else J.insertBefore(B,X)}};var _J=3,DJ="vlist",v2=200,p0=50,WJ=50,VJ=5,GJ=2,H0=16000000,MJ=150,OJ="x",EJ=20,S2="_isPlaceholder",AJ="__placeholder_";var L0=(J,q)=>{let Q=q.getTotalSize(),j=Q>H0,Y=j?H0:Q,X=Q>0?Y/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:Y,ratio:X}},U2=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!Y.isCompressed){let O=Q.indexAtOffset(J),y=Q.indexAtOffset(J+q);if(y<j-1)y++;return X.start=Math.max(0,O),X.end=Math.min(j-1,Math.max(0,y)),X}let{virtualSize:K}=Y,Z=J/K*j,U=Math.floor(Z),_=m0(Q,Math.max(0,U),q,j),F=Math.ceil(Z)+_,k=K-q-J;if(k<=q&&k>=-1){let O=J2(Q,q,j),y=Math.max(0,j-O),N=Math.max(0,Math.min(1,1-k/q));U=Math.floor(U+(y-U)*N),F=k<=1?j-1:Math.min(j-1,U+_)}return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,F)),X},LJ=(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},h0=(J,q,Q,j,Y,X,K)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:B}=X,Z=B-Y,U=Z-q;if(U<=Y&&U>=-1){if(q>=Z-1){let L=Q.getTotalSize()-Q.getOffset(J);return Y-L}let k=J2(Q,Y,j),O=Math.max(0,j-k),N=q/B*j,G=Math.max(0,Math.min(1,1-U/Y)),b=Q.getOffset(J)-Q.getOffset(O),M=Q.getOffset(J)-C2(Q,N,j);return M+(b-M)*G}let _=q/B,F=Q.getTotalSize(),$=_*F;return Q.getOffset(J)-$},K2=(J,q,Q,j,Y,X="start")=>{if(j===0)return 0;let K;if(Y.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,Y.virtualSize-Q);K=J/j*Y.virtualSize}else K=q.getOffset(J);let B=q.getSize(J);switch(X){case"center":K-=(Q-B)/2;break;case"end":K-=Q-B;break}let Z=Y.virtualSize-Q;return Math.max(0,Math.min(K,Z))},TJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let Y=J/j.virtualSize;return Math.floor(Y*Q)}return q.indexAtOffset(J)},bJ=(J,q)=>{if(typeof q==="number")return J*q>H0;return q.getTotalSize()>H0},HJ=(J)=>{if(J<=0)return 0;return Math.floor(H0/J)},$J=(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 B2=()=>{};var z0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var lJ={};N1(lJ,{createGridRenderer:()=>r0});var H1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let K=document.createElement("div");return K.setAttribute("role","option"),K},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}}},$1=1,r0=(J,q,Q,j,Y,X,K,B,Z=!1)=>{let U=H1(),_=new Map,F=X,$=!1,k=null,O=0,y=0,N="",G=-1,b=(E)=>{if(k&&O===E)return k;return k=L0(E,Q),O=E,k},M={selected:!1,focused:!1},L=(E,V)=>{return M.selected=E,M.focused=V,M},z=`${Y}-item ${Y}-grid-item`,W=`${Y}-item--selected`,h=`${Y}-item--focused`,P=(E,V)=>{if(typeof V==="string")E.innerHTML=V;else E.replaceChildren(V)},x=(E,V,w)=>{E.classList.toggle(W,V),E.classList.toggle(h,w)},m=(E,V)=>{let w=j.getRow(E);if(V){let H=V.totalItems,u=b(H);if(u.isCompressed)return h0(w,V.scrollPosition,Q,H,V.containerSize,u,V.rangeStart)}return Q.getOffset(w)},p=(E,V)=>{let w=$&&j.getCol(E)===0,H=w?0:j.getCol(E),u=w?0:j.getColumnOffset(H,F),d;if($){let o=j.getRow(E),c=0,t=new Set;for(let Q0=0;Q0<E;Q0++){let r=j.getRow(Q0);if(r<o&&!t.has(r)){let i=Q.getSize(Q0);c+=i,t.add(r)}}d=c}else d=m(E,V);if(Z)return`translate(${Math.round(d)}px, ${Math.round(u)}px)`;return`translate(${Math.round(u)}px, ${Math.round(d)}px)`},f=(E,V)=>{E.style.transform=V},n=(E,V)=>{let w=E.dataset.id?.startsWith("__group_header"),H=w?F:j.getColumnWidth(F),u;if($||w)u=Q.getSize(V)-j.gap;else{let d=j.getRow(V);u=Q.getSize(d)-j.gap}if(Z)E.style.width=`${u}px`,E.style.height=`${H}px`;else E.style.width=`${H}px`,E.style.height=`${u}px`},a=(E,V,w,H,u)=>{let d=U.acquire(),o=L(w,H);if(d.className=z,d.dataset.index=String(E),d.dataset.id=String(V.id),d.dataset.row=String(j.getRow(E)),d.dataset.col=String(j.getCol(E)),d.ariaSelected=String(w),B)d.id=`${B}-item-${E}`;if(K){let t=K();if(t!==G)G=t,N=String(t);d.setAttribute("aria-setsize",N),d.setAttribute("aria-posinset",String(E+1))}n(d,E);let c=q(V,E,o);return P(d,c),x(d,w,H),f(d,u),{element:d,lastItemId:V.id,lastSelected:w,lastFocused:H,lastTransform:u,lastSeenFrame:y}},R=(E,V,w,H,u)=>{if(y++,V.start===0&&E.length>0)$=z0(E[0]);for(let[c,t]of _)if(c>=V.start&&c<=V.end)t.lastSeenFrame=y;else if(y-t.lastSeenFrame>$1)U.release(t.element),_.delete(c);let d=!1;if(K){let c=K();if(c!==G)G=c,N=String(c),d=!0}let o=null;for(let c=V.start;c<=V.end;c++){let t=c-V.start,Q0=E[t];if(!Q0){console.warn(`⚠️ RENDER: Missing item at index ${c} (range: ${V.start}-${V.end}, items.length: ${E.length})`);continue}let r=w.has(Q0.id),i=c===H,s=_.get(c);if(s){let j0=s.lastItemId!==Q0.id,q0=s.lastSelected!==r,Y0=s.lastFocused!==i;if(j0||q0||Y0){if(j0){let _0=L(r,i),X0=q(Q0,c,_0);P(s.element,X0),s.element.dataset.id=String(Q0.id),s.element.dataset.row=String(j.getRow(c)),s.element.dataset.col=String(j.getCol(c)),n(s.element,c)}x(s.element,r,i),s.element.ariaSelected=String(r),s.lastItemId=Q0.id,s.lastSelected=r,s.lastFocused=i}let K0=p(c,u);if(s.lastTransform!==K0)f(s.element,K0),s.lastTransform=K0;if(d)s.element.setAttribute("aria-setsize",N)}else{let j0=p(c,u),q0=a(c,Q0,r,i,j0);if(!o)o=document.createDocumentFragment();o.appendChild(q0.element),_.set(c,q0)}}if(o)J.appendChild(o)},g=(E)=>{for(let[V,w]of _){let H=p(V,E);if(w.lastTransform!==H)f(w.element,H),w.lastTransform=H}},A=(E,V,w,H)=>{let u=_.get(E);if(!u)return;let d=u.lastItemId!==V.id,o=u.lastSelected!==w,c=u.lastFocused!==H;if(d||o||c){let t=L(w,H),Q0=q(V,E,t);P(u.element,Q0),x(u.element,w,H),u.element.dataset.id=String(V.id),u.element.ariaSelected=String(w),n(u.element,E),u.lastItemId=V.id,u.lastSelected=w,u.lastFocused=H}},T=(E,V,w)=>{let H=_.get(E);if(!H)return;let u=H.lastSelected!==V,d=H.lastFocused!==w;if(u||d)x(H.element,V,w),H.lastSelected=V,H.lastFocused=w},S=(E)=>{return _.get(E)?.element},D=(E)=>{if(Math.abs(E-F)<1)return;F=E;for(let[V,w]of _){n(w.element,V);let H=p(V);f(w.element,H),w.lastTransform=H}},I=()=>{f0(J,_.keys(),(E)=>_.get(E)?.element)},v=()=>{for(let[,E]of _)U.release(E.element);_.clear()};return{render:R,updatePositions:g,updateItem:A,updateItemClasses:T,getElement:S,sortDOM:I,updateContainerWidth:D,clear:v,destroy:()=>{v(),U.clear()}}};var O2=o2(()=>{B2()});var i2=2,t2=(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 Y=J.samples[J.sampleIndex];if(Y.position=q,Y.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,K=J.samples[X],B=q-K.position,Z=Q-K.time;J.velocity=Z>0?Math.abs(B)/Z:0}return J.lastPosition=q,J.lastTime=Q,J};var Q2=(J,q)=>{let Q=new Map,j=(X)=>{let K=Q.get(X);return K!==void 0?K:J},Y=k0(j,q);return{getOffset(X){return Y.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return Y.indexAtOffset(X)},getTotalSize(){return Y.getTotalSize()},getTotal(){return Y.getTotal()},rebuild(X){if(X<Y.getTotal()){for(let K of Q.keys())if(K>=X)Q.delete(K)}Y=k0(j,X)},isVariable(){return!0},setMeasuredSize(X,K){Q.set(X,K)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var j2=()=>{let J={},q=(B,Z)=>{if(!J[B])J[B]=new Set;return J[B].add(Z),()=>Q(B,Z)},Q=(B,Z)=>{J[B]?.delete(Z)};return{on:q,off:Q,emit:(B,Z)=>{J[B]?.forEach((U)=>{try{U(Z)}catch(_){console.error(`[vlist] Error in event handler for "${String(B)}":`,_)}})},once:(B,Z)=>{let U=(_)=>{Q(B,U),Z(_)};return q(B,U)},clear:(B)=>{if(B)delete J[B];else for(let Z in J)delete J[Z]},listenerCount:(B)=>{return J[B]?.size??0}}};var JJ=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},QJ=(J,q,Q,j)=>{let Y=document.createElement("div");if(Y.className=q,j)Y.classList.add(`${q}--horizontal`);Y.setAttribute("tabindex","0");let X=document.createElement("div");if(X.className=`${q}-viewport`,X.setAttribute("tabindex","-1"),j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let K=document.createElement("div");if(K.className=`${q}-content`,K.style.position="relative",j)K.style.height="100%";else K.style.width="100%";let B=document.createElement("div");if(B.className=`${q}-items`,B.setAttribute("role","listbox"),Q)B.setAttribute("aria-label",Q);if(j)B.setAttribute("aria-orientation","horizontal");if(B.style.position="relative",j)B.style.height="100%";else B.style.width="100%";return K.appendChild(B),X.appendChild(K),Y.appendChild(X),J.appendChild(Y),{root:Y,viewport:X,content:K,items:B}};var jJ=(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 qJ=(J,q,Q,j,Y)=>{if(j===0||q===0){Y.start=0,Y.end=0;return}let X=Q.indexAtOffset(J),K=m0(Q,X,q,j),B=X+K;Y.start=Math.max(0,X),Y.end=Math.min(j-1,Math.max(0,B))},XJ=(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)},YJ=(J,q,Q,j,Y,X=0)=>{if(j===0)return 0;let K=Math.max(0,Math.min(J,j-1)),B=q.getOffset(K),Z=q.getSize(K),U=q.getTotalSize(),_=Math.max(0,U+X-Q),F;switch(Y){case"center":F=B-(Q-Z)/2;break;case"end":F=X>0&&B+Z>=U?_:B-Q+Z;break;default:F=B}return Math.max(0,Math.min(F,_))};var q2={top:0,right:0,bottom:0,left:0},S0=(J)=>{if(J==null)return q2;if(typeof J==="number")return J===0?q2:{top:J,right:J,bottom:J,left:J};if(J.length===2){let[X,K]=J;return X===0&&K===0?q2:{top:X,right:K,bottom:X,left:K}}let[q,Q,j,Y]=J;return q===0&&Q===0&&j===0&&Y===0?q2:{top:q,right:Q,bottom:j,left:Y}},X2=(J,q)=>q?J.left+J.right:J.top+J.bottom,Y2=(J,q)=>q?J.top+J.bottom:J.left+J.right;var UJ=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:Y,rawConfig:X,rendered:K,pool:B,sharedState:Z,isHorizontal:U,classPrefix:_,contentSizeHandlers:F,idleHandlers:$,afterScroll:k,clickHandlers:O,keydownHandlers:y,resizeHandlers:N,destroyHandlers:G,methods:b,onScrollFrame:M,resizeObserver:L,renderRange:z}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return Y},get rawConfig(){return X},adjustScrollPosition(W){if(J.mp===0)return W;let h=U?J.cw:J.ch,P=J.hc.getTotalSize(),x=Math.max(0,P-h),m=Math.max(0,P+J.mp-h);if(W>=x)return m;return Math.min(W,m)},get renderer(){return{render:(W,h,P,x,m)=>{J.ss=P,J.fi=x,J.ffn()},updateItemClasses:(W,h,P)=>{let x=K.get(W);if(!x)return;x.classList.toggle(`${_}-item--selected`,h),x.classList.toggle(`${_}-item--focused`,P),x.ariaSelected=h?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(W)=>K.get(W)??null,clear:()=>{},destroy:()=>{}}},set renderer(W){},get dataManager(){return J.dm},set dataManager(W){J.dm=W},get scrollController(){return J.sc},set scrollController(W){J.sc=W},state:Z,getContainerWidth(){return J.cw},afterScroll:k,idleHandlers:$,clickHandlers:O,keydownHandlers:y,resizeHandlers:N,contentSizeHandlers:F,destroyHandlers:G,methods:b,replaceTemplate(W){J.at=W},replaceRenderer(W){},replaceDataManager(W){J.dm=W},replaceScrollController(W){J.sc=W},getItemsForRange(W){let{dm:h,it:P}=J,x=[];for(let m=W.start;m<=W.end;m++){let p=h?h.getItem(m):P[m];if(p)x.push(p)}return x},getAllLoadedItems(){let W=J.dm;if(W){let h=W.getTotal(),P=[];for(let x=0;x<h;x++){let m=W.getItem(x);if(m)P.push(m)}return P}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let W=J.hc;return{isCompressed:!1,actualSize:W.getTotalSize(),virtualSize:W.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:z.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,W]of K)W.remove(),B.release(W);K.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(W,h){J.rfn=W,J.ffn=h},setVirtualTotalFn(W){J.vtf=W},rebuildSizeCache(W){J.hc.rebuild(W??J.vtf())},setSizeConfig(W){if(J.hc=k0(W,J.vtf()),J.gp>0){let h=J.hc.getTotalSize,P=J.gp;J.hc.getTotalSize=()=>{let x=h();return x>0?x-P:0}}},updateContentSize(W){let h=`${W+J.mp}px`;if(U)Q.content.style.width=h;else Q.content.style.height=h},updateCompressionMode(){},setVisibleRangeFn(W){J.gvr=W},setScrollToPosFn(W){J.gsp=W},setPositionElementFn(W){J.pef=W},setScrollFns(W,h){J.sgt=W,J.sst=(P)=>{h(P),M()}},setScrollTarget(W){J.st.removeEventListener("scroll",M),J.st=W,J.st.addEventListener("scroll",M,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(W){J.gcw=W.width,J.gch=W.height,J.cw=W.width(),J.ch=W.height(),Z.viewportState.containerSize=U?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,L.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},KJ=(J,q,Q)=>{let{rendered:j,itemState:Y,contentSizeHandlers:X,applyTemplate:K,updateContentSize:B}=q,Z=()=>{J.hc.rebuild(J.vtf()),B(),Q.updateCompressionMode();for(let U=0;U<X.length;U++)X[U]();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:(U)=>J.it[U],isItemLoaded:(U)=>U>=0&&U<J.it.length&&J.it[U]!==void 0,getItemsInRange:(U,_)=>{let F=J.it,$=[],k=Math.max(0,U),O=Math.min(_,F.length-1);for(let y=k;y<=O;y++)$.push(F[y]);return $},setTotal:(U)=>{},setItems:(U,_=0,F)=>{let $=J.it;if(_===0&&(F!==void 0||$.length===0))J.it=U;else{let k=_+U.length;if($.length<k)$.length=k;for(let O=0;O<U.length;O++)$[_+O]=U[O]}if(J.ii)Z()},updateItem:(U,_)=>{let F=J.it;if(U<0||U>=F.length)return!1;let $=F[U];if(!$)return!1;F[U]={...$,..._};let k=j.get(U);if(k)K(k,J.at(F[U],U,Y)),k.dataset.id=String(F[U].id);return!0},removeItem:(U)=>{if(U<0||U>=J.it.length)return!1;if(J.it.splice(U,1),J.ii)Z();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),B(),J.ffn()}}},BJ=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(Y)=>{J.sst(Y),J.ls=Y,J.rfn()},scrollBy:(Y)=>{let X=J.sgt()+Y;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(Y=2)=>J.sab(Y),getScrollPercentage:()=>{let Y=J.hc.getTotalSize(),X=Math.max(0,Y-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:(Y)=>{J.ch=Y},destroy:()=>{}}};var ZJ=(J,q,Q,j,Y,X,K,B,Z,U=0)=>{let _=(N,G=!1)=>{let b=Q?q.viewport.scrollWidth-q.viewport.clientWidth:q.viewport.scrollHeight-q.viewport.clientHeight;if(b<=0||N<b-2)return!1;let M=Math.max(0,J.hc.getTotalSize()-(Q?J.cw:J.ch));if(M>N){if(J.sst(M),J.ls=M,G)J.rfn();return!0}return!1};if(!Z||!B)return{ob:null,ei:null,mc:null,fl:()=>{},se:_};let F=new WeakMap,$=0,k=!1,O=null,y=()=>{if(k){let N=J.sgt();K(),k=!1,_(N,!0)}};return O=new ResizeObserver((N)=>{if(J.id)return;let G=!1,b=j.start;for(let M of N){let L=F.get(M.target);if(L===void 0)continue;let z=Q?M.borderBoxSize[0].inlineSize:M.borderBoxSize[0].blockSize;if(!B.isMeasured(L)){let W=z+U,h=B.getSize(L);if(B.setMeasuredSize(L,W),G=!0,L<b&&W!==h)$+=W-h;O.unobserve(M.target);let P=M.target;if(Q)P.style.width=`${z}px`;else P.style.height=`${z}px`}}if(!G)return;if(B.rebuild(J.vtf()),J.hc=B,$!==0){let M=J.sgt();J.sst(M+$),J.ls=M+$,$=0}if(X())k=!0;else{let M=J.sgt();K(),k=!1,_(M)}Y.start=-1,Y.end=-1,J.rfn()}),{ob:O,ei:F,mc:B,fl:y,se:_}};var w2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,P0=(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}},I0=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,K,B)=>{if(j(),Math.abs(K-X)<1){J.scrollTo(K);return}let Z=performance.now(),U=(_)=>{let F=_-Z,$=Math.min(F/B,1),k=X+(K-X)*w2($);if(J.scrollTo(k),q(),$<1)Q=requestAnimationFrame(U);else Q=null};Q=requestAnimationFrame(U)},cancelScroll:j}};var NJ=(J,q,Q,j,Y,X,K,B,Z,U,_,F,$,k,O,y,N,G)=>{let b=(A)=>{Z.dataManager.setItems(A,0,A.length)},M=U?(A)=>{let T=J.sab(2),S=J.it.length;if(Z.dataManager.setItems(A,S),T&&J.it.length>0){let D=J.gsp(J.it.length-1,J.hc,J.ch,J.it.length,"end");J.sst(D),J.ls=D,J.rfn()}}:(A)=>{let T=J.it.length;Z.dataManager.setItems(A,T)},L=U?(A)=>{let T=J.sgt(),S=J.hc.getTotalSize(),D=[...J.it];Z.dataManager.clear(),Z.dataManager.setItems([...A,...D],0);let v=J.hc.getTotalSize()-S;if(v>0)J.sst(T+v),J.ls=T+v}:(A)=>{let T=[...J.it];Z.dataManager.clear(),Z.dataManager.setItems([...A,...T],0)},z=(A,T)=>{Z.dataManager.updateItem(A,T)},W=(A)=>{Z.dataManager.removeItem(A)},h=async()=>{if(Z.dataManager.reload)await Z.dataManager.reload()},P=null,x=()=>{if(P!==null)cancelAnimationFrame(P),P=null},m=(A,T,S)=>{if(x(),Math.abs(T-A)<1){J.sst(T),J.ls=T,J.rfn();return}let D=performance.now(),I=(v)=>{let C=v-D,E=Math.min(C/S,1),V=A+(T-A)*w2(E);if(J.sst(V),J.ls=V,J.rfn(),E<1)P=requestAnimationFrame(I);else P=null};P=requestAnimationFrame(I)},p=(A,T)=>{let{align:S,behavior:D,duration:I}=P0(T),v=J.vtf(),C=A;if(_&&v>0)C=(C%v+v)%v;let E=J.gsp(C,J.hc,J.ch,v,S);if(D==="smooth")m(J.sgt(),E,I);else x(),J.sst(E)},f=()=>J.sgt(),n=(A,T)=>{return Q.on(A,T)},a=(A,T)=>{Q.off(A,T)},R=()=>{if(J.id)return;if(J.id=!0,Z.state.isDestroyed=!0,q.items.removeEventListener("click",F),q.items.removeEventListener("dblclick",$),q.root.removeEventListener("keydown",k),J.st.removeEventListener("scroll",O),y.disconnect(),N(),J.wh)q.viewport.removeEventListener("wheel",J.wh);G();for(let A=0;A<B.length;A++)B[A]();for(let A of K)if(A.destroy)A.destroy();x();for(let[,A]of j)A.remove(),Y.release(A);j.clear(),Y.clear(),Q.emit("destroy",void 0),Q.clear(),q.root.remove()},g={get element(){return q.root},get items(){if(X.has("_getItems"))return X.get("_getItems")();return J.it},get total(){if(X.has("_getTotal"))return X.get("_getTotal")();return J.vtf()},setItems:X.has("setItems")?X.get("setItems"):b,appendItems:X.has("appendItems")?X.get("appendItems"):M,prependItems:X.has("prependItems")?X.get("prependItems"):L,updateItem:X.has("updateItem")?X.get("updateItem"):z,removeItem:X.has("removeItem")?X.get("removeItem"):W,reload:X.has("reload")?X.get("reload"):h,scrollToIndex:X.has("scrollToIndex")?X.get("scrollToIndex"):p,cancelScroll:X.has("cancelScroll")?X.get("cancelScroll"):x,getScrollPosition:X.has("getScrollPosition")?X.get("getScrollPosition"):f,on:n,off:a,destroy:R};for(let[A,T]of X){if(A.charCodeAt(0)===95||A==="setItems"||A==="appendItems"||A==="prependItems"||A==="updateItem"||A==="removeItem"||A==="reload"||A==="scrollToIndex"||A==="scrollToItem"||A==="cancelScroll"||A==="getScrollPosition")continue;g[A]=T}return g};var W1=0,FJ=(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",Y=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(Y==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(Y!=null){if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="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 K=new Map,B=!1,Z={use(U){if(B)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(U.name,U),Z},build(){if(B)throw Error("[vlist/builder] .build() can only be called once");return B=!0,V1(J,K,q,Y,X??null)}};return Z};function V1(J,q,Q,j,Y){let{item:X,items:K,overscan:B=_J,classPrefix:Z=DJ,ariaLabel:U,padding:_,reverse:F=!1,scroll:$}=J,k=$,O=k?.wheel??!0,y=k?.wrap??!1,N=F,G=`${Z}-${W1++}`,b=q.has("withGrid")||q.has("withMasonry")?0:X.gap??0,M=j??Y,L=j==null&&Y!=null,z=typeof matchMedia==="function"&&matchMedia("(pointer: coarse)").matches&&!matchMedia("(pointer: fine)").matches,W=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,h={overscan:B,classPrefix:Z,reverse:N,wrap:y,horizontal:Q,ariaIdPrefix:G},P=Array.from(q.values()).sort((l,e)=>(l.priority??50)-(e.priority??50)),x=new Set(P.map((l)=>l.name));for(let l of P)if(l.conflicts){for(let e of l.conflicts)if(x.has(e))throw Error(`[vlist/builder] ${l.name} and ${e} cannot be combined`)}if(N){if(x.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let m=JJ(J.container),p=QJ(m,Z,U,Q);if(k?.wheel===!1)if(Q)p.viewport.style.overflowX="hidden";else p.viewport.style.overflow="hidden";if(k?.scrollbar==="none")p.viewport.classList.add(`${Z}-viewport--no-scrollbar`);let f=S0(_),n=X2(f,Q);if(f.top||f.right||f.bottom||f.left)p.content.style.boxSizing="border-box",p.content.style.padding=`${f.top}px ${f.right}px ${f.bottom}px ${f.left}px`;let a=j2(),R=K||[],g=typeof M==="function"&&(q.has("withGrid")||q.has("withMasonry")),A=b>0?typeof M==="function"?(l)=>M(l)+b:M+b:M,T=L?Q2(Y+b,R.length):k0(A,g?0:R.length);if(b>0){let l=T.getTotalSize;T.getTotalSize=()=>{let e=l();return e>0?e-b:0}}let S=jJ(),D={it:R,hc:T,ch:p.viewport.clientHeight,cw:p.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:t2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>p.viewport.scrollLeft:()=>p.viewport.scrollTop,sst:Q?(l)=>{p.viewport.scrollLeft=l}:(l)=>{p.viewport.scrollTop=l},sab:(l=2)=>{let e=D.hc.getTotalSize();return D.ls+D.ch>=e-l},sic:!1,rfn:null,ffn:null,gvr:(l,e,J0,B0,V0)=>{qJ(l,e,J0,B0,V0)},gsp:(l,e,J0,B0,V0)=>{return YJ(l,e,J0,B0,V0,D.mp)},pef:null,at:X.template,vre:!0,st:p.viewport,wh:null,gcw:()=>D.cw,gch:()=>D.ch,gp:b,mp:n};D.vtf=()=>D.dm?D.dm.getTotal():D.it.length;let I=null,v=!1,C={start:0,end:0},E={start:0,end:0},V={start:-1,end:-1},w={viewportState:{scrollPosition:0,containerSize:Q?D.cw:D.ch,totalSize:D.hc.getTotalSize(),actualSize:D.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},H=new Map,u=()=>{f0(p.items,H.keys(),(l)=>H.get(l))},d=()=>{let l=`${D.hc.getTotalSize()+n}px`;if(Q)p.content.style.width=l;else p.content.style.height=l},c=ZJ(D,p,Q,C,V,()=>v,d,L?T:null,L,b),t={selected:!1,focused:!1},Q0=`${Z}-item`,r=X.striped===!0,i=`${Z}-item--odd`,s=[],j0=[],q0=[],Y0=[],K0=[],_0=[],X0=[],D0=new Map,T0=null,N0=null,A0=!1,W0=()=>{if(A0)return;A0=!0,T0=D0.get("_getSelectedIds")??null,N0=D0.get("_getFocusedIndex")??null},F0=(l,e)=>{if(typeof e==="string")l.innerHTML=e;else l.replaceChildren(e)},w0=(l,e)=>{let J0=Math.round(D.hc.getOffset(e));if(Q)l.style.transform=`translateX(${J0}px)`;else l.style.transform=`translateY(${J0}px)`};D.pef=w0;let eJ=(l,e)=>{let J0=S.acquire();J0.className=Q0;let B0=!L||c.mc&&c.mc.isMeasured(l);if(Q){if(B0)J0.style.width=`${D.hc.getSize(l)-b}px`;else J0.style.width="";if(W!=null)J0.style.height=`${W}px`}else if(B0)J0.style.height=`${D.hc.getSize(l)-b}px`;else J0.style.height="";if(J0.dataset.index=String(l),J0.dataset.id=String(e.id),J0.ariaSelected="false",J0.id=`${G}-item-${l}`,D.la=String(D.vtf()),J0.setAttribute("aria-setsize",D.la),J0.setAttribute("aria-posinset",String(l+1)),String(e.id).startsWith("__placeholder_"))J0.classList.add(`${Z}-item--placeholder`);if(r)J0.classList.toggle(i,(l&1)===1);return F0(J0,D.at(e,l,t)),D.pef(J0,l),J0},J1=()=>{if(D.id)return;W0();let l=T0?T0():D.ss,e=N0?N0():D.fi,J0=D.vtf(),B0=Q?D.cw:D.ch;if(D.gvr(D.ls,B0,D.hc,J0,C),XJ(C,B,J0,E),E.start===V.start&&E.end===V.end){if(D.sic)for(let[U0,G0]of H)D.pef(G0,U0);return}let V0=String(J0),M0=V0!==D.la;D.la=V0;for(let[U0,G0]of H)if(U0<E.start||U0>E.end)G0.remove(),S.release(G0),H.delete(U0);let Z0=document.createDocumentFragment(),E0=[],b0=[];for(let U0=E.start;U0<=E.end;U0++){let G0=D.dm?D.dm.getItem(U0):D.it[U0];if(G0===void 0)continue;let O0=H.get(U0);if(O0){let $0=O0.dataset.id,x0=String(G0.id);if($0!==x0){let Y1=$0?.startsWith("__placeholder_"),a2=x0.startsWith("__placeholder_");F0(O0,D.at(G0,U0,t)),O0.dataset.id=x0;let s2=!L||c.mc&&c.mc.isMeasured(U0);if(Q)O0.style.width=s2?`${D.hc.getSize(U0)-b}px`:"";else O0.style.height=s2?`${D.hc.getSize(U0)-b}px`:"";if(a2)O0.classList.add(`${Z}-item--placeholder`);else O0.classList.remove(`${Z}-item--placeholder`);if(Y1&&!a2)O0.classList.add(`${Z}-item--replaced`),setTimeout(()=>{O0.classList.remove(`${Z}-item--replaced`)},300)}D.pef(O0,U0);let e0=l.has(G0.id),X1=U0===e;if(O0.classList.toggle(`${Z}-item--selected`,e0),O0.classList.toggle(`${Z}-item--focused`,X1),O0.ariaSelected=e0?"true":"false",M0)O0.setAttribute("aria-setsize",D.la)}else{let $0=eJ(U0,G0);b0.push({index:U0,element:$0});let x0=l.has(G0.id),e0=U0===e;if(x0)$0.classList.add(`${Z}-item--selected`),$0.ariaSelected="true";if(e0)$0.classList.add(`${Z}-item--focused`);Z0.appendChild($0),E0.push({index:U0,element:$0})}}if(E0.length>0){p.items.appendChild(Z0);for(let{index:U0,element:G0}of E0)H.set(U0,G0)}if(L&&c.ob&&c.mc&&c.ei){for(let{index:U0,element:G0}of b0)if(!c.mc.isMeasured(U0))c.ei.set(G0,U0),c.ob.observe(G0)}V.start=E.start,V.end=E.end,w.lastRenderRange.start=E.start,w.lastRenderRange.end=E.end,w.viewportState.scrollPosition=D.ls,w.viewportState.visibleRange.start=C.start,w.viewportState.visibleRange.end=C.end,w.viewportState.renderRange.start=E.start,w.viewportState.renderRange.end=E.end,a.emit("range:change",{range:{start:E.start,end:E.end}})},Q1=()=>{V.start=-1,V.end=-1,D.rfn()};D.rfn=J1,D.ffn=Q1;let j1=()=>{p.root.classList.remove(`${Z}--scrolling`),v=!1,D.vt.velocity=0,D.vt.sampleCount=0,a.emit("velocity:change",{velocity:0,reliable:!1}),c.fl(),u();for(let l=0;l<j0.length;l++)j0[l]();a.emit("scroll:idle",{scrollPosition:D.ls})},q1=()=>{if(I)clearTimeout(I);I=setTimeout(j1,k?.idleTimeout??MJ)},i0=()=>{if(D.id)return;let l=D.sgt();if(l===D.ls&&v)return;let e=l>=D.ls?"down":"up";if(D.vt=e2(D.vt,l),!p.root.classList.contains(`${Z}--scrolling`))p.root.classList.add(`${Z}--scrolling`);v=!0,D.ls=l,D.rfn(),a.emit("scroll",{scrollPosition:l,direction:e}),a.emit("velocity:change",{velocity:D.vt.velocity,reliable:D.vt.sampleCount>=i2});for(let J0=0;J0<s.length;J0++)s[J0](l,e);q1()},v0=null;if(D.st.addEventListener("scroll",i0,{passive:!0}),O&&!Q&&!z)v0=(l)=>{if(w.viewportState.isCompressed)return;let e=p.viewport.scrollWidth>p.viewport.clientWidth;if(e&&Math.abs(l.deltaX)>Math.abs(l.deltaY))return;if(l.preventDefault(),e&&l.deltaX!==0)p.viewport.scrollLeft+=l.deltaX;let J0=D.sgt(),B0=p.viewport.scrollHeight-p.viewport.clientHeight,V0=Math.max(0,Math.min(J0+l.deltaY,B0));if(Math.abs(V0-J0)<1)return;D.sst(V0),i0()},D.wh=v0,p.viewport.addEventListener("wheel",v0,{passive:!1});else if(Q&&O)v0=(l)=>{if(l.deltaX)return;l.preventDefault(),p.viewport.scrollLeft+=l.deltaY},D.wh=v0,p.viewport.addEventListener("wheel",v0,{passive:!1});let m2=(l)=>{let e=l.target.closest("[data-index]");if(!e)return null;let J0=parseInt(e.dataset.index??"-1",10);if(J0<0)return null;let B0=D.dm?.getItem(J0)??D.it[J0];if(!B0||B0.__groupHeader)return null;return{item:B0,index:J0}},d2=(l)=>{let e=m2(l);if(e)a.emit("item:click",{item:e.item,index:e.index,event:l});for(let J0=0;J0<q0.length;J0++)q0[J0](l)},c2=(l)=>{let e=m2(l);if(e)a.emit("item:dblclick",{item:e.item,index:e.index,event:l})},l2=(l)=>{for(let e=0;e<Y0.length;e++)Y0[e](l)};p.items.addEventListener("click",d2),p.items.addEventListener("dblclick",c2),p.root.addEventListener("keydown",l2);let P2=new ResizeObserver((l)=>{if(D.id)return;for(let e of l){let J0=e.contentRect.height,B0=e.contentRect.width,V0=Q?B0:J0,M0=Q?D.cw:D.ch;if(D.cw=B0,D.ch=J0,Math.abs(V0-M0)>1){if(w.viewportState.containerSize=V0,D.ii)d(),D.rfn(),a.emit("resize",{height:J0,width:B0})}if(D.ii)for(let Z0=0;Z0<K0.length;Z0++)K0[Z0](B0,J0)}});if(D.vre)P2.observe(p.viewport);let R2={dom:p,emitter:a,resolvedConfig:h,rawConfig:J,rendered:H,pool:S,itemState:t,sharedState:w,renderRange:E,isHorizontal:Q,classPrefix:Z,contentSizeHandlers:_0,idleHandlers:j0,afterScroll:s,clickHandlers:q0,keydownHandlers:Y0,resizeHandlers:K0,destroyHandlers:X0,methods:D0,onScrollFrame:i0,resizeObserver:P2,applyTemplate:F0,updateContentSize:d},t0=UJ(D,R2);D.dm=KJ(D,R2,t0),D.sc=BJ(D,R2);let r2=new Map;for(let l of P)if(l.methods)for(let e of l.methods){let J0=r2.get(e);if(J0)throw Error(`[vlist/builder] Method "${e}" is registered by both "${J0}" and "${l.name}"`);r2.set(e,l.name)}for(let l of P)l.setup(t0);if(!D0.has("_getFocusedIndex")){let l=-1,e=`${Z}-item--focused`,J0=(M0,Z0)=>{let E0=D.vtf();if(Z0<0||Z0>=E0)return;l=Z0,p.root.setAttribute("aria-activedescendant",`${G}-item-${Z0}`);let b0=Q?D.cw:D.ch;if(D.sst(D.gsp(Z0,D.hc,b0,E0,"center")),D.ls=D.sgt(),D.rfn(),M0>=0&&M0!==Z0)H.get(M0)?.classList.remove(e);H.get(Z0)?.classList.add(e)},B0=()=>{if(D.id)return;if(!p.root.matches(":focus-visible"))return;let M0=D.vtf();if(M0===0)return;J0(-1,l>=0?Math.min(l,M0-1):0)};p.root.addEventListener("focusin",B0);let V0=(M0)=>{if(D.id)return;let Z0=M0.relatedTarget;if(Z0&&p.root.contains(Z0))return;if(l>=0)H.get(l)?.classList.remove(e);p.root.removeAttribute("aria-activedescendant")};p.root.addEventListener("focusout",V0),Y0.push((M0)=>{if(D.id)return;let Z0=D.vtf();if(Z0===0)return;let E0=l,b0=E0;switch(M0.key){case"ArrowUp":b0=E0<=0?Z0-1:E0-1;break;case"ArrowDown":b0=E0>=Z0-1?0:E0+1;break;case"Home":b0=0;break;case"End":b0=Z0-1;break;default:return}M0.preventDefault(),J0(E0,b0)}),X0.push(()=>{p.root.removeEventListener("focusin",B0),p.root.removeEventListener("focusout",V0)})}if(D.ii=!0,t0.state.isInitialized=!0,d(),D.rfn(),N&&D.it.length>0){let l=D.gsp(D.it.length-1,D.hc,D.ch,D.it.length,"end");D.sst(l),D.ls=l,D.rfn()}return NJ(D,p,a,H,S,D0,P,X0,t0,N,y,d2,c2,l2,i0,P2,()=>{if(c.ob)c.ob.disconnect()},()=>{if(I)clearTimeout(I)})}B2();var u0=(J,q,Q={},j="vlist",Y=!1)=>{let{autoHide:X=!0,autoHideDelay:K=1000,minThumbSize:B=30,showOnHover:Z=!0,hoverZoneWidth:U=16,showOnViewportEnter:_=!0}=Q,F=0,$=0,k=0,O=0,y=!1,N=!1,G=0,b=0,M=0,L=null,z=!1,W=null,h=null,P=Y?"width":"height",x=Y?"translateX":"translateY",m=Y?(c)=>c.clientX:(c)=>c.clientY,p=Y?"left":"top",f=document.createElement("div"),n=document.createElement("div"),a=Z?document.createElement("div"):null,R=()=>{if(f.className=`${j}-scrollbar`,n.className=`${j}-scrollbar-thumb`,Y)f.classList.add(`${j}-scrollbar--horizontal`);if(f.appendChild(n),J.appendChild(f),a){if(a.className=`${j}-scrollbar-hover`,Y)a.classList.add(`${j}-scrollbar-hover--horizontal`),a.style.height=`${U}px`;else a.style.width=`${U}px`;J.appendChild(a)}},g=()=>{if(L)clearTimeout(L),L=null},A=()=>{if(!X)return;g(),L=setTimeout(S,K)},T=()=>{if(F<=$)return;if(g(),!z)f.classList.add(`${j}-scrollbar--visible`),z=!0;if(X&&!y&&!N)A()},S=()=>{if(y||N)return;f.classList.remove(`${j}-scrollbar--visible`),z=!1},D=(c,t)=>{F=c,$=t;let Q0=F>$;if(f.style.display=Q0?"":"none",!Q0){S();return}let r=$/F;k=Math.max(B,r*$),n.style[P]=`${k}px`,O=$-k,I(M)},I=(c)=>{if(M=c,F<=$||O<=0)return;let t=F-$,r=Math.min(1,Math.max(0,c/t))*O;n.style.transform=`${x}(${r}px)`},v=(c)=>{if(c.target===n)return;let t=f.getBoundingClientRect(),i=m(c)-t[p]-k/2,j0=Math.max(0,Math.min(i,O))/O,q0=F-$,Y0=j0*q0;q(Y0),T()},C=(c)=>{c.preventDefault(),c.stopPropagation(),y=!0,G=m(c),b=M,g(),f.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",E),document.addEventListener("mouseup",V)},E=(c)=>{if(!y)return;let t=m(c)-G,Q0=O>0?t/O:0,r=F-$,i=Q0*r,s=Math.max(0,Math.min(b+i,r)),q0=s/r*O;if(n.style.transform=`${x}(${q0}px)`,h=s,W===null)W=requestAnimationFrame(()=>{if(h!==null)q(h);W=null})},V=()=>{if(y=!1,W!==null)cancelAnimationFrame(W),W=null;if(h!==null)q(h),h=null;if(f.classList.remove(`${j}-scrollbar--dragging`),X&&!N)A();document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",V)},w=()=>{if(_)T()},H=()=>{if(!y){if(N=!1,X)A()}},u=()=>{N=!0,g(),T()},d=()=>{if(N=!1,!y&&X)A()},o=()=>{if(g(),W!==null)cancelAnimationFrame(W),W=null;if(f.removeEventListener("click",v),f.removeEventListener("mouseenter",u),f.removeEventListener("mouseleave",d),n.removeEventListener("mousedown",C),J.removeEventListener("mouseenter",w),J.removeEventListener("mouseleave",H),document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",V),a){if(a.removeEventListener("mouseenter",u),a.removeEventListener("mouseleave",d),a.parentNode)a.parentNode.removeChild(a)}if(f.parentNode)f.parentNode.removeChild(f)};if(R(),f.addEventListener("click",v),f.addEventListener("mouseenter",u),f.addEventListener("mouseleave",d),n.addEventListener("mousedown",C),J.addEventListener("mouseenter",w),J.addEventListener("mouseleave",H),a)a.addEventListener("mouseenter",u),a.addEventListener("mouseleave",d);return{show:T,hide:S,updateBounds:D,updatePosition:I,isVisible:()=>z,destroy:o}};var kJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:X,horizontal:K}=Y;if(q=u0(j.viewport,(U)=>Q.scrollController.scrollTo(U),J??{},X,K),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let B=Q.getCachedCompression();q.updateBounds(B.virtualSize,Q.state.viewportState.containerSize);let Z=q;Q.afterScroll.push((U,_)=>{Z.updatePosition(U),Z.show()}),Q.resizeHandlers.push((U,_)=>{if(Z){let F=Q.getCachedCompression();Z.updateBounds(F.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(Z){let U=Q.getCachedCompression();Z.updateBounds(U.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(Z)Z.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var yJ=(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}},Z2=(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 Y=J.samples[J.sampleIndex];if(Y.position=q,Y.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,K=J.samples[X],B=q-K.position,Z=Q-K.time;J.velocity=Z>0?B/Z:0}return J.lastPosition=q,J.lastTime=Q,J},G1=(J)=>J.sampleCount>=3,PJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:Y=!1,idleTimeout:X=150,onScroll:K,onIdle:B,scrollElement:Z,horizontal:U=!1}=q,_=!!Z,F=0,$=0,k=_?U?window.innerWidth:window.innerHeight:U?J.clientWidth:J.clientHeight,O=q.compressed??!1,y=q.compression,N=yJ(),G=!1,b=null,L=N2(()=>{let H=U?J.scrollLeft:J.scrollTop,u=H>=F?"down":"up";if(N=Z2(N,H),F=H,K)K({scrollTop:F,direction:u,velocity:N.velocity});m()}),W=N2(()=>{let H=J.getBoundingClientRect(),u=U?Math.max(0,-H.left):Math.max(0,-H.top),d=u>=F?"down":"up";if(N=Z2(N,u),F=u,!G)G=!0;if(K)K({scrollTop:F,direction:d,velocity:N.velocity});m()}),h=(H)=>{H.preventDefault()},P=(H)=>{if(H.deltaX)return;H.preventDefault(),J.scrollLeft+=H.deltaY},x=(H)=>{if(!O)return;H.preventDefault();let u=(U?H.deltaX||H.deltaY:H.deltaY)*j,d=F+u;if(Y)d=F+u*0.3;if(d=Math.max(0,Math.min(d,$)),d!==F){let c=d>=F?"down":"up";if(N=Z2(N,d),F=d,!G)G=!0;if(K)K({scrollTop:F,direction:c,velocity:N.velocity});m()}},m=()=>{if(b)clearTimeout(b);b=setTimeout(()=>{if(G=!1,N=yJ(F),B)B()},X)},p=(H)=>{if(O)return;if(O=!0,y=H,$=H.virtualSize-k,_)return;if(L.cancel(),J.removeEventListener("scroll",L),!Q)J.removeEventListener("wheel",h);else if(U)J.removeEventListener("wheel",P);if(U)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",x,{passive:!1});let u=U?J.scrollLeft:J.scrollTop;if(u>0){let d=U?y?.actualSize??J.scrollWidth:y?.actualSize??J.scrollHeight;F=u/d*$}if(U)J.scrollLeft=0;else J.scrollTop=0},f=()=>{if(!O)return;if(O=!1,_){y=void 0;return}if(J.removeEventListener("wheel",x),U)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",L,{passive:!0}),!Q)J.addEventListener("wheel",h,{passive:!1});else if(U)J.addEventListener("wheel",P,{passive:!1});if(y&&F>0){let u=F/$*(y.actualSize-k);if(U)J.scrollLeft=u;else J.scrollTop=u}y=void 0},n=()=>{if(_||O)return F;return U?J.scrollLeft:J.scrollTop},a=(H,u=!1)=>{let d=Math.max(0,Math.min(H,$||1/0));if(_){let o=J.getBoundingClientRect();if(U){let c=o.left+window.scrollX;window.scrollTo({left:c+d,behavior:u?"smooth":"auto"})}else{let c=o.top+window.scrollY;window.scrollTo({top:c+d,behavior:u?"smooth":"auto"})}}else if(O){if(d===F)return;let c=d>=F?"down":"up";if(N=Z2(N,d),F=d,!G)G=!0;if(K)K({scrollTop:F,direction:c,velocity:N.velocity});m()}else if(U)J.scrollTo({left:d,behavior:u?"smooth":"auto"});else J.scrollTo({top:d,behavior:u?"smooth":"auto"})},R=(H)=>{a(n()+H)},g=()=>{return n()<=0},A=(H=0)=>{let u=n(),d=_||O?$:U?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return u>=d-H},T=()=>{let H=n(),u=_||O?$:U?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(u<=0)return 0;return Math.min(1,Math.max(0,H/u))},S=(H)=>{if(H.compression)y=H.compression,$=y.virtualSize-k},D=()=>O,I=()=>Math.abs(N.velocity),v=()=>G1(N),C=()=>G,E=()=>_,V=(H)=>{if(k=H,y)$=y.virtualSize-k},w=()=>{if(b)clearTimeout(b);if(_)W.cancel(),window.removeEventListener("scroll",W);else L.cancel(),J.removeEventListener("scroll",L),J.removeEventListener("wheel",x),J.removeEventListener("wheel",h),J.removeEventListener("wheel",P)};if(_){if(O&&y)$=y.virtualSize-k;window.addEventListener("scroll",W,{passive:!0})}else if(O&&y){if($=y.virtualSize-k,U)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",x,{passive:!1})}else{if(U)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",L,{passive:!0}),!Q)J.addEventListener("wheel",h,{passive:!1});else if(U)J.addEventListener("wheel",P,{passive:!1})}return{getScrollTop:n,scrollTo:a,scrollBy:R,isAtTop:g,isAtBottom:A,getScrollPercentage:T,getVelocity:I,isTracking:v,isScrolling:C,updateConfig:S,enableCompression:p,disableCompression:f,isCompressed:D,isWindowMode:E,updateContainerHeight:V,destroy:w}},N2=(J)=>{let q=null,Q=null,j=(...Y)=>{if(Q=Y,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var M1=0.65,O1=0.5,E1=0.95,A1=0.1,F1=5,L1=100,RJ=()=>{let J=null,q=0,Q=!1,j=0,Y=null,X=0,K=0,B=null,Z=[];return{name:"withScale",priority:20,setup(U){let{dom:_,config:F}=U,{classPrefix:$,horizontal:k}=F,O=()=>{let b=U.getVirtualTotal(),M=L0(b,U.sizeCache);if(M.isCompressed&&!Q){Q=!0,U.scrollController.enableCompression(M),U.updateContentSize(M.virtualSize),U.setScrollFns(()=>q,(f)=>{if(q=f,j=f,Y!==null)cancelAnimationFrame(Y),Y=null});let L=()=>{let f=j-q;if(Math.abs(f)<O1)q=j,Y=null;else{q+=f*M1;let a=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;q=Math.max(0,Math.min(q,a)),Y=requestAnimationFrame(L)}U.scrollController.scrollTo(q)},z=_.viewport,W=(f)=>{f.preventDefault();let a=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+f.deltaY,a)),Y===null)Y=requestAnimationFrame(L)};z.addEventListener("wheel",W,{passive:!1});let h=()=>{if(B!==null)cancelAnimationFrame(B),B=null},P=(f)=>{if(h(),Y!==null)cancelAnimationFrame(Y),Y=null;let n=f.touches[0];if(!n)return;let a=k?n.clientX:n.clientY;X=a,K=q,Z=[{time:performance.now(),y:a}]},x=(f)=>{f.preventDefault();let n=f.touches[0];if(!n)return;let a=k?n.clientX:n.clientY,R=performance.now();if(Z.push({time:R,y:a}),Z.length>F1)Z.shift();let g=X-a,T=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,S=Math.max(0,Math.min(K+g,T));q=S,j=S,U.scrollController.scrollTo(S)},m=(f)=>{let n=performance.now(),a=Z.filter((T)=>n-T.time<L1),R=0;if(a.length>=2){let T=a[0],S=a[a.length-1],D=S.time-T.time;if(D>0)R=(T.y-S.y)/D}if(Z=[],Math.abs(R)<A1)return;let g=R*16,A=()=>{if(g*=E1,Math.abs(g)<0.5){B=null;return}let S=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,D=q+g;if(D=Math.max(0,Math.min(D,S)),D<=0&&g<0||D>=S&&g>0){q=D,j=D,U.scrollController.scrollTo(D),B=null;return}q=D,j=D,U.scrollController.scrollTo(D),B=requestAnimationFrame(A)};B=requestAnimationFrame(A)};if(z.addEventListener("touchstart",P,{passive:!0}),z.addEventListener("touchmove",x,{passive:!1}),z.addEventListener("touchend",m,{passive:!0}),z.addEventListener("touchcancel",m,{passive:!0}),U.destroyHandlers.push(()=>{if(z.removeEventListener("wheel",W),z.removeEventListener("touchstart",P),z.removeEventListener("touchmove",x),z.removeEventListener("touchend",m),z.removeEventListener("touchcancel",m),h(),Y!==null)cancelAnimationFrame(Y),Y=null}),!_.viewport.querySelector(`.${$}-scrollbar`)){if(J=u0(_.viewport,(n)=>U.scrollController.scrollTo(n),{},$,k),!_.viewport.classList.contains(`${$}-viewport--custom-scrollbar`))_.viewport.classList.add(`${$}-viewport--custom-scrollbar`);J.updateBounds(M.virtualSize,U.state.viewportState.containerSize);let f=J;U.afterScroll.push((n,a)=>{if(f)f.updatePosition(n),f.show()}),U.resizeHandlers.push((n,a)=>{if(f){let R=U.getCachedCompression();f.updateBounds(R.virtualSize,U.state.viewportState.containerSize)}})}}else if(!M.isCompressed&&Q)Q=!1,U.scrollController.disableCompression(),U.updateContentSize(M.actualSize);else if(M.isCompressed)U.scrollController.updateConfig({compression:M}),U.updateContentSize(M.virtualSize);if(J)J.updateBounds(M.virtualSize,U.state.viewportState.containerSize);U.state.cachedCompression={state:M,totalItems:b}};U.updateCompressionMode=O;let y=U.getCachedCompression.bind(U);U.getCachedCompression=()=>{if(U.state.cachedCompression)return U.state.cachedCompression.state;return y()},U.setVisibleRangeFn((b,M,L,z,W)=>{N=null,G=null;let h=L0(z,L);U2(b,M,L,z,h,W)}),U.setScrollToPosFn((b,M,L,z,W)=>{let h=L0(z,M);return K2(b,M,L,z,h,W)});let N=null,G=null;U.setPositionElementFn((b,M)=>{let L=U.getVirtualTotal(),z=L0(L,U.sizeCache);if(z.isCompressed){let W=U.scrollController.getScrollTop();if(N===null||M<G)G=M,N=Math.round(h0(M,W,U.sizeCache,L,U.state.viewportState.containerSize,z));let h=N+U.sizeCache.getOffset(M)-U.sizeCache.getOffset(G),P=U.config.horizontal;b.style.transform=P?`translateX(${h}px)`:`translateY(${h}px)`}else{let W=Math.round(U.sizeCache.getOffset(M)),h=U.config.horizontal;b.style.transform=h?`translateX(${W}px)`:`translateY(${W}px)`}}),O(),U.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null})},destroy(){if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null;if(B!==null)cancelAnimationFrame(B),B=null}}};var _2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,X=new Map,K=0,B=0,Z=(R)=>{let g=X.get(R);if(!g)g={items:Array(q),count:0,lastAccess:Date.now()},X.set(R,g);else g.lastAccess=Date.now();return g},U=(R)=>{return Math.floor(R/q)},_=(R)=>{return R%q},F=()=>K,$=(R)=>{K=R},k=(R)=>{if(R<0||R>=K)return;let g=U(R),A=X.get(g);if(!A)return;return A.items[_(R)]},O=(R)=>{if(R<0||R>=K)return!1;let g=U(R),A=X.get(g);if(!A)return!1;return A.items[_(R)]!==void 0},y=(R,g)=>{let A=U(R),T=Z(A),S=_(R),D=T.items[S]===void 0;if(T.items[S]=g,D)T.count++,B++;if(R>=K)K=R+1},N=(R,g)=>{for(let A=0;A<g.length;A++){let T=g[A];if(T!==void 0)y(R+A,T)}},G=(R)=>{if(R<0||R>=K)return!1;let g=U(R),A=X.get(g);if(!A)return!1;let T=_(R);if(A.items[T]===void 0)return!1;if(A.items[T]=void 0,A.count--,B--,A.count===0)X.delete(g);return!0},b=(R,g)=>{let A=[];for(let T=R;T<=g&&T<K;T++)A.push(k(T));return A},M=(R,g)=>{for(let A=R;A<=g&&A<K;A++)if(!O(A))return!1;return!0},L=()=>{let R=[],g=null,A=Array.from(X.keys()).sort((T,S)=>T-S);for(let T of A){let S=X.get(T);if(!S)continue;let D=T*q;for(let I=0;I<q;I++){let v=D+I;if(v>=K)break;if(S.items[I]!==void 0)if(g===null)g={start:v,end:v};else if(v===g.end+1)g.end=v;else R.push(g),g={start:v,end:v};else if(g!==null)R.push(g),g=null}}if(g!==null)R.push(g);return R},z=(R,g)=>{let A=[],T=null;for(let S=R;S<=g&&S<K;S++)if(!O(S))if(T===null)T={start:S,end:S};else T.end=S;else if(T!==null)A.push(T),T=null;if(T!==null)A.push(T);return A},W=(R)=>{return X.has(R)},h=(R)=>{let g=X.get(R);if(g)g.lastAccess=Date.now()},P=(R,g)=>{if(R>g||X.size===0)return;let A=Date.now(),T=U(Math.max(0,R)),S=U(Math.min(K-1,g));for(let D=T;D<=S;D++){let I=X.get(D);if(I)I.lastAccess=A}},x=(R,g)=>{if(B<=Q)return 0;let A=Math.max(0,R-j),T=Math.min(K-1,g+j),S=U(A),D=U(T),I=0,v=[];for(let[C,E]of X)if(C<S||C>D)I+=E.count,v.push(C),B-=E.count,X.delete(C);if(I>0&&Y)Y(I,v);return I},m=()=>{if(B<=Q)return 0;let R=Array.from(X.entries()).sort(([,T],[,S])=>T.lastAccess-S.lastAccess),g=0,A=[];for(let[T,S]of R){if(B<=Q)break;g+=S.count,B-=S.count,A.push(T),X.delete(T)}if(g>0&&Y)Y(g,A);return g},p=()=>{return{totalItems:K,cachedItems:B,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:K>0?1-B/K:1}},f=()=>B,n=()=>{X.clear(),B=0};return{chunkSize:q,maxCachedItems:Q,getTotal:F,setTotal:$,get:k,has:O,set:y,setRange:N,delete:G,getRange:b,isRangeLoaded:M,getLoadedRanges:L,findUnloadedRanges:z,getChunkIndex:U,isChunkLoaded:W,touchChunk:h,touchChunksForRange:P,evictDistant:x,evictToLimit:m,getStats:p,getCachedCount:f,clear:n,reset:()=>{n(),K=0}}},D2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,Y)=>j.start-Y.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let Y=q[j],X=Q[Q.length-1];if(Y.start<=X.end+1)X.end=Math.max(X.end,Y.end);else Q.push({...Y})}return Q},d0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,Y=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:Y};if(q.length===0)return[X];let K=[],B=D2(q),Z=X.start;for(let U of B){if(U.end<Z)continue;if(U.start>X.end)break;if(U.start>Z)K.push({start:Z,end:Math.min(U.start-1,X.end)});if(Z=U.end+1,Z>X.end)break}if(Z<=X.end)K.push({start:Z,end:X.end});return K};var W2=(J={})=>{let{maskCharacter:q=OJ,maxSampleSize:Q=EJ}=J,j=[],Y=!1,X=0,K=(F)=>{if(Y||F.length===0)return;let $=Math.min(F.length,Q);for(let k=0;k<$;k++){let O=F[k];if(!O||typeof O!=="object")continue;let y={};for(let[N,G]of Object.entries(O)){if(N.startsWith("_")||N==="id")continue;y[N]=String(G??"").length}if(Object.keys(y).length>0)j.push(y)}Y=!0},B=()=>Y,Z=(F)=>{let $={id:`${AJ}${X++}`,[S2]:!0,_index:F};if(j.length===0)return $.label=q.repeat(12),$;let k=j[F%j.length];for(let[O,y]of Object.entries(k))$[O]=q.repeat(Math.max(1,y));return $};return{analyzeStructure:K,hasAnalyzedStructure:B,generate:Z,generateRange:(F,$)=>{let k=[];for(let O=F;O<=$;O++)k.push(Z(O));return k},clear:()=>{j=[],Y=!1,X=0}}},R0=(J)=>{if(!J||typeof J!=="object")return!1;return J[S2]===!0},f2=(J)=>{return J.filter((q)=>!R0(q))};var b1=50,V2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:Y,placeholder:X,pageSize:K=b1,onStateChange:B,onItemsLoaded:Z,onItemsEvicted:U}=J,_=_2({...Y,onEvict:(r,i)=>{U?.(r),z()}}),F=null,$=()=>{if(!F)F=W2(X);return F},k=new Map,O=!1,y,N=!0,G,b=[],M=0,L=new Map,z=()=>{B?.(a())},W=()=>{k.clear();let r=_.getLoadedRanges();for(let i of r)for(let s=i.start;s<=i.end;s++){let j0=_.get(s);if(j0&&!R0(j0))k.set(j0.id,s)}},h=(r,i)=>{if(!R0(i))k.set(i.id,r)},P=(r)=>{k.delete(r)},x=(r,i)=>{return`${r}-${i}`},m=()=>_.getTotal(),p=()=>_.getCachedCount(),f=()=>O,n=()=>N,a=()=>({total:_.getTotal(),cached:_.getCachedCount(),isLoading:O,pendingRanges:b,error:y,hasMore:N,cursor:G}),R=()=>_,g=()=>$(),A=(r)=>{let i=_.get(r);if(i!==void 0)return i;if(r>=0&&r<_.getTotal())return $().generate(r);return},T=(r)=>{let i=k.get(r);if(i===void 0)return;return _.get(i)},S=(r)=>{return k.get(r)??-1},D=(r)=>{let i=_.get(r);return i!==void 0&&!R0(i)},I=(r,i)=>{let s=[],j0=_.getTotal(),q0=0,Y0=0;_.touchChunksForRange(r,Math.min(i,j0-1));for(let K0=r;K0<=i&&K0<j0;K0++){let _0=_.get(K0);if(_0!==void 0)s.push(_0),q0++;else s.push($().generate(K0)),Y0++}return s},v=(r)=>{_.setTotal(r),N=_.getCachedCount()<r,z()},C=(r,i=0,s)=>{if(F&&!F.hasAnalyzedStructure()&&r.length>0)F.analyzeStructure(r);for(let j0=0;j0<r.length;j0++){let q0=r[j0];if(q0!==void 0){let Y0=i+j0;_.set(Y0,q0),h(Y0,q0)}}if(s!==void 0)_.setTotal(s);else if(i+r.length>_.getTotal())_.setTotal(i+r.length);if(_.getCachedCount()>=_.getTotal()&&_.getTotal()>0)N=!1;Z?.(r,i,_.getTotal()),z()},E=(r,i)=>{let s=k.get(r);if(s===void 0)return!1;let j0=_.get(s);if(!j0)return!1;let q0={...j0,...i};if(_.set(s,q0),i.id!==void 0&&i.id!==r)P(r),h(s,q0);return z(),!0},V=(r)=>{let i=k.get(r);if(i===void 0)return!1;_.delete(i),P(r);let s=_.getTotal();if(s>0)_.setTotal(s-1);return z(),!0},w=async(r,i)=>{if(!q)return;let s=x(r,i);if(L.has(s))return;let j0=_.getLoadedRanges(),q0=d0({start:r,end:i},j0,_.chunkSize);if(q0.length===0)return;let Y0=_.chunkSize,K0=[];for(let X0 of q0){let D0=Math.floor(X0.start/Y0),T0=Math.floor(X0.end/Y0);for(let N0=D0;N0<=T0;N0++){let A0=N0*Y0,W0=A0+Y0-1,F0=x(A0,W0);if(!K0.some((w0)=>w0.start===A0)&&!L.has(F0))K0.push({start:A0,end:W0})}}let _0=[];for(let X0 of q0){let D0=Math.floor(X0.start/Y0),T0=Math.floor(X0.end/Y0);for(let N0=D0;N0<=T0;N0++){let A0=N0*Y0,W0=A0+Y0-1,F0=x(A0,W0);if(L.has(F0)){let w0=L.get(F0);if(!_0.includes(w0))_0.push(w0)}}}for(let X0 of K0){let D0=x(X0.start,X0.end),T0=(async()=>{b.push(X0),O=!0,y=void 0,z();try{let N0=X0.end-X0.start+1,A0={offset:X0.start,limit:N0,cursor:void 0},W0=await q.read(A0);if(C(W0.items,X0.start,W0.total),W0.cursor)G=W0.cursor;let F0=X0.start+W0.items.length;if(F0>=M){if(M=F0,W0.hasMore!==void 0)N=W0.hasMore;else if(W0.total!==void 0)N=F0<W0.total}}catch(N0){y=N0 instanceof Error?N0:Error(String(N0))}finally{L.delete(D0),b=b.filter((N0)=>N0.start!==X0.start||N0.end!==X0.end),O=L.size>0,z()}})();L.set(D0,T0),_0.push(T0)}await Promise.all(_0)},H=async(r,i)=>{if(_.isRangeLoaded(r,i))return;await w(r,i)},u=async()=>{if(!q)return;await w(0,K-1)},d=async()=>{if(!q||O||!N)return!1;let r=_.getCachedCount(),i=_.getTotal(),s=r,j0=Math.min(s+K-1,i>0?i-1:s+K-1);if(s>=i&&i>0)return N=!1,!1;return await w(s,j0),_.getCachedCount()>r},o=async()=>{if(_.clear(),_.setTotal(0),k.clear(),F)F.clear();L.clear(),b=[],O=!1,G=void 0,N=!0,M=0,y=void 0,z()},c=(r,i)=>{if(_.evictDistant(r,i)>0)W()},t=()=>{_.clear(),k.clear(),G=void 0,y=void 0,b=[],O=!1,z()},Q0=()=>{if(_.reset(),k.clear(),F)F.clear();G=void 0,N=!0,M=0,y=void 0,b=[],O=!1,z()};if(Q&&Q.length>0)C(Q,0,j??Q.length);else if(j!==void 0)_.setTotal(j),z();return{getState:a,getTotal:m,getCached:p,getIsLoading:f,getHasMore:n,getStorage:R,getPlaceholders:g,getItem:A,getItemById:T,getIndexById:S,isItemLoaded:D,getItemsInRange:I,setTotal:v,setItems:C,updateItem:E,removeItem:V,loadRange:w,ensureRange:H,loadInitial:u,loadMore:d,reload:o,evictDistant:c,clear:t,reset:Q0}};var zJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:Y,autoLoad:X=!0}=J,K=Q?.cancelThreshold??VJ,B=Q?.preloadThreshold??GJ,Z=Q?.preloadAhead??WJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(U){let{emitter:_}=U,F=U.config.reverse,$=V2({adapter:q,...Y!==void 0&&{initialTotal:Y},pageSize:j?.chunkSize??p0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(U.state.isInitialized){let P=U.getVirtualTotal();U.sizeCache.rebuild(P),U.updateCompressionMode();let x=U.getCachedCompression();U.state.viewportState.totalSize=x.virtualSize,U.state.viewportState.actualSize=x.actualSize,U.state.viewportState.isCompressed=x.isCompressed,U.state.viewportState.compressionRatio=x.ratio,U.updateContentSize(x.virtualSize),U.renderIfNeeded()}},onItemsLoaded:(P,x,m)=>{if(U.state.isInitialized)U.forceRender(),_.emit("load:end",{items:P,total:m,offset:x})}});U.replaceDataManager($);let k=null,O=null,y=0,N=!1,G=null,b=120,M=(P=!1)=>{if(N=!1,O=null,P)k=null;if(G!==null)clearTimeout(G),G=null},L=()=>{if(O){let P=O;O=null,U.dataManager.ensureRange(P.start,P.end).catch((x)=>{_.emit("error",{error:x,context:"ensureRange"})})}};U.afterScroll.push((P,x)=>{if(U.state.isDestroyed)return;let m=U.scrollController.getVelocity(),f=U.scrollController.isTracking()&&m<=K;if(y>K&&m<=K)N=!0;else if(N&&m>K)M();if(N&&m<0.5)M(!0);if(y=m,(U.scrollController.isAtTop()||U.scrollController.isAtBottom())&&(N||O))M(!0),f=!0;let a=N&&m>0.5;if(f&&!U.dataManager.getIsLoading()&&U.dataManager.getHasMore()){if(F){if(P<v2)_.emit("load:start",{offset:U.dataManager.getCached(),limit:p0}),U.dataManager.loadMore().catch((A)=>{_.emit("error",{error:A,context:"loadMore"})})}else if(U.state.viewportState.totalSize-P-U.state.viewportState.containerSize<v2)_.emit("load:start",{offset:U.dataManager.getCached(),limit:p0}),U.dataManager.loadMore().catch((T)=>{_.emit("error",{error:T,context:"loadMore"})})}let{renderRange:R}=U.state.viewportState;if(!k||R.start!==k.start||R.end!==k.end){if(k={start:R.start,end:R.end},f&&!a){if(O=null,G!==null)clearTimeout(G),G=null;let{start:A,end:T}=R,S=U.getVirtualTotal();if(m>B)if(x==="down")T=Math.min(R.end+Z,S-1);else A=Math.max(R.start-Z,0);U.dataManager.ensureRange(A,T).catch((D)=>{_.emit("error",{error:D,context:"ensureRange"})})}else if(O={start:R.start,end:R.end},a){if(G!==null)clearTimeout(G);G=setTimeout(()=>{G=null,L(),M()},b)}}});let z=200,W=null;U.afterScroll.push((P,x)=>{if(W!==null)clearTimeout(W);W=setTimeout(()=>{W=null,L(),M()},z)}),U.destroyHandlers.push(()=>{if(W!==null)clearTimeout(W),W=null;M()});let h=()=>{if(U.state.isDestroyed)return;k=null;let{renderRange:P}=U.state.viewportState;if(P.end>0)U.dataManager.ensureRange(P.start,P.end).catch((x)=>{_.emit("error",{error:x,context:"ensureRange"})});L()};if(window.addEventListener("online",h),U.destroyHandlers.push(()=>{window.removeEventListener("online",h)}),_.on("load:start",()=>{U.dom.root.setAttribute("aria-busy","true")}),_.on("load:end",()=>{U.dom.root.removeAttribute("aria-busy")}),U.methods.set("loadVisibleRange",async()=>{k=null,O=null,U.forceRender();let{renderRange:P}=U.state.viewportState;if(P.end>0)_.emit("load:start",{offset:P.start,limit:P.end-P.start+1}),await U.dataManager.ensureRange(P.start,P.end)}),U.methods.set("reload",async()=>{k=null,O=null,U.invalidateRendered(),await U.dataManager.reload(),_.emit("load:start",{offset:0,limit:p0}),await U.dataManager.loadInitial(),U.forceRender();let{renderRange:P}=U.state.viewportState;if(P.end>0)await U.dataManager.ensureRange(P.start,P.end)}),X)_.emit("load:start",{offset:0,limit:p0}),U.dataManager.loadInitial().catch((P)=>{_.emit("error",{error:P,context:"loadInitial"})});else if(Y!==void 0)U.dataManager.setTotal(Y)}}};var CJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:Y,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",Y.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let U=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-U.left);else return Math.max(0,-U.top)},(U)=>{let _=Q.viewport.getBoundingClientRect();if(Y.horizontal){let F=_.left+window.scrollX;window.scrollTo(F+U,window.scrollY)}else{let F=_.top+window.scrollY;window.scrollTo(window.scrollX,F+U)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:K,innerWidth:B}=window,Z=()=>{let{innerWidth:U,innerHeight:_}=window,F=Y.horizontal?U:_,$=Y.horizontal?B:K;if(Math.abs(F-$)<=1)return;K=_,B=U,j.viewportState.containerSize=_,X.emit("resize",{width:U,height:_});for(let k=0;k<q.resizeHandlers.length;k++)q.resizeHandlers[k](U,_);q.renderIfNeeded()};window.addEventListener("resize",Z,{passive:!0}),J=()=>{window.removeEventListener("resize",Z)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var I2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].headerLayoutIndex<=q)Q=Y;else j=Y-1}return Q},wJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].firstDataIndex<=q)Q=Y;else j=Y-1}return Q},vJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),Y=0,X=0;for(let K=1;K<J;K++){let B=q(K);if(B!==j){let Z=K-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:Z}),X=X+1+Z,j=B,Y=K}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:J-Y}),Q},c0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),Y=0;for(let X of q){j[Y]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},Y++;for(let K=0;K<X.count;K++)j[Y]=J[X.firstDataIndex+K],Y++}return j},l0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return Q(Y.dataIndex)}},G2=(J,q)=>{let Q=vJ(J,q.getGroupForIndex),j=J+Q.length,Y=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:($)=>{if(Q.length===0)return{type:"item",dataIndex:$,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let k=I2(Q,$),O=Q[k];if($===O.headerLayoutIndex)return{type:"header",group:O};let y=$-O.headerLayoutIndex-1;return{type:"item",dataIndex:O.firstDataIndex+y,group:O}},layoutToDataIndex:($)=>{if(Q.length===0)return $;let k=I2(Q,$),O=Q[k];if($===O.headerLayoutIndex)return-1;let y=$-O.headerLayoutIndex-1;return O.firstDataIndex+y},dataToLayoutIndex:($)=>{if(Q.length===0)return $;let k=wJ(Q,$),O=Q[k],y=$-O.firstDataIndex;return O.headerLayoutIndex+1+y},getGroupAtLayoutIndex:($)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let k=I2(Q,$);return Q[k]},getGroupAtDataIndex:($)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let k=wJ(Q,$);return Q[k]},getHeaderHeight:typeof Y==="number"?($)=>Y:($)=>{let k=Q[$];if(!k)return 0;return Y(k.key,$)},rebuild:($)=>{Q=vJ($,q.getGroupForIndex),j=$+Q.length}}};var M2=(J,q,Q,j,Y,X=!1,K=0)=>{let B=document.createElement("div");if(B.className=`${Y}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.position="absolute",B.style.zIndex="5",B.style.pointerEvents="none",B.style.willChange="transform",B.style.overflow="hidden",X)B.style.top="0",B.style.bottom="0",B.style.left=K?`${K}px`:"0";else B.style.top=K?`${K}px`:"0",B.style.left="0",B.style.right="0";J.insertBefore(B,J.firstChild);let Z=-1,U=!1,_=0,F=(G)=>{if(G===Z)return;Z=G;let b=q.groups;if(G<0||G>=b.length){B.textContent="";return}let M=b[G],L=j.headerTemplate(M.key,M.groupIndex),z=q.getHeaderHeight(G);if(X)B.style.width=`${z}px`;else B.style.height=`${z}px`;if(typeof L==="string")B.innerHTML=L;else B.replaceChildren(L)},$=(G)=>{let b=q.groups;if(b.length===0){O();return}let M=Q.getOffset(b[0].headerLayoutIndex);if(G<M){O();return}let L=0,z=b.length-1;while(L<z){let m=L+z+1>>>1;if(Q.getOffset(b[m].headerLayoutIndex)<=G)L=m;else z=m-1}let W=L;if(!U)k();F(W);let h=q.getHeaderHeight(W),P=0,x=W+1;if(x<b.length){let p=Q.getOffset(b[x].headerLayoutIndex)-G;if(p<h)P=p-h}if(P!==_)if(_=P,P===0)B.style.transform="";else{let m=Math.round(P);B.style.transform=X?`translateX(${m}px)`:`translateY(${m}px)`}},k=()=>{if(U)return;U=!0,B.style.display=""},O=()=>{if(!U)return;U=!1,B.style.display="none",Z=-1,_=0,B.style.transform=""},y=()=>{let G=Z;if(Z=-1,G>=0)F(G)},N=()=>{B.remove(),Z=-1,U=!1};return B.style.display="none",{update:$,refresh:y,show:k,hide:O,destroy:N}};var SJ=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let K=Q.indexAtOffset(J),B=Q.indexAtOffset(J+q);if(B<j-1)B++;return X.start=Math.max(0,K),X.end=Math.min(j-1,Math.max(0,B)),X},fJ=(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},IJ=(J,q,Q,j,Y,X)=>{if(j===0)return 0;let K=Math.max(0,Math.min(J,j-1)),B=q.getOffset(K),Z=q.getSize(K),U=q.getTotalSize(),_=Math.max(0,U-Q),F;switch(X){case"center":F=B-Q/2+Z/2;break;case"end":F=B-Q+Z;break;case"start":default:F=B;break}return Math.max(0,Math.min(F,_))},pJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},hJ=(J,q)=>{return q.getTotalSize()},uJ=(J,q)=>{return q.getOffset(J)},gJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var y0=(J,q,Q,j,Y="start",X,K=IJ)=>{return K(J,q,Q,j,X,Y)},xJ=(J,q)=>{return J.start===q.start&&J.end===q.end},mJ=(J,q)=>{return J>=q.start&&J<=q.end},dJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var cJ=(J,q)=>{let Q=[],j=[];for(let Y=J.start;Y<=J.end;Y++)if(Y<q.start||Y>q.end)j.push(Y);for(let Y=q.start;Y<=q.end;Y++)if(Y<J.start||Y>J.end)Q.push(Y);return{add:Q,remove:j}};B2();var rJ=(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=[],Y=[];return{name:"withGroups",priority:10,setup(X){let{dom:K,config:B,rawConfig:Z}=X,{classPrefix:U}=B,F=Z.item.height;j=Z.items?[...Z.items]:[];let $=j.length,k={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=G2($,k),Y=c0(j,q.groups);let O=l0(q,F);X.setSizeConfig(O),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length);let y=Z.item.template,{headerTemplate:N}=J,G=(f,n,a)=>{if(z0(f))return N(f.groupKey,f.groupIndex);return y(f,n,a)},b=X.methods.get("_getGridLayout"),M=X.methods.get("_replaceGridRenderer"),L=X.methods.get("_updateGridLayoutForGroups"),z=X.methods.get("_getTableLayout"),W=X.methods.get("_updateTableForGroups"),h=X.methods.get("_getTableHeaderHeight");if(b&&M){if(L)L((R)=>{let g=Y[R];return!!(g&&z0(g))});let{createGridRenderer:f}=(O2(),Z1(lJ)),n=b(),a=f(K.items,G,X.sizeCache,n,U,X.getContainerWidth(),()=>X.dataManager.getTotal(),B.ariaIdPrefix);M(a)}else if(z&&W)W((f)=>z0(f),J.headerTemplate);else X.replaceTemplate(G);let P=h?h():0;if(K.root.classList.add(`${U}--grouped`),J.sticky!==!1){Q=M2(K.root,q,X.sizeCache,{...k,sticky:k.sticky??!1},U,B.horizontal,P);let f=Q;X.afterScroll.push((n,a)=>{f.update(n)}),Q.update(X.scrollController.getScrollTop())}let x=()=>{if(!q)return;q.rebuild(j.length),Y=c0(j,q.groups);let f=l0(q,F);if(X.setSizeConfig(f),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};X.methods.set("setItems",(f)=>{j=f.slice(),x()}),X.methods.set("appendItems",(f)=>{j.push(...f),x()}),X.methods.set("prependItems",(f)=>{j.unshift(...f),x()}),X.methods.set("removeItem",(f)=>{j=j.filter((n)=>n.id!==f),x()});let{animateScroll:m,cancelScroll:p}=I0(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(f,n)=>{let a=q.dataToLayoutIndex(f),{align:R,behavior:g,duration:A}=P0(n),T=X.dataManager.getTotal(),S=X.adjustScrollPosition(y0(a,X.sizeCache,X.state.viewportState.containerSize,T,R,X.getCachedCompression()));if(g==="smooth")m(X.scrollController.getScrollTop(),S,A);else p(),X.scrollController.scrollTo(S)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(p(),Q)Q.destroy(),Q=null;K.root.classList.remove(`${U}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var E2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},X=(O)=>{if(O<=0)return 0;if(!j)return Math.ceil(O/q);let y=0,N=0,G=0;for(let b=0;b<O;b++)if(j(b)){if(G++,N>0)y++,N=0;y++,N=0}else if(N++,N>=q)y++,N=0;if(N>0)y++;return y},K=(O)=>{return Y.row=B(O),Y.col=Z(O),Y},B=(O)=>{if(!j)return Math.floor(O/q);let y=0,N=0;for(let G=0;G<=O;G++)if(j(G)){if(N>0)y++,N=0;if(G===O)return y;y++,N=0}else{if(G===O)return y;if(N++,N>=q)y++,N=0}return console.warn(`⚠️ getRow(${O}) fell through - returning ${y}`),y},Z=(O)=>{if(!j)return O%q;if(j(O))return 0;let y=0;for(let N=0;N<=O;N++)if(j(N))y=0;else{if(N===O)return y;if(y++,y>=q)y=0}return y},U=(O,y,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let z=Math.max(0,O*q),W=Math.min(N-1,(y+1)*q-1);return{start:z,end:W}}let G=-1,b=-1,M=0,L=0;for(let z=0;z<N;z++){if(j(z)){if(L>0)M++,L=0;if(M>=O&&M<=y){if(G===-1)G=z;b=z}M++,L=0}else{if(M>=O&&M<=y){if(G===-1)G=z;b=z}if(L++,L>=q)M++,L=0}if(M>y&&L===0)break}if(G===-1)return{start:0,end:-1};return{start:G,end:b}},_=(O,y,N)=>{if(y<0||y>=q)return-1;let G=O*q+y;if(G<0||G>=N)return-1;return G},F=(O)=>{let y=(q-1)*Q;return Math.max(0,(O-y)/q)};return{get columns(){return q},get gap(){return Q},update:(O)=>{if(O.columns!==void 0)q=Math.max(1,Math.floor(O.columns));if(O.gap!==void 0)Q=O.gap;if(O.isHeaderFn!==void 0)j=O.isHeaderFn},getTotalRows:X,getPosition:K,getRow:B,getCol:Z,getItemRange:U,getItemIndex:_,getColumnWidth:F,getColumnOffset:(O,y)=>{let N=F(y);return O*(N+Q)}}};O2();var k1=new Set,aJ=(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:Y,emitter:X,config:K,rawConfig:B}=j,{classPrefix:Z}=K;if(K.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let U=K.horizontal,_=Y2(S0(B.padding),U),F=()=>{return(U?Y.viewport.clientHeight:j.getContainerWidth())-_},$=B.items?.some((I)=>I.__groupHeader===!0),k={columns:J.columns,gap:J.gap??0};if($)k.isHeaderFn=(I)=>{let v=j.dataManager.getItem(I);return!!(v&&v.__groupHeader===!0)};q=E2(k);let O=q.gap;j.setVirtualTotalFn(()=>{let I=j.dataManager.getTotal();return q.getTotalRows(I)});let y=B.item,N=K.horizontal?y.width:y.height,G={containerWidth:F(),columns:q.columns,gap:q.gap},b={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof N==="function")j.setSizeConfig((I)=>{let v=G.containerWidth-2,C=(G.columns-1)*G.gap;return b.containerWidth=G.containerWidth,b.columns=G.columns,b.gap=G.gap,b.columnWidth=(v-C)/G.columns,b.row=q.getRow(I),b.column=q.getCol(I),b.totalRows=q.getTotalRows(j.dataManager.getTotal()),b.totalColumns=G.columns,N(I,b)+G.gap});else if(O>0)j.setSizeConfig(N+O);if(j.rebuildSizeCache(),O>0){let I=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let v=I();return v>0?v-G.gap:0}}Y.root.classList.add(`${Z}--grid`);let M=F(),L=B.item.template,z=()=>{Q=r0(Y.items,L,j.sizeCache,q,Z,M,()=>j.dataManager.getTotal(),K.ariaIdPrefix,K.horizontal),j.replaceRenderer(Q)};z(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>k),j.methods.set("_replaceGridRenderer",(I)=>{Q=I}),j.methods.set("_updateGridLayoutForGroups",(I)=>{q.update({isHeaderFn:I});let v=j.dataManager.getTotal(),C=0;for(let E=0;E<v;E++)if(q.getCol(E)===0){let V=j.sizeCache.getSize(E);C+=V}j.sizeCache.getTotalSize=()=>C,j.updateContentSize(C),z()}),j.methods.set("updateGrid",(I)=>{if(I.columns!==void 0){if(!Number.isInteger(I.columns)||I.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");k.columns=I.columns}if(I.gap!==void 0){if(I.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");k.gap=I.gap}if(q)q.update(k);let v=F();if(G.containerWidth=v,G.columns=k.columns,G.gap=k.gap??0,Q)Q.updateContainerWidth(v);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let C=0;C<j.contentSizeHandlers.length;C++)j.contentSizeHandlers[C]();if(Q)Q.clear();j.forceRender()});let W=null,h=null,P=!1,x=()=>{if(P)return;P=!0,W=j.methods.get("_getSelectedIds")??null,h=j.methods.get("_getFocusedIndex")??null},m=-1,p=-1,f=!0,n=K.overscan,a={start:0,end:0},R={start:0,end:0},g=()=>{if(j.state.isDestroyed)return;let I=j.scrollController.getScrollTop(),v=j.state.viewportState.containerSize;if(!f&&I===m&&v===p)return;m=I,p=v,f=!1;let C=j.getVirtualTotal();if(C===0||v===0)a.start=0,a.end=0;else a.start=Math.max(0,j.sizeCache.indexAtOffset(I)),a.end=Math.min(C-1,Math.max(0,j.sizeCache.indexAtOffset(I+v-1)));R.start=Math.max(0,a.start-n),R.end=Math.min(C-1,a.end+n);let E=j.state.viewportState;E.scrollPosition=I,E.visibleRange.start=a.start,E.visibleRange.end=a.end,E.renderRange.start=R.start,E.renderRange.end=R.end;let V=j.state.lastRenderRange,w=E.isCompressed,H=j.dataManager.getTotal(),u=q.getItemRange(R.start,R.end,H),d=j.dataManager.getItemsInRange(u.start,u.end),o=w?j.getCompressionContext():void 0;x();let c=W?W():k1,t=h?h():-1;if(Q.render(d,u,c,t,o),V.start!==R.start||V.end!==R.end)V.start=R.start,V.end=R.end,X.emit("range:change",{range:{start:R.start,end:R.end}})},A=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,f=!0,g()};j.setRenderFns(g,A);let T=typeof N==="function";j.resizeHandlers.push((I,v)=>{let C=(U?v:I)-_;if(G.containerWidth=C,Q)Q.updateContainerWidth(C);if(T){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let E=0;E<j.contentSizeHandlers.length;E++)j.contentSizeHandlers[E]();if(Q)Q.clear();j.forceRender()}});let{animateScroll:S,cancelScroll:D}=I0(j.scrollController,j.renderIfNeeded);if(j.methods.set("cancelScroll",D),j.methods.set("scrollToIndex",(I,v)=>{let C=Math.floor(I/J.columns),{align:E,behavior:V,duration:w}=P0(v),H=j.dataManager.getState(),u=q.getTotalRows(H.total),d=Math.max(0,Math.min(C,u-1)),o=j.adjustScrollPosition(y0(d,j.sizeCache,j.state.viewportState.containerSize,u,E,j.getCachedCompression()));if(V==="smooth")S(j.scrollController.getScrollTop(),o,w);else D(),j.scrollController.scrollTo(o)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),j.destroyHandlers.push(()=>{if(D(),Q)Q.destroy(),Q=null;Y.root.classList.remove(`${Z}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};O2();var A2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,Y=0,X=[],K=()=>{let N=(q-1)*Q;Y=Math.max(0,(j-N)/q),X=Array(q);let G=Y+Q;for(let b=0;b<q;b++)X[b]=b*G};K();let B=[],Z=0,U=[],_=(N)=>{let G=0,b=N[0];for(let M=1;M<N.length;M++){let L=N[M];if(L<b)b=L,G=M}return G},F=(N,G)=>{if(N<=0)return Z=0,B=[],[];let b=Array(q).fill(0),M=Array(q);for(let W=0;W<q;W++)M[W]=[];let L=Array(N);for(let W=0;W<N;W++){let h=_(b),P=G(W),x=b[h];L[W]={index:W,x:X[h],y:x,lane:h,size:P,crossSize:Y},M[h].push(W),b[h]=x+P+Q}B=M;let z=0;for(let W=0;W<q;W++){let h=b[W],P=h>0?h-Q:0;if(P>z)z=P}return Z=z,L},$=(N)=>{if(N.length===0)return Z>0?Z:0;if(Z>0)return Z;let G=Array(q).fill(0);for(let M of N){let L=M.y+M.size,z=G[M.lane];if(L>z)G[M.lane]=L}let b=0;for(let M=0;M<q;M++)if(G[M]>b)b=G[M];return b},k=(N,G,b)=>{if(N.length===0||b<=G)return U.length=0,U;if(B.length===0||B.length!==q)return O(N,G,b);U.length=0;for(let M=0;M<q;M++){let L=B[M],z=L.length;if(z===0)continue;let W=0,h=z;while(W<h){let P=W+h>>>1,x=N[L[P]];if(x.y+x.size<=G)W=P+1;else h=P}for(let P=W;P<z;P++){let x=N[L[P]];if(x.y>=b)break;U.push(x)}}return U},O=(N,G,b)=>{let M=[];for(let L of N)if(L.y+L.size>G&&L.y<b)M.push(L);return M};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(N)=>{let G=!1;if(N.columns!==void 0){let b=Math.max(1,Math.floor(N.columns));if(b!==q)q=b,G=!0}if(N.gap!==void 0&&N.gap!==Q)Q=N.gap,G=!0;if(N.containerSize!==void 0&&N.containerSize!==j)j=N.containerSize,G=!0;if(G)K()},calculateLayout:F,getTotalSize:$,getVisibleItems:k}};var y1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let K=document.createElement("div");return K.setAttribute("role","option"),K},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}}},P1=1,F2=(J,q,Q,j=!1,Y,X)=>{let K=y1(),B=new Map,Z=new Set,U=0,_="",F=-1,$={selected:!1,focused:!1},k=(m,p)=>{return $.selected=m,$.focused=p,$},O=`${Q}-item ${Q}-masonry-item`,y=`${Q}-item--selected`,N=`${Q}-item--focused`,G=(m,p)=>{if(typeof p==="string")m.innerHTML=p;else m.replaceChildren(p)},b=(m,p,f)=>{m.classList.toggle(y,p),m.classList.toggle(N,f)},M=(m,p)=>{if(j)m.style.transform=`translate(${Math.round(p.y)}px, ${Math.round(p.x)}px)`;else m.style.transform=`translate(${Math.round(p.x)}px, ${Math.round(p.y)}px)`},L=(m,p)=>{if(j)m.style.width=`${p.size}px`,m.style.height=`${p.crossSize}px`;else m.style.width=`${p.crossSize}px`,m.style.height=`${p.size}px`},z=(m,p,f,n,a)=>{let R=K.acquire(),g=k(n,a);if(R.className=O,R.dataset.index=String(m),R.dataset.id=String(p.id),R.dataset.lane=String(f.lane),R.ariaSelected=String(n),X)R.id=`${X}-item-${m}`;if(Y){let T=Y();if(T!==F)F=T,_=String(T);R.setAttribute("aria-setsize",_),R.setAttribute("aria-posinset",String(m+1))}L(R,f);let A=q(p,m,g);return G(R,A),b(R,n,a),M(R,f),{element:R,lastItemId:p.id,lastSelected:n,lastFocused:a,lastY:f.y,lastX:f.x,lastSize:f.size,lastCrossSize:f.crossSize,lastSeenFrame:U}},W=(m,p,f,n)=>{U++,Z.clear();for(let R=0;R<p.length;R++)Z.add(p[R].index);for(let[R,g]of B)if(Z.has(R))g.lastSeenFrame=U;else if(U-g.lastSeenFrame>P1)K.release(g.element),B.delete(R);let a=null;for(let R=0;R<p.length;R++){let g=p[R],A=g.index,T=m(A);if(!T)continue;let S=f.has(T.id),D=A===n,I=B.get(A);if(I){let v=I.lastItemId!==T.id,C=I.lastSelected!==S,E=I.lastFocused!==D,V=I.lastY!==g.y||I.lastX!==g.x,w=I.lastSize!==g.size||I.lastCrossSize!==g.crossSize;if(v||C||E){let H=k(S,D),u=q(T,A,H);G(I.element,u),b(I.element,S,D),I.element.dataset.id=String(T.id),I.element.ariaSelected=String(S),I.lastItemId=T.id,I.lastSelected=S,I.lastFocused=D}if(w)L(I.element,g),I.lastSize=g.size,I.lastCrossSize=g.crossSize;if(V)M(I.element,g),I.lastY=g.y,I.lastX=g.x}else{let v=z(A,T,g,S,D);if(!a)a=document.createDocumentFragment();a.appendChild(v.element),B.set(A,v)}}if(a)J.appendChild(a)},h=()=>{for(let{element:m}of B.values())K.release(m);B.clear(),J.innerHTML=""};return{render:W,getElement:(m)=>B.get(m)?.element,sortDOM:()=>{f0(J,B.keys(),(m)=>B.get(m)?.element)},clear:h,destroy:()=>{h(),K.clear()}}};var R1=new Set,z1=100,sJ=(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(Y){let{dom:X,emitter:K,config:B,rawConfig:Z}=Y,U=B.classPrefix,_=B.horizontal;if(B.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${U}--masonry`);let F=S0(Z.padding),$=Y2(F,_),k=X2(F,_),O=()=>{return(_?X.viewport.clientHeight:X.viewport.clientWidth)-$},y={columns:J.columns,gap:J.gap??0,containerSize:O()};q=A2(y);let N=Z.item,G=_&&Z.item.width?Z.item.width:N.height,b={containerWidth:0,columns:0,gap:0,columnWidth:0},M=typeof G==="function"?(C)=>G(C,b):()=>G,L=()=>{let C=Y.dataManager.getTotal(),E=q;b.containerWidth=E.containerSize,b.columns=E.columns,b.gap=E.gap;let V=(E.columns-1)*E.gap;b.columnWidth=Math.max(0,(b.containerWidth-V)/E.columns),j=E.calculateLayout(C,M);let w=q.getTotalSize(j);Y.sizeCache.getTotalSize=()=>w,Y.updateContentSize(w)},z=Z.item.template;Q=F2(X.items,z,U,_,()=>Y.dataManager.getTotal(),B.ariaIdPrefix);let W=null,h=null,P=!1,x=()=>{if(P)return;P=!0,W=Y.methods.get("_getSelectedIds")??null,h=Y.methods.get("_getFocusedIndex")??null},m=(C)=>Y.dataManager.getItem(C),p=-1,f=-1,n=!0,a=B.overscan*z1,R=()=>{if(Y.state.isDestroyed)return;x();let C=Y.scrollController.getScrollTop(),E=Y.state.viewportState.containerSize;if(!n&&C===p&&E===f)return;p=C,f=E,n=!1;let V=Math.max(0,C-a),w=C+E+a,H=q.getVisibleItems(j,V,w),u=W?W():R1,d=h?h():-1;if(Q&&H.length>0)Q.render(m,H,u,d);let o=Y.state.viewportState;o.scrollPosition=C;let c=H.length,t=c>0?H[0].index:0,Q0=c>0?H[c-1].index:0;o.visibleRange.start=t,o.visibleRange.end=Q0,o.renderRange.start=t,o.renderRange.end=Q0;let r=Y.state.lastRenderRange;if(r.start!==t||r.end!==Q0)r.start=t,r.end=Q0,K.emit("range:change",{range:{start:t,end:Q0}})},g=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,n=!0,R()};Y.setRenderFns(R,g);let A=(C,E)=>{let V=(_?E:C)-$;if(q&&q.containerSize!==V){if(q.update({containerSize:V}),L(),Q)Q.clear();g()}};Y.resizeHandlers.push(A);let T=()=>{L(),g()},S=Y.dataManager,D=(C)=>{if(typeof S[C]!=="function")return;let E=S[C].bind(S);S[C]=(...V)=>{E(...V),T()}};D("setItems"),D("appendItems"),D("prependItems"),D("updateItem"),D("removeItem");let{animateScroll:I,cancelScroll:v}=I0(Y.scrollController,Y.renderIfNeeded);Y.methods.set("cancelScroll",v),Y.methods.set("scrollToIndex",(C,E)=>{let V=j[C];if(!V)return;let{align:w,behavior:H,duration:u}=P0(E),d=V.y,o=Y.state.viewportState.containerSize,c=d;if(w==="center")c=d-o/2+V.size/2;else if(w==="end"){c=d-o+V.size;let t=q.getTotalSize(j);if(C===j.length-1)c=Math.max(0,t+k-o)}if(c=Math.max(0,c),c=Y.adjustScrollPosition(c),H==="smooth")I(Y.scrollController.getScrollTop(),c,u);else v(),Y.scrollController.scrollTo(c)}),L(),Y.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),Y.destroyHandlers.push(()=>{if(v(),Q)Q.destroy();X.root.classList.remove(`${U}--masonry`)})}}};var L2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),a0=(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 Y of q)j.add(Y);return{...J,selected:j}},s0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},g0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return s0(J,[q]);else return a0(J,[q],Q)},T2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},b2=(J)=>({...J,selected:new Set}),H2=(J,q)=>{return J.focusedIndex=q,J},p2=(J,q,Q=!1)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},h2=(J,q,Q=!1)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},u2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},g2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var nJ=(J,q)=>{return J.selected.has(q)},n0=(J)=>{return Array.from(J.selected)},o0=(J,q)=>{let Q=[];for(let j of J.selected){let Y=q(j);if(Y)Q.push(Y)}return Q};var oJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=L2(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:K,emitter:B,config:Z}=X,{classPrefix:U,ariaIdPrefix:_}=Z;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}K.root.classList.add(`${U}--selectable`);let F=new Map,$=()=>{F.clear();let M=X.dataManager.getTotal(),L=X.dataManager.getCached();if(L===0)return;if(L>=M){for(let W=0;W<M;W++){let h=X.dataManager.getItem(W);if(h)F.set(h.id,W)}return}let z=X.dataManager.getStorage();if(z&&typeof z.getLoadedRanges==="function"){let W=z.getLoadedRanges();for(let h of W)for(let P=h.start;P<=h.end;P++){let x=X.dataManager.getItem(P);if(x)F.set(x.id,P)}}};B.on("load:end",({items:M,offset:L})=>{if(!M||M.length===0)return;if(L!==void 0)for(let z=0;z<M.length;z++){let W=M[z];if(W&&W.id!==void 0)F.set(W.id,L+z)}else $()}),$(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:k}=X.getRenderFns(),O=()=>{k();let M=(L)=>{let z=F.get(L);if(z===void 0)return;return X.dataManager.getItem(z)};B.emit("selection:change",{selected:n0(j),items:o0(j,M)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${U}-live-region`,Y.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",(K.root.getAttribute("role")==="grid"?K.root.parentElement??K.root:K.root).appendChild(Y);let N=Y;B.on("selection:change",({selected:M})=>{let L=M.length;if(L===0)N.textContent="";else if(L===1)N.textContent="1 item selected";else N.textContent=`${L} items selected`});let G=()=>{if(X.state.isDestroyed)return;if(!K.root.matches(":focus-visible"))return;let M=X.dataManager.getTotal();if(M===0)return;let L=j.focusedIndex>=0?Math.min(j.focusedIndex,M-1):0;j=H2(j,L),j.focusVisible=!0,K.root.setAttribute("aria-activedescendant",`${_}-item-${L}`),X.scrollController.scrollTo(X.adjustScrollPosition(y0(L,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression())));let z=X.dataManager.getItem(L);if(z)X.renderer.updateItemClasses(L,j.selected.has(z.id),!0)};K.root.addEventListener("focusin",G);let b=(M)=>{if(X.state.isDestroyed)return;let L=M.relatedTarget;if(L&&K.root.contains(L))return;let z=j.focusedIndex;if(j.focusVisible=!1,K.root.removeAttribute("aria-activedescendant"),z>=0){let W=X.dataManager.getItem(z);if(W)X.renderer.updateItemClasses(z,j.selected.has(W.id),!1)}};K.root.addEventListener("focusout",b),X.clickHandlers.push((M)=>{if(X.state.isDestroyed)return;let z=M.target.closest("[data-index]");if(!z)return;let W=parseInt(z.dataset.index??"-1",10);if(W<0)return;let h=X.dataManager.getItem(W);if(!h)return;B.emit("item:click",{item:h,index:W,event:M}),j=H2(j,W),j.focusVisible=!1,K.root.setAttribute("aria-activedescendant",`${_}-item-${W}`),j=g0(j,h.id,q),O()}),X.keydownHandlers.push((M)=>{if(X.state.isDestroyed)return;let L=X.dataManager.getTotal(),z=j.focusedIndex,W=!1,h=!1,P=j;switch(M.key){case"ArrowUp":P=p2(j,L,Z.wrap),P.focusVisible=!0,W=!0,h=!0;break;case"ArrowDown":P=h2(j,L,Z.wrap),P.focusVisible=!0,W=!0,h=!0;break;case"Home":P=u2(j,L),P.focusVisible=!0,W=!0,h=!0;break;case"End":P=g2(j,L),P.focusVisible=!0,W=!0,h=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let x=X.dataManager.getItem(j.focusedIndex);if(x)P=g0(j,x.id,q),P.focusVisible=!0;W=!0}break}if(W){M.preventDefault(),j=P;let x=j.focusedIndex;if(x>=0){let m=X.dataManager.getState();X.scrollController.scrollTo(X.adjustScrollPosition(y0(x,X.sizeCache,X.state.viewportState.containerSize,m.total,"center",X.getCachedCompression()))),K.root.setAttribute("aria-activedescendant",`${_}-item-${x}`)}else K.root.removeAttribute("aria-activedescendant");if(h){let{selected:m}=j;if(z>=0&&z!==x){let p=X.dataManager.getItem(z);if(p)X.renderer.updateItemClasses(z,m.has(p.id),!1)}if(x>=0){let p=X.dataManager.getItem(x);if(p)X.renderer.updateItemClasses(x,m.has(p.id),!0)}}else O()}}),X.methods.set("select",(...M)=>{j=a0(j,M,q),O()}),X.methods.set("deselect",(...M)=>{j=s0(j,M),O()}),X.methods.set("toggleSelect",(M)=>{j=g0(j,M,q),O()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let M=X.getAllLoadedItems();j=T2(j,M,q),$(),O()}),X.methods.set("clearSelection",()=>{j=b2(j),O()}),X.methods.set("getSelected",()=>{return n0(j)}),X.methods.set("getSelectedItems",()=>{return o0(j,(L)=>{let z=F.get(L);if(z===void 0)return;return X.dataManager.getItem(z)})}),X.destroyHandlers.push(()=>{if(N&&N.parentNode)N.remove();K.root.removeEventListener("focusin",G),K.root.removeEventListener("focusout",b)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var iJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let Y=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),K=Q.getVirtualTotal(),B=Q.methods.get("getSelected"),Z=B&&B().length>0?B():void 0;if(K===0){let $={index:0,offsetInItem:0,total:0};if(Z)$.selectedIds=Z;return $}let U,_;if(X.isCompressed){let k=Y/X.virtualSize*K;U=Math.max(0,Math.min(Math.floor(k),K-1)),_=(k-U)*Q.sizeCache.getSize(U)}else U=Q.sizeCache.indexAtOffset(Y),_=Y-Q.sizeCache.getOffset(U);_=Math.max(0,_);let F={index:U,offsetInItem:_,total:K};if(Z)F.selectedIds=Z;return F});let j=(Y)=>{let{index:X,offsetInItem:K,selectedIds:B}=Y,Z=Q.getVirtualTotal();if(Z===0)return;if(!Number.isFinite(X)||!Number.isFinite(K))return;if(Q.sizeCache.getTotal()!==Z){Q.sizeCache.rebuild(Z),Q.updateCompressionMode();let N=Q.getCachedCompression();Q.updateContentSize(N.virtualSize)}let _=Q.getCachedCompression(),F=Math.max(0,Math.min(X,Z-1)),$;if(_.isCompressed){let N=Q.sizeCache.getSize(F),G=N>0?K/N:0;$=(F+G)/Z*_.virtualSize}else $=Q.sizeCache.getOffset(F)+K;let k=Q.state.viewportState.containerSize,O=Math.max(0,_.virtualSize-k);if($=Math.max(0,Math.min($,O)),Q.scrollController.scrollTo($),B&&B.length>0){let N=Q.methods.get("select");if(N)N(...B)}let y=Q.methods.get("loadVisibleRange");if(y)requestAnimationFrame(()=>{y()});else{let N=Q.methods.get("reload");if(N)requestAnimationFrame(()=>{N()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};var $2=(J,q=50,Q=1/0,j=!0)=>{let Y=J,X=[],K=0,B=()=>{X=Y.map((N,G)=>({def:N,index:G,width:0,minWidth:C1(N.minWidth??q,1),maxWidth:N.maxWidth??Q,resizable:N.resizable??j,offset:0}))},Z=(N)=>{if(X.length===0){K=0;return}let G=0,b=0;for(let M=0;M<X.length;M++){let L=X[M],z=L.def;if(z.width!==void 0)L.width=x2(z.width,L.minWidth,L.maxWidth),G+=L.width;else b++}if(b>0){let L=Math.max(0,N-G)/b;for(let z=0;z<X.length;z++){let W=X[z];if(W.def.width===void 0)W.width=x2(L,W.minWidth,W.maxWidth)}}U()},U=()=>{let N=0;for(let G=0;G<X.length;G++){let b=X[G];b.offset=N,N+=b.width}K=N},_=(N,G)=>{if(N<0||N>=X.length)return 0;let b=X[N];if(!b.resizable)return b.width;let M=x2(G,b.minWidth,b.maxWidth);return b.width=M,U(),M},F=(N)=>{return X[N]},$=(N)=>{if(X.length===0)return;if(N<0)return X[0];if(N>=K)return X[X.length-1];let G=0,b=X.length-1;while(G<b){let M=G+b>>>1,L=X[M];if(N<L.offset)b=M-1;else if(N>=L.offset+L.width)G=M+1;else return L}return X[G]},k=(N)=>{if(N<0||N>=X.length)return 0;return X[N].offset},O=(N)=>{if(N<0||N>=X.length)return 0;return X[N].width},y=(N)=>{Y=N,B()};return B(),{get columns(){return X},get totalWidth(){return K},resolve:Z,updateColumns:y,resizeColumn:_,getColumn:F,getColumnAtX:$,getColumnOffset:k,getColumnWidth:O}},x2=(J,q,Q)=>Math.min(Q,Math.max(q,J)),C1=(J,q)=>Math.max(q,J);var k2=(J,q,Q,j,Y,X,K)=>{let B=document.createElement("div");B.setAttribute("role","rowgroup");let Z=document.createElement("div");Z.className=`${j}-table-header`,Z.setAttribute("role","row"),Z.setAttribute("aria-rowindex","1"),Z.style.height=`${Q}px`;let U=document.createElement("div");U.className=`${j}-table-header-scroll`,U.setAttribute("role","presentation"),Z.appendChild(U),B.appendChild(Z),J.insertBefore(B,J.firstChild),q.style.position="absolute",q.style.top=`${Q}px`,q.style.left="0",q.style.right="0",q.style.bottom="0",q.style.height="auto";let _=[],F=[],$=[],k=!0,O=null,y="asc",N=null,G=!1,b=-1,M=0,L=0,z=(A,T)=>{let S=document.createElement("div");S.className=`${j}-table-header-cell`,S.setAttribute("role","columnheader"),S.setAttribute("aria-colindex",String(T+1)),S.dataset.columnKey=A.def.key;let D=A.def.align;if(D==="center")S.classList.add(`${j}-table-header-cell--center`);else if(D==="right")S.classList.add(`${j}-table-header-cell--right`);let I=document.createElement("div");I.className=`${j}-table-header-content`;let v=A.def.header?A.def.header(A.def):A.def.label;if(typeof v==="string")I.textContent=v;else I.appendChild(v);if(S.appendChild(I),A.def.sortable){let C=document.createElement("span");C.className=`${j}-table-header-sort`,C.setAttribute("aria-hidden","true"),S.appendChild(C),$.push(C),S.classList.add(`${j}-table-header-cell--sortable`)}else $.push(null);if(A.resizable){let C=document.createElement("div");C.className=`${j}-table-header-resize`,C.dataset.resizeIndex=String(T),S.appendChild(C),F.push(C)}return S},W=(A)=>{N=A,U.textContent="",_=[],F=[],$=[];let T=A.columns;for(let S=0;S<T.length;S++){let D=T[S],I=z(D,S);_.push(I),U.appendChild(I)}if(h(A),O)P(O,y)},h=(A)=>{N=A;let T=A.columns;U.style.width=`${A.totalWidth}px`;for(let S=0;S<_.length&&S<T.length;S++){let D=_[S],I=T[S];D.style.width=`${I.width}px`}},P=(A,T)=>{if(O=A,y=T,!N)return;let S=N.columns;for(let D=0;D<$.length&&D<S.length;D++){let I=$[D];if(!I)continue;if(S[D].def.key===A&&A!==null)I.textContent=T==="asc"?"▲":"▼",I.style.opacity="0.7",_[D].setAttribute("aria-sort",T==="asc"?"ascending":"descending");else I.textContent="",I.style.opacity="0",_[D].removeAttribute("aria-sort")}},x=(A)=>{U.style.transform=`translateX(${-A}px)`},m=(A)=>{let T=A.target;if(!T.dataset.resizeIndex)return;if(A.preventDefault(),A.stopPropagation(),b=parseInt(T.dataset.resizeIndex,10),!N)return;let S=N.getColumn(b);if(!S||!S.resizable)return;G=!0,M=A.clientX,L=S.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",T.classList.add(`${j}-table-header-resize--active`),T.setPointerCapture(A.pointerId),T.addEventListener("pointermove",p),T.addEventListener("pointerup",f),T.addEventListener("pointercancel",f)},p=(A)=>{if(!G||!N)return;let T=A.clientX-M;if(Math.abs(T)<1)return;let S=Math.max(0,L+T);Y(b,S)},f=(A)=>{if(!G)return;let T=A.target;T.removeEventListener("pointermove",p),T.removeEventListener("pointerup",f),T.removeEventListener("pointercancel",f);try{T.releasePointerCapture(A.pointerId)}catch{}T.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",G=!1,b=-1},n=(A)=>{let T=A.target;if(T.dataset.resizeIndex!==void 0)return;if(G)return;let S=T;while(S&&!S.dataset.columnKey)if(S=S.parentElement,S===Z||S===null)return;if(!S||!S.dataset.columnKey)return;let D=S.dataset.columnKey;if(!N)return;let I=N.columns,v=-1;for(let E=0;E<I.length;E++)if(I[E].def.key===D){v=E;break}if(v===-1)return;let C=I[v];if(K)K({key:D,index:v,event:A});if(C.def.sortable&&X){let E;if(O===D)if(y==="asc")E="desc";else E=null;else E="asc";X({key:D,index:v,direction:E})}};return Z.addEventListener("pointerdown",m),Z.addEventListener("click",n),{element:Z,update:h,updateSort:P,rebuild:W,show:()=>{if(k)return;k=!0,Z.style.display=""},hide:()=>{if(!k)return;k=!1,Z.style.display="none"},destroy:()=>{Z.removeEventListener("pointerdown",m),Z.removeEventListener("click",n),q.style.position="",q.style.top="",q.style.left="",q.style.right="",q.style.bottom="",B.remove(),_=[],F=[],$=[],N=null,k=!1},syncScroll:x}};var w1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;return document.createElement("div")},release:(X)=>{if(X.parentNode)X.parentNode.removeChild(X);if(q.length<J)X.className="",X.removeAttribute("data-id"),X.removeAttribute("data-index"),X.removeAttribute("aria-selected"),X.removeAttribute("aria-rowindex"),X.removeAttribute("role"),X.style.cssText="",X.textContent="",q.push(X)},clear:()=>{q.length=0}}},y2=(J,q,Q,j,Y,X,K,B)=>{let Z=w1(),U=new Map,_=-1,F=Q,$=null,k=null,O=(v,C)=>{$=v,k=C},y=(v,C)=>{if(C)v.setAttribute("aria-selected","true");else v.removeAttribute("aria-selected")},N=`${Y}-item ${Y}-table-row`,G=`${Y}-item--selected`,b=`${Y}-item--focused`,M=`${Y}-table-cell`,L=`${Y}-table-cell--center`,z=`${Y}-table-cell--right`,W=`${Y}-item--odd`,h=`${Y}-item ${Y}-table-row ${Y}-table-group-header`,P=`${Y}-table-group-header-content`,x=(v,C,E,V)=>{if(E.def.cell){let w=E.def.cell(C,E.def,V);if(typeof w==="string")v.innerHTML=w;else v.replaceChildren(w)}else{let w=C[E.def.key];v.textContent=w!=null?String(w):""}},m=(v,C,E,V)=>{let w=N;if(B&&(C&1)===1)w+=` ${W}`;if(E)w+=` ${G}`;if(V)w+=` ${b}`;v.className=w},p=(v,C)=>{let E=C.def.align;if(E==="center")v.classList.add(L),v.classList.remove(z);else if(E==="right")v.classList.add(z),v.classList.remove(L);else v.classList.remove(L,z)},f=(v,C)=>{let V=F.columns.length;if(C.length===V)return C;let w=[];for(let H=0;H<V;H++){let u;if(H<C.length)u=C[H];else u=document.createElement("div"),u.className=M,v.appendChild(u);w.push(u)}for(let H=V;H<C.length;H++)C[H].remove();return w},n=(v,C,E)=>{let V=Z.acquire(),w=v;V.style.width=`${F.totalWidth}px`;let H=E.getSize(C);V.style.height=`${H}px`,V.className=h,V.setAttribute("role","presentation"),V.setAttribute("data-id",String(v.id)),V.setAttribute("data-index",String(C)),V.removeAttribute("aria-selected"),V.removeAttribute("aria-rowindex"),V.replaceChildren();let u=document.createElement("div");if(u.className=P,k){let o=k(w.groupKey,w.groupIndex);if(typeof o==="string")u.innerHTML=o;else u.appendChild(o)}V.appendChild(u);let d=E.getOffset(C);return V.style.transform=`translateY(${d}px)`,{element:V,cells:[],index:C,isGroupHeader:!0,lastItemId:v.id,lastSelected:!1,lastFocused:!1,lastOffset:d,lastHeight:H}},a=(v,C,E,V,w)=>{let H=Z.acquire();H.style.width=`${F.totalWidth}px`;let u=w.getSize(C);H.style.height=`${u}px`,m(H,C,E,V),H.setAttribute("role","row"),H.setAttribute("data-id",String(v.id)),H.setAttribute("data-index",String(C)),H.id=`${X}-${C}`,H.setAttribute("aria-rowindex",String(C+2));let d=K();if(d!==_)_=d;y(H,E);let o=f(H,[]),c=F.columns;for(let Q0=0;Q0<o.length&&Q0<c.length;Q0++){let r=o[Q0],i=c[Q0];r.style.left=`${i.offset}px`,r.style.width=`${i.width}px`,r.setAttribute("role","gridcell"),r.setAttribute("aria-colindex",String(Q0+1)),p(r,i),x(r,v,i,C)}let t=w.getOffset(C);return H.style.transform=`translateY(${t}px)`,{element:H,cells:o,index:C,isGroupHeader:!1,lastItemId:v.id,lastSelected:E,lastFocused:V,lastOffset:t,lastHeight:u}},R=(v,C,E,V)=>{for(let[o,c]of U)if(o<C.start||o>C.end)Z.release(c.element),U.delete(o);let w=!1,H=K();if(H!==_)_=H,w=!0;let u=null,d=q();for(let o=C.start;o<=C.end;o++){let c=o-C.start,t=v[c];if(!t)continue;let Q0=E.has(t.id),r=o===V,i=$?$(t):!1,s=U.get(o);if(s){if(s.isGroupHeader!==i){Z.release(s.element),U.delete(o);let j0=i?n(t,o,d):a(t,o,Q0,r,d);if(U.set(o,j0),!u)u=document.createDocumentFragment();u.appendChild(j0.element);continue}if(i){if(s.lastItemId!==t.id){let K0=t,_0=s.element.firstElementChild;if(_0&&k){let X0=k(K0.groupKey,K0.groupIndex);if(typeof X0==="string")_0.innerHTML=X0;else _0.replaceChildren(X0)}s.element.setAttribute("data-id",String(t.id)),s.lastItemId=t.id}let q0=d.getOffset(o);if(s.lastOffset!==q0)s.lastOffset=q0,s.element.style.transform=`translateY(${q0}px)`;let Y0=d.getSize(o);if(s.lastHeight!==Y0)s.lastHeight=Y0,s.element.style.height=`${Y0}px`}else{let j0=s.lastItemId!==t.id,q0=s.lastSelected!==Q0,Y0=s.lastFocused!==r;if(j0){let X0=F.columns;for(let D0=0;D0<s.cells.length&&D0<X0.length;D0++)x(s.cells[D0],t,X0[D0],o);m(s.element,o,Q0,r),s.element.setAttribute("data-id",String(t.id)),y(s.element,Q0),s.lastItemId=t.id,s.lastSelected=Q0,s.lastFocused=r}else if(q0||Y0)m(s.element,o,Q0,r),y(s.element,Q0),s.lastSelected=Q0,s.lastFocused=r;let K0=d.getOffset(o);if(s.lastOffset!==K0)s.lastOffset=K0,s.element.style.transform=`translateY(${K0}px)`;let _0=d.getSize(o);if(s.lastHeight!==_0)s.lastHeight=_0,s.element.style.height=`${_0}px`;if(w)s.element.setAttribute("aria-rowindex",String(o+2))}}else{let j0=i?n(t,o,d):a(t,o,Q0,r,d);if(U.set(o,j0),!u)u=document.createDocumentFragment();u.appendChild(j0.element)}}if(u)J.appendChild(u)},g=(v,C,E,V)=>{let w=U.get(v);if(!w)return;if(w.isGroupHeader)return;let H=w.lastItemId!==C.id,u=w.lastSelected!==E,d=w.lastFocused!==V;if(H||u||d){if(H){let o=F.columns;for(let c=0;c<w.cells.length&&c<o.length;c++)x(w.cells[c],C,o[c],v);w.element.setAttribute("data-id",String(C.id)),w.lastItemId=C.id}m(w.element,v,E,V),y(w.element,E),w.lastSelected=E,w.lastFocused=V}},A=(v,C,E)=>{let V=U.get(v);if(!V)return;if(V.isGroupHeader)return;let w=V.lastSelected!==C,H=V.lastFocused!==E;if(w||H)m(V.element,v,C,E),y(V.element,C),V.lastSelected=C,V.lastFocused=E},T=(v)=>{F=v;let C=v.columns;for(let[,E]of U)if(E.element.style.width=`${v.totalWidth}px`,E.cells.length>0)for(let V=0;V<E.cells.length&&V<C.length;V++){let w=E.cells[V],H=C[V];w.style.left=`${H.offset}px`,w.style.width=`${H.width}px`}},S=(v)=>{return U.get(v)?.element},D=()=>{for(let[,v]of U)Z.release(v.element);U.clear(),_=-1};return{render:R,updateItem:g,updateItemClasses:A,getElement:S,updateColumnLayout:T,setGroupHeaderFn:O,clear:D,destroy:()=>{D(),Z.clear()}}};var v1=new Set,tJ=(J)=>{if(!J.columns||J.columns.length===0)throw Error("[vlist/builder] withTable: columns must be a non-empty array");if(J.rowHeight===void 0&&J.estimatedRowHeight===void 0)throw Error("[vlist/builder] withTable: either rowHeight or estimatedRowHeight is required");let q=null,Q=null,j=null;return{name:"withTable",priority:10,conflicts:["withGrid","withMasonry"],setup(Y){let{dom:X,emitter:K,config:B}=Y,{classPrefix:Z}=B;if(B.horizontal)throw Error("[vlist/builder] withTable cannot be used with orientation: 'horizontal'");if(B.reverse)throw Error("[vlist/builder] withTable cannot be used with reverse: true");let U=J.resizable??!0,_=J.minColumnWidth??50,F=J.maxColumnWidth??1/0,$=J.columnBorders??!1,k=J.rowBorders??!0,O=J.rowHeight,y=J.headerHeight??(typeof O==="number"?O:40),N=J.sort?.key??null,G=J.sort?.direction??"asc";if(q=$2(J.columns,_,F,U),typeof O==="function")Y.setSizeConfig(O);else if(typeof O==="number")Y.setSizeConfig(O);if(Y.rebuildSizeCache(),X.root.classList.add(`${Z}--table`),k)X.root.classList.add(`${Z}--table-row-borders`);if($)X.root.classList.add(`${Z}--table-col-borders`);X.root.setAttribute("role","grid"),X.root.setAttribute("aria-colcount",String(J.columns.length));let b=-1,M=X.items.getAttribute("aria-label");if(M)X.root.setAttribute("aria-label",M),X.items.removeAttribute("aria-label");X.items.setAttribute("role","rowgroup"),X.viewport.setAttribute("role","none"),X.content.setAttribute("role","none"),X.viewport.removeAttribute("tabindex");let L=Y.getContainerWidth();q.resolve(L);let z=(V,w)=>{if(!q)return;let H=q.getColumn(V);if(!H)return;let u=H.width,d=q.resizeColumn(V,w);if(Q)Q.update(q);if(j)j.updateColumnLayout(q);P(),K.emit("column:resize",{key:H.def.key,index:V,previousWidth:u,width:d})},W=(V)=>{if(V.direction===null)N=null,G="asc";else N=V.key,G=V.direction;if(Q)Q.updateSort(N,G);K.emit("column:sort",V)},h=(V)=>{K.emit("column:click",V)};if(Q=k2(X.root,X.viewport,y,Z,z,W,h),Q.rebuild(q),N)Q.updateSort(N,G);let P=()=>{if(!q)return;let V=q.totalWidth;X.content.style.minWidth=`${V}px`,X.items.style.minWidth=`${V}px`};P(),j=y2(X.items,()=>Y.sizeCache,q,J.columns,Z,B.ariaIdPrefix,()=>Y.dataManager.getTotal(),Y.rawConfig.item?.striped);let x=null,m=null,p=!1,f=()=>{if(p)return;p=!0,x=Y.methods.get("_getSelectedIds")??null,m=Y.methods.get("_getFocusedIndex")??null},n=-1,a=-1,R=!0,g=B.overscan,A={start:0,end:0},T={start:0,end:0},S=()=>{if(Y.state.isDestroyed)return;let V=Y.scrollController.getScrollTop(),w=Y.state.viewportState.containerSize;if(!R&&V===n&&w===a)return;n=V,a=w,R=!1;let H=Y.getVirtualTotal(),u=H+1;if(u!==b)b=u,X.root.setAttribute("aria-rowcount",String(u));if(H===0||w===0)A.start=0,A.end=0;else A.start=Math.max(0,Y.sizeCache.indexAtOffset(V)),A.end=Math.min(H-1,Math.max(0,Y.sizeCache.indexAtOffset(V+w-1)));T.start=Math.max(0,A.start-g),T.end=Math.min(H-1,A.end+g);let d=Y.state.viewportState;d.scrollPosition=V,d.visibleRange.start=A.start,d.visibleRange.end=A.end,d.renderRange.start=T.start,d.renderRange.end=T.end;let o=Y.state.lastRenderRange,c=Y.dataManager.getItemsInRange(T.start,T.end);f();let t=x?x():v1,Q0=m?m():-1;if(j.render(c,T,t,Q0),o.start!==T.start||o.end!==T.end)o.start=T.start,o.end=T.end,K.emit("range:change",{range:{start:T.start,end:T.end}})},D=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,R=!0,S()};Y.setRenderFns(S,D);let I=Q,v=-1,C=()=>{let V=X.viewport.scrollLeft;if(V!==v){if(v=V,I.syncScroll)I.syncScroll(V)}};Y.afterScroll.push(()=>{C()});let E=()=>{C()};X.viewport.addEventListener("scroll",E,{passive:!0}),Y.resizeHandlers.push((V,w)=>{if(!q)return;if(q.resolve(V),Q)Q.update(q);if(j)j.updateColumnLayout(q);P()}),Y.methods.set("updateColumns",(V)=>{if(!q||!Q)return;if(q.updateColumns(V),q.resolve(Y.getContainerWidth()),Q.rebuild(q),N)Q.updateSort(N,G);if(P(),j)j.updateColumnLayout(q),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",(V,w)=>{if(!q)return;let H;if(typeof V==="string"){let u=q.columns;H=-1;for(let d=0;d<u.length;d++)if(u[d].def.key===V){H=d;break}if(H===-1)return}else H=V;z(H,w)}),Y.methods.set("getColumnWidths",()=>{if(!q)return{};let V={},w=q.columns;for(let H=0;H<w.length;H++)V[w[H].def.key]=w[H].width;return V}),Y.methods.set("setSort",(V,w)=>{if(N=V,G=w??"asc",Q)Q.updateSort(N,G)}),Y.methods.set("getSort",()=>{return{key:N,direction:G}}),Y.methods.set("_getTableLayout",()=>q),Y.methods.set("_replaceTableRenderer",(V)=>{j=V}),Y.methods.set("_updateTableForGroups",(V,w)=>{if(j)j.setGroupHeaderFn(V,w)}),Y.methods.set("_getTableHeaderHeight",()=>y),Y.contentSizeHandlers.push(()=>{P()}),Y.destroyHandlers.push(()=>{if(X.viewport.removeEventListener("scroll",E),Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null;X.content.style.minWidth="",X.items.style.minWidth="",X.root.classList.remove(`${Z}--table`),X.root.removeAttribute("role"),X.root.removeAttribute("aria-colcount"),X.viewport.removeAttribute("role"),X.viewport.setAttribute("tabindex","-1"),X.content.removeAttribute("role");let V=X.root.getAttribute("aria-label");if(V)X.items.setAttribute("aria-label",V),X.root.removeAttribute("aria-label");X.root.removeAttribute("aria-rowcount"),X.items.setAttribute("role","listbox")})},destroy(){if(Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null}}};var S1=50,f1=0.1;function I1(J){let q=0,Q=0,j=0;function Y(){return j>0?Q/j:0}function X(Z){if(q=Z,Z>f1&&Z<S1)Q+=Z,j++}function K(){let Z=J.getTotal();if(Z===0)return 0;let U=J.getItemSize();if(U<=0)return 0;let _=J.getContainerSize();if(_<=0)return 0;let F=J.getScrollPosition(),$=typeof J.getColumns==="function"?J.getColumns():1,O=Math.ceil(Z/$)*U,N=Math.min(O,H0)-_,G=O-_,b=N>0?G/N:1,M=F*b,L=Math.ceil((M+_)/U);return Math.min(L*$,Z)}function B(){let Z=J.getTotal(),U=K();return{progress:Z>0?Math.min(100,Math.max(0,U/Z*100)):0,velocity:q,velocityAvg:Y(),itemCount:U,total:Z}}return{getState:B,onVelocity:X}}export{tJ as withTable,iJ as withSnapshots,oJ as withSelection,kJ as withScrollbar,RJ as withScale,CJ as withPage,sJ as withMasonry,rJ as withGroups,aJ as withGrid,zJ as withAsync,FJ as vlist,g0 as toggleSelection,SJ as simpleVisibleRange,a0 as selectItems,T2 as selectAll,xJ as rangesEqual,N2 as rafThrottle,bJ as needsScaling,D2 as mergeRanges,nJ as isSelected,R0 as isPlaceholderItem,mJ as isInRange,z0 as isGroupHeader,o0 as getSelectedItems,n0 as getSelectedIds,L0 as getScaleState,$J as getScaleInfo,L0 as getScale,dJ as getRangeCount,HJ as getMaxItemsWithoutScaling,f2 as filterPlaceholders,cJ as diffRanges,s0 as deselectItems,y2 as createTableRenderer,$2 as createTableLayout,k2 as createTableHeader,M2 as createStickyHeader,I1 as createStats,_2 as createSparseStorage,k0 as createSizeCache,L2 as createSelectionState,u0 as createScrollbar,PJ as createScrollController,W2 as createPlaceholderManager,Q2 as createMeasuredSizeCache,F2 as createMasonryRenderer,A2 as createMasonryLayout,l0 as createGroupedSizeFn,G2 as createGroupLayout,r0 as createGridRenderer,E2 as createGridLayout,j2 as createEmitter,V2 as createAsyncManager,b2 as clearSelection,gJ as clampScrollPosition,pJ as calculateTotalSize,y0 as calculateScrollToIndex,U2 as calculateScaledVisibleRange,K2 as calculateScaledScrollToIndex,LJ as calculateScaledRenderRange,h0 as calculateScaledItemPosition,fJ as calculateRenderRange,d0 as calculateMissingRanges,uJ as calculateItemOffset,TJ as calculateIndexFromScrollPosition,hJ as calculateActualSize,c0 as buildLayoutItems,H0 as MAX_VIRTUAL_SIZE};
package/dist/types.d.ts CHANGED
@@ -160,6 +160,25 @@ export interface ItemConfig<T extends VListItem = VListItem> {
160
160
  * Default: `false` (no extra work on the render hot path).
161
161
  */
162
162
  striped?: boolean;
163
+ /**
164
+ * Gap between items in pixels along the main axis (default: 0).
165
+ *
166
+ * Adds consistent spacing between items without requiring CSS margin
167
+ * or padding hacks on `.vlist-item`. The gap is baked into the size
168
+ * cache (each slot = itemSize + gap) and subtracted from the DOM
169
+ * element height, so items are positioned with precise spacing.
170
+ *
171
+ * Works identically to the `gap` option in grid and masonry modes.
172
+ *
173
+ * ```ts
174
+ * item: {
175
+ * height: 60,
176
+ * gap: 10, // 10px between each item
177
+ * template: …,
178
+ * }
179
+ * ```
180
+ */
181
+ gap?: number;
163
182
  /** Template function to render each item */
164
183
  template: ItemTemplate<T>;
165
184
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * vlist/utils — Padding Resolution
3
+ * Shared helpers for resolving the CSS-shorthand padding config into
4
+ * concrete pixel values. Used by core (to apply CSS) and by features
5
+ * (to subtract cross-axis padding from container dimensions).
6
+ */
7
+ import type { BuilderConfig } from "../builder/types";
8
+ /** Padding config — re-exported from BuilderConfig for convenience */
9
+ export type PaddingConfig = NonNullable<BuilderConfig["padding"]>;
10
+ /** Resolved padding — all four sides in pixels */
11
+ export interface ResolvedPadding {
12
+ readonly top: number;
13
+ readonly right: number;
14
+ readonly bottom: number;
15
+ readonly left: number;
16
+ }
17
+ /**
18
+ * Resolve a padding config into all four sides.
19
+ *
20
+ * - `undefined` → { 0, 0, 0, 0 }
21
+ * - `number` → equal on all sides
22
+ * - `[v, h]` → top/bottom = v, left/right = h
23
+ * - `[t, r, b, l]` → per-side (CSS order)
24
+ *
25
+ * Returns a frozen singleton for the zero case (no allocation).
26
+ */
27
+ export declare const resolvePadding: (padding: PaddingConfig | undefined) => ResolvedPadding;
28
+ /**
29
+ * Total padding along the main axis (scroll direction).
30
+ * Vertical → top + bottom. Horizontal → left + right.
31
+ */
32
+ export declare const mainAxisPaddingFrom: (p: ResolvedPadding, isHorizontal: boolean) => number;
33
+ /**
34
+ * Total padding along the cross axis (perpendicular to scroll).
35
+ * Vertical → left + right. Horizontal → top + bottom.
36
+ */
37
+ export declare const crossAxisPaddingFrom: (p: ResolvedPadding, isHorizontal: boolean) => number;
38
+ //# sourceMappingURL=padding.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",