@floor/vlist 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,19 +2,21 @@
2
2
 
3
3
  Lightweight, high-performance virtual list with zero dependencies and dimension-agnostic architecture.
4
4
 
5
+ **v1.2.0** — [Changelog](./changelog.txt)
6
+
5
7
  [![npm version](https://img.shields.io/npm/v/%40floor%2Fvlist.svg)](https://www.npmjs.com/package/@floor/vlist)
6
8
  [![bundle size](https://img.shields.io/bundlephobia/minzip/@floor/vlist)](https://bundlephobia.com/package/@floor/vlist)
7
- [![tests](https://img.shields.io/badge/tests-2268%20passing-brightgreen)](https://github.com/floor/vlist)
9
+ [![tests](https://img.shields.io/badge/tests-2268_passing-brightgreen)](https://github.com/floor/vlist)
8
10
  [![license](https://img.shields.io/npm/l/vlist.svg)](https://github.com/floor/vlist/blob/main/LICENSE)
9
11
 
10
12
  - **Zero dependencies** — no external libraries
11
13
  - **Ultra memory efficient** — ~0.1-0.2 MB constant overhead regardless of dataset size
12
- - **~8 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
14
+ - **~8.4 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
13
15
  - **Builder API** — composable features with perfect tree-shaking
14
- - **Grid, masonry, sections, async, selection, scale** — all opt-in
16
+ - **Grid, masonry, groups, async, selection, scale** — all opt-in
15
17
  - **Horizontal & vertical** — semantically correct orientation support
16
18
  - **Reverse, page-scroll, wrap** — every layout mode
17
- - **Accessible** — WAI-ARIA, keyboard navigation, screen-reader friendly
19
+ - **Accessible** — WAI-ARIA, keyboard navigation, focus-visible, screen-reader friendly
18
20
  - **React, Vue, Svelte** — framework adapters available
19
21
 
20
22
  **30+ interactive examples → [vlist.dev](https://vlist.dev)**
@@ -24,9 +26,11 @@ Lightweight, high-performance virtual list with zero dependencies and dimension-
24
26
 
25
27
  - **Dimension-agnostic API** — semantically correct terminology for both orientations
26
28
  - **Performance optimized** — 13-pattern optimization playbook applied across the entire rendering pipeline
27
- - **Horizontal sections** — sticky headers work in horizontal carousels
29
+ - **Horizontal groups** — sticky headers work in horizontal carousels
28
30
  - **Horizontal grid layouts** — 2D grids work in both orientations
29
31
  - **Masonry** — shortest-lane placement via `withMasonry()`
32
+ - **Keyboard accessible** — focus-visible outlines, arrow/Home/End navigation, Tab support
33
+ - **Responsive grid & masonry** — context-injected `columnWidth` auto-recalculates on resize
30
34
 
31
35
  ## Installation
32
36
 
@@ -63,7 +67,7 @@ list.on('item:click', ({ item }) => console.log(item))
63
67
  Start with the base, add only what you need:
64
68
 
65
69
  ```typescript
66
- import { vlist, withGrid, withSections, withSelection } from '@floor/vlist'
70
+ import { vlist, withGrid, withGroups, withSelection } from '@floor/vlist'
67
71
 
68
72
  const list = vlist({
69
73
  container: '#app',
@@ -71,7 +75,7 @@ const list = vlist({
71
75
  item: { height: 200, template: renderPhoto },
72
76
  })
73
77
  .use(withGrid({ columns: 4, gap: 16 }))
74
- .use(withSections({
78
+ .use(withGroups({
75
79
  getGroupForIndex: (i) => photos[i].category,
76
80
  headerHeight: 40,
77
81
  headerTemplate: (cat) => `<h2>${cat}</h2>`,
@@ -84,12 +88,12 @@ const list = vlist({
84
88
 
85
89
  | Feature | Size | Description |
86
90
  |---------|------|-------------|
87
- | **Base** | 8.1 KB | Core virtualization |
88
- | `withGrid()` | +3.8 KB | 2D grid layout |
89
- | `withMasonry()` | +2.3 KB | Pinterest-style masonry layout |
90
- | `withSections()` | +4.1 KB | Grouped lists with sticky/inline headers |
91
+ | **Base** | 8.4 KB | Core virtualization |
92
+ | `withGrid()` | +3.9 KB | 2D grid layout with context injection |
93
+ | `withMasonry()` | +2.4 KB | Pinterest-style masonry layout |
94
+ | `withGroups()` | +4.1 KB | Grouped lists with sticky/inline headers |
91
95
  | `withAsync()` | +3.9 KB | Lazy loading with adapters |
92
- | `withSelection()` | +1.6 KB | Single/multiple selection + keyboard nav |
96
+ | `withSelection()` | +1.7 KB | Single/multiple selection + keyboard nav |
93
97
  | `withScale()` | +2.6 KB | 1M+ items via scroll compression |
94
98
  | `withScrollbar()` | +1.2 KB | Custom scrollbar UI |
95
99
  | `withPage()` | +0.4 KB | Document-level scrolling |
@@ -125,7 +129,7 @@ const gallery = vlist({
125
129
  ### Sticky Headers
126
130
 
127
131
  ```typescript
128
- import { vlist, withSections } from '@floor/vlist'
132
+ import { vlist, withGroups } from '@floor/vlist'
129
133
 
130
134
  const contacts = vlist({
131
135
  container: '#contacts',
@@ -135,7 +139,7 @@ const contacts = vlist({
135
139
  template: (contact) => `<div>${contact.name}</div>`,
136
140
  },
137
141
  })
138
- .use(withSections({
142
+ .use(withGroups({
139
143
  getGroupForIndex: (i) => sortedContacts[i].lastName[0].toUpperCase(),
140
144
  headerHeight: 36,
141
145
  headerTemplate: (letter) => `<div class="header">${letter}</div>`,
@@ -176,9 +180,9 @@ const list = vlist({
176
180
 
177
181
  | Pattern | Key options |
178
182
  |---------|------------|
179
- | **Chat UI** | `reverse: true` + `withSections({ sticky: false })` |
183
+ | **Chat UI** | `reverse: true` + `withGroups({ sticky: false })` |
180
184
  | **Horizontal carousel** | `orientation: 'horizontal'`, `item.width` |
181
- | **Horizontal sections** | `orientation: 'horizontal'` + `withSections()` |
185
+ | **Horizontal groups** | `orientation: 'horizontal'` + `withGroups()` |
182
186
  | **Horizontal grid** | `orientation: 'horizontal'` + `withGrid()` |
183
187
  | **Masonry** | `withMasonry({ columns: 4, gap: 16 })` |
184
188
  | **Page-level scroll** | `withPage()` |
@@ -275,7 +279,7 @@ Each feature's config is fully typed — hover in your IDE for details.
275
279
  ```typescript
276
280
  withGrid({ columns: 4, gap: 16 })
277
281
  withMasonry({ columns: 4, gap: 16 })
278
- withSections({ getGroupForIndex, headerHeight, headerTemplate, sticky?: true })
282
+ withGroups({ getGroupForIndex, headerHeight, headerTemplate, sticky?: true })
279
283
  withSelection({ mode: 'single' | 'multiple', initial?: [...ids] })
280
284
  withAsync({ adapter: { read }, loading?: { cancelThreshold? } })
281
285
  withScale() // no config — auto-activates at 16.7M px
@@ -337,10 +341,10 @@ This makes the codebase clearer and eliminates semantic confusion when working w
337
341
 
338
342
  | Configuration | Gzipped |
339
343
  |---------------|---------|
340
- | Base only | 8.1 KB |
341
- | + Grid | 11.9 KB |
342
- | + Sections | 12.2 KB |
343
- | + Async | 12.0 KB |
344
+ | Base only | 8.4 KB |
345
+ | + Grid | 12.3 KB |
346
+ | + Groups | 12.6 KB |
347
+ | + Async | 12.4 KB |
344
348
 
345
349
  ### Memory Efficiency
346
350
 
@@ -2,7 +2,7 @@
2
2
  * vlist/builder — Scroll Utilities
3
3
  * Easing, scroll-argument resolution, and smooth scroll animation.
4
4
  *
5
- * Shared by builder/core.ts, grid feature, and sections feature to
5
+ * Shared by builder/core.ts, grid feature, and groups feature to
6
6
  * avoid duplicating ~70 lines of scroll helpers in each consumer.
7
7
  */
8
8
  import type { ScrollToOptions } from "../types";
@@ -2,7 +2,7 @@
2
2
  * vlist/builder - Types
3
3
  * Feature interface, builder config, builder context, and return types
4
4
  */
5
- import type { VListItem, VListEvents, ItemConfig, ItemTemplate, Range, ViewportState, EventHandler, Unsubscribe, ScrollToOptions, ScrollSnapshot, VListAdapter, GridConfig, GroupsConfig, SelectionConfig, ScrollbarOptions } from "../types";
5
+ import type { VListItem, VListEvents, ItemConfig, ItemTemplate, Range, ViewportState, EventHandler, Unsubscribe, ScrollToOptions, ScrollSnapshot, VListAdapter, GridConfig, MasonryConfig, GroupsConfig, SelectionConfig, ScrollbarOptions } from "../types";
6
6
  import type { DOMStructure, Renderer, SizeCache, CompressionContext } from "../rendering";
7
7
  import type { CompressionState } from "../rendering/viewport";
8
8
  import type { SimpleDataManager } from "./data";
@@ -54,10 +54,12 @@ export interface VListConfig<T extends VListItem = VListItem> extends Omit<Build
54
54
  /** Scrollbar mode (shorthand — same as top-level `scrollbar`). */
55
55
  scrollbar?: "native" | "none" | ScrollbarOptions;
56
56
  };
57
- /** Layout mode (default: list). Set to `'grid'` with `grid` config to enable `withGrid()`. */
58
- layout?: "list" | "grid";
57
+ /** Layout mode (default: list). Set to `'grid'` or `'masonry'` with matching config. */
58
+ layout?: "list" | "grid" | "masonry";
59
59
  /** Grid configuration — used when `layout` is `'grid'`. */
60
60
  grid?: GridConfig;
61
+ /** Masonry configuration — used when `layout` is `'masonry'`. */
62
+ masonry?: MasonryConfig;
61
63
  /** Async data adapter — enables `withAsync()`. Omit `items` when using an adapter. */
62
64
  adapter?: VListAdapter<T>;
63
65
  /** Loading behavior for async adapter. */
@@ -69,7 +71,7 @@ export interface VListConfig<T extends VListItem = VListItem> extends Omit<Build
69
71
  /** Number of items to preload in scroll direction. Default: 50 */
70
72
  preloadAhead?: number;
71
73
  };
72
- /** Section grouping configuration — enables `withSections()`. */
74
+ /** Section grouping configuration — enables `withGroups()`. */
73
75
  groups?: GroupsConfig;
74
76
  /** Selection configuration — enables `withSelection()`. */
75
77
  selection?: SelectionConfig;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * vlist/groups - Builder Feature
3
- * Adds grouped lists with sticky section headers.
3
+ * Adds grouped lists with sticky headers.
4
4
  *
5
5
  * Priority: 10 (runs first — transforms item list and height function before rendering)
6
6
  *
@@ -39,8 +39,7 @@ export interface GroupsFeatureConfig {
39
39
  * Adds grouped lists with sticky section headers.
40
40
  *
41
41
  * ```ts
42
- * import { vlist } from 'vlist/builder'
43
- * import { withGroups } from 'vlist/groups'
42
+ * import { vlist, withGroups } from '@floor/vlist'
44
43
  *
45
44
  * const contacts = vlist({
46
45
  * container: '#contacts',
@@ -60,5 +59,5 @@ export interface GroupsFeatureConfig {
60
59
  * .build()
61
60
  * ```
62
61
  */
63
- export declare const withSections: <T extends VListItem = VListItem>(config: GroupsFeatureConfig) => VListFeature<T>;
62
+ export declare const withGroups: <T extends VListItem = VListItem>(config: GroupsFeatureConfig) => VListFeature<T>;
64
63
  //# sourceMappingURL=feature.d.ts.map
@@ -2,9 +2,9 @@
2
2
  * vlist - Groups Domain
3
3
  * Sticky headers and grouped lists
4
4
  */
5
- export { withSections, type GroupsFeatureConfig } from "./feature";
5
+ export { withGroups, type GroupsFeatureConfig } from "./feature";
6
6
  export type { GroupsConfig, GroupBoundary, LayoutEntry, GroupHeaderItem, GroupLayout, StickyHeader, } from "./types";
7
- export { isGroupHeader, isGroupHeader as isSectionHeader } from "./types";
7
+ export { isGroupHeader } from "./types";
8
8
  export { createGroupLayout, buildLayoutItems, createGroupedSizeFn, } from "./layout";
9
9
  export { createStickyHeader } from "./sticky";
10
10
  //# sourceMappingURL=index.d.ts.map
package/dist/index.d.ts CHANGED
@@ -10,14 +10,14 @@ export { withScale } from "./features/scale";
10
10
  export { withAsync } from "./features/async";
11
11
  export { withScrollbar } from "./features/scrollbar";
12
12
  export { withPage } from "./features/page";
13
- export { withSections } from "./features/sections";
13
+ export { withGroups } from "./features/groups";
14
14
  export { withGrid } from "./features/grid";
15
15
  export { withMasonry } from "./features/masonry";
16
16
  export { withSelection } from "./features/selection";
17
17
  export { withSnapshots } from "./features/snapshots";
18
18
  export type { VListItem, VListEvents, ItemTemplate, ItemState, SelectionMode, SelectionConfig, SelectionState, ScrollbarConfig, ScrollbarOptions, ScrollConfig, ScrollToOptions, ScrollSnapshot, VListAdapter, AdapterParams, AdapterResponse, Range, ViewportState, EventHandler, Unsubscribe, GridSizeContext, GridHeightContext, } from "./types";
19
19
  export type { VListBuilder, VList, BuilderConfig, VListConfig, VListFeature, BuilderContext, } from "./builder";
20
- export { createGroupLayout as createSectionLayout, buildLayoutItems, createGroupedSizeFn as createSectionedSizeFn, createStickyHeader, isGroupHeader as isSectionHeader, type GroupsConfig as SectionsConfig, type GroupBoundary as SectionBoundary, type LayoutEntry, type GroupHeaderItem as SectionHeaderItem, type GroupLayout as SectionLayout, type StickyHeader, } from "./features/sections";
20
+ export { createGroupLayout, buildLayoutItems, createGroupedSizeFn, createStickyHeader, isGroupHeader, type GroupsConfig, type GroupBoundary, type LayoutEntry, type GroupHeaderItem, type GroupLayout, type StickyHeader, } from "./features/groups";
21
21
  export { createGridLayout, createGridRenderer, type GridConfig, type GridLayout, type GridPosition, type GridRenderer, type ItemRange, } from "./features/grid";
22
22
  export { createMasonryLayout, createMasonryRenderer, type MasonryConfig, type MasonryLayout, type MasonryRenderer, type GetItemFn, type ItemPlacement, } from "./features/masonry";
23
23
  export { createSizeCache, type SizeCache, createMeasuredSizeCache, type MeasuredSizeCache, simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges, MAX_VIRTUAL_SIZE, MAX_VIRTUAL_HEIGHT, getCompressionState as getScaleState, getCompression as getScale, needsCompression as needsScaling, getMaxItemsWithoutCompression as getMaxItemsWithoutScaling, getCompressionInfo as getScaleInfo, calculateCompressedVisibleRange as calculateScaledVisibleRange, calculateCompressedRenderRange as calculateScaledRenderRange, calculateCompressedItemPosition as calculateScaledItemPosition, calculateCompressedScrollToIndex as calculateScaledScrollToIndex, calculateIndexFromScrollPosition, type CompressionState as ScaleState, } from "./rendering";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:F2,getOwnPropertyNames:eJ,getOwnPropertyDescriptor:J1}=Object,Q1=Object.prototype.hasOwnProperty;var h2=new WeakMap,j1=(J)=>{var q=h2.get(J),Q;if(q)return q;if(q=F2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")eJ(J).map((j)=>!Q1.call(q,j)&&F2(q,j,{get:()=>J[j],enumerable:!(Q=J1(J,j))||Q.enumerable}));return h2.set(J,q),q};var q1=(J,q)=>{for(var Q in q)F2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var u2=(J,q)=>()=>(J&&(q=J(J=0)),q);var X1=(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}},Y1=(J,q)=>{let Q=q,j=new Float64Array(0),K=(B)=>{Q=B,j=new Float64Array(B+1),j[0]=0;for(let N=0;N<B;N++)j[N+1]=j[N]+J(N)};K(q);let X=(B)=>{if(Q===0)return 0;if(B<=0)return 0;if(B>=j[Q])return Q-1;let N=0,D=Q-1;while(N<D){let Y=N+D+1>>>1;if(j[Y]<=B)N=Y;else D=Y-1}return N};return{getOffset:(B)=>{if(B<=0)return 0;if(B>=Q)return j[Q];return j[B]},getSize:(B)=>J(B),indexAtOffset:(B)=>X(B),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(B)=>K(B),isVariable:()=>!0}},y0=(J,q)=>{if(typeof J==="number")return X1(J,q);return Y1(J,q)},u0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let K=0,X=0,B=q;while(B<j&&X<Q)X+=J.getSize(B),K++,B++;return Math.max(1,K)},o0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,K=0;for(let X=Q-1;X>=0;X--){let B=J.getSize(X);if(K+B>q)break;K+=B,j++}return Math.max(j,1)},L2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),K=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+K*J.getSize(X)};var T2=200,z0=50,JJ=5,QJ=2,jJ=50,H0=16000000,qJ="x",XJ=20,y2="_isPlaceholder",YJ="__placeholder_";var KJ,F0=(J,q)=>{let Q=q.getTotalSize(),j=Q>H0,K=j?H0:Q,X=Q>0?K/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:K,ratio:X}},e0=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let V=Q.indexAtOffset(J),A=Q.indexAtOffset(J+q);if(A<j-1)A++;return X.start=Math.max(0,V),X.end=Math.min(j-1,Math.max(0,A)),X}let{virtualSize:B}=K,D=J/B*j,Y=Math.floor(D),W=u0(Q,Math.max(0,Y),q,j),F=Math.ceil(D)+W,H=B-q-J;if(H<=q&&H>=-1){let V=o0(Q,q,j),A=Math.max(0,j-V),Z=Math.max(0,Math.min(1,1-H/q));Y=Math.floor(Y+(A-Y)*Z),F=H<=1?j-1:Math.min(j-1,Y+W)}return X.start=Math.max(0,Y),X.end=Math.min(j-1,Math.max(0,F)),X},UJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},w0=(J,q,Q,j,K,X,B)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,D=N-K,Y=D-q;if(Y<=K&&Y>=-1){if(q>=D-1){let O=Q.getTotalSize()-Q.getOffset(J);return K-O}let H=o0(Q,K,j),V=Math.max(0,j-H),Z=q/N*j,T=Math.max(0,Math.min(1,1-Y/K)),L=Q.getOffset(J)-Q.getOffset(V),E=Q.getOffset(J)-L2(Q,Z,j);return E+(L-E)*T}let W=q/N,F=Q.getTotalSize(),M=W*F;return Q.getOffset(J)-M},J2=(J,q,Q,j,K,X="start")=>{if(j===0)return 0;let B;if(K.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,K.virtualSize-Q);B=J/j*K.virtualSize}else B=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":B-=(Q-N)/2;break;case"end":B-=Q-N;break}let D=K.virtualSize-Q;return Math.max(0,Math.min(B,D))},BJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let K=J/j.virtualSize;return Math.floor(K*Q)}return q.indexAtOffset(J)},ZJ=(J,q)=>{if(typeof q==="number")return J*q>H0;return q.getTotalSize()>H0},NJ=(J)=>{if(J<=0)return 0;return Math.floor(H0/J)},WJ=(J,q)=>{let Q=F0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var Q2=u2(()=>{KJ=H0});var R0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var vJ={};q1(vJ,{createGridRenderer:()=>d0});var F1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},E1=2,d0=(J,q,Q,j,K,X,B,N,D=!1)=>{let Y=F1(),W=new Map,F=X,M=!1,H=null,V=0,A=0,Z="",T=-1,L=(z)=>{if(H&&V===z)return H;return H=F0(z,Q),V=z,H},E={selected:!1,focused:!1},O=(z,S)=>{return E.selected=z,E.focused=S,E},_=`${K}-item ${K}-grid-item`,$=`${K}-item--selected`,h=`${K}-item--focused`,v=(z,S)=>{if(typeof S==="string")z.innerHTML=S;else z.replaceChildren(S)},G=(z,S,c)=>{z.classList.toggle($,S),z.classList.toggle(h,c)},p=(z,S)=>{let c=j.getRow(z);if(S){let a=S.totalItems,I=L(a);if(I.isCompressed)return w0(c,S.scrollPosition,Q,a,S.containerSize,I,S.rangeStart)}return Q.getOffset(c)},i=(z,S)=>{let c=M&&j.getCol(z)===0,a=c?0:j.getCol(z),I=c?0:j.getColumnOffset(a,F),m;if(M){let o=j.getRow(z),e=0,t=new Set;for(let q0=0;q0<z;q0++){let Y0=j.getRow(q0);if(Y0<o&&!t.has(Y0)){let g=Q.getSize(q0);e+=g,t.add(Y0)}}m=e}else m=p(z,S);if(D)return`translate(${Math.round(m)}px, ${Math.round(I)}px)`;return`translate(${Math.round(I)}px, ${Math.round(m)}px)`},w=(z,S)=>{z.style.transform=S},u=(z,S)=>{let c=z.dataset.id?.startsWith("__group_header"),a=c?F:j.getColumnWidth(F),I;if(M||c)I=Q.getSize(S)-j.gap;else{let m=j.getRow(S);I=Q.getSize(m)-j.gap}if(D)z.style.width=`${I}px`,z.style.height=`${a}px`;else z.style.width=`${a}px`,z.style.height=`${I}px`},U=(z,S,c,a,I)=>{let m=Y.acquire(),o=O(c,a);if(m.className=_,m.dataset.index=String(z),m.dataset.id=String(S.id),m.dataset.row=String(j.getRow(z)),m.dataset.col=String(j.getCol(z)),m.ariaSelected=String(c),N)m.id=`${N}-item-${z}`;if(B){let t=B();if(t!==T)T=t,Z=String(t);m.setAttribute("aria-setsize",Z),m.setAttribute("aria-posinset",String(z+1))}u(m,z);let e=q(S,z,o);return v(m,e),G(m,c,a),w(m,I),{element:m,lastItemId:S.id,lastSelected:c,lastFocused:a,lastTransform:I,lastSeenFrame:A}},P=(z,S,c,a,I)=>{if(A++,S.start===0&&z.length>0)M=R0(z[0]);for(let[e,t]of W)if(e>=S.start&&e<=S.end)t.lastSeenFrame=A;else if(A-t.lastSeenFrame>E1)Y.release(t.element),W.delete(e);let m=!1;if(B){let e=B();if(e!==T)T=e,Z=String(e),m=!0}let o=null;for(let e=S.start;e<=S.end;e++){let t=e-S.start,q0=z[t];if(!q0){console.warn(`⚠️ RENDER: Missing item at index ${e} (range: ${S.start}-${S.end}, items.length: ${z.length})`);continue}let Y0=c.has(q0.id),g=e===a,d=W.get(e);if(d){let J0=d.lastItemId!==q0.id,n=d.lastSelected!==Y0,B0=d.lastFocused!==g;if(J0||n||B0){if(J0){let M0=O(Y0,g),E0=q(q0,e,M0);v(d.element,E0),d.element.dataset.id=String(q0.id),d.element.dataset.row=String(j.getRow(e)),d.element.dataset.col=String(j.getCol(e)),u(d.element,e)}G(d.element,Y0,g),d.element.ariaSelected=String(Y0),d.lastItemId=q0.id,d.lastSelected=Y0,d.lastFocused=g}let K0=i(e,I);if(d.lastTransform!==K0)w(d.element,K0),d.lastTransform=K0;if(m)d.element.setAttribute("aria-setsize",Z)}else{let J0=i(e,I),n=U(e,q0,Y0,g,J0);if(!o)o=document.createDocumentFragment();o.appendChild(n.element),W.set(e,n)}}if(o)J.appendChild(o)},C=(z)=>{for(let[S,c]of W){let a=i(S,z);if(c.lastTransform!==a)w(c.element,a),c.lastTransform=a}},y=(z,S,c,a)=>{let I=W.get(z);if(!I)return;let m=I.lastItemId!==S.id,o=I.lastSelected!==c,e=I.lastFocused!==a;if(m||o||e){let t=O(c,a),q0=q(S,z,t);v(I.element,q0),G(I.element,c,a),I.element.dataset.id=String(S.id),I.element.ariaSelected=String(c),u(I.element,z),I.lastItemId=S.id,I.lastSelected=c,I.lastFocused=a}},k=(z,S,c)=>{let a=W.get(z);if(!a)return;let I=a.lastSelected!==S,m=a.lastFocused!==c;if(I||m)G(a.element,S,c),a.lastSelected=S,a.lastFocused=c},R=(z)=>{return W.get(z)?.element},f=(z)=>{if(Math.abs(z-F)<1)return;F=z;for(let[S,c]of W){u(c.element,S);let a=i(S);w(c.element,a),c.lastTransform=a}},r=()=>{for(let[,z]of W)Y.release(z.element);W.clear()};return{render:P,updatePositions:C,updateItem:y,updateItemClasses:k,getElement:R,updateContainerWidth:f,clear:r,destroy:()=>{r(),Y.clear()}}};var N2=u2(()=>{Q2()});var g2=2,x2=(J=0)=>{let q=[,,,,,];for(let Q=0;Q<5;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},E2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,B=J.samples[X],N=q-B.position,D=Q-B.time;J.velocity=D>0?Math.abs(N)/D:0}return J.lastPosition=q,J.lastTime=Q,J};var i0=(J,q)=>{let Q=new Map,j=(X)=>{let B=Q.get(X);return B!==void 0?B:J},K=y0(j,q);return{getOffset(X){return K.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return K.indexAtOffset(X)},getTotalSize(){return K.getTotalSize()},getTotal(){return K.getTotal()},rebuild(X){if(X<K.getTotal()){for(let B of Q.keys())if(B>=X)Q.delete(B)}K=y0(j,X)},isVariable(){return!0},setMeasuredSize(X,B){Q.set(X,B)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var t0=()=>{let J={},q=(N,D)=>{if(!J[N])J[N]=new Set;return J[N].add(D),()=>Q(N,D)},Q=(N,D)=>{J[N]?.delete(D)};return{on:q,off:Q,emit:(N,D)=>{J[N]?.forEach((Y)=>{try{Y(D)}catch(W){console.error(`[vlist] Error in event handler for "${String(N)}":`,W)}})},once:(N,D)=>{let Y=(W)=>{Q(N,Y),D(W)};return q(N,Y)},clear:(N)=>{if(N)delete J[N];else for(let D in J)delete J[D]},listenerCount:(N)=>{return J[N]?.size??0}}};var m2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},d2=(J,q,Q,j)=>{let K=document.createElement("div");if(K.className=q,j)K.classList.add(`${q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),Q)K.setAttribute("aria-label",Q);if(j)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${q}-viewport`,j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let B=document.createElement("div");if(B.className=`${q}-content`,B.style.position="relative",j)B.style.height="100%";else B.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return B.appendChild(N),X.appendChild(B),K.appendChild(X),J.appendChild(K),{root:K,viewport:X,content:B,items:N}};var c2=(J=100)=>{let q=[];return{acquire:()=>{let Q=q.pop();if(Q)return Q;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:(Q)=>{if(q.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),q.push(Q)},clear:()=>{q.length=0}}};var l2=(J,q,Q,j,K)=>{if(j===0||q===0){K.start=0,K.end=0;return}let X=Q.indexAtOffset(J),B=u0(Q,X,q,j),N=X+B;K.start=Math.max(0,X),K.end=Math.min(j-1,Math.max(0,N))},r2=(J,q,Q,j)=>{if(Q===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q)},a2=(J,q,Q,j,K)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),B=q.getOffset(X),N=q.getSize(X),D=Math.max(0,q.getTotalSize()-Q),Y;switch(K){case"center":Y=B-(Q-N)/2;break;case"end":Y=B-Q+N;break;default:Y=B}return Math.max(0,Math.min(Y,D))};var b2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,v0=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},s2=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,B,N)=>{if(j(),Math.abs(B-X)<1){J.scrollTo(B);return}let D=performance.now(),Y=(W)=>{let F=W-D,M=Math.min(F/N,1),H=X+(B-X)*b2(M);if(J.scrollTo(H),q(),M<1)Q=requestAnimationFrame(Y);else Q=null};Q=requestAnimationFrame(Y)},cancelScroll:j}};var n2=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:K,rawConfig:X,rendered:B,pool:N,sharedState:D,isHorizontal:Y,classPrefix:W,contentSizeHandlers:F,afterScroll:M,clickHandlers:H,keydownHandlers:V,resizeHandlers:A,destroyHandlers:Z,methods:T,onScrollFrame:L,resizeObserver:E,renderRange:O}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return K},get rawConfig(){return X},get renderer(){return{render:(_,$,h,v,G)=>{J.ss=h,J.fi=v,J.ffn()},updateItemClasses:(_,$,h)=>{let v=B.get(_);if(!v)return;v.classList.toggle(`${W}-item--selected`,$),v.classList.toggle(`${W}-item--focused`,h),v.ariaSelected=$?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(_)=>B.get(_)??null,clear:()=>{},destroy:()=>{}}},set renderer(_){},get dataManager(){return J.dm},set dataManager(_){J.dm=_},get scrollController(){return J.sc},set scrollController(_){J.sc=_},state:D,getContainerWidth(){return J.cw},afterScroll:M,clickHandlers:H,keydownHandlers:V,resizeHandlers:A,contentSizeHandlers:F,destroyHandlers:Z,methods:T,replaceTemplate(_){J.at=_},replaceRenderer(_){},replaceDataManager(_){J.dm=_},replaceScrollController(_){J.sc=_},getItemsForRange(_){let{dm:$,it:h}=J,v=[];for(let G=_.start;G<=_.end;G++){let p=$?$.getItem(G):h[G];if(p)v.push(p)}return v},getAllLoadedItems(){let _=J.dm;if(_){let $=_.getTotal(),h=[];for(let v=0;v<$;v++){let G=_.getItem(v);if(G)h.push(G)}return h}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let _=J.hc;return{isCompressed:!1,actualSize:_.getTotalSize(),virtualSize:_.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:O.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,_]of B)_.remove(),N.release(_);B.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(_,$){J.rfn=_,J.ffn=$},setVirtualTotalFn(_){J.vtf=_},rebuildSizeCache(_){J.hc.rebuild(_??J.vtf())},setSizeConfig(_){J.hc=y0(_,J.vtf())},updateContentSize(_){let $=`${_}px`;if(Y)Q.content.style.width=$;else Q.content.style.height=$},updateCompressionMode(){},setVisibleRangeFn(_){J.gvr=_},setScrollToPosFn(_){J.gsp=_},setPositionElementFn(_){J.pef=_},setScrollFns(_,$){J.sgt=_,J.sst=(h)=>{$(h),L()}},setScrollTarget(_){J.st.removeEventListener("scroll",L),J.st=_,J.st.addEventListener("scroll",L,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(_){J.gcw=_.width,J.gch=_.height,J.cw=_.width(),J.ch=_.height(),D.viewportState.containerSize=Y?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,E.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},o2=(J,q,Q)=>{let{rendered:j,itemState:K,contentSizeHandlers:X,applyTemplate:B,updateContentSize:N}=q,D=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let Y=0;Y<X.length;Y++)X[Y]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>J.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<J.it.length&&J.it[Y]!==void 0,getItemsInRange:(Y,W)=>{let F=J.it,M=[],H=Math.max(0,Y),V=Math.min(W,F.length-1);for(let A=H;A<=V;A++)M.push(F[A]);return M},setTotal:(Y)=>{},setItems:(Y,W=0,F)=>{let M=J.it;if(W===0&&(F!==void 0||M.length===0))J.it=Y;else{let H=W+Y.length;if(M.length<H)M.length=H;for(let V=0;V<Y.length;V++)M[W+V]=Y[V]}if(J.ii)D()},updateItem:(Y,W)=>{let F=J.it;if(Y<0||Y>=F.length)return!1;let M=F[Y];if(!M)return!1;F[Y]={...M,...W};let H=j.get(Y);if(H)B(H,J.at(F[Y],Y,K)),H.dataset.id=String(F[Y].id);return!0},removeItem:(Y)=>{if(Y<0||Y>=J.it.length)return!1;if(J.it.splice(Y,1),J.ii)D();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},i2=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(K)=>{J.sst(K),J.ls=K,J.rfn()},scrollBy:(K)=>{let X=J.sgt()+K;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(K=2)=>J.sab(K),getScrollPercentage:()=>{let K=J.hc.getTotalSize(),X=Math.max(0,K-J.ch);return X>0?J.ls/X:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>Q.root.classList.contains(`${j}--scrolling`),updateConfig:()=>{},enableCompression:()=>{J.sic=!0},disableCompression:()=>{J.sic=!1},isCompressed:()=>J.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{J.ch=K},destroy:()=>{}}};var K1=3,U1="vlist",t2=150,B1=0,e2=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",K=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(K==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(K!=null){if(typeof K==="number"&&K<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof K!=="number"&&typeof K!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let B=new Map,N=!1,D={use(Y){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return B.set(Y.name,Y),D},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,Z1(J,B,q,K,X??null)}};return D};function Z1(J,q,Q,j,K){let{item:X,items:B,overscan:N=K1,classPrefix:D=U1,ariaLabel:Y,reverse:W=!1,scroll:F}=J,M=F,H=M?.wheel??!0,V=M?.wrap??!1,A=W,Z=`${D}-${B1++}`,T=j??K,L=j==null&&K!=null,E=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,O=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,_={overscan:N,classPrefix:D,reverse:A,wrap:V,horizontal:Q,ariaIdPrefix:Z},$=Array.from(q.values()).sort((b,x)=>(b.priority??50)-(x.priority??50)),h=new Set($.map((b)=>b.name));for(let b of $)if(b.conflicts){for(let x of b.conflicts)if(h.has(x))throw Error(`[vlist/builder] ${b.name} and ${x} cannot be combined`)}if(A){if(h.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let v=m2(J.container),G=d2(v,D,Y,Q);if(M?.wheel===!1)if(Q)G.viewport.style.overflowX="hidden";else G.viewport.style.overflow="hidden";if(M?.scrollbar==="none")G.viewport.classList.add(`${D}-viewport--no-scrollbar`);let p=t0(),i=B||[],w=L?i0(K,i.length):y0(T,i.length),u=c2(),U={it:i,hc:w,ch:G.viewport.clientHeight,cw:G.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:x2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>G.viewport.scrollLeft:()=>G.viewport.scrollTop,sst:Q?(b)=>{G.viewport.scrollLeft=b}:(b)=>{G.viewport.scrollTop=b},sab:(b=2)=>{let x=U.hc.getTotalSize();return U.ls+U.ch>=x-b},sic:!1,rfn:null,ffn:null,gvr:(b,x,l,s,j0)=>{l2(b,x,l,s,j0)},gsp:(b,x,l,s,j0)=>{return a2(b,x,l,s,j0)},pef:null,at:X.template,vre:!0,st:G.viewport,wh:null,gcw:()=>U.cw,gch:()=>U.ch};U.vtf=()=>U.dm?U.dm.getTotal():U.it.length;let P=null,C=null,y=!1,k={start:0,end:0},R={start:0,end:0},f={start:-1,end:-1},r={viewportState:{scrollPosition:0,containerSize:Q?U.cw:U.ch,totalSize:U.hc.getTotalSize(),actualSize:U.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},Q0=new Map,z=L?new WeakMap:null,S=L?w:null,c=null,a=0,I=!1,m=()=>{if(!L)return;if(I){let b=U.sgt(),x=Q?G.viewport.scrollWidth-G.viewport.clientWidth:G.viewport.scrollHeight-G.viewport.clientHeight,l=x>0&&b>=x-2;if(Z0(),I=!1,l){let s=Math.max(0,U.hc.getTotalSize()-(Q?U.cw:U.ch));if(s>b)U.sst(s),U.ls=s,U.rfn()}}};if(L&&S&&z)c=new ResizeObserver((b)=>{if(U.id)return;let x=!1,l=k.start;for(let s of b){let j0=z.get(s.target);if(j0===void 0)continue;let U0=Q?s.borderBoxSize[0].inlineSize:s.borderBoxSize[0].blockSize;if(!S.isMeasured(j0)){let W0=S.getSize(j0);if(S.setMeasuredSize(j0,U0),x=!0,j0<l&&U0!==W0)a+=U0-W0;c.unobserve(s.target);let A0=s.target;if(Q)A0.style.width=`${U0}px`;else A0.style.height=`${U0}px`}}if(!x)return;if(S.rebuild(U.vtf()),U.hc=S,a!==0){let s=U.sgt();U.sst(s+a),U.ls=s+a,a=0}if(y)I=!0;else{let s=U.sgt(),j0=Q?G.viewport.scrollWidth-G.viewport.clientWidth:G.viewport.scrollHeight-G.viewport.clientHeight,U0=j0>0&&s>=j0-2;if(Z0(),I=!1,U0){let W0=Math.max(0,U.hc.getTotalSize()-(Q?U.cw:U.ch));if(W0>s)U.sst(W0),U.ls=W0}}f.start=-1,f.end=-1,U.rfn()});let o={selected:!1,focused:!1},e=`${D}-item`,t=[],q0=[],Y0=[],g=[],d=[],J0=[],n=new Map,B0=null,K0=null,M0=!1,E0=()=>{if(M0)return;M0=!0,B0=n.get("_getSelectedIds")??null,K0=n.get("_getFocusedIndex")??null},N0=(b,x)=>{if(typeof x==="string")b.innerHTML=x;else b.replaceChildren(x)},$0=(b,x)=>{let l=Math.round(U.hc.getOffset(x));if(Q)b.style.transform=`translateX(${l}px)`;else b.style.transform=`translateY(${l}px)`};U.pef=$0;let k0=(b,x)=>{let l=u.acquire();l.className=e;let s=!L||S&&S.isMeasured(b);if(Q){if(s)l.style.width=`${U.hc.getSize(b)}px`;else l.style.width="";if(O!=null)l.style.height=`${O}px`}else if(s)l.style.height=`${U.hc.getSize(b)}px`;else l.style.height="";if(l.dataset.index=String(b),l.dataset.id=String(x.id),l.ariaSelected="false",l.id=`${Z}-item-${b}`,U.la=String(U.vtf()),l.setAttribute("aria-setsize",U.la),l.setAttribute("aria-posinset",String(b+1)),String(x.id).startsWith("__placeholder_"))l.classList.add(`${D}-item--placeholder`);return N0(l,U.at(x,b,o)),U.pef(l,b),l},Z0=()=>{let b=`${U.hc.getTotalSize()}px`;if(Q)G.content.style.width=b;else G.content.style.height=b},L0=()=>{if(U.id)return;E0();let b=B0?B0():U.ss,x=K0?K0():U.fi,l=U.vtf(),s=Q?U.cw:U.ch;if(U.gvr(U.ls,s,U.hc,l,k),r2(k,N,l,R),R.start===f.start&&R.end===f.end){if(U.sic)for(let[X0,_0]of Q0)U.pef(_0,X0);return}let j0=String(l),U0=j0!==U.la;U.la=j0;for(let[X0,_0]of Q0)if(X0<R.start||X0>R.end)_0.remove(),u.release(_0),Q0.delete(X0);let W0=document.createDocumentFragment(),A0=[],I0=[];for(let X0=R.start;X0<=R.end;X0++){let _0=U.dm?U.dm.getItem(X0):U.it[X0];if(!_0)continue;let G0=Q0.get(X0);if(G0){let T0=G0.dataset.id,p0=String(_0.id);if(T0!==p0){let tJ=T0?.startsWith("__placeholder_"),I2=p0.startsWith("__placeholder_");N0(G0,U.at(_0,X0,o)),G0.dataset.id=p0;let p2=!L||S&&S.isMeasured(X0);if(Q)G0.style.width=p2?`${U.hc.getSize(X0)}px`:"";else G0.style.height=p2?`${U.hc.getSize(X0)}px`:"";if(I2)G0.classList.add(`${D}-item--placeholder`);else G0.classList.remove(`${D}-item--placeholder`);if(tJ&&!I2)G0.classList.add(`${D}-item--replaced`),setTimeout(()=>{G0.classList.remove(`${D}-item--replaced`)},300)}U.pef(G0,X0);let n0=b.has(_0.id),iJ=X0===x;if(G0.classList.toggle(`${D}-item--selected`,n0),G0.classList.toggle(`${D}-item--focused`,iJ),G0.ariaSelected=n0?"true":"false",U0)G0.setAttribute("aria-setsize",U.la)}else{let T0=k0(X0,_0);I0.push({index:X0,element:T0});let p0=b.has(_0.id),n0=X0===x;if(p0)T0.classList.add(`${D}-item--selected`),T0.ariaSelected="true";if(n0)T0.classList.add(`${D}-item--focused`);W0.appendChild(T0),A0.push({index:X0,element:T0})}}if(A0.length>0){G.items.appendChild(W0);for(let{index:X0,element:_0}of A0)Q0.set(X0,_0)}if(L&&c&&S&&z){for(let{index:X0,element:_0}of I0)if(!S.isMeasured(X0))z.set(_0,X0),c.observe(_0)}f.start=R.start,f.end=R.end,r.lastRenderRange.start=R.start,r.lastRenderRange.end=R.end,r.viewportState.scrollPosition=U.ls,r.viewportState.visibleRange.start=k.start,r.viewportState.visibleRange.end=k.end,r.viewportState.renderRange.start=R.start,r.viewportState.renderRange.end=R.end,p.emit("range:change",{range:{start:R.start,end:R.end}})},D0=()=>{f.start=-1,f.end=-1,U.rfn()};U.rfn=L0,U.ffn=D0;let O0=()=>{if(U.id)return;let b=U.sgt(),x=b>=U.ls?"down":"up";if(U.vt=E2(U.vt,b),!G.root.classList.contains(`${D}--scrolling`))G.root.classList.add(`${D}--scrolling`);y=!0,U.ls=b,U.rfn(),p.emit("scroll",{scrollPosition:b,direction:x}),p.emit("velocity:change",{velocity:U.vt.velocity,reliable:U.vt.sampleCount>=g2});for(let l=0;l<t.length;l++)t[l](b,x);if(C)clearTimeout(C);C=setTimeout(()=>{G.root.classList.remove(`${D}--scrolling`),y=!1,U.vt.velocity=0,U.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),m()},M?.idleTimeout??t2)},b0=null;if(U.st.addEventListener("scroll",O0,{passive:!0}),H&&!Q&&!E)b0=(b)=>{b.preventDefault();let x=U.sgt(),l=b.deltaY,s=Math.max(0,Math.min(x+l,U.hc.getTotalSize()-U.ch));U.sst(s),U.ls=s,U.vt=E2(U.vt,s),U.rfn();let j0=s>=x?"down":"up";if(p.emit("scroll",{scrollPosition:s,direction:j0}),!G.root.classList.contains(`${D}--scrolling`))G.root.classList.add(`${D}--scrolling`);if(y=!0,C)clearTimeout(C);C=setTimeout(()=>{G.root.classList.remove(`${D}--scrolling`),y=!1,U.vt.velocity=0,U.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),m()},M?.idleTimeout??t2)},U.wh=b0,G.viewport.addEventListener("wheel",b0,{passive:!1});else if(Q&&H)b0=(b)=>{if(b.deltaX)return;b.preventDefault(),G.viewport.scrollLeft+=b.deltaY},U.wh=b0,G.viewport.addEventListener("wheel",b0,{passive:!1});let z2=(b)=>{let l=b.target.closest("[data-index]");if(l){let s=parseInt(l.dataset.index??"-1",10);if(s>=0){let j0=U.dm?.getItem(s)??U.it[s];if(j0){if(j0.__groupHeader)return;p.emit("item:click",{item:j0,index:s,event:b})}}}for(let s=0;s<q0.length;s++)q0[s](b)},hJ=(b)=>{let l=b.target.closest("[data-index]");if(l){let s=parseInt(l.dataset.index??"-1",10);if(s>=0){let j0=U.dm?.getItem(s)??U.it[s];if(j0){if(j0.__groupHeader)return;p.emit("item:dblclick",{item:j0,index:s,event:b})}}}},w2=(b)=>{for(let x=0;x<Y0.length;x++)Y0[x](b)};G.items.addEventListener("click",z2),G.items.addEventListener("dblclick",hJ),G.root.addEventListener("keydown",w2);let O2=new ResizeObserver((b)=>{if(U.id)return;for(let x of b){let l=x.contentRect.height,s=x.contentRect.width,j0=Q?s:l,U0=Q?U.cw:U.ch;if(U.cw=s,U.ch=l,Math.abs(j0-U0)>1){if(r.viewportState.containerSize=j0,U.ii)Z0(),U.rfn(),p.emit("resize",{height:l,width:s})}if(U.ii)for(let W0=0;W0<g.length;W0++)g[W0](s,l)}});if(U.vre)O2.observe(G.viewport);let A2={dom:G,emitter:p,resolvedConfig:_,rawConfig:J,rendered:Q0,pool:u,itemState:o,sharedState:r,renderRange:R,isHorizontal:Q,classPrefix:D,contentSizeHandlers:d,afterScroll:t,clickHandlers:q0,keydownHandlers:Y0,resizeHandlers:g,destroyHandlers:J0,methods:n,onScrollFrame:O0,resizeObserver:O2,applyTemplate:N0,updateContentSize:Z0},V0=n2(U,A2);U.dm=o2(U,A2,V0),U.sc=i2(U,A2);let S2=new Map;for(let b of $)if(b.methods)for(let x of b.methods){let l=S2.get(x);if(l)throw Error(`[vlist/builder] Method "${x}" is registered by both "${l}" and "${b.name}"`);S2.set(x,b.name)}for(let b of $)b.setup(V0);if(U.ii=!0,V0.state.isInitialized=!0,Z0(),U.rfn(),A&&U.it.length>0){let b=U.gsp(U.it.length-1,U.hc,U.ch,U.it.length,"end");U.sst(b),U.ls=b,U.rfn()}let uJ=(b)=>{V0.dataManager.setItems(b,0,b.length)},gJ=A?(b)=>{let x=U.sab(2),l=U.it.length;if(V0.dataManager.setItems(b,l),x&&U.it.length>0){let s=U.gsp(U.it.length-1,U.hc,U.ch,U.it.length,"end");U.sst(s),U.ls=s,U.rfn()}}:(b)=>{let x=U.it.length;V0.dataManager.setItems(b,x)},xJ=A?(b)=>{let x=U.sgt(),l=U.hc.getTotalSize(),s=[...U.it];V0.dataManager.clear(),V0.dataManager.setItems([...b,...s],0);let U0=U.hc.getTotalSize()-l;if(U0>0)U.sst(x+U0),U.ls=x+U0}:(b)=>{let x=[...U.it];V0.dataManager.clear(),V0.dataManager.setItems([...b,...x],0)},mJ=(b,x)=>{V0.dataManager.updateItem(b,x)},dJ=(b)=>{V0.dataManager.removeItem(b)},cJ=async()=>{if(V0.dataManager.reload)await V0.dataManager.reload()},s0=()=>{if(P!==null)cancelAnimationFrame(P),P=null},lJ=(b,x,l)=>{if(s0(),Math.abs(x-b)<1){U.sst(x),U.ls=x,U.rfn();return}let s=performance.now(),j0=(U0)=>{let W0=U0-s,A0=Math.min(W0/l,1),I0=b+(x-b)*b2(A0);if(U.sst(I0),U.ls=I0,U.rfn(),A0<1)P=requestAnimationFrame(j0);else P=null};P=requestAnimationFrame(j0)},rJ=(b,x)=>{let{align:l,behavior:s,duration:j0}=v0(x),U0=U.vtf(),W0=b;if(V&&U0>0)W0=(W0%U0+U0)%U0;let A0=U.gsp(W0,U.hc,U.ch,U0,l);if(s==="smooth")lJ(U.sgt(),A0,j0);else s0(),U.sst(A0)},aJ=()=>U.sgt(),sJ=(b,x)=>{return p.on(b,x)},nJ=(b,x)=>{p.off(b,x)},oJ=()=>{if(U.id)return;if(U.id=!0,V0.state.isDestroyed=!0,G.items.removeEventListener("click",z2),G.root.removeEventListener("keydown",w2),U.st.removeEventListener("scroll",O0),O2.disconnect(),c)c.disconnect(),c=null;if(U.wh)G.viewport.removeEventListener("wheel",U.wh);if(C)clearTimeout(C);for(let b=0;b<J0.length;b++)J0[b]();for(let b of $)if(b.destroy)b.destroy();s0();for(let[,b]of Q0)b.remove(),u.release(b);Q0.clear(),u.clear(),p.clear(),G.root.remove()},f2={get element(){return G.root},get items(){if(n.has("_getItems"))return n.get("_getItems")();return U.it},get total(){if(n.has("_getTotal"))return n.get("_getTotal")();return U.vtf()},setItems:n.has("setItems")?n.get("setItems"):uJ,appendItems:n.has("appendItems")?n.get("appendItems"):gJ,prependItems:n.has("prependItems")?n.get("prependItems"):xJ,updateItem:n.has("updateItem")?n.get("updateItem"):mJ,removeItem:n.has("removeItem")?n.get("removeItem"):dJ,reload:n.has("reload")?n.get("reload"):cJ,scrollToIndex:n.has("scrollToIndex")?n.get("scrollToIndex"):rJ,cancelScroll:n.has("cancelScroll")?n.get("cancelScroll"):s0,getScrollPosition:n.has("getScrollPosition")?n.get("getScrollPosition"):aJ,on:sJ,off:nJ,destroy:oJ};for(let[b,x]of n){if(b.charCodeAt(0)===95||b==="setItems"||b==="appendItems"||b==="prependItems"||b==="updateItem"||b==="removeItem"||b==="reload"||b==="scrollToIndex"||b==="scrollToItem"||b==="cancelScroll"||b==="getScrollPosition")continue;f2[b]=x}return f2}Q2();var S0=(J,q,Q={},j="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:B=1000,minThumbSize:N=30,showOnHover:D=!0,hoverZoneWidth:Y=16,showOnViewportEnter:W=!0}=Q,F=0,M=0,H=0,V=0,A=!1,Z=!1,T=0,L=0,E=0,O=null,_=!1,$=null,h=null,v=K?"width":"height",G=K?"translateX":"translateY",p=K?(t)=>t.clientX:(t)=>t.clientY,i=K?"left":"top",w=document.createElement("div"),u=document.createElement("div"),U=D?document.createElement("div"):null,P=()=>{if(w.className=`${j}-scrollbar`,u.className=`${j}-scrollbar-thumb`,K)w.classList.add(`${j}-scrollbar--horizontal`);if(w.appendChild(u),J.appendChild(w),U){if(U.className=`${j}-scrollbar-hover`,K)U.classList.add(`${j}-scrollbar-hover--horizontal`),U.style.height=`${Y}px`;else U.style.width=`${Y}px`;J.appendChild(U)}},C=()=>{if(O)clearTimeout(O),O=null},y=()=>{if(!X)return;C(),O=setTimeout(R,B)},k=()=>{if(F<=M)return;if(C(),!_)w.classList.add(`${j}-scrollbar--visible`),_=!0;if(X&&!A&&!Z)y()},R=()=>{if(A||Z)return;w.classList.remove(`${j}-scrollbar--visible`),_=!1},f=(t,q0)=>{F=t,M=q0;let Y0=F>M;if(w.style.display=Y0?"":"none",!Y0){R();return}let g=M/F;H=Math.max(N,g*M),u.style[v]=`${H}px`,V=M-H,r(E)},r=(t)=>{if(E=t,F<=M||V<=0)return;let q0=F-M,g=Math.min(1,Math.max(0,t/q0))*V;u.style.transform=`${G}(${g}px)`},Q0=(t)=>{if(t.target===u)return;let q0=w.getBoundingClientRect(),d=p(t)-q0[i]-H/2,n=Math.max(0,Math.min(d,V))/V,B0=F-M,K0=n*B0;q(K0),k()},z=(t)=>{t.preventDefault(),t.stopPropagation(),A=!0,T=p(t),L=E,C(),w.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",S),document.addEventListener("mouseup",c)},S=(t)=>{if(!A)return;let q0=p(t)-T,Y0=V>0?q0/V:0,g=F-M,d=Y0*g,J0=Math.max(0,Math.min(L+d,g)),B0=J0/g*V;if(u.style.transform=`${G}(${B0}px)`,h=J0,$===null)$=requestAnimationFrame(()=>{if(h!==null)q(h);$=null})},c=()=>{if(A=!1,$!==null)cancelAnimationFrame($),$=null;if(h!==null)q(h),h=null;if(w.classList.remove(`${j}-scrollbar--dragging`),X&&!Z)y();document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",c)},a=()=>{if(W)k()},I=()=>{if(!A){if(Z=!1,X)y()}},m=()=>{Z=!0,C(),k()},o=()=>{if(Z=!1,!A&&X)y()},e=()=>{if(C(),$!==null)cancelAnimationFrame($),$=null;if(w.removeEventListener("click",Q0),w.removeEventListener("mouseenter",m),w.removeEventListener("mouseleave",o),u.removeEventListener("mousedown",z),J.removeEventListener("mouseenter",a),J.removeEventListener("mouseleave",I),document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",c),U){if(U.removeEventListener("mouseenter",m),U.removeEventListener("mouseleave",o),U.parentNode)U.parentNode.removeChild(U)}if(w.parentNode)w.parentNode.removeChild(w)};if(P(),w.addEventListener("click",Q0),w.addEventListener("mouseenter",m),w.addEventListener("mouseleave",o),u.addEventListener("mousedown",z),J.addEventListener("mouseenter",a),J.addEventListener("mouseleave",I),U)U.addEventListener("mouseenter",m),U.addEventListener("mouseleave",o);return{show:k,hide:R,updateBounds:f,updatePosition:r,isVisible:()=>_,destroy:e}};var DJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:K}=Q,{classPrefix:X,horizontal:B}=K;if(q=S0(j.viewport,(Y)=>Q.scrollController.scrollTo(Y),J??{},X,B),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let D=q;Q.afterScroll.push((Y,W)=>{D.updatePosition(Y),D.show()}),Q.resizeHandlers.push((Y,W)=>{if(D){let F=Q.getCachedCompression();D.updateBounds(F.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(D){let Y=Q.getCachedCompression();D.updateBounds(Y.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(D)D.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var _J=(J=0)=>{let q=[,,,,,,,,];for(let Q=0;Q<8;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},j2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+8)%8,B=J.samples[X],N=q-B.position,D=Q-B.time;J.velocity=D>0?N/D:0}return J.lastPosition=q,J.lastTime=Q,J},N1=(J)=>J.sampleCount>=3,VJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:K=!1,idleTimeout:X=150,onScroll:B,onIdle:N,scrollElement:D,horizontal:Y=!1}=q,W=!!D,F=0,M=0,H=W?Y?window.innerWidth:window.innerHeight:Y?J.clientWidth:J.clientHeight,V=q.compressed??!1,A=q.compression,Z=_J(),T=!1,L=null,O=q2(()=>{let I=Y?J.scrollLeft:J.scrollTop,m=I>=F?"down":"up";if(Z=j2(Z,I),F=I,B)B({scrollTop:F,direction:m,velocity:Z.velocity});p()}),$=q2(()=>{let I=J.getBoundingClientRect(),m=Y?Math.max(0,-I.left):Math.max(0,-I.top),o=m>=F?"down":"up";if(Z=j2(Z,m),F=m,!T)T=!0;if(B)B({scrollTop:F,direction:o,velocity:Z.velocity});p()}),h=(I)=>{I.preventDefault()},v=(I)=>{if(I.deltaX)return;I.preventDefault(),J.scrollLeft+=I.deltaY},G=(I)=>{if(!V)return;I.preventDefault();let m=(Y?I.deltaX||I.deltaY:I.deltaY)*j,o=F+m;if(K)o=F+m*0.3;if(o=Math.max(0,Math.min(o,M)),o!==F){let t=o>=F?"down":"up";if(Z=j2(Z,o),F=o,!T)T=!0;if(B)B({scrollTop:F,direction:t,velocity:Z.velocity});p()}},p=()=>{if(L)clearTimeout(L);L=setTimeout(()=>{if(T=!1,Z=_J(F),N)N()},X)},i=(I)=>{if(V)return;if(V=!0,A=I,M=I.virtualSize-H,W)return;if(O.cancel(),J.removeEventListener("scroll",O),!Q)J.removeEventListener("wheel",h);else if(Y)J.removeEventListener("wheel",v);if(Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",G,{passive:!1});let m=Y?J.scrollLeft:J.scrollTop;if(m>0){let o=Y?A?.actualSize??J.scrollWidth:A?.actualSize??J.scrollHeight;F=m/o*M}if(Y)J.scrollLeft=0;else J.scrollTop=0},w=()=>{if(!V)return;if(V=!1,W){A=void 0;return}if(J.removeEventListener("wheel",G),Y)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",O,{passive:!0}),!Q)J.addEventListener("wheel",h,{passive:!1});else if(Y)J.addEventListener("wheel",v,{passive:!1});if(A&&F>0){let m=F/M*(A.actualSize-H);if(Y)J.scrollLeft=m;else J.scrollTop=m}A=void 0},u=()=>{if(W||V)return F;return Y?J.scrollLeft:J.scrollTop},U=(I,m=!1)=>{let o=Math.max(0,Math.min(I,M||1/0));if(W){let e=J.getBoundingClientRect();if(Y){let t=e.left+window.scrollX;window.scrollTo({left:t+o,behavior:m?"smooth":"auto"})}else{let t=e.top+window.scrollY;window.scrollTo({top:t+o,behavior:m?"smooth":"auto"})}}else if(V){if(o===F)return;let t=o>=F?"down":"up";if(Z=j2(Z,o),F=o,!T)T=!0;if(B)B({scrollTop:F,direction:t,velocity:Z.velocity});p()}else if(Y)J.scrollTo({left:o,behavior:m?"smooth":"auto"});else J.scrollTo({top:o,behavior:m?"smooth":"auto"})},P=(I)=>{U(u()+I)},C=()=>{return u()<=0},y=(I=0)=>{let m=u(),o=W||V?M:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return m>=o-I},k=()=>{let I=u(),m=W||V?M:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(m<=0)return 0;return Math.min(1,Math.max(0,I/m))},R=(I)=>{if(I.compression)A=I.compression,M=A.virtualSize-H},f=()=>V,r=()=>Math.abs(Z.velocity),Q0=()=>N1(Z),z=()=>T,S=()=>W,c=(I)=>{if(H=I,A)M=A.virtualSize-H},a=()=>{if(L)clearTimeout(L);if(W)$.cancel(),window.removeEventListener("scroll",$);else O.cancel(),J.removeEventListener("scroll",O),J.removeEventListener("wheel",G),J.removeEventListener("wheel",h),J.removeEventListener("wheel",v)};if(W){if(V&&A)M=A.virtualSize-H;window.addEventListener("scroll",$,{passive:!0})}else if(V&&A){if(M=A.virtualSize-H,Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",G,{passive:!1})}else{if(Y)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",O,{passive:!0}),!Q)J.addEventListener("wheel",h,{passive:!1});else if(Y)J.addEventListener("wheel",v,{passive:!1})}return{getScrollTop:u,scrollTo:U,scrollBy:P,isAtTop:C,isAtBottom:y,getScrollPercentage:k,getVelocity:r,isTracking:Q0,isScrolling:z,updateConfig:R,enableCompression:i,disableCompression:w,isCompressed:f,isWindowMode:S,updateContainerHeight:c,destroy:a}},q2=(J)=>{let q=null,Q=null,j=(...K)=>{if(Q=K,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var W1=0.65,D1=0.5,_1=0.95,V1=0.1,G1=5,M1=100,GJ=()=>{let J=null,q=0,Q=!1,j=0,K=null,X=0,B=0,N=null,D=[];return{name:"withScale",priority:20,setup(Y){let{dom:W,config:F}=Y,{classPrefix:M,horizontal:H}=F,V=()=>{let L=Y.getVirtualTotal(),E=F0(L,Y.sizeCache);if(E.isCompressed&&!Q){Q=!0,Y.scrollController.enableCompression(E),Y.updateContentSize(E.virtualSize),Y.setScrollFns(()=>q,(w)=>{if(q=w,j=w,K!==null)cancelAnimationFrame(K),K=null});let O=()=>{let w=j-q;if(Math.abs(w)<D1)q=j,K=null;else{q+=w*W1;let U=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,U)),K=requestAnimationFrame(O)}Y.scrollController.scrollTo(q)},_=W.viewport,$=(w)=>{w.preventDefault();let U=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+w.deltaY,U)),K===null)K=requestAnimationFrame(O)};_.addEventListener("wheel",$,{passive:!1});let h=()=>{if(N!==null)cancelAnimationFrame(N),N=null},v=(w)=>{if(h(),K!==null)cancelAnimationFrame(K),K=null;let u=w.touches[0];if(!u)return;let U=H?u.clientX:u.clientY;X=U,B=q,D=[{time:performance.now(),y:U}]},G=(w)=>{w.preventDefault();let u=w.touches[0];if(!u)return;let U=H?u.clientX:u.clientY,P=performance.now();if(D.push({time:P,y:U}),D.length>G1)D.shift();let C=X-U,k=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,R=Math.max(0,Math.min(B+C,k));q=R,j=R,Y.scrollController.scrollTo(R)},p=(w)=>{let u=performance.now(),U=D.filter((k)=>u-k.time<M1),P=0;if(U.length>=2){let k=U[0],R=U[U.length-1],f=R.time-k.time;if(f>0)P=(k.y-R.y)/f}if(D=[],Math.abs(P)<V1)return;let C=P*16,y=()=>{if(C*=_1,Math.abs(C)<0.5){N=null;return}let R=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,f=q+C;if(f=Math.max(0,Math.min(f,R)),f<=0&&C<0||f>=R&&C>0){q=f,j=f,Y.scrollController.scrollTo(f),N=null;return}q=f,j=f,Y.scrollController.scrollTo(f),N=requestAnimationFrame(y)};N=requestAnimationFrame(y)};if(_.addEventListener("touchstart",v,{passive:!0}),_.addEventListener("touchmove",G,{passive:!1}),_.addEventListener("touchend",p,{passive:!0}),_.addEventListener("touchcancel",p,{passive:!0}),Y.destroyHandlers.push(()=>{if(_.removeEventListener("wheel",$),_.removeEventListener("touchstart",v),_.removeEventListener("touchmove",G),_.removeEventListener("touchend",p),_.removeEventListener("touchcancel",p),h(),K!==null)cancelAnimationFrame(K),K=null}),!W.viewport.querySelector(`.${M}-scrollbar`)){if(J=S0(W.viewport,(u)=>Y.scrollController.scrollTo(u),{},M,H),!W.viewport.classList.contains(`${M}-viewport--custom-scrollbar`))W.viewport.classList.add(`${M}-viewport--custom-scrollbar`);J.updateBounds(E.virtualSize,Y.state.viewportState.containerSize);let w=J;Y.afterScroll.push((u,U)=>{if(w)w.updatePosition(u),w.show()}),Y.resizeHandlers.push((u,U)=>{if(w){let P=Y.getCachedCompression();w.updateBounds(P.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!E.isCompressed&&Q)Q=!1,Y.scrollController.disableCompression(),Y.updateContentSize(E.actualSize);else if(E.isCompressed)Y.scrollController.updateConfig({compression:E}),Y.updateContentSize(E.virtualSize);if(J)J.updateBounds(E.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:E,totalItems:L}};Y.updateCompressionMode=V;let A=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return A()},Y.setVisibleRangeFn((L,E,O,_,$)=>{Z=null,T=null;let h=F0(_,O);e0(L,E,O,_,h,$)}),Y.setScrollToPosFn((L,E,O,_,$)=>{let h=F0(_,E);return J2(L,E,O,_,h,$)});let Z=null,T=null;Y.setPositionElementFn((L,E)=>{let O=Y.getVirtualTotal(),_=F0(O,Y.sizeCache);if(_.isCompressed){let $=Y.scrollController.getScrollTop();if(Z===null||E<T)T=E,Z=Math.round(w0(E,$,Y.sizeCache,O,Y.state.viewportState.containerSize,_));let h=Z+Y.sizeCache.getOffset(E)-Y.sizeCache.getOffset(T),v=Y.config.horizontal;L.style.transform=v?`translateX(${h}px)`:`translateY(${h}px)`}else{let $=Math.round(Y.sizeCache.getOffset(E)),h=Y.config.horizontal;L.style.transform=h?`translateX(${$}px)`:`translateY(${$}px)`}}),V(),Y.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var X2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:K}=J,X=new Map,B=0,N=0,D=(P)=>{let C=X.get(P);if(!C)C={items:Array(q),count:0,lastAccess:Date.now()},X.set(P,C);else C.lastAccess=Date.now();return C},Y=(P)=>{return Math.floor(P/q)},W=(P)=>{return P%q},F=()=>B,M=(P)=>{B=P},H=(P)=>{if(P<0||P>=B)return;let C=Y(P),y=X.get(C);if(!y)return;return y.items[W(P)]},V=(P)=>{if(P<0||P>=B)return!1;let C=Y(P),y=X.get(C);if(!y)return!1;return y.items[W(P)]!==void 0},A=(P,C)=>{let y=Y(P),k=D(y),R=W(P),f=k.items[R]===void 0;if(k.items[R]=C,f)k.count++,N++;if(P>=B)B=P+1},Z=(P,C)=>{for(let y=0;y<C.length;y++){let k=C[y];if(k!==void 0)A(P+y,k)}},T=(P)=>{if(P<0||P>=B)return!1;let C=Y(P),y=X.get(C);if(!y)return!1;let k=W(P);if(y.items[k]===void 0)return!1;if(y.items[k]=void 0,y.count--,N--,y.count===0)X.delete(C);return!0},L=(P,C)=>{let y=[];for(let k=P;k<=C&&k<B;k++)y.push(H(k));return y},E=(P,C)=>{for(let y=P;y<=C&&y<B;y++)if(!V(y))return!1;return!0},O=()=>{let P=[],C=null,y=Array.from(X.keys()).sort((k,R)=>k-R);for(let k of y){let R=X.get(k);if(!R)continue;let f=k*q;for(let r=0;r<q;r++){let Q0=f+r;if(Q0>=B)break;if(R.items[r]!==void 0)if(C===null)C={start:Q0,end:Q0};else if(Q0===C.end+1)C.end=Q0;else P.push(C),C={start:Q0,end:Q0};else if(C!==null)P.push(C),C=null}}if(C!==null)P.push(C);return P},_=(P,C)=>{let y=[],k=null;for(let R=P;R<=C&&R<B;R++)if(!V(R))if(k===null)k={start:R,end:R};else k.end=R;else if(k!==null)y.push(k),k=null;if(k!==null)y.push(k);return y},$=(P)=>{return X.has(P)},h=(P)=>{let C=X.get(P);if(C)C.lastAccess=Date.now()},v=(P,C)=>{if(P>C||X.size===0)return;let y=Date.now(),k=Y(Math.max(0,P)),R=Y(Math.min(B-1,C));for(let f=k;f<=R;f++){let r=X.get(f);if(r)r.lastAccess=y}},G=(P,C)=>{if(N<=Q)return 0;let y=Math.max(0,P-j),k=Math.min(B-1,C+j),R=Y(y),f=Y(k),r=0,Q0=[];for(let[z,S]of X)if(z<R||z>f)r+=S.count,Q0.push(z),N-=S.count,X.delete(z);if(r>0&&K)K(r,Q0);return r},p=()=>{if(N<=Q)return 0;let P=Array.from(X.entries()).sort(([,k],[,R])=>k.lastAccess-R.lastAccess),C=0,y=[];for(let[k,R]of P){if(N<=Q)break;C+=R.count,N-=R.count,y.push(k),X.delete(k)}if(C>0&&K)K(C,y);return C},i=()=>{return{totalItems:B,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:B>0?1-N/B:1}},w=()=>N,u=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:F,setTotal:M,get:H,has:V,set:A,setRange:Z,delete:T,getRange:L,isRangeLoaded:E,getLoadedRanges:O,findUnloadedRanges:_,getChunkIndex:Y,isChunkLoaded:$,touchChunk:h,touchChunksForRange:v,evictDistant:G,evictToLimit:p,getStats:i,getCachedCount:w,clear:u,reset:()=>{u(),B=0}}},Y2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,K)=>j.start-K.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let K=q[j],X=Q[Q.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else Q.push({...K})}return Q},g0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,K=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:K};if(q.length===0)return[X];let B=[],N=Y2(q),D=X.start;for(let Y of N){if(Y.end<D)continue;if(Y.start>X.end)break;if(Y.start>D)B.push({start:D,end:Math.min(Y.start-1,X.end)});if(D=Y.end+1,D>X.end)break}if(D<=X.end)B.push({start:D,end:X.end});return B};var K2=(J={})=>{let{maskCharacter:q=qJ,maxSampleSize:Q=XJ}=J,j=[],K=!1,X=0,B=(F)=>{if(K||F.length===0)return;let M=Math.min(F.length,Q);for(let H=0;H<M;H++){let V=F[H];if(!V||typeof V!=="object")continue;let A={};for(let[Z,T]of Object.entries(V)){if(Z.startsWith("_")||Z==="id")continue;A[Z]=String(T??"").length}if(Object.keys(A).length>0)j.push(A)}K=!0},N=()=>K,D=(F)=>{let M={id:`${YJ}${X++}`,[y2]:!0,_index:F};if(j.length===0)return M.label=q.repeat(12),M;let H=j[F%j.length];for(let[V,A]of Object.entries(H))M[V]=q.repeat(Math.max(1,A));return M};return{analyzeStructure:B,hasAnalyzedStructure:N,generate:D,generateRange:(F,M)=>{let H=[];for(let V=F;V<=M;V++)H.push(D(V));return H},clear:()=>{j=[],K=!1,X=0}}},P0=(J)=>{if(!J||typeof J!=="object")return!1;return J[y2]===!0},H2=(J)=>{return J.filter((q)=>!P0(q))};var A1=50,U2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:K,placeholder:X,pageSize:B=A1,onStateChange:N,onItemsLoaded:D,onItemsEvicted:Y}=J,W=X2({...K,onEvict:(g,d)=>{Y?.(g),_()}}),F=null,M=()=>{if(!F)F=K2(X);return F},H=new Map,V=!1,A,Z=!0,T,L=[],E=0,O=new Map,_=()=>{N?.(U())},$=()=>{H.clear();let g=W.getLoadedRanges();for(let d of g)for(let J0=d.start;J0<=d.end;J0++){let n=W.get(J0);if(n&&!P0(n))H.set(n.id,J0)}},h=(g,d)=>{if(!P0(d))H.set(d.id,g)},v=(g)=>{H.delete(g)},G=(g,d)=>{return`${g}-${d}`},p=()=>W.getTotal(),i=()=>W.getCachedCount(),w=()=>V,u=()=>Z,U=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:V,pendingRanges:L,error:A,hasMore:Z,cursor:T}),P=()=>W,C=()=>M(),y=(g)=>{let d=W.get(g);if(d!==void 0)return d;if(g>=0&&g<W.getTotal())return M().generate(g);return},k=(g)=>{let d=H.get(g);if(d===void 0)return;return W.get(d)},R=(g)=>{return H.get(g)??-1},f=(g)=>{let d=W.get(g);return d!==void 0&&!P0(d)},r=(g,d)=>{let J0=[],n=W.getTotal(),B0=0,K0=0;W.touchChunksForRange(g,Math.min(d,n-1));for(let M0=g;M0<=d&&M0<n;M0++){let E0=W.get(M0);if(E0!==void 0)J0.push(E0),B0++;else J0.push(M().generate(M0)),K0++}return J0},Q0=(g)=>{W.setTotal(g),Z=W.getCachedCount()<g,_()},z=(g,d=0,J0)=>{if(F&&!F.hasAnalyzedStructure()&&g.length>0)F.analyzeStructure(g);for(let n=0;n<g.length;n++){let B0=g[n];if(B0!==void 0){let K0=d+n;W.set(K0,B0),h(K0,B0)}}if(J0!==void 0)W.setTotal(J0);else if(d+g.length>W.getTotal())W.setTotal(d+g.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)Z=!1;D?.(g,d,W.getTotal()),_()},S=(g,d)=>{let J0=H.get(g);if(J0===void 0)return!1;let n=W.get(J0);if(!n)return!1;let B0={...n,...d};if(W.set(J0,B0),d.id!==void 0&&d.id!==g)v(g),h(J0,B0);return _(),!0},c=(g)=>{let d=H.get(g);if(d===void 0)return!1;W.delete(d),v(g);let J0=W.getTotal();if(J0>0)W.setTotal(J0-1);return _(),!0},a=async(g,d)=>{if(!q)return;let J0=G(g,d);if(O.has(J0))return;let n=W.getLoadedRanges(),B0=g0({start:g,end:d},n,W.chunkSize);if(B0.length===0)return;let K0=W.chunkSize,M0=[];for(let N0 of B0){let $0=Math.floor(N0.start/K0),k0=Math.floor(N0.end/K0);for(let Z0=$0;Z0<=k0;Z0++){let L0=Z0*K0,D0=L0+K0-1,O0=G(L0,D0);if(!M0.some((b0)=>b0.start===L0)&&!O.has(O0))M0.push({start:L0,end:D0})}}let E0=[];for(let N0 of B0){let $0=Math.floor(N0.start/K0),k0=Math.floor(N0.end/K0);for(let Z0=$0;Z0<=k0;Z0++){let L0=Z0*K0,D0=L0+K0-1,O0=G(L0,D0);if(O.has(O0)){let b0=O.get(O0);if(!E0.includes(b0))E0.push(b0)}}}for(let N0 of M0){let $0=G(N0.start,N0.end),k0=(async()=>{L.push(N0),V=!0,A=void 0,_();try{let Z0=N0.end-N0.start+1,L0={offset:N0.start,limit:Z0,cursor:void 0},D0=await q.read(L0);if(z(D0.items,N0.start,D0.total),D0.cursor)T=D0.cursor;let O0=N0.start+D0.items.length;if(O0>=E){if(E=O0,D0.hasMore!==void 0)Z=D0.hasMore;else if(D0.total!==void 0)Z=O0<D0.total}}catch(Z0){A=Z0 instanceof Error?Z0:Error(String(Z0))}finally{O.delete($0),L=L.filter((Z0)=>Z0.start!==N0.start||Z0.end!==N0.end),V=O.size>0,_()}})();O.set($0,k0),E0.push(k0)}await Promise.all(E0)},I=async(g,d)=>{if(W.isRangeLoaded(g,d))return;await a(g,d)},m=async()=>{if(!q)return;await a(0,B-1)},o=async()=>{if(!q||V||!Z)return!1;let g=W.getCachedCount(),d=W.getTotal(),J0=g,n=Math.min(J0+B-1,d>0?d-1:J0+B-1);if(J0>=d&&d>0)return Z=!1,!1;return await a(J0,n),W.getCachedCount()>g},e=async()=>{if(W.clear(),W.setTotal(0),H.clear(),F)F.clear();O.clear(),L=[],V=!1,T=void 0,Z=!0,E=0,A=void 0,_()},t=(g,d)=>{if(W.evictDistant(g,d)>0)$()},q0=()=>{W.clear(),H.clear(),T=void 0,A=void 0,L=[],V=!1,_()},Y0=()=>{if(W.reset(),H.clear(),F)F.clear();T=void 0,Z=!0,E=0,A=void 0,L=[],V=!1,_()};if(Q&&Q.length>0)z(Q,0,j??Q.length);else if(j!==void 0)W.setTotal(j),_();return{getState:U,getTotal:p,getCached:i,getIsLoading:w,getHasMore:u,getStorage:P,getPlaceholders:C,getItem:y,getItemById:k,getIndexById:R,isItemLoaded:f,getItemsInRange:r,setTotal:Q0,setItems:z,updateItem:S,removeItem:c,loadRange:a,ensureRange:I,loadInitial:m,loadMore:o,reload:e,evictDistant:t,clear:q0,reset:Y0}};var MJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:K,autoLoad:X=!0}=J,B=Q?.cancelThreshold??JJ,N=Q?.preloadThreshold??QJ,D=Q?.preloadAhead??jJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:W}=Y,F=Y.config.reverse,M=U2({adapter:q,...K!==void 0&&{initialTotal:K},pageSize:j?.chunkSize??z0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let O=Y.getVirtualTotal();Y.sizeCache.rebuild(O),Y.updateCompressionMode();let _=Y.getCachedCompression();Y.state.viewportState.totalSize=_.virtualSize,Y.state.viewportState.actualSize=_.actualSize,Y.state.viewportState.isCompressed=_.isCompressed,Y.state.viewportState.compressionRatio=_.ratio,Y.updateContentSize(_.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(O,_,$)=>{if(Y.state.isInitialized)Y.forceRender(),W.emit("load:end",{items:O,total:$,offset:_})}});Y.replaceDataManager(M);let H=null,V=null,A=0,Z=()=>{if(V){let O=V;V=null,Y.dataManager.ensureRange(O.start,O.end).catch((_)=>{W.emit("error",{error:_,context:"ensureRange"})})}};Y.afterScroll.push((O,_)=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getVelocity(),v=Y.scrollController.isTracking()&&$<=B;if(V&&A>B&&$<=B){let i=V;V=null,Y.dataManager.ensureRange(i.start,i.end).catch((w)=>{W.emit("error",{error:w,context:"ensureRange"})})}if(A=$,v&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(F){if(O<T2)W.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((i)=>{W.emit("error",{error:i,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-O-Y.state.viewportState.containerSize<T2)W.emit("load:start",{offset:Y.dataManager.getCached(),limit:z0}),Y.dataManager.loadMore().catch((w)=>{W.emit("error",{error:w,context:"loadMore"})})}let{renderRange:G}=Y.state.viewportState;if(!H||G.start!==H.start||G.end!==H.end)if(H={start:G.start,end:G.end},v){V=null;let{start:i,end:w}=G,u=Y.getVirtualTotal();if($>N)if(_==="down")w=Math.min(G.end+D,u-1);else i=Math.max(G.start-D,0);Y.dataManager.ensureRange(i,w).catch((U)=>{W.emit("error",{error:U,context:"ensureRange"})})}else V={start:G.start,end:G.end}});let T=200,L=null;Y.afterScroll.push((O,_)=>{if(L!==null)clearTimeout(L);L=setTimeout(()=>{L=null,Z()},T)}),Y.destroyHandlers.push(()=>{if(L!==null)clearTimeout(L),L=null});let E=()=>{if(Y.state.isDestroyed)return;H=null;let{renderRange:O}=Y.state.viewportState;if(O.end>0)Y.dataManager.ensureRange(O.start,O.end).catch((_)=>{W.emit("error",{error:_,context:"ensureRange"})});Z()};if(window.addEventListener("online",E),Y.destroyHandlers.push(()=>{window.removeEventListener("online",E)}),W.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{H=null,V=null,Y.forceRender();let{renderRange:O}=Y.state.viewportState;if(O.end>0)W.emit("load:start",{offset:O.start,limit:O.end-O.start+1}),await Y.dataManager.ensureRange(O.start,O.end)}),Y.methods.set("reload",async()=>{H=null,V=null,Y.invalidateRendered(),await Y.dataManager.reload(),W.emit("load:start",{offset:0,limit:z0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:O}=Y.state.viewportState;if(O.end>0)await Y.dataManager.ensureRange(O.start,O.end)}),X)W.emit("load:start",{offset:0,limit:z0}),Y.dataManager.loadInitial().catch((O)=>{W.emit("error",{error:O,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var OJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:K,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",K.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let Y=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let W=Q.viewport.getBoundingClientRect();if(K.horizontal){let F=W.left+window.scrollX;window.scrollTo(F+Y,window.scrollY)}else{let F=W.top+window.scrollY;window.scrollTo(window.scrollX,F+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:B,innerWidth:N}=window,D=()=>{let{innerWidth:Y,innerHeight:W}=window,F=K.horizontal?Y:W,M=K.horizontal?N:B;if(Math.abs(F-M)<=1)return;B=W,N=Y,j.viewportState.containerSize=W,X.emit("resize",{width:Y,height:W});for(let H=0;H<q.resizeHandlers.length;H++)q.resizeHandlers[H](Y,W);q.renderIfNeeded()};window.addEventListener("resize",D,{passive:!0}),J=()=>{window.removeEventListener("resize",D)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var $2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].headerLayoutIndex<=q)Q=K;else j=K-1}return Q},AJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].firstDataIndex<=q)Q=K;else j=K-1}return Q},FJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),K=0,X=0;for(let B=1;B<J;B++){let N=q(B);if(N!==j){let D=B-K;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:D}),X=X+1+D,j=N,K=B}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:J-K}),Q},x0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),K=0;for(let X of q){j[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let B=0;B<X.count;B++)j[K]=J[X.firstDataIndex+B],K++}return j},m0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let K=J.getEntry(j);if(K.type==="header")return J.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},B2=(J,q)=>{let Q=FJ(J,q.getGroupForIndex),j=J+Q.length,K=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(M)=>{if(Q.length===0)return{type:"item",dataIndex:M,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=$2(Q,M),V=Q[H];if(M===V.headerLayoutIndex)return{type:"header",group:V};let A=M-V.headerLayoutIndex-1;return{type:"item",dataIndex:V.firstDataIndex+A,group:V}},layoutToDataIndex:(M)=>{if(Q.length===0)return M;let H=$2(Q,M),V=Q[H];if(M===V.headerLayoutIndex)return-1;let A=M-V.headerLayoutIndex-1;return V.firstDataIndex+A},dataToLayoutIndex:(M)=>{if(Q.length===0)return M;let H=AJ(Q,M),V=Q[H],A=M-V.firstDataIndex;return V.headerLayoutIndex+1+A},getGroupAtLayoutIndex:(M)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=$2(Q,M);return Q[H]},getGroupAtDataIndex:(M)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=AJ(Q,M);return Q[H]},getHeaderHeight:typeof K==="number"?(M)=>K:(M)=>{let H=Q[M];if(!H)return 0;return K(H.key,M)},rebuild:(M)=>{Q=FJ(M,q.getGroupForIndex),j=M+Q.length}}};var Z2=(J,q,Q,j,K,X=!1)=>{let B=document.createElement("div");if(B.className=`${K}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.position="absolute",B.style.zIndex="5",B.style.pointerEvents="none",B.style.willChange="transform",B.style.overflow="hidden",X)B.style.top="0",B.style.bottom="0",B.style.left="0";else B.style.top="0",B.style.left="0",B.style.right="0";J.insertBefore(B,J.firstChild);let N=-1,D=!1,Y=0,W=(Z)=>{if(Z===N)return;N=Z;let T=q.groups;if(Z<0||Z>=T.length){B.textContent="";return}let L=T[Z],E=j.headerTemplate(L.key,L.groupIndex),O=q.getHeaderHeight(Z);if(X)B.style.width=`${O}px`;else B.style.height=`${O}px`;if(typeof E==="string")B.innerHTML=E;else B.replaceChildren(E)},F=(Z)=>{let T=q.groups;if(T.length===0){H();return}let L=Q.getOffset(T[0].headerLayoutIndex);if(Z<L){H();return}let E=0,O=T.length-1;while(E<O){let G=E+O+1>>>1;if(Q.getOffset(T[G].headerLayoutIndex)<=Z)E=G;else O=G-1}let _=E;if(!D)M();W(_);let $=q.getHeaderHeight(_),h=0,v=_+1;if(v<T.length){let p=Q.getOffset(T[v].headerLayoutIndex)-Z;if(p<$)h=p-$}if(h!==Y)if(Y=h,h===0)B.style.transform="";else{let G=Math.round(h);B.style.transform=X?`translateX(${G}px)`:`translateY(${G}px)`}},M=()=>{if(D)return;D=!0,B.style.display=""},H=()=>{if(!D)return;D=!1,B.style.display="none",N=-1,Y=0,B.style.transform=""},V=()=>{let Z=N;if(N=-1,Z>=0)W(Z)},A=()=>{B.remove(),N=-1,D=!1};return B.style.display="none",{update:F,refresh:V,show:M,hide:H,destroy:A}};var EJ=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let B=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,B),X.end=Math.min(j-1,Math.max(0,N)),X},LJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},bJ=(J,q,Q,j,K,X)=>{if(j===0)return 0;let B=Math.max(0,Math.min(J,j-1)),N=q.getOffset(B),D=q.getSize(B),Y=q.getTotalSize(),W=Math.max(0,Y-Q),F;switch(X){case"center":F=N-Q/2+D/2;break;case"end":F=N-Q+D;break;case"start":default:F=N;break}return Math.max(0,Math.min(F,W))},TJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},yJ=(J,q)=>{return q.getTotalSize()},HJ=(J,q)=>{return q.getOffset(J)},$J=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var C0=(J,q,Q,j,K="start",X,B=bJ)=>{return B(J,q,Q,j,X,K)},kJ=(J,q)=>{return J.start===q.start&&J.end===q.end},PJ=(J,q)=>{return J>=q.start&&J<=q.end},RJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var CJ=(J,q)=>{let Q=[],j=[];for(let K=J.start;K<=J.end;K++)if(K<q.start||K>q.end)j.push(K);for(let K=q.start;K<=q.end;K++)if(K<J.start||K>J.end)Q.push(K);return{add:Q,remove:j}};Q2();var zJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,Q=null,j=[],K=[];return{name:"withSections",priority:10,setup(X){let{dom:B,config:N,rawConfig:D}=X,{classPrefix:Y}=N,F=D.item.height;j=D.items?[...D.items]:[];let M=j.length,H={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=B2(M,H),K=x0(j,q.groups);let V=m0(q,F);X.setSizeConfig(V),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let A=D.item.template,{headerTemplate:Z}=J,T=(v,G,p)=>{if(R0(v))return Z(v.groupKey,v.groupIndex);return A(v,G,p)},L=X.methods.get("_getGridLayout"),E=X.methods.get("_replaceGridRenderer"),O=X.methods.get("_updateGridLayoutForGroups");if(L&&E){if(O)O((i)=>{let w=K[i];return!!(w&&R0(w))});let{createGridRenderer:v}=(N2(),j1(vJ)),G=L(),p=v(B.items,T,X.sizeCache,G,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);E(p)}else X.replaceTemplate(T);if(B.root.classList.add(`${Y}--grouped`),J.sticky!==!1){Q=Z2(B.root,q,X.sizeCache,{...H,sticky:H.sticky??!1},Y,N.horizontal);let v=Q;X.afterScroll.push((G,p)=>{v.update(G)}),Q.update(X.scrollController.getScrollTop())}let _=()=>{if(!q)return;q.rebuild(j.length),K=x0(j,q.groups);let v=m0(q,F);if(X.setSizeConfig(v),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),Q)Q.refresh()};X.methods.set("setItems",(v)=>{j=v.slice(),_()}),X.methods.set("appendItems",(v)=>{j.push(...v),_()}),X.methods.set("prependItems",(v)=>{j.unshift(...v),_()}),X.methods.set("removeItem",(v)=>{j=j.filter((G)=>G.id!==v),_()});let{animateScroll:$,cancelScroll:h}=s2(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(v,G)=>{let p=q.dataToLayoutIndex(v),{align:i,behavior:w,duration:u}=v0(G),U=X.dataManager.getTotal(),P=C0(p,X.sizeCache,X.state.viewportState.containerSize,U,i,X.getCachedCompression());if(w==="smooth")$(X.scrollController.getScrollTop(),P,u);else h(),X.scrollController.scrollTo(P)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(h(),Q)Q.destroy(),Q=null;B.root.classList.remove(`${Y}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var W2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,K={row:0,col:0},X=(V)=>{if(V<=0)return 0;if(!j)return Math.ceil(V/q);let A=0,Z=0,T=0;for(let L=0;L<V;L++)if(j(L)){if(T++,Z>0)A++,Z=0;A++,Z=0}else if(Z++,Z>=q)A++,Z=0;if(Z>0)A++;return A},B=(V)=>{return K.row=N(V),K.col=D(V),K},N=(V)=>{if(!j)return Math.floor(V/q);let A=0,Z=0;for(let T=0;T<=V;T++)if(j(T)){if(Z>0)A++,Z=0;if(T===V)return A;A++,Z=0}else{if(T===V)return A;if(Z++,Z>=q)A++,Z=0}return console.warn(`⚠️ getRow(${V}) fell through - returning ${A}`),A},D=(V)=>{if(!j)return V%q;if(j(V))return 0;let A=0;for(let Z=0;Z<=V;Z++)if(j(Z))A=0;else{if(Z===V)return A;if(A++,A>=q)A=0}return A},Y=(V,A,Z)=>{if(Z<=0)return{start:0,end:-1};if(!j){let _=Math.max(0,V*q),$=Math.min(Z-1,(A+1)*q-1);return{start:_,end:$}}let T=-1,L=-1,E=0,O=0;for(let _=0;_<Z;_++){if(j(_)){if(O>0)E++,O=0;if(E>=V&&E<=A){if(T===-1)T=_;L=_}E++,O=0}else{if(E>=V&&E<=A){if(T===-1)T=_;L=_}if(O++,O>=q)E++,O=0}if(E>A&&O===0)break}if(T===-1)return{start:0,end:-1};return{start:T,end:L}},W=(V,A,Z)=>{if(A<0||A>=q)return-1;let T=V*q+A;if(T<0||T>=Z)return-1;return T},F=(V)=>{let A=(q-1)*Q;return Math.max(0,(V-A)/q)};return{get columns(){return q},get gap(){return Q},update:(V)=>{if(V.columns!==void 0)q=Math.max(1,Math.floor(V.columns));if(V.gap!==void 0)Q=V.gap;if(V.isHeaderFn!==void 0)j=V.isHeaderFn},getTotalRows:X,getPosition:B,getRow:N,getCol:D,getItemRange:Y,getItemIndex:W,getColumnWidth:F,getColumnOffset:(V,A)=>{let Z=F(A);return V*(Z+Q)}}};N2();var L1=new Set,wJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:K,emitter:X,config:B,rawConfig:N}=j,{classPrefix:D}=B;if(B.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=B.horizontal,W=()=>Y?K.viewport.clientHeight:j.getContainerWidth(),F=N.items?.some((y)=>y.__groupHeader===!0),M={columns:J.columns,gap:J.gap??0};if(F)M.isHeaderFn=(y)=>{let k=j.dataManager.getItem(y);return!!(k&&k.__groupHeader===!0)};q=W2(M);let H=q.gap;j.setVirtualTotalFn(()=>{let y=j.dataManager.getTotal();return q.getTotalRows(y)});let V=N.item,A=B.horizontal?V.width:V.height,Z={containerWidth:W(),columns:q.columns,gap:q.gap};if(typeof A==="function")j.setSizeConfig((y)=>{let k=Z.containerWidth-2,R=(Z.columns-1)*Z.gap,f=(k-R)/Z.columns,r={containerWidth:Z.containerWidth,columns:Z.columns,gap:Z.gap,columnWidth:f,row:q.getRow(y),column:q.getCol(y),totalRows:q.getTotalRows(j.dataManager.getTotal()),totalColumns:Z.columns};return A(y,r)+Z.gap});else if(H>0)j.setSizeConfig(A+H);j.rebuildSizeCache(),K.root.classList.add(`${D}--grid`);let T=W(),L=N.item.template,E=()=>{Q=d0(K.items,L,j.sizeCache,q,D,T,()=>j.dataManager.getTotal(),B.ariaIdPrefix,B.horizontal),j.replaceRenderer(Q)};E(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>M),j.methods.set("_replaceGridRenderer",(y)=>{Q=y}),j.methods.set("_updateGridLayoutForGroups",(y)=>{q.update({isHeaderFn:y});let k=j.dataManager.getTotal(),R=0;for(let f=0;f<k;f++)if(q.getCol(f)===0){let r=j.sizeCache.getSize(f);R+=r}if(j.sizeCache.getTotalSize=()=>R,B.horizontal)j.dom.content.style.width=`${R}px`;else j.dom.content.style.height=`${R}px`;E()}),j.methods.set("updateGrid",(y)=>{if(y.columns!==void 0){if(!Number.isInteger(y.columns)||y.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");M.columns=y.columns}if(y.gap!==void 0){if(y.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");M.gap=y.gap}if(q)q.update(M);let k=W();if(Z.containerWidth=k,Z.columns=M.columns,Z.gap=M.gap??0,Q)Q.updateContainerWidth(k);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let R=0;R<j.contentSizeHandlers.length;R++)j.contentSizeHandlers[R]();if(Q)Q.clear();j.forceRender()});let O=null,_=null,$=!1,h=()=>{if($)return;$=!0,O=j.methods.get("_getSelectedIds")??null,_=j.methods.get("_getFocusedIndex")??null},v=-1,G=-1,p=!0,i=B.overscan??3,w={start:0,end:0},u={start:0,end:0},U=()=>{if(j.state.isDestroyed)return;let y=j.scrollController.getScrollTop(),k=j.state.viewportState.containerSize;if(!p&&y===v&&k===G)return;v=y,G=k,p=!1;let R=j.getVirtualTotal();if(R===0||k===0)w.start=0,w.end=0;else{w.start=Math.max(0,j.sizeCache.indexAtOffset(y));let o=j.sizeCache.indexAtOffset(y+k);if(o<R-1)o++;w.end=Math.min(R-1,Math.max(0,o))}u.start=Math.max(0,w.start-i),u.end=Math.min(R-1,w.end+i);let f=j.state.viewportState;f.scrollPosition=y,f.visibleRange.start=w.start,f.visibleRange.end=w.end,f.renderRange.start=u.start,f.renderRange.end=u.end;let r=j.state.lastRenderRange,Q0=f.isCompressed,z=j.dataManager.getTotal(),S=q.getItemRange(u.start,u.end,z),c=j.dataManager.getItemsInRange(S.start,S.end),a=Q0?j.getCompressionContext():void 0;h();let I=O?O():L1,m=_?_():-1;if(Q.render(c,S,I,m,a),r.start!==u.start||r.end!==u.end)r.start=u.start,r.end=u.end,X.emit("range:change",{range:{start:u.start,end:u.end}})},P=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,p=!0,U()};j.setRenderFns(U,P);let C=typeof A==="function";if(j.resizeHandlers.push((y,k)=>{let R=Y?k:y;if(Z.containerWidth=R,Q)Q.updateContainerWidth(R);if(C){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let f=0;f<j.contentSizeHandlers.length;f++)j.contentSizeHandlers[f]();if(Q)Q.clear();j.forceRender()}}),j.methods.set("scrollToIndex",(y,k)=>{let R=Math.floor(y/J.columns),{align:f,behavior:r}=v0(k),Q0=j.dataManager.getState(),z=q.getTotalRows(Q0.total),S=Math.max(0,Math.min(R,z-1)),c=C0(S,j.sizeCache,j.state.viewportState.containerSize,z,f,j.getCachedCompression());if(r==="smooth")j.scrollController.scrollTo(c);else j.scrollController.scrollTo(c)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${D}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};N2();var D2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,K=0,X=[],B=()=>{let Z=(q-1)*Q;K=Math.max(0,(j-Z)/q),X=Array(q);let T=K+Q;for(let L=0;L<q;L++)X[L]=L*T};B();let N=[],D=0,Y=[],W=(Z)=>{let T=0,L=Z[0];for(let E=1;E<Z.length;E++){let O=Z[E];if(O<L)L=O,T=E}return T},F=(Z,T)=>{if(Z<=0)return D=0,N=[],[];let L=Array(q).fill(0),E=Array(q);for(let $=0;$<q;$++)E[$]=[];let O=Array(Z);for(let $=0;$<Z;$++){let h=W(L),v=T($),G=L[h];O[$]={index:$,x:X[h],y:G,lane:h,size:v,crossSize:K},E[h].push($),L[h]=G+v+Q}N=E;let _=0;for(let $=0;$<q;$++){let h=L[$],v=h>0?h-Q:0;if(v>_)_=v}return D=_,O},M=(Z)=>{if(Z.length===0)return D>0?D:0;if(D>0)return D;let T=Array(q).fill(0);for(let E of Z){let O=E.y+E.size,_=T[E.lane];if(O>_)T[E.lane]=O}let L=0;for(let E=0;E<q;E++)if(T[E]>L)L=T[E];return L},H=(Z,T,L)=>{if(Z.length===0||L<=T)return Y.length=0,Y;if(N.length===0||N.length!==q)return V(Z,T,L);Y.length=0;for(let E=0;E<q;E++){let O=N[E],_=O.length;if(_===0)continue;let $=0,h=_;while($<h){let v=$+h>>>1,G=Z[O[v]];if(G.y+G.size<=T)$=v+1;else h=v}for(let v=$;v<_;v++){let G=Z[O[v]];if(G.y>=L)break;Y.push(G)}}return Y},V=(Z,T,L)=>{let E=[];for(let O of Z)if(O.y+O.size>T&&O.y<L)E.push(O);return E};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(Z)=>{let T=!1;if(Z.columns!==void 0){let L=Math.max(1,Math.floor(Z.columns));if(L!==q)q=L,T=!0}if(Z.gap!==void 0&&Z.gap!==Q)Q=Z.gap,T=!0;if(Z.containerSize!==void 0&&Z.containerSize!==j)j=Z.containerSize,T=!0;if(T)B()},calculateLayout:F,getTotalSize:M,getVisibleItems:H}};var b1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var _2=(J,q,Q,j=!1,K,X)=>{let B=b1(),N=new Map,D=new Set,Y=0,W="",F=-1,M={selected:!1,focused:!1},H=(G,p)=>{return M.selected=G,M.focused=p,M},V=`${Q}-item ${Q}-masonry-item`,A=`${Q}-item--selected`,Z=`${Q}-item--focused`,T=(G,p)=>{if(typeof p==="string")G.innerHTML=p;else G.replaceChildren(p)},L=(G,p,i)=>{G.classList.toggle(A,p),G.classList.toggle(Z,i)},E=(G,p)=>{if(j)G.style.transform=`translate(${Math.round(p.y)}px, ${Math.round(p.x)}px)`;else G.style.transform=`translate(${Math.round(p.x)}px, ${Math.round(p.y)}px)`},O=(G,p)=>{if(j)G.style.width=`${p.size}px`,G.style.height=`${p.crossSize}px`;else G.style.width=`${p.crossSize}px`,G.style.height=`${p.size}px`},_=(G,p,i,w,u)=>{let U=B.acquire(),P=H(w,u);if(U.className=V,U.dataset.index=String(G),U.dataset.id=String(p.id),U.dataset.lane=String(i.lane),U.ariaSelected=String(w),X)U.id=`${X}-item-${G}`;if(K){let y=K();if(y!==F)F=y,W=String(y);U.setAttribute("aria-setsize",W),U.setAttribute("aria-posinset",String(G+1))}O(U,i);let C=q(p,G,P);return T(U,C),L(U,w,u),E(U,i),{element:U,lastItemId:p.id,lastSelected:w,lastFocused:u,lastY:i.y,lastX:i.x,lastSeenFrame:Y}},$=(G,p,i,w)=>{Y++,D.clear();for(let U=0;U<p.length;U++)D.add(p[U].index);for(let[U,P]of N)if(D.has(U))P.lastSeenFrame=Y;else if(Y-P.lastSeenFrame>2)B.release(P.element),N.delete(U);let u=null;for(let U=0;U<p.length;U++){let P=p[U],C=P.index,y=G(C);if(!y)continue;let k=i.has(y.id),R=C===w,f=N.get(C);if(f){let r=f.lastItemId!==y.id,Q0=f.lastSelected!==k,z=f.lastFocused!==R,S=f.lastY!==P.y||f.lastX!==P.x;if(r||Q0||z){let c=H(k,R),a=q(y,C,c);T(f.element,a),L(f.element,k,R),f.element.dataset.id=String(y.id),f.element.ariaSelected=String(k),f.lastItemId=y.id,f.lastSelected=k,f.lastFocused=R}if(S)E(f.element,P),f.lastY=P.y,f.lastX=P.x}else{let r=_(C,y,P,k,R);if(!u)u=document.createDocumentFragment();u.appendChild(r.element),N.set(C,r)}}if(u)J.appendChild(u)},h=()=>{for(let{element:G}of N.values())B.release(G);N.clear(),J.innerHTML=""};return{render:$,getElement:(G)=>N.get(G)?.element,clear:h,destroy:()=>{h(),B.clear()}}};var T1=new Set,SJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(K){let{dom:X,emitter:B,config:N,rawConfig:D}=K,Y=N.classPrefix,W=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${Y}--masonry`);let F=()=>{return W?X.viewport.clientHeight:X.viewport.clientWidth},M={columns:J.columns,gap:J.gap??0,containerSize:F()};q=D2(M);let H=D.item,V=typeof H.height==="function"?H.height:(y)=>H.height,A=W&&D.item.width?typeof D.item.width==="function"?D.item.width:(y)=>D.item.width:V,Z=()=>{let y=K.dataManager.getTotal();j=q.calculateLayout(y,(R)=>{return A(R)});let k=q.getTotalSize(j);if(K.sizeCache.getTotalSize=()=>k,W)X.content.style.width=`${k}px`;else X.content.style.height=`${k}px`},T=D.item.template;Q=_2(X.items,T,Y,W,()=>K.dataManager.getTotal(),N.ariaIdPrefix);let L=null,E=null,O=!1,_=()=>{if(O)return;O=!0,L=K.methods.get("_getSelectedIds")??null,E=K.methods.get("_getFocusedIndex")??null},$=(y)=>K.dataManager.getItem(y),h=-1,v=-1,G=!0,p=(N.overscan??3)*100,i=()=>{if(K.state.isDestroyed)return;_();let y=K.scrollController.getScrollTop(),k=K.state.viewportState.containerSize;if(!G&&y===h&&k===v)return;h=y,v=k,G=!1;let R=Math.max(0,y-p),f=y+k+p,r=q.getVisibleItems(j,R,f),Q0=L?L():T1,z=E?E():-1;if(Q&&r.length>0)Q.render($,r,Q0,z);let S=K.state.viewportState;S.scrollPosition=y;let c=r.length,a=c>0?r[0].index:0,I=c>0?r[c-1].index:0;S.visibleRange.start=a,S.visibleRange.end=I,S.renderRange.start=a,S.renderRange.end=I;let m=K.state.lastRenderRange;if(m.start!==a||m.end!==I)m.start=a,m.end=I,B.emit("range:change",{range:{start:a,end:I}})},w=()=>{K.state.lastRenderRange.start=-1,K.state.lastRenderRange.end=-1,G=!0,i()};K.setRenderFns(i,w);let u=(y,k)=>{let R=W?k:y;if(q&&q.containerSize!==R)q.update({containerSize:R}),Z(),w()};K.resizeHandlers.push(u);let U=()=>{Z(),w()},P=K.dataManager,C=(y)=>{if(typeof P[y]!=="function")return;let k=P[y].bind(P);P[y]=(...R)=>{k(...R),U()}};C("setItems"),C("appendItems"),C("prependItems"),C("updateItem"),C("removeItem"),K.methods.set("scrollToIndex",(y,k,R)=>{let f=j[y];if(!f)return;let r=f.y,Q0=K.state.viewportState.containerSize,z=r;if(k==="center")z=r-Q0/2+f.size/2;else if(k==="end")z=r-Q0+f.size;z=Math.max(0,z),K.scrollController.scrollTo(z,R==="smooth")}),Z(),K.destroyHandlers.push(()=>{if(Q)Q.destroy();X.root.classList.remove(`${Y}--masonry`)})}}};var V2=(J)=>({selected:new Set(J??[]),focusedIndex:-1}),c0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let K of q)j.add(K);return{...J,selected:j}},l0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},f0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return l0(J,[q]);else return c0(J,[q],Q)},G2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},M2=(J)=>({...J,selected:new Set}),k2=(J,q)=>{return J.focusedIndex=q,J},P2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},R2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},C2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},v2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var fJ=(J,q)=>{return J.selected.has(q)},r0=(J)=>{return Array.from(J.selected)},a0=(J,q)=>{let Q=[];for(let j of J.selected){let K=q(j);if(K)Q.push(K)}return Q};var IJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=V2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:B,emitter:N,config:D}=X,{classPrefix:Y,ariaIdPrefix:W}=D;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}let F=new Map,M=()=>{F.clear();let Z=X.dataManager.getTotal(),T=X.dataManager.getCached();if(T===0)return;if(T>=Z){for(let E=0;E<Z;E++){let O=X.dataManager.getItem(E);if(O)F.set(O.id,E)}return}let L=X.dataManager.getStorage();if(L&&typeof L.getLoadedRanges==="function"){let E=L.getLoadedRanges();for(let O of E)for(let _=O.start;_<=O.end;_++){let $=X.dataManager.getItem(_);if($)F.set($.id,_)}}};N.on("load:end",({items:Z,offset:T})=>{if(!Z||Z.length===0)return;if(T!==void 0)for(let L=0;L<Z.length;L++){let E=Z[L];if(E&&E.id!==void 0)F.set(E.id,T+L)}else M()}),M(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusedIndex});let{forceRender:H}=X.getRenderFns(),V=()=>{H();let Z=(T)=>{let L=F.get(T);if(L===void 0)return;return X.dataManager.getItem(L)};N.emit("selection:change",{selected:r0(j),items:a0(j,Z)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",B.root.appendChild(K);let A=K;N.on("selection:change",({selected:Z})=>{let T=Z.length;if(T===0)A.textContent="";else if(T===1)A.textContent="1 item selected";else A.textContent=`${T} items selected`}),X.clickHandlers.push((Z)=>{if(X.state.isDestroyed)return;let L=Z.target.closest("[data-index]");if(!L)return;let E=parseInt(L.dataset.index??"-1",10);if(E<0)return;let O=X.dataManager.getItem(E);if(!O)return;N.emit("item:click",{item:O,index:E,event:Z}),j=k2(j,E),B.root.setAttribute("aria-activedescendant",`${W}-item-${E}`),j=f0(j,O.id,q),V()}),X.keydownHandlers.push((Z)=>{if(X.state.isDestroyed)return;let T=X.dataManager.getTotal(),L=j.focusedIndex,E=!1,O=!1,_=j;switch(Z.key){case"ArrowUp":_=P2(j,T),E=!0,O=!0;break;case"ArrowDown":_=R2(j,T),E=!0,O=!0;break;case"Home":_=C2(j,T),E=!0,O=!0;break;case"End":_=v2(j,T),E=!0,O=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let $=X.dataManager.getItem(j.focusedIndex);if($)_=f0(j,$.id,q);E=!0}break}if(E){Z.preventDefault(),j=_;let $=j.focusedIndex;if($>=0){let h=X.dataManager.getState(),v=C0($,X.sizeCache,X.state.viewportState.containerSize,h.total,"center",X.getCachedCompression());X.scrollController.scrollTo(v),B.root.setAttribute("aria-activedescendant",`${W}-item-${$}`)}else B.root.removeAttribute("aria-activedescendant");if(O){let{selected:h}=j;if(L>=0&&L!==$){let v=X.dataManager.getItem(L);if(v)X.renderer.updateItemClasses(L,h.has(v.id),!1)}if($>=0){let v=X.dataManager.getItem($);if(v)X.renderer.updateItemClasses($,h.has(v.id),!0)}}else V()}}),X.methods.set("select",(...Z)=>{j=c0(j,Z,q),V()}),X.methods.set("deselect",(...Z)=>{j=l0(j,Z),V()}),X.methods.set("toggleSelect",(Z)=>{j=f0(j,Z,q),V()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let Z=X.getAllLoadedItems();j=G2(j,Z,q),M(),V()}),X.methods.set("clearSelection",()=>{j=M2(j),V()}),X.methods.set("getSelected",()=>{return r0(j)}),X.methods.set("getSelectedItems",()=>{return a0(j,(T)=>{let L=F.get(T);if(L===void 0)return;return X.dataManager.getItem(L)})}),X.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove()})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var pJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let K=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),B=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),D=N&&N().length>0?N():void 0;if(B===0){let M={index:0,offsetInItem:0,total:0};if(D)M.selectedIds=D;return M}let Y,W;if(X.isCompressed){let H=K/X.virtualSize*B;Y=Math.max(0,Math.min(Math.floor(H),B-1)),W=(H-Y)*Q.sizeCache.getSize(Y)}else Y=Q.sizeCache.indexAtOffset(K),W=K-Q.sizeCache.getOffset(Y);W=Math.max(0,W);let F={index:Y,offsetInItem:W,total:B};if(D)F.selectedIds=D;return F});let j=(K)=>{let{index:X,offsetInItem:B,selectedIds:N}=K,D=Q.getVirtualTotal();if(D===0)return;if(!Number.isFinite(X)||!Number.isFinite(B))return;if(Q.sizeCache.getTotal()!==D){Q.sizeCache.rebuild(D),Q.updateCompressionMode();let Z=Q.getCachedCompression();Q.updateContentSize(Z.virtualSize)}let W=Q.getCachedCompression(),F=Math.max(0,Math.min(X,D-1)),M;if(W.isCompressed){let Z=Q.sizeCache.getSize(F),T=Z>0?B/Z:0;M=(F+T)/D*W.virtualSize}else M=Q.sizeCache.getOffset(F)+B;let H=Q.state.viewportState.containerSize,V=Math.max(0,W.virtualSize-H);if(M=Math.max(0,Math.min(M,V)),Q.scrollController.scrollTo(M),N&&N.length>0){let Z=Q.methods.get("select");if(Z)Z(...N)}let A=Q.methods.get("loadVisibleRange");if(A)requestAnimationFrame(()=>{A()});else{let Z=Q.methods.get("reload");if(Z)requestAnimationFrame(()=>{Z()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};export{pJ as withSnapshots,IJ as withSelection,zJ as withSections,DJ as withScrollbar,GJ as withScale,OJ as withPage,SJ as withMasonry,wJ as withGrid,MJ as withAsync,e2 as vlist,f0 as toggleSelection,EJ as simpleVisibleRange,c0 as selectItems,G2 as selectAll,kJ as rangesEqual,q2 as rafThrottle,ZJ as needsScaling,Y2 as mergeRanges,fJ as isSelected,R0 as isSectionHeader,P0 as isPlaceholderItem,PJ as isInRange,a0 as getSelectedItems,r0 as getSelectedIds,F0 as getScaleState,WJ as getScaleInfo,F0 as getScale,RJ as getRangeCount,NJ as getMaxItemsWithoutScaling,H2 as filterPlaceholders,CJ as diffRanges,l0 as deselectItems,Z2 as createStickyHeader,X2 as createSparseStorage,y0 as createSizeCache,V2 as createSelectionState,m0 as createSectionedSizeFn,B2 as createSectionLayout,S0 as createScrollbar,VJ as createScrollController,K2 as createPlaceholderManager,i0 as createMeasuredSizeCache,_2 as createMasonryRenderer,D2 as createMasonryLayout,d0 as createGridRenderer,W2 as createGridLayout,t0 as createEmitter,U2 as createAsyncManager,M2 as clearSelection,$J as clampScrollPosition,TJ as calculateTotalSize,C0 as calculateScrollToIndex,e0 as calculateScaledVisibleRange,J2 as calculateScaledScrollToIndex,UJ as calculateScaledRenderRange,w0 as calculateScaledItemPosition,LJ as calculateRenderRange,g0 as calculateMissingRanges,HJ as calculateItemOffset,BJ as calculateIndexFromScrollPosition,yJ as calculateActualSize,x0 as buildLayoutItems,H0 as MAX_VIRTUAL_SIZE,KJ as MAX_VIRTUAL_HEIGHT};
1
+ var{defineProperty:F2,getOwnPropertyNames:J1,getOwnPropertyDescriptor:Q1}=Object,j1=Object.prototype.hasOwnProperty;var u2=new WeakMap,q1=(J)=>{var q=u2.get(J),Q;if(q)return q;if(q=F2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")J1(J).map((j)=>!j1.call(q,j)&&F2(q,j,{get:()=>J[j],enumerable:!(Q=Q1(J,j))||Q.enumerable}));return u2.set(J,q),q};var X1=(J,q)=>{for(var Q in q)F2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var g2=(J,q)=>()=>(J&&(q=J(J=0)),q);var Y1=(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}},K1=(J,q)=>{let Q=q,j=new Float64Array(0),K=(B)=>{Q=B,j=new Float64Array(B+1),j[0]=0;for(let N=0;N<B;N++)j[N+1]=j[N]+J(N)};K(q);let X=(B)=>{if(Q===0)return 0;if(B<=0)return 0;if(B>=j[Q])return Q-1;let N=0,_=Q-1;while(N<_){let Y=N+_+1>>>1;if(j[Y]<=B)N=Y;else _=Y-1}return N};return{getOffset:(B)=>{if(B<=0)return 0;if(B>=Q)return j[Q];return j[B]},getSize:(B)=>J(B),indexAtOffset:(B)=>X(B),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(B)=>K(B),isVariable:()=>!0}},H0=(J,q)=>{if(typeof J==="number")return Y1(J,q);return K1(J,q)},g0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let K=0,X=0,B=q;while(B<j&&X<Q)X+=J.getSize(B),K++,B++;return Math.max(1,K)},i0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,K=0;for(let X=Q-1;X>=0;X--){let B=J.getSize(X);if(K+B>q)break;K+=B,j++}return Math.max(j,1)},T2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),K=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+K*J.getSize(X)};var H2=200,S0=50,QJ=5,jJ=2,qJ=50,$0=16000000,XJ="x",YJ=20,$2="_isPlaceholder",KJ="__placeholder_";var UJ,F0=(J,q)=>{let Q=q.getTotalSize(),j=Q>$0,K=j?$0:Q,X=Q>0?K/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:K,ratio:X}},J2=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let G=Q.indexAtOffset(J),A=Q.indexAtOffset(J+q);if(A<j-1)A++;return X.start=Math.max(0,G),X.end=Math.min(j-1,Math.max(0,A)),X}let{virtualSize:B}=K,_=J/B*j,Y=Math.floor(_),D=g0(Q,Math.max(0,Y),q,j),b=Math.ceil(_)+D,y=B-q-J;if(y<=q&&y>=-1){let G=i0(Q,q,j),A=Math.max(0,j-G),W=Math.max(0,Math.min(1,1-y/q));Y=Math.floor(Y+(A-Y)*W),b=y<=1?j-1:Math.min(j-1,Y+D)}return X.start=Math.max(0,Y),X.end=Math.min(j-1,Math.max(0,b)),X},BJ=(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},f0=(J,q,Q,j,K,X,B)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,_=N-K,Y=_-q;if(Y<=K&&Y>=-1){if(q>=_-1){let M=Q.getTotalSize()-Q.getOffset(J);return K-M}let y=i0(Q,K,j),G=Math.max(0,j-y),W=q/N*j,H=Math.max(0,Math.min(1,1-Y/K)),E=Q.getOffset(J)-Q.getOffset(G),L=Q.getOffset(J)-T2(Q,W,j);return L+(E-L)*H}let D=q/N,b=Q.getTotalSize(),O=D*b;return Q.getOffset(J)-O},Q2=(J,q,Q,j,K,X="start")=>{if(j===0)return 0;let B;if(K.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,K.virtualSize-Q);B=J/j*K.virtualSize}else B=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":B-=(Q-N)/2;break;case"end":B-=Q-N;break}let _=K.virtualSize-Q;return Math.max(0,Math.min(B,_))},ZJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let K=J/j.virtualSize;return Math.floor(K*Q)}return q.indexAtOffset(J)},NJ=(J,q)=>{if(typeof q==="number")return J*q>$0;return q.getTotalSize()>$0},WJ=(J)=>{if(J<=0)return 0;return Math.floor($0/J)},DJ=(J,q)=>{let Q=F0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var j2=g2(()=>{UJ=$0});var z0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var vJ={};X1(vJ,{createGridRenderer:()=>c0});var L1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},F1=2,c0=(J,q,Q,j,K,X,B,N,_=!1)=>{let Y=L1(),D=new Map,b=X,O=!1,y=null,G=0,A=0,W="",H=-1,E=(z)=>{if(y&&G===z)return y;return y=F0(z,Q),G=z,y},L={selected:!1,focused:!1},M=(z,h)=>{return L.selected=z,L.focused=h,L},Z=`${K}-item ${K}-grid-item`,$=`${K}-item--selected`,C=`${K}-item--focused`,P=(z,h)=>{if(typeof h==="string")z.innerHTML=h;else z.replaceChildren(h)},V=(z,h,c)=>{z.classList.toggle($,h),z.classList.toggle(C,c)},S=(z,h)=>{let c=j.getRow(z);if(h){let a=h.totalItems,f=E(a);if(f.isCompressed)return f0(c,h.scrollPosition,Q,a,h.containerSize,f,h.rangeStart)}return Q.getOffset(c)},o=(z,h)=>{let c=O&&j.getCol(z)===0,a=c?0:j.getCol(z),f=c?0:j.getColumnOffset(a,b),x;if(O){let n=j.getRow(z),t=0,J0=new Set;for(let K0=0;K0<z;K0++){let B0=j.getRow(K0);if(B0<n&&!J0.has(B0)){let g=Q.getSize(K0);t+=g,J0.add(B0)}}x=t}else x=S(z,h);if(_)return`translate(${Math.round(x)}px, ${Math.round(f)}px)`;return`translate(${Math.round(f)}px, ${Math.round(x)}px)`},p=(z,h)=>{z.style.transform=h},d=(z,h)=>{let c=z.dataset.id?.startsWith("__group_header"),a=c?b:j.getColumnWidth(b),f;if(O||c)f=Q.getSize(h)-j.gap;else{let x=j.getRow(h);f=Q.getSize(x)-j.gap}if(_)z.style.width=`${f}px`,z.style.height=`${a}px`;else z.style.width=`${a}px`,z.style.height=`${f}px`},v=(z,h,c,a,f)=>{let x=Y.acquire(),n=M(c,a);if(x.className=Z,x.dataset.index=String(z),x.dataset.id=String(h.id),x.dataset.row=String(j.getRow(z)),x.dataset.col=String(j.getCol(z)),x.ariaSelected=String(c),N)x.id=`${N}-item-${z}`;if(B){let J0=B();if(J0!==H)H=J0,W=String(J0);x.setAttribute("aria-setsize",W),x.setAttribute("aria-posinset",String(z+1))}d(x,z);let t=q(h,z,n);return P(x,t),V(x,c,a),p(x,f),{element:x,lastItemId:h.id,lastSelected:c,lastFocused:a,lastTransform:f,lastSeenFrame:A}},U=(z,h,c,a,f)=>{if(A++,h.start===0&&z.length>0)O=z0(z[0]);for(let[t,J0]of D)if(t>=h.start&&t<=h.end)J0.lastSeenFrame=A;else if(A-J0.lastSeenFrame>F1)Y.release(J0.element),D.delete(t);let x=!1;if(B){let t=B();if(t!==H)H=t,W=String(t),x=!0}let n=null;for(let t=h.start;t<=h.end;t++){let J0=t-h.start,K0=z[J0];if(!K0){console.warn(`⚠️ RENDER: Missing item at index ${t} (range: ${h.start}-${h.end}, items.length: ${z.length})`);continue}let B0=c.has(K0.id),g=t===a,m=D.get(t);if(m){let Q0=m.lastItemId!==K0.id,Y0=m.lastSelected!==B0,e=m.lastFocused!==g;if(Q0||Y0||e){if(Q0){let G0=M(B0,g),L0=q(K0,t,G0);P(m.element,L0),m.element.dataset.id=String(K0.id),m.element.dataset.row=String(j.getRow(t)),m.element.dataset.col=String(j.getCol(t)),d(m.element,t)}V(m.element,B0,g),m.element.ariaSelected=String(B0),m.lastItemId=K0.id,m.lastSelected=B0,m.lastFocused=g}let Z0=o(t,f);if(m.lastTransform!==Z0)p(m.element,Z0),m.lastTransform=Z0;if(x)m.element.setAttribute("aria-setsize",W)}else{let Q0=o(t,f),Y0=v(t,K0,B0,g,Q0);if(!n)n=document.createDocumentFragment();n.appendChild(Y0.element),D.set(t,Y0)}}if(n)J.appendChild(n)},w=(z)=>{for(let[h,c]of D){let a=o(h,z);if(c.lastTransform!==a)p(c.element,a),c.lastTransform=a}},I=(z,h,c,a)=>{let f=D.get(z);if(!f)return;let x=f.lastItemId!==h.id,n=f.lastSelected!==c,t=f.lastFocused!==a;if(x||n||t){let J0=M(c,a),K0=q(h,z,J0);P(f.element,K0),V(f.element,c,a),f.element.dataset.id=String(h.id),f.element.ariaSelected=String(c),d(f.element,z),f.lastItemId=h.id,f.lastSelected=c,f.lastFocused=a}},T=(z,h,c)=>{let a=D.get(z);if(!a)return;let f=a.lastSelected!==h,x=a.lastFocused!==c;if(f||x)V(a.element,h,c),a.lastSelected=h,a.lastFocused=c},R=(z)=>{return D.get(z)?.element},k=(z)=>{if(Math.abs(z-b)<1)return;b=z;for(let[h,c]of D){d(c.element,h);let a=o(h);p(c.element,a),c.lastTransform=a}},l=()=>{for(let[,z]of D)Y.release(z.element);D.clear()};return{render:U,updatePositions:w,updateItem:I,updateItemClasses:T,getElement:R,updateContainerWidth:k,clear:l,destroy:()=>{l(),Y.clear()}}};var W2=g2(()=>{j2()});var x2=2,m2=(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}},b2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,B=J.samples[X],N=q-B.position,_=Q-B.time;J.velocity=_>0?Math.abs(N)/_:0}return J.lastPosition=q,J.lastTime=Q,J};var t0=(J,q)=>{let Q=new Map,j=(X)=>{let B=Q.get(X);return B!==void 0?B:J},K=H0(j,q);return{getOffset(X){return K.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return K.indexAtOffset(X)},getTotalSize(){return K.getTotalSize()},getTotal(){return K.getTotal()},rebuild(X){if(X<K.getTotal()){for(let B of Q.keys())if(B>=X)Q.delete(B)}K=H0(j,X)},isVariable(){return!0},setMeasuredSize(X,B){Q.set(X,B)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var e0=()=>{let J={},q=(N,_)=>{if(!J[N])J[N]=new Set;return J[N].add(_),()=>Q(N,_)},Q=(N,_)=>{J[N]?.delete(_)};return{on:q,off:Q,emit:(N,_)=>{J[N]?.forEach((Y)=>{try{Y(_)}catch(D){console.error(`[vlist] Error in event handler for "${String(N)}":`,D)}})},once:(N,_)=>{let Y=(D)=>{Q(N,Y),_(D)};return q(N,Y)},clear:(N)=>{if(N)delete J[N];else for(let _ in J)delete J[_]},listenerCount:(N)=>{return J[N]?.size??0}}};var d2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},c2=(J,q,Q,j)=>{let K=document.createElement("div");if(K.className=q,j)K.classList.add(`${q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),Q)K.setAttribute("aria-label",Q);if(j)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${q}-viewport`,X.setAttribute("tabindex","-1"),j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let B=document.createElement("div");if(B.className=`${q}-content`,B.style.position="relative",j)B.style.height="100%";else B.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return B.appendChild(N),X.appendChild(B),K.appendChild(X),J.appendChild(K),{root:K,viewport:X,content:B,items:N}};var l2=(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 r2=(J,q,Q,j,K)=>{if(j===0||q===0){K.start=0,K.end=0;return}let X=Q.indexAtOffset(J),B=g0(Q,X,q,j),N=X+B;K.start=Math.max(0,X),K.end=Math.min(j-1,Math.max(0,N))},a2=(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)},s2=(J,q,Q,j,K)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),B=q.getOffset(X),N=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),Y;switch(K){case"center":Y=B-(Q-N)/2;break;case"end":Y=B-Q+N;break;default:Y=B}return Math.max(0,Math.min(Y,_))};var y2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,w0=(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}},n2=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,B,N)=>{if(j(),Math.abs(B-X)<1){J.scrollTo(B);return}let _=performance.now(),Y=(D)=>{let b=D-_,O=Math.min(b/N,1),y=X+(B-X)*y2(O);if(J.scrollTo(y),q(),O<1)Q=requestAnimationFrame(Y);else Q=null};Q=requestAnimationFrame(Y)},cancelScroll:j}};var o2=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:K,rawConfig:X,rendered:B,pool:N,sharedState:_,isHorizontal:Y,classPrefix:D,contentSizeHandlers:b,afterScroll:O,clickHandlers:y,keydownHandlers:G,resizeHandlers:A,destroyHandlers:W,methods:H,onScrollFrame:E,resizeObserver:L,renderRange:M}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return K},get rawConfig(){return X},get renderer(){return{render:(Z,$,C,P,V)=>{J.ss=C,J.fi=P,J.ffn()},updateItemClasses:(Z,$,C)=>{let P=B.get(Z);if(!P)return;P.classList.toggle(`${D}-item--selected`,$),P.classList.toggle(`${D}-item--focused`,C),P.ariaSelected=$?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Z)=>B.get(Z)??null,clear:()=>{},destroy:()=>{}}},set renderer(Z){},get dataManager(){return J.dm},set dataManager(Z){J.dm=Z},get scrollController(){return J.sc},set scrollController(Z){J.sc=Z},state:_,getContainerWidth(){return J.cw},afterScroll:O,clickHandlers:y,keydownHandlers:G,resizeHandlers:A,contentSizeHandlers:b,destroyHandlers:W,methods:H,replaceTemplate(Z){J.at=Z},replaceRenderer(Z){},replaceDataManager(Z){J.dm=Z},replaceScrollController(Z){J.sc=Z},getItemsForRange(Z){let{dm:$,it:C}=J,P=[];for(let V=Z.start;V<=Z.end;V++){let S=$?$.getItem(V):C[V];if(S)P.push(S)}return P},getAllLoadedItems(){let Z=J.dm;if(Z){let $=Z.getTotal(),C=[];for(let P=0;P<$;P++){let V=Z.getItem(P);if(V)C.push(V)}return C}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let Z=J.hc;return{isCompressed:!1,actualSize:Z.getTotalSize(),virtualSize:Z.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:M.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,Z]of B)Z.remove(),N.release(Z);B.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(Z,$){J.rfn=Z,J.ffn=$},setVirtualTotalFn(Z){J.vtf=Z},rebuildSizeCache(Z){J.hc.rebuild(Z??J.vtf())},setSizeConfig(Z){J.hc=H0(Z,J.vtf())},updateContentSize(Z){let $=`${Z}px`;if(Y)Q.content.style.width=$;else Q.content.style.height=$},updateCompressionMode(){},setVisibleRangeFn(Z){J.gvr=Z},setScrollToPosFn(Z){J.gsp=Z},setPositionElementFn(Z){J.pef=Z},setScrollFns(Z,$){J.sgt=Z,J.sst=(C)=>{$(C),E()}},setScrollTarget(Z){J.st.removeEventListener("scroll",E),J.st=Z,J.st.addEventListener("scroll",E,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(Z){J.gcw=Z.width,J.gch=Z.height,J.cw=Z.width(),J.ch=Z.height(),_.viewportState.containerSize=Y?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}}},i2=(J,q,Q)=>{let{rendered:j,itemState:K,contentSizeHandlers:X,applyTemplate:B,updateContentSize:N}=q,_=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let Y=0;Y<X.length;Y++)X[Y]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>J.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<J.it.length&&J.it[Y]!==void 0,getItemsInRange:(Y,D)=>{let b=J.it,O=[],y=Math.max(0,Y),G=Math.min(D,b.length-1);for(let A=y;A<=G;A++)O.push(b[A]);return O},setTotal:(Y)=>{},setItems:(Y,D=0,b)=>{let O=J.it;if(D===0&&(b!==void 0||O.length===0))J.it=Y;else{let y=D+Y.length;if(O.length<y)O.length=y;for(let G=0;G<Y.length;G++)O[D+G]=Y[G]}if(J.ii)_()},updateItem:(Y,D)=>{let b=J.it;if(Y<0||Y>=b.length)return!1;let O=b[Y];if(!O)return!1;b[Y]={...O,...D};let y=j.get(Y);if(y)B(y,J.at(b[Y],Y,K)),y.dataset.id=String(b[Y].id);return!0},removeItem:(Y)=>{if(Y<0||Y>=J.it.length)return!1;if(J.it.splice(Y,1),J.ii)_();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},t2=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(K)=>{J.sst(K),J.ls=K,J.rfn()},scrollBy:(K)=>{let X=J.sgt()+K;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(K=2)=>J.sab(K),getScrollPercentage:()=>{let K=J.hc.getTotalSize(),X=Math.max(0,K-J.ch);return X>0?J.ls/X:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>Q.root.classList.contains(`${j}--scrolling`),updateConfig:()=>{},enableCompression:()=>{J.sic=!0},disableCompression:()=>{J.sic=!1},isCompressed:()=>J.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{J.ch=K},destroy:()=>{}}};var U1=3,B1="vlist",e2=150,Z1=0,JJ=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",K=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(K==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(K!=null){if(typeof K==="number"&&K<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof K!=="number"&&typeof K!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let B=new Map,N=!1,_={use(Y){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return B.set(Y.name,Y),_},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,N1(J,B,q,K,X??null)}};return _};function N1(J,q,Q,j,K){let{item:X,items:B,overscan:N=U1,classPrefix:_=B1,ariaLabel:Y,reverse:D=!1,scroll:b}=J,O=b,y=O?.wheel??!0,G=O?.wrap??!1,A=D,W=`${_}-${Z1++}`,H=j??K,E=j==null&&K!=null,L=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,M=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,Z={overscan:N,classPrefix:_,reverse:A,wrap:G,horizontal:Q,ariaIdPrefix:W},$=Array.from(q.values()).sort((F,u)=>(F.priority??50)-(u.priority??50)),C=new Set($.map((F)=>F.name));for(let F of $)if(F.conflicts){for(let u of F.conflicts)if(C.has(u))throw Error(`[vlist/builder] ${F.name} and ${u} cannot be combined`)}if(A){if(C.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let P=d2(J.container),V=c2(P,_,Y,Q);if(O?.wheel===!1)if(Q)V.viewport.style.overflowX="hidden";else V.viewport.style.overflow="hidden";if(O?.scrollbar==="none")V.viewport.classList.add(`${_}-viewport--no-scrollbar`);let S=e0(),o=B||[],p=typeof H==="function"&&(q.has("withGrid")||q.has("withMasonry")),d=E?t0(K,o.length):H0(H,p?0:o.length),v=l2(),U={it:o,hc:d,ch:V.viewport.clientHeight,cw:V.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:m2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>V.viewport.scrollLeft:()=>V.viewport.scrollTop,sst:Q?(F)=>{V.viewport.scrollLeft=F}:(F)=>{V.viewport.scrollTop=F},sab:(F=2)=>{let u=U.hc.getTotalSize();return U.ls+U.ch>=u-F},sic:!1,rfn:null,ffn:null,gvr:(F,u,r,s,j0)=>{r2(F,u,r,s,j0)},gsp:(F,u,r,s,j0)=>{return s2(F,u,r,s,j0)},pef:null,at:X.template,vre:!0,st:V.viewport,wh:null,gcw:()=>U.cw,gch:()=>U.ch};U.vtf=()=>U.dm?U.dm.getTotal():U.it.length;let w=null,I=null,T=!1,R={start:0,end:0},k={start:0,end:0},l={start:-1,end:-1},i={viewportState:{scrollPosition:0,containerSize:Q?U.cw:U.ch,totalSize:U.hc.getTotalSize(),actualSize:U.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},z=new Map,h=E?new WeakMap:null,c=E?d:null,a=null,f=0,x=!1,n=()=>{if(!E)return;if(x){let F=U.sgt(),u=Q?V.viewport.scrollWidth-V.viewport.clientWidth:V.viewport.scrollHeight-V.viewport.clientHeight,r=u>0&&F>=u-2;if(M0(),x=!1,r){let s=Math.max(0,U.hc.getTotalSize()-(Q?U.cw:U.ch));if(s>F)U.sst(s),U.ls=s,U.rfn()}}};if(E&&c&&h)a=new ResizeObserver((F)=>{if(U.id)return;let u=!1,r=R.start;for(let s of F){let j0=h.get(s.target);if(j0===void 0)continue;let q0=Q?s.borderBoxSize[0].inlineSize:s.borderBoxSize[0].blockSize;if(!c.isMeasured(j0)){let X0=c.getSize(j0);if(c.setMeasuredSize(j0,q0),u=!0,j0<r&&q0!==X0)f+=q0-X0;a.unobserve(s.target);let N0=s.target;if(Q)N0.style.width=`${q0}px`;else N0.style.height=`${q0}px`}}if(!u)return;if(c.rebuild(U.vtf()),U.hc=c,f!==0){let s=U.sgt();U.sst(s+f),U.ls=s+f,f=0}if(T)x=!0;else{let s=U.sgt(),j0=Q?V.viewport.scrollWidth-V.viewport.clientWidth:V.viewport.scrollHeight-V.viewport.clientHeight,q0=j0>0&&s>=j0-2;if(M0(),x=!1,q0){let X0=Math.max(0,U.hc.getTotalSize()-(Q?U.cw:U.ch));if(X0>s)U.sst(X0),U.ls=X0}}l.start=-1,l.end=-1,U.rfn()});let t={selected:!1,focused:!1},J0=`${_}-item`,K0=[],B0=[],g=[],m=[],Q0=[],Y0=[],e=new Map,Z0=null,G0=null,L0=!1,W0=()=>{if(L0)return;L0=!0,Z0=e.get("_getSelectedIds")??null,G0=e.get("_getFocusedIndex")??null},b0=(F,u)=>{if(typeof u==="string")F.innerHTML=u;else F.replaceChildren(u)},P0=(F,u)=>{let r=Math.round(U.hc.getOffset(u));if(Q)F.style.transform=`translateX(${r}px)`;else F.style.transform=`translateY(${r}px)`};U.pef=P0;let D0=(F,u)=>{let r=v.acquire();r.className=J0;let s=!E||c&&c.isMeasured(F);if(Q){if(s)r.style.width=`${U.hc.getSize(F)}px`;else r.style.width="";if(M!=null)r.style.height=`${M}px`}else if(s)r.style.height=`${U.hc.getSize(F)}px`;else r.style.height="";if(r.dataset.index=String(F),r.dataset.id=String(u.id),r.ariaSelected="false",r.id=`${W}-item-${F}`,U.la=String(U.vtf()),r.setAttribute("aria-setsize",U.la),r.setAttribute("aria-posinset",String(F+1)),String(u.id).startsWith("__placeholder_"))r.classList.add(`${_}-item--placeholder`);return b0(r,U.at(u,F,t)),U.pef(r,F),r},M0=()=>{let F=`${U.hc.getTotalSize()}px`;if(Q)V.content.style.width=F;else V.content.style.height=F},_0=()=>{if(U.id)return;W0();let F=Z0?Z0():U.ss,u=G0?G0():U.fi,r=U.vtf(),s=Q?U.cw:U.ch;if(U.gvr(U.ls,s,U.hc,r,R),a2(R,N,r,k),k.start===l.start&&k.end===l.end){if(U.sic)for(let[U0,V0]of z)U.pef(V0,U0);return}let j0=String(r),q0=j0!==U.la;U.la=j0;for(let[U0,V0]of z)if(U0<k.start||U0>k.end)V0.remove(),v.release(V0),z.delete(U0);let X0=document.createDocumentFragment(),N0=[],E0=[];for(let U0=k.start;U0<=k.end;U0++){let V0=U.dm?U.dm.getItem(U0):U.it[U0];if(!V0)continue;let A0=z.get(U0);if(A0){let y0=A0.dataset.id,h0=String(V0.id);if(y0!==h0){let eJ=y0?.startsWith("__placeholder_"),p2=h0.startsWith("__placeholder_");b0(A0,U.at(V0,U0,t)),A0.dataset.id=h0;let h2=!E||c&&c.isMeasured(U0);if(Q)A0.style.width=h2?`${U.hc.getSize(U0)}px`:"";else A0.style.height=h2?`${U.hc.getSize(U0)}px`:"";if(p2)A0.classList.add(`${_}-item--placeholder`);else A0.classList.remove(`${_}-item--placeholder`);if(eJ&&!p2)A0.classList.add(`${_}-item--replaced`),setTimeout(()=>{A0.classList.remove(`${_}-item--replaced`)},300)}U.pef(A0,U0);let o0=F.has(V0.id),tJ=U0===u;if(A0.classList.toggle(`${_}-item--selected`,o0),A0.classList.toggle(`${_}-item--focused`,tJ),A0.ariaSelected=o0?"true":"false",q0)A0.setAttribute("aria-setsize",U.la)}else{let y0=D0(U0,V0);E0.push({index:U0,element:y0});let h0=F.has(V0.id),o0=U0===u;if(h0)y0.classList.add(`${_}-item--selected`),y0.ariaSelected="true";if(o0)y0.classList.add(`${_}-item--focused`);X0.appendChild(y0),N0.push({index:U0,element:y0})}}if(N0.length>0){V.items.appendChild(X0);for(let{index:U0,element:V0}of N0)z.set(U0,V0)}if(E&&a&&c&&h){for(let{index:U0,element:V0}of E0)if(!c.isMeasured(U0))h.set(V0,U0),a.observe(V0)}l.start=k.start,l.end=k.end,i.lastRenderRange.start=k.start,i.lastRenderRange.end=k.end,i.viewportState.scrollPosition=U.ls,i.viewportState.visibleRange.start=R.start,i.viewportState.visibleRange.end=R.end,i.viewportState.renderRange.start=k.start,i.viewportState.renderRange.end=k.end,S.emit("range:change",{range:{start:k.start,end:k.end}})},T0=()=>{l.start=-1,l.end=-1,U.rfn()};U.rfn=_0,U.ffn=T0;let R0=()=>{if(U.id)return;let F=U.sgt(),u=F>=U.ls?"down":"up";if(U.vt=b2(U.vt,F),!V.root.classList.contains(`${_}--scrolling`))V.root.classList.add(`${_}--scrolling`);T=!0,U.ls=F,U.rfn(),S.emit("scroll",{scrollPosition:F,direction:u}),S.emit("velocity:change",{velocity:U.vt.velocity,reliable:U.vt.sampleCount>=x2});for(let r=0;r<K0.length;r++)K0[r](F,u);if(I)clearTimeout(I);I=setTimeout(()=>{V.root.classList.remove(`${_}--scrolling`),T=!1,U.vt.velocity=0,U.vt.sampleCount=0,S.emit("velocity:change",{velocity:0,reliable:!1}),n()},O?.idleTimeout??e2)},v0=null;if(U.st.addEventListener("scroll",R0,{passive:!0}),y&&!Q&&!L)v0=(F)=>{F.preventDefault();let u=U.sgt(),r=F.deltaY,s=Math.max(0,Math.min(u+r,U.hc.getTotalSize()-U.ch));U.sst(s),U.ls=s,U.vt=b2(U.vt,s),U.rfn();let j0=s>=u?"down":"up";if(S.emit("scroll",{scrollPosition:s,direction:j0}),!V.root.classList.contains(`${_}--scrolling`))V.root.classList.add(`${_}--scrolling`);if(T=!0,I)clearTimeout(I);I=setTimeout(()=>{V.root.classList.remove(`${_}--scrolling`),T=!1,U.vt.velocity=0,U.vt.sampleCount=0,S.emit("velocity:change",{velocity:0,reliable:!1}),n()},O?.idleTimeout??e2)},U.wh=v0,V.viewport.addEventListener("wheel",v0,{passive:!1});else if(Q&&y)v0=(F)=>{if(F.deltaX)return;F.preventDefault(),V.viewport.scrollLeft+=F.deltaY},U.wh=v0,V.viewport.addEventListener("wheel",v0,{passive:!1});let w2=(F)=>{let r=F.target.closest("[data-index]");if(r){let s=parseInt(r.dataset.index??"-1",10);if(s>=0){let j0=U.dm?.getItem(s)??U.it[s];if(j0){if(j0.__groupHeader)return;S.emit("item:click",{item:j0,index:s,event:F})}}}for(let s=0;s<B0.length;s++)B0[s](F)},uJ=(F)=>{let r=F.target.closest("[data-index]");if(r){let s=parseInt(r.dataset.index??"-1",10);if(s>=0){let j0=U.dm?.getItem(s)??U.it[s];if(j0){if(j0.__groupHeader)return;S.emit("item:dblclick",{item:j0,index:s,event:F})}}}},S2=(F)=>{for(let u=0;u<g.length;u++)g[u](F)};V.items.addEventListener("click",w2),V.items.addEventListener("dblclick",uJ),V.root.addEventListener("keydown",S2);let E2=new ResizeObserver((F)=>{if(U.id)return;for(let u of F){let r=u.contentRect.height,s=u.contentRect.width,j0=Q?s:r,q0=Q?U.cw:U.ch;if(U.cw=s,U.ch=r,Math.abs(j0-q0)>1){if(i.viewportState.containerSize=j0,U.ii)M0(),U.rfn(),S.emit("resize",{height:r,width:s})}if(U.ii)for(let X0=0;X0<m.length;X0++)m[X0](s,r)}});if(U.vre)E2.observe(V.viewport);let L2={dom:V,emitter:S,resolvedConfig:Z,rawConfig:J,rendered:z,pool:v,itemState:t,sharedState:i,renderRange:k,isHorizontal:Q,classPrefix:_,contentSizeHandlers:Q0,afterScroll:K0,clickHandlers:B0,keydownHandlers:g,resizeHandlers:m,destroyHandlers:Y0,methods:e,onScrollFrame:R0,resizeObserver:E2,applyTemplate:b0,updateContentSize:M0},O0=o2(U,L2);U.dm=i2(U,L2,O0),U.sc=t2(U,L2);let f2=new Map;for(let F of $)if(F.methods)for(let u of F.methods){let r=f2.get(u);if(r)throw Error(`[vlist/builder] Method "${u}" is registered by both "${r}" and "${F.name}"`);f2.set(u,F.name)}for(let F of $)F.setup(O0);if(!e.has("_getFocusedIndex")){let F=-1,u=`${_}-item--focused`,r=(q0,X0)=>{let N0=U.vtf();if(X0<0||X0>=N0)return;F=X0,V.root.setAttribute("aria-activedescendant",`${W}-item-${X0}`);let E0=Q?U.cw:U.ch;if(U.sst(U.gsp(X0,U.hc,E0,N0,"center")),U.ls=U.sgt(),U.rfn(),q0>=0&&q0!==X0)z.get(q0)?.classList.remove(u);z.get(X0)?.classList.add(u)},s=()=>{if(U.id)return;if(!V.root.matches(":focus-visible"))return;let q0=U.vtf();if(q0===0)return;r(-1,F>=0?Math.min(F,q0-1):0)};V.root.addEventListener("focusin",s);let j0=(q0)=>{if(U.id)return;let X0=q0.relatedTarget;if(X0&&V.root.contains(X0))return;if(F>=0)z.get(F)?.classList.remove(u);V.root.removeAttribute("aria-activedescendant")};V.root.addEventListener("focusout",j0),g.push((q0)=>{if(U.id)return;let X0=U.vtf();if(X0===0)return;let N0=F,E0=N0;switch(q0.key){case"ArrowUp":E0=N0<=0?X0-1:N0-1;break;case"ArrowDown":E0=N0>=X0-1?0:N0+1;break;case"Home":E0=0;break;case"End":E0=X0-1;break;default:return}q0.preventDefault(),r(N0,E0)}),Y0.push(()=>{V.root.removeEventListener("focusin",s),V.root.removeEventListener("focusout",j0)})}if(U.ii=!0,O0.state.isInitialized=!0,M0(),U.rfn(),A&&U.it.length>0){let F=U.gsp(U.it.length-1,U.hc,U.ch,U.it.length,"end");U.sst(F),U.ls=F,U.rfn()}let gJ=(F)=>{O0.dataManager.setItems(F,0,F.length)},xJ=A?(F)=>{let u=U.sab(2),r=U.it.length;if(O0.dataManager.setItems(F,r),u&&U.it.length>0){let s=U.gsp(U.it.length-1,U.hc,U.ch,U.it.length,"end");U.sst(s),U.ls=s,U.rfn()}}:(F)=>{let u=U.it.length;O0.dataManager.setItems(F,u)},mJ=A?(F)=>{let u=U.sgt(),r=U.hc.getTotalSize(),s=[...U.it];O0.dataManager.clear(),O0.dataManager.setItems([...F,...s],0);let q0=U.hc.getTotalSize()-r;if(q0>0)U.sst(u+q0),U.ls=u+q0}:(F)=>{let u=[...U.it];O0.dataManager.clear(),O0.dataManager.setItems([...F,...u],0)},dJ=(F,u)=>{O0.dataManager.updateItem(F,u)},cJ=(F)=>{O0.dataManager.removeItem(F)},lJ=async()=>{if(O0.dataManager.reload)await O0.dataManager.reload()},n0=()=>{if(w!==null)cancelAnimationFrame(w),w=null},rJ=(F,u,r)=>{if(n0(),Math.abs(u-F)<1){U.sst(u),U.ls=u,U.rfn();return}let s=performance.now(),j0=(q0)=>{let X0=q0-s,N0=Math.min(X0/r,1),E0=F+(u-F)*y2(N0);if(U.sst(E0),U.ls=E0,U.rfn(),N0<1)w=requestAnimationFrame(j0);else w=null};w=requestAnimationFrame(j0)},aJ=(F,u)=>{let{align:r,behavior:s,duration:j0}=w0(u),q0=U.vtf(),X0=F;if(G&&q0>0)X0=(X0%q0+q0)%q0;let N0=U.gsp(X0,U.hc,U.ch,q0,r);if(s==="smooth")rJ(U.sgt(),N0,j0);else n0(),U.sst(N0)},sJ=()=>U.sgt(),nJ=(F,u)=>{return S.on(F,u)},oJ=(F,u)=>{S.off(F,u)},iJ=()=>{if(U.id)return;if(U.id=!0,O0.state.isDestroyed=!0,V.items.removeEventListener("click",w2),V.root.removeEventListener("keydown",S2),U.st.removeEventListener("scroll",R0),E2.disconnect(),a)a.disconnect(),a=null;if(U.wh)V.viewport.removeEventListener("wheel",U.wh);if(I)clearTimeout(I);for(let F=0;F<Y0.length;F++)Y0[F]();for(let F of $)if(F.destroy)F.destroy();n0();for(let[,F]of z)F.remove(),v.release(F);z.clear(),v.clear(),S.clear(),V.root.remove()},I2={get element(){return V.root},get items(){if(e.has("_getItems"))return e.get("_getItems")();return U.it},get total(){if(e.has("_getTotal"))return e.get("_getTotal")();return U.vtf()},setItems:e.has("setItems")?e.get("setItems"):gJ,appendItems:e.has("appendItems")?e.get("appendItems"):xJ,prependItems:e.has("prependItems")?e.get("prependItems"):mJ,updateItem:e.has("updateItem")?e.get("updateItem"):dJ,removeItem:e.has("removeItem")?e.get("removeItem"):cJ,reload:e.has("reload")?e.get("reload"):lJ,scrollToIndex:e.has("scrollToIndex")?e.get("scrollToIndex"):aJ,cancelScroll:e.has("cancelScroll")?e.get("cancelScroll"):n0,getScrollPosition:e.has("getScrollPosition")?e.get("getScrollPosition"):sJ,on:nJ,off:oJ,destroy:iJ};for(let[F,u]of e){if(F.charCodeAt(0)===95||F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;I2[F]=u}return I2}j2();var I0=(J,q,Q={},j="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:B=1000,minThumbSize:N=30,showOnHover:_=!0,hoverZoneWidth:Y=16,showOnViewportEnter:D=!0}=Q,b=0,O=0,y=0,G=0,A=!1,W=!1,H=0,E=0,L=0,M=null,Z=!1,$=null,C=null,P=K?"width":"height",V=K?"translateX":"translateY",S=K?(J0)=>J0.clientX:(J0)=>J0.clientY,o=K?"left":"top",p=document.createElement("div"),d=document.createElement("div"),v=_?document.createElement("div"):null,U=()=>{if(p.className=`${j}-scrollbar`,d.className=`${j}-scrollbar-thumb`,K)p.classList.add(`${j}-scrollbar--horizontal`);if(p.appendChild(d),J.appendChild(p),v){if(v.className=`${j}-scrollbar-hover`,K)v.classList.add(`${j}-scrollbar-hover--horizontal`),v.style.height=`${Y}px`;else v.style.width=`${Y}px`;J.appendChild(v)}},w=()=>{if(M)clearTimeout(M),M=null},I=()=>{if(!X)return;w(),M=setTimeout(R,B)},T=()=>{if(b<=O)return;if(w(),!Z)p.classList.add(`${j}-scrollbar--visible`),Z=!0;if(X&&!A&&!W)I()},R=()=>{if(A||W)return;p.classList.remove(`${j}-scrollbar--visible`),Z=!1},k=(J0,K0)=>{b=J0,O=K0;let B0=b>O;if(p.style.display=B0?"":"none",!B0){R();return}let g=O/b;y=Math.max(N,g*O),d.style[P]=`${y}px`,G=O-y,l(L)},l=(J0)=>{if(L=J0,b<=O||G<=0)return;let K0=b-O,g=Math.min(1,Math.max(0,J0/K0))*G;d.style.transform=`${V}(${g}px)`},i=(J0)=>{if(J0.target===d)return;let K0=p.getBoundingClientRect(),m=S(J0)-K0[o]-y/2,Y0=Math.max(0,Math.min(m,G))/G,e=b-O,Z0=Y0*e;q(Z0),T()},z=(J0)=>{J0.preventDefault(),J0.stopPropagation(),A=!0,H=S(J0),E=L,w(),p.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",h),document.addEventListener("mouseup",c)},h=(J0)=>{if(!A)return;let K0=S(J0)-H,B0=G>0?K0/G:0,g=b-O,m=B0*g,Q0=Math.max(0,Math.min(E+m,g)),e=Q0/g*G;if(d.style.transform=`${V}(${e}px)`,C=Q0,$===null)$=requestAnimationFrame(()=>{if(C!==null)q(C);$=null})},c=()=>{if(A=!1,$!==null)cancelAnimationFrame($),$=null;if(C!==null)q(C),C=null;if(p.classList.remove(`${j}-scrollbar--dragging`),X&&!W)I();document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",c)},a=()=>{if(D)T()},f=()=>{if(!A){if(W=!1,X)I()}},x=()=>{W=!0,w(),T()},n=()=>{if(W=!1,!A&&X)I()},t=()=>{if(w(),$!==null)cancelAnimationFrame($),$=null;if(p.removeEventListener("click",i),p.removeEventListener("mouseenter",x),p.removeEventListener("mouseleave",n),d.removeEventListener("mousedown",z),J.removeEventListener("mouseenter",a),J.removeEventListener("mouseleave",f),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",c),v){if(v.removeEventListener("mouseenter",x),v.removeEventListener("mouseleave",n),v.parentNode)v.parentNode.removeChild(v)}if(p.parentNode)p.parentNode.removeChild(p)};if(U(),p.addEventListener("click",i),p.addEventListener("mouseenter",x),p.addEventListener("mouseleave",n),d.addEventListener("mousedown",z),J.addEventListener("mouseenter",a),J.addEventListener("mouseleave",f),v)v.addEventListener("mouseenter",x),v.addEventListener("mouseleave",n);return{show:T,hide:R,updateBounds:k,updatePosition:l,isVisible:()=>Z,destroy:t}};var _J=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:K}=Q,{classPrefix:X,horizontal:B}=K;if(q=I0(j.viewport,(Y)=>Q.scrollController.scrollTo(Y),J??{},X,B),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let _=q;Q.afterScroll.push((Y,D)=>{_.updatePosition(Y),_.show()}),Q.resizeHandlers.push((Y,D)=>{if(_){let b=Q.getCachedCompression();_.updateBounds(b.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let Y=Q.getCachedCompression();_.updateBounds(Y.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var VJ=(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}},q2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+8)%8,B=J.samples[X],N=q-B.position,_=Q-B.time;J.velocity=_>0?N/_:0}return J.lastPosition=q,J.lastTime=Q,J},W1=(J)=>J.sampleCount>=3,GJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:K=!1,idleTimeout:X=150,onScroll:B,onIdle:N,scrollElement:_,horizontal:Y=!1}=q,D=!!_,b=0,O=0,y=D?Y?window.innerWidth:window.innerHeight:Y?J.clientWidth:J.clientHeight,G=q.compressed??!1,A=q.compression,W=VJ(),H=!1,E=null,M=X2(()=>{let f=Y?J.scrollLeft:J.scrollTop,x=f>=b?"down":"up";if(W=q2(W,f),b=f,B)B({scrollTop:b,direction:x,velocity:W.velocity});S()}),$=X2(()=>{let f=J.getBoundingClientRect(),x=Y?Math.max(0,-f.left):Math.max(0,-f.top),n=x>=b?"down":"up";if(W=q2(W,x),b=x,!H)H=!0;if(B)B({scrollTop:b,direction:n,velocity:W.velocity});S()}),C=(f)=>{f.preventDefault()},P=(f)=>{if(f.deltaX)return;f.preventDefault(),J.scrollLeft+=f.deltaY},V=(f)=>{if(!G)return;f.preventDefault();let x=(Y?f.deltaX||f.deltaY:f.deltaY)*j,n=b+x;if(K)n=b+x*0.3;if(n=Math.max(0,Math.min(n,O)),n!==b){let J0=n>=b?"down":"up";if(W=q2(W,n),b=n,!H)H=!0;if(B)B({scrollTop:b,direction:J0,velocity:W.velocity});S()}},S=()=>{if(E)clearTimeout(E);E=setTimeout(()=>{if(H=!1,W=VJ(b),N)N()},X)},o=(f)=>{if(G)return;if(G=!0,A=f,O=f.virtualSize-y,D)return;if(M.cancel(),J.removeEventListener("scroll",M),!Q)J.removeEventListener("wheel",C);else if(Y)J.removeEventListener("wheel",P);if(Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",V,{passive:!1});let x=Y?J.scrollLeft:J.scrollTop;if(x>0){let n=Y?A?.actualSize??J.scrollWidth:A?.actualSize??J.scrollHeight;b=x/n*O}if(Y)J.scrollLeft=0;else J.scrollTop=0},p=()=>{if(!G)return;if(G=!1,D){A=void 0;return}if(J.removeEventListener("wheel",V),Y)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",M,{passive:!0}),!Q)J.addEventListener("wheel",C,{passive:!1});else if(Y)J.addEventListener("wheel",P,{passive:!1});if(A&&b>0){let x=b/O*(A.actualSize-y);if(Y)J.scrollLeft=x;else J.scrollTop=x}A=void 0},d=()=>{if(D||G)return b;return Y?J.scrollLeft:J.scrollTop},v=(f,x=!1)=>{let n=Math.max(0,Math.min(f,O||1/0));if(D){let t=J.getBoundingClientRect();if(Y){let J0=t.left+window.scrollX;window.scrollTo({left:J0+n,behavior:x?"smooth":"auto"})}else{let J0=t.top+window.scrollY;window.scrollTo({top:J0+n,behavior:x?"smooth":"auto"})}}else if(G){if(n===b)return;let J0=n>=b?"down":"up";if(W=q2(W,n),b=n,!H)H=!0;if(B)B({scrollTop:b,direction:J0,velocity:W.velocity});S()}else if(Y)J.scrollTo({left:n,behavior:x?"smooth":"auto"});else J.scrollTo({top:n,behavior:x?"smooth":"auto"})},U=(f)=>{v(d()+f)},w=()=>{return d()<=0},I=(f=0)=>{let x=d(),n=D||G?O:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return x>=n-f},T=()=>{let f=d(),x=D||G?O:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(x<=0)return 0;return Math.min(1,Math.max(0,f/x))},R=(f)=>{if(f.compression)A=f.compression,O=A.virtualSize-y},k=()=>G,l=()=>Math.abs(W.velocity),i=()=>W1(W),z=()=>H,h=()=>D,c=(f)=>{if(y=f,A)O=A.virtualSize-y},a=()=>{if(E)clearTimeout(E);if(D)$.cancel(),window.removeEventListener("scroll",$);else M.cancel(),J.removeEventListener("scroll",M),J.removeEventListener("wheel",V),J.removeEventListener("wheel",C),J.removeEventListener("wheel",P)};if(D){if(G&&A)O=A.virtualSize-y;window.addEventListener("scroll",$,{passive:!0})}else if(G&&A){if(O=A.virtualSize-y,Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",V,{passive:!1})}else{if(Y)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",M,{passive:!0}),!Q)J.addEventListener("wheel",C,{passive:!1});else if(Y)J.addEventListener("wheel",P,{passive:!1})}return{getScrollTop:d,scrollTo:v,scrollBy:U,isAtTop:w,isAtBottom:I,getScrollPercentage:T,getVelocity:l,isTracking:i,isScrolling:z,updateConfig:R,enableCompression:o,disableCompression:p,isCompressed:k,isWindowMode:h,updateContainerHeight:c,destroy:a}},X2=(J)=>{let q=null,Q=null,j=(...K)=>{if(Q=K,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var D1=0.65,_1=0.5,V1=0.95,G1=0.1,M1=5,O1=100,MJ=()=>{let J=null,q=0,Q=!1,j=0,K=null,X=0,B=0,N=null,_=[];return{name:"withScale",priority:20,setup(Y){let{dom:D,config:b}=Y,{classPrefix:O,horizontal:y}=b,G=()=>{let E=Y.getVirtualTotal(),L=F0(E,Y.sizeCache);if(L.isCompressed&&!Q){Q=!0,Y.scrollController.enableCompression(L),Y.updateContentSize(L.virtualSize),Y.setScrollFns(()=>q,(p)=>{if(q=p,j=p,K!==null)cancelAnimationFrame(K),K=null});let M=()=>{let p=j-q;if(Math.abs(p)<_1)q=j,K=null;else{q+=p*D1;let v=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,v)),K=requestAnimationFrame(M)}Y.scrollController.scrollTo(q)},Z=D.viewport,$=(p)=>{p.preventDefault();let v=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+p.deltaY,v)),K===null)K=requestAnimationFrame(M)};Z.addEventListener("wheel",$,{passive:!1});let C=()=>{if(N!==null)cancelAnimationFrame(N),N=null},P=(p)=>{if(C(),K!==null)cancelAnimationFrame(K),K=null;let d=p.touches[0];if(!d)return;let v=y?d.clientX:d.clientY;X=v,B=q,_=[{time:performance.now(),y:v}]},V=(p)=>{p.preventDefault();let d=p.touches[0];if(!d)return;let v=y?d.clientX:d.clientY,U=performance.now();if(_.push({time:U,y:v}),_.length>M1)_.shift();let w=X-v,T=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,R=Math.max(0,Math.min(B+w,T));q=R,j=R,Y.scrollController.scrollTo(R)},S=(p)=>{let d=performance.now(),v=_.filter((T)=>d-T.time<O1),U=0;if(v.length>=2){let T=v[0],R=v[v.length-1],k=R.time-T.time;if(k>0)U=(T.y-R.y)/k}if(_=[],Math.abs(U)<G1)return;let w=U*16,I=()=>{if(w*=V1,Math.abs(w)<0.5){N=null;return}let R=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,k=q+w;if(k=Math.max(0,Math.min(k,R)),k<=0&&w<0||k>=R&&w>0){q=k,j=k,Y.scrollController.scrollTo(k),N=null;return}q=k,j=k,Y.scrollController.scrollTo(k),N=requestAnimationFrame(I)};N=requestAnimationFrame(I)};if(Z.addEventListener("touchstart",P,{passive:!0}),Z.addEventListener("touchmove",V,{passive:!1}),Z.addEventListener("touchend",S,{passive:!0}),Z.addEventListener("touchcancel",S,{passive:!0}),Y.destroyHandlers.push(()=>{if(Z.removeEventListener("wheel",$),Z.removeEventListener("touchstart",P),Z.removeEventListener("touchmove",V),Z.removeEventListener("touchend",S),Z.removeEventListener("touchcancel",S),C(),K!==null)cancelAnimationFrame(K),K=null}),!D.viewport.querySelector(`.${O}-scrollbar`)){if(J=I0(D.viewport,(d)=>Y.scrollController.scrollTo(d),{},O,y),!D.viewport.classList.contains(`${O}-viewport--custom-scrollbar`))D.viewport.classList.add(`${O}-viewport--custom-scrollbar`);J.updateBounds(L.virtualSize,Y.state.viewportState.containerSize);let p=J;Y.afterScroll.push((d,v)=>{if(p)p.updatePosition(d),p.show()}),Y.resizeHandlers.push((d,v)=>{if(p){let U=Y.getCachedCompression();p.updateBounds(U.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!L.isCompressed&&Q)Q=!1,Y.scrollController.disableCompression(),Y.updateContentSize(L.actualSize);else if(L.isCompressed)Y.scrollController.updateConfig({compression:L}),Y.updateContentSize(L.virtualSize);if(J)J.updateBounds(L.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:L,totalItems:E}};Y.updateCompressionMode=G;let A=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return A()},Y.setVisibleRangeFn((E,L,M,Z,$)=>{W=null,H=null;let C=F0(Z,M);J2(E,L,M,Z,C,$)}),Y.setScrollToPosFn((E,L,M,Z,$)=>{let C=F0(Z,L);return Q2(E,L,M,Z,C,$)});let W=null,H=null;Y.setPositionElementFn((E,L)=>{let M=Y.getVirtualTotal(),Z=F0(M,Y.sizeCache);if(Z.isCompressed){let $=Y.scrollController.getScrollTop();if(W===null||L<H)H=L,W=Math.round(f0(L,$,Y.sizeCache,M,Y.state.viewportState.containerSize,Z));let C=W+Y.sizeCache.getOffset(L)-Y.sizeCache.getOffset(H),P=Y.config.horizontal;E.style.transform=P?`translateX(${C}px)`:`translateY(${C}px)`}else{let $=Math.round(Y.sizeCache.getOffset(L)),C=Y.config.horizontal;E.style.transform=C?`translateX(${$}px)`:`translateY(${$}px)`}}),G(),Y.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var Y2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:K}=J,X=new Map,B=0,N=0,_=(U)=>{let w=X.get(U);if(!w)w={items:Array(q),count:0,lastAccess:Date.now()},X.set(U,w);else w.lastAccess=Date.now();return w},Y=(U)=>{return Math.floor(U/q)},D=(U)=>{return U%q},b=()=>B,O=(U)=>{B=U},y=(U)=>{if(U<0||U>=B)return;let w=Y(U),I=X.get(w);if(!I)return;return I.items[D(U)]},G=(U)=>{if(U<0||U>=B)return!1;let w=Y(U),I=X.get(w);if(!I)return!1;return I.items[D(U)]!==void 0},A=(U,w)=>{let I=Y(U),T=_(I),R=D(U),k=T.items[R]===void 0;if(T.items[R]=w,k)T.count++,N++;if(U>=B)B=U+1},W=(U,w)=>{for(let I=0;I<w.length;I++){let T=w[I];if(T!==void 0)A(U+I,T)}},H=(U)=>{if(U<0||U>=B)return!1;let w=Y(U),I=X.get(w);if(!I)return!1;let T=D(U);if(I.items[T]===void 0)return!1;if(I.items[T]=void 0,I.count--,N--,I.count===0)X.delete(w);return!0},E=(U,w)=>{let I=[];for(let T=U;T<=w&&T<B;T++)I.push(y(T));return I},L=(U,w)=>{for(let I=U;I<=w&&I<B;I++)if(!G(I))return!1;return!0},M=()=>{let U=[],w=null,I=Array.from(X.keys()).sort((T,R)=>T-R);for(let T of I){let R=X.get(T);if(!R)continue;let k=T*q;for(let l=0;l<q;l++){let i=k+l;if(i>=B)break;if(R.items[l]!==void 0)if(w===null)w={start:i,end:i};else if(i===w.end+1)w.end=i;else U.push(w),w={start:i,end:i};else if(w!==null)U.push(w),w=null}}if(w!==null)U.push(w);return U},Z=(U,w)=>{let I=[],T=null;for(let R=U;R<=w&&R<B;R++)if(!G(R))if(T===null)T={start:R,end:R};else T.end=R;else if(T!==null)I.push(T),T=null;if(T!==null)I.push(T);return I},$=(U)=>{return X.has(U)},C=(U)=>{let w=X.get(U);if(w)w.lastAccess=Date.now()},P=(U,w)=>{if(U>w||X.size===0)return;let I=Date.now(),T=Y(Math.max(0,U)),R=Y(Math.min(B-1,w));for(let k=T;k<=R;k++){let l=X.get(k);if(l)l.lastAccess=I}},V=(U,w)=>{if(N<=Q)return 0;let I=Math.max(0,U-j),T=Math.min(B-1,w+j),R=Y(I),k=Y(T),l=0,i=[];for(let[z,h]of X)if(z<R||z>k)l+=h.count,i.push(z),N-=h.count,X.delete(z);if(l>0&&K)K(l,i);return l},S=()=>{if(N<=Q)return 0;let U=Array.from(X.entries()).sort(([,T],[,R])=>T.lastAccess-R.lastAccess),w=0,I=[];for(let[T,R]of U){if(N<=Q)break;w+=R.count,N-=R.count,I.push(T),X.delete(T)}if(w>0&&K)K(w,I);return w},o=()=>{return{totalItems:B,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:B>0?1-N/B:1}},p=()=>N,d=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:b,setTotal:O,get:y,has:G,set:A,setRange:W,delete:H,getRange:E,isRangeLoaded:L,getLoadedRanges:M,findUnloadedRanges:Z,getChunkIndex:Y,isChunkLoaded:$,touchChunk:C,touchChunksForRange:P,evictDistant:V,evictToLimit:S,getStats:o,getCachedCount:p,clear:d,reset:()=>{d(),B=0}}},K2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,K)=>j.start-K.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let K=q[j],X=Q[Q.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else Q.push({...K})}return Q},x0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,K=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:K};if(q.length===0)return[X];let B=[],N=K2(q),_=X.start;for(let Y of N){if(Y.end<_)continue;if(Y.start>X.end)break;if(Y.start>_)B.push({start:_,end:Math.min(Y.start-1,X.end)});if(_=Y.end+1,_>X.end)break}if(_<=X.end)B.push({start:_,end:X.end});return B};var U2=(J={})=>{let{maskCharacter:q=XJ,maxSampleSize:Q=YJ}=J,j=[],K=!1,X=0,B=(b)=>{if(K||b.length===0)return;let O=Math.min(b.length,Q);for(let y=0;y<O;y++){let G=b[y];if(!G||typeof G!=="object")continue;let A={};for(let[W,H]of Object.entries(G)){if(W.startsWith("_")||W==="id")continue;A[W]=String(H??"").length}if(Object.keys(A).length>0)j.push(A)}K=!0},N=()=>K,_=(b)=>{let O={id:`${KJ}${X++}`,[$2]:!0,_index:b};if(j.length===0)return O.label=q.repeat(12),O;let y=j[b%j.length];for(let[G,A]of Object.entries(y))O[G]=q.repeat(Math.max(1,A));return O};return{analyzeStructure:B,hasAnalyzedStructure:N,generate:_,generateRange:(b,O)=>{let y=[];for(let G=b;G<=O;G++)y.push(_(G));return y},clear:()=>{j=[],K=!1,X=0}}},C0=(J)=>{if(!J||typeof J!=="object")return!1;return J[$2]===!0},k2=(J)=>{return J.filter((q)=>!C0(q))};var E1=50,B2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:K,placeholder:X,pageSize:B=E1,onStateChange:N,onItemsLoaded:_,onItemsEvicted:Y}=J,D=Y2({...K,onEvict:(g,m)=>{Y?.(g),Z()}}),b=null,O=()=>{if(!b)b=U2(X);return b},y=new Map,G=!1,A,W=!0,H,E=[],L=0,M=new Map,Z=()=>{N?.(v())},$=()=>{y.clear();let g=D.getLoadedRanges();for(let m of g)for(let Q0=m.start;Q0<=m.end;Q0++){let Y0=D.get(Q0);if(Y0&&!C0(Y0))y.set(Y0.id,Q0)}},C=(g,m)=>{if(!C0(m))y.set(m.id,g)},P=(g)=>{y.delete(g)},V=(g,m)=>{return`${g}-${m}`},S=()=>D.getTotal(),o=()=>D.getCachedCount(),p=()=>G,d=()=>W,v=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:G,pendingRanges:E,error:A,hasMore:W,cursor:H}),U=()=>D,w=()=>O(),I=(g)=>{let m=D.get(g);if(m!==void 0)return m;if(g>=0&&g<D.getTotal())return O().generate(g);return},T=(g)=>{let m=y.get(g);if(m===void 0)return;return D.get(m)},R=(g)=>{return y.get(g)??-1},k=(g)=>{let m=D.get(g);return m!==void 0&&!C0(m)},l=(g,m)=>{let Q0=[],Y0=D.getTotal(),e=0,Z0=0;D.touchChunksForRange(g,Math.min(m,Y0-1));for(let G0=g;G0<=m&&G0<Y0;G0++){let L0=D.get(G0);if(L0!==void 0)Q0.push(L0),e++;else Q0.push(O().generate(G0)),Z0++}return Q0},i=(g)=>{D.setTotal(g),W=D.getCachedCount()<g,Z()},z=(g,m=0,Q0)=>{if(b&&!b.hasAnalyzedStructure()&&g.length>0)b.analyzeStructure(g);for(let Y0=0;Y0<g.length;Y0++){let e=g[Y0];if(e!==void 0){let Z0=m+Y0;D.set(Z0,e),C(Z0,e)}}if(Q0!==void 0)D.setTotal(Q0);else if(m+g.length>D.getTotal())D.setTotal(m+g.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)W=!1;_?.(g,m,D.getTotal()),Z()},h=(g,m)=>{let Q0=y.get(g);if(Q0===void 0)return!1;let Y0=D.get(Q0);if(!Y0)return!1;let e={...Y0,...m};if(D.set(Q0,e),m.id!==void 0&&m.id!==g)P(g),C(Q0,e);return Z(),!0},c=(g)=>{let m=y.get(g);if(m===void 0)return!1;D.delete(m),P(g);let Q0=D.getTotal();if(Q0>0)D.setTotal(Q0-1);return Z(),!0},a=async(g,m)=>{if(!q)return;let Q0=V(g,m);if(M.has(Q0))return;let Y0=D.getLoadedRanges(),e=x0({start:g,end:m},Y0,D.chunkSize);if(e.length===0)return;let Z0=D.chunkSize,G0=[];for(let W0 of e){let b0=Math.floor(W0.start/Z0),P0=Math.floor(W0.end/Z0);for(let D0=b0;D0<=P0;D0++){let M0=D0*Z0,_0=M0+Z0-1,T0=V(M0,_0);if(!G0.some((R0)=>R0.start===M0)&&!M.has(T0))G0.push({start:M0,end:_0})}}let L0=[];for(let W0 of e){let b0=Math.floor(W0.start/Z0),P0=Math.floor(W0.end/Z0);for(let D0=b0;D0<=P0;D0++){let M0=D0*Z0,_0=M0+Z0-1,T0=V(M0,_0);if(M.has(T0)){let R0=M.get(T0);if(!L0.includes(R0))L0.push(R0)}}}for(let W0 of G0){let b0=V(W0.start,W0.end),P0=(async()=>{E.push(W0),G=!0,A=void 0,Z();try{let D0=W0.end-W0.start+1,M0={offset:W0.start,limit:D0,cursor:void 0},_0=await q.read(M0);if(z(_0.items,W0.start,_0.total),_0.cursor)H=_0.cursor;let T0=W0.start+_0.items.length;if(T0>=L){if(L=T0,_0.hasMore!==void 0)W=_0.hasMore;else if(_0.total!==void 0)W=T0<_0.total}}catch(D0){A=D0 instanceof Error?D0:Error(String(D0))}finally{M.delete(b0),E=E.filter((D0)=>D0.start!==W0.start||D0.end!==W0.end),G=M.size>0,Z()}})();M.set(b0,P0),L0.push(P0)}await Promise.all(L0)},f=async(g,m)=>{if(D.isRangeLoaded(g,m))return;await a(g,m)},x=async()=>{if(!q)return;await a(0,B-1)},n=async()=>{if(!q||G||!W)return!1;let g=D.getCachedCount(),m=D.getTotal(),Q0=g,Y0=Math.min(Q0+B-1,m>0?m-1:Q0+B-1);if(Q0>=m&&m>0)return W=!1,!1;return await a(Q0,Y0),D.getCachedCount()>g},t=async()=>{if(D.clear(),D.setTotal(0),y.clear(),b)b.clear();M.clear(),E=[],G=!1,H=void 0,W=!0,L=0,A=void 0,Z()},J0=(g,m)=>{if(D.evictDistant(g,m)>0)$()},K0=()=>{D.clear(),y.clear(),H=void 0,A=void 0,E=[],G=!1,Z()},B0=()=>{if(D.reset(),y.clear(),b)b.clear();H=void 0,W=!0,L=0,A=void 0,E=[],G=!1,Z()};if(Q&&Q.length>0)z(Q,0,j??Q.length);else if(j!==void 0)D.setTotal(j),Z();return{getState:v,getTotal:S,getCached:o,getIsLoading:p,getHasMore:d,getStorage:U,getPlaceholders:w,getItem:I,getItemById:T,getIndexById:R,isItemLoaded:k,getItemsInRange:l,setTotal:i,setItems:z,updateItem:h,removeItem:c,loadRange:a,ensureRange:f,loadInitial:x,loadMore:n,reload:t,evictDistant:J0,clear:K0,reset:B0}};var OJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:K,autoLoad:X=!0}=J,B=Q?.cancelThreshold??QJ,N=Q?.preloadThreshold??jJ,_=Q?.preloadAhead??qJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:D}=Y,b=Y.config.reverse,O=B2({adapter:q,...K!==void 0&&{initialTotal:K},pageSize:j?.chunkSize??S0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let M=Y.getVirtualTotal();Y.sizeCache.rebuild(M),Y.updateCompressionMode();let Z=Y.getCachedCompression();Y.state.viewportState.totalSize=Z.virtualSize,Y.state.viewportState.actualSize=Z.actualSize,Y.state.viewportState.isCompressed=Z.isCompressed,Y.state.viewportState.compressionRatio=Z.ratio,Y.updateContentSize(Z.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(M,Z,$)=>{if(Y.state.isInitialized)Y.forceRender(),D.emit("load:end",{items:M,total:$,offset:Z})}});Y.replaceDataManager(O);let y=null,G=null,A=0,W=()=>{if(G){let M=G;G=null,Y.dataManager.ensureRange(M.start,M.end).catch((Z)=>{D.emit("error",{error:Z,context:"ensureRange"})})}};Y.afterScroll.push((M,Z)=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getVelocity(),P=Y.scrollController.isTracking()&&$<=B;if(G&&A>B&&$<=B){let o=G;G=null,Y.dataManager.ensureRange(o.start,o.end).catch((p)=>{D.emit("error",{error:p,context:"ensureRange"})})}if(A=$,P&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(b){if(M<H2)D.emit("load:start",{offset:Y.dataManager.getCached(),limit:S0}),Y.dataManager.loadMore().catch((o)=>{D.emit("error",{error:o,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-M-Y.state.viewportState.containerSize<H2)D.emit("load:start",{offset:Y.dataManager.getCached(),limit:S0}),Y.dataManager.loadMore().catch((p)=>{D.emit("error",{error:p,context:"loadMore"})})}let{renderRange:V}=Y.state.viewportState;if(!y||V.start!==y.start||V.end!==y.end)if(y={start:V.start,end:V.end},P){G=null;let{start:o,end:p}=V,d=Y.getVirtualTotal();if($>N)if(Z==="down")p=Math.min(V.end+_,d-1);else o=Math.max(V.start-_,0);Y.dataManager.ensureRange(o,p).catch((v)=>{D.emit("error",{error:v,context:"ensureRange"})})}else G={start:V.start,end:V.end}});let H=200,E=null;Y.afterScroll.push((M,Z)=>{if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,W()},H)}),Y.destroyHandlers.push(()=>{if(E!==null)clearTimeout(E),E=null});let L=()=>{if(Y.state.isDestroyed)return;y=null;let{renderRange:M}=Y.state.viewportState;if(M.end>0)Y.dataManager.ensureRange(M.start,M.end).catch((Z)=>{D.emit("error",{error:Z,context:"ensureRange"})});W()};if(window.addEventListener("online",L),Y.destroyHandlers.push(()=>{window.removeEventListener("online",L)}),D.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{y=null,G=null,Y.forceRender();let{renderRange:M}=Y.state.viewportState;if(M.end>0)D.emit("load:start",{offset:M.start,limit:M.end-M.start+1}),await Y.dataManager.ensureRange(M.start,M.end)}),Y.methods.set("reload",async()=>{y=null,G=null,Y.invalidateRendered(),await Y.dataManager.reload(),D.emit("load:start",{offset:0,limit:S0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:M}=Y.state.viewportState;if(M.end>0)await Y.dataManager.ensureRange(M.start,M.end)}),X)D.emit("load:start",{offset:0,limit:S0}),Y.dataManager.loadInitial().catch((M)=>{D.emit("error",{error:M,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var AJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:K,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",K.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let Y=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let D=Q.viewport.getBoundingClientRect();if(K.horizontal){let b=D.left+window.scrollX;window.scrollTo(b+Y,window.scrollY)}else{let b=D.top+window.scrollY;window.scrollTo(window.scrollX,b+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:B,innerWidth:N}=window,_=()=>{let{innerWidth:Y,innerHeight:D}=window,b=K.horizontal?Y:D,O=K.horizontal?N:B;if(Math.abs(b-O)<=1)return;B=D,N=Y,j.viewportState.containerSize=D,X.emit("resize",{width:Y,height:D});for(let y=0;y<q.resizeHandlers.length;y++)q.resizeHandlers[y](Y,D);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var P2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].headerLayoutIndex<=q)Q=K;else j=K-1}return Q},EJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].firstDataIndex<=q)Q=K;else j=K-1}return Q},LJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),K=0,X=0;for(let B=1;B<J;B++){let N=q(B);if(N!==j){let _=B-K;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:_}),X=X+1+_,j=N,K=B}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:J-K}),Q},m0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),K=0;for(let X of q){j[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let B=0;B<X.count;B++)j[K]=J[X.firstDataIndex+B],K++}return j},d0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let K=J.getEntry(j);if(K.type==="header")return J.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},Z2=(J,q)=>{let Q=LJ(J,q.getGroupForIndex),j=J+Q.length,K=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(O)=>{if(Q.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let y=P2(Q,O),G=Q[y];if(O===G.headerLayoutIndex)return{type:"header",group:G};let A=O-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+A,group:G}},layoutToDataIndex:(O)=>{if(Q.length===0)return O;let y=P2(Q,O),G=Q[y];if(O===G.headerLayoutIndex)return-1;let A=O-G.headerLayoutIndex-1;return G.firstDataIndex+A},dataToLayoutIndex:(O)=>{if(Q.length===0)return O;let y=EJ(Q,O),G=Q[y],A=O-G.firstDataIndex;return G.headerLayoutIndex+1+A},getGroupAtLayoutIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=P2(Q,O);return Q[y]},getGroupAtDataIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=EJ(Q,O);return Q[y]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let y=Q[O];if(!y)return 0;return K(y.key,O)},rebuild:(O)=>{Q=LJ(O,q.getGroupForIndex),j=O+Q.length}}};var N2=(J,q,Q,j,K,X=!1)=>{let B=document.createElement("div");if(B.className=`${K}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.position="absolute",B.style.zIndex="5",B.style.pointerEvents="none",B.style.willChange="transform",B.style.overflow="hidden",X)B.style.top="0",B.style.bottom="0",B.style.left="0";else B.style.top="0",B.style.left="0",B.style.right="0";J.insertBefore(B,J.firstChild);let N=-1,_=!1,Y=0,D=(W)=>{if(W===N)return;N=W;let H=q.groups;if(W<0||W>=H.length){B.textContent="";return}let E=H[W],L=j.headerTemplate(E.key,E.groupIndex),M=q.getHeaderHeight(W);if(X)B.style.width=`${M}px`;else B.style.height=`${M}px`;if(typeof L==="string")B.innerHTML=L;else B.replaceChildren(L)},b=(W)=>{let H=q.groups;if(H.length===0){y();return}let E=Q.getOffset(H[0].headerLayoutIndex);if(W<E){y();return}let L=0,M=H.length-1;while(L<M){let V=L+M+1>>>1;if(Q.getOffset(H[V].headerLayoutIndex)<=W)L=V;else M=V-1}let Z=L;if(!_)O();D(Z);let $=q.getHeaderHeight(Z),C=0,P=Z+1;if(P<H.length){let S=Q.getOffset(H[P].headerLayoutIndex)-W;if(S<$)C=S-$}if(C!==Y)if(Y=C,C===0)B.style.transform="";else{let V=Math.round(C);B.style.transform=X?`translateX(${V}px)`:`translateY(${V}px)`}},O=()=>{if(_)return;_=!0,B.style.display=""},y=()=>{if(!_)return;_=!1,B.style.display="none",N=-1,Y=0,B.style.transform=""},G=()=>{let W=N;if(N=-1,W>=0)D(W)},A=()=>{B.remove(),N=-1,_=!1};return B.style.display="none",{update:b,refresh:G,show:O,hide:y,destroy:A}};var FJ=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let B=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,B),X.end=Math.min(j-1,Math.max(0,N)),X},bJ=(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},TJ=(J,q,Q,j,K,X)=>{if(j===0)return 0;let B=Math.max(0,Math.min(J,j-1)),N=q.getOffset(B),_=q.getSize(B),Y=q.getTotalSize(),D=Math.max(0,Y-Q),b;switch(X){case"center":b=N-Q/2+_/2;break;case"end":b=N-Q+_;break;case"start":default:b=N;break}return Math.max(0,Math.min(b,D))},yJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},HJ=(J,q)=>{return q.getTotalSize()},$J=(J,q)=>{return q.getOffset(J)},kJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var k0=(J,q,Q,j,K="start",X,B=TJ)=>{return B(J,q,Q,j,X,K)},PJ=(J,q)=>{return J.start===q.start&&J.end===q.end},RJ=(J,q)=>{return J>=q.start&&J<=q.end},CJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var zJ=(J,q)=>{let Q=[],j=[];for(let K=J.start;K<=J.end;K++)if(K<q.start||K>q.end)j.push(K);for(let K=q.start;K<=q.end;K++)if(K<J.start||K>J.end)Q.push(K);return{add:Q,remove:j}};j2();var wJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,Q=null,j=[],K=[];return{name:"withGroups",priority:10,setup(X){let{dom:B,config:N,rawConfig:_}=X,{classPrefix:Y}=N,b=_.item.height;j=_.items?[..._.items]:[];let O=j.length,y={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=Z2(O,y),K=m0(j,q.groups);let G=d0(q,b);X.setSizeConfig(G),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let A=_.item.template,{headerTemplate:W}=J,H=(P,V,S)=>{if(z0(P))return W(P.groupKey,P.groupIndex);return A(P,V,S)},E=X.methods.get("_getGridLayout"),L=X.methods.get("_replaceGridRenderer"),M=X.methods.get("_updateGridLayoutForGroups");if(E&&L){if(M)M((o)=>{let p=K[o];return!!(p&&z0(p))});let{createGridRenderer:P}=(W2(),q1(vJ)),V=E(),S=P(B.items,H,X.sizeCache,V,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);L(S)}else X.replaceTemplate(H);if(B.root.classList.add(`${Y}--grouped`),J.sticky!==!1){Q=N2(B.root,q,X.sizeCache,{...y,sticky:y.sticky??!1},Y,N.horizontal);let P=Q;X.afterScroll.push((V,S)=>{P.update(V)}),Q.update(X.scrollController.getScrollTop())}let Z=()=>{if(!q)return;q.rebuild(j.length),K=m0(j,q.groups);let P=d0(q,b);if(X.setSizeConfig(P),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),Q)Q.refresh()};X.methods.set("setItems",(P)=>{j=P.slice(),Z()}),X.methods.set("appendItems",(P)=>{j.push(...P),Z()}),X.methods.set("prependItems",(P)=>{j.unshift(...P),Z()}),X.methods.set("removeItem",(P)=>{j=j.filter((V)=>V.id!==P),Z()});let{animateScroll:$,cancelScroll:C}=n2(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(P,V)=>{let S=q.dataToLayoutIndex(P),{align:o,behavior:p,duration:d}=w0(V),v=X.dataManager.getTotal(),U=k0(S,X.sizeCache,X.state.viewportState.containerSize,v,o,X.getCachedCompression());if(p==="smooth")$(X.scrollController.getScrollTop(),U,d);else C(),X.scrollController.scrollTo(U)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(C(),Q)Q.destroy(),Q=null;B.root.classList.remove(`${Y}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var D2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,K={row:0,col:0},X=(G)=>{if(G<=0)return 0;if(!j)return Math.ceil(G/q);let A=0,W=0,H=0;for(let E=0;E<G;E++)if(j(E)){if(H++,W>0)A++,W=0;A++,W=0}else if(W++,W>=q)A++,W=0;if(W>0)A++;return A},B=(G)=>{return K.row=N(G),K.col=_(G),K},N=(G)=>{if(!j)return Math.floor(G/q);let A=0,W=0;for(let H=0;H<=G;H++)if(j(H)){if(W>0)A++,W=0;if(H===G)return A;A++,W=0}else{if(H===G)return A;if(W++,W>=q)A++,W=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${A}`),A},_=(G)=>{if(!j)return G%q;if(j(G))return 0;let A=0;for(let W=0;W<=G;W++)if(j(W))A=0;else{if(W===G)return A;if(A++,A>=q)A=0}return A},Y=(G,A,W)=>{if(W<=0)return{start:0,end:-1};if(!j){let Z=Math.max(0,G*q),$=Math.min(W-1,(A+1)*q-1);return{start:Z,end:$}}let H=-1,E=-1,L=0,M=0;for(let Z=0;Z<W;Z++){if(j(Z)){if(M>0)L++,M=0;if(L>=G&&L<=A){if(H===-1)H=Z;E=Z}L++,M=0}else{if(L>=G&&L<=A){if(H===-1)H=Z;E=Z}if(M++,M>=q)L++,M=0}if(L>A&&M===0)break}if(H===-1)return{start:0,end:-1};return{start:H,end:E}},D=(G,A,W)=>{if(A<0||A>=q)return-1;let H=G*q+A;if(H<0||H>=W)return-1;return H},b=(G)=>{let A=(q-1)*Q;return Math.max(0,(G-A)/q)};return{get columns(){return q},get gap(){return Q},update:(G)=>{if(G.columns!==void 0)q=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)Q=G.gap;if(G.isHeaderFn!==void 0)j=G.isHeaderFn},getTotalRows:X,getPosition:B,getRow:N,getCol:_,getItemRange:Y,getItemIndex:D,getColumnWidth:b,getColumnOffset:(G,A)=>{let W=b(A);return G*(W+Q)}}};W2();var b1=new Set,SJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:K,emitter:X,config:B,rawConfig:N}=j,{classPrefix:_}=B;if(B.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=B.horizontal,D=()=>Y?K.viewport.clientHeight:j.getContainerWidth(),b=N.items?.some((T)=>T.__groupHeader===!0),O={columns:J.columns,gap:J.gap??0};if(b)O.isHeaderFn=(T)=>{let R=j.dataManager.getItem(T);return!!(R&&R.__groupHeader===!0)};q=D2(O);let y=q.gap;j.setVirtualTotalFn(()=>{let T=j.dataManager.getTotal();return q.getTotalRows(T)});let G=N.item,A=B.horizontal?G.width:G.height,W={containerWidth:D(),columns:q.columns,gap:q.gap},H={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof A==="function")j.setSizeConfig((T)=>{let R=W.containerWidth-2,k=(W.columns-1)*W.gap;return H.containerWidth=W.containerWidth,H.columns=W.columns,H.gap=W.gap,H.columnWidth=(R-k)/W.columns,H.row=q.getRow(T),H.column=q.getCol(T),H.totalRows=q.getTotalRows(j.dataManager.getTotal()),H.totalColumns=W.columns,A(T,H)+W.gap});else if(y>0)j.setSizeConfig(A+y);if(j.rebuildSizeCache(),y>0){let T=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let R=T();return R>0?R-W.gap:0}}K.root.classList.add(`${_}--grid`);let E=D(),L=N.item.template,M=()=>{Q=c0(K.items,L,j.sizeCache,q,_,E,()=>j.dataManager.getTotal(),B.ariaIdPrefix,B.horizontal),j.replaceRenderer(Q)};M(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>O),j.methods.set("_replaceGridRenderer",(T)=>{Q=T}),j.methods.set("_updateGridLayoutForGroups",(T)=>{q.update({isHeaderFn:T});let R=j.dataManager.getTotal(),k=0;for(let l=0;l<R;l++)if(q.getCol(l)===0){let i=j.sizeCache.getSize(l);k+=i}if(j.sizeCache.getTotalSize=()=>k,B.horizontal)j.dom.content.style.width=`${k}px`;else j.dom.content.style.height=`${k}px`;M()}),j.methods.set("updateGrid",(T)=>{if(T.columns!==void 0){if(!Number.isInteger(T.columns)||T.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");O.columns=T.columns}if(T.gap!==void 0){if(T.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");O.gap=T.gap}if(q)q.update(O);let R=D();if(W.containerWidth=R,W.columns=O.columns,W.gap=O.gap??0,Q)Q.updateContainerWidth(R);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let k=0;k<j.contentSizeHandlers.length;k++)j.contentSizeHandlers[k]();if(Q)Q.clear();j.forceRender()});let Z=null,$=null,C=!1,P=()=>{if(C)return;C=!0,Z=j.methods.get("_getSelectedIds")??null,$=j.methods.get("_getFocusedIndex")??null},V=-1,S=-1,o=!0,p=B.overscan??3,d={start:0,end:0},v={start:0,end:0},U=()=>{if(j.state.isDestroyed)return;let T=j.scrollController.getScrollTop(),R=j.state.viewportState.containerSize;if(!o&&T===V&&R===S)return;V=T,S=R,o=!1;let k=j.getVirtualTotal();if(k===0||R===0)d.start=0,d.end=0;else{d.start=Math.max(0,j.sizeCache.indexAtOffset(T));let t=j.sizeCache.indexAtOffset(T+R);if(t<k-1)t++;d.end=Math.min(k-1,Math.max(0,t))}v.start=Math.max(0,d.start-p),v.end=Math.min(k-1,d.end+p);let l=j.state.viewportState;l.scrollPosition=T,l.visibleRange.start=d.start,l.visibleRange.end=d.end,l.renderRange.start=v.start,l.renderRange.end=v.end;let i=j.state.lastRenderRange,z=l.isCompressed,h=j.dataManager.getTotal(),c=q.getItemRange(v.start,v.end,h),a=j.dataManager.getItemsInRange(c.start,c.end),f=z?j.getCompressionContext():void 0;P();let x=Z?Z():b1,n=$?$():-1;if(Q.render(a,c,x,n,f),i.start!==v.start||i.end!==v.end)i.start=v.start,i.end=v.end,X.emit("range:change",{range:{start:v.start,end:v.end}})},w=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,o=!0,U()};j.setRenderFns(U,w);let I=typeof A==="function";if(j.resizeHandlers.push((T,R)=>{let k=Y?R:T;if(W.containerWidth=k,Q)Q.updateContainerWidth(k);if(I){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let l=0;l<j.contentSizeHandlers.length;l++)j.contentSizeHandlers[l]();if(Q)Q.clear();j.forceRender()}}),j.methods.set("scrollToIndex",(T,R)=>{let k=Math.floor(T/J.columns),{align:l,behavior:i}=w0(R),z=j.dataManager.getState(),h=q.getTotalRows(z.total),c=Math.max(0,Math.min(k,h-1)),a=k0(c,j.sizeCache,j.state.viewportState.containerSize,h,l,j.getCachedCompression());if(i==="smooth")j.scrollController.scrollTo(a);else j.scrollController.scrollTo(a)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};W2();var _2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,K=0,X=[],B=()=>{let W=(q-1)*Q;K=Math.max(0,(j-W)/q),X=Array(q);let H=K+Q;for(let E=0;E<q;E++)X[E]=E*H};B();let N=[],_=0,Y=[],D=(W)=>{let H=0,E=W[0];for(let L=1;L<W.length;L++){let M=W[L];if(M<E)E=M,H=L}return H},b=(W,H)=>{if(W<=0)return _=0,N=[],[];let E=Array(q).fill(0),L=Array(q);for(let $=0;$<q;$++)L[$]=[];let M=Array(W);for(let $=0;$<W;$++){let C=D(E),P=H($),V=E[C];M[$]={index:$,x:X[C],y:V,lane:C,size:P,crossSize:K},L[C].push($),E[C]=V+P+Q}N=L;let Z=0;for(let $=0;$<q;$++){let C=E[$],P=C>0?C-Q:0;if(P>Z)Z=P}return _=Z,M},O=(W)=>{if(W.length===0)return _>0?_:0;if(_>0)return _;let H=Array(q).fill(0);for(let L of W){let M=L.y+L.size,Z=H[L.lane];if(M>Z)H[L.lane]=M}let E=0;for(let L=0;L<q;L++)if(H[L]>E)E=H[L];return E},y=(W,H,E)=>{if(W.length===0||E<=H)return Y.length=0,Y;if(N.length===0||N.length!==q)return G(W,H,E);Y.length=0;for(let L=0;L<q;L++){let M=N[L],Z=M.length;if(Z===0)continue;let $=0,C=Z;while($<C){let P=$+C>>>1,V=W[M[P]];if(V.y+V.size<=H)$=P+1;else C=P}for(let P=$;P<Z;P++){let V=W[M[P]];if(V.y>=E)break;Y.push(V)}}return Y},G=(W,H,E)=>{let L=[];for(let M of W)if(M.y+M.size>H&&M.y<E)L.push(M);return L};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(W)=>{let H=!1;if(W.columns!==void 0){let E=Math.max(1,Math.floor(W.columns));if(E!==q)q=E,H=!0}if(W.gap!==void 0&&W.gap!==Q)Q=W.gap,H=!0;if(W.containerSize!==void 0&&W.containerSize!==j)j=W.containerSize,H=!0;if(H)B()},calculateLayout:b,getTotalSize:O,getVisibleItems:y}};var T1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var V2=(J,q,Q,j=!1,K,X)=>{let B=T1(),N=new Map,_=new Set,Y=0,D="",b=-1,O={selected:!1,focused:!1},y=(V,S)=>{return O.selected=V,O.focused=S,O},G=`${Q}-item ${Q}-masonry-item`,A=`${Q}-item--selected`,W=`${Q}-item--focused`,H=(V,S)=>{if(typeof S==="string")V.innerHTML=S;else V.replaceChildren(S)},E=(V,S,o)=>{V.classList.toggle(A,S),V.classList.toggle(W,o)},L=(V,S)=>{if(j)V.style.transform=`translate(${Math.round(S.y)}px, ${Math.round(S.x)}px)`;else V.style.transform=`translate(${Math.round(S.x)}px, ${Math.round(S.y)}px)`},M=(V,S)=>{if(j)V.style.width=`${S.size}px`,V.style.height=`${S.crossSize}px`;else V.style.width=`${S.crossSize}px`,V.style.height=`${S.size}px`},Z=(V,S,o,p,d)=>{let v=B.acquire(),U=y(p,d);if(v.className=G,v.dataset.index=String(V),v.dataset.id=String(S.id),v.dataset.lane=String(o.lane),v.ariaSelected=String(p),X)v.id=`${X}-item-${V}`;if(K){let I=K();if(I!==b)b=I,D=String(I);v.setAttribute("aria-setsize",D),v.setAttribute("aria-posinset",String(V+1))}M(v,o);let w=q(S,V,U);return H(v,w),E(v,p,d),L(v,o),{element:v,lastItemId:S.id,lastSelected:p,lastFocused:d,lastY:o.y,lastX:o.x,lastSize:o.size,lastCrossSize:o.crossSize,lastSeenFrame:Y}},$=(V,S,o,p)=>{Y++,_.clear();for(let v=0;v<S.length;v++)_.add(S[v].index);for(let[v,U]of N)if(_.has(v))U.lastSeenFrame=Y;else if(Y-U.lastSeenFrame>2)B.release(U.element),N.delete(v);let d=null;for(let v=0;v<S.length;v++){let U=S[v],w=U.index,I=V(w);if(!I)continue;let T=o.has(I.id),R=w===p,k=N.get(w);if(k){let l=k.lastItemId!==I.id,i=k.lastSelected!==T,z=k.lastFocused!==R,h=k.lastY!==U.y||k.lastX!==U.x,c=k.lastSize!==U.size||k.lastCrossSize!==U.crossSize;if(l||i||z){let a=y(T,R),f=q(I,w,a);H(k.element,f),E(k.element,T,R),k.element.dataset.id=String(I.id),k.element.ariaSelected=String(T),k.lastItemId=I.id,k.lastSelected=T,k.lastFocused=R}if(c)M(k.element,U),k.lastSize=U.size,k.lastCrossSize=U.crossSize;if(h)L(k.element,U),k.lastY=U.y,k.lastX=U.x}else{let l=Z(w,I,U,T,R);if(!d)d=document.createDocumentFragment();d.appendChild(l.element),N.set(w,l)}}if(d)J.appendChild(d)},C=()=>{for(let{element:V}of N.values())B.release(V);N.clear(),J.innerHTML=""};return{render:$,getElement:(V)=>N.get(V)?.element,clear:C,destroy:()=>{C(),B.clear()}}};var y1=new Set,fJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(K){let{dom:X,emitter:B,config:N,rawConfig:_}=K,Y=N.classPrefix,D=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${Y}--masonry`);let b=()=>{return D?X.viewport.clientHeight:X.viewport.clientWidth},O={columns:J.columns,gap:J.gap??0,containerSize:b()};q=_2(O);let y=_.item,G=D&&_.item.width?_.item.width:y.height,A={containerWidth:0,columns:0,gap:0,columnWidth:0},W=typeof G==="function"?(T)=>G(T,A):()=>G,H=()=>{let T=K.dataManager.getTotal(),R=q;A.containerWidth=R.containerSize,A.columns=R.columns,A.gap=R.gap;let k=(R.columns-1)*R.gap;A.columnWidth=Math.max(0,(A.containerWidth-k)/R.columns),j=R.calculateLayout(T,W);let l=q.getTotalSize(j);if(K.sizeCache.getTotalSize=()=>l,D)X.content.style.width=`${l}px`;else X.content.style.height=`${l}px`},E=_.item.template;Q=V2(X.items,E,Y,D,()=>K.dataManager.getTotal(),N.ariaIdPrefix);let L=null,M=null,Z=!1,$=()=>{if(Z)return;Z=!0,L=K.methods.get("_getSelectedIds")??null,M=K.methods.get("_getFocusedIndex")??null},C=(T)=>K.dataManager.getItem(T),P=-1,V=-1,S=!0,o=(N.overscan??3)*100,p=()=>{if(K.state.isDestroyed)return;$();let T=K.scrollController.getScrollTop(),R=K.state.viewportState.containerSize;if(!S&&T===P&&R===V)return;P=T,V=R,S=!1;let k=Math.max(0,T-o),l=T+R+o,i=q.getVisibleItems(j,k,l),z=L?L():y1,h=M?M():-1;if(Q&&i.length>0)Q.render(C,i,z,h);let c=K.state.viewportState;c.scrollPosition=T;let a=i.length,f=a>0?i[0].index:0,x=a>0?i[a-1].index:0;c.visibleRange.start=f,c.visibleRange.end=x,c.renderRange.start=f,c.renderRange.end=x;let n=K.state.lastRenderRange;if(n.start!==f||n.end!==x)n.start=f,n.end=x,B.emit("range:change",{range:{start:f,end:x}})},d=()=>{K.state.lastRenderRange.start=-1,K.state.lastRenderRange.end=-1,S=!0,p()};K.setRenderFns(p,d);let v=(T,R)=>{let k=D?R:T;if(q&&q.containerSize!==k){if(q.update({containerSize:k}),H(),Q)Q.clear();d()}};K.resizeHandlers.push(v);let U=()=>{H(),d()},w=K.dataManager,I=(T)=>{if(typeof w[T]!=="function")return;let R=w[T].bind(w);w[T]=(...k)=>{R(...k),U()}};I("setItems"),I("appendItems"),I("prependItems"),I("updateItem"),I("removeItem"),K.methods.set("scrollToIndex",(T,R,k)=>{let l=j[T];if(!l)return;let i=l.y,z=K.state.viewportState.containerSize,h=i;if(R==="center")h=i-z/2+l.size/2;else if(R==="end")h=i-z+l.size;h=Math.max(0,h),K.scrollController.scrollTo(h,k==="smooth")}),H(),K.destroyHandlers.push(()=>{if(Q)Q.destroy();X.root.classList.remove(`${Y}--masonry`)})}}};var G2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),l0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let K of q)j.add(K);return{...J,selected:j}},r0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},p0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return r0(J,[q]);else return l0(J,[q],Q)},M2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},O2=(J)=>({...J,selected:new Set}),A2=(J,q)=>{return J.focusedIndex=q,J},R2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},C2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},z2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},v2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var IJ=(J,q)=>{return J.selected.has(q)},a0=(J)=>{return Array.from(J.selected)},s0=(J,q)=>{let Q=[];for(let j of J.selected){let K=q(j);if(K)Q.push(K)}return Q};var pJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=G2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:B,emitter:N,config:_}=X,{classPrefix:Y,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}B.root.classList.add(`${Y}--selectable`);let b=new Map,O=()=>{b.clear();let E=X.dataManager.getTotal(),L=X.dataManager.getCached();if(L===0)return;if(L>=E){for(let Z=0;Z<E;Z++){let $=X.dataManager.getItem(Z);if($)b.set($.id,Z)}return}let M=X.dataManager.getStorage();if(M&&typeof M.getLoadedRanges==="function"){let Z=M.getLoadedRanges();for(let $ of Z)for(let C=$.start;C<=$.end;C++){let P=X.dataManager.getItem(C);if(P)b.set(P.id,C)}}};N.on("load:end",({items:E,offset:L})=>{if(!E||E.length===0)return;if(L!==void 0)for(let M=0;M<E.length;M++){let Z=E[M];if(Z&&Z.id!==void 0)b.set(Z.id,L+M)}else O()}),O(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:y}=X.getRenderFns(),G=()=>{y();let E=(L)=>{let M=b.get(L);if(M===void 0)return;return X.dataManager.getItem(M)};N.emit("selection:change",{selected:a0(j),items:s0(j,E)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",B.root.appendChild(K);let A=K;N.on("selection:change",({selected:E})=>{let L=E.length;if(L===0)A.textContent="";else if(L===1)A.textContent="1 item selected";else A.textContent=`${L} items selected`});let W=()=>{if(X.state.isDestroyed)return;if(!B.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=A2(j,L),j.focusVisible=!0,B.root.setAttribute("aria-activedescendant",`${D}-item-${L}`),X.scrollController.scrollTo(k0(L,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let M=X.dataManager.getItem(L);if(M)X.renderer.updateItemClasses(L,j.selected.has(M.id),!0)};B.root.addEventListener("focusin",W);let H=(E)=>{if(X.state.isDestroyed)return;let L=E.relatedTarget;if(L&&B.root.contains(L))return;let M=j.focusedIndex;if(j.focusVisible=!1,B.root.removeAttribute("aria-activedescendant"),M>=0){let Z=X.dataManager.getItem(M);if(Z)X.renderer.updateItemClasses(M,j.selected.has(Z.id),!1)}};B.root.addEventListener("focusout",H),X.clickHandlers.push((E)=>{if(X.state.isDestroyed)return;let M=E.target.closest("[data-index]");if(!M)return;let Z=parseInt(M.dataset.index??"-1",10);if(Z<0)return;let $=X.dataManager.getItem(Z);if(!$)return;N.emit("item:click",{item:$,index:Z,event:E}),j=A2(j,Z),j.focusVisible=!1,B.root.setAttribute("aria-activedescendant",`${D}-item-${Z}`),j=p0(j,$.id,q),G()}),X.keydownHandlers.push((E)=>{if(X.state.isDestroyed)return;let L=X.dataManager.getTotal(),M=j.focusedIndex,Z=!1,$=!1,C=j;switch(E.key){case"ArrowUp":C=R2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case"ArrowDown":C=C2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case"Home":C=z2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case"End":C=v2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let P=X.dataManager.getItem(j.focusedIndex);if(P)C=p0(j,P.id,q),C.focusVisible=!0;Z=!0}break}if(Z){E.preventDefault(),j=C;let P=j.focusedIndex;if(P>=0){let V=X.dataManager.getState(),S=k0(P,X.sizeCache,X.state.viewportState.containerSize,V.total,"center",X.getCachedCompression());X.scrollController.scrollTo(S),B.root.setAttribute("aria-activedescendant",`${D}-item-${P}`)}else B.root.removeAttribute("aria-activedescendant");if($){let{selected:V}=j;if(M>=0&&M!==P){let S=X.dataManager.getItem(M);if(S)X.renderer.updateItemClasses(M,V.has(S.id),!1)}if(P>=0){let S=X.dataManager.getItem(P);if(S)X.renderer.updateItemClasses(P,V.has(S.id),!0)}}else G()}}),X.methods.set("select",(...E)=>{j=l0(j,E,q),G()}),X.methods.set("deselect",(...E)=>{j=r0(j,E),G()}),X.methods.set("toggleSelect",(E)=>{j=p0(j,E,q),G()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let E=X.getAllLoadedItems();j=M2(j,E,q),O(),G()}),X.methods.set("clearSelection",()=>{j=O2(j),G()}),X.methods.set("getSelected",()=>{return a0(j)}),X.methods.set("getSelectedItems",()=>{return s0(j,(L)=>{let M=b.get(L);if(M===void 0)return;return X.dataManager.getItem(M)})}),X.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove();B.root.removeEventListener("focusin",W),B.root.removeEventListener("focusout",H)})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var hJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let K=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),B=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),_=N&&N().length>0?N():void 0;if(B===0){let O={index:0,offsetInItem:0,total:0};if(_)O.selectedIds=_;return O}let Y,D;if(X.isCompressed){let y=K/X.virtualSize*B;Y=Math.max(0,Math.min(Math.floor(y),B-1)),D=(y-Y)*Q.sizeCache.getSize(Y)}else Y=Q.sizeCache.indexAtOffset(K),D=K-Q.sizeCache.getOffset(Y);D=Math.max(0,D);let b={index:Y,offsetInItem:D,total:B};if(_)b.selectedIds=_;return b});let j=(K)=>{let{index:X,offsetInItem:B,selectedIds:N}=K,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(B))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let W=Q.getCachedCompression();Q.updateContentSize(W.virtualSize)}let D=Q.getCachedCompression(),b=Math.max(0,Math.min(X,_-1)),O;if(D.isCompressed){let W=Q.sizeCache.getSize(b),H=W>0?B/W:0;O=(b+H)/_*D.virtualSize}else O=Q.sizeCache.getOffset(b)+B;let y=Q.state.viewportState.containerSize,G=Math.max(0,D.virtualSize-y);if(O=Math.max(0,Math.min(O,G)),Q.scrollController.scrollTo(O),N&&N.length>0){let W=Q.methods.get("select");if(W)W(...N)}let A=Q.methods.get("loadVisibleRange");if(A)requestAnimationFrame(()=>{A()});else{let W=Q.methods.get("reload");if(W)requestAnimationFrame(()=>{W()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};export{hJ as withSnapshots,pJ as withSelection,_J as withScrollbar,MJ as withScale,AJ as withPage,fJ as withMasonry,wJ as withGroups,SJ as withGrid,OJ as withAsync,JJ as vlist,p0 as toggleSelection,FJ as simpleVisibleRange,l0 as selectItems,M2 as selectAll,PJ as rangesEqual,X2 as rafThrottle,NJ as needsScaling,K2 as mergeRanges,IJ as isSelected,C0 as isPlaceholderItem,RJ as isInRange,z0 as isGroupHeader,s0 as getSelectedItems,a0 as getSelectedIds,F0 as getScaleState,DJ as getScaleInfo,F0 as getScale,CJ as getRangeCount,WJ as getMaxItemsWithoutScaling,k2 as filterPlaceholders,zJ as diffRanges,r0 as deselectItems,N2 as createStickyHeader,Y2 as createSparseStorage,H0 as createSizeCache,G2 as createSelectionState,I0 as createScrollbar,GJ as createScrollController,U2 as createPlaceholderManager,t0 as createMeasuredSizeCache,V2 as createMasonryRenderer,_2 as createMasonryLayout,d0 as createGroupedSizeFn,Z2 as createGroupLayout,c0 as createGridRenderer,D2 as createGridLayout,e0 as createEmitter,B2 as createAsyncManager,O2 as clearSelection,kJ as clampScrollPosition,yJ as calculateTotalSize,k0 as calculateScrollToIndex,J2 as calculateScaledVisibleRange,Q2 as calculateScaledScrollToIndex,BJ as calculateScaledRenderRange,f0 as calculateScaledItemPosition,bJ as calculateRenderRange,x0 as calculateMissingRanges,$J as calculateItemOffset,ZJ as calculateIndexFromScrollPosition,HJ as calculateActualSize,m0 as buildLayoutItems,$0 as MAX_VIRTUAL_SIZE,UJ as MAX_VIRTUAL_HEIGHT};
package/dist/types.d.ts CHANGED
@@ -261,6 +261,8 @@ export interface SelectionState {
261
261
  selected: Set<string | number>;
262
262
  /** Currently focused item index (-1 if none) */
263
263
  focusedIndex: number;
264
+ /** Whether the focus ring should be visible (true for keyboard, false for mouse) */
265
+ focusVisible: boolean;
264
266
  }
265
267
  /** Adapter for async data loading */
266
268
  export interface VListAdapter<T extends VListItem = VListItem> {
package/dist/vlist.css CHANGED
@@ -1 +1 @@
1
- @keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}[data-theme-mode="light"]{--vlist-bg:#ffffff;--vlist-bg-hover:#f9fafb;--vlist-bg-selected:#eff6ff;--vlist-bg-selected-hover:#dbeafe;--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-scrollbar-thumb:#d1d5db;--vlist-scrollbar-thumb-hover:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-track-bg:transparent;--vlist-scrollbar-custom-thumb-bg:rgba(0,0,0,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(0,0,0,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out;--vlist-placeholder-bg:rgba(0,0,0,0.2)}[data-theme-mode="dark"]{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-placeholder-bg:rgba(255,255,255,0.3)}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}.vlist:focus{outline:none}.vlist:focus-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:2px}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--vlist-scrollbar-thumb) transparent}.vlist-viewport::-webkit-scrollbar{width:6px;height:6px}.vlist-viewport::-webkit-scrollbar-track{background:transparent}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb);border-radius:3px}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover)}.vlist-content{position:relative;width:100%}.vlist-items{position:relative;width:100%;contain:layout style}.vlist-item{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);border-bottom:1px solid var(--vlist-border);background-color:var(--vlist-bg);cursor:pointer;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item{transition:none}.vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:0;right:0;width:var(--vlist-scrollbar-width);height:100%;background-color:var(--vlist-scrollbar-track-bg);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar-hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar-hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar-thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-scrollbar-custom-thumb-bg);border-radius:var(--vlist-scrollbar-custom-thumb-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar-thumb{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist--grouped .vlist-item[data-id^="__group_header_"]{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);z-index:1}.vlist--grouped .vlist-item[data-id^="__group_header_"]:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);contain:content}@media (prefers-color-scheme:dark){:root{--vlist-group-header-bg:#1e2433}}.dark{--vlist-group-header-bg:#1e2433}.vlist--scrolling .vlist-sticky-header{transition:none}.vlist--grid .vlist-items{contain:layout style}.vlist-grid-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--grid .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-grid-item{transition:none}.vlist-grid-item:hover{background-color:var(--vlist-bg-hover)}.vlist-grid-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-grid-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-grid-item.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist--masonry .vlist-items{contain:layout style}.vlist-masonry-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:pointer;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--masonry .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-masonry-item{transition:none}.vlist-masonry-item:hover{background-color:var(--vlist-bg-hover)}.vlist-masonry-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist-masonry-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-masonry-item.vlist-item--focused-visible{outline:2px solid var(--vlist-focus-ring);outline-offset:-2px;z-index:1}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-items{height:100%;width:auto}.vlist--horizontal .vlist-item{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none;border-right:1px solid var(--vlist-border)}.vlist-scrollbar--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--vlist-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar-thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--no-scrollbar::-webkit-scrollbar{display:none}
1
+ @keyframes vlist-fade-in{from{opacity:0.6}to{opacity:1}}@keyframes vlist-placeholder-pulse{0%,100%{opacity:0.6}50%{opacity:0.4}}[data-theme-mode="light"]{--vlist-bg:#ffffff;--vlist-bg-hover:#f9fafb;--vlist-bg-selected:#eff6ff;--vlist-bg-selected-hover:#dbeafe;--vlist-border:#e5e7eb;--vlist-border-selected:#3b82f6;--vlist-text:#111827;--vlist-text-muted:#6b7280;--vlist-focus-ring:#3b82f6;--vlist-scrollbar-thumb:#d1d5db;--vlist-scrollbar-thumb-hover:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-track-bg:transparent;--vlist-scrollbar-custom-thumb-bg:rgba(0,0,0,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(0,0,0,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-item-padding-x:1rem;--vlist-item-padding-y:0.75rem;--vlist-border-radius:0.5rem;--vlist-transition-duration:150ms;--vlist-transition-timing:ease-in-out;--vlist-placeholder-bg:rgba(0,0,0,0.2)}[data-theme-mode="dark"]{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.2);--vlist-bg-selected-hover:rgba(59,130,246,0.3);--vlist-border:#374151;--vlist-border-selected:#3b82f6;--vlist-text:#f9fafb;--vlist-text-muted:#9ca3af;--vlist-scrollbar-width:8px;--vlist-scrollbar-thumb:#4b5563;--vlist-scrollbar-thumb-hover:#6b7280;--vlist-scrollbar-custom-thumb-bg:rgba(255,255,255,0.3);--vlist-scrollbar-custom-thumb-hover-bg:rgba(255,255,255,0.5);--vlist-scrollbar-custom-thumb-radius:4px;--vlist-placeholder-bg:rgba(255,255,255,0.3)}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}.vlist:focus{outline:none}.vlist:focus-visible{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px}.vlist:has(.vlist-item--focused):focus-visible{outline:none}.vlist-viewport{width:100%;height:100%;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--vlist-scrollbar-thumb) transparent}.vlist-viewport::-webkit-scrollbar{width:6px;height:6px}.vlist-viewport::-webkit-scrollbar-track{background:transparent}.vlist-viewport::-webkit-scrollbar-thumb{background-color:var(--vlist-scrollbar-thumb);border-radius:3px}.vlist-viewport::-webkit-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-thumb-hover)}.vlist-content{position:relative;width:100%}.vlist-items{position:relative;width:100%;contain:layout style}.vlist-item{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;border-bottom:1px solid var(--vlist-border);background-color:var(--vlist-bg);cursor:default;user-select:none;opacity:1;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing),opacity var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;will-change:transform}.vlist--scrolling .vlist-item{transition:none}.vlist--selectable .vlist-item{cursor:pointer}.vlist--selectable .vlist-item:hover{background-color:var(--vlist-bg-hover)}.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist--selectable .vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-item--replaced{animation:fade-in 0.3s ease-out}.vlist-item--placeholder{opacity:0.6;animation:vlist-placeholder-pulse 2s ease-in-out infinite}.vlist-item--selected.vlist-item--focused{outline-color:var(--vlist-border-selected)}.vlist-scrollbar{position:absolute;top:0;right:0;width:var(--vlist-scrollbar-width);height:100%;background-color:var(--vlist-scrollbar-track-bg);opacity:0;transition:opacity 0.2s ease-out;z-index:10;pointer-events:none}.vlist-scrollbar-hover{position:absolute;top:0;right:0;height:100%;z-index:9;pointer-events:auto}.vlist-scrollbar-hover--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:auto}.vlist-scrollbar--visible{opacity:1;pointer-events:auto}.vlist-scrollbar-thumb{position:absolute;top:0;left:0;right:0;width:100%;background-color:var(--vlist-scrollbar-custom-thumb-bg);border-radius:var(--vlist-scrollbar-custom-thumb-radius);cursor:pointer;transition:background-color 0.15s ease-out}.vlist-scrollbar-thumb:hover{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist-scrollbar--dragging{opacity:1;pointer-events:auto}.vlist-scrollbar--dragging .vlist-scrollbar-thumb{background-color:var(--vlist-scrollbar-custom-thumb-hover-bg)}.vlist--grouped .vlist-item[data-id^="__group_header_"]{cursor:default;background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);z-index:1}.vlist--grouped .vlist-item[data-id^="__group_header_"]:hover{background-color:var(--vlist-group-header-bg,#f3f4f6)}.vlist-sticky-header{background-color:var(--vlist-group-header-bg,#f3f4f6);border-bottom:1px solid var(--vlist-border);contain:content}@media (prefers-color-scheme:dark){:root{--vlist-group-header-bg:#1e2433}}.dark{--vlist-group-header-bg:#1e2433}.vlist--scrolling .vlist-sticky-header{transition:none}.vlist--grid .vlist-items{contain:layout style}.vlist-grid-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--grid .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-grid-item{transition:none}.vlist--selectable .vlist-grid-item{cursor:pointer}.vlist--selectable .vlist-grid-item:hover{background-color:var(--vlist-bg-hover)}.vlist-grid-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist--selectable .vlist-grid-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-grid-item.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist--masonry .vlist-items{contain:layout style}.vlist-masonry-item{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--vlist-item-padding-y) var(--vlist-item-padding-x);background-color:var(--vlist-bg);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration) var(--vlist-transition-timing);contain:content;box-sizing:border-box;overflow:hidden}.vlist--masonry .vlist-item{right:auto;border-bottom:none}.vlist--scrolling .vlist-masonry-item{transition:none}.vlist--selectable .vlist-masonry-item{cursor:pointer}.vlist--selectable .vlist-masonry-item:hover{background-color:var(--vlist-bg-hover)}.vlist-masonry-item.vlist-item--selected{background-color:var(--vlist-bg-selected)}.vlist--selectable .vlist-masonry-item.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover)}.vlist-masonry-item.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist--horizontal{overflow:hidden}.vlist--horizontal .vlist-viewport{overflow-x:auto;overflow-y:hidden}.vlist--horizontal .vlist-content{height:100%;width:auto}.vlist--horizontal .vlist-items{height:100%;width:auto}.vlist--horizontal .vlist-item{position:absolute;top:0;bottom:0;left:0;right:auto;display:flex;align-items:center;justify-content:center;border-bottom:none;border-right:1px solid var(--vlist-border)}.vlist-scrollbar--horizontal{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--vlist-scrollbar-width)}.vlist-scrollbar--horizontal .vlist-scrollbar-thumb{top:0;left:0;width:auto;height:100%}.vlist-viewport--custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--custom-scrollbar::-webkit-scrollbar{display:none}.vlist-viewport--no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.vlist-viewport--no-scrollbar::-webkit-scrollbar{display:none}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",
File without changes
File without changes
File without changes