@floor/vlist 1.3.2 → 1.3.4
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 +28 -14
- package/dist/builder/materialize.d.ts +6 -0
- package/dist/builder/measurement.d.ts +1 -1
- package/dist/builder/range.d.ts +1 -1
- package/dist/builder/types.d.ts +45 -0
- package/dist/features/table/renderer.d.ts +1 -1
- package/dist/index.d.ts +3 -10
- package/dist/index.js +1 -1
- package/dist/internals.d.ts +21 -0
- package/dist/internals.js +1 -0
- package/dist/rendering/renderer.d.ts +1 -1
- package/dist/types.d.ts +28 -1
- package/dist/utils/padding.d.ts +38 -0
- package/dist/vlist.css +1 -1
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Lightweight, high-performance virtual list with zero dependencies and dimension-agnostic architecture.
|
|
4
4
|
|
|
5
|
-
**v1.3.
|
|
5
|
+
**v1.3.4** — [Changelog](./changelog.txt)
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@floor/vlist)
|
|
8
|
-
[](https://bundlephobia.com/package/@floor/vlist)
|
|
9
8
|
[](https://github.com/floor/vlist/actions/workflows/ci.yml)
|
|
10
9
|
[](https://github.com/floor/vlist/blob/main/LICENSE)
|
|
11
10
|
|
|
12
11
|
- **Zero dependencies** — no external libraries
|
|
13
12
|
- **Ultra memory efficient** — ~0.1-0.2 MB constant overhead regardless of dataset size
|
|
14
|
-
- **~
|
|
13
|
+
- **~9.4 KB gzipped** — pay only for features you use (vs 20 KB+ monolithic alternatives)
|
|
15
14
|
- **Builder API** — composable features with perfect tree-shaking
|
|
16
15
|
- **Grid, masonry, table, groups, async, selection, scale** — all opt-in
|
|
17
16
|
- **Horizontal & vertical** — semantically correct orientation support
|
|
17
|
+
- **Gap & padding** — built-in item spacing and content inset (CSS shorthand convention)
|
|
18
18
|
- **Reverse, page-scroll, wrap** — every layout mode
|
|
19
19
|
- **Accessible** — WAI-ARIA, keyboard navigation, focus-visible, screen-reader DOM ordering
|
|
20
20
|
- **React, Vue, Svelte** — framework adapters available
|
|
@@ -89,12 +89,12 @@ const list = vlist({
|
|
|
89
89
|
|
|
90
90
|
| Feature | Size | Description |
|
|
91
91
|
|---------|------|-------------|
|
|
92
|
-
| **Base** |
|
|
92
|
+
| **Base** | 9.4 KB | Core virtualization, gap & padding |
|
|
93
93
|
| `withGrid()` | +4.0 KB | 2D grid layout with context injection |
|
|
94
|
-
| `withMasonry()` | +2.
|
|
95
|
-
| `withGroups()` | +4.
|
|
94
|
+
| `withMasonry()` | +2.7 KB | Pinterest-style masonry layout |
|
|
95
|
+
| `withGroups()` | +4.3 KB | Grouped lists with sticky/inline headers |
|
|
96
96
|
| `withAsync()` | +4.0 KB | Lazy loading with adapters |
|
|
97
|
-
| `withSelection()` | +1.
|
|
97
|
+
| `withSelection()` | +1.7 KB | Single/multiple selection + keyboard nav |
|
|
98
98
|
| `withScale()` | +2.6 KB | 1M+ items via scroll compression |
|
|
99
99
|
| `withScrollbar()` | +1.2 KB | Custom scrollbar UI |
|
|
100
100
|
| `withTable()` | +5.0 KB | Data table with columns, resize, sort, groups |
|
|
@@ -216,12 +216,14 @@ const list = vlist({
|
|
|
216
216
|
| **Horizontal grid** | `orientation: 'horizontal'` + `withGrid()` |
|
|
217
217
|
| **Data table** | `withTable({ columns, rowHeight, resizable })` |
|
|
218
218
|
| **Grouped table** | `withTable({ columns, rowHeight })` + `withGroups({ ... })` |
|
|
219
|
+
| **Item gap** | `item: { height: 48, gap: 8 }` |
|
|
220
|
+
| **Content padding** | `padding: 16` or `padding: [16, 12]` or `padding: [16, 12, 20, 8]` |
|
|
219
221
|
| **Masonry** | `withMasonry({ columns: 4, gap: 16 })` |
|
|
220
222
|
| **Page-level scroll** | `withPage()` |
|
|
221
223
|
| **1M+ items** | `withScale()` — auto-compresses scroll space |
|
|
222
224
|
| **Wrap navigation** | `scroll: { wrap: true }` |
|
|
223
225
|
| **Variable heights** | `item: { height: (index) => heights[index] }` |
|
|
224
|
-
| **Zebra striping** | `item: { striped: true }`
|
|
226
|
+
| **Zebra striping** | `item: { striped: true }` or `striped: 'even'` / `'odd'` / `'data'` (group-aware) |
|
|
225
227
|
|
|
226
228
|
See **[vlist.dev](https://vlist.dev)** for live demos of each.
|
|
227
229
|
|
|
@@ -364,6 +366,18 @@ import '@floor/vlist/styles/extras' // optional enhancements
|
|
|
364
366
|
|
|
365
367
|
Override with your own CSS using the `.vlist`, `.vlist-item`, `.vlist-item--selected`, `.vlist-scrollbar` selectors. See [vlist.dev](https://vlist.dev) for theming examples.
|
|
366
368
|
|
|
369
|
+
### Dark Mode
|
|
370
|
+
|
|
371
|
+
Dark mode is supported out of the box via three mechanisms (no extra imports needed):
|
|
372
|
+
|
|
373
|
+
| Method | How it works |
|
|
374
|
+
|--------|-------------|
|
|
375
|
+
| **OS preference** | `prefers-color-scheme: dark` — automatic |
|
|
376
|
+
| **Tailwind `.dark` class** | Add `.dark` to any ancestor element |
|
|
377
|
+
| **`data-theme-mode`** | Set `data-theme-mode="dark"` on `<html>` for explicit control |
|
|
378
|
+
|
|
379
|
+
To force light mode when `prefers-color-scheme` would otherwise activate dark, set `data-theme-mode="light"` on the root element. All dark mode CSS variables and `color-scheme` declarations are handled automatically.
|
|
380
|
+
|
|
367
381
|
## Architecture
|
|
368
382
|
|
|
369
383
|
### Dimension-Agnostic Design (v0.9.0)
|
|
@@ -391,11 +405,11 @@ This makes the codebase clearer and eliminates semantic confusion when working w
|
|
|
391
405
|
|
|
392
406
|
| Configuration | Gzipped |
|
|
393
407
|
|---------------|---------|
|
|
394
|
-
| Base only |
|
|
395
|
-
| + Grid |
|
|
396
|
-
| + Groups |
|
|
397
|
-
| + Async |
|
|
398
|
-
| + Table |
|
|
408
|
+
| Base only | 9.4 KB |
|
|
409
|
+
| + Grid | 13.3 KB |
|
|
410
|
+
| + Groups | 13.7 KB |
|
|
411
|
+
| + Async | 13.4 KB |
|
|
412
|
+
| + Table | 14.3 KB |
|
|
399
413
|
|
|
400
414
|
### Memory Efficiency
|
|
401
415
|
|
|
@@ -446,7 +460,7 @@ const list: VList<Photo> = vlist<Photo>({
|
|
|
446
460
|
## Contributing
|
|
447
461
|
|
|
448
462
|
1. Fork → branch → make changes → add tests → pull request
|
|
449
|
-
2. Run `bun test`
|
|
463
|
+
2. Run `bun test` and `bun run build` before submitting
|
|
450
464
|
|
|
451
465
|
## License
|
|
452
466
|
|
|
@@ -116,6 +116,12 @@ export interface MRefs<T extends VListItem = VListItem> {
|
|
|
116
116
|
gcw: () => number;
|
|
117
117
|
/** getContainerHeight */
|
|
118
118
|
gch: () => number;
|
|
119
|
+
/** gap — item spacing along main axis (0 = none) */
|
|
120
|
+
gp: number;
|
|
121
|
+
/** mainAxisPadding — sum of CSS padding along scroll axis (0 = none) */
|
|
122
|
+
mp: number;
|
|
123
|
+
/** stripeIndexFn — maps layout index to stripe index (-1 = skip) */
|
|
124
|
+
sif: (index: number) => number;
|
|
119
125
|
}
|
|
120
126
|
/** Immutable dependencies the context factory needs from materialize(). */
|
|
121
127
|
export interface MDeps<T extends VListItem = VListItem> {
|
|
@@ -42,5 +42,5 @@ export interface MeasurementState {
|
|
|
42
42
|
* Uses positional parameters (not a deps object) so the minifier can
|
|
43
43
|
* rename every argument — no long property-name strings in the bundle.
|
|
44
44
|
*/
|
|
45
|
-
export declare const createMeasurement: <T extends VListItem>($: MRefs<T>, dom: DOMStructure, isHorizontal: boolean, visibleRange: Range, lastRenderRange: Range, isScrollingFn: () => boolean, updateContentSize: () => void, measuredCache: MeasuredSizeCache | null, measurementEnabled: boolean) => MeasurementState;
|
|
45
|
+
export declare const createMeasurement: <T extends VListItem>($: MRefs<T>, dom: DOMStructure, isHorizontal: boolean, visibleRange: Range, lastRenderRange: Range, isScrollingFn: () => boolean, updateContentSize: () => void, measuredCache: MeasuredSizeCache | null, measurementEnabled: boolean, gap?: number) => MeasurementState;
|
|
46
46
|
//# sourceMappingURL=measurement.d.ts.map
|
package/dist/builder/range.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ import type { Range } from "../types";
|
|
|
6
6
|
import type { SizeCache } from "../rendering/sizes";
|
|
7
7
|
export declare const calcVisibleRange: (scrollPosition: number, containerHeight: number, hc: SizeCache, totalItems: number, out: Range) => void;
|
|
8
8
|
export declare const applyOverscan: (visible: Range, overscan: number, totalItems: number, out: Range) => void;
|
|
9
|
-
export declare const calcScrollToPosition: (index: number, hc: SizeCache, containerHeight: number, totalItems: number, align: "start" | "center" | "end") => number;
|
|
9
|
+
export declare const calcScrollToPosition: (index: number, hc: SizeCache, containerHeight: number, totalItems: number, align: "start" | "center" | "end", mainAxisPadding?: number) => number;
|
|
10
10
|
//# sourceMappingURL=range.d.ts.map
|
package/dist/builder/types.d.ts
CHANGED
|
@@ -28,6 +28,26 @@ export interface BuilderConfig<T extends VListItem = VListItem> {
|
|
|
28
28
|
* - 'horizontal' — Left-to-right scrolling
|
|
29
29
|
*/
|
|
30
30
|
orientation?: "vertical" | "horizontal";
|
|
31
|
+
/**
|
|
32
|
+
* Padding around the list content (default: 0).
|
|
33
|
+
*
|
|
34
|
+
* Works exactly like CSS `padding` — adds inset space between the
|
|
35
|
+
* viewport edge and the items. Applied as CSS padding on the content
|
|
36
|
+
* element, so it works identically for list, grid, and masonry
|
|
37
|
+
* layouts with zero positioning overhead.
|
|
38
|
+
*
|
|
39
|
+
* Follows CSS shorthand convention:
|
|
40
|
+
* - `number` — Equal padding on all four sides
|
|
41
|
+
* - `[vertical, horizontal]` — Top/bottom and left/right
|
|
42
|
+
* - `[top, right, bottom, left]` — Per-side (CSS order)
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* padding: 16 // 16px all sides
|
|
46
|
+
* padding: [16, 12] // 16px top/bottom, 12px left/right
|
|
47
|
+
* padding: [16, 12, 20, 8] // top, right, bottom, left
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
padding?: number | [number, number] | [number, number, number, number];
|
|
31
51
|
/** Reverse mode for chat UIs */
|
|
32
52
|
reverse?: boolean;
|
|
33
53
|
/** Scroll behavior configuration (non-scrollbar options) */
|
|
@@ -113,6 +133,17 @@ export interface BuilderContext<T extends VListItem = VListItem> {
|
|
|
113
133
|
readonly config: ResolvedBuilderConfig;
|
|
114
134
|
/** The raw user-provided builder config (for features that need original values) */
|
|
115
135
|
readonly rawConfig: BuilderConfig<T>;
|
|
136
|
+
/**
|
|
137
|
+
* Adjust a raw scroll position (from calculateScrollToIndex or similar)
|
|
138
|
+
* to account for CSS padding on the content element.
|
|
139
|
+
*
|
|
140
|
+
* CSS padding expands the scrollable area beyond `getTotalSize()`, so
|
|
141
|
+
* the max-scroll clamp must include the padding. The position itself
|
|
142
|
+
* is unchanged — CSS padding already offsets items visually.
|
|
143
|
+
*
|
|
144
|
+
* No-op when padding is 0 — returns the input unchanged.
|
|
145
|
+
*/
|
|
146
|
+
adjustScrollPosition(position: number): number;
|
|
116
147
|
renderer: Renderer<T>;
|
|
117
148
|
dataManager: SimpleDataManager<T>;
|
|
118
149
|
scrollController: ScrollController;
|
|
@@ -253,6 +284,20 @@ export interface BuilderContext<T extends VListItem = VListItem> {
|
|
|
253
284
|
* window scrolling instead of manual scroll position updates.
|
|
254
285
|
*/
|
|
255
286
|
disableWheelHandler(): void;
|
|
287
|
+
/**
|
|
288
|
+
* Get the current stripe-index function.
|
|
289
|
+
* Maps a layout index to the index used for even/odd striping.
|
|
290
|
+
* Default: identity (returns the index as-is).
|
|
291
|
+
* When groups override this, group headers return -1 (skip striping)
|
|
292
|
+
* and data items return a contiguous data-only index.
|
|
293
|
+
*/
|
|
294
|
+
getStripeIndexFn(): (index: number) => number;
|
|
295
|
+
/**
|
|
296
|
+
* Replace the stripe-index function.
|
|
297
|
+
* Used by the groups feature when `striped: "data"` to exclude
|
|
298
|
+
* group headers from the even/odd alternation.
|
|
299
|
+
*/
|
|
300
|
+
setStripeIndexFn(fn: (index: number) => number): void;
|
|
256
301
|
}
|
|
257
302
|
/**
|
|
258
303
|
* VListFeature — the interface for builder features.
|
|
@@ -65,5 +65,5 @@ export interface TableRendererInstance<T extends VListItem = VListItem> {
|
|
|
65
65
|
* @param getTotalItems - Function to get total item count (for ARIA)
|
|
66
66
|
* @returns TableRendererInstance
|
|
67
67
|
*/
|
|
68
|
-
export declare const createTableRenderer: <T extends VListItem = VListItem>(container: HTMLElement, getSizeCache: () => SizeCache, layout: TableLayout<T>, _columns: TableColumn<T>[], classPrefix: string, ariaIdPrefix: string, getTotalItems: () => number, striped?: boolean) => TableRendererInstance<T>;
|
|
68
|
+
export declare const createTableRenderer: <T extends VListItem = VListItem>(container: HTMLElement, getSizeCache: () => SizeCache, layout: TableLayout<T>, _columns: TableColumn<T>[], classPrefix: string, ariaIdPrefix: string, getTotalItems: () => number, striped?: boolean | "data" | "even" | "odd", stripeIndexFn?: () => (index: number) => number) => TableRendererInstance<T>;
|
|
69
69
|
//# sourceMappingURL=renderer.d.ts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
* High-performance virtual scrolling with zero dependencies
|
|
4
4
|
* Builder-only API for optimal tree-shaking
|
|
5
5
|
*
|
|
6
|
+
* For low-level internals (size cache, renderers, selection state, etc.),
|
|
7
|
+
* import from '@floor/vlist/internals' instead.
|
|
8
|
+
*
|
|
6
9
|
* @packageDocumentation
|
|
7
10
|
*/
|
|
8
11
|
export { vlist } from "./builder";
|
|
@@ -18,14 +21,4 @@ export { withSnapshots } from "./features/snapshots";
|
|
|
18
21
|
export { withTable } from "./features/table";
|
|
19
22
|
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";
|
|
20
23
|
export type { VListBuilder, VList, BuilderConfig, VListConfig, VListFeature, BuilderContext, } from "./builder";
|
|
21
|
-
export { createGroupLayout, buildLayoutItems, createGroupedSizeFn, createStickyHeader, isGroupHeader, type GroupsConfig, type GroupBoundary, type LayoutEntry, type GroupHeaderItem, type GroupLayout, type StickyHeader, } from "./features/groups";
|
|
22
|
-
export { createGridLayout, createGridRenderer, type GridConfig, type GridLayout, type GridPosition, type GridRenderer, type ItemRange, } from "./features/grid";
|
|
23
|
-
export { createTableLayout, createTableHeader, createTableRenderer, type TableConfig, type TableColumn, type TableLayout, type TableHeader, type TableRenderer, type TableRendererInstance, type ResolvedColumn, type ColumnResizeEvent, type ColumnSortEvent, type ColumnClickEvent, } from "./features/table";
|
|
24
|
-
export { createMasonryLayout, createMasonryRenderer, type MasonryConfig, type MasonryLayout, type MasonryRenderer, type GetItemFn, type ItemPlacement, } from "./features/masonry";
|
|
25
|
-
export { createSizeCache, type SizeCache, createMeasuredSizeCache, type MeasuredSizeCache, simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges, MAX_VIRTUAL_SIZE, 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";
|
|
26
|
-
export { createSelectionState, selectItems, deselectItems, toggleSelection, selectAll, clearSelection, isSelected, getSelectedIds, getSelectedItems, } from "./features/selection";
|
|
27
|
-
export { createEmitter, type Emitter } from "./events";
|
|
28
|
-
export { createDataManager as createAsyncManager, createSparseStorage, createPlaceholderManager, isPlaceholderItem, filterPlaceholders, mergeRanges, calculateMissingRanges, type DataManager as AsyncManager, type SparseStorage, type PlaceholderManager, } from "./features/async";
|
|
29
|
-
export { createScrollController, createScrollbar, rafThrottle, type ScrollController, type Scrollbar, } from "./features/scrollbar";
|
|
30
|
-
export { createStats, type StatsConfig, type StatsState, type Stats, } from "./utils/stats";
|
|
31
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var{defineProperty:k2,getOwnPropertyNames:iJ,getOwnPropertyDescriptor:tJ}=Object,eJ=Object.prototype.hasOwnProperty;var l2=new WeakMap,J1=(J)=>{var q=l2.get(J),Q;if(q)return q;if(q=k2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")iJ(J).map((j)=>!eJ.call(q,j)&&k2(q,j,{get:()=>J[j],enumerable:!(Q=tJ(J,j))||Q.enumerable}));return l2.set(J,q),q};var Q1=(J,q)=>{for(var Q in q)k2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var a2=(J,q)=>()=>(J&&(q=J(J=0)),q);var j1=(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}},q1=(J,q)=>{let Q=q,j=new Float64Array(0),Y=(K)=>{Q=K,j=new Float64Array(K+1),j[0]=0;for(let Z=0;Z<K;Z++)j[Z+1]=j[Z]+J(Z)};Y(q);let X=(K)=>{if(Q===0)return 0;if(K<=0)return 0;if(K>=j[Q])return Q-1;let Z=0,_=Q-1;while(Z<_){let U=Z+_+1>>>1;if(j[U]<=K)Z=U;else _=U-1}return Z};return{getOffset:(K)=>{if(K<=0)return 0;if(K>=Q)return j[Q];return j[K]},getSize:(K)=>J(K),indexAtOffset:(K)=>X(K),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(K)=>Y(K),isVariable:()=>!0}},$0=(J,q)=>{if(typeof J==="number")return j1(J,q);return q1(J,q)},x0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let Y=0,X=0,K=q;while(K<j&&X<Q)X+=J.getSize(K),Y++,K++;return Math.max(1,Y)},e0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,Y=0;for(let X=Q-1;X>=0;X--){let K=J.getSize(X);if(Y+K>q)break;Y+=K,j++}return Math.max(j,1)},y2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),Y=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+Y*J.getSize(X)};var S0=(J,q,Q)=>{let j=Array.from(q).sort((K,Z)=>K-Z);if(j.length<=1)return;let Y=[];for(let K=0;K<j.length;K++){let Z=Q(j[K]);if(Z)Y.push(Z)}if(Y.length<=1)return;let X=J.firstChild;for(let K=0;K<Y.length;K++){let Z=Y[K];if(Z===X)X=X.nextSibling;else J.insertBefore(Z,X)}};var KJ=3,ZJ="vlist",R2=200,I0=50,BJ=50,NJ=5,_J=2,b0=16000000,WJ=150,DJ="x",GJ=20,z2="_isPlaceholder",VJ="__placeholder_";var A0=(J,q)=>{let Q=q.getTotalSize(),j=Q>b0,Y=j?b0:Q,X=Q>0?Y/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:Y,ratio:X}},j2=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!Y.isCompressed){let V=Q.indexAtOffset(J),b=Q.indexAtOffset(J+q);if(b<j-1)b++;return X.start=Math.max(0,V),X.end=Math.min(j-1,Math.max(0,b)),X}let{virtualSize:K}=Y,_=J/K*j,U=Math.floor(_),W=x0(Q,Math.max(0,U),q,j),L=Math.ceil(_)+W,P=K-q-J;if(P<=q&&P>=-1){let V=e0(Q,q,j),b=Math.max(0,j-V),B=Math.max(0,Math.min(1,1-P/q));U=Math.floor(U+(b-U)*B),L=P<=1?j-1:Math.min(j-1,U+W)}return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,L)),X},OJ=(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},p0=(J,q,Q,j,Y,X,K)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:Z}=X,_=Z-Y,U=_-q;if(U<=Y&&U>=-1){if(q>=_-1){let T=Q.getTotalSize()-Q.getOffset(J);return Y-T}let P=e0(Q,Y,j),V=Math.max(0,j-P),B=q/Z*j,M=Math.max(0,Math.min(1,1-U/Y)),$=Q.getOffset(J)-Q.getOffset(V),O=Q.getOffset(J)-y2(Q,B,j);return O+($-O)*M}let W=q/Z,L=Q.getTotalSize(),E=W*L;return Q.getOffset(J)-E},q2=(J,q,Q,j,Y,X="start")=>{if(j===0)return 0;let K;if(Y.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,Y.virtualSize-Q);K=J/j*Y.virtualSize}else K=q.getOffset(J);let Z=q.getSize(J);switch(X){case"center":K-=(Q-Z)/2;break;case"end":K-=Q-Z;break}let _=Y.virtualSize-Q;return Math.max(0,Math.min(K,_))},EJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let Y=J/j.virtualSize;return Math.floor(Y*Q)}return q.indexAtOffset(J)},AJ=(J,q)=>{if(typeof q==="number")return J*q>b0;return q.getTotalSize()>b0},FJ=(J)=>{if(J<=0)return 0;return Math.floor(b0/J)},LJ=(J,q)=>{let Q=A0(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 X2=()=>{};var z0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var xJ={};Q1(xJ,{createGridRenderer:()=>l0});var V1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let K=document.createElement("div");return K.setAttribute("role","option"),K},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},M1=1,l0=(J,q,Q,j,Y,X,K,Z,_=!1)=>{let U=V1(),W=new Map,L=X,E=!1,P=null,V=0,b=0,B="",M=-1,$=(y)=>{if(P&&V===y)return P;return P=A0(y,Q),V=y,P},O={selected:!1,focused:!1},T=(y,F)=>{return O.selected=y,O.focused=F,O},z=`${Y}-item ${Y}-grid-item`,D=`${Y}-item--selected`,x=`${Y}-item--focused`,S=(y,F)=>{if(typeof F==="string")y.innerHTML=F;else y.replaceChildren(F)},k=(y,F,v)=>{y.classList.toggle(D,F),y.classList.toggle(x,v)},h=(y,F)=>{let v=j.getRow(y);if(F){let H=F.totalItems,p=$(H);if(p.isCompressed)return p0(v,F.scrollPosition,Q,H,F.containerSize,p,F.rangeStart)}return Q.getOffset(v)},n=(y,F)=>{let v=E&&j.getCol(y)===0,H=v?0:j.getCol(y),p=v?0:j.getColumnOffset(H,L),m;if(E){let o=j.getRow(y),s=0,J0=new Set;for(let Q0=0;Q0<y;Q0++){let c=j.getRow(Q0);if(c<o&&!J0.has(c)){let i=Q.getSize(Q0);s+=i,J0.add(c)}}m=s}else m=h(y,F);if(_)return`translate(${Math.round(m)}px, ${Math.round(p)}px)`;return`translate(${Math.round(p)}px, ${Math.round(m)}px)`},g=(y,F)=>{y.style.transform=F},r=(y,F)=>{let v=y.dataset.id?.startsWith("__group_header"),H=v?L:j.getColumnWidth(L),p;if(E||v)p=Q.getSize(F)-j.gap;else{let m=j.getRow(F);p=Q.getSize(m)-j.gap}if(_)y.style.width=`${p}px`,y.style.height=`${H}px`;else y.style.width=`${H}px`,y.style.height=`${p}px`},l=(y,F,v,H,p)=>{let m=U.acquire(),o=T(v,H);if(m.className=z,m.dataset.index=String(y),m.dataset.id=String(F.id),m.dataset.row=String(j.getRow(y)),m.dataset.col=String(j.getCol(y)),m.ariaSelected=String(v),Z)m.id=`${Z}-item-${y}`;if(K){let J0=K();if(J0!==M)M=J0,B=String(J0);m.setAttribute("aria-setsize",B),m.setAttribute("aria-posinset",String(y+1))}r(m,y);let s=q(F,y,o);return S(m,s),k(m,v,H),g(m,p),{element:m,lastItemId:F.id,lastSelected:v,lastFocused:H,lastTransform:p,lastSeenFrame:b}},N=(y,F,v,H,p)=>{if(b++,F.start===0&&y.length>0)E=z0(y[0]);for(let[s,J0]of W)if(s>=F.start&&s<=F.end)J0.lastSeenFrame=b;else if(b-J0.lastSeenFrame>M1)U.release(J0.element),W.delete(s);let m=!1;if(K){let s=K();if(s!==M)M=s,B=String(s),m=!0}let o=null;for(let s=F.start;s<=F.end;s++){let J0=s-F.start,Q0=y[J0];if(!Q0){console.warn(`⚠️ RENDER: Missing item at index ${s} (range: ${F.start}-${F.end}, items.length: ${y.length})`);continue}let c=v.has(Q0.id),i=s===H,a=W.get(s);if(a){let j0=a.lastItemId!==Q0.id,q0=a.lastSelected!==c,X0=a.lastFocused!==i;if(j0||q0||X0){if(j0){let N0=T(c,i),Y0=q(Q0,s,N0);S(a.element,Y0),a.element.dataset.id=String(Q0.id),a.element.dataset.row=String(j.getRow(s)),a.element.dataset.col=String(j.getCol(s)),r(a.element,s)}k(a.element,c,i),a.element.ariaSelected=String(c),a.lastItemId=Q0.id,a.lastSelected=c,a.lastFocused=i}let K0=n(s,p);if(a.lastTransform!==K0)g(a.element,K0),a.lastTransform=K0;if(m)a.element.setAttribute("aria-setsize",B)}else{let j0=n(s,p),q0=l(s,Q0,c,i,j0);if(!o)o=document.createDocumentFragment();o.appendChild(q0.element),W.set(s,q0)}}if(o)J.appendChild(o)},u=(y)=>{for(let[F,v]of W){let H=n(F,y);if(v.lastTransform!==H)g(v.element,H),v.lastTransform=H}},G=(y,F,v,H)=>{let p=W.get(y);if(!p)return;let m=p.lastItemId!==F.id,o=p.lastSelected!==v,s=p.lastFocused!==H;if(m||o||s){let J0=T(v,H),Q0=q(F,y,J0);S(p.element,Q0),k(p.element,v,H),p.element.dataset.id=String(F.id),p.element.ariaSelected=String(v),r(p.element,y),p.lastItemId=F.id,p.lastSelected=v,p.lastFocused=H}},A=(y,F,v)=>{let H=W.get(y);if(!H)return;let p=H.lastSelected!==F,m=H.lastFocused!==v;if(p||m)k(H.element,F,v),H.lastSelected=F,H.lastFocused=v},C=(y)=>{return W.get(y)?.element},w=(y)=>{if(Math.abs(y-L)<1)return;L=y;for(let[F,v]of W){r(v.element,F);let H=n(F);g(v.element,H),v.lastTransform=H}},f=()=>{S0(J,W.keys(),(y)=>W.get(y)?.element)},R=()=>{for(let[,y]of W)U.release(y.element);W.clear()};return{render:N,updatePositions:u,updateItem:G,updateItemClasses:A,getElement:C,sortDOM:f,updateContainerWidth:w,clear:R,destroy:()=>{R(),U.clear()}}};var D2=a2(()=>{X2()});var r2=2,s2=(J=0)=>{let q=[,,,,,];for(let Q=0;Q<5;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},n2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let Y=J.samples[J.sampleIndex];if(Y.position=q,Y.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,K=J.samples[X],Z=q-K.position,_=Q-K.time;J.velocity=_>0?Math.abs(Z)/_:0}return J.lastPosition=q,J.lastTime=Q,J};var J2=(J,q)=>{let Q=new Map,j=(X)=>{let K=Q.get(X);return K!==void 0?K:J},Y=$0(j,q);return{getOffset(X){return Y.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return Y.indexAtOffset(X)},getTotalSize(){return Y.getTotalSize()},getTotal(){return Y.getTotal()},rebuild(X){if(X<Y.getTotal()){for(let K of Q.keys())if(K>=X)Q.delete(K)}Y=$0(j,X)},isVariable(){return!0},setMeasuredSize(X,K){Q.set(X,K)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var Q2=()=>{let J={},q=(Z,_)=>{if(!J[Z])J[Z]=new Set;return J[Z].add(_),()=>Q(Z,_)},Q=(Z,_)=>{J[Z]?.delete(_)};return{on:q,off:Q,emit:(Z,_)=>{J[Z]?.forEach((U)=>{try{U(_)}catch(W){console.error(`[vlist] Error in event handler for "${String(Z)}":`,W)}})},once:(Z,_)=>{let U=(W)=>{Q(Z,U),_(W)};return q(Z,U)},clear:(Z)=>{if(Z)delete J[Z];else for(let _ in J)delete J[_]},listenerCount:(Z)=>{return J[Z]?.size??0}}};var o2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},i2=(J,q,Q,j)=>{let Y=document.createElement("div");if(Y.className=q,j)Y.classList.add(`${q}--horizontal`);Y.setAttribute("tabindex","0");let X=document.createElement("div");if(X.className=`${q}-viewport`,X.setAttribute("tabindex","-1"),j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let K=document.createElement("div");if(K.className=`${q}-content`,K.style.position="relative",j)K.style.height="100%";else K.style.width="100%";let Z=document.createElement("div");if(Z.className=`${q}-items`,Z.setAttribute("role","listbox"),Q)Z.setAttribute("aria-label",Q);if(j)Z.setAttribute("aria-orientation","horizontal");if(Z.style.position="relative",j)Z.style.height="100%";else Z.style.width="100%";return K.appendChild(Z),X.appendChild(K),Y.appendChild(X),J.appendChild(Y),{root:Y,viewport:X,content:K,items:Z}};var t2=(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 e2=(J,q,Q,j,Y)=>{if(j===0||q===0){Y.start=0,Y.end=0;return}let X=Q.indexAtOffset(J),K=x0(Q,X,q,j),Z=X+K;Y.start=Math.max(0,X),Y.end=Math.min(j-1,Math.max(0,Z))},JJ=(J,q,Q,j)=>{if(Q===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q)},QJ=(J,q,Q,j,Y)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),K=q.getOffset(X),Z=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),U;switch(Y){case"center":U=K-(Q-Z)/2;break;case"end":U=K-Q+Z;break;default:U=K}return Math.max(0,Math.min(U,_))};var jJ=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:Y,rawConfig:X,rendered:K,pool:Z,sharedState:_,isHorizontal:U,classPrefix:W,contentSizeHandlers:L,idleHandlers:E,afterScroll:P,clickHandlers:V,keydownHandlers:b,resizeHandlers:B,destroyHandlers:M,methods:$,onScrollFrame:O,resizeObserver:T,renderRange:z}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return Y},get rawConfig(){return X},get renderer(){return{render:(D,x,S,k,h)=>{J.ss=S,J.fi=k,J.ffn()},updateItemClasses:(D,x,S)=>{let k=K.get(D);if(!k)return;k.classList.toggle(`${W}-item--selected`,x),k.classList.toggle(`${W}-item--focused`,S),k.ariaSelected=x?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(D)=>K.get(D)??null,clear:()=>{},destroy:()=>{}}},set renderer(D){},get dataManager(){return J.dm},set dataManager(D){J.dm=D},get scrollController(){return J.sc},set scrollController(D){J.sc=D},state:_,getContainerWidth(){return J.cw},afterScroll:P,idleHandlers:E,clickHandlers:V,keydownHandlers:b,resizeHandlers:B,contentSizeHandlers:L,destroyHandlers:M,methods:$,replaceTemplate(D){J.at=D},replaceRenderer(D){},replaceDataManager(D){J.dm=D},replaceScrollController(D){J.sc=D},getItemsForRange(D){let{dm:x,it:S}=J,k=[];for(let h=D.start;h<=D.end;h++){let n=x?x.getItem(h):S[h];if(n)k.push(n)}return k},getAllLoadedItems(){let D=J.dm;if(D){let x=D.getTotal(),S=[];for(let k=0;k<x;k++){let h=D.getItem(k);if(h)S.push(h)}return S}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let D=J.hc;return{isCompressed:!1,actualSize:D.getTotalSize(),virtualSize:D.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:z.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,D]of K)D.remove(),Z.release(D);K.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(D,x){J.rfn=D,J.ffn=x},setVirtualTotalFn(D){J.vtf=D},rebuildSizeCache(D){J.hc.rebuild(D??J.vtf())},setSizeConfig(D){J.hc=$0(D,J.vtf())},updateContentSize(D){let x=`${D}px`;if(U)Q.content.style.width=x;else Q.content.style.height=x},updateCompressionMode(){},setVisibleRangeFn(D){J.gvr=D},setScrollToPosFn(D){J.gsp=D},setPositionElementFn(D){J.pef=D},setScrollFns(D,x){J.sgt=D,J.sst=(S)=>{x(S),O()}},setScrollTarget(D){J.st.removeEventListener("scroll",O),J.st=D,J.st.addEventListener("scroll",O,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(D){J.gcw=D.width,J.gch=D.height,J.cw=D.width(),J.ch=D.height(),_.viewportState.containerSize=U?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,T.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},qJ=(J,q,Q)=>{let{rendered:j,itemState:Y,contentSizeHandlers:X,applyTemplate:K,updateContentSize:Z}=q,_=()=>{J.hc.rebuild(J.vtf()),Z(),Q.updateCompressionMode();for(let U=0;U<X.length;U++)X[U]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(U)=>J.it[U],isItemLoaded:(U)=>U>=0&&U<J.it.length&&J.it[U]!==void 0,getItemsInRange:(U,W)=>{let L=J.it,E=[],P=Math.max(0,U),V=Math.min(W,L.length-1);for(let b=P;b<=V;b++)E.push(L[b]);return E},setTotal:(U)=>{},setItems:(U,W=0,L)=>{let E=J.it;if(W===0&&(L!==void 0||E.length===0))J.it=U;else{let P=W+U.length;if(E.length<P)E.length=P;for(let V=0;V<U.length;V++)E[W+V]=U[V]}if(J.ii)_()},updateItem:(U,W)=>{let L=J.it;if(U<0||U>=L.length)return!1;let E=L[U];if(!E)return!1;L[U]={...E,...W};let P=j.get(U);if(P)K(P,J.at(L[U],U,Y)),P.dataset.id=String(L[U].id);return!0},removeItem:(U)=>{if(U<0||U>=J.it.length)return!1;if(J.it.splice(U,1),J.ii)_();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),Z(),J.ffn()}}},XJ=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(Y)=>{J.sst(Y),J.ls=Y,J.rfn()},scrollBy:(Y)=>{let X=J.sgt()+Y;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(Y=2)=>J.sab(Y),getScrollPercentage:()=>{let Y=J.hc.getTotalSize(),X=Math.max(0,Y-J.ch);return X>0?J.ls/X:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>Q.root.classList.contains(`${j}--scrolling`),updateConfig:()=>{},enableCompression:()=>{J.sic=!0},disableCompression:()=>{J.sic=!1},isCompressed:()=>J.sic,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{J.ch=Y},destroy:()=>{}}};var YJ=(J,q,Q,j,Y,X,K,Z,_)=>{let U=(b,B=!1)=>{let M=Q?q.viewport.scrollWidth-q.viewport.clientWidth:q.viewport.scrollHeight-q.viewport.clientHeight;if(M<=0||b<M-2)return!1;let $=Math.max(0,J.hc.getTotalSize()-(Q?J.cw:J.ch));if($>b){if(J.sst($),J.ls=$,B)J.rfn();return!0}return!1};if(!_||!Z)return{ob:null,ei:null,mc:null,fl:()=>{},se:U};let W=new WeakMap,L=0,E=!1,P=null,V=()=>{if(E){let b=J.sgt();K(),E=!1,U(b,!0)}};return P=new ResizeObserver((b)=>{if(J.id)return;let B=!1,M=j.start;for(let $ of b){let O=W.get($.target);if(O===void 0)continue;let T=Q?$.borderBoxSize[0].inlineSize:$.borderBoxSize[0].blockSize;if(!Z.isMeasured(O)){let z=Z.getSize(O);if(Z.setMeasuredSize(O,T),B=!0,O<M&&T!==z)L+=T-z;P.unobserve($.target);let D=$.target;if(Q)D.style.width=`${T}px`;else D.style.height=`${T}px`}}if(!B)return;if(Z.rebuild(J.vtf()),J.hc=Z,L!==0){let $=J.sgt();J.sst($+L),J.ls=$+L,L=0}if(X())E=!0;else{let $=J.sgt();K(),E=!1,U($)}Y.start=-1,Y.end=-1,J.rfn()}),{ob:P,ei:W,mc:Z,fl:V,se:U}};var P2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,P0=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},f0=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,K,Z)=>{if(j(),Math.abs(K-X)<1){J.scrollTo(K);return}let _=performance.now(),U=(W)=>{let L=W-_,E=Math.min(L/Z,1),P=X+(K-X)*P2(E);if(J.scrollTo(P),q(),E<1)Q=requestAnimationFrame(U);else Q=null};Q=requestAnimationFrame(U)},cancelScroll:j}};var UJ=(J,q,Q,j,Y,X,K,Z,_,U,W,L,E,P,V,b,B,M)=>{let $=(G)=>{_.dataManager.setItems(G,0,G.length)},O=U?(G)=>{let A=J.sab(2),C=J.it.length;if(_.dataManager.setItems(G,C),A&&J.it.length>0){let w=J.gsp(J.it.length-1,J.hc,J.ch,J.it.length,"end");J.sst(w),J.ls=w,J.rfn()}}:(G)=>{let A=J.it.length;_.dataManager.setItems(G,A)},T=U?(G)=>{let A=J.sgt(),C=J.hc.getTotalSize(),w=[...J.it];_.dataManager.clear(),_.dataManager.setItems([...G,...w],0);let R=J.hc.getTotalSize()-C;if(R>0)J.sst(A+R),J.ls=A+R}:(G)=>{let A=[...J.it];_.dataManager.clear(),_.dataManager.setItems([...G,...A],0)},z=(G,A)=>{_.dataManager.updateItem(G,A)},D=(G)=>{_.dataManager.removeItem(G)},x=async()=>{if(_.dataManager.reload)await _.dataManager.reload()},S=null,k=()=>{if(S!==null)cancelAnimationFrame(S),S=null},h=(G,A,C)=>{if(k(),Math.abs(A-G)<1){J.sst(A),J.ls=A,J.rfn();return}let w=performance.now(),f=(R)=>{let I=R-w,y=Math.min(I/C,1),F=G+(A-G)*P2(y);if(J.sst(F),J.ls=F,J.rfn(),y<1)S=requestAnimationFrame(f);else S=null};S=requestAnimationFrame(f)},n=(G,A)=>{let{align:C,behavior:w,duration:f}=P0(A),R=J.vtf(),I=G;if(W&&R>0)I=(I%R+R)%R;let y=J.gsp(I,J.hc,J.ch,R,C);if(w==="smooth")h(J.sgt(),y,f);else k(),J.sst(y)},g=()=>J.sgt(),r=(G,A)=>{return Q.on(G,A)},l=(G,A)=>{Q.off(G,A)},N=()=>{if(J.id)return;if(J.id=!0,_.state.isDestroyed=!0,q.items.removeEventListener("click",L),q.items.removeEventListener("dblclick",E),q.root.removeEventListener("keydown",P),J.st.removeEventListener("scroll",V),b.disconnect(),B(),J.wh)q.viewport.removeEventListener("wheel",J.wh);M();for(let G=0;G<Z.length;G++)Z[G]();for(let G of K)if(G.destroy)G.destroy();k();for(let[,G]of j)G.remove(),Y.release(G);j.clear(),Y.clear(),Q.emit("destroy",void 0),Q.clear(),q.root.remove()},u={get element(){return q.root},get items(){if(X.has("_getItems"))return X.get("_getItems")();return J.it},get total(){if(X.has("_getTotal"))return X.get("_getTotal")();return J.vtf()},setItems:X.has("setItems")?X.get("setItems"):$,appendItems:X.has("appendItems")?X.get("appendItems"):O,prependItems:X.has("prependItems")?X.get("prependItems"):T,updateItem:X.has("updateItem")?X.get("updateItem"):z,removeItem:X.has("removeItem")?X.get("removeItem"):D,reload:X.has("reload")?X.get("reload"):x,scrollToIndex:X.has("scrollToIndex")?X.get("scrollToIndex"):n,cancelScroll:X.has("cancelScroll")?X.get("cancelScroll"):k,getScrollPosition:X.has("getScrollPosition")?X.get("getScrollPosition"):g,on:r,off:l,destroy:N};for(let[G,A]of X){if(G.charCodeAt(0)===95||G==="setItems"||G==="appendItems"||G==="prependItems"||G==="updateItem"||G==="removeItem"||G==="reload"||G==="scrollToIndex"||G==="scrollToItem"||G==="cancelScroll"||G==="getScrollPosition")continue;u[G]=A}return u};var X1=0,MJ=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",Y=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(Y==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(Y!=null){if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let K=new Map,Z=!1,_={use(U){if(Z)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(U.name,U),_},build(){if(Z)throw Error("[vlist/builder] .build() can only be called once");return Z=!0,Y1(J,K,q,Y,X??null)}};return _};function Y1(J,q,Q,j,Y){let{item:X,items:K,overscan:Z=KJ,classPrefix:_=ZJ,ariaLabel:U,reverse:W=!1,scroll:L}=J,E=L,P=E?.wheel??!0,V=E?.wrap??!1,b=W,B=`${_}-${X1++}`,M=j??Y,$=j==null&&Y!=null,O=typeof matchMedia==="function"&&matchMedia("(pointer: coarse)").matches&&!matchMedia("(pointer: fine)").matches,T=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,z={overscan:Z,classPrefix:_,reverse:b,wrap:V,horizontal:Q,ariaIdPrefix:B},D=Array.from(q.values()).sort((d,t)=>(d.priority??50)-(t.priority??50)),x=new Set(D.map((d)=>d.name));for(let d of D)if(d.conflicts){for(let t of d.conflicts)if(x.has(t))throw Error(`[vlist/builder] ${d.name} and ${t} cannot be combined`)}if(b){if(x.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let S=o2(J.container),k=i2(S,_,U,Q);if(E?.wheel===!1)if(Q)k.viewport.style.overflowX="hidden";else k.viewport.style.overflow="hidden";if(E?.scrollbar==="none")k.viewport.classList.add(`${_}-viewport--no-scrollbar`);let h=Q2(),n=K||[],g=typeof M==="function"&&(q.has("withGrid")||q.has("withMasonry")),r=$?J2(Y,n.length):$0(M,g?0:n.length),l=t2(),N={it:n,hc:r,ch:k.viewport.clientHeight,cw:k.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:s2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>k.viewport.scrollLeft:()=>k.viewport.scrollTop,sst:Q?(d)=>{k.viewport.scrollLeft=d}:(d)=>{k.viewport.scrollTop=d},sab:(d=2)=>{let t=N.hc.getTotalSize();return N.ls+N.ch>=t-d},sic:!1,rfn:null,ffn:null,gvr:(d,t,e,Z0,G0)=>{e2(d,t,e,Z0,G0)},gsp:(d,t,e,Z0,G0)=>{return QJ(d,t,e,Z0,G0)},pef:null,at:X.template,vre:!0,st:k.viewport,wh:null,gcw:()=>N.cw,gch:()=>N.ch};N.vtf=()=>N.dm?N.dm.getTotal():N.it.length;let u=null,G=!1,A={start:0,end:0},C={start:0,end:0},w={start:-1,end:-1},f={viewportState:{scrollPosition:0,containerSize:Q?N.cw:N.ch,totalSize:N.hc.getTotalSize(),actualSize:N.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},R=new Map,I=()=>{S0(k.items,R.keys(),(d)=>R.get(d))},y=()=>{let d=`${N.hc.getTotalSize()}px`;if(Q)k.content.style.width=d;else k.content.style.height=d},v=YJ(N,k,Q,A,w,()=>G,y,$?r:null,$),H={selected:!1,focused:!1},p=`${_}-item`,m=X.striped===!0,o=`${_}-item--odd`,s=[],J0=[],Q0=[],c=[],i=[],a=[],j0=[],q0=new Map,X0=null,K0=null,N0=!1,Y0=()=>{if(N0)return;N0=!0,X0=q0.get("_getSelectedIds")??null,K0=q0.get("_getFocusedIndex")??null},W0=(d,t)=>{if(typeof t==="string")d.innerHTML=t;else d.replaceChildren(t)},y0=(d,t)=>{let e=Math.round(N.hc.getOffset(t));if(Q)d.style.transform=`translateX(${e}px)`;else d.style.transform=`translateY(${e}px)`};N.pef=y0;let _0=(d,t)=>{let e=l.acquire();e.className=p;let Z0=!$||v.mc&&v.mc.isMeasured(d);if(Q){if(Z0)e.style.width=`${N.hc.getSize(d)}px`;else e.style.width="";if(T!=null)e.style.height=`${T}px`}else if(Z0)e.style.height=`${N.hc.getSize(d)}px`;else e.style.height="";if(e.dataset.index=String(d),e.dataset.id=String(t.id),e.ariaSelected="false",e.id=`${B}-item-${d}`,N.la=String(N.vtf()),e.setAttribute("aria-setsize",N.la),e.setAttribute("aria-posinset",String(d+1)),String(t.id).startsWith("__placeholder_"))e.classList.add(`${_}-item--placeholder`);if(m)e.classList.toggle(o,(d&1)===1);return W0(e,N.at(t,d,H)),N.pef(e,d),e},F0=()=>{if(N.id)return;Y0();let d=X0?X0():N.ss,t=K0?K0():N.fi,e=N.vtf(),Z0=Q?N.cw:N.ch;if(N.gvr(N.ls,Z0,N.hc,e,A),JJ(A,Z,e,C),C.start===w.start&&C.end===w.end){if(N.sic)for(let[U0,V0]of R)N.pef(V0,U0);return}let G0=String(e),M0=G0!==N.la;N.la=G0;for(let[U0,V0]of R)if(U0<C.start||U0>C.end)V0.remove(),l.release(V0),R.delete(U0);let B0=document.createDocumentFragment(),E0=[],T0=[];for(let U0=C.start;U0<=C.end;U0++){let V0=N.dm?N.dm.getItem(U0):N.it[U0];if(V0===void 0)continue;let O0=R.get(U0);if(O0){let H0=O0.dataset.id,g0=String(V0.id);if(H0!==g0){let oJ=H0?.startsWith("__placeholder_"),d2=g0.startsWith("__placeholder_");W0(O0,N.at(V0,U0,H)),O0.dataset.id=g0;let c2=!$||v.mc&&v.mc.isMeasured(U0);if(Q)O0.style.width=c2?`${N.hc.getSize(U0)}px`:"";else O0.style.height=c2?`${N.hc.getSize(U0)}px`:"";if(d2)O0.classList.add(`${_}-item--placeholder`);else O0.classList.remove(`${_}-item--placeholder`);if(oJ&&!d2)O0.classList.add(`${_}-item--replaced`),setTimeout(()=>{O0.classList.remove(`${_}-item--replaced`)},300)}N.pef(O0,U0);let t0=d.has(V0.id),nJ=U0===t;if(O0.classList.toggle(`${_}-item--selected`,t0),O0.classList.toggle(`${_}-item--focused`,nJ),O0.ariaSelected=t0?"true":"false",M0)O0.setAttribute("aria-setsize",N.la)}else{let H0=_0(U0,V0);T0.push({index:U0,element:H0});let g0=d.has(V0.id),t0=U0===t;if(g0)H0.classList.add(`${_}-item--selected`),H0.ariaSelected="true";if(t0)H0.classList.add(`${_}-item--focused`);B0.appendChild(H0),E0.push({index:U0,element:H0})}}if(E0.length>0){k.items.appendChild(B0);for(let{index:U0,element:V0}of E0)R.set(U0,V0)}if($&&v.ob&&v.mc&&v.ei){for(let{index:U0,element:V0}of T0)if(!v.mc.isMeasured(U0))v.ei.set(V0,U0),v.ob.observe(V0)}w.start=C.start,w.end=C.end,f.lastRenderRange.start=C.start,f.lastRenderRange.end=C.end,f.viewportState.scrollPosition=N.ls,f.viewportState.visibleRange.start=A.start,f.viewportState.visibleRange.end=A.end,f.viewportState.renderRange.start=C.start,f.viewportState.renderRange.end=C.end,h.emit("range:change",{range:{start:C.start,end:C.end}})},D0=()=>{w.start=-1,w.end=-1,N.rfn()};N.rfn=F0,N.ffn=D0;let L0=()=>{k.root.classList.remove(`${_}--scrolling`),G=!1,N.vt.velocity=0,N.vt.sampleCount=0,h.emit("velocity:change",{velocity:0,reliable:!1}),v.fl(),I();for(let d=0;d<J0.length;d++)J0[d]();h.emit("scroll:idle",{scrollPosition:N.ls})},w0=()=>{if(u)clearTimeout(u);u=setTimeout(L0,E?.idleTimeout??WJ)},o0=()=>{if(N.id)return;let d=N.sgt();if(d===N.ls&&G)return;let t=d>=N.ls?"down":"up";if(N.vt=n2(N.vt,d),!k.root.classList.contains(`${_}--scrolling`))k.root.classList.add(`${_}--scrolling`);G=!0,N.ls=d,N.rfn(),h.emit("scroll",{scrollPosition:d,direction:t}),h.emit("velocity:change",{velocity:N.vt.velocity,reliable:N.vt.sampleCount>=r2});for(let e=0;e<s.length;e++)s[e](d,t);w0()},v0=null;if(N.st.addEventListener("scroll",o0,{passive:!0}),P&&!Q&&!O)v0=(d)=>{if(f.viewportState.isCompressed)return;let t=k.viewport.scrollWidth>k.viewport.clientWidth;if(t&&Math.abs(d.deltaX)>Math.abs(d.deltaY))return;if(d.preventDefault(),t&&d.deltaX!==0)k.viewport.scrollLeft+=d.deltaX;let e=N.sgt(),Z0=k.viewport.scrollHeight-k.viewport.clientHeight,G0=Math.max(0,Math.min(e+d.deltaY,Z0));if(Math.abs(G0-e)<1)return;N.sst(G0),o0()},N.wh=v0,k.viewport.addEventListener("wheel",v0,{passive:!1});else if(Q&&P)v0=(d)=>{if(d.deltaX)return;d.preventDefault(),k.viewport.scrollLeft+=d.deltaY},N.wh=v0,k.viewport.addEventListener("wheel",v0,{passive:!1});let h2=(d)=>{let t=d.target.closest("[data-index]");if(!t)return null;let e=parseInt(t.dataset.index??"-1",10);if(e<0)return null;let Z0=N.dm?.getItem(e)??N.it[e];if(!Z0||Z0.__groupHeader)return null;return{item:Z0,index:e}},u2=(d)=>{let t=h2(d);if(t)h.emit("item:click",{item:t.item,index:t.index,event:d});for(let e=0;e<Q0.length;e++)Q0[e](d)},g2=(d)=>{let t=h2(d);if(t)h.emit("item:dblclick",{item:t.item,index:t.index,event:d})},x2=(d)=>{for(let t=0;t<c.length;t++)c[t](d)};k.items.addEventListener("click",u2),k.items.addEventListener("dblclick",g2),k.root.addEventListener("keydown",x2);let H2=new ResizeObserver((d)=>{if(N.id)return;for(let t of d){let e=t.contentRect.height,Z0=t.contentRect.width,G0=Q?Z0:e,M0=Q?N.cw:N.ch;if(N.cw=Z0,N.ch=e,Math.abs(G0-M0)>1){if(f.viewportState.containerSize=G0,N.ii)y(),N.rfn(),h.emit("resize",{height:e,width:Z0})}if(N.ii)for(let B0=0;B0<i.length;B0++)i[B0](Z0,e)}});if(N.vre)H2.observe(k.viewport);let $2={dom:k,emitter:h,resolvedConfig:z,rawConfig:J,rendered:R,pool:l,itemState:H,sharedState:f,renderRange:C,isHorizontal:Q,classPrefix:_,contentSizeHandlers:a,idleHandlers:J0,afterScroll:s,clickHandlers:Q0,keydownHandlers:c,resizeHandlers:i,destroyHandlers:j0,methods:q0,onScrollFrame:o0,resizeObserver:H2,applyTemplate:W0,updateContentSize:y},i0=jJ(N,$2);N.dm=qJ(N,$2,i0),N.sc=XJ(N,$2);let m2=new Map;for(let d of D)if(d.methods)for(let t of d.methods){let e=m2.get(t);if(e)throw Error(`[vlist/builder] Method "${t}" is registered by both "${e}" and "${d.name}"`);m2.set(t,d.name)}for(let d of D)d.setup(i0);if(!q0.has("_getFocusedIndex")){let d=-1,t=`${_}-item--focused`,e=(M0,B0)=>{let E0=N.vtf();if(B0<0||B0>=E0)return;d=B0,k.root.setAttribute("aria-activedescendant",`${B}-item-${B0}`);let T0=Q?N.cw:N.ch;if(N.sst(N.gsp(B0,N.hc,T0,E0,"center")),N.ls=N.sgt(),N.rfn(),M0>=0&&M0!==B0)R.get(M0)?.classList.remove(t);R.get(B0)?.classList.add(t)},Z0=()=>{if(N.id)return;if(!k.root.matches(":focus-visible"))return;let M0=N.vtf();if(M0===0)return;e(-1,d>=0?Math.min(d,M0-1):0)};k.root.addEventListener("focusin",Z0);let G0=(M0)=>{if(N.id)return;let B0=M0.relatedTarget;if(B0&&k.root.contains(B0))return;if(d>=0)R.get(d)?.classList.remove(t);k.root.removeAttribute("aria-activedescendant")};k.root.addEventListener("focusout",G0),c.push((M0)=>{if(N.id)return;let B0=N.vtf();if(B0===0)return;let E0=d,T0=E0;switch(M0.key){case"ArrowUp":T0=E0<=0?B0-1:E0-1;break;case"ArrowDown":T0=E0>=B0-1?0:E0+1;break;case"Home":T0=0;break;case"End":T0=B0-1;break;default:return}M0.preventDefault(),e(E0,T0)}),j0.push(()=>{k.root.removeEventListener("focusin",Z0),k.root.removeEventListener("focusout",G0)})}if(N.ii=!0,i0.state.isInitialized=!0,y(),N.rfn(),b&&N.it.length>0){let d=N.gsp(N.it.length-1,N.hc,N.ch,N.it.length,"end");N.sst(d),N.ls=d,N.rfn()}return UJ(N,k,h,R,l,q0,D,j0,i0,b,V,u2,g2,x2,o0,H2,()=>{if(v.ob)v.ob.disconnect()},()=>{if(u)clearTimeout(u)})}X2();var h0=(J,q,Q={},j="vlist",Y=!1)=>{let{autoHide:X=!0,autoHideDelay:K=1000,minThumbSize:Z=30,showOnHover:_=!0,hoverZoneWidth:U=16,showOnViewportEnter:W=!0}=Q,L=0,E=0,P=0,V=0,b=!1,B=!1,M=0,$=0,O=0,T=null,z=!1,D=null,x=null,S=Y?"width":"height",k=Y?"translateX":"translateY",h=Y?(s)=>s.clientX:(s)=>s.clientY,n=Y?"left":"top",g=document.createElement("div"),r=document.createElement("div"),l=_?document.createElement("div"):null,N=()=>{if(g.className=`${j}-scrollbar`,r.className=`${j}-scrollbar-thumb`,Y)g.classList.add(`${j}-scrollbar--horizontal`);if(g.appendChild(r),J.appendChild(g),l){if(l.className=`${j}-scrollbar-hover`,Y)l.classList.add(`${j}-scrollbar-hover--horizontal`),l.style.height=`${U}px`;else l.style.width=`${U}px`;J.appendChild(l)}},u=()=>{if(T)clearTimeout(T),T=null},G=()=>{if(!X)return;u(),T=setTimeout(C,K)},A=()=>{if(L<=E)return;if(u(),!z)g.classList.add(`${j}-scrollbar--visible`),z=!0;if(X&&!b&&!B)G()},C=()=>{if(b||B)return;g.classList.remove(`${j}-scrollbar--visible`),z=!1},w=(s,J0)=>{L=s,E=J0;let Q0=L>E;if(g.style.display=Q0?"":"none",!Q0){C();return}let c=E/L;P=Math.max(Z,c*E),r.style[S]=`${P}px`,V=E-P,f(O)},f=(s)=>{if(O=s,L<=E||V<=0)return;let J0=L-E,c=Math.min(1,Math.max(0,s/J0))*V;r.style.transform=`${k}(${c}px)`},R=(s)=>{if(s.target===r)return;let J0=g.getBoundingClientRect(),i=h(s)-J0[n]-P/2,j0=Math.max(0,Math.min(i,V))/V,q0=L-E,X0=j0*q0;q(X0),A()},I=(s)=>{s.preventDefault(),s.stopPropagation(),b=!0,M=h(s),$=O,u(),g.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",y),document.addEventListener("mouseup",F)},y=(s)=>{if(!b)return;let J0=h(s)-M,Q0=V>0?J0/V:0,c=L-E,i=Q0*c,a=Math.max(0,Math.min($+i,c)),q0=a/c*V;if(r.style.transform=`${k}(${q0}px)`,x=a,D===null)D=requestAnimationFrame(()=>{if(x!==null)q(x);D=null})},F=()=>{if(b=!1,D!==null)cancelAnimationFrame(D),D=null;if(x!==null)q(x),x=null;if(g.classList.remove(`${j}-scrollbar--dragging`),X&&!B)G();document.removeEventListener("mousemove",y),document.removeEventListener("mouseup",F)},v=()=>{if(W)A()},H=()=>{if(!b){if(B=!1,X)G()}},p=()=>{B=!0,u(),A()},m=()=>{if(B=!1,!b&&X)G()},o=()=>{if(u(),D!==null)cancelAnimationFrame(D),D=null;if(g.removeEventListener("click",R),g.removeEventListener("mouseenter",p),g.removeEventListener("mouseleave",m),r.removeEventListener("mousedown",I),J.removeEventListener("mouseenter",v),J.removeEventListener("mouseleave",H),document.removeEventListener("mousemove",y),document.removeEventListener("mouseup",F),l){if(l.removeEventListener("mouseenter",p),l.removeEventListener("mouseleave",m),l.parentNode)l.parentNode.removeChild(l)}if(g.parentNode)g.parentNode.removeChild(g)};if(N(),g.addEventListener("click",R),g.addEventListener("mouseenter",p),g.addEventListener("mouseleave",m),r.addEventListener("mousedown",I),J.addEventListener("mouseenter",v),J.addEventListener("mouseleave",H),l)l.addEventListener("mouseenter",p),l.addEventListener("mouseleave",m);return{show:A,hide:C,updateBounds:w,updatePosition:f,isVisible:()=>z,destroy:o}};var TJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:X,horizontal:K}=Y;if(q=h0(j.viewport,(U)=>Q.scrollController.scrollTo(U),J??{},X,K),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let Z=Q.getCachedCompression();q.updateBounds(Z.virtualSize,Q.state.viewportState.containerSize);let _=q;Q.afterScroll.push((U,W)=>{_.updatePosition(U),_.show()}),Q.resizeHandlers.push((U,W)=>{if(_){let L=Q.getCachedCompression();_.updateBounds(L.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let U=Q.getCachedCompression();_.updateBounds(U.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var bJ=(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}},Y2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let Y=J.samples[J.sampleIndex];if(Y.position=q,Y.time=Q,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+8)%8,K=J.samples[X],Z=q-K.position,_=Q-K.time;J.velocity=_>0?Z/_:0}return J.lastPosition=q,J.lastTime=Q,J},U1=(J)=>J.sampleCount>=3,HJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:Y=!1,idleTimeout:X=150,onScroll:K,onIdle:Z,scrollElement:_,horizontal:U=!1}=q,W=!!_,L=0,E=0,P=W?U?window.innerWidth:window.innerHeight:U?J.clientWidth:J.clientHeight,V=q.compressed??!1,b=q.compression,B=bJ(),M=!1,$=null,T=U2(()=>{let H=U?J.scrollLeft:J.scrollTop,p=H>=L?"down":"up";if(B=Y2(B,H),L=H,K)K({scrollTop:L,direction:p,velocity:B.velocity});h()}),D=U2(()=>{let H=J.getBoundingClientRect(),p=U?Math.max(0,-H.left):Math.max(0,-H.top),m=p>=L?"down":"up";if(B=Y2(B,p),L=p,!M)M=!0;if(K)K({scrollTop:L,direction:m,velocity:B.velocity});h()}),x=(H)=>{H.preventDefault()},S=(H)=>{if(H.deltaX)return;H.preventDefault(),J.scrollLeft+=H.deltaY},k=(H)=>{if(!V)return;H.preventDefault();let p=(U?H.deltaX||H.deltaY:H.deltaY)*j,m=L+p;if(Y)m=L+p*0.3;if(m=Math.max(0,Math.min(m,E)),m!==L){let s=m>=L?"down":"up";if(B=Y2(B,m),L=m,!M)M=!0;if(K)K({scrollTop:L,direction:s,velocity:B.velocity});h()}},h=()=>{if($)clearTimeout($);$=setTimeout(()=>{if(M=!1,B=bJ(L),Z)Z()},X)},n=(H)=>{if(V)return;if(V=!0,b=H,E=H.virtualSize-P,W)return;if(T.cancel(),J.removeEventListener("scroll",T),!Q)J.removeEventListener("wheel",x);else if(U)J.removeEventListener("wheel",S);if(U)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",k,{passive:!1});let p=U?J.scrollLeft:J.scrollTop;if(p>0){let m=U?b?.actualSize??J.scrollWidth:b?.actualSize??J.scrollHeight;L=p/m*E}if(U)J.scrollLeft=0;else J.scrollTop=0},g=()=>{if(!V)return;if(V=!1,W){b=void 0;return}if(J.removeEventListener("wheel",k),U)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",T,{passive:!0}),!Q)J.addEventListener("wheel",x,{passive:!1});else if(U)J.addEventListener("wheel",S,{passive:!1});if(b&&L>0){let p=L/E*(b.actualSize-P);if(U)J.scrollLeft=p;else J.scrollTop=p}b=void 0},r=()=>{if(W||V)return L;return U?J.scrollLeft:J.scrollTop},l=(H,p=!1)=>{let m=Math.max(0,Math.min(H,E||1/0));if(W){let o=J.getBoundingClientRect();if(U){let s=o.left+window.scrollX;window.scrollTo({left:s+m,behavior:p?"smooth":"auto"})}else{let s=o.top+window.scrollY;window.scrollTo({top:s+m,behavior:p?"smooth":"auto"})}}else if(V){if(m===L)return;let s=m>=L?"down":"up";if(B=Y2(B,m),L=m,!M)M=!0;if(K)K({scrollTop:L,direction:s,velocity:B.velocity});h()}else if(U)J.scrollTo({left:m,behavior:p?"smooth":"auto"});else J.scrollTo({top:m,behavior:p?"smooth":"auto"})},N=(H)=>{l(r()+H)},u=()=>{return r()<=0},G=(H=0)=>{let p=r(),m=W||V?E:U?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return p>=m-H},A=()=>{let H=r(),p=W||V?E:U?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(p<=0)return 0;return Math.min(1,Math.max(0,H/p))},C=(H)=>{if(H.compression)b=H.compression,E=b.virtualSize-P},w=()=>V,f=()=>Math.abs(B.velocity),R=()=>U1(B),I=()=>M,y=()=>W,F=(H)=>{if(P=H,b)E=b.virtualSize-P},v=()=>{if($)clearTimeout($);if(W)D.cancel(),window.removeEventListener("scroll",D);else T.cancel(),J.removeEventListener("scroll",T),J.removeEventListener("wheel",k),J.removeEventListener("wheel",x),J.removeEventListener("wheel",S)};if(W){if(V&&b)E=b.virtualSize-P;window.addEventListener("scroll",D,{passive:!0})}else if(V&&b){if(E=b.virtualSize-P,U)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",k,{passive:!1})}else{if(U)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",T,{passive:!0}),!Q)J.addEventListener("wheel",x,{passive:!1});else if(U)J.addEventListener("wheel",S,{passive:!1})}return{getScrollTop:r,scrollTo:l,scrollBy:N,isAtTop:u,isAtBottom:G,getScrollPercentage:A,getVelocity:f,isTracking:R,isScrolling:I,updateConfig:C,enableCompression:n,disableCompression:g,isCompressed:w,isWindowMode:y,updateContainerHeight:F,destroy:v}},U2=(J)=>{let q=null,Q=null,j=(...Y)=>{if(Q=Y,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var K1=0.65,Z1=0.5,B1=0.95,N1=0.1,_1=5,W1=100,$J=()=>{let J=null,q=0,Q=!1,j=0,Y=null,X=0,K=0,Z=null,_=[];return{name:"withScale",priority:20,setup(U){let{dom:W,config:L}=U,{classPrefix:E,horizontal:P}=L,V=()=>{let $=U.getVirtualTotal(),O=A0($,U.sizeCache);if(O.isCompressed&&!Q){Q=!0,U.scrollController.enableCompression(O),U.updateContentSize(O.virtualSize),U.setScrollFns(()=>q,(g)=>{if(q=g,j=g,Y!==null)cancelAnimationFrame(Y),Y=null});let T=()=>{let g=j-q;if(Math.abs(g)<Z1)q=j,Y=null;else{q+=g*K1;let l=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;q=Math.max(0,Math.min(q,l)),Y=requestAnimationFrame(T)}U.scrollController.scrollTo(q)},z=W.viewport,D=(g)=>{g.preventDefault();let l=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+g.deltaY,l)),Y===null)Y=requestAnimationFrame(T)};z.addEventListener("wheel",D,{passive:!1});let x=()=>{if(Z!==null)cancelAnimationFrame(Z),Z=null},S=(g)=>{if(x(),Y!==null)cancelAnimationFrame(Y),Y=null;let r=g.touches[0];if(!r)return;let l=P?r.clientX:r.clientY;X=l,K=q,_=[{time:performance.now(),y:l}]},k=(g)=>{g.preventDefault();let r=g.touches[0];if(!r)return;let l=P?r.clientX:r.clientY,N=performance.now();if(_.push({time:N,y:l}),_.length>_1)_.shift();let u=X-l,A=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,C=Math.max(0,Math.min(K+u,A));q=C,j=C,U.scrollController.scrollTo(C)},h=(g)=>{let r=performance.now(),l=_.filter((A)=>r-A.time<W1),N=0;if(l.length>=2){let A=l[0],C=l[l.length-1],w=C.time-A.time;if(w>0)N=(A.y-C.y)/w}if(_=[],Math.abs(N)<N1)return;let u=N*16,G=()=>{if(u*=B1,Math.abs(u)<0.5){Z=null;return}let C=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,w=q+u;if(w=Math.max(0,Math.min(w,C)),w<=0&&u<0||w>=C&&u>0){q=w,j=w,U.scrollController.scrollTo(w),Z=null;return}q=w,j=w,U.scrollController.scrollTo(w),Z=requestAnimationFrame(G)};Z=requestAnimationFrame(G)};if(z.addEventListener("touchstart",S,{passive:!0}),z.addEventListener("touchmove",k,{passive:!1}),z.addEventListener("touchend",h,{passive:!0}),z.addEventListener("touchcancel",h,{passive:!0}),U.destroyHandlers.push(()=>{if(z.removeEventListener("wheel",D),z.removeEventListener("touchstart",S),z.removeEventListener("touchmove",k),z.removeEventListener("touchend",h),z.removeEventListener("touchcancel",h),x(),Y!==null)cancelAnimationFrame(Y),Y=null}),!W.viewport.querySelector(`.${E}-scrollbar`)){if(J=h0(W.viewport,(r)=>U.scrollController.scrollTo(r),{},E,P),!W.viewport.classList.contains(`${E}-viewport--custom-scrollbar`))W.viewport.classList.add(`${E}-viewport--custom-scrollbar`);J.updateBounds(O.virtualSize,U.state.viewportState.containerSize);let g=J;U.afterScroll.push((r,l)=>{if(g)g.updatePosition(r),g.show()}),U.resizeHandlers.push((r,l)=>{if(g){let N=U.getCachedCompression();g.updateBounds(N.virtualSize,U.state.viewportState.containerSize)}})}}else if(!O.isCompressed&&Q)Q=!1,U.scrollController.disableCompression(),U.updateContentSize(O.actualSize);else if(O.isCompressed)U.scrollController.updateConfig({compression:O}),U.updateContentSize(O.virtualSize);if(J)J.updateBounds(O.virtualSize,U.state.viewportState.containerSize);U.state.cachedCompression={state:O,totalItems:$}};U.updateCompressionMode=V;let b=U.getCachedCompression.bind(U);U.getCachedCompression=()=>{if(U.state.cachedCompression)return U.state.cachedCompression.state;return b()},U.setVisibleRangeFn(($,O,T,z,D)=>{B=null,M=null;let x=A0(z,T);j2($,O,T,z,x,D)}),U.setScrollToPosFn(($,O,T,z,D)=>{let x=A0(z,O);return q2($,O,T,z,x,D)});let B=null,M=null;U.setPositionElementFn(($,O)=>{let T=U.getVirtualTotal(),z=A0(T,U.sizeCache);if(z.isCompressed){let D=U.scrollController.getScrollTop();if(B===null||O<M)M=O,B=Math.round(p0(O,D,U.sizeCache,T,U.state.viewportState.containerSize,z));let x=B+U.sizeCache.getOffset(O)-U.sizeCache.getOffset(M),S=U.config.horizontal;$.style.transform=S?`translateX(${x}px)`:`translateY(${x}px)`}else{let D=Math.round(U.sizeCache.getOffset(O)),x=U.config.horizontal;$.style.transform=x?`translateX(${D}px)`:`translateY(${D}px)`}}),V(),U.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null})},destroy(){if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null;if(Z!==null)cancelAnimationFrame(Z),Z=null}}};var K2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,X=new Map,K=0,Z=0,_=(N)=>{let u=X.get(N);if(!u)u={items:Array(q),count:0,lastAccess:Date.now()},X.set(N,u);else u.lastAccess=Date.now();return u},U=(N)=>{return Math.floor(N/q)},W=(N)=>{return N%q},L=()=>K,E=(N)=>{K=N},P=(N)=>{if(N<0||N>=K)return;let u=U(N),G=X.get(u);if(!G)return;return G.items[W(N)]},V=(N)=>{if(N<0||N>=K)return!1;let u=U(N),G=X.get(u);if(!G)return!1;return G.items[W(N)]!==void 0},b=(N,u)=>{let G=U(N),A=_(G),C=W(N),w=A.items[C]===void 0;if(A.items[C]=u,w)A.count++,Z++;if(N>=K)K=N+1},B=(N,u)=>{for(let G=0;G<u.length;G++){let A=u[G];if(A!==void 0)b(N+G,A)}},M=(N)=>{if(N<0||N>=K)return!1;let u=U(N),G=X.get(u);if(!G)return!1;let A=W(N);if(G.items[A]===void 0)return!1;if(G.items[A]=void 0,G.count--,Z--,G.count===0)X.delete(u);return!0},$=(N,u)=>{let G=[];for(let A=N;A<=u&&A<K;A++)G.push(P(A));return G},O=(N,u)=>{for(let G=N;G<=u&&G<K;G++)if(!V(G))return!1;return!0},T=()=>{let N=[],u=null,G=Array.from(X.keys()).sort((A,C)=>A-C);for(let A of G){let C=X.get(A);if(!C)continue;let w=A*q;for(let f=0;f<q;f++){let R=w+f;if(R>=K)break;if(C.items[f]!==void 0)if(u===null)u={start:R,end:R};else if(R===u.end+1)u.end=R;else N.push(u),u={start:R,end:R};else if(u!==null)N.push(u),u=null}}if(u!==null)N.push(u);return N},z=(N,u)=>{let G=[],A=null;for(let C=N;C<=u&&C<K;C++)if(!V(C))if(A===null)A={start:C,end:C};else A.end=C;else if(A!==null)G.push(A),A=null;if(A!==null)G.push(A);return G},D=(N)=>{return X.has(N)},x=(N)=>{let u=X.get(N);if(u)u.lastAccess=Date.now()},S=(N,u)=>{if(N>u||X.size===0)return;let G=Date.now(),A=U(Math.max(0,N)),C=U(Math.min(K-1,u));for(let w=A;w<=C;w++){let f=X.get(w);if(f)f.lastAccess=G}},k=(N,u)=>{if(Z<=Q)return 0;let G=Math.max(0,N-j),A=Math.min(K-1,u+j),C=U(G),w=U(A),f=0,R=[];for(let[I,y]of X)if(I<C||I>w)f+=y.count,R.push(I),Z-=y.count,X.delete(I);if(f>0&&Y)Y(f,R);return f},h=()=>{if(Z<=Q)return 0;let N=Array.from(X.entries()).sort(([,A],[,C])=>A.lastAccess-C.lastAccess),u=0,G=[];for(let[A,C]of N){if(Z<=Q)break;u+=C.count,Z-=C.count,G.push(A),X.delete(A)}if(u>0&&Y)Y(u,G);return u},n=()=>{return{totalItems:K,cachedItems:Z,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:K>0?1-Z/K:1}},g=()=>Z,r=()=>{X.clear(),Z=0};return{chunkSize:q,maxCachedItems:Q,getTotal:L,setTotal:E,get:P,has:V,set:b,setRange:B,delete:M,getRange:$,isRangeLoaded:O,getLoadedRanges:T,findUnloadedRanges:z,getChunkIndex:U,isChunkLoaded:D,touchChunk:x,touchChunksForRange:S,evictDistant:k,evictToLimit:h,getStats:n,getCachedCount:g,clear:r,reset:()=>{r(),K=0}}},Z2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,Y)=>j.start-Y.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let Y=q[j],X=Q[Q.length-1];if(Y.start<=X.end+1)X.end=Math.max(X.end,Y.end);else Q.push({...Y})}return Q},m0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,Y=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:Y};if(q.length===0)return[X];let K=[],Z=Z2(q),_=X.start;for(let U of Z){if(U.end<_)continue;if(U.start>X.end)break;if(U.start>_)K.push({start:_,end:Math.min(U.start-1,X.end)});if(_=U.end+1,_>X.end)break}if(_<=X.end)K.push({start:_,end:X.end});return K};var B2=(J={})=>{let{maskCharacter:q=DJ,maxSampleSize:Q=GJ}=J,j=[],Y=!1,X=0,K=(L)=>{if(Y||L.length===0)return;let E=Math.min(L.length,Q);for(let P=0;P<E;P++){let V=L[P];if(!V||typeof V!=="object")continue;let b={};for(let[B,M]of Object.entries(V)){if(B.startsWith("_")||B==="id")continue;b[B]=String(M??"").length}if(Object.keys(b).length>0)j.push(b)}Y=!0},Z=()=>Y,_=(L)=>{let E={id:`${VJ}${X++}`,[z2]:!0,_index:L};if(j.length===0)return E.label=q.repeat(12),E;let P=j[L%j.length];for(let[V,b]of Object.entries(P))E[V]=q.repeat(Math.max(1,b));return E};return{analyzeStructure:K,hasAnalyzedStructure:Z,generate:_,generateRange:(L,E)=>{let P=[];for(let V=L;V<=E;V++)P.push(_(V));return P},clear:()=>{j=[],Y=!1,X=0}}},R0=(J)=>{if(!J||typeof J!=="object")return!1;return J[z2]===!0},C2=(J)=>{return J.filter((q)=>!R0(q))};var G1=50,N2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:Y,placeholder:X,pageSize:K=G1,onStateChange:Z,onItemsLoaded:_,onItemsEvicted:U}=J,W=K2({...Y,onEvict:(c,i)=>{U?.(c),z()}}),L=null,E=()=>{if(!L)L=B2(X);return L},P=new Map,V=!1,b,B=!0,M,$=[],O=0,T=new Map,z=()=>{Z?.(l())},D=()=>{P.clear();let c=W.getLoadedRanges();for(let i of c)for(let a=i.start;a<=i.end;a++){let j0=W.get(a);if(j0&&!R0(j0))P.set(j0.id,a)}},x=(c,i)=>{if(!R0(i))P.set(i.id,c)},S=(c)=>{P.delete(c)},k=(c,i)=>{return`${c}-${i}`},h=()=>W.getTotal(),n=()=>W.getCachedCount(),g=()=>V,r=()=>B,l=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:V,pendingRanges:$,error:b,hasMore:B,cursor:M}),N=()=>W,u=()=>E(),G=(c)=>{let i=W.get(c);if(i!==void 0)return i;if(c>=0&&c<W.getTotal())return E().generate(c);return},A=(c)=>{let i=P.get(c);if(i===void 0)return;return W.get(i)},C=(c)=>{return P.get(c)??-1},w=(c)=>{let i=W.get(c);return i!==void 0&&!R0(i)},f=(c,i)=>{let a=[],j0=W.getTotal(),q0=0,X0=0;W.touchChunksForRange(c,Math.min(i,j0-1));for(let K0=c;K0<=i&&K0<j0;K0++){let N0=W.get(K0);if(N0!==void 0)a.push(N0),q0++;else a.push(E().generate(K0)),X0++}return a},R=(c)=>{W.setTotal(c),B=W.getCachedCount()<c,z()},I=(c,i=0,a)=>{if(L&&!L.hasAnalyzedStructure()&&c.length>0)L.analyzeStructure(c);for(let j0=0;j0<c.length;j0++){let q0=c[j0];if(q0!==void 0){let X0=i+j0;W.set(X0,q0),x(X0,q0)}}if(a!==void 0)W.setTotal(a);else if(i+c.length>W.getTotal())W.setTotal(i+c.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)B=!1;_?.(c,i,W.getTotal()),z()},y=(c,i)=>{let a=P.get(c);if(a===void 0)return!1;let j0=W.get(a);if(!j0)return!1;let q0={...j0,...i};if(W.set(a,q0),i.id!==void 0&&i.id!==c)S(c),x(a,q0);return z(),!0},F=(c)=>{let i=P.get(c);if(i===void 0)return!1;W.delete(i),S(c);let a=W.getTotal();if(a>0)W.setTotal(a-1);return z(),!0},v=async(c,i)=>{if(!q)return;let a=k(c,i);if(T.has(a))return;let j0=W.getLoadedRanges(),q0=m0({start:c,end:i},j0,W.chunkSize);if(q0.length===0)return;let X0=W.chunkSize,K0=[];for(let Y0 of q0){let W0=Math.floor(Y0.start/X0),y0=Math.floor(Y0.end/X0);for(let _0=W0;_0<=y0;_0++){let F0=_0*X0,D0=F0+X0-1,L0=k(F0,D0);if(!K0.some((w0)=>w0.start===F0)&&!T.has(L0))K0.push({start:F0,end:D0})}}let N0=[];for(let Y0 of q0){let W0=Math.floor(Y0.start/X0),y0=Math.floor(Y0.end/X0);for(let _0=W0;_0<=y0;_0++){let F0=_0*X0,D0=F0+X0-1,L0=k(F0,D0);if(T.has(L0)){let w0=T.get(L0);if(!N0.includes(w0))N0.push(w0)}}}for(let Y0 of K0){let W0=k(Y0.start,Y0.end),y0=(async()=>{$.push(Y0),V=!0,b=void 0,z();try{let _0=Y0.end-Y0.start+1,F0={offset:Y0.start,limit:_0,cursor:void 0},D0=await q.read(F0);if(I(D0.items,Y0.start,D0.total),D0.cursor)M=D0.cursor;let L0=Y0.start+D0.items.length;if(L0>=O){if(O=L0,D0.hasMore!==void 0)B=D0.hasMore;else if(D0.total!==void 0)B=L0<D0.total}}catch(_0){b=_0 instanceof Error?_0:Error(String(_0))}finally{T.delete(W0),$=$.filter((_0)=>_0.start!==Y0.start||_0.end!==Y0.end),V=T.size>0,z()}})();T.set(W0,y0),N0.push(y0)}await Promise.all(N0)},H=async(c,i)=>{if(W.isRangeLoaded(c,i))return;await v(c,i)},p=async()=>{if(!q)return;await v(0,K-1)},m=async()=>{if(!q||V||!B)return!1;let c=W.getCachedCount(),i=W.getTotal(),a=c,j0=Math.min(a+K-1,i>0?i-1:a+K-1);if(a>=i&&i>0)return B=!1,!1;return await v(a,j0),W.getCachedCount()>c},o=async()=>{if(W.clear(),W.setTotal(0),P.clear(),L)L.clear();T.clear(),$=[],V=!1,M=void 0,B=!0,O=0,b=void 0,z()},s=(c,i)=>{if(W.evictDistant(c,i)>0)D()},J0=()=>{W.clear(),P.clear(),M=void 0,b=void 0,$=[],V=!1,z()},Q0=()=>{if(W.reset(),P.clear(),L)L.clear();M=void 0,B=!0,O=0,b=void 0,$=[],V=!1,z()};if(Q&&Q.length>0)I(Q,0,j??Q.length);else if(j!==void 0)W.setTotal(j),z();return{getState:l,getTotal:h,getCached:n,getIsLoading:g,getHasMore:r,getStorage:N,getPlaceholders:u,getItem:G,getItemById:A,getIndexById:C,isItemLoaded:w,getItemsInRange:f,setTotal:R,setItems:I,updateItem:y,removeItem:F,loadRange:v,ensureRange:H,loadInitial:p,loadMore:m,reload:o,evictDistant:s,clear:J0,reset:Q0}};var kJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:Y,autoLoad:X=!0}=J,K=Q?.cancelThreshold??NJ,Z=Q?.preloadThreshold??_J,_=Q?.preloadAhead??BJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(U){let{emitter:W}=U,L=U.config.reverse,E=N2({adapter:q,...Y!==void 0&&{initialTotal:Y},pageSize:j?.chunkSize??I0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(U.state.isInitialized){let S=U.getVirtualTotal();U.sizeCache.rebuild(S),U.updateCompressionMode();let k=U.getCachedCompression();U.state.viewportState.totalSize=k.virtualSize,U.state.viewportState.actualSize=k.actualSize,U.state.viewportState.isCompressed=k.isCompressed,U.state.viewportState.compressionRatio=k.ratio,U.updateContentSize(k.virtualSize),U.renderIfNeeded()}},onItemsLoaded:(S,k,h)=>{if(U.state.isInitialized)U.forceRender(),W.emit("load:end",{items:S,total:h,offset:k})}});U.replaceDataManager(E);let P=null,V=null,b=0,B=!1,M=null,$=120,O=(S=!1)=>{if(B=!1,V=null,S)P=null;if(M!==null)clearTimeout(M),M=null},T=()=>{if(V){let S=V;V=null,U.dataManager.ensureRange(S.start,S.end).catch((k)=>{W.emit("error",{error:k,context:"ensureRange"})})}};U.afterScroll.push((S,k)=>{if(U.state.isDestroyed)return;let h=U.scrollController.getVelocity(),g=U.scrollController.isTracking()&&h<=K;if(b>K&&h<=K)B=!0;else if(B&&h>K)O();if(B&&h<0.5)O(!0);if(b=h,(U.scrollController.isAtTop()||U.scrollController.isAtBottom())&&(B||V))O(!0),g=!0;let l=B&&h>0.5;if(g&&!U.dataManager.getIsLoading()&&U.dataManager.getHasMore()){if(L){if(S<R2)W.emit("load:start",{offset:U.dataManager.getCached(),limit:I0}),U.dataManager.loadMore().catch((G)=>{W.emit("error",{error:G,context:"loadMore"})})}else if(U.state.viewportState.totalSize-S-U.state.viewportState.containerSize<R2)W.emit("load:start",{offset:U.dataManager.getCached(),limit:I0}),U.dataManager.loadMore().catch((A)=>{W.emit("error",{error:A,context:"loadMore"})})}let{renderRange:N}=U.state.viewportState;if(!P||N.start!==P.start||N.end!==P.end){if(P={start:N.start,end:N.end},g&&!l){if(V=null,M!==null)clearTimeout(M),M=null;let{start:G,end:A}=N,C=U.getVirtualTotal();if(h>Z)if(k==="down")A=Math.min(N.end+_,C-1);else G=Math.max(N.start-_,0);U.dataManager.ensureRange(G,A).catch((w)=>{W.emit("error",{error:w,context:"ensureRange"})})}else if(V={start:N.start,end:N.end},l){if(M!==null)clearTimeout(M);M=setTimeout(()=>{M=null,T(),O()},$)}}});let z=200,D=null;U.afterScroll.push((S,k)=>{if(D!==null)clearTimeout(D);D=setTimeout(()=>{D=null,T(),O()},z)}),U.destroyHandlers.push(()=>{if(D!==null)clearTimeout(D),D=null;O()});let x=()=>{if(U.state.isDestroyed)return;P=null;let{renderRange:S}=U.state.viewportState;if(S.end>0)U.dataManager.ensureRange(S.start,S.end).catch((k)=>{W.emit("error",{error:k,context:"ensureRange"})});T()};if(window.addEventListener("online",x),U.destroyHandlers.push(()=>{window.removeEventListener("online",x)}),W.on("load:start",()=>{U.dom.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{U.dom.root.removeAttribute("aria-busy")}),U.methods.set("loadVisibleRange",async()=>{P=null,V=null,U.forceRender();let{renderRange:S}=U.state.viewportState;if(S.end>0)W.emit("load:start",{offset:S.start,limit:S.end-S.start+1}),await U.dataManager.ensureRange(S.start,S.end)}),U.methods.set("reload",async()=>{P=null,V=null,U.invalidateRendered(),await U.dataManager.reload(),W.emit("load:start",{offset:0,limit:I0}),await U.dataManager.loadInitial(),U.forceRender();let{renderRange:S}=U.state.viewportState;if(S.end>0)await U.dataManager.ensureRange(S.start,S.end)}),X)W.emit("load:start",{offset:0,limit:I0}),U.dataManager.loadInitial().catch((S)=>{W.emit("error",{error:S,context:"loadInitial"})});else if(Y!==void 0)U.dataManager.setTotal(Y)}}};var yJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:Y,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",Y.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let U=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-U.left);else return Math.max(0,-U.top)},(U)=>{let W=Q.viewport.getBoundingClientRect();if(Y.horizontal){let L=W.left+window.scrollX;window.scrollTo(L+U,window.scrollY)}else{let L=W.top+window.scrollY;window.scrollTo(window.scrollX,L+U)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:K,innerWidth:Z}=window,_=()=>{let{innerWidth:U,innerHeight:W}=window,L=Y.horizontal?U:W,E=Y.horizontal?Z:K;if(Math.abs(L-E)<=1)return;K=W,Z=U,j.viewportState.containerSize=W,X.emit("resize",{width:U,height:W});for(let P=0;P<q.resizeHandlers.length;P++)q.resizeHandlers[P](U,W);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var w2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].headerLayoutIndex<=q)Q=Y;else j=Y-1}return Q},PJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let Y=Q+j+1>>>1;if(J[Y].firstDataIndex<=q)Q=Y;else j=Y-1}return Q},RJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),Y=0,X=0;for(let K=1;K<J;K++){let Z=q(K);if(Z!==j){let _=K-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:_}),X=X+1+_,j=Z,Y=K}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:J-Y}),Q},d0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),Y=0;for(let X of q){j[Y]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},Y++;for(let K=0;K<X.count;K++)j[Y]=J[X.firstDataIndex+K],Y++}return j},c0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return Q(Y.dataIndex)}},_2=(J,q)=>{let Q=RJ(J,q.getGroupForIndex),j=J+Q.length,Y=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(E)=>{if(Q.length===0)return{type:"item",dataIndex:E,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let P=w2(Q,E),V=Q[P];if(E===V.headerLayoutIndex)return{type:"header",group:V};let b=E-V.headerLayoutIndex-1;return{type:"item",dataIndex:V.firstDataIndex+b,group:V}},layoutToDataIndex:(E)=>{if(Q.length===0)return E;let P=w2(Q,E),V=Q[P];if(E===V.headerLayoutIndex)return-1;let b=E-V.headerLayoutIndex-1;return V.firstDataIndex+b},dataToLayoutIndex:(E)=>{if(Q.length===0)return E;let P=PJ(Q,E),V=Q[P],b=E-V.firstDataIndex;return V.headerLayoutIndex+1+b},getGroupAtLayoutIndex:(E)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let P=w2(Q,E);return Q[P]},getGroupAtDataIndex:(E)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let P=PJ(Q,E);return Q[P]},getHeaderHeight:typeof Y==="number"?(E)=>Y:(E)=>{let P=Q[E];if(!P)return 0;return Y(P.key,E)},rebuild:(E)=>{Q=RJ(E,q.getGroupForIndex),j=E+Q.length}}};var W2=(J,q,Q,j,Y,X=!1,K=0)=>{let Z=document.createElement("div");if(Z.className=`${Y}-sticky-header`,Z.setAttribute("role","presentation"),Z.setAttribute("aria-hidden","true"),Z.style.position="absolute",Z.style.zIndex="5",Z.style.pointerEvents="none",Z.style.willChange="transform",Z.style.overflow="hidden",X)Z.style.top="0",Z.style.bottom="0",Z.style.left=K?`${K}px`:"0";else Z.style.top=K?`${K}px`:"0",Z.style.left="0",Z.style.right="0";J.insertBefore(Z,J.firstChild);let _=-1,U=!1,W=0,L=(M)=>{if(M===_)return;_=M;let $=q.groups;if(M<0||M>=$.length){Z.textContent="";return}let O=$[M],T=j.headerTemplate(O.key,O.groupIndex),z=q.getHeaderHeight(M);if(X)Z.style.width=`${z}px`;else Z.style.height=`${z}px`;if(typeof T==="string")Z.innerHTML=T;else Z.replaceChildren(T)},E=(M)=>{let $=q.groups;if($.length===0){V();return}let O=Q.getOffset($[0].headerLayoutIndex);if(M<O){V();return}let T=0,z=$.length-1;while(T<z){let h=T+z+1>>>1;if(Q.getOffset($[h].headerLayoutIndex)<=M)T=h;else z=h-1}let D=T;if(!U)P();L(D);let x=q.getHeaderHeight(D),S=0,k=D+1;if(k<$.length){let n=Q.getOffset($[k].headerLayoutIndex)-M;if(n<x)S=n-x}if(S!==W)if(W=S,S===0)Z.style.transform="";else{let h=Math.round(S);Z.style.transform=X?`translateX(${h}px)`:`translateY(${h}px)`}},P=()=>{if(U)return;U=!0,Z.style.display=""},V=()=>{if(!U)return;U=!1,Z.style.display="none",_=-1,W=0,Z.style.transform=""},b=()=>{let M=_;if(_=-1,M>=0)L(M)},B=()=>{Z.remove(),_=-1,U=!1};return Z.style.display="none",{update:E,refresh:b,show:P,hide:V,destroy:B}};var zJ=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let K=Q.indexAtOffset(J),Z=Q.indexAtOffset(J+q);if(Z<j-1)Z++;return X.start=Math.max(0,K),X.end=Math.min(j-1,Math.max(0,Z)),X},CJ=(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},wJ=(J,q,Q,j,Y,X)=>{if(j===0)return 0;let K=Math.max(0,Math.min(J,j-1)),Z=q.getOffset(K),_=q.getSize(K),U=q.getTotalSize(),W=Math.max(0,U-Q),L;switch(X){case"center":L=Z-Q/2+_/2;break;case"end":L=Z-Q+_;break;case"start":default:L=Z;break}return Math.max(0,Math.min(L,W))},vJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},SJ=(J,q)=>{return q.getTotalSize()},fJ=(J,q)=>{return q.getOffset(J)},IJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var k0=(J,q,Q,j,Y="start",X,K=wJ)=>{return K(J,q,Q,j,X,Y)},pJ=(J,q)=>{return J.start===q.start&&J.end===q.end},hJ=(J,q)=>{return J>=q.start&&J<=q.end},uJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var gJ=(J,q)=>{let Q=[],j=[];for(let Y=J.start;Y<=J.end;Y++)if(Y<q.start||Y>q.end)j.push(Y);for(let Y=q.start;Y<=q.end;Y++)if(Y<J.start||Y>J.end)Q.push(Y);return{add:Q,remove:j}};X2();var mJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,Q=null,j=[],Y=[];return{name:"withGroups",priority:10,setup(X){let{dom:K,config:Z,rawConfig:_}=X,{classPrefix:U}=Z,L=_.item.height;j=_.items?[..._.items]:[];let E=j.length,P={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=_2(E,P),Y=d0(j,q.groups);let V=c0(q,L);X.setSizeConfig(V),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length);let b=_.item.template,{headerTemplate:B}=J,M=(g,r,l)=>{if(z0(g))return B(g.groupKey,g.groupIndex);return b(g,r,l)},$=X.methods.get("_getGridLayout"),O=X.methods.get("_replaceGridRenderer"),T=X.methods.get("_updateGridLayoutForGroups"),z=X.methods.get("_getTableLayout"),D=X.methods.get("_updateTableForGroups"),x=X.methods.get("_getTableHeaderHeight");if($&&O){if(T)T((N)=>{let u=Y[N];return!!(u&&z0(u))});let{createGridRenderer:g}=(D2(),J1(xJ)),r=$(),l=g(K.items,M,X.sizeCache,r,U,X.getContainerWidth(),()=>X.dataManager.getTotal(),Z.ariaIdPrefix);O(l)}else if(z&&D)D((g)=>z0(g),J.headerTemplate);else X.replaceTemplate(M);let S=x?x():0;if(K.root.classList.add(`${U}--grouped`),J.sticky!==!1){Q=W2(K.root,q,X.sizeCache,{...P,sticky:P.sticky??!1},U,Z.horizontal,S);let g=Q;X.afterScroll.push((r,l)=>{g.update(r)}),Q.update(X.scrollController.getScrollTop())}let k=()=>{if(!q)return;q.rebuild(j.length),Y=d0(j,q.groups);let g=c0(q,L);if(X.setSizeConfig(g),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};X.methods.set("setItems",(g)=>{j=g.slice(),k()}),X.methods.set("appendItems",(g)=>{j.push(...g),k()}),X.methods.set("prependItems",(g)=>{j.unshift(...g),k()}),X.methods.set("removeItem",(g)=>{j=j.filter((r)=>r.id!==g),k()});let{animateScroll:h,cancelScroll:n}=f0(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(g,r)=>{let l=q.dataToLayoutIndex(g),{align:N,behavior:u,duration:G}=P0(r),A=X.dataManager.getTotal(),C=k0(l,X.sizeCache,X.state.viewportState.containerSize,A,N,X.getCachedCompression());if(u==="smooth")h(X.scrollController.getScrollTop(),C,G);else n(),X.scrollController.scrollTo(C)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(n(),Q)Q.destroy(),Q=null;K.root.classList.remove(`${U}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var G2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},X=(V)=>{if(V<=0)return 0;if(!j)return Math.ceil(V/q);let b=0,B=0,M=0;for(let $=0;$<V;$++)if(j($)){if(M++,B>0)b++,B=0;b++,B=0}else if(B++,B>=q)b++,B=0;if(B>0)b++;return b},K=(V)=>{return Y.row=Z(V),Y.col=_(V),Y},Z=(V)=>{if(!j)return Math.floor(V/q);let b=0,B=0;for(let M=0;M<=V;M++)if(j(M)){if(B>0)b++,B=0;if(M===V)return b;b++,B=0}else{if(M===V)return b;if(B++,B>=q)b++,B=0}return console.warn(`⚠️ getRow(${V}) fell through - returning ${b}`),b},_=(V)=>{if(!j)return V%q;if(j(V))return 0;let b=0;for(let B=0;B<=V;B++)if(j(B))b=0;else{if(B===V)return b;if(b++,b>=q)b=0}return b},U=(V,b,B)=>{if(B<=0)return{start:0,end:-1};if(!j){let z=Math.max(0,V*q),D=Math.min(B-1,(b+1)*q-1);return{start:z,end:D}}let M=-1,$=-1,O=0,T=0;for(let z=0;z<B;z++){if(j(z)){if(T>0)O++,T=0;if(O>=V&&O<=b){if(M===-1)M=z;$=z}O++,T=0}else{if(O>=V&&O<=b){if(M===-1)M=z;$=z}if(T++,T>=q)O++,T=0}if(O>b&&T===0)break}if(M===-1)return{start:0,end:-1};return{start:M,end:$}},W=(V,b,B)=>{if(b<0||b>=q)return-1;let M=V*q+b;if(M<0||M>=B)return-1;return M},L=(V)=>{let b=(q-1)*Q;return Math.max(0,(V-b)/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:K,getRow:Z,getCol:_,getItemRange:U,getItemIndex:W,getColumnWidth:L,getColumnOffset:(V,b)=>{let B=L(b);return V*(B+Q)}}};D2();var O1=new Set,dJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:X,config:K,rawConfig:Z}=j,{classPrefix:_}=K;if(K.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let U=K.horizontal,W=()=>U?Y.viewport.clientHeight:j.getContainerWidth(),L=Z.items?.some((w)=>w.__groupHeader===!0),E={columns:J.columns,gap:J.gap??0};if(L)E.isHeaderFn=(w)=>{let f=j.dataManager.getItem(w);return!!(f&&f.__groupHeader===!0)};q=G2(E);let P=q.gap;j.setVirtualTotalFn(()=>{let w=j.dataManager.getTotal();return q.getTotalRows(w)});let V=Z.item,b=K.horizontal?V.width:V.height,B={containerWidth:W(),columns:q.columns,gap:q.gap},M={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof b==="function")j.setSizeConfig((w)=>{let f=B.containerWidth-2,R=(B.columns-1)*B.gap;return M.containerWidth=B.containerWidth,M.columns=B.columns,M.gap=B.gap,M.columnWidth=(f-R)/B.columns,M.row=q.getRow(w),M.column=q.getCol(w),M.totalRows=q.getTotalRows(j.dataManager.getTotal()),M.totalColumns=B.columns,b(w,M)+B.gap});else if(P>0)j.setSizeConfig(b+P);if(j.rebuildSizeCache(),P>0){let w=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let f=w();return f>0?f-B.gap:0}}Y.root.classList.add(`${_}--grid`);let $=W(),O=Z.item.template,T=()=>{Q=l0(Y.items,O,j.sizeCache,q,_,$,()=>j.dataManager.getTotal(),K.ariaIdPrefix,K.horizontal),j.replaceRenderer(Q)};T(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>E),j.methods.set("_replaceGridRenderer",(w)=>{Q=w}),j.methods.set("_updateGridLayoutForGroups",(w)=>{q.update({isHeaderFn:w});let f=j.dataManager.getTotal(),R=0;for(let I=0;I<f;I++)if(q.getCol(I)===0){let y=j.sizeCache.getSize(I);R+=y}if(j.sizeCache.getTotalSize=()=>R,K.horizontal)j.dom.content.style.width=`${R}px`;else j.dom.content.style.height=`${R}px`;T()}),j.methods.set("updateGrid",(w)=>{if(w.columns!==void 0){if(!Number.isInteger(w.columns)||w.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");E.columns=w.columns}if(w.gap!==void 0){if(w.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");E.gap=w.gap}if(q)q.update(E);let f=W();if(B.containerWidth=f,B.columns=E.columns,B.gap=E.gap??0,Q)Q.updateContainerWidth(f);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 z=null,D=null,x=!1,S=()=>{if(x)return;x=!0,z=j.methods.get("_getSelectedIds")??null,D=j.methods.get("_getFocusedIndex")??null},k=-1,h=-1,n=!0,g=K.overscan,r={start:0,end:0},l={start:0,end:0},N=()=>{if(j.state.isDestroyed)return;let w=j.scrollController.getScrollTop(),f=j.state.viewportState.containerSize;if(!n&&w===k&&f===h)return;k=w,h=f,n=!1;let R=j.getVirtualTotal();if(R===0||f===0)r.start=0,r.end=0;else r.start=Math.max(0,j.sizeCache.indexAtOffset(w)),r.end=Math.min(R-1,Math.max(0,j.sizeCache.indexAtOffset(w+f-1)));l.start=Math.max(0,r.start-g),l.end=Math.min(R-1,r.end+g);let I=j.state.viewportState;I.scrollPosition=w,I.visibleRange.start=r.start,I.visibleRange.end=r.end,I.renderRange.start=l.start,I.renderRange.end=l.end;let y=j.state.lastRenderRange,F=I.isCompressed,v=j.dataManager.getTotal(),H=q.getItemRange(l.start,l.end,v),p=j.dataManager.getItemsInRange(H.start,H.end),m=F?j.getCompressionContext():void 0;S();let o=z?z():O1,s=D?D():-1;if(Q.render(p,H,o,s,m),y.start!==l.start||y.end!==l.end)y.start=l.start,y.end=l.end,X.emit("range:change",{range:{start:l.start,end:l.end}})},u=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,n=!0,N()};j.setRenderFns(N,u);let G=typeof b==="function";j.resizeHandlers.push((w,f)=>{let R=U?f:w;if(B.containerWidth=R,Q)Q.updateContainerWidth(R);if(G){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let I=0;I<j.contentSizeHandlers.length;I++)j.contentSizeHandlers[I]();if(Q)Q.clear();j.forceRender()}});let{animateScroll:A,cancelScroll:C}=f0(j.scrollController,j.renderIfNeeded);if(j.methods.set("cancelScroll",C),j.methods.set("scrollToIndex",(w,f)=>{let R=Math.floor(w/J.columns),{align:I,behavior:y,duration:F}=P0(f),v=j.dataManager.getState(),H=q.getTotalRows(v.total),p=Math.max(0,Math.min(R,H-1)),m=k0(p,j.sizeCache,j.state.viewportState.containerSize,H,I,j.getCachedCompression());if(y==="smooth")A(j.scrollController.getScrollTop(),m,F);else C(),j.scrollController.scrollTo(m)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),j.destroyHandlers.push(()=>{if(C(),Q)Q.destroy(),Q=null;Y.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};D2();var V2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,Y=0,X=[],K=()=>{let B=(q-1)*Q;Y=Math.max(0,(j-B)/q),X=Array(q);let M=Y+Q;for(let $=0;$<q;$++)X[$]=$*M};K();let Z=[],_=0,U=[],W=(B)=>{let M=0,$=B[0];for(let O=1;O<B.length;O++){let T=B[O];if(T<$)$=T,M=O}return M},L=(B,M)=>{if(B<=0)return _=0,Z=[],[];let $=Array(q).fill(0),O=Array(q);for(let D=0;D<q;D++)O[D]=[];let T=Array(B);for(let D=0;D<B;D++){let x=W($),S=M(D),k=$[x];T[D]={index:D,x:X[x],y:k,lane:x,size:S,crossSize:Y},O[x].push(D),$[x]=k+S+Q}Z=O;let z=0;for(let D=0;D<q;D++){let x=$[D],S=x>0?x-Q:0;if(S>z)z=S}return _=z,T},E=(B)=>{if(B.length===0)return _>0?_:0;if(_>0)return _;let M=Array(q).fill(0);for(let O of B){let T=O.y+O.size,z=M[O.lane];if(T>z)M[O.lane]=T}let $=0;for(let O=0;O<q;O++)if(M[O]>$)$=M[O];return $},P=(B,M,$)=>{if(B.length===0||$<=M)return U.length=0,U;if(Z.length===0||Z.length!==q)return V(B,M,$);U.length=0;for(let O=0;O<q;O++){let T=Z[O],z=T.length;if(z===0)continue;let D=0,x=z;while(D<x){let S=D+x>>>1,k=B[T[S]];if(k.y+k.size<=M)D=S+1;else x=S}for(let S=D;S<z;S++){let k=B[T[S]];if(k.y>=$)break;U.push(k)}}return U},V=(B,M,$)=>{let O=[];for(let T of B)if(T.y+T.size>M&&T.y<$)O.push(T);return O};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(B)=>{let M=!1;if(B.columns!==void 0){let $=Math.max(1,Math.floor(B.columns));if($!==q)q=$,M=!0}if(B.gap!==void 0&&B.gap!==Q)Q=B.gap,M=!0;if(B.containerSize!==void 0&&B.containerSize!==j)j=B.containerSize,M=!0;if(M)K()},calculateLayout:L,getTotalSize:E,getVisibleItems:P}};var E1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let K=document.createElement("div");return K.setAttribute("role","option"),K},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}},A1=1,M2=(J,q,Q,j=!1,Y,X)=>{let K=E1(),Z=new Map,_=new Set,U=0,W="",L=-1,E={selected:!1,focused:!1},P=(h,n)=>{return E.selected=h,E.focused=n,E},V=`${Q}-item ${Q}-masonry-item`,b=`${Q}-item--selected`,B=`${Q}-item--focused`,M=(h,n)=>{if(typeof n==="string")h.innerHTML=n;else h.replaceChildren(n)},$=(h,n,g)=>{h.classList.toggle(b,n),h.classList.toggle(B,g)},O=(h,n)=>{if(j)h.style.transform=`translate(${Math.round(n.y)}px, ${Math.round(n.x)}px)`;else h.style.transform=`translate(${Math.round(n.x)}px, ${Math.round(n.y)}px)`},T=(h,n)=>{if(j)h.style.width=`${n.size}px`,h.style.height=`${n.crossSize}px`;else h.style.width=`${n.crossSize}px`,h.style.height=`${n.size}px`},z=(h,n,g,r,l)=>{let N=K.acquire(),u=P(r,l);if(N.className=V,N.dataset.index=String(h),N.dataset.id=String(n.id),N.dataset.lane=String(g.lane),N.ariaSelected=String(r),X)N.id=`${X}-item-${h}`;if(Y){let A=Y();if(A!==L)L=A,W=String(A);N.setAttribute("aria-setsize",W),N.setAttribute("aria-posinset",String(h+1))}T(N,g);let G=q(n,h,u);return M(N,G),$(N,r,l),O(N,g),{element:N,lastItemId:n.id,lastSelected:r,lastFocused:l,lastY:g.y,lastX:g.x,lastSize:g.size,lastCrossSize:g.crossSize,lastSeenFrame:U}},D=(h,n,g,r)=>{U++,_.clear();for(let N=0;N<n.length;N++)_.add(n[N].index);for(let[N,u]of Z)if(_.has(N))u.lastSeenFrame=U;else if(U-u.lastSeenFrame>A1)K.release(u.element),Z.delete(N);let l=null;for(let N=0;N<n.length;N++){let u=n[N],G=u.index,A=h(G);if(!A)continue;let C=g.has(A.id),w=G===r,f=Z.get(G);if(f){let R=f.lastItemId!==A.id,I=f.lastSelected!==C,y=f.lastFocused!==w,F=f.lastY!==u.y||f.lastX!==u.x,v=f.lastSize!==u.size||f.lastCrossSize!==u.crossSize;if(R||I||y){let H=P(C,w),p=q(A,G,H);M(f.element,p),$(f.element,C,w),f.element.dataset.id=String(A.id),f.element.ariaSelected=String(C),f.lastItemId=A.id,f.lastSelected=C,f.lastFocused=w}if(v)T(f.element,u),f.lastSize=u.size,f.lastCrossSize=u.crossSize;if(F)O(f.element,u),f.lastY=u.y,f.lastX=u.x}else{let R=z(G,A,u,C,w);if(!l)l=document.createDocumentFragment();l.appendChild(R.element),Z.set(G,R)}}if(l)J.appendChild(l)},x=()=>{for(let{element:h}of Z.values())K.release(h);Z.clear(),J.innerHTML=""};return{render:D,getElement:(h)=>Z.get(h)?.element,sortDOM:()=>{S0(J,Z.keys(),(h)=>Z.get(h)?.element)},clear:x,destroy:()=>{x(),K.clear()}}};var F1=new Set,L1=100,cJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(Y){let{dom:X,emitter:K,config:Z,rawConfig:_}=Y,U=Z.classPrefix,W=Z.horizontal;if(Z.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${U}--masonry`);let L=()=>{return W?X.viewport.clientHeight:X.viewport.clientWidth},E={columns:J.columns,gap:J.gap??0,containerSize:L()};q=V2(E);let P=_.item,V=W&&_.item.width?_.item.width:P.height,b={containerWidth:0,columns:0,gap:0,columnWidth:0},B=typeof V==="function"?(w)=>V(w,b):()=>V,M=()=>{let w=Y.dataManager.getTotal(),f=q;b.containerWidth=f.containerSize,b.columns=f.columns,b.gap=f.gap;let R=(f.columns-1)*f.gap;b.columnWidth=Math.max(0,(b.containerWidth-R)/f.columns),j=f.calculateLayout(w,B);let I=q.getTotalSize(j);if(Y.sizeCache.getTotalSize=()=>I,W)X.content.style.width=`${I}px`;else X.content.style.height=`${I}px`},$=_.item.template;Q=M2(X.items,$,U,W,()=>Y.dataManager.getTotal(),Z.ariaIdPrefix);let O=null,T=null,z=!1,D=()=>{if(z)return;z=!0,O=Y.methods.get("_getSelectedIds")??null,T=Y.methods.get("_getFocusedIndex")??null},x=(w)=>Y.dataManager.getItem(w),S=-1,k=-1,h=!0,n=Z.overscan*L1,g=()=>{if(Y.state.isDestroyed)return;D();let w=Y.scrollController.getScrollTop(),f=Y.state.viewportState.containerSize;if(!h&&w===S&&f===k)return;S=w,k=f,h=!1;let R=Math.max(0,w-n),I=w+f+n,y=q.getVisibleItems(j,R,I),F=O?O():F1,v=T?T():-1;if(Q&&y.length>0)Q.render(x,y,F,v);let H=Y.state.viewportState;H.scrollPosition=w;let p=y.length,m=p>0?y[0].index:0,o=p>0?y[p-1].index:0;H.visibleRange.start=m,H.visibleRange.end=o,H.renderRange.start=m,H.renderRange.end=o;let s=Y.state.lastRenderRange;if(s.start!==m||s.end!==o)s.start=m,s.end=o,K.emit("range:change",{range:{start:m,end:o}})},r=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,h=!0,g()};Y.setRenderFns(g,r);let l=(w,f)=>{let R=W?f:w;if(q&&q.containerSize!==R){if(q.update({containerSize:R}),M(),Q)Q.clear();r()}};Y.resizeHandlers.push(l);let N=()=>{M(),r()},u=Y.dataManager,G=(w)=>{if(typeof u[w]!=="function")return;let f=u[w].bind(u);u[w]=(...R)=>{f(...R),N()}};G("setItems"),G("appendItems"),G("prependItems"),G("updateItem"),G("removeItem");let{animateScroll:A,cancelScroll:C}=f0(Y.scrollController,Y.renderIfNeeded);Y.methods.set("cancelScroll",C),Y.methods.set("scrollToIndex",(w,f)=>{let R=j[w];if(!R)return;let{align:I,behavior:y,duration:F}=P0(f),v=R.y,H=Y.state.viewportState.containerSize,p=v;if(I==="center")p=v-H/2+R.size/2;else if(I==="end")p=v-H+R.size;if(p=Math.max(0,p),y==="smooth")A(Y.scrollController.getScrollTop(),p,F);else C(),Y.scrollController.scrollTo(p)}),M(),Y.idleHandlers.push(()=>{if(Q)Q.sortDOM()}),Y.destroyHandlers.push(()=>{if(C(),Q)Q.destroy();X.root.classList.remove(`${U}--masonry`)})}}};var O2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),a0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let Y of q)j.add(Y);return{...J,selected:j}},r0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},u0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return r0(J,[q]);else return a0(J,[q],Q)},E2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},A2=(J)=>({...J,selected:new Set}),F2=(J,q)=>{return J.focusedIndex=q,J},v2=(J,q,Q=!1)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},S2=(J,q,Q=!1)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},f2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},I2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var lJ=(J,q)=>{return J.selected.has(q)},s0=(J)=>{return Array.from(J.selected)},n0=(J,q)=>{let Q=[];for(let j of J.selected){let Y=q(j);if(Y)Q.push(Y)}return Q};var aJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=O2(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:K,emitter:Z,config:_}=X,{classPrefix:U,ariaIdPrefix:W}=_;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}K.root.classList.add(`${U}--selectable`);let L=new Map,E=()=>{L.clear();let O=X.dataManager.getTotal(),T=X.dataManager.getCached();if(T===0)return;if(T>=O){for(let D=0;D<O;D++){let x=X.dataManager.getItem(D);if(x)L.set(x.id,D)}return}let z=X.dataManager.getStorage();if(z&&typeof z.getLoadedRanges==="function"){let D=z.getLoadedRanges();for(let x of D)for(let S=x.start;S<=x.end;S++){let k=X.dataManager.getItem(S);if(k)L.set(k.id,S)}}};Z.on("load:end",({items:O,offset:T})=>{if(!O||O.length===0)return;if(T!==void 0)for(let z=0;z<O.length;z++){let D=O[z];if(D&&D.id!==void 0)L.set(D.id,T+z)}else E()}),E(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:P}=X.getRenderFns(),V=()=>{P();let O=(T)=>{let z=L.get(T);if(z===void 0)return;return X.dataManager.getItem(z)};Z.emit("selection:change",{selected:s0(j),items:n0(j,O)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${U}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",(K.root.getAttribute("role")==="grid"?K.root.parentElement??K.root:K.root).appendChild(Y);let B=Y;Z.on("selection:change",({selected:O})=>{let T=O.length;if(T===0)B.textContent="";else if(T===1)B.textContent="1 item selected";else B.textContent=`${T} items selected`});let M=()=>{if(X.state.isDestroyed)return;if(!K.root.matches(":focus-visible"))return;let O=X.dataManager.getTotal();if(O===0)return;let T=j.focusedIndex>=0?Math.min(j.focusedIndex,O-1):0;j=F2(j,T),j.focusVisible=!0,K.root.setAttribute("aria-activedescendant",`${W}-item-${T}`),X.scrollController.scrollTo(k0(T,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let z=X.dataManager.getItem(T);if(z)X.renderer.updateItemClasses(T,j.selected.has(z.id),!0)};K.root.addEventListener("focusin",M);let $=(O)=>{if(X.state.isDestroyed)return;let T=O.relatedTarget;if(T&&K.root.contains(T))return;let z=j.focusedIndex;if(j.focusVisible=!1,K.root.removeAttribute("aria-activedescendant"),z>=0){let D=X.dataManager.getItem(z);if(D)X.renderer.updateItemClasses(z,j.selected.has(D.id),!1)}};K.root.addEventListener("focusout",$),X.clickHandlers.push((O)=>{if(X.state.isDestroyed)return;let z=O.target.closest("[data-index]");if(!z)return;let D=parseInt(z.dataset.index??"-1",10);if(D<0)return;let x=X.dataManager.getItem(D);if(!x)return;Z.emit("item:click",{item:x,index:D,event:O}),j=F2(j,D),j.focusVisible=!1,K.root.setAttribute("aria-activedescendant",`${W}-item-${D}`),j=u0(j,x.id,q),V()}),X.keydownHandlers.push((O)=>{if(X.state.isDestroyed)return;let T=X.dataManager.getTotal(),z=j.focusedIndex,D=!1,x=!1,S=j;switch(O.key){case"ArrowUp":S=v2(j,T,_.wrap),S.focusVisible=!0,D=!0,x=!0;break;case"ArrowDown":S=S2(j,T,_.wrap),S.focusVisible=!0,D=!0,x=!0;break;case"Home":S=f2(j,T),S.focusVisible=!0,D=!0,x=!0;break;case"End":S=I2(j,T),S.focusVisible=!0,D=!0,x=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let k=X.dataManager.getItem(j.focusedIndex);if(k)S=u0(j,k.id,q),S.focusVisible=!0;D=!0}break}if(D){O.preventDefault(),j=S;let k=j.focusedIndex;if(k>=0){let h=X.dataManager.getState(),n=k0(k,X.sizeCache,X.state.viewportState.containerSize,h.total,"center",X.getCachedCompression());X.scrollController.scrollTo(n),K.root.setAttribute("aria-activedescendant",`${W}-item-${k}`)}else K.root.removeAttribute("aria-activedescendant");if(x){let{selected:h}=j;if(z>=0&&z!==k){let n=X.dataManager.getItem(z);if(n)X.renderer.updateItemClasses(z,h.has(n.id),!1)}if(k>=0){let n=X.dataManager.getItem(k);if(n)X.renderer.updateItemClasses(k,h.has(n.id),!0)}}else V()}}),X.methods.set("select",(...O)=>{j=a0(j,O,q),V()}),X.methods.set("deselect",(...O)=>{j=r0(j,O),V()}),X.methods.set("toggleSelect",(O)=>{j=u0(j,O,q),V()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let O=X.getAllLoadedItems();j=E2(j,O,q),E(),V()}),X.methods.set("clearSelection",()=>{j=A2(j),V()}),X.methods.set("getSelected",()=>{return s0(j)}),X.methods.set("getSelectedItems",()=>{return n0(j,(T)=>{let z=L.get(T);if(z===void 0)return;return X.dataManager.getItem(z)})}),X.destroyHandlers.push(()=>{if(B&&B.parentNode)B.remove();K.root.removeEventListener("focusin",M),K.root.removeEventListener("focusout",$)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var rJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let Y=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),K=Q.getVirtualTotal(),Z=Q.methods.get("getSelected"),_=Z&&Z().length>0?Z():void 0;if(K===0){let E={index:0,offsetInItem:0,total:0};if(_)E.selectedIds=_;return E}let U,W;if(X.isCompressed){let P=Y/X.virtualSize*K;U=Math.max(0,Math.min(Math.floor(P),K-1)),W=(P-U)*Q.sizeCache.getSize(U)}else U=Q.sizeCache.indexAtOffset(Y),W=Y-Q.sizeCache.getOffset(U);W=Math.max(0,W);let L={index:U,offsetInItem:W,total:K};if(_)L.selectedIds=_;return L});let j=(Y)=>{let{index:X,offsetInItem:K,selectedIds:Z}=Y,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(K))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let B=Q.getCachedCompression();Q.updateContentSize(B.virtualSize)}let W=Q.getCachedCompression(),L=Math.max(0,Math.min(X,_-1)),E;if(W.isCompressed){let B=Q.sizeCache.getSize(L),M=B>0?K/B:0;E=(L+M)/_*W.virtualSize}else E=Q.sizeCache.getOffset(L)+K;let P=Q.state.viewportState.containerSize,V=Math.max(0,W.virtualSize-P);if(E=Math.max(0,Math.min(E,V)),Q.scrollController.scrollTo(E),Z&&Z.length>0){let B=Q.methods.get("select");if(B)B(...Z)}let b=Q.methods.get("loadVisibleRange");if(b)requestAnimationFrame(()=>{b()});else{let B=Q.methods.get("reload");if(B)requestAnimationFrame(()=>{B()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};var L2=(J,q=50,Q=1/0,j=!0)=>{let Y=J,X=[],K=0,Z=()=>{X=Y.map((B,M)=>({def:B,index:M,width:0,minWidth:T1(B.minWidth??q,1),maxWidth:B.maxWidth??Q,resizable:B.resizable??j,offset:0}))},_=(B)=>{if(X.length===0){K=0;return}let M=0,$=0;for(let O=0;O<X.length;O++){let T=X[O],z=T.def;if(z.width!==void 0)T.width=p2(z.width,T.minWidth,T.maxWidth),M+=T.width;else $++}if($>0){let T=Math.max(0,B-M)/$;for(let z=0;z<X.length;z++){let D=X[z];if(D.def.width===void 0)D.width=p2(T,D.minWidth,D.maxWidth)}}U()},U=()=>{let B=0;for(let M=0;M<X.length;M++){let $=X[M];$.offset=B,B+=$.width}K=B},W=(B,M)=>{if(B<0||B>=X.length)return 0;let $=X[B];if(!$.resizable)return $.width;let O=p2(M,$.minWidth,$.maxWidth);return $.width=O,U(),O},L=(B)=>{return X[B]},E=(B)=>{if(X.length===0)return;if(B<0)return X[0];if(B>=K)return X[X.length-1];let M=0,$=X.length-1;while(M<$){let O=M+$>>>1,T=X[O];if(B<T.offset)$=O-1;else if(B>=T.offset+T.width)M=O+1;else return T}return X[M]},P=(B)=>{if(B<0||B>=X.length)return 0;return X[B].offset},V=(B)=>{if(B<0||B>=X.length)return 0;return X[B].width},b=(B)=>{Y=B,Z()};return Z(),{get columns(){return X},get totalWidth(){return K},resolve:_,updateColumns:b,resizeColumn:W,getColumn:L,getColumnAtX:E,getColumnOffset:P,getColumnWidth:V}},p2=(J,q,Q)=>Math.min(Q,Math.max(q,J)),T1=(J,q)=>Math.max(q,J);var T2=(J,q,Q,j,Y,X,K)=>{let Z=document.createElement("div");Z.setAttribute("role","rowgroup");let _=document.createElement("div");_.className=`${j}-table-header`,_.setAttribute("role","row"),_.setAttribute("aria-rowindex","1"),_.style.height=`${Q}px`;let U=document.createElement("div");U.className=`${j}-table-header-scroll`,U.setAttribute("role","presentation"),_.appendChild(U),Z.appendChild(_),J.insertBefore(Z,J.firstChild),q.style.position="absolute",q.style.top=`${Q}px`,q.style.left="0",q.style.right="0",q.style.bottom="0",q.style.height="auto";let W=[],L=[],E=[],P=!0,V=null,b="asc",B=null,M=!1,$=-1,O=0,T=0,z=(G,A)=>{let C=document.createElement("div");C.className=`${j}-table-header-cell`,C.setAttribute("role","columnheader"),C.setAttribute("aria-colindex",String(A+1)),C.dataset.columnKey=G.def.key;let w=G.def.align;if(w==="center")C.classList.add(`${j}-table-header-cell--center`);else if(w==="right")C.classList.add(`${j}-table-header-cell--right`);let f=document.createElement("div");f.className=`${j}-table-header-content`;let R=G.def.header?G.def.header(G.def):G.def.label;if(typeof R==="string")f.textContent=R;else f.appendChild(R);if(C.appendChild(f),G.def.sortable){let I=document.createElement("span");I.className=`${j}-table-header-sort`,I.setAttribute("aria-hidden","true"),C.appendChild(I),E.push(I),C.classList.add(`${j}-table-header-cell--sortable`)}else E.push(null);if(G.resizable){let I=document.createElement("div");I.className=`${j}-table-header-resize`,I.dataset.resizeIndex=String(A),C.appendChild(I),L.push(I)}return C},D=(G)=>{B=G,U.textContent="",W=[],L=[],E=[];let A=G.columns;for(let C=0;C<A.length;C++){let w=A[C],f=z(w,C);W.push(f),U.appendChild(f)}if(x(G),V)S(V,b)},x=(G)=>{B=G;let A=G.columns;U.style.width=`${G.totalWidth}px`;for(let C=0;C<W.length&&C<A.length;C++){let w=W[C],f=A[C];w.style.width=`${f.width}px`}},S=(G,A)=>{if(V=G,b=A,!B)return;let C=B.columns;for(let w=0;w<E.length&&w<C.length;w++){let f=E[w];if(!f)continue;if(C[w].def.key===G&&G!==null)f.textContent=A==="asc"?"▲":"▼",f.style.opacity="0.7",W[w].setAttribute("aria-sort",A==="asc"?"ascending":"descending");else f.textContent="",f.style.opacity="0",W[w].removeAttribute("aria-sort")}},k=(G)=>{U.style.transform=`translateX(${-G}px)`},h=(G)=>{let A=G.target;if(!A.dataset.resizeIndex)return;if(G.preventDefault(),G.stopPropagation(),$=parseInt(A.dataset.resizeIndex,10),!B)return;let C=B.getColumn($);if(!C||!C.resizable)return;M=!0,O=G.clientX,T=C.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",A.classList.add(`${j}-table-header-resize--active`),A.setPointerCapture(G.pointerId),A.addEventListener("pointermove",n),A.addEventListener("pointerup",g),A.addEventListener("pointercancel",g)},n=(G)=>{if(!M||!B)return;let A=G.clientX-O;if(Math.abs(A)<1)return;let C=Math.max(0,T+A);Y($,C)},g=(G)=>{if(!M)return;let A=G.target;A.removeEventListener("pointermove",n),A.removeEventListener("pointerup",g),A.removeEventListener("pointercancel",g);try{A.releasePointerCapture(G.pointerId)}catch{}A.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",M=!1,$=-1},r=(G)=>{let A=G.target;if(A.dataset.resizeIndex!==void 0)return;if(M)return;let C=A;while(C&&!C.dataset.columnKey)if(C=C.parentElement,C===_||C===null)return;if(!C||!C.dataset.columnKey)return;let w=C.dataset.columnKey;if(!B)return;let f=B.columns,R=-1;for(let y=0;y<f.length;y++)if(f[y].def.key===w){R=y;break}if(R===-1)return;let I=f[R];if(K)K({key:w,index:R,event:G});if(I.def.sortable&&X){let y;if(V===w)if(b==="asc")y="desc";else y=null;else y="asc";X({key:w,index:R,direction:y})}};return _.addEventListener("pointerdown",h),_.addEventListener("click",r),{element:_,update:x,updateSort:S,rebuild:D,show:()=>{if(P)return;P=!0,_.style.display=""},hide:()=>{if(!P)return;P=!1,_.style.display="none"},destroy:()=>{_.removeEventListener("pointerdown",h),_.removeEventListener("click",r),q.style.position="",q.style.top="",q.style.left="",q.style.right="",q.style.bottom="",Z.remove(),W=[],L=[],E=[],B=null,P=!1},syncScroll:k}};var b1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;return document.createElement("div")},release:(X)=>{if(X.parentNode)X.parentNode.removeChild(X);if(q.length<J)X.className="",X.removeAttribute("data-id"),X.removeAttribute("data-index"),X.removeAttribute("aria-selected"),X.removeAttribute("aria-rowindex"),X.removeAttribute("role"),X.style.cssText="",X.textContent="",q.push(X)},clear:()=>{q.length=0}}},b2=(J,q,Q,j,Y,X,K,Z)=>{let _=b1(),U=new Map,W=-1,L=Q,E=null,P=null,V=(R,I)=>{E=R,P=I},b=(R,I)=>{if(I)R.setAttribute("aria-selected","true");else R.removeAttribute("aria-selected")},B=`${Y}-item ${Y}-table-row`,M=`${Y}-item--selected`,$=`${Y}-item--focused`,O=`${Y}-table-cell`,T=`${Y}-table-cell--center`,z=`${Y}-table-cell--right`,D=`${Y}-item--odd`,x=`${Y}-item ${Y}-table-row ${Y}-table-group-header`,S=`${Y}-table-group-header-content`,k=(R,I,y,F)=>{if(y.def.cell){let v=y.def.cell(I,y.def,F);if(typeof v==="string")R.innerHTML=v;else R.replaceChildren(v)}else{let v=I[y.def.key];R.textContent=v!=null?String(v):""}},h=(R,I,y,F)=>{let v=B;if(Z&&(I&1)===1)v+=` ${D}`;if(y)v+=` ${M}`;if(F)v+=` ${$}`;R.className=v},n=(R,I)=>{let y=I.def.align;if(y==="center")R.classList.add(T),R.classList.remove(z);else if(y==="right")R.classList.add(z),R.classList.remove(T);else R.classList.remove(T,z)},g=(R,I)=>{let F=L.columns.length;if(I.length===F)return I;let v=[];for(let H=0;H<F;H++){let p;if(H<I.length)p=I[H];else p=document.createElement("div"),p.className=O,R.appendChild(p);v.push(p)}for(let H=F;H<I.length;H++)I[H].remove();return v},r=(R,I,y)=>{let F=_.acquire(),v=R;F.style.width=`${L.totalWidth}px`;let H=y.getSize(I);F.style.height=`${H}px`,F.className=x,F.setAttribute("role","presentation"),F.setAttribute("data-id",String(R.id)),F.setAttribute("data-index",String(I)),F.removeAttribute("aria-selected"),F.removeAttribute("aria-rowindex"),F.replaceChildren();let p=document.createElement("div");if(p.className=S,P){let o=P(v.groupKey,v.groupIndex);if(typeof o==="string")p.innerHTML=o;else p.appendChild(o)}F.appendChild(p);let m=y.getOffset(I);return F.style.transform=`translateY(${m}px)`,{element:F,cells:[],index:I,isGroupHeader:!0,lastItemId:R.id,lastSelected:!1,lastFocused:!1,lastOffset:m,lastHeight:H}},l=(R,I,y,F,v)=>{let H=_.acquire();H.style.width=`${L.totalWidth}px`;let p=v.getSize(I);H.style.height=`${p}px`,h(H,I,y,F),H.setAttribute("role","row"),H.setAttribute("data-id",String(R.id)),H.setAttribute("data-index",String(I)),H.id=`${X}-${I}`,H.setAttribute("aria-rowindex",String(I+2));let m=K();if(m!==W)W=m;b(H,y);let o=g(H,[]),s=L.columns;for(let Q0=0;Q0<o.length&&Q0<s.length;Q0++){let c=o[Q0],i=s[Q0];c.style.left=`${i.offset}px`,c.style.width=`${i.width}px`,c.setAttribute("role","gridcell"),c.setAttribute("aria-colindex",String(Q0+1)),n(c,i),k(c,R,i,I)}let J0=v.getOffset(I);return H.style.transform=`translateY(${J0}px)`,{element:H,cells:o,index:I,isGroupHeader:!1,lastItemId:R.id,lastSelected:y,lastFocused:F,lastOffset:J0,lastHeight:p}},N=(R,I,y,F)=>{for(let[o,s]of U)if(o<I.start||o>I.end)_.release(s.element),U.delete(o);let v=!1,H=K();if(H!==W)W=H,v=!0;let p=null,m=q();for(let o=I.start;o<=I.end;o++){let s=o-I.start,J0=R[s];if(!J0)continue;let Q0=y.has(J0.id),c=o===F,i=E?E(J0):!1,a=U.get(o);if(a){if(a.isGroupHeader!==i){_.release(a.element),U.delete(o);let j0=i?r(J0,o,m):l(J0,o,Q0,c,m);if(U.set(o,j0),!p)p=document.createDocumentFragment();p.appendChild(j0.element);continue}if(i){if(a.lastItemId!==J0.id){let K0=J0,N0=a.element.firstElementChild;if(N0&&P){let Y0=P(K0.groupKey,K0.groupIndex);if(typeof Y0==="string")N0.innerHTML=Y0;else N0.replaceChildren(Y0)}a.element.setAttribute("data-id",String(J0.id)),a.lastItemId=J0.id}let q0=m.getOffset(o);if(a.lastOffset!==q0)a.lastOffset=q0,a.element.style.transform=`translateY(${q0}px)`;let X0=m.getSize(o);if(a.lastHeight!==X0)a.lastHeight=X0,a.element.style.height=`${X0}px`}else{let j0=a.lastItemId!==J0.id,q0=a.lastSelected!==Q0,X0=a.lastFocused!==c;if(j0){let Y0=L.columns;for(let W0=0;W0<a.cells.length&&W0<Y0.length;W0++)k(a.cells[W0],J0,Y0[W0],o);h(a.element,o,Q0,c),a.element.setAttribute("data-id",String(J0.id)),b(a.element,Q0),a.lastItemId=J0.id,a.lastSelected=Q0,a.lastFocused=c}else if(q0||X0)h(a.element,o,Q0,c),b(a.element,Q0),a.lastSelected=Q0,a.lastFocused=c;let K0=m.getOffset(o);if(a.lastOffset!==K0)a.lastOffset=K0,a.element.style.transform=`translateY(${K0}px)`;let N0=m.getSize(o);if(a.lastHeight!==N0)a.lastHeight=N0,a.element.style.height=`${N0}px`;if(v)a.element.setAttribute("aria-rowindex",String(o+2))}}else{let j0=i?r(J0,o,m):l(J0,o,Q0,c,m);if(U.set(o,j0),!p)p=document.createDocumentFragment();p.appendChild(j0.element)}}if(p)J.appendChild(p)},u=(R,I,y,F)=>{let v=U.get(R);if(!v)return;if(v.isGroupHeader)return;let H=v.lastItemId!==I.id,p=v.lastSelected!==y,m=v.lastFocused!==F;if(H||p||m){if(H){let o=L.columns;for(let s=0;s<v.cells.length&&s<o.length;s++)k(v.cells[s],I,o[s],R);v.element.setAttribute("data-id",String(I.id)),v.lastItemId=I.id}h(v.element,R,y,F),b(v.element,y),v.lastSelected=y,v.lastFocused=F}},G=(R,I,y)=>{let F=U.get(R);if(!F)return;if(F.isGroupHeader)return;let v=F.lastSelected!==I,H=F.lastFocused!==y;if(v||H)h(F.element,R,I,y),b(F.element,I),F.lastSelected=I,F.lastFocused=y},A=(R)=>{L=R;let I=R.columns;for(let[,y]of U)if(y.element.style.width=`${R.totalWidth}px`,y.cells.length>0)for(let F=0;F<y.cells.length&&F<I.length;F++){let v=y.cells[F],H=I[F];v.style.left=`${H.offset}px`,v.style.width=`${H.width}px`}},C=(R)=>{return U.get(R)?.element},w=()=>{for(let[,R]of U)_.release(R.element);U.clear(),W=-1};return{render:N,updateItem:u,updateItemClasses:G,getElement:C,updateColumnLayout:A,setGroupHeaderFn:V,clear:w,destroy:()=>{w(),_.clear()}}};var H1=new Set,sJ=(J)=>{if(!J.columns||J.columns.length===0)throw Error("[vlist/builder] withTable: columns must be a non-empty array");if(J.rowHeight===void 0&&J.estimatedRowHeight===void 0)throw Error("[vlist/builder] withTable: either rowHeight or estimatedRowHeight is required");let q=null,Q=null,j=null;return{name:"withTable",priority:10,conflicts:["withGrid","withMasonry"],setup(Y){let{dom:X,emitter:K,config:Z}=Y,{classPrefix:_}=Z;if(Z.horizontal)throw Error("[vlist/builder] withTable cannot be used with orientation: 'horizontal'");if(Z.reverse)throw Error("[vlist/builder] withTable cannot be used with reverse: true");let U=J.resizable??!0,W=J.minColumnWidth??50,L=J.maxColumnWidth??1/0,E=J.columnBorders??!1,P=J.rowBorders??!0,V=J.rowHeight,b=J.headerHeight??(typeof V==="number"?V:40),B=J.sort?.key??null,M=J.sort?.direction??"asc";if(q=L2(J.columns,W,L,U),typeof V==="function")Y.setSizeConfig(V);else if(typeof V==="number")Y.setSizeConfig(V);if(Y.rebuildSizeCache(),X.root.classList.add(`${_}--table`),P)X.root.classList.add(`${_}--table-row-borders`);if(E)X.root.classList.add(`${_}--table-col-borders`);X.root.setAttribute("role","grid"),X.root.setAttribute("aria-colcount",String(J.columns.length));let $=-1,O=X.items.getAttribute("aria-label");if(O)X.root.setAttribute("aria-label",O),X.items.removeAttribute("aria-label");X.items.setAttribute("role","rowgroup"),X.viewport.setAttribute("role","none"),X.content.setAttribute("role","none"),X.viewport.removeAttribute("tabindex");let T=Y.getContainerWidth();q.resolve(T);let z=(F,v)=>{if(!q)return;let H=q.getColumn(F);if(!H)return;let p=H.width,m=q.resizeColumn(F,v);if(Q)Q.update(q);if(j)j.updateColumnLayout(q);S(),K.emit("column:resize",{key:H.def.key,index:F,previousWidth:p,width:m})},D=(F)=>{if(F.direction===null)B=null,M="asc";else B=F.key,M=F.direction;if(Q)Q.updateSort(B,M);K.emit("column:sort",F)},x=(F)=>{K.emit("column:click",F)};if(Q=T2(X.root,X.viewport,b,_,z,D,x),Q.rebuild(q),B)Q.updateSort(B,M);let S=()=>{if(!q)return;let F=q.totalWidth;X.content.style.minWidth=`${F}px`,X.items.style.minWidth=`${F}px`};S(),j=b2(X.items,()=>Y.sizeCache,q,J.columns,_,Z.ariaIdPrefix,()=>Y.dataManager.getTotal(),Y.rawConfig.item?.striped);let k=null,h=null,n=!1,g=()=>{if(n)return;n=!0,k=Y.methods.get("_getSelectedIds")??null,h=Y.methods.get("_getFocusedIndex")??null},r=-1,l=-1,N=!0,u=Z.overscan,G={start:0,end:0},A={start:0,end:0},C=()=>{if(Y.state.isDestroyed)return;let F=Y.scrollController.getScrollTop(),v=Y.state.viewportState.containerSize;if(!N&&F===r&&v===l)return;r=F,l=v,N=!1;let H=Y.getVirtualTotal(),p=H+1;if(p!==$)$=p,X.root.setAttribute("aria-rowcount",String(p));if(H===0||v===0)G.start=0,G.end=0;else G.start=Math.max(0,Y.sizeCache.indexAtOffset(F)),G.end=Math.min(H-1,Math.max(0,Y.sizeCache.indexAtOffset(F+v-1)));A.start=Math.max(0,G.start-u),A.end=Math.min(H-1,G.end+u);let m=Y.state.viewportState;m.scrollPosition=F,m.visibleRange.start=G.start,m.visibleRange.end=G.end,m.renderRange.start=A.start,m.renderRange.end=A.end;let o=Y.state.lastRenderRange,s=Y.dataManager.getItemsInRange(A.start,A.end);g();let J0=k?k():H1,Q0=h?h():-1;if(j.render(s,A,J0,Q0),o.start!==A.start||o.end!==A.end)o.start=A.start,o.end=A.end,K.emit("range:change",{range:{start:A.start,end:A.end}})},w=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,N=!0,C()};Y.setRenderFns(C,w);let f=Q,R=-1,I=()=>{let F=X.viewport.scrollLeft;if(F!==R){if(R=F,f.syncScroll)f.syncScroll(F)}};Y.afterScroll.push(()=>{I()});let y=()=>{I()};X.viewport.addEventListener("scroll",y,{passive:!0}),Y.resizeHandlers.push((F,v)=>{if(!q)return;if(q.resolve(F),Q)Q.update(q);if(j)j.updateColumnLayout(q);S()}),Y.methods.set("updateColumns",(F)=>{if(!q||!Q)return;if(q.updateColumns(F),q.resolve(Y.getContainerWidth()),Q.rebuild(q),B)Q.updateSort(B,M);if(S(),j)j.updateColumnLayout(q),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",(F,v)=>{if(!q)return;let H;if(typeof F==="string"){let p=q.columns;H=-1;for(let m=0;m<p.length;m++)if(p[m].def.key===F){H=m;break}if(H===-1)return}else H=F;z(H,v)}),Y.methods.set("getColumnWidths",()=>{if(!q)return{};let F={},v=q.columns;for(let H=0;H<v.length;H++)F[v[H].def.key]=v[H].width;return F}),Y.methods.set("setSort",(F,v)=>{if(B=F,M=v??"asc",Q)Q.updateSort(B,M)}),Y.methods.set("getSort",()=>{return{key:B,direction:M}}),Y.methods.set("_getTableLayout",()=>q),Y.methods.set("_replaceTableRenderer",(F)=>{j=F}),Y.methods.set("_updateTableForGroups",(F,v)=>{if(j)j.setGroupHeaderFn(F,v)}),Y.methods.set("_getTableHeaderHeight",()=>b),Y.contentSizeHandlers.push(()=>{S()}),Y.destroyHandlers.push(()=>{if(X.viewport.removeEventListener("scroll",y),Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null;X.content.style.minWidth="",X.items.style.minWidth="",X.root.classList.remove(`${_}--table`),X.root.removeAttribute("role"),X.root.removeAttribute("aria-colcount"),X.viewport.removeAttribute("role"),X.viewport.setAttribute("tabindex","-1"),X.content.removeAttribute("role");let F=X.root.getAttribute("aria-label");if(F)X.items.setAttribute("aria-label",F),X.root.removeAttribute("aria-label");X.root.removeAttribute("aria-rowcount"),X.items.setAttribute("role","listbox")})},destroy(){if(Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null}}};var $1=50,k1=0.1;function y1(J){let q=0,Q=0,j=0;function Y(){return j>0?Q/j:0}function X(_){if(q=_,_>k1&&_<$1)Q+=_,j++}function K(){let _=J.getTotal();if(_===0)return 0;let U=J.getItemSize();if(U<=0)return 0;let W=J.getContainerSize();if(W<=0)return 0;let L=J.getScrollPosition(),E=typeof J.getColumns==="function"?J.getColumns():1,V=Math.ceil(_/E)*U,B=Math.min(V,b0)-W,M=V-W,$=B>0?M/B:1,O=L*$,T=Math.ceil((O+W)/U);return Math.min(T*E,_)}function Z(){let _=J.getTotal(),U=K();return{progress:_>0?Math.min(100,Math.max(0,U/_*100)):0,velocity:q,velocityAvg:Y(),itemCount:U,total:_}}return{getState:Z,onVelocity:X}}export{sJ as withTable,rJ as withSnapshots,aJ as withSelection,TJ as withScrollbar,$J as withScale,yJ as withPage,cJ as withMasonry,mJ as withGroups,dJ as withGrid,kJ as withAsync,MJ as vlist,u0 as toggleSelection,zJ as simpleVisibleRange,a0 as selectItems,E2 as selectAll,pJ as rangesEqual,U2 as rafThrottle,AJ as needsScaling,Z2 as mergeRanges,lJ as isSelected,R0 as isPlaceholderItem,hJ as isInRange,z0 as isGroupHeader,n0 as getSelectedItems,s0 as getSelectedIds,A0 as getScaleState,LJ as getScaleInfo,A0 as getScale,uJ as getRangeCount,FJ as getMaxItemsWithoutScaling,C2 as filterPlaceholders,gJ as diffRanges,r0 as deselectItems,b2 as createTableRenderer,L2 as createTableLayout,T2 as createTableHeader,W2 as createStickyHeader,y1 as createStats,K2 as createSparseStorage,$0 as createSizeCache,O2 as createSelectionState,h0 as createScrollbar,HJ as createScrollController,B2 as createPlaceholderManager,J2 as createMeasuredSizeCache,M2 as createMasonryRenderer,V2 as createMasonryLayout,c0 as createGroupedSizeFn,_2 as createGroupLayout,l0 as createGridRenderer,G2 as createGridLayout,Q2 as createEmitter,N2 as createAsyncManager,A2 as clearSelection,IJ as clampScrollPosition,vJ as calculateTotalSize,k0 as calculateScrollToIndex,j2 as calculateScaledVisibleRange,q2 as calculateScaledScrollToIndex,OJ as calculateScaledRenderRange,p0 as calculateScaledItemPosition,CJ as calculateRenderRange,m0 as calculateMissingRanges,fJ as calculateItemOffset,EJ as calculateIndexFromScrollPosition,SJ as calculateActualSize,d0 as buildLayoutItems,b0 as MAX_VIRTUAL_SIZE};
|
|
1
|
+
var{defineProperty:i0,getOwnPropertyNames:gJ,getOwnPropertyDescriptor:xJ}=Object,mJ=Object.prototype.hasOwnProperty;var T2=new WeakMap,dJ=(J)=>{var X=T2.get(J),q;if(X)return X;if(X=i0({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")gJ(J).map((j)=>!mJ.call(X,j)&&i0(X,j,{get:()=>J[j],enumerable:!(q=xJ(J,j))||q.enumerable}));return T2.set(J,X),X};var cJ=(J,X)=>{for(var q in X)i0(J,q,{get:X[q],enumerable:!0,configurable:!0,set:(j)=>X[q]=()=>j})};var k2=(J,X)=>()=>(J&&(X=J(J=0)),X);var lJ=(J,X)=>{let q=X;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}},rJ=(J,X)=>{let q=X,j=new Float64Array(0),Y=(K)=>{q=K,j=new Float64Array(K+1),j[0]=0;for(let B=0;B<K;B++)j[B+1]=j[B]+J(B)};Y(X);let Q=(K)=>{if(q===0)return 0;if(K<=0)return 0;if(K>=j[q])return q-1;let B=0,N=q-1;while(B<N){let U=B+N+1>>>1;if(j[U]<=K)B=U;else N=U-1}return B};return{getOffset:(K)=>{if(K<=0)return 0;if(K>=q)return j[q];return j[K]},getSize:(K)=>J(K),indexAtOffset:(K)=>Q(K),getTotalSize:()=>j[q]??0,getTotal:()=>q,rebuild:(K)=>Y(K),isVariable:()=>!0}},P0=(J,X)=>{if(typeof J==="number")return lJ(J,X);return rJ(J,X)},x0=(J,X,q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(q/J.getSize(0));let Y=0,Q=0,K=X;while(K<j&&Q<q)Q+=J.getSize(K),Y++,K++;return Math.max(1,Y)},t0=(J,X,q)=>{if(q===0)return 0;if(!J.isVariable())return Math.floor(X/J.getSize(0));let j=0,Y=0;for(let Q=q-1;Q>=0;Q--){let K=J.getSize(Q);if(Y+K>X)break;Y+=K,j++}return Math.max(j,1)},P2=(J,X,q)=>{if(q===0)return 0;let j=Math.floor(X),Y=X-j,Q=Math.max(0,Math.min(j,q-1));return J.getOffset(Q)+Y*J.getSize(Q)};var C0=(J,X,q)=>{let j=Array.from(X).sort((K,B)=>K-B);if(j.length<=1)return;let Y=[];for(let K=0;K<j.length;K++){let B=q(j[K]);if(B)Y.push(B)}if(Y.length<=1)return;let Q=J.firstChild;for(let K=0;K<Y.length;K++){let B=Y[K];if(B===Q)Q=Q.nextSibling;else J.insertBefore(B,Q)}};var x2=3,m2="vlist",J2=200,f0=50,d2=50,c2=5,l2=2,Q2=16000000,r2=150,a2="x",s2=20,j2="_isPlaceholder",o2="__placeholder_";var $0=(J,X)=>{let q=X.getTotalSize(),j=q>Q2,Y=j?Q2:q,Q=q>0?Y/q:1;return{isCompressed:j,actualSize:q,virtualSize:Y,ratio:Q}},i2=(J,X,q,j,Y,Q)=>{if(j===0||X===0)return Q.start=0,Q.end=-1,Q;if(!Y.isCompressed){let A=q.indexAtOffset(J),R=q.indexAtOffset(J+X);if(R<j-1)R++;return Q.start=Math.max(0,A),Q.end=Math.min(j-1,Math.max(0,R)),Q}let{virtualSize:K}=Y,N=J/K*j,U=Math.floor(N),_=x0(q,Math.max(0,U),X,j),y=Math.ceil(N)+_,H=K-X-J;if(H<=X&&H>=-1){let A=t0(q,X,j),R=Math.max(0,j-A),Z=Math.max(0,Math.min(1,1-H/X));U=Math.floor(U+(R-U)*Z),y=H<=1?j-1:Math.min(j-1,U+_)}return Q.start=Math.max(0,U),Q.end=Math.min(j-1,Math.max(0,y)),Q},l0=(J,X,q,j,Y,Q,K)=>{if(!Q.isCompressed||j===0)return q.getOffset(J);let{virtualSize:B}=Q,N=B-Y,U=N-X;if(U<=Y&&U>=-1){if(X>=N-1){let L=q.getTotalSize()-q.getOffset(J);return Y-L}let H=t0(q,Y,j),A=Math.max(0,j-H),Z=X/B*j,E=Math.max(0,Math.min(1,1-U/Y)),T=q.getOffset(J)-q.getOffset(A),O=q.getOffset(J)-P2(q,Z,j);return O+(T-O)*E}let _=X/B,y=q.getTotalSize(),b=_*y;return q.getOffset(J)-b},t2=(J,X,q,j,Y,Q="start")=>{if(j===0)return 0;let K;if(Y.isCompressed){if(Q==="end"&&J===j-1)return Math.max(0,Y.virtualSize-q);K=J/j*Y.virtualSize}else K=X.getOffset(J);let B=X.getSize(J);switch(Q){case"center":K-=(q-B)/2;break;case"end":K-=q-B;break}let N=Y.virtualSize-q;return Math.max(0,Math.min(K,N))};var q2=()=>{};var w0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var WJ={};cJ(WJ,{createGridRenderer:()=>K2});var q1=(J=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let K=document.createElement("div");return K.setAttribute("role","option"),K},release:(Q)=>{if(Q.remove(),X.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-row"),Q.removeAttribute("data-col"),X.push(Q)},clear:()=>{X.length=0}}},X1=1,K2=(J,X,q,j,Y,Q,K,B,N=!1)=>{let U=q1(),_=new Map,y=Q,b=!1,H=null,A=0,R=0,Z="",E=-1,T=(M)=>{if(H&&A===M)return H;return H=$0(M,q),A=M,H},O={selected:!1,focused:!1},L=(M,D)=>{return O.selected=M,O.focused=D,O},$=`${Y}-item ${Y}-grid-item`,V=`${Y}-item--selected`,I=`${Y}-item--focused`,P=(M,D)=>{if(typeof D==="string")M.innerHTML=D;else M.replaceChildren(D)},u=(M,D,z)=>{M.classList.toggle(V,D),M.classList.toggle(I,z)},d=(M,D)=>{let z=j.getRow(M);if(D){let w=D.totalItems,h=T(w);if(h.isCompressed)return l0(z,D.scrollPosition,q,w,D.containerSize,h,D.rangeStart)}return q.getOffset(z)},S=(M,D)=>{let z=b&&j.getCol(M)===0,w=z?0:j.getCol(M),h=z?0:j.getColumnOffset(w,y),g;if(b){let t=j.getRow(M),l=0,s=new Set;for(let j0=0;j0<M;j0++){let x=j.getRow(j0);if(x<t&&!s.has(x)){let o=q.getSize(j0);l+=o,s.add(x)}}g=l}else g=d(M,D);if(N)return`translate(${Math.round(g)}px, ${Math.round(h)}px)`;return`translate(${Math.round(h)}px, ${Math.round(g)}px)`},c=(M,D)=>{M.style.transform=D},i=(M,D)=>{let z=M.dataset.id?.startsWith("__group_header"),w=z?y:j.getColumnWidth(y),h;if(b||z)h=q.getSize(D)-j.gap;else{let g=j.getRow(D);h=q.getSize(g)-j.gap}if(N)M.style.width=`${h}px`,M.style.height=`${w}px`;else M.style.width=`${w}px`,M.style.height=`${h}px`},p=(M,D,z,w,h)=>{let g=U.acquire(),t=L(z,w);if(g.className=$,g.dataset.index=String(M),g.dataset.id=String(D.id),g.dataset.row=String(j.getRow(M)),g.dataset.col=String(j.getCol(M)),g.ariaSelected=String(z),B)g.id=`${B}-item-${M}`;if(K){let s=K();if(s!==E)E=s,Z=String(s);g.setAttribute("aria-setsize",Z),g.setAttribute("aria-posinset",String(M+1))}i(g,M);let l=X(D,M,t);return P(g,l),u(g,z,w),c(g,h),{element:g,lastItemId:D.id,lastSelected:z,lastFocused:w,lastTransform:h,lastSeenFrame:R}},k=(M,D,z,w,h)=>{if(R++,D.start===0&&M.length>0)b=w0(M[0]);for(let[l,s]of _)if(l>=D.start&&l<=D.end)s.lastSeenFrame=R;else if(R-s.lastSeenFrame>X1)U.release(s.element),_.delete(l);let g=!1;if(K){let l=K();if(l!==E)E=l,Z=String(l),g=!0}let t=null;for(let l=D.start;l<=D.end;l++){let s=l-D.start,j0=M[s];if(!j0){console.warn(`⚠️ RENDER: Missing item at index ${l} (range: ${D.start}-${D.end}, items.length: ${M.length})`);continue}let x=z.has(j0.id),o=l===w,n=_.get(l);if(n){let q0=n.lastItemId!==j0.id,e=n.lastSelected!==x,X0=n.lastFocused!==o;if(q0||e||X0){if(q0){let _0=L(x,o),Y0=X(j0,l,_0);P(n.element,Y0),n.element.dataset.id=String(j0.id),n.element.dataset.row=String(j.getRow(l)),n.element.dataset.col=String(j.getCol(l)),i(n.element,l)}u(n.element,x,o),n.element.ariaSelected=String(x),n.lastItemId=j0.id,n.lastSelected=x,n.lastFocused=o}let B0=S(l,h);if(n.lastTransform!==B0)c(n.element,B0),n.lastTransform=B0;if(g)n.element.setAttribute("aria-setsize",Z)}else{let q0=S(l,h),e=p(l,j0,x,o,q0);if(!t)t=document.createDocumentFragment();t.appendChild(e.element),_.set(l,e)}}if(t)J.appendChild(t)},f=(M)=>{for(let[D,z]of _){let w=S(D,M);if(z.lastTransform!==w)c(z.element,w),z.lastTransform=w}},G=(M,D,z,w)=>{let h=_.get(M);if(!h)return;let g=h.lastItemId!==D.id,t=h.lastSelected!==z,l=h.lastFocused!==w;if(g||t||l){let s=L(z,w),j0=X(D,M,s);P(h.element,j0),u(h.element,z,w),h.element.dataset.id=String(D.id),h.element.ariaSelected=String(z),i(h.element,M),h.lastItemId=D.id,h.lastSelected=z,h.lastFocused=w}},F=(M,D,z)=>{let w=_.get(M);if(!w)return;let h=w.lastSelected!==D,g=w.lastFocused!==z;if(h||g)u(w.element,D,z),w.lastSelected=D,w.lastFocused=z},v=(M)=>{return _.get(M)?.element},W=(M)=>{if(Math.abs(M-y)<1)return;y=M;for(let[D,z]of _){i(z.element,D);let w=S(D);c(z.element,w),z.lastTransform=w}},C=()=>{C0(J,_.keys(),(M)=>_.get(M)?.element)},r=()=>{for(let[,M]of _)U.release(M.element);_.clear()};return{render:k,updatePositions:f,updateItem:G,updateItemClasses:F,getElement:v,sortDOM:C,updateContainerWidth:W,clear:r,destroy:()=>{r(),U.clear()}}};var B2=k2(()=>{q2()});var b2=2,H2=(J=0)=>{let X=[,,,,,];for(let q=0;q<5;q++)X[q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:X,sampleIndex:0,sampleCount:0}},y2=(J,X)=>{let q=performance.now(),j=q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let Q=J.samples[0];return Q.position=X,Q.time=q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=X,J.lastTime=q,J}let Y=J.samples[J.sampleIndex];if(Y.position=X,Y.time=q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let Q=(J.sampleIndex-J.sampleCount+5)%5,K=J.samples[Q],B=X-K.position,N=q-K.time;J.velocity=N>0?Math.abs(B)/N:0}return J.lastPosition=X,J.lastTime=q,J};var $2=(J,X)=>{let q=new Map,j=(Q)=>{let K=q.get(Q);return K!==void 0?K:J},Y=P0(j,X);return{getOffset(Q){return Y.getOffset(Q)},getSize(Q){return j(Q)},indexAtOffset(Q){return Y.indexAtOffset(Q)},getTotalSize(){return Y.getTotalSize()},getTotal(){return Y.getTotal()},rebuild(Q){if(Q<Y.getTotal()){for(let K of q.keys())if(K>=Q)q.delete(K)}Y=P0(j,Q)},isVariable(){return!0},setMeasuredSize(Q,K){q.set(Q,K)},isMeasured(Q){return q.has(Q)},getEstimatedSize(){return J},measuredCount(){return q.size}}};var w2=()=>{let J={},X=(B,N)=>{if(!J[B])J[B]=new Set;return J[B].add(N),()=>q(B,N)},q=(B,N)=>{J[B]?.delete(N)};return{on:X,off:q,emit:(B,N)=>{J[B]?.forEach((U)=>{try{U(N)}catch(_){console.error(`[vlist] Error in event handler for "${String(B)}":`,_)}})},once:(B,N)=>{let U=(_)=>{q(B,U),N(_)};return X(B,U)},clear:(B)=>{if(B)delete J[B];else for(let N in J)delete J[N]},listenerCount:(B)=>{return J[B]?.size??0}}};var R2=(J)=>{if(typeof J==="string"){let X=document.querySelector(J);if(!X)throw Error(`[vlist/builder] Container not found: ${J}`);return X}return J},v2=(J,X,q,j)=>{let Y=document.createElement("div");if(Y.className=X,j)Y.classList.add(`${X}--horizontal`);Y.setAttribute("tabindex","0");let Q=document.createElement("div");if(Q.className=`${X}-viewport`,Q.setAttribute("tabindex","-1"),j)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${X}-content`,K.style.position="relative",j)K.style.height="100%";else K.style.width="100%";let B=document.createElement("div");if(B.className=`${X}-items`,B.setAttribute("role","listbox"),q)B.setAttribute("aria-label",q);if(j)B.setAttribute("aria-orientation","horizontal");if(B.style.position="relative",j)B.style.height="100%";else B.style.width="100%";return K.appendChild(B),Q.appendChild(K),Y.appendChild(Q),J.appendChild(Y),{root:Y,viewport:Q,content:K,items:B}};var z2=(J=100)=>{let X=[];return{acquire:()=>{let q=X.pop();if(q)return q;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:(q)=>{if(X.length<J)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),X.push(q)},clear:()=>{X.length=0}}};var C2=(J,X,q,j,Y)=>{if(j===0||X===0){Y.start=0,Y.end=0;return}let Q=q.indexAtOffset(J),K=x0(q,Q,X,j),B=Q+K;Y.start=Math.max(0,Q),Y.end=Math.min(j-1,Math.max(0,B))},S2=(J,X,q,j)=>{if(q===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-X),j.end=Math.min(q-1,J.end+X)},f2=(J,X,q,j,Y,Q=0)=>{if(j===0)return 0;let K=Math.max(0,Math.min(J,j-1)),B=X.getOffset(K),N=X.getSize(K),U=X.getTotalSize(),_=Math.max(0,U+Q-q),y;switch(Y){case"center":y=B-(q-N)/2;break;case"end":y=Q>0&&B+N>=U?_:B-q+N;break;default:y=B}return Math.max(0,Math.min(y,_))};var m0={top:0,right:0,bottom:0,left:0},z0=(J)=>{if(J==null)return m0;if(typeof J==="number")return J===0?m0:{top:J,right:J,bottom:J,left:J};if(J.length===2){let[Q,K]=J;return Q===0&&K===0?m0:{top:Q,right:K,bottom:Q,left:K}}let[X,q,j,Y]=J;return X===0&&q===0&&j===0&&Y===0?m0:{top:X,right:q,bottom:j,left:Y}},d0=(J,X)=>X?J.left+J.right:J.top+J.bottom,c0=(J,X)=>X?J.top+J.bottom:J.left+J.right;var I2=(J,X)=>{let{dom:q,emitter:j,resolvedConfig:Y,rawConfig:Q,rendered:K,pool:B,sharedState:N,isHorizontal:U,classPrefix:_,contentSizeHandlers:y,idleHandlers:b,afterScroll:H,clickHandlers:A,keydownHandlers:R,resizeHandlers:Z,destroyHandlers:E,methods:T,onScrollFrame:O,resizeObserver:L,renderRange:$}=X;return{get dom(){return q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return Y},get rawConfig(){return Q},adjustScrollPosition(V){if(J.mp===0)return V;let I=U?J.cw:J.ch,P=J.hc.getTotalSize(),u=Math.max(0,P-I),d=Math.max(0,P+J.mp-I);if(V>=u)return d;return Math.min(V,d)},get renderer(){return{render:(V,I,P,u,d)=>{J.ss=P,J.fi=u,J.ffn()},updateItemClasses:(V,I,P)=>{let u=K.get(V);if(!u)return;u.classList.toggle(`${_}-item--selected`,I),u.classList.toggle(`${_}-item--focused`,P),u.ariaSelected=I?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(V)=>K.get(V)??null,clear:()=>{},destroy:()=>{}}},set renderer(V){},get dataManager(){return J.dm},set dataManager(V){J.dm=V},get scrollController(){return J.sc},set scrollController(V){J.sc=V},state:N,getContainerWidth(){return J.cw},afterScroll:H,idleHandlers:b,clickHandlers:A,keydownHandlers:R,resizeHandlers:Z,contentSizeHandlers:y,destroyHandlers:E,methods:T,replaceTemplate(V){J.at=V},replaceRenderer(V){},replaceDataManager(V){J.dm=V},replaceScrollController(V){J.sc=V},getItemsForRange(V){let{dm:I,it:P}=J,u=[];for(let d=V.start;d<=V.end;d++){let S=I?I.getItem(d):P[d];if(S)u.push(S)}return u},getAllLoadedItems(){let V=J.dm;if(V){let I=V.getTotal(),P=[];for(let u=0;u<I;u++){let d=V.getItem(u);if(d)P.push(d)}return P}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let V=J.hc;return{isCompressed:!1,actualSize:V.getTotalSize(),virtualSize:V.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:$.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,V]of K)V.remove(),B.release(V);K.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(V,I){J.rfn=V,J.ffn=I},setVirtualTotalFn(V){J.vtf=V},rebuildSizeCache(V){J.hc.rebuild(V??J.vtf())},setSizeConfig(V){if(J.hc=P0(V,J.vtf()),J.gp>0){let I=J.hc.getTotalSize,P=J.gp;J.hc.getTotalSize=()=>{let u=I();return u>0?u-P:0}}},updateContentSize(V){let I=`${V+J.mp}px`;if(U)q.content.style.width=I;else q.content.style.height=I},updateCompressionMode(){},setVisibleRangeFn(V){J.gvr=V},setScrollToPosFn(V){J.gsp=V},setPositionElementFn(V){J.pef=V},setScrollFns(V,I){J.sgt=V,J.sst=(P)=>{I(P),O()}},setScrollTarget(V){J.st.removeEventListener("scroll",O),J.st=V,J.st.addEventListener("scroll",O,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(V){J.gcw=V.width,J.gch=V.height,J.cw=V.width(),J.ch=V.height(),N.viewportState.containerSize=U?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,L.unobserve(q.viewport)},disableWheelHandler(){if(J.wh)q.viewport.removeEventListener("wheel",J.wh),J.wh=null},getStripeIndexFn(){return J.sif},setStripeIndexFn(V){J.sif=V}}},p2=(J,X,q)=>{let{rendered:j,itemState:Y,contentSizeHandlers:Q,applyTemplate:K,updateContentSize:B}=X,N=()=>{J.hc.rebuild(J.vtf()),B(),q.updateCompressionMode();for(let U=0;U<Q.length;U++)Q[U]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(U)=>J.it[U],isItemLoaded:(U)=>U>=0&&U<J.it.length&&J.it[U]!==void 0,getItemsInRange:(U,_)=>{let y=J.it,b=[],H=Math.max(0,U),A=Math.min(_,y.length-1);for(let R=H;R<=A;R++)b.push(y[R]);return b},setTotal:(U)=>{},setItems:(U,_=0,y)=>{let b=J.it;if(_===0&&(y!==void 0||b.length===0))J.it=U;else{let H=_+U.length;if(b.length<H)b.length=H;for(let A=0;A<U.length;A++)b[_+A]=U[A]}if(J.ii)N()},updateItem:(U,_)=>{let y=J.it;if(U<0||U>=y.length)return!1;let b=y[U];if(!b)return!1;y[U]={...b,..._};let H=j.get(U);if(H)K(H,J.at(y[U],U,Y)),H.dataset.id=String(y[U].id);return!0},removeItem:(U)=>{if(U<0||U>=J.it.length)return!1;if(J.it.splice(U,1),J.ii)N();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),B(),J.ffn()}}},h2=(J,X)=>{let{dom:q,classPrefix:j}=X;return{getScrollTop:()=>J.sgt(),scrollTo:(Y)=>{J.sst(Y),J.ls=Y,J.rfn()},scrollBy:(Y)=>{let Q=J.sgt()+Y;J.sst(Q),J.ls=Q,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(Y=2)=>J.sab(Y),getScrollPercentage:()=>{let Y=J.hc.getTotalSize(),Q=Math.max(0,Y-J.ch);return Q>0?J.ls/Q:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>q.root.classList.contains(`${j}--scrolling`),updateConfig:()=>{},enableCompression:()=>{J.sic=!0},disableCompression:()=>{J.sic=!1},isCompressed:()=>J.sic,isWindowMode:()=>!1,updateContainerHeight:(Y)=>{J.ch=Y},destroy:()=>{}}};var u2=(J,X,q,j,Y,Q,K,B,N,U=0)=>{let _=(Z,E=!1)=>{let T=q?X.viewport.scrollWidth-X.viewport.clientWidth:X.viewport.scrollHeight-X.viewport.clientHeight;if(T<=0||Z<T-2)return!1;let O=Math.max(0,J.hc.getTotalSize()-(q?J.cw:J.ch));if(O>Z){if(J.sst(O),J.ls=O,E)J.rfn();return!0}return!1};if(!N||!B)return{ob:null,ei:null,mc:null,fl:()=>{},se:_};let y=new WeakMap,b=0,H=!1,A=null,R=()=>{if(H){let Z=J.sgt();K(),H=!1,_(Z,!0)}};return A=new ResizeObserver((Z)=>{if(J.id)return;let E=!1,T=j.start;for(let O of Z){let L=y.get(O.target);if(L===void 0)continue;let $=q?O.borderBoxSize[0].inlineSize:O.borderBoxSize[0].blockSize;if(!B.isMeasured(L)){let V=$+U,I=B.getSize(L);if(B.setMeasuredSize(L,V),E=!0,L<T&&V!==I)b+=V-I;A.unobserve(O.target);let P=O.target;if(q)P.style.width=`${$}px`;else P.style.height=`${$}px`}}if(!E)return;if(B.rebuild(J.vtf()),J.hc=B,b!==0){let O=J.sgt();J.sst(O+b),J.ls=O+b,b=0}if(Q())H=!0;else{let O=J.sgt();K(),H=!1,_(O)}Y.start=-1,Y.end=-1,J.rfn()}),{ob:A,ei:y,mc:B,fl:R,se:_}};var e0=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,b0=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},S0=(J,X)=>{let q=null,j=()=>{if(q!==null)cancelAnimationFrame(q),q=null};return{animateScroll:(Q,K,B)=>{if(j(),Math.abs(K-Q)<1){J.scrollTo(K);return}let N=performance.now(),U=(_)=>{let y=_-N,b=Math.min(y/B,1),H=Q+(K-Q)*e0(b);if(J.scrollTo(H),X(),b<1)q=requestAnimationFrame(U);else q=null};q=requestAnimationFrame(U)},cancelScroll:j}};var g2=(J,X,q,j,Y,Q,K,B,N,U,_,y,b,H,A,R,Z,E)=>{let T=(G)=>{N.dataManager.setItems(G,0,G.length)},O=U?(G)=>{let F=J.sab(2),v=J.it.length;if(N.dataManager.setItems(G,v),F&&J.it.length>0){let W=J.gsp(J.it.length-1,J.hc,J.ch,J.it.length,"end");J.sst(W),J.ls=W,J.rfn()}}:(G)=>{let F=J.it.length;N.dataManager.setItems(G,F)},L=U?(G)=>{let F=J.sgt(),v=J.hc.getTotalSize(),W=[...J.it];N.dataManager.clear(),N.dataManager.setItems([...G,...W],0);let r=J.hc.getTotalSize()-v;if(r>0)J.sst(F+r),J.ls=F+r}:(G)=>{let F=[...J.it];N.dataManager.clear(),N.dataManager.setItems([...G,...F],0)},$=(G,F)=>{N.dataManager.updateItem(G,F)},V=(G)=>{N.dataManager.removeItem(G)},I=async()=>{if(N.dataManager.reload)await N.dataManager.reload()},P=null,u=()=>{if(P!==null)cancelAnimationFrame(P),P=null},d=(G,F,v)=>{if(u(),Math.abs(F-G)<1){J.sst(F),J.ls=F,J.rfn();return}let W=performance.now(),C=(r)=>{let a=r-W,M=Math.min(a/v,1),D=G+(F-G)*e0(M);if(J.sst(D),J.ls=D,J.rfn(),M<1)P=requestAnimationFrame(C);else P=null};P=requestAnimationFrame(C)},S=(G,F)=>{let{align:v,behavior:W,duration:C}=b0(F),r=J.vtf(),a=G;if(_&&r>0)a=(a%r+r)%r;let M=J.gsp(a,J.hc,J.ch,r,v);if(W==="smooth")d(J.sgt(),M,C);else u(),J.sst(M)},c=()=>J.sgt(),i=(G,F)=>{return q.on(G,F)},p=(G,F)=>{q.off(G,F)},k=()=>{if(J.id)return;if(J.id=!0,N.state.isDestroyed=!0,X.items.removeEventListener("click",y),X.items.removeEventListener("dblclick",b),X.root.removeEventListener("keydown",H),J.st.removeEventListener("scroll",A),R.disconnect(),Z(),J.wh)X.viewport.removeEventListener("wheel",J.wh);E();for(let G=0;G<B.length;G++)B[G]();for(let G of K)if(G.destroy)G.destroy();u();for(let[,G]of j)G.remove(),Y.release(G);j.clear(),Y.clear(),q.emit("destroy",void 0),q.clear(),X.root.remove()},f={get element(){return X.root},get items(){if(Q.has("_getItems"))return Q.get("_getItems")();return J.it},get total(){if(Q.has("_getTotal"))return Q.get("_getTotal")();return J.vtf()},setItems:Q.has("setItems")?Q.get("setItems"):T,appendItems:Q.has("appendItems")?Q.get("appendItems"):O,prependItems:Q.has("prependItems")?Q.get("prependItems"):L,updateItem:Q.has("updateItem")?Q.get("updateItem"):$,removeItem:Q.has("removeItem")?Q.get("removeItem"):V,reload:Q.has("reload")?Q.get("reload"):I,scrollToIndex:Q.has("scrollToIndex")?Q.get("scrollToIndex"):S,cancelScroll:Q.has("cancelScroll")?Q.get("cancelScroll"):u,getScrollPosition:Q.has("getScrollPosition")?Q.get("getScrollPosition"):c,on:i,off:p,destroy:k};for(let[G,F]of Q){if(G.charCodeAt(0)===95||G==="setItems"||G==="appendItems"||G==="prependItems"||G==="updateItem"||G==="removeItem"||G==="reload"||G==="scrollToIndex"||G==="scrollToItem"||G==="cancelScroll"||G==="getScrollPosition")continue;f[G]=F}return f};var aJ=0,n2=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let X=J.orientation==="horizontal",q=X?"width":"height",j=X?"estimatedWidth":"estimatedHeight",Y=X?J.item.width:J.item.height,Q=X?J.item.estimatedWidth:J.item.estimatedHeight;if(Y==null&&Q==null)throw Error(`[vlist/builder] item.${q} or item.${j} is required${X?" when orientation is 'horizontal'":""}`);if(Y!=null){if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${q} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${q} must be a number or a function (index) => number`)}else if(Q!=null){if(typeof Q!=="number"||Q<=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(X&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let K=new Map,B=!1,N={use(U){if(B)throw Error("[vlist/builder] Cannot call .use() after .build()");return K.set(U.name,U),N},build(){if(B)throw Error("[vlist/builder] .build() can only be called once");return B=!0,sJ(J,K,X,Y,Q??null)}};return N};function sJ(J,X,q,j,Y){let{item:Q,items:K,overscan:B=x2,classPrefix:N=m2,ariaLabel:U,padding:_,reverse:y=!1,scroll:b}=J,H=b,A=H?.wheel??!0,R=H?.wrap??!1,Z=y,E=`${N}-${aJ++}`,T=X.has("withGrid")||X.has("withMasonry")?0:Q.gap??0,O=j??Y,L=j==null&&Y!=null,$=typeof matchMedia==="function"&&matchMedia("(pointer: coarse)").matches&&!matchMedia("(pointer: fine)").matches,V=q?typeof Q.height==="number"?Q.height:void 0:typeof Q.width==="number"?Q.width:void 0,I={overscan:B,classPrefix:N,reverse:Z,wrap:R,horizontal:q,ariaIdPrefix:E},P=Array.from(X.values()).sort((m,J0)=>(m.priority??50)-(J0.priority??50)),u=new Set(P.map((m)=>m.name));for(let m of P)if(m.conflicts){for(let J0 of m.conflicts)if(u.has(J0))throw Error(`[vlist/builder] ${m.name} and ${J0} cannot be combined`)}if(Z){if(u.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let d=R2(J.container),S=v2(d,N,U,q);if(H?.wheel===!1)if(q)S.viewport.style.overflowX="hidden";else S.viewport.style.overflow="hidden";if(H?.scrollbar==="none")S.viewport.classList.add(`${N}-viewport--no-scrollbar`);let c=z0(_),i=d0(c,q);if(c.top||c.right||c.bottom||c.left)S.content.style.boxSizing="border-box",S.content.style.padding=`${c.top}px ${c.right}px ${c.bottom}px ${c.left}px`;let p=w2(),k=K||[],f=typeof O==="function"&&(X.has("withGrid")||X.has("withMasonry")),G=T>0?typeof O==="function"?(m)=>O(m)+T:O+T:O,F=L?$2(Y+T,k.length):P0(G,f?0:k.length);if(T>0){let m=F.getTotalSize;F.getTotalSize=()=>{let J0=m();return J0>0?J0-T:0}}let v=z2(),W={it:k,hc:F,ch:S.viewport.clientHeight,cw:S.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:H2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:q?()=>S.viewport.scrollLeft:()=>S.viewport.scrollTop,sst:q?(m)=>{S.viewport.scrollLeft=m}:(m)=>{S.viewport.scrollTop=m},sab:(m=2)=>{let J0=W.hc.getTotalSize();return W.ls+W.ch>=J0-m},sic:!1,rfn:null,ffn:null,gvr:(m,J0,Q0,Z0,M0)=>{C2(m,J0,Q0,Z0,M0)},gsp:(m,J0,Q0,Z0,M0)=>{return f2(m,J0,Q0,Z0,M0,W.mp)},pef:null,at:Q.template,vre:!0,st:S.viewport,wh:null,gcw:()=>W.cw,gch:()=>W.ch,gp:T,mp:i,sif:(m)=>m};W.vtf=()=>W.dm?W.dm.getTotal():W.it.length;let C=null,r=!1,a={start:0,end:0},M={start:0,end:0},D={start:-1,end:-1},z={viewportState:{scrollPosition:0,containerSize:q?W.cw:W.ch,totalSize:W.hc.getTotalSize(),actualSize:W.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},w=new Map,h=()=>{C0(S.items,w.keys(),(m)=>w.get(m))},g=()=>{let m=`${W.hc.getTotalSize()+i}px`;if(q)S.content.style.width=m;else S.content.style.height=m},l=u2(W,S,q,a,D,()=>r,g,L?F:null,L,T),s={selected:!1,focused:!1},j0=`${N}-item`,x=Q.striped,o=!!x,n=x==="data"||x==="even"||x==="odd",q0=`${N}-item--odd`,e=[],X0=[],B0=[],_0=[],Y0=[],G0=[],D0=[],U0=new Map,A0=null,W0=null,L0=!1,R0=()=>{if(L0)return;L0=!0,A0=U0.get("_getSelectedIds")??null,W0=U0.get("_getFocusedIndex")??null},s0=(m,J0)=>{if(typeof J0==="string")m.innerHTML=J0;else m.replaceChildren(J0)},zJ=(m,J0)=>{let Q0=Math.round(W.hc.getOffset(J0));if(q)m.style.transform=`translateX(${Q0}px)`;else m.style.transform=`translateY(${Q0}px)`};W.pef=zJ;let CJ=(m,J0)=>{let Q0=v.acquire();Q0.className=j0;let Z0=!L||l.mc&&l.mc.isMeasured(m);if(q){if(Z0)Q0.style.width=`${W.hc.getSize(m)-T}px`;else Q0.style.width="";if(V!=null)Q0.style.height=`${V}px`}else if(Z0)Q0.style.height=`${W.hc.getSize(m)-T}px`;else Q0.style.height="";if(Q0.dataset.index=String(m),Q0.dataset.id=String(J0.id),Q0.ariaSelected="false",Q0.id=`${E}-item-${m}`,W.la=String(W.vtf()),Q0.setAttribute("aria-setsize",W.la),Q0.setAttribute("aria-posinset",String(m+1)),String(J0.id).startsWith("__placeholder_"))Q0.classList.add(`${N}-item--placeholder`);if(o)if(n){let V0=W.sif(m);if(V0<0)Q0.classList.remove(q0);else Q0.classList.toggle(q0,(V0&1)===1)}else Q0.classList.toggle(q0,(m&1)===1);return s0(Q0,W.at(J0,m,s)),W.pef(Q0,m),Q0},SJ=()=>{if(W.id)return;R0();let m=A0?A0():W.ss,J0=W0?W0():W.fi,Q0=W.vtf(),Z0=q?W.cw:W.ch;if(W.gvr(W.ls,Z0,W.hc,Q0,a),S2(a,B,Q0,M),M.start===D.start&&M.end===D.end){if(W.sic)for(let[K0,O0]of w)W.pef(O0,K0);return}let M0=String(Q0),V0=M0!==W.la;W.la=M0;for(let[K0,O0]of w)if(K0<M.start||K0>M.end)O0.remove(),v.release(O0),w.delete(K0);let N0=document.createDocumentFragment(),F0=[],T0=[];for(let K0=M.start;K0<=M.end;K0++){let O0=W.dm?W.dm.getItem(K0):W.it[K0];if(O0===void 0)continue;let E0=w.get(K0);if(E0){let k0=E0.dataset.id,I0=String(O0.id);if(k0!==I0){let uJ=k0?.startsWith("__placeholder_"),F2=I0.startsWith("__placeholder_");s0(E0,W.at(O0,K0,s)),E0.dataset.id=I0;let L2=!L||l.mc&&l.mc.isMeasured(K0);if(q)E0.style.width=L2?`${W.hc.getSize(K0)-T}px`:"";else E0.style.height=L2?`${W.hc.getSize(K0)-T}px`:"";if(F2)E0.classList.add(`${N}-item--placeholder`);else E0.classList.remove(`${N}-item--placeholder`);if(uJ&&!F2)E0.classList.add(`${N}-item--replaced`),setTimeout(()=>{E0.classList.remove(`${N}-item--replaced`)},300)}W.pef(E0,K0);let g0=m.has(O0.id),hJ=K0===J0;if(E0.classList.toggle(`${N}-item--selected`,g0),E0.classList.toggle(`${N}-item--focused`,hJ),E0.ariaSelected=g0?"true":"false",V0)E0.setAttribute("aria-setsize",W.la)}else{let k0=CJ(K0,O0);T0.push({index:K0,element:k0});let I0=m.has(O0.id),g0=K0===J0;if(I0)k0.classList.add(`${N}-item--selected`),k0.ariaSelected="true";if(g0)k0.classList.add(`${N}-item--focused`);N0.appendChild(k0),F0.push({index:K0,element:k0})}}if(F0.length>0){S.items.appendChild(N0);for(let{index:K0,element:O0}of F0)w.set(K0,O0)}if(L&&l.ob&&l.mc&&l.ei){for(let{index:K0,element:O0}of T0)if(!l.mc.isMeasured(K0))l.ei.set(O0,K0),l.ob.observe(O0)}D.start=M.start,D.end=M.end,z.lastRenderRange.start=M.start,z.lastRenderRange.end=M.end,z.viewportState.scrollPosition=W.ls,z.viewportState.visibleRange.start=a.start,z.viewportState.visibleRange.end=a.end,z.viewportState.renderRange.start=M.start,z.viewportState.renderRange.end=M.end,p.emit("range:change",{range:{start:M.start,end:M.end}})},fJ=()=>{D.start=-1,D.end=-1,W.rfn()};W.rfn=SJ,W.ffn=fJ;let IJ=()=>{S.root.classList.remove(`${N}--scrolling`),r=!1,W.vt.velocity=0,W.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),l.fl(),h();for(let m=0;m<X0.length;m++)X0[m]();p.emit("scroll:idle",{scrollPosition:W.ls})},pJ=()=>{if(C)clearTimeout(C);C=setTimeout(IJ,H?.idleTimeout??r2)},h0=()=>{if(W.id)return;let m=W.sgt();if(m===W.ls&&r)return;let J0=m>=W.ls?"down":"up";if(W.vt=y2(W.vt,m),!S.root.classList.contains(`${N}--scrolling`))S.root.classList.add(`${N}--scrolling`);r=!0,W.ls=m,W.rfn(),p.emit("scroll",{scrollPosition:m,direction:J0}),p.emit("velocity:change",{velocity:W.vt.velocity,reliable:W.vt.sampleCount>=b2});for(let Q0=0;Q0<e.length;Q0++)e[Q0](m,J0);pJ()},v0=null;if(W.st.addEventListener("scroll",h0,{passive:!0}),A&&!q&&!$)v0=(m)=>{if(z.viewportState.isCompressed)return;let J0=S.viewport.scrollWidth>S.viewport.clientWidth;if(J0&&Math.abs(m.deltaX)>Math.abs(m.deltaY))return;if(m.preventDefault(),J0&&m.deltaX!==0)S.viewport.scrollLeft+=m.deltaX;let Q0=W.sgt(),Z0=S.viewport.scrollHeight-S.viewport.clientHeight,M0=Math.max(0,Math.min(Q0+m.deltaY,Z0));if(Math.abs(M0-Q0)<1)return;W.sst(M0),h0()},W.wh=v0,S.viewport.addEventListener("wheel",v0,{passive:!1});else if(q&&A)v0=(m)=>{if(m.deltaX)return;m.preventDefault(),S.viewport.scrollLeft+=m.deltaY},W.wh=v0,S.viewport.addEventListener("wheel",v0,{passive:!1});let G2=(m)=>{let J0=m.target.closest("[data-index]");if(!J0)return null;let Q0=parseInt(J0.dataset.index??"-1",10);if(Q0<0)return null;let Z0=W.dm?.getItem(Q0)??W.it[Q0];if(!Z0||Z0.__groupHeader)return null;return{item:Z0,index:Q0}},M2=(m)=>{let J0=G2(m);if(J0)p.emit("item:click",{item:J0.item,index:J0.index,event:m});for(let Q0=0;Q0<B0.length;Q0++)B0[Q0](m)},O2=(m)=>{let J0=G2(m);if(J0)p.emit("item:dblclick",{item:J0.item,index:J0.index,event:m})},E2=(m)=>{for(let J0=0;J0<_0.length;J0++)_0[J0](m)};S.items.addEventListener("click",M2),S.items.addEventListener("dblclick",O2),S.root.addEventListener("keydown",E2);let o0=new ResizeObserver((m)=>{if(W.id)return;for(let J0 of m){let Q0=J0.contentRect.height,Z0=J0.contentRect.width,M0=q?Z0:Q0,V0=q?W.cw:W.ch;if(W.cw=Z0,W.ch=Q0,Math.abs(M0-V0)>1){if(z.viewportState.containerSize=M0,W.ii)g(),W.rfn(),p.emit("resize",{height:Q0,width:Z0})}if(W.ii)for(let N0=0;N0<Y0.length;N0++)Y0[N0](Z0,Q0)}});if(W.vre)o0.observe(S.viewport);let n0={dom:S,emitter:p,resolvedConfig:I,rawConfig:J,rendered:w,pool:v,itemState:s,sharedState:z,renderRange:M,isHorizontal:q,classPrefix:N,contentSizeHandlers:G0,idleHandlers:X0,afterScroll:e,clickHandlers:B0,keydownHandlers:_0,resizeHandlers:Y0,destroyHandlers:D0,methods:U0,onScrollFrame:h0,resizeObserver:o0,applyTemplate:s0,updateContentSize:g},u0=I2(W,n0);W.dm=p2(W,n0,u0),W.sc=h2(W,n0);let A2=new Map;for(let m of P)if(m.methods)for(let J0 of m.methods){let Q0=A2.get(J0);if(Q0)throw Error(`[vlist/builder] Method "${J0}" is registered by both "${Q0}" and "${m.name}"`);A2.set(J0,m.name)}for(let m of P)m.setup(u0);if(!U0.has("_getFocusedIndex")){let m=-1,J0=`${N}-item--focused`,Q0=(V0,N0)=>{let F0=W.vtf();if(N0<0||N0>=F0)return;m=N0,S.root.setAttribute("aria-activedescendant",`${E}-item-${N0}`);let T0=q?W.cw:W.ch;if(W.sst(W.gsp(N0,W.hc,T0,F0,"center")),W.ls=W.sgt(),W.rfn(),V0>=0&&V0!==N0)w.get(V0)?.classList.remove(J0);w.get(N0)?.classList.add(J0)},Z0=()=>{if(W.id)return;if(!S.root.matches(":focus-visible"))return;let V0=W.vtf();if(V0===0)return;Q0(-1,m>=0?Math.min(m,V0-1):0)};S.root.addEventListener("focusin",Z0);let M0=(V0)=>{if(W.id)return;let N0=V0.relatedTarget;if(N0&&S.root.contains(N0))return;if(m>=0)w.get(m)?.classList.remove(J0);S.root.removeAttribute("aria-activedescendant")};S.root.addEventListener("focusout",M0),_0.push((V0)=>{if(W.id)return;let N0=W.vtf();if(N0===0)return;let F0=m,T0=F0;switch(V0.key){case"ArrowUp":T0=F0<=0?N0-1:F0-1;break;case"ArrowDown":T0=F0>=N0-1?0:F0+1;break;case"Home":T0=0;break;case"End":T0=N0-1;break;default:return}V0.preventDefault(),Q0(F0,T0)}),D0.push(()=>{S.root.removeEventListener("focusin",Z0),S.root.removeEventListener("focusout",M0)})}if(W.ii=!0,u0.state.isInitialized=!0,g(),W.rfn(),Z&&W.it.length>0){let m=W.gsp(W.it.length-1,W.hc,W.ch,W.it.length,"end");W.sst(m),W.ls=m,W.rfn()}return g2(W,S,p,w,v,U0,P,D0,u0,Z,R,M2,O2,E2,h0,o0,()=>{if(l.ob)l.ob.disconnect()},()=>{if(C)clearTimeout(C)})}q2();var p0=(J,X,q={},j="vlist",Y=!1)=>{let{autoHide:Q=!0,autoHideDelay:K=1000,minThumbSize:B=30,showOnHover:N=!0,hoverZoneWidth:U=16,showOnViewportEnter:_=!0}=q,y=0,b=0,H=0,A=0,R=!1,Z=!1,E=0,T=0,O=0,L=null,$=!1,V=null,I=null,P=Y?"width":"height",u=Y?"translateX":"translateY",d=Y?(l)=>l.clientX:(l)=>l.clientY,S=Y?"left":"top",c=document.createElement("div"),i=document.createElement("div"),p=N?document.createElement("div"):null,k=()=>{if(c.className=`${j}-scrollbar`,i.className=`${j}-scrollbar-thumb`,Y)c.classList.add(`${j}-scrollbar--horizontal`);if(c.appendChild(i),J.appendChild(c),p){if(p.className=`${j}-scrollbar-hover`,Y)p.classList.add(`${j}-scrollbar-hover--horizontal`),p.style.height=`${U}px`;else p.style.width=`${U}px`;J.appendChild(p)}},f=()=>{if(L)clearTimeout(L),L=null},G=()=>{if(!Q)return;f(),L=setTimeout(v,K)},F=()=>{if(y<=b)return;if(f(),!$)c.classList.add(`${j}-scrollbar--visible`),$=!0;if(Q&&!R&&!Z)G()},v=()=>{if(R||Z)return;c.classList.remove(`${j}-scrollbar--visible`),$=!1},W=(l,s)=>{y=l,b=s;let j0=y>b;if(c.style.display=j0?"":"none",!j0){v();return}let x=b/y;H=Math.max(B,x*b),i.style[P]=`${H}px`,A=b-H,C(O)},C=(l)=>{if(O=l,y<=b||A<=0)return;let s=y-b,x=Math.min(1,Math.max(0,l/s))*A;i.style.transform=`${u}(${x}px)`},r=(l)=>{if(l.target===i)return;let s=c.getBoundingClientRect(),o=d(l)-s[S]-H/2,q0=Math.max(0,Math.min(o,A))/A,e=y-b,X0=q0*e;X(X0),F()},a=(l)=>{l.preventDefault(),l.stopPropagation(),R=!0,E=d(l),T=O,f(),c.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",M),document.addEventListener("mouseup",D)},M=(l)=>{if(!R)return;let s=d(l)-E,j0=A>0?s/A:0,x=y-b,o=j0*x,n=Math.max(0,Math.min(T+o,x)),e=n/x*A;if(i.style.transform=`${u}(${e}px)`,I=n,V===null)V=requestAnimationFrame(()=>{if(I!==null)X(I);V=null})},D=()=>{if(R=!1,V!==null)cancelAnimationFrame(V),V=null;if(I!==null)X(I),I=null;if(c.classList.remove(`${j}-scrollbar--dragging`),Q&&!Z)G();document.removeEventListener("mousemove",M),document.removeEventListener("mouseup",D)},z=()=>{if(_)F()},w=()=>{if(!R){if(Z=!1,Q)G()}},h=()=>{Z=!0,f(),F()},g=()=>{if(Z=!1,!R&&Q)G()},t=()=>{if(f(),V!==null)cancelAnimationFrame(V),V=null;if(c.removeEventListener("click",r),c.removeEventListener("mouseenter",h),c.removeEventListener("mouseleave",g),i.removeEventListener("mousedown",a),J.removeEventListener("mouseenter",z),J.removeEventListener("mouseleave",w),document.removeEventListener("mousemove",M),document.removeEventListener("mouseup",D),p){if(p.removeEventListener("mouseenter",h),p.removeEventListener("mouseleave",g),p.parentNode)p.parentNode.removeChild(p)}if(c.parentNode)c.parentNode.removeChild(c)};if(k(),c.addEventListener("click",r),c.addEventListener("mouseenter",h),c.addEventListener("mouseleave",g),i.addEventListener("mousedown",a),J.addEventListener("mouseenter",z),J.addEventListener("mouseleave",w),p)p.addEventListener("mouseenter",h),p.addEventListener("mouseleave",g);return{show:F,hide:v,updateBounds:W,updatePosition:C,isVisible:()=>$,destroy:t}};var e2=(J)=>{let X=null;return{name:"withScrollbar",priority:30,setup(q){let{dom:j,config:Y}=q,{classPrefix:Q,horizontal:K}=Y;if(X=p0(j.viewport,(U)=>q.scrollController.scrollTo(U),J??{},Q,K),!j.viewport.classList.contains(`${Q}-viewport--custom-scrollbar`))j.viewport.classList.add(`${Q}-viewport--custom-scrollbar`);let B=q.getCachedCompression();X.updateBounds(B.virtualSize,q.state.viewportState.containerSize);let N=X;q.afterScroll.push((U,_)=>{N.updatePosition(U),N.show()}),q.resizeHandlers.push((U,_)=>{if(N){let y=q.getCachedCompression();N.updateBounds(y.virtualSize,q.state.viewportState.containerSize)}}),q.contentSizeHandlers.push(()=>{if(N){let U=q.getCachedCompression();N.updateBounds(U.virtualSize,q.state.viewportState.containerSize)}}),q.destroyHandlers.push(()=>{if(N)N.destroy()})},destroy(){if(X)X.destroy(),X=null}}};var oJ=0.65,nJ=0.5,iJ=0.95,tJ=0.1,eJ=5,J1=100,JJ=()=>{let J=null,X=0,q=!1,j=0,Y=null,Q=0,K=0,B=null,N=[];return{name:"withScale",priority:20,setup(U){let{dom:_,config:y}=U,{classPrefix:b,horizontal:H}=y,A=()=>{let T=U.getVirtualTotal(),O=$0(T,U.sizeCache);if(O.isCompressed&&!q){q=!0,U.scrollController.enableCompression(O),U.updateContentSize(O.virtualSize),U.setScrollFns(()=>X,(c)=>{if(X=c,j=c,Y!==null)cancelAnimationFrame(Y),Y=null});let L=()=>{let c=j-X;if(Math.abs(c)<nJ)X=j,Y=null;else{X+=c*oJ;let p=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;X=Math.max(0,Math.min(X,p)),Y=requestAnimationFrame(L)}U.scrollController.scrollTo(X)},$=_.viewport,V=(c)=>{c.preventDefault();let p=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+c.deltaY,p)),Y===null)Y=requestAnimationFrame(L)};$.addEventListener("wheel",V,{passive:!1});let I=()=>{if(B!==null)cancelAnimationFrame(B),B=null},P=(c)=>{if(I(),Y!==null)cancelAnimationFrame(Y),Y=null;let i=c.touches[0];if(!i)return;let p=H?i.clientX:i.clientY;Q=p,K=X,N=[{time:performance.now(),y:p}]},u=(c)=>{c.preventDefault();let i=c.touches[0];if(!i)return;let p=H?i.clientX:i.clientY,k=performance.now();if(N.push({time:k,y:p}),N.length>eJ)N.shift();let f=Q-p,F=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,v=Math.max(0,Math.min(K+f,F));X=v,j=v,U.scrollController.scrollTo(v)},d=(c)=>{let i=performance.now(),p=N.filter((F)=>i-F.time<J1),k=0;if(p.length>=2){let F=p[0],v=p[p.length-1],W=v.time-F.time;if(W>0)k=(F.y-v.y)/W}if(N=[],Math.abs(k)<tJ)return;let f=k*16,G=()=>{if(f*=iJ,Math.abs(f)<0.5){B=null;return}let v=U.getCachedCompression().virtualSize-U.state.viewportState.containerSize,W=X+f;if(W=Math.max(0,Math.min(W,v)),W<=0&&f<0||W>=v&&f>0){X=W,j=W,U.scrollController.scrollTo(W),B=null;return}X=W,j=W,U.scrollController.scrollTo(W),B=requestAnimationFrame(G)};B=requestAnimationFrame(G)};if($.addEventListener("touchstart",P,{passive:!0}),$.addEventListener("touchmove",u,{passive:!1}),$.addEventListener("touchend",d,{passive:!0}),$.addEventListener("touchcancel",d,{passive:!0}),U.destroyHandlers.push(()=>{if($.removeEventListener("wheel",V),$.removeEventListener("touchstart",P),$.removeEventListener("touchmove",u),$.removeEventListener("touchend",d),$.removeEventListener("touchcancel",d),I(),Y!==null)cancelAnimationFrame(Y),Y=null}),!_.viewport.querySelector(`.${b}-scrollbar`)){if(J=p0(_.viewport,(i)=>U.scrollController.scrollTo(i),{},b,H),!_.viewport.classList.contains(`${b}-viewport--custom-scrollbar`))_.viewport.classList.add(`${b}-viewport--custom-scrollbar`);J.updateBounds(O.virtualSize,U.state.viewportState.containerSize);let c=J;U.afterScroll.push((i,p)=>{if(c)c.updatePosition(i),c.show()}),U.resizeHandlers.push((i,p)=>{if(c){let k=U.getCachedCompression();c.updateBounds(k.virtualSize,U.state.viewportState.containerSize)}})}}else if(!O.isCompressed&&q)q=!1,U.scrollController.disableCompression(),U.updateContentSize(O.actualSize);else if(O.isCompressed)U.scrollController.updateConfig({compression:O}),U.updateContentSize(O.virtualSize);if(J)J.updateBounds(O.virtualSize,U.state.viewportState.containerSize);U.state.cachedCompression={state:O,totalItems:T}};U.updateCompressionMode=A;let R=U.getCachedCompression.bind(U);U.getCachedCompression=()=>{if(U.state.cachedCompression)return U.state.cachedCompression.state;return R()},U.setVisibleRangeFn((T,O,L,$,V)=>{Z=null,E=null;let I=$0($,L);i2(T,O,L,$,I,V)}),U.setScrollToPosFn((T,O,L,$,V)=>{let I=$0($,O);return t2(T,O,L,$,I,V)});let Z=null,E=null;U.setPositionElementFn((T,O)=>{let L=U.getVirtualTotal(),$=$0(L,U.sizeCache);if($.isCompressed){let V=U.scrollController.getScrollTop();if(Z===null||O<E)E=O,Z=Math.round(l0(O,V,U.sizeCache,L,U.state.viewportState.containerSize,$));let I=Z+U.sizeCache.getOffset(O)-U.sizeCache.getOffset(E),P=U.config.horizontal;T.style.transform=P?`translateX(${I}px)`:`translateY(${I}px)`}else{let V=Math.round(U.sizeCache.getOffset(O)),I=U.config.horizontal;T.style.transform=I?`translateX(${V}px)`:`translateY(${V}px)`}}),A(),U.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null})},destroy(){if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null;if(B!==null)cancelAnimationFrame(B),B=null}}};var QJ=(J={})=>{let{chunkSize:X=100,maxCachedItems:q=5000,evictionBuffer:j=200,onEvict:Y}=J,Q=new Map,K=0,B=0,N=(k)=>{let f=Q.get(k);if(!f)f={items:Array(X),count:0,lastAccess:Date.now()},Q.set(k,f);else f.lastAccess=Date.now();return f},U=(k)=>{return Math.floor(k/X)},_=(k)=>{return k%X},y=()=>K,b=(k)=>{K=k},H=(k)=>{if(k<0||k>=K)return;let f=U(k),G=Q.get(f);if(!G)return;return G.items[_(k)]},A=(k)=>{if(k<0||k>=K)return!1;let f=U(k),G=Q.get(f);if(!G)return!1;return G.items[_(k)]!==void 0},R=(k,f)=>{let G=U(k),F=N(G),v=_(k),W=F.items[v]===void 0;if(F.items[v]=f,W)F.count++,B++;if(k>=K)K=k+1},Z=(k,f)=>{for(let G=0;G<f.length;G++){let F=f[G];if(F!==void 0)R(k+G,F)}},E=(k)=>{if(k<0||k>=K)return!1;let f=U(k),G=Q.get(f);if(!G)return!1;let F=_(k);if(G.items[F]===void 0)return!1;if(G.items[F]=void 0,G.count--,B--,G.count===0)Q.delete(f);return!0},T=(k,f)=>{let G=[];for(let F=k;F<=f&&F<K;F++)G.push(H(F));return G},O=(k,f)=>{for(let G=k;G<=f&&G<K;G++)if(!A(G))return!1;return!0},L=()=>{let k=[],f=null,G=Array.from(Q.keys()).sort((F,v)=>F-v);for(let F of G){let v=Q.get(F);if(!v)continue;let W=F*X;for(let C=0;C<X;C++){let r=W+C;if(r>=K)break;if(v.items[C]!==void 0)if(f===null)f={start:r,end:r};else if(r===f.end+1)f.end=r;else k.push(f),f={start:r,end:r};else if(f!==null)k.push(f),f=null}}if(f!==null)k.push(f);return k},$=(k,f)=>{let G=[],F=null;for(let v=k;v<=f&&v<K;v++)if(!A(v))if(F===null)F={start:v,end:v};else F.end=v;else if(F!==null)G.push(F),F=null;if(F!==null)G.push(F);return G},V=(k)=>{return Q.has(k)},I=(k)=>{let f=Q.get(k);if(f)f.lastAccess=Date.now()},P=(k,f)=>{if(k>f||Q.size===0)return;let G=Date.now(),F=U(Math.max(0,k)),v=U(Math.min(K-1,f));for(let W=F;W<=v;W++){let C=Q.get(W);if(C)C.lastAccess=G}},u=(k,f)=>{if(B<=q)return 0;let G=Math.max(0,k-j),F=Math.min(K-1,f+j),v=U(G),W=U(F),C=0,r=[];for(let[a,M]of Q)if(a<v||a>W)C+=M.count,r.push(a),B-=M.count,Q.delete(a);if(C>0&&Y)Y(C,r);return C},d=()=>{if(B<=q)return 0;let k=Array.from(Q.entries()).sort(([,F],[,v])=>F.lastAccess-v.lastAccess),f=0,G=[];for(let[F,v]of k){if(B<=q)break;f+=v.count,B-=v.count,G.push(F),Q.delete(F)}if(f>0&&Y)Y(f,G);return f},S=()=>{return{totalItems:K,cachedItems:B,cachedChunks:Q.size,chunkSize:X,maxCachedItems:q,memoryEfficiency:K>0?1-B/K:1}},c=()=>B,i=()=>{Q.clear(),B=0};return{chunkSize:X,maxCachedItems:q,getTotal:y,setTotal:b,get:H,has:A,set:R,setRange:Z,delete:E,getRange:T,isRangeLoaded:O,getLoadedRanges:L,findUnloadedRanges:$,getChunkIndex:U,isChunkLoaded:V,touchChunk:I,touchChunksForRange:P,evictDistant:u,evictToLimit:d,getStats:S,getCachedCount:c,clear:i,reset:()=>{i(),K=0}}},Q1=(J)=>{if(J.length===0)return[];let X=[...J].sort((j,Y)=>j.start-Y.start),q=[{...X[0]}];for(let j=1;j<X.length;j++){let Y=X[j],Q=q[q.length-1];if(Y.start<=Q.end+1)Q.end=Math.max(Q.end,Y.end);else q.push({...Y})}return q},jJ=(J,X,q)=>{let j=Math.floor(J.start/q)*q,Y=Math.ceil((J.end+1)/q)*q-1,Q={start:j,end:Y};if(X.length===0)return[Q];let K=[],B=Q1(X),N=Q.start;for(let U of B){if(U.end<N)continue;if(U.start>Q.end)break;if(U.start>N)K.push({start:N,end:Math.min(U.start-1,Q.end)});if(N=U.end+1,N>Q.end)break}if(N<=Q.end)K.push({start:N,end:Q.end});return K};var qJ=(J={})=>{let{maskCharacter:X=a2,maxSampleSize:q=s2}=J,j=[],Y=!1,Q=0,K=(y)=>{if(Y||y.length===0)return;let b=Math.min(y.length,q);for(let H=0;H<b;H++){let A=y[H];if(!A||typeof A!=="object")continue;let R={};for(let[Z,E]of Object.entries(A)){if(Z.startsWith("_")||Z==="id")continue;R[Z]=String(E??"").length}if(Object.keys(R).length>0)j.push(R)}Y=!0},B=()=>Y,N=(y)=>{let b={id:`${o2}${Q++}`,[j2]:!0,_index:y};if(j.length===0)return b.label=X.repeat(12),b;let H=j[y%j.length];for(let[A,R]of Object.entries(H))b[A]=X.repeat(Math.max(1,R));return b};return{analyzeStructure:K,hasAnalyzedStructure:B,generate:N,generateRange:(y,b)=>{let H=[];for(let A=y;A<=b;A++)H.push(N(A));return H},clear:()=>{j=[],Y=!1,Q=0}}},r0=(J)=>{if(!J||typeof J!=="object")return!1;return J[j2]===!0};var j1=50,XJ=(J={})=>{let{adapter:X,initialItems:q,initialTotal:j,storage:Y,placeholder:Q,pageSize:K=j1,onStateChange:B,onItemsLoaded:N,onItemsEvicted:U}=J,_=QJ({...Y,onEvict:(x,o)=>{U?.(x),$()}}),y=null,b=()=>{if(!y)y=qJ(Q);return y},H=new Map,A=!1,R,Z=!0,E,T=[],O=0,L=new Map,$=()=>{B?.(p())},V=()=>{H.clear();let x=_.getLoadedRanges();for(let o of x)for(let n=o.start;n<=o.end;n++){let q0=_.get(n);if(q0&&!r0(q0))H.set(q0.id,n)}},I=(x,o)=>{if(!r0(o))H.set(o.id,x)},P=(x)=>{H.delete(x)},u=(x,o)=>{return`${x}-${o}`},d=()=>_.getTotal(),S=()=>_.getCachedCount(),c=()=>A,i=()=>Z,p=()=>({total:_.getTotal(),cached:_.getCachedCount(),isLoading:A,pendingRanges:T,error:R,hasMore:Z,cursor:E}),k=()=>_,f=()=>b(),G=(x)=>{let o=_.get(x);if(o!==void 0)return o;if(x>=0&&x<_.getTotal())return b().generate(x);return},F=(x)=>{let o=H.get(x);if(o===void 0)return;return _.get(o)},v=(x)=>{return H.get(x)??-1},W=(x)=>{let o=_.get(x);return o!==void 0&&!r0(o)},C=(x,o)=>{let n=[],q0=_.getTotal(),e=0,X0=0;_.touchChunksForRange(x,Math.min(o,q0-1));for(let B0=x;B0<=o&&B0<q0;B0++){let _0=_.get(B0);if(_0!==void 0)n.push(_0),e++;else n.push(b().generate(B0)),X0++}return n},r=(x)=>{_.setTotal(x),Z=_.getCachedCount()<x,$()},a=(x,o=0,n)=>{if(y&&!y.hasAnalyzedStructure()&&x.length>0)y.analyzeStructure(x);for(let q0=0;q0<x.length;q0++){let e=x[q0];if(e!==void 0){let X0=o+q0;_.set(X0,e),I(X0,e)}}if(n!==void 0)_.setTotal(n);else if(o+x.length>_.getTotal())_.setTotal(o+x.length);if(_.getCachedCount()>=_.getTotal()&&_.getTotal()>0)Z=!1;N?.(x,o,_.getTotal()),$()},M=(x,o)=>{let n=H.get(x);if(n===void 0)return!1;let q0=_.get(n);if(!q0)return!1;let e={...q0,...o};if(_.set(n,e),o.id!==void 0&&o.id!==x)P(x),I(n,e);return $(),!0},D=(x)=>{let o=H.get(x);if(o===void 0)return!1;_.delete(o),P(x);let n=_.getTotal();if(n>0)_.setTotal(n-1);return $(),!0},z=async(x,o)=>{if(!X)return;let n=u(x,o);if(L.has(n))return;let q0=_.getLoadedRanges(),e=jJ({start:x,end:o},q0,_.chunkSize);if(e.length===0)return;let X0=_.chunkSize,B0=[];for(let Y0 of e){let G0=Math.floor(Y0.start/X0),D0=Math.floor(Y0.end/X0);for(let U0=G0;U0<=D0;U0++){let A0=U0*X0,W0=A0+X0-1,L0=u(A0,W0);if(!B0.some((R0)=>R0.start===A0)&&!L.has(L0))B0.push({start:A0,end:W0})}}let _0=[];for(let Y0 of e){let G0=Math.floor(Y0.start/X0),D0=Math.floor(Y0.end/X0);for(let U0=G0;U0<=D0;U0++){let A0=U0*X0,W0=A0+X0-1,L0=u(A0,W0);if(L.has(L0)){let R0=L.get(L0);if(!_0.includes(R0))_0.push(R0)}}}for(let Y0 of B0){let G0=u(Y0.start,Y0.end),D0=(async()=>{T.push(Y0),A=!0,R=void 0,$();try{let U0=Y0.end-Y0.start+1,A0={offset:Y0.start,limit:U0,cursor:void 0},W0=await X.read(A0);if(a(W0.items,Y0.start,W0.total),W0.cursor)E=W0.cursor;let L0=Y0.start+W0.items.length;if(L0>=O){if(O=L0,W0.hasMore!==void 0)Z=W0.hasMore;else if(W0.total!==void 0)Z=L0<W0.total}}catch(U0){R=U0 instanceof Error?U0:Error(String(U0))}finally{L.delete(G0),T=T.filter((U0)=>U0.start!==Y0.start||U0.end!==Y0.end),A=L.size>0,$()}})();L.set(G0,D0),_0.push(D0)}await Promise.all(_0)},w=async(x,o)=>{if(_.isRangeLoaded(x,o))return;await z(x,o)},h=async()=>{if(!X)return;await z(0,K-1)},g=async()=>{if(!X||A||!Z)return!1;let x=_.getCachedCount(),o=_.getTotal(),n=x,q0=Math.min(n+K-1,o>0?o-1:n+K-1);if(n>=o&&o>0)return Z=!1,!1;return await z(n,q0),_.getCachedCount()>x},t=async()=>{if(_.clear(),_.setTotal(0),H.clear(),y)y.clear();L.clear(),T=[],A=!1,E=void 0,Z=!0,O=0,R=void 0,$()},l=(x,o)=>{if(_.evictDistant(x,o)>0)V()},s=()=>{_.clear(),H.clear(),E=void 0,R=void 0,T=[],A=!1,$()},j0=()=>{if(_.reset(),H.clear(),y)y.clear();E=void 0,Z=!0,O=0,R=void 0,T=[],A=!1,$()};if(q&&q.length>0)a(q,0,j??q.length);else if(j!==void 0)_.setTotal(j),$();return{getState:p,getTotal:d,getCached:S,getIsLoading:c,getHasMore:i,getStorage:k,getPlaceholders:f,getItem:G,getItemById:F,getIndexById:v,isItemLoaded:W,getItemsInRange:C,setTotal:r,setItems:a,updateItem:M,removeItem:D,loadRange:z,ensureRange:w,loadInitial:h,loadMore:g,reload:t,evictDistant:l,clear:s,reset:j0}};var YJ=(J)=>{let{adapter:X,loading:q,storage:j,total:Y,autoLoad:Q=!0}=J,K=q?.cancelThreshold??c2,B=q?.preloadThreshold??l2,N=q?.preloadAhead??d2;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(U){let{emitter:_}=U,y=U.config.reverse,b=XJ({adapter:X,...Y!==void 0&&{initialTotal:Y},pageSize:j?.chunkSize??f0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(U.state.isInitialized){let P=U.getVirtualTotal();U.sizeCache.rebuild(P),U.updateCompressionMode();let u=U.getCachedCompression();U.state.viewportState.totalSize=u.virtualSize,U.state.viewportState.actualSize=u.actualSize,U.state.viewportState.isCompressed=u.isCompressed,U.state.viewportState.compressionRatio=u.ratio,U.updateContentSize(u.virtualSize),U.renderIfNeeded()}},onItemsLoaded:(P,u,d)=>{if(U.state.isInitialized)U.forceRender(),_.emit("load:end",{items:P,total:d,offset:u})}});U.replaceDataManager(b);let H=null,A=null,R=0,Z=!1,E=null,T=120,O=(P=!1)=>{if(Z=!1,A=null,P)H=null;if(E!==null)clearTimeout(E),E=null},L=()=>{if(A){let P=A;A=null,U.dataManager.ensureRange(P.start,P.end).catch((u)=>{_.emit("error",{error:u,context:"ensureRange"})})}};U.afterScroll.push((P,u)=>{if(U.state.isDestroyed)return;let d=U.scrollController.getVelocity(),c=U.scrollController.isTracking()&&d<=K;if(R>K&&d<=K)Z=!0;else if(Z&&d>K)O();if(Z&&d<0.5)O(!0);if(R=d,(U.scrollController.isAtTop()||U.scrollController.isAtBottom())&&(Z||A))O(!0),c=!0;let p=Z&&d>0.5;if(c&&!U.dataManager.getIsLoading()&&U.dataManager.getHasMore()){if(y){if(P<J2)_.emit("load:start",{offset:U.dataManager.getCached(),limit:f0}),U.dataManager.loadMore().catch((G)=>{_.emit("error",{error:G,context:"loadMore"})})}else if(U.state.viewportState.totalSize-P-U.state.viewportState.containerSize<J2)_.emit("load:start",{offset:U.dataManager.getCached(),limit:f0}),U.dataManager.loadMore().catch((F)=>{_.emit("error",{error:F,context:"loadMore"})})}let{renderRange:k}=U.state.viewportState;if(!H||k.start!==H.start||k.end!==H.end){if(H={start:k.start,end:k.end},c&&!p){if(A=null,E!==null)clearTimeout(E),E=null;let{start:G,end:F}=k,v=U.getVirtualTotal();if(d>B)if(u==="down")F=Math.min(k.end+N,v-1);else G=Math.max(k.start-N,0);U.dataManager.ensureRange(G,F).catch((W)=>{_.emit("error",{error:W,context:"ensureRange"})})}else if(A={start:k.start,end:k.end},p){if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,L(),O()},T)}}});let $=200,V=null;U.afterScroll.push((P,u)=>{if(V!==null)clearTimeout(V);V=setTimeout(()=>{V=null,L(),O()},$)}),U.destroyHandlers.push(()=>{if(V!==null)clearTimeout(V),V=null;O()});let I=()=>{if(U.state.isDestroyed)return;H=null;let{renderRange:P}=U.state.viewportState;if(P.end>0)U.dataManager.ensureRange(P.start,P.end).catch((u)=>{_.emit("error",{error:u,context:"ensureRange"})});L()};if(window.addEventListener("online",I),U.destroyHandlers.push(()=>{window.removeEventListener("online",I)}),_.on("load:start",()=>{U.dom.root.setAttribute("aria-busy","true")}),_.on("load:end",()=>{U.dom.root.removeAttribute("aria-busy")}),U.methods.set("loadVisibleRange",async()=>{H=null,A=null,U.forceRender();let{renderRange:P}=U.state.viewportState;if(P.end>0)_.emit("load:start",{offset:P.start,limit:P.end-P.start+1}),await U.dataManager.ensureRange(P.start,P.end)}),U.methods.set("reload",async()=>{H=null,A=null,U.invalidateRendered(),await U.dataManager.reload(),_.emit("load:start",{offset:0,limit:f0}),await U.dataManager.loadInitial(),U.forceRender();let{renderRange:P}=U.state.viewportState;if(P.end>0)await U.dataManager.ensureRange(P.start,P.end)}),Q)_.emit("load:start",{offset:0,limit:f0}),U.dataManager.loadInitial().catch((P)=>{_.emit("error",{error:P,context:"loadInitial"})});else if(Y!==void 0)U.dataManager.setTotal(Y)}}};var UJ=()=>{let J=null;return{name:"withPage",priority:5,setup(X){let{dom:q,state:j,config:Y,emitter:Q}=X;if(q.root.style.overflow="visible",q.root.style.height="auto",Y.horizontal)q.viewport.style.overflowX="visible",q.viewport.style.overflowY="visible";else q.viewport.style.overflow="visible";q.viewport.classList.remove(`${Y.classPrefix}-viewport--custom-scrollbar`),X.disableViewportResize(),X.disableWheelHandler(),X.setScrollTarget(window),X.setScrollFns(()=>{let U=q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-U.left);else return Math.max(0,-U.top)},(U)=>{let _=q.viewport.getBoundingClientRect();if(Y.horizontal){let y=_.left+window.scrollX;window.scrollTo(y+U,window.scrollY)}else{let y=_.top+window.scrollY;window.scrollTo(window.scrollX,y+U)}}),X.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:K,innerWidth:B}=window,N=()=>{let{innerWidth:U,innerHeight:_}=window,y=Y.horizontal?U:_,b=Y.horizontal?B:K;if(Math.abs(y-b)<=1)return;K=_,B=U,j.viewportState.containerSize=_,Q.emit("resize",{width:U,height:_});for(let H=0;H<X.resizeHandlers.length;H++)X.resizeHandlers[H](U,_);X.renderIfNeeded()};window.addEventListener("resize",N,{passive:!0}),J=()=>{window.removeEventListener("resize",N)},X.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var X2=(J,X)=>{let q=0,j=J.length-1;while(q<j){let Y=q+j+1>>>1;if(J[Y].headerLayoutIndex<=X)q=Y;else j=Y-1}return q},KJ=(J,X)=>{let q=0,j=J.length-1;while(q<j){let Y=q+j+1>>>1;if(J[Y].firstDataIndex<=X)q=Y;else j=Y-1}return q},BJ=(J,X)=>{if(J===0)return[];let q=[],j=X(0),Y=0,Q=0;for(let K=1;K<J;K++){let B=X(K);if(B!==j){let N=K-Y;q.push({key:j,groupIndex:q.length,headerLayoutIndex:Q,firstDataIndex:Y,count:N}),Q=Q+1+N,j=B,Y=K}}return q.push({key:j,groupIndex:q.length,headerLayoutIndex:Q,firstDataIndex:Y,count:J-Y}),q},Y2=(J,X)=>{if(J.length===0||X.length===0)return[];let q=J.length+X.length,j=Array(q),Y=0;for(let Q of X){j[Y]={id:`__group_header_${Q.groupIndex}`,__groupHeader:!0,groupKey:Q.key,groupIndex:Q.groupIndex},Y++;for(let K=0;K<Q.count;K++)j[Y]=J[Q.firstDataIndex+K],Y++}return j},U2=(J,X)=>{let q=typeof X==="number"?(j)=>X:X;return(j)=>{let Y=J.getEntry(j);if(Y.type==="header")return J.getHeaderHeight(Y.group.groupIndex);return q(Y.dataIndex)}},ZJ=(J,X)=>{let q=BJ(J,X.getGroupForIndex),j=J+q.length,Y=X.headerHeight;return{get totalEntries(){return j},get groupCount(){return q.length},get groups(){return q},getEntry:(b)=>{if(q.length===0)return{type:"item",dataIndex:b,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let H=X2(q,b),A=q[H];if(b===A.headerLayoutIndex)return{type:"header",group:A};let R=b-A.headerLayoutIndex-1;return{type:"item",dataIndex:A.firstDataIndex+R,group:A}},layoutToDataIndex:(b)=>{if(q.length===0)return b;let H=X2(q,b),A=q[H];if(b===A.headerLayoutIndex)return-1;let R=b-A.headerLayoutIndex-1;return A.firstDataIndex+R},dataToLayoutIndex:(b)=>{if(q.length===0)return b;let H=KJ(q,b),A=q[H],R=b-A.firstDataIndex;return A.headerLayoutIndex+1+R},getGroupAtLayoutIndex:(b)=>{if(q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=X2(q,b);return q[H]},getGroupAtDataIndex:(b)=>{if(q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let H=KJ(q,b);return q[H]},getHeaderHeight:typeof Y==="number"?(b)=>Y:(b)=>{let H=q[b];if(!H)return 0;return Y(H.key,b)},rebuild:(b)=>{q=BJ(b,X.getGroupForIndex),j=b+q.length}}};var NJ=(J,X,q,j,Y,Q=!1,K=0)=>{let B=document.createElement("div");if(B.className=`${Y}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.position="absolute",B.style.zIndex="5",B.style.pointerEvents="none",B.style.willChange="transform",B.style.overflow="hidden",Q)B.style.top="0",B.style.bottom="0",B.style.left=K?`${K}px`:"0";else B.style.top=K?`${K}px`:"0",B.style.left="0",B.style.right="0";J.insertBefore(B,J.firstChild);let N=-1,U=!1,_=0,y=(E)=>{if(E===N)return;N=E;let T=X.groups;if(E<0||E>=T.length){B.textContent="";return}let O=T[E],L=j.headerTemplate(O.key,O.groupIndex),$=X.getHeaderHeight(E);if(Q)B.style.width=`${$}px`;else B.style.height=`${$}px`;if(typeof L==="string")B.innerHTML=L;else B.replaceChildren(L)},b=(E)=>{let T=X.groups;if(T.length===0){A();return}let O=q.getOffset(T[0].headerLayoutIndex);if(E<O){A();return}let L=0,$=T.length-1;while(L<$){let d=L+$+1>>>1;if(q.getOffset(T[d].headerLayoutIndex)<=E)L=d;else $=d-1}let V=L;if(!U)H();y(V);let I=X.getHeaderHeight(V),P=0,u=V+1;if(u<T.length){let S=q.getOffset(T[u].headerLayoutIndex)-E;if(S<I)P=S-I}if(P!==_)if(_=P,P===0)B.style.transform="";else{let d=Math.round(P);B.style.transform=Q?`translateX(${d}px)`:`translateY(${d}px)`}},H=()=>{if(U)return;U=!0,B.style.display=""},A=()=>{if(!U)return;U=!1,B.style.display="none",N=-1,_=0,B.style.transform=""},R=()=>{let E=N;if(N=-1,E>=0)y(E)},Z=()=>{B.remove(),N=-1,U=!1};return B.style.display="none",{update:b,refresh:R,show:H,hide:A,destroy:Z}};var _J=(J,X,q,j,Y,Q)=>{if(j===0)return 0;let K=Math.max(0,Math.min(J,j-1)),B=X.getOffset(K),N=X.getSize(K),U=X.getTotalSize(),_=Math.max(0,U-q),y;switch(Q){case"center":y=B-q/2+N/2;break;case"end":y=B-q+N;break;case"start":default:y=B;break}return Math.max(0,Math.min(y,_))};var H0=(J,X,q,j,Y="start",Q,K=_J)=>{return K(J,X,q,j,Q,Y)};var VJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let X=null,q=null,j=[],Y=[];return{name:"withGroups",priority:10,setup(Q){let{dom:K,config:B,rawConfig:N}=Q,{classPrefix:U}=B,y=N.item.height;j=N.items?[...N.items]:[];let b=j.length,H={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};X=ZJ(b,H),Y=Y2(j,X.groups);let A=U2(X,y);Q.setSizeConfig(A),Q.rebuildSizeCache(Y.length),Q.dataManager.setItems(Y,0,Y.length);let R=N.item.template,{headerTemplate:Z}=J,E=(p,k,f)=>{if(w0(p))return Z(p.groupKey,p.groupIndex);return R(p,k,f)},T=Q.methods.get("_getGridLayout"),O=Q.methods.get("_replaceGridRenderer"),L=Q.methods.get("_updateGridLayoutForGroups"),$=Q.methods.get("_getTableLayout"),V=Q.methods.get("_updateTableForGroups"),I=Q.methods.get("_getTableHeaderHeight");if(T&&O){if(L)L((G)=>{let F=Y[G];return!!(F&&w0(F))});let{createGridRenderer:p}=(B2(),dJ(WJ)),k=T(),f=p(K.items,E,Q.sizeCache,k,U,Q.getContainerWidth(),()=>Q.dataManager.getTotal(),B.ariaIdPrefix);O(f)}else if($&&V)V((p)=>w0(p),J.headerTemplate);else Q.replaceTemplate(E);let P=I?I():0;if(K.root.classList.add(`${U}--grouped`),J.sticky!==!1){q=NJ(K.root,X,Q.sizeCache,{...H,sticky:H.sticky??!1},U,B.horizontal,P);let p=q;Q.afterScroll.push((k,f)=>{p.update(k)}),q.update(Q.scrollController.getScrollTop())}let u=N.item?.striped,d=()=>{if(u!=="data"&&u!=="even"&&u!=="odd")return;let p=new Int32Array(Y.length),k=u==="odd"?1:0,f=0;for(let G=0;G<Y.length;G++)if(w0(Y[G])){if(p[G]=-1,u==="even"||u==="odd")f=0}else p[G]=f+++k;Q.setStripeIndexFn((G)=>{if(G<0||G>=p.length)return G;return p[G]})};d();let S=()=>{if(!X)return;X.rebuild(j.length),Y=Y2(j,X.groups);let p=U2(X,y);if(Q.setSizeConfig(p),Q.rebuildSizeCache(Y.length),Q.dataManager.setItems(Y,0,Y.length),d(),q)q.refresh()};Q.methods.set("setItems",(p)=>{j=p.slice(),S()}),Q.methods.set("appendItems",(p)=>{j.push(...p),S()}),Q.methods.set("prependItems",(p)=>{j.unshift(...p),S()}),Q.methods.set("removeItem",(p)=>{j=j.filter((k)=>k.id!==p),S()});let{animateScroll:c,cancelScroll:i}=S0(Q.scrollController,Q.renderIfNeeded);Q.methods.set("scrollToIndex",(p,k)=>{let f=X.dataToLayoutIndex(p),{align:G,behavior:F,duration:v}=b0(k),W=Q.dataManager.getTotal(),C=Q.adjustScrollPosition(H0(f,Q.sizeCache,Q.state.viewportState.containerSize,W,G,Q.getCachedCompression()));if(F==="smooth")c(Q.scrollController.getScrollTop(),C,v);else i(),Q.scrollController.scrollTo(C)}),Q.methods.set("_getItems",()=>j),Q.methods.set("_getTotal",()=>j.length),Q.destroyHandlers.push(()=>{if(i(),q)q.destroy(),q=null;K.root.classList.remove(`${U}--grouped`)})},destroy(){if(q)q.destroy(),q=null}}};var DJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},Q=(A)=>{if(A<=0)return 0;if(!j)return Math.ceil(A/X);let R=0,Z=0,E=0;for(let T=0;T<A;T++)if(j(T)){if(E++,Z>0)R++,Z=0;R++,Z=0}else if(Z++,Z>=X)R++,Z=0;if(Z>0)R++;return R},K=(A)=>{return Y.row=B(A),Y.col=N(A),Y},B=(A)=>{if(!j)return Math.floor(A/X);let R=0,Z=0;for(let E=0;E<=A;E++)if(j(E)){if(Z>0)R++,Z=0;if(E===A)return R;R++,Z=0}else{if(E===A)return R;if(Z++,Z>=X)R++,Z=0}return console.warn(`⚠️ getRow(${A}) fell through - returning ${R}`),R},N=(A)=>{if(!j)return A%X;if(j(A))return 0;let R=0;for(let Z=0;Z<=A;Z++)if(j(Z))R=0;else{if(Z===A)return R;if(R++,R>=X)R=0}return R},U=(A,R,Z)=>{if(Z<=0)return{start:0,end:-1};if(!j){let $=Math.max(0,A*X),V=Math.min(Z-1,(R+1)*X-1);return{start:$,end:V}}let E=-1,T=-1,O=0,L=0;for(let $=0;$<Z;$++){if(j($)){if(L>0)O++,L=0;if(O>=A&&O<=R){if(E===-1)E=$;T=$}O++,L=0}else{if(O>=A&&O<=R){if(E===-1)E=$;T=$}if(L++,L>=X)O++,L=0}if(O>R&&L===0)break}if(E===-1)return{start:0,end:-1};return{start:E,end:T}},_=(A,R,Z)=>{if(R<0||R>=X)return-1;let E=A*X+R;if(E<0||E>=Z)return-1;return E},y=(A)=>{let R=(X-1)*q;return Math.max(0,(A-R)/X)};return{get columns(){return X},get gap(){return q},update:(A)=>{if(A.columns!==void 0)X=Math.max(1,Math.floor(A.columns));if(A.gap!==void 0)q=A.gap;if(A.isHeaderFn!==void 0)j=A.isHeaderFn},getTotalRows:Q,getPosition:K,getRow:B,getCol:N,getItemRange:U,getItemIndex:_,getColumnWidth:y,getColumnOffset:(A,R)=>{let Z=y(R);return A*(Z+q)}}};B2();var Y1=new Set,GJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let X=null,q=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:Q,config:K,rawConfig:B}=j,{classPrefix:N}=K;if(K.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let U=K.horizontal,_=c0(z0(B.padding),U),y=()=>{return(U?Y.viewport.clientHeight:j.getContainerWidth())-_},b=B.items?.some((C)=>C.__groupHeader===!0),H={columns:J.columns,gap:J.gap??0};if(b)H.isHeaderFn=(C)=>{let r=j.dataManager.getItem(C);return!!(r&&r.__groupHeader===!0)};X=DJ(H);let A=X.gap;j.setVirtualTotalFn(()=>{let C=j.dataManager.getTotal();return X.getTotalRows(C)});let R=B.item,Z=K.horizontal?R.width:R.height,E={containerWidth:y(),columns:X.columns,gap:X.gap},T={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof Z==="function")j.setSizeConfig((C)=>{let r=E.containerWidth-2,a=(E.columns-1)*E.gap;return T.containerWidth=E.containerWidth,T.columns=E.columns,T.gap=E.gap,T.columnWidth=(r-a)/E.columns,T.row=X.getRow(C),T.column=X.getCol(C),T.totalRows=X.getTotalRows(j.dataManager.getTotal()),T.totalColumns=E.columns,Z(C,T)+E.gap});else if(A>0)j.setSizeConfig(Z+A);if(j.rebuildSizeCache(),A>0){let C=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let r=C();return r>0?r-E.gap:0}}Y.root.classList.add(`${N}--grid`);let O=y(),L=B.item.template,$=()=>{q=K2(Y.items,L,j.sizeCache,X,N,O,()=>j.dataManager.getTotal(),K.ariaIdPrefix,K.horizontal),j.replaceRenderer(q)};$(),j.methods.set("_getGridLayout",()=>X),j.methods.set("_getGridConfig",()=>H),j.methods.set("_replaceGridRenderer",(C)=>{q=C}),j.methods.set("_updateGridLayoutForGroups",(C)=>{X.update({isHeaderFn:C});let r=j.dataManager.getTotal(),a=0;for(let M=0;M<r;M++)if(X.getCol(M)===0){let D=j.sizeCache.getSize(M);a+=D}j.sizeCache.getTotalSize=()=>a,j.updateContentSize(a),$()}),j.methods.set("updateGrid",(C)=>{if(C.columns!==void 0){if(!Number.isInteger(C.columns)||C.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");H.columns=C.columns}if(C.gap!==void 0){if(C.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");H.gap=C.gap}if(X)X.update(H);let r=y();if(E.containerWidth=r,E.columns=H.columns,E.gap=H.gap??0,q)q.updateContainerWidth(r);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let a=0;a<j.contentSizeHandlers.length;a++)j.contentSizeHandlers[a]();if(q)q.clear();j.forceRender()});let V=null,I=null,P=!1,u=()=>{if(P)return;P=!0,V=j.methods.get("_getSelectedIds")??null,I=j.methods.get("_getFocusedIndex")??null},d=-1,S=-1,c=!0,i=K.overscan,p={start:0,end:0},k={start:0,end:0},f=()=>{if(j.state.isDestroyed)return;let C=j.scrollController.getScrollTop(),r=j.state.viewportState.containerSize;if(!c&&C===d&&r===S)return;d=C,S=r,c=!1;let a=j.getVirtualTotal();if(a===0||r===0)p.start=0,p.end=0;else p.start=Math.max(0,j.sizeCache.indexAtOffset(C)),p.end=Math.min(a-1,Math.max(0,j.sizeCache.indexAtOffset(C+r-1)));k.start=Math.max(0,p.start-i),k.end=Math.min(a-1,p.end+i);let M=j.state.viewportState;M.scrollPosition=C,M.visibleRange.start=p.start,M.visibleRange.end=p.end,M.renderRange.start=k.start,M.renderRange.end=k.end;let D=j.state.lastRenderRange,z=M.isCompressed,w=j.dataManager.getTotal(),h=X.getItemRange(k.start,k.end,w),g=j.dataManager.getItemsInRange(h.start,h.end),t=z?j.getCompressionContext():void 0;u();let l=V?V():Y1,s=I?I():-1;if(q.render(g,h,l,s,t),D.start!==k.start||D.end!==k.end)D.start=k.start,D.end=k.end,Q.emit("range:change",{range:{start:k.start,end:k.end}})},G=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,c=!0,f()};j.setRenderFns(f,G);let F=typeof Z==="function";j.resizeHandlers.push((C,r)=>{let a=(U?r:C)-_;if(E.containerWidth=a,q)q.updateContainerWidth(a);if(F){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let M=0;M<j.contentSizeHandlers.length;M++)j.contentSizeHandlers[M]();if(q)q.clear();j.forceRender()}});let{animateScroll:v,cancelScroll:W}=S0(j.scrollController,j.renderIfNeeded);if(j.methods.set("cancelScroll",W),j.methods.set("scrollToIndex",(C,r)=>{let a=Math.floor(C/J.columns),{align:M,behavior:D,duration:z}=b0(r),w=j.dataManager.getState(),h=X.getTotalRows(w.total),g=Math.max(0,Math.min(a,h-1)),t=j.adjustScrollPosition(H0(g,j.sizeCache,j.state.viewportState.containerSize,h,M,j.getCachedCompression()));if(D==="smooth")v(j.scrollController.getScrollTop(),t,z);else W(),j.scrollController.scrollTo(t)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.idleHandlers.push(()=>{if(q)q.sortDOM()}),j.destroyHandlers.push(()=>{if(W(),q)q.destroy(),q=null;Y.root.classList.remove(`${N}--grid`)})},destroy(){if(q)q.destroy(),q=null}}};var MJ=(J)=>{let X=Math.max(1,Math.floor(J.columns)),q=J.gap??0,j=J.containerSize,Y=0,Q=[],K=()=>{let Z=(X-1)*q;Y=Math.max(0,(j-Z)/X),Q=Array(X);let E=Y+q;for(let T=0;T<X;T++)Q[T]=T*E};K();let B=[],N=0,U=[],_=(Z)=>{let E=0,T=Z[0];for(let O=1;O<Z.length;O++){let L=Z[O];if(L<T)T=L,E=O}return E},y=(Z,E)=>{if(Z<=0)return N=0,B=[],[];let T=Array(X).fill(0),O=Array(X);for(let V=0;V<X;V++)O[V]=[];let L=Array(Z);for(let V=0;V<Z;V++){let I=_(T),P=E(V),u=T[I];L[V]={index:V,x:Q[I],y:u,lane:I,size:P,crossSize:Y},O[I].push(V),T[I]=u+P+q}B=O;let $=0;for(let V=0;V<X;V++){let I=T[V],P=I>0?I-q:0;if(P>$)$=P}return N=$,L},b=(Z)=>{if(Z.length===0)return N>0?N:0;if(N>0)return N;let E=Array(X).fill(0);for(let O of Z){let L=O.y+O.size,$=E[O.lane];if(L>$)E[O.lane]=L}let T=0;for(let O=0;O<X;O++)if(E[O]>T)T=E[O];return T},H=(Z,E,T)=>{if(Z.length===0||T<=E)return U.length=0,U;if(B.length===0||B.length!==X)return A(Z,E,T);U.length=0;for(let O=0;O<X;O++){let L=B[O],$=L.length;if($===0)continue;let V=0,I=$;while(V<I){let P=V+I>>>1,u=Z[L[P]];if(u.y+u.size<=E)V=P+1;else I=P}for(let P=V;P<$;P++){let u=Z[L[P]];if(u.y>=T)break;U.push(u)}}return U},A=(Z,E,T)=>{let O=[];for(let L of Z)if(L.y+L.size>E&&L.y<T)O.push(L);return O};return{get columns(){return X},get gap(){return q},get containerSize(){return j},update:(Z)=>{let E=!1;if(Z.columns!==void 0){let T=Math.max(1,Math.floor(Z.columns));if(T!==X)X=T,E=!0}if(Z.gap!==void 0&&Z.gap!==q)q=Z.gap,E=!0;if(Z.containerSize!==void 0&&Z.containerSize!==j)j=Z.containerSize,E=!0;if(E)K()},calculateLayout:y,getTotalSize:b,getVisibleItems:H}};var U1=(J=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;let K=document.createElement("div");return K.setAttribute("role","option"),K},release:(Q)=>{if(Q.remove(),X.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),Q.removeAttribute("data-lane"),X.push(Q)},clear:()=>{X.length=0}}},K1=1,OJ=(J,X,q,j=!1,Y,Q)=>{let K=U1(),B=new Map,N=new Set,U=0,_="",y=-1,b={selected:!1,focused:!1},H=(d,S)=>{return b.selected=d,b.focused=S,b},A=`${q}-item ${q}-masonry-item`,R=`${q}-item--selected`,Z=`${q}-item--focused`,E=(d,S)=>{if(typeof S==="string")d.innerHTML=S;else d.replaceChildren(S)},T=(d,S,c)=>{d.classList.toggle(R,S),d.classList.toggle(Z,c)},O=(d,S)=>{if(j)d.style.transform=`translate(${Math.round(S.y)}px, ${Math.round(S.x)}px)`;else d.style.transform=`translate(${Math.round(S.x)}px, ${Math.round(S.y)}px)`},L=(d,S)=>{if(j)d.style.width=`${S.size}px`,d.style.height=`${S.crossSize}px`;else d.style.width=`${S.crossSize}px`,d.style.height=`${S.size}px`},$=(d,S,c,i,p)=>{let k=K.acquire(),f=H(i,p);if(k.className=A,k.dataset.index=String(d),k.dataset.id=String(S.id),k.dataset.lane=String(c.lane),k.ariaSelected=String(i),Q)k.id=`${Q}-item-${d}`;if(Y){let F=Y();if(F!==y)y=F,_=String(F);k.setAttribute("aria-setsize",_),k.setAttribute("aria-posinset",String(d+1))}L(k,c);let G=X(S,d,f);return E(k,G),T(k,i,p),O(k,c),{element:k,lastItemId:S.id,lastSelected:i,lastFocused:p,lastY:c.y,lastX:c.x,lastSize:c.size,lastCrossSize:c.crossSize,lastSeenFrame:U}},V=(d,S,c,i)=>{U++,N.clear();for(let k=0;k<S.length;k++)N.add(S[k].index);for(let[k,f]of B)if(N.has(k))f.lastSeenFrame=U;else if(U-f.lastSeenFrame>K1)K.release(f.element),B.delete(k);let p=null;for(let k=0;k<S.length;k++){let f=S[k],G=f.index,F=d(G);if(!F)continue;let v=c.has(F.id),W=G===i,C=B.get(G);if(C){let r=C.lastItemId!==F.id,a=C.lastSelected!==v,M=C.lastFocused!==W,D=C.lastY!==f.y||C.lastX!==f.x,z=C.lastSize!==f.size||C.lastCrossSize!==f.crossSize;if(r||a||M){let w=H(v,W),h=X(F,G,w);E(C.element,h),T(C.element,v,W),C.element.dataset.id=String(F.id),C.element.ariaSelected=String(v),C.lastItemId=F.id,C.lastSelected=v,C.lastFocused=W}if(z)L(C.element,f),C.lastSize=f.size,C.lastCrossSize=f.crossSize;if(D)O(C.element,f),C.lastY=f.y,C.lastX=f.x}else{let r=$(G,F,f,v,W);if(!p)p=document.createDocumentFragment();p.appendChild(r.element),B.set(G,r)}}if(p)J.appendChild(p)},I=()=>{for(let{element:d}of B.values())K.release(d);B.clear(),J.innerHTML=""};return{render:V,getElement:(d)=>B.get(d)?.element,sortDOM:()=>{C0(J,B.keys(),(d)=>B.get(d)?.element)},clear:I,destroy:()=>{I(),K.clear()}}};var B1=new Set,Z1=100,EJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let X=null,q=null,j=[];return{name:"withMasonry",priority:10,setup(Y){let{dom:Q,emitter:K,config:B,rawConfig:N}=Y,U=B.classPrefix,_=B.horizontal;if(B.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");Q.root.classList.add(`${U}--masonry`);let y=z0(N.padding),b=c0(y,_),H=d0(y,_),A=()=>{return(_?Q.viewport.clientHeight:Q.viewport.clientWidth)-b},R={columns:J.columns,gap:J.gap??0,containerSize:A()};X=MJ(R);let Z=N.item,E=_&&N.item.width?N.item.width:Z.height,T={containerWidth:0,columns:0,gap:0,columnWidth:0},O=typeof E==="function"?(a)=>E(a,T):()=>E,L=()=>{let a=Y.dataManager.getTotal(),M=X;T.containerWidth=M.containerSize,T.columns=M.columns,T.gap=M.gap;let D=(M.columns-1)*M.gap;T.columnWidth=Math.max(0,(T.containerWidth-D)/M.columns),j=M.calculateLayout(a,O);let z=X.getTotalSize(j);Y.sizeCache.getTotalSize=()=>z,Y.updateContentSize(z)},$=N.item.template;q=OJ(Q.items,$,U,_,()=>Y.dataManager.getTotal(),B.ariaIdPrefix);let V=null,I=null,P=!1,u=()=>{if(P)return;P=!0,V=Y.methods.get("_getSelectedIds")??null,I=Y.methods.get("_getFocusedIndex")??null},d=(a)=>Y.dataManager.getItem(a),S=-1,c=-1,i=!0,p=B.overscan*Z1,k=()=>{if(Y.state.isDestroyed)return;u();let a=Y.scrollController.getScrollTop(),M=Y.state.viewportState.containerSize;if(!i&&a===S&&M===c)return;S=a,c=M,i=!1;let D=Math.max(0,a-p),z=a+M+p,w=X.getVisibleItems(j,D,z),h=V?V():B1,g=I?I():-1;if(q&&w.length>0)q.render(d,w,h,g);let t=Y.state.viewportState;t.scrollPosition=a;let l=w.length,s=l>0?w[0].index:0,j0=l>0?w[l-1].index:0;t.visibleRange.start=s,t.visibleRange.end=j0,t.renderRange.start=s,t.renderRange.end=j0;let x=Y.state.lastRenderRange;if(x.start!==s||x.end!==j0)x.start=s,x.end=j0,K.emit("range:change",{range:{start:s,end:j0}})},f=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,i=!0,k()};Y.setRenderFns(k,f);let G=(a,M)=>{let D=(_?M:a)-b;if(X&&X.containerSize!==D){if(X.update({containerSize:D}),L(),q)q.clear();f()}};Y.resizeHandlers.push(G);let F=()=>{L(),f()},v=Y.dataManager,W=(a)=>{if(typeof v[a]!=="function")return;let M=v[a].bind(v);v[a]=(...D)=>{M(...D),F()}};W("setItems"),W("appendItems"),W("prependItems"),W("updateItem"),W("removeItem");let{animateScroll:C,cancelScroll:r}=S0(Y.scrollController,Y.renderIfNeeded);Y.methods.set("cancelScroll",r),Y.methods.set("scrollToIndex",(a,M)=>{let D=j[a];if(!D)return;let{align:z,behavior:w,duration:h}=b0(M),g=D.y,t=Y.state.viewportState.containerSize,l=g;if(z==="center")l=g-t/2+D.size/2;else if(z==="end"){l=g-t+D.size;let s=X.getTotalSize(j);if(a===j.length-1)l=Math.max(0,s+H-t)}if(l=Math.max(0,l),l=Y.adjustScrollPosition(l),w==="smooth")C(Y.scrollController.getScrollTop(),l,h);else r(),Y.scrollController.scrollTo(l)}),L(),Y.idleHandlers.push(()=>{if(q)q.sortDOM()}),Y.destroyHandlers.push(()=>{if(r(),q)q.destroy();Q.root.classList.remove(`${U}--masonry`)})}}};var AJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),Z2=(J,X,q)=>{if(q==="none")return J;let j=new Set(J.selected);if(q==="single"){if(j.clear(),X.length>0)j.add(X[0])}else for(let Y of X)j.add(Y);return{...J,selected:j}},N2=(J,X)=>{let q=new Set(J.selected);for(let j of X)q.delete(j);return{...J,selected:q}},a0=(J,X,q)=>{if(q==="none")return J;if(J.selected.has(X))return N2(J,[X]);else return Z2(J,[X],q)},FJ=(J,X,q)=>{if(q!=="multiple")return J;return{...J,selected:new Set(X.map((j)=>j.id))}},LJ=(J)=>({...J,selected:new Set}),_2=(J,X)=>{return J.focusedIndex=X,J},TJ=(J,X,q=!1)=>{if(X===0)return J;let j=J.focusedIndex-1;if(j<0)j=q?X-1:0;return J.focusedIndex=j,J},kJ=(J,X,q=!1)=>{if(X===0)return J;let j=J.focusedIndex+1;if(j>=X)j=q?0:X-1;return J.focusedIndex=j,J},bJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=0,J},HJ=(J,X)=>{if(X===0)return J;return J.focusedIndex=X-1,J};var W2=(J)=>{return Array.from(J.selected)},V2=(J,X)=>{let q=[];for(let j of J.selected){let Y=X(j);if(Y)q.push(Y)}return q};var yJ=(J)=>{let X=J?.mode??"single",q=J?.initial,j=AJ(q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(Q){let{dom:K,emitter:B,config:N}=Q,{classPrefix:U,ariaIdPrefix:_}=N;if(X==="none"){Q.methods.set("select",()=>{}),Q.methods.set("deselect",()=>{}),Q.methods.set("toggleSelect",()=>{}),Q.methods.set("selectAll",()=>{}),Q.methods.set("clearSelection",()=>{}),Q.methods.set("getSelected",()=>[]),Q.methods.set("getSelectedItems",()=>[]),Q.methods.set("setSelectionMode",()=>{});return}K.root.classList.add(`${U}--selectable`);let y=new Map,b=()=>{y.clear();let O=Q.dataManager.getTotal(),L=Q.dataManager.getCached();if(L===0)return;if(L>=O){for(let V=0;V<O;V++){let I=Q.dataManager.getItem(V);if(I)y.set(I.id,V)}return}let $=Q.dataManager.getStorage();if($&&typeof $.getLoadedRanges==="function"){let V=$.getLoadedRanges();for(let I of V)for(let P=I.start;P<=I.end;P++){let u=Q.dataManager.getItem(P);if(u)y.set(u.id,P)}}};B.on("load:end",({items:O,offset:L})=>{if(!O||O.length===0)return;if(L!==void 0)for(let $=0;$<O.length;$++){let V=O[$];if(V&&V.id!==void 0)y.set(V.id,L+$)}else b()}),b(),Q.methods.set("_getSelectedIds",()=>{return j.selected}),Q.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:H}=Q.getRenderFns(),A=()=>{H();let O=(L)=>{let $=y.get(L);if($===void 0)return;return Q.dataManager.getItem($)};B.emit("selection:change",{selected:W2(j),items:V2(j,O)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${U}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",(K.root.getAttribute("role")==="grid"?K.root.parentElement??K.root:K.root).appendChild(Y);let Z=Y;B.on("selection:change",({selected:O})=>{let L=O.length;if(L===0)Z.textContent="";else if(L===1)Z.textContent="1 item selected";else Z.textContent=`${L} items selected`});let E=()=>{if(Q.state.isDestroyed)return;if(!K.root.matches(":focus-visible"))return;let O=Q.dataManager.getTotal();if(O===0)return;let L=j.focusedIndex>=0?Math.min(j.focusedIndex,O-1):0;j=_2(j,L),j.focusVisible=!0,K.root.setAttribute("aria-activedescendant",`${_}-item-${L}`),Q.scrollController.scrollTo(Q.adjustScrollPosition(H0(L,Q.sizeCache,Q.state.viewportState.containerSize,Q.dataManager.getState().total,"center",Q.getCachedCompression())));let $=Q.dataManager.getItem(L);if($)Q.renderer.updateItemClasses(L,j.selected.has($.id),!0)};K.root.addEventListener("focusin",E);let T=(O)=>{if(Q.state.isDestroyed)return;let L=O.relatedTarget;if(L&&K.root.contains(L))return;let $=j.focusedIndex;if(j.focusVisible=!1,K.root.removeAttribute("aria-activedescendant"),$>=0){let V=Q.dataManager.getItem($);if(V)Q.renderer.updateItemClasses($,j.selected.has(V.id),!1)}};K.root.addEventListener("focusout",T),Q.clickHandlers.push((O)=>{if(Q.state.isDestroyed)return;let $=O.target.closest("[data-index]");if(!$)return;let V=parseInt($.dataset.index??"-1",10);if(V<0)return;let I=Q.dataManager.getItem(V);if(!I)return;B.emit("item:click",{item:I,index:V,event:O}),j=_2(j,V),j.focusVisible=!1,K.root.setAttribute("aria-activedescendant",`${_}-item-${V}`),j=a0(j,I.id,X),A()}),Q.keydownHandlers.push((O)=>{if(Q.state.isDestroyed)return;let L=Q.dataManager.getTotal(),$=j.focusedIndex,V=!1,I=!1,P=j;switch(O.key){case"ArrowUp":P=TJ(j,L,N.wrap),P.focusVisible=!0,V=!0,I=!0;break;case"ArrowDown":P=kJ(j,L,N.wrap),P.focusVisible=!0,V=!0,I=!0;break;case"Home":P=bJ(j,L),P.focusVisible=!0,V=!0,I=!0;break;case"End":P=HJ(j,L),P.focusVisible=!0,V=!0,I=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let u=Q.dataManager.getItem(j.focusedIndex);if(u)P=a0(j,u.id,X),P.focusVisible=!0;V=!0}break}if(V){O.preventDefault(),j=P;let u=j.focusedIndex;if(u>=0){let d=Q.dataManager.getState();Q.scrollController.scrollTo(Q.adjustScrollPosition(H0(u,Q.sizeCache,Q.state.viewportState.containerSize,d.total,"center",Q.getCachedCompression()))),K.root.setAttribute("aria-activedescendant",`${_}-item-${u}`)}else K.root.removeAttribute("aria-activedescendant");if(I){let{selected:d}=j;if($>=0&&$!==u){let S=Q.dataManager.getItem($);if(S)Q.renderer.updateItemClasses($,d.has(S.id),!1)}if(u>=0){let S=Q.dataManager.getItem(u);if(S)Q.renderer.updateItemClasses(u,d.has(S.id),!0)}}else A()}}),Q.methods.set("select",(...O)=>{j=Z2(j,O,X),A()}),Q.methods.set("deselect",(...O)=>{j=N2(j,O),A()}),Q.methods.set("toggleSelect",(O)=>{j=a0(j,O,X),A()}),Q.methods.set("selectAll",()=>{if(X!=="multiple")return;let O=Q.getAllLoadedItems();j=FJ(j,O,X),b(),A()}),Q.methods.set("clearSelection",()=>{j=LJ(j),A()}),Q.methods.set("getSelected",()=>{return W2(j)}),Q.methods.set("getSelectedItems",()=>{return V2(j,(L)=>{let $=y.get(L);if($===void 0)return;return Q.dataManager.getItem($)})}),Q.destroyHandlers.push(()=>{if(Z&&Z.parentNode)Z.remove();K.root.removeEventListener("focusin",E),K.root.removeEventListener("focusout",T)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var PJ=(J)=>{let X=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(q){q.methods.set("getScrollSnapshot",()=>{let Y=q.scrollController.getScrollTop(),Q=q.getCachedCompression(),K=q.getVirtualTotal(),B=q.methods.get("getSelected"),N=B&&B().length>0?B():void 0;if(K===0){let b={index:0,offsetInItem:0,total:0};if(N)b.selectedIds=N;return b}let U,_;if(Q.isCompressed){let H=Y/Q.virtualSize*K;U=Math.max(0,Math.min(Math.floor(H),K-1)),_=(H-U)*q.sizeCache.getSize(U)}else U=q.sizeCache.indexAtOffset(Y),_=Y-q.sizeCache.getOffset(U);_=Math.max(0,_);let y={index:U,offsetInItem:_,total:K};if(N)y.selectedIds=N;return y});let j=(Y)=>{let{index:Q,offsetInItem:K,selectedIds:B}=Y,N=q.getVirtualTotal();if(N===0)return;if(!Number.isFinite(Q)||!Number.isFinite(K))return;if(q.sizeCache.getTotal()!==N){q.sizeCache.rebuild(N),q.updateCompressionMode();let Z=q.getCachedCompression();q.updateContentSize(Z.virtualSize)}let _=q.getCachedCompression(),y=Math.max(0,Math.min(Q,N-1)),b;if(_.isCompressed){let Z=q.sizeCache.getSize(y),E=Z>0?K/Z:0;b=(y+E)/N*_.virtualSize}else b=q.sizeCache.getOffset(y)+K;let H=q.state.viewportState.containerSize,A=Math.max(0,_.virtualSize-H);if(b=Math.max(0,Math.min(b,A)),q.scrollController.scrollTo(b),B&&B.length>0){let Z=q.methods.get("select");if(Z)Z(...B)}let R=q.methods.get("loadVisibleRange");if(R)requestAnimationFrame(()=>{R()});else{let Z=q.methods.get("reload");if(Z)requestAnimationFrame(()=>{Z()})}};if(q.methods.set("restoreScroll",j),X)queueMicrotask(()=>{j(X)})}}};var $J=(J,X=50,q=1/0,j=!0)=>{let Y=J,Q=[],K=0,B=()=>{Q=Y.map((Z,E)=>({def:Z,index:E,width:0,minWidth:N1(Z.minWidth??X,1),maxWidth:Z.maxWidth??q,resizable:Z.resizable??j,offset:0}))},N=(Z)=>{if(Q.length===0){K=0;return}let E=0,T=0;for(let O=0;O<Q.length;O++){let L=Q[O],$=L.def;if($.width!==void 0)L.width=D2($.width,L.minWidth,L.maxWidth),E+=L.width;else T++}if(T>0){let L=Math.max(0,Z-E)/T;for(let $=0;$<Q.length;$++){let V=Q[$];if(V.def.width===void 0)V.width=D2(L,V.minWidth,V.maxWidth)}}U()},U=()=>{let Z=0;for(let E=0;E<Q.length;E++){let T=Q[E];T.offset=Z,Z+=T.width}K=Z},_=(Z,E)=>{if(Z<0||Z>=Q.length)return 0;let T=Q[Z];if(!T.resizable)return T.width;let O=D2(E,T.minWidth,T.maxWidth);return T.width=O,U(),O},y=(Z)=>{return Q[Z]},b=(Z)=>{if(Q.length===0)return;if(Z<0)return Q[0];if(Z>=K)return Q[Q.length-1];let E=0,T=Q.length-1;while(E<T){let O=E+T>>>1,L=Q[O];if(Z<L.offset)T=O-1;else if(Z>=L.offset+L.width)E=O+1;else return L}return Q[E]},H=(Z)=>{if(Z<0||Z>=Q.length)return 0;return Q[Z].offset},A=(Z)=>{if(Z<0||Z>=Q.length)return 0;return Q[Z].width},R=(Z)=>{Y=Z,B()};return B(),{get columns(){return Q},get totalWidth(){return K},resolve:N,updateColumns:R,resizeColumn:_,getColumn:y,getColumnAtX:b,getColumnOffset:H,getColumnWidth:A}},D2=(J,X,q)=>Math.min(q,Math.max(X,J)),N1=(J,X)=>Math.max(X,J);var wJ=(J,X,q,j,Y,Q,K)=>{let B=document.createElement("div");B.setAttribute("role","rowgroup");let N=document.createElement("div");N.className=`${j}-table-header`,N.setAttribute("role","row"),N.setAttribute("aria-rowindex","1"),N.style.height=`${q}px`;let U=document.createElement("div");U.className=`${j}-table-header-scroll`,U.setAttribute("role","presentation"),N.appendChild(U),B.appendChild(N),J.insertBefore(B,J.firstChild),X.style.position="absolute",X.style.top=`${q}px`,X.style.left="0",X.style.right="0",X.style.bottom="0",X.style.height="auto";let _=[],y=[],b=[],H=!0,A=null,R="asc",Z=null,E=!1,T=-1,O=0,L=0,$=(G,F)=>{let v=document.createElement("div");v.className=`${j}-table-header-cell`,v.setAttribute("role","columnheader"),v.setAttribute("aria-colindex",String(F+1)),v.dataset.columnKey=G.def.key;let W=G.def.align;if(W==="center")v.classList.add(`${j}-table-header-cell--center`);else if(W==="right")v.classList.add(`${j}-table-header-cell--right`);let C=document.createElement("div");C.className=`${j}-table-header-content`;let r=G.def.header?G.def.header(G.def):G.def.label;if(typeof r==="string")C.textContent=r;else C.appendChild(r);if(v.appendChild(C),G.def.sortable){let a=document.createElement("span");a.className=`${j}-table-header-sort`,a.setAttribute("aria-hidden","true"),v.appendChild(a),b.push(a),v.classList.add(`${j}-table-header-cell--sortable`)}else b.push(null);if(G.resizable){let a=document.createElement("div");a.className=`${j}-table-header-resize`,a.dataset.resizeIndex=String(F),v.appendChild(a),y.push(a)}return v},V=(G)=>{Z=G,U.textContent="",_=[],y=[],b=[];let F=G.columns;for(let v=0;v<F.length;v++){let W=F[v],C=$(W,v);_.push(C),U.appendChild(C)}if(I(G),A)P(A,R)},I=(G)=>{Z=G;let F=G.columns;U.style.width=`${G.totalWidth}px`;for(let v=0;v<_.length&&v<F.length;v++){let W=_[v],C=F[v];W.style.width=`${C.width}px`}},P=(G,F)=>{if(A=G,R=F,!Z)return;let v=Z.columns;for(let W=0;W<b.length&&W<v.length;W++){let C=b[W];if(!C)continue;if(v[W].def.key===G&&G!==null)C.textContent=F==="asc"?"▲":"▼",C.style.opacity="0.7",_[W].setAttribute("aria-sort",F==="asc"?"ascending":"descending");else C.textContent="",C.style.opacity="0",_[W].removeAttribute("aria-sort")}},u=(G)=>{U.style.transform=`translateX(${-G}px)`},d=(G)=>{let F=G.target;if(!F.dataset.resizeIndex)return;if(G.preventDefault(),G.stopPropagation(),T=parseInt(F.dataset.resizeIndex,10),!Z)return;let v=Z.getColumn(T);if(!v||!v.resizable)return;E=!0,O=G.clientX,L=v.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",F.classList.add(`${j}-table-header-resize--active`),F.setPointerCapture(G.pointerId),F.addEventListener("pointermove",S),F.addEventListener("pointerup",c),F.addEventListener("pointercancel",c)},S=(G)=>{if(!E||!Z)return;let F=G.clientX-O;if(Math.abs(F)<1)return;let v=Math.max(0,L+F);Y(T,v)},c=(G)=>{if(!E)return;let F=G.target;F.removeEventListener("pointermove",S),F.removeEventListener("pointerup",c),F.removeEventListener("pointercancel",c);try{F.releasePointerCapture(G.pointerId)}catch{}F.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",E=!1,T=-1},i=(G)=>{let F=G.target;if(F.dataset.resizeIndex!==void 0)return;if(E)return;let v=F;while(v&&!v.dataset.columnKey)if(v=v.parentElement,v===N||v===null)return;if(!v||!v.dataset.columnKey)return;let W=v.dataset.columnKey;if(!Z)return;let C=Z.columns,r=-1;for(let M=0;M<C.length;M++)if(C[M].def.key===W){r=M;break}if(r===-1)return;let a=C[r];if(K)K({key:W,index:r,event:G});if(a.def.sortable&&Q){let M;if(A===W)if(R==="asc")M="desc";else M=null;else M="asc";Q({key:W,index:r,direction:M})}};return N.addEventListener("pointerdown",d),N.addEventListener("click",i),{element:N,update:I,updateSort:P,rebuild:V,show:()=>{if(H)return;H=!0,N.style.display=""},hide:()=>{if(!H)return;H=!1,N.style.display="none"},destroy:()=>{N.removeEventListener("pointerdown",d),N.removeEventListener("click",i),X.style.position="",X.style.top="",X.style.left="",X.style.right="",X.style.bottom="",B.remove(),_=[],y=[],b=[],Z=null,H=!1},syncScroll:u}};var _1=(J=200)=>{let X=[];return{acquire:()=>{let Q=X.pop();if(Q)return Q;return document.createElement("div")},release:(Q)=>{if(Q.parentNode)Q.parentNode.removeChild(Q);if(X.length<J)Q.className="",Q.removeAttribute("data-id"),Q.removeAttribute("data-index"),Q.removeAttribute("aria-selected"),Q.removeAttribute("aria-rowindex"),Q.removeAttribute("role"),Q.style.cssText="",Q.textContent="",X.push(Q)},clear:()=>{X.length=0}}},RJ=(J,X,q,j,Y,Q,K,B,N)=>{let U=_1(),_=new Map,y=-1,b=q,H=null,A=null,R=null,Z=(M,D)=>{A=M,R=D},E=(M,D)=>{if(D)M.setAttribute("aria-selected","true");else M.removeAttribute("aria-selected")},T=`${Y}-item ${Y}-table-row`,O=`${Y}-item--selected`,L=`${Y}-item--focused`,$=`${Y}-table-cell`,V=`${Y}-table-cell--center`,I=`${Y}-table-cell--right`,P=`${Y}-item--odd`,u=`${Y}-item ${Y}-table-row ${Y}-table-group-header`,d=`${Y}-table-group-header-content`,S=(M,D,z,w)=>{if(z.def.cell){let h=z.def.cell(D,z.def,w);if(typeof h==="string")M.innerHTML=h;else M.replaceChildren(h)}else{let h=D[z.def.key];M.textContent=h!=null?String(h):""}},c=(M,D,z,w)=>{let h=T;if(B){if(H){let g=H(D);if(g>=0&&(g&1)===1)h+=` ${P}`}else if((D&1)===1)h+=` ${P}`}if(z)h+=` ${O}`;if(w)h+=` ${L}`;M.className=h},i=(M,D)=>{let z=D.def.align;if(z==="center")M.classList.add(V),M.classList.remove(I);else if(z==="right")M.classList.add(I),M.classList.remove(V);else M.classList.remove(V,I)},p=(M,D)=>{let w=b.columns.length;if(D.length===w)return D;let h=[];for(let g=0;g<w;g++){let t;if(g<D.length)t=D[g];else t=document.createElement("div"),t.className=$,M.appendChild(t);h.push(t)}for(let g=w;g<D.length;g++)D[g].remove();return h},k=(M,D,z)=>{let w=U.acquire(),h=M;w.style.width=`${b.totalWidth}px`;let g=z.getSize(D);w.style.height=`${g}px`,w.className=u,w.setAttribute("role","presentation"),w.setAttribute("data-id",String(M.id)),w.setAttribute("data-index",String(D)),w.removeAttribute("aria-selected"),w.removeAttribute("aria-rowindex"),w.replaceChildren();let t=document.createElement("div");if(t.className=d,R){let s=R(h.groupKey,h.groupIndex);if(typeof s==="string")t.innerHTML=s;else t.appendChild(s)}w.appendChild(t);let l=z.getOffset(D);return w.style.transform=`translateY(${l}px)`,{element:w,cells:[],index:D,isGroupHeader:!0,lastItemId:M.id,lastSelected:!1,lastFocused:!1,lastOffset:l,lastHeight:g}},f=(M,D,z,w,h)=>{let g=U.acquire();g.style.width=`${b.totalWidth}px`;let t=h.getSize(D);g.style.height=`${t}px`,c(g,D,z,w),g.setAttribute("role","row"),g.setAttribute("data-id",String(M.id)),g.setAttribute("data-index",String(D)),g.id=`${Q}-${D}`,g.setAttribute("aria-rowindex",String(D+2));let l=K();if(l!==y)y=l;E(g,z);let s=p(g,[]),j0=b.columns;for(let o=0;o<s.length&&o<j0.length;o++){let n=s[o],q0=j0[o];n.style.left=`${q0.offset}px`,n.style.width=`${q0.width}px`,n.setAttribute("role","gridcell"),n.setAttribute("aria-colindex",String(o+1)),i(n,q0),S(n,M,q0,D)}let x=h.getOffset(D);return g.style.transform=`translateY(${x}px)`,{element:g,cells:s,index:D,isGroupHeader:!1,lastItemId:M.id,lastSelected:z,lastFocused:w,lastOffset:x,lastHeight:t}},G=(M,D,z,w)=>{for(let[s,j0]of _)if(s<D.start||s>D.end)U.release(j0.element),_.delete(s);let h=!1,g=K();if(g!==y)y=g,h=!0;let t=null,l=X();H=typeof B==="string"&&N?N():null;for(let s=D.start;s<=D.end;s++){let j0=s-D.start,x=M[j0];if(!x)continue;let o=z.has(x.id),n=s===w,q0=A?A(x):!1,e=_.get(s);if(e){if(e.isGroupHeader!==q0){U.release(e.element),_.delete(s);let X0=q0?k(x,s,l):f(x,s,o,n,l);if(_.set(s,X0),!t)t=document.createDocumentFragment();t.appendChild(X0.element);continue}if(q0){if(e.lastItemId!==x.id){let Y0=x,G0=e.element.firstElementChild;if(G0&&R){let D0=R(Y0.groupKey,Y0.groupIndex);if(typeof D0==="string")G0.innerHTML=D0;else G0.replaceChildren(D0)}e.element.setAttribute("data-id",String(x.id)),e.lastItemId=x.id}let B0=l.getOffset(s);if(e.lastOffset!==B0)e.lastOffset=B0,e.element.style.transform=`translateY(${B0}px)`;let _0=l.getSize(s);if(e.lastHeight!==_0)e.lastHeight=_0,e.element.style.height=`${_0}px`}else{let X0=e.lastItemId!==x.id,B0=e.lastSelected!==o,_0=e.lastFocused!==n;if(X0){let D0=b.columns;for(let U0=0;U0<e.cells.length&&U0<D0.length;U0++)S(e.cells[U0],x,D0[U0],s);c(e.element,s,o,n),e.element.setAttribute("data-id",String(x.id)),E(e.element,o),e.lastItemId=x.id,e.lastSelected=o,e.lastFocused=n}else if(B0||_0)c(e.element,s,o,n),E(e.element,o),e.lastSelected=o,e.lastFocused=n;let Y0=l.getOffset(s);if(e.lastOffset!==Y0)e.lastOffset=Y0,e.element.style.transform=`translateY(${Y0}px)`;let G0=l.getSize(s);if(e.lastHeight!==G0)e.lastHeight=G0,e.element.style.height=`${G0}px`;if(h)e.element.setAttribute("aria-rowindex",String(s+2))}}else{let X0=q0?k(x,s,l):f(x,s,o,n,l);if(_.set(s,X0),!t)t=document.createDocumentFragment();t.appendChild(X0.element)}}if(t)J.appendChild(t)},F=(M,D,z,w)=>{let h=_.get(M);if(!h)return;if(h.isGroupHeader)return;let g=h.lastItemId!==D.id,t=h.lastSelected!==z,l=h.lastFocused!==w;if(g||t||l){if(g){let s=b.columns;for(let j0=0;j0<h.cells.length&&j0<s.length;j0++)S(h.cells[j0],D,s[j0],M);h.element.setAttribute("data-id",String(D.id)),h.lastItemId=D.id}c(h.element,M,z,w),E(h.element,z),h.lastSelected=z,h.lastFocused=w}},v=(M,D,z)=>{let w=_.get(M);if(!w)return;if(w.isGroupHeader)return;let h=w.lastSelected!==D,g=w.lastFocused!==z;if(h||g)c(w.element,M,D,z),E(w.element,D),w.lastSelected=D,w.lastFocused=z},W=(M)=>{b=M;let D=M.columns;for(let[,z]of _)if(z.element.style.width=`${M.totalWidth}px`,z.cells.length>0)for(let w=0;w<z.cells.length&&w<D.length;w++){let h=z.cells[w],g=D[w];h.style.left=`${g.offset}px`,h.style.width=`${g.width}px`}},C=(M)=>{return _.get(M)?.element},r=()=>{for(let[,M]of _)U.release(M.element);_.clear(),y=-1};return{render:G,updateItem:F,updateItemClasses:v,getElement:C,updateColumnLayout:W,setGroupHeaderFn:Z,clear:r,destroy:()=>{r(),U.clear()}}};var W1=new Set,vJ=(J)=>{if(!J.columns||J.columns.length===0)throw Error("[vlist/builder] withTable: columns must be a non-empty array");if(J.rowHeight===void 0&&J.estimatedRowHeight===void 0)throw Error("[vlist/builder] withTable: either rowHeight or estimatedRowHeight is required");let X=null,q=null,j=null;return{name:"withTable",priority:10,conflicts:["withGrid","withMasonry"],setup(Y){let{dom:Q,emitter:K,config:B}=Y,{classPrefix:N}=B;if(B.horizontal)throw Error("[vlist/builder] withTable cannot be used with orientation: 'horizontal'");if(B.reverse)throw Error("[vlist/builder] withTable cannot be used with reverse: true");let U=J.resizable??!0,_=J.minColumnWidth??50,y=J.maxColumnWidth??1/0,b=J.columnBorders??!1,H=J.rowBorders??!0,A=J.rowHeight,R=J.headerHeight??(typeof A==="number"?A:40),Z=J.sort?.key??null,E=J.sort?.direction??"asc";if(X=$J(J.columns,_,y,U),typeof A==="function")Y.setSizeConfig(A);else if(typeof A==="number")Y.setSizeConfig(A);if(Y.rebuildSizeCache(),Q.root.classList.add(`${N}--table`),H)Q.root.classList.add(`${N}--table-row-borders`);if(b)Q.root.classList.add(`${N}--table-col-borders`);Q.root.setAttribute("role","grid"),Q.root.setAttribute("aria-colcount",String(J.columns.length));let T=-1,O=Q.items.getAttribute("aria-label");if(O)Q.root.setAttribute("aria-label",O),Q.items.removeAttribute("aria-label");Q.items.setAttribute("role","rowgroup"),Q.viewport.setAttribute("role","none"),Q.content.setAttribute("role","none"),Q.viewport.removeAttribute("tabindex");let L=Y.getContainerWidth();X.resolve(L);let $=(D,z)=>{if(!X)return;let w=X.getColumn(D);if(!w)return;let h=w.width,g=X.resizeColumn(D,z);if(q)q.update(X);if(j)j.updateColumnLayout(X);P(),K.emit("column:resize",{key:w.def.key,index:D,previousWidth:h,width:g})},V=(D)=>{if(D.direction===null)Z=null,E="asc";else Z=D.key,E=D.direction;if(q)q.updateSort(Z,E);K.emit("column:sort",D)},I=(D)=>{K.emit("column:click",D)};if(q=wJ(Q.root,Q.viewport,R,N,$,V,I),q.rebuild(X),Z)q.updateSort(Z,E);let P=()=>{if(!X)return;let D=X.totalWidth;Q.content.style.minWidth=`${D}px`,Q.items.style.minWidth=`${D}px`};P(),j=RJ(Q.items,()=>Y.sizeCache,X,J.columns,N,B.ariaIdPrefix,()=>Y.dataManager.getTotal(),Y.rawConfig.item?.striped,()=>Y.getStripeIndexFn());let u=null,d=null,S=!1,c=()=>{if(S)return;S=!0,u=Y.methods.get("_getSelectedIds")??null,d=Y.methods.get("_getFocusedIndex")??null},i=-1,p=-1,k=!0,f=B.overscan,G={start:0,end:0},F={start:0,end:0},v=()=>{if(Y.state.isDestroyed)return;let D=Y.scrollController.getScrollTop(),z=Y.state.viewportState.containerSize;if(!k&&D===i&&z===p)return;i=D,p=z,k=!1;let w=Y.getVirtualTotal(),h=w+1;if(h!==T)T=h,Q.root.setAttribute("aria-rowcount",String(h));if(w===0||z===0)G.start=0,G.end=0;else G.start=Math.max(0,Y.sizeCache.indexAtOffset(D)),G.end=Math.min(w-1,Math.max(0,Y.sizeCache.indexAtOffset(D+z-1)));F.start=Math.max(0,G.start-f),F.end=Math.min(w-1,G.end+f);let g=Y.state.viewportState;g.scrollPosition=D,g.visibleRange.start=G.start,g.visibleRange.end=G.end,g.renderRange.start=F.start,g.renderRange.end=F.end;let t=Y.state.lastRenderRange,l=Y.dataManager.getItemsInRange(F.start,F.end);c();let s=u?u():W1,j0=d?d():-1;if(j.render(l,F,s,j0),t.start!==F.start||t.end!==F.end)t.start=F.start,t.end=F.end,K.emit("range:change",{range:{start:F.start,end:F.end}})},W=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,k=!0,v()};Y.setRenderFns(v,W);let C=q,r=-1,a=()=>{let D=Q.viewport.scrollLeft;if(D!==r){if(r=D,C.syncScroll)C.syncScroll(D)}};Y.afterScroll.push(()=>{a()});let M=()=>{a()};Q.viewport.addEventListener("scroll",M,{passive:!0}),Y.resizeHandlers.push((D,z)=>{if(!X)return;if(X.resolve(D),q)q.update(X);if(j)j.updateColumnLayout(X);P()}),Y.methods.set("updateColumns",(D)=>{if(!X||!q)return;if(X.updateColumns(D),X.resolve(Y.getContainerWidth()),q.rebuild(X),Z)q.updateSort(Z,E);if(P(),j)j.updateColumnLayout(X),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",(D,z)=>{if(!X)return;let w;if(typeof D==="string"){let h=X.columns;w=-1;for(let g=0;g<h.length;g++)if(h[g].def.key===D){w=g;break}if(w===-1)return}else w=D;$(w,z)}),Y.methods.set("getColumnWidths",()=>{if(!X)return{};let D={},z=X.columns;for(let w=0;w<z.length;w++)D[z[w].def.key]=z[w].width;return D}),Y.methods.set("setSort",(D,z)=>{if(Z=D,E=z??"asc",q)q.updateSort(Z,E)}),Y.methods.set("getSort",()=>{return{key:Z,direction:E}}),Y.methods.set("_getTableLayout",()=>X),Y.methods.set("_replaceTableRenderer",(D)=>{j=D}),Y.methods.set("_updateTableForGroups",(D,z)=>{if(j)j.setGroupHeaderFn(D,z)}),Y.methods.set("_getTableHeaderHeight",()=>R),Y.contentSizeHandlers.push(()=>{P()}),Y.destroyHandlers.push(()=>{if(Q.viewport.removeEventListener("scroll",M),q)q.destroy(),q=null;if(j)j.destroy(),j=null;Q.content.style.minWidth="",Q.items.style.minWidth="",Q.root.classList.remove(`${N}--table`),Q.root.removeAttribute("role"),Q.root.removeAttribute("aria-colcount"),Q.viewport.removeAttribute("role"),Q.viewport.setAttribute("tabindex","-1"),Q.content.removeAttribute("role");let D=Q.root.getAttribute("aria-label");if(D)Q.items.setAttribute("aria-label",D),Q.root.removeAttribute("aria-label");Q.root.removeAttribute("aria-rowcount"),Q.items.setAttribute("role","listbox")})},destroy(){if(q)q.destroy(),q=null;if(j)j.destroy(),j=null}}};export{vJ as withTable,PJ as withSnapshots,yJ as withSelection,e2 as withScrollbar,JJ as withScale,UJ as withPage,EJ as withMasonry,VJ as withGroups,GJ as withGrid,YJ as withAsync,n2 as vlist};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/internals - Low-Level Exports
|
|
3
|
+
*
|
|
4
|
+
* Advanced utilities for feature authors, custom renderers, and power users.
|
|
5
|
+
* These are implementation details — use at your own risk.
|
|
6
|
+
*
|
|
7
|
+
* For the stable public API, import from '@floor/vlist' instead.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export { createGroupLayout, buildLayoutItems, createGroupedSizeFn, createStickyHeader, isGroupHeader, type GroupsConfig, type GroupBoundary, type LayoutEntry, type GroupHeaderItem, type GroupLayout, type StickyHeader, } from "./features/groups";
|
|
12
|
+
export { createGridLayout, createGridRenderer, type GridConfig, type GridLayout, type GridPosition, type GridRenderer, type ItemRange, } from "./features/grid";
|
|
13
|
+
export { createTableLayout, createTableHeader, createTableRenderer, type TableConfig, type TableColumn, type TableLayout, type TableHeader, type TableRenderer, type TableRendererInstance, type ResolvedColumn, type ColumnResizeEvent, type ColumnSortEvent, type ColumnClickEvent, } from "./features/table";
|
|
14
|
+
export { createMasonryLayout, createMasonryRenderer, type MasonryConfig, type MasonryLayout, type MasonryRenderer, type GetItemFn, type ItemPlacement, } from "./features/masonry";
|
|
15
|
+
export { createSizeCache, type SizeCache, createMeasuredSizeCache, type MeasuredSizeCache, simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges, MAX_VIRTUAL_SIZE, 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";
|
|
16
|
+
export { createSelectionState, selectItems, deselectItems, toggleSelection, selectAll, clearSelection, isSelected, getSelectedIds, getSelectedItems, } from "./features/selection";
|
|
17
|
+
export { createEmitter, type Emitter } from "./events";
|
|
18
|
+
export { createDataManager as createAsyncManager, createSparseStorage, createPlaceholderManager, isPlaceholderItem, filterPlaceholders, mergeRanges, calculateMissingRanges, type DataManager as AsyncManager, type SparseStorage, type PlaceholderManager, } from "./features/async";
|
|
19
|
+
export { createScrollController, createScrollbar, rafThrottle, type ScrollController, type Scrollbar, } from "./features/scrollbar";
|
|
20
|
+
export { createStats, type StatsConfig, type StatsState, type Stats, } from "./utils/stats";
|
|
21
|
+
//# sourceMappingURL=internals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var I2=(J,Q)=>()=>(J&&(Q=J(J=0)),Q);var W2=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var vJ=(J,Q)=>{let $=Q;return{getOffset:(j)=>j*J,getSize:(j)=>J,indexAtOffset:(j)=>{if($===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(j/J),$-1))},getTotalSize:()=>$*J,getTotal:()=>$,rebuild:(j)=>{$=j},isVariable:()=>!1}},CJ=(J,Q)=>{let $=Q,j=new Float64Array(0),q=(K)=>{$=K,j=new Float64Array(K+1),j[0]=0;for(let U=0;U<K;U++)j[U+1]=j[U]+J(U)};q(Q);let Y=(K)=>{if($===0)return 0;if(K<=0)return 0;if(K>=j[$])return $-1;let U=0,W=$-1;while(U<W){let G=U+W+1>>>1;if(j[G]<=K)U=G;else W=G-1}return U};return{getOffset:(K)=>{if(K<=0)return 0;if(K>=$)return j[$];return j[K]},getSize:(K)=>J(K),indexAtOffset:(K)=>Y(K),getTotalSize:()=>j[$]??0,getTotal:()=>$,rebuild:(K)=>q(K),isVariable:()=>!0}},V2=(J,Q)=>{if(typeof J==="number")return vJ(J,Q);return CJ(J,Q)},P2=(J,Q,$,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil($/J.getSize(0));let q=0,Y=0,K=Q;while(K<j&&Y<$)Y+=J.getSize(K),q++,K++;return Math.max(1,q)},E2=(J,Q,$)=>{if($===0)return 0;if(!J.isVariable())return Math.floor(Q/J.getSize(0));let j=0,q=0;for(let Y=$-1;Y>=0;Y--){let K=J.getSize(Y);if(q+K>Q)break;q+=K,j++}return Math.max(j,1)},k2=(J,Q,$)=>{if($===0)return 0;let j=Math.floor(Q),q=Q-j,Y=Math.max(0,Math.min(j,$-1));return J.getOffset(Y)+q*J.getSize(Y)};var A2=(J,Q,$)=>{let j=Array.from(Q).sort((K,U)=>K-U);if(j.length<=1)return;let q=[];for(let K=0;K<j.length;K++){let U=$(j[K]);if(U)q.push(U)}if(q.length<=1)return;let Y=J.firstChild;for(let K=0;K<q.length;K++){let U=q[K];if(U===Y)Y=Y.nextSibling;else J.insertBefore(U,Y)}};var B2=16000000,c2="x",r2=20,z2="_isPlaceholder",l2="__placeholder_";var G2=(J,Q)=>{let $=Q.getTotalSize(),j=$>B2,q=j?B2:$,Y=$>0?q/$:1;return{isCompressed:j,actualSize:$,virtualSize:q,ratio:Y}},qJ=(J,Q,$,j,q,Y)=>{if(j===0||Q===0)return Y.start=0,Y.end=-1,Y;if(!q.isCompressed){let Z=$.indexAtOffset(J),V=$.indexAtOffset(J+Q);if(V<j-1)V++;return Y.start=Math.max(0,Z),Y.end=Math.min(j-1,Math.max(0,V)),Y}let{virtualSize:K}=q,W=J/K*j,G=Math.floor(W),B=P2($,Math.max(0,G),Q,j),H=Math.ceil(W)+B,k=K-Q-J;if(k<=Q&&k>=-1){let Z=E2($,Q,j),V=Math.max(0,j-Z),X=Math.max(0,Math.min(1,1-k/Q));G=Math.floor(G+(V-G)*X),H=k<=1?j-1:Math.min(j-1,G+B)}return Y.start=Math.max(0,G),Y.end=Math.min(j-1,Math.max(0,H)),Y},XJ=(J,Q,$,j)=>{if($===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-Q),j.end=Math.min($-1,J.end+Q),j},L2=(J,Q,$,j,q,Y,K)=>{if(!Y.isCompressed||j===0)return $.getOffset(J);let{virtualSize:U}=Y,W=U-q,G=W-Q;if(G<=q&&G>=-1){if(Q>=W-1){let y=$.getTotalSize()-$.getOffset(J);return q-y}let k=E2($,q,j),Z=Math.max(0,j-k),X=Q/U*j,D=Math.max(0,Math.min(1,1-G/q)),F=$.getOffset(J)-$.getOffset(Z),v=$.getOffset(J)-k2($,X,j);return v+(F-v)*D}let B=Q/U,H=$.getTotalSize(),E=B*H;return $.getOffset(J)-E},KJ=(J,Q,$,j,q,Y="start")=>{if(j===0)return 0;let K;if(q.isCompressed){if(Y==="end"&&J===j-1)return Math.max(0,q.virtualSize-$);K=J/j*q.virtualSize}else K=Q.getOffset(J);let U=Q.getSize(J);switch(Y){case"center":K-=($-U)/2;break;case"end":K-=$-U;break}let W=q.virtualSize-$;return Math.max(0,Math.min(K,W))},UJ=(J,Q,$,j)=>{if($===0)return 0;if(j.isCompressed){let q=J/j.virtualSize;return Math.floor(q*$)}return Q.indexAtOffset(J)},BJ=(J,Q)=>{if(typeof Q==="number")return J*Q>B2;return Q.getTotalSize()>B2},NJ=(J)=>{if(J<=0)return 0;return Math.floor(B2/J)},ZJ=(J,Q)=>{let $=G2(J,Q);if(!$.isCompressed)return`No compression needed (${J} items, ${($.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${($.ratio*100).toFixed(1)}% (${J} items, ${($.actualSize/1e6).toFixed(1)}M px → ${($.virtualSize/1e6).toFixed(1)}M px virtual)`};var w2=()=>{};var SJ=(J=200)=>{let Q=[];return{acquire:()=>{let Y=Q.pop();if(Y)return Y;let K=document.createElement("div");return K.setAttribute("role","option"),K},release:(Y)=>{if(Y.remove(),Q.length<J)Y.className="",Y.textContent="",Y.removeAttribute("style"),Y.removeAttribute("data-index"),Y.removeAttribute("data-id"),Y.removeAttribute("data-row"),Y.removeAttribute("data-col"),Q.push(Y)},clear:()=>{Q.length=0}}},fJ=1,DJ=(J,Q,$,j,q,Y,K,U,W=!1)=>{let G=SJ(),B=new Map,H=Y,E=!1,k=null,Z=0,V=0,X="",D=-1,F=(N)=>{if(k&&Z===N)return k;return k=G2(N,$),Z=N,k},v={selected:!1,focused:!1},y=(N,M)=>{return v.selected=N,v.focused=M,v},p=`${q}-item ${q}-grid-item`,h=`${q}-item--selected`,l=`${q}-item--focused`,a=(N,M)=>{if(typeof M==="string")N.innerHTML=M;else N.replaceChildren(M)},n=(N,M,w)=>{N.classList.toggle(h,M),N.classList.toggle(l,w)},u=(N,M)=>{let w=j.getRow(N);if(M){let _=M.totalItems,O=F(_);if(O.isCompressed)return L2(w,M.scrollPosition,$,_,M.containerSize,O,M.rangeStart)}return $.getOffset(w)},d=(N,M)=>{let w=E&&j.getCol(N)===0,_=w?0:j.getCol(N),O=w?0:j.getColumnOffset(_,H),L;if(E){let c=j.getRow(N),C=0,x=new Set;for(let t=0;t<N;t++){let T=j.getRow(t);if(T<c&&!x.has(T)){let S=$.getSize(t);C+=S,x.add(T)}}L=C}else L=u(N,M);if(W)return`translate(${Math.round(L)}px, ${Math.round(O)}px)`;return`translate(${Math.round(O)}px, ${Math.round(L)}px)`},m=(N,M)=>{N.style.transform=M},i=(N,M)=>{let w=N.dataset.id?.startsWith("__group_header"),_=w?H:j.getColumnWidth(H),O;if(E||w)O=$.getSize(M)-j.gap;else{let L=j.getRow(M);O=$.getSize(L)-j.gap}if(W)N.style.width=`${O}px`,N.style.height=`${_}px`;else N.style.width=`${_}px`,N.style.height=`${O}px`},o=(N,M,w,_,O)=>{let L=G.acquire(),c=y(w,_);if(L.className=p,L.dataset.index=String(N),L.dataset.id=String(M.id),L.dataset.row=String(j.getRow(N)),L.dataset.col=String(j.getCol(N)),L.ariaSelected=String(w),U)L.id=`${U}-item-${N}`;if(K){let x=K();if(x!==D)D=x,X=String(x);L.setAttribute("aria-setsize",X),L.setAttribute("aria-posinset",String(N+1))}i(L,N);let C=Q(M,N,c);return a(L,C),n(L,w,_),m(L,O),{element:L,lastItemId:M.id,lastSelected:w,lastFocused:_,lastTransform:O,lastSeenFrame:V}},R=(N,M,w,_,O)=>{if(V++,M.start===0&&N.length>0)E=W2(N[0]);for(let[C,x]of B)if(C>=M.start&&C<=M.end)x.lastSeenFrame=V;else if(V-x.lastSeenFrame>fJ)G.release(x.element),B.delete(C);let L=!1;if(K){let C=K();if(C!==D)D=C,X=String(C),L=!0}let c=null;for(let C=M.start;C<=M.end;C++){let x=C-M.start,t=N[x];if(!t){console.warn(`⚠️ RENDER: Missing item at index ${C} (range: ${M.start}-${M.end}, items.length: ${N.length})`);continue}let T=w.has(t.id),S=C===_,I=B.get(C);if(I){let e=I.lastItemId!==t.id,g=I.lastSelected!==T,Q2=I.lastFocused!==S;if(e||g||Q2){if(e){let q2=y(T,S),$2=Q(t,C,q2);a(I.element,$2),I.element.dataset.id=String(t.id),I.element.dataset.row=String(j.getRow(C)),I.element.dataset.col=String(j.getCol(C)),i(I.element,C)}n(I.element,T,S),I.element.ariaSelected=String(T),I.lastItemId=t.id,I.lastSelected=T,I.lastFocused=S}let Y2=d(C,O);if(I.lastTransform!==Y2)m(I.element,Y2),I.lastTransform=Y2;if(L)I.element.setAttribute("aria-setsize",X)}else{let e=d(C,O),g=o(C,t,T,S,e);if(!c)c=document.createDocumentFragment();c.appendChild(g.element),B.set(C,g)}}if(c)J.appendChild(c)},z=(N)=>{for(let[M,w]of B){let _=d(M,N);if(w.lastTransform!==_)m(w.element,_),w.lastTransform=_}},A=(N,M,w,_)=>{let O=B.get(N);if(!O)return;let L=O.lastItemId!==M.id,c=O.lastSelected!==w,C=O.lastFocused!==_;if(L||c||C){let x=y(w,_),t=Q(M,N,x);a(O.element,t),n(O.element,w,_),O.element.dataset.id=String(M.id),O.element.ariaSelected=String(w),i(O.element,N),O.lastItemId=M.id,O.lastSelected=w,O.lastFocused=_}},b=(N,M,w)=>{let _=B.get(N);if(!_)return;let O=_.lastSelected!==M,L=_.lastFocused!==w;if(O||L)n(_.element,M,w),_.lastSelected=M,_.lastFocused=w},P=(N)=>{return B.get(N)?.element},r=(N)=>{if(Math.abs(N-H)<1)return;H=N;for(let[M,w]of B){i(w.element,M);let _=d(M);m(w.element,_),w.lastTransform=_}},f=()=>{A2(J,B.keys(),(N)=>B.get(N)?.element)},s=()=>{for(let[,N]of B)G.release(N.element);B.clear()};return{render:R,updatePositions:z,updateItem:A,updateItemClasses:b,getElement:P,sortDOM:f,updateContainerWidth:r,clear:s,destroy:()=>{s(),G.clear()}}};var GJ=I2(()=>{w2()});var y2=(J,Q)=>{let $=0,j=J.length-1;while($<j){let q=$+j+1>>>1;if(J[q].headerLayoutIndex<=Q)$=q;else j=q-1}return $},p2=(J,Q)=>{let $=0,j=J.length-1;while($<j){let q=$+j+1>>>1;if(J[q].firstDataIndex<=Q)$=q;else j=q-1}return $},x2=(J,Q)=>{if(J===0)return[];let $=[],j=Q(0),q=0,Y=0;for(let K=1;K<J;K++){let U=Q(K);if(U!==j){let W=K-q;$.push({key:j,groupIndex:$.length,headerLayoutIndex:Y,firstDataIndex:q,count:W}),Y=Y+1+W,j=U,q=K}}return $.push({key:j,groupIndex:$.length,headerLayoutIndex:Y,firstDataIndex:q,count:J-q}),$},h2=(J,Q)=>{if(J.length===0||Q.length===0)return[];let $=J.length+Q.length,j=Array($),q=0;for(let Y of Q){j[q]={id:`__group_header_${Y.groupIndex}`,__groupHeader:!0,groupKey:Y.key,groupIndex:Y.groupIndex},q++;for(let K=0;K<Y.count;K++)j[q]=J[Y.firstDataIndex+K],q++}return j},g2=(J,Q)=>{let $=typeof Q==="number"?(j)=>Q:Q;return(j)=>{let q=J.getEntry(j);if(q.type==="header")return J.getHeaderHeight(q.group.groupIndex);return $(q.dataIndex)}},u2=(J,Q)=>{let $=x2(J,Q.getGroupForIndex),j=J+$.length,q=Q.headerHeight;return{get totalEntries(){return j},get groupCount(){return $.length},get groups(){return $},getEntry:(E)=>{if($.length===0)return{type:"item",dataIndex:E,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let k=y2($,E),Z=$[k];if(E===Z.headerLayoutIndex)return{type:"header",group:Z};let V=E-Z.headerLayoutIndex-1;return{type:"item",dataIndex:Z.firstDataIndex+V,group:Z}},layoutToDataIndex:(E)=>{if($.length===0)return E;let k=y2($,E),Z=$[k];if(E===Z.headerLayoutIndex)return-1;let V=E-Z.headerLayoutIndex-1;return Z.firstDataIndex+V},dataToLayoutIndex:(E)=>{if($.length===0)return E;let k=p2($,E),Z=$[k],V=E-Z.firstDataIndex;return Z.headerLayoutIndex+1+V},getGroupAtLayoutIndex:(E)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let k=y2($,E);return $[k]},getGroupAtDataIndex:(E)=>{if($.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let k=p2($,E);return $[k]},getHeaderHeight:typeof q==="number"?(E)=>q:(E)=>{let k=$[E];if(!k)return 0;return q(k.key,E)},rebuild:(E)=>{$=x2(E,Q.getGroupForIndex),j=E+$.length}}};var m2=(J,Q,$,j,q,Y=!1,K=0)=>{let U=document.createElement("div");if(U.className=`${q}-sticky-header`,U.setAttribute("role","presentation"),U.setAttribute("aria-hidden","true"),U.style.position="absolute",U.style.zIndex="5",U.style.pointerEvents="none",U.style.willChange="transform",U.style.overflow="hidden",Y)U.style.top="0",U.style.bottom="0",U.style.left=K?`${K}px`:"0";else U.style.top=K?`${K}px`:"0",U.style.left="0",U.style.right="0";J.insertBefore(U,J.firstChild);let W=-1,G=!1,B=0,H=(D)=>{if(D===W)return;W=D;let F=Q.groups;if(D<0||D>=F.length){U.textContent="";return}let v=F[D],y=j.headerTemplate(v.key,v.groupIndex),p=Q.getHeaderHeight(D);if(Y)U.style.width=`${p}px`;else U.style.height=`${p}px`;if(typeof y==="string")U.innerHTML=y;else U.replaceChildren(y)},E=(D)=>{let F=Q.groups;if(F.length===0){Z();return}let v=$.getOffset(F[0].headerLayoutIndex);if(D<v){Z();return}let y=0,p=F.length-1;while(y<p){let u=y+p+1>>>1;if($.getOffset(F[u].headerLayoutIndex)<=D)y=u;else p=u-1}let h=y;if(!G)k();H(h);let l=Q.getHeaderHeight(h),a=0,n=h+1;if(n<F.length){let d=$.getOffset(F[n].headerLayoutIndex)-D;if(d<l)a=d-l}if(a!==B)if(B=a,a===0)U.style.transform="";else{let u=Math.round(a);U.style.transform=Y?`translateX(${u}px)`:`translateY(${u}px)`}},k=()=>{if(G)return;G=!0,U.style.display=""},Z=()=>{if(!G)return;G=!1,U.style.display="none",W=-1,B=0,U.style.transform=""},V=()=>{let D=W;if(W=-1,D>=0)H(D)},X=()=>{U.remove(),W=-1,G=!1};return U.style.display="none",{update:E,refresh:V,show:k,hide:Z,destroy:X}};var d2=(J,Q)=>{let $=new Map,j=(Y)=>{let K=$.get(Y);return K!==void 0?K:J},q=V2(j,Q);return{getOffset(Y){return q.getOffset(Y)},getSize(Y){return j(Y)},indexAtOffset(Y){return q.indexAtOffset(Y)},getTotalSize(){return q.getTotalSize()},getTotal(){return q.getTotal()},rebuild(Y){if(Y<q.getTotal()){for(let K of $.keys())if(K>=Y)$.delete(K)}q=V2(j,Y)},isVariable(){return!0},setMeasuredSize(Y,K){$.set(Y,K)},isMeasured(Y){return $.has(Y)},getEstimatedSize(){return J},measuredCount(){return $.size}}};var a2=(J,Q,$,j,q,Y)=>{if(j===0||Q===0)return Y.start=0,Y.end=-1,Y;let K=$.indexAtOffset(J),U=$.indexAtOffset(J+Q);if(U<j-1)U++;return Y.start=Math.max(0,K),Y.end=Math.min(j-1,Math.max(0,U)),Y},s2=(J,Q,$,j)=>{if($===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-Q),j.end=Math.min($-1,J.end+Q),j},o2=(J,Q,$,j,q,Y)=>{if(j===0)return 0;let K=Math.max(0,Math.min(J,j-1)),U=Q.getOffset(K),W=Q.getSize(K),G=Q.getTotalSize(),B=Math.max(0,G-$),H;switch(Y){case"center":H=U-$/2+W/2;break;case"end":H=U-$+W;break;case"start":default:H=U;break}return Math.max(0,Math.min(H,B))},n2=(J,Q,$)=>{if($&&$.isCompressed)return $.virtualSize;return Q.getTotalSize()},i2=(J,Q)=>{return Q.getTotalSize()},t2=(J,Q)=>{return Q.getOffset(J)},e2=(J,Q,$)=>{let j=Math.max(0,Q-$);return Math.max(0,Math.min(J,j))};var JJ=(J,Q,$,j,q="start",Y,K=o2)=>{return K(J,Q,$,j,Y,q)},QJ=(J,Q)=>{return J.start===Q.start&&J.end===Q.end},$J=(J,Q)=>{return J>=Q.start&&J<=Q.end},jJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var YJ=(J,Q)=>{let $=[],j=[];for(let q=J.start;q<=J.end;q++)if(q<Q.start||q>Q.end)j.push(q);for(let q=Q.start;q<=Q.end;q++)if(q<J.start||q>J.end)$.push(q);return{add:$,remove:j}};w2();var _J=(J)=>{let Q=Math.max(1,Math.floor(J.columns)),$=J.gap??0,j=J.isHeaderFn,q={row:0,col:0},Y=(Z)=>{if(Z<=0)return 0;if(!j)return Math.ceil(Z/Q);let V=0,X=0,D=0;for(let F=0;F<Z;F++)if(j(F)){if(D++,X>0)V++,X=0;V++,X=0}else if(X++,X>=Q)V++,X=0;if(X>0)V++;return V},K=(Z)=>{return q.row=U(Z),q.col=W(Z),q},U=(Z)=>{if(!j)return Math.floor(Z/Q);let V=0,X=0;for(let D=0;D<=Z;D++)if(j(D)){if(X>0)V++,X=0;if(D===Z)return V;V++,X=0}else{if(D===Z)return V;if(X++,X>=Q)V++,X=0}return console.warn(`⚠️ getRow(${Z}) fell through - returning ${V}`),V},W=(Z)=>{if(!j)return Z%Q;if(j(Z))return 0;let V=0;for(let X=0;X<=Z;X++)if(j(X))V=0;else{if(X===Z)return V;if(V++,V>=Q)V=0}return V},G=(Z,V,X)=>{if(X<=0)return{start:0,end:-1};if(!j){let p=Math.max(0,Z*Q),h=Math.min(X-1,(V+1)*Q-1);return{start:p,end:h}}let D=-1,F=-1,v=0,y=0;for(let p=0;p<X;p++){if(j(p)){if(y>0)v++,y=0;if(v>=Z&&v<=V){if(D===-1)D=p;F=p}v++,y=0}else{if(v>=Z&&v<=V){if(D===-1)D=p;F=p}if(y++,y>=Q)v++,y=0}if(v>V&&y===0)break}if(D===-1)return{start:0,end:-1};return{start:D,end:F}},B=(Z,V,X)=>{if(V<0||V>=Q)return-1;let D=Z*Q+V;if(D<0||D>=X)return-1;return D},H=(Z)=>{let V=(Q-1)*$;return Math.max(0,(Z-V)/Q)};return{get columns(){return Q},get gap(){return $},update:(Z)=>{if(Z.columns!==void 0)Q=Math.max(1,Math.floor(Z.columns));if(Z.gap!==void 0)$=Z.gap;if(Z.isHeaderFn!==void 0)j=Z.isHeaderFn},getTotalRows:Y,getPosition:K,getRow:U,getCol:W,getItemRange:G,getItemIndex:B,getColumnWidth:H,getColumnOffset:(Z,V)=>{let X=H(V);return Z*(X+$)}}};GJ();var VJ=(J,Q=50,$=1/0,j=!0)=>{let q=J,Y=[],K=0,U=()=>{Y=q.map((X,D)=>({def:X,index:D,width:0,minWidth:IJ(X.minWidth??Q,1),maxWidth:X.maxWidth??$,resizable:X.resizable??j,offset:0}))},W=(X)=>{if(Y.length===0){K=0;return}let D=0,F=0;for(let v=0;v<Y.length;v++){let y=Y[v],p=y.def;if(p.width!==void 0)y.width=v2(p.width,y.minWidth,y.maxWidth),D+=y.width;else F++}if(F>0){let y=Math.max(0,X-D)/F;for(let p=0;p<Y.length;p++){let h=Y[p];if(h.def.width===void 0)h.width=v2(y,h.minWidth,h.maxWidth)}}G()},G=()=>{let X=0;for(let D=0;D<Y.length;D++){let F=Y[D];F.offset=X,X+=F.width}K=X},B=(X,D)=>{if(X<0||X>=Y.length)return 0;let F=Y[X];if(!F.resizable)return F.width;let v=v2(D,F.minWidth,F.maxWidth);return F.width=v,G(),v},H=(X)=>{return Y[X]},E=(X)=>{if(Y.length===0)return;if(X<0)return Y[0];if(X>=K)return Y[Y.length-1];let D=0,F=Y.length-1;while(D<F){let v=D+F>>>1,y=Y[v];if(X<y.offset)F=v-1;else if(X>=y.offset+y.width)D=v+1;else return y}return Y[D]},k=(X)=>{if(X<0||X>=Y.length)return 0;return Y[X].offset},Z=(X)=>{if(X<0||X>=Y.length)return 0;return Y[X].width},V=(X)=>{q=X,U()};return U(),{get columns(){return Y},get totalWidth(){return K},resolve:W,updateColumns:V,resizeColumn:B,getColumn:H,getColumnAtX:E,getColumnOffset:k,getColumnWidth:Z}},v2=(J,Q,$)=>Math.min($,Math.max(Q,J)),IJ=(J,Q)=>Math.max(Q,J);var MJ=(J,Q,$,j,q,Y,K)=>{let U=document.createElement("div");U.setAttribute("role","rowgroup");let W=document.createElement("div");W.className=`${j}-table-header`,W.setAttribute("role","row"),W.setAttribute("aria-rowindex","1"),W.style.height=`${$}px`;let G=document.createElement("div");G.className=`${j}-table-header-scroll`,G.setAttribute("role","presentation"),W.appendChild(G),U.appendChild(W),J.insertBefore(U,J.firstChild),Q.style.position="absolute",Q.style.top=`${$}px`,Q.style.left="0",Q.style.right="0",Q.style.bottom="0",Q.style.height="auto";let B=[],H=[],E=[],k=!0,Z=null,V="asc",X=null,D=!1,F=-1,v=0,y=0,p=(A,b)=>{let P=document.createElement("div");P.className=`${j}-table-header-cell`,P.setAttribute("role","columnheader"),P.setAttribute("aria-colindex",String(b+1)),P.dataset.columnKey=A.def.key;let r=A.def.align;if(r==="center")P.classList.add(`${j}-table-header-cell--center`);else if(r==="right")P.classList.add(`${j}-table-header-cell--right`);let f=document.createElement("div");f.className=`${j}-table-header-content`;let s=A.def.header?A.def.header(A.def):A.def.label;if(typeof s==="string")f.textContent=s;else f.appendChild(s);if(P.appendChild(f),A.def.sortable){let J2=document.createElement("span");J2.className=`${j}-table-header-sort`,J2.setAttribute("aria-hidden","true"),P.appendChild(J2),E.push(J2),P.classList.add(`${j}-table-header-cell--sortable`)}else E.push(null);if(A.resizable){let J2=document.createElement("div");J2.className=`${j}-table-header-resize`,J2.dataset.resizeIndex=String(b),P.appendChild(J2),H.push(J2)}return P},h=(A)=>{X=A,G.textContent="",B=[],H=[],E=[];let b=A.columns;for(let P=0;P<b.length;P++){let r=b[P],f=p(r,P);B.push(f),G.appendChild(f)}if(l(A),Z)a(Z,V)},l=(A)=>{X=A;let b=A.columns;G.style.width=`${A.totalWidth}px`;for(let P=0;P<B.length&&P<b.length;P++){let r=B[P],f=b[P];r.style.width=`${f.width}px`}},a=(A,b)=>{if(Z=A,V=b,!X)return;let P=X.columns;for(let r=0;r<E.length&&r<P.length;r++){let f=E[r];if(!f)continue;if(P[r].def.key===A&&A!==null)f.textContent=b==="asc"?"▲":"▼",f.style.opacity="0.7",B[r].setAttribute("aria-sort",b==="asc"?"ascending":"descending");else f.textContent="",f.style.opacity="0",B[r].removeAttribute("aria-sort")}},n=(A)=>{G.style.transform=`translateX(${-A}px)`},u=(A)=>{let b=A.target;if(!b.dataset.resizeIndex)return;if(A.preventDefault(),A.stopPropagation(),F=parseInt(b.dataset.resizeIndex,10),!X)return;let P=X.getColumn(F);if(!P||!P.resizable)return;D=!0,v=A.clientX,y=P.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",b.classList.add(`${j}-table-header-resize--active`),b.setPointerCapture(A.pointerId),b.addEventListener("pointermove",d),b.addEventListener("pointerup",m),b.addEventListener("pointercancel",m)},d=(A)=>{if(!D||!X)return;let b=A.clientX-v;if(Math.abs(b)<1)return;let P=Math.max(0,y+b);q(F,P)},m=(A)=>{if(!D)return;let b=A.target;b.removeEventListener("pointermove",d),b.removeEventListener("pointerup",m),b.removeEventListener("pointercancel",m);try{b.releasePointerCapture(A.pointerId)}catch{}b.classList.remove(`${j}-table-header-resize--active`),J.classList.remove(`${j}--col-resizing`),J.style.cursor="",D=!1,F=-1},i=(A)=>{let b=A.target;if(b.dataset.resizeIndex!==void 0)return;if(D)return;let P=b;while(P&&!P.dataset.columnKey)if(P=P.parentElement,P===W||P===null)return;if(!P||!P.dataset.columnKey)return;let r=P.dataset.columnKey;if(!X)return;let f=X.columns,s=-1;for(let N=0;N<f.length;N++)if(f[N].def.key===r){s=N;break}if(s===-1)return;let J2=f[s];if(K)K({key:r,index:s,event:A});if(J2.def.sortable&&Y){let N;if(Z===r)if(V==="asc")N="desc";else N=null;else N="asc";Y({key:r,index:s,direction:N})}};return W.addEventListener("pointerdown",u),W.addEventListener("click",i),{element:W,update:l,updateSort:a,rebuild:h,show:()=>{if(k)return;k=!0,W.style.display=""},hide:()=>{if(!k)return;k=!1,W.style.display="none"},destroy:()=>{W.removeEventListener("pointerdown",u),W.removeEventListener("click",i),Q.style.position="",Q.style.top="",Q.style.left="",Q.style.right="",Q.style.bottom="",U.remove(),B=[],H=[],E=[],X=null,k=!1},syncScroll:n}};var pJ=(J=200)=>{let Q=[];return{acquire:()=>{let Y=Q.pop();if(Y)return Y;return document.createElement("div")},release:(Y)=>{if(Y.parentNode)Y.parentNode.removeChild(Y);if(Q.length<J)Y.className="",Y.removeAttribute("data-id"),Y.removeAttribute("data-index"),Y.removeAttribute("aria-selected"),Y.removeAttribute("aria-rowindex"),Y.removeAttribute("role"),Y.style.cssText="",Y.textContent="",Q.push(Y)},clear:()=>{Q.length=0}}},OJ=(J,Q,$,j,q,Y,K,U,W)=>{let G=pJ(),B=new Map,H=-1,E=$,k=null,Z=null,V=null,X=(N,M)=>{Z=N,V=M},D=(N,M)=>{if(M)N.setAttribute("aria-selected","true");else N.removeAttribute("aria-selected")},F=`${q}-item ${q}-table-row`,v=`${q}-item--selected`,y=`${q}-item--focused`,p=`${q}-table-cell`,h=`${q}-table-cell--center`,l=`${q}-table-cell--right`,a=`${q}-item--odd`,n=`${q}-item ${q}-table-row ${q}-table-group-header`,u=`${q}-table-group-header-content`,d=(N,M,w,_)=>{if(w.def.cell){let O=w.def.cell(M,w.def,_);if(typeof O==="string")N.innerHTML=O;else N.replaceChildren(O)}else{let O=M[w.def.key];N.textContent=O!=null?String(O):""}},m=(N,M,w,_)=>{let O=F;if(U){if(k){let L=k(M);if(L>=0&&(L&1)===1)O+=` ${a}`}else if((M&1)===1)O+=` ${a}`}if(w)O+=` ${v}`;if(_)O+=` ${y}`;N.className=O},i=(N,M)=>{let w=M.def.align;if(w==="center")N.classList.add(h),N.classList.remove(l);else if(w==="right")N.classList.add(l),N.classList.remove(h);else N.classList.remove(h,l)},o=(N,M)=>{let _=E.columns.length;if(M.length===_)return M;let O=[];for(let L=0;L<_;L++){let c;if(L<M.length)c=M[L];else c=document.createElement("div"),c.className=p,N.appendChild(c);O.push(c)}for(let L=_;L<M.length;L++)M[L].remove();return O},R=(N,M,w)=>{let _=G.acquire(),O=N;_.style.width=`${E.totalWidth}px`;let L=w.getSize(M);_.style.height=`${L}px`,_.className=n,_.setAttribute("role","presentation"),_.setAttribute("data-id",String(N.id)),_.setAttribute("data-index",String(M)),_.removeAttribute("aria-selected"),_.removeAttribute("aria-rowindex"),_.replaceChildren();let c=document.createElement("div");if(c.className=u,V){let x=V(O.groupKey,O.groupIndex);if(typeof x==="string")c.innerHTML=x;else c.appendChild(x)}_.appendChild(c);let C=w.getOffset(M);return _.style.transform=`translateY(${C}px)`,{element:_,cells:[],index:M,isGroupHeader:!0,lastItemId:N.id,lastSelected:!1,lastFocused:!1,lastOffset:C,lastHeight:L}},z=(N,M,w,_,O)=>{let L=G.acquire();L.style.width=`${E.totalWidth}px`;let c=O.getSize(M);L.style.height=`${c}px`,m(L,M,w,_),L.setAttribute("role","row"),L.setAttribute("data-id",String(N.id)),L.setAttribute("data-index",String(M)),L.id=`${Y}-${M}`,L.setAttribute("aria-rowindex",String(M+2));let C=K();if(C!==H)H=C;D(L,w);let x=o(L,[]),t=E.columns;for(let S=0;S<x.length&&S<t.length;S++){let I=x[S],e=t[S];I.style.left=`${e.offset}px`,I.style.width=`${e.width}px`,I.setAttribute("role","gridcell"),I.setAttribute("aria-colindex",String(S+1)),i(I,e),d(I,N,e,M)}let T=O.getOffset(M);return L.style.transform=`translateY(${T}px)`,{element:L,cells:x,index:M,isGroupHeader:!1,lastItemId:N.id,lastSelected:w,lastFocused:_,lastOffset:T,lastHeight:c}},A=(N,M,w,_)=>{for(let[x,t]of B)if(x<M.start||x>M.end)G.release(t.element),B.delete(x);let O=!1,L=K();if(L!==H)H=L,O=!0;let c=null,C=Q();k=typeof U==="string"&&W?W():null;for(let x=M.start;x<=M.end;x++){let t=x-M.start,T=N[t];if(!T)continue;let S=w.has(T.id),I=x===_,e=Z?Z(T):!1,g=B.get(x);if(g){if(g.isGroupHeader!==e){G.release(g.element),B.delete(x);let Q2=e?R(T,x,C):z(T,x,S,I,C);if(B.set(x,Q2),!c)c=document.createDocumentFragment();c.appendChild(Q2.element);continue}if(e){if(g.lastItemId!==T.id){let $2=T,X2=g.element.firstElementChild;if(X2&&V){let U2=V($2.groupKey,$2.groupIndex);if(typeof U2==="string")X2.innerHTML=U2;else X2.replaceChildren(U2)}g.element.setAttribute("data-id",String(T.id)),g.lastItemId=T.id}let Y2=C.getOffset(x);if(g.lastOffset!==Y2)g.lastOffset=Y2,g.element.style.transform=`translateY(${Y2}px)`;let q2=C.getSize(x);if(g.lastHeight!==q2)g.lastHeight=q2,g.element.style.height=`${q2}px`}else{let Q2=g.lastItemId!==T.id,Y2=g.lastSelected!==S,q2=g.lastFocused!==I;if(Q2){let U2=E.columns;for(let j2=0;j2<g.cells.length&&j2<U2.length;j2++)d(g.cells[j2],T,U2[j2],x);m(g.element,x,S,I),g.element.setAttribute("data-id",String(T.id)),D(g.element,S),g.lastItemId=T.id,g.lastSelected=S,g.lastFocused=I}else if(Y2||q2)m(g.element,x,S,I),D(g.element,S),g.lastSelected=S,g.lastFocused=I;let $2=C.getOffset(x);if(g.lastOffset!==$2)g.lastOffset=$2,g.element.style.transform=`translateY(${$2}px)`;let X2=C.getSize(x);if(g.lastHeight!==X2)g.lastHeight=X2,g.element.style.height=`${X2}px`;if(O)g.element.setAttribute("aria-rowindex",String(x+2))}}else{let Q2=e?R(T,x,C):z(T,x,S,I,C);if(B.set(x,Q2),!c)c=document.createDocumentFragment();c.appendChild(Q2.element)}}if(c)J.appendChild(c)},b=(N,M,w,_)=>{let O=B.get(N);if(!O)return;if(O.isGroupHeader)return;let L=O.lastItemId!==M.id,c=O.lastSelected!==w,C=O.lastFocused!==_;if(L||c||C){if(L){let x=E.columns;for(let t=0;t<O.cells.length&&t<x.length;t++)d(O.cells[t],M,x[t],N);O.element.setAttribute("data-id",String(M.id)),O.lastItemId=M.id}m(O.element,N,w,_),D(O.element,w),O.lastSelected=w,O.lastFocused=_}},P=(N,M,w)=>{let _=B.get(N);if(!_)return;if(_.isGroupHeader)return;let O=_.lastSelected!==M,L=_.lastFocused!==w;if(O||L)m(_.element,N,M,w),D(_.element,M),_.lastSelected=M,_.lastFocused=w},r=(N)=>{E=N;let M=N.columns;for(let[,w]of B)if(w.element.style.width=`${N.totalWidth}px`,w.cells.length>0)for(let _=0;_<w.cells.length&&_<M.length;_++){let O=w.cells[_],L=M[_];O.style.left=`${L.offset}px`,O.style.width=`${L.width}px`}},f=(N)=>{return B.get(N)?.element},s=()=>{for(let[,N]of B)G.release(N.element);B.clear(),H=-1};return{render:A,updateItem:b,updateItemClasses:P,getElement:f,updateColumnLayout:r,setGroupHeaderFn:X,clear:s,destroy:()=>{s(),G.clear()}}};var WJ=(J)=>{let Q=Math.max(1,Math.floor(J.columns)),$=J.gap??0,j=J.containerSize,q=0,Y=[],K=()=>{let X=(Q-1)*$;q=Math.max(0,(j-X)/Q),Y=Array(Q);let D=q+$;for(let F=0;F<Q;F++)Y[F]=F*D};K();let U=[],W=0,G=[],B=(X)=>{let D=0,F=X[0];for(let v=1;v<X.length;v++){let y=X[v];if(y<F)F=y,D=v}return D},H=(X,D)=>{if(X<=0)return W=0,U=[],[];let F=Array(Q).fill(0),v=Array(Q);for(let h=0;h<Q;h++)v[h]=[];let y=Array(X);for(let h=0;h<X;h++){let l=B(F),a=D(h),n=F[l];y[h]={index:h,x:Y[l],y:n,lane:l,size:a,crossSize:q},v[l].push(h),F[l]=n+a+$}U=v;let p=0;for(let h=0;h<Q;h++){let l=F[h],a=l>0?l-$:0;if(a>p)p=a}return W=p,y},E=(X)=>{if(X.length===0)return W>0?W:0;if(W>0)return W;let D=Array(Q).fill(0);for(let v of X){let y=v.y+v.size,p=D[v.lane];if(y>p)D[v.lane]=y}let F=0;for(let v=0;v<Q;v++)if(D[v]>F)F=D[v];return F},k=(X,D,F)=>{if(X.length===0||F<=D)return G.length=0,G;if(U.length===0||U.length!==Q)return Z(X,D,F);G.length=0;for(let v=0;v<Q;v++){let y=U[v],p=y.length;if(p===0)continue;let h=0,l=p;while(h<l){let a=h+l>>>1,n=X[y[a]];if(n.y+n.size<=D)h=a+1;else l=a}for(let a=h;a<p;a++){let n=X[y[a]];if(n.y>=F)break;G.push(n)}}return G},Z=(X,D,F)=>{let v=[];for(let y of X)if(y.y+y.size>D&&y.y<F)v.push(y);return v};return{get columns(){return Q},get gap(){return $},get containerSize(){return j},update:(X)=>{let D=!1;if(X.columns!==void 0){let F=Math.max(1,Math.floor(X.columns));if(F!==Q)Q=F,D=!0}if(X.gap!==void 0&&X.gap!==$)$=X.gap,D=!0;if(X.containerSize!==void 0&&X.containerSize!==j)j=X.containerSize,D=!0;if(D)K()},calculateLayout:H,getTotalSize:E,getVisibleItems:k}};var xJ=(J=200)=>{let Q=[];return{acquire:()=>{let Y=Q.pop();if(Y)return Y;let K=document.createElement("div");return K.setAttribute("role","option"),K},release:(Y)=>{if(Y.remove(),Q.length<J)Y.className="",Y.textContent="",Y.removeAttribute("style"),Y.removeAttribute("data-index"),Y.removeAttribute("data-id"),Y.removeAttribute("data-lane"),Q.push(Y)},clear:()=>{Q.length=0}}},hJ=1,EJ=(J,Q,$,j=!1,q,Y)=>{let K=xJ(),U=new Map,W=new Set,G=0,B="",H=-1,E={selected:!1,focused:!1},k=(u,d)=>{return E.selected=u,E.focused=d,E},Z=`${$}-item ${$}-masonry-item`,V=`${$}-item--selected`,X=`${$}-item--focused`,D=(u,d)=>{if(typeof d==="string")u.innerHTML=d;else u.replaceChildren(d)},F=(u,d,m)=>{u.classList.toggle(V,d),u.classList.toggle(X,m)},v=(u,d)=>{if(j)u.style.transform=`translate(${Math.round(d.y)}px, ${Math.round(d.x)}px)`;else u.style.transform=`translate(${Math.round(d.x)}px, ${Math.round(d.y)}px)`},y=(u,d)=>{if(j)u.style.width=`${d.size}px`,u.style.height=`${d.crossSize}px`;else u.style.width=`${d.crossSize}px`,u.style.height=`${d.size}px`},p=(u,d,m,i,o)=>{let R=K.acquire(),z=k(i,o);if(R.className=Z,R.dataset.index=String(u),R.dataset.id=String(d.id),R.dataset.lane=String(m.lane),R.ariaSelected=String(i),Y)R.id=`${Y}-item-${u}`;if(q){let b=q();if(b!==H)H=b,B=String(b);R.setAttribute("aria-setsize",B),R.setAttribute("aria-posinset",String(u+1))}y(R,m);let A=Q(d,u,z);return D(R,A),F(R,i,o),v(R,m),{element:R,lastItemId:d.id,lastSelected:i,lastFocused:o,lastY:m.y,lastX:m.x,lastSize:m.size,lastCrossSize:m.crossSize,lastSeenFrame:G}},h=(u,d,m,i)=>{G++,W.clear();for(let R=0;R<d.length;R++)W.add(d[R].index);for(let[R,z]of U)if(W.has(R))z.lastSeenFrame=G;else if(G-z.lastSeenFrame>hJ)K.release(z.element),U.delete(R);let o=null;for(let R=0;R<d.length;R++){let z=d[R],A=z.index,b=u(A);if(!b)continue;let P=m.has(b.id),r=A===i,f=U.get(A);if(f){let s=f.lastItemId!==b.id,J2=f.lastSelected!==P,N=f.lastFocused!==r,M=f.lastY!==z.y||f.lastX!==z.x,w=f.lastSize!==z.size||f.lastCrossSize!==z.crossSize;if(s||J2||N){let _=k(P,r),O=Q(b,A,_);D(f.element,O),F(f.element,P,r),f.element.dataset.id=String(b.id),f.element.ariaSelected=String(P),f.lastItemId=b.id,f.lastSelected=P,f.lastFocused=r}if(w)y(f.element,z),f.lastSize=z.size,f.lastCrossSize=z.crossSize;if(M)v(f.element,z),f.lastY=z.y,f.lastX=z.x}else{let s=p(A,b,z,P,r);if(!o)o=document.createDocumentFragment();o.appendChild(s.element),U.set(A,s)}}if(o)J.appendChild(o)},l=()=>{for(let{element:u}of U.values())K.release(u);U.clear(),J.innerHTML=""};return{render:h,getElement:(u)=>U.get(u)?.element,sortDOM:()=>{A2(J,U.keys(),(u)=>U.get(u)?.element)},clear:l,destroy:()=>{l(),K.clear()}}};var AJ=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),C2=(J,Q,$)=>{if($==="none")return J;let j=new Set(J.selected);if($==="single"){if(j.clear(),Q.length>0)j.add(Q[0])}else for(let q of Q)j.add(q);return{...J,selected:j}},S2=(J,Q)=>{let $=new Set(J.selected);for(let j of Q)$.delete(j);return{...J,selected:$}},LJ=(J,Q,$)=>{if($==="none")return J;if(J.selected.has(Q))return S2(J,[Q]);else return C2(J,[Q],$)},FJ=(J,Q,$)=>{if($!=="multiple")return J;return{...J,selected:new Set(Q.map((j)=>j.id))}},bJ=(J)=>({...J,selected:new Set});var HJ=(J,Q)=>{return J.selected.has(Q)},TJ=(J)=>{return Array.from(J.selected)},RJ=(J,Q)=>{let $=[];for(let j of J.selected){let q=Q(j);if(q)$.push(q)}return $};var yJ=()=>{let J={},Q=(U,W)=>{if(!J[U])J[U]=new Set;return J[U].add(W),()=>$(U,W)},$=(U,W)=>{J[U]?.delete(W)};return{on:Q,off:$,emit:(U,W)=>{J[U]?.forEach((G)=>{try{G(W)}catch(B){console.error(`[vlist] Error in event handler for "${String(U)}":`,B)}})},once:(U,W)=>{let G=(B)=>{$(U,G),W(B)};return Q(U,G)},clear:(U)=>{if(U)delete J[U];else for(let W in J)delete J[W]},listenerCount:(U)=>{return J[U]?.size??0}}};var F2=(J={})=>{let{chunkSize:Q=100,maxCachedItems:$=5000,evictionBuffer:j=200,onEvict:q}=J,Y=new Map,K=0,U=0,W=(R)=>{let z=Y.get(R);if(!z)z={items:Array(Q),count:0,lastAccess:Date.now()},Y.set(R,z);else z.lastAccess=Date.now();return z},G=(R)=>{return Math.floor(R/Q)},B=(R)=>{return R%Q},H=()=>K,E=(R)=>{K=R},k=(R)=>{if(R<0||R>=K)return;let z=G(R),A=Y.get(z);if(!A)return;return A.items[B(R)]},Z=(R)=>{if(R<0||R>=K)return!1;let z=G(R),A=Y.get(z);if(!A)return!1;return A.items[B(R)]!==void 0},V=(R,z)=>{let A=G(R),b=W(A),P=B(R),r=b.items[P]===void 0;if(b.items[P]=z,r)b.count++,U++;if(R>=K)K=R+1},X=(R,z)=>{for(let A=0;A<z.length;A++){let b=z[A];if(b!==void 0)V(R+A,b)}},D=(R)=>{if(R<0||R>=K)return!1;let z=G(R),A=Y.get(z);if(!A)return!1;let b=B(R);if(A.items[b]===void 0)return!1;if(A.items[b]=void 0,A.count--,U--,A.count===0)Y.delete(z);return!0},F=(R,z)=>{let A=[];for(let b=R;b<=z&&b<K;b++)A.push(k(b));return A},v=(R,z)=>{for(let A=R;A<=z&&A<K;A++)if(!Z(A))return!1;return!0},y=()=>{let R=[],z=null,A=Array.from(Y.keys()).sort((b,P)=>b-P);for(let b of A){let P=Y.get(b);if(!P)continue;let r=b*Q;for(let f=0;f<Q;f++){let s=r+f;if(s>=K)break;if(P.items[f]!==void 0)if(z===null)z={start:s,end:s};else if(s===z.end+1)z.end=s;else R.push(z),z={start:s,end:s};else if(z!==null)R.push(z),z=null}}if(z!==null)R.push(z);return R},p=(R,z)=>{let A=[],b=null;for(let P=R;P<=z&&P<K;P++)if(!Z(P))if(b===null)b={start:P,end:P};else b.end=P;else if(b!==null)A.push(b),b=null;if(b!==null)A.push(b);return A},h=(R)=>{return Y.has(R)},l=(R)=>{let z=Y.get(R);if(z)z.lastAccess=Date.now()},a=(R,z)=>{if(R>z||Y.size===0)return;let A=Date.now(),b=G(Math.max(0,R)),P=G(Math.min(K-1,z));for(let r=b;r<=P;r++){let f=Y.get(r);if(f)f.lastAccess=A}},n=(R,z)=>{if(U<=$)return 0;let A=Math.max(0,R-j),b=Math.min(K-1,z+j),P=G(A),r=G(b),f=0,s=[];for(let[J2,N]of Y)if(J2<P||J2>r)f+=N.count,s.push(J2),U-=N.count,Y.delete(J2);if(f>0&&q)q(f,s);return f},u=()=>{if(U<=$)return 0;let R=Array.from(Y.entries()).sort(([,b],[,P])=>b.lastAccess-P.lastAccess),z=0,A=[];for(let[b,P]of R){if(U<=$)break;z+=P.count,U-=P.count,A.push(b),Y.delete(b)}if(z>0&&q)q(z,A);return z},d=()=>{return{totalItems:K,cachedItems:U,cachedChunks:Y.size,chunkSize:Q,maxCachedItems:$,memoryEfficiency:K>0?1-U/K:1}},m=()=>U,i=()=>{Y.clear(),U=0};return{chunkSize:Q,maxCachedItems:$,getTotal:H,setTotal:E,get:k,has:Z,set:V,setRange:X,delete:D,getRange:F,isRangeLoaded:v,getLoadedRanges:y,findUnloadedRanges:p,getChunkIndex:G,isChunkLoaded:h,touchChunk:l,touchChunksForRange:a,evictDistant:n,evictToLimit:u,getStats:d,getCachedCount:m,clear:i,reset:()=>{i(),K=0}}},b2=(J)=>{if(J.length===0)return[];let Q=[...J].sort((j,q)=>j.start-q.start),$=[{...Q[0]}];for(let j=1;j<Q.length;j++){let q=Q[j],Y=$[$.length-1];if(q.start<=Y.end+1)Y.end=Math.max(Y.end,q.end);else $.push({...q})}return $},M2=(J,Q,$)=>{let j=Math.floor(J.start/$)*$,q=Math.ceil((J.end+1)/$)*$-1,Y={start:j,end:q};if(Q.length===0)return[Y];let K=[],U=b2(Q),W=Y.start;for(let G of U){if(G.end<W)continue;if(G.start>Y.end)break;if(G.start>W)K.push({start:W,end:Math.min(G.start-1,Y.end)});if(W=G.end+1,W>Y.end)break}if(W<=Y.end)K.push({start:W,end:Y.end});return K};var H2=(J={})=>{let{maskCharacter:Q=c2,maxSampleSize:$=r2}=J,j=[],q=!1,Y=0,K=(H)=>{if(q||H.length===0)return;let E=Math.min(H.length,$);for(let k=0;k<E;k++){let Z=H[k];if(!Z||typeof Z!=="object")continue;let V={};for(let[X,D]of Object.entries(Z)){if(X.startsWith("_")||X==="id")continue;V[X]=String(D??"").length}if(Object.keys(V).length>0)j.push(V)}q=!0},U=()=>q,W=(H)=>{let E={id:`${l2}${Y++}`,[z2]:!0,_index:H};if(j.length===0)return E.label=Q.repeat(12),E;let k=j[H%j.length];for(let[Z,V]of Object.entries(k))E[Z]=Q.repeat(Math.max(1,V));return E};return{analyzeStructure:K,hasAnalyzedStructure:U,generate:W,generateRange:(H,E)=>{let k=[];for(let Z=H;Z<=E;Z++)k.push(W(Z));return k},clear:()=>{j=[],q=!1,Y=0}}},_2=(J)=>{if(!J||typeof J!=="object")return!1;return J[z2]===!0},f2=(J)=>{return J.filter((Q)=>!_2(Q))};var uJ=50,PJ=(J={})=>{let{adapter:Q,initialItems:$,initialTotal:j,storage:q,placeholder:Y,pageSize:K=uJ,onStateChange:U,onItemsLoaded:W,onItemsEvicted:G}=J,B=F2({...q,onEvict:(T,S)=>{G?.(T),p()}}),H=null,E=()=>{if(!H)H=H2(Y);return H},k=new Map,Z=!1,V,X=!0,D,F=[],v=0,y=new Map,p=()=>{U?.(o())},h=()=>{k.clear();let T=B.getLoadedRanges();for(let S of T)for(let I=S.start;I<=S.end;I++){let e=B.get(I);if(e&&!_2(e))k.set(e.id,I)}},l=(T,S)=>{if(!_2(S))k.set(S.id,T)},a=(T)=>{k.delete(T)},n=(T,S)=>{return`${T}-${S}`},u=()=>B.getTotal(),d=()=>B.getCachedCount(),m=()=>Z,i=()=>X,o=()=>({total:B.getTotal(),cached:B.getCachedCount(),isLoading:Z,pendingRanges:F,error:V,hasMore:X,cursor:D}),R=()=>B,z=()=>E(),A=(T)=>{let S=B.get(T);if(S!==void 0)return S;if(T>=0&&T<B.getTotal())return E().generate(T);return},b=(T)=>{let S=k.get(T);if(S===void 0)return;return B.get(S)},P=(T)=>{return k.get(T)??-1},r=(T)=>{let S=B.get(T);return S!==void 0&&!_2(S)},f=(T,S)=>{let I=[],e=B.getTotal(),g=0,Q2=0;B.touchChunksForRange(T,Math.min(S,e-1));for(let Y2=T;Y2<=S&&Y2<e;Y2++){let q2=B.get(Y2);if(q2!==void 0)I.push(q2),g++;else I.push(E().generate(Y2)),Q2++}return I},s=(T)=>{B.setTotal(T),X=B.getCachedCount()<T,p()},J2=(T,S=0,I)=>{if(H&&!H.hasAnalyzedStructure()&&T.length>0)H.analyzeStructure(T);for(let e=0;e<T.length;e++){let g=T[e];if(g!==void 0){let Q2=S+e;B.set(Q2,g),l(Q2,g)}}if(I!==void 0)B.setTotal(I);else if(S+T.length>B.getTotal())B.setTotal(S+T.length);if(B.getCachedCount()>=B.getTotal()&&B.getTotal()>0)X=!1;W?.(T,S,B.getTotal()),p()},N=(T,S)=>{let I=k.get(T);if(I===void 0)return!1;let e=B.get(I);if(!e)return!1;let g={...e,...S};if(B.set(I,g),S.id!==void 0&&S.id!==T)a(T),l(I,g);return p(),!0},M=(T)=>{let S=k.get(T);if(S===void 0)return!1;B.delete(S),a(T);let I=B.getTotal();if(I>0)B.setTotal(I-1);return p(),!0},w=async(T,S)=>{if(!Q)return;let I=n(T,S);if(y.has(I))return;let e=B.getLoadedRanges(),g=M2({start:T,end:S},e,B.chunkSize);if(g.length===0)return;let Q2=B.chunkSize,Y2=[];for(let $2 of g){let X2=Math.floor($2.start/Q2),U2=Math.floor($2.end/Q2);for(let j2=X2;j2<=U2;j2++){let N2=j2*Q2,K2=N2+Q2-1,Z2=n(N2,K2);if(!Y2.some((O2)=>O2.start===N2)&&!y.has(Z2))Y2.push({start:N2,end:K2})}}let q2=[];for(let $2 of g){let X2=Math.floor($2.start/Q2),U2=Math.floor($2.end/Q2);for(let j2=X2;j2<=U2;j2++){let N2=j2*Q2,K2=N2+Q2-1,Z2=n(N2,K2);if(y.has(Z2)){let O2=y.get(Z2);if(!q2.includes(O2))q2.push(O2)}}}for(let $2 of Y2){let X2=n($2.start,$2.end),U2=(async()=>{F.push($2),Z=!0,V=void 0,p();try{let j2=$2.end-$2.start+1,N2={offset:$2.start,limit:j2,cursor:void 0},K2=await Q.read(N2);if(J2(K2.items,$2.start,K2.total),K2.cursor)D=K2.cursor;let Z2=$2.start+K2.items.length;if(Z2>=v){if(v=Z2,K2.hasMore!==void 0)X=K2.hasMore;else if(K2.total!==void 0)X=Z2<K2.total}}catch(j2){V=j2 instanceof Error?j2:Error(String(j2))}finally{y.delete(X2),F=F.filter((j2)=>j2.start!==$2.start||j2.end!==$2.end),Z=y.size>0,p()}})();y.set(X2,U2),q2.push(U2)}await Promise.all(q2)},_=async(T,S)=>{if(B.isRangeLoaded(T,S))return;await w(T,S)},O=async()=>{if(!Q)return;await w(0,K-1)},L=async()=>{if(!Q||Z||!X)return!1;let T=B.getCachedCount(),S=B.getTotal(),I=T,e=Math.min(I+K-1,S>0?S-1:I+K-1);if(I>=S&&S>0)return X=!1,!1;return await w(I,e),B.getCachedCount()>T},c=async()=>{if(B.clear(),B.setTotal(0),k.clear(),H)H.clear();y.clear(),F=[],Z=!1,D=void 0,X=!0,v=0,V=void 0,p()},C=(T,S)=>{if(B.evictDistant(T,S)>0)h()},x=()=>{B.clear(),k.clear(),D=void 0,V=void 0,F=[],Z=!1,p()},t=()=>{if(B.reset(),k.clear(),H)H.clear();D=void 0,X=!0,v=0,V=void 0,F=[],Z=!1,p()};if($&&$.length>0)J2($,0,j??$.length);else if(j!==void 0)B.setTotal(j),p();return{getState:o,getTotal:u,getCached:d,getIsLoading:m,getHasMore:i,getStorage:R,getPlaceholders:z,getItem:A,getItemById:b,getIndexById:P,isItemLoaded:r,getItemsInRange:f,setTotal:s,setItems:J2,updateItem:N,removeItem:M,loadRange:w,ensureRange:_,loadInitial:O,loadMore:L,reload:c,evictDistant:C,clear:x,reset:t}};var kJ=(J,Q,$={},j="vlist",q=!1)=>{let{autoHide:Y=!0,autoHideDelay:K=1000,minThumbSize:U=30,showOnHover:W=!0,hoverZoneWidth:G=16,showOnViewportEnter:B=!0}=$,H=0,E=0,k=0,Z=0,V=!1,X=!1,D=0,F=0,v=0,y=null,p=!1,h=null,l=null,a=q?"width":"height",n=q?"translateX":"translateY",u=q?(C)=>C.clientX:(C)=>C.clientY,d=q?"left":"top",m=document.createElement("div"),i=document.createElement("div"),o=W?document.createElement("div"):null,R=()=>{if(m.className=`${j}-scrollbar`,i.className=`${j}-scrollbar-thumb`,q)m.classList.add(`${j}-scrollbar--horizontal`);if(m.appendChild(i),J.appendChild(m),o){if(o.className=`${j}-scrollbar-hover`,q)o.classList.add(`${j}-scrollbar-hover--horizontal`),o.style.height=`${G}px`;else o.style.width=`${G}px`;J.appendChild(o)}},z=()=>{if(y)clearTimeout(y),y=null},A=()=>{if(!Y)return;z(),y=setTimeout(P,K)},b=()=>{if(H<=E)return;if(z(),!p)m.classList.add(`${j}-scrollbar--visible`),p=!0;if(Y&&!V&&!X)A()},P=()=>{if(V||X)return;m.classList.remove(`${j}-scrollbar--visible`),p=!1},r=(C,x)=>{H=C,E=x;let t=H>E;if(m.style.display=t?"":"none",!t){P();return}let T=E/H;k=Math.max(U,T*E),i.style[a]=`${k}px`,Z=E-k,f(v)},f=(C)=>{if(v=C,H<=E||Z<=0)return;let x=H-E,T=Math.min(1,Math.max(0,C/x))*Z;i.style.transform=`${n}(${T}px)`},s=(C)=>{if(C.target===i)return;let x=m.getBoundingClientRect(),S=u(C)-x[d]-k/2,e=Math.max(0,Math.min(S,Z))/Z,g=H-E,Q2=e*g;Q(Q2),b()},J2=(C)=>{C.preventDefault(),C.stopPropagation(),V=!0,D=u(C),F=v,z(),m.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",N),document.addEventListener("mouseup",M)},N=(C)=>{if(!V)return;let x=u(C)-D,t=Z>0?x/Z:0,T=H-E,S=t*T,I=Math.max(0,Math.min(F+S,T)),g=I/T*Z;if(i.style.transform=`${n}(${g}px)`,l=I,h===null)h=requestAnimationFrame(()=>{if(l!==null)Q(l);h=null})},M=()=>{if(V=!1,h!==null)cancelAnimationFrame(h),h=null;if(l!==null)Q(l),l=null;if(m.classList.remove(`${j}-scrollbar--dragging`),Y&&!X)A();document.removeEventListener("mousemove",N),document.removeEventListener("mouseup",M)},w=()=>{if(B)b()},_=()=>{if(!V){if(X=!1,Y)A()}},O=()=>{X=!0,z(),b()},L=()=>{if(X=!1,!V&&Y)A()},c=()=>{if(z(),h!==null)cancelAnimationFrame(h),h=null;if(m.removeEventListener("click",s),m.removeEventListener("mouseenter",O),m.removeEventListener("mouseleave",L),i.removeEventListener("mousedown",J2),J.removeEventListener("mouseenter",w),J.removeEventListener("mouseleave",_),document.removeEventListener("mousemove",N),document.removeEventListener("mouseup",M),o){if(o.removeEventListener("mouseenter",O),o.removeEventListener("mouseleave",L),o.parentNode)o.parentNode.removeChild(o)}if(m.parentNode)m.parentNode.removeChild(m)};if(R(),m.addEventListener("click",s),m.addEventListener("mouseenter",O),m.addEventListener("mouseleave",L),i.addEventListener("mousedown",J2),J.addEventListener("mouseenter",w),J.addEventListener("mouseleave",_),o)o.addEventListener("mouseenter",O),o.addEventListener("mouseleave",L);return{show:b,hide:P,updateBounds:r,updatePosition:f,isVisible:()=>p,destroy:c}};var zJ=(J=0)=>{let Q=[,,,,,,,,];for(let $=0;$<8;$++)Q[$]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:Q,sampleIndex:0,sampleCount:0}},T2=(J,Q)=>{let $=performance.now(),j=$-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let Y=J.samples[0];return Y.position=Q,Y.time=$,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=Q,J.lastTime=$,J}let q=J.samples[J.sampleIndex];if(q.position=Q,q.time=$,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let Y=(J.sampleIndex-J.sampleCount+8)%8,K=J.samples[Y],U=Q-K.position,W=$-K.time;J.velocity=W>0?U/W:0}return J.lastPosition=Q,J.lastTime=$,J},mJ=(J)=>J.sampleCount>=3,wJ=(J,Q={})=>{let{wheel:$=!0,sensitivity:j=1,smoothing:q=!1,idleTimeout:Y=150,onScroll:K,onIdle:U,scrollElement:W,horizontal:G=!1}=Q,B=!!W,H=0,E=0,k=B?G?window.innerWidth:window.innerHeight:G?J.clientWidth:J.clientHeight,Z=Q.compressed??!1,V=Q.compression,X=zJ(),D=!1,F=null,y=R2(()=>{let _=G?J.scrollLeft:J.scrollTop,O=_>=H?"down":"up";if(X=T2(X,_),H=_,K)K({scrollTop:H,direction:O,velocity:X.velocity});u()}),h=R2(()=>{let _=J.getBoundingClientRect(),O=G?Math.max(0,-_.left):Math.max(0,-_.top),L=O>=H?"down":"up";if(X=T2(X,O),H=O,!D)D=!0;if(K)K({scrollTop:H,direction:L,velocity:X.velocity});u()}),l=(_)=>{_.preventDefault()},a=(_)=>{if(_.deltaX)return;_.preventDefault(),J.scrollLeft+=_.deltaY},n=(_)=>{if(!Z)return;_.preventDefault();let O=(G?_.deltaX||_.deltaY:_.deltaY)*j,L=H+O;if(q)L=H+O*0.3;if(L=Math.max(0,Math.min(L,E)),L!==H){let C=L>=H?"down":"up";if(X=T2(X,L),H=L,!D)D=!0;if(K)K({scrollTop:H,direction:C,velocity:X.velocity});u()}},u=()=>{if(F)clearTimeout(F);F=setTimeout(()=>{if(D=!1,X=zJ(H),U)U()},Y)},d=(_)=>{if(Z)return;if(Z=!0,V=_,E=_.virtualSize-k,B)return;if(y.cancel(),J.removeEventListener("scroll",y),!$)J.removeEventListener("wheel",l);else if(G)J.removeEventListener("wheel",a);if(G)J.style.overflowX="hidden";else J.style.overflow="hidden";if($)J.addEventListener("wheel",n,{passive:!1});let O=G?J.scrollLeft:J.scrollTop;if(O>0){let L=G?V?.actualSize??J.scrollWidth:V?.actualSize??J.scrollHeight;H=O/L*E}if(G)J.scrollLeft=0;else J.scrollTop=0},m=()=>{if(!Z)return;if(Z=!1,B){V=void 0;return}if(J.removeEventListener("wheel",n),G)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",y,{passive:!0}),!$)J.addEventListener("wheel",l,{passive:!1});else if(G)J.addEventListener("wheel",a,{passive:!1});if(V&&H>0){let O=H/E*(V.actualSize-k);if(G)J.scrollLeft=O;else J.scrollTop=O}V=void 0},i=()=>{if(B||Z)return H;return G?J.scrollLeft:J.scrollTop},o=(_,O=!1)=>{let L=Math.max(0,Math.min(_,E||1/0));if(B){let c=J.getBoundingClientRect();if(G){let C=c.left+window.scrollX;window.scrollTo({left:C+L,behavior:O?"smooth":"auto"})}else{let C=c.top+window.scrollY;window.scrollTo({top:C+L,behavior:O?"smooth":"auto"})}}else if(Z){if(L===H)return;let C=L>=H?"down":"up";if(X=T2(X,L),H=L,!D)D=!0;if(K)K({scrollTop:H,direction:C,velocity:X.velocity});u()}else if(G)J.scrollTo({left:L,behavior:O?"smooth":"auto"});else J.scrollTo({top:L,behavior:O?"smooth":"auto"})},R=(_)=>{o(i()+_)},z=()=>{return i()<=0},A=(_=0)=>{let O=i(),L=B||Z?E:G?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return O>=L-_},b=()=>{let _=i(),O=B||Z?E:G?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(O<=0)return 0;return Math.min(1,Math.max(0,_/O))},P=(_)=>{if(_.compression)V=_.compression,E=V.virtualSize-k},r=()=>Z,f=()=>Math.abs(X.velocity),s=()=>mJ(X),J2=()=>D,N=()=>B,M=(_)=>{if(k=_,V)E=V.virtualSize-k},w=()=>{if(F)clearTimeout(F);if(B)h.cancel(),window.removeEventListener("scroll",h);else y.cancel(),J.removeEventListener("scroll",y),J.removeEventListener("wheel",n),J.removeEventListener("wheel",l),J.removeEventListener("wheel",a)};if(B){if(Z&&V)E=V.virtualSize-k;window.addEventListener("scroll",h,{passive:!0})}else if(Z&&V){if(E=V.virtualSize-k,G)J.style.overflowX="hidden";else J.style.overflow="hidden";if($)J.addEventListener("wheel",n,{passive:!1})}else{if(G)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",y,{passive:!0}),!$)J.addEventListener("wheel",l,{passive:!1});else if(G)J.addEventListener("wheel",a,{passive:!1})}return{getScrollTop:i,scrollTo:o,scrollBy:R,isAtTop:z,isAtBottom:A,getScrollPercentage:b,getVelocity:f,isTracking:s,isScrolling:J2,updateConfig:P,enableCompression:d,disableCompression:m,isCompressed:r,isWindowMode:N,updateContainerHeight:M,destroy:w}},R2=(J)=>{let Q=null,$=null,j=(...q)=>{if($=q,Q===null)Q=requestAnimationFrame(()=>{if(Q=null,$)J(...$)})};return j.cancel=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null},j};var dJ=50,cJ=0.1;function rJ(J){let Q=0,$=0,j=0;function q(){return j>0?$/j:0}function Y(W){if(Q=W,W>cJ&&W<dJ)$+=W,j++}function K(){let W=J.getTotal();if(W===0)return 0;let G=J.getItemSize();if(G<=0)return 0;let B=J.getContainerSize();if(B<=0)return 0;let H=J.getScrollPosition(),E=typeof J.getColumns==="function"?J.getColumns():1,Z=Math.ceil(W/E)*G,X=Math.min(Z,B2)-B,D=Z-B,F=X>0?D/X:1,v=H*F,y=Math.ceil((v+B)/G);return Math.min(y*E,W)}function U(){let W=J.getTotal(),G=K();return{progress:W>0?Math.min(100,Math.max(0,G/W*100)):0,velocity:Q,velocityAvg:q(),itemCount:G,total:W}}return{getState:U,onVelocity:Y}}export{LJ as toggleSelection,a2 as simpleVisibleRange,C2 as selectItems,FJ as selectAll,QJ as rangesEqual,R2 as rafThrottle,BJ as needsScaling,b2 as mergeRanges,HJ as isSelected,_2 as isPlaceholderItem,$J as isInRange,W2 as isGroupHeader,RJ as getSelectedItems,TJ as getSelectedIds,G2 as getScaleState,ZJ as getScaleInfo,G2 as getScale,jJ as getRangeCount,NJ as getMaxItemsWithoutScaling,f2 as filterPlaceholders,YJ as diffRanges,S2 as deselectItems,OJ as createTableRenderer,VJ as createTableLayout,MJ as createTableHeader,m2 as createStickyHeader,rJ as createStats,F2 as createSparseStorage,V2 as createSizeCache,AJ as createSelectionState,kJ as createScrollbar,wJ as createScrollController,H2 as createPlaceholderManager,d2 as createMeasuredSizeCache,EJ as createMasonryRenderer,WJ as createMasonryLayout,g2 as createGroupedSizeFn,u2 as createGroupLayout,DJ as createGridRenderer,_J as createGridLayout,yJ as createEmitter,PJ as createAsyncManager,bJ as clearSelection,e2 as clampScrollPosition,n2 as calculateTotalSize,JJ as calculateScrollToIndex,qJ as calculateScaledVisibleRange,KJ as calculateScaledScrollToIndex,XJ as calculateScaledRenderRange,L2 as calculateScaledItemPosition,s2 as calculateRenderRange,M2 as calculateMissingRanges,t2 as calculateItemOffset,UJ as calculateIndexFromScrollPosition,i2 as calculateActualSize,h2 as buildLayoutItems,B2 as MAX_VIRTUAL_SIZE};
|
|
@@ -82,7 +82,7 @@ export declare const createElementPool: (tagName?: string, maxSize?: number) =>
|
|
|
82
82
|
export declare const createRenderer: <T extends VListItem = VListItem>(itemsContainer: HTMLElement, template: ItemTemplate<T>, sizeCache: SizeCache, classPrefix: string, totalItemsGetter?: () => number, ariaIdPrefix?: string, horizontal?: boolean, crossAxisSize?: number, compressionFns?: {
|
|
83
83
|
getState: CompressionStateFn;
|
|
84
84
|
getPosition: CompressedPositionFn;
|
|
85
|
-
}, striped?: boolean) => Renderer<T>;
|
|
85
|
+
}, striped?: boolean | "data" | "even" | "odd", stripeIndexFn?: () => (index: number) => number) => Renderer<T>;
|
|
86
86
|
/**
|
|
87
87
|
* Create the vlist DOM structure
|
|
88
88
|
*/
|
package/dist/types.d.ts
CHANGED
|
@@ -157,9 +157,36 @@ export interface ItemConfig<T extends VListItem = VListItem> {
|
|
|
157
157
|
* .vlist-item--odd { background: #fafafb; }
|
|
158
158
|
* ```
|
|
159
159
|
*
|
|
160
|
+
* - `true` — all items (including group headers) count for even/odd.
|
|
161
|
+
* - `"data"` — only data items count; group headers are excluded from
|
|
162
|
+
* the stripe index so they don't shift the alternating pattern.
|
|
163
|
+
* - `"even"` — counter resets after each group header; first data row
|
|
164
|
+
* in every group is even (non-striped). macOS Finder behavior.
|
|
165
|
+
* - `"odd"` — counter resets after each group header; first data row
|
|
166
|
+
* in every group is odd (striped).
|
|
167
|
+
*
|
|
160
168
|
* Default: `false` (no extra work on the render hot path).
|
|
161
169
|
*/
|
|
162
|
-
striped?: boolean;
|
|
170
|
+
striped?: boolean | "data" | "even" | "odd";
|
|
171
|
+
/**
|
|
172
|
+
* Gap between items in pixels along the main axis (default: 0).
|
|
173
|
+
*
|
|
174
|
+
* Adds consistent spacing between items without requiring CSS margin
|
|
175
|
+
* or padding hacks on `.vlist-item`. The gap is baked into the size
|
|
176
|
+
* cache (each slot = itemSize + gap) and subtracted from the DOM
|
|
177
|
+
* element height, so items are positioned with precise spacing.
|
|
178
|
+
*
|
|
179
|
+
* Works identically to the `gap` option in grid and masonry modes.
|
|
180
|
+
*
|
|
181
|
+
* ```ts
|
|
182
|
+
* item: {
|
|
183
|
+
* height: 60,
|
|
184
|
+
* gap: 10, // 10px between each item
|
|
185
|
+
* template: …,
|
|
186
|
+
* }
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
gap?: number;
|
|
163
190
|
/** Template function to render each item */
|
|
164
191
|
template: ItemTemplate<T>;
|
|
165
192
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/utils — Padding Resolution
|
|
3
|
+
* Shared helpers for resolving the CSS-shorthand padding config into
|
|
4
|
+
* concrete pixel values. Used by core (to apply CSS) and by features
|
|
5
|
+
* (to subtract cross-axis padding from container dimensions).
|
|
6
|
+
*/
|
|
7
|
+
import type { BuilderConfig } from "../builder/types";
|
|
8
|
+
/** Padding config — re-exported from BuilderConfig for convenience */
|
|
9
|
+
export type PaddingConfig = NonNullable<BuilderConfig["padding"]>;
|
|
10
|
+
/** Resolved padding — all four sides in pixels */
|
|
11
|
+
export interface ResolvedPadding {
|
|
12
|
+
readonly top: number;
|
|
13
|
+
readonly right: number;
|
|
14
|
+
readonly bottom: number;
|
|
15
|
+
readonly left: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a padding config into all four sides.
|
|
19
|
+
*
|
|
20
|
+
* - `undefined` → { 0, 0, 0, 0 }
|
|
21
|
+
* - `number` → equal on all sides
|
|
22
|
+
* - `[v, h]` → top/bottom = v, left/right = h
|
|
23
|
+
* - `[t, r, b, l]` → per-side (CSS order)
|
|
24
|
+
*
|
|
25
|
+
* Returns a frozen singleton for the zero case (no allocation).
|
|
26
|
+
*/
|
|
27
|
+
export declare const resolvePadding: (padding: PaddingConfig | undefined) => ResolvedPadding;
|
|
28
|
+
/**
|
|
29
|
+
* Total padding along the main axis (scroll direction).
|
|
30
|
+
* Vertical → top + bottom. Horizontal → left + right.
|
|
31
|
+
*/
|
|
32
|
+
export declare const mainAxisPaddingFrom: (p: ResolvedPadding, isHorizontal: boolean) => number;
|
|
33
|
+
/**
|
|
34
|
+
* Total padding along the cross axis (perpendicular to scroll).
|
|
35
|
+
* Vertical → left + right. Horizontal → top + bottom.
|
|
36
|
+
*/
|
|
37
|
+
export declare const crossAxisPaddingFrom: (p: ResolvedPadding, isHorizontal: boolean) => number;
|
|
38
|
+
//# sourceMappingURL=padding.d.ts.map
|
package/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:#dbeafe;--vlist-bg-selected-hover:#eff6ff;--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.3);--vlist-bg-selected-hover:rgba(59,130,246,0.2);--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;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}
|
|
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:#dbeafe;--vlist-bg-selected-hover:#eff6ff;--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.3);--vlist-bg-selected-hover:rgba(59,130,246,0.2);--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)}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]){--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.3);--vlist-bg-selected-hover:rgba(59,130,246,0.2);--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-group-header-bg:#1e2433}}.dark{--vlist-bg:#111827;--vlist-bg-hover:#1f2937;--vlist-bg-selected:rgba(59,130,246,0.3);--vlist-bg-selected-hover:rgba(59,130,246,0.2);--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-group-header-bg:#1e2433}.vlist{position:relative;width:100%;height:100%;overflow:hidden;background-color:var(--vlist-bg);color:var(--vlist-text);color-scheme:light;border:1px solid var(--vlist-border);border-radius:var(--vlist-border-radius);outline:none}[data-theme-mode="dark"] .vlist,.dark .vlist{color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme-mode="light"]) .vlist{color-scheme:dark}}.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;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}.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.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"description": "Lightweight, high-performance virtual list with zero dependencies",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Floor IO",
|
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
"import": "./dist/index.js",
|
|
35
35
|
"default": "./dist/index.js"
|
|
36
36
|
},
|
|
37
|
+
"./internals": {
|
|
38
|
+
"types": "./dist/internals.d.ts",
|
|
39
|
+
"import": "./dist/internals.js",
|
|
40
|
+
"default": "./dist/internals.js"
|
|
41
|
+
},
|
|
37
42
|
"./styles": "./dist/vlist.css",
|
|
38
43
|
"./styles/table": "./dist/vlist-table.css",
|
|
39
44
|
"./styles/extras": "./dist/vlist-extras.css",
|
|
@@ -41,6 +46,7 @@
|
|
|
41
46
|
},
|
|
42
47
|
"files": [
|
|
43
48
|
"dist/index.js",
|
|
49
|
+
"dist/internals.js",
|
|
44
50
|
"dist/**/*.d.ts",
|
|
45
51
|
"dist/**/*.css",
|
|
46
52
|
"!dist/**/*.d.ts.map"
|