@floor/vlist 1.2.0 → 1.2.1

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.
@@ -0,0 +1,67 @@
1
+ /**
2
+ * vlist/table - Builder Feature
3
+ * Switches from list layout to a data table with columns, resizable headers,
4
+ * sticky header row, and cell-based rendering.
5
+ *
6
+ * Priority: 10 (runs first — replaces the renderer before anything else renders)
7
+ *
8
+ * What it wires:
9
+ * - Replaces render functions — swaps the core render loop with table-aware rendering
10
+ * - Sticky header — creates a fixed header row above the viewport
11
+ * - Column layout — manages column widths, offsets, and resize logic
12
+ * - Resize interaction — drag handles on header column borders
13
+ * - Sort events — click on sortable header emits column:sort
14
+ * - Horizontal scroll sync — header scrolls in sync with the viewport
15
+ * - CSS class — adds .vlist--table to the root element
16
+ * - Variable row heights — supports fixed and function-based heights
17
+ *
18
+ * Critical design: This feature uses ctx.setRenderFns() to completely replace
19
+ * the core's render loop, NOT ctx.replaceRenderer() which is a no-op in the
20
+ * materialize context. This follows the same pattern as withGrid.
21
+ *
22
+ * Restrictions:
23
+ * - Cannot be combined with withGrid or withMasonry (conflicting layout modes)
24
+ * - Cannot be combined with orientation: 'horizontal' (tables are always vertical)
25
+ *
26
+ * Can be combined with:
27
+ * - withSelection (row selection works as-is)
28
+ * - withScrollbar (custom scrollbar)
29
+ * - withAsync (async data loading)
30
+ * - withSnapshots (scroll position save/restore)
31
+ * - withScale (large dataset compression)
32
+ */
33
+ import type { VListItem } from "../../types";
34
+ import type { VListFeature } from "../../builder/types";
35
+ import type { TableConfig } from "./types";
36
+ /** Table feature configuration — re-exported as TableFeatureConfig */
37
+ export type TableFeatureConfig<T extends VListItem = VListItem> = TableConfig<T>;
38
+ /**
39
+ * Create a table feature for the builder.
40
+ *
41
+ * Switches from list layout to a data table with column headers, resizable
42
+ * columns, and cell-based row rendering.
43
+ *
44
+ * ```ts
45
+ * import { vlist } from 'vlist/builder'
46
+ * import { withTable } from 'vlist/table'
47
+ *
48
+ * const table = vlist({
49
+ * container: '#my-table',
50
+ * item: { height: 40, template: () => '' },
51
+ * items: users,
52
+ * })
53
+ * .use(withTable({
54
+ * columns: [
55
+ * { key: 'name', label: 'Name', width: 200 },
56
+ * { key: 'email', label: 'Email', width: 300 },
57
+ * { key: 'role', label: 'Role', width: 120 },
58
+ * ],
59
+ * rowHeight: 40,
60
+ * headerHeight: 44,
61
+ * resizable: true,
62
+ * }))
63
+ * .build()
64
+ * ```
65
+ */
66
+ export declare const withTable: <T extends VListItem = VListItem>(config: TableFeatureConfig<T>) => VListFeature<T>;
67
+ //# sourceMappingURL=feature.d.ts.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * vlist/table - Header
3
+ * Manages the sticky header row that sits above the scrolling viewport.
4
+ *
5
+ * The header is a positioned DOM element inserted into the vlist root
6
+ * container (above the viewport, like the sticky group header). It contains
7
+ * one cell per column, each showing the column label. Resize handles are
8
+ * rendered at the right edge of each resizable column's header cell.
9
+ *
10
+ * Layout:
11
+ * .vlist (root, position: relative)
12
+ * ├── .vlist-table-header (position: absolute, top: 0, z-index: 5)
13
+ * │ ├── .vlist-table-header-cell [col 0]
14
+ * │ │ ├── .vlist-table-header-content (label)
15
+ * │ │ ├── .vlist-table-header-sort (sort indicator)
16
+ * │ │ └── .vlist-table-header-resize (drag handle)
17
+ * │ ├── .vlist-table-header-cell [col 1]
18
+ * │ │ └── ...
19
+ * │ └── ...
20
+ * └── .vlist-viewport (scrollable, top offset by headerHeight)
21
+ *
22
+ * Resize interaction:
23
+ * mousedown on handle → pointermove updates column width → pointerup commits
24
+ * During drag, a class is added to the root for cursor override.
25
+ *
26
+ * Sort interaction:
27
+ * click on a sortable header cell emits column:sort via the provided callback.
28
+ * The header renders a visual indicator (▲/▼) for the active sort column.
29
+ *
30
+ * Horizontal scroll sync:
31
+ * The header's scrollLeft is kept in sync with the viewport's scrollLeft
32
+ * via the `syncScroll` method, called from the feature's afterScroll hook.
33
+ */
34
+ import type { VListItem } from "../../types";
35
+ import type { TableHeader, ColumnSortEvent, ColumnClickEvent } from "./types";
36
+ /**
37
+ * Create a TableHeader instance.
38
+ *
39
+ * @param root - The vlist root element (.vlist)
40
+ * @param viewport - The vlist viewport element (for scroll sync)
41
+ * @param headerHeight - Height of the header row in pixels
42
+ * @param classPrefix - CSS class prefix (default: 'vlist')
43
+ * @param onResize - Callback when a column is resized (receives column index and new width)
44
+ * @param onSort - Callback when a sortable header is clicked
45
+ * @param onClick - Callback when any header cell is clicked
46
+ * @returns TableHeader instance
47
+ */
48
+ export declare const createTableHeader: <T extends VListItem = VListItem>(root: HTMLElement, viewport: HTMLElement, headerHeight: number, classPrefix: string, onResize: (columnIndex: number, newWidth: number) => void, onSort?: (event: ColumnSortEvent) => void, onClick?: (event: ColumnClickEvent) => void) => TableHeader<T>;
49
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * vlist - Table Domain
3
+ * Data table layout with columns, resizable headers, and cell rendering
4
+ */
5
+ export { withTable, type TableFeatureConfig } from "./feature";
6
+ export { createTableLayout } from "./layout";
7
+ export { createTableHeader } from "./header";
8
+ export { createTableRenderer, type TableRendererInstance } from "./renderer";
9
+ export type { TableConfig, TableColumn, TableLayout, TableHeader, TableRenderer, ResolvedColumn, ColumnResizeEvent, ColumnSortEvent, ColumnClickEvent, } from "./types";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * vlist/table - Layout
3
+ * Manages column widths, offsets, and resize operations.
4
+ *
5
+ * Column width resolution strategy:
6
+ * 1. Columns with explicit `width` get their requested width (clamped to min/max)
7
+ * 2. Remaining container space is distributed equally among columns without `width`
8
+ * 3. If all columns have explicit widths and total < container, no stretching occurs
9
+ * 4. If total column width > container, the table scrolls horizontally
10
+ *
11
+ * All offset calculations are O(n) where n = number of columns (typically small).
12
+ * Resize operations recalculate offsets for columns after the resized one.
13
+ */
14
+ import type { VListItem } from "../../types";
15
+ import type { TableColumn, TableLayout } from "./types";
16
+ /**
17
+ * Create a TableLayout instance.
18
+ *
19
+ * @param columnDefs - Column definitions from config
20
+ * @param globalMinWidth - Default min column width (from TableConfig.minColumnWidth)
21
+ * @param globalMaxWidth - Default max column width (from TableConfig.maxColumnWidth)
22
+ * @param globalResizable - Default resizable flag (from TableConfig.resizable)
23
+ * @returns TableLayout with column resolution and resize capabilities
24
+ */
25
+ export declare const createTableLayout: <T extends VListItem = VListItem>(columnDefs: TableColumn<T>[], globalMinWidth?: number, globalMaxWidth?: number, globalResizable?: boolean) => TableLayout<T>;
26
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1,67 @@
1
+ /**
2
+ * vlist/table - Renderer
3
+ * Renders virtualized rows with cell-based layout within the virtual scroll container.
4
+ *
5
+ * Each row is an absolutely positioned element (like the list renderer),
6
+ * containing child elements for each cell. Cells are sized and positioned
7
+ * according to the resolved column layout from TableLayout.
8
+ *
9
+ * Key design decisions:
10
+ * - Rows are the unit of virtualization (same as list mode — 1:1 with items)
11
+ * - Each row contains N cell elements (one per column)
12
+ * - Row positioning is translateY-based (from the size cache)
13
+ * - Cell positioning uses absolute left + width from the column layout
14
+ * - Element pooling avoids createElement cost (row-level pooling)
15
+ * - Change tracking skips template re-evaluation when data + state unchanged
16
+ * - Release grace period prevents boundary thrashing (hover blink, transition replay)
17
+ * - DocumentFragment batched insertion for new elements
18
+ *
19
+ * Performance:
20
+ * - O(1) Set-based visibility diffing (not O(n) .some())
21
+ * - Template re-evaluation skipped when item id + selection/focus state unchanged
22
+ * - Position update skipped when coordinates unchanged (position tracking)
23
+ * - Cell widths are only updated when column layout changes (not every scroll frame)
24
+ * - Released elements removed from DOM immediately, pooled for reuse
25
+ *
26
+ * DOM structure per row:
27
+ * .vlist-item.vlist-table-row (position: absolute, translateY)
28
+ * ├── .vlist-table-cell [col 0] (position: absolute, left, width)
29
+ * ├── .vlist-table-cell [col 1]
30
+ * └── ...
31
+ */
32
+ import type { VListItem, Range } from "../../types";
33
+ import type { SizeCache } from "../../rendering/sizes";
34
+ import type { TableLayout, TableColumn } from "./types";
35
+ /** Table renderer instance */
36
+ export interface TableRendererInstance<T extends VListItem = VListItem> {
37
+ /** Render rows for a range, with cell-based layout */
38
+ render: (items: T[], range: Range, selectedIds: Set<string | number>, focusedIndex: number) => void;
39
+ /** Update a single row (e.g., after selection change) */
40
+ updateItem: (index: number, item: T, isSelected: boolean, isFocused: boolean) => void;
41
+ /** Update only CSS classes on a rendered row */
42
+ updateItemClasses: (index: number, isSelected: boolean, isFocused: boolean) => void;
43
+ /** Get rendered row element by item index */
44
+ getElement: (index: number) => HTMLElement | undefined;
45
+ /** Update cell positions and widths after column resize */
46
+ updateColumnLayout: (layout: TableLayout<T>) => void;
47
+ /** Clear all rendered rows */
48
+ clear: () => void;
49
+ /** Destroy renderer and cleanup */
50
+ destroy: () => void;
51
+ }
52
+ /**
53
+ * Create a TableRenderer instance.
54
+ *
55
+ * @param container - The .vlist-items container element
56
+ * @param sizeCache - Size cache for row offset lookups
57
+ * @param layout - Table layout for column widths/offsets
58
+ * @param columns - Column definitions (for cell templates)
59
+ * @param classPrefix - CSS class prefix
60
+ * @param ariaIdPrefix - Prefix for ARIA IDs
61
+ * @param columnBorders - Whether to show vertical borders between cells
62
+ * @param rowBorders - Whether to show horizontal borders between rows
63
+ * @param getTotalItems - Function to get total item count (for ARIA)
64
+ * @returns TableRendererInstance
65
+ */
66
+ export declare const createTableRenderer: <T extends VListItem = VListItem>(container: HTMLElement, sizeCache: SizeCache, layout: TableLayout<T>, _columns: TableColumn<T>[], classPrefix: string, ariaIdPrefix: string, getTotalItems: () => number) => TableRendererInstance<T>;
67
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1,239 @@
1
+ /**
2
+ * vlist/table - Types
3
+ * Types for data table layout with columns, resizable headers, and cell rendering.
4
+ *
5
+ * A table transforms a flat list of items into rows of cells:
6
+ * - Each row corresponds to one item (1:1 mapping, unlike grid)
7
+ * - Each cell is positioned horizontally according to its column definition
8
+ * - A sticky header row displays column labels and resize handles
9
+ * - Columns can be resized by dragging header borders
10
+ * - Variable row heights are supported (Mode A and Mode B)
11
+ */
12
+ import type { VListItem } from "../../types";
13
+ /** Definition for a single table column */
14
+ export interface TableColumn<T extends VListItem = VListItem> {
15
+ /** Unique column key — used for identification and as default item property accessor */
16
+ key: string;
17
+ /** Header label — string or DOM element */
18
+ label: string | HTMLElement;
19
+ /**
20
+ * Initial column width in pixels.
21
+ * If omitted, remaining space is distributed equally among columns without a width.
22
+ */
23
+ width?: number;
24
+ /** Minimum column width in pixels (default: 50) */
25
+ minWidth?: number;
26
+ /** Maximum column width in pixels (default: Infinity) */
27
+ maxWidth?: number;
28
+ /**
29
+ * Whether this column can be resized (default: inherits from TableConfig.resizable).
30
+ * Set to `false` to lock a specific column's width.
31
+ */
32
+ resizable?: boolean;
33
+ /**
34
+ * Cell template — renders the cell content for this column.
35
+ *
36
+ * If omitted, the cell displays `String(item[column.key])` as text content.
37
+ *
38
+ * @param item - The row's data item
39
+ * @param column - This column definition (for context)
40
+ * @param rowIndex - The flat item index in the data array
41
+ * @returns HTML string or DOM element for the cell
42
+ */
43
+ cell?: (item: T, column: TableColumn<T>, rowIndex: number) => string | HTMLElement;
44
+ /**
45
+ * Header template — custom render for the header cell.
46
+ *
47
+ * If omitted, the header displays `column.label` (string or element).
48
+ *
49
+ * @param column - This column definition
50
+ * @returns HTML string or DOM element for the header cell
51
+ */
52
+ header?: (column: TableColumn<T>) => string | HTMLElement;
53
+ /** Text alignment within cells (default: 'left') */
54
+ align?: "left" | "center" | "right";
55
+ /**
56
+ * Whether clicking this column's header emits a sort event (default: false).
57
+ * The table feature does NOT sort data — it emits `column:sort` and the
58
+ * consumer is responsible for reordering items via `setItems()`.
59
+ */
60
+ sortable?: boolean;
61
+ /**
62
+ * Pin this column to the left or right edge.
63
+ * Pinned columns stay visible while the rest scroll horizontally.
64
+ * (Reserved for future use — not implemented in v1.)
65
+ */
66
+ pin?: "left" | "right";
67
+ }
68
+ /** Configuration for the withTable feature */
69
+ export interface TableConfig<T extends VListItem = VListItem> {
70
+ /** Column definitions (required, at least one column) */
71
+ columns: TableColumn<T>[];
72
+ /**
73
+ * Row height in pixels (required).
74
+ *
75
+ * - `number` — Fixed height for all rows (fast path)
76
+ * - `(index: number) => number` — Variable height per row
77
+ *
78
+ * For auto-measured variable heights, use `estimatedRowHeight` instead.
79
+ */
80
+ rowHeight: number | ((index: number) => number);
81
+ /**
82
+ * Estimated row height for auto-measurement (Mode B).
83
+ *
84
+ * When set, rows are rendered at this estimated height, then measured
85
+ * via ResizeObserver and corrected. Takes precedence only when
86
+ * `rowHeight` is a single number — if `rowHeight` is a function, this
87
+ * is ignored.
88
+ *
89
+ * Use for tables with wrapping text or dynamic cell content.
90
+ */
91
+ estimatedRowHeight?: number;
92
+ /** Header row height in pixels (default: same as rowHeight when fixed, or 40) */
93
+ headerHeight?: number;
94
+ /** Enable column resizing globally (default: true) */
95
+ resizable?: boolean;
96
+ /** Default minimum column width in pixels (default: 50) */
97
+ minColumnWidth?: number;
98
+ /** Default maximum column width in pixels (default: Infinity) */
99
+ maxColumnWidth?: number;
100
+ /** Show vertical borders between columns (default: false) */
101
+ columnBorders?: boolean;
102
+ /** Show horizontal borders between rows (default: true) */
103
+ rowBorders?: boolean;
104
+ /**
105
+ * Sort indicator for a column.
106
+ * The table renders an indicator in the header but does NOT sort data.
107
+ * Update this and call the exposed `updateColumns()` method to reflect changes.
108
+ */
109
+ sort?: {
110
+ /** Column key currently sorted by */
111
+ key: string;
112
+ /** Sort direction */
113
+ direction: "asc" | "desc";
114
+ };
115
+ }
116
+ /** Column with resolved pixel width (internal use) */
117
+ export interface ResolvedColumn<T extends VListItem = VListItem> {
118
+ /** Original column definition */
119
+ def: TableColumn<T>;
120
+ /** Index in the columns array */
121
+ index: number;
122
+ /** Resolved width in pixels */
123
+ width: number;
124
+ /** Resolved minimum width */
125
+ minWidth: number;
126
+ /** Resolved maximum width */
127
+ maxWidth: number;
128
+ /** Whether this column is resizable */
129
+ resizable: boolean;
130
+ /** Left offset in pixels (cumulative) */
131
+ offset: number;
132
+ }
133
+ /**
134
+ * TableLayout — manages column widths, offsets, and resize operations.
135
+ *
136
+ * Columns are laid out left-to-right. When the total column width exceeds
137
+ * the container width, the table scrolls horizontally. When columns fit
138
+ * within the container, remaining space is distributed.
139
+ */
140
+ export interface TableLayout<T extends VListItem = VListItem> {
141
+ /** Current resolved columns (with computed widths and offsets) */
142
+ readonly columns: readonly ResolvedColumn<T>[];
143
+ /** Total width of all columns in pixels */
144
+ readonly totalWidth: number;
145
+ /** Resolve column widths given available container width */
146
+ resolve: (containerWidth: number) => void;
147
+ /** Update column definitions (e.g., after reorder or config change) */
148
+ updateColumns: (columns: TableColumn<T>[]) => void;
149
+ /**
150
+ * Resize a column by index.
151
+ * Clamps to min/max width. Recalculates offsets for subsequent columns.
152
+ * Returns the actual new width after clamping.
153
+ */
154
+ resizeColumn: (columnIndex: number, newWidth: number) => number;
155
+ /** Get the resolved column at a given index */
156
+ getColumn: (index: number) => ResolvedColumn<T> | undefined;
157
+ /** Get the column whose horizontal range contains `x` pixels from left */
158
+ getColumnAtX: (x: number) => ResolvedColumn<T> | undefined;
159
+ /** Get the X offset for a column */
160
+ getColumnOffset: (columnIndex: number) => number;
161
+ /** Get the width for a column */
162
+ getColumnWidth: (columnIndex: number) => number;
163
+ }
164
+ /**
165
+ * TableHeader — manages the sticky header row above the viewport.
166
+ *
167
+ * The header is a positioned DOM element containing one cell per column.
168
+ * It stays fixed at the top while rows scroll beneath it. Resize handles
169
+ * are rendered at column borders for drag-to-resize interaction.
170
+ */
171
+ export interface TableHeader<T extends VListItem = VListItem> {
172
+ /** The header DOM element */
173
+ readonly element: HTMLElement;
174
+ /** Update header cell positions and widths (call after layout.resolve) */
175
+ update: (layout: TableLayout<T>) => void;
176
+ /** Update sort indicator display */
177
+ updateSort: (key: string | null, direction: "asc" | "desc") => void;
178
+ /** Rebuild header cells (call after column definitions change) */
179
+ rebuild: (layout: TableLayout<T>) => void;
180
+ /** Show the header */
181
+ show: () => void;
182
+ /** Hide the header */
183
+ hide: () => void;
184
+ /** Destroy and remove header DOM */
185
+ destroy: () => void;
186
+ }
187
+ /**
188
+ * TableRenderer — renders virtualized rows with cell-based layout.
189
+ *
190
+ * Each row is an absolutely positioned element (like the list renderer),
191
+ * containing child elements for each cell. Cells are sized and positioned
192
+ * according to the resolved column layout.
193
+ */
194
+ export interface TableRenderer<T extends VListItem = VListItem> {
195
+ /** Render rows for a range, with cell-based layout */
196
+ render: (items: T[], range: import("../../types").Range, selectedIds: Set<string | number>, focusedIndex: number) => void;
197
+ /** Update a single row (e.g., after selection change) */
198
+ updateItem: (index: number, item: T, isSelected: boolean, isFocused: boolean) => void;
199
+ /** Update only CSS classes on a rendered row */
200
+ updateItemClasses: (index: number, isSelected: boolean, isFocused: boolean) => void;
201
+ /** Get rendered row element by item index */
202
+ getElement: (index: number) => HTMLElement | undefined;
203
+ /** Update cell positions and widths after column resize */
204
+ updateColumnLayout: (layout: TableLayout<T>) => void;
205
+ /** Clear all rendered rows */
206
+ clear: () => void;
207
+ /** Destroy renderer and cleanup */
208
+ destroy: () => void;
209
+ }
210
+ /** Payload for column:resize event */
211
+ export interface ColumnResizeEvent {
212
+ /** Column key */
213
+ key: string;
214
+ /** Column index */
215
+ index: number;
216
+ /** Previous width in pixels */
217
+ previousWidth: number;
218
+ /** New width in pixels */
219
+ width: number;
220
+ }
221
+ /** Payload for column:sort event */
222
+ export interface ColumnSortEvent {
223
+ /** Column key */
224
+ key: string;
225
+ /** Column index */
226
+ index: number;
227
+ /** Current sort direction (toggles on each click: null → asc → desc → null) */
228
+ direction: "asc" | "desc" | null;
229
+ }
230
+ /** Payload for column:click event */
231
+ export interface ColumnClickEvent {
232
+ /** Column key */
233
+ key: string;
234
+ /** Column index */
235
+ index: number;
236
+ /** Original mouse event */
237
+ event: MouseEvent;
238
+ }
239
+ //# sourceMappingURL=types.d.ts.map
package/dist/index.d.ts CHANGED
@@ -15,10 +15,12 @@ export { withGrid } from "./features/grid";
15
15
  export { withMasonry } from "./features/masonry";
16
16
  export { withSelection } from "./features/selection";
17
17
  export { withSnapshots } from "./features/snapshots";
18
+ export { withTable } from "./features/table";
18
19
  export type { VListItem, VListEvents, ItemTemplate, ItemState, SelectionMode, SelectionConfig, SelectionState, ScrollbarConfig, ScrollbarOptions, ScrollConfig, ScrollToOptions, ScrollSnapshot, VListAdapter, AdapterParams, AdapterResponse, Range, ViewportState, EventHandler, Unsubscribe, GridSizeContext, GridHeightContext, } from "./types";
19
20
  export type { VListBuilder, VList, BuilderConfig, VListConfig, VListFeature, BuilderContext, } from "./builder";
20
21
  export { createGroupLayout, buildLayoutItems, createGroupedSizeFn, createStickyHeader, isGroupHeader, type GroupsConfig, type GroupBoundary, type LayoutEntry, type GroupHeaderItem, type GroupLayout, type StickyHeader, } from "./features/groups";
21
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";
22
24
  export { createMasonryLayout, createMasonryRenderer, type MasonryConfig, type MasonryLayout, type MasonryRenderer, type GetItemFn, type ItemPlacement, } from "./features/masonry";
23
25
  export { createSizeCache, type SizeCache, createMeasuredSizeCache, type MeasuredSizeCache, simpleVisibleRange, calculateRenderRange, calculateTotalSize, calculateActualSize, calculateItemOffset, calculateScrollToIndex, clampScrollPosition, rangesEqual, isInRange, getRangeCount, diffRanges, MAX_VIRTUAL_SIZE, MAX_VIRTUAL_HEIGHT, getCompressionState as getScaleState, getCompression as getScale, needsCompression as needsScaling, getMaxItemsWithoutCompression as getMaxItemsWithoutScaling, getCompressionInfo as getScaleInfo, calculateCompressedVisibleRange as calculateScaledVisibleRange, calculateCompressedRenderRange as calculateScaledRenderRange, calculateCompressedItemPosition as calculateScaledItemPosition, calculateCompressedScrollToIndex as calculateScaledScrollToIndex, calculateIndexFromScrollPosition, type CompressionState as ScaleState, } from "./rendering";
24
26
  export { createSelectionState, selectItems, deselectItems, toggleSelection, selectAll, clearSelection, isSelected, getSelectedIds, getSelectedItems, } from "./features/selection";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var{defineProperty:F2,getOwnPropertyNames:J1,getOwnPropertyDescriptor:Q1}=Object,j1=Object.prototype.hasOwnProperty;var u2=new WeakMap,q1=(J)=>{var q=u2.get(J),Q;if(q)return q;if(q=F2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")J1(J).map((j)=>!j1.call(q,j)&&F2(q,j,{get:()=>J[j],enumerable:!(Q=Q1(J,j))||Q.enumerable}));return u2.set(J,q),q};var X1=(J,q)=>{for(var Q in q)F2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var g2=(J,q)=>()=>(J&&(q=J(J=0)),q);var Y1=(J,q)=>{let Q=q;return{getOffset:(j)=>j*J,getSize:(j)=>J,indexAtOffset:(j)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(j/J),Q-1))},getTotalSize:()=>Q*J,getTotal:()=>Q,rebuild:(j)=>{Q=j},isVariable:()=>!1}},K1=(J,q)=>{let Q=q,j=new Float64Array(0),K=(B)=>{Q=B,j=new Float64Array(B+1),j[0]=0;for(let N=0;N<B;N++)j[N+1]=j[N]+J(N)};K(q);let X=(B)=>{if(Q===0)return 0;if(B<=0)return 0;if(B>=j[Q])return Q-1;let N=0,_=Q-1;while(N<_){let Y=N+_+1>>>1;if(j[Y]<=B)N=Y;else _=Y-1}return N};return{getOffset:(B)=>{if(B<=0)return 0;if(B>=Q)return j[Q];return j[B]},getSize:(B)=>J(B),indexAtOffset:(B)=>X(B),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(B)=>K(B),isVariable:()=>!0}},H0=(J,q)=>{if(typeof J==="number")return Y1(J,q);return K1(J,q)},g0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let K=0,X=0,B=q;while(B<j&&X<Q)X+=J.getSize(B),K++,B++;return Math.max(1,K)},i0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,K=0;for(let X=Q-1;X>=0;X--){let B=J.getSize(X);if(K+B>q)break;K+=B,j++}return Math.max(j,1)},T2=(J,q,Q)=>{if(Q===0)return 0;let j=Math.floor(q),K=q-j,X=Math.max(0,Math.min(j,Q-1));return J.getOffset(X)+K*J.getSize(X)};var H2=200,S0=50,QJ=5,jJ=2,qJ=50,$0=16000000,XJ="x",YJ=20,$2="_isPlaceholder",KJ="__placeholder_";var UJ,F0=(J,q)=>{let Q=q.getTotalSize(),j=Q>$0,K=j?$0:Q,X=Q>0?K/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:K,ratio:X}},J2=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!K.isCompressed){let G=Q.indexAtOffset(J),A=Q.indexAtOffset(J+q);if(A<j-1)A++;return X.start=Math.max(0,G),X.end=Math.min(j-1,Math.max(0,A)),X}let{virtualSize:B}=K,_=J/B*j,Y=Math.floor(_),D=g0(Q,Math.max(0,Y),q,j),b=Math.ceil(_)+D,y=B-q-J;if(y<=q&&y>=-1){let G=i0(Q,q,j),A=Math.max(0,j-G),W=Math.max(0,Math.min(1,1-y/q));Y=Math.floor(Y+(A-Y)*W),b=y<=1?j-1:Math.min(j-1,Y+D)}return X.start=Math.max(0,Y),X.end=Math.min(j-1,Math.max(0,b)),X},BJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},f0=(J,q,Q,j,K,X,B)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,_=N-K,Y=_-q;if(Y<=K&&Y>=-1){if(q>=_-1){let M=Q.getTotalSize()-Q.getOffset(J);return K-M}let y=i0(Q,K,j),G=Math.max(0,j-y),W=q/N*j,H=Math.max(0,Math.min(1,1-Y/K)),E=Q.getOffset(J)-Q.getOffset(G),L=Q.getOffset(J)-T2(Q,W,j);return L+(E-L)*H}let D=q/N,b=Q.getTotalSize(),O=D*b;return Q.getOffset(J)-O},Q2=(J,q,Q,j,K,X="start")=>{if(j===0)return 0;let B;if(K.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,K.virtualSize-Q);B=J/j*K.virtualSize}else B=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":B-=(Q-N)/2;break;case"end":B-=Q-N;break}let _=K.virtualSize-Q;return Math.max(0,Math.min(B,_))},ZJ=(J,q,Q,j)=>{if(Q===0)return 0;if(j.isCompressed){let K=J/j.virtualSize;return Math.floor(K*Q)}return q.indexAtOffset(J)},NJ=(J,q)=>{if(typeof q==="number")return J*q>$0;return q.getTotalSize()>$0},WJ=(J)=>{if(J<=0)return 0;return Math.floor($0/J)},DJ=(J,q)=>{let Q=F0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var j2=g2(()=>{UJ=$0});var z0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var vJ={};X1(vJ,{createGridRenderer:()=>c0});var L1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},F1=2,c0=(J,q,Q,j,K,X,B,N,_=!1)=>{let Y=L1(),D=new Map,b=X,O=!1,y=null,G=0,A=0,W="",H=-1,E=(z)=>{if(y&&G===z)return y;return y=F0(z,Q),G=z,y},L={selected:!1,focused:!1},M=(z,h)=>{return L.selected=z,L.focused=h,L},Z=`${K}-item ${K}-grid-item`,$=`${K}-item--selected`,C=`${K}-item--focused`,P=(z,h)=>{if(typeof h==="string")z.innerHTML=h;else z.replaceChildren(h)},V=(z,h,c)=>{z.classList.toggle($,h),z.classList.toggle(C,c)},S=(z,h)=>{let c=j.getRow(z);if(h){let a=h.totalItems,f=E(a);if(f.isCompressed)return f0(c,h.scrollPosition,Q,a,h.containerSize,f,h.rangeStart)}return Q.getOffset(c)},o=(z,h)=>{let c=O&&j.getCol(z)===0,a=c?0:j.getCol(z),f=c?0:j.getColumnOffset(a,b),x;if(O){let n=j.getRow(z),t=0,J0=new Set;for(let K0=0;K0<z;K0++){let B0=j.getRow(K0);if(B0<n&&!J0.has(B0)){let g=Q.getSize(K0);t+=g,J0.add(B0)}}x=t}else x=S(z,h);if(_)return`translate(${Math.round(x)}px, ${Math.round(f)}px)`;return`translate(${Math.round(f)}px, ${Math.round(x)}px)`},p=(z,h)=>{z.style.transform=h},d=(z,h)=>{let c=z.dataset.id?.startsWith("__group_header"),a=c?b:j.getColumnWidth(b),f;if(O||c)f=Q.getSize(h)-j.gap;else{let x=j.getRow(h);f=Q.getSize(x)-j.gap}if(_)z.style.width=`${f}px`,z.style.height=`${a}px`;else z.style.width=`${a}px`,z.style.height=`${f}px`},v=(z,h,c,a,f)=>{let x=Y.acquire(),n=M(c,a);if(x.className=Z,x.dataset.index=String(z),x.dataset.id=String(h.id),x.dataset.row=String(j.getRow(z)),x.dataset.col=String(j.getCol(z)),x.ariaSelected=String(c),N)x.id=`${N}-item-${z}`;if(B){let J0=B();if(J0!==H)H=J0,W=String(J0);x.setAttribute("aria-setsize",W),x.setAttribute("aria-posinset",String(z+1))}d(x,z);let t=q(h,z,n);return P(x,t),V(x,c,a),p(x,f),{element:x,lastItemId:h.id,lastSelected:c,lastFocused:a,lastTransform:f,lastSeenFrame:A}},U=(z,h,c,a,f)=>{if(A++,h.start===0&&z.length>0)O=z0(z[0]);for(let[t,J0]of D)if(t>=h.start&&t<=h.end)J0.lastSeenFrame=A;else if(A-J0.lastSeenFrame>F1)Y.release(J0.element),D.delete(t);let x=!1;if(B){let t=B();if(t!==H)H=t,W=String(t),x=!0}let n=null;for(let t=h.start;t<=h.end;t++){let J0=t-h.start,K0=z[J0];if(!K0){console.warn(`⚠️ RENDER: Missing item at index ${t} (range: ${h.start}-${h.end}, items.length: ${z.length})`);continue}let B0=c.has(K0.id),g=t===a,m=D.get(t);if(m){let Q0=m.lastItemId!==K0.id,Y0=m.lastSelected!==B0,e=m.lastFocused!==g;if(Q0||Y0||e){if(Q0){let G0=M(B0,g),L0=q(K0,t,G0);P(m.element,L0),m.element.dataset.id=String(K0.id),m.element.dataset.row=String(j.getRow(t)),m.element.dataset.col=String(j.getCol(t)),d(m.element,t)}V(m.element,B0,g),m.element.ariaSelected=String(B0),m.lastItemId=K0.id,m.lastSelected=B0,m.lastFocused=g}let Z0=o(t,f);if(m.lastTransform!==Z0)p(m.element,Z0),m.lastTransform=Z0;if(x)m.element.setAttribute("aria-setsize",W)}else{let Q0=o(t,f),Y0=v(t,K0,B0,g,Q0);if(!n)n=document.createDocumentFragment();n.appendChild(Y0.element),D.set(t,Y0)}}if(n)J.appendChild(n)},w=(z)=>{for(let[h,c]of D){let a=o(h,z);if(c.lastTransform!==a)p(c.element,a),c.lastTransform=a}},I=(z,h,c,a)=>{let f=D.get(z);if(!f)return;let x=f.lastItemId!==h.id,n=f.lastSelected!==c,t=f.lastFocused!==a;if(x||n||t){let J0=M(c,a),K0=q(h,z,J0);P(f.element,K0),V(f.element,c,a),f.element.dataset.id=String(h.id),f.element.ariaSelected=String(c),d(f.element,z),f.lastItemId=h.id,f.lastSelected=c,f.lastFocused=a}},T=(z,h,c)=>{let a=D.get(z);if(!a)return;let f=a.lastSelected!==h,x=a.lastFocused!==c;if(f||x)V(a.element,h,c),a.lastSelected=h,a.lastFocused=c},R=(z)=>{return D.get(z)?.element},k=(z)=>{if(Math.abs(z-b)<1)return;b=z;for(let[h,c]of D){d(c.element,h);let a=o(h);p(c.element,a),c.lastTransform=a}},l=()=>{for(let[,z]of D)Y.release(z.element);D.clear()};return{render:U,updatePositions:w,updateItem:I,updateItemClasses:T,getElement:R,updateContainerWidth:k,clear:l,destroy:()=>{l(),Y.clear()}}};var W2=g2(()=>{j2()});var x2=2,m2=(J=0)=>{let q=[,,,,,];for(let Q=0;Q<5;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},b2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,B=J.samples[X],N=q-B.position,_=Q-B.time;J.velocity=_>0?Math.abs(N)/_:0}return J.lastPosition=q,J.lastTime=Q,J};var t0=(J,q)=>{let Q=new Map,j=(X)=>{let B=Q.get(X);return B!==void 0?B:J},K=H0(j,q);return{getOffset(X){return K.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return K.indexAtOffset(X)},getTotalSize(){return K.getTotalSize()},getTotal(){return K.getTotal()},rebuild(X){if(X<K.getTotal()){for(let B of Q.keys())if(B>=X)Q.delete(B)}K=H0(j,X)},isVariable(){return!0},setMeasuredSize(X,B){Q.set(X,B)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var e0=()=>{let J={},q=(N,_)=>{if(!J[N])J[N]=new Set;return J[N].add(_),()=>Q(N,_)},Q=(N,_)=>{J[N]?.delete(_)};return{on:q,off:Q,emit:(N,_)=>{J[N]?.forEach((Y)=>{try{Y(_)}catch(D){console.error(`[vlist] Error in event handler for "${String(N)}":`,D)}})},once:(N,_)=>{let Y=(D)=>{Q(N,Y),_(D)};return q(N,Y)},clear:(N)=>{if(N)delete J[N];else for(let _ in J)delete J[_]},listenerCount:(N)=>{return J[N]?.size??0}}};var d2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},c2=(J,q,Q,j)=>{let K=document.createElement("div");if(K.className=q,j)K.classList.add(`${q}--horizontal`);if(K.setAttribute("role","listbox"),K.setAttribute("tabindex","0"),Q)K.setAttribute("aria-label",Q);if(j)K.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${q}-viewport`,X.setAttribute("tabindex","-1"),j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let B=document.createElement("div");if(B.className=`${q}-content`,B.style.position="relative",j)B.style.height="100%";else B.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return B.appendChild(N),X.appendChild(B),K.appendChild(X),J.appendChild(K),{root:K,viewport:X,content:B,items:N}};var l2=(J=100)=>{let q=[];return{acquire:()=>{let Q=q.pop();if(Q)return Q;let j=document.createElement("div");return j.setAttribute("role","option"),j},release:(Q)=>{if(q.length<J)Q.className="",Q.textContent="",Q.removeAttribute("style"),Q.removeAttribute("data-index"),Q.removeAttribute("data-id"),q.push(Q)},clear:()=>{q.length=0}}};var r2=(J,q,Q,j,K)=>{if(j===0||q===0){K.start=0,K.end=0;return}let X=Q.indexAtOffset(J),B=g0(Q,X,q,j),N=X+B;K.start=Math.max(0,X),K.end=Math.min(j-1,Math.max(0,N))},a2=(J,q,Q,j)=>{if(Q===0){j.start=0,j.end=0;return}j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q)},s2=(J,q,Q,j,K)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),B=q.getOffset(X),N=q.getSize(X),_=Math.max(0,q.getTotalSize()-Q),Y;switch(K){case"center":Y=B-(Q-N)/2;break;case"end":Y=B-Q+N;break;default:Y=B}return Math.max(0,Math.min(Y,_))};var y2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,w0=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},n2=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,B,N)=>{if(j(),Math.abs(B-X)<1){J.scrollTo(B);return}let _=performance.now(),Y=(D)=>{let b=D-_,O=Math.min(b/N,1),y=X+(B-X)*y2(O);if(J.scrollTo(y),q(),O<1)Q=requestAnimationFrame(Y);else Q=null};Q=requestAnimationFrame(Y)},cancelScroll:j}};var o2=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:K,rawConfig:X,rendered:B,pool:N,sharedState:_,isHorizontal:Y,classPrefix:D,contentSizeHandlers:b,afterScroll:O,clickHandlers:y,keydownHandlers:G,resizeHandlers:A,destroyHandlers:W,methods:H,onScrollFrame:E,resizeObserver:L,renderRange:M}=q;return{get dom(){return Q},get sizeCache(){return J.hc},get emitter(){return j},get config(){return K},get rawConfig(){return X},get renderer(){return{render:(Z,$,C,P,V)=>{J.ss=C,J.fi=P,J.ffn()},updateItemClasses:(Z,$,C)=>{let P=B.get(Z);if(!P)return;P.classList.toggle(`${D}-item--selected`,$),P.classList.toggle(`${D}-item--focused`,C),P.ariaSelected=$?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(Z)=>B.get(Z)??null,clear:()=>{},destroy:()=>{}}},set renderer(Z){},get dataManager(){return J.dm},set dataManager(Z){J.dm=Z},get scrollController(){return J.sc},set scrollController(Z){J.sc=Z},state:_,getContainerWidth(){return J.cw},afterScroll:O,clickHandlers:y,keydownHandlers:G,resizeHandlers:A,contentSizeHandlers:b,destroyHandlers:W,methods:H,replaceTemplate(Z){J.at=Z},replaceRenderer(Z){},replaceDataManager(Z){J.dm=Z},replaceScrollController(Z){J.sc=Z},getItemsForRange(Z){let{dm:$,it:C}=J,P=[];for(let V=Z.start;V<=Z.end;V++){let S=$?$.getItem(V):C[V];if(S)P.push(S)}return P},getAllLoadedItems(){let Z=J.dm;if(Z){let $=Z.getTotal(),C=[];for(let P=0;P<$;P++){let V=Z.getItem(P);if(V)C.push(V)}return C}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let Z=J.hc;return{isCompressed:!1,actualSize:Z.getTotalSize(),virtualSize:Z.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:M.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,Z]of B)Z.remove(),N.release(Z);B.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(Z,$){J.rfn=Z,J.ffn=$},setVirtualTotalFn(Z){J.vtf=Z},rebuildSizeCache(Z){J.hc.rebuild(Z??J.vtf())},setSizeConfig(Z){J.hc=H0(Z,J.vtf())},updateContentSize(Z){let $=`${Z}px`;if(Y)Q.content.style.width=$;else Q.content.style.height=$},updateCompressionMode(){},setVisibleRangeFn(Z){J.gvr=Z},setScrollToPosFn(Z){J.gsp=Z},setPositionElementFn(Z){J.pef=Z},setScrollFns(Z,$){J.sgt=Z,J.sst=(C)=>{$(C),E()}},setScrollTarget(Z){J.st.removeEventListener("scroll",E),J.st=Z,J.st.addEventListener("scroll",E,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(Z){J.gcw=Z.width,J.gch=Z.height,J.cw=Z.width(),J.ch=Z.height(),_.viewportState.containerSize=Y?J.cw:J.ch},disableViewportResize(){if(J.vre)J.vre=!1,L.unobserve(Q.viewport)},disableWheelHandler(){if(J.wh)Q.viewport.removeEventListener("wheel",J.wh),J.wh=null}}},i2=(J,q,Q)=>{let{rendered:j,itemState:K,contentSizeHandlers:X,applyTemplate:B,updateContentSize:N}=q,_=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let Y=0;Y<X.length;Y++)X[Y]();J.ffn()};return{getState:()=>({total:J.it.length,cached:J.it.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>J.it.length,getCached:()=>J.it.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(Y)=>J.it[Y],isItemLoaded:(Y)=>Y>=0&&Y<J.it.length&&J.it[Y]!==void 0,getItemsInRange:(Y,D)=>{let b=J.it,O=[],y=Math.max(0,Y),G=Math.min(D,b.length-1);for(let A=y;A<=G;A++)O.push(b[A]);return O},setTotal:(Y)=>{},setItems:(Y,D=0,b)=>{let O=J.it;if(D===0&&(b!==void 0||O.length===0))J.it=Y;else{let y=D+Y.length;if(O.length<y)O.length=y;for(let G=0;G<Y.length;G++)O[D+G]=Y[G]}if(J.ii)_()},updateItem:(Y,D)=>{let b=J.it;if(Y<0||Y>=b.length)return!1;let O=b[Y];if(!O)return!1;b[Y]={...O,...D};let y=j.get(Y);if(y)B(y,J.at(b[Y],Y,K)),y.dataset.id=String(b[Y].id);return!0},removeItem:(Y)=>{if(Y<0||Y>=J.it.length)return!1;if(J.it.splice(Y,1),J.ii)_();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},t2=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(K)=>{J.sst(K),J.ls=K,J.rfn()},scrollBy:(K)=>{let X=J.sgt()+K;J.sst(X),J.ls=X,J.rfn()},isAtTop:()=>J.ls<=2,isAtBottom:(K=2)=>J.sab(K),getScrollPercentage:()=>{let K=J.hc.getTotalSize(),X=Math.max(0,K-J.ch);return X>0?J.ls/X:0},getVelocity:()=>J.vt.velocity,isTracking:()=>J.vt.sampleCount>=2,isScrolling:()=>Q.root.classList.contains(`${j}--scrolling`),updateConfig:()=>{},enableCompression:()=>{J.sic=!0},disableCompression:()=>{J.sic=!1},isCompressed:()=>J.sic,isWindowMode:()=>!1,updateContainerHeight:(K)=>{J.ch=K},destroy:()=>{}}};var U1=3,B1="vlist",e2=150,Z1=0,JJ=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",K=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(K==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(K!=null){if(typeof K==="number"&&K<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof K!=="number"&&typeof K!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let B=new Map,N=!1,_={use(Y){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return B.set(Y.name,Y),_},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,N1(J,B,q,K,X??null)}};return _};function N1(J,q,Q,j,K){let{item:X,items:B,overscan:N=U1,classPrefix:_=B1,ariaLabel:Y,reverse:D=!1,scroll:b}=J,O=b,y=O?.wheel??!0,G=O?.wrap??!1,A=D,W=`${_}-${Z1++}`,H=j??K,E=j==null&&K!=null,L=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,M=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,Z={overscan:N,classPrefix:_,reverse:A,wrap:G,horizontal:Q,ariaIdPrefix:W},$=Array.from(q.values()).sort((F,u)=>(F.priority??50)-(u.priority??50)),C=new Set($.map((F)=>F.name));for(let F of $)if(F.conflicts){for(let u of F.conflicts)if(C.has(u))throw Error(`[vlist/builder] ${F.name} and ${u} cannot be combined`)}if(A){if(C.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let P=d2(J.container),V=c2(P,_,Y,Q);if(O?.wheel===!1)if(Q)V.viewport.style.overflowX="hidden";else V.viewport.style.overflow="hidden";if(O?.scrollbar==="none")V.viewport.classList.add(`${_}-viewport--no-scrollbar`);let S=e0(),o=B||[],p=typeof H==="function"&&(q.has("withGrid")||q.has("withMasonry")),d=E?t0(K,o.length):H0(H,p?0:o.length),v=l2(),U={it:o,hc:d,ch:V.viewport.clientHeight,cw:V.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:m2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>V.viewport.scrollLeft:()=>V.viewport.scrollTop,sst:Q?(F)=>{V.viewport.scrollLeft=F}:(F)=>{V.viewport.scrollTop=F},sab:(F=2)=>{let u=U.hc.getTotalSize();return U.ls+U.ch>=u-F},sic:!1,rfn:null,ffn:null,gvr:(F,u,r,s,j0)=>{r2(F,u,r,s,j0)},gsp:(F,u,r,s,j0)=>{return s2(F,u,r,s,j0)},pef:null,at:X.template,vre:!0,st:V.viewport,wh:null,gcw:()=>U.cw,gch:()=>U.ch};U.vtf=()=>U.dm?U.dm.getTotal():U.it.length;let w=null,I=null,T=!1,R={start:0,end:0},k={start:0,end:0},l={start:-1,end:-1},i={viewportState:{scrollPosition:0,containerSize:Q?U.cw:U.ch,totalSize:U.hc.getTotalSize(),actualSize:U.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},z=new Map,h=E?new WeakMap:null,c=E?d:null,a=null,f=0,x=!1,n=()=>{if(!E)return;if(x){let F=U.sgt(),u=Q?V.viewport.scrollWidth-V.viewport.clientWidth:V.viewport.scrollHeight-V.viewport.clientHeight,r=u>0&&F>=u-2;if(M0(),x=!1,r){let s=Math.max(0,U.hc.getTotalSize()-(Q?U.cw:U.ch));if(s>F)U.sst(s),U.ls=s,U.rfn()}}};if(E&&c&&h)a=new ResizeObserver((F)=>{if(U.id)return;let u=!1,r=R.start;for(let s of F){let j0=h.get(s.target);if(j0===void 0)continue;let q0=Q?s.borderBoxSize[0].inlineSize:s.borderBoxSize[0].blockSize;if(!c.isMeasured(j0)){let X0=c.getSize(j0);if(c.setMeasuredSize(j0,q0),u=!0,j0<r&&q0!==X0)f+=q0-X0;a.unobserve(s.target);let N0=s.target;if(Q)N0.style.width=`${q0}px`;else N0.style.height=`${q0}px`}}if(!u)return;if(c.rebuild(U.vtf()),U.hc=c,f!==0){let s=U.sgt();U.sst(s+f),U.ls=s+f,f=0}if(T)x=!0;else{let s=U.sgt(),j0=Q?V.viewport.scrollWidth-V.viewport.clientWidth:V.viewport.scrollHeight-V.viewport.clientHeight,q0=j0>0&&s>=j0-2;if(M0(),x=!1,q0){let X0=Math.max(0,U.hc.getTotalSize()-(Q?U.cw:U.ch));if(X0>s)U.sst(X0),U.ls=X0}}l.start=-1,l.end=-1,U.rfn()});let t={selected:!1,focused:!1},J0=`${_}-item`,K0=[],B0=[],g=[],m=[],Q0=[],Y0=[],e=new Map,Z0=null,G0=null,L0=!1,W0=()=>{if(L0)return;L0=!0,Z0=e.get("_getSelectedIds")??null,G0=e.get("_getFocusedIndex")??null},b0=(F,u)=>{if(typeof u==="string")F.innerHTML=u;else F.replaceChildren(u)},P0=(F,u)=>{let r=Math.round(U.hc.getOffset(u));if(Q)F.style.transform=`translateX(${r}px)`;else F.style.transform=`translateY(${r}px)`};U.pef=P0;let D0=(F,u)=>{let r=v.acquire();r.className=J0;let s=!E||c&&c.isMeasured(F);if(Q){if(s)r.style.width=`${U.hc.getSize(F)}px`;else r.style.width="";if(M!=null)r.style.height=`${M}px`}else if(s)r.style.height=`${U.hc.getSize(F)}px`;else r.style.height="";if(r.dataset.index=String(F),r.dataset.id=String(u.id),r.ariaSelected="false",r.id=`${W}-item-${F}`,U.la=String(U.vtf()),r.setAttribute("aria-setsize",U.la),r.setAttribute("aria-posinset",String(F+1)),String(u.id).startsWith("__placeholder_"))r.classList.add(`${_}-item--placeholder`);return b0(r,U.at(u,F,t)),U.pef(r,F),r},M0=()=>{let F=`${U.hc.getTotalSize()}px`;if(Q)V.content.style.width=F;else V.content.style.height=F},_0=()=>{if(U.id)return;W0();let F=Z0?Z0():U.ss,u=G0?G0():U.fi,r=U.vtf(),s=Q?U.cw:U.ch;if(U.gvr(U.ls,s,U.hc,r,R),a2(R,N,r,k),k.start===l.start&&k.end===l.end){if(U.sic)for(let[U0,V0]of z)U.pef(V0,U0);return}let j0=String(r),q0=j0!==U.la;U.la=j0;for(let[U0,V0]of z)if(U0<k.start||U0>k.end)V0.remove(),v.release(V0),z.delete(U0);let X0=document.createDocumentFragment(),N0=[],E0=[];for(let U0=k.start;U0<=k.end;U0++){let V0=U.dm?U.dm.getItem(U0):U.it[U0];if(!V0)continue;let A0=z.get(U0);if(A0){let y0=A0.dataset.id,h0=String(V0.id);if(y0!==h0){let eJ=y0?.startsWith("__placeholder_"),p2=h0.startsWith("__placeholder_");b0(A0,U.at(V0,U0,t)),A0.dataset.id=h0;let h2=!E||c&&c.isMeasured(U0);if(Q)A0.style.width=h2?`${U.hc.getSize(U0)}px`:"";else A0.style.height=h2?`${U.hc.getSize(U0)}px`:"";if(p2)A0.classList.add(`${_}-item--placeholder`);else A0.classList.remove(`${_}-item--placeholder`);if(eJ&&!p2)A0.classList.add(`${_}-item--replaced`),setTimeout(()=>{A0.classList.remove(`${_}-item--replaced`)},300)}U.pef(A0,U0);let o0=F.has(V0.id),tJ=U0===u;if(A0.classList.toggle(`${_}-item--selected`,o0),A0.classList.toggle(`${_}-item--focused`,tJ),A0.ariaSelected=o0?"true":"false",q0)A0.setAttribute("aria-setsize",U.la)}else{let y0=D0(U0,V0);E0.push({index:U0,element:y0});let h0=F.has(V0.id),o0=U0===u;if(h0)y0.classList.add(`${_}-item--selected`),y0.ariaSelected="true";if(o0)y0.classList.add(`${_}-item--focused`);X0.appendChild(y0),N0.push({index:U0,element:y0})}}if(N0.length>0){V.items.appendChild(X0);for(let{index:U0,element:V0}of N0)z.set(U0,V0)}if(E&&a&&c&&h){for(let{index:U0,element:V0}of E0)if(!c.isMeasured(U0))h.set(V0,U0),a.observe(V0)}l.start=k.start,l.end=k.end,i.lastRenderRange.start=k.start,i.lastRenderRange.end=k.end,i.viewportState.scrollPosition=U.ls,i.viewportState.visibleRange.start=R.start,i.viewportState.visibleRange.end=R.end,i.viewportState.renderRange.start=k.start,i.viewportState.renderRange.end=k.end,S.emit("range:change",{range:{start:k.start,end:k.end}})},T0=()=>{l.start=-1,l.end=-1,U.rfn()};U.rfn=_0,U.ffn=T0;let R0=()=>{if(U.id)return;let F=U.sgt(),u=F>=U.ls?"down":"up";if(U.vt=b2(U.vt,F),!V.root.classList.contains(`${_}--scrolling`))V.root.classList.add(`${_}--scrolling`);T=!0,U.ls=F,U.rfn(),S.emit("scroll",{scrollPosition:F,direction:u}),S.emit("velocity:change",{velocity:U.vt.velocity,reliable:U.vt.sampleCount>=x2});for(let r=0;r<K0.length;r++)K0[r](F,u);if(I)clearTimeout(I);I=setTimeout(()=>{V.root.classList.remove(`${_}--scrolling`),T=!1,U.vt.velocity=0,U.vt.sampleCount=0,S.emit("velocity:change",{velocity:0,reliable:!1}),n()},O?.idleTimeout??e2)},v0=null;if(U.st.addEventListener("scroll",R0,{passive:!0}),y&&!Q&&!L)v0=(F)=>{F.preventDefault();let u=U.sgt(),r=F.deltaY,s=Math.max(0,Math.min(u+r,U.hc.getTotalSize()-U.ch));U.sst(s),U.ls=s,U.vt=b2(U.vt,s),U.rfn();let j0=s>=u?"down":"up";if(S.emit("scroll",{scrollPosition:s,direction:j0}),!V.root.classList.contains(`${_}--scrolling`))V.root.classList.add(`${_}--scrolling`);if(T=!0,I)clearTimeout(I);I=setTimeout(()=>{V.root.classList.remove(`${_}--scrolling`),T=!1,U.vt.velocity=0,U.vt.sampleCount=0,S.emit("velocity:change",{velocity:0,reliable:!1}),n()},O?.idleTimeout??e2)},U.wh=v0,V.viewport.addEventListener("wheel",v0,{passive:!1});else if(Q&&y)v0=(F)=>{if(F.deltaX)return;F.preventDefault(),V.viewport.scrollLeft+=F.deltaY},U.wh=v0,V.viewport.addEventListener("wheel",v0,{passive:!1});let w2=(F)=>{let r=F.target.closest("[data-index]");if(r){let s=parseInt(r.dataset.index??"-1",10);if(s>=0){let j0=U.dm?.getItem(s)??U.it[s];if(j0){if(j0.__groupHeader)return;S.emit("item:click",{item:j0,index:s,event:F})}}}for(let s=0;s<B0.length;s++)B0[s](F)},uJ=(F)=>{let r=F.target.closest("[data-index]");if(r){let s=parseInt(r.dataset.index??"-1",10);if(s>=0){let j0=U.dm?.getItem(s)??U.it[s];if(j0){if(j0.__groupHeader)return;S.emit("item:dblclick",{item:j0,index:s,event:F})}}}},S2=(F)=>{for(let u=0;u<g.length;u++)g[u](F)};V.items.addEventListener("click",w2),V.items.addEventListener("dblclick",uJ),V.root.addEventListener("keydown",S2);let E2=new ResizeObserver((F)=>{if(U.id)return;for(let u of F){let r=u.contentRect.height,s=u.contentRect.width,j0=Q?s:r,q0=Q?U.cw:U.ch;if(U.cw=s,U.ch=r,Math.abs(j0-q0)>1){if(i.viewportState.containerSize=j0,U.ii)M0(),U.rfn(),S.emit("resize",{height:r,width:s})}if(U.ii)for(let X0=0;X0<m.length;X0++)m[X0](s,r)}});if(U.vre)E2.observe(V.viewport);let L2={dom:V,emitter:S,resolvedConfig:Z,rawConfig:J,rendered:z,pool:v,itemState:t,sharedState:i,renderRange:k,isHorizontal:Q,classPrefix:_,contentSizeHandlers:Q0,afterScroll:K0,clickHandlers:B0,keydownHandlers:g,resizeHandlers:m,destroyHandlers:Y0,methods:e,onScrollFrame:R0,resizeObserver:E2,applyTemplate:b0,updateContentSize:M0},O0=o2(U,L2);U.dm=i2(U,L2,O0),U.sc=t2(U,L2);let f2=new Map;for(let F of $)if(F.methods)for(let u of F.methods){let r=f2.get(u);if(r)throw Error(`[vlist/builder] Method "${u}" is registered by both "${r}" and "${F.name}"`);f2.set(u,F.name)}for(let F of $)F.setup(O0);if(!e.has("_getFocusedIndex")){let F=-1,u=`${_}-item--focused`,r=(q0,X0)=>{let N0=U.vtf();if(X0<0||X0>=N0)return;F=X0,V.root.setAttribute("aria-activedescendant",`${W}-item-${X0}`);let E0=Q?U.cw:U.ch;if(U.sst(U.gsp(X0,U.hc,E0,N0,"center")),U.ls=U.sgt(),U.rfn(),q0>=0&&q0!==X0)z.get(q0)?.classList.remove(u);z.get(X0)?.classList.add(u)},s=()=>{if(U.id)return;if(!V.root.matches(":focus-visible"))return;let q0=U.vtf();if(q0===0)return;r(-1,F>=0?Math.min(F,q0-1):0)};V.root.addEventListener("focusin",s);let j0=(q0)=>{if(U.id)return;let X0=q0.relatedTarget;if(X0&&V.root.contains(X0))return;if(F>=0)z.get(F)?.classList.remove(u);V.root.removeAttribute("aria-activedescendant")};V.root.addEventListener("focusout",j0),g.push((q0)=>{if(U.id)return;let X0=U.vtf();if(X0===0)return;let N0=F,E0=N0;switch(q0.key){case"ArrowUp":E0=N0<=0?X0-1:N0-1;break;case"ArrowDown":E0=N0>=X0-1?0:N0+1;break;case"Home":E0=0;break;case"End":E0=X0-1;break;default:return}q0.preventDefault(),r(N0,E0)}),Y0.push(()=>{V.root.removeEventListener("focusin",s),V.root.removeEventListener("focusout",j0)})}if(U.ii=!0,O0.state.isInitialized=!0,M0(),U.rfn(),A&&U.it.length>0){let F=U.gsp(U.it.length-1,U.hc,U.ch,U.it.length,"end");U.sst(F),U.ls=F,U.rfn()}let gJ=(F)=>{O0.dataManager.setItems(F,0,F.length)},xJ=A?(F)=>{let u=U.sab(2),r=U.it.length;if(O0.dataManager.setItems(F,r),u&&U.it.length>0){let s=U.gsp(U.it.length-1,U.hc,U.ch,U.it.length,"end");U.sst(s),U.ls=s,U.rfn()}}:(F)=>{let u=U.it.length;O0.dataManager.setItems(F,u)},mJ=A?(F)=>{let u=U.sgt(),r=U.hc.getTotalSize(),s=[...U.it];O0.dataManager.clear(),O0.dataManager.setItems([...F,...s],0);let q0=U.hc.getTotalSize()-r;if(q0>0)U.sst(u+q0),U.ls=u+q0}:(F)=>{let u=[...U.it];O0.dataManager.clear(),O0.dataManager.setItems([...F,...u],0)},dJ=(F,u)=>{O0.dataManager.updateItem(F,u)},cJ=(F)=>{O0.dataManager.removeItem(F)},lJ=async()=>{if(O0.dataManager.reload)await O0.dataManager.reload()},n0=()=>{if(w!==null)cancelAnimationFrame(w),w=null},rJ=(F,u,r)=>{if(n0(),Math.abs(u-F)<1){U.sst(u),U.ls=u,U.rfn();return}let s=performance.now(),j0=(q0)=>{let X0=q0-s,N0=Math.min(X0/r,1),E0=F+(u-F)*y2(N0);if(U.sst(E0),U.ls=E0,U.rfn(),N0<1)w=requestAnimationFrame(j0);else w=null};w=requestAnimationFrame(j0)},aJ=(F,u)=>{let{align:r,behavior:s,duration:j0}=w0(u),q0=U.vtf(),X0=F;if(G&&q0>0)X0=(X0%q0+q0)%q0;let N0=U.gsp(X0,U.hc,U.ch,q0,r);if(s==="smooth")rJ(U.sgt(),N0,j0);else n0(),U.sst(N0)},sJ=()=>U.sgt(),nJ=(F,u)=>{return S.on(F,u)},oJ=(F,u)=>{S.off(F,u)},iJ=()=>{if(U.id)return;if(U.id=!0,O0.state.isDestroyed=!0,V.items.removeEventListener("click",w2),V.root.removeEventListener("keydown",S2),U.st.removeEventListener("scroll",R0),E2.disconnect(),a)a.disconnect(),a=null;if(U.wh)V.viewport.removeEventListener("wheel",U.wh);if(I)clearTimeout(I);for(let F=0;F<Y0.length;F++)Y0[F]();for(let F of $)if(F.destroy)F.destroy();n0();for(let[,F]of z)F.remove(),v.release(F);z.clear(),v.clear(),S.clear(),V.root.remove()},I2={get element(){return V.root},get items(){if(e.has("_getItems"))return e.get("_getItems")();return U.it},get total(){if(e.has("_getTotal"))return e.get("_getTotal")();return U.vtf()},setItems:e.has("setItems")?e.get("setItems"):gJ,appendItems:e.has("appendItems")?e.get("appendItems"):xJ,prependItems:e.has("prependItems")?e.get("prependItems"):mJ,updateItem:e.has("updateItem")?e.get("updateItem"):dJ,removeItem:e.has("removeItem")?e.get("removeItem"):cJ,reload:e.has("reload")?e.get("reload"):lJ,scrollToIndex:e.has("scrollToIndex")?e.get("scrollToIndex"):aJ,cancelScroll:e.has("cancelScroll")?e.get("cancelScroll"):n0,getScrollPosition:e.has("getScrollPosition")?e.get("getScrollPosition"):sJ,on:nJ,off:oJ,destroy:iJ};for(let[F,u]of e){if(F.charCodeAt(0)===95||F==="setItems"||F==="appendItems"||F==="prependItems"||F==="updateItem"||F==="removeItem"||F==="reload"||F==="scrollToIndex"||F==="scrollToItem"||F==="cancelScroll"||F==="getScrollPosition")continue;I2[F]=u}return I2}j2();var I0=(J,q,Q={},j="vlist",K=!1)=>{let{autoHide:X=!0,autoHideDelay:B=1000,minThumbSize:N=30,showOnHover:_=!0,hoverZoneWidth:Y=16,showOnViewportEnter:D=!0}=Q,b=0,O=0,y=0,G=0,A=!1,W=!1,H=0,E=0,L=0,M=null,Z=!1,$=null,C=null,P=K?"width":"height",V=K?"translateX":"translateY",S=K?(J0)=>J0.clientX:(J0)=>J0.clientY,o=K?"left":"top",p=document.createElement("div"),d=document.createElement("div"),v=_?document.createElement("div"):null,U=()=>{if(p.className=`${j}-scrollbar`,d.className=`${j}-scrollbar-thumb`,K)p.classList.add(`${j}-scrollbar--horizontal`);if(p.appendChild(d),J.appendChild(p),v){if(v.className=`${j}-scrollbar-hover`,K)v.classList.add(`${j}-scrollbar-hover--horizontal`),v.style.height=`${Y}px`;else v.style.width=`${Y}px`;J.appendChild(v)}},w=()=>{if(M)clearTimeout(M),M=null},I=()=>{if(!X)return;w(),M=setTimeout(R,B)},T=()=>{if(b<=O)return;if(w(),!Z)p.classList.add(`${j}-scrollbar--visible`),Z=!0;if(X&&!A&&!W)I()},R=()=>{if(A||W)return;p.classList.remove(`${j}-scrollbar--visible`),Z=!1},k=(J0,K0)=>{b=J0,O=K0;let B0=b>O;if(p.style.display=B0?"":"none",!B0){R();return}let g=O/b;y=Math.max(N,g*O),d.style[P]=`${y}px`,G=O-y,l(L)},l=(J0)=>{if(L=J0,b<=O||G<=0)return;let K0=b-O,g=Math.min(1,Math.max(0,J0/K0))*G;d.style.transform=`${V}(${g}px)`},i=(J0)=>{if(J0.target===d)return;let K0=p.getBoundingClientRect(),m=S(J0)-K0[o]-y/2,Y0=Math.max(0,Math.min(m,G))/G,e=b-O,Z0=Y0*e;q(Z0),T()},z=(J0)=>{J0.preventDefault(),J0.stopPropagation(),A=!0,H=S(J0),E=L,w(),p.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",h),document.addEventListener("mouseup",c)},h=(J0)=>{if(!A)return;let K0=S(J0)-H,B0=G>0?K0/G:0,g=b-O,m=B0*g,Q0=Math.max(0,Math.min(E+m,g)),e=Q0/g*G;if(d.style.transform=`${V}(${e}px)`,C=Q0,$===null)$=requestAnimationFrame(()=>{if(C!==null)q(C);$=null})},c=()=>{if(A=!1,$!==null)cancelAnimationFrame($),$=null;if(C!==null)q(C),C=null;if(p.classList.remove(`${j}-scrollbar--dragging`),X&&!W)I();document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",c)},a=()=>{if(D)T()},f=()=>{if(!A){if(W=!1,X)I()}},x=()=>{W=!0,w(),T()},n=()=>{if(W=!1,!A&&X)I()},t=()=>{if(w(),$!==null)cancelAnimationFrame($),$=null;if(p.removeEventListener("click",i),p.removeEventListener("mouseenter",x),p.removeEventListener("mouseleave",n),d.removeEventListener("mousedown",z),J.removeEventListener("mouseenter",a),J.removeEventListener("mouseleave",f),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",c),v){if(v.removeEventListener("mouseenter",x),v.removeEventListener("mouseleave",n),v.parentNode)v.parentNode.removeChild(v)}if(p.parentNode)p.parentNode.removeChild(p)};if(U(),p.addEventListener("click",i),p.addEventListener("mouseenter",x),p.addEventListener("mouseleave",n),d.addEventListener("mousedown",z),J.addEventListener("mouseenter",a),J.addEventListener("mouseleave",f),v)v.addEventListener("mouseenter",x),v.addEventListener("mouseleave",n);return{show:T,hide:R,updateBounds:k,updatePosition:l,isVisible:()=>Z,destroy:t}};var _J=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:K}=Q,{classPrefix:X,horizontal:B}=K;if(q=I0(j.viewport,(Y)=>Q.scrollController.scrollTo(Y),J??{},X,B),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let _=q;Q.afterScroll.push((Y,D)=>{_.updatePosition(Y),_.show()}),Q.resizeHandlers.push((Y,D)=>{if(_){let b=Q.getCachedCompression();_.updateBounds(b.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(_){let Y=Q.getCachedCompression();_.updateBounds(Y.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(_)_.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var VJ=(J=0)=>{let q=[,,,,,,,,];for(let Q=0;Q<8;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},q2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let K=J.samples[J.sampleIndex];if(K.position=q,K.time=Q,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+8)%8,B=J.samples[X],N=q-B.position,_=Q-B.time;J.velocity=_>0?N/_:0}return J.lastPosition=q,J.lastTime=Q,J},W1=(J)=>J.sampleCount>=3,GJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:K=!1,idleTimeout:X=150,onScroll:B,onIdle:N,scrollElement:_,horizontal:Y=!1}=q,D=!!_,b=0,O=0,y=D?Y?window.innerWidth:window.innerHeight:Y?J.clientWidth:J.clientHeight,G=q.compressed??!1,A=q.compression,W=VJ(),H=!1,E=null,M=X2(()=>{let f=Y?J.scrollLeft:J.scrollTop,x=f>=b?"down":"up";if(W=q2(W,f),b=f,B)B({scrollTop:b,direction:x,velocity:W.velocity});S()}),$=X2(()=>{let f=J.getBoundingClientRect(),x=Y?Math.max(0,-f.left):Math.max(0,-f.top),n=x>=b?"down":"up";if(W=q2(W,x),b=x,!H)H=!0;if(B)B({scrollTop:b,direction:n,velocity:W.velocity});S()}),C=(f)=>{f.preventDefault()},P=(f)=>{if(f.deltaX)return;f.preventDefault(),J.scrollLeft+=f.deltaY},V=(f)=>{if(!G)return;f.preventDefault();let x=(Y?f.deltaX||f.deltaY:f.deltaY)*j,n=b+x;if(K)n=b+x*0.3;if(n=Math.max(0,Math.min(n,O)),n!==b){let J0=n>=b?"down":"up";if(W=q2(W,n),b=n,!H)H=!0;if(B)B({scrollTop:b,direction:J0,velocity:W.velocity});S()}},S=()=>{if(E)clearTimeout(E);E=setTimeout(()=>{if(H=!1,W=VJ(b),N)N()},X)},o=(f)=>{if(G)return;if(G=!0,A=f,O=f.virtualSize-y,D)return;if(M.cancel(),J.removeEventListener("scroll",M),!Q)J.removeEventListener("wheel",C);else if(Y)J.removeEventListener("wheel",P);if(Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",V,{passive:!1});let x=Y?J.scrollLeft:J.scrollTop;if(x>0){let n=Y?A?.actualSize??J.scrollWidth:A?.actualSize??J.scrollHeight;b=x/n*O}if(Y)J.scrollLeft=0;else J.scrollTop=0},p=()=>{if(!G)return;if(G=!1,D){A=void 0;return}if(J.removeEventListener("wheel",V),Y)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",M,{passive:!0}),!Q)J.addEventListener("wheel",C,{passive:!1});else if(Y)J.addEventListener("wheel",P,{passive:!1});if(A&&b>0){let x=b/O*(A.actualSize-y);if(Y)J.scrollLeft=x;else J.scrollTop=x}A=void 0},d=()=>{if(D||G)return b;return Y?J.scrollLeft:J.scrollTop},v=(f,x=!1)=>{let n=Math.max(0,Math.min(f,O||1/0));if(D){let t=J.getBoundingClientRect();if(Y){let J0=t.left+window.scrollX;window.scrollTo({left:J0+n,behavior:x?"smooth":"auto"})}else{let J0=t.top+window.scrollY;window.scrollTo({top:J0+n,behavior:x?"smooth":"auto"})}}else if(G){if(n===b)return;let J0=n>=b?"down":"up";if(W=q2(W,n),b=n,!H)H=!0;if(B)B({scrollTop:b,direction:J0,velocity:W.velocity});S()}else if(Y)J.scrollTo({left:n,behavior:x?"smooth":"auto"});else J.scrollTo({top:n,behavior:x?"smooth":"auto"})},U=(f)=>{v(d()+f)},w=()=>{return d()<=0},I=(f=0)=>{let x=d(),n=D||G?O:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return x>=n-f},T=()=>{let f=d(),x=D||G?O:Y?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(x<=0)return 0;return Math.min(1,Math.max(0,f/x))},R=(f)=>{if(f.compression)A=f.compression,O=A.virtualSize-y},k=()=>G,l=()=>Math.abs(W.velocity),i=()=>W1(W),z=()=>H,h=()=>D,c=(f)=>{if(y=f,A)O=A.virtualSize-y},a=()=>{if(E)clearTimeout(E);if(D)$.cancel(),window.removeEventListener("scroll",$);else M.cancel(),J.removeEventListener("scroll",M),J.removeEventListener("wheel",V),J.removeEventListener("wheel",C),J.removeEventListener("wheel",P)};if(D){if(G&&A)O=A.virtualSize-y;window.addEventListener("scroll",$,{passive:!0})}else if(G&&A){if(O=A.virtualSize-y,Y)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",V,{passive:!1})}else{if(Y)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",M,{passive:!0}),!Q)J.addEventListener("wheel",C,{passive:!1});else if(Y)J.addEventListener("wheel",P,{passive:!1})}return{getScrollTop:d,scrollTo:v,scrollBy:U,isAtTop:w,isAtBottom:I,getScrollPercentage:T,getVelocity:l,isTracking:i,isScrolling:z,updateConfig:R,enableCompression:o,disableCompression:p,isCompressed:k,isWindowMode:h,updateContainerHeight:c,destroy:a}},X2=(J)=>{let q=null,Q=null,j=(...K)=>{if(Q=K,q===null)q=requestAnimationFrame(()=>{if(q=null,Q)J(...Q)})};return j.cancel=()=>{if(q!==null)cancelAnimationFrame(q),q=null},j};var D1=0.65,_1=0.5,V1=0.95,G1=0.1,M1=5,O1=100,MJ=()=>{let J=null,q=0,Q=!1,j=0,K=null,X=0,B=0,N=null,_=[];return{name:"withScale",priority:20,setup(Y){let{dom:D,config:b}=Y,{classPrefix:O,horizontal:y}=b,G=()=>{let E=Y.getVirtualTotal(),L=F0(E,Y.sizeCache);if(L.isCompressed&&!Q){Q=!0,Y.scrollController.enableCompression(L),Y.updateContentSize(L.virtualSize),Y.setScrollFns(()=>q,(p)=>{if(q=p,j=p,K!==null)cancelAnimationFrame(K),K=null});let M=()=>{let p=j-q;if(Math.abs(p)<_1)q=j,K=null;else{q+=p*D1;let v=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;q=Math.max(0,Math.min(q,v)),K=requestAnimationFrame(M)}Y.scrollController.scrollTo(q)},Z=D.viewport,$=(p)=>{p.preventDefault();let v=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+p.deltaY,v)),K===null)K=requestAnimationFrame(M)};Z.addEventListener("wheel",$,{passive:!1});let C=()=>{if(N!==null)cancelAnimationFrame(N),N=null},P=(p)=>{if(C(),K!==null)cancelAnimationFrame(K),K=null;let d=p.touches[0];if(!d)return;let v=y?d.clientX:d.clientY;X=v,B=q,_=[{time:performance.now(),y:v}]},V=(p)=>{p.preventDefault();let d=p.touches[0];if(!d)return;let v=y?d.clientX:d.clientY,U=performance.now();if(_.push({time:U,y:v}),_.length>M1)_.shift();let w=X-v,T=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,R=Math.max(0,Math.min(B+w,T));q=R,j=R,Y.scrollController.scrollTo(R)},S=(p)=>{let d=performance.now(),v=_.filter((T)=>d-T.time<O1),U=0;if(v.length>=2){let T=v[0],R=v[v.length-1],k=R.time-T.time;if(k>0)U=(T.y-R.y)/k}if(_=[],Math.abs(U)<G1)return;let w=U*16,I=()=>{if(w*=V1,Math.abs(w)<0.5){N=null;return}let R=Y.getCachedCompression().virtualSize-Y.state.viewportState.containerSize,k=q+w;if(k=Math.max(0,Math.min(k,R)),k<=0&&w<0||k>=R&&w>0){q=k,j=k,Y.scrollController.scrollTo(k),N=null;return}q=k,j=k,Y.scrollController.scrollTo(k),N=requestAnimationFrame(I)};N=requestAnimationFrame(I)};if(Z.addEventListener("touchstart",P,{passive:!0}),Z.addEventListener("touchmove",V,{passive:!1}),Z.addEventListener("touchend",S,{passive:!0}),Z.addEventListener("touchcancel",S,{passive:!0}),Y.destroyHandlers.push(()=>{if(Z.removeEventListener("wheel",$),Z.removeEventListener("touchstart",P),Z.removeEventListener("touchmove",V),Z.removeEventListener("touchend",S),Z.removeEventListener("touchcancel",S),C(),K!==null)cancelAnimationFrame(K),K=null}),!D.viewport.querySelector(`.${O}-scrollbar`)){if(J=I0(D.viewport,(d)=>Y.scrollController.scrollTo(d),{},O,y),!D.viewport.classList.contains(`${O}-viewport--custom-scrollbar`))D.viewport.classList.add(`${O}-viewport--custom-scrollbar`);J.updateBounds(L.virtualSize,Y.state.viewportState.containerSize);let p=J;Y.afterScroll.push((d,v)=>{if(p)p.updatePosition(d),p.show()}),Y.resizeHandlers.push((d,v)=>{if(p){let U=Y.getCachedCompression();p.updateBounds(U.virtualSize,Y.state.viewportState.containerSize)}})}}else if(!L.isCompressed&&Q)Q=!1,Y.scrollController.disableCompression(),Y.updateContentSize(L.actualSize);else if(L.isCompressed)Y.scrollController.updateConfig({compression:L}),Y.updateContentSize(L.virtualSize);if(J)J.updateBounds(L.virtualSize,Y.state.viewportState.containerSize);Y.state.cachedCompression={state:L,totalItems:E}};Y.updateCompressionMode=G;let A=Y.getCachedCompression.bind(Y);Y.getCachedCompression=()=>{if(Y.state.cachedCompression)return Y.state.cachedCompression.state;return A()},Y.setVisibleRangeFn((E,L,M,Z,$)=>{W=null,H=null;let C=F0(Z,M);J2(E,L,M,Z,C,$)}),Y.setScrollToPosFn((E,L,M,Z,$)=>{let C=F0(Z,L);return Q2(E,L,M,Z,C,$)});let W=null,H=null;Y.setPositionElementFn((E,L)=>{let M=Y.getVirtualTotal(),Z=F0(M,Y.sizeCache);if(Z.isCompressed){let $=Y.scrollController.getScrollTop();if(W===null||L<H)H=L,W=Math.round(f0(L,$,Y.sizeCache,M,Y.state.viewportState.containerSize,Z));let C=W+Y.sizeCache.getOffset(L)-Y.sizeCache.getOffset(H),P=Y.config.horizontal;E.style.transform=P?`translateX(${C}px)`:`translateY(${C}px)`}else{let $=Math.round(Y.sizeCache.getOffset(L)),C=Y.config.horizontal;E.style.transform=C?`translateX(${$}px)`:`translateY(${$}px)`}}),G(),Y.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null})},destroy(){if(J)J.destroy(),J=null;if(K!==null)cancelAnimationFrame(K),K=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var Y2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:K}=J,X=new Map,B=0,N=0,_=(U)=>{let w=X.get(U);if(!w)w={items:Array(q),count:0,lastAccess:Date.now()},X.set(U,w);else w.lastAccess=Date.now();return w},Y=(U)=>{return Math.floor(U/q)},D=(U)=>{return U%q},b=()=>B,O=(U)=>{B=U},y=(U)=>{if(U<0||U>=B)return;let w=Y(U),I=X.get(w);if(!I)return;return I.items[D(U)]},G=(U)=>{if(U<0||U>=B)return!1;let w=Y(U),I=X.get(w);if(!I)return!1;return I.items[D(U)]!==void 0},A=(U,w)=>{let I=Y(U),T=_(I),R=D(U),k=T.items[R]===void 0;if(T.items[R]=w,k)T.count++,N++;if(U>=B)B=U+1},W=(U,w)=>{for(let I=0;I<w.length;I++){let T=w[I];if(T!==void 0)A(U+I,T)}},H=(U)=>{if(U<0||U>=B)return!1;let w=Y(U),I=X.get(w);if(!I)return!1;let T=D(U);if(I.items[T]===void 0)return!1;if(I.items[T]=void 0,I.count--,N--,I.count===0)X.delete(w);return!0},E=(U,w)=>{let I=[];for(let T=U;T<=w&&T<B;T++)I.push(y(T));return I},L=(U,w)=>{for(let I=U;I<=w&&I<B;I++)if(!G(I))return!1;return!0},M=()=>{let U=[],w=null,I=Array.from(X.keys()).sort((T,R)=>T-R);for(let T of I){let R=X.get(T);if(!R)continue;let k=T*q;for(let l=0;l<q;l++){let i=k+l;if(i>=B)break;if(R.items[l]!==void 0)if(w===null)w={start:i,end:i};else if(i===w.end+1)w.end=i;else U.push(w),w={start:i,end:i};else if(w!==null)U.push(w),w=null}}if(w!==null)U.push(w);return U},Z=(U,w)=>{let I=[],T=null;for(let R=U;R<=w&&R<B;R++)if(!G(R))if(T===null)T={start:R,end:R};else T.end=R;else if(T!==null)I.push(T),T=null;if(T!==null)I.push(T);return I},$=(U)=>{return X.has(U)},C=(U)=>{let w=X.get(U);if(w)w.lastAccess=Date.now()},P=(U,w)=>{if(U>w||X.size===0)return;let I=Date.now(),T=Y(Math.max(0,U)),R=Y(Math.min(B-1,w));for(let k=T;k<=R;k++){let l=X.get(k);if(l)l.lastAccess=I}},V=(U,w)=>{if(N<=Q)return 0;let I=Math.max(0,U-j),T=Math.min(B-1,w+j),R=Y(I),k=Y(T),l=0,i=[];for(let[z,h]of X)if(z<R||z>k)l+=h.count,i.push(z),N-=h.count,X.delete(z);if(l>0&&K)K(l,i);return l},S=()=>{if(N<=Q)return 0;let U=Array.from(X.entries()).sort(([,T],[,R])=>T.lastAccess-R.lastAccess),w=0,I=[];for(let[T,R]of U){if(N<=Q)break;w+=R.count,N-=R.count,I.push(T),X.delete(T)}if(w>0&&K)K(w,I);return w},o=()=>{return{totalItems:B,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:B>0?1-N/B:1}},p=()=>N,d=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:b,setTotal:O,get:y,has:G,set:A,setRange:W,delete:H,getRange:E,isRangeLoaded:L,getLoadedRanges:M,findUnloadedRanges:Z,getChunkIndex:Y,isChunkLoaded:$,touchChunk:C,touchChunksForRange:P,evictDistant:V,evictToLimit:S,getStats:o,getCachedCount:p,clear:d,reset:()=>{d(),B=0}}},K2=(J)=>{if(J.length===0)return[];let q=[...J].sort((j,K)=>j.start-K.start),Q=[{...q[0]}];for(let j=1;j<q.length;j++){let K=q[j],X=Q[Q.length-1];if(K.start<=X.end+1)X.end=Math.max(X.end,K.end);else Q.push({...K})}return Q},x0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,K=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:K};if(q.length===0)return[X];let B=[],N=K2(q),_=X.start;for(let Y of N){if(Y.end<_)continue;if(Y.start>X.end)break;if(Y.start>_)B.push({start:_,end:Math.min(Y.start-1,X.end)});if(_=Y.end+1,_>X.end)break}if(_<=X.end)B.push({start:_,end:X.end});return B};var U2=(J={})=>{let{maskCharacter:q=XJ,maxSampleSize:Q=YJ}=J,j=[],K=!1,X=0,B=(b)=>{if(K||b.length===0)return;let O=Math.min(b.length,Q);for(let y=0;y<O;y++){let G=b[y];if(!G||typeof G!=="object")continue;let A={};for(let[W,H]of Object.entries(G)){if(W.startsWith("_")||W==="id")continue;A[W]=String(H??"").length}if(Object.keys(A).length>0)j.push(A)}K=!0},N=()=>K,_=(b)=>{let O={id:`${KJ}${X++}`,[$2]:!0,_index:b};if(j.length===0)return O.label=q.repeat(12),O;let y=j[b%j.length];for(let[G,A]of Object.entries(y))O[G]=q.repeat(Math.max(1,A));return O};return{analyzeStructure:B,hasAnalyzedStructure:N,generate:_,generateRange:(b,O)=>{let y=[];for(let G=b;G<=O;G++)y.push(_(G));return y},clear:()=>{j=[],K=!1,X=0}}},C0=(J)=>{if(!J||typeof J!=="object")return!1;return J[$2]===!0},k2=(J)=>{return J.filter((q)=>!C0(q))};var E1=50,B2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:K,placeholder:X,pageSize:B=E1,onStateChange:N,onItemsLoaded:_,onItemsEvicted:Y}=J,D=Y2({...K,onEvict:(g,m)=>{Y?.(g),Z()}}),b=null,O=()=>{if(!b)b=U2(X);return b},y=new Map,G=!1,A,W=!0,H,E=[],L=0,M=new Map,Z=()=>{N?.(v())},$=()=>{y.clear();let g=D.getLoadedRanges();for(let m of g)for(let Q0=m.start;Q0<=m.end;Q0++){let Y0=D.get(Q0);if(Y0&&!C0(Y0))y.set(Y0.id,Q0)}},C=(g,m)=>{if(!C0(m))y.set(m.id,g)},P=(g)=>{y.delete(g)},V=(g,m)=>{return`${g}-${m}`},S=()=>D.getTotal(),o=()=>D.getCachedCount(),p=()=>G,d=()=>W,v=()=>({total:D.getTotal(),cached:D.getCachedCount(),isLoading:G,pendingRanges:E,error:A,hasMore:W,cursor:H}),U=()=>D,w=()=>O(),I=(g)=>{let m=D.get(g);if(m!==void 0)return m;if(g>=0&&g<D.getTotal())return O().generate(g);return},T=(g)=>{let m=y.get(g);if(m===void 0)return;return D.get(m)},R=(g)=>{return y.get(g)??-1},k=(g)=>{let m=D.get(g);return m!==void 0&&!C0(m)},l=(g,m)=>{let Q0=[],Y0=D.getTotal(),e=0,Z0=0;D.touchChunksForRange(g,Math.min(m,Y0-1));for(let G0=g;G0<=m&&G0<Y0;G0++){let L0=D.get(G0);if(L0!==void 0)Q0.push(L0),e++;else Q0.push(O().generate(G0)),Z0++}return Q0},i=(g)=>{D.setTotal(g),W=D.getCachedCount()<g,Z()},z=(g,m=0,Q0)=>{if(b&&!b.hasAnalyzedStructure()&&g.length>0)b.analyzeStructure(g);for(let Y0=0;Y0<g.length;Y0++){let e=g[Y0];if(e!==void 0){let Z0=m+Y0;D.set(Z0,e),C(Z0,e)}}if(Q0!==void 0)D.setTotal(Q0);else if(m+g.length>D.getTotal())D.setTotal(m+g.length);if(D.getCachedCount()>=D.getTotal()&&D.getTotal()>0)W=!1;_?.(g,m,D.getTotal()),Z()},h=(g,m)=>{let Q0=y.get(g);if(Q0===void 0)return!1;let Y0=D.get(Q0);if(!Y0)return!1;let e={...Y0,...m};if(D.set(Q0,e),m.id!==void 0&&m.id!==g)P(g),C(Q0,e);return Z(),!0},c=(g)=>{let m=y.get(g);if(m===void 0)return!1;D.delete(m),P(g);let Q0=D.getTotal();if(Q0>0)D.setTotal(Q0-1);return Z(),!0},a=async(g,m)=>{if(!q)return;let Q0=V(g,m);if(M.has(Q0))return;let Y0=D.getLoadedRanges(),e=x0({start:g,end:m},Y0,D.chunkSize);if(e.length===0)return;let Z0=D.chunkSize,G0=[];for(let W0 of e){let b0=Math.floor(W0.start/Z0),P0=Math.floor(W0.end/Z0);for(let D0=b0;D0<=P0;D0++){let M0=D0*Z0,_0=M0+Z0-1,T0=V(M0,_0);if(!G0.some((R0)=>R0.start===M0)&&!M.has(T0))G0.push({start:M0,end:_0})}}let L0=[];for(let W0 of e){let b0=Math.floor(W0.start/Z0),P0=Math.floor(W0.end/Z0);for(let D0=b0;D0<=P0;D0++){let M0=D0*Z0,_0=M0+Z0-1,T0=V(M0,_0);if(M.has(T0)){let R0=M.get(T0);if(!L0.includes(R0))L0.push(R0)}}}for(let W0 of G0){let b0=V(W0.start,W0.end),P0=(async()=>{E.push(W0),G=!0,A=void 0,Z();try{let D0=W0.end-W0.start+1,M0={offset:W0.start,limit:D0,cursor:void 0},_0=await q.read(M0);if(z(_0.items,W0.start,_0.total),_0.cursor)H=_0.cursor;let T0=W0.start+_0.items.length;if(T0>=L){if(L=T0,_0.hasMore!==void 0)W=_0.hasMore;else if(_0.total!==void 0)W=T0<_0.total}}catch(D0){A=D0 instanceof Error?D0:Error(String(D0))}finally{M.delete(b0),E=E.filter((D0)=>D0.start!==W0.start||D0.end!==W0.end),G=M.size>0,Z()}})();M.set(b0,P0),L0.push(P0)}await Promise.all(L0)},f=async(g,m)=>{if(D.isRangeLoaded(g,m))return;await a(g,m)},x=async()=>{if(!q)return;await a(0,B-1)},n=async()=>{if(!q||G||!W)return!1;let g=D.getCachedCount(),m=D.getTotal(),Q0=g,Y0=Math.min(Q0+B-1,m>0?m-1:Q0+B-1);if(Q0>=m&&m>0)return W=!1,!1;return await a(Q0,Y0),D.getCachedCount()>g},t=async()=>{if(D.clear(),D.setTotal(0),y.clear(),b)b.clear();M.clear(),E=[],G=!1,H=void 0,W=!0,L=0,A=void 0,Z()},J0=(g,m)=>{if(D.evictDistant(g,m)>0)$()},K0=()=>{D.clear(),y.clear(),H=void 0,A=void 0,E=[],G=!1,Z()},B0=()=>{if(D.reset(),y.clear(),b)b.clear();H=void 0,W=!0,L=0,A=void 0,E=[],G=!1,Z()};if(Q&&Q.length>0)z(Q,0,j??Q.length);else if(j!==void 0)D.setTotal(j),Z();return{getState:v,getTotal:S,getCached:o,getIsLoading:p,getHasMore:d,getStorage:U,getPlaceholders:w,getItem:I,getItemById:T,getIndexById:R,isItemLoaded:k,getItemsInRange:l,setTotal:i,setItems:z,updateItem:h,removeItem:c,loadRange:a,ensureRange:f,loadInitial:x,loadMore:n,reload:t,evictDistant:J0,clear:K0,reset:B0}};var OJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:K,autoLoad:X=!0}=J,B=Q?.cancelThreshold??QJ,N=Q?.preloadThreshold??jJ,_=Q?.preloadAhead??qJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(Y){let{emitter:D}=Y,b=Y.config.reverse,O=B2({adapter:q,...K!==void 0&&{initialTotal:K},pageSize:j?.chunkSize??S0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(Y.state.isInitialized){let M=Y.getVirtualTotal();Y.sizeCache.rebuild(M),Y.updateCompressionMode();let Z=Y.getCachedCompression();Y.state.viewportState.totalSize=Z.virtualSize,Y.state.viewportState.actualSize=Z.actualSize,Y.state.viewportState.isCompressed=Z.isCompressed,Y.state.viewportState.compressionRatio=Z.ratio,Y.updateContentSize(Z.virtualSize),Y.renderIfNeeded()}},onItemsLoaded:(M,Z,$)=>{if(Y.state.isInitialized)Y.forceRender(),D.emit("load:end",{items:M,total:$,offset:Z})}});Y.replaceDataManager(O);let y=null,G=null,A=0,W=()=>{if(G){let M=G;G=null,Y.dataManager.ensureRange(M.start,M.end).catch((Z)=>{D.emit("error",{error:Z,context:"ensureRange"})})}};Y.afterScroll.push((M,Z)=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getVelocity(),P=Y.scrollController.isTracking()&&$<=B;if(G&&A>B&&$<=B){let o=G;G=null,Y.dataManager.ensureRange(o.start,o.end).catch((p)=>{D.emit("error",{error:p,context:"ensureRange"})})}if(A=$,P&&!Y.dataManager.getIsLoading()&&Y.dataManager.getHasMore()){if(b){if(M<H2)D.emit("load:start",{offset:Y.dataManager.getCached(),limit:S0}),Y.dataManager.loadMore().catch((o)=>{D.emit("error",{error:o,context:"loadMore"})})}else if(Y.state.viewportState.totalSize-M-Y.state.viewportState.containerSize<H2)D.emit("load:start",{offset:Y.dataManager.getCached(),limit:S0}),Y.dataManager.loadMore().catch((p)=>{D.emit("error",{error:p,context:"loadMore"})})}let{renderRange:V}=Y.state.viewportState;if(!y||V.start!==y.start||V.end!==y.end)if(y={start:V.start,end:V.end},P){G=null;let{start:o,end:p}=V,d=Y.getVirtualTotal();if($>N)if(Z==="down")p=Math.min(V.end+_,d-1);else o=Math.max(V.start-_,0);Y.dataManager.ensureRange(o,p).catch((v)=>{D.emit("error",{error:v,context:"ensureRange"})})}else G={start:V.start,end:V.end}});let H=200,E=null;Y.afterScroll.push((M,Z)=>{if(E!==null)clearTimeout(E);E=setTimeout(()=>{E=null,W()},H)}),Y.destroyHandlers.push(()=>{if(E!==null)clearTimeout(E),E=null});let L=()=>{if(Y.state.isDestroyed)return;y=null;let{renderRange:M}=Y.state.viewportState;if(M.end>0)Y.dataManager.ensureRange(M.start,M.end).catch((Z)=>{D.emit("error",{error:Z,context:"ensureRange"})});W()};if(window.addEventListener("online",L),Y.destroyHandlers.push(()=>{window.removeEventListener("online",L)}),D.on("load:start",()=>{Y.dom.root.setAttribute("aria-busy","true")}),D.on("load:end",()=>{Y.dom.root.removeAttribute("aria-busy")}),Y.methods.set("loadVisibleRange",async()=>{y=null,G=null,Y.forceRender();let{renderRange:M}=Y.state.viewportState;if(M.end>0)D.emit("load:start",{offset:M.start,limit:M.end-M.start+1}),await Y.dataManager.ensureRange(M.start,M.end)}),Y.methods.set("reload",async()=>{y=null,G=null,Y.invalidateRendered(),await Y.dataManager.reload(),D.emit("load:start",{offset:0,limit:S0}),await Y.dataManager.loadInitial(),Y.forceRender();let{renderRange:M}=Y.state.viewportState;if(M.end>0)await Y.dataManager.ensureRange(M.start,M.end)}),X)D.emit("load:start",{offset:0,limit:S0}),Y.dataManager.loadInitial().catch((M)=>{D.emit("error",{error:M,context:"loadInitial"})});else if(K!==void 0)Y.dataManager.setTotal(K)}}};var AJ=()=>{let J=null;return{name:"withPage",priority:5,setup(q){let{dom:Q,state:j,config:K,emitter:X}=q;if(Q.root.style.overflow="visible",Q.root.style.height="auto",K.horizontal)Q.viewport.style.overflowX="visible",Q.viewport.style.overflowY="visible";else Q.viewport.style.overflow="visible";Q.viewport.classList.remove(`${K.classPrefix}-viewport--custom-scrollbar`),q.disableViewportResize(),q.disableWheelHandler(),q.setScrollTarget(window),q.setScrollFns(()=>{let Y=Q.viewport.getBoundingClientRect();if(K.horizontal)return Math.max(0,-Y.left);else return Math.max(0,-Y.top)},(Y)=>{let D=Q.viewport.getBoundingClientRect();if(K.horizontal){let b=D.left+window.scrollX;window.scrollTo(b+Y,window.scrollY)}else{let b=D.top+window.scrollY;window.scrollTo(window.scrollX,b+Y)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:B,innerWidth:N}=window,_=()=>{let{innerWidth:Y,innerHeight:D}=window,b=K.horizontal?Y:D,O=K.horizontal?N:B;if(Math.abs(b-O)<=1)return;B=D,N=Y,j.viewportState.containerSize=D,X.emit("resize",{width:Y,height:D});for(let y=0;y<q.resizeHandlers.length;y++)q.resizeHandlers[y](Y,D);q.renderIfNeeded()};window.addEventListener("resize",_,{passive:!0}),J=()=>{window.removeEventListener("resize",_)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var P2=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].headerLayoutIndex<=q)Q=K;else j=K-1}return Q},EJ=(J,q)=>{let Q=0,j=J.length-1;while(Q<j){let K=Q+j+1>>>1;if(J[K].firstDataIndex<=q)Q=K;else j=K-1}return Q},LJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),K=0,X=0;for(let B=1;B<J;B++){let N=q(B);if(N!==j){let _=B-K;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:_}),X=X+1+_,j=N,K=B}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:K,count:J-K}),Q},m0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),K=0;for(let X of q){j[K]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},K++;for(let B=0;B<X.count;B++)j[K]=J[X.firstDataIndex+B],K++}return j},d0=(J,q)=>{let Q=typeof q==="number"?(j)=>q:q;return(j)=>{let K=J.getEntry(j);if(K.type==="header")return J.getHeaderHeight(K.group.groupIndex);return Q(K.dataIndex)}},Z2=(J,q)=>{let Q=LJ(J,q.getGroupForIndex),j=J+Q.length,K=q.headerHeight;return{get totalEntries(){return j},get groupCount(){return Q.length},get groups(){return Q},getEntry:(O)=>{if(Q.length===0)return{type:"item",dataIndex:O,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let y=P2(Q,O),G=Q[y];if(O===G.headerLayoutIndex)return{type:"header",group:G};let A=O-G.headerLayoutIndex-1;return{type:"item",dataIndex:G.firstDataIndex+A,group:G}},layoutToDataIndex:(O)=>{if(Q.length===0)return O;let y=P2(Q,O),G=Q[y];if(O===G.headerLayoutIndex)return-1;let A=O-G.headerLayoutIndex-1;return G.firstDataIndex+A},dataToLayoutIndex:(O)=>{if(Q.length===0)return O;let y=EJ(Q,O),G=Q[y],A=O-G.firstDataIndex;return G.headerLayoutIndex+1+A},getGroupAtLayoutIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=P2(Q,O);return Q[y]},getGroupAtDataIndex:(O)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let y=EJ(Q,O);return Q[y]},getHeaderHeight:typeof K==="number"?(O)=>K:(O)=>{let y=Q[O];if(!y)return 0;return K(y.key,O)},rebuild:(O)=>{Q=LJ(O,q.getGroupForIndex),j=O+Q.length}}};var N2=(J,q,Q,j,K,X=!1)=>{let B=document.createElement("div");if(B.className=`${K}-sticky-header`,B.setAttribute("role","presentation"),B.setAttribute("aria-hidden","true"),B.style.position="absolute",B.style.zIndex="5",B.style.pointerEvents="none",B.style.willChange="transform",B.style.overflow="hidden",X)B.style.top="0",B.style.bottom="0",B.style.left="0";else B.style.top="0",B.style.left="0",B.style.right="0";J.insertBefore(B,J.firstChild);let N=-1,_=!1,Y=0,D=(W)=>{if(W===N)return;N=W;let H=q.groups;if(W<0||W>=H.length){B.textContent="";return}let E=H[W],L=j.headerTemplate(E.key,E.groupIndex),M=q.getHeaderHeight(W);if(X)B.style.width=`${M}px`;else B.style.height=`${M}px`;if(typeof L==="string")B.innerHTML=L;else B.replaceChildren(L)},b=(W)=>{let H=q.groups;if(H.length===0){y();return}let E=Q.getOffset(H[0].headerLayoutIndex);if(W<E){y();return}let L=0,M=H.length-1;while(L<M){let V=L+M+1>>>1;if(Q.getOffset(H[V].headerLayoutIndex)<=W)L=V;else M=V-1}let Z=L;if(!_)O();D(Z);let $=q.getHeaderHeight(Z),C=0,P=Z+1;if(P<H.length){let S=Q.getOffset(H[P].headerLayoutIndex)-W;if(S<$)C=S-$}if(C!==Y)if(Y=C,C===0)B.style.transform="";else{let V=Math.round(C);B.style.transform=X?`translateX(${V}px)`:`translateY(${V}px)`}},O=()=>{if(_)return;_=!0,B.style.display=""},y=()=>{if(!_)return;_=!1,B.style.display="none",N=-1,Y=0,B.style.transform=""},G=()=>{let W=N;if(N=-1,W>=0)D(W)},A=()=>{B.remove(),N=-1,_=!1};return B.style.display="none",{update:b,refresh:G,show:O,hide:y,destroy:A}};var FJ=(J,q,Q,j,K,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let B=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,B),X.end=Math.min(j-1,Math.max(0,N)),X},bJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},TJ=(J,q,Q,j,K,X)=>{if(j===0)return 0;let B=Math.max(0,Math.min(J,j-1)),N=q.getOffset(B),_=q.getSize(B),Y=q.getTotalSize(),D=Math.max(0,Y-Q),b;switch(X){case"center":b=N-Q/2+_/2;break;case"end":b=N-Q+_;break;case"start":default:b=N;break}return Math.max(0,Math.min(b,D))},yJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},HJ=(J,q)=>{return q.getTotalSize()},$J=(J,q)=>{return q.getOffset(J)},kJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var k0=(J,q,Q,j,K="start",X,B=TJ)=>{return B(J,q,Q,j,X,K)},PJ=(J,q)=>{return J.start===q.start&&J.end===q.end},RJ=(J,q)=>{return J>=q.start&&J<=q.end},CJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var zJ=(J,q)=>{let Q=[],j=[];for(let K=J.start;K<=J.end;K++)if(K<q.start||K>q.end)j.push(K);for(let K=q.start;K<=q.end;K++)if(K<J.start||K>J.end)Q.push(K);return{add:Q,remove:j}};j2();var wJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,Q=null,j=[],K=[];return{name:"withGroups",priority:10,setup(X){let{dom:B,config:N,rawConfig:_}=X,{classPrefix:Y}=N,b=_.item.height;j=_.items?[..._.items]:[];let O=j.length,y={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=Z2(O,y),K=m0(j,q.groups);let G=d0(q,b);X.setSizeConfig(G),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length);let A=_.item.template,{headerTemplate:W}=J,H=(P,V,S)=>{if(z0(P))return W(P.groupKey,P.groupIndex);return A(P,V,S)},E=X.methods.get("_getGridLayout"),L=X.methods.get("_replaceGridRenderer"),M=X.methods.get("_updateGridLayoutForGroups");if(E&&L){if(M)M((o)=>{let p=K[o];return!!(p&&z0(p))});let{createGridRenderer:P}=(W2(),q1(vJ)),V=E(),S=P(B.items,H,X.sizeCache,V,Y,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);L(S)}else X.replaceTemplate(H);if(B.root.classList.add(`${Y}--grouped`),J.sticky!==!1){Q=N2(B.root,q,X.sizeCache,{...y,sticky:y.sticky??!1},Y,N.horizontal);let P=Q;X.afterScroll.push((V,S)=>{P.update(V)}),Q.update(X.scrollController.getScrollTop())}let Z=()=>{if(!q)return;q.rebuild(j.length),K=m0(j,q.groups);let P=d0(q,b);if(X.setSizeConfig(P),X.rebuildSizeCache(K.length),X.dataManager.setItems(K,0,K.length),Q)Q.refresh()};X.methods.set("setItems",(P)=>{j=P.slice(),Z()}),X.methods.set("appendItems",(P)=>{j.push(...P),Z()}),X.methods.set("prependItems",(P)=>{j.unshift(...P),Z()}),X.methods.set("removeItem",(P)=>{j=j.filter((V)=>V.id!==P),Z()});let{animateScroll:$,cancelScroll:C}=n2(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(P,V)=>{let S=q.dataToLayoutIndex(P),{align:o,behavior:p,duration:d}=w0(V),v=X.dataManager.getTotal(),U=k0(S,X.sizeCache,X.state.viewportState.containerSize,v,o,X.getCachedCompression());if(p==="smooth")$(X.scrollController.getScrollTop(),U,d);else C(),X.scrollController.scrollTo(U)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(C(),Q)Q.destroy(),Q=null;B.root.classList.remove(`${Y}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var D2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,K={row:0,col:0},X=(G)=>{if(G<=0)return 0;if(!j)return Math.ceil(G/q);let A=0,W=0,H=0;for(let E=0;E<G;E++)if(j(E)){if(H++,W>0)A++,W=0;A++,W=0}else if(W++,W>=q)A++,W=0;if(W>0)A++;return A},B=(G)=>{return K.row=N(G),K.col=_(G),K},N=(G)=>{if(!j)return Math.floor(G/q);let A=0,W=0;for(let H=0;H<=G;H++)if(j(H)){if(W>0)A++,W=0;if(H===G)return A;A++,W=0}else{if(H===G)return A;if(W++,W>=q)A++,W=0}return console.warn(`⚠️ getRow(${G}) fell through - returning ${A}`),A},_=(G)=>{if(!j)return G%q;if(j(G))return 0;let A=0;for(let W=0;W<=G;W++)if(j(W))A=0;else{if(W===G)return A;if(A++,A>=q)A=0}return A},Y=(G,A,W)=>{if(W<=0)return{start:0,end:-1};if(!j){let Z=Math.max(0,G*q),$=Math.min(W-1,(A+1)*q-1);return{start:Z,end:$}}let H=-1,E=-1,L=0,M=0;for(let Z=0;Z<W;Z++){if(j(Z)){if(M>0)L++,M=0;if(L>=G&&L<=A){if(H===-1)H=Z;E=Z}L++,M=0}else{if(L>=G&&L<=A){if(H===-1)H=Z;E=Z}if(M++,M>=q)L++,M=0}if(L>A&&M===0)break}if(H===-1)return{start:0,end:-1};return{start:H,end:E}},D=(G,A,W)=>{if(A<0||A>=q)return-1;let H=G*q+A;if(H<0||H>=W)return-1;return H},b=(G)=>{let A=(q-1)*Q;return Math.max(0,(G-A)/q)};return{get columns(){return q},get gap(){return Q},update:(G)=>{if(G.columns!==void 0)q=Math.max(1,Math.floor(G.columns));if(G.gap!==void 0)Q=G.gap;if(G.isHeaderFn!==void 0)j=G.isHeaderFn},getTotalRows:X,getPosition:B,getRow:N,getCol:_,getItemRange:Y,getItemIndex:D,getColumnWidth:b,getColumnOffset:(G,A)=>{let W=b(A);return G*(W+Q)}}};W2();var b1=new Set,SJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:K,emitter:X,config:B,rawConfig:N}=j,{classPrefix:_}=B;if(B.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let Y=B.horizontal,D=()=>Y?K.viewport.clientHeight:j.getContainerWidth(),b=N.items?.some((T)=>T.__groupHeader===!0),O={columns:J.columns,gap:J.gap??0};if(b)O.isHeaderFn=(T)=>{let R=j.dataManager.getItem(T);return!!(R&&R.__groupHeader===!0)};q=D2(O);let y=q.gap;j.setVirtualTotalFn(()=>{let T=j.dataManager.getTotal();return q.getTotalRows(T)});let G=N.item,A=B.horizontal?G.width:G.height,W={containerWidth:D(),columns:q.columns,gap:q.gap},H={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof A==="function")j.setSizeConfig((T)=>{let R=W.containerWidth-2,k=(W.columns-1)*W.gap;return H.containerWidth=W.containerWidth,H.columns=W.columns,H.gap=W.gap,H.columnWidth=(R-k)/W.columns,H.row=q.getRow(T),H.column=q.getCol(T),H.totalRows=q.getTotalRows(j.dataManager.getTotal()),H.totalColumns=W.columns,A(T,H)+W.gap});else if(y>0)j.setSizeConfig(A+y);if(j.rebuildSizeCache(),y>0){let T=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let R=T();return R>0?R-W.gap:0}}K.root.classList.add(`${_}--grid`);let E=D(),L=N.item.template,M=()=>{Q=c0(K.items,L,j.sizeCache,q,_,E,()=>j.dataManager.getTotal(),B.ariaIdPrefix,B.horizontal),j.replaceRenderer(Q)};M(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>O),j.methods.set("_replaceGridRenderer",(T)=>{Q=T}),j.methods.set("_updateGridLayoutForGroups",(T)=>{q.update({isHeaderFn:T});let R=j.dataManager.getTotal(),k=0;for(let l=0;l<R;l++)if(q.getCol(l)===0){let i=j.sizeCache.getSize(l);k+=i}if(j.sizeCache.getTotalSize=()=>k,B.horizontal)j.dom.content.style.width=`${k}px`;else j.dom.content.style.height=`${k}px`;M()}),j.methods.set("updateGrid",(T)=>{if(T.columns!==void 0){if(!Number.isInteger(T.columns)||T.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");O.columns=T.columns}if(T.gap!==void 0){if(T.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");O.gap=T.gap}if(q)q.update(O);let R=D();if(W.containerWidth=R,W.columns=O.columns,W.gap=O.gap??0,Q)Q.updateContainerWidth(R);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let k=0;k<j.contentSizeHandlers.length;k++)j.contentSizeHandlers[k]();if(Q)Q.clear();j.forceRender()});let Z=null,$=null,C=!1,P=()=>{if(C)return;C=!0,Z=j.methods.get("_getSelectedIds")??null,$=j.methods.get("_getFocusedIndex")??null},V=-1,S=-1,o=!0,p=B.overscan??3,d={start:0,end:0},v={start:0,end:0},U=()=>{if(j.state.isDestroyed)return;let T=j.scrollController.getScrollTop(),R=j.state.viewportState.containerSize;if(!o&&T===V&&R===S)return;V=T,S=R,o=!1;let k=j.getVirtualTotal();if(k===0||R===0)d.start=0,d.end=0;else{d.start=Math.max(0,j.sizeCache.indexAtOffset(T));let t=j.sizeCache.indexAtOffset(T+R);if(t<k-1)t++;d.end=Math.min(k-1,Math.max(0,t))}v.start=Math.max(0,d.start-p),v.end=Math.min(k-1,d.end+p);let l=j.state.viewportState;l.scrollPosition=T,l.visibleRange.start=d.start,l.visibleRange.end=d.end,l.renderRange.start=v.start,l.renderRange.end=v.end;let i=j.state.lastRenderRange,z=l.isCompressed,h=j.dataManager.getTotal(),c=q.getItemRange(v.start,v.end,h),a=j.dataManager.getItemsInRange(c.start,c.end),f=z?j.getCompressionContext():void 0;P();let x=Z?Z():b1,n=$?$():-1;if(Q.render(a,c,x,n,f),i.start!==v.start||i.end!==v.end)i.start=v.start,i.end=v.end,X.emit("range:change",{range:{start:v.start,end:v.end}})},w=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,o=!0,U()};j.setRenderFns(U,w);let I=typeof A==="function";if(j.resizeHandlers.push((T,R)=>{let k=Y?R:T;if(W.containerWidth=k,Q)Q.updateContainerWidth(k);if(I){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let l=0;l<j.contentSizeHandlers.length;l++)j.contentSizeHandlers[l]();if(Q)Q.clear();j.forceRender()}}),j.methods.set("scrollToIndex",(T,R)=>{let k=Math.floor(T/J.columns),{align:l,behavior:i}=w0(R),z=j.dataManager.getState(),h=q.getTotalRows(z.total),c=Math.max(0,Math.min(k,h-1)),a=k0(c,j.sizeCache,j.state.viewportState.containerSize,h,l,j.getCachedCompression());if(i==="smooth")j.scrollController.scrollTo(a);else j.scrollController.scrollTo(a)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;K.root.classList.remove(`${_}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};W2();var _2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,K=0,X=[],B=()=>{let W=(q-1)*Q;K=Math.max(0,(j-W)/q),X=Array(q);let H=K+Q;for(let E=0;E<q;E++)X[E]=E*H};B();let N=[],_=0,Y=[],D=(W)=>{let H=0,E=W[0];for(let L=1;L<W.length;L++){let M=W[L];if(M<E)E=M,H=L}return H},b=(W,H)=>{if(W<=0)return _=0,N=[],[];let E=Array(q).fill(0),L=Array(q);for(let $=0;$<q;$++)L[$]=[];let M=Array(W);for(let $=0;$<W;$++){let C=D(E),P=H($),V=E[C];M[$]={index:$,x:X[C],y:V,lane:C,size:P,crossSize:K},L[C].push($),E[C]=V+P+Q}N=L;let Z=0;for(let $=0;$<q;$++){let C=E[$],P=C>0?C-Q:0;if(P>Z)Z=P}return _=Z,M},O=(W)=>{if(W.length===0)return _>0?_:0;if(_>0)return _;let H=Array(q).fill(0);for(let L of W){let M=L.y+L.size,Z=H[L.lane];if(M>Z)H[L.lane]=M}let E=0;for(let L=0;L<q;L++)if(H[L]>E)E=H[L];return E},y=(W,H,E)=>{if(W.length===0||E<=H)return Y.length=0,Y;if(N.length===0||N.length!==q)return G(W,H,E);Y.length=0;for(let L=0;L<q;L++){let M=N[L],Z=M.length;if(Z===0)continue;let $=0,C=Z;while($<C){let P=$+C>>>1,V=W[M[P]];if(V.y+V.size<=H)$=P+1;else C=P}for(let P=$;P<Z;P++){let V=W[M[P]];if(V.y>=E)break;Y.push(V)}}return Y},G=(W,H,E)=>{let L=[];for(let M of W)if(M.y+M.size>H&&M.y<E)L.push(M);return L};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(W)=>{let H=!1;if(W.columns!==void 0){let E=Math.max(1,Math.floor(W.columns));if(E!==q)q=E,H=!0}if(W.gap!==void 0&&W.gap!==Q)Q=W.gap,H=!0;if(W.containerSize!==void 0&&W.containerSize!==j)j=W.containerSize,H=!0;if(H)B()},calculateLayout:b,getTotalSize:O,getVisibleItems:y}};var T1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let B=document.createElement("div");return B.setAttribute("role","option"),B},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var V2=(J,q,Q,j=!1,K,X)=>{let B=T1(),N=new Map,_=new Set,Y=0,D="",b=-1,O={selected:!1,focused:!1},y=(V,S)=>{return O.selected=V,O.focused=S,O},G=`${Q}-item ${Q}-masonry-item`,A=`${Q}-item--selected`,W=`${Q}-item--focused`,H=(V,S)=>{if(typeof S==="string")V.innerHTML=S;else V.replaceChildren(S)},E=(V,S,o)=>{V.classList.toggle(A,S),V.classList.toggle(W,o)},L=(V,S)=>{if(j)V.style.transform=`translate(${Math.round(S.y)}px, ${Math.round(S.x)}px)`;else V.style.transform=`translate(${Math.round(S.x)}px, ${Math.round(S.y)}px)`},M=(V,S)=>{if(j)V.style.width=`${S.size}px`,V.style.height=`${S.crossSize}px`;else V.style.width=`${S.crossSize}px`,V.style.height=`${S.size}px`},Z=(V,S,o,p,d)=>{let v=B.acquire(),U=y(p,d);if(v.className=G,v.dataset.index=String(V),v.dataset.id=String(S.id),v.dataset.lane=String(o.lane),v.ariaSelected=String(p),X)v.id=`${X}-item-${V}`;if(K){let I=K();if(I!==b)b=I,D=String(I);v.setAttribute("aria-setsize",D),v.setAttribute("aria-posinset",String(V+1))}M(v,o);let w=q(S,V,U);return H(v,w),E(v,p,d),L(v,o),{element:v,lastItemId:S.id,lastSelected:p,lastFocused:d,lastY:o.y,lastX:o.x,lastSize:o.size,lastCrossSize:o.crossSize,lastSeenFrame:Y}},$=(V,S,o,p)=>{Y++,_.clear();for(let v=0;v<S.length;v++)_.add(S[v].index);for(let[v,U]of N)if(_.has(v))U.lastSeenFrame=Y;else if(Y-U.lastSeenFrame>2)B.release(U.element),N.delete(v);let d=null;for(let v=0;v<S.length;v++){let U=S[v],w=U.index,I=V(w);if(!I)continue;let T=o.has(I.id),R=w===p,k=N.get(w);if(k){let l=k.lastItemId!==I.id,i=k.lastSelected!==T,z=k.lastFocused!==R,h=k.lastY!==U.y||k.lastX!==U.x,c=k.lastSize!==U.size||k.lastCrossSize!==U.crossSize;if(l||i||z){let a=y(T,R),f=q(I,w,a);H(k.element,f),E(k.element,T,R),k.element.dataset.id=String(I.id),k.element.ariaSelected=String(T),k.lastItemId=I.id,k.lastSelected=T,k.lastFocused=R}if(c)M(k.element,U),k.lastSize=U.size,k.lastCrossSize=U.crossSize;if(h)L(k.element,U),k.lastY=U.y,k.lastX=U.x}else{let l=Z(w,I,U,T,R);if(!d)d=document.createDocumentFragment();d.appendChild(l.element),N.set(w,l)}}if(d)J.appendChild(d)},C=()=>{for(let{element:V}of N.values())B.release(V);N.clear(),J.innerHTML=""};return{render:$,getElement:(V)=>N.get(V)?.element,clear:C,destroy:()=>{C(),B.clear()}}};var y1=new Set,fJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(K){let{dom:X,emitter:B,config:N,rawConfig:_}=K,Y=N.classPrefix,D=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${Y}--masonry`);let b=()=>{return D?X.viewport.clientHeight:X.viewport.clientWidth},O={columns:J.columns,gap:J.gap??0,containerSize:b()};q=_2(O);let y=_.item,G=D&&_.item.width?_.item.width:y.height,A={containerWidth:0,columns:0,gap:0,columnWidth:0},W=typeof G==="function"?(T)=>G(T,A):()=>G,H=()=>{let T=K.dataManager.getTotal(),R=q;A.containerWidth=R.containerSize,A.columns=R.columns,A.gap=R.gap;let k=(R.columns-1)*R.gap;A.columnWidth=Math.max(0,(A.containerWidth-k)/R.columns),j=R.calculateLayout(T,W);let l=q.getTotalSize(j);if(K.sizeCache.getTotalSize=()=>l,D)X.content.style.width=`${l}px`;else X.content.style.height=`${l}px`},E=_.item.template;Q=V2(X.items,E,Y,D,()=>K.dataManager.getTotal(),N.ariaIdPrefix);let L=null,M=null,Z=!1,$=()=>{if(Z)return;Z=!0,L=K.methods.get("_getSelectedIds")??null,M=K.methods.get("_getFocusedIndex")??null},C=(T)=>K.dataManager.getItem(T),P=-1,V=-1,S=!0,o=(N.overscan??3)*100,p=()=>{if(K.state.isDestroyed)return;$();let T=K.scrollController.getScrollTop(),R=K.state.viewportState.containerSize;if(!S&&T===P&&R===V)return;P=T,V=R,S=!1;let k=Math.max(0,T-o),l=T+R+o,i=q.getVisibleItems(j,k,l),z=L?L():y1,h=M?M():-1;if(Q&&i.length>0)Q.render(C,i,z,h);let c=K.state.viewportState;c.scrollPosition=T;let a=i.length,f=a>0?i[0].index:0,x=a>0?i[a-1].index:0;c.visibleRange.start=f,c.visibleRange.end=x,c.renderRange.start=f,c.renderRange.end=x;let n=K.state.lastRenderRange;if(n.start!==f||n.end!==x)n.start=f,n.end=x,B.emit("range:change",{range:{start:f,end:x}})},d=()=>{K.state.lastRenderRange.start=-1,K.state.lastRenderRange.end=-1,S=!0,p()};K.setRenderFns(p,d);let v=(T,R)=>{let k=D?R:T;if(q&&q.containerSize!==k){if(q.update({containerSize:k}),H(),Q)Q.clear();d()}};K.resizeHandlers.push(v);let U=()=>{H(),d()},w=K.dataManager,I=(T)=>{if(typeof w[T]!=="function")return;let R=w[T].bind(w);w[T]=(...k)=>{R(...k),U()}};I("setItems"),I("appendItems"),I("prependItems"),I("updateItem"),I("removeItem"),K.methods.set("scrollToIndex",(T,R,k)=>{let l=j[T];if(!l)return;let i=l.y,z=K.state.viewportState.containerSize,h=i;if(R==="center")h=i-z/2+l.size/2;else if(R==="end")h=i-z+l.size;h=Math.max(0,h),K.scrollController.scrollTo(h,k==="smooth")}),H(),K.destroyHandlers.push(()=>{if(Q)Q.destroy();X.root.classList.remove(`${Y}--masonry`)})}}};var G2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),l0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let K of q)j.add(K);return{...J,selected:j}},r0=(J,q)=>{let Q=new Set(J.selected);for(let j of q)Q.delete(j);return{...J,selected:Q}},p0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return r0(J,[q]);else return l0(J,[q],Q)},M2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},O2=(J)=>({...J,selected:new Set}),A2=(J,q)=>{return J.focusedIndex=q,J},R2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},C2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},z2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},v2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var IJ=(J,q)=>{return J.selected.has(q)},a0=(J)=>{return Array.from(J.selected)},s0=(J,q)=>{let Q=[];for(let j of J.selected){let K=q(j);if(K)Q.push(K)}return Q};var pJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=G2(Q),K=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:B,emitter:N,config:_}=X,{classPrefix:Y,ariaIdPrefix:D}=_;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}B.root.classList.add(`${Y}--selectable`);let b=new Map,O=()=>{b.clear();let E=X.dataManager.getTotal(),L=X.dataManager.getCached();if(L===0)return;if(L>=E){for(let Z=0;Z<E;Z++){let $=X.dataManager.getItem(Z);if($)b.set($.id,Z)}return}let M=X.dataManager.getStorage();if(M&&typeof M.getLoadedRanges==="function"){let Z=M.getLoadedRanges();for(let $ of Z)for(let C=$.start;C<=$.end;C++){let P=X.dataManager.getItem(C);if(P)b.set(P.id,C)}}};N.on("load:end",({items:E,offset:L})=>{if(!E||E.length===0)return;if(L!==void 0)for(let M=0;M<E.length;M++){let Z=E[M];if(Z&&Z.id!==void 0)b.set(Z.id,L+M)}else O()}),O(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:y}=X.getRenderFns(),G=()=>{y();let E=(L)=>{let M=b.get(L);if(M===void 0)return;return X.dataManager.getItem(M)};N.emit("selection:change",{selected:a0(j),items:s0(j,E)})};K=document.createElement("div"),K.setAttribute("aria-live","polite"),K.setAttribute("aria-atomic","true"),K.className=`${Y}-live-region`,K.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",B.root.appendChild(K);let A=K;N.on("selection:change",({selected:E})=>{let L=E.length;if(L===0)A.textContent="";else if(L===1)A.textContent="1 item selected";else A.textContent=`${L} items selected`});let W=()=>{if(X.state.isDestroyed)return;if(!B.root.matches(":focus-visible"))return;let E=X.dataManager.getTotal();if(E===0)return;let L=j.focusedIndex>=0?Math.min(j.focusedIndex,E-1):0;j=A2(j,L),j.focusVisible=!0,B.root.setAttribute("aria-activedescendant",`${D}-item-${L}`),X.scrollController.scrollTo(k0(L,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let M=X.dataManager.getItem(L);if(M)X.renderer.updateItemClasses(L,j.selected.has(M.id),!0)};B.root.addEventListener("focusin",W);let H=(E)=>{if(X.state.isDestroyed)return;let L=E.relatedTarget;if(L&&B.root.contains(L))return;let M=j.focusedIndex;if(j.focusVisible=!1,B.root.removeAttribute("aria-activedescendant"),M>=0){let Z=X.dataManager.getItem(M);if(Z)X.renderer.updateItemClasses(M,j.selected.has(Z.id),!1)}};B.root.addEventListener("focusout",H),X.clickHandlers.push((E)=>{if(X.state.isDestroyed)return;let M=E.target.closest("[data-index]");if(!M)return;let Z=parseInt(M.dataset.index??"-1",10);if(Z<0)return;let $=X.dataManager.getItem(Z);if(!$)return;N.emit("item:click",{item:$,index:Z,event:E}),j=A2(j,Z),j.focusVisible=!1,B.root.setAttribute("aria-activedescendant",`${D}-item-${Z}`),j=p0(j,$.id,q),G()}),X.keydownHandlers.push((E)=>{if(X.state.isDestroyed)return;let L=X.dataManager.getTotal(),M=j.focusedIndex,Z=!1,$=!1,C=j;switch(E.key){case"ArrowUp":C=R2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case"ArrowDown":C=C2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case"Home":C=z2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case"End":C=v2(j,L),C.focusVisible=!0,Z=!0,$=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let P=X.dataManager.getItem(j.focusedIndex);if(P)C=p0(j,P.id,q),C.focusVisible=!0;Z=!0}break}if(Z){E.preventDefault(),j=C;let P=j.focusedIndex;if(P>=0){let V=X.dataManager.getState(),S=k0(P,X.sizeCache,X.state.viewportState.containerSize,V.total,"center",X.getCachedCompression());X.scrollController.scrollTo(S),B.root.setAttribute("aria-activedescendant",`${D}-item-${P}`)}else B.root.removeAttribute("aria-activedescendant");if($){let{selected:V}=j;if(M>=0&&M!==P){let S=X.dataManager.getItem(M);if(S)X.renderer.updateItemClasses(M,V.has(S.id),!1)}if(P>=0){let S=X.dataManager.getItem(P);if(S)X.renderer.updateItemClasses(P,V.has(S.id),!0)}}else G()}}),X.methods.set("select",(...E)=>{j=l0(j,E,q),G()}),X.methods.set("deselect",(...E)=>{j=r0(j,E),G()}),X.methods.set("toggleSelect",(E)=>{j=p0(j,E,q),G()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let E=X.getAllLoadedItems();j=M2(j,E,q),O(),G()}),X.methods.set("clearSelection",()=>{j=O2(j),G()}),X.methods.set("getSelected",()=>{return a0(j)}),X.methods.set("getSelectedItems",()=>{return s0(j,(L)=>{let M=b.get(L);if(M===void 0)return;return X.dataManager.getItem(M)})}),X.destroyHandlers.push(()=>{if(A&&A.parentNode)A.remove();B.root.removeEventListener("focusin",W),B.root.removeEventListener("focusout",H)})},destroy(){if(K&&K.parentNode)K.remove();K=null}}};var hJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let K=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),B=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),_=N&&N().length>0?N():void 0;if(B===0){let O={index:0,offsetInItem:0,total:0};if(_)O.selectedIds=_;return O}let Y,D;if(X.isCompressed){let y=K/X.virtualSize*B;Y=Math.max(0,Math.min(Math.floor(y),B-1)),D=(y-Y)*Q.sizeCache.getSize(Y)}else Y=Q.sizeCache.indexAtOffset(K),D=K-Q.sizeCache.getOffset(Y);D=Math.max(0,D);let b={index:Y,offsetInItem:D,total:B};if(_)b.selectedIds=_;return b});let j=(K)=>{let{index:X,offsetInItem:B,selectedIds:N}=K,_=Q.getVirtualTotal();if(_===0)return;if(!Number.isFinite(X)||!Number.isFinite(B))return;if(Q.sizeCache.getTotal()!==_){Q.sizeCache.rebuild(_),Q.updateCompressionMode();let W=Q.getCachedCompression();Q.updateContentSize(W.virtualSize)}let D=Q.getCachedCompression(),b=Math.max(0,Math.min(X,_-1)),O;if(D.isCompressed){let W=Q.sizeCache.getSize(b),H=W>0?B/W:0;O=(b+H)/_*D.virtualSize}else O=Q.sizeCache.getOffset(b)+B;let y=Q.state.viewportState.containerSize,G=Math.max(0,D.virtualSize-y);if(O=Math.max(0,Math.min(O,G)),Q.scrollController.scrollTo(O),N&&N.length>0){let W=Q.methods.get("select");if(W)W(...N)}let A=Q.methods.get("loadVisibleRange");if(A)requestAnimationFrame(()=>{A()});else{let W=Q.methods.get("reload");if(W)requestAnimationFrame(()=>{W()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};export{hJ as withSnapshots,pJ as withSelection,_J as withScrollbar,MJ as withScale,AJ as withPage,fJ as withMasonry,wJ as withGroups,SJ as withGrid,OJ as withAsync,JJ as vlist,p0 as toggleSelection,FJ as simpleVisibleRange,l0 as selectItems,M2 as selectAll,PJ as rangesEqual,X2 as rafThrottle,NJ as needsScaling,K2 as mergeRanges,IJ as isSelected,C0 as isPlaceholderItem,RJ as isInRange,z0 as isGroupHeader,s0 as getSelectedItems,a0 as getSelectedIds,F0 as getScaleState,DJ as getScaleInfo,F0 as getScale,CJ as getRangeCount,WJ as getMaxItemsWithoutScaling,k2 as filterPlaceholders,zJ as diffRanges,r0 as deselectItems,N2 as createStickyHeader,Y2 as createSparseStorage,H0 as createSizeCache,G2 as createSelectionState,I0 as createScrollbar,GJ as createScrollController,U2 as createPlaceholderManager,t0 as createMeasuredSizeCache,V2 as createMasonryRenderer,_2 as createMasonryLayout,d0 as createGroupedSizeFn,Z2 as createGroupLayout,c0 as createGridRenderer,D2 as createGridLayout,e0 as createEmitter,B2 as createAsyncManager,O2 as clearSelection,kJ as clampScrollPosition,yJ as calculateTotalSize,k0 as calculateScrollToIndex,J2 as calculateScaledVisibleRange,Q2 as calculateScaledScrollToIndex,BJ as calculateScaledRenderRange,f0 as calculateScaledItemPosition,bJ as calculateRenderRange,x0 as calculateMissingRanges,$J as calculateItemOffset,ZJ as calculateIndexFromScrollPosition,HJ as calculateActualSize,m0 as buildLayoutItems,$0 as MAX_VIRTUAL_SIZE,UJ as MAX_VIRTUAL_HEIGHT};
1
+ var{defineProperty:b2,getOwnPropertyNames:Y1,getOwnPropertyDescriptor:K1}=Object,B1=Object.prototype.hasOwnProperty;var d2=new WeakMap,U1=(J)=>{var q=d2.get(J),Q;if(q)return q;if(q=b2({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")Y1(J).map((j)=>!B1.call(q,j)&&b2(q,j,{get:()=>J[j],enumerable:!(Q=K1(J,j))||Q.enumerable}));return d2.set(J,q),q};var Z1=(J,q)=>{for(var Q in q)b2(J,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(j)=>q[Q]=()=>j})};var c2=(J,q)=>()=>(J&&(q=J(J=0)),q);var N1=(J,q)=>{let Q=q;return{getOffset:(j)=>j*J,getSize:(j)=>J,indexAtOffset:(j)=>{if(Q===0||J===0)return 0;return Math.max(0,Math.min(Math.floor(j/J),Q-1))},getTotalSize:()=>Q*J,getTotal:()=>Q,rebuild:(j)=>{Q=j},isVariable:()=>!1}},_1=(J,q)=>{let Q=q,j=new Float64Array(0),Y=(U)=>{Q=U,j=new Float64Array(U+1),j[0]=0;for(let N=0;N<U;N++)j[N+1]=j[N]+J(N)};Y(q);let X=(U)=>{if(Q===0)return 0;if(U<=0)return 0;if(U>=j[Q])return Q-1;let N=0,V=Q-1;while(N<V){let B=N+V+1>>>1;if(j[B]<=U)N=B;else V=B-1}return N};return{getOffset:(U)=>{if(U<=0)return 0;if(U>=Q)return j[Q];return j[U]},getSize:(U)=>J(U),indexAtOffset:(U)=>X(U),getTotalSize:()=>j[Q]??0,getTotal:()=>Q,rebuild:(U)=>Y(U),isVariable:()=>!0}},$0=(J,q)=>{if(typeof J==="number")return N1(J,q);return _1(J,q)},g0=(J,q,Q,j)=>{if(j===0)return 0;if(!J.isVariable())return Math.ceil(Q/J.getSize(0));let Y=0,X=0,U=q;while(U<j&&X<Q)X+=J.getSize(U),Y++,U++;return Math.max(1,Y)},i0=(J,q,Q)=>{if(Q===0)return 0;if(!J.isVariable())return Math.floor(q/J.getSize(0));let j=0,Y=0;for(let X=Q-1;X>=0;X--){let U=J.getSize(X);if(Y+U>q)break;Y+=U,j++}return Math.max(j,1)},k2=(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 P2=200,S0=50,YJ=5,KJ=2,BJ=50,k0=16000000,UJ="x",ZJ=20,R2="_isPlaceholder",NJ="__placeholder_";var _J,L0=(J,q)=>{let Q=q.getTotalSize(),j=Q>k0,Y=j?k0:Q,X=Q>0?Y/Q:1;return{isCompressed:j,actualSize:Q,virtualSize:Y,ratio:X}},J2=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;if(!Y.isCompressed){let O=Q.indexAtOffset(J),H=Q.indexAtOffset(J+q);if(H<j-1)H++;return X.start=Math.max(0,O),X.end=Math.min(j-1,Math.max(0,H)),X}let{virtualSize:U}=Y,V=J/U*j,B=Math.floor(V),W=g0(Q,Math.max(0,B),q,j),k=Math.ceil(V)+W,z=U-q-J;if(z<=q&&z>=-1){let O=i0(Q,q,j),H=Math.max(0,j-O),Z=Math.max(0,Math.min(1,1-z/q));B=Math.floor(B+(H-B)*Z),k=z<=1?j-1:Math.min(j-1,B+W)}return X.start=Math.max(0,B),X.end=Math.min(j-1,Math.max(0,k)),X},DJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},f0=(J,q,Q,j,Y,X,U)=>{if(!X.isCompressed||j===0)return Q.getOffset(J);let{virtualSize:N}=X,V=N-Y,B=V-q;if(B<=Y&&B>=-1){if(q>=V-1){let M=Q.getTotalSize()-Q.getOffset(J);return Y-M}let z=i0(Q,Y,j),O=Math.max(0,j-z),Z=q/N*j,b=Math.max(0,Math.min(1,1-B/Y)),F=Q.getOffset(J)-Q.getOffset(O),T=Q.getOffset(J)-k2(Q,Z,j);return T+(F-T)*b}let W=q/N,k=Q.getTotalSize(),L=W*k;return Q.getOffset(J)-L},Q2=(J,q,Q,j,Y,X="start")=>{if(j===0)return 0;let U;if(Y.isCompressed){if(X==="end"&&J===j-1)return Math.max(0,Y.virtualSize-Q);U=J/j*Y.virtualSize}else U=q.getOffset(J);let N=q.getSize(J);switch(X){case"center":U-=(Q-N)/2;break;case"end":U-=Q-N;break}let V=Y.virtualSize-Q;return Math.max(0,Math.min(U,V))},VJ=(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)},GJ=(J,q)=>{if(typeof q==="number")return J*q>k0;return q.getTotalSize()>k0},WJ=(J)=>{if(J<=0)return 0;return Math.floor(k0/J)},MJ=(J,q)=>{let Q=L0(J,q);if(!Q.isCompressed)return`No compression needed (${J} items, ${(Q.actualSize/1e6).toFixed(2)}M px)`;return`Compressed to ${(Q.ratio*100).toFixed(1)}% (${J} items, ${(Q.actualSize/1e6).toFixed(1)}M px → ${(Q.virtualSize/1e6).toFixed(1)}M px virtual)`};var j2=c2(()=>{_J=k0});var C0=(J)=>{return J!==null&&typeof J==="object"&&J.__groupHeader===!0};var IJ={};Z1(IJ,{createGridRenderer:()=>c0});var $1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},k1=2,c0=(J,q,Q,j,Y,X,U,N,V=!1)=>{let B=$1(),W=new Map,k=X,L=!1,z=null,O=0,H=0,Z="",b=-1,F=($)=>{if(z&&O===$)return z;return z=L0($,Q),O=$,z},T={selected:!1,focused:!1},M=($,v)=>{return T.selected=$,T.focused=v,T},D=`${Y}-item ${Y}-grid-item`,C=`${Y}-item--selected`,I=`${Y}-item--focused`,f=($,v)=>{if(typeof v==="string")$.innerHTML=v;else $.replaceChildren(v)},A=($,v,S)=>{$.classList.toggle(C,v),$.classList.toggle(I,S)},p=($,v)=>{let S=j.getRow($);if(v){let m=v.totalItems,w=F(m);if(w.isCompressed)return f0(S,v.scrollPosition,Q,m,v.containerSize,w,v.rangeStart)}return Q.getOffset(S)},o=($,v)=>{let S=L&&j.getCol($)===0,m=S?0:j.getCol($),w=S?0:j.getColumnOffset(m,k),d;if(L){let i=j.getRow($),e=0,t=new Set;for(let K0=0;K0<$;K0++){let B0=j.getRow(K0);if(B0<i&&!t.has(B0)){let c=Q.getSize(K0);e+=c,t.add(B0)}}d=e}else d=p($,v);if(V)return`translate(${Math.round(d)}px, ${Math.round(w)}px)`;return`translate(${Math.round(w)}px, ${Math.round(d)}px)`},g=($,v)=>{$.style.transform=v},l=($,v)=>{let S=$.dataset.id?.startsWith("__group_header"),m=S?k:j.getColumnWidth(k),w;if(L||S)w=Q.getSize(v)-j.gap;else{let d=j.getRow(v);w=Q.getSize(d)-j.gap}if(V)$.style.width=`${w}px`,$.style.height=`${m}px`;else $.style.width=`${m}px`,$.style.height=`${w}px`},h=($,v,S,m,w)=>{let d=B.acquire(),i=M(S,m);if(d.className=D,d.dataset.index=String($),d.dataset.id=String(v.id),d.dataset.row=String(j.getRow($)),d.dataset.col=String(j.getCol($)),d.ariaSelected=String(S),N)d.id=`${N}-item-${$}`;if(U){let t=U();if(t!==b)b=t,Z=String(t);d.setAttribute("aria-setsize",Z),d.setAttribute("aria-posinset",String($+1))}l(d,$);let e=q(v,$,i);return f(d,e),A(d,S,m),g(d,w),{element:d,lastItemId:v.id,lastSelected:S,lastFocused:m,lastTransform:w,lastSeenFrame:H}},K=($,v,S,m,w)=>{if(H++,v.start===0&&$.length>0)L=C0($[0]);for(let[e,t]of W)if(e>=v.start&&e<=v.end)t.lastSeenFrame=H;else if(H-t.lastSeenFrame>k1)B.release(t.element),W.delete(e);let d=!1;if(U){let e=U();if(e!==b)b=e,Z=String(e),d=!0}let i=null;for(let e=v.start;e<=v.end;e++){let t=e-v.start,K0=$[t];if(!K0){console.warn(`⚠️ RENDER: Missing item at index ${e} (range: ${v.start}-${v.end}, items.length: ${$.length})`);continue}let B0=S.has(K0.id),c=e===m,a=W.get(e);if(a){let Q0=a.lastItemId!==K0.id,Y0=a.lastSelected!==B0,J0=a.lastFocused!==c;if(Q0||Y0||J0){if(Q0){let W0=M(B0,c),F0=q(K0,e,W0);f(a.element,F0),a.element.dataset.id=String(K0.id),a.element.dataset.row=String(j.getRow(e)),a.element.dataset.col=String(j.getCol(e)),l(a.element,e)}A(a.element,B0,c),a.element.ariaSelected=String(B0),a.lastItemId=K0.id,a.lastSelected=B0,a.lastFocused=c}let Z0=o(e,w);if(a.lastTransform!==Z0)g(a.element,Z0),a.lastTransform=Z0;if(d)a.element.setAttribute("aria-setsize",Z)}else{let Q0=o(e,w),Y0=h(e,K0,B0,c,Q0);if(!i)i=document.createDocumentFragment();i.appendChild(Y0.element),W.set(e,Y0)}}if(i)J.appendChild(i)},G=($)=>{for(let[v,S]of W){let m=o(v,$);if(S.lastTransform!==m)g(S.element,m),S.lastTransform=m}},y=($,v,S,m)=>{let w=W.get($);if(!w)return;let d=w.lastItemId!==v.id,i=w.lastSelected!==S,e=w.lastFocused!==m;if(d||i||e){let t=M(S,m),K0=q(v,$,t);f(w.element,K0),A(w.element,S,m),w.element.dataset.id=String(v.id),w.element.ariaSelected=String(S),l(w.element,$),w.lastItemId=v.id,w.lastSelected=S,w.lastFocused=m}},_=($,v,S)=>{let m=W.get($);if(!m)return;let w=m.lastSelected!==v,d=m.lastFocused!==S;if(w||d)A(m.element,v,S),m.lastSelected=v,m.lastFocused=S},E=($)=>{return W.get($)?.element},P=($)=>{if(Math.abs($-k)<1)return;k=$;for(let[v,S]of W){l(S.element,v);let m=o(v);g(S.element,m),S.lastTransform=m}},u=()=>{for(let[,$]of W)B.release($.element);W.clear()};return{render:K,updatePositions:G,updateItem:y,updateItemClasses:_,getElement:E,updateContainerWidth:P,clear:u,destroy:()=>{u(),B.clear()}}};var _2=c2(()=>{j2()});var l2=2,r2=(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}},$2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let Y=J.samples[J.sampleIndex];if(Y.position=q,Y.time=Q,J.sampleIndex=(J.sampleIndex+1)%5,J.sampleCount=Math.min(J.sampleCount+1,5),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+5)%5,U=J.samples[X],N=q-U.position,V=Q-U.time;J.velocity=V>0?Math.abs(N)/V:0}return J.lastPosition=q,J.lastTime=Q,J};var t0=(J,q)=>{let Q=new Map,j=(X)=>{let U=Q.get(X);return U!==void 0?U:J},Y=$0(j,q);return{getOffset(X){return Y.getOffset(X)},getSize(X){return j(X)},indexAtOffset(X){return Y.indexAtOffset(X)},getTotalSize(){return Y.getTotalSize()},getTotal(){return Y.getTotal()},rebuild(X){if(X<Y.getTotal()){for(let U of Q.keys())if(U>=X)Q.delete(U)}Y=$0(j,X)},isVariable(){return!0},setMeasuredSize(X,U){Q.set(X,U)},isMeasured(X){return Q.has(X)},getEstimatedSize(){return J},measuredCount(){return Q.size}}};var e0=()=>{let J={},q=(N,V)=>{if(!J[N])J[N]=new Set;return J[N].add(V),()=>Q(N,V)},Q=(N,V)=>{J[N]?.delete(V)};return{on:q,off:Q,emit:(N,V)=>{J[N]?.forEach((B)=>{try{B(V)}catch(W){console.error(`[vlist] Error in event handler for "${String(N)}":`,W)}})},once:(N,V)=>{let B=(W)=>{Q(N,B),V(W)};return q(N,B)},clear:(N)=>{if(N)delete J[N];else for(let V in J)delete J[V]},listenerCount:(N)=>{return J[N]?.size??0}}};var a2=(J)=>{if(typeof J==="string"){let q=document.querySelector(J);if(!q)throw Error(`[vlist/builder] Container not found: ${J}`);return q}return J},s2=(J,q,Q,j)=>{let Y=document.createElement("div");if(Y.className=q,j)Y.classList.add(`${q}--horizontal`);if(Y.setAttribute("role","listbox"),Y.setAttribute("tabindex","0"),Q)Y.setAttribute("aria-label",Q);if(j)Y.setAttribute("aria-orientation","horizontal");let X=document.createElement("div");if(X.className=`${q}-viewport`,X.setAttribute("tabindex","-1"),j)X.style.overflowX="auto",X.style.overflowY="hidden";else X.style.overflow="auto";X.style.height="100%",X.style.width="100%";let U=document.createElement("div");if(U.className=`${q}-content`,U.style.position="relative",j)U.style.height="100%";else U.style.width="100%";let N=document.createElement("div");if(N.className=`${q}-items`,N.style.position="relative",j)N.style.height="100%";else N.style.width="100%";return U.appendChild(N),X.appendChild(U),Y.appendChild(X),J.appendChild(Y),{root:Y,viewport:X,content:U,items:N}};var n2=(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 o2=(J,q,Q,j,Y)=>{if(j===0||q===0){Y.start=0,Y.end=0;return}let X=Q.indexAtOffset(J),U=g0(Q,X,q,j),N=X+U;Y.start=Math.max(0,X),Y.end=Math.min(j-1,Math.max(0,N))},i2=(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)},t2=(J,q,Q,j,Y)=>{if(j===0)return 0;let X=Math.max(0,Math.min(J,j-1)),U=q.getOffset(X),N=q.getSize(X),V=Math.max(0,q.getTotalSize()-Q),B;switch(Y){case"center":B=U-(Q-N)/2;break;case"end":B=U-Q+N;break;default:B=U}return Math.max(0,Math.min(B,V))};var y2=(J)=>J<0.5?2*J*J:-1+(4-2*J)*J,v0=(J)=>{if(typeof J==="string")return{align:J,behavior:"auto",duration:300};if(J&&typeof J==="object")return{align:J.align??"start",behavior:J.behavior??"auto",duration:J.duration??300};return{align:"start",behavior:"auto",duration:300}},e2=(J,q)=>{let Q=null,j=()=>{if(Q!==null)cancelAnimationFrame(Q),Q=null};return{animateScroll:(X,U,N)=>{if(j(),Math.abs(U-X)<1){J.scrollTo(U);return}let V=performance.now(),B=(W)=>{let k=W-V,L=Math.min(k/N,1),z=X+(U-X)*y2(L);if(J.scrollTo(z),q(),L<1)Q=requestAnimationFrame(B);else Q=null};Q=requestAnimationFrame(B)},cancelScroll:j}};var JJ=(J,q)=>{let{dom:Q,emitter:j,resolvedConfig:Y,rawConfig:X,rendered:U,pool:N,sharedState:V,isHorizontal:B,classPrefix:W,contentSizeHandlers:k,afterScroll:L,clickHandlers:z,keydownHandlers:O,resizeHandlers:H,destroyHandlers:Z,methods:b,onScrollFrame:F,resizeObserver:T,renderRange:M}=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,C,I,f,A)=>{J.ss=I,J.fi=f,J.ffn()},updateItemClasses:(D,C,I)=>{let f=U.get(D);if(!f)return;f.classList.toggle(`${W}-item--selected`,C),f.classList.toggle(`${W}-item--focused`,I),f.ariaSelected=C?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(D)=>U.get(D)??null,clear:()=>{},destroy:()=>{}}},set renderer(D){},get dataManager(){return J.dm},set dataManager(D){J.dm=D},get scrollController(){return J.sc},set scrollController(D){J.sc=D},state:V,getContainerWidth(){return J.cw},afterScroll:L,clickHandlers:z,keydownHandlers:O,resizeHandlers:H,contentSizeHandlers:k,destroyHandlers:Z,methods:b,replaceTemplate(D){J.at=D},replaceRenderer(D){},replaceDataManager(D){J.dm=D},replaceScrollController(D){J.sc=D},getItemsForRange(D){let{dm:C,it:I}=J,f=[];for(let A=D.start;A<=D.end;A++){let p=C?C.getItem(A):I[A];if(p)f.push(p)}return f},getAllLoadedItems(){let D=J.dm;if(D){let C=D.getTotal(),I=[];for(let f=0;f<C;f++){let A=D.getItem(f);if(A)I.push(A)}return I}return[...J.it]},getVirtualTotal(){return J.vtf()},getCachedCompression(){let D=J.hc;return{isCompressed:!1,actualSize:D.getTotalSize(),virtualSize:D.getTotalSize(),ratio:1}},getCompressionContext(){return{scrollPosition:J.ls,totalItems:J.vtf(),containerSize:J.ch,rangeStart:M.start}},renderIfNeeded(){J.rfn()},forceRender(){J.ffn()},invalidateRendered(){for(let[,D]of U)D.remove(),N.release(D);U.clear()},getRenderFns(){return{renderIfNeeded:J.rfn,forceRender:J.ffn}},setRenderFns(D,C){J.rfn=D,J.ffn=C},setVirtualTotalFn(D){J.vtf=D},rebuildSizeCache(D){J.hc.rebuild(D??J.vtf())},setSizeConfig(D){J.hc=$0(D,J.vtf())},updateContentSize(D){let C=`${D}px`;if(B)Q.content.style.width=C;else Q.content.style.height=C},updateCompressionMode(){},setVisibleRangeFn(D){J.gvr=D},setScrollToPosFn(D){J.gsp=D},setPositionElementFn(D){J.pef=D},setScrollFns(D,C){J.sgt=D,J.sst=(I)=>{C(I),F()}},setScrollTarget(D){J.st.removeEventListener("scroll",F),J.st=D,J.st.addEventListener("scroll",F,{passive:!0})},getScrollTarget(){return J.st},setContainerDimensions(D){J.gcw=D.width,J.gch=D.height,J.cw=D.width(),J.ch=D.height(),V.viewportState.containerSize=B?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:U,updateContentSize:N}=q,V=()=>{J.hc.rebuild(J.vtf()),N(),Q.updateCompressionMode();for(let B=0;B<X.length;B++)X[B]();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:(B)=>J.it[B],isItemLoaded:(B)=>B>=0&&B<J.it.length&&J.it[B]!==void 0,getItemsInRange:(B,W)=>{let k=J.it,L=[],z=Math.max(0,B),O=Math.min(W,k.length-1);for(let H=z;H<=O;H++)L.push(k[H]);return L},setTotal:(B)=>{},setItems:(B,W=0,k)=>{let L=J.it;if(W===0&&(k!==void 0||L.length===0))J.it=B;else{let z=W+B.length;if(L.length<z)L.length=z;for(let O=0;O<B.length;O++)L[W+O]=B[O]}if(J.ii)V()},updateItem:(B,W)=>{let k=J.it;if(B<0||B>=k.length)return!1;let L=k[B];if(!L)return!1;k[B]={...L,...W};let z=j.get(B);if(z)U(z,J.at(k[B],B,Y)),z.dataset.id=String(k[B].id);return!0},removeItem:(B)=>{if(B<0||B>=J.it.length)return!1;if(J.it.splice(B,1),J.ii)V();return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{J.it=[]},reset:()=>{if(J.it=[],J.ii)J.hc.rebuild(0),N(),J.ffn()}}},jJ=(J,q)=>{let{dom:Q,classPrefix:j}=q;return{getScrollTop:()=>J.sgt(),scrollTo:(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 D1=3,V1="vlist",qJ=150,G1=0,XJ=(J)=>{if(!J.container)throw Error("[vlist/builder] Container is required");if(!J.item)throw Error("[vlist/builder] item configuration is required");let q=J.orientation==="horizontal",Q=q?"width":"height",j=q?"estimatedWidth":"estimatedHeight",Y=q?J.item.width:J.item.height,X=q?J.item.estimatedWidth:J.item.estimatedHeight;if(Y==null&&X==null)throw Error(`[vlist/builder] item.${Q} or item.${j} is required${q?" when orientation is 'horizontal'":""}`);if(Y!=null){if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${Q} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${Q} must be a number or a function (index) => number`)}else if(X!=null){if(typeof X!=="number"||X<=0)throw Error(`[vlist/builder] item.${j} must be a positive number`)}if(!J.item.template)throw Error("[vlist/builder] item.template is required");if(q&&J.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let U=new Map,N=!1,V={use(B){if(N)throw Error("[vlist/builder] Cannot call .use() after .build()");return U.set(B.name,B),V},build(){if(N)throw Error("[vlist/builder] .build() can only be called once");return N=!0,W1(J,U,q,Y,X??null)}};return V};function W1(J,q,Q,j,Y){let{item:X,items:U,overscan:N=D1,classPrefix:V=V1,ariaLabel:B,reverse:W=!1,scroll:k}=J,L=k,z=L?.wheel??!0,O=L?.wrap??!1,H=W,Z=`${V}-${G1++}`,b=j??Y,F=j==null&&Y!=null,T=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2,M=Q?typeof X.height==="number"?X.height:void 0:typeof X.width==="number"?X.width:void 0,D={overscan:N,classPrefix:V,reverse:H,wrap:O,horizontal:Q,ariaIdPrefix:Z},C=Array.from(q.values()).sort((R,r)=>(R.priority??50)-(r.priority??50)),I=new Set(C.map((R)=>R.name));for(let R of C)if(R.conflicts){for(let r of R.conflicts)if(I.has(r))throw Error(`[vlist/builder] ${R.name} and ${r} cannot be combined`)}if(H){if(I.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true")}let f=a2(J.container),A=s2(f,V,B,Q);if(L?.wheel===!1)if(Q)A.viewport.style.overflowX="hidden";else A.viewport.style.overflow="hidden";if(L?.scrollbar==="none")A.viewport.classList.add(`${V}-viewport--no-scrollbar`);let p=e0(),o=U||[],g=typeof b==="function"&&(q.has("withGrid")||q.has("withMasonry")),l=F?t0(Y,o.length):$0(b,g?0:o.length),h=n2(),K={it:o,hc:l,ch:A.viewport.clientHeight,cw:A.viewport.clientWidth,id:!1,ii:!1,ls:0,vt:r2(0),ss:new Set,fi:-1,la:"",dm:null,sc:null,vtf:null,sgt:Q?()=>A.viewport.scrollLeft:()=>A.viewport.scrollTop,sst:Q?(R)=>{A.viewport.scrollLeft=R}:(R)=>{A.viewport.scrollTop=R},sab:(R=2)=>{let r=K.hc.getTotalSize();return K.ls+K.ch>=r-R},sic:!1,rfn:null,ffn:null,gvr:(R,r,s,n,j0)=>{o2(R,r,s,n,j0)},gsp:(R,r,s,n,j0)=>{return t2(R,r,s,n,j0)},pef:null,at:X.template,vre:!0,st:A.viewport,wh:null,gcw:()=>K.cw,gch:()=>K.ch};K.vtf=()=>K.dm?K.dm.getTotal():K.it.length;let G=null,y=null,_=!1,E={start:0,end:0},P={start:0,end:0},u={start:-1,end:-1},x={viewportState:{scrollPosition:0,containerSize:Q?K.cw:K.ch,totalSize:K.hc.getTotalSize(),actualSize:K.hc.getTotalSize(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},$=new Map,v=F?new WeakMap:null,S=F?l:null,m=null,w=0,d=!1,i=()=>{if(!F)return;if(d){let R=K.sgt(),r=Q?A.viewport.scrollWidth-A.viewport.clientWidth:A.viewport.scrollHeight-A.viewport.clientHeight,s=r>0&&R>=r-2;if(M0(),d=!1,s){let n=Math.max(0,K.hc.getTotalSize()-(Q?K.cw:K.ch));if(n>R)K.sst(n),K.ls=n,K.rfn()}}};if(F&&S&&v)m=new ResizeObserver((R)=>{if(K.id)return;let r=!1,s=E.start;for(let n of R){let j0=v.get(n.target);if(j0===void 0)continue;let q0=Q?n.borderBoxSize[0].inlineSize:n.borderBoxSize[0].blockSize;if(!S.isMeasured(j0)){let X0=S.getSize(j0);if(S.setMeasuredSize(j0,q0),r=!0,j0<s&&q0!==X0)w+=q0-X0;m.unobserve(n.target);let N0=n.target;if(Q)N0.style.width=`${q0}px`;else N0.style.height=`${q0}px`}}if(!r)return;if(S.rebuild(K.vtf()),K.hc=S,w!==0){let n=K.sgt();K.sst(n+w),K.ls=n+w,w=0}if(_)d=!0;else{let n=K.sgt(),j0=Q?A.viewport.scrollWidth-A.viewport.clientWidth:A.viewport.scrollHeight-A.viewport.clientHeight,q0=j0>0&&n>=j0-2;if(M0(),d=!1,q0){let X0=Math.max(0,K.hc.getTotalSize()-(Q?K.cw:K.ch));if(X0>n)K.sst(X0),K.ls=X0}}u.start=-1,u.end=-1,K.rfn()});let e={selected:!1,focused:!1},t=`${V}-item`,K0=[],B0=[],c=[],a=[],Q0=[],Y0=[],J0=new Map,Z0=null,W0=null,F0=!1,_0=()=>{if(F0)return;F0=!0,Z0=J0.get("_getSelectedIds")??null,W0=J0.get("_getFocusedIndex")??null},T0=(R,r)=>{if(typeof r==="string")R.innerHTML=r;else R.replaceChildren(r)},P0=(R,r)=>{let s=Math.round(K.hc.getOffset(r));if(Q)R.style.transform=`translateX(${s}px)`;else R.style.transform=`translateY(${s}px)`};K.pef=P0;let D0=(R,r)=>{let s=h.acquire();s.className=t;let n=!F||S&&S.isMeasured(R);if(Q){if(n)s.style.width=`${K.hc.getSize(R)}px`;else s.style.width="";if(M!=null)s.style.height=`${M}px`}else if(n)s.style.height=`${K.hc.getSize(R)}px`;else s.style.height="";if(s.dataset.index=String(R),s.dataset.id=String(r.id),s.ariaSelected="false",s.id=`${Z}-item-${R}`,K.la=String(K.vtf()),s.setAttribute("aria-setsize",K.la),s.setAttribute("aria-posinset",String(R+1)),String(r.id).startsWith("__placeholder_"))s.classList.add(`${V}-item--placeholder`);return T0(s,K.at(r,R,e)),K.pef(s,R),s},M0=()=>{let R=`${K.hc.getTotalSize()}px`;if(Q)A.content.style.width=R;else A.content.style.height=R},V0=()=>{if(K.id)return;_0();let R=Z0?Z0():K.ss,r=W0?W0():K.fi,s=K.vtf(),n=Q?K.cw:K.ch;if(K.gvr(K.ls,n,K.hc,s,E),i2(E,N,s,P),P.start===u.start&&P.end===u.end){if(K.sic)for(let[U0,G0]of $)K.pef(G0,U0);return}let j0=String(s),q0=j0!==K.la;K.la=j0;for(let[U0,G0]of $)if(U0<P.start||U0>P.end)G0.remove(),h.release(G0),$.delete(U0);let X0=document.createDocumentFragment(),N0=[],E0=[];for(let U0=P.start;U0<=P.end;U0++){let G0=K.dm?K.dm.getItem(U0):K.it[U0];if(G0===void 0)continue;let A0=$.get(U0);if(A0){let b0=A0.dataset.id,h0=String(G0.id);if(b0!==h0){let X1=b0?.startsWith("__placeholder_"),x2=h0.startsWith("__placeholder_");T0(A0,K.at(G0,U0,e)),A0.dataset.id=h0;let m2=!F||S&&S.isMeasured(U0);if(Q)A0.style.width=m2?`${K.hc.getSize(U0)}px`:"";else A0.style.height=m2?`${K.hc.getSize(U0)}px`:"";if(x2)A0.classList.add(`${V}-item--placeholder`);else A0.classList.remove(`${V}-item--placeholder`);if(X1&&!x2)A0.classList.add(`${V}-item--replaced`),setTimeout(()=>{A0.classList.remove(`${V}-item--replaced`)},300)}K.pef(A0,U0);let o0=R.has(G0.id),q1=U0===r;if(A0.classList.toggle(`${V}-item--selected`,o0),A0.classList.toggle(`${V}-item--focused`,q1),A0.ariaSelected=o0?"true":"false",q0)A0.setAttribute("aria-setsize",K.la)}else{let b0=D0(U0,G0);E0.push({index:U0,element:b0});let h0=R.has(G0.id),o0=U0===r;if(h0)b0.classList.add(`${V}-item--selected`),b0.ariaSelected="true";if(o0)b0.classList.add(`${V}-item--focused`);X0.appendChild(b0),N0.push({index:U0,element:b0})}}if(N0.length>0){A.items.appendChild(X0);for(let{index:U0,element:G0}of N0)$.set(U0,G0)}if(F&&m&&S&&v){for(let{index:U0,element:G0}of E0)if(!S.isMeasured(U0))v.set(G0,U0),m.observe(G0)}u.start=P.start,u.end=P.end,x.lastRenderRange.start=P.start,x.lastRenderRange.end=P.end,x.viewportState.scrollPosition=K.ls,x.viewportState.visibleRange.start=E.start,x.viewportState.visibleRange.end=E.end,x.viewportState.renderRange.start=P.start,x.viewportState.renderRange.end=P.end,p.emit("range:change",{range:{start:P.start,end:P.end}})},H0=()=>{u.start=-1,u.end=-1,K.rfn()};K.rfn=V0,K.ffn=H0;let R0=()=>{if(K.id)return;let R=K.sgt(),r=R>=K.ls?"down":"up";if(K.vt=$2(K.vt,R),!A.root.classList.contains(`${V}--scrolling`))A.root.classList.add(`${V}--scrolling`);_=!0,K.ls=R,K.rfn(),p.emit("scroll",{scrollPosition:R,direction:r}),p.emit("velocity:change",{velocity:K.vt.velocity,reliable:K.vt.sampleCount>=l2});for(let s=0;s<K0.length;s++)K0[s](R,r);if(y)clearTimeout(y);y=setTimeout(()=>{A.root.classList.remove(`${V}--scrolling`),_=!1,K.vt.velocity=0,K.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),i()},L?.idleTimeout??qJ)},w0=null;if(K.st.addEventListener("scroll",R0,{passive:!0}),z&&!Q&&!T)w0=(R)=>{R.preventDefault();let r=K.sgt(),s=R.deltaY,n=Math.max(0,Math.min(r+s,K.hc.getTotalSize()-K.ch));K.sst(n),K.ls=n,K.vt=$2(K.vt,n),K.rfn();let j0=n>=r?"down":"up";if(p.emit("scroll",{scrollPosition:n,direction:j0}),!A.root.classList.contains(`${V}--scrolling`))A.root.classList.add(`${V}--scrolling`);if(_=!0,y)clearTimeout(y);y=setTimeout(()=>{A.root.classList.remove(`${V}--scrolling`),_=!1,K.vt.velocity=0,K.vt.sampleCount=0,p.emit("velocity:change",{velocity:0,reliable:!1}),i()},L?.idleTimeout??qJ)},K.wh=w0,A.viewport.addEventListener("wheel",w0,{passive:!1});else if(Q&&z)w0=(R)=>{if(R.deltaX)return;R.preventDefault(),A.viewport.scrollLeft+=R.deltaY},K.wh=w0,A.viewport.addEventListener("wheel",w0,{passive:!1});let p2=(R)=>{let s=R.target.closest("[data-index]");if(s){let n=parseInt(s.dataset.index??"-1",10);if(n>=0){let j0=K.dm?.getItem(n)??K.it[n];if(j0){if(j0.__groupHeader)return;p.emit("item:click",{item:j0,index:n,event:R})}}}for(let n=0;n<B0.length;n++)B0[n](R)},cJ=(R)=>{let s=R.target.closest("[data-index]");if(s){let n=parseInt(s.dataset.index??"-1",10);if(n>=0){let j0=K.dm?.getItem(n)??K.it[n];if(j0){if(j0.__groupHeader)return;p.emit("item:dblclick",{item:j0,index:n,event:R})}}}},h2=(R)=>{for(let r=0;r<c.length;r++)c[r](R)};A.items.addEventListener("click",p2),A.items.addEventListener("dblclick",cJ),A.root.addEventListener("keydown",h2);let T2=new ResizeObserver((R)=>{if(K.id)return;for(let r of R){let s=r.contentRect.height,n=r.contentRect.width,j0=Q?n:s,q0=Q?K.cw:K.ch;if(K.cw=n,K.ch=s,Math.abs(j0-q0)>1){if(x.viewportState.containerSize=j0,K.ii)M0(),K.rfn(),p.emit("resize",{height:s,width:n})}if(K.ii)for(let X0=0;X0<a.length;X0++)a[X0](n,s)}});if(K.vre)T2.observe(A.viewport);let H2={dom:A,emitter:p,resolvedConfig:D,rawConfig:J,rendered:$,pool:h,itemState:e,sharedState:x,renderRange:P,isHorizontal:Q,classPrefix:V,contentSizeHandlers:Q0,afterScroll:K0,clickHandlers:B0,keydownHandlers:c,resizeHandlers:a,destroyHandlers:Y0,methods:J0,onScrollFrame:R0,resizeObserver:T2,applyTemplate:T0,updateContentSize:M0},O0=JJ(K,H2);K.dm=QJ(K,H2,O0),K.sc=jJ(K,H2);let u2=new Map;for(let R of C)if(R.methods)for(let r of R.methods){let s=u2.get(r);if(s)throw Error(`[vlist/builder] Method "${r}" is registered by both "${s}" and "${R.name}"`);u2.set(r,R.name)}for(let R of C)R.setup(O0);if(!J0.has("_getFocusedIndex")){let R=-1,r=`${V}-item--focused`,s=(q0,X0)=>{let N0=K.vtf();if(X0<0||X0>=N0)return;R=X0,A.root.setAttribute("aria-activedescendant",`${Z}-item-${X0}`);let E0=Q?K.cw:K.ch;if(K.sst(K.gsp(X0,K.hc,E0,N0,"center")),K.ls=K.sgt(),K.rfn(),q0>=0&&q0!==X0)$.get(q0)?.classList.remove(r);$.get(X0)?.classList.add(r)},n=()=>{if(K.id)return;if(!A.root.matches(":focus-visible"))return;let q0=K.vtf();if(q0===0)return;s(-1,R>=0?Math.min(R,q0-1):0)};A.root.addEventListener("focusin",n);let j0=(q0)=>{if(K.id)return;let X0=q0.relatedTarget;if(X0&&A.root.contains(X0))return;if(R>=0)$.get(R)?.classList.remove(r);A.root.removeAttribute("aria-activedescendant")};A.root.addEventListener("focusout",j0),c.push((q0)=>{if(K.id)return;let X0=K.vtf();if(X0===0)return;let N0=R,E0=N0;switch(q0.key){case"ArrowUp":E0=N0<=0?X0-1:N0-1;break;case"ArrowDown":E0=N0>=X0-1?0:N0+1;break;case"Home":E0=0;break;case"End":E0=X0-1;break;default:return}q0.preventDefault(),s(N0,E0)}),Y0.push(()=>{A.root.removeEventListener("focusin",n),A.root.removeEventListener("focusout",j0)})}if(K.ii=!0,O0.state.isInitialized=!0,M0(),K.rfn(),H&&K.it.length>0){let R=K.gsp(K.it.length-1,K.hc,K.ch,K.it.length,"end");K.sst(R),K.ls=R,K.rfn()}let lJ=(R)=>{O0.dataManager.setItems(R,0,R.length)},rJ=H?(R)=>{let r=K.sab(2),s=K.it.length;if(O0.dataManager.setItems(R,s),r&&K.it.length>0){let n=K.gsp(K.it.length-1,K.hc,K.ch,K.it.length,"end");K.sst(n),K.ls=n,K.rfn()}}:(R)=>{let r=K.it.length;O0.dataManager.setItems(R,r)},aJ=H?(R)=>{let r=K.sgt(),s=K.hc.getTotalSize(),n=[...K.it];O0.dataManager.clear(),O0.dataManager.setItems([...R,...n],0);let q0=K.hc.getTotalSize()-s;if(q0>0)K.sst(r+q0),K.ls=r+q0}:(R)=>{let r=[...K.it];O0.dataManager.clear(),O0.dataManager.setItems([...R,...r],0)},sJ=(R,r)=>{O0.dataManager.updateItem(R,r)},nJ=(R)=>{O0.dataManager.removeItem(R)},oJ=async()=>{if(O0.dataManager.reload)await O0.dataManager.reload()},n0=()=>{if(G!==null)cancelAnimationFrame(G),G=null},iJ=(R,r,s)=>{if(n0(),Math.abs(r-R)<1){K.sst(r),K.ls=r,K.rfn();return}let n=performance.now(),j0=(q0)=>{let X0=q0-n,N0=Math.min(X0/s,1),E0=R+(r-R)*y2(N0);if(K.sst(E0),K.ls=E0,K.rfn(),N0<1)G=requestAnimationFrame(j0);else G=null};G=requestAnimationFrame(j0)},tJ=(R,r)=>{let{align:s,behavior:n,duration:j0}=v0(r),q0=K.vtf(),X0=R;if(O&&q0>0)X0=(X0%q0+q0)%q0;let N0=K.gsp(X0,K.hc,K.ch,q0,s);if(n==="smooth")iJ(K.sgt(),N0,j0);else n0(),K.sst(N0)},eJ=()=>K.sgt(),J1=(R,r)=>{return p.on(R,r)},Q1=(R,r)=>{p.off(R,r)},j1=()=>{if(K.id)return;if(K.id=!0,O0.state.isDestroyed=!0,A.items.removeEventListener("click",p2),A.root.removeEventListener("keydown",h2),K.st.removeEventListener("scroll",R0),T2.disconnect(),m)m.disconnect(),m=null;if(K.wh)A.viewport.removeEventListener("wheel",K.wh);if(y)clearTimeout(y);for(let R=0;R<Y0.length;R++)Y0[R]();for(let R of C)if(R.destroy)R.destroy();n0();for(let[,R]of $)R.remove(),h.release(R);$.clear(),h.clear(),p.clear(),A.root.remove()},g2={get element(){return A.root},get items(){if(J0.has("_getItems"))return J0.get("_getItems")();return K.it},get total(){if(J0.has("_getTotal"))return J0.get("_getTotal")();return K.vtf()},setItems:J0.has("setItems")?J0.get("setItems"):lJ,appendItems:J0.has("appendItems")?J0.get("appendItems"):rJ,prependItems:J0.has("prependItems")?J0.get("prependItems"):aJ,updateItem:J0.has("updateItem")?J0.get("updateItem"):sJ,removeItem:J0.has("removeItem")?J0.get("removeItem"):nJ,reload:J0.has("reload")?J0.get("reload"):oJ,scrollToIndex:J0.has("scrollToIndex")?J0.get("scrollToIndex"):tJ,cancelScroll:J0.has("cancelScroll")?J0.get("cancelScroll"):n0,getScrollPosition:J0.has("getScrollPosition")?J0.get("getScrollPosition"):eJ,on:J1,off:Q1,destroy:j1};for(let[R,r]of J0){if(R.charCodeAt(0)===95||R==="setItems"||R==="appendItems"||R==="prependItems"||R==="updateItem"||R==="removeItem"||R==="reload"||R==="scrollToIndex"||R==="scrollToItem"||R==="cancelScroll"||R==="getScrollPosition")continue;g2[R]=r}return g2}j2();var I0=(J,q,Q={},j="vlist",Y=!1)=>{let{autoHide:X=!0,autoHideDelay:U=1000,minThumbSize:N=30,showOnHover:V=!0,hoverZoneWidth:B=16,showOnViewportEnter:W=!0}=Q,k=0,L=0,z=0,O=0,H=!1,Z=!1,b=0,F=0,T=0,M=null,D=!1,C=null,I=null,f=Y?"width":"height",A=Y?"translateX":"translateY",p=Y?(t)=>t.clientX:(t)=>t.clientY,o=Y?"left":"top",g=document.createElement("div"),l=document.createElement("div"),h=V?document.createElement("div"):null,K=()=>{if(g.className=`${j}-scrollbar`,l.className=`${j}-scrollbar-thumb`,Y)g.classList.add(`${j}-scrollbar--horizontal`);if(g.appendChild(l),J.appendChild(g),h){if(h.className=`${j}-scrollbar-hover`,Y)h.classList.add(`${j}-scrollbar-hover--horizontal`),h.style.height=`${B}px`;else h.style.width=`${B}px`;J.appendChild(h)}},G=()=>{if(M)clearTimeout(M),M=null},y=()=>{if(!X)return;G(),M=setTimeout(E,U)},_=()=>{if(k<=L)return;if(G(),!D)g.classList.add(`${j}-scrollbar--visible`),D=!0;if(X&&!H&&!Z)y()},E=()=>{if(H||Z)return;g.classList.remove(`${j}-scrollbar--visible`),D=!1},P=(t,K0)=>{k=t,L=K0;let B0=k>L;if(g.style.display=B0?"":"none",!B0){E();return}let c=L/k;z=Math.max(N,c*L),l.style[f]=`${z}px`,O=L-z,u(T)},u=(t)=>{if(T=t,k<=L||O<=0)return;let K0=k-L,c=Math.min(1,Math.max(0,t/K0))*O;l.style.transform=`${A}(${c}px)`},x=(t)=>{if(t.target===l)return;let K0=g.getBoundingClientRect(),a=p(t)-K0[o]-z/2,Y0=Math.max(0,Math.min(a,O))/O,J0=k-L,Z0=Y0*J0;q(Z0),_()},$=(t)=>{t.preventDefault(),t.stopPropagation(),H=!0,b=p(t),F=T,G(),g.classList.add(`${j}-scrollbar--dragging`),document.addEventListener("mousemove",v),document.addEventListener("mouseup",S)},v=(t)=>{if(!H)return;let K0=p(t)-b,B0=O>0?K0/O:0,c=k-L,a=B0*c,Q0=Math.max(0,Math.min(F+a,c)),J0=Q0/c*O;if(l.style.transform=`${A}(${J0}px)`,I=Q0,C===null)C=requestAnimationFrame(()=>{if(I!==null)q(I);C=null})},S=()=>{if(H=!1,C!==null)cancelAnimationFrame(C),C=null;if(I!==null)q(I),I=null;if(g.classList.remove(`${j}-scrollbar--dragging`),X&&!Z)y();document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",S)},m=()=>{if(W)_()},w=()=>{if(!H){if(Z=!1,X)y()}},d=()=>{Z=!0,G(),_()},i=()=>{if(Z=!1,!H&&X)y()},e=()=>{if(G(),C!==null)cancelAnimationFrame(C),C=null;if(g.removeEventListener("click",x),g.removeEventListener("mouseenter",d),g.removeEventListener("mouseleave",i),l.removeEventListener("mousedown",$),J.removeEventListener("mouseenter",m),J.removeEventListener("mouseleave",w),document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",S),h){if(h.removeEventListener("mouseenter",d),h.removeEventListener("mouseleave",i),h.parentNode)h.parentNode.removeChild(h)}if(g.parentNode)g.parentNode.removeChild(g)};if(K(),g.addEventListener("click",x),g.addEventListener("mouseenter",d),g.addEventListener("mouseleave",i),l.addEventListener("mousedown",$),J.addEventListener("mouseenter",m),J.addEventListener("mouseleave",w),h)h.addEventListener("mouseenter",d),h.addEventListener("mouseleave",i);return{show:_,hide:E,updateBounds:P,updatePosition:u,isVisible:()=>D,destroy:e}};var OJ=(J)=>{let q=null;return{name:"withScrollbar",priority:30,setup(Q){let{dom:j,config:Y}=Q,{classPrefix:X,horizontal:U}=Y;if(q=I0(j.viewport,(B)=>Q.scrollController.scrollTo(B),J??{},X,U),!j.viewport.classList.contains(`${X}-viewport--custom-scrollbar`))j.viewport.classList.add(`${X}-viewport--custom-scrollbar`);let N=Q.getCachedCompression();q.updateBounds(N.virtualSize,Q.state.viewportState.containerSize);let V=q;Q.afterScroll.push((B,W)=>{V.updatePosition(B),V.show()}),Q.resizeHandlers.push((B,W)=>{if(V){let k=Q.getCachedCompression();V.updateBounds(k.virtualSize,Q.state.viewportState.containerSize)}}),Q.contentSizeHandlers.push(()=>{if(V){let B=Q.getCachedCompression();V.updateBounds(B.virtualSize,Q.state.viewportState.containerSize)}}),Q.destroyHandlers.push(()=>{if(V)V.destroy()})},destroy(){if(q)q.destroy(),q=null}}};var AJ=(J=0)=>{let q=[,,,,,,,,];for(let Q=0;Q<8;Q++)q[Q]={position:0,time:0};return{velocity:0,lastPosition:J,lastTime:performance.now(),samples:q,sampleIndex:0,sampleCount:0}},q2=(J,q)=>{let Q=performance.now(),j=Q-J.lastTime;if(j===0)return J;if(j>100){J.sampleCount=0,J.sampleIndex=0,J.velocity=0;let X=J.samples[0];return X.position=q,X.time=Q,J.sampleIndex=1,J.sampleCount=1,J.lastPosition=q,J.lastTime=Q,J}let Y=J.samples[J.sampleIndex];if(Y.position=q,Y.time=Q,J.sampleIndex=(J.sampleIndex+1)%8,J.sampleCount=Math.min(J.sampleCount+1,8),J.sampleCount>=2){let X=(J.sampleIndex-J.sampleCount+8)%8,U=J.samples[X],N=q-U.position,V=Q-U.time;J.velocity=V>0?N/V:0}return J.lastPosition=q,J.lastTime=Q,J},M1=(J)=>J.sampleCount>=3,EJ=(J,q={})=>{let{wheel:Q=!0,sensitivity:j=1,smoothing:Y=!1,idleTimeout:X=150,onScroll:U,onIdle:N,scrollElement:V,horizontal:B=!1}=q,W=!!V,k=0,L=0,z=W?B?window.innerWidth:window.innerHeight:B?J.clientWidth:J.clientHeight,O=q.compressed??!1,H=q.compression,Z=AJ(),b=!1,F=null,M=X2(()=>{let w=B?J.scrollLeft:J.scrollTop,d=w>=k?"down":"up";if(Z=q2(Z,w),k=w,U)U({scrollTop:k,direction:d,velocity:Z.velocity});p()}),C=X2(()=>{let w=J.getBoundingClientRect(),d=B?Math.max(0,-w.left):Math.max(0,-w.top),i=d>=k?"down":"up";if(Z=q2(Z,d),k=d,!b)b=!0;if(U)U({scrollTop:k,direction:i,velocity:Z.velocity});p()}),I=(w)=>{w.preventDefault()},f=(w)=>{if(w.deltaX)return;w.preventDefault(),J.scrollLeft+=w.deltaY},A=(w)=>{if(!O)return;w.preventDefault();let d=(B?w.deltaX||w.deltaY:w.deltaY)*j,i=k+d;if(Y)i=k+d*0.3;if(i=Math.max(0,Math.min(i,L)),i!==k){let t=i>=k?"down":"up";if(Z=q2(Z,i),k=i,!b)b=!0;if(U)U({scrollTop:k,direction:t,velocity:Z.velocity});p()}},p=()=>{if(F)clearTimeout(F);F=setTimeout(()=>{if(b=!1,Z=AJ(k),N)N()},X)},o=(w)=>{if(O)return;if(O=!0,H=w,L=w.virtualSize-z,W)return;if(M.cancel(),J.removeEventListener("scroll",M),!Q)J.removeEventListener("wheel",I);else if(B)J.removeEventListener("wheel",f);if(B)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",A,{passive:!1});let d=B?J.scrollLeft:J.scrollTop;if(d>0){let i=B?H?.actualSize??J.scrollWidth:H?.actualSize??J.scrollHeight;k=d/i*L}if(B)J.scrollLeft=0;else J.scrollTop=0},g=()=>{if(!O)return;if(O=!1,W){H=void 0;return}if(J.removeEventListener("wheel",A),B)J.style.overflowX="auto";else J.style.overflow="auto";if(J.addEventListener("scroll",M,{passive:!0}),!Q)J.addEventListener("wheel",I,{passive:!1});else if(B)J.addEventListener("wheel",f,{passive:!1});if(H&&k>0){let d=k/L*(H.actualSize-z);if(B)J.scrollLeft=d;else J.scrollTop=d}H=void 0},l=()=>{if(W||O)return k;return B?J.scrollLeft:J.scrollTop},h=(w,d=!1)=>{let i=Math.max(0,Math.min(w,L||1/0));if(W){let e=J.getBoundingClientRect();if(B){let t=e.left+window.scrollX;window.scrollTo({left:t+i,behavior:d?"smooth":"auto"})}else{let t=e.top+window.scrollY;window.scrollTo({top:t+i,behavior:d?"smooth":"auto"})}}else if(O){if(i===k)return;let t=i>=k?"down":"up";if(Z=q2(Z,i),k=i,!b)b=!0;if(U)U({scrollTop:k,direction:t,velocity:Z.velocity});p()}else if(B)J.scrollTo({left:i,behavior:d?"smooth":"auto"});else J.scrollTo({top:i,behavior:d?"smooth":"auto"})},K=(w)=>{h(l()+w)},G=()=>{return l()<=0},y=(w=0)=>{let d=l(),i=W||O?L:B?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;return d>=i-w},_=()=>{let w=l(),d=W||O?L:B?J.scrollWidth-J.clientWidth:J.scrollHeight-J.clientHeight;if(d<=0)return 0;return Math.min(1,Math.max(0,w/d))},E=(w)=>{if(w.compression)H=w.compression,L=H.virtualSize-z},P=()=>O,u=()=>Math.abs(Z.velocity),x=()=>M1(Z),$=()=>b,v=()=>W,S=(w)=>{if(z=w,H)L=H.virtualSize-z},m=()=>{if(F)clearTimeout(F);if(W)C.cancel(),window.removeEventListener("scroll",C);else M.cancel(),J.removeEventListener("scroll",M),J.removeEventListener("wheel",A),J.removeEventListener("wheel",I),J.removeEventListener("wheel",f)};if(W){if(O&&H)L=H.virtualSize-z;window.addEventListener("scroll",C,{passive:!0})}else if(O&&H){if(L=H.virtualSize-z,B)J.style.overflowX="hidden";else J.style.overflow="hidden";if(Q)J.addEventListener("wheel",A,{passive:!1})}else{if(B)J.style.overflowX="auto",J.style.overflowY="hidden";else J.style.overflow="auto";if(J.addEventListener("scroll",M,{passive:!0}),!Q)J.addEventListener("wheel",I,{passive:!1});else if(B)J.addEventListener("wheel",f,{passive:!1})}return{getScrollTop:l,scrollTo:h,scrollBy:K,isAtTop:G,isAtBottom:y,getScrollPercentage:_,getVelocity:u,isTracking:x,isScrolling:$,updateConfig:E,enableCompression:o,disableCompression:g,isCompressed:P,isWindowMode:v,updateContainerHeight:S,destroy:m}},X2=(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 O1=0.65,A1=0.5,E1=0.95,F1=0.1,L1=5,T1=100,FJ=()=>{let J=null,q=0,Q=!1,j=0,Y=null,X=0,U=0,N=null,V=[];return{name:"withScale",priority:20,setup(B){let{dom:W,config:k}=B,{classPrefix:L,horizontal:z}=k,O=()=>{let F=B.getVirtualTotal(),T=L0(F,B.sizeCache);if(T.isCompressed&&!Q){Q=!0,B.scrollController.enableCompression(T),B.updateContentSize(T.virtualSize),B.setScrollFns(()=>q,(g)=>{if(q=g,j=g,Y!==null)cancelAnimationFrame(Y),Y=null});let M=()=>{let g=j-q;if(Math.abs(g)<A1)q=j,Y=null;else{q+=g*O1;let h=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize;q=Math.max(0,Math.min(q,h)),Y=requestAnimationFrame(M)}B.scrollController.scrollTo(q)},D=W.viewport,C=(g)=>{g.preventDefault();let h=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize;if(j=Math.max(0,Math.min(j+g.deltaY,h)),Y===null)Y=requestAnimationFrame(M)};D.addEventListener("wheel",C,{passive:!1});let I=()=>{if(N!==null)cancelAnimationFrame(N),N=null},f=(g)=>{if(I(),Y!==null)cancelAnimationFrame(Y),Y=null;let l=g.touches[0];if(!l)return;let h=z?l.clientX:l.clientY;X=h,U=q,V=[{time:performance.now(),y:h}]},A=(g)=>{g.preventDefault();let l=g.touches[0];if(!l)return;let h=z?l.clientX:l.clientY,K=performance.now();if(V.push({time:K,y:h}),V.length>L1)V.shift();let G=X-h,_=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize,E=Math.max(0,Math.min(U+G,_));q=E,j=E,B.scrollController.scrollTo(E)},p=(g)=>{let l=performance.now(),h=V.filter((_)=>l-_.time<T1),K=0;if(h.length>=2){let _=h[0],E=h[h.length-1],P=E.time-_.time;if(P>0)K=(_.y-E.y)/P}if(V=[],Math.abs(K)<F1)return;let G=K*16,y=()=>{if(G*=E1,Math.abs(G)<0.5){N=null;return}let E=B.getCachedCompression().virtualSize-B.state.viewportState.containerSize,P=q+G;if(P=Math.max(0,Math.min(P,E)),P<=0&&G<0||P>=E&&G>0){q=P,j=P,B.scrollController.scrollTo(P),N=null;return}q=P,j=P,B.scrollController.scrollTo(P),N=requestAnimationFrame(y)};N=requestAnimationFrame(y)};if(D.addEventListener("touchstart",f,{passive:!0}),D.addEventListener("touchmove",A,{passive:!1}),D.addEventListener("touchend",p,{passive:!0}),D.addEventListener("touchcancel",p,{passive:!0}),B.destroyHandlers.push(()=>{if(D.removeEventListener("wheel",C),D.removeEventListener("touchstart",f),D.removeEventListener("touchmove",A),D.removeEventListener("touchend",p),D.removeEventListener("touchcancel",p),I(),Y!==null)cancelAnimationFrame(Y),Y=null}),!W.viewport.querySelector(`.${L}-scrollbar`)){if(J=I0(W.viewport,(l)=>B.scrollController.scrollTo(l),{},L,z),!W.viewport.classList.contains(`${L}-viewport--custom-scrollbar`))W.viewport.classList.add(`${L}-viewport--custom-scrollbar`);J.updateBounds(T.virtualSize,B.state.viewportState.containerSize);let g=J;B.afterScroll.push((l,h)=>{if(g)g.updatePosition(l),g.show()}),B.resizeHandlers.push((l,h)=>{if(g){let K=B.getCachedCompression();g.updateBounds(K.virtualSize,B.state.viewportState.containerSize)}})}}else if(!T.isCompressed&&Q)Q=!1,B.scrollController.disableCompression(),B.updateContentSize(T.actualSize);else if(T.isCompressed)B.scrollController.updateConfig({compression:T}),B.updateContentSize(T.virtualSize);if(J)J.updateBounds(T.virtualSize,B.state.viewportState.containerSize);B.state.cachedCompression={state:T,totalItems:F}};B.updateCompressionMode=O;let H=B.getCachedCompression.bind(B);B.getCachedCompression=()=>{if(B.state.cachedCompression)return B.state.cachedCompression.state;return H()},B.setVisibleRangeFn((F,T,M,D,C)=>{Z=null,b=null;let I=L0(D,M);J2(F,T,M,D,I,C)}),B.setScrollToPosFn((F,T,M,D,C)=>{let I=L0(D,T);return Q2(F,T,M,D,I,C)});let Z=null,b=null;B.setPositionElementFn((F,T)=>{let M=B.getVirtualTotal(),D=L0(M,B.sizeCache);if(D.isCompressed){let C=B.scrollController.getScrollTop();if(Z===null||T<b)b=T,Z=Math.round(f0(T,C,B.sizeCache,M,B.state.viewportState.containerSize,D));let I=Z+B.sizeCache.getOffset(T)-B.sizeCache.getOffset(b),f=B.config.horizontal;F.style.transform=f?`translateX(${I}px)`:`translateY(${I}px)`}else{let C=Math.round(B.sizeCache.getOffset(T)),I=B.config.horizontal;F.style.transform=I?`translateX(${C}px)`:`translateY(${C}px)`}}),O(),B.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null})},destroy(){if(J)J.destroy(),J=null;if(Y!==null)cancelAnimationFrame(Y),Y=null;if(N!==null)cancelAnimationFrame(N),N=null}}};var Y2=(J={})=>{let{chunkSize:q=100,maxCachedItems:Q=5000,evictionBuffer:j=200,onEvict:Y}=J,X=new Map,U=0,N=0,V=(K)=>{let G=X.get(K);if(!G)G={items:Array(q),count:0,lastAccess:Date.now()},X.set(K,G);else G.lastAccess=Date.now();return G},B=(K)=>{return Math.floor(K/q)},W=(K)=>{return K%q},k=()=>U,L=(K)=>{U=K},z=(K)=>{if(K<0||K>=U)return;let G=B(K),y=X.get(G);if(!y)return;return y.items[W(K)]},O=(K)=>{if(K<0||K>=U)return!1;let G=B(K),y=X.get(G);if(!y)return!1;return y.items[W(K)]!==void 0},H=(K,G)=>{let y=B(K),_=V(y),E=W(K),P=_.items[E]===void 0;if(_.items[E]=G,P)_.count++,N++;if(K>=U)U=K+1},Z=(K,G)=>{for(let y=0;y<G.length;y++){let _=G[y];if(_!==void 0)H(K+y,_)}},b=(K)=>{if(K<0||K>=U)return!1;let G=B(K),y=X.get(G);if(!y)return!1;let _=W(K);if(y.items[_]===void 0)return!1;if(y.items[_]=void 0,y.count--,N--,y.count===0)X.delete(G);return!0},F=(K,G)=>{let y=[];for(let _=K;_<=G&&_<U;_++)y.push(z(_));return y},T=(K,G)=>{for(let y=K;y<=G&&y<U;y++)if(!O(y))return!1;return!0},M=()=>{let K=[],G=null,y=Array.from(X.keys()).sort((_,E)=>_-E);for(let _ of y){let E=X.get(_);if(!E)continue;let P=_*q;for(let u=0;u<q;u++){let x=P+u;if(x>=U)break;if(E.items[u]!==void 0)if(G===null)G={start:x,end:x};else if(x===G.end+1)G.end=x;else K.push(G),G={start:x,end:x};else if(G!==null)K.push(G),G=null}}if(G!==null)K.push(G);return K},D=(K,G)=>{let y=[],_=null;for(let E=K;E<=G&&E<U;E++)if(!O(E))if(_===null)_={start:E,end:E};else _.end=E;else if(_!==null)y.push(_),_=null;if(_!==null)y.push(_);return y},C=(K)=>{return X.has(K)},I=(K)=>{let G=X.get(K);if(G)G.lastAccess=Date.now()},f=(K,G)=>{if(K>G||X.size===0)return;let y=Date.now(),_=B(Math.max(0,K)),E=B(Math.min(U-1,G));for(let P=_;P<=E;P++){let u=X.get(P);if(u)u.lastAccess=y}},A=(K,G)=>{if(N<=Q)return 0;let y=Math.max(0,K-j),_=Math.min(U-1,G+j),E=B(y),P=B(_),u=0,x=[];for(let[$,v]of X)if($<E||$>P)u+=v.count,x.push($),N-=v.count,X.delete($);if(u>0&&Y)Y(u,x);return u},p=()=>{if(N<=Q)return 0;let K=Array.from(X.entries()).sort(([,_],[,E])=>_.lastAccess-E.lastAccess),G=0,y=[];for(let[_,E]of K){if(N<=Q)break;G+=E.count,N-=E.count,y.push(_),X.delete(_)}if(G>0&&Y)Y(G,y);return G},o=()=>{return{totalItems:U,cachedItems:N,cachedChunks:X.size,chunkSize:q,maxCachedItems:Q,memoryEfficiency:U>0?1-N/U:1}},g=()=>N,l=()=>{X.clear(),N=0};return{chunkSize:q,maxCachedItems:Q,getTotal:k,setTotal:L,get:z,has:O,set:H,setRange:Z,delete:b,getRange:F,isRangeLoaded:T,getLoadedRanges:M,findUnloadedRanges:D,getChunkIndex:B,isChunkLoaded:C,touchChunk:I,touchChunksForRange:f,evictDistant:A,evictToLimit:p,getStats:o,getCachedCount:g,clear:l,reset:()=>{l(),U=0}}},K2=(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},x0=(J,q,Q)=>{let j=Math.floor(J.start/Q)*Q,Y=Math.ceil((J.end+1)/Q)*Q-1,X={start:j,end:Y};if(q.length===0)return[X];let U=[],N=K2(q),V=X.start;for(let B of N){if(B.end<V)continue;if(B.start>X.end)break;if(B.start>V)U.push({start:V,end:Math.min(B.start-1,X.end)});if(V=B.end+1,V>X.end)break}if(V<=X.end)U.push({start:V,end:X.end});return U};var B2=(J={})=>{let{maskCharacter:q=UJ,maxSampleSize:Q=ZJ}=J,j=[],Y=!1,X=0,U=(k)=>{if(Y||k.length===0)return;let L=Math.min(k.length,Q);for(let z=0;z<L;z++){let O=k[z];if(!O||typeof O!=="object")continue;let H={};for(let[Z,b]of Object.entries(O)){if(Z.startsWith("_")||Z==="id")continue;H[Z]=String(b??"").length}if(Object.keys(H).length>0)j.push(H)}Y=!0},N=()=>Y,V=(k)=>{let L={id:`${NJ}${X++}`,[R2]:!0,_index:k};if(j.length===0)return L.label=q.repeat(12),L;let z=j[k%j.length];for(let[O,H]of Object.entries(z))L[O]=q.repeat(Math.max(1,H));return L};return{analyzeStructure:U,hasAnalyzedStructure:N,generate:V,generateRange:(k,L)=>{let z=[];for(let O=k;O<=L;O++)z.push(V(O));return z},clear:()=>{j=[],Y=!1,X=0}}},z0=(J)=>{if(!J||typeof J!=="object")return!1;return J[R2]===!0},z2=(J)=>{return J.filter((q)=>!z0(q))};var b1=50,U2=(J={})=>{let{adapter:q,initialItems:Q,initialTotal:j,storage:Y,placeholder:X,pageSize:U=b1,onStateChange:N,onItemsLoaded:V,onItemsEvicted:B}=J,W=Y2({...Y,onEvict:(c,a)=>{B?.(c),D()}}),k=null,L=()=>{if(!k)k=B2(X);return k},z=new Map,O=!1,H,Z=!0,b,F=[],T=0,M=new Map,D=()=>{N?.(h())},C=()=>{z.clear();let c=W.getLoadedRanges();for(let a of c)for(let Q0=a.start;Q0<=a.end;Q0++){let Y0=W.get(Q0);if(Y0&&!z0(Y0))z.set(Y0.id,Q0)}},I=(c,a)=>{if(!z0(a))z.set(a.id,c)},f=(c)=>{z.delete(c)},A=(c,a)=>{return`${c}-${a}`},p=()=>W.getTotal(),o=()=>W.getCachedCount(),g=()=>O,l=()=>Z,h=()=>({total:W.getTotal(),cached:W.getCachedCount(),isLoading:O,pendingRanges:F,error:H,hasMore:Z,cursor:b}),K=()=>W,G=()=>L(),y=(c)=>{let a=W.get(c);if(a!==void 0)return a;if(c>=0&&c<W.getTotal())return L().generate(c);return},_=(c)=>{let a=z.get(c);if(a===void 0)return;return W.get(a)},E=(c)=>{return z.get(c)??-1},P=(c)=>{let a=W.get(c);return a!==void 0&&!z0(a)},u=(c,a)=>{let Q0=[],Y0=W.getTotal(),J0=0,Z0=0;W.touchChunksForRange(c,Math.min(a,Y0-1));for(let W0=c;W0<=a&&W0<Y0;W0++){let F0=W.get(W0);if(F0!==void 0)Q0.push(F0),J0++;else Q0.push(L().generate(W0)),Z0++}return Q0},x=(c)=>{W.setTotal(c),Z=W.getCachedCount()<c,D()},$=(c,a=0,Q0)=>{if(k&&!k.hasAnalyzedStructure()&&c.length>0)k.analyzeStructure(c);for(let Y0=0;Y0<c.length;Y0++){let J0=c[Y0];if(J0!==void 0){let Z0=a+Y0;W.set(Z0,J0),I(Z0,J0)}}if(Q0!==void 0)W.setTotal(Q0);else if(a+c.length>W.getTotal())W.setTotal(a+c.length);if(W.getCachedCount()>=W.getTotal()&&W.getTotal()>0)Z=!1;V?.(c,a,W.getTotal()),D()},v=(c,a)=>{let Q0=z.get(c);if(Q0===void 0)return!1;let Y0=W.get(Q0);if(!Y0)return!1;let J0={...Y0,...a};if(W.set(Q0,J0),a.id!==void 0&&a.id!==c)f(c),I(Q0,J0);return D(),!0},S=(c)=>{let a=z.get(c);if(a===void 0)return!1;W.delete(a),f(c);let Q0=W.getTotal();if(Q0>0)W.setTotal(Q0-1);return D(),!0},m=async(c,a)=>{if(!q)return;let Q0=A(c,a);if(M.has(Q0))return;let Y0=W.getLoadedRanges(),J0=x0({start:c,end:a},Y0,W.chunkSize);if(J0.length===0)return;let Z0=W.chunkSize,W0=[];for(let _0 of J0){let T0=Math.floor(_0.start/Z0),P0=Math.floor(_0.end/Z0);for(let D0=T0;D0<=P0;D0++){let M0=D0*Z0,V0=M0+Z0-1,H0=A(M0,V0);if(!W0.some((R0)=>R0.start===M0)&&!M.has(H0))W0.push({start:M0,end:V0})}}let F0=[];for(let _0 of J0){let T0=Math.floor(_0.start/Z0),P0=Math.floor(_0.end/Z0);for(let D0=T0;D0<=P0;D0++){let M0=D0*Z0,V0=M0+Z0-1,H0=A(M0,V0);if(M.has(H0)){let R0=M.get(H0);if(!F0.includes(R0))F0.push(R0)}}}for(let _0 of W0){let T0=A(_0.start,_0.end),P0=(async()=>{F.push(_0),O=!0,H=void 0,D();try{let D0=_0.end-_0.start+1,M0={offset:_0.start,limit:D0,cursor:void 0},V0=await q.read(M0);if($(V0.items,_0.start,V0.total),V0.cursor)b=V0.cursor;let H0=_0.start+V0.items.length;if(H0>=T){if(T=H0,V0.hasMore!==void 0)Z=V0.hasMore;else if(V0.total!==void 0)Z=H0<V0.total}}catch(D0){H=D0 instanceof Error?D0:Error(String(D0))}finally{M.delete(T0),F=F.filter((D0)=>D0.start!==_0.start||D0.end!==_0.end),O=M.size>0,D()}})();M.set(T0,P0),F0.push(P0)}await Promise.all(F0)},w=async(c,a)=>{if(W.isRangeLoaded(c,a))return;await m(c,a)},d=async()=>{if(!q)return;await m(0,U-1)},i=async()=>{if(!q||O||!Z)return!1;let c=W.getCachedCount(),a=W.getTotal(),Q0=c,Y0=Math.min(Q0+U-1,a>0?a-1:Q0+U-1);if(Q0>=a&&a>0)return Z=!1,!1;return await m(Q0,Y0),W.getCachedCount()>c},e=async()=>{if(W.clear(),W.setTotal(0),z.clear(),k)k.clear();M.clear(),F=[],O=!1,b=void 0,Z=!0,T=0,H=void 0,D()},t=(c,a)=>{if(W.evictDistant(c,a)>0)C()},K0=()=>{W.clear(),z.clear(),b=void 0,H=void 0,F=[],O=!1,D()},B0=()=>{if(W.reset(),z.clear(),k)k.clear();b=void 0,Z=!0,T=0,H=void 0,F=[],O=!1,D()};if(Q&&Q.length>0)$(Q,0,j??Q.length);else if(j!==void 0)W.setTotal(j),D();return{getState:h,getTotal:p,getCached:o,getIsLoading:g,getHasMore:l,getStorage:K,getPlaceholders:G,getItem:y,getItemById:_,getIndexById:E,isItemLoaded:P,getItemsInRange:u,setTotal:x,setItems:$,updateItem:v,removeItem:S,loadRange:m,ensureRange:w,loadInitial:d,loadMore:i,reload:e,evictDistant:t,clear:K0,reset:B0}};var LJ=(J)=>{let{adapter:q,loading:Q,storage:j,total:Y,autoLoad:X=!0}=J,U=Q?.cancelThreshold??YJ,N=Q?.preloadThreshold??KJ,V=Q?.preloadAhead??BJ;return{name:"withAsync",priority:20,methods:["reload","loadVisibleRange"],setup(B){let{emitter:W}=B,k=B.config.reverse,L=U2({adapter:q,...Y!==void 0&&{initialTotal:Y},pageSize:j?.chunkSize??S0,...j&&{storage:{...j.chunkSize!==void 0&&{chunkSize:j.chunkSize},...j.maxCachedItems!==void 0&&{maxCachedItems:j.maxCachedItems}}},onStateChange:()=>{if(B.state.isInitialized){let M=B.getVirtualTotal();B.sizeCache.rebuild(M),B.updateCompressionMode();let D=B.getCachedCompression();B.state.viewportState.totalSize=D.virtualSize,B.state.viewportState.actualSize=D.actualSize,B.state.viewportState.isCompressed=D.isCompressed,B.state.viewportState.compressionRatio=D.ratio,B.updateContentSize(D.virtualSize),B.renderIfNeeded()}},onItemsLoaded:(M,D,C)=>{if(B.state.isInitialized)B.forceRender(),W.emit("load:end",{items:M,total:C,offset:D})}});B.replaceDataManager(L);let z=null,O=null,H=0,Z=()=>{if(O){let M=O;O=null,B.dataManager.ensureRange(M.start,M.end).catch((D)=>{W.emit("error",{error:D,context:"ensureRange"})})}};B.afterScroll.push((M,D)=>{if(B.state.isDestroyed)return;let C=B.scrollController.getVelocity(),f=B.scrollController.isTracking()&&C<=U;if(O&&H>U&&C<=U){let o=O;O=null,B.dataManager.ensureRange(o.start,o.end).catch((g)=>{W.emit("error",{error:g,context:"ensureRange"})})}if(H=C,f&&!B.dataManager.getIsLoading()&&B.dataManager.getHasMore()){if(k){if(M<P2)W.emit("load:start",{offset:B.dataManager.getCached(),limit:S0}),B.dataManager.loadMore().catch((o)=>{W.emit("error",{error:o,context:"loadMore"})})}else if(B.state.viewportState.totalSize-M-B.state.viewportState.containerSize<P2)W.emit("load:start",{offset:B.dataManager.getCached(),limit:S0}),B.dataManager.loadMore().catch((g)=>{W.emit("error",{error:g,context:"loadMore"})})}let{renderRange:A}=B.state.viewportState;if(!z||A.start!==z.start||A.end!==z.end)if(z={start:A.start,end:A.end},f){O=null;let{start:o,end:g}=A,l=B.getVirtualTotal();if(C>N)if(D==="down")g=Math.min(A.end+V,l-1);else o=Math.max(A.start-V,0);B.dataManager.ensureRange(o,g).catch((h)=>{W.emit("error",{error:h,context:"ensureRange"})})}else O={start:A.start,end:A.end}});let b=200,F=null;B.afterScroll.push((M,D)=>{if(F!==null)clearTimeout(F);F=setTimeout(()=>{F=null,Z()},b)}),B.destroyHandlers.push(()=>{if(F!==null)clearTimeout(F),F=null});let T=()=>{if(B.state.isDestroyed)return;z=null;let{renderRange:M}=B.state.viewportState;if(M.end>0)B.dataManager.ensureRange(M.start,M.end).catch((D)=>{W.emit("error",{error:D,context:"ensureRange"})});Z()};if(window.addEventListener("online",T),B.destroyHandlers.push(()=>{window.removeEventListener("online",T)}),W.on("load:start",()=>{B.dom.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{B.dom.root.removeAttribute("aria-busy")}),B.methods.set("loadVisibleRange",async()=>{z=null,O=null,B.forceRender();let{renderRange:M}=B.state.viewportState;if(M.end>0)W.emit("load:start",{offset:M.start,limit:M.end-M.start+1}),await B.dataManager.ensureRange(M.start,M.end)}),B.methods.set("reload",async()=>{z=null,O=null,B.invalidateRendered(),await B.dataManager.reload(),W.emit("load:start",{offset:0,limit:S0}),await B.dataManager.loadInitial(),B.forceRender();let{renderRange:M}=B.state.viewportState;if(M.end>0)await B.dataManager.ensureRange(M.start,M.end)}),X)W.emit("load:start",{offset:0,limit:S0}),B.dataManager.loadInitial().catch((M)=>{W.emit("error",{error:M,context:"loadInitial"})});else if(Y!==void 0)B.dataManager.setTotal(Y)}}};var TJ=()=>{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 B=Q.viewport.getBoundingClientRect();if(Y.horizontal)return Math.max(0,-B.left);else return Math.max(0,-B.top)},(B)=>{let W=Q.viewport.getBoundingClientRect();if(Y.horizontal){let k=W.left+window.scrollX;window.scrollTo(k+B,window.scrollY)}else{let k=W.top+window.scrollY;window.scrollTo(window.scrollX,k+B)}}),q.setContainerDimensions({width:()=>window.innerWidth,height:()=>window.innerHeight}),j.viewportState.containerSize=window.innerHeight;let{innerHeight:U,innerWidth:N}=window,V=()=>{let{innerWidth:B,innerHeight:W}=window,k=Y.horizontal?B:W,L=Y.horizontal?N:U;if(Math.abs(k-L)<=1)return;U=W,N=B,j.viewportState.containerSize=W,X.emit("resize",{width:B,height:W});for(let z=0;z<q.resizeHandlers.length;z++)q.resizeHandlers[z](B,W);q.renderIfNeeded()};window.addEventListener("resize",V,{passive:!0}),J=()=>{window.removeEventListener("resize",V)},q.destroyHandlers.push(J)},destroy(){if(J)J(),J=null}}};var C2=(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},HJ=(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},bJ=(J,q)=>{if(J===0)return[];let Q=[],j=q(0),Y=0,X=0;for(let U=1;U<J;U++){let N=q(U);if(N!==j){let V=U-Y;Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:V}),X=X+1+V,j=N,Y=U}}return Q.push({key:j,groupIndex:Q.length,headerLayoutIndex:X,firstDataIndex:Y,count:J-Y}),Q},m0=(J,q)=>{if(J.length===0||q.length===0)return[];let Q=J.length+q.length,j=Array(Q),Y=0;for(let X of q){j[Y]={id:`__group_header_${X.groupIndex}`,__groupHeader:!0,groupKey:X.key,groupIndex:X.groupIndex},Y++;for(let U=0;U<X.count;U++)j[Y]=J[X.firstDataIndex+U],Y++}return j},d0=(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)}},Z2=(J,q)=>{let Q=bJ(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:(L)=>{if(Q.length===0)return{type:"item",dataIndex:L,group:{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0}};let z=C2(Q,L),O=Q[z];if(L===O.headerLayoutIndex)return{type:"header",group:O};let H=L-O.headerLayoutIndex-1;return{type:"item",dataIndex:O.firstDataIndex+H,group:O}},layoutToDataIndex:(L)=>{if(Q.length===0)return L;let z=C2(Q,L),O=Q[z];if(L===O.headerLayoutIndex)return-1;let H=L-O.headerLayoutIndex-1;return O.firstDataIndex+H},dataToLayoutIndex:(L)=>{if(Q.length===0)return L;let z=HJ(Q,L),O=Q[z],H=L-O.firstDataIndex;return O.headerLayoutIndex+1+H},getGroupAtLayoutIndex:(L)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let z=C2(Q,L);return Q[z]},getGroupAtDataIndex:(L)=>{if(Q.length===0)return{key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0};let z=HJ(Q,L);return Q[z]},getHeaderHeight:typeof Y==="number"?(L)=>Y:(L)=>{let z=Q[L];if(!z)return 0;return Y(z.key,L)},rebuild:(L)=>{Q=bJ(L,q.getGroupForIndex),j=L+Q.length}}};var N2=(J,q,Q,j,Y,X=!1)=>{let U=document.createElement("div");if(U.className=`${Y}-sticky-header`,U.setAttribute("role","presentation"),U.setAttribute("aria-hidden","true"),U.style.position="absolute",U.style.zIndex="5",U.style.pointerEvents="none",U.style.willChange="transform",U.style.overflow="hidden",X)U.style.top="0",U.style.bottom="0",U.style.left="0";else U.style.top="0",U.style.left="0",U.style.right="0";J.insertBefore(U,J.firstChild);let N=-1,V=!1,B=0,W=(Z)=>{if(Z===N)return;N=Z;let b=q.groups;if(Z<0||Z>=b.length){U.textContent="";return}let F=b[Z],T=j.headerTemplate(F.key,F.groupIndex),M=q.getHeaderHeight(Z);if(X)U.style.width=`${M}px`;else U.style.height=`${M}px`;if(typeof T==="string")U.innerHTML=T;else U.replaceChildren(T)},k=(Z)=>{let b=q.groups;if(b.length===0){z();return}let F=Q.getOffset(b[0].headerLayoutIndex);if(Z<F){z();return}let T=0,M=b.length-1;while(T<M){let A=T+M+1>>>1;if(Q.getOffset(b[A].headerLayoutIndex)<=Z)T=A;else M=A-1}let D=T;if(!V)L();W(D);let C=q.getHeaderHeight(D),I=0,f=D+1;if(f<b.length){let p=Q.getOffset(b[f].headerLayoutIndex)-Z;if(p<C)I=p-C}if(I!==B)if(B=I,I===0)U.style.transform="";else{let A=Math.round(I);U.style.transform=X?`translateX(${A}px)`:`translateY(${A}px)`}},L=()=>{if(V)return;V=!0,U.style.display=""},z=()=>{if(!V)return;V=!1,U.style.display="none",N=-1,B=0,U.style.transform=""},O=()=>{let Z=N;if(N=-1,Z>=0)W(Z)},H=()=>{U.remove(),N=-1,V=!1};return U.style.display="none",{update:k,refresh:O,show:L,hide:z,destroy:H}};var $J=(J,q,Q,j,Y,X)=>{if(j===0||q===0)return X.start=0,X.end=-1,X;let U=Q.indexAtOffset(J),N=Q.indexAtOffset(J+q);if(N<j-1)N++;return X.start=Math.max(0,U),X.end=Math.min(j-1,Math.max(0,N)),X},kJ=(J,q,Q,j)=>{if(Q===0)return j.start=0,j.end=-1,j;return j.start=Math.max(0,J.start-q),j.end=Math.min(Q-1,J.end+q),j},yJ=(J,q,Q,j,Y,X)=>{if(j===0)return 0;let U=Math.max(0,Math.min(J,j-1)),N=q.getOffset(U),V=q.getSize(U),B=q.getTotalSize(),W=Math.max(0,B-Q),k;switch(X){case"center":k=N-Q/2+V/2;break;case"end":k=N-Q+V;break;case"start":default:k=N;break}return Math.max(0,Math.min(k,W))},PJ=(J,q,Q)=>{if(Q&&Q.isCompressed)return Q.virtualSize;return q.getTotalSize()},RJ=(J,q)=>{return q.getTotalSize()},zJ=(J,q)=>{return q.getOffset(J)},CJ=(J,q,Q)=>{let j=Math.max(0,q-Q);return Math.max(0,Math.min(J,j))};var y0=(J,q,Q,j,Y="start",X,U=yJ)=>{return U(J,q,Q,j,X,Y)},wJ=(J,q)=>{return J.start===q.start&&J.end===q.end},vJ=(J,q)=>{return J>=q.start&&J<=q.end},SJ=(J)=>{if(J.end<J.start)return 0;return J.end-J.start+1};var fJ=(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}};j2();var pJ=(J)=>{if(!J.getGroupForIndex)throw Error("[vlist/builder] withGroups: getGroupForIndex is required");if(J.headerHeight==null||J.headerHeight<=0)throw Error("[vlist/builder] withGroups: headerHeight must be a positive number");if(!J.headerTemplate)throw Error("[vlist/builder] withGroups: headerTemplate is required");let q=null,Q=null,j=[],Y=[];return{name:"withGroups",priority:10,setup(X){let{dom:U,config:N,rawConfig:V}=X,{classPrefix:B}=N,k=V.item.height;j=V.items?[...V.items]:[];let L=j.length,z={getGroupForIndex:J.getGroupForIndex,headerHeight:J.headerHeight,headerTemplate:J.headerTemplate,sticky:J.sticky??!1};q=Z2(L,z),Y=m0(j,q.groups);let O=d0(q,k);X.setSizeConfig(O),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length);let H=V.item.template,{headerTemplate:Z}=J,b=(f,A,p)=>{if(C0(f))return Z(f.groupKey,f.groupIndex);return H(f,A,p)},F=X.methods.get("_getGridLayout"),T=X.methods.get("_replaceGridRenderer"),M=X.methods.get("_updateGridLayoutForGroups");if(F&&T){if(M)M((o)=>{let g=Y[o];return!!(g&&C0(g))});let{createGridRenderer:f}=(_2(),U1(IJ)),A=F(),p=f(U.items,b,X.sizeCache,A,B,X.getContainerWidth(),()=>X.dataManager.getTotal(),N.ariaIdPrefix);T(p)}else X.replaceTemplate(b);if(U.root.classList.add(`${B}--grouped`),J.sticky!==!1){Q=N2(U.root,q,X.sizeCache,{...z,sticky:z.sticky??!1},B,N.horizontal);let f=Q;X.afterScroll.push((A,p)=>{f.update(A)}),Q.update(X.scrollController.getScrollTop())}let D=()=>{if(!q)return;q.rebuild(j.length),Y=m0(j,q.groups);let f=d0(q,k);if(X.setSizeConfig(f),X.rebuildSizeCache(Y.length),X.dataManager.setItems(Y,0,Y.length),Q)Q.refresh()};X.methods.set("setItems",(f)=>{j=f.slice(),D()}),X.methods.set("appendItems",(f)=>{j.push(...f),D()}),X.methods.set("prependItems",(f)=>{j.unshift(...f),D()}),X.methods.set("removeItem",(f)=>{j=j.filter((A)=>A.id!==f),D()});let{animateScroll:C,cancelScroll:I}=e2(X.scrollController,X.renderIfNeeded);X.methods.set("scrollToIndex",(f,A)=>{let p=q.dataToLayoutIndex(f),{align:o,behavior:g,duration:l}=v0(A),h=X.dataManager.getTotal(),K=y0(p,X.sizeCache,X.state.viewportState.containerSize,h,o,X.getCachedCompression());if(g==="smooth")C(X.scrollController.getScrollTop(),K,l);else I(),X.scrollController.scrollTo(K)}),X.methods.set("_getItems",()=>j),X.methods.set("_getTotal",()=>j.length),X.destroyHandlers.push(()=>{if(I(),Q)Q.destroy(),Q=null;U.root.classList.remove(`${B}--grouped`)})},destroy(){if(Q)Q.destroy(),Q=null}}};var D2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.isHeaderFn,Y={row:0,col:0},X=(O)=>{if(O<=0)return 0;if(!j)return Math.ceil(O/q);let H=0,Z=0,b=0;for(let F=0;F<O;F++)if(j(F)){if(b++,Z>0)H++,Z=0;H++,Z=0}else if(Z++,Z>=q)H++,Z=0;if(Z>0)H++;return H},U=(O)=>{return Y.row=N(O),Y.col=V(O),Y},N=(O)=>{if(!j)return Math.floor(O/q);let H=0,Z=0;for(let b=0;b<=O;b++)if(j(b)){if(Z>0)H++,Z=0;if(b===O)return H;H++,Z=0}else{if(b===O)return H;if(Z++,Z>=q)H++,Z=0}return console.warn(`⚠️ getRow(${O}) fell through - returning ${H}`),H},V=(O)=>{if(!j)return O%q;if(j(O))return 0;let H=0;for(let Z=0;Z<=O;Z++)if(j(Z))H=0;else{if(Z===O)return H;if(H++,H>=q)H=0}return H},B=(O,H,Z)=>{if(Z<=0)return{start:0,end:-1};if(!j){let D=Math.max(0,O*q),C=Math.min(Z-1,(H+1)*q-1);return{start:D,end:C}}let b=-1,F=-1,T=0,M=0;for(let D=0;D<Z;D++){if(j(D)){if(M>0)T++,M=0;if(T>=O&&T<=H){if(b===-1)b=D;F=D}T++,M=0}else{if(T>=O&&T<=H){if(b===-1)b=D;F=D}if(M++,M>=q)T++,M=0}if(T>H&&M===0)break}if(b===-1)return{start:0,end:-1};return{start:b,end:F}},W=(O,H,Z)=>{if(H<0||H>=q)return-1;let b=O*q+H;if(b<0||b>=Z)return-1;return b},k=(O)=>{let H=(q-1)*Q;return Math.max(0,(O-H)/q)};return{get columns(){return q},get gap(){return Q},update:(O)=>{if(O.columns!==void 0)q=Math.max(1,Math.floor(O.columns));if(O.gap!==void 0)Q=O.gap;if(O.isHeaderFn!==void 0)j=O.isHeaderFn},getTotalRows:X,getPosition:U,getRow:N,getCol:V,getItemRange:B,getItemIndex:W,getColumnWidth:k,getColumnOffset:(O,H)=>{let Z=k(H);return O*(Z+Q)}}};_2();var y1=new Set,hJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,Q=null;return{name:"withGrid",priority:10,setup(j){let{dom:Y,emitter:X,config:U,rawConfig:N}=j,{classPrefix:V}=U;if(U.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let B=U.horizontal,W=()=>B?Y.viewport.clientHeight:j.getContainerWidth(),k=N.items?.some((_)=>_.__groupHeader===!0),L={columns:J.columns,gap:J.gap??0};if(k)L.isHeaderFn=(_)=>{let E=j.dataManager.getItem(_);return!!(E&&E.__groupHeader===!0)};q=D2(L);let z=q.gap;j.setVirtualTotalFn(()=>{let _=j.dataManager.getTotal();return q.getTotalRows(_)});let O=N.item,H=U.horizontal?O.width:O.height,Z={containerWidth:W(),columns:q.columns,gap:q.gap},b={containerWidth:0,columns:0,gap:0,columnWidth:0,row:0,column:0,totalRows:0,totalColumns:0};if(typeof H==="function")j.setSizeConfig((_)=>{let E=Z.containerWidth-2,P=(Z.columns-1)*Z.gap;return b.containerWidth=Z.containerWidth,b.columns=Z.columns,b.gap=Z.gap,b.columnWidth=(E-P)/Z.columns,b.row=q.getRow(_),b.column=q.getCol(_),b.totalRows=q.getTotalRows(j.dataManager.getTotal()),b.totalColumns=Z.columns,H(_,b)+Z.gap});else if(z>0)j.setSizeConfig(H+z);if(j.rebuildSizeCache(),z>0){let _=j.sizeCache.getTotalSize;j.sizeCache.getTotalSize=()=>{let E=_();return E>0?E-Z.gap:0}}Y.root.classList.add(`${V}--grid`);let F=W(),T=N.item.template,M=()=>{Q=c0(Y.items,T,j.sizeCache,q,V,F,()=>j.dataManager.getTotal(),U.ariaIdPrefix,U.horizontal),j.replaceRenderer(Q)};M(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>L),j.methods.set("_replaceGridRenderer",(_)=>{Q=_}),j.methods.set("_updateGridLayoutForGroups",(_)=>{q.update({isHeaderFn:_});let E=j.dataManager.getTotal(),P=0;for(let u=0;u<E;u++)if(q.getCol(u)===0){let x=j.sizeCache.getSize(u);P+=x}if(j.sizeCache.getTotalSize=()=>P,U.horizontal)j.dom.content.style.width=`${P}px`;else j.dom.content.style.height=`${P}px`;M()}),j.methods.set("updateGrid",(_)=>{if(_.columns!==void 0){if(!Number.isInteger(_.columns)||_.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");L.columns=_.columns}if(_.gap!==void 0){if(_.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");L.gap=_.gap}if(q)q.update(L);let E=W();if(Z.containerWidth=E,Z.columns=L.columns,Z.gap=L.gap??0,Q)Q.updateContainerWidth(E);j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let P=0;P<j.contentSizeHandlers.length;P++)j.contentSizeHandlers[P]();if(Q)Q.clear();j.forceRender()});let D=null,C=null,I=!1,f=()=>{if(I)return;I=!0,D=j.methods.get("_getSelectedIds")??null,C=j.methods.get("_getFocusedIndex")??null},A=-1,p=-1,o=!0,g=U.overscan??3,l={start:0,end:0},h={start:0,end:0},K=()=>{if(j.state.isDestroyed)return;let _=j.scrollController.getScrollTop(),E=j.state.viewportState.containerSize;if(!o&&_===A&&E===p)return;A=_,p=E,o=!1;let P=j.getVirtualTotal();if(P===0||E===0)l.start=0,l.end=0;else{l.start=Math.max(0,j.sizeCache.indexAtOffset(_));let e=j.sizeCache.indexAtOffset(_+E);if(e<P-1)e++;l.end=Math.min(P-1,Math.max(0,e))}h.start=Math.max(0,l.start-g),h.end=Math.min(P-1,l.end+g);let u=j.state.viewportState;u.scrollPosition=_,u.visibleRange.start=l.start,u.visibleRange.end=l.end,u.renderRange.start=h.start,u.renderRange.end=h.end;let x=j.state.lastRenderRange,$=u.isCompressed,v=j.dataManager.getTotal(),S=q.getItemRange(h.start,h.end,v),m=j.dataManager.getItemsInRange(S.start,S.end),w=$?j.getCompressionContext():void 0;f();let d=D?D():y1,i=C?C():-1;if(Q.render(m,S,d,i,w),x.start!==h.start||x.end!==h.end)x.start=h.start,x.end=h.end,X.emit("range:change",{range:{start:h.start,end:h.end}})},G=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange.start=-1,j.state.lastRenderRange.end=-1,o=!0,K()};j.setRenderFns(K,G);let y=typeof H==="function";if(j.resizeHandlers.push((_,E)=>{let P=B?E:_;if(Z.containerWidth=P,Q)Q.updateContainerWidth(P);if(y){j.rebuildSizeCache(),j.updateContentSize(j.sizeCache.getTotalSize()),j.updateCompressionMode();for(let u=0;u<j.contentSizeHandlers.length;u++)j.contentSizeHandlers[u]();if(Q)Q.clear();j.forceRender()}}),j.methods.set("scrollToIndex",(_,E)=>{let P=Math.floor(_/J.columns),{align:u,behavior:x}=v0(E),$=j.dataManager.getState(),v=q.getTotalRows($.total),S=Math.max(0,Math.min(P,v-1)),m=y0(S,j.sizeCache,j.state.viewportState.containerSize,v,u,j.getCachedCompression());if(x==="smooth")j.scrollController.scrollTo(m);else j.scrollController.scrollTo(m)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(Q)Q.destroy(),Q=null;Y.root.classList.remove(`${V}--grid`)})},destroy(){if(Q)Q.destroy(),Q=null}}};_2();var V2=(J)=>{let q=Math.max(1,Math.floor(J.columns)),Q=J.gap??0,j=J.containerSize,Y=0,X=[],U=()=>{let Z=(q-1)*Q;Y=Math.max(0,(j-Z)/q),X=Array(q);let b=Y+Q;for(let F=0;F<q;F++)X[F]=F*b};U();let N=[],V=0,B=[],W=(Z)=>{let b=0,F=Z[0];for(let T=1;T<Z.length;T++){let M=Z[T];if(M<F)F=M,b=T}return b},k=(Z,b)=>{if(Z<=0)return V=0,N=[],[];let F=Array(q).fill(0),T=Array(q);for(let C=0;C<q;C++)T[C]=[];let M=Array(Z);for(let C=0;C<Z;C++){let I=W(F),f=b(C),A=F[I];M[C]={index:C,x:X[I],y:A,lane:I,size:f,crossSize:Y},T[I].push(C),F[I]=A+f+Q}N=T;let D=0;for(let C=0;C<q;C++){let I=F[C],f=I>0?I-Q:0;if(f>D)D=f}return V=D,M},L=(Z)=>{if(Z.length===0)return V>0?V:0;if(V>0)return V;let b=Array(q).fill(0);for(let T of Z){let M=T.y+T.size,D=b[T.lane];if(M>D)b[T.lane]=M}let F=0;for(let T=0;T<q;T++)if(b[T]>F)F=b[T];return F},z=(Z,b,F)=>{if(Z.length===0||F<=b)return B.length=0,B;if(N.length===0||N.length!==q)return O(Z,b,F);B.length=0;for(let T=0;T<q;T++){let M=N[T],D=M.length;if(D===0)continue;let C=0,I=D;while(C<I){let f=C+I>>>1,A=Z[M[f]];if(A.y+A.size<=b)C=f+1;else I=f}for(let f=C;f<D;f++){let A=Z[M[f]];if(A.y>=F)break;B.push(A)}}return B},O=(Z,b,F)=>{let T=[];for(let M of Z)if(M.y+M.size>b&&M.y<F)T.push(M);return T};return{get columns(){return q},get gap(){return Q},get containerSize(){return j},update:(Z)=>{let b=!1;if(Z.columns!==void 0){let F=Math.max(1,Math.floor(Z.columns));if(F!==q)q=F,b=!0}if(Z.gap!==void 0&&Z.gap!==Q)Q=Z.gap,b=!0;if(Z.containerSize!==void 0&&Z.containerSize!==j)j=Z.containerSize,b=!0;if(b)U()},calculateLayout:k,getTotalSize:L,getVisibleItems:z}};var P1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let U=document.createElement("div");return U.setAttribute("role","option"),U},release:(X)=>{if(X.remove(),q.length<J)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-lane"),q.push(X)},clear:()=>{q.length=0}}};var G2=(J,q,Q,j=!1,Y,X)=>{let U=P1(),N=new Map,V=new Set,B=0,W="",k=-1,L={selected:!1,focused:!1},z=(A,p)=>{return L.selected=A,L.focused=p,L},O=`${Q}-item ${Q}-masonry-item`,H=`${Q}-item--selected`,Z=`${Q}-item--focused`,b=(A,p)=>{if(typeof p==="string")A.innerHTML=p;else A.replaceChildren(p)},F=(A,p,o)=>{A.classList.toggle(H,p),A.classList.toggle(Z,o)},T=(A,p)=>{if(j)A.style.transform=`translate(${Math.round(p.y)}px, ${Math.round(p.x)}px)`;else A.style.transform=`translate(${Math.round(p.x)}px, ${Math.round(p.y)}px)`},M=(A,p)=>{if(j)A.style.width=`${p.size}px`,A.style.height=`${p.crossSize}px`;else A.style.width=`${p.crossSize}px`,A.style.height=`${p.size}px`},D=(A,p,o,g,l)=>{let h=U.acquire(),K=z(g,l);if(h.className=O,h.dataset.index=String(A),h.dataset.id=String(p.id),h.dataset.lane=String(o.lane),h.ariaSelected=String(g),X)h.id=`${X}-item-${A}`;if(Y){let y=Y();if(y!==k)k=y,W=String(y);h.setAttribute("aria-setsize",W),h.setAttribute("aria-posinset",String(A+1))}M(h,o);let G=q(p,A,K);return b(h,G),F(h,g,l),T(h,o),{element:h,lastItemId:p.id,lastSelected:g,lastFocused:l,lastY:o.y,lastX:o.x,lastSize:o.size,lastCrossSize:o.crossSize,lastSeenFrame:B}},C=(A,p,o,g)=>{B++,V.clear();for(let h=0;h<p.length;h++)V.add(p[h].index);for(let[h,K]of N)if(V.has(h))K.lastSeenFrame=B;else if(B-K.lastSeenFrame>2)U.release(K.element),N.delete(h);let l=null;for(let h=0;h<p.length;h++){let K=p[h],G=K.index,y=A(G);if(!y)continue;let _=o.has(y.id),E=G===g,P=N.get(G);if(P){let u=P.lastItemId!==y.id,x=P.lastSelected!==_,$=P.lastFocused!==E,v=P.lastY!==K.y||P.lastX!==K.x,S=P.lastSize!==K.size||P.lastCrossSize!==K.crossSize;if(u||x||$){let m=z(_,E),w=q(y,G,m);b(P.element,w),F(P.element,_,E),P.element.dataset.id=String(y.id),P.element.ariaSelected=String(_),P.lastItemId=y.id,P.lastSelected=_,P.lastFocused=E}if(S)M(P.element,K),P.lastSize=K.size,P.lastCrossSize=K.crossSize;if(v)T(P.element,K),P.lastY=K.y,P.lastX=K.x}else{let u=D(G,y,K,_,E);if(!l)l=document.createDocumentFragment();l.appendChild(u.element),N.set(G,u)}}if(l)J.appendChild(l)},I=()=>{for(let{element:A}of N.values())U.release(A);N.clear(),J.innerHTML=""};return{render:C,getElement:(A)=>N.get(A)?.element,clear:I,destroy:()=>{I(),U.clear()}}};var R1=new Set,uJ=(J)=>{if(!J.columns||J.columns<1)throw Error("[vlist/builder] withMasonry: columns must be a positive integer >= 1");let q=null,Q=null,j=[];return{name:"withMasonry",priority:10,setup(Y){let{dom:X,emitter:U,config:N,rawConfig:V}=Y,B=N.classPrefix,W=N.horizontal;if(N.reverse)throw Error("[vlist/builder] withMasonry: cannot be combined with reverse mode");X.root.classList.add(`${B}--masonry`);let k=()=>{return W?X.viewport.clientHeight:X.viewport.clientWidth},L={columns:J.columns,gap:J.gap??0,containerSize:k()};q=V2(L);let z=V.item,O=W&&V.item.width?V.item.width:z.height,H={containerWidth:0,columns:0,gap:0,columnWidth:0},Z=typeof O==="function"?(_)=>O(_,H):()=>O,b=()=>{let _=Y.dataManager.getTotal(),E=q;H.containerWidth=E.containerSize,H.columns=E.columns,H.gap=E.gap;let P=(E.columns-1)*E.gap;H.columnWidth=Math.max(0,(H.containerWidth-P)/E.columns),j=E.calculateLayout(_,Z);let u=q.getTotalSize(j);if(Y.sizeCache.getTotalSize=()=>u,W)X.content.style.width=`${u}px`;else X.content.style.height=`${u}px`},F=V.item.template;Q=G2(X.items,F,B,W,()=>Y.dataManager.getTotal(),N.ariaIdPrefix);let T=null,M=null,D=!1,C=()=>{if(D)return;D=!0,T=Y.methods.get("_getSelectedIds")??null,M=Y.methods.get("_getFocusedIndex")??null},I=(_)=>Y.dataManager.getItem(_),f=-1,A=-1,p=!0,o=(N.overscan??3)*100,g=()=>{if(Y.state.isDestroyed)return;C();let _=Y.scrollController.getScrollTop(),E=Y.state.viewportState.containerSize;if(!p&&_===f&&E===A)return;f=_,A=E,p=!1;let P=Math.max(0,_-o),u=_+E+o,x=q.getVisibleItems(j,P,u),$=T?T():R1,v=M?M():-1;if(Q&&x.length>0)Q.render(I,x,$,v);let S=Y.state.viewportState;S.scrollPosition=_;let m=x.length,w=m>0?x[0].index:0,d=m>0?x[m-1].index:0;S.visibleRange.start=w,S.visibleRange.end=d,S.renderRange.start=w,S.renderRange.end=d;let i=Y.state.lastRenderRange;if(i.start!==w||i.end!==d)i.start=w,i.end=d,U.emit("range:change",{range:{start:w,end:d}})},l=()=>{Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,p=!0,g()};Y.setRenderFns(g,l);let h=(_,E)=>{let P=W?E:_;if(q&&q.containerSize!==P){if(q.update({containerSize:P}),b(),Q)Q.clear();l()}};Y.resizeHandlers.push(h);let K=()=>{b(),l()},G=Y.dataManager,y=(_)=>{if(typeof G[_]!=="function")return;let E=G[_].bind(G);G[_]=(...P)=>{E(...P),K()}};y("setItems"),y("appendItems"),y("prependItems"),y("updateItem"),y("removeItem"),Y.methods.set("scrollToIndex",(_,E,P)=>{let u=j[_];if(!u)return;let x=u.y,$=Y.state.viewportState.containerSize,v=x;if(E==="center")v=x-$/2+u.size/2;else if(E==="end")v=x-$+u.size;v=Math.max(0,v),Y.scrollController.scrollTo(v,P==="smooth")}),b(),Y.destroyHandlers.push(()=>{if(Q)Q.destroy();X.root.classList.remove(`${B}--masonry`)})}}};var W2=(J)=>({selected:new Set(J??[]),focusedIndex:-1,focusVisible:!1}),l0=(J,q,Q)=>{if(Q==="none")return J;let j=new Set(J.selected);if(Q==="single"){if(j.clear(),q.length>0)j.add(q[0])}else for(let 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}},p0=(J,q,Q)=>{if(Q==="none")return J;if(J.selected.has(q))return r0(J,[q]);else return l0(J,[q],Q)},M2=(J,q,Q)=>{if(Q!=="multiple")return J;return{...J,selected:new Set(q.map((j)=>j.id))}},O2=(J)=>({...J,selected:new Set}),A2=(J,q)=>{return J.focusedIndex=q,J},w2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex-1;if(j<0)j=Q?q-1:0;return J.focusedIndex=j,J},v2=(J,q,Q=!0)=>{if(q===0)return J;let j=J.focusedIndex+1;if(j>=q)j=Q?0:q-1;return J.focusedIndex=j,J},S2=(J,q)=>{if(q===0)return J;return J.focusedIndex=0,J},f2=(J,q)=>{if(q===0)return J;return J.focusedIndex=q-1,J};var gJ=(J,q)=>{return J.selected.has(q)},a0=(J)=>{return Array.from(J.selected)},s0=(J,q)=>{let Q=[];for(let j of J.selected){let Y=q(j);if(Y)Q.push(Y)}return Q};var xJ=(J)=>{let q=J?.mode??"single",Q=J?.initial,j=W2(Q),Y=null;return{name:"withSelection",priority:50,methods:["select","deselect","toggleSelect","selectAll","clearSelection","getSelected","getSelectedItems"],setup(X){let{dom:U,emitter:N,config:V}=X,{classPrefix:B,ariaIdPrefix:W}=V;if(q==="none"){X.methods.set("select",()=>{}),X.methods.set("deselect",()=>{}),X.methods.set("toggleSelect",()=>{}),X.methods.set("selectAll",()=>{}),X.methods.set("clearSelection",()=>{}),X.methods.set("getSelected",()=>[]),X.methods.set("getSelectedItems",()=>[]),X.methods.set("setSelectionMode",()=>{});return}U.root.classList.add(`${B}--selectable`);let k=new Map,L=()=>{k.clear();let F=X.dataManager.getTotal(),T=X.dataManager.getCached();if(T===0)return;if(T>=F){for(let D=0;D<F;D++){let C=X.dataManager.getItem(D);if(C)k.set(C.id,D)}return}let M=X.dataManager.getStorage();if(M&&typeof M.getLoadedRanges==="function"){let D=M.getLoadedRanges();for(let C of D)for(let I=C.start;I<=C.end;I++){let f=X.dataManager.getItem(I);if(f)k.set(f.id,I)}}};N.on("load:end",({items:F,offset:T})=>{if(!F||F.length===0)return;if(T!==void 0)for(let M=0;M<F.length;M++){let D=F[M];if(D&&D.id!==void 0)k.set(D.id,T+M)}else L()}),L(),X.methods.set("_getSelectedIds",()=>{return j.selected}),X.methods.set("_getFocusedIndex",()=>{return j.focusVisible?j.focusedIndex:-1});let{forceRender:z}=X.getRenderFns(),O=()=>{z();let F=(T)=>{let M=k.get(T);if(M===void 0)return;return X.dataManager.getItem(M)};N.emit("selection:change",{selected:a0(j),items:s0(j,F)})};Y=document.createElement("div"),Y.setAttribute("aria-live","polite"),Y.setAttribute("aria-atomic","true"),Y.className=`${B}-live-region`,Y.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",U.root.appendChild(Y);let H=Y;N.on("selection:change",({selected:F})=>{let T=F.length;if(T===0)H.textContent="";else if(T===1)H.textContent="1 item selected";else H.textContent=`${T} items selected`});let Z=()=>{if(X.state.isDestroyed)return;if(!U.root.matches(":focus-visible"))return;let F=X.dataManager.getTotal();if(F===0)return;let T=j.focusedIndex>=0?Math.min(j.focusedIndex,F-1):0;j=A2(j,T),j.focusVisible=!0,U.root.setAttribute("aria-activedescendant",`${W}-item-${T}`),X.scrollController.scrollTo(y0(T,X.sizeCache,X.state.viewportState.containerSize,X.dataManager.getState().total,"center",X.getCachedCompression()));let M=X.dataManager.getItem(T);if(M)X.renderer.updateItemClasses(T,j.selected.has(M.id),!0)};U.root.addEventListener("focusin",Z);let b=(F)=>{if(X.state.isDestroyed)return;let T=F.relatedTarget;if(T&&U.root.contains(T))return;let M=j.focusedIndex;if(j.focusVisible=!1,U.root.removeAttribute("aria-activedescendant"),M>=0){let D=X.dataManager.getItem(M);if(D)X.renderer.updateItemClasses(M,j.selected.has(D.id),!1)}};U.root.addEventListener("focusout",b),X.clickHandlers.push((F)=>{if(X.state.isDestroyed)return;let M=F.target.closest("[data-index]");if(!M)return;let D=parseInt(M.dataset.index??"-1",10);if(D<0)return;let C=X.dataManager.getItem(D);if(!C)return;N.emit("item:click",{item:C,index:D,event:F}),j=A2(j,D),j.focusVisible=!1,U.root.setAttribute("aria-activedescendant",`${W}-item-${D}`),j=p0(j,C.id,q),O()}),X.keydownHandlers.push((F)=>{if(X.state.isDestroyed)return;let T=X.dataManager.getTotal(),M=j.focusedIndex,D=!1,C=!1,I=j;switch(F.key){case"ArrowUp":I=w2(j,T),I.focusVisible=!0,D=!0,C=!0;break;case"ArrowDown":I=v2(j,T),I.focusVisible=!0,D=!0,C=!0;break;case"Home":I=S2(j,T),I.focusVisible=!0,D=!0,C=!0;break;case"End":I=f2(j,T),I.focusVisible=!0,D=!0,C=!0;break;case" ":case"Enter":if(j.focusedIndex>=0){let f=X.dataManager.getItem(j.focusedIndex);if(f)I=p0(j,f.id,q),I.focusVisible=!0;D=!0}break}if(D){F.preventDefault(),j=I;let f=j.focusedIndex;if(f>=0){let A=X.dataManager.getState(),p=y0(f,X.sizeCache,X.state.viewportState.containerSize,A.total,"center",X.getCachedCompression());X.scrollController.scrollTo(p),U.root.setAttribute("aria-activedescendant",`${W}-item-${f}`)}else U.root.removeAttribute("aria-activedescendant");if(C){let{selected:A}=j;if(M>=0&&M!==f){let p=X.dataManager.getItem(M);if(p)X.renderer.updateItemClasses(M,A.has(p.id),!1)}if(f>=0){let p=X.dataManager.getItem(f);if(p)X.renderer.updateItemClasses(f,A.has(p.id),!0)}}else O()}}),X.methods.set("select",(...F)=>{j=l0(j,F,q),O()}),X.methods.set("deselect",(...F)=>{j=r0(j,F),O()}),X.methods.set("toggleSelect",(F)=>{j=p0(j,F,q),O()}),X.methods.set("selectAll",()=>{if(q!=="multiple")return;let F=X.getAllLoadedItems();j=M2(j,F,q),L(),O()}),X.methods.set("clearSelection",()=>{j=O2(j),O()}),X.methods.set("getSelected",()=>{return a0(j)}),X.methods.set("getSelectedItems",()=>{return s0(j,(T)=>{let M=k.get(T);if(M===void 0)return;return X.dataManager.getItem(M)})}),X.destroyHandlers.push(()=>{if(H&&H.parentNode)H.remove();U.root.removeEventListener("focusin",Z),U.root.removeEventListener("focusout",b)})},destroy(){if(Y&&Y.parentNode)Y.remove();Y=null}}};var mJ=(J)=>{let q=J?.restore;return{name:"withSnapshots",priority:50,methods:["getScrollSnapshot","restoreScroll"],setup(Q){Q.methods.set("getScrollSnapshot",()=>{let Y=Q.scrollController.getScrollTop(),X=Q.getCachedCompression(),U=Q.getVirtualTotal(),N=Q.methods.get("getSelected"),V=N&&N().length>0?N():void 0;if(U===0){let L={index:0,offsetInItem:0,total:0};if(V)L.selectedIds=V;return L}let B,W;if(X.isCompressed){let z=Y/X.virtualSize*U;B=Math.max(0,Math.min(Math.floor(z),U-1)),W=(z-B)*Q.sizeCache.getSize(B)}else B=Q.sizeCache.indexAtOffset(Y),W=Y-Q.sizeCache.getOffset(B);W=Math.max(0,W);let k={index:B,offsetInItem:W,total:U};if(V)k.selectedIds=V;return k});let j=(Y)=>{let{index:X,offsetInItem:U,selectedIds:N}=Y,V=Q.getVirtualTotal();if(V===0)return;if(!Number.isFinite(X)||!Number.isFinite(U))return;if(Q.sizeCache.getTotal()!==V){Q.sizeCache.rebuild(V),Q.updateCompressionMode();let Z=Q.getCachedCompression();Q.updateContentSize(Z.virtualSize)}let W=Q.getCachedCompression(),k=Math.max(0,Math.min(X,V-1)),L;if(W.isCompressed){let Z=Q.sizeCache.getSize(k),b=Z>0?U/Z:0;L=(k+b)/V*W.virtualSize}else L=Q.sizeCache.getOffset(k)+U;let z=Q.state.viewportState.containerSize,O=Math.max(0,W.virtualSize-z);if(L=Math.max(0,Math.min(L,O)),Q.scrollController.scrollTo(L),N&&N.length>0){let Z=Q.methods.get("select");if(Z)Z(...N)}let H=Q.methods.get("loadVisibleRange");if(H)requestAnimationFrame(()=>{H()});else{let Z=Q.methods.get("reload");if(Z)requestAnimationFrame(()=>{Z()})}};if(Q.methods.set("restoreScroll",j),q)queueMicrotask(()=>{j(q)})}}};var E2=(J,q=50,Q=1/0,j=!0)=>{let Y=J,X=[],U=0,N=()=>{X=Y.map((Z,b)=>({def:Z,index:b,width:0,minWidth:z1(Z.minWidth??q,1),maxWidth:Z.maxWidth??Q,resizable:Z.resizable??j,offset:0}))},V=(Z)=>{if(X.length===0){U=0;return}let b=0,F=0;for(let T=0;T<X.length;T++){let M=X[T],D=M.def;if(D.width!==void 0)M.width=I2(D.width,M.minWidth,M.maxWidth),b+=M.width;else F++}if(F>0){let M=Math.max(0,Z-b)/F;for(let D=0;D<X.length;D++){let C=X[D];if(C.def.width===void 0)C.width=I2(M,C.minWidth,C.maxWidth)}}B()},B=()=>{let Z=0;for(let b=0;b<X.length;b++){let F=X[b];F.offset=Z,Z+=F.width}U=Z},W=(Z,b)=>{if(Z<0||Z>=X.length)return 0;let F=X[Z];if(!F.resizable)return F.width;let T=I2(b,F.minWidth,F.maxWidth);return F.width=T,B(),T},k=(Z)=>{return X[Z]},L=(Z)=>{if(X.length===0)return;if(Z<0)return X[0];if(Z>=U)return X[X.length-1];let b=0,F=X.length-1;while(b<F){let T=b+F>>>1,M=X[T];if(Z<M.offset)F=T-1;else if(Z>=M.offset+M.width)b=T+1;else return M}return X[b]},z=(Z)=>{if(Z<0||Z>=X.length)return 0;return X[Z].offset},O=(Z)=>{if(Z<0||Z>=X.length)return 0;return X[Z].width},H=(Z)=>{Y=Z,N()};return N(),{get columns(){return X},get totalWidth(){return U},resolve:V,updateColumns:H,resizeColumn:W,getColumn:k,getColumnAtX:L,getColumnOffset:z,getColumnWidth:O}},I2=(J,q,Q)=>Math.min(Q,Math.max(q,J)),z1=(J,q)=>Math.max(q,J);var F2=(J,q,Q,j,Y,X,U)=>{let N=document.createElement("div");N.className=`${j}-table-header`,N.setAttribute("role","row"),N.setAttribute("aria-rowindex","1"),N.style.height=`${Q}px`;let V=document.createElement("div");V.className=`${j}-table-header-scroll`,N.appendChild(V),J.insertBefore(N,J.firstChild),q.style.position="absolute",q.style.top=`${Q}px`,q.style.left="0",q.style.right="0",q.style.bottom="0",q.style.height="auto";let B=[],W=[],k=[],L=!0,z=null,O="asc",H=null,Z=!1,b=-1,F=0,T=0,M=(G,y)=>{let _=document.createElement("div");_.className=`${j}-table-header-cell`,_.setAttribute("role","columnheader"),_.setAttribute("aria-colindex",String(y+1)),_.dataset.columnKey=G.def.key;let E=G.def.align;if(E==="center")_.classList.add(`${j}-table-header-cell--center`);else if(E==="right")_.classList.add(`${j}-table-header-cell--right`);let P=document.createElement("div");P.className=`${j}-table-header-content`;let u=G.def.header?G.def.header(G.def):G.def.label;if(typeof u==="string")P.textContent=u;else P.appendChild(u);if(_.appendChild(P),G.def.sortable){let x=document.createElement("span");x.className=`${j}-table-header-sort`,x.setAttribute("aria-hidden","true"),_.appendChild(x),k.push(x),_.classList.add(`${j}-table-header-cell--sortable`)}else k.push(null);if(G.resizable){let x=document.createElement("div");x.className=`${j}-table-header-resize`,x.dataset.resizeIndex=String(y),_.appendChild(x),W.push(x)}return _},D=(G)=>{H=G,V.textContent="",B=[],W=[],k=[];let y=G.columns;for(let _=0;_<y.length;_++){let E=y[_],P=M(E,_);B.push(P),V.appendChild(P)}if(C(G),z)I(z,O)},C=(G)=>{H=G;let y=G.columns;V.style.width=`${G.totalWidth}px`;for(let _=0;_<B.length&&_<y.length;_++){let E=B[_],P=y[_];E.style.width=`${P.width}px`}},I=(G,y)=>{if(z=G,O=y,!H)return;let _=H.columns;for(let E=0;E<k.length&&E<_.length;E++){let P=k[E];if(!P)continue;if(_[E].def.key===G&&G!==null)P.textContent=y==="asc"?"▲":"▼",P.style.opacity="0.7",B[E].setAttribute("aria-sort",y==="asc"?"ascending":"descending");else P.textContent="",P.style.opacity="0",B[E].removeAttribute("aria-sort")}},f=(G)=>{V.style.transform=`translateX(${-G}px)`},A=(G)=>{let y=G.target;if(!y.dataset.resizeIndex)return;if(G.preventDefault(),G.stopPropagation(),b=parseInt(y.dataset.resizeIndex,10),!H)return;let _=H.getColumn(b);if(!_||!_.resizable)return;Z=!0,F=G.clientX,T=_.width,J.classList.add(`${j}--col-resizing`),J.style.cursor="col-resize",y.style.borderColor="var(--vlist-border-selected, #3b82f6)",y.setPointerCapture(G.pointerId),y.addEventListener("pointermove",p),y.addEventListener("pointerup",o),y.addEventListener("pointercancel",o)},p=(G)=>{if(!Z||!H)return;let y=G.clientX-F;if(Math.abs(y)<1)return;let _=Math.max(0,T+y);Y(b,_)},o=(G)=>{if(!Z)return;let y=G.target;y.removeEventListener("pointermove",p),y.removeEventListener("pointerup",o),y.removeEventListener("pointercancel",o);try{y.releasePointerCapture(G.pointerId)}catch{}y.style.borderColor="transparent",J.classList.remove(`${j}--col-resizing`),J.style.cursor="",Z=!1,b=-1},g=(G)=>{let y=G.target;if(y.dataset.resizeIndex!==void 0)return;if(Z)return;let _=y;while(_&&!_.dataset.columnKey)if(_=_.parentElement,_===N||_===null)return;if(!_||!_.dataset.columnKey)return;let E=_.dataset.columnKey;if(!H)return;let P=H.columns,u=-1;for(let $=0;$<P.length;$++)if(P[$].def.key===E){u=$;break}if(u===-1)return;let x=P[u];if(U)U({key:E,index:u,event:G});if(x.def.sortable&&X){let $;if(z===E)if(O==="asc")$="desc";else $=null;else $="asc";X({key:E,index:u,direction:$})}};return N.addEventListener("pointerdown",A),N.addEventListener("click",g),{element:N,update:C,updateSort:I,rebuild:D,show:()=>{if(L)return;L=!0,N.style.display=""},hide:()=>{if(!L)return;L=!1,N.style.display="none"},destroy:()=>{N.removeEventListener("pointerdown",A),N.removeEventListener("click",g),q.style.position="",q.style.top="",q.style.left="",q.style.right="",q.style.bottom="",N.remove(),B=[],W=[],k=[],H=null,L=!1},syncScroll:f}};var C1=(J=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;return document.createElement("div")},release:(X)=>{if(X.parentNode)X.parentNode.removeChild(X);if(q.length<J)X.className="",X.removeAttribute("data-id"),X.removeAttribute("data-index"),X.removeAttribute("aria-selected"),X.removeAttribute("aria-rowindex"),X.removeAttribute("role"),X.style.cssText="",X.textContent="",q.push(X)},clear:()=>{q.length=0}}};var L2=(J,q,Q,j,Y,X,U)=>{let N=C1(),V=new Map,B=0,W=-1,k=Q,L=(K,G)=>{if(G)K.setAttribute("aria-selected","true");else K.removeAttribute("aria-selected")},z=`${Y}-item ${Y}-table-row`,O=`${Y}-item--selected`,H=`${Y}-item--focused`,Z=`${Y}-table-cell`,b=`${Y}-table-cell--center`,F=`${Y}-table-cell--right`,T=(K,G,y,_)=>{if(y.def.cell){let E=y.def.cell(G,y.def,_);if(typeof E==="string")K.innerHTML=E;else K.replaceChildren(E)}else{let E=G[y.def.key];K.textContent=E!=null?String(E):""}},M=(K,G,y)=>{let _=z;if(G)_+=` ${O}`;if(y)_+=` ${H}`;K.className=_},D=(K,G)=>{let y=G.def.align;if(y==="center")K.classList.add(b),K.classList.remove(F);else if(y==="right")K.classList.add(F),K.classList.remove(b);else K.classList.remove(b,F)},C=(K,G)=>{let _=k.columns.length;if(G.length===_)return G;let E=[];for(let P=0;P<_;P++){let u;if(P<G.length)u=G[P];else u=document.createElement("div"),u.className=Z,K.appendChild(u);E.push(u)}for(let P=_;P<G.length;P++)G[P].remove();return E},I=(K,G,y,_)=>{let E=N.acquire();E.style.width=`${k.totalWidth}px`;let P=q.getSize(G);E.style.height=`${P}px`,M(E,y,_),E.setAttribute("role","row"),E.setAttribute("data-id",String(K.id)),E.setAttribute("data-index",String(G)),E.id=`${X}-${G}`,E.setAttribute("aria-rowindex",String(G+2));let u=U();if(u!==W)W=u;L(E,y);let x=C(E,[]),$=k.columns;for(let S=0;S<x.length&&S<$.length;S++){let m=x[S],w=$[S];m.style.left=`${w.offset}px`,m.style.width=`${w.width}px`,m.setAttribute("role","gridcell"),m.setAttribute("aria-colindex",String(S+1)),D(m,w),T(m,K,w,G)}let v=q.getOffset(G);return E.style.transform=`translateY(${v}px)`,{element:E,cells:x,index:G,lastItemId:K.id,lastSelected:y,lastFocused:_,lastOffset:v,lastSeenFrame:B}},f=(K,G,y,_)=>{B++;for(let[x,$]of V)if(x>=G.start&&x<=G.end)$.lastSeenFrame=B;else if(B-$.lastSeenFrame>2)N.release($.element),V.delete(x);let E=!1,P=U();if(P!==W)W=P,E=!0;let u=null;for(let x=G.start;x<=G.end;x++){let $=x-G.start,v=K[$];if(!v)continue;let S=y.has(v.id),m=x===_,w=V.get(x);if(w){let d=w.lastItemId!==v.id,i=w.lastSelected!==S,e=w.lastFocused!==m;if(d){let B0=k.columns;for(let c=0;c<w.cells.length&&c<B0.length;c++)T(w.cells[c],v,B0[c],x);M(w.element,S,m),w.element.setAttribute("data-id",String(v.id)),L(w.element,S),w.lastItemId=v.id,w.lastSelected=S,w.lastFocused=m}else if(i||e)M(w.element,S,m),L(w.element,S),w.lastSelected=S,w.lastFocused=m;let t=q.getOffset(x);if(w.lastOffset!==t)w.lastOffset=t,w.element.style.transform=`translateY(${t}px)`;let K0=q.getSize(x);if(w.element.style.height=`${K0}px`,w.element.style.width=`${k.totalWidth}px`,E)w.element.setAttribute("aria-rowindex",String(x+2));w.lastSeenFrame=B}else{let d=I(v,x,S,m);if(V.set(x,d),!u)u=document.createDocumentFragment();u.appendChild(d.element)}}if(u)J.appendChild(u)},A=(K,G,y,_)=>{let E=V.get(K);if(!E)return;let P=E.lastItemId!==G.id,u=E.lastSelected!==y,x=E.lastFocused!==_;if(P||u||x){if(P){let $=k.columns;for(let v=0;v<E.cells.length&&v<$.length;v++)T(E.cells[v],G,$[v],K);E.element.setAttribute("data-id",String(G.id)),E.lastItemId=G.id}M(E.element,y,_),L(E.element,y),E.lastSelected=y,E.lastFocused=_}},p=(K,G,y)=>{let _=V.get(K);if(!_)return;let E=_.lastSelected!==G,P=_.lastFocused!==y;if(E||P)M(_.element,G,y),L(_.element,G),_.lastSelected=G,_.lastFocused=y},o=(K)=>{k=K;let G=K.columns;for(let[,y]of V){y.element.style.width=`${K.totalWidth}px`;for(let _=0;_<y.cells.length&&_<G.length;_++){let E=y.cells[_],P=G[_];E.style.left=`${P.offset}px`,E.style.width=`${P.width}px`}}},g=(K)=>{return V.get(K)?.element},l=()=>{for(let[,K]of V)N.release(K.element);V.clear(),B=0,W=-1};return{render:f,updateItem:A,updateItemClasses:p,getElement:g,updateColumnLayout:o,clear:l,destroy:()=>{l(),N.clear()}}};var w1=new Set,dJ=(J)=>{if(!J.columns||J.columns.length===0)throw Error("[vlist/builder] withTable: columns must be a non-empty array");if(J.rowHeight===void 0&&J.estimatedRowHeight===void 0)throw Error("[vlist/builder] withTable: either rowHeight or estimatedRowHeight is required");let q=null,Q=null,j=null;return{name:"withTable",priority:10,conflicts:["withGrid","withMasonry"],setup(Y){let{dom:X,emitter:U,config:N}=Y,{classPrefix:V}=N;if(N.horizontal)throw Error("[vlist/builder] withTable cannot be used with orientation: 'horizontal'");if(N.reverse)throw Error("[vlist/builder] withTable cannot be used with reverse: true");let B=J.resizable??!0,W=J.minColumnWidth??50,k=J.maxColumnWidth??1/0,L=J.columnBorders??!1,z=J.rowBorders??!0,O=J.rowHeight,H=J.headerHeight??(typeof O==="number"?O:40),Z=J.sort?.key??null,b=J.sort?.direction??"asc";if(q=E2(J.columns,W,k,B),typeof O==="function")Y.setSizeConfig(O);else if(typeof O==="number")Y.setSizeConfig(O);if(Y.rebuildSizeCache(),X.root.classList.add(`${V}--table`),z)X.root.classList.add(`${V}--table-row-borders`);if(L)X.root.classList.add(`${V}--table-col-borders`);X.root.setAttribute("role","grid"),X.root.setAttribute("aria-colcount",String(J.columns.length));let F=Y.getContainerWidth();q.resolve(F);let T=($,v)=>{if(!q)return;let S=q.getColumn($);if(!S)return;let m=S.width,w=q.resizeColumn($,v);if(Q)Q.update(q);if(j)j.updateColumnLayout(q);C(),U.emit("column:resize",{key:S.def.key,index:$,previousWidth:m,width:w})},M=($)=>{if($.direction===null)Z=null,b="asc";else Z=$.key,b=$.direction;if(Q)Q.updateSort(Z,b);U.emit("column:sort",$)},D=($)=>{U.emit("column:click",$)};if(Q=F2(X.root,X.viewport,H,V,T,M,D),Q.rebuild(q),Z)Q.updateSort(Z,b);let C=()=>{if(!q)return;let $=q.totalWidth;X.content.style.minWidth=`${$}px`,X.items.style.minWidth=`${$}px`};C(),j=L2(X.items,Y.sizeCache,q,J.columns,V,N.ariaIdPrefix,()=>Y.dataManager.getTotal());let I=null,f=null,A=!1,p=()=>{if(A)return;A=!0,I=Y.methods.get("_getSelectedIds")??null,f=Y.methods.get("_getFocusedIndex")??null},o=-1,g=-1,l=!0,h=N.overscan??3,K={start:0,end:0},G={start:0,end:0},y=()=>{if(Y.state.isDestroyed)return;let $=Y.scrollController.getScrollTop(),v=Y.state.viewportState.containerSize;if(!l&&$===o&&v===g)return;o=$,g=v,l=!1;let S=Y.getVirtualTotal();if(S===0||v===0)K.start=0,K.end=0;else{K.start=Math.max(0,Y.sizeCache.indexAtOffset($));let t=Y.sizeCache.indexAtOffset($+v);if(t<S-1)t++;K.end=Math.min(S-1,Math.max(0,t))}G.start=Math.max(0,K.start-h),G.end=Math.min(S-1,K.end+h);let m=Y.state.viewportState;m.scrollPosition=$,m.visibleRange.start=K.start,m.visibleRange.end=K.end,m.renderRange.start=G.start,m.renderRange.end=G.end;let w=Y.state.lastRenderRange,d=Y.dataManager.getItemsInRange(G.start,G.end);p();let i=I?I():w1,e=f?f():-1;if(j.render(d,G,i,e),w.start!==G.start||w.end!==G.end)w.start=G.start,w.end=G.end,U.emit("range:change",{range:{start:G.start,end:G.end}})},_=()=>{if(Y.state.isDestroyed)return;Y.state.lastRenderRange.start=-1,Y.state.lastRenderRange.end=-1,l=!0,y()};Y.setRenderFns(y,_);let E=Q,P=-1,u=()=>{let $=X.viewport.scrollLeft;if($!==P){if(P=$,E.syncScroll)E.syncScroll($)}};Y.afterScroll.push(()=>{u()});let x=()=>{u()};X.viewport.addEventListener("scroll",x,{passive:!0}),Y.resizeHandlers.push(($,v)=>{if(!q)return;if(q.resolve($),Q)Q.update(q);if(j)j.updateColumnLayout(q);C()}),Y.methods.set("updateColumns",($)=>{if(!q||!Q)return;if(q.updateColumns($),q.resolve(Y.getContainerWidth()),Q.rebuild(q),Z)Q.updateSort(Z,b);if(C(),j)j.updateColumnLayout(q),j.clear();Y.forceRender()}),Y.methods.set("resizeColumn",($,v)=>{if(!q)return;let S;if(typeof $==="string"){let m=q.columns;S=-1;for(let w=0;w<m.length;w++)if(m[w].def.key===$){S=w;break}if(S===-1)return}else S=$;T(S,v)}),Y.methods.set("getColumnWidths",()=>{if(!q)return{};let $={},v=q.columns;for(let S=0;S<v.length;S++)$[v[S].def.key]=v[S].width;return $}),Y.methods.set("setSort",($,v)=>{if(Z=$,b=v??"asc",Q)Q.updateSort(Z,b)}),Y.methods.set("getSort",()=>{return{key:Z,direction:b}}),Y.methods.set("_getTableLayout",()=>q),Y.contentSizeHandlers.push(()=>{C()}),Y.destroyHandlers.push(()=>{if(X.viewport.removeEventListener("scroll",x),Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null;X.content.style.minWidth="",X.items.style.minWidth="",X.root.classList.remove(`${V}--table`),X.root.setAttribute("role","listbox"),X.root.removeAttribute("aria-colcount")})},destroy(){if(Q)Q.destroy(),Q=null;if(j)j.destroy(),j=null}}};export{dJ as withTable,mJ as withSnapshots,xJ as withSelection,OJ as withScrollbar,FJ as withScale,TJ as withPage,uJ as withMasonry,pJ as withGroups,hJ as withGrid,LJ as withAsync,XJ as vlist,p0 as toggleSelection,$J as simpleVisibleRange,l0 as selectItems,M2 as selectAll,wJ as rangesEqual,X2 as rafThrottle,GJ as needsScaling,K2 as mergeRanges,gJ as isSelected,z0 as isPlaceholderItem,vJ as isInRange,C0 as isGroupHeader,s0 as getSelectedItems,a0 as getSelectedIds,L0 as getScaleState,MJ as getScaleInfo,L0 as getScale,SJ as getRangeCount,WJ as getMaxItemsWithoutScaling,z2 as filterPlaceholders,fJ as diffRanges,r0 as deselectItems,L2 as createTableRenderer,E2 as createTableLayout,F2 as createTableHeader,N2 as createStickyHeader,Y2 as createSparseStorage,$0 as createSizeCache,W2 as createSelectionState,I0 as createScrollbar,EJ as createScrollController,B2 as createPlaceholderManager,t0 as createMeasuredSizeCache,G2 as createMasonryRenderer,V2 as createMasonryLayout,d0 as createGroupedSizeFn,Z2 as createGroupLayout,c0 as createGridRenderer,D2 as createGridLayout,e0 as createEmitter,U2 as createAsyncManager,O2 as clearSelection,CJ as clampScrollPosition,PJ as calculateTotalSize,y0 as calculateScrollToIndex,J2 as calculateScaledVisibleRange,Q2 as calculateScaledScrollToIndex,DJ as calculateScaledRenderRange,f0 as calculateScaledItemPosition,kJ as calculateRenderRange,x0 as calculateMissingRanges,zJ as calculateItemOffset,VJ as calculateIndexFromScrollPosition,RJ as calculateActualSize,m0 as buildLayoutItems,k0 as MAX_VIRTUAL_SIZE,_J as MAX_VIRTUAL_HEIGHT};
@@ -0,0 +1 @@
1
+ .vlist--table{overflow:hidden;min-height:inherit}.vlist--table .vlist-viewport{overflow:auto}.vlist--table .vlist-items{contain:layout style}.vlist-table-header{position:absolute;top:0;left:0;right:0;z-index:5;overflow:hidden;display:flex;align-items:stretch;box-sizing:border-box;will-change:scroll-position;contain:layout style;background-color:var(--vlist-bg,#ffffff);border-bottom:1px solid var(--vlist-border,#e5e7eb);font-weight:600;font-size:0.8125rem;letter-spacing:0.01em;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-scroll{position:relative;display:flex;align-items:stretch;height:100%;min-width:100%;flex-shrink:0}.vlist-table-header-cell{position:relative;display:flex;align-items:center;height:100%;box-sizing:border-box;overflow:hidden;flex-shrink:0;user-select:none;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);border-right:1px solid transparent;transition:background-color 0.15s ease}.vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,#f9fafb)}.vlist-table-header-cell--sortable{cursor:pointer}.vlist-table-header-cell--sortable:active{background-color:var(--vlist-bg-selected,#eff6ff)}.vlist-table-header-cell--center{justify-content:center}.vlist-table-header-cell--right{justify-content:flex-end}.vlist-table-header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;pointer-events:none}.vlist-table-header-sort{margin-left:4px;flex-shrink:0;opacity:0;font-size:0.7em;transition:opacity 0.15s ease;pointer-events:none;color:var(--vlist-text-muted,#6b7280)}.vlist-table-header-resize{position:absolute;top:0;right:0;bottom:0;width:6px;cursor:col-resize;z-index:2;touch-action:none;border-right:2px solid transparent;opacity:0;transition:opacity 0.15s ease,border-color 0.15s ease}.vlist-table-header-cell:hover .vlist-table-header-resize{opacity:1;border-right-color:var(--vlist-border,#e5e7eb)}.vlist-table-header-resize:hover{opacity:1;border-right-color:var(--vlist-focus-ring,#3b82f6) !important}.vlist--col-resizing,.vlist--col-resizing *{cursor:col-resize !important;user-select:none !important}.vlist-table-row{position:absolute;top:0;left:0;display:flex;box-sizing:border-box;contain:content;border-bottom:none;background-color:var(--vlist-bg,#ffffff);cursor:default;user-select:none;transition:background-color var(--vlist-transition-duration,150ms) var(--vlist-transition-timing,ease-in-out);will-change:transform}.vlist--scrolling .vlist-table-row{transition:none}.vlist--selectable .vlist-table-row{cursor:pointer}.vlist--selectable .vlist-table-row:hover{background-color:var(--vlist-bg-hover,#f9fafb)}.vlist-table-row.vlist-item--selected{background-color:var(--vlist-bg-selected,#eff6ff)}.vlist--selectable .vlist-table-row.vlist-item--selected:hover{background-color:var(--vlist-bg-selected-hover,#dbeafe)}.vlist-table-row.vlist-item--focused{outline:2px solid var(--vlist-focus-ring,#3b82f6);outline-offset:-2px;z-index:1}.vlist-table-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-left:var(--vlist-item-padding-x,0.75rem);padding-right:var(--vlist-item-padding-x,0.75rem);font-size:0.875rem;color:var(--vlist-text,#111827)}.vlist-table-cell--center{text-align:center;justify-content:center}.vlist-table-cell--right{text-align:right;justify-content:flex-end}.vlist--table-row-borders .vlist-table-row{border-bottom:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-cell{border-right:1px solid var(--vlist-border,#e5e7eb)}.vlist--table-col-borders .vlist-table-cell:last-child{border-right:none}.vlist--table-col-borders .vlist-table-header-cell{border-right-color:var(--vlist-border,#e5e7eb)}[data-theme-mode="dark"] .vlist-table-header{background-color:var(--vlist-bg,#111827);color:var(--vlist-text-muted,#9ca3af);border-bottom-color:var(--vlist-border,#374151)}[data-theme-mode="dark"] .vlist-table-header-cell:hover{background-color:var(--vlist-bg-hover,#1f2937)}[data-theme-mode="dark"] .vlist-table-header-resize:hover{border-right-color:var(--vlist-focus-ring,#3b82f6) !important}[data-theme-mode="dark"] .vlist-table-header-cell:hover .vlist-table-header-resize{border-right-color:var(--vlist-border,#374151)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floor/vlist",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Lightweight, high-performance virtual list with zero dependencies",
5
5
  "author": {
6
6
  "name": "Floor IO",
@@ -35,6 +35,7 @@
35
35
  "default": "./dist/index.js"
36
36
  },
37
37
  "./styles": "./dist/vlist.css",
38
+ "./styles/table": "./dist/vlist-table.css",
38
39
  "./styles/extras": "./dist/vlist-extras.css",
39
40
  "./package.json": "./package.json"
40
41
  },