@floor/vlist 1.2.6 → 1.2.8

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,21 +2,21 @@
2
2
 
3
3
  Lightweight, high-performance virtual list with zero dependencies and dimension-agnostic architecture.
4
4
 
5
- **v1.2.3** — [Changelog](./changelog.txt)
5
+ **v1.2.8** — [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
8
  [![bundle size](https://img.shields.io/bundlephobia/minzip/@floor/vlist)](https://bundlephobia.com/package/@floor/vlist)
9
- [![tests](https://img.shields.io/badge/tests-2453_passing-brightgreen)](https://github.com/floor/vlist)
9
+ [![tests](https://img.shields.io/badge/tests-2478_passing-brightgreen)](https://github.com/floor/vlist)
10
10
  [![license](https://img.shields.io/npm/l/vlist.svg)](https://github.com/floor/vlist/blob/main/LICENSE)
11
11
 
12
12
  - **Zero dependencies** — no external libraries
13
13
  - **Ultra memory efficient** — ~0.1-0.2 MB constant overhead regardless of dataset size
14
- - **~8.5 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
14
+ - **~8.7 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
15
15
  - **Builder API** — composable features with perfect tree-shaking
16
16
  - **Grid, masonry, table, groups, async, selection, scale** — all opt-in
17
17
  - **Horizontal & vertical** — semantically correct orientation support
18
18
  - **Reverse, page-scroll, wrap** — every layout mode
19
- - **Accessible** — WAI-ARIA, keyboard navigation, focus-visible, screen-reader friendly
19
+ - **Accessible** — WAI-ARIA, keyboard navigation, focus-visible, screen-reader DOM ordering
20
20
  - **React, Vue, Svelte** — framework adapters available
21
21
 
22
22
  **14+ interactive examples → [vlist.dev](https://vlist.dev)**
@@ -24,7 +24,7 @@ Lightweight, high-performance virtual list with zero dependencies and dimension-
24
24
  ## Highlights
25
25
 
26
26
 
27
- - **Data table** — virtualized columns with resize, sort, and horizontal scroll via `withTable()`
27
+ - **Data table** — virtualized columns with resize, sort, horizontal scroll, and grouped sections via `withTable()`
28
28
  - **Dimension-agnostic API** — semantically correct terminology for both orientations
29
29
  - **Performance optimized** — 13-pattern optimization playbook applied across the entire rendering pipeline
30
30
  - **Horizontal groups** — sticky headers work in horizontal carousels
@@ -89,15 +89,15 @@ const list = vlist({
89
89
 
90
90
  | Feature | Size | Description |
91
91
  |---------|------|-------------|
92
- | **Base** | 8.4 KB | Core virtualization |
93
- | `withGrid()` | +3.9 KB | 2D grid layout with context injection |
94
- | `withMasonry()` | +2.4 KB | Pinterest-style masonry layout |
95
- | `withGroups()` | +4.1 KB | Grouped lists with sticky/inline headers |
96
- | `withAsync()` | +3.9 KB | Lazy loading with adapters |
97
- | `withSelection()` | +1.7 KB | Single/multiple selection + keyboard nav |
92
+ | **Base** | 8.7 KB | Core virtualization |
93
+ | `withGrid()` | +4.0 KB | 2D grid layout with context injection |
94
+ | `withMasonry()` | +2.6 KB | Pinterest-style masonry layout |
95
+ | `withGroups()` | +4.2 KB | Grouped lists with sticky/inline headers |
96
+ | `withAsync()` | +4.0 KB | Lazy loading with adapters |
97
+ | `withSelection()` | +1.8 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()` | +4.4 KB | Data table with columns, resize, sort |
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
 
@@ -215,6 +215,7 @@ const list = vlist({
215
215
  | **Horizontal groups** | `orientation: 'horizontal'` + `withGroups()` |
216
216
  | **Horizontal grid** | `orientation: 'horizontal'` + `withGrid()` |
217
217
  | **Data table** | `withTable({ columns, rowHeight, resizable })` |
218
+ | **Grouped table** | `withTable({ columns, rowHeight })` + `withGroups({ ... })` |
218
219
  | **Masonry** | `withMasonry({ columns: 4, gap: 16 })` |
219
220
  | **Page-level scroll** | `withPage()` |
220
221
  | **1M+ items** | `withScale()` — auto-compresses scroll space |
@@ -390,11 +391,11 @@ This makes the codebase clearer and eliminates semantic confusion when working w
390
391
 
391
392
  | Configuration | Gzipped |
392
393
  |---------------|---------|
393
- | Base only | 8.5 KB |
394
- | + Grid | 12.4 KB |
395
- | + Groups | 12.7 KB |
396
- | + Async | 12.4 KB |
397
- | + Table | 12.9 KB |
394
+ | Base only | 8.7 KB |
395
+ | + Grid | 12.8 KB |
396
+ | + Groups | 12.9 KB |
397
+ | + Async | 12.7 KB |
398
+ | + Table | 13.6 KB |
398
399
 
399
400
  ### Memory Efficiency
400
401
 
@@ -445,7 +446,7 @@ const list: VList<Photo> = vlist<Photo>({
445
446
  ## Contributing
446
447
 
447
448
  1. Fork → branch → make changes → add tests → pull request
448
- 2. Run `bun test` (2453 tests) and `bun run build` before submitting
449
+ 2. Run `bun test` (2478 tests) and `bun run build` before submitting
449
450
 
450
451
  ## License
451
452
 
@@ -131,6 +131,7 @@ export interface MDeps<T extends VListItem = VListItem> {
131
131
  readonly isHorizontal: boolean;
132
132
  readonly classPrefix: string;
133
133
  readonly contentSizeHandlers: Array<() => void>;
134
+ readonly idleHandlers: Array<() => void>;
134
135
  readonly afterScroll: Array<(scrollPosition: number, direction: string) => void>;
135
136
  readonly clickHandlers: Array<(event: MouseEvent) => void>;
136
137
  readonly keydownHandlers: Array<(event: KeyboardEvent) => void>;
@@ -123,6 +123,12 @@ export interface BuilderContext<T extends VListItem = VListItem> {
123
123
  * they run after DOM updates are complete.
124
124
  */
125
125
  afterScroll: Array<(scrollPosition: number, direction: string) => void>;
126
+ /**
127
+ * Features register callbacks that run when scrolling becomes idle.
128
+ * Use this for deferred work that should not run on the hot scroll path
129
+ * (e.g. reordering DOM children for accessibility).
130
+ */
131
+ idleHandlers: Array<() => void>;
126
132
  /**
127
133
  * Features register handlers for user interaction events.
128
134
  * These are attached as DOM event listeners during .build().
@@ -38,6 +38,12 @@ export interface GridRenderer<T extends VListItem = VListItem> {
38
38
  updateItemClasses: (index: number, isSelected: boolean, isFocused: boolean) => void;
39
39
  /** Get rendered item element by flat item index */
40
40
  getElement: (index: number) => HTMLElement | undefined;
41
+ /**
42
+ * Reorder DOM children to match logical item order (by data-index).
43
+ * Called on scroll idle so screen readers encounter items in the correct
44
+ * sequence. Items are position:absolute so visual layout is unaffected.
45
+ */
46
+ sortDOM: () => void;
41
47
  /** Update container width (call on resize) */
42
48
  updateContainerWidth: (width: number) => void;
43
49
  /** Clear all rendered items */
@@ -30,5 +30,5 @@ import type { SizeCache } from "../../rendering/sizes";
30
30
  * @param horizontal - Whether using horizontal scrolling mode
31
31
  * @returns StickyHeader instance
32
32
  */
33
- export declare const createStickyHeader: (root: HTMLElement, layout: GroupLayout, sizeCache: SizeCache, config: GroupsConfig, classPrefix: string, horizontal?: boolean) => StickyHeader;
33
+ export declare const createStickyHeader: (root: HTMLElement, layout: GroupLayout, sizeCache: SizeCache, config: GroupsConfig, classPrefix: string, horizontal?: boolean, stickyOffset?: number) => StickyHeader;
34
34
  //# sourceMappingURL=sticky.d.ts.map
@@ -28,6 +28,12 @@ export interface MasonryRenderer<T extends VListItem = VListItem> {
28
28
  render: (getItem: GetItemFn<T>, placements: ItemPlacement[], selectedIds: Set<string | number>, focusedIndex: number) => void;
29
29
  /** Get rendered item element by flat item index */
30
30
  getElement: (index: number) => HTMLElement | undefined;
31
+ /**
32
+ * Reorder DOM children to match logical item order (by data-index).
33
+ * Called on scroll idle so screen readers encounter items in the correct
34
+ * sequence. Items are position:absolute so visual layout is unaffected.
35
+ */
36
+ sortDOM: () => void;
31
37
  /** Clear all rendered items */
32
38
  clear: () => void;
33
39
  /** Destroy renderer and cleanup */
@@ -44,6 +44,8 @@ export interface TableRendererInstance<T extends VListItem = VListItem> {
44
44
  getElement: (index: number) => HTMLElement | undefined;
45
45
  /** Update cell positions and widths after column resize */
46
46
  updateColumnLayout: (layout: TableLayout<T>) => void;
47
+ /** Set the group header check function (called by withGroups integration) */
48
+ setGroupHeaderFn: (fn: ((item: T) => boolean) | null, template: ((key: string, groupIndex: number) => HTMLElement | string) | null) => void;
47
49
  /** Clear all rendered rows */
48
50
  clear: () => void;
49
51
  /** Destroy renderer and cleanup */
@@ -63,5 +65,5 @@ export interface TableRendererInstance<T extends VListItem = VListItem> {
63
65
  * @param getTotalItems - Function to get total item count (for ARIA)
64
66
  * @returns TableRendererInstance
65
67
  */
66
- export declare const createTableRenderer: <T extends VListItem = VListItem>(container: HTMLElement, sizeCache: SizeCache, layout: TableLayout<T>, _columns: TableColumn<T>[], classPrefix: string, ariaIdPrefix: string, getTotalItems: () => number, striped?: boolean) => TableRendererInstance<T>;
68
+ export declare const createTableRenderer: <T extends VListItem = VListItem>(container: HTMLElement, getSizeCache: () => SizeCache, layout: TableLayout<T>, _columns: TableColumn<T>[], classPrefix: string, ariaIdPrefix: string, getTotalItems: () => number, striped?: boolean) => TableRendererInstance<T>;
67
69
  //# sourceMappingURL=renderer.d.ts.map
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:k2,getOwnPropertyNames:B1,getOwnPropertyDescriptor:U1}=Object,Z1=Object.prototype.hasOwnProperty;var l2=new WeakMap,N1=(J)=>{var q=l2.get(J),Q;if(q)return q;if(q=k2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")B1(J).map((j)=>!Z1.call(q,j)&&k2(q,j,{get:()=>J[j],enumerable:!(Q=U1(J,j))||Q.enumerable}));return l2.set(J,q),q};var _1=(J,q)=>{for(var Q in q)k2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var r2=(J,q)=>()=>(J&&(q=J(J=0)),q);var D1=(J,q)=>{let Q=q;return{getOffset:(j)=>j*J,getSize:(j)=>J,indexAtOffset:(j)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(j/J),Q-1))},getTotalSize:()=>Q*J,getTotal:()=>Q,rebuild:(j)=>{Q=j},isVariable:()=>!1}},V1=(J,q)=>{let Q=q,j=new Float64Array(0),Y=(U)=>{Q=U,j=new Float64Array(U+1),j[0]=0;for(let N=0;N<U;N++)j[N+1]=j[N]+J(N)};Y(q);let X=(U)=>{if(Q===0)return 0;if(U<=0)return 0;if(U>=j[Q])return Q-1;let N=0,_=Q-1;while(N<_){let K=N+_+1>>>1;if(j[K]<=U)N=K;else _=K-1}return N};return{getOffset:(U)=>{if(U<=0)return 0;if(U>=Q)return j[Q];return j[U]},getSize:(U)=>J(U),indexAtOffset:(U)=>X(U),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(U)=>Y(U),isVariable:()=>!0}},$0=(J,q)=>{if(typeof J==="number")return D1(J,q);return V1(J,q)},x0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let Y=0,X=0,U=q;while(U<j&&X<Q)X+=J.getSize(U),Y++,U++;return Math.max(1,Y)},t0=(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 U=J.getSize(X);if(Y+U>q)break;Y+=U,j++}return Math.max(j,1)},P2=(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 z2=200,f0=50,KJ=5,BJ=2,UJ=50,k0=16000000,ZJ="x",NJ=20,C2="_isPlaceholder",_J="__placeholder_";var DJ,L0=(J,q)=>{let Q=q.getTotalSize(),j=Q>k0,Y=j?k0: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 O=Q.indexAtOffset(J),b=Q.indexAtOffset(J+q);if(b<j-1)b++;return X.start=Math.max(0,O),X.end=Math.min(j-1,Math.max(0,b)),X}let{virtualSize:U}=Y,_=J/U*j,K=Math.floor(_),D=x0(Q,Math.max(0,K),q,j),$=Math.ceil(_)+D,z=U-q-J;if(z<=q&&z>=-1){let O=t0(Q,q,j),b=Math.max(0,j-O),Z=Math.max(0,Math.min(1,1-z/q));K=Math.floor(K+(b-K)*Z),$=z<=1?j-1:Math.min(j-1,K+D)}return X.start=Math.max(0,K),X.end=Math.min(j-1,Math.max(0,$)),X},VJ=(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},I0=(J,q,Q,j,Y,X,U)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,_=N-Y,K=_-q;if(K<=Y&&K>=-1){if(q>=_-1){let y=Q.getTotalSize()-Q.getOffset(J);return Y-y}let z=t0(Q,Y,j),O=Math.max(0,j-z),Z=q/N*j,F=Math.max(0,Math.min(1,1-K/Y)),H=Q.getOffset(J)-Q.getOffset(O),L=Q.getOffset(J)-P2(Q,Z,j);return L+(H-L)*F}let D=q/N,$=Q.getTotalSize(),T=D*$;return Q.getOffset(J)-T},j2=(J,q,Q,j,Y,X="start")=>{if(j===0)return 0;let U;if(Y.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,Y.virtualSize-Q);U=J/j*Y.virtualSize}else U=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":U-=(Q-N)/2;break;case"end":U-=Q-N;break}let _=Y.virtualSize-Q;return Math.max(0,Math.min(U,_))},GJ=(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)},WJ=(J,q)=>{if(typeof q==="number")return J*q>k0;return q.getTotalSize()>k0},MJ=(J)=>{if(J<=0)return 0;return Math.floor(k0/J)},OJ=(J,q)=>{let Q=L0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var q2=r2(()=>{DJ=k0});var C0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var pJ={};_1(pJ,{createGridRenderer:()=>l0});var y1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},P1=2,l0=(J,q,Q,j,Y,X,U,N,_=!1)=>{let K=y1(),D=new Map,$=X,T=!1,z=null,O=0,b=0,Z="",F=-1,H=(W)=>{if(z&&O===W)return z;return z=L0(W,Q),O=W,z},L={selected:!1,focused:!1},y=(W,S)=>{return L.selected=W,L.focused=S,L},V=`${Y}-item ${Y}-grid-item`,C=`${Y}-item--selected`,p=`${Y}-item--focused`,w=(W,S)=>{if(typeof S==="string")W.innerHTML=S;else W.replaceChildren(S)},M=(W,S,g)=>{W.classList.toggle(C,S),W.classList.toggle(p,g)},I=(W,S)=>{let g=j.getRow(W);if(S){let m=S.totalItems,v=H(m);if(v.isCompressed)return I0(g,S.scrollPosition,Q,m,S.containerSize,v,S.rangeStart)}return Q.getOffset(g)},e=(W,S)=>{let g=T&&j.getCol(W)===0,m=g?0:j.getCol(W),v=g?0:j.getColumnOffset(m,$),x;if(T){let d=j.getRow(W),o=0,i=new Set;for(let Y0=0;Y0<W;Y0++){let U0=j.getRow(Y0);if(U0<d&&!i.has(U0)){let a=Q.getSize(Y0);o+=a,i.add(U0)}}x=o}else x=I(W,S);if(_)return`translate(${Math.round(x)}px, ${Math.round(v)}px)`;return`translate(${Math.round(v)}px, ${Math.round(x)}px)`},c=(W,S)=>{W.style.transform=S},l=(W,S)=>{let g=W.dataset.id?.startsWith("__group_header"),m=g?$:j.getColumnWidth($),v;if(T||g)v=Q.getSize(S)-j.gap;else{let x=j.getRow(S);v=Q.getSize(x)-j.gap}if(_)W.style.width=`${v}px`,W.style.height=`${m}px`;else W.style.width=`${m}px`,W.style.height=`${v}px`},u=(W,S,g,m,v)=>{let x=K.acquire(),d=y(g,m);if(x.className=V,x.dataset.index=String(W),x.dataset.id=String(S.id),x.dataset.row=String(j.getRow(W)),x.dataset.col=String(j.getCol(W)),x.ariaSelected=String(g),N)x.id=`${N}-item-${W}`;if(U){let i=U();if(i!==F)F=i,Z=String(i);x.setAttribute("aria-setsize",Z),x.setAttribute("aria-posinset",String(W+1))}l(x,W);let o=q(S,W,d);return w(x,o),M(x,g,m),c(x,v),{element:x,lastItemId:S.id,lastSelected:g,lastFocused:m,lastTransform:v,lastSeenFrame:b}},B=(W,S,g,m,v)=>{if(b++,S.start===0&&W.length>0)T=C0(W[0]);for(let[o,i]of D)if(o>=S.start&&o<=S.end)i.lastSeenFrame=b;else if(b-i.lastSeenFrame>P1)K.release(i.element),D.delete(o);let x=!1;if(U){let o=U();if(o!==F)F=o,Z=String(o),x=!0}let d=null;for(let o=S.start;o<=S.end;o++){let i=o-S.start,Y0=W[i];if(!Y0){console.warn(`⚠️ RENDER: Missing item at index ${o} (range: ${S.start}-${S.end}, items.length: ${W.length})`);continue}let U0=g.has(Y0.id),a=o===m,s=D.get(o);if(s){let J0=s.lastItemId!==Y0.id,K0=s.lastSelected!==U0,_0=s.lastFocused!==a;if(J0||K0||_0){if(J0){let j0=y(U0,a),E0=q(Y0,o,j0);w(s.element,E0),s.element.dataset.id=String(Y0.id),s.element.dataset.row=String(j.getRow(o)),s.element.dataset.col=String(j.getCol(o)),l(s.element,o)}M(s.element,U0,a),s.element.ariaSelected=String(U0),s.lastItemId=Y0.id,s.lastSelected=U0,s.lastFocused=a}let Z0=e(o,v);if(s.lastTransform!==Z0)c(s.element,Z0),s.lastTransform=Z0;if(x)s.element.setAttribute("aria-setsize",Z)}else{let J0=e(o,v),K0=u(o,Y0,U0,a,J0);if(!d)d=document.createDocumentFragment();d.appendChild(K0.element),D.set(o,K0)}}if(d)J.appendChild(d)},k=(W)=>{for(let[S,g]of D){let m=e(S,W);if(g.lastTransform!==m)c(g.element,m),g.lastTransform=m}},E=(W,S,g,m)=>{let v=D.get(W);if(!v)return;let x=v.lastItemId!==S.id,d=v.lastSelected!==g,o=v.lastFocused!==m;if(x||d||o){let i=y(g,m),Y0=q(S,W,i);w(v.element,Y0),M(v.element,g,m),v.element.dataset.id=String(S.id),v.element.ariaSelected=String(g),l(v.element,W),v.lastItemId=S.id,v.lastSelected=g,v.lastFocused=m}},A=(W,S,g)=>{let m=D.get(W);if(!m)return;let v=m.lastSelected!==S,x=m.lastFocused!==g;if(v||x)M(m.element,S,g),m.lastSelected=S,m.lastFocused=g},f=(W)=>{return D.get(W)?.element},G=(W)=>{if(Math.abs(W-$)<1)return;$=W;for(let[S,g]of D){l(g.element,S);let m=e(S);c(g.element,m),g.lastTransform=m}},P=()=>{for(let[,W]of D)K.release(W.element);D.clear()};return{render:B,updatePositions:k,updateItem:E,updateItemClasses:A,getElement:f,updateContainerWidth:G,clear:P,destroy:()=>{P(),K.clear()}}};var D2=r2(()=>{q2()});var a2=2,s2=(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}},y2=(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,U=J.samples[X],N=q-U.position,_=Q-U.time;J.velocity=_>0?Math.abs(N)/_:0}return J.lastPosition=q,J.lastTime=Q,J};var e0=(J,q)=>{let Q=new Map,j=(X)=>{let U=Q.get(X);return U!==void 0?U:J},Y=$0(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 U of Q.keys())if(U>=X)Q.delete(U)}Y=$0(j,X)},isVariable(){return!0},setMeasuredSize(X,U){Q.set(X,U)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var J2=()=>{let J={},q=(N,_)=>{if(!J[N])J[N]=new Set;return J[N].add(_),()=>Q(N,_)},Q=(N,_)=>{J[N]?.delete(_)};return{on:q,off:Q,emit:(N,_)=>{J[N]?.forEach((K)=>{try{K(_)}catch(D){console.error(`[vlist] Error in event handler for "${String(N)}":`,D)}})},once:(N,_)=>{let K=(D)=>{Q(N,K),_(D)};return q(N,K)},clear:(N)=>{if(N)delete J[N];else for(let _ in J)delete J[_]},listenerCount:(N)=>{return J[N]?.size??0}}};var n2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},o2=(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 U=document.createElement("div");if(U.className=`${q}-content`,U.style.position="relative",j)U.style.height="100%";else U.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.setAttribute("role","listbox"),Q)N.setAttribute("aria-label",Q);if(j)N.setAttribute("aria-orientation","horizontal");if(N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return U.appendChild(N),X.appendChild(U),Y.appendChild(X),J.appendChild(Y),{root:Y,viewport:X,content:U,items:N}};var i2=(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 t2=(J,q,Q,j,Y)=>{if(j===0||q===0){Y.start=0,Y.end=0;return}let X=Q.indexAtOffset(J),U=x0(Q,X,q,j),N=X+U;Y.start=Math.max(0,X),Y.end=Math.min(j-1,Math.max(0,N))},e2=(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)},JJ=(J,q,Q,j,Y)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),U=q.getOffset(X),N=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),K;switch(Y){case"center":K=U-(Q-N)/2;break;case"end":K=U-Q+N;break;default:K=U}return Math.max(0,Math.min(K,_))};var R2=(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}},S0=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,U,N)=>{if(j(),Math.abs(U-X)<1){J.scrollTo(U);return}let _=performance.now(),K=(D)=>{let $=D-_,T=Math.min($/N,1),z=X+(U-X)*R2(T);if(J.scrollTo(z),q(),T<1)Q=requestAnimationFrame(K);else Q=null};Q=requestAnimationFrame(K)},cancelScroll:j}};var QJ=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:Y,rawConfig:X,rendered:U,pool:N,sharedState:_,isHorizontal:K,classPrefix:D,contentSizeHandlers:$,afterScroll:T,clickHandlers:z,keydownHandlers:O,resizeHandlers:b,destroyHandlers:Z,methods:F,onScrollFrame:H,resizeObserver:L,renderRange:y}=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:(V,C,p,w,M)=>{J.ss=p,J.fi=w,J.ffn()},updateItemClasses:(V,C,p)=>{let w=U.get(V);if(!w)return;w.classList.toggle(`${D}-item--selected`,C),w.classList.toggle(`${D}-item--focused`,p),w.ariaSelected=C?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(V)=>U.get(V)??null,clear:()=>{},destroy:()=>{}}},set renderer(V){},get dataManager(){return J.dm},set dataManager(V){J.dm=V},get scrollController(){return J.sc},set scrollController(V){J.sc=V},state:_,getContainerWidth(){return J.cw},afterScroll:T,clickHandlers:z,keydownHandlers:O,resizeHandlers:b,contentSizeHandlers:$,destroyHandlers:Z,methods:F,replaceTemplate(V){J.at=V},replaceRenderer(V){},replaceDataManager(V){J.dm=V},replaceScrollController(V){J.sc=V},getItemsForRange(V){let{dm:C,it:p}=J,w=[];for(let M=V.start;M<=V.end;M++){let I=C?C.getItem(M):p[M];if(I)w.push(I)}return w},getAllLoadedItems(){let V=J.dm;if(V){let C=V.getTotal(),p=[];for(let w=0;w<C;w++){let M=V.getItem(w);if(M)p.push(M)}return p}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let V=J.hc;return{isCompressed:!1,actualSize:V.getTotalSize(),virtualSize:V.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:y.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,V]of U)V.remove(),N.release(V);U.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(V,C){J.rfn=V,J.ffn=C},setVirtualTotalFn(V){J.vtf=V},rebuildSizeCache(V){J.hc.rebuild(V??J.vtf())},setSizeConfig(V){J.hc=$0(V,J.vtf())},updateContentSize(V){let C=`${V}px`;if(K)Q.content.style.width=C;else Q.content.style.height=C},updateCompressionMode(){},setVisibleRangeFn(V){J.gvr=V},setScrollToPosFn(V){J.gsp=V},setPositionElementFn(V){J.pef=V},setScrollFns(V,C){J.sgt=V,J.sst=(p)=>{C(p),H()}},setScrollTarget(V){J.st.removeEventListener("scroll",H),J.st=V,J.st.addEventListener("scroll",H,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(V){J.gcw=V.width,J.gch=V.height,J.cw=V.width(),J.ch=V.height(),_.viewportState.containerSize=K?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}}},jJ=(J,q,Q)=>{let{rendered:j,itemState:Y,contentSizeHandlers:X,applyTemplate:U,updateContentSize:N}=q,_=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let K=0;K<X.length;K++)X[K]();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:(K)=>J.it[K],isItemLoaded:(K)=>K>=0&&K<J.it.length&&J.it[K]!==void 0,getItemsInRange:(K,D)=>{let $=J.it,T=[],z=Math.max(0,K),O=Math.min(D,$.length-1);for(let b=z;b<=O;b++)T.push($[b]);return T},setTotal:(K)=>{},setItems:(K,D=0,$)=>{let T=J.it;if(D===0&&($!==void 0||T.length===0))J.it=K;else{let z=D+K.length;if(T.length<z)T.length=z;for(let O=0;O<K.length;O++)T[D+O]=K[O]}if(J.ii)_()},updateItem:(K,D)=>{let $=J.it;if(K<0||K>=$.length)return!1;let T=$[K];if(!T)return!1;$[K]={...T,...D};let z=j.get(K);if(z)U(z,J.at($[K],K,Y)),z.dataset.id=String($[K].id);return!0},removeItem:(K)=>{if(K<0||K>=J.it.length)return!1;if(J.it.splice(K,1),J.ii)_();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},qJ=(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 G1=3,W1="vlist",XJ=150,M1=0,YJ=(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 U=new Map,N=!1,_={use(K){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return U.set(K.name,K),_},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,O1(J,U,q,Y,X??null)}};return _};function O1(J,q,Q,j,Y){let{item:X,items:U,overscan:N=G1,classPrefix:_=W1,ariaLabel:K,reverse:D=!1,scroll:$}=J,T=$,z=T?.wheel??!0,O=T?.wrap??!1,b=D,Z=`${_}-${M1++}`,F=j??Y,H=j==null&&Y!=null,L=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,y=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,V={overscan:N,classPrefix:_,reverse:b,wrap:O,horizontal:Q,ariaIdPrefix:Z},C=Array.from(q.values()).sort((R,r)=>(R.priority??50)-(r.priority??50)),p=new Set(C.map((R)=>R.name));for(let R of C)if(R.conflicts){for(let r of R.conflicts)if(p.has(r))throw Error(`[vlist/builder] ${R.name} and ${r} cannot be combined`)}if(b){if(p.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let w=n2(J.container),M=o2(w,_,K,Q);if(T?.wheel===!1)if(Q)M.viewport.style.overflowX="hidden";else M.viewport.style.overflow="hidden";if(T?.scrollbar==="none")M.viewport.classList.add(`${_}-viewport--no-scrollbar`);let I=J2(),e=U||[],c=typeof F==="function"&&(q.has("withGrid")||q.has("withMasonry")),l=H?e0(Y,e.length):$0(F,c?0:e.length),u=i2(),B={it:e,hc:l,ch:M.viewport.clientHeight,cw:M.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:s2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>M.viewport.scrollLeft:()=>M.viewport.scrollTop,sst:Q?(R)=>{M.viewport.scrollLeft=R}:(R)=>{M.viewport.scrollTop=R},sab:(R=2)=>{let r=B.hc.getTotalSize();return B.ls+B.ch>=r-R},sic:!1,rfn:null,ffn:null,gvr:(R,r,n,t,q0)=>{t2(R,r,n,t,q0)},gsp:(R,r,n,t,q0)=>{return JJ(R,r,n,t,q0)},pef:null,at:X.template,vre:!0,st:M.viewport,wh:null,gcw:()=>B.cw,gch:()=>B.ch};B.vtf=()=>B.dm?B.dm.getTotal():B.it.length;let k=null,E=null,A=!1,f={start:0,end:0},G={start:0,end:0},P={start:-1,end:-1},h={viewportState:{scrollPosition:0,containerSize:Q?B.cw:B.ch,totalSize:B.hc.getTotalSize(),actualSize:B.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},W=new Map,S=H?new WeakMap:null,g=H?l:null,m=null,v=0,x=!1,d=()=>{if(!H)return;if(x){let R=B.sgt(),r=Q?M.viewport.scrollWidth-M.viewport.clientWidth:M.viewport.scrollHeight-M.viewport.clientHeight,n=r>0&&R>=r-2;if(A0(),x=!1,n){let t=Math.max(0,B.hc.getTotalSize()-(Q?B.cw:B.ch));if(t>R)B.sst(t),B.ls=t,B.rfn()}}};if(H&&g&&S)m=new ResizeObserver((R)=>{if(B.id)return;let r=!1,n=f.start;for(let t of R){let q0=S.get(t.target);if(q0===void 0)continue;let Q0=Q?t.borderBoxSize[0].inlineSize:t.borderBoxSize[0].blockSize;if(!g.isMeasured(q0)){let X0=g.getSize(q0);if(g.setMeasuredSize(q0,Q0),r=!0,q0<n&&Q0!==X0)v+=Q0-X0;m.unobserve(t.target);let N0=t.target;if(Q)N0.style.width=`${Q0}px`;else N0.style.height=`${Q0}px`}}if(!r)return;if(g.rebuild(B.vtf()),B.hc=g,v!==0){let t=B.sgt();B.sst(t+v),B.ls=t+v,v=0}if(A)x=!0;else{let t=B.sgt(),q0=Q?M.viewport.scrollWidth-M.viewport.clientWidth:M.viewport.scrollHeight-M.viewport.clientHeight,Q0=q0>0&&t>=q0-2;if(A0(),x=!1,Q0){let X0=Math.max(0,B.hc.getTotalSize()-(Q?B.cw:B.ch));if(X0>t)B.sst(X0),B.ls=X0}}P.start=-1,P.end=-1,B.rfn()});let o={selected:!1,focused:!1},i=`${_}-item`,Y0=X.striped===!0,U0=`${_}-item--odd`,a=[],s=[],J0=[],K0=[],_0=[],Z0=[],j0=new Map,E0=null,D0=null,H0=!1,P0=()=>{if(H0)return;H0=!0,E0=j0.get("_getSelectedIds")??null,D0=j0.get("_getFocusedIndex")??null},V0=(R,r)=>{if(typeof r==="string")R.innerHTML=r;else R.replaceChildren(r)},T0=(R,r)=>{let n=Math.round(B.hc.getOffset(r));if(Q)R.style.transform=`translateX(${n}px)`;else R.style.transform=`translateY(${n}px)`};B.pef=T0;let G0=(R,r)=>{let n=u.acquire();n.className=i;let t=!H||g&&g.isMeasured(R);if(Q){if(t)n.style.width=`${B.hc.getSize(R)}px`;else n.style.width="";if(y!=null)n.style.height=`${y}px`}else if(t)n.style.height=`${B.hc.getSize(R)}px`;else n.style.height="";if(n.dataset.index=String(R),n.dataset.id=String(r.id),n.ariaSelected="false",n.id=`${Z}-item-${R}`,B.la=String(B.vtf()),n.setAttribute("aria-setsize",B.la),n.setAttribute("aria-posinset",String(R+1)),String(r.id).startsWith("__placeholder_"))n.classList.add(`${_}-item--placeholder`);if(Y0)n.classList.toggle(U0,(R&1)===1);return V0(n,B.at(r,R,o)),B.pef(n,R),n},A0=()=>{let R=`${B.hc.getTotalSize()}px`;if(Q)M.content.style.width=R;else M.content.style.height=R},w0=()=>{if(B.id)return;P0();let R=E0?E0():B.ss,r=D0?D0():B.fi,n=B.vtf(),t=Q?B.cw:B.ch;if(B.gvr(B.ls,t,B.hc,n,f),e2(f,N,n,G),G.start===P.start&&G.end===P.end){if(B.sic)for(let[B0,W0]of W)B.pef(W0,B0);return}let q0=String(n),Q0=q0!==B.la;B.la=q0;for(let[B0,W0]of W)if(B0<G.start||B0>G.end)W0.remove(),u.release(W0),W.delete(B0);let X0=document.createDocumentFragment(),N0=[],F0=[];for(let B0=G.start;B0<=G.end;B0++){let W0=B.dm?B.dm.getItem(B0):B.it[B0];if(W0===void 0)continue;let O0=W.get(B0);if(O0){let b0=O0.dataset.id,u0=String(W0.id);if(b0!==u0){let K1=b0?.startsWith("__placeholder_"),d2=u0.startsWith("__placeholder_");V0(O0,B.at(W0,B0,o)),O0.dataset.id=u0;let c2=!H||g&&g.isMeasured(B0);if(Q)O0.style.width=c2?`${B.hc.getSize(B0)}px`:"";else O0.style.height=c2?`${B.hc.getSize(B0)}px`:"";if(d2)O0.classList.add(`${_}-item--placeholder`);else O0.classList.remove(`${_}-item--placeholder`);if(K1&&!d2)O0.classList.add(`${_}-item--replaced`),setTimeout(()=>{O0.classList.remove(`${_}-item--replaced`)},300)}B.pef(O0,B0);let i0=R.has(W0.id),Y1=B0===r;if(O0.classList.toggle(`${_}-item--selected`,i0),O0.classList.toggle(`${_}-item--focused`,Y1),O0.ariaSelected=i0?"true":"false",Q0)O0.setAttribute("aria-setsize",B.la)}else{let b0=G0(B0,W0);F0.push({index:B0,element:b0});let u0=R.has(W0.id),i0=B0===r;if(u0)b0.classList.add(`${_}-item--selected`),b0.ariaSelected="true";if(i0)b0.classList.add(`${_}-item--focused`);X0.appendChild(b0),N0.push({index:B0,element:b0})}}if(N0.length>0){M.items.appendChild(X0);for(let{index:B0,element:W0}of N0)W.set(B0,W0)}if(H&&m&&g&&S){for(let{index:B0,element:W0}of F0)if(!g.isMeasured(B0))S.set(W0,B0),m.observe(W0)}P.start=G.start,P.end=G.end,h.lastRenderRange.start=G.start,h.lastRenderRange.end=G.end,h.viewportState.scrollPosition=B.ls,h.viewportState.visibleRange.start=f.start,h.viewportState.visibleRange.end=f.end,h.viewportState.renderRange.start=G.start,h.viewportState.renderRange.end=G.end,I.emit("range:change",{range:{start:G.start,end:G.end}})},lJ=()=>{P.start=-1,P.end=-1,B.rfn()};B.rfn=w0,B.ffn=lJ;let H2=()=>{if(B.id)return;let R=B.sgt(),r=R>=B.ls?"down":"up";if(B.vt=y2(B.vt,R),!M.root.classList.contains(`${_}--scrolling`))M.root.classList.add(`${_}--scrolling`);A=!0,B.ls=R,B.rfn(),I.emit("scroll",{scrollPosition:R,direction:r}),I.emit("velocity:change",{velocity:B.vt.velocity,reliable:B.vt.sampleCount>=a2});for(let n=0;n<a.length;n++)a[n](R,r);if(E)clearTimeout(E);E=setTimeout(()=>{M.root.classList.remove(`${_}--scrolling`),A=!1,B.vt.velocity=0,B.vt.sampleCount=0,I.emit("velocity:change",{velocity:0,reliable:!1}),d()},T?.idleTimeout??XJ)},v0=null;if(B.st.addEventListener("scroll",H2,{passive:!0}),z&&!Q&&!L)v0=(R)=>{if(h.viewportState.isCompressed)return;let r=M.viewport.scrollWidth>M.viewport.clientWidth;if(r&&Math.abs(R.deltaX)>Math.abs(R.deltaY))return;if(R.preventDefault(),r&&R.deltaX!==0)M.viewport.scrollLeft+=R.deltaX;let n=B.sgt(),t=R.deltaY,q0=M.viewport.scrollHeight-M.viewport.clientHeight,Q0=Math.max(0,Math.min(n+t,q0));if(Math.abs(Q0-n)<1){if(B.vt.velocity!==0)B.vt.velocity=0,B.vt.sampleCount=0,I.emit("velocity:change",{velocity:0,reliable:!1});return}B.sst(Q0),B.ls=Q0,B.vt=y2(B.vt,Q0),B.rfn();let X0=Q0>=n?"down":"up";if(I.emit("scroll",{scrollPosition:Q0,direction:X0}),!M.root.classList.contains(`${_}--scrolling`))M.root.classList.add(`${_}--scrolling`);if(A=!0,E)clearTimeout(E);E=setTimeout(()=>{M.root.classList.remove(`${_}--scrolling`),A=!1,B.vt.velocity=0,B.vt.sampleCount=0,I.emit("velocity:change",{velocity:0,reliable:!1}),d()},T?.idleTimeout??XJ)},B.wh=v0,M.viewport.addEventListener("wheel",v0,{passive:!1});else if(Q&&z)v0=(R)=>{if(R.deltaX)return;R.preventDefault(),M.viewport.scrollLeft+=R.deltaY},B.wh=v0,M.viewport.addEventListener("wheel",v0,{passive:!1});let u2=(R)=>{let n=R.target.closest("[data-index]");if(n){let t=parseInt(n.dataset.index??"-1",10);if(t>=0){let q0=B.dm?.getItem(t)??B.it[t];if(q0){if(q0.__groupHeader)return;I.emit("item:click",{item:q0,index:t,event:R})}}}for(let t=0;t<s.length;t++)s[t](R)},rJ=(R)=>{let n=R.target.closest("[data-index]");if(n){let t=parseInt(n.dataset.index??"-1",10);if(t>=0){let q0=B.dm?.getItem(t)??B.it[t];if(q0){if(q0.__groupHeader)return;I.emit("item:dblclick",{item:q0,index:t,event:R})}}}},g2=(R)=>{for(let r=0;r<J0.length;r++)J0[r](R)};M.items.addEventListener("click",u2),M.items.addEventListener("dblclick",rJ),M.root.addEventListener("keydown",g2);let b2=new ResizeObserver((R)=>{if(B.id)return;for(let r of R){let n=r.contentRect.height,t=r.contentRect.width,q0=Q?t:n,Q0=Q?B.cw:B.ch;if(B.cw=t,B.ch=n,Math.abs(q0-Q0)>1){if(h.viewportState.containerSize=q0,B.ii)A0(),B.rfn(),I.emit("resize",{height:n,width:t})}if(B.ii)for(let X0=0;X0<K0.length;X0++)K0[X0](t,n)}});if(B.vre)b2.observe(M.viewport);let $2={dom:M,emitter:I,resolvedConfig:V,rawConfig:J,rendered:W,pool:u,itemState:o,sharedState:h,renderRange:G,isHorizontal:Q,classPrefix:_,contentSizeHandlers:_0,afterScroll:a,clickHandlers:s,keydownHandlers:J0,resizeHandlers:K0,destroyHandlers:Z0,methods:j0,onScrollFrame:H2,resizeObserver:b2,applyTemplate:V0,updateContentSize:A0},M0=QJ(B,$2);B.dm=jJ(B,$2,M0),B.sc=qJ(B,$2);let x2=new Map;for(let R of C)if(R.methods)for(let r of R.methods){let n=x2.get(r);if(n)throw Error(`[vlist/builder] Method "${r}" is registered by both "${n}" and "${R.name}"`);x2.set(r,R.name)}for(let R of C)R.setup(M0);if(!j0.has("_getFocusedIndex")){let R=-1,r=`${_}-item--focused`,n=(Q0,X0)=>{let N0=B.vtf();if(X0<0||X0>=N0)return;R=X0,M.root.setAttribute("aria-activedescendant",`${Z}-item-${X0}`);let F0=Q?B.cw:B.ch;if(B.sst(B.gsp(X0,B.hc,F0,N0,"center")),B.ls=B.sgt(),B.rfn(),Q0>=0&&Q0!==X0)W.get(Q0)?.classList.remove(r);W.get(X0)?.classList.add(r)},t=()=>{if(B.id)return;if(!M.root.matches(":focus-visible"))return;let Q0=B.vtf();if(Q0===0)return;n(-1,R>=0?Math.min(R,Q0-1):0)};M.root.addEventListener("focusin",t);let q0=(Q0)=>{if(B.id)return;let X0=Q0.relatedTarget;if(X0&&M.root.contains(X0))return;if(R>=0)W.get(R)?.classList.remove(r);M.root.removeAttribute("aria-activedescendant")};M.root.addEventListener("focusout",q0),J0.push((Q0)=>{if(B.id)return;let X0=B.vtf();if(X0===0)return;let N0=R,F0=N0;switch(Q0.key){case"ArrowUp":F0=N0<=0?X0-1:N0-1;break;case"ArrowDown":F0=N0>=X0-1?0:N0+1;break;case"Home":F0=0;break;case"End":F0=X0-1;break;default:return}Q0.preventDefault(),n(N0,F0)}),Z0.push(()=>{M.root.removeEventListener("focusin",t),M.root.removeEventListener("focusout",q0)})}if(B.ii=!0,M0.state.isInitialized=!0,A0(),B.rfn(),b&&B.it.length>0){let R=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(R),B.ls=R,B.rfn()}let aJ=(R)=>{M0.dataManager.setItems(R,0,R.length)},sJ=b?(R)=>{let r=B.sab(2),n=B.it.length;if(M0.dataManager.setItems(R,n),r&&B.it.length>0){let t=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(t),B.ls=t,B.rfn()}}:(R)=>{let r=B.it.length;M0.dataManager.setItems(R,r)},nJ=b?(R)=>{let r=B.sgt(),n=B.hc.getTotalSize(),t=[...B.it];M0.dataManager.clear(),M0.dataManager.setItems([...R,...t],0);let Q0=B.hc.getTotalSize()-n;if(Q0>0)B.sst(r+Q0),B.ls=r+Q0}:(R)=>{let r=[...B.it];M0.dataManager.clear(),M0.dataManager.setItems([...R,...r],0)},oJ=(R,r)=>{M0.dataManager.updateItem(R,r)},iJ=(R)=>{M0.dataManager.removeItem(R)},tJ=async()=>{if(M0.dataManager.reload)await M0.dataManager.reload()},o0=()=>{if(k!==null)cancelAnimationFrame(k),k=null},eJ=(R,r,n)=>{if(o0(),Math.abs(r-R)<1){B.sst(r),B.ls=r,B.rfn();return}let t=performance.now(),q0=(Q0)=>{let X0=Q0-t,N0=Math.min(X0/n,1),F0=R+(r-R)*R2(N0);if(B.sst(F0),B.ls=F0,B.rfn(),N0<1)k=requestAnimationFrame(q0);else k=null};k=requestAnimationFrame(q0)},J1=(R,r)=>{let{align:n,behavior:t,duration:q0}=R0(r),Q0=B.vtf(),X0=R;if(O&&Q0>0)X0=(X0%Q0+Q0)%Q0;let N0=B.gsp(X0,B.hc,B.ch,Q0,n);if(t==="smooth")eJ(B.sgt(),N0,q0);else o0(),B.sst(N0)},Q1=()=>B.sgt(),j1=(R,r)=>{return I.on(R,r)},q1=(R,r)=>{I.off(R,r)},X1=()=>{if(B.id)return;if(B.id=!0,M0.state.isDestroyed=!0,M.items.removeEventListener("click",u2),M.root.removeEventListener("keydown",g2),B.st.removeEventListener("scroll",H2),b2.disconnect(),m)m.disconnect(),m=null;if(B.wh)M.viewport.removeEventListener("wheel",B.wh);if(E)clearTimeout(E);for(let R=0;R<Z0.length;R++)Z0[R]();for(let R of C)if(R.destroy)R.destroy();o0();for(let[,R]of W)R.remove(),u.release(R);W.clear(),u.clear(),I.clear(),M.root.remove()},m2={get element(){return M.root},get items(){if(j0.has("_getItems"))return j0.get("_getItems")();return B.it},get total(){if(j0.has("_getTotal"))return j0.get("_getTotal")();return B.vtf()},setItems:j0.has("setItems")?j0.get("setItems"):aJ,appendItems:j0.has("appendItems")?j0.get("appendItems"):sJ,prependItems:j0.has("prependItems")?j0.get("prependItems"):nJ,updateItem:j0.has("updateItem")?j0.get("updateItem"):oJ,removeItem:j0.has("removeItem")?j0.get("removeItem"):iJ,reload:j0.has("reload")?j0.get("reload"):tJ,scrollToIndex:j0.has("scrollToIndex")?j0.get("scrollToIndex"):J1,cancelScroll:j0.has("cancelScroll")?j0.get("cancelScroll"):o0,getScrollPosition:j0.has("getScrollPosition")?j0.get("getScrollPosition"):Q1,on:j1,off:q1,destroy:X1};for(let[R,r]of j0){if(R.charCodeAt(0)===95||R==="setItems"||R==="appendItems"||R==="prependItems"||R==="updateItem"||R==="removeItem"||R==="reload"||R==="scrollToIndex"||R==="scrollToItem"||R==="cancelScroll"||R==="getScrollPosition")continue;m2[R]=r}return m2}q2();var p0=(J,q,Q={},j="vlist",Y=!1)=>{let{autoHide:X=!0,autoHideDelay:U=1000,minThumbSize:N=30,showOnHover:_=!0,hoverZoneWidth:K=16,showOnViewportEnter:D=!0}=Q,$=0,T=0,z=0,O=0,b=!1,Z=!1,F=0,H=0,L=0,y=null,V=!1,C=null,p=null,w=Y?"width":"height",M=Y?"translateX":"translateY",I=Y?(i)=>i.clientX:(i)=>i.clientY,e=Y?"left":"top",c=document.createElement("div"),l=document.createElement("div"),u=_?document.createElement("div"):null,B=()=>{if(c.className=`${j}-scrollbar`,l.className=`${j}-scrollbar-thumb`,Y)c.classList.add(`${j}-scrollbar--horizontal`);if(c.appendChild(l),J.appendChild(c),u){if(u.className=`${j}-scrollbar-hover`,Y)u.classList.add(`${j}-scrollbar-hover--horizontal`),u.style.height=`${K}px`;else u.style.width=`${K}px`;J.appendChild(u)}},k=()=>{if(y)clearTimeout(y),y=null},E=()=>{if(!X)return;k(),y=setTimeout(f,U)},A=()=>{if($<=T)return;if(k(),!V)c.classList.add(`${j}-scrollbar--visible`),V=!0;if(X&&!b&&!Z)E()},f=()=>{if(b||Z)return;c.classList.remove(`${j}-scrollbar--visible`),V=!1},G=(i,Y0)=>{$=i,T=Y0;let U0=$>T;if(c.style.display=U0?"":"none",!U0){f();return}let a=T/$;z=Math.max(N,a*T),l.style[w]=`${z}px`,O=T-z,P(L)},P=(i)=>{if(L=i,$<=T||O<=0)return;let Y0=$-T,a=Math.min(1,Math.max(0,i/Y0))*O;l.style.transform=`${M}(${a}px)`},h=(i)=>{if(i.target===l)return;let Y0=c.getBoundingClientRect(),s=I(i)-Y0[e]-z/2,K0=Math.max(0,Math.min(s,O))/O,_0=$-T,Z0=K0*_0;q(Z0),A()},W=(i)=>{i.preventDefault(),i.stopPropagation(),b=!0,F=I(i),H=L,k(),c.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",S),document.addEventListener("mouseup",g)},S=(i)=>{if(!b)return;let Y0=I(i)-F,U0=O>0?Y0/O:0,a=$-T,s=U0*a,J0=Math.max(0,Math.min(H+s,a)),_0=J0/a*O;if(l.style.transform=`${M}(${_0}px)`,p=J0,C===null)C=requestAnimationFrame(()=>{if(p!==null)q(p);C=null})},g=()=>{if(b=!1,C!==null)cancelAnimationFrame(C),C=null;if(p!==null)q(p),p=null;if(c.classList.remove(`${j}-scrollbar--dragging`),X&&!Z)E();document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",g)},m=()=>{if(D)A()},v=()=>{if(!b){if(Z=!1,X)E()}},x=()=>{Z=!0,k(),A()},d=()=>{if(Z=!1,!b&&X)E()},o=()=>{if(k(),C!==null)cancelAnimationFrame(C),C=null;if(c.removeEventListener("click",h),c.removeEventListener("mouseenter",x),c.removeEventListener("mouseleave",d),l.removeEventListener("mousedown",W),J.removeEventListener("mouseenter",m),J.removeEventListener("mouseleave",v),document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",g),u){if(u.removeEventListener("mouseenter",x),u.removeEventListener("mouseleave",d),u.parentNode)u.parentNode.removeChild(u)}if(c.parentNode)c.parentNode.removeChild(c)};if(B(),c.addEventListener("click",h),c.addEventListener("mouseenter",x),c.addEventListener("mouseleave",d),l.addEventListener("mousedown",W),J.addEventListener("mouseenter",m),J.addEventListener("mouseleave",v),u)u.addEventListener("mouseenter",x),u.addEventListener("mouseleave",d);return{show:A,hide:f,updateBounds:G,updatePosition:P,isVisible:()=>V,destroy:o}};var AJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:X,horizontal:U}=Y;if(q=p0(j.viewport,(K)=>Q.scrollController.scrollTo(K),J??{},X,U),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let _=q;Q.afterScroll.push((K,D)=>{_.updatePosition(K),_.show()}),Q.resizeHandlers.push((K,D)=>{if(_){let $=Q.getCachedCompression();_.updateBounds($.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let K=Q.getCachedCompression();_.updateBounds(K.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var EJ=(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}},X2=(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,U=J.samples[X],N=q-U.position,_=Q-U.time;J.velocity=_>0?N/_:0}return J.lastPosition=q,J.lastTime=Q,J},A1=(J)=>J.sampleCount>=3,FJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:Y=!1,idleTimeout:X=150,onScroll:U,onIdle:N,scrollElement:_,horizontal:K=!1}=q,D=!!_,$=0,T=0,z=D?K?window.innerWidth:window.innerHeight:K?J.clientWidth:J.clientHeight,O=q.compressed??!1,b=q.compression,Z=EJ(),F=!1,H=null,y=Y2(()=>{let v=K?J.scrollLeft:J.scrollTop,x=v>=$?"down":"up";if(Z=X2(Z,v),$=v,U)U({scrollTop:$,direction:x,velocity:Z.velocity});I()}),C=Y2(()=>{let v=J.getBoundingClientRect(),x=K?Math.max(0,-v.left):Math.max(0,-v.top),d=x>=$?"down":"up";if(Z=X2(Z,x),$=x,!F)F=!0;if(U)U({scrollTop:$,direction:d,velocity:Z.velocity});I()}),p=(v)=>{v.preventDefault()},w=(v)=>{if(v.deltaX)return;v.preventDefault(),J.scrollLeft+=v.deltaY},M=(v)=>{if(!O)return;v.preventDefault();let x=(K?v.deltaX||v.deltaY:v.deltaY)*j,d=$+x;if(Y)d=$+x*0.3;if(d=Math.max(0,Math.min(d,T)),d!==$){let i=d>=$?"down":"up";if(Z=X2(Z,d),$=d,!F)F=!0;if(U)U({scrollTop:$,direction:i,velocity:Z.velocity});I()}},I=()=>{if(H)clearTimeout(H);H=setTimeout(()=>{if(F=!1,Z=EJ($),N)N()},X)},e=(v)=>{if(O)return;if(O=!0,b=v,T=v.virtualSize-z,D)return;if(y.cancel(),J.removeEventListener("scroll",y),!Q)J.removeEventListener("wheel",p);else if(K)J.removeEventListener("wheel",w);if(K)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",M,{passive:!1});let x=K?J.scrollLeft:J.scrollTop;if(x>0){let d=K?b?.actualSize??J.scrollWidth:b?.actualSize??J.scrollHeight;$=x/d*T}if(K)J.scrollLeft=0;else J.scrollTop=0},c=()=>{if(!O)return;if(O=!1,D){b=void 0;return}if(J.removeEventListener("wheel",M),K)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",y,{passive:!0}),!Q)J.addEventListener("wheel",p,{passive:!1});else if(K)J.addEventListener("wheel",w,{passive:!1});if(b&&$>0){let x=$/T*(b.actualSize-z);if(K)J.scrollLeft=x;else J.scrollTop=x}b=void 0},l=()=>{if(D||O)return $;return K?J.scrollLeft:J.scrollTop},u=(v,x=!1)=>{let d=Math.max(0,Math.min(v,T||1/0));if(D){let o=J.getBoundingClientRect();if(K){let i=o.left+window.scrollX;window.scrollTo({left:i+d,behavior:x?"smooth":"auto"})}else{let i=o.top+window.scrollY;window.scrollTo({top:i+d,behavior:x?"smooth":"auto"})}}else if(O){if(d===$)return;let i=d>=$?"down":"up";if(Z=X2(Z,d),$=d,!F)F=!0;if(U)U({scrollTop:$,direction:i,velocity:Z.velocity});I()}else if(K)J.scrollTo({left:d,behavior:x?"smooth":"auto"});else J.scrollTo({top:d,behavior:x?"smooth":"auto"})},B=(v)=>{u(l()+v)},k=()=>{return l()<=0},E=(v=0)=>{let x=l(),d=D||O?T:K?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return x>=d-v},A=()=>{let v=l(),x=D||O?T:K?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(x<=0)return 0;return Math.min(1,Math.max(0,v/x))},f=(v)=>{if(v.compression)b=v.compression,T=b.virtualSize-z},G=()=>O,P=()=>Math.abs(Z.velocity),h=()=>A1(Z),W=()=>F,S=()=>D,g=(v)=>{if(z=v,b)T=b.virtualSize-z},m=()=>{if(H)clearTimeout(H);if(D)C.cancel(),window.removeEventListener("scroll",C);else y.cancel(),J.removeEventListener("scroll",y),J.removeEventListener("wheel",M),J.removeEventListener("wheel",p),J.removeEventListener("wheel",w)};if(D){if(O&&b)T=b.virtualSize-z;window.addEventListener("scroll",C,{passive:!0})}else if(O&&b){if(T=b.virtualSize-z,K)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",M,{passive:!1})}else{if(K)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",y,{passive:!0}),!Q)J.addEventListener("wheel",p,{passive:!1});else if(K)J.addEventListener("wheel",w,{passive:!1})}return{getScrollTop:l,scrollTo:u,scrollBy:B,isAtTop:k,isAtBottom:E,getScrollPercentage:A,getVelocity:P,isTracking:h,isScrolling:W,updateConfig:f,enableCompression:e,disableCompression:c,isCompressed:G,isWindowMode:S,updateContainerHeight:g,destroy:m}},Y2=(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 E1=0.65,F1=0.5,L1=0.95,T1=0.1,H1=5,b1=100,LJ=()=>{let J=null,q=0,Q=!1,j=0,Y=null,X=0,U=0,N=null,_=[];return{name:"withScale",priority:20,setup(K){let{dom:D,config:$}=K,{classPrefix:T,horizontal:z}=$,O=()=>{let H=K.getVirtualTotal(),L=L0(H,K.sizeCache);if(L.isCompressed&&!Q){Q=!0,K.scrollController.enableCompression(L),K.updateContentSize(L.virtualSize),K.setScrollFns(()=>q,(c)=>{if(q=c,j=c,Y!==null)cancelAnimationFrame(Y),Y=null});let y=()=>{let c=j-q;if(Math.abs(c)<F1)q=j,Y=null;else{q+=c*E1;let u=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize;q=Math.max(0,Math.min(q,u)),Y=requestAnimationFrame(y)}K.scrollController.scrollTo(q)},V=D.viewport,C=(c)=>{c.preventDefault();let u=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+c.deltaY,u)),Y===null)Y=requestAnimationFrame(y)};V.addEventListener("wheel",C,{passive:!1});let p=()=>{if(N!==null)cancelAnimationFrame(N),N=null},w=(c)=>{if(p(),Y!==null)cancelAnimationFrame(Y),Y=null;let l=c.touches[0];if(!l)return;let u=z?l.clientX:l.clientY;X=u,U=q,_=[{time:performance.now(),y:u}]},M=(c)=>{c.preventDefault();let l=c.touches[0];if(!l)return;let u=z?l.clientX:l.clientY,B=performance.now();if(_.push({time:B,y:u}),_.length>H1)_.shift();let k=X-u,A=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize,f=Math.max(0,Math.min(U+k,A));q=f,j=f,K.scrollController.scrollTo(f)},I=(c)=>{let l=performance.now(),u=_.filter((A)=>l-A.time<b1),B=0;if(u.length>=2){let A=u[0],f=u[u.length-1],G=f.time-A.time;if(G>0)B=(A.y-f.y)/G}if(_=[],Math.abs(B)<T1)return;let k=B*16,E=()=>{if(k*=L1,Math.abs(k)<0.5){N=null;return}let f=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize,G=q+k;if(G=Math.max(0,Math.min(G,f)),G<=0&&k<0||G>=f&&k>0){q=G,j=G,K.scrollController.scrollTo(G),N=null;return}q=G,j=G,K.scrollController.scrollTo(G),N=requestAnimationFrame(E)};N=requestAnimationFrame(E)};if(V.addEventListener("touchstart",w,{passive:!0}),V.addEventListener("touchmove",M,{passive:!1}),V.addEventListener("touchend",I,{passive:!0}),V.addEventListener("touchcancel",I,{passive:!0}),K.destroyHandlers.push(()=>{if(V.removeEventListener("wheel",C),V.removeEventListener("touchstart",w),V.removeEventListener("touchmove",M),V.removeEventListener("touchend",I),V.removeEventListener("touchcancel",I),p(),Y!==null)cancelAnimationFrame(Y),Y=null}),!D.viewport.querySelector(`.${T}-scrollbar`)){if(J=p0(D.viewport,(l)=>K.scrollController.scrollTo(l),{},T,z),!D.viewport.classList.contains(`${T}-viewport--custom-scrollbar`))D.viewport.classList.add(`${T}-viewport--custom-scrollbar`);J.updateBounds(L.virtualSize,K.state.viewportState.containerSize);let c=J;K.afterScroll.push((l,u)=>{if(c)c.updatePosition(l),c.show()}),K.resizeHandlers.push((l,u)=>{if(c){let B=K.getCachedCompression();c.updateBounds(B.virtualSize,K.state.viewportState.containerSize)}})}}else if(!L.isCompressed&&Q)Q=!1,K.scrollController.disableCompression(),K.updateContentSize(L.actualSize);else if(L.isCompressed)K.scrollController.updateConfig({compression:L}),K.updateContentSize(L.virtualSize);if(J)J.updateBounds(L.virtualSize,K.state.viewportState.containerSize);K.state.cachedCompression={state:L,totalItems:H}};K.updateCompressionMode=O;let b=K.getCachedCompression.bind(K);K.getCachedCompression=()=>{if(K.state.cachedCompression)return K.state.cachedCompression.state;return b()},K.setVisibleRangeFn((H,L,y,V,C)=>{Z=null,F=null;let p=L0(V,y);Q2(H,L,y,V,p,C)}),K.setScrollToPosFn((H,L,y,V,C)=>{let p=L0(V,L);return j2(H,L,y,V,p,C)});let Z=null,F=null;K.setPositionElementFn((H,L)=>{let y=K.getVirtualTotal(),V=L0(y,K.sizeCache);if(V.isCompressed){let C=K.scrollController.getScrollTop();if(Z===null||L<F)F=L,Z=Math.round(I0(L,C,K.sizeCache,y,K.state.viewportState.containerSize,V));let p=Z+K.sizeCache.getOffset(L)-K.sizeCache.getOffset(F),w=K.config.horizontal;H.style.transform=w?`translateX(${p}px)`:`translateY(${p}px)`}else{let C=Math.round(K.sizeCache.getOffset(L)),p=K.config.horizontal;H.style.transform=p?`translateX(${C}px)`:`translateY(${C}px)`}}),O(),K.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(N!==null)cancelAnimationFrame(N),N=null}}};var K2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,X=new Map,U=0,N=0,_=(B)=>{let k=X.get(B);if(!k)k={items:Array(q),count:0,lastAccess:Date.now()},X.set(B,k);else k.lastAccess=Date.now();return k},K=(B)=>{return Math.floor(B/q)},D=(B)=>{return B%q},$=()=>U,T=(B)=>{U=B},z=(B)=>{if(B<0||B>=U)return;let k=K(B),E=X.get(k);if(!E)return;return E.items[D(B)]},O=(B)=>{if(B<0||B>=U)return!1;let k=K(B),E=X.get(k);if(!E)return!1;return E.items[D(B)]!==void 0},b=(B,k)=>{let E=K(B),A=_(E),f=D(B),G=A.items[f]===void 0;if(A.items[f]=k,G)A.count++,N++;if(B>=U)U=B+1},Z=(B,k)=>{for(let E=0;E<k.length;E++){let A=k[E];if(A!==void 0)b(B+E,A)}},F=(B)=>{if(B<0||B>=U)return!1;let k=K(B),E=X.get(k);if(!E)return!1;let A=D(B);if(E.items[A]===void 0)return!1;if(E.items[A]=void 0,E.count--,N--,E.count===0)X.delete(k);return!0},H=(B,k)=>{let E=[];for(let A=B;A<=k&&A<U;A++)E.push(z(A));return E},L=(B,k)=>{for(let E=B;E<=k&&E<U;E++)if(!O(E))return!1;return!0},y=()=>{let B=[],k=null,E=Array.from(X.keys()).sort((A,f)=>A-f);for(let A of E){let f=X.get(A);if(!f)continue;let G=A*q;for(let P=0;P<q;P++){let h=G+P;if(h>=U)break;if(f.items[P]!==void 0)if(k===null)k={start:h,end:h};else if(h===k.end+1)k.end=h;else B.push(k),k={start:h,end:h};else if(k!==null)B.push(k),k=null}}if(k!==null)B.push(k);return B},V=(B,k)=>{let E=[],A=null;for(let f=B;f<=k&&f<U;f++)if(!O(f))if(A===null)A={start:f,end:f};else A.end=f;else if(A!==null)E.push(A),A=null;if(A!==null)E.push(A);return E},C=(B)=>{return X.has(B)},p=(B)=>{let k=X.get(B);if(k)k.lastAccess=Date.now()},w=(B,k)=>{if(B>k||X.size===0)return;let E=Date.now(),A=K(Math.max(0,B)),f=K(Math.min(U-1,k));for(let G=A;G<=f;G++){let P=X.get(G);if(P)P.lastAccess=E}},M=(B,k)=>{if(N<=Q)return 0;let E=Math.max(0,B-j),A=Math.min(U-1,k+j),f=K(E),G=K(A),P=0,h=[];for(let[W,S]of X)if(W<f||W>G)P+=S.count,h.push(W),N-=S.count,X.delete(W);if(P>0&&Y)Y(P,h);return P},I=()=>{if(N<=Q)return 0;let B=Array.from(X.entries()).sort(([,A],[,f])=>A.lastAccess-f.lastAccess),k=0,E=[];for(let[A,f]of B){if(N<=Q)break;k+=f.count,N-=f.count,E.push(A),X.delete(A)}if(k>0&&Y)Y(k,E);return k},e=()=>{return{totalItems:U,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:U>0?1-N/U:1}},c=()=>N,l=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:$,setTotal:T,get:z,has:O,set:b,setRange:Z,delete:F,getRange:H,isRangeLoaded:L,getLoadedRanges:y,findUnloadedRanges:V,getChunkIndex:K,isChunkLoaded:C,touchChunk:p,touchChunksForRange:w,evictDistant:M,evictToLimit:I,getStats:e,getCachedCount:c,clear:l,reset:()=>{l(),U=0}}},B2=(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},m0=(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 U=[],N=B2(q),_=X.start;for(let K of N){if(K.end<_)continue;if(K.start>X.end)break;if(K.start>_)U.push({start:_,end:Math.min(K.start-1,X.end)});if(_=K.end+1,_>X.end)break}if(_<=X.end)U.push({start:_,end:X.end});return U};var U2=(J={})=>{let{maskCharacter:q=ZJ,maxSampleSize:Q=NJ}=J,j=[],Y=!1,X=0,U=($)=>{if(Y||$.length===0)return;let T=Math.min($.length,Q);for(let z=0;z<T;z++){let O=$[z];if(!O||typeof O!=="object")continue;let b={};for(let[Z,F]of Object.entries(O)){if(Z.startsWith("_")||Z==="id")continue;b[Z]=String(F??"").length}if(Object.keys(b).length>0)j.push(b)}Y=!0},N=()=>Y,_=($)=>{let T={id:`${_J}${X++}`,[C2]:!0,_index:$};if(j.length===0)return T.label=q.repeat(12),T;let z=j[$%j.length];for(let[O,b]of Object.entries(z))T[O]=q.repeat(Math.max(1,b));return T};return{analyzeStructure:U,hasAnalyzedStructure:N,generate:_,generateRange:($,T)=>{let z=[];for(let O=$;O<=T;O++)z.push(_(O));return z},clear:()=>{j=[],Y=!1,X=0}}},z0=(J)=>{if(!J||typeof J!=="object")return!1;return J[C2]===!0},w2=(J)=>{return J.filter((q)=>!z0(q))};var k1=50,Z2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:Y,placeholder:X,pageSize:U=k1,onStateChange:N,onItemsLoaded:_,onItemsEvicted:K}=J,D=K2({...Y,onEvict:(a,s)=>{K?.(a),V()}}),$=null,T=()=>{if(!$)$=U2(X);return $},z=new Map,O=!1,b,Z=!0,F,H=[],L=0,y=new Map,V=()=>{N?.(u())},C=()=>{z.clear();let a=D.getLoadedRanges();for(let s of a)for(let J0=s.start;J0<=s.end;J0++){let K0=D.get(J0);if(K0&&!z0(K0))z.set(K0.id,J0)}},p=(a,s)=>{if(!z0(s))z.set(s.id,a)},w=(a)=>{z.delete(a)},M=(a,s)=>{return`${a}-${s}`},I=()=>D.getTotal(),e=()=>D.getCachedCount(),c=()=>O,l=()=>Z,u=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:O,pendingRanges:H,error:b,hasMore:Z,cursor:F}),B=()=>D,k=()=>T(),E=(a)=>{let s=D.get(a);if(s!==void 0)return s;if(a>=0&&a<D.getTotal())return T().generate(a);return},A=(a)=>{let s=z.get(a);if(s===void 0)return;return D.get(s)},f=(a)=>{return z.get(a)??-1},G=(a)=>{let s=D.get(a);return s!==void 0&&!z0(s)},P=(a,s)=>{let J0=[],K0=D.getTotal(),_0=0,Z0=0;D.touchChunksForRange(a,Math.min(s,K0-1));for(let j0=a;j0<=s&&j0<K0;j0++){let E0=D.get(j0);if(E0!==void 0)J0.push(E0),_0++;else J0.push(T().generate(j0)),Z0++}return J0},h=(a)=>{D.setTotal(a),Z=D.getCachedCount()<a,V()},W=(a,s=0,J0)=>{if($&&!$.hasAnalyzedStructure()&&a.length>0)$.analyzeStructure(a);for(let K0=0;K0<a.length;K0++){let _0=a[K0];if(_0!==void 0){let Z0=s+K0;D.set(Z0,_0),p(Z0,_0)}}if(J0!==void 0)D.setTotal(J0);else if(s+a.length>D.getTotal())D.setTotal(s+a.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)Z=!1;_?.(a,s,D.getTotal()),V()},S=(a,s)=>{let J0=z.get(a);if(J0===void 0)return!1;let K0=D.get(J0);if(!K0)return!1;let _0={...K0,...s};if(D.set(J0,_0),s.id!==void 0&&s.id!==a)w(a),p(J0,_0);return V(),!0},g=(a)=>{let s=z.get(a);if(s===void 0)return!1;D.delete(s),w(a);let J0=D.getTotal();if(J0>0)D.setTotal(J0-1);return V(),!0},m=async(a,s)=>{if(!q)return;let J0=M(a,s);if(y.has(J0))return;let K0=D.getLoadedRanges(),_0=m0({start:a,end:s},K0,D.chunkSize);if(_0.length===0)return;let Z0=D.chunkSize,j0=[];for(let D0 of _0){let H0=Math.floor(D0.start/Z0),P0=Math.floor(D0.end/Z0);for(let V0=H0;V0<=P0;V0++){let T0=V0*Z0,G0=T0+Z0-1,A0=M(T0,G0);if(!j0.some((w0)=>w0.start===T0)&&!y.has(A0))j0.push({start:T0,end:G0})}}let E0=[];for(let D0 of _0){let H0=Math.floor(D0.start/Z0),P0=Math.floor(D0.end/Z0);for(let V0=H0;V0<=P0;V0++){let T0=V0*Z0,G0=T0+Z0-1,A0=M(T0,G0);if(y.has(A0)){let w0=y.get(A0);if(!E0.includes(w0))E0.push(w0)}}}for(let D0 of j0){let H0=M(D0.start,D0.end),P0=(async()=>{H.push(D0),O=!0,b=void 0,V();try{let V0=D0.end-D0.start+1,T0={offset:D0.start,limit:V0,cursor:void 0},G0=await q.read(T0);if(W(G0.items,D0.start,G0.total),G0.cursor)F=G0.cursor;let A0=D0.start+G0.items.length;if(A0>=L){if(L=A0,G0.hasMore!==void 0)Z=G0.hasMore;else if(G0.total!==void 0)Z=A0<G0.total}}catch(V0){b=V0 instanceof Error?V0:Error(String(V0))}finally{y.delete(H0),H=H.filter((V0)=>V0.start!==D0.start||V0.end!==D0.end),O=y.size>0,V()}})();y.set(H0,P0),E0.push(P0)}await Promise.all(E0)},v=async(a,s)=>{if(D.isRangeLoaded(a,s))return;await m(a,s)},x=async()=>{if(!q)return;await m(0,U-1)},d=async()=>{if(!q||O||!Z)return!1;let a=D.getCachedCount(),s=D.getTotal(),J0=a,K0=Math.min(J0+U-1,s>0?s-1:J0+U-1);if(J0>=s&&s>0)return Z=!1,!1;return await m(J0,K0),D.getCachedCount()>a},o=async()=>{if(D.clear(),D.setTotal(0),z.clear(),$)$.clear();y.clear(),H=[],O=!1,F=void 0,Z=!0,L=0,b=void 0,V()},i=(a,s)=>{if(D.evictDistant(a,s)>0)C()},Y0=()=>{D.clear(),z.clear(),F=void 0,b=void 0,H=[],O=!1,V()},U0=()=>{if(D.reset(),z.clear(),$)$.clear();F=void 0,Z=!0,L=0,b=void 0,H=[],O=!1,V()};if(Q&&Q.length>0)W(Q,0,j??Q.length);else if(j!==void 0)D.setTotal(j),V();return{getState:u,getTotal:I,getCached:e,getIsLoading:c,getHasMore:l,getStorage:B,getPlaceholders:k,getItem:E,getItemById:A,getIndexById:f,isItemLoaded:G,getItemsInRange:P,setTotal:h,setItems:W,updateItem:S,removeItem:g,loadRange:m,ensureRange:v,loadInitial:x,loadMore:d,reload:o,evictDistant:i,clear:Y0,reset:U0}};var TJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:Y,autoLoad:X=!0}=J,U=Q?.cancelThreshold??KJ,N=Q?.preloadThreshold??BJ,_=Q?.preloadAhead??UJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(K){let{emitter:D}=K,$=K.config.reverse,T=Z2({adapter:q,...Y!==void 0&&{initialTotal:Y},pageSize:j?.chunkSize??f0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(K.state.isInitialized){let w=K.getVirtualTotal();K.sizeCache.rebuild(w),K.updateCompressionMode();let M=K.getCachedCompression();K.state.viewportState.totalSize=M.virtualSize,K.state.viewportState.actualSize=M.actualSize,K.state.viewportState.isCompressed=M.isCompressed,K.state.viewportState.compressionRatio=M.ratio,K.updateContentSize(M.virtualSize),K.renderIfNeeded()}},onItemsLoaded:(w,M,I)=>{if(K.state.isInitialized)K.forceRender(),D.emit("load:end",{items:w,total:I,offset:M})}});K.replaceDataManager(T);let z=null,O=null,b=0,Z=!1,F=null,H=120,L=(w=!1)=>{if(Z=!1,O=null,w)z=null;if(F!==null)clearTimeout(F),F=null},y=()=>{if(O){let w=O;O=null,K.dataManager.ensureRange(w.start,w.end).catch((M)=>{D.emit("error",{error:M,context:"ensureRange"})})}};K.afterScroll.push((w,M)=>{if(K.state.isDestroyed)return;let I=K.scrollController.getVelocity(),c=K.scrollController.isTracking()&&I<=U;if(b>U&&I<=U)Z=!0;else if(Z&&I>U)L();if(Z&&I<0.5)L(!0);if(b=I,(K.scrollController.isAtTop()||K.scrollController.isAtBottom())&&(Z||O))L(!0),c=!0;let u=Z&&I>0.5;if(c&&!K.dataManager.getIsLoading()&&K.dataManager.getHasMore()){if($){if(w<z2)D.emit("load:start",{offset:K.dataManager.getCached(),limit:f0}),K.dataManager.loadMore().catch((E)=>{D.emit("error",{error:E,context:"loadMore"})})}else if(K.state.viewportState.totalSize-w-K.state.viewportState.containerSize<z2)D.emit("load:start",{offset:K.dataManager.getCached(),limit:f0}),K.dataManager.loadMore().catch((A)=>{D.emit("error",{error:A,context:"loadMore"})})}let{renderRange:B}=K.state.viewportState;if(!z||B.start!==z.start||B.end!==z.end){if(z={start:B.start,end:B.end},c&&!u){if(O=null,F!==null)clearTimeout(F),F=null;let{start:E,end:A}=B,f=K.getVirtualTotal();if(I>N)if(M==="down")A=Math.min(B.end+_,f-1);else E=Math.max(B.start-_,0);K.dataManager.ensureRange(E,A).catch((G)=>{D.emit("error",{error:G,context:"ensureRange"})})}else if(O={start:B.start,end:B.end},u){if(F!==null)clearTimeout(F);F=setTimeout(()=>{F=null,y(),L()},H)}}});let V=200,C=null;K.afterScroll.push((w,M)=>{if(C!==null)clearTimeout(C);C=setTimeout(()=>{C=null,y(),L()},V)}),K.destroyHandlers.push(()=>{if(C!==null)clearTimeout(C),C=null;L()});let p=()=>{if(K.state.isDestroyed)return;z=null;let{renderRange:w}=K.state.viewportState;if(w.end>0)K.dataManager.ensureRange(w.start,w.end).catch((M)=>{D.emit("error",{error:M,context:"ensureRange"})});y()};if(window.addEventListener("online",p),K.destroyHandlers.push(()=>{window.removeEventListener("online",p)}),D.on("load:start",()=>{K.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{K.dom.root.removeAttribute("aria-busy")}),K.methods.set("loadVisibleRange",async()=>{z=null,O=null,K.forceRender();let{renderRange:w}=K.state.viewportState;if(w.end>0)D.emit("load:start",{offset:w.start,limit:w.end-w.start+1}),await K.dataManager.ensureRange(w.start,w.end)}),K.methods.set("reload",async()=>{z=null,O=null,K.invalidateRendered(),await K.dataManager.reload(),D.emit("load:start",{offset:0,limit:f0}),await K.dataManager.loadInitial(),K.forceRender();let{renderRange:w}=K.state.viewportState;if(w.end>0)await K.dataManager.ensureRange(w.start,w.end)}),X)D.emit("load:start",{offset:0,limit:f0}),K.dataManager.loadInitial().catch((w)=>{D.emit("error",{error:w,context:"loadInitial"})});else if(Y!==void 0)K.dataManager.setTotal(Y)}}};var HJ=()=>{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 K=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-K.left);else return Math.max(0,-K.top)},(K)=>{let D=Q.viewport.getBoundingClientRect();if(Y.horizontal){let $=D.left+window.scrollX;window.scrollTo($+K,window.scrollY)}else{let $=D.top+window.scrollY;window.scrollTo(window.scrollX,$+K)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:U,innerWidth:N}=window,_=()=>{let{innerWidth:K,innerHeight:D}=window,$=Y.horizontal?K:D,T=Y.horizontal?N:U;if(Math.abs($-T)<=1)return;U=D,N=K,j.viewportState.containerSize=D,X.emit("resize",{width:K,height:D});for(let z=0;z<q.resizeHandlers.length;z++)q.resizeHandlers[z](K,D);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var v2=(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},bJ=(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},$J=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),Y=0,X=0;for(let U=1;U<J;U++){let N=q(U);if(N!==j){let _=U-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:_}),X=X+1+_,j=N,Y=U}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:J-Y}),Q},d0=(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 U=0;U<X.count;U++)j[Y]=J[X.firstDataIndex+U],Y++}return j},c0=(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)}},N2=(J,q)=>{let Q=$J(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:(T)=>{if(Q.length===0)return{type:"item",dataIndex:T,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let z=v2(Q,T),O=Q[z];if(T===O.headerLayoutIndex)return{type:"header",group:O};let b=T-O.headerLayoutIndex-1;return{type:"item",dataIndex:O.firstDataIndex+b,group:O}},layoutToDataIndex:(T)=>{if(Q.length===0)return T;let z=v2(Q,T),O=Q[z];if(T===O.headerLayoutIndex)return-1;let b=T-O.headerLayoutIndex-1;return O.firstDataIndex+b},dataToLayoutIndex:(T)=>{if(Q.length===0)return T;let z=bJ(Q,T),O=Q[z],b=T-O.firstDataIndex;return O.headerLayoutIndex+1+b},getGroupAtLayoutIndex:(T)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let z=v2(Q,T);return Q[z]},getGroupAtDataIndex:(T)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let z=bJ(Q,T);return Q[z]},getHeaderHeight:typeof Y==="number"?(T)=>Y:(T)=>{let z=Q[T];if(!z)return 0;return Y(z.key,T)},rebuild:(T)=>{Q=$J(T,q.getGroupForIndex),j=T+Q.length}}};var _2=(J,q,Q,j,Y,X=!1)=>{let U=document.createElement("div");if(U.className=`${Y}-sticky-header`,U.setAttribute("role","presentation"),U.setAttribute("aria-hidden","true"),U.style.position="absolute",U.style.zIndex="5",U.style.pointerEvents="none",U.style.willChange="transform",U.style.overflow="hidden",X)U.style.top="0",U.style.bottom="0",U.style.left="0";else U.style.top="0",U.style.left="0",U.style.right="0";J.insertBefore(U,J.firstChild);let N=-1,_=!1,K=0,D=(Z)=>{if(Z===N)return;N=Z;let F=q.groups;if(Z<0||Z>=F.length){U.textContent="";return}let H=F[Z],L=j.headerTemplate(H.key,H.groupIndex),y=q.getHeaderHeight(Z);if(X)U.style.width=`${y}px`;else U.style.height=`${y}px`;if(typeof L==="string")U.innerHTML=L;else U.replaceChildren(L)},$=(Z)=>{let F=q.groups;if(F.length===0){z();return}let H=Q.getOffset(F[0].headerLayoutIndex);if(Z<H){z();return}let L=0,y=F.length-1;while(L<y){let M=L+y+1>>>1;if(Q.getOffset(F[M].headerLayoutIndex)<=Z)L=M;else y=M-1}let V=L;if(!_)T();D(V);let C=q.getHeaderHeight(V),p=0,w=V+1;if(w<F.length){let I=Q.getOffset(F[w].headerLayoutIndex)-Z;if(I<C)p=I-C}if(p!==K)if(K=p,p===0)U.style.transform="";else{let M=Math.round(p);U.style.transform=X?`translateX(${M}px)`:`translateY(${M}px)`}},T=()=>{if(_)return;_=!0,U.style.display=""},z=()=>{if(!_)return;_=!1,U.style.display="none",N=-1,K=0,U.style.transform=""},O=()=>{let Z=N;if(N=-1,Z>=0)D(Z)},b=()=>{U.remove(),N=-1,_=!1};return U.style.display="none",{update:$,refresh:O,show:T,hide:z,destroy:b}};var kJ=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let U=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,N)),X},yJ=(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},PJ=(J,q,Q,j,Y,X)=>{if(j===0)return 0;let U=Math.max(0,Math.min(J,j-1)),N=q.getOffset(U),_=q.getSize(U),K=q.getTotalSize(),D=Math.max(0,K-Q),$;switch(X){case"center":$=N-Q/2+_/2;break;case"end":$=N-Q+_;break;case"start":default:$=N;break}return Math.max(0,Math.min($,D))},RJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},zJ=(J,q)=>{return q.getTotalSize()},CJ=(J,q)=>{return q.getOffset(J)},wJ=(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,U=PJ)=>{return U(J,q,Q,j,X,Y)},vJ=(J,q)=>{return J.start===q.start&&J.end===q.end},SJ=(J,q)=>{return J>=q.start&&J<=q.end},fJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var IJ=(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}};q2();var hJ=(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:U,config:N,rawConfig:_}=X,{classPrefix:K}=N,$=_.item.height;j=_.items?[..._.items]:[];let T=j.length,z={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=N2(T,z),Y=d0(j,q.groups);let O=c0(q,$);X.setSizeConfig(O),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length);let b=_.item.template,{headerTemplate:Z}=J,F=(w,M,I)=>{if(C0(w))return Z(w.groupKey,w.groupIndex);return b(w,M,I)},H=X.methods.get("_getGridLayout"),L=X.methods.get("_replaceGridRenderer"),y=X.methods.get("_updateGridLayoutForGroups");if(H&&L){if(y)y((e)=>{let c=Y[e];return!!(c&&C0(c))});let{createGridRenderer:w}=(D2(),N1(pJ)),M=H(),I=w(U.items,F,X.sizeCache,M,K,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);L(I)}else X.replaceTemplate(F);if(U.root.classList.add(`${K}--grouped`),J.sticky!==!1){Q=_2(U.root,q,X.sizeCache,{...z,sticky:z.sticky??!1},K,N.horizontal);let w=Q;X.afterScroll.push((M,I)=>{w.update(M)}),Q.update(X.scrollController.getScrollTop())}let V=()=>{if(!q)return;q.rebuild(j.length),Y=d0(j,q.groups);let w=c0(q,$);if(X.setSizeConfig(w),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};X.methods.set("setItems",(w)=>{j=w.slice(),V()}),X.methods.set("appendItems",(w)=>{j.push(...w),V()}),X.methods.set("prependItems",(w)=>{j.unshift(...w),V()}),X.methods.set("removeItem",(w)=>{j=j.filter((M)=>M.id!==w),V()});let{animateScroll:C,cancelScroll:p}=S0(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(w,M)=>{let I=q.dataToLayoutIndex(w),{align:e,behavior:c,duration:l}=R0(M),u=X.dataManager.getTotal(),B=y0(I,X.sizeCache,X.state.viewportState.containerSize,u,e,X.getCachedCompression());if(c==="smooth")C(X.scrollController.getScrollTop(),B,l);else p(),X.scrollController.scrollTo(B)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(p(),Q)Q.destroy(),Q=null;U.root.classList.remove(`${K}--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=(O)=>{if(O<=0)return 0;if(!j)return Math.ceil(O/q);let b=0,Z=0,F=0;for(let H=0;H<O;H++)if(j(H)){if(F++,Z>0)b++,Z=0;b++,Z=0}else if(Z++,Z>=q)b++,Z=0;if(Z>0)b++;return b},U=(O)=>{return Y.row=N(O),Y.col=_(O),Y},N=(O)=>{if(!j)return Math.floor(O/q);let b=0,Z=0;for(let F=0;F<=O;F++)if(j(F)){if(Z>0)b++,Z=0;if(F===O)return b;b++,Z=0}else{if(F===O)return b;if(Z++,Z>=q)b++,Z=0}return console.warn(`⚠️ getRow(${O}) fell through - returning ${b}`),b},_=(O)=>{if(!j)return O%q;if(j(O))return 0;let b=0;for(let Z=0;Z<=O;Z++)if(j(Z))b=0;else{if(Z===O)return b;if(b++,b>=q)b=0}return b},K=(O,b,Z)=>{if(Z<=0)return{start:0,end:-1};if(!j){let V=Math.max(0,O*q),C=Math.min(Z-1,(b+1)*q-1);return{start:V,end:C}}let F=-1,H=-1,L=0,y=0;for(let V=0;V<Z;V++){if(j(V)){if(y>0)L++,y=0;if(L>=O&&L<=b){if(F===-1)F=V;H=V}L++,y=0}else{if(L>=O&&L<=b){if(F===-1)F=V;H=V}if(y++,y>=q)L++,y=0}if(L>b&&y===0)break}if(F===-1)return{start:0,end:-1};return{start:F,end:H}},D=(O,b,Z)=>{if(b<0||b>=q)return-1;let F=O*q+b;if(F<0||F>=Z)return-1;return F},$=(O)=>{let b=(q-1)*Q;return Math.max(0,(O-b)/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:U,getRow:N,getCol:_,getItemRange:K,getItemIndex:D,getColumnWidth:$,getColumnOffset:(O,b)=>{let Z=$(b);return O*(Z+Q)}}};D2();var R1=new Set,uJ=(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:U,rawConfig:N}=j,{classPrefix:_}=U;if(U.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let K=U.horizontal,D=()=>K?Y.viewport.clientHeight:j.getContainerWidth(),$=N.items?.some((G)=>G.__groupHeader===!0),T={columns:J.columns,gap:J.gap??0};if($)T.isHeaderFn=(G)=>{let P=j.dataManager.getItem(G);return!!(P&&P.__groupHeader===!0)};q=V2(T);let z=q.gap;j.setVirtualTotalFn(()=>{let G=j.dataManager.getTotal();return q.getTotalRows(G)});let O=N.item,b=U.horizontal?O.width:O.height,Z={containerWidth:D(),columns:q.columns,gap:q.gap},F={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof b==="function")j.setSizeConfig((G)=>{let P=Z.containerWidth-2,h=(Z.columns-1)*Z.gap;return F.containerWidth=Z.containerWidth,F.columns=Z.columns,F.gap=Z.gap,F.columnWidth=(P-h)/Z.columns,F.row=q.getRow(G),F.column=q.getCol(G),F.totalRows=q.getTotalRows(j.dataManager.getTotal()),F.totalColumns=Z.columns,b(G,F)+Z.gap});else if(z>0)j.setSizeConfig(b+z);if(j.rebuildSizeCache(),z>0){let G=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let P=G();return P>0?P-Z.gap:0}}Y.root.classList.add(`${_}--grid`);let H=D(),L=N.item.template,y=()=>{Q=l0(Y.items,L,j.sizeCache,q,_,H,()=>j.dataManager.getTotal(),U.ariaIdPrefix,U.horizontal),j.replaceRenderer(Q)};y(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>T),j.methods.set("_replaceGridRenderer",(G)=>{Q=G}),j.methods.set("_updateGridLayoutForGroups",(G)=>{q.update({isHeaderFn:G});let P=j.dataManager.getTotal(),h=0;for(let W=0;W<P;W++)if(q.getCol(W)===0){let S=j.sizeCache.getSize(W);h+=S}if(j.sizeCache.getTotalSize=()=>h,U.horizontal)j.dom.content.style.width=`${h}px`;else j.dom.content.style.height=`${h}px`;y()}),j.methods.set("updateGrid",(G)=>{if(G.columns!==void 0){if(!Number.isInteger(G.columns)||G.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");T.columns=G.columns}if(G.gap!==void 0){if(G.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");T.gap=G.gap}if(q)q.update(T);let P=D();if(Z.containerWidth=P,Z.columns=T.columns,Z.gap=T.gap??0,Q)Q.updateContainerWidth(P);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let h=0;h<j.contentSizeHandlers.length;h++)j.contentSizeHandlers[h]();if(Q)Q.clear();j.forceRender()});let V=null,C=null,p=!1,w=()=>{if(p)return;p=!0,V=j.methods.get("_getSelectedIds")??null,C=j.methods.get("_getFocusedIndex")??null},M=-1,I=-1,e=!0,c=U.overscan??3,l={start:0,end:0},u={start:0,end:0},B=()=>{if(j.state.isDestroyed)return;let G=j.scrollController.getScrollTop(),P=j.state.viewportState.containerSize;if(!e&&G===M&&P===I)return;M=G,I=P,e=!1;let h=j.getVirtualTotal();if(h===0||P===0)l.start=0,l.end=0;else{l.start=Math.max(0,j.sizeCache.indexAtOffset(G));let Y0=j.sizeCache.indexAtOffset(G+P);if(Y0<h-1)Y0++;l.end=Math.min(h-1,Math.max(0,Y0))}u.start=Math.max(0,l.start-c),u.end=Math.min(h-1,l.end+c);let W=j.state.viewportState;W.scrollPosition=G,W.visibleRange.start=l.start,W.visibleRange.end=l.end,W.renderRange.start=u.start,W.renderRange.end=u.end;let S=j.state.lastRenderRange,g=W.isCompressed,m=j.dataManager.getTotal(),v=q.getItemRange(u.start,u.end,m),x=j.dataManager.getItemsInRange(v.start,v.end),d=g?j.getCompressionContext():void 0;w();let o=V?V():R1,i=C?C():-1;if(Q.render(x,v,o,i,d),S.start!==u.start||S.end!==u.end)S.start=u.start,S.end=u.end,X.emit("range:change",{range:{start:u.start,end:u.end}})},k=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,e=!0,B()};j.setRenderFns(B,k);let E=typeof b==="function";j.resizeHandlers.push((G,P)=>{let h=K?P:G;if(Z.containerWidth=h,Q)Q.updateContainerWidth(h);if(E){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let W=0;W<j.contentSizeHandlers.length;W++)j.contentSizeHandlers[W]();if(Q)Q.clear();j.forceRender()}});let{animateScroll:A,cancelScroll:f}=S0(j.scrollController,j.renderIfNeeded);if(j.methods.set("cancelScroll",f),j.methods.set("scrollToIndex",(G,P)=>{let h=Math.floor(G/J.columns),{align:W,behavior:S,duration:g}=R0(P),m=j.dataManager.getState(),v=q.getTotalRows(m.total),x=Math.max(0,Math.min(h,v-1)),d=y0(x,j.sizeCache,j.state.viewportState.containerSize,v,W,j.getCachedCompression());if(S==="smooth")A(j.scrollController.getScrollTop(),d,g);else f(),j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(f(),Q)Q.destroy(),Q=null;Y.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};D2();var G2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,Y=0,X=[],U=()=>{let Z=(q-1)*Q;Y=Math.max(0,(j-Z)/q),X=Array(q);let F=Y+Q;for(let H=0;H<q;H++)X[H]=H*F};U();let N=[],_=0,K=[],D=(Z)=>{let F=0,H=Z[0];for(let L=1;L<Z.length;L++){let y=Z[L];if(y<H)H=y,F=L}return F},$=(Z,F)=>{if(Z<=0)return _=0,N=[],[];let H=Array(q).fill(0),L=Array(q);for(let C=0;C<q;C++)L[C]=[];let y=Array(Z);for(let C=0;C<Z;C++){let p=D(H),w=F(C),M=H[p];y[C]={index:C,x:X[p],y:M,lane:p,size:w,crossSize:Y},L[p].push(C),H[p]=M+w+Q}N=L;let V=0;for(let C=0;C<q;C++){let p=H[C],w=p>0?p-Q:0;if(w>V)V=w}return _=V,y},T=(Z)=>{if(Z.length===0)return _>0?_:0;if(_>0)return _;let F=Array(q).fill(0);for(let L of Z){let y=L.y+L.size,V=F[L.lane];if(y>V)F[L.lane]=y}let H=0;for(let L=0;L<q;L++)if(F[L]>H)H=F[L];return H},z=(Z,F,H)=>{if(Z.length===0||H<=F)return K.length=0,K;if(N.length===0||N.length!==q)return O(Z,F,H);K.length=0;for(let L=0;L<q;L++){let y=N[L],V=y.length;if(V===0)continue;let C=0,p=V;while(C<p){let w=C+p>>>1,M=Z[y[w]];if(M.y+M.size<=F)C=w+1;else p=w}for(let w=C;w<V;w++){let M=Z[y[w]];if(M.y>=H)break;K.push(M)}}return K},O=(Z,F,H)=>{let L=[];for(let y of Z)if(y.y+y.size>F&&y.y<H)L.push(y);return L};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(Z)=>{let F=!1;if(Z.columns!==void 0){let H=Math.max(1,Math.floor(Z.columns));if(H!==q)q=H,F=!0}if(Z.gap!==void 0&&Z.gap!==Q)Q=Z.gap,F=!0;if(Z.containerSize!==void 0&&Z.containerSize!==j)j=Z.containerSize,F=!0;if(F)U()},calculateLayout:$,getTotalSize:T,getVisibleItems:z}};var z1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var W2=(J,q,Q,j=!1,Y,X)=>{let U=z1(),N=new Map,_=new Set,K=0,D="",$=-1,T={selected:!1,focused:!1},z=(M,I)=>{return T.selected=M,T.focused=I,T},O=`${Q}-item ${Q}-masonry-item`,b=`${Q}-item--selected`,Z=`${Q}-item--focused`,F=(M,I)=>{if(typeof I==="string")M.innerHTML=I;else M.replaceChildren(I)},H=(M,I,e)=>{M.classList.toggle(b,I),M.classList.toggle(Z,e)},L=(M,I)=>{if(j)M.style.transform=`translate(${Math.round(I.y)}px, ${Math.round(I.x)}px)`;else M.style.transform=`translate(${Math.round(I.x)}px, ${Math.round(I.y)}px)`},y=(M,I)=>{if(j)M.style.width=`${I.size}px`,M.style.height=`${I.crossSize}px`;else M.style.width=`${I.crossSize}px`,M.style.height=`${I.size}px`},V=(M,I,e,c,l)=>{let u=U.acquire(),B=z(c,l);if(u.className=O,u.dataset.index=String(M),u.dataset.id=String(I.id),u.dataset.lane=String(e.lane),u.ariaSelected=String(c),X)u.id=`${X}-item-${M}`;if(Y){let E=Y();if(E!==$)$=E,D=String(E);u.setAttribute("aria-setsize",D),u.setAttribute("aria-posinset",String(M+1))}y(u,e);let k=q(I,M,B);return F(u,k),H(u,c,l),L(u,e),{element:u,lastItemId:I.id,lastSelected:c,lastFocused:l,lastY:e.y,lastX:e.x,lastSize:e.size,lastCrossSize:e.crossSize,lastSeenFrame:K}},C=(M,I,e,c)=>{K++,_.clear();for(let u=0;u<I.length;u++)_.add(I[u].index);for(let[u,B]of N)if(_.has(u))B.lastSeenFrame=K;else if(K-B.lastSeenFrame>2)U.release(B.element),N.delete(u);let l=null;for(let u=0;u<I.length;u++){let B=I[u],k=B.index,E=M(k);if(!E)continue;let A=e.has(E.id),f=k===c,G=N.get(k);if(G){let P=G.lastItemId!==E.id,h=G.lastSelected!==A,W=G.lastFocused!==f,S=G.lastY!==B.y||G.lastX!==B.x,g=G.lastSize!==B.size||G.lastCrossSize!==B.crossSize;if(P||h||W){let m=z(A,f),v=q(E,k,m);F(G.element,v),H(G.element,A,f),G.element.dataset.id=String(E.id),G.element.ariaSelected=String(A),G.lastItemId=E.id,G.lastSelected=A,G.lastFocused=f}if(g)y(G.element,B),G.lastSize=B.size,G.lastCrossSize=B.crossSize;if(S)L(G.element,B),G.lastY=B.y,G.lastX=B.x}else{let P=V(k,E,B,A,f);if(!l)l=document.createDocumentFragment();l.appendChild(P.element),N.set(k,P)}}if(l)J.appendChild(l)},p=()=>{for(let{element:M}of N.values())U.release(M);N.clear(),J.innerHTML=""};return{render:C,getElement:(M)=>N.get(M)?.element,clear:p,destroy:()=>{p(),U.clear()}}};var C1=new Set,gJ=(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:U,config:N,rawConfig:_}=Y,K=N.classPrefix,D=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${K}--masonry`);let $=()=>{return D?X.viewport.clientHeight:X.viewport.clientWidth},T={columns:J.columns,gap:J.gap??0,containerSize:$()};q=G2(T);let z=_.item,O=D&&_.item.width?_.item.width:z.height,b={containerWidth:0,columns:0,gap:0,columnWidth:0},Z=typeof O==="function"?(G)=>O(G,b):()=>O,F=()=>{let G=Y.dataManager.getTotal(),P=q;b.containerWidth=P.containerSize,b.columns=P.columns,b.gap=P.gap;let h=(P.columns-1)*P.gap;b.columnWidth=Math.max(0,(b.containerWidth-h)/P.columns),j=P.calculateLayout(G,Z);let W=q.getTotalSize(j);if(Y.sizeCache.getTotalSize=()=>W,D)X.content.style.width=`${W}px`;else X.content.style.height=`${W}px`},H=_.item.template;Q=W2(X.items,H,K,D,()=>Y.dataManager.getTotal(),N.ariaIdPrefix);let L=null,y=null,V=!1,C=()=>{if(V)return;V=!0,L=Y.methods.get("_getSelectedIds")??null,y=Y.methods.get("_getFocusedIndex")??null},p=(G)=>Y.dataManager.getItem(G),w=-1,M=-1,I=!0,e=(N.overscan??3)*100,c=()=>{if(Y.state.isDestroyed)return;C();let G=Y.scrollController.getScrollTop(),P=Y.state.viewportState.containerSize;if(!I&&G===w&&P===M)return;w=G,M=P,I=!1;let h=Math.max(0,G-e),W=G+P+e,S=q.getVisibleItems(j,h,W),g=L?L():C1,m=y?y():-1;if(Q&&S.length>0)Q.render(p,S,g,m);let v=Y.state.viewportState;v.scrollPosition=G;let x=S.length,d=x>0?S[0].index:0,o=x>0?S[x-1].index:0;v.visibleRange.start=d,v.visibleRange.end=o,v.renderRange.start=d,v.renderRange.end=o;let i=Y.state.lastRenderRange;if(i.start!==d||i.end!==o)i.start=d,i.end=o,U.emit("range:change",{range:{start:d,end:o}})},l=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,I=!0,c()};Y.setRenderFns(c,l);let u=(G,P)=>{let h=D?P:G;if(q&&q.containerSize!==h){if(q.update({containerSize:h}),F(),Q)Q.clear();l()}};Y.resizeHandlers.push(u);let B=()=>{F(),l()},k=Y.dataManager,E=(G)=>{if(typeof k[G]!=="function")return;let P=k[G].bind(k);k[G]=(...h)=>{P(...h),B()}};E("setItems"),E("appendItems"),E("prependItems"),E("updateItem"),E("removeItem");let{animateScroll:A,cancelScroll:f}=S0(Y.scrollController,Y.renderIfNeeded);Y.methods.set("cancelScroll",f),Y.methods.set("scrollToIndex",(G,P)=>{let h=j[G];if(!h)return;let{align:W,behavior:S,duration:g}=R0(P),m=h.y,v=Y.state.viewportState.containerSize,x=m;if(W==="center")x=m-v/2+h.size/2;else if(W==="end")x=m-v+h.size;if(x=Math.max(0,x),S==="smooth")A(Y.scrollController.getScrollTop(),x,g);else f(),Y.scrollController.scrollTo(x)}),F(),Y.destroyHandlers.push(()=>{if(f(),Q)Q.destroy();X.root.classList.remove(`${K}--masonry`)})}}};var M2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),r0=(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}},a0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},h0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return a0(J,[q]);else return r0(J,[q],Q)},O2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},A2=(J)=>({...J,selected:new Set}),E2=(J,q)=>{return J.focusedIndex=q,J},S2=(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},f2=(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},I2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},p2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var xJ=(J,q)=>{return J.selected.has(q)},s0=(J)=>{return Array.from(J.selected)},n0=(J,q)=>{let Q=[];for(let j of J.selected){let Y=q(j);if(Y)Q.push(Y)}return Q};var mJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=M2(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:U,emitter:N,config:_}=X,{classPrefix:K,ariaIdPrefix:D}=_;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}U.root.classList.add(`${K}--selectable`);let $=new Map,T=()=>{$.clear();let H=X.dataManager.getTotal(),L=X.dataManager.getCached();if(L===0)return;if(L>=H){for(let V=0;V<H;V++){let C=X.dataManager.getItem(V);if(C)$.set(C.id,V)}return}let y=X.dataManager.getStorage();if(y&&typeof y.getLoadedRanges==="function"){let V=y.getLoadedRanges();for(let C of V)for(let p=C.start;p<=C.end;p++){let w=X.dataManager.getItem(p);if(w)$.set(w.id,p)}}};N.on("load:end",({items:H,offset:L})=>{if(!H||H.length===0)return;if(L!==void 0)for(let y=0;y<H.length;y++){let V=H[y];if(V&&V.id!==void 0)$.set(V.id,L+y)}else T()}),T(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:z}=X.getRenderFns(),O=()=>{z();let H=(L)=>{let y=$.get(L);if(y===void 0)return;return X.dataManager.getItem(y)};N.emit("selection:change",{selected:s0(j),items:n0(j,H)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${K}-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",U.root.appendChild(Y);let b=Y;N.on("selection:change",({selected:H})=>{let L=H.length;if(L===0)b.textContent="";else if(L===1)b.textContent="1 item selected";else b.textContent=`${L} items selected`});let Z=()=>{if(X.state.isDestroyed)return;if(!U.root.matches(":focus-visible"))return;let H=X.dataManager.getTotal();if(H===0)return;let L=j.focusedIndex>=0?Math.min(j.focusedIndex,H-1):0;j=E2(j,L),j.focusVisible=!0,U.root.setAttribute("aria-activedescendant",`${D}-item-${L}`),X.scrollController.scrollTo(y0(L,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let y=X.dataManager.getItem(L);if(y)X.renderer.updateItemClasses(L,j.selected.has(y.id),!0)};U.root.addEventListener("focusin",Z);let F=(H)=>{if(X.state.isDestroyed)return;let L=H.relatedTarget;if(L&&U.root.contains(L))return;let y=j.focusedIndex;if(j.focusVisible=!1,U.root.removeAttribute("aria-activedescendant"),y>=0){let V=X.dataManager.getItem(y);if(V)X.renderer.updateItemClasses(y,j.selected.has(V.id),!1)}};U.root.addEventListener("focusout",F),X.clickHandlers.push((H)=>{if(X.state.isDestroyed)return;let y=H.target.closest("[data-index]");if(!y)return;let V=parseInt(y.dataset.index??"-1",10);if(V<0)return;let C=X.dataManager.getItem(V);if(!C)return;N.emit("item:click",{item:C,index:V,event:H}),j=E2(j,V),j.focusVisible=!1,U.root.setAttribute("aria-activedescendant",`${D}-item-${V}`),j=h0(j,C.id,q),O()}),X.keydownHandlers.push((H)=>{if(X.state.isDestroyed)return;let L=X.dataManager.getTotal(),y=j.focusedIndex,V=!1,C=!1,p=j;switch(H.key){case"ArrowUp":p=S2(j,L,_.wrap),p.focusVisible=!0,V=!0,C=!0;break;case"ArrowDown":p=f2(j,L,_.wrap),p.focusVisible=!0,V=!0,C=!0;break;case"Home":p=I2(j,L),p.focusVisible=!0,V=!0,C=!0;break;case"End":p=p2(j,L),p.focusVisible=!0,V=!0,C=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let w=X.dataManager.getItem(j.focusedIndex);if(w)p=h0(j,w.id,q),p.focusVisible=!0;V=!0}break}if(V){H.preventDefault(),j=p;let w=j.focusedIndex;if(w>=0){let M=X.dataManager.getState(),I=y0(w,X.sizeCache,X.state.viewportState.containerSize,M.total,"center",X.getCachedCompression());X.scrollController.scrollTo(I),U.root.setAttribute("aria-activedescendant",`${D}-item-${w}`)}else U.root.removeAttribute("aria-activedescendant");if(C){let{selected:M}=j;if(y>=0&&y!==w){let I=X.dataManager.getItem(y);if(I)X.renderer.updateItemClasses(y,M.has(I.id),!1)}if(w>=0){let I=X.dataManager.getItem(w);if(I)X.renderer.updateItemClasses(w,M.has(I.id),!0)}}else O()}}),X.methods.set("select",(...H)=>{j=r0(j,H,q),O()}),X.methods.set("deselect",(...H)=>{j=a0(j,H),O()}),X.methods.set("toggleSelect",(H)=>{j=h0(j,H,q),O()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let H=X.getAllLoadedItems();j=O2(j,H,q),T(),O()}),X.methods.set("clearSelection",()=>{j=A2(j),O()}),X.methods.set("getSelected",()=>{return s0(j)}),X.methods.set("getSelectedItems",()=>{return n0(j,(L)=>{let y=$.get(L);if(y===void 0)return;return X.dataManager.getItem(y)})}),X.destroyHandlers.push(()=>{if(b&&b.parentNode)b.remove();U.root.removeEventListener("focusin",Z),U.root.removeEventListener("focusout",F)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var dJ=(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(),U=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),_=N&&N().length>0?N():void 0;if(U===0){let T={index:0,offsetInItem:0,total:0};if(_)T.selectedIds=_;return T}let K,D;if(X.isCompressed){let z=Y/X.virtualSize*U;K=Math.max(0,Math.min(Math.floor(z),U-1)),D=(z-K)*Q.sizeCache.getSize(K)}else K=Q.sizeCache.indexAtOffset(Y),D=Y-Q.sizeCache.getOffset(K);D=Math.max(0,D);let $={index:K,offsetInItem:D,total:U};if(_)$.selectedIds=_;return $});let j=(Y)=>{let{index:X,offsetInItem:U,selectedIds:N}=Y,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(U))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let Z=Q.getCachedCompression();Q.updateContentSize(Z.virtualSize)}let D=Q.getCachedCompression(),$=Math.max(0,Math.min(X,_-1)),T;if(D.isCompressed){let Z=Q.sizeCache.getSize($),F=Z>0?U/Z:0;T=($+F)/_*D.virtualSize}else T=Q.sizeCache.getOffset($)+U;let z=Q.state.viewportState.containerSize,O=Math.max(0,D.virtualSize-z);if(T=Math.max(0,Math.min(T,O)),Q.scrollController.scrollTo(T),N&&N.length>0){let Z=Q.methods.get("select");if(Z)Z(...N)}let b=Q.methods.get("loadVisibleRange");if(b)requestAnimationFrame(()=>{b()});else{let Z=Q.methods.get("reload");if(Z)requestAnimationFrame(()=>{Z()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};var F2=(J,q=50,Q=1/0,j=!0)=>{let Y=J,X=[],U=0,N=()=>{X=Y.map((Z,F)=>({def:Z,index:F,width:0,minWidth:w1(Z.minWidth??q,1),maxWidth:Z.maxWidth??Q,resizable:Z.resizable??j,offset:0}))},_=(Z)=>{if(X.length===0){U=0;return}let F=0,H=0;for(let L=0;L<X.length;L++){let y=X[L],V=y.def;if(V.width!==void 0)y.width=h2(V.width,y.minWidth,y.maxWidth),F+=y.width;else H++}if(H>0){let y=Math.max(0,Z-F)/H;for(let V=0;V<X.length;V++){let C=X[V];if(C.def.width===void 0)C.width=h2(y,C.minWidth,C.maxWidth)}}K()},K=()=>{let Z=0;for(let F=0;F<X.length;F++){let H=X[F];H.offset=Z,Z+=H.width}U=Z},D=(Z,F)=>{if(Z<0||Z>=X.length)return 0;let H=X[Z];if(!H.resizable)return H.width;let L=h2(F,H.minWidth,H.maxWidth);return H.width=L,K(),L},$=(Z)=>{return X[Z]},T=(Z)=>{if(X.length===0)return;if(Z<0)return X[0];if(Z>=U)return X[X.length-1];let F=0,H=X.length-1;while(F<H){let L=F+H>>>1,y=X[L];if(Z<y.offset)H=L-1;else if(Z>=y.offset+y.width)F=L+1;else return y}return X[F]},z=(Z)=>{if(Z<0||Z>=X.length)return 0;return X[Z].offset},O=(Z)=>{if(Z<0||Z>=X.length)return 0;return X[Z].width},b=(Z)=>{Y=Z,N()};return N(),{get columns(){return X},get totalWidth(){return U},resolve:_,updateColumns:b,resizeColumn:D,getColumn:$,getColumnAtX:T,getColumnOffset:z,getColumnWidth:O}},h2=(J,q,Q)=>Math.min(Q,Math.max(q,J)),w1=(J,q)=>Math.max(q,J);var L2=(J,q,Q,j,Y,X,U)=>{let N=document.createElement("div");N.className=`${j}-table-header`,N.setAttribute("role","row"),N.setAttribute("aria-rowindex","1"),N.style.height=`${Q}px`;let _=document.createElement("div");_.className=`${j}-table-header-scroll`,N.appendChild(_),J.insertBefore(N,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 K=[],D=[],$=[],T=!0,z=null,O="asc",b=null,Z=!1,F=-1,H=0,L=0,y=(k,E)=>{let A=document.createElement("div");A.className=`${j}-table-header-cell`,A.setAttribute("role","columnheader"),A.setAttribute("aria-colindex",String(E+1)),A.dataset.columnKey=k.def.key;let f=k.def.align;if(f==="center")A.classList.add(`${j}-table-header-cell--center`);else if(f==="right")A.classList.add(`${j}-table-header-cell--right`);let G=document.createElement("div");G.className=`${j}-table-header-content`;let P=k.def.header?k.def.header(k.def):k.def.label;if(typeof P==="string")G.textContent=P;else G.appendChild(P);if(A.appendChild(G),k.def.sortable){let h=document.createElement("span");h.className=`${j}-table-header-sort`,h.setAttribute("aria-hidden","true"),A.appendChild(h),$.push(h),A.classList.add(`${j}-table-header-cell--sortable`)}else $.push(null);if(k.resizable){let h=document.createElement("div");h.className=`${j}-table-header-resize`,h.dataset.resizeIndex=String(E),A.appendChild(h),D.push(h)}return A},V=(k)=>{b=k,_.textContent="",K=[],D=[],$=[];let E=k.columns;for(let A=0;A<E.length;A++){let f=E[A],G=y(f,A);K.push(G),_.appendChild(G)}if(C(k),z)p(z,O)},C=(k)=>{b=k;let E=k.columns;_.style.width=`${k.totalWidth}px`;for(let A=0;A<K.length&&A<E.length;A++){let f=K[A],G=E[A];f.style.width=`${G.width}px`}},p=(k,E)=>{if(z=k,O=E,!b)return;let A=b.columns;for(let f=0;f<$.length&&f<A.length;f++){let G=$[f];if(!G)continue;if(A[f].def.key===k&&k!==null)G.textContent=E==="asc"?"▲":"▼",G.style.opacity="0.7",K[f].setAttribute("aria-sort",E==="asc"?"ascending":"descending");else G.textContent="",G.style.opacity="0",K[f].removeAttribute("aria-sort")}},w=(k)=>{_.style.transform=`translateX(${-k}px)`},M=(k)=>{let E=k.target;if(!E.dataset.resizeIndex)return;if(k.preventDefault(),k.stopPropagation(),F=parseInt(E.dataset.resizeIndex,10),!b)return;let A=b.getColumn(F);if(!A||!A.resizable)return;Z=!0,H=k.clientX,L=A.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",E.classList.add(`${j}-table-header-resize--active`),E.setPointerCapture(k.pointerId),E.addEventListener("pointermove",I),E.addEventListener("pointerup",e),E.addEventListener("pointercancel",e)},I=(k)=>{if(!Z||!b)return;let E=k.clientX-H;if(Math.abs(E)<1)return;let A=Math.max(0,L+E);Y(F,A)},e=(k)=>{if(!Z)return;let E=k.target;E.removeEventListener("pointermove",I),E.removeEventListener("pointerup",e),E.removeEventListener("pointercancel",e);try{E.releasePointerCapture(k.pointerId)}catch{}E.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",Z=!1,F=-1},c=(k)=>{let E=k.target;if(E.dataset.resizeIndex!==void 0)return;if(Z)return;let A=E;while(A&&!A.dataset.columnKey)if(A=A.parentElement,A===N||A===null)return;if(!A||!A.dataset.columnKey)return;let f=A.dataset.columnKey;if(!b)return;let G=b.columns,P=-1;for(let W=0;W<G.length;W++)if(G[W].def.key===f){P=W;break}if(P===-1)return;let h=G[P];if(U)U({key:f,index:P,event:k});if(h.def.sortable&&X){let W;if(z===f)if(O==="asc")W="desc";else W=null;else W="asc";X({key:f,index:P,direction:W})}};return N.addEventListener("pointerdown",M),N.addEventListener("click",c),{element:N,update:C,updateSort:p,rebuild:V,show:()=>{if(T)return;T=!0,N.style.display=""},hide:()=>{if(!T)return;T=!1,N.style.display="none"},destroy:()=>{N.removeEventListener("pointerdown",M),N.removeEventListener("click",c),q.style.position="",q.style.top="",q.style.left="",q.style.right="",q.style.bottom="",N.remove(),K=[],D=[],$=[],b=null,T=!1},syncScroll:w}};var v1=(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}}};var T2=(J,q,Q,j,Y,X,U,N)=>{let _=v1(),K=new Map,D=0,$=-1,T=Q,z=(E,A)=>{if(A)E.setAttribute("aria-selected","true");else E.removeAttribute("aria-selected")},O=`${Y}-item ${Y}-table-row`,b=`${Y}-item--selected`,Z=`${Y}-item--focused`,F=`${Y}-table-cell`,H=`${Y}-table-cell--center`,L=`${Y}-table-cell--right`,y=`${Y}-item--odd`,V=(E,A,f,G)=>{if(f.def.cell){let P=f.def.cell(A,f.def,G);if(typeof P==="string")E.innerHTML=P;else E.replaceChildren(P)}else{let P=A[f.def.key];E.textContent=P!=null?String(P):""}},C=(E,A,f,G)=>{let P=O;if(N&&(A&1)===1)P+=` ${y}`;if(f)P+=` ${b}`;if(G)P+=` ${Z}`;E.className=P},p=(E,A)=>{let f=A.def.align;if(f==="center")E.classList.add(H),E.classList.remove(L);else if(f==="right")E.classList.add(L),E.classList.remove(H);else E.classList.remove(H,L)},w=(E,A)=>{let G=T.columns.length;if(A.length===G)return A;let P=[];for(let h=0;h<G;h++){let W;if(h<A.length)W=A[h];else W=document.createElement("div"),W.className=F,E.appendChild(W);P.push(W)}for(let h=G;h<A.length;h++)A[h].remove();return P},M=(E,A,f,G)=>{let P=_.acquire();P.style.width=`${T.totalWidth}px`;let h=q.getSize(A);P.style.height=`${h}px`,C(P,A,f,G),P.setAttribute("role","row"),P.setAttribute("data-id",String(E.id)),P.setAttribute("data-index",String(A)),P.id=`${X}-${A}`,P.setAttribute("aria-rowindex",String(A+2));let W=U();if(W!==$)$=W;z(P,f);let S=w(P,[]),g=T.columns;for(let v=0;v<S.length&&v<g.length;v++){let x=S[v],d=g[v];x.style.left=`${d.offset}px`,x.style.width=`${d.width}px`,x.setAttribute("role","gridcell"),x.setAttribute("aria-colindex",String(v+1)),p(x,d),V(x,E,d,A)}let m=q.getOffset(A);return P.style.transform=`translateY(${m}px)`,{element:P,cells:S,index:A,lastItemId:E.id,lastSelected:f,lastFocused:G,lastOffset:m,lastSeenFrame:D}},I=(E,A,f,G)=>{D++;for(let[S,g]of K)if(S>=A.start&&S<=A.end)g.lastSeenFrame=D;else if(D-g.lastSeenFrame>2)_.release(g.element),K.delete(S);let P=!1,h=U();if(h!==$)$=h,P=!0;let W=null;for(let S=A.start;S<=A.end;S++){let g=S-A.start,m=E[g];if(!m)continue;let v=f.has(m.id),x=S===G,d=K.get(S);if(d){let o=d.lastItemId!==m.id,i=d.lastSelected!==v,Y0=d.lastFocused!==x;if(o){let s=T.columns;for(let J0=0;J0<d.cells.length&&J0<s.length;J0++)V(d.cells[J0],m,s[J0],S);C(d.element,S,v,x),d.element.setAttribute("data-id",String(m.id)),z(d.element,v),d.lastItemId=m.id,d.lastSelected=v,d.lastFocused=x}else if(i||Y0)C(d.element,S,v,x),z(d.element,v),d.lastSelected=v,d.lastFocused=x;let U0=q.getOffset(S);if(d.lastOffset!==U0)d.lastOffset=U0,d.element.style.transform=`translateY(${U0}px)`;let a=q.getSize(S);if(d.element.style.height=`${a}px`,d.element.style.width=`${T.totalWidth}px`,P)d.element.setAttribute("aria-rowindex",String(S+2));d.lastSeenFrame=D}else{let o=M(m,S,v,x);if(K.set(S,o),!W)W=document.createDocumentFragment();W.appendChild(o.element)}}if(W)J.appendChild(W)},e=(E,A,f,G)=>{let P=K.get(E);if(!P)return;let h=P.lastItemId!==A.id,W=P.lastSelected!==f,S=P.lastFocused!==G;if(h||W||S){if(h){let g=T.columns;for(let m=0;m<P.cells.length&&m<g.length;m++)V(P.cells[m],A,g[m],E);P.element.setAttribute("data-id",String(A.id)),P.lastItemId=A.id}C(P.element,E,f,G),z(P.element,f),P.lastSelected=f,P.lastFocused=G}},c=(E,A,f)=>{let G=K.get(E);if(!G)return;let P=G.lastSelected!==A,h=G.lastFocused!==f;if(P||h)C(G.element,E,A,f),z(G.element,A),G.lastSelected=A,G.lastFocused=f},l=(E)=>{T=E;let A=E.columns;for(let[,f]of K){f.element.style.width=`${E.totalWidth}px`;for(let G=0;G<f.cells.length&&G<A.length;G++){let P=f.cells[G],h=A[G];P.style.left=`${h.offset}px`,P.style.width=`${h.width}px`}}},u=(E)=>{return K.get(E)?.element},B=()=>{for(let[,E]of K)_.release(E.element);K.clear(),D=0,$=-1};return{render:I,updateItem:e,updateItemClasses:c,getElement:u,updateColumnLayout:l,clear:B,destroy:()=>{B(),_.clear()}}};var S1=new Set,cJ=(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:U,config:N}=Y,{classPrefix:_}=N;if(N.horizontal)throw Error("[vlist/builder] withTable cannot be used with orientation: 'horizontal'");if(N.reverse)throw Error("[vlist/builder] withTable cannot be used with reverse: true");let K=J.resizable??!0,D=J.minColumnWidth??50,$=J.maxColumnWidth??1/0,T=J.columnBorders??!1,z=J.rowBorders??!0,O=J.rowHeight,b=J.headerHeight??(typeof O==="number"?O:40),Z=J.sort?.key??null,F=J.sort?.direction??"asc";if(q=F2(J.columns,D,$,K),typeof O==="function")Y.setSizeConfig(O);else if(typeof O==="number")Y.setSizeConfig(O);if(Y.rebuildSizeCache(),X.root.classList.add(`${_}--table`),z)X.root.classList.add(`${_}--table-row-borders`);if(T)X.root.classList.add(`${_}--table-col-borders`);X.items.setAttribute("role","grid"),X.items.setAttribute("aria-colcount",String(J.columns.length));let H=Y.getContainerWidth();q.resolve(H);let L=(W,S)=>{if(!q)return;let g=q.getColumn(W);if(!g)return;let m=g.width,v=q.resizeColumn(W,S);if(Q)Q.update(q);if(j)j.updateColumnLayout(q);C(),U.emit("column:resize",{key:g.def.key,index:W,previousWidth:m,width:v})},y=(W)=>{if(W.direction===null)Z=null,F="asc";else Z=W.key,F=W.direction;if(Q)Q.updateSort(Z,F);U.emit("column:sort",W)},V=(W)=>{U.emit("column:click",W)};if(Q=L2(X.root,X.viewport,b,_,L,y,V),Q.rebuild(q),Z)Q.updateSort(Z,F);let C=()=>{if(!q)return;let W=q.totalWidth;X.content.style.minWidth=`${W}px`,X.items.style.minWidth=`${W}px`};C(),j=T2(X.items,Y.sizeCache,q,J.columns,_,N.ariaIdPrefix,()=>Y.dataManager.getTotal(),Y.rawConfig.item?.striped);let p=null,w=null,M=!1,I=()=>{if(M)return;M=!0,p=Y.methods.get("_getSelectedIds")??null,w=Y.methods.get("_getFocusedIndex")??null},e=-1,c=-1,l=!0,u=N.overscan??3,B={start:0,end:0},k={start:0,end:0},E=()=>{if(Y.state.isDestroyed)return;let W=Y.scrollController.getScrollTop(),S=Y.state.viewportState.containerSize;if(!l&&W===e&&S===c)return;e=W,c=S,l=!1;let g=Y.getVirtualTotal();if(g===0||S===0)B.start=0,B.end=0;else{B.start=Math.max(0,Y.sizeCache.indexAtOffset(W));let i=Y.sizeCache.indexAtOffset(W+S);if(i<g-1)i++;B.end=Math.min(g-1,Math.max(0,i))}k.start=Math.max(0,B.start-u),k.end=Math.min(g-1,B.end+u);let m=Y.state.viewportState;m.scrollPosition=W,m.visibleRange.start=B.start,m.visibleRange.end=B.end,m.renderRange.start=k.start,m.renderRange.end=k.end;let v=Y.state.lastRenderRange,x=Y.dataManager.getItemsInRange(k.start,k.end);I();let d=p?p():S1,o=w?w():-1;if(j.render(x,k,d,o),v.start!==k.start||v.end!==k.end)v.start=k.start,v.end=k.end,U.emit("range:change",{range:{start:k.start,end:k.end}})},A=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,l=!0,E()};Y.setRenderFns(E,A);let f=Q,G=-1,P=()=>{let W=X.viewport.scrollLeft;if(W!==G){if(G=W,f.syncScroll)f.syncScroll(W)}};Y.afterScroll.push(()=>{P()});let h=()=>{P()};X.viewport.addEventListener("scroll",h,{passive:!0}),Y.resizeHandlers.push((W,S)=>{if(!q)return;if(q.resolve(W),Q)Q.update(q);if(j)j.updateColumnLayout(q);C()}),Y.methods.set("updateColumns",(W)=>{if(!q||!Q)return;if(q.updateColumns(W),q.resolve(Y.getContainerWidth()),Q.rebuild(q),Z)Q.updateSort(Z,F);if(C(),j)j.updateColumnLayout(q),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",(W,S)=>{if(!q)return;let g;if(typeof W==="string"){let m=q.columns;g=-1;for(let v=0;v<m.length;v++)if(m[v].def.key===W){g=v;break}if(g===-1)return}else g=W;L(g,S)}),Y.methods.set("getColumnWidths",()=>{if(!q)return{};let W={},S=q.columns;for(let g=0;g<S.length;g++)W[S[g].def.key]=S[g].width;return W}),Y.methods.set("setSort",(W,S)=>{if(Z=W,F=S??"asc",Q)Q.updateSort(Z,F)}),Y.methods.set("getSort",()=>{return{key:Z,direction:F}}),Y.methods.set("_getTableLayout",()=>q),Y.contentSizeHandlers.push(()=>{C()}),Y.destroyHandlers.push(()=>{if(X.viewport.removeEventListener("scroll",h),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.items.setAttribute("role","listbox"),X.items.removeAttribute("aria-colcount")})},destroy(){if(Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null}}};export{cJ as withTable,dJ as withSnapshots,mJ as withSelection,AJ as withScrollbar,LJ as withScale,HJ as withPage,gJ as withMasonry,hJ as withGroups,uJ as withGrid,TJ as withAsync,YJ as vlist,h0 as toggleSelection,kJ as simpleVisibleRange,r0 as selectItems,O2 as selectAll,vJ as rangesEqual,Y2 as rafThrottle,WJ as needsScaling,B2 as mergeRanges,xJ as isSelected,z0 as isPlaceholderItem,SJ as isInRange,C0 as isGroupHeader,n0 as getSelectedItems,s0 as getSelectedIds,L0 as getScaleState,OJ as getScaleInfo,L0 as getScale,fJ as getRangeCount,MJ as getMaxItemsWithoutScaling,w2 as filterPlaceholders,IJ as diffRanges,a0 as deselectItems,T2 as createTableRenderer,F2 as createTableLayout,L2 as createTableHeader,_2 as createStickyHeader,K2 as createSparseStorage,$0 as createSizeCache,M2 as createSelectionState,p0 as createScrollbar,FJ as createScrollController,U2 as createPlaceholderManager,e0 as createMeasuredSizeCache,W2 as createMasonryRenderer,G2 as createMasonryLayout,c0 as createGroupedSizeFn,N2 as createGroupLayout,l0 as createGridRenderer,V2 as createGridLayout,J2 as createEmitter,Z2 as createAsyncManager,A2 as clearSelection,wJ as clampScrollPosition,RJ as calculateTotalSize,y0 as calculateScrollToIndex,Q2 as calculateScaledVisibleRange,j2 as calculateScaledScrollToIndex,VJ as calculateScaledRenderRange,I0 as calculateScaledItemPosition,yJ as calculateRenderRange,m0 as calculateMissingRanges,CJ as calculateItemOffset,GJ as calculateIndexFromScrollPosition,zJ as calculateActualSize,d0 as buildLayoutItems,k0 as MAX_VIRTUAL_SIZE,DJ as MAX_VIRTUAL_HEIGHT};
1
+ var{defineProperty:P2,getOwnPropertyNames:N1,getOwnPropertyDescriptor:_1}=Object,V1=Object.prototype.hasOwnProperty;var r2=new WeakMap,W1=(J)=>{var q=r2.get(J),Q;if(q)return q;if(q=P2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")N1(J).map((j)=>!V1.call(q,j)&&P2(q,j,{get:()=>J[j],enumerable:!(Q=_1(J,j))||Q.enumerable}));return r2.set(J,q),q};var D1=(J,q)=>{for(var Q in q)P2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var s2=(J,q)=>()=>(J&&(q=J(J=0)),q);var G1=(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}},M1=(J,q)=>{let Q=q,j=new Float64Array(0),Y=(U)=>{Q=U,j=new Float64Array(U+1),j[0]=0;for(let Z=0;Z<U;Z++)j[Z+1]=j[Z]+J(Z)};Y(q);let X=(U)=>{if(Q===0)return 0;if(U<=0)return 0;if(U>=j[Q])return Q-1;let Z=0,_=Q-1;while(Z<_){let K=Z+_+1>>>1;if(j[K]<=U)Z=K;else _=K-1}return Z};return{getOffset:(U)=>{if(U<=0)return 0;if(U>=Q)return j[Q];return j[U]},getSize:(U)=>J(U),indexAtOffset:(U)=>X(U),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(U)=>Y(U),isVariable:()=>!0}},k0=(J,q)=>{if(typeof J==="number")return G1(J,q);return M1(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,U=q;while(U<j&&X<Q)X+=J.getSize(U),Y++,U++;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 U=J.getSize(X);if(Y+U>q)break;Y+=U,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((U,Z)=>U-Z);if(j.length<=1)return;let Y=J.firstChild,X=!0;for(let U=0;U<j.length;U++){if(Q(j[U])!==Y){X=!1;break}Y=Y.nextSibling}if(X)return;for(let U=0;U<j.length;U++){let Z=Q(j[U]);if(Z)J.appendChild(Z)}};var w2=200,p0=50,UJ=5,ZJ=2,NJ=50,y0=16000000,_J="x",VJ=20,v2="_isPlaceholder",WJ="__placeholder_";var DJ,T0=(J,q)=>{let Q=q.getTotalSize(),j=Q>y0,Y=j?y0: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 W=Q.indexAtOffset(J),F=Q.indexAtOffset(J+q);if(F<j-1)F++;return X.start=Math.max(0,W),X.end=Math.min(j-1,Math.max(0,F)),X}let{virtualSize:U}=Y,_=J/U*j,K=Math.floor(_),V=d0(Q,Math.max(0,K),q,j),b=Math.ceil(_)+V,R=U-q-J;if(R<=q&&R>=-1){let W=J2(Q,q,j),F=Math.max(0,j-W),N=Math.max(0,Math.min(1,1-R/q));K=Math.floor(K+(F-K)*N),b=R<=1?j-1:Math.min(j-1,K+V)}return X.start=Math.max(0,K),X.end=Math.min(j-1,Math.max(0,b)),X},GJ=(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,U)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:Z}=X,_=Z-Y,K=_-q;if(K<=Y&&K>=-1){if(q>=_-1){let H=Q.getTotalSize()-Q.getOffset(J);return Y-H}let R=J2(Q,Y,j),W=Math.max(0,j-R),N=q/Z*j,G=Math.max(0,Math.min(1,1-K/Y)),E=Q.getOffset(J)-Q.getOffset(W),L=Q.getOffset(J)-z2(Q,N,j);return L+(E-L)*G}let V=q/Z,b=Q.getTotalSize(),A=V*b;return Q.getOffset(J)-A},X2=(J,q,Q,j,Y,X="start")=>{if(j===0)return 0;let U;if(Y.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,Y.virtualSize-Q);U=J/j*Y.virtualSize}else U=q.getOffset(J);let Z=q.getSize(J);switch(X){case"center":U-=(Q-Z)/2;break;case"end":U-=Q-Z;break}let _=Y.virtualSize-Q;return Math.max(0,Math.min(U,_))},MJ=(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)},OJ=(J,q)=>{if(typeof q==="number")return J*q>y0;return q.getTotalSize()>y0},AJ=(J)=>{if(J<=0)return 0;return Math.floor(y0/J)},EJ=(J,q)=>{let Q=T0(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=s2(()=>{DJ=y0});var C0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var uJ={};D1(uJ,{createGridRenderer:()=>r0});var z1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},C1=2,r0=(J,q,Q,j,Y,X,U,Z,_=!1)=>{let K=z1(),V=new Map,b=X,A=!1,R=null,W=0,F=0,N="",G=-1,E=(O)=>{if(R&&W===O)return R;return R=T0(O,Q),W=O,R},L={selected:!1,focused:!1},H=(O,S)=>{return L.selected=O,L.focused=S,L},C=`${Y}-item ${Y}-grid-item`,D=`${Y}-item--selected`,x=`${Y}-item--focused`,p=(O,S)=>{if(typeof S==="string")O.innerHTML=S;else O.replaceChildren(S)},k=(O,S,v)=>{O.classList.toggle(D,S),O.classList.toggle(x,v)},I=(O,S)=>{let v=j.getRow(O);if(S){let T=S.totalItems,f=E(T);if(f.isCompressed)return h0(v,S.scrollPosition,Q,T,S.containerSize,f,S.rangeStart)}return Q.getOffset(v)},o=(O,S)=>{let v=A&&j.getCol(O)===0,T=v?0:j.getCol(O),f=v?0:j.getColumnOffset(T,b),m;if(A){let j0=j.getRow(O),u=0,q0=new Set;for(let X0=0;X0<O;X0++){let c=j.getRow(X0);if(c<j0&&!q0.has(c)){let s=Q.getSize(X0);u+=s,q0.add(c)}}m=u}else m=I(O,S);if(_)return`translate(${Math.round(m)}px, ${Math.round(f)}px)`;return`translate(${Math.round(f)}px, ${Math.round(m)}px)`},g=(O,S)=>{O.style.transform=S},r=(O,S)=>{let v=O.dataset.id?.startsWith("__group_header"),T=v?b:j.getColumnWidth(b),f;if(A||v)f=Q.getSize(S)-j.gap;else{let m=j.getRow(S);f=Q.getSize(m)-j.gap}if(_)O.style.width=`${f}px`,O.style.height=`${T}px`;else O.style.width=`${T}px`,O.style.height=`${f}px`},l=(O,S,v,T,f)=>{let m=K.acquire(),j0=H(v,T);if(m.className=C,m.dataset.index=String(O),m.dataset.id=String(S.id),m.dataset.row=String(j.getRow(O)),m.dataset.col=String(j.getCol(O)),m.ariaSelected=String(v),Z)m.id=`${Z}-item-${O}`;if(U){let q0=U();if(q0!==G)G=q0,N=String(q0);m.setAttribute("aria-setsize",N),m.setAttribute("aria-posinset",String(O+1))}r(m,O);let u=q(S,O,j0);return p(m,u),k(m,v,T),g(m,f),{element:m,lastItemId:S.id,lastSelected:v,lastFocused:T,lastTransform:f,lastSeenFrame:F}},B=(O,S,v,T,f)=>{if(F++,S.start===0&&O.length>0)A=C0(O[0]);for(let[u,q0]of V)if(u>=S.start&&u<=S.end)q0.lastSeenFrame=F;else if(F-q0.lastSeenFrame>C1)K.release(q0.element),V.delete(u);let m=!1;if(U){let u=U();if(u!==G)G=u,N=String(u),m=!0}let j0=null;for(let u=S.start;u<=S.end;u++){let q0=u-S.start,X0=O[q0];if(!X0){console.warn(`⚠️ RENDER: Missing item at index ${u} (range: ${S.start}-${S.end}, items.length: ${O.length})`);continue}let c=v.has(X0.id),s=u===T,e=V.get(u);if(e){let t=e.lastItemId!==X0.id,U0=e.lastSelected!==c,Z0=e.lastFocused!==s;if(t||U0||Z0){if(t){let W0=H(c,s),Q0=q(X0,u,W0);p(e.element,Q0),e.element.dataset.id=String(X0.id),e.element.dataset.row=String(j.getRow(u)),e.element.dataset.col=String(j.getCol(u)),r(e.element,u)}k(e.element,c,s),e.element.ariaSelected=String(c),e.lastItemId=X0.id,e.lastSelected=c,e.lastFocused=s}let V0=o(u,f);if(e.lastTransform!==V0)g(e.element,V0),e.lastTransform=V0;if(m)e.element.setAttribute("aria-setsize",N)}else{let t=o(u,f),U0=l(u,X0,c,s,t);if(!j0)j0=document.createDocumentFragment();j0.appendChild(U0.element),V.set(u,U0)}}if(j0)J.appendChild(j0)},M=(O)=>{for(let[S,v]of V){let T=o(S,O);if(v.lastTransform!==T)g(v.element,T),v.lastTransform=T}},w=(O,S,v,T)=>{let f=V.get(O);if(!f)return;let m=f.lastItemId!==S.id,j0=f.lastSelected!==v,u=f.lastFocused!==T;if(m||j0||u){let q0=H(v,T),X0=q(S,O,q0);p(f.element,X0),k(f.element,v,T),f.element.dataset.id=String(S.id),f.element.ariaSelected=String(v),r(f.element,O),f.lastItemId=S.id,f.lastSelected=v,f.lastFocused=T}},z=(O,S,v)=>{let T=V.get(O);if(!T)return;let f=T.lastSelected!==S,m=T.lastFocused!==v;if(f||m)k(T.element,S,v),T.lastSelected=S,T.lastFocused=v},d=(O)=>{return V.get(O)?.element},P=(O)=>{if(Math.abs(O-b)<1)return;b=O;for(let[S,v]of V){r(v.element,S);let T=o(S);g(v.element,T),v.lastTransform=T}},h=()=>{I0(J,V.keys(),(O)=>V.get(O)?.element)},a=()=>{for(let[,O]of V)K.release(O.element);V.clear()};return{render:B,updatePositions:M,updateItem:w,updateItemClasses:z,getElement:d,sortDOM:h,updateContainerWidth:P,clear:a,destroy:()=>{a(),K.clear()}}};var D2=s2(()=>{Y2()});var n2=2,o2=(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,U=J.samples[X],Z=q-U.position,_=Q-U.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 U=Q.get(X);return U!==void 0?U: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 U of Q.keys())if(U>=X)Q.delete(U)}Y=k0(j,X)},isVariable(){return!0},setMeasuredSize(X,U){Q.set(X,U)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var 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((K)=>{try{K(_)}catch(V){console.error(`[vlist] Error in event handler for "${String(Z)}":`,V)}})},once:(Z,_)=>{let K=(V)=>{Q(Z,K),_(V)};return q(Z,K)},clear:(Z)=>{if(Z)delete J[Z];else for(let _ in J)delete J[_]},listenerCount:(Z)=>{return J[Z]?.size??0}}};var i2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},t2=(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 U=document.createElement("div");if(U.className=`${q}-content`,U.style.position="relative",j)U.style.height="100%";else U.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 U.appendChild(Z),X.appendChild(U),Y.appendChild(X),J.appendChild(Y),{root:Y,viewport:X,content:U,items:Z}};var e2=(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 JJ=(J,q,Q,j,Y)=>{if(j===0||q===0){Y.start=0,Y.end=0;return}let X=Q.indexAtOffset(J),U=d0(Q,X,q,j),Z=X+U;Y.start=Math.max(0,X),Y.end=Math.min(j-1,Math.max(0,Z))},QJ=(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)},jJ=(J,q,Q,j,Y)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),U=q.getOffset(X),Z=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),K;switch(Y){case"center":K=U-(Q-Z)/2;break;case"end":K=U-Q+Z;break;default:K=U}return Math.max(0,Math.min(K,_))};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,U,Z)=>{if(j(),Math.abs(U-X)<1){J.scrollTo(U);return}let _=performance.now(),K=(V)=>{let b=V-_,A=Math.min(b/Z,1),R=X+(U-X)*C2(A);if(J.scrollTo(R),q(),A<1)Q=requestAnimationFrame(K);else Q=null};Q=requestAnimationFrame(K)},cancelScroll:j}};var qJ=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:Y,rawConfig:X,rendered:U,pool:Z,sharedState:_,isHorizontal:K,classPrefix:V,contentSizeHandlers:b,idleHandlers:A,afterScroll:R,clickHandlers:W,keydownHandlers:F,resizeHandlers:N,destroyHandlers:G,methods:E,onScrollFrame:L,resizeObserver:H,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,x,p,k,I)=>{J.ss=p,J.fi=k,J.ffn()},updateItemClasses:(D,x,p)=>{let k=U.get(D);if(!k)return;k.classList.toggle(`${V}-item--selected`,x),k.classList.toggle(`${V}-item--focused`,p),k.ariaSelected=x?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(D)=>U.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:R,idleHandlers:A,clickHandlers:W,keydownHandlers:F,resizeHandlers:N,contentSizeHandlers:b,destroyHandlers:G,methods:E,replaceTemplate(D){J.at=D},replaceRenderer(D){},replaceDataManager(D){J.dm=D},replaceScrollController(D){J.sc=D},getItemsForRange(D){let{dm:x,it:p}=J,k=[];for(let I=D.start;I<=D.end;I++){let o=x?x.getItem(I):p[I];if(o)k.push(o)}return k},getAllLoadedItems(){let D=J.dm;if(D){let x=D.getTotal(),p=[];for(let k=0;k<x;k++){let I=D.getItem(k);if(I)p.push(I)}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 U)D.remove(),Z.release(D);U.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(D,x){J.rfn=D,J.ffn=x},setVirtualTotalFn(D){J.vtf=D},rebuildSizeCache(D){J.hc.rebuild(D??J.vtf())},setSizeConfig(D){J.hc=k0(D,J.vtf())},updateContentSize(D){let x=`${D}px`;if(K)Q.content.style.width=x;else Q.content.style.height=x},updateCompressionMode(){},setVisibleRangeFn(D){J.gvr=D},setScrollToPosFn(D){J.gsp=D},setPositionElementFn(D){J.pef=D},setScrollFns(D,x){J.sgt=D,J.sst=(p)=>{x(p),L()}},setScrollTarget(D){J.st.removeEventListener("scroll",L),J.st=D,J.st.addEventListener("scroll",L,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(D){J.gcw=D.width,J.gch=D.height,J.cw=D.width(),J.ch=D.height(),_.viewportState.containerSize=K?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,H.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},XJ=(J,q,Q)=>{let{rendered:j,itemState:Y,contentSizeHandlers:X,applyTemplate:U,updateContentSize:Z}=q,_=()=>{J.hc.rebuild(J.vtf()),Z(),Q.updateCompressionMode();for(let K=0;K<X.length;K++)X[K]();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:(K)=>J.it[K],isItemLoaded:(K)=>K>=0&&K<J.it.length&&J.it[K]!==void 0,getItemsInRange:(K,V)=>{let b=J.it,A=[],R=Math.max(0,K),W=Math.min(V,b.length-1);for(let F=R;F<=W;F++)A.push(b[F]);return A},setTotal:(K)=>{},setItems:(K,V=0,b)=>{let A=J.it;if(V===0&&(b!==void 0||A.length===0))J.it=K;else{let R=V+K.length;if(A.length<R)A.length=R;for(let W=0;W<K.length;W++)A[V+W]=K[W]}if(J.ii)_()},updateItem:(K,V)=>{let b=J.it;if(K<0||K>=b.length)return!1;let A=b[K];if(!A)return!1;b[K]={...A,...V};let R=j.get(K);if(R)U(R,J.at(b[K],K,Y)),R.dataset.id=String(b[K].id);return!0},removeItem:(K)=>{if(K<0||K>=J.it.length)return!1;if(J.it.splice(K,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()}}},YJ=(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 O1=3,A1="vlist",KJ=150,E1=0,BJ=(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 U=new Map,Z=!1,_={use(K){if(Z)throw Error("[vlist/builder] Cannot call .use() after .build()");return U.set(K.name,K),_},build(){if(Z)throw Error("[vlist/builder] .build() can only be called once");return Z=!0,F1(J,U,q,Y,X??null)}};return _};function F1(J,q,Q,j,Y){let{item:X,items:U,overscan:Z=O1,classPrefix:_=A1,ariaLabel:K,reverse:V=!1,scroll:b}=J,A=b,R=A?.wheel??!0,W=A?.wrap??!1,F=V,N=`${_}-${E1++}`,G=j??Y,E=j==null&&Y!=null,L=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,H=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,C={overscan:Z,classPrefix:_,reverse:F,wrap:W,horizontal:Q,ariaIdPrefix:N},D=Array.from(q.values()).sort((y,n)=>(y.priority??50)-(n.priority??50)),x=new Set(D.map((y)=>y.name));for(let y of D)if(y.conflicts){for(let n of y.conflicts)if(x.has(n))throw Error(`[vlist/builder] ${y.name} and ${n} cannot be combined`)}if(F){if(x.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let p=i2(J.container),k=t2(p,_,K,Q);if(A?.wheel===!1)if(Q)k.viewport.style.overflowX="hidden";else k.viewport.style.overflow="hidden";if(A?.scrollbar==="none")k.viewport.classList.add(`${_}-viewport--no-scrollbar`);let I=j2(),o=U||[],g=typeof G==="function"&&(q.has("withGrid")||q.has("withMasonry")),r=E?Q2(Y,o.length):k0(G,g?0:o.length),l=e2(),B={it:o,hc:r,ch:k.viewport.clientHeight,cw:k.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:o2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>k.viewport.scrollLeft:()=>k.viewport.scrollTop,sst:Q?(y)=>{k.viewport.scrollLeft=y}:(y)=>{k.viewport.scrollTop=y},sab:(y=2)=>{let n=B.hc.getTotalSize();return B.ls+B.ch>=n-y},sic:!1,rfn:null,ffn:null,gvr:(y,n,i,J0,K0)=>{JJ(y,n,i,J0,K0)},gsp:(y,n,i,J0,K0)=>{return jJ(y,n,i,J0,K0)},pef:null,at:X.template,vre:!0,st:k.viewport,wh:null,gcw:()=>B.cw,gch:()=>B.ch};B.vtf=()=>B.dm?B.dm.getTotal():B.it.length;let M=null,w=null,z=!1,d={start:0,end:0},P={start:0,end:0},h={start:-1,end:-1},a={viewportState:{scrollPosition:0,containerSize:Q?B.cw:B.ch,totalSize:B.hc.getTotalSize(),actualSize:B.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},$=new Map,O=()=>{I0(k.items,$.keys(),(y)=>$.get(y))},S=E?new WeakMap:null,v=E?r:null,T=null,f=0,m=!1,j0=()=>{if(!E)return;if(m){let y=B.sgt(),n=Q?k.viewport.scrollWidth-k.viewport.clientWidth:k.viewport.scrollHeight-k.viewport.clientHeight,i=n>0&&y>=n-2;if(x0(),m=!1,i){let J0=Math.max(0,B.hc.getTotalSize()-(Q?B.cw:B.ch));if(J0>y)B.sst(J0),B.ls=J0,B.rfn()}}};if(E&&v&&S)T=new ResizeObserver((y)=>{if(B.id)return;let n=!1,i=d.start;for(let J0 of y){let K0=S.get(J0.target);if(K0===void 0)continue;let Y0=Q?J0.borderBoxSize[0].inlineSize:J0.borderBoxSize[0].blockSize;if(!v.isMeasured(K0)){let B0=v.getSize(K0);if(v.setMeasuredSize(K0,Y0),n=!0,K0<i&&Y0!==B0)f+=Y0-B0;T.unobserve(J0.target);let N0=J0.target;if(Q)N0.style.width=`${Y0}px`;else N0.style.height=`${Y0}px`}}if(!n)return;if(v.rebuild(B.vtf()),B.hc=v,f!==0){let J0=B.sgt();B.sst(J0+f),B.ls=J0+f,f=0}if(z)m=!0;else{let J0=B.sgt(),K0=Q?k.viewport.scrollWidth-k.viewport.clientWidth:k.viewport.scrollHeight-k.viewport.clientHeight,Y0=K0>0&&J0>=K0-2;if(x0(),m=!1,Y0){let B0=Math.max(0,B.hc.getTotalSize()-(Q?B.cw:B.ch));if(B0>J0)B.sst(B0),B.ls=B0}}h.start=-1,h.end=-1,B.rfn()});let u={selected:!1,focused:!1},q0=`${_}-item`,X0=X.striped===!0,c=`${_}-item--odd`,s=[],e=[],t=[],U0=[],Z0=[],V0=[],W0=[],Q0=new Map,M0=null,O0=null,D0=!1,$0=()=>{if(D0)return;D0=!0,M0=Q0.get("_getSelectedIds")??null,O0=Q0.get("_getFocusedIndex")??null},G0=(y,n)=>{if(typeof n==="string")y.innerHTML=n;else y.replaceChildren(n)},b0=(y,n)=>{let i=Math.round(B.hc.getOffset(n));if(Q)y.style.transform=`translateX(${i}px)`;else y.style.transform=`translateY(${i}px)`};B.pef=b0;let v0=(y,n)=>{let i=l.acquire();i.className=q0;let J0=!E||v&&v.isMeasured(y);if(Q){if(J0)i.style.width=`${B.hc.getSize(y)}px`;else i.style.width="";if(H!=null)i.style.height=`${H}px`}else if(J0)i.style.height=`${B.hc.getSize(y)}px`;else i.style.height="";if(i.dataset.index=String(y),i.dataset.id=String(n.id),i.ariaSelected="false",i.id=`${N}-item-${y}`,B.la=String(B.vtf()),i.setAttribute("aria-setsize",B.la),i.setAttribute("aria-posinset",String(y+1)),String(n.id).startsWith("__placeholder_"))i.classList.add(`${_}-item--placeholder`);if(X0)i.classList.toggle(c,(y&1)===1);return G0(i,B.at(n,y,u)),B.pef(i,y),i},x0=()=>{let y=`${B.hc.getTotalSize()}px`;if(Q)k.content.style.width=y;else k.content.style.height=y},rJ=()=>{if(B.id)return;$0();let y=M0?M0():B.ss,n=O0?O0():B.fi,i=B.vtf(),J0=Q?B.cw:B.ch;if(B.gvr(B.ls,J0,B.hc,i,d),QJ(d,Z,i,P),P.start===h.start&&P.end===h.end){if(B.sic)for(let[_0,A0]of $)B.pef(A0,_0);return}let K0=String(i),Y0=K0!==B.la;B.la=K0;for(let[_0,A0]of $)if(_0<P.start||_0>P.end)A0.remove(),l.release(A0),$.delete(_0);let B0=document.createDocumentFragment(),N0=[],L0=[];for(let _0=P.start;_0<=P.end;_0++){let A0=B.dm?B.dm.getItem(_0):B.it[_0];if(A0===void 0)continue;let F0=$.get(_0);if(F0){let H0=F0.dataset.id,m0=String(A0.id);if(H0!==m0){let Z1=H0?.startsWith("__placeholder_"),l2=m0.startsWith("__placeholder_");G0(F0,B.at(A0,_0,u)),F0.dataset.id=m0;let a2=!E||v&&v.isMeasured(_0);if(Q)F0.style.width=a2?`${B.hc.getSize(_0)}px`:"";else F0.style.height=a2?`${B.hc.getSize(_0)}px`:"";if(l2)F0.classList.add(`${_}-item--placeholder`);else F0.classList.remove(`${_}-item--placeholder`);if(Z1&&!l2)F0.classList.add(`${_}-item--replaced`),setTimeout(()=>{F0.classList.remove(`${_}-item--replaced`)},300)}B.pef(F0,_0);let e0=y.has(A0.id),U1=_0===n;if(F0.classList.toggle(`${_}-item--selected`,e0),F0.classList.toggle(`${_}-item--focused`,U1),F0.ariaSelected=e0?"true":"false",Y0)F0.setAttribute("aria-setsize",B.la)}else{let H0=v0(_0,A0);L0.push({index:_0,element:H0});let m0=y.has(A0.id),e0=_0===n;if(m0)H0.classList.add(`${_}-item--selected`),H0.ariaSelected="true";if(e0)H0.classList.add(`${_}-item--focused`);B0.appendChild(H0),N0.push({index:_0,element:H0})}}if(N0.length>0){k.items.appendChild(B0);for(let{index:_0,element:A0}of N0)$.set(_0,A0)}if(E&&T&&v&&S){for(let{index:_0,element:A0}of L0)if(!v.isMeasured(_0))S.set(A0,_0),T.observe(A0)}h.start=P.start,h.end=P.end,a.lastRenderRange.start=P.start,a.lastRenderRange.end=P.end,a.viewportState.scrollPosition=B.ls,a.viewportState.visibleRange.start=d.start,a.viewportState.visibleRange.end=d.end,a.viewportState.renderRange.start=P.start,a.viewportState.renderRange.end=P.end,I.emit("range:change",{range:{start:P.start,end:P.end}})},sJ=()=>{h.start=-1,h.end=-1,B.rfn()};B.rfn=rJ,B.ffn=sJ;let H2=()=>{if(B.id)return;let y=B.sgt(),n=y>=B.ls?"down":"up";if(B.vt=R2(B.vt,y),!k.root.classList.contains(`${_}--scrolling`))k.root.classList.add(`${_}--scrolling`);z=!0,B.ls=y,B.rfn(),I.emit("scroll",{scrollPosition:y,direction:n}),I.emit("velocity:change",{velocity:B.vt.velocity,reliable:B.vt.sampleCount>=n2});for(let i=0;i<s.length;i++)s[i](y,n);if(w)clearTimeout(w);w=setTimeout(()=>{k.root.classList.remove(`${_}--scrolling`),z=!1,B.vt.velocity=0,B.vt.sampleCount=0,I.emit("velocity:change",{velocity:0,reliable:!1}),j0(),O();for(let i=0;i<e.length;i++)e[i]()},A?.idleTimeout??KJ)},S0=null;if(B.st.addEventListener("scroll",H2,{passive:!0}),R&&!Q&&!L)S0=(y)=>{if(a.viewportState.isCompressed)return;let n=k.viewport.scrollWidth>k.viewport.clientWidth;if(n&&Math.abs(y.deltaX)>Math.abs(y.deltaY))return;if(y.preventDefault(),n&&y.deltaX!==0)k.viewport.scrollLeft+=y.deltaX;let i=B.sgt(),J0=y.deltaY,K0=k.viewport.scrollHeight-k.viewport.clientHeight,Y0=Math.max(0,Math.min(i+J0,K0));if(Math.abs(Y0-i)<1){if(B.vt.velocity!==0)B.vt.velocity=0,B.vt.sampleCount=0,I.emit("velocity:change",{velocity:0,reliable:!1});return}B.sst(Y0),B.ls=Y0,B.vt=R2(B.vt,Y0),B.rfn();let B0=Y0>=i?"down":"up";if(I.emit("scroll",{scrollPosition:Y0,direction:B0}),!k.root.classList.contains(`${_}--scrolling`))k.root.classList.add(`${_}--scrolling`);if(z=!0,w)clearTimeout(w);w=setTimeout(()=>{k.root.classList.remove(`${_}--scrolling`),z=!1,B.vt.velocity=0,B.vt.sampleCount=0,I.emit("velocity:change",{velocity:0,reliable:!1}),j0(),O();for(let N0=0;N0<e.length;N0++)e[N0]()},A?.idleTimeout??KJ)},B.wh=S0,k.viewport.addEventListener("wheel",S0,{passive:!1});else if(Q&&R)S0=(y)=>{if(y.deltaX)return;y.preventDefault(),k.viewport.scrollLeft+=y.deltaY},B.wh=S0,k.viewport.addEventListener("wheel",S0,{passive:!1});let x2=(y)=>{let i=y.target.closest("[data-index]");if(i){let J0=parseInt(i.dataset.index??"-1",10);if(J0>=0){let K0=B.dm?.getItem(J0)??B.it[J0];if(K0){if(K0.__groupHeader)return;I.emit("item:click",{item:K0,index:J0,event:y})}}}for(let J0=0;J0<t.length;J0++)t[J0](y)},nJ=(y)=>{let i=y.target.closest("[data-index]");if(i){let J0=parseInt(i.dataset.index??"-1",10);if(J0>=0){let K0=B.dm?.getItem(J0)??B.it[J0];if(K0){if(K0.__groupHeader)return;I.emit("item:dblclick",{item:K0,index:J0,event:y})}}}},m2=(y)=>{for(let n=0;n<U0.length;n++)U0[n](y)};k.items.addEventListener("click",x2),k.items.addEventListener("dblclick",nJ),k.root.addEventListener("keydown",m2);let k2=new ResizeObserver((y)=>{if(B.id)return;for(let n of y){let i=n.contentRect.height,J0=n.contentRect.width,K0=Q?J0:i,Y0=Q?B.cw:B.ch;if(B.cw=J0,B.ch=i,Math.abs(K0-Y0)>1){if(a.viewportState.containerSize=K0,B.ii)x0(),B.rfn(),I.emit("resize",{height:i,width:J0})}if(B.ii)for(let B0=0;B0<Z0.length;B0++)Z0[B0](J0,i)}});if(B.vre)k2.observe(k.viewport);let y2={dom:k,emitter:I,resolvedConfig:C,rawConfig:J,rendered:$,pool:l,itemState:u,sharedState:a,renderRange:P,isHorizontal:Q,classPrefix:_,contentSizeHandlers:V0,idleHandlers:e,afterScroll:s,clickHandlers:t,keydownHandlers:U0,resizeHandlers:Z0,destroyHandlers:W0,methods:Q0,onScrollFrame:H2,resizeObserver:k2,applyTemplate:G0,updateContentSize:x0},E0=qJ(B,y2);B.dm=XJ(B,y2,E0),B.sc=YJ(B,y2);let d2=new Map;for(let y of D)if(y.methods)for(let n of y.methods){let i=d2.get(n);if(i)throw Error(`[vlist/builder] Method "${n}" is registered by both "${i}" and "${y.name}"`);d2.set(n,y.name)}for(let y of D)y.setup(E0);if(!Q0.has("_getFocusedIndex")){let y=-1,n=`${_}-item--focused`,i=(Y0,B0)=>{let N0=B.vtf();if(B0<0||B0>=N0)return;y=B0,k.root.setAttribute("aria-activedescendant",`${N}-item-${B0}`);let L0=Q?B.cw:B.ch;if(B.sst(B.gsp(B0,B.hc,L0,N0,"center")),B.ls=B.sgt(),B.rfn(),Y0>=0&&Y0!==B0)$.get(Y0)?.classList.remove(n);$.get(B0)?.classList.add(n)},J0=()=>{if(B.id)return;if(!k.root.matches(":focus-visible"))return;let Y0=B.vtf();if(Y0===0)return;i(-1,y>=0?Math.min(y,Y0-1):0)};k.root.addEventListener("focusin",J0);let K0=(Y0)=>{if(B.id)return;let B0=Y0.relatedTarget;if(B0&&k.root.contains(B0))return;if(y>=0)$.get(y)?.classList.remove(n);k.root.removeAttribute("aria-activedescendant")};k.root.addEventListener("focusout",K0),U0.push((Y0)=>{if(B.id)return;let B0=B.vtf();if(B0===0)return;let N0=y,L0=N0;switch(Y0.key){case"ArrowUp":L0=N0<=0?B0-1:N0-1;break;case"ArrowDown":L0=N0>=B0-1?0:N0+1;break;case"Home":L0=0;break;case"End":L0=B0-1;break;default:return}Y0.preventDefault(),i(N0,L0)}),W0.push(()=>{k.root.removeEventListener("focusin",J0),k.root.removeEventListener("focusout",K0)})}if(B.ii=!0,E0.state.isInitialized=!0,x0(),B.rfn(),F&&B.it.length>0){let y=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(y),B.ls=y,B.rfn()}let oJ=(y)=>{E0.dataManager.setItems(y,0,y.length)},iJ=F?(y)=>{let n=B.sab(2),i=B.it.length;if(E0.dataManager.setItems(y,i),n&&B.it.length>0){let J0=B.gsp(B.it.length-1,B.hc,B.ch,B.it.length,"end");B.sst(J0),B.ls=J0,B.rfn()}}:(y)=>{let n=B.it.length;E0.dataManager.setItems(y,n)},tJ=F?(y)=>{let n=B.sgt(),i=B.hc.getTotalSize(),J0=[...B.it];E0.dataManager.clear(),E0.dataManager.setItems([...y,...J0],0);let Y0=B.hc.getTotalSize()-i;if(Y0>0)B.sst(n+Y0),B.ls=n+Y0}:(y)=>{let n=[...B.it];E0.dataManager.clear(),E0.dataManager.setItems([...y,...n],0)},eJ=(y,n)=>{E0.dataManager.updateItem(y,n)},J1=(y)=>{E0.dataManager.removeItem(y)},Q1=async()=>{if(E0.dataManager.reload)await E0.dataManager.reload()},t0=()=>{if(M!==null)cancelAnimationFrame(M),M=null},j1=(y,n,i)=>{if(t0(),Math.abs(n-y)<1){B.sst(n),B.ls=n,B.rfn();return}let J0=performance.now(),K0=(Y0)=>{let B0=Y0-J0,N0=Math.min(B0/i,1),L0=y+(n-y)*C2(N0);if(B.sst(L0),B.ls=L0,B.rfn(),N0<1)M=requestAnimationFrame(K0);else M=null};M=requestAnimationFrame(K0)},q1=(y,n)=>{let{align:i,behavior:J0,duration:K0}=R0(n),Y0=B.vtf(),B0=y;if(W&&Y0>0)B0=(B0%Y0+Y0)%Y0;let N0=B.gsp(B0,B.hc,B.ch,Y0,i);if(J0==="smooth")j1(B.sgt(),N0,K0);else t0(),B.sst(N0)},X1=()=>B.sgt(),Y1=(y,n)=>{return I.on(y,n)},K1=(y,n)=>{I.off(y,n)},B1=()=>{if(B.id)return;if(B.id=!0,E0.state.isDestroyed=!0,k.items.removeEventListener("click",x2),k.root.removeEventListener("keydown",m2),B.st.removeEventListener("scroll",H2),k2.disconnect(),T)T.disconnect(),T=null;if(B.wh)k.viewport.removeEventListener("wheel",B.wh);if(w)clearTimeout(w);for(let y=0;y<W0.length;y++)W0[y]();for(let y of D)if(y.destroy)y.destroy();t0();for(let[,y]of $)y.remove(),l.release(y);$.clear(),l.clear(),I.clear(),k.root.remove()},c2={get element(){return k.root},get items(){if(Q0.has("_getItems"))return Q0.get("_getItems")();return B.it},get total(){if(Q0.has("_getTotal"))return Q0.get("_getTotal")();return B.vtf()},setItems:Q0.has("setItems")?Q0.get("setItems"):oJ,appendItems:Q0.has("appendItems")?Q0.get("appendItems"):iJ,prependItems:Q0.has("prependItems")?Q0.get("prependItems"):tJ,updateItem:Q0.has("updateItem")?Q0.get("updateItem"):eJ,removeItem:Q0.has("removeItem")?Q0.get("removeItem"):J1,reload:Q0.has("reload")?Q0.get("reload"):Q1,scrollToIndex:Q0.has("scrollToIndex")?Q0.get("scrollToIndex"):q1,cancelScroll:Q0.has("cancelScroll")?Q0.get("cancelScroll"):t0,getScrollPosition:Q0.has("getScrollPosition")?Q0.get("getScrollPosition"):X1,on:Y1,off:K1,destroy:B1};for(let[y,n]of Q0){if(y.charCodeAt(0)===95||y==="setItems"||y==="appendItems"||y==="prependItems"||y==="updateItem"||y==="removeItem"||y==="reload"||y==="scrollToIndex"||y==="scrollToItem"||y==="cancelScroll"||y==="getScrollPosition")continue;c2[y]=n}return c2}Y2();var u0=(J,q,Q={},j="vlist",Y=!1)=>{let{autoHide:X=!0,autoHideDelay:U=1000,minThumbSize:Z=30,showOnHover:_=!0,hoverZoneWidth:K=16,showOnViewportEnter:V=!0}=Q,b=0,A=0,R=0,W=0,F=!1,N=!1,G=0,E=0,L=0,H=null,C=!1,D=null,x=null,p=Y?"width":"height",k=Y?"translateX":"translateY",I=Y?(u)=>u.clientX:(u)=>u.clientY,o=Y?"left":"top",g=document.createElement("div"),r=document.createElement("div"),l=_?document.createElement("div"):null,B=()=>{if(g.className=`${j}-scrollbar`,r.className=`${j}-scrollbar-thumb`,Y)g.classList.add(`${j}-scrollbar--horizontal`);if(g.appendChild(r),J.appendChild(g),l){if(l.className=`${j}-scrollbar-hover`,Y)l.classList.add(`${j}-scrollbar-hover--horizontal`),l.style.height=`${K}px`;else l.style.width=`${K}px`;J.appendChild(l)}},M=()=>{if(H)clearTimeout(H),H=null},w=()=>{if(!X)return;M(),H=setTimeout(d,U)},z=()=>{if(b<=A)return;if(M(),!C)g.classList.add(`${j}-scrollbar--visible`),C=!0;if(X&&!F&&!N)w()},d=()=>{if(F||N)return;g.classList.remove(`${j}-scrollbar--visible`),C=!1},P=(u,q0)=>{b=u,A=q0;let X0=b>A;if(g.style.display=X0?"":"none",!X0){d();return}let c=A/b;R=Math.max(Z,c*A),r.style[p]=`${R}px`,W=A-R,h(L)},h=(u)=>{if(L=u,b<=A||W<=0)return;let q0=b-A,c=Math.min(1,Math.max(0,u/q0))*W;r.style.transform=`${k}(${c}px)`},a=(u)=>{if(u.target===r)return;let q0=g.getBoundingClientRect(),s=I(u)-q0[o]-R/2,t=Math.max(0,Math.min(s,W))/W,U0=b-A,Z0=t*U0;q(Z0),z()},$=(u)=>{u.preventDefault(),u.stopPropagation(),F=!0,G=I(u),E=L,M(),g.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",O),document.addEventListener("mouseup",S)},O=(u)=>{if(!F)return;let q0=I(u)-G,X0=W>0?q0/W:0,c=b-A,s=X0*c,e=Math.max(0,Math.min(E+s,c)),U0=e/c*W;if(r.style.transform=`${k}(${U0}px)`,x=e,D===null)D=requestAnimationFrame(()=>{if(x!==null)q(x);D=null})},S=()=>{if(F=!1,D!==null)cancelAnimationFrame(D),D=null;if(x!==null)q(x),x=null;if(g.classList.remove(`${j}-scrollbar--dragging`),X&&!N)w();document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",S)},v=()=>{if(V)z()},T=()=>{if(!F){if(N=!1,X)w()}},f=()=>{N=!0,M(),z()},m=()=>{if(N=!1,!F&&X)w()},j0=()=>{if(M(),D!==null)cancelAnimationFrame(D),D=null;if(g.removeEventListener("click",a),g.removeEventListener("mouseenter",f),g.removeEventListener("mouseleave",m),r.removeEventListener("mousedown",$),J.removeEventListener("mouseenter",v),J.removeEventListener("mouseleave",T),document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",S),l){if(l.removeEventListener("mouseenter",f),l.removeEventListener("mouseleave",m),l.parentNode)l.parentNode.removeChild(l)}if(g.parentNode)g.parentNode.removeChild(g)};if(B(),g.addEventListener("click",a),g.addEventListener("mouseenter",f),g.addEventListener("mouseleave",m),r.addEventListener("mousedown",$),J.addEventListener("mouseenter",v),J.addEventListener("mouseleave",T),l)l.addEventListener("mouseenter",f),l.addEventListener("mouseleave",m);return{show:z,hide:d,updateBounds:P,updatePosition:h,isVisible:()=>C,destroy:j0}};var FJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:X,horizontal:U}=Y;if(q=u0(j.viewport,(K)=>Q.scrollController.scrollTo(K),J??{},X,U),!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((K,V)=>{_.updatePosition(K),_.show()}),Q.resizeHandlers.push((K,V)=>{if(_){let b=Q.getCachedCompression();_.updateBounds(b.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let K=Q.getCachedCompression();_.updateBounds(K.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var LJ=(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}},K2=(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,U=J.samples[X],Z=q-U.position,_=Q-U.time;J.velocity=_>0?Z/_:0}return J.lastPosition=q,J.lastTime=Q,J},L1=(J)=>J.sampleCount>=3,TJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:Y=!1,idleTimeout:X=150,onScroll:U,onIdle:Z,scrollElement:_,horizontal:K=!1}=q,V=!!_,b=0,A=0,R=V?K?window.innerWidth:window.innerHeight:K?J.clientWidth:J.clientHeight,W=q.compressed??!1,F=q.compression,N=LJ(),G=!1,E=null,H=B2(()=>{let T=K?J.scrollLeft:J.scrollTop,f=T>=b?"down":"up";if(N=K2(N,T),b=T,U)U({scrollTop:b,direction:f,velocity:N.velocity});I()}),D=B2(()=>{let T=J.getBoundingClientRect(),f=K?Math.max(0,-T.left):Math.max(0,-T.top),m=f>=b?"down":"up";if(N=K2(N,f),b=f,!G)G=!0;if(U)U({scrollTop:b,direction:m,velocity:N.velocity});I()}),x=(T)=>{T.preventDefault()},p=(T)=>{if(T.deltaX)return;T.preventDefault(),J.scrollLeft+=T.deltaY},k=(T)=>{if(!W)return;T.preventDefault();let f=(K?T.deltaX||T.deltaY:T.deltaY)*j,m=b+f;if(Y)m=b+f*0.3;if(m=Math.max(0,Math.min(m,A)),m!==b){let u=m>=b?"down":"up";if(N=K2(N,m),b=m,!G)G=!0;if(U)U({scrollTop:b,direction:u,velocity:N.velocity});I()}},I=()=>{if(E)clearTimeout(E);E=setTimeout(()=>{if(G=!1,N=LJ(b),Z)Z()},X)},o=(T)=>{if(W)return;if(W=!0,F=T,A=T.virtualSize-R,V)return;if(H.cancel(),J.removeEventListener("scroll",H),!Q)J.removeEventListener("wheel",x);else if(K)J.removeEventListener("wheel",p);if(K)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",k,{passive:!1});let f=K?J.scrollLeft:J.scrollTop;if(f>0){let m=K?F?.actualSize??J.scrollWidth:F?.actualSize??J.scrollHeight;b=f/m*A}if(K)J.scrollLeft=0;else J.scrollTop=0},g=()=>{if(!W)return;if(W=!1,V){F=void 0;return}if(J.removeEventListener("wheel",k),K)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",H,{passive:!0}),!Q)J.addEventListener("wheel",x,{passive:!1});else if(K)J.addEventListener("wheel",p,{passive:!1});if(F&&b>0){let f=b/A*(F.actualSize-R);if(K)J.scrollLeft=f;else J.scrollTop=f}F=void 0},r=()=>{if(V||W)return b;return K?J.scrollLeft:J.scrollTop},l=(T,f=!1)=>{let m=Math.max(0,Math.min(T,A||1/0));if(V){let j0=J.getBoundingClientRect();if(K){let u=j0.left+window.scrollX;window.scrollTo({left:u+m,behavior:f?"smooth":"auto"})}else{let u=j0.top+window.scrollY;window.scrollTo({top:u+m,behavior:f?"smooth":"auto"})}}else if(W){if(m===b)return;let u=m>=b?"down":"up";if(N=K2(N,m),b=m,!G)G=!0;if(U)U({scrollTop:b,direction:u,velocity:N.velocity});I()}else if(K)J.scrollTo({left:m,behavior:f?"smooth":"auto"});else J.scrollTo({top:m,behavior:f?"smooth":"auto"})},B=(T)=>{l(r()+T)},M=()=>{return r()<=0},w=(T=0)=>{let f=r(),m=V||W?A:K?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return f>=m-T},z=()=>{let T=r(),f=V||W?A:K?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(f<=0)return 0;return Math.min(1,Math.max(0,T/f))},d=(T)=>{if(T.compression)F=T.compression,A=F.virtualSize-R},P=()=>W,h=()=>Math.abs(N.velocity),a=()=>L1(N),$=()=>G,O=()=>V,S=(T)=>{if(R=T,F)A=F.virtualSize-R},v=()=>{if(E)clearTimeout(E);if(V)D.cancel(),window.removeEventListener("scroll",D);else H.cancel(),J.removeEventListener("scroll",H),J.removeEventListener("wheel",k),J.removeEventListener("wheel",x),J.removeEventListener("wheel",p)};if(V){if(W&&F)A=F.virtualSize-R;window.addEventListener("scroll",D,{passive:!0})}else if(W&&F){if(A=F.virtualSize-R,K)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",k,{passive:!1})}else{if(K)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",H,{passive:!0}),!Q)J.addEventListener("wheel",x,{passive:!1});else if(K)J.addEventListener("wheel",p,{passive:!1})}return{getScrollTop:r,scrollTo:l,scrollBy:B,isAtTop:M,isAtBottom:w,getScrollPercentage:z,getVelocity:h,isTracking:a,isScrolling:$,updateConfig:d,enableCompression:o,disableCompression:g,isCompressed:P,isWindowMode:O,updateContainerHeight:S,destroy:v}},B2=(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 T1=0.65,$1=0.5,b1=0.95,H1=0.1,k1=5,y1=100,$J=()=>{let J=null,q=0,Q=!1,j=0,Y=null,X=0,U=0,Z=null,_=[];return{name:"withScale",priority:20,setup(K){let{dom:V,config:b}=K,{classPrefix:A,horizontal:R}=b,W=()=>{let E=K.getVirtualTotal(),L=T0(E,K.sizeCache);if(L.isCompressed&&!Q){Q=!0,K.scrollController.enableCompression(L),K.updateContentSize(L.virtualSize),K.setScrollFns(()=>q,(g)=>{if(q=g,j=g,Y!==null)cancelAnimationFrame(Y),Y=null});let H=()=>{let g=j-q;if(Math.abs(g)<$1)q=j,Y=null;else{q+=g*T1;let l=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize;q=Math.max(0,Math.min(q,l)),Y=requestAnimationFrame(H)}K.scrollController.scrollTo(q)},C=V.viewport,D=(g)=>{g.preventDefault();let l=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+g.deltaY,l)),Y===null)Y=requestAnimationFrame(H)};C.addEventListener("wheel",D,{passive:!1});let x=()=>{if(Z!==null)cancelAnimationFrame(Z),Z=null},p=(g)=>{if(x(),Y!==null)cancelAnimationFrame(Y),Y=null;let r=g.touches[0];if(!r)return;let l=R?r.clientX:r.clientY;X=l,U=q,_=[{time:performance.now(),y:l}]},k=(g)=>{g.preventDefault();let r=g.touches[0];if(!r)return;let l=R?r.clientX:r.clientY,B=performance.now();if(_.push({time:B,y:l}),_.length>k1)_.shift();let M=X-l,z=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize,d=Math.max(0,Math.min(U+M,z));q=d,j=d,K.scrollController.scrollTo(d)},I=(g)=>{let r=performance.now(),l=_.filter((z)=>r-z.time<y1),B=0;if(l.length>=2){let z=l[0],d=l[l.length-1],P=d.time-z.time;if(P>0)B=(z.y-d.y)/P}if(_=[],Math.abs(B)<H1)return;let M=B*16,w=()=>{if(M*=b1,Math.abs(M)<0.5){Z=null;return}let d=K.getCachedCompression().virtualSize-K.state.viewportState.containerSize,P=q+M;if(P=Math.max(0,Math.min(P,d)),P<=0&&M<0||P>=d&&M>0){q=P,j=P,K.scrollController.scrollTo(P),Z=null;return}q=P,j=P,K.scrollController.scrollTo(P),Z=requestAnimationFrame(w)};Z=requestAnimationFrame(w)};if(C.addEventListener("touchstart",p,{passive:!0}),C.addEventListener("touchmove",k,{passive:!1}),C.addEventListener("touchend",I,{passive:!0}),C.addEventListener("touchcancel",I,{passive:!0}),K.destroyHandlers.push(()=>{if(C.removeEventListener("wheel",D),C.removeEventListener("touchstart",p),C.removeEventListener("touchmove",k),C.removeEventListener("touchend",I),C.removeEventListener("touchcancel",I),x(),Y!==null)cancelAnimationFrame(Y),Y=null}),!V.viewport.querySelector(`.${A}-scrollbar`)){if(J=u0(V.viewport,(r)=>K.scrollController.scrollTo(r),{},A,R),!V.viewport.classList.contains(`${A}-viewport--custom-scrollbar`))V.viewport.classList.add(`${A}-viewport--custom-scrollbar`);J.updateBounds(L.virtualSize,K.state.viewportState.containerSize);let g=J;K.afterScroll.push((r,l)=>{if(g)g.updatePosition(r),g.show()}),K.resizeHandlers.push((r,l)=>{if(g){let B=K.getCachedCompression();g.updateBounds(B.virtualSize,K.state.viewportState.containerSize)}})}}else if(!L.isCompressed&&Q)Q=!1,K.scrollController.disableCompression(),K.updateContentSize(L.actualSize);else if(L.isCompressed)K.scrollController.updateConfig({compression:L}),K.updateContentSize(L.virtualSize);if(J)J.updateBounds(L.virtualSize,K.state.viewportState.containerSize);K.state.cachedCompression={state:L,totalItems:E}};K.updateCompressionMode=W;let F=K.getCachedCompression.bind(K);K.getCachedCompression=()=>{if(K.state.cachedCompression)return K.state.cachedCompression.state;return F()},K.setVisibleRangeFn((E,L,H,C,D)=>{N=null,G=null;let x=T0(C,H);q2(E,L,H,C,x,D)}),K.setScrollToPosFn((E,L,H,C,D)=>{let x=T0(C,L);return X2(E,L,H,C,x,D)});let N=null,G=null;K.setPositionElementFn((E,L)=>{let H=K.getVirtualTotal(),C=T0(H,K.sizeCache);if(C.isCompressed){let D=K.scrollController.getScrollTop();if(N===null||L<G)G=L,N=Math.round(h0(L,D,K.sizeCache,H,K.state.viewportState.containerSize,C));let x=N+K.sizeCache.getOffset(L)-K.sizeCache.getOffset(G),p=K.config.horizontal;E.style.transform=p?`translateX(${x}px)`:`translateY(${x}px)`}else{let D=Math.round(K.sizeCache.getOffset(L)),x=K.config.horizontal;E.style.transform=x?`translateX(${D}px)`:`translateY(${D}px)`}}),W(),K.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 U2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,X=new Map,U=0,Z=0,_=(B)=>{let M=X.get(B);if(!M)M={items:Array(q),count:0,lastAccess:Date.now()},X.set(B,M);else M.lastAccess=Date.now();return M},K=(B)=>{return Math.floor(B/q)},V=(B)=>{return B%q},b=()=>U,A=(B)=>{U=B},R=(B)=>{if(B<0||B>=U)return;let M=K(B),w=X.get(M);if(!w)return;return w.items[V(B)]},W=(B)=>{if(B<0||B>=U)return!1;let M=K(B),w=X.get(M);if(!w)return!1;return w.items[V(B)]!==void 0},F=(B,M)=>{let w=K(B),z=_(w),d=V(B),P=z.items[d]===void 0;if(z.items[d]=M,P)z.count++,Z++;if(B>=U)U=B+1},N=(B,M)=>{for(let w=0;w<M.length;w++){let z=M[w];if(z!==void 0)F(B+w,z)}},G=(B)=>{if(B<0||B>=U)return!1;let M=K(B),w=X.get(M);if(!w)return!1;let z=V(B);if(w.items[z]===void 0)return!1;if(w.items[z]=void 0,w.count--,Z--,w.count===0)X.delete(M);return!0},E=(B,M)=>{let w=[];for(let z=B;z<=M&&z<U;z++)w.push(R(z));return w},L=(B,M)=>{for(let w=B;w<=M&&w<U;w++)if(!W(w))return!1;return!0},H=()=>{let B=[],M=null,w=Array.from(X.keys()).sort((z,d)=>z-d);for(let z of w){let d=X.get(z);if(!d)continue;let P=z*q;for(let h=0;h<q;h++){let a=P+h;if(a>=U)break;if(d.items[h]!==void 0)if(M===null)M={start:a,end:a};else if(a===M.end+1)M.end=a;else B.push(M),M={start:a,end:a};else if(M!==null)B.push(M),M=null}}if(M!==null)B.push(M);return B},C=(B,M)=>{let w=[],z=null;for(let d=B;d<=M&&d<U;d++)if(!W(d))if(z===null)z={start:d,end:d};else z.end=d;else if(z!==null)w.push(z),z=null;if(z!==null)w.push(z);return w},D=(B)=>{return X.has(B)},x=(B)=>{let M=X.get(B);if(M)M.lastAccess=Date.now()},p=(B,M)=>{if(B>M||X.size===0)return;let w=Date.now(),z=K(Math.max(0,B)),d=K(Math.min(U-1,M));for(let P=z;P<=d;P++){let h=X.get(P);if(h)h.lastAccess=w}},k=(B,M)=>{if(Z<=Q)return 0;let w=Math.max(0,B-j),z=Math.min(U-1,M+j),d=K(w),P=K(z),h=0,a=[];for(let[$,O]of X)if($<d||$>P)h+=O.count,a.push($),Z-=O.count,X.delete($);if(h>0&&Y)Y(h,a);return h},I=()=>{if(Z<=Q)return 0;let B=Array.from(X.entries()).sort(([,z],[,d])=>z.lastAccess-d.lastAccess),M=0,w=[];for(let[z,d]of B){if(Z<=Q)break;M+=d.count,Z-=d.count,w.push(z),X.delete(z)}if(M>0&&Y)Y(M,w);return M},o=()=>{return{totalItems:U,cachedItems:Z,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:U>0?1-Z/U:1}},g=()=>Z,r=()=>{X.clear(),Z=0};return{chunkSize:q,maxCachedItems:Q,getTotal:b,setTotal:A,get:R,has:W,set:F,setRange:N,delete:G,getRange:E,isRangeLoaded:L,getLoadedRanges:H,findUnloadedRanges:C,getChunkIndex:K,isChunkLoaded:D,touchChunk:x,touchChunksForRange:p,evictDistant:k,evictToLimit:I,getStats:o,getCachedCount:g,clear:r,reset:()=>{r(),U=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 U=[],Z=Z2(q),_=X.start;for(let K of Z){if(K.end<_)continue;if(K.start>X.end)break;if(K.start>_)U.push({start:_,end:Math.min(K.start-1,X.end)});if(_=K.end+1,_>X.end)break}if(_<=X.end)U.push({start:_,end:X.end});return U};var N2=(J={})=>{let{maskCharacter:q=_J,maxSampleSize:Q=VJ}=J,j=[],Y=!1,X=0,U=(b)=>{if(Y||b.length===0)return;let A=Math.min(b.length,Q);for(let R=0;R<A;R++){let W=b[R];if(!W||typeof W!=="object")continue;let F={};for(let[N,G]of Object.entries(W)){if(N.startsWith("_")||N==="id")continue;F[N]=String(G??"").length}if(Object.keys(F).length>0)j.push(F)}Y=!0},Z=()=>Y,_=(b)=>{let A={id:`${WJ}${X++}`,[v2]:!0,_index:b};if(j.length===0)return A.label=q.repeat(12),A;let R=j[b%j.length];for(let[W,F]of Object.entries(R))A[W]=q.repeat(Math.max(1,F));return A};return{analyzeStructure:U,hasAnalyzedStructure:Z,generate:_,generateRange:(b,A)=>{let R=[];for(let W=b;W<=A;W++)R.push(_(W));return R},clear:()=>{j=[],Y=!1,X=0}}},z0=(J)=>{if(!J||typeof J!=="object")return!1;return J[v2]===!0},S2=(J)=>{return J.filter((q)=>!z0(q))};var R1=50,_2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:Y,placeholder:X,pageSize:U=R1,onStateChange:Z,onItemsLoaded:_,onItemsEvicted:K}=J,V=U2({...Y,onEvict:(c,s)=>{K?.(c),C()}}),b=null,A=()=>{if(!b)b=N2(X);return b},R=new Map,W=!1,F,N=!0,G,E=[],L=0,H=new Map,C=()=>{Z?.(l())},D=()=>{R.clear();let c=V.getLoadedRanges();for(let s of c)for(let e=s.start;e<=s.end;e++){let t=V.get(e);if(t&&!z0(t))R.set(t.id,e)}},x=(c,s)=>{if(!z0(s))R.set(s.id,c)},p=(c)=>{R.delete(c)},k=(c,s)=>{return`${c}-${s}`},I=()=>V.getTotal(),o=()=>V.getCachedCount(),g=()=>W,r=()=>N,l=()=>({total:V.getTotal(),cached:V.getCachedCount(),isLoading:W,pendingRanges:E,error:F,hasMore:N,cursor:G}),B=()=>V,M=()=>A(),w=(c)=>{let s=V.get(c);if(s!==void 0)return s;if(c>=0&&c<V.getTotal())return A().generate(c);return},z=(c)=>{let s=R.get(c);if(s===void 0)return;return V.get(s)},d=(c)=>{return R.get(c)??-1},P=(c)=>{let s=V.get(c);return s!==void 0&&!z0(s)},h=(c,s)=>{let e=[],t=V.getTotal(),U0=0,Z0=0;V.touchChunksForRange(c,Math.min(s,t-1));for(let V0=c;V0<=s&&V0<t;V0++){let W0=V.get(V0);if(W0!==void 0)e.push(W0),U0++;else e.push(A().generate(V0)),Z0++}return e},a=(c)=>{V.setTotal(c),N=V.getCachedCount()<c,C()},$=(c,s=0,e)=>{if(b&&!b.hasAnalyzedStructure()&&c.length>0)b.analyzeStructure(c);for(let t=0;t<c.length;t++){let U0=c[t];if(U0!==void 0){let Z0=s+t;V.set(Z0,U0),x(Z0,U0)}}if(e!==void 0)V.setTotal(e);else if(s+c.length>V.getTotal())V.setTotal(s+c.length);if(V.getCachedCount()>=V.getTotal()&&V.getTotal()>0)N=!1;_?.(c,s,V.getTotal()),C()},O=(c,s)=>{let e=R.get(c);if(e===void 0)return!1;let t=V.get(e);if(!t)return!1;let U0={...t,...s};if(V.set(e,U0),s.id!==void 0&&s.id!==c)p(c),x(e,U0);return C(),!0},S=(c)=>{let s=R.get(c);if(s===void 0)return!1;V.delete(s),p(c);let e=V.getTotal();if(e>0)V.setTotal(e-1);return C(),!0},v=async(c,s)=>{if(!q)return;let e=k(c,s);if(H.has(e))return;let t=V.getLoadedRanges(),U0=c0({start:c,end:s},t,V.chunkSize);if(U0.length===0)return;let Z0=V.chunkSize,V0=[];for(let Q0 of U0){let M0=Math.floor(Q0.start/Z0),O0=Math.floor(Q0.end/Z0);for(let D0=M0;D0<=O0;D0++){let $0=D0*Z0,G0=$0+Z0-1,b0=k($0,G0);if(!V0.some((v0)=>v0.start===$0)&&!H.has(b0))V0.push({start:$0,end:G0})}}let W0=[];for(let Q0 of U0){let M0=Math.floor(Q0.start/Z0),O0=Math.floor(Q0.end/Z0);for(let D0=M0;D0<=O0;D0++){let $0=D0*Z0,G0=$0+Z0-1,b0=k($0,G0);if(H.has(b0)){let v0=H.get(b0);if(!W0.includes(v0))W0.push(v0)}}}for(let Q0 of V0){let M0=k(Q0.start,Q0.end),O0=(async()=>{E.push(Q0),W=!0,F=void 0,C();try{let D0=Q0.end-Q0.start+1,$0={offset:Q0.start,limit:D0,cursor:void 0},G0=await q.read($0);if($(G0.items,Q0.start,G0.total),G0.cursor)G=G0.cursor;let b0=Q0.start+G0.items.length;if(b0>=L){if(L=b0,G0.hasMore!==void 0)N=G0.hasMore;else if(G0.total!==void 0)N=b0<G0.total}}catch(D0){F=D0 instanceof Error?D0:Error(String(D0))}finally{H.delete(M0),E=E.filter((D0)=>D0.start!==Q0.start||D0.end!==Q0.end),W=H.size>0,C()}})();H.set(M0,O0),W0.push(O0)}await Promise.all(W0)},T=async(c,s)=>{if(V.isRangeLoaded(c,s))return;await v(c,s)},f=async()=>{if(!q)return;await v(0,U-1)},m=async()=>{if(!q||W||!N)return!1;let c=V.getCachedCount(),s=V.getTotal(),e=c,t=Math.min(e+U-1,s>0?s-1:e+U-1);if(e>=s&&s>0)return N=!1,!1;return await v(e,t),V.getCachedCount()>c},j0=async()=>{if(V.clear(),V.setTotal(0),R.clear(),b)b.clear();H.clear(),E=[],W=!1,G=void 0,N=!0,L=0,F=void 0,C()},u=(c,s)=>{if(V.evictDistant(c,s)>0)D()},q0=()=>{V.clear(),R.clear(),G=void 0,F=void 0,E=[],W=!1,C()},X0=()=>{if(V.reset(),R.clear(),b)b.clear();G=void 0,N=!0,L=0,F=void 0,E=[],W=!1,C()};if(Q&&Q.length>0)$(Q,0,j??Q.length);else if(j!==void 0)V.setTotal(j),C();return{getState:l,getTotal:I,getCached:o,getIsLoading:g,getHasMore:r,getStorage:B,getPlaceholders:M,getItem:w,getItemById:z,getIndexById:d,isItemLoaded:P,getItemsInRange:h,setTotal:a,setItems:$,updateItem:O,removeItem:S,loadRange:v,ensureRange:T,loadInitial:f,loadMore:m,reload:j0,evictDistant:u,clear:q0,reset:X0}};var bJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:Y,autoLoad:X=!0}=J,U=Q?.cancelThreshold??UJ,Z=Q?.preloadThreshold??ZJ,_=Q?.preloadAhead??NJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(K){let{emitter:V}=K,b=K.config.reverse,A=_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(K.state.isInitialized){let p=K.getVirtualTotal();K.sizeCache.rebuild(p),K.updateCompressionMode();let k=K.getCachedCompression();K.state.viewportState.totalSize=k.virtualSize,K.state.viewportState.actualSize=k.actualSize,K.state.viewportState.isCompressed=k.isCompressed,K.state.viewportState.compressionRatio=k.ratio,K.updateContentSize(k.virtualSize),K.renderIfNeeded()}},onItemsLoaded:(p,k,I)=>{if(K.state.isInitialized)K.forceRender(),V.emit("load:end",{items:p,total:I,offset:k})}});K.replaceDataManager(A);let R=null,W=null,F=0,N=!1,G=null,E=120,L=(p=!1)=>{if(N=!1,W=null,p)R=null;if(G!==null)clearTimeout(G),G=null},H=()=>{if(W){let p=W;W=null,K.dataManager.ensureRange(p.start,p.end).catch((k)=>{V.emit("error",{error:k,context:"ensureRange"})})}};K.afterScroll.push((p,k)=>{if(K.state.isDestroyed)return;let I=K.scrollController.getVelocity(),g=K.scrollController.isTracking()&&I<=U;if(F>U&&I<=U)N=!0;else if(N&&I>U)L();if(N&&I<0.5)L(!0);if(F=I,(K.scrollController.isAtTop()||K.scrollController.isAtBottom())&&(N||W))L(!0),g=!0;let l=N&&I>0.5;if(g&&!K.dataManager.getIsLoading()&&K.dataManager.getHasMore()){if(b){if(p<w2)V.emit("load:start",{offset:K.dataManager.getCached(),limit:p0}),K.dataManager.loadMore().catch((w)=>{V.emit("error",{error:w,context:"loadMore"})})}else if(K.state.viewportState.totalSize-p-K.state.viewportState.containerSize<w2)V.emit("load:start",{offset:K.dataManager.getCached(),limit:p0}),K.dataManager.loadMore().catch((z)=>{V.emit("error",{error:z,context:"loadMore"})})}let{renderRange:B}=K.state.viewportState;if(!R||B.start!==R.start||B.end!==R.end){if(R={start:B.start,end:B.end},g&&!l){if(W=null,G!==null)clearTimeout(G),G=null;let{start:w,end:z}=B,d=K.getVirtualTotal();if(I>Z)if(k==="down")z=Math.min(B.end+_,d-1);else w=Math.max(B.start-_,0);K.dataManager.ensureRange(w,z).catch((P)=>{V.emit("error",{error:P,context:"ensureRange"})})}else if(W={start:B.start,end:B.end},l){if(G!==null)clearTimeout(G);G=setTimeout(()=>{G=null,H(),L()},E)}}});let C=200,D=null;K.afterScroll.push((p,k)=>{if(D!==null)clearTimeout(D);D=setTimeout(()=>{D=null,H(),L()},C)}),K.destroyHandlers.push(()=>{if(D!==null)clearTimeout(D),D=null;L()});let x=()=>{if(K.state.isDestroyed)return;R=null;let{renderRange:p}=K.state.viewportState;if(p.end>0)K.dataManager.ensureRange(p.start,p.end).catch((k)=>{V.emit("error",{error:k,context:"ensureRange"})});H()};if(window.addEventListener("online",x),K.destroyHandlers.push(()=>{window.removeEventListener("online",x)}),V.on("load:start",()=>{K.dom.root.setAttribute("aria-busy","true")}),V.on("load:end",()=>{K.dom.root.removeAttribute("aria-busy")}),K.methods.set("loadVisibleRange",async()=>{R=null,W=null,K.forceRender();let{renderRange:p}=K.state.viewportState;if(p.end>0)V.emit("load:start",{offset:p.start,limit:p.end-p.start+1}),await K.dataManager.ensureRange(p.start,p.end)}),K.methods.set("reload",async()=>{R=null,W=null,K.invalidateRendered(),await K.dataManager.reload(),V.emit("load:start",{offset:0,limit:p0}),await K.dataManager.loadInitial(),K.forceRender();let{renderRange:p}=K.state.viewportState;if(p.end>0)await K.dataManager.ensureRange(p.start,p.end)}),X)V.emit("load:start",{offset:0,limit:p0}),K.dataManager.loadInitial().catch((p)=>{V.emit("error",{error:p,context:"loadInitial"})});else if(Y!==void 0)K.dataManager.setTotal(Y)}}};var HJ=()=>{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 K=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-K.left);else return Math.max(0,-K.top)},(K)=>{let V=Q.viewport.getBoundingClientRect();if(Y.horizontal){let b=V.left+window.scrollX;window.scrollTo(b+K,window.scrollY)}else{let b=V.top+window.scrollY;window.scrollTo(window.scrollX,b+K)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:U,innerWidth:Z}=window,_=()=>{let{innerWidth:K,innerHeight:V}=window,b=Y.horizontal?K:V,A=Y.horizontal?Z:U;if(Math.abs(b-A)<=1)return;U=V,Z=K,j.viewportState.containerSize=V,X.emit("resize",{width:K,height:V});for(let R=0;R<q.resizeHandlers.length;R++)q.resizeHandlers[R](K,V);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var f2=(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},kJ=(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},yJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),Y=0,X=0;for(let U=1;U<J;U++){let Z=q(U);if(Z!==j){let _=U-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:_}),X=X+1+_,j=Z,Y=U}}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 U=0;U<X.count;U++)j[Y]=J[X.firstDataIndex+U],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)}},V2=(J,q)=>{let Q=yJ(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:(A)=>{if(Q.length===0)return{type:"item",dataIndex:A,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let R=f2(Q,A),W=Q[R];if(A===W.headerLayoutIndex)return{type:"header",group:W};let F=A-W.headerLayoutIndex-1;return{type:"item",dataIndex:W.firstDataIndex+F,group:W}},layoutToDataIndex:(A)=>{if(Q.length===0)return A;let R=f2(Q,A),W=Q[R];if(A===W.headerLayoutIndex)return-1;let F=A-W.headerLayoutIndex-1;return W.firstDataIndex+F},dataToLayoutIndex:(A)=>{if(Q.length===0)return A;let R=kJ(Q,A),W=Q[R],F=A-W.firstDataIndex;return W.headerLayoutIndex+1+F},getGroupAtLayoutIndex:(A)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let R=f2(Q,A);return Q[R]},getGroupAtDataIndex:(A)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let R=kJ(Q,A);return Q[R]},getHeaderHeight:typeof Y==="number"?(A)=>Y:(A)=>{let R=Q[A];if(!R)return 0;return Y(R.key,A)},rebuild:(A)=>{Q=yJ(A,q.getGroupForIndex),j=A+Q.length}}};var W2=(J,q,Q,j,Y,X=!1,U=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=U?`${U}px`:"0";else Z.style.top=U?`${U}px`:"0",Z.style.left="0",Z.style.right="0";J.insertBefore(Z,J.firstChild);let _=-1,K=!1,V=0,b=(G)=>{if(G===_)return;_=G;let E=q.groups;if(G<0||G>=E.length){Z.textContent="";return}let L=E[G],H=j.headerTemplate(L.key,L.groupIndex),C=q.getHeaderHeight(G);if(X)Z.style.width=`${C}px`;else Z.style.height=`${C}px`;if(typeof H==="string")Z.innerHTML=H;else Z.replaceChildren(H)},A=(G)=>{let E=q.groups;if(E.length===0){W();return}let L=Q.getOffset(E[0].headerLayoutIndex);if(G<L){W();return}let H=0,C=E.length-1;while(H<C){let I=H+C+1>>>1;if(Q.getOffset(E[I].headerLayoutIndex)<=G)H=I;else C=I-1}let D=H;if(!K)R();b(D);let x=q.getHeaderHeight(D),p=0,k=D+1;if(k<E.length){let o=Q.getOffset(E[k].headerLayoutIndex)-G;if(o<x)p=o-x}if(p!==V)if(V=p,p===0)Z.style.transform="";else{let I=Math.round(p);Z.style.transform=X?`translateX(${I}px)`:`translateY(${I}px)`}},R=()=>{if(K)return;K=!0,Z.style.display=""},W=()=>{if(!K)return;K=!1,Z.style.display="none",_=-1,V=0,Z.style.transform=""},F=()=>{let G=_;if(_=-1,G>=0)b(G)},N=()=>{Z.remove(),_=-1,K=!1};return Z.style.display="none",{update:A,refresh:F,show:R,hide:W,destroy:N}};var PJ=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let U=Q.indexAtOffset(J),Z=Q.indexAtOffset(J+q);if(Z<j-1)Z++;return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,Z)),X},RJ=(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},zJ=(J,q,Q,j,Y,X)=>{if(j===0)return 0;let U=Math.max(0,Math.min(J,j-1)),Z=q.getOffset(U),_=q.getSize(U),K=q.getTotalSize(),V=Math.max(0,K-Q),b;switch(X){case"center":b=Z-Q/2+_/2;break;case"end":b=Z-Q+_;break;case"start":default:b=Z;break}return Math.max(0,Math.min(b,V))},CJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},wJ=(J,q)=>{return q.getTotalSize()},vJ=(J,q)=>{return q.getOffset(J)},SJ=(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,U=zJ)=>{return U(J,q,Q,j,X,Y)},fJ=(J,q)=>{return J.start===q.start&&J.end===q.end},IJ=(J,q)=>{return J>=q.start&&J<=q.end},pJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var hJ=(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 gJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,Q=null,j=[],Y=[];return{name:"withGroups",priority:10,setup(X){let{dom:U,config:Z,rawConfig:_}=X,{classPrefix:K}=Z,b=_.item.height;j=_.items?[..._.items]:[];let A=j.length,R={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=V2(A,R),Y=l0(j,q.groups);let W=a0(q,b);X.setSizeConfig(W),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length);let F=_.item.template,{headerTemplate:N}=J,G=(g,r,l)=>{if(C0(g))return N(g.groupKey,g.groupIndex);return F(g,r,l)},E=X.methods.get("_getGridLayout"),L=X.methods.get("_replaceGridRenderer"),H=X.methods.get("_updateGridLayoutForGroups"),C=X.methods.get("_getTableLayout"),D=X.methods.get("_updateTableForGroups"),x=X.methods.get("_getTableHeaderHeight");if(E&&L){if(H)H((B)=>{let M=Y[B];return!!(M&&C0(M))});let{createGridRenderer:g}=(D2(),W1(uJ)),r=E(),l=g(U.items,G,X.sizeCache,r,K,X.getContainerWidth(),()=>X.dataManager.getTotal(),Z.ariaIdPrefix);L(l)}else if(C&&D)D((g)=>C0(g),J.headerTemplate);else X.replaceTemplate(G);let p=x?x():0;if(U.root.classList.add(`${K}--grouped`),J.sticky!==!1){Q=W2(U.root,q,X.sizeCache,{...R,sticky:R.sticky??!1},K,Z.horizontal,p);let g=Q;X.afterScroll.push((r,l)=>{g.update(r)}),Q.update(X.scrollController.getScrollTop())}let k=()=>{if(!q)return;q.rebuild(j.length),Y=l0(j,q.groups);let g=a0(q,b);if(X.setSizeConfig(g),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};X.methods.set("setItems",(g)=>{j=g.slice(),k()}),X.methods.set("appendItems",(g)=>{j.push(...g),k()}),X.methods.set("prependItems",(g)=>{j.unshift(...g),k()}),X.methods.set("removeItem",(g)=>{j=j.filter((r)=>r.id!==g),k()});let{animateScroll:I,cancelScroll:o}=f0(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(g,r)=>{let l=q.dataToLayoutIndex(g),{align:B,behavior:M,duration:w}=R0(r),z=X.dataManager.getTotal(),d=P0(l,X.sizeCache,X.state.viewportState.containerSize,z,B,X.getCachedCompression());if(M==="smooth")I(X.scrollController.getScrollTop(),d,w);else o(),X.scrollController.scrollTo(d)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(o(),Q)Q.destroy(),Q=null;U.root.classList.remove(`${K}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var G2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},X=(W)=>{if(W<=0)return 0;if(!j)return Math.ceil(W/q);let F=0,N=0,G=0;for(let E=0;E<W;E++)if(j(E)){if(G++,N>0)F++,N=0;F++,N=0}else if(N++,N>=q)F++,N=0;if(N>0)F++;return F},U=(W)=>{return Y.row=Z(W),Y.col=_(W),Y},Z=(W)=>{if(!j)return Math.floor(W/q);let F=0,N=0;for(let G=0;G<=W;G++)if(j(G)){if(N>0)F++,N=0;if(G===W)return F;F++,N=0}else{if(G===W)return F;if(N++,N>=q)F++,N=0}return console.warn(`⚠️ getRow(${W}) fell through - returning ${F}`),F},_=(W)=>{if(!j)return W%q;if(j(W))return 0;let F=0;for(let N=0;N<=W;N++)if(j(N))F=0;else{if(N===W)return F;if(F++,F>=q)F=0}return F},K=(W,F,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let C=Math.max(0,W*q),D=Math.min(N-1,(F+1)*q-1);return{start:C,end:D}}let G=-1,E=-1,L=0,H=0;for(let C=0;C<N;C++){if(j(C)){if(H>0)L++,H=0;if(L>=W&&L<=F){if(G===-1)G=C;E=C}L++,H=0}else{if(L>=W&&L<=F){if(G===-1)G=C;E=C}if(H++,H>=q)L++,H=0}if(L>F&&H===0)break}if(G===-1)return{start:0,end:-1};return{start:G,end:E}},V=(W,F,N)=>{if(F<0||F>=q)return-1;let G=W*q+F;if(G<0||G>=N)return-1;return G},b=(W)=>{let F=(q-1)*Q;return Math.max(0,(W-F)/q)};return{get columns(){return q},get gap(){return Q},update:(W)=>{if(W.columns!==void 0)q=Math.max(1,Math.floor(W.columns));if(W.gap!==void 0)Q=W.gap;if(W.isHeaderFn!==void 0)j=W.isHeaderFn},getTotalRows:X,getPosition:U,getRow:Z,getCol:_,getItemRange:K,getItemIndex:V,getColumnWidth:b,getColumnOffset:(W,F)=>{let N=b(F);return W*(N+Q)}}};D2();var w1=new Set,xJ=(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:U,rawConfig:Z}=j,{classPrefix:_}=U;if(U.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let K=U.horizontal,V=()=>K?Y.viewport.clientHeight:j.getContainerWidth(),b=Z.items?.some((P)=>P.__groupHeader===!0),A={columns:J.columns,gap:J.gap??0};if(b)A.isHeaderFn=(P)=>{let h=j.dataManager.getItem(P);return!!(h&&h.__groupHeader===!0)};q=G2(A);let R=q.gap;j.setVirtualTotalFn(()=>{let P=j.dataManager.getTotal();return q.getTotalRows(P)});let W=Z.item,F=U.horizontal?W.width:W.height,N={containerWidth:V(),columns:q.columns,gap:q.gap},G={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof F==="function")j.setSizeConfig((P)=>{let h=N.containerWidth-2,a=(N.columns-1)*N.gap;return G.containerWidth=N.containerWidth,G.columns=N.columns,G.gap=N.gap,G.columnWidth=(h-a)/N.columns,G.row=q.getRow(P),G.column=q.getCol(P),G.totalRows=q.getTotalRows(j.dataManager.getTotal()),G.totalColumns=N.columns,F(P,G)+N.gap});else if(R>0)j.setSizeConfig(F+R);if(j.rebuildSizeCache(),R>0){let P=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let h=P();return h>0?h-N.gap:0}}Y.root.classList.add(`${_}--grid`);let E=V(),L=Z.item.template,H=()=>{Q=r0(Y.items,L,j.sizeCache,q,_,E,()=>j.dataManager.getTotal(),U.ariaIdPrefix,U.horizontal),j.replaceRenderer(Q)};H(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>A),j.methods.set("_replaceGridRenderer",(P)=>{Q=P}),j.methods.set("_updateGridLayoutForGroups",(P)=>{q.update({isHeaderFn:P});let h=j.dataManager.getTotal(),a=0;for(let $=0;$<h;$++)if(q.getCol($)===0){let O=j.sizeCache.getSize($);a+=O}if(j.sizeCache.getTotalSize=()=>a,U.horizontal)j.dom.content.style.width=`${a}px`;else j.dom.content.style.height=`${a}px`;H()}),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");A.columns=P.columns}if(P.gap!==void 0){if(P.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");A.gap=P.gap}if(q)q.update(A);let h=V();if(N.containerWidth=h,N.columns=A.columns,N.gap=A.gap??0,Q)Q.updateContainerWidth(h);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let a=0;a<j.contentSizeHandlers.length;a++)j.contentSizeHandlers[a]();if(Q)Q.clear();j.forceRender()});let C=null,D=null,x=!1,p=()=>{if(x)return;x=!0,C=j.methods.get("_getSelectedIds")??null,D=j.methods.get("_getFocusedIndex")??null},k=-1,I=-1,o=!0,g=U.overscan??3,r={start:0,end:0},l={start:0,end:0},B=()=>{if(j.state.isDestroyed)return;let P=j.scrollController.getScrollTop(),h=j.state.viewportState.containerSize;if(!o&&P===k&&h===I)return;k=P,I=h,o=!1;let a=j.getVirtualTotal();if(a===0||h===0)r.start=0,r.end=0;else{r.start=Math.max(0,j.sizeCache.indexAtOffset(P));let q0=j.sizeCache.indexAtOffset(P+h);if(q0<a-1)q0++;r.end=Math.min(a-1,Math.max(0,q0))}l.start=Math.max(0,r.start-g),l.end=Math.min(a-1,r.end+g);let $=j.state.viewportState;$.scrollPosition=P,$.visibleRange.start=r.start,$.visibleRange.end=r.end,$.renderRange.start=l.start,$.renderRange.end=l.end;let O=j.state.lastRenderRange,S=$.isCompressed,v=j.dataManager.getTotal(),T=q.getItemRange(l.start,l.end,v),f=j.dataManager.getItemsInRange(T.start,T.end),m=S?j.getCompressionContext():void 0;p();let j0=C?C():w1,u=D?D():-1;if(Q.render(f,T,j0,u,m),O.start!==l.start||O.end!==l.end)O.start=l.start,O.end=l.end,X.emit("range:change",{range:{start:l.start,end:l.end}})},M=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,o=!0,B()};j.setRenderFns(B,M);let w=typeof F==="function";j.resizeHandlers.push((P,h)=>{let a=K?h:P;if(N.containerWidth=a,Q)Q.updateContainerWidth(a);if(w){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let $=0;$<j.contentSizeHandlers.length;$++)j.contentSizeHandlers[$]();if(Q)Q.clear();j.forceRender()}});let{animateScroll:z,cancelScroll:d}=f0(j.scrollController,j.renderIfNeeded);if(j.methods.set("cancelScroll",d),j.methods.set("scrollToIndex",(P,h)=>{let a=Math.floor(P/J.columns),{align:$,behavior:O,duration:S}=R0(h),v=j.dataManager.getState(),T=q.getTotalRows(v.total),f=Math.max(0,Math.min(a,T-1)),m=P0(f,j.sizeCache,j.state.viewportState.containerSize,T,$,j.getCachedCompression());if(O==="smooth")z(j.scrollController.getScrollTop(),m,S);else d(),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(d(),Q)Q.destroy(),Q=null;Y.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};D2();var M2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,Y=0,X=[],U=()=>{let N=(q-1)*Q;Y=Math.max(0,(j-N)/q),X=Array(q);let G=Y+Q;for(let E=0;E<q;E++)X[E]=E*G};U();let Z=[],_=0,K=[],V=(N)=>{let G=0,E=N[0];for(let L=1;L<N.length;L++){let H=N[L];if(H<E)E=H,G=L}return G},b=(N,G)=>{if(N<=0)return _=0,Z=[],[];let E=Array(q).fill(0),L=Array(q);for(let D=0;D<q;D++)L[D]=[];let H=Array(N);for(let D=0;D<N;D++){let x=V(E),p=G(D),k=E[x];H[D]={index:D,x:X[x],y:k,lane:x,size:p,crossSize:Y},L[x].push(D),E[x]=k+p+Q}Z=L;let C=0;for(let D=0;D<q;D++){let x=E[D],p=x>0?x-Q:0;if(p>C)C=p}return _=C,H},A=(N)=>{if(N.length===0)return _>0?_:0;if(_>0)return _;let G=Array(q).fill(0);for(let L of N){let H=L.y+L.size,C=G[L.lane];if(H>C)G[L.lane]=H}let E=0;for(let L=0;L<q;L++)if(G[L]>E)E=G[L];return E},R=(N,G,E)=>{if(N.length===0||E<=G)return K.length=0,K;if(Z.length===0||Z.length!==q)return W(N,G,E);K.length=0;for(let L=0;L<q;L++){let H=Z[L],C=H.length;if(C===0)continue;let D=0,x=C;while(D<x){let p=D+x>>>1,k=N[H[p]];if(k.y+k.size<=G)D=p+1;else x=p}for(let p=D;p<C;p++){let k=N[H[p]];if(k.y>=E)break;K.push(k)}}return K},W=(N,G,E)=>{let L=[];for(let H of N)if(H.y+H.size>G&&H.y<E)L.push(H);return L};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(N)=>{let G=!1;if(N.columns!==void 0){let E=Math.max(1,Math.floor(N.columns));if(E!==q)q=E,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)U()},calculateLayout:b,getTotalSize:A,getVisibleItems:R}};var v1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}},S1=2,O2=(J,q,Q,j=!1,Y,X)=>{let U=v1(),Z=new Map,_=new Set,K=0,V="",b=-1,A={selected:!1,focused:!1},R=(I,o)=>{return A.selected=I,A.focused=o,A},W=`${Q}-item ${Q}-masonry-item`,F=`${Q}-item--selected`,N=`${Q}-item--focused`,G=(I,o)=>{if(typeof o==="string")I.innerHTML=o;else I.replaceChildren(o)},E=(I,o,g)=>{I.classList.toggle(F,o),I.classList.toggle(N,g)},L=(I,o)=>{if(j)I.style.transform=`translate(${Math.round(o.y)}px, ${Math.round(o.x)}px)`;else I.style.transform=`translate(${Math.round(o.x)}px, ${Math.round(o.y)}px)`},H=(I,o)=>{if(j)I.style.width=`${o.size}px`,I.style.height=`${o.crossSize}px`;else I.style.width=`${o.crossSize}px`,I.style.height=`${o.size}px`},C=(I,o,g,r,l)=>{let B=U.acquire(),M=R(r,l);if(B.className=W,B.dataset.index=String(I),B.dataset.id=String(o.id),B.dataset.lane=String(g.lane),B.ariaSelected=String(r),X)B.id=`${X}-item-${I}`;if(Y){let z=Y();if(z!==b)b=z,V=String(z);B.setAttribute("aria-setsize",V),B.setAttribute("aria-posinset",String(I+1))}H(B,g);let w=q(o,I,M);return G(B,w),E(B,r,l),L(B,g),{element:B,lastItemId:o.id,lastSelected:r,lastFocused:l,lastY:g.y,lastX:g.x,lastSize:g.size,lastCrossSize:g.crossSize,lastSeenFrame:K}},D=(I,o,g,r)=>{K++,_.clear();for(let B=0;B<o.length;B++)_.add(o[B].index);for(let[B,M]of Z)if(_.has(B))M.lastSeenFrame=K;else if(K-M.lastSeenFrame>S1)U.release(M.element),Z.delete(B);let l=null;for(let B=0;B<o.length;B++){let M=o[B],w=M.index,z=I(w);if(!z)continue;let d=g.has(z.id),P=w===r,h=Z.get(w);if(h){let a=h.lastItemId!==z.id,$=h.lastSelected!==d,O=h.lastFocused!==P,S=h.lastY!==M.y||h.lastX!==M.x,v=h.lastSize!==M.size||h.lastCrossSize!==M.crossSize;if(a||$||O){let T=R(d,P),f=q(z,w,T);G(h.element,f),E(h.element,d,P),h.element.dataset.id=String(z.id),h.element.ariaSelected=String(d),h.lastItemId=z.id,h.lastSelected=d,h.lastFocused=P}if(v)H(h.element,M),h.lastSize=M.size,h.lastCrossSize=M.crossSize;if(S)L(h.element,M),h.lastY=M.y,h.lastX=M.x}else{let a=C(w,z,M,d,P);if(!l)l=document.createDocumentFragment();l.appendChild(a.element),Z.set(w,a)}}if(l)J.appendChild(l)},x=()=>{for(let{element:I}of Z.values())U.release(I);Z.clear(),J.innerHTML=""};return{render:D,getElement:(I)=>Z.get(I)?.element,sortDOM:()=>{I0(J,Z.keys(),(I)=>Z.get(I)?.element)},clear:x,destroy:()=>{x(),U.clear()}}};var f1=new Set,mJ=(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:U,config:Z,rawConfig:_}=Y,K=Z.classPrefix,V=Z.horizontal;if(Z.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${K}--masonry`);let b=()=>{return V?X.viewport.clientHeight:X.viewport.clientWidth},A={columns:J.columns,gap:J.gap??0,containerSize:b()};q=M2(A);let R=_.item,W=V&&_.item.width?_.item.width:R.height,F={containerWidth:0,columns:0,gap:0,columnWidth:0},N=typeof W==="function"?(P)=>W(P,F):()=>W,G=()=>{let P=Y.dataManager.getTotal(),h=q;F.containerWidth=h.containerSize,F.columns=h.columns,F.gap=h.gap;let a=(h.columns-1)*h.gap;F.columnWidth=Math.max(0,(F.containerWidth-a)/h.columns),j=h.calculateLayout(P,N);let $=q.getTotalSize(j);if(Y.sizeCache.getTotalSize=()=>$,V)X.content.style.width=`${$}px`;else X.content.style.height=`${$}px`},E=_.item.template;Q=O2(X.items,E,K,V,()=>Y.dataManager.getTotal(),Z.ariaIdPrefix);let L=null,H=null,C=!1,D=()=>{if(C)return;C=!0,L=Y.methods.get("_getSelectedIds")??null,H=Y.methods.get("_getFocusedIndex")??null},x=(P)=>Y.dataManager.getItem(P),p=-1,k=-1,I=!0,o=(Z.overscan??3)*100,g=()=>{if(Y.state.isDestroyed)return;D();let P=Y.scrollController.getScrollTop(),h=Y.state.viewportState.containerSize;if(!I&&P===p&&h===k)return;p=P,k=h,I=!1;let a=Math.max(0,P-o),$=P+h+o,O=q.getVisibleItems(j,a,$),S=L?L():f1,v=H?H():-1;if(Q&&O.length>0)Q.render(x,O,S,v);let T=Y.state.viewportState;T.scrollPosition=P;let f=O.length,m=f>0?O[0].index:0,j0=f>0?O[f-1].index:0;T.visibleRange.start=m,T.visibleRange.end=j0,T.renderRange.start=m,T.renderRange.end=j0;let u=Y.state.lastRenderRange;if(u.start!==m||u.end!==j0)u.start=m,u.end=j0,U.emit("range:change",{range:{start:m,end:j0}})},r=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,I=!0,g()};Y.setRenderFns(g,r);let l=(P,h)=>{let a=V?h:P;if(q&&q.containerSize!==a){if(q.update({containerSize:a}),G(),Q)Q.clear();r()}};Y.resizeHandlers.push(l);let B=()=>{G(),r()},M=Y.dataManager,w=(P)=>{if(typeof M[P]!=="function")return;let h=M[P].bind(M);M[P]=(...a)=>{h(...a),B()}};w("setItems"),w("appendItems"),w("prependItems"),w("updateItem"),w("removeItem");let{animateScroll:z,cancelScroll:d}=f0(Y.scrollController,Y.renderIfNeeded);Y.methods.set("cancelScroll",d),Y.methods.set("scrollToIndex",(P,h)=>{let a=j[P];if(!a)return;let{align:$,behavior:O,duration:S}=R0(h),v=a.y,T=Y.state.viewportState.containerSize,f=v;if($==="center")f=v-T/2+a.size/2;else if($==="end")f=v-T+a.size;if(f=Math.max(0,f),O==="smooth")z(Y.scrollController.getScrollTop(),f,S);else d(),Y.scrollController.scrollTo(f)}),G(),Y.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),Y.destroyHandlers.push(()=>{if(d(),Q)Q.destroy();X.root.classList.remove(`${K}--masonry`)})}}};var A2=(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)},E2=(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},I2=(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},p2=(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},h2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},u2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var dJ=(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 cJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=A2(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:U,emitter:Z,config:_}=X,{classPrefix:K,ariaIdPrefix:V}=_;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}U.root.classList.add(`${K}--selectable`);let b=new Map,A=()=>{b.clear();let E=X.dataManager.getTotal(),L=X.dataManager.getCached();if(L===0)return;if(L>=E){for(let C=0;C<E;C++){let D=X.dataManager.getItem(C);if(D)b.set(D.id,C)}return}let H=X.dataManager.getStorage();if(H&&typeof H.getLoadedRanges==="function"){let C=H.getLoadedRanges();for(let D of C)for(let x=D.start;x<=D.end;x++){let p=X.dataManager.getItem(x);if(p)b.set(p.id,x)}}};Z.on("load:end",({items:E,offset:L})=>{if(!E||E.length===0)return;if(L!==void 0)for(let H=0;H<E.length;H++){let C=E[H];if(C&&C.id!==void 0)b.set(C.id,L+H)}else A()}),A(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:R}=X.getRenderFns(),W=()=>{R();let E=(L)=>{let H=b.get(L);if(H===void 0)return;return X.dataManager.getItem(H)};Z.emit("selection:change",{selected:o0(j),items:i0(j,E)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${K}-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",U.root.appendChild(Y);let F=Y;Z.on("selection:change",({selected:E})=>{let L=E.length;if(L===0)F.textContent="";else if(L===1)F.textContent="1 item selected";else F.textContent=`${L} items selected`});let N=()=>{if(X.state.isDestroyed)return;if(!U.root.matches(":focus-visible"))return;let E=X.dataManager.getTotal();if(E===0)return;let L=j.focusedIndex>=0?Math.min(j.focusedIndex,E-1):0;j=L2(j,L),j.focusVisible=!0,U.root.setAttribute("aria-activedescendant",`${V}-item-${L}`),X.scrollController.scrollTo(P0(L,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let H=X.dataManager.getItem(L);if(H)X.renderer.updateItemClasses(L,j.selected.has(H.id),!0)};U.root.addEventListener("focusin",N);let G=(E)=>{if(X.state.isDestroyed)return;let L=E.relatedTarget;if(L&&U.root.contains(L))return;let H=j.focusedIndex;if(j.focusVisible=!1,U.root.removeAttribute("aria-activedescendant"),H>=0){let C=X.dataManager.getItem(H);if(C)X.renderer.updateItemClasses(H,j.selected.has(C.id),!1)}};U.root.addEventListener("focusout",G),X.clickHandlers.push((E)=>{if(X.state.isDestroyed)return;let H=E.target.closest("[data-index]");if(!H)return;let C=parseInt(H.dataset.index??"-1",10);if(C<0)return;let D=X.dataManager.getItem(C);if(!D)return;Z.emit("item:click",{item:D,index:C,event:E}),j=L2(j,C),j.focusVisible=!1,U.root.setAttribute("aria-activedescendant",`${V}-item-${C}`),j=g0(j,D.id,q),W()}),X.keydownHandlers.push((E)=>{if(X.state.isDestroyed)return;let L=X.dataManager.getTotal(),H=j.focusedIndex,C=!1,D=!1,x=j;switch(E.key){case"ArrowUp":x=I2(j,L,_.wrap),x.focusVisible=!0,C=!0,D=!0;break;case"ArrowDown":x=p2(j,L,_.wrap),x.focusVisible=!0,C=!0,D=!0;break;case"Home":x=h2(j,L),x.focusVisible=!0,C=!0,D=!0;break;case"End":x=u2(j,L),x.focusVisible=!0,C=!0,D=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let p=X.dataManager.getItem(j.focusedIndex);if(p)x=g0(j,p.id,q),x.focusVisible=!0;C=!0}break}if(C){E.preventDefault(),j=x;let p=j.focusedIndex;if(p>=0){let k=X.dataManager.getState(),I=P0(p,X.sizeCache,X.state.viewportState.containerSize,k.total,"center",X.getCachedCompression());X.scrollController.scrollTo(I),U.root.setAttribute("aria-activedescendant",`${V}-item-${p}`)}else U.root.removeAttribute("aria-activedescendant");if(D){let{selected:k}=j;if(H>=0&&H!==p){let I=X.dataManager.getItem(H);if(I)X.renderer.updateItemClasses(H,k.has(I.id),!1)}if(p>=0){let I=X.dataManager.getItem(p);if(I)X.renderer.updateItemClasses(p,k.has(I.id),!0)}}else W()}}),X.methods.set("select",(...E)=>{j=s0(j,E,q),W()}),X.methods.set("deselect",(...E)=>{j=n0(j,E),W()}),X.methods.set("toggleSelect",(E)=>{j=g0(j,E,q),W()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let E=X.getAllLoadedItems();j=E2(j,E,q),A(),W()}),X.methods.set("clearSelection",()=>{j=F2(j),W()}),X.methods.set("getSelected",()=>{return o0(j)}),X.methods.set("getSelectedItems",()=>{return i0(j,(L)=>{let H=b.get(L);if(H===void 0)return;return X.dataManager.getItem(H)})}),X.destroyHandlers.push(()=>{if(F&&F.parentNode)F.remove();U.root.removeEventListener("focusin",N),U.root.removeEventListener("focusout",G)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var lJ=(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(),U=Q.getVirtualTotal(),Z=Q.methods.get("getSelected"),_=Z&&Z().length>0?Z():void 0;if(U===0){let A={index:0,offsetInItem:0,total:0};if(_)A.selectedIds=_;return A}let K,V;if(X.isCompressed){let R=Y/X.virtualSize*U;K=Math.max(0,Math.min(Math.floor(R),U-1)),V=(R-K)*Q.sizeCache.getSize(K)}else K=Q.sizeCache.indexAtOffset(Y),V=Y-Q.sizeCache.getOffset(K);V=Math.max(0,V);let b={index:K,offsetInItem:V,total:U};if(_)b.selectedIds=_;return b});let j=(Y)=>{let{index:X,offsetInItem:U,selectedIds:Z}=Y,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(U))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let N=Q.getCachedCompression();Q.updateContentSize(N.virtualSize)}let V=Q.getCachedCompression(),b=Math.max(0,Math.min(X,_-1)),A;if(V.isCompressed){let N=Q.sizeCache.getSize(b),G=N>0?U/N:0;A=(b+G)/_*V.virtualSize}else A=Q.sizeCache.getOffset(b)+U;let R=Q.state.viewportState.containerSize,W=Math.max(0,V.virtualSize-R);if(A=Math.max(0,Math.min(A,W)),Q.scrollController.scrollTo(A),Z&&Z.length>0){let N=Q.methods.get("select");if(N)N(...Z)}let F=Q.methods.get("loadVisibleRange");if(F)requestAnimationFrame(()=>{F()});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=[],U=0,Z=()=>{X=Y.map((N,G)=>({def:N,index:G,width:0,minWidth:I1(N.minWidth??q,1),maxWidth:N.maxWidth??Q,resizable:N.resizable??j,offset:0}))},_=(N)=>{if(X.length===0){U=0;return}let G=0,E=0;for(let L=0;L<X.length;L++){let H=X[L],C=H.def;if(C.width!==void 0)H.width=g2(C.width,H.minWidth,H.maxWidth),G+=H.width;else E++}if(E>0){let H=Math.max(0,N-G)/E;for(let C=0;C<X.length;C++){let D=X[C];if(D.def.width===void 0)D.width=g2(H,D.minWidth,D.maxWidth)}}K()},K=()=>{let N=0;for(let G=0;G<X.length;G++){let E=X[G];E.offset=N,N+=E.width}U=N},V=(N,G)=>{if(N<0||N>=X.length)return 0;let E=X[N];if(!E.resizable)return E.width;let L=g2(G,E.minWidth,E.maxWidth);return E.width=L,K(),L},b=(N)=>{return X[N]},A=(N)=>{if(X.length===0)return;if(N<0)return X[0];if(N>=U)return X[X.length-1];let G=0,E=X.length-1;while(G<E){let L=G+E>>>1,H=X[L];if(N<H.offset)E=L-1;else if(N>=H.offset+H.width)G=L+1;else return H}return X[G]},R=(N)=>{if(N<0||N>=X.length)return 0;return X[N].offset},W=(N)=>{if(N<0||N>=X.length)return 0;return X[N].width},F=(N)=>{Y=N,Z()};return Z(),{get columns(){return X},get totalWidth(){return U},resolve:_,updateColumns:F,resizeColumn:V,getColumn:b,getColumnAtX:A,getColumnOffset:R,getColumnWidth:W}},g2=(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,U)=>{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 _=document.createElement("div");_.className=`${j}-table-header-scroll`,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 K=[],V=[],b=[],A=!0,R=null,W="asc",F=null,N=!1,G=-1,E=0,L=0,H=(M,w)=>{let z=document.createElement("div");z.className=`${j}-table-header-cell`,z.setAttribute("role","columnheader"),z.setAttribute("aria-colindex",String(w+1)),z.dataset.columnKey=M.def.key;let d=M.def.align;if(d==="center")z.classList.add(`${j}-table-header-cell--center`);else if(d==="right")z.classList.add(`${j}-table-header-cell--right`);let P=document.createElement("div");P.className=`${j}-table-header-content`;let h=M.def.header?M.def.header(M.def):M.def.label;if(typeof h==="string")P.textContent=h;else P.appendChild(h);if(z.appendChild(P),M.def.sortable){let a=document.createElement("span");a.className=`${j}-table-header-sort`,a.setAttribute("aria-hidden","true"),z.appendChild(a),b.push(a),z.classList.add(`${j}-table-header-cell--sortable`)}else b.push(null);if(M.resizable){let a=document.createElement("div");a.className=`${j}-table-header-resize`,a.dataset.resizeIndex=String(w),z.appendChild(a),V.push(a)}return z},C=(M)=>{F=M,_.textContent="",K=[],V=[],b=[];let w=M.columns;for(let z=0;z<w.length;z++){let d=w[z],P=H(d,z);K.push(P),_.appendChild(P)}if(D(M),R)x(R,W)},D=(M)=>{F=M;let w=M.columns;_.style.width=`${M.totalWidth}px`;for(let z=0;z<K.length&&z<w.length;z++){let d=K[z],P=w[z];d.style.width=`${P.width}px`}},x=(M,w)=>{if(R=M,W=w,!F)return;let z=F.columns;for(let d=0;d<b.length&&d<z.length;d++){let P=b[d];if(!P)continue;if(z[d].def.key===M&&M!==null)P.textContent=w==="asc"?"▲":"▼",P.style.opacity="0.7",K[d].setAttribute("aria-sort",w==="asc"?"ascending":"descending");else P.textContent="",P.style.opacity="0",K[d].removeAttribute("aria-sort")}},p=(M)=>{_.style.transform=`translateX(${-M}px)`},k=(M)=>{let w=M.target;if(!w.dataset.resizeIndex)return;if(M.preventDefault(),M.stopPropagation(),G=parseInt(w.dataset.resizeIndex,10),!F)return;let z=F.getColumn(G);if(!z||!z.resizable)return;N=!0,E=M.clientX,L=z.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",w.classList.add(`${j}-table-header-resize--active`),w.setPointerCapture(M.pointerId),w.addEventListener("pointermove",I),w.addEventListener("pointerup",o),w.addEventListener("pointercancel",o)},I=(M)=>{if(!N||!F)return;let w=M.clientX-E;if(Math.abs(w)<1)return;let z=Math.max(0,L+w);Y(G,z)},o=(M)=>{if(!N)return;let w=M.target;w.removeEventListener("pointermove",I),w.removeEventListener("pointerup",o),w.removeEventListener("pointercancel",o);try{w.releasePointerCapture(M.pointerId)}catch{}w.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",N=!1,G=-1},g=(M)=>{let w=M.target;if(w.dataset.resizeIndex!==void 0)return;if(N)return;let z=w;while(z&&!z.dataset.columnKey)if(z=z.parentElement,z===Z||z===null)return;if(!z||!z.dataset.columnKey)return;let d=z.dataset.columnKey;if(!F)return;let P=F.columns,h=-1;for(let $=0;$<P.length;$++)if(P[$].def.key===d){h=$;break}if(h===-1)return;let a=P[h];if(U)U({key:d,index:h,event:M});if(a.def.sortable&&X){let $;if(R===d)if(W==="asc")$="desc";else $=null;else $="asc";X({key:d,index:h,direction:$})}};return Z.addEventListener("pointerdown",k),Z.addEventListener("click",g),{element:Z,update:D,updateSort:x,rebuild:C,show:()=>{if(A)return;A=!0,Z.style.display=""},hide:()=>{if(!A)return;A=!1,Z.style.display="none"},destroy:()=>{Z.removeEventListener("pointerdown",k),Z.removeEventListener("click",g),q.style.position="",q.style.top="",q.style.left="",q.style.right="",q.style.bottom="",Z.remove(),K=[],V=[],b=[],F=null,A=!1},syncScroll:p}};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}}};var b2=(J,q,Q,j,Y,X,U,Z)=>{let _=p1(),K=new Map,V=0,b=-1,A=Q,R=null,W=null,F=($,O)=>{R=$,W=O},N=($,O)=>{if(O)$.setAttribute("aria-selected","true");else $.removeAttribute("aria-selected")},G=`${Y}-item ${Y}-table-row`,E=`${Y}-item--selected`,L=`${Y}-item--focused`,H=`${Y}-table-cell`,C=`${Y}-table-cell--center`,D=`${Y}-table-cell--right`,x=`${Y}-item--odd`,p=`${Y}-item ${Y}-table-row ${Y}-table-group-header`,k=`${Y}-table-group-header-content`,I=($,O,S,v)=>{if(S.def.cell){let T=S.def.cell(O,S.def,v);if(typeof T==="string")$.innerHTML=T;else $.replaceChildren(T)}else{let T=O[S.def.key];$.textContent=T!=null?String(T):""}},o=($,O,S,v)=>{let T=G;if(Z&&(O&1)===1)T+=` ${x}`;if(S)T+=` ${E}`;if(v)T+=` ${L}`;$.className=T},g=($,O)=>{let S=O.def.align;if(S==="center")$.classList.add(C),$.classList.remove(D);else if(S==="right")$.classList.add(D),$.classList.remove(C);else $.classList.remove(C,D)},r=($,O)=>{let v=A.columns.length;if(O.length===v)return O;let T=[];for(let f=0;f<v;f++){let m;if(f<O.length)m=O[f];else m=document.createElement("div"),m.className=H,$.appendChild(m);T.push(m)}for(let f=v;f<O.length;f++)O[f].remove();return T},l=($,O,S)=>{let v=_.acquire(),T=$;v.style.width=`${A.totalWidth}px`;let f=S.getSize(O);v.style.height=`${f}px`,v.className=p,v.setAttribute("role","presentation"),v.setAttribute("data-id",String($.id)),v.setAttribute("data-index",String(O)),v.removeAttribute("aria-selected"),v.removeAttribute("aria-rowindex"),v.replaceChildren();let m=document.createElement("div");if(m.className=k,W){let u=W(T.groupKey,T.groupIndex);if(typeof u==="string")m.innerHTML=u;else m.appendChild(u)}v.appendChild(m);let j0=S.getOffset(O);return v.style.transform=`translateY(${j0}px)`,{element:v,cells:[],index:O,isGroupHeader:!0,lastItemId:$.id,lastSelected:!1,lastFocused:!1,lastOffset:j0,lastHeight:f,lastSeenFrame:V}},B=($,O,S,v,T)=>{let f=_.acquire();f.style.width=`${A.totalWidth}px`;let m=T.getSize(O);f.style.height=`${m}px`,o(f,O,S,v),f.setAttribute("role","row"),f.setAttribute("data-id",String($.id)),f.setAttribute("data-index",String(O)),f.id=`${X}-${O}`,f.setAttribute("aria-rowindex",String(O+2));let j0=U();if(j0!==b)b=j0;N(f,S);let u=r(f,[]),q0=A.columns;for(let c=0;c<u.length&&c<q0.length;c++){let s=u[c],e=q0[c];s.style.left=`${e.offset}px`,s.style.width=`${e.width}px`,s.setAttribute("role","gridcell"),s.setAttribute("aria-colindex",String(c+1)),g(s,e),I(s,$,e,O)}let X0=T.getOffset(O);return f.style.transform=`translateY(${X0}px)`,{element:f,cells:u,index:O,isGroupHeader:!1,lastItemId:$.id,lastSelected:S,lastFocused:v,lastOffset:X0,lastHeight:m,lastSeenFrame:V}},M=($,O,S,v)=>{V++;for(let[u,q0]of K)if(u>=O.start&&u<=O.end)q0.lastSeenFrame=V;else if(V-q0.lastSeenFrame>2)_.release(q0.element),K.delete(u);let T=!1,f=U();if(f!==b)b=f,T=!0;let m=null,j0=q();for(let u=O.start;u<=O.end;u++){let q0=u-O.start,X0=$[q0];if(!X0)continue;let c=S.has(X0.id),s=u===v,e=R?R(X0):!1,t=K.get(u);if(t){if(t.isGroupHeader!==e){_.release(t.element),K.delete(u);let U0=e?l(X0,u,j0):B(X0,u,c,s,j0);if(K.set(u,U0),!m)m=document.createDocumentFragment();m.appendChild(U0.element);continue}if(e){if(t.lastItemId!==X0.id){let W0=X0,Q0=t.element.firstElementChild;if(Q0&&W){let M0=W(W0.groupKey,W0.groupIndex);if(typeof M0==="string")Q0.innerHTML=M0;else Q0.replaceChildren(M0)}t.element.setAttribute("data-id",String(X0.id)),t.lastItemId=X0.id}let Z0=j0.getOffset(u);if(t.lastOffset!==Z0)t.lastOffset=Z0,t.element.style.transform=`translateY(${Z0}px)`;let V0=j0.getSize(u);if(t.lastHeight!==V0)t.lastHeight=V0,t.element.style.height=`${V0}px`;t.lastSeenFrame=V}else{let U0=t.lastItemId!==X0.id,Z0=t.lastSelected!==c,V0=t.lastFocused!==s;if(U0){let M0=A.columns;for(let O0=0;O0<t.cells.length&&O0<M0.length;O0++)I(t.cells[O0],X0,M0[O0],u);o(t.element,u,c,s),t.element.setAttribute("data-id",String(X0.id)),N(t.element,c),t.lastItemId=X0.id,t.lastSelected=c,t.lastFocused=s}else if(Z0||V0)o(t.element,u,c,s),N(t.element,c),t.lastSelected=c,t.lastFocused=s;let W0=j0.getOffset(u);if(t.lastOffset!==W0)t.lastOffset=W0,t.element.style.transform=`translateY(${W0}px)`;let Q0=j0.getSize(u);if(t.lastHeight!==Q0)t.lastHeight=Q0,t.element.style.height=`${Q0}px`;if(T)t.element.setAttribute("aria-rowindex",String(u+2));t.lastSeenFrame=V}}else{let U0=e?l(X0,u,j0):B(X0,u,c,s,j0);if(K.set(u,U0),!m)m=document.createDocumentFragment();m.appendChild(U0.element)}}if(m)J.appendChild(m)},w=($,O,S,v)=>{let T=K.get($);if(!T)return;if(T.isGroupHeader)return;let f=T.lastItemId!==O.id,m=T.lastSelected!==S,j0=T.lastFocused!==v;if(f||m||j0){if(f){let u=A.columns;for(let q0=0;q0<T.cells.length&&q0<u.length;q0++)I(T.cells[q0],O,u[q0],$);T.element.setAttribute("data-id",String(O.id)),T.lastItemId=O.id}o(T.element,$,S,v),N(T.element,S),T.lastSelected=S,T.lastFocused=v}},z=($,O,S)=>{let v=K.get($);if(!v)return;if(v.isGroupHeader)return;let T=v.lastSelected!==O,f=v.lastFocused!==S;if(T||f)o(v.element,$,O,S),N(v.element,O),v.lastSelected=O,v.lastFocused=S},d=($)=>{A=$;let O=$.columns;for(let[,S]of K)if(S.element.style.width=`${$.totalWidth}px`,S.cells.length>0)for(let v=0;v<S.cells.length&&v<O.length;v++){let T=S.cells[v],f=O[v];T.style.left=`${f.offset}px`,T.style.width=`${f.width}px`}},P=($)=>{return K.get($)?.element},h=()=>{for(let[,$]of K)_.release($.element);K.clear(),V=0,b=-1};return{render:M,updateItem:w,updateItemClasses:z,getElement:P,updateColumnLayout:d,setGroupHeaderFn:F,clear:h,destroy:()=>{h(),_.clear()}}};var h1=new Set,aJ=(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:U,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 K=J.resizable??!0,V=J.minColumnWidth??50,b=J.maxColumnWidth??1/0,A=J.columnBorders??!1,R=J.rowBorders??!0,W=J.rowHeight,F=J.headerHeight??(typeof W==="number"?W:40),N=J.sort?.key??null,G=J.sort?.direction??"asc";if(q=T2(J.columns,V,b,K),typeof W==="function")Y.setSizeConfig(W);else if(typeof W==="number")Y.setSizeConfig(W);if(Y.rebuildSizeCache(),X.root.classList.add(`${_}--table`),R)X.root.classList.add(`${_}--table-row-borders`);if(A)X.root.classList.add(`${_}--table-col-borders`);X.items.setAttribute("role","grid"),X.items.setAttribute("aria-colcount",String(J.columns.length));let E=Y.getContainerWidth();q.resolve(E);let L=($,O)=>{if(!q)return;let S=q.getColumn($);if(!S)return;let v=S.width,T=q.resizeColumn($,O);if(Q)Q.update(q);if(j)j.updateColumnLayout(q);D(),U.emit("column:resize",{key:S.def.key,index:$,previousWidth:v,width:T})},H=($)=>{if($.direction===null)N=null,G="asc";else N=$.key,G=$.direction;if(Q)Q.updateSort(N,G);U.emit("column:sort",$)},C=($)=>{U.emit("column:click",$)};if(Q=$2(X.root,X.viewport,F,_,L,H,C),Q.rebuild(q),N)Q.updateSort(N,G);let D=()=>{if(!q)return;let $=q.totalWidth;X.content.style.minWidth=`${$}px`,X.items.style.minWidth=`${$}px`};D(),j=b2(X.items,()=>Y.sizeCache,q,J.columns,_,Z.ariaIdPrefix,()=>Y.dataManager.getTotal(),Y.rawConfig.item?.striped);let x=null,p=null,k=!1,I=()=>{if(k)return;k=!0,x=Y.methods.get("_getSelectedIds")??null,p=Y.methods.get("_getFocusedIndex")??null},o=-1,g=-1,r=!0,l=Z.overscan??3,B={start:0,end:0},M={start:0,end:0},w=()=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getScrollTop(),O=Y.state.viewportState.containerSize;if(!r&&$===o&&O===g)return;o=$,g=O,r=!1;let S=Y.getVirtualTotal();if(S===0||O===0)B.start=0,B.end=0;else{B.start=Math.max(0,Y.sizeCache.indexAtOffset($));let u=Y.sizeCache.indexAtOffset($+O);if(u<S-1)u++;B.end=Math.min(S-1,Math.max(0,u))}M.start=Math.max(0,B.start-l),M.end=Math.min(S-1,B.end+l);let v=Y.state.viewportState;v.scrollPosition=$,v.visibleRange.start=B.start,v.visibleRange.end=B.end,v.renderRange.start=M.start,v.renderRange.end=M.end;let T=Y.state.lastRenderRange,f=Y.dataManager.getItemsInRange(M.start,M.end);I();let m=x?x():h1,j0=p?p():-1;if(j.render(f,M,m,j0),T.start!==M.start||T.end!==M.end)T.start=M.start,T.end=M.end,U.emit("range:change",{range:{start:M.start,end:M.end}})},z=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,r=!0,w()};Y.setRenderFns(w,z);let d=Q,P=-1,h=()=>{let $=X.viewport.scrollLeft;if($!==P){if(P=$,d.syncScroll)d.syncScroll($)}};Y.afterScroll.push(()=>{h()});let a=()=>{h()};X.viewport.addEventListener("scroll",a,{passive:!0}),Y.resizeHandlers.push(($,O)=>{if(!q)return;if(q.resolve($),Q)Q.update(q);if(j)j.updateColumnLayout(q);D()}),Y.methods.set("updateColumns",($)=>{if(!q||!Q)return;if(q.updateColumns($),q.resolve(Y.getContainerWidth()),Q.rebuild(q),N)Q.updateSort(N,G);if(D(),j)j.updateColumnLayout(q),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",($,O)=>{if(!q)return;let S;if(typeof $==="string"){let v=q.columns;S=-1;for(let T=0;T<v.length;T++)if(v[T].def.key===$){S=T;break}if(S===-1)return}else S=$;L(S,O)}),Y.methods.set("getColumnWidths",()=>{if(!q)return{};let $={},O=q.columns;for(let S=0;S<O.length;S++)$[O[S].def.key]=O[S].width;return $}),Y.methods.set("setSort",($,O)=>{if(N=$,G=O??"asc",Q)Q.updateSort(N,G)}),Y.methods.set("getSort",()=>{return{key:N,direction:G}}),Y.methods.set("_getTableLayout",()=>q),Y.methods.set("_replaceTableRenderer",($)=>{j=$}),Y.methods.set("_updateTableForGroups",($,O)=>{if(j)j.setGroupHeaderFn($,O)}),Y.methods.set("_getTableHeaderHeight",()=>F),Y.contentSizeHandlers.push(()=>{D()}),Y.destroyHandlers.push(()=>{if(X.viewport.removeEventListener("scroll",a),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.items.setAttribute("role","listbox"),X.items.removeAttribute("aria-colcount")})},destroy(){if(Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null}}};export{aJ as withTable,lJ as withSnapshots,cJ as withSelection,FJ as withScrollbar,$J as withScale,HJ as withPage,mJ as withMasonry,gJ as withGroups,xJ as withGrid,bJ as withAsync,BJ as vlist,g0 as toggleSelection,PJ as simpleVisibleRange,s0 as selectItems,E2 as selectAll,fJ as rangesEqual,B2 as rafThrottle,OJ as needsScaling,Z2 as mergeRanges,dJ as isSelected,z0 as isPlaceholderItem,IJ as isInRange,C0 as isGroupHeader,i0 as getSelectedItems,o0 as getSelectedIds,T0 as getScaleState,EJ as getScaleInfo,T0 as getScale,pJ as getRangeCount,AJ as getMaxItemsWithoutScaling,S2 as filterPlaceholders,hJ as diffRanges,n0 as deselectItems,b2 as createTableRenderer,T2 as createTableLayout,$2 as createTableHeader,W2 as createStickyHeader,U2 as createSparseStorage,k0 as createSizeCache,A2 as createSelectionState,u0 as createScrollbar,TJ as createScrollController,N2 as createPlaceholderManager,Q2 as createMeasuredSizeCache,O2 as createMasonryRenderer,M2 as createMasonryLayout,a0 as createGroupedSizeFn,V2 as createGroupLayout,r0 as createGridRenderer,G2 as createGridLayout,j2 as createEmitter,_2 as createAsyncManager,F2 as clearSelection,SJ as clampScrollPosition,CJ as calculateTotalSize,P0 as calculateScrollToIndex,q2 as calculateScaledVisibleRange,X2 as calculateScaledScrollToIndex,GJ as calculateScaledRenderRange,h0 as calculateScaledItemPosition,RJ as calculateRenderRange,c0 as calculateMissingRanges,vJ as calculateItemOffset,MJ as calculateIndexFromScrollPosition,wJ as calculateActualSize,l0 as buildLayoutItems,y0 as MAX_VIRTUAL_SIZE,DJ as MAX_VIRTUAL_HEIGHT};
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export { createSizeCache, countVisibleItems, countItemsFittingFromBottom, getOffsetForVirtualIndex, type SizeCache, } from "./sizes";
6
6
  export { createMeasuredSizeCache, type MeasuredSizeCache, } from "./measured";
7
+ export { sortRenderedDOM } from "./sort";
7
8
  export { createRenderer, createDOMStructure, updateContentHeight, updateContentWidth, resolveContainer, getContainerDimensions, type Renderer, type DOMStructure, type CompressionContext, type CompressedPositionFn, type CompressionStateFn, } from "./renderer";
8
9
  export { createViewportState, updateViewportState, updateViewportSize, updateViewportItems, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, getScrollDirection, rangesEqual, isInRange, getRangeCount, rangeToIndices, diffRanges, getSimpleCompressionState, simpleVisibleRange, simpleScrollToIndex, NO_COMPRESSION, type CompressionState, type VisibleRangeFn, type ScrollToIndexFn, } from "./viewport";
9
10
  export { MAX_VIRTUAL_SIZE, MAX_VIRTUAL_HEIGHT, getCompressionState, getCompressionState as getCompression, needsCompression, getMaxItemsWithoutCompression, getCompressionInfo, calculateCompressedVisibleRange, calculateCompressedRenderRange, calculateCompressedItemPosition, calculateCompressedScrollToIndex, calculateIndexFromScrollPosition, } from "./scale";
@@ -59,6 +59,12 @@ export interface Renderer<T extends VListItem = VListItem> {
59
59
  updateItemClasses: (index: number, isSelected: boolean, isFocused: boolean) => void;
60
60
  /** Get rendered item element by index */
61
61
  getElement: (index: number) => HTMLElement | undefined;
62
+ /**
63
+ * Reorder DOM children to match logical item order (by data-index).
64
+ * Called on scroll idle so screen readers encounter items in the correct
65
+ * sequence. Items are position:absolute so visual layout is unaffected.
66
+ */
67
+ sortDOM: () => void;
62
68
  /** Clear all rendered items */
63
69
  clear: () => void;
64
70
  /** Destroy renderer and cleanup */
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared DOM sort utility for accessibility.
3
+ *
4
+ * Virtual list renderers append new elements at the end of the container
5
+ * for performance (batched DocumentFragment insertion). After scrolling,
6
+ * DOM order diverges from logical item order. Screen readers traverse
7
+ * DOM order, so items are encountered in a nonsensical sequence.
8
+ *
9
+ * This utility reorders DOM children to match logical index order.
10
+ * Called on scroll idle — zero cost during scroll, single lightweight
11
+ * reflow when idle (items are position:absolute, no geometry change).
12
+ *
13
+ * Used by: core renderer, grid renderer, masonry renderer, and core.ts
14
+ * inlined render path.
15
+ */
16
+ /**
17
+ * Reorder DOM children so they follow logical data-index order.
18
+ *
19
+ * @param container - The items container element
20
+ * @param keys - The rendered Map's keys (item indices)
21
+ * @param getElement - Lookup function: index → HTMLElement
22
+ */
23
+ export declare const sortRenderedDOM: (container: HTMLElement, keys: IterableIterator<number>, getElement: (index: number) => HTMLElement | undefined) => void;
24
+ //# sourceMappingURL=sort.d.ts.map
@@ -1 +1 @@
1
- .vlist--table{overflow:hidden;min-height:inherit}.vlist--table .vlist-viewport{overflow:auto}.vlist--table .vlist-items{contain:layout style}.vlist-table-header{position:absolute;top:0;left:0;right:0;z-index:5;overflow:hidden;display:flex;align-items:stretch;box-sizing:border-box;will-change:scroll-position;contain:layout style;background-color:var(--vlist-bg,#ffffff);border-bottom:1px solid var(--vlist-border,#e5e7eb);font-weight:600;font-size:0.8125rem;letter-spacing:0.01em;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-scroll{position:relative;display:flex;align-items:stretch;height:100%;min-width:100%;flex-shrink:0}.vlist-table-header-cell{position:relative;display:flex;align-items:center;height:100%;box-sizing:border-box;flex-shrink:0;user-select:none;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);border-right:1px solid transparent;transition:background-color 0.15s ease}.vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,#f9fafb)}.vlist-table-header-cell--sortable{cursor:pointer}.vlist-table-header-cell--sortable:active{background-color:var(--vlist-bg-selected,#eff6ff)}.vlist-table-header-cell--center{justify-content:center}.vlist-table-header-cell--right{justify-content:flex-end}.vlist-table-header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;pointer-events:none}.vlist-table-header-sort{margin-left:4px;flex-shrink:0;opacity:0;font-size:0.7em;transition:opacity 0.15s ease;pointer-events:none;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-resize{position:absolute;top:0;right:-3px;bottom:0;width:5px;cursor:col-resize;z-index:2;touch-action:none;opacity:0;transition:opacity 0.15s ease}.vlist-table-header-resize::after{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;transform:translateX(-50%);background-color:var(--vlist-border,#e5e7eb);transition:background-color 0.15s ease}.vlist-table-header-cell:hover .vlist-table-header-resize{opacity:1}.vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}.vlist-table-header-resize--active{opacity:1}.vlist-table-header-resize--active::after{background-color:var(--vlist-border-selected,#3b82f6)}.vlist--col-resizing,.vlist--col-resizing *{cursor:col-resize !important;user-select:none !important}.vlist-table-row{position:absolute;top:0;left:0;display:flex;box-sizing:border-box;contain:content;border-bottom:none;background-color:var(--vlist-bg,#ffffff);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration,150ms) var(--vlist-transition-timing,ease-in-out);will-change:transform}.vlist--scrolling .vlist-table-row{transition:none}.vlist--selectable .vlist-table-row{cursor:pointer}.vlist--selectable .vlist-table-row:hover{background-color:var(--vlist-bg-hover,#f9fafb)}.vlist-table-row.vlist-item--selected{background-color:var(--vlist-bg-selected,#eff6ff)}.vlist--selectable .vlist-table-row.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover,#dbeafe)}.vlist-table-row.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-table-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);font-size:0.875rem;color:var(--vlist-text,#111827)}.vlist-table-cell--center{text-align:center;justify-content:center}.vlist-table-cell--right{text-align:right;justify-content:flex-end}.vlist--table-row-borders .vlist-table-row{border-bottom:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-cell{border-right:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-header-cell{border-right-color:var(--vlist-border,#e5e7eb)}[data-theme-mode="dark"] .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,#1f2937)}[data-theme-mode="dark"] .vlist-table-header-resize::after{background-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}
1
+ .vlist--table{overflow:hidden;min-height:inherit}.vlist--table .vlist-viewport{overflow:auto}.vlist--table .vlist-items{contain:layout style}.vlist-table-header{position:absolute;top:0;left:0;right:0;z-index:5;overflow:hidden;display:flex;align-items:stretch;box-sizing:border-box;will-change:scroll-position;contain:layout style;background-color:var(--vlist-bg,#ffffff);border-bottom:1px solid var(--vlist-border,#e5e7eb);font-weight:600;font-size:0.8125rem;letter-spacing:0.01em;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-scroll{position:relative;display:flex;align-items:stretch;height:100%;min-width:100%;flex-shrink:0}.vlist-table-header-cell{position:relative;display:flex;align-items:center;height:100%;box-sizing:border-box;flex-shrink:0;user-select:none;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);border-right:1px solid transparent;transition:background-color 0.15s ease}.vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,#f9fafb)}.vlist-table-header-cell--sortable{cursor:pointer}.vlist-table-header-cell--sortable:active{background-color:var(--vlist-bg-selected,#eff6ff)}.vlist-table-header-cell--center{justify-content:center}.vlist-table-header-cell--right{justify-content:flex-end}.vlist-table-header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;pointer-events:none}.vlist-table-header-sort{margin-left:4px;flex-shrink:0;opacity:0;font-size:0.7em;transition:opacity 0.15s ease;pointer-events:none;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-resize{position:absolute;top:0;right:-3px;bottom:0;width:5px;cursor:col-resize;z-index:2;touch-action:none;opacity:0;transition:opacity 0.15s ease}.vlist-table-header-resize::after{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;transform:translateX(-50%);background-color:var(--vlist-border,#e5e7eb);transition:background-color 0.15s ease}.vlist-table-header-cell:hover .vlist-table-header-resize{opacity:1}.vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}.vlist-table-header-resize--active{opacity:1}.vlist-table-header-resize--active::after{background-color:var(--vlist-border-selected,#3b82f6)}.vlist--col-resizing,.vlist--col-resizing *{cursor:col-resize !important;user-select:none !important}.vlist-table-row{position:absolute;top:0;left:0;display:flex;box-sizing:border-box;contain:content;border-bottom:none;background-color:var(--vlist-bg,#ffffff);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration,150ms) var(--vlist-transition-timing,ease-in-out);will-change:transform}.vlist--scrolling .vlist-table-row{transition:none}.vlist--selectable .vlist-table-row{cursor:pointer}.vlist--selectable .vlist-table-row:hover{background-color:var(--vlist-bg-hover,#f9fafb)}.vlist-table-row.vlist-item--selected{background-color:var(--vlist-bg-selected,#eff6ff)}.vlist--selectable .vlist-table-row.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover,#dbeafe)}.vlist-table-row.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-table-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);font-size:0.875rem;color:var(--vlist-text,#111827)}.vlist-table-cell--center{text-align:center;justify-content:center}.vlist-table-cell--right{text-align:right;justify-content:flex-end}.vlist--table-row-borders .vlist-table-row{border-bottom:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-cell{border-right:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-header-cell{border-right-color:var(--vlist-border,#e5e7eb)}.vlist-table-group-header{display:flex;align-items:center;background-color:var(--vlist-bg,#ffffff);cursor:default;user-select:none;pointer-events:none}.vlist-table-group-header-content{flex:1;min-width:0;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem)}.vlist--table-row-borders .vlist-table-group-header{border-bottom:none;border-top:1px solid var(--vlist-border,#e5e7eb)}.vlist--table.vlist--grouped .vlist-sticky-header{z-index:4}[data-theme-mode="dark"] .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,#1f2937)}[data-theme-mode="dark"] .vlist-table-header-resize::after{background-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-resize:hover::after{background-color:var(--vlist-focus-ring,#3b82f6)}[data-theme-mode="dark"] .vlist-table-group-header{background-color:var(--vlist-bg,#111827)}[data-theme-mode="dark"] .vlist--table-row-borders .vlist-table-group-header{border-top-color:var(--vlist-border,#374151)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",