vlist 3.1.0-next.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.github.md +116 -31
- package/README.md +114 -22
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/react.d.ts +38 -0
- package/dist/react.js +1 -0
- package/dist/size.json +1 -1
- package/dist/solid.d.ts +34 -0
- package/dist/solid.js +1 -0
- package/dist/svelte.d.ts +30 -0
- package/dist/svelte.js +1 -0
- package/dist/version.json +1 -1
- package/dist/vue.d.ts +30 -0
- package/dist/vue.js +1 -0
- package/package.json +49 -2
package/README.github.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The virtual list library for every framework. Ultra efficient, batteries-included, and accessible with composable plugins.
|
|
4
4
|
|
|
5
|
-
**v3.1.0
|
|
5
|
+
**v3.1.0** — `scroll.mode` on the one `vlist` entry: the default, `"auto"`, scrolls natively and hands a list past the browser's size limit to synthetic input, which draws its own scrollbar. Vue, Svelte, Solid and React entries in the package itself (`vlist/vue`, `vlist/svelte`, `vlist/solid`, `vlist/react`), feature-first and tree-shaken like the vanilla builder; the separate adapter packages are deprecated. See the [changelog](https://github.com/floor/vlist/blob/main/CHANGELOG.md).
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/vlist)
|
|
8
8
|
[](https://bundlephobia.com/package/vlist)
|
|
@@ -10,7 +10,7 @@ The virtual list library for every framework. Ultra efficient, batteries-include
|
|
|
10
10
|
[](https://github.com/floor/vlist/blob/main/LICENSE)
|
|
11
11
|
|
|
12
12
|
- **Accessible** — `a11y()` or a selection mode adds WAI-ARIA, 2D keyboard navigation, focus recovery, screen-reader DOM ordering
|
|
13
|
-
- **Zero dependencies** — framework-agnostic core with
|
|
13
|
+
- **Zero dependencies** — framework-agnostic core, with Vue, Svelte, Solid and React entries in the same package
|
|
14
14
|
- **10.3 KB gzipped** — composable plugins with perfect tree-shaking
|
|
15
15
|
- **Constant memory** — ~0.1 MB overhead at any scale, from 10K to 1M+ items
|
|
16
16
|
- **Tree, grid, masonry, carousel, table, groups, data, selection, search, sortable, transition** — all opt-in
|
|
@@ -24,41 +24,121 @@ The virtual list library for every framework. Ultra efficient, batteries-include
|
|
|
24
24
|
|---|---|---|---|---|---|
|
|
25
25
|
| **A11y** | WAI-ARIA + 2D keyboard, one plugin | None (DIY) | Partial | Minimal | None |
|
|
26
26
|
| **Grid + Masonry + Table** | All | Grid only | Grid + Table | Grid only | None |
|
|
27
|
-
| **Vue** | 0.
|
|
28
|
-
| **Svelte** | 0.
|
|
29
|
-
| **Solid** | 0.
|
|
27
|
+
| **Vue** | `vlist/vue`, 0.4 KB | Yes | — | Yes | 11.8 KB |
|
|
28
|
+
| **Svelte** | `vlist/svelte`, 0.3 KB | Yes | — | Yes | — |
|
|
29
|
+
| **Solid** | `vlist/solid`, 0.3 KB | Yes | — | Yes | — |
|
|
30
30
|
| **Vanilla JS** | Native | Yes | — | — | — |
|
|
31
31
|
| **Constant memory** | ~0.1 MB at 1M | No | No | No | No |
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## Frameworks
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
|
38
|
-
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
35
|
+
Vue, Svelte, Solid and React each have an entry in the `vlist` package itself. Like the vanilla builder, they are feature-first: you pass plugins from `vlist`, so an app only bundles the features it uses. Every entry imports the core from `vlist`, and none carries a copy of its own.
|
|
36
|
+
|
|
37
|
+
| Framework | Import | Entry size |
|
|
38
|
+
|-----------|--------|------------|
|
|
39
|
+
| Vue 3 | `vlist/vue` | 0.4 KB gzip |
|
|
40
|
+
| Svelte 4 and 5 | `vlist/svelte` | 0.3 KB gzip |
|
|
41
|
+
| SolidJS | `vlist/solid` | 0.3 KB gzip |
|
|
42
|
+
| Vanilla JS | `vlist` | — |
|
|
43
|
+
| React 17+ | `vlist/react` | 0.4 KB gzip |
|
|
42
44
|
|
|
43
45
|
```bash
|
|
44
|
-
npm install vlist
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
npm install vlist
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Frameworks are optional peer dependencies, so install only the one you use.
|
|
50
|
+
|
|
51
|
+
**Vue**
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<script setup lang="ts">
|
|
55
|
+
import { useVList } from "vlist/vue";
|
|
56
|
+
import { grid } from "vlist";
|
|
57
|
+
|
|
58
|
+
const { containerRef, instance } = useVList(
|
|
59
|
+
{ items, item: { height: 200, template: renderPhoto } },
|
|
60
|
+
[grid({ columns: 4, gap: 16 })],
|
|
61
|
+
);
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<template><div ref="containerRef" style="height: 600px" /></template>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
If you pass a `ref` as the config, the list updates when its `items` change. `useVListEvent(instance, "item:click", handler)` subscribes to an event for the component's lifetime.
|
|
68
|
+
|
|
69
|
+
**Svelte**
|
|
70
|
+
|
|
71
|
+
```svelte
|
|
72
|
+
<script>
|
|
73
|
+
import { vlist } from "vlist/svelte";
|
|
74
|
+
import { grid } from "vlist";
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<div
|
|
78
|
+
style="height: 600px"
|
|
79
|
+
use:vlist={{
|
|
80
|
+
config: { items, item: { height: 200, template: renderPhoto } },
|
|
81
|
+
plugins: [grid({ columns: 4, gap: 16 })],
|
|
82
|
+
onInstance: (list) => (instance = list),
|
|
83
|
+
}}
|
|
84
|
+
/>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Solid**
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
import { createVList } from "vlist/solid";
|
|
91
|
+
import { grid } from "vlist";
|
|
92
|
+
|
|
93
|
+
const { setRef, instance } = createVList(
|
|
94
|
+
() => ({ items: items(), item: { height: 200, template: renderPhoto } }),
|
|
95
|
+
[grid({ columns: 4, gap: 16 })],
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
return <div ref={setRef} style={{ height: "600px" }} />;
|
|
47
99
|
```
|
|
48
100
|
|
|
49
|
-
|
|
101
|
+
`createVList` keeps the Solid primitive idiom. In a file that also uses the core builder, alias one of the two: `import { createVList as createSolidVList } from "vlist/solid"`.
|
|
102
|
+
|
|
103
|
+
**React**
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
import { useVList, useVListEvent } from "vlist/react";
|
|
107
|
+
import { grid } from "vlist";
|
|
108
|
+
|
|
109
|
+
function Photos({ items }) {
|
|
110
|
+
const { containerRef, instanceRef } = useVList(
|
|
111
|
+
{ items, item: { height: 200, template: renderPhoto } },
|
|
112
|
+
[grid({ columns: 4, gap: 16 })],
|
|
113
|
+
);
|
|
114
|
+
useVListEvent(instanceRef, "item:click", ({ item }) => open(item));
|
|
115
|
+
return <div ref={containerRef} style={{ height: 600 }} />;
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Plugins are read once, at mount; changing them means remounting the list (in React, with a `key`). An `items` change updates the list in place. `scroll.mode` and other structural options also take effect only at mount.
|
|
120
|
+
|
|
121
|
+
**Migrating from `vlist-vue`, `vlist-svelte`, `vlist-solidjs` or `vlist-react`.** Those packages are deprecated. Change the import path, and pass features as plugins instead of config fields:
|
|
122
|
+
|
|
123
|
+
| Deprecated package | Use |
|
|
124
|
+
|---|---|
|
|
125
|
+
| `vlist-vue` | `vlist/vue` |
|
|
126
|
+
| `vlist-svelte` | `vlist/svelte` |
|
|
127
|
+
| `vlist-solidjs` | `vlist/solid` |
|
|
128
|
+
| `vlist-react` | `vlist/react` |
|
|
50
129
|
|
|
51
130
|
```ts
|
|
131
|
+
// before
|
|
52
132
|
import { useVList } from "vlist-react";
|
|
133
|
+
useVList({ items, item, selection: { mode: "single" } });
|
|
53
134
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
});
|
|
135
|
+
// after
|
|
136
|
+
import { useVList } from "vlist/react";
|
|
137
|
+
import { selection } from "vlist";
|
|
138
|
+
useVList({ items, item }, [selection({ mode: "single" })]);
|
|
59
139
|
```
|
|
60
140
|
|
|
61
|
-
|
|
141
|
+
Their 3.1 releases will be built on these entries and keep the config-based API, so existing code keeps working while you migrate.
|
|
62
142
|
|
|
63
143
|
## Quick Start
|
|
64
144
|
|
|
@@ -188,7 +268,7 @@ The touch-only `.vlist-item--touch-sort` class suppresses selection and callouts
|
|
|
188
268
|
| `vlist/synthetic` (deprecated) | 34.2 KB | 12.9 KB |
|
|
189
269
|
| `vlist/native` (alias) | 27.3 KB | 10.3 KB |
|
|
190
270
|
| `a11y()` | 31.2 KB | 11.7 KB |
|
|
191
|
-
| `selection()` | 36.9 KB | 13.
|
|
271
|
+
| `selection()` | 36.9 KB | 13.3 KB |
|
|
192
272
|
| `data()` | 41.0 KB | 15.1 KB |
|
|
193
273
|
| `scrollbar()` | 35.5 KB | 13.2 KB |
|
|
194
274
|
| `sortable()` | 39.2 KB | 13.9 KB |
|
|
@@ -197,16 +277,21 @@ The touch-only `.vlist-item--touch-sort` class suppresses selection and callouts
|
|
|
197
277
|
| `snapshots()` | 30.6 KB | 11.4 KB |
|
|
198
278
|
| `transition()` | 34.1 KB | 12.3 KB |
|
|
199
279
|
| `autosize()` | 30.6 KB | 11.5 KB |
|
|
200
|
-
| `grid()` | 34.
|
|
280
|
+
| `grid()` | 34.7 KB | 12.9 KB |
|
|
201
281
|
| `table()` | 45.8 KB | 16.2 KB |
|
|
202
282
|
| `masonry()` | 39.4 KB | 14.7 KB |
|
|
203
|
-
| `tree()` | 43.
|
|
283
|
+
| `tree()` | 43.5 KB | 15.7 KB |
|
|
204
284
|
| `search()` | 36.9 KB | 13.6 KB |
|
|
205
|
-
| `carousel()` | 43.
|
|
206
|
-
| `vlist/synthetic` + `carousel()` | 49.
|
|
285
|
+
| `carousel()` | 43.2 KB | 15.8 KB |
|
|
286
|
+
| `vlist/synthetic` + `carousel()` | 49.3 KB | 18.1 KB |
|
|
207
287
|
| `vlist/synthetic` + `sortable()` | 46.1 KB | 16.5 KB |
|
|
288
|
+
| `vlist/vue` `useVList` | 27.7 KB | 10.5 KB |
|
|
289
|
+
| `vlist/svelte` `vlist` | 27.5 KB | 10.4 KB |
|
|
290
|
+
| `vlist/solid` `createVList` | 27.6 KB | 10.4 KB |
|
|
291
|
+
| `vlist/react` `useVList` | 27.8 KB | 10.5 KB |
|
|
292
|
+
| `vlist/react` + `grid()` | 35.2 KB | 13.1 KB |
|
|
208
293
|
|
|
209
|
-
Sizes are tree-shaken totals from `bun run size`, not additive plugin costs. Plugin rows include the native default factory plus that plugin. The base is **10,
|
|
294
|
+
Sizes are tree-shaken totals from `bun run size`, not additive plugin costs. Plugin rows include the native default factory plus that plugin; framework rows add the entry, with the framework itself external. The base is **10,539 bytes gzipped**, within the 10.3 KB budget (10,547 bytes). `bun run size` fails if a scenario fails to build, an unused plugin leaks into a bundle, or any published size exceeds its gzip budget. Synthetic input is **13,192 bytes** before plugins; with `scroll.mode`, a `vlist` list downloads the driver and its scrollbar as `synthetic-driver.js` (6.2 KB gzipped) only when it goes synthetic. The alias row measures the same source factory; the distributed alias re-exports it without duplicating the implementation.
|
|
210
295
|
|
|
211
296
|
## Examples
|
|
212
297
|
|
|
@@ -338,9 +423,9 @@ adapter instead. It cannot be combined with `tree()` either: filtering a tree
|
|
|
338
423
|
means keeping the ancestors of each match, which belongs to the plugin that
|
|
339
424
|
owns the layout, and `tree()` offers no such hook.
|
|
340
425
|
|
|
341
|
-
## Custom scrollbar
|
|
426
|
+
## Custom scrollbar
|
|
342
427
|
|
|
343
|
-
|
|
428
|
+
`scrollbar()` is a plugin. macOS and Android default to thin,
|
|
344
429
|
rounded, auto-hiding overlays; Windows defaults to a wider, square, always-visible
|
|
345
430
|
bar. Set `gutter: true` to reserve space. The same behavior works horizontally.
|
|
346
431
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The virtual list library for every framework. Ultra efficient, batteries-included, and accessible with composable plugins.
|
|
4
4
|
|
|
5
|
-
**v3.1.0
|
|
5
|
+
**v3.1.0** — `scroll.mode` on the one `vlist` entry: the default, `"auto"`, scrolls natively and hands a list past the browser's size limit to synthetic input, which draws its own scrollbar. Vue, Svelte, Solid and React entries in the package itself (`vlist/vue`, `vlist/svelte`, `vlist/solid`, `vlist/react`), feature-first and tree-shaken like the vanilla builder; the separate adapter packages are deprecated. See the [changelog](https://github.com/floor/vlist/blob/main/CHANGELOG.md).
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/vlist)
|
|
8
8
|
[](https://bundlephobia.com/package/vlist)
|
|
@@ -10,7 +10,7 @@ The virtual list library for every framework. Ultra efficient, batteries-include
|
|
|
10
10
|
[](https://github.com/floor/vlist/blob/main/LICENSE)
|
|
11
11
|
|
|
12
12
|
- **Accessible** — `a11y()` or a selection mode adds WAI-ARIA, 2D keyboard navigation, focus recovery, screen-reader DOM ordering
|
|
13
|
-
- **Zero dependencies** — framework-agnostic core,
|
|
13
|
+
- **Zero dependencies** — framework-agnostic core, with Vue, Svelte, Solid and React entries in the same package
|
|
14
14
|
- **10.3 KB gzipped** — composable plugins with perfect tree-shaking
|
|
15
15
|
- **Constant memory** — ~0.1 MB overhead at any scale, from 10K to 1M+ items
|
|
16
16
|
- **Axis-neutral** — vertical and horizontal scrolling through a single code path, all plugins work in both orientations
|
|
@@ -135,7 +135,7 @@ The touch-only `.vlist-item--touch-sort` class suppresses selection and callouts
|
|
|
135
135
|
| `vlist/synthetic` (deprecated) | 34.2 KB | 12.9 KB |
|
|
136
136
|
| `vlist/native` (alias) | 27.3 KB | 10.3 KB |
|
|
137
137
|
| `a11y()` | 31.2 KB | 11.7 KB |
|
|
138
|
-
| `selection()` | 36.9 KB | 13.
|
|
138
|
+
| `selection()` | 36.9 KB | 13.3 KB |
|
|
139
139
|
| `data()` | 41.0 KB | 15.1 KB |
|
|
140
140
|
| `scrollbar()` | 35.5 KB | 13.2 KB |
|
|
141
141
|
| `sortable()` | 39.2 KB | 13.9 KB |
|
|
@@ -144,39 +144,131 @@ The touch-only `.vlist-item--touch-sort` class suppresses selection and callouts
|
|
|
144
144
|
| `snapshots()` | 30.6 KB | 11.4 KB |
|
|
145
145
|
| `transition()` | 34.1 KB | 12.3 KB |
|
|
146
146
|
| `autosize()` | 30.6 KB | 11.5 KB |
|
|
147
|
-
| `grid()` | 34.
|
|
147
|
+
| `grid()` | 34.7 KB | 12.9 KB |
|
|
148
148
|
| `table()` | 45.8 KB | 16.2 KB |
|
|
149
149
|
| `masonry()` | 39.4 KB | 14.7 KB |
|
|
150
|
-
| `tree()` | 43.
|
|
150
|
+
| `tree()` | 43.5 KB | 15.7 KB |
|
|
151
151
|
| `search()` | 36.9 KB | 13.6 KB |
|
|
152
|
-
| `carousel()` | 43.
|
|
153
|
-
| `vlist/synthetic` + `carousel()` | 49.
|
|
152
|
+
| `carousel()` | 43.2 KB | 15.8 KB |
|
|
153
|
+
| `vlist/synthetic` + `carousel()` | 49.3 KB | 18.1 KB |
|
|
154
154
|
| `vlist/synthetic` + `sortable()` | 46.1 KB | 16.5 KB |
|
|
155
|
+
| `vlist/vue` `useVList` | 27.7 KB | 10.5 KB |
|
|
156
|
+
| `vlist/svelte` `vlist` | 27.5 KB | 10.4 KB |
|
|
157
|
+
| `vlist/solid` `createVList` | 27.6 KB | 10.4 KB |
|
|
158
|
+
| `vlist/react` `useVList` | 27.8 KB | 10.5 KB |
|
|
159
|
+
| `vlist/react` + `grid()` | 35.2 KB | 13.1 KB |
|
|
155
160
|
|
|
156
|
-
Sizes are tree-shaken totals from `bun run size`, not additive plugin costs. Plugin rows include the native default factory plus that plugin. The base is **10,
|
|
161
|
+
Sizes are tree-shaken totals from `bun run size`, not additive plugin costs. Plugin rows include the native default factory plus that plugin; framework rows add the entry, with the framework itself external. The base is **10,539 bytes gzipped**, within the 10.3 KB budget (10,547 bytes). `bun run size` fails if a scenario fails to build, an unused plugin leaks into a bundle, or any published size exceeds its gzip budget. Synthetic input is **13,192 bytes** before plugins; with `scroll.mode`, a `vlist` list downloads the driver and its scrollbar as `synthetic-driver.js` (6.2 KB gzipped) only when it goes synthetic. The alias row measures the same source factory; the distributed alias re-exports it without duplicating the implementation.
|
|
157
162
|
|
|
158
|
-
##
|
|
163
|
+
## Frameworks
|
|
159
164
|
|
|
160
|
-
|
|
161
|
-
|-----------|---------|------|
|
|
162
|
-
| Vue | [`vlist-vue`](https://github.com/floor/vlist-vue) | 0.6 KB |
|
|
163
|
-
| Svelte | [`vlist-svelte`](https://github.com/floor/vlist-svelte) | 0.5 KB |
|
|
164
|
-
| SolidJS | [`vlist-solidjs`](https://github.com/floor/vlist-solidjs) | 0.5 KB |
|
|
165
|
-
| React | [`vlist-react`](https://github.com/floor/vlist-react) | 0.6 KB |
|
|
165
|
+
Vue, Svelte, Solid and React each have an entry in the `vlist` package itself. Like the vanilla builder, they are feature-first: you pass plugins from `vlist`, so an app only bundles the features it uses. Every entry imports the core from `vlist`, and none carries a copy of its own.
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
| Framework | Import | Entry size |
|
|
168
|
+
|-----------|--------|------------|
|
|
169
|
+
| Vue 3 | `vlist/vue` | 0.4 KB gzip |
|
|
170
|
+
| Svelte 4 and 5 | `vlist/svelte` | 0.3 KB gzip |
|
|
171
|
+
| SolidJS | `vlist/solid` | 0.3 KB gzip |
|
|
172
|
+
| Vanilla JS | `vlist` | — |
|
|
173
|
+
| React 17+ | `vlist/react` | 0.4 KB gzip |
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
npm install vlist
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Frameworks are optional peer dependencies, so install only the one you use.
|
|
180
|
+
|
|
181
|
+
**Vue**
|
|
182
|
+
|
|
183
|
+
```vue
|
|
184
|
+
<script setup lang="ts">
|
|
185
|
+
import { useVList } from "vlist/vue";
|
|
186
|
+
import { grid } from "vlist";
|
|
187
|
+
|
|
188
|
+
const { containerRef, instance } = useVList(
|
|
189
|
+
{ items, item: { height: 200, template: renderPhoto } },
|
|
190
|
+
[grid({ columns: 4, gap: 16 })],
|
|
191
|
+
);
|
|
192
|
+
</script>
|
|
193
|
+
|
|
194
|
+
<template><div ref="containerRef" style="height: 600px" /></template>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
If you pass a `ref` as the config, the list updates when its `items` change. `useVListEvent(instance, "item:click", handler)` subscribes to an event for the component's lifetime.
|
|
198
|
+
|
|
199
|
+
**Svelte**
|
|
200
|
+
|
|
201
|
+
```svelte
|
|
202
|
+
<script>
|
|
203
|
+
import { vlist } from "vlist/svelte";
|
|
204
|
+
import { grid } from "vlist";
|
|
205
|
+
</script>
|
|
206
|
+
|
|
207
|
+
<div
|
|
208
|
+
style="height: 600px"
|
|
209
|
+
use:vlist={{
|
|
210
|
+
config: { items, item: { height: 200, template: renderPhoto } },
|
|
211
|
+
plugins: [grid({ columns: 4, gap: 16 })],
|
|
212
|
+
onInstance: (list) => (instance = list),
|
|
213
|
+
}}
|
|
214
|
+
/>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Solid**
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
import { createVList } from "vlist/solid";
|
|
221
|
+
import { grid } from "vlist";
|
|
222
|
+
|
|
223
|
+
const { setRef, instance } = createVList(
|
|
224
|
+
() => ({ items: items(), item: { height: 200, template: renderPhoto } }),
|
|
225
|
+
[grid({ columns: 4, gap: 16 })],
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
return <div ref={setRef} style={{ height: "600px" }} />;
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
`createVList` keeps the Solid primitive idiom. In a file that also uses the core builder, alias one of the two: `import { createVList as createSolidVList } from "vlist/solid"`.
|
|
232
|
+
|
|
233
|
+
**React**
|
|
234
|
+
|
|
235
|
+
```tsx
|
|
236
|
+
import { useVList, useVListEvent } from "vlist/react";
|
|
237
|
+
import { grid } from "vlist";
|
|
238
|
+
|
|
239
|
+
function Photos({ items }) {
|
|
240
|
+
const { containerRef, instanceRef } = useVList(
|
|
241
|
+
{ items, item: { height: 200, template: renderPhoto } },
|
|
242
|
+
[grid({ columns: 4, gap: 16 })],
|
|
243
|
+
);
|
|
244
|
+
useVListEvent(instanceRef, "item:click", ({ item }) => open(item));
|
|
245
|
+
return <div ref={containerRef} style={{ height: 600 }} />;
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Plugins are read once, at mount; changing them means remounting the list (in React, with a `key`). An `items` change updates the list in place. `scroll.mode` and other structural options also take effect only at mount.
|
|
250
|
+
|
|
251
|
+
**Migrating from `vlist-vue`, `vlist-svelte`, `vlist-solidjs` or `vlist-react`.** Those packages are deprecated. Change the import path, and pass features as plugins instead of config fields:
|
|
252
|
+
|
|
253
|
+
| Deprecated package | Use |
|
|
254
|
+
|---|---|
|
|
255
|
+
| `vlist-vue` | `vlist/vue` |
|
|
256
|
+
| `vlist-svelte` | `vlist/svelte` |
|
|
257
|
+
| `vlist-solidjs` | `vlist/solid` |
|
|
258
|
+
| `vlist-react` | `vlist/react` |
|
|
168
259
|
|
|
169
260
|
```ts
|
|
261
|
+
// before
|
|
170
262
|
import { useVList } from "vlist-react";
|
|
263
|
+
useVList({ items, item, selection: { mode: "single" } });
|
|
171
264
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
});
|
|
265
|
+
// after
|
|
266
|
+
import { useVList } from "vlist/react";
|
|
267
|
+
import { selection } from "vlist";
|
|
268
|
+
useVList({ items, item }, [selection({ mode: "single" })]);
|
|
177
269
|
```
|
|
178
270
|
|
|
179
|
-
|
|
271
|
+
Their 3.1 releases will be built on these entries and keep the config-based API, so existing code keeps working while you migrate.
|
|
180
272
|
|
|
181
273
|
## Docs & Examples
|
|
182
274
|
|
package/dist/config.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* config (the adapters) pull in this module and, with it, every plugin it wires.
|
|
17
17
|
*/
|
|
18
18
|
import type { VListItem, GroupsConfig, VListAdapter, ScrollConfig } from "./types";
|
|
19
|
-
import { createVList } from "./
|
|
19
|
+
import { createVList } from "./index";
|
|
20
20
|
import type { CreateVListConfig, VList, VListPlugin, PluginMethods } from "./core/types";
|
|
21
21
|
import type { AutosizeMethods } from "./plugins/autosize/plugin";
|
|
22
22
|
import type { DataMethods } from "./plugins/data/plugin";
|
package/dist/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var zt=16777216,gt=3,Jt="vlist";var pt=50;var Qt=50,en=2,tn=15,nn=6,At=2000,on=30000,at=16000000,bt=150,wt=1,rn=(e)=>e<0.5?2*e*e:1-(-2*e+2)**2/2,ht=300;var sn="x",ln=20,kt="_isPlaceholder",Ke="__placeholder_";function vt(e){let{state:n,viewport:o,isX:i,onFrame:r,onIdle:t}=e,s=e.idleTimeout||bt,a=null,A=null;function y(g=i?o.scrollLeft:o.scrollTop){n.prevScrollPosition=n.scrollPosition,n.scrollPosition=g,n.scrollDirection=g>n.prevScrollPosition?1:g<n.prevScrollPosition?-1:0,r(),l()}function l(){if(a!==null)clearTimeout(a);a=setTimeout(()=>{a=null,n.scrollDirection=0,t()},s)}function M(){if(A!==null)cancelAnimationFrame(A),A=null}function W(g,V,S,I=rn,d){M();let T=n.scrollPosition,p=typeof g==="function"?g:()=>g,_=p();if(Math.abs(_-T)<1){if(S)S(_);else if(i)o.scrollLeft=_;else o.scrollTop=_;d?.();return}let te=performance.now();function m(x){_=p();let L=x-te,F=Math.min(L/V,1),u=T+(_-T)*I(F);if(S)S(u);else{if(i)o.scrollLeft=u;else o.scrollTop=u;let E=i?o.scrollLeft:o.scrollTop;y(Math.abs(E-u)>1?E:u)}if(F<1)A=requestAnimationFrame(m);else A=null,d?.()}A=requestAnimationFrame(m)}return{attach(){},detach(){if(M(),a!==null)clearTimeout(a),a=null},cancelScroll:M,smoothScrollTo:W,commitScroll:y}}function an(e){let{state:n,viewport:o,isX:i,wheelEnabled:r}=e,t=e.scrollTarget??o,s=vt(e),a=s.commitScroll;function A(){let l=i?o.scrollLeft:o.scrollTop;if(Math.abs(l-n.scrollPosition)<0.5)return;a(l)}function y(l){let M;if(i){if(Math.abs(l.deltaX)>Math.abs(l.deltaY))return;let W=o.scrollLeft,g=o.scrollWidth-o.clientWidth;if(M=Math.max(0,Math.min(W+l.deltaY*wt,g)),Math.abs(M-W)<1)return;l.preventDefault(),o.scrollLeft=M}else{let W=o.scrollWidth>o.clientWidth;if(W&&Math.abs(l.deltaX)>Math.abs(l.deltaY))return;if(W&&l.deltaX!==0)l.preventDefault(),o.scrollLeft+=l.deltaX;let g=o.scrollTop,V=o.scrollHeight-o.clientHeight;if(M=Math.max(0,Math.min(g+l.deltaY*wt,V)),Math.abs(M-g)<1)return;l.preventDefault(),o.scrollTop=M}a(M)}return{...s,attach(){if(t.addEventListener("scroll",A,{passive:!0}),r)t.addEventListener("wheel",y,{passive:!1})},detach(){if(t.removeEventListener("scroll",A),r)t.removeEventListener("wheel",y);s.detach()}}}var yt={top:0,right:0,bottom:0,left:0},dn=(e)=>{if(e==null)return yt;if(typeof e==="number")return e===0?yt:{top:e,right:e,bottom:e,left:e};if(e.length===2){let[t,s]=e;return t===0&&s===0?yt:{top:t,right:s,bottom:t,left:s}}let[n,o,i,r]=e;return n===0&&o===0&&i===0&&r===0?yt:{top:n,right:o,bottom:i,left:r}},un=(e,n)=>n?e.left+e.right:e.top+e.bottom,cn=(e,n)=>n?e.top+e.bottom:e.left+e.right;function mn(e){let n={visibleIndices:new Int32Array(e),visibleOffsets:new Float64Array(e),visibleSizes:new Float64Array(e),visibleCount:0,startIndex:0,totalSize:0,capacity:e,scrollPosition:0,prevScrollPosition:0,scrollDirection:0,baseOffset:0,prevBaseOffset:0,containerSize:0,crossSize:0,totalItems:0,prevRangeStart:0,prevRangeEnd:-1,renderPending:!1,initialized:!1,destroyed:!1,windowClamped:!1,windowClampReported:!1,prevAriaTotal:-1,ensureCapacity(o){if(o<=n.capacity)return;let i=o+8,r=new Int32Array(i),t=new Float64Array(i),s=new Float64Array(i);r.set(n.visibleIndices),t.set(n.visibleOffsets),s.set(n.visibleSizes),n.visibleIndices=r,n.visibleOffsets=t,n.visibleSizes=s,n.capacity=i},resizeCapacity(o,i,r=gt){if(i<=0||o<=0)return;n.ensureCapacity(Math.ceil(o/i)+r*2)},clear(){n.visibleCount=0,n.startIndex=0}};return n}var Kn=(e,n,o)=>{let i=n;return{getOffset:(r)=>r*e,getSize:(r)=>e,indexAtOffset:(r)=>{if(i===0||e===0)return 0;return Math.max(0,Math.min(Math.floor(r/e),i-1))},getTotalSize:()=>{let r=i*e;return r>0?r-o:0},getTotal:()=>i,rebuild:(r)=>{i=r},invalidate:()=>{},isVariable:()=>!1}};var fn=(e,n,o,i)=>{while(n<o){let r=n+o+1>>>1;if(e[r]<=i)n=r;else o=r-1}return n},Yn=(e,n,o)=>{let i=0,r=0,t=new Float64Array(0),s=new Float64Array(0),a=new Float64Array(1),A=(l,M)=>{for(let W=l;W<r;W++){if(W<=M){let g=W<<9,V=Math.min(g+512,i),S=0;for(let I=g;I<V;I++)t[I]=S,S+=e(I);s[W]=S}a[W+1]=a[W]+s[W]}},y=(l)=>{i=l,r=Math.ceil(l/512),t=new Float64Array(l),s=new Float64Array(r),a=new Float64Array(r+1),A(0,r-1)};return y(n),{getOffset:(l)=>{if(l<=0)return 0;if(l>=i)return a[r];return a[l>>>9]+t[l]},getSize:(l)=>e(l),indexAtOffset:(l)=>{if(i===0||l<=0)return 0;if(l>=a[r])return i-1;let M=fn(a,0,r-1,l),W=M<<9;return fn(t,W,Math.min(W+512,i)-1,l-a[M])},getTotalSize:()=>{let l=a[r];return l>0?l-o:0},getTotal:()=>i,rebuild:(l)=>y(l),invalidate:(l,M=l)=>{if(l>=0&&M<i)A(l>>>9,M>>>9)},isVariable:()=>!0}},St=(e,n,o=0)=>{if(typeof e==="number")return Kn(e,n,o);return Yn(e,n,o)};function gn(e){let n=[],o=`${e}-item`,i=document.createElement("div");return i.className=o,{acquire(){if(n.length>0)return n.pop();return i.cloneNode(!1)},release(r){r.className=o,r.removeAttribute("style"),r.removeAttribute("id"),r.removeAttribute("role"),r.removeAttribute("aria-selected"),r.removeAttribute("aria-posinset"),r.removeAttribute("aria-setsize"),r.removeAttribute("data-index"),r.removeAttribute("data-id"),r.textContent="",n.push(r)},get size(){return n.length},trim(r){let t=r>0?r:0;if(n.length>t)n.length=t},clear(){n.length=0}}}function Xe(e){let n=e.querySelectorAll("a[href],button,input,select,textarea,[tabindex]");for(let o=0;o<n.length;o++)n[o].setAttribute("tabindex","-1");e._stamp=0}function Rt(e){if(typeof e==="string"){let n=document.querySelector(e);if(!n)throw Error(`[vlist] Container not found: ${e}`);return n}return e}function pn(e,n,o,i){let r=o?`${n} ${n}--horizontal`:n,t=o?"overflow-x:auto;overflow-y:hidden;height:100%;width:100%":"overflow:auto;height:100%;width:100%",s=o?"position:relative;height:100%;overflow-anchor:none":"position:relative;width:100%;overflow-anchor:none",a=' role="list"';if(i)a+=` aria-label="${i.replace(/"/g,""")}"`;if(o)a+=' aria-orientation="horizontal"';e.insertAdjacentHTML("beforeend",`<div class="${r}"><div class="${n}-viewport" style="${t}" tabindex="-1"><div class="${n}-content" style="${s}"${a}></div></div></div>`);let A=e.lastElementChild,y=A.firstElementChild,l=y.firstElementChild,M=document.createElement("div");return M.className=`${n}-live`,M.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",M.setAttribute("aria-live","polite"),M.setAttribute("aria-atomic","true"),M.setAttribute("role","status"),A.appendChild(M),{root:A,viewport:y,content:l,liveRegion:M}}function qn(e,n){if(e.getTotal()<=0)return{index:0,offsetPx:0};let i=n<=0?0:n,r=e.indexAtOffset(i),t=i-e.getOffset(r);return{index:r,offsetPx:t>0?t:0}}function Un(e,n){let o=Xn(e,n);return e.getOffset(o.index)+o.offsetPx}function Xn(e,n){let o=e.getTotal();if(o<=0)return{index:0,offsetPx:0};let{index:i,offsetPx:r}=n;if(i<0)return{index:0,offsetPx:0};if(i>o-1)i=o-1;while(r>0&&i<o-1){let t=e.getSize(i);if(r<t)break;r-=t,i++}while(r<0&&i>0)i--,r+=e.getSize(i);if(r<0)r=0;return{index:i,offsetPx:r}}function bn(e){let{sizeCache:n,getPixel:o,setPixel:i,getContainerSize:r}=e;function t(){let a=n.getTotalSize()+e.padding-r();return a>0?a:0}function s(a){if(a<=0)return 0;let A=t();return a>A?A:a}return{getLogical(){return qn(n,o())},setLogical(a){i(s(Un(n,a)))},getPixelEquivalent(){return o()},setPixelEquivalent(a){i(s(a))},getMaxPixelEquivalent:t,getRenderOrigin:e.getRenderOrigin,scrollByPx(a){i(s(o()+a))}}}var dt=[],Zn={calculate:dt,commit:dt,afterScroll:dt,idle:dt,resize:dt};function hn(e){if(e.length===0)return Zn;let n=[],o=[],i=[],r=[],t=[];for(let s=0;s<e.length;s++){let a=e[s].hooks;if(a===void 0)continue;if(a.onCalculate!==void 0)n.push(a.onCalculate);if(a.onCommit!==void 0)o.push(a.onCommit);if(a.onAfterScroll!==void 0)i.push(a.onAfterScroll);if(a.onIdle!==void 0)r.push(a.onIdle);if(a.onResize!==void 0)t.push(a.onResize)}return{calculate:n,commit:o,afterScroll:i,idle:r,resize:t}}function vn(e,n){for(let o=0;o<e.length;o++)e[o](n)}function ut(e,n){for(let o=0;o<e.length;o++)e[o](n)}function _t(e,n,o){for(let i=0;i<e.length;i++)e[i](n,o)}function yn(e){for(let n=0;n<e.length;n++)e[n]()}function Sn(e,n,o){for(let i=0;i<e.length;i++)e[i](n,o)}function In(e,n,o,i,r,t,s,a){let A=i!==0||r!==0;return{prefix:e,selectedClass:`${e}-item--selected`,focusedClass:`${e}-item--focused`,placeholderClass:`${e}-item--placeholder`,replacedClass:`${e}-item--replaced`,translateProp:n?"translateX(":"translateY(",sizeProp:n?"width":"height",itemRole:"listitem",interactive:!1,startPadding:o,gap:s,hasCrossPad:A,crossStartProp:A?n?"top":"left":"",crossEndProp:A?n?"bottom":"right":"",crossStartVal:A?i+"px":"",crossEndVal:A?r+"px":"",oddClass:t,emitter:a??null,indexMap:null,ariaTotalFn:null}}function jn(e,n,o,i,r){if(e.containerSize<=0||e.totalItems===0)return e.clear(),!0;let{scrollPosition:t,containerSize:s,totalItems:a}=e,A=r??0;e.totalSize=n.getTotalSize();let y=n.indexAtOffset(A>0?Math.max(0,t-A):t),l=n.indexAtOffset(t+s);if(l<a-1)l++;y=Math.max(0,y),l=Math.min(a-1,Math.max(0,l));let M=Math.max(0,y-o),W=Math.min(a-1,l+o),g=Math.ceil(s)+o*2;if(W-M+1>g)W=M+g-1,e.windowClamped=!0;let V=W-M+1;if(V>e.capacity)e.ensureCapacity(V);let S=Math.min(V,e.capacity);if(M===e.prevRangeStart&&W===e.prevRangeEnd&&!e.renderPending&&e.baseOffset===e.prevBaseOffset)return!1;e.visibleCount=S,e.startIndex=M;for(let I=0;I<S;I++){let d=M+I;e.visibleIndices[I]=d,e.visibleOffsets[I]=n.getOffset(d),e.visibleSizes[I]=n.getSize(d)}return vn(i.calculate,e),e.prevRangeStart=M,e.prevRangeEnd=W,e.prevBaseOffset=e.baseOffset,e.renderPending=!1,!0}var $e={selected:!1,focused:!1};function Jn(e,n,o){for(let i=0;i<n;i++)if(e[i]===o)return!0;return!1}function Qn(e,n){if(n<=1)return!0;let o=e[0];for(let i=1;i<n;i++){let r=e[i];if(r!==o+1)return!1;o=r}return!0}function eo(e,n,o,i,r,t,s,a,A,y){let l=A?null:r(),{visibleCount:M,visibleIndices:W}=e,g=s.ariaTotalFn?s.ariaTotalFn():e.totalItems,V=s.interactive?String(g):"",S=s.interactive&&g!==e.prevAriaTotal,I=null,d=s.indexMap;for(let T=0;T<M;T++){let p=W[T],_=d?d(p):p,te=e.visibleOffsets[T],m=e.visibleSizes[T],x=A?A(p):l[p];if(y)y(_,$e);else $e.selected=!1,$e.focused=!1;let L=t.get(p),F=L;if(L===void 0){let u=n.acquire();if(x!==void 0){let R;try{R=i(x,_,$e)}catch(ie){if(s.emitter)s.emitter.emit("error",{error:ie instanceof Error?ie:Error(String(ie)),context:`template:render:${_}`});n.release(u);continue}if(typeof R==="string")u.innerHTML=R;else u.textContent="",u.appendChild(R);Xe(u)}if(u.setAttribute("role",s.itemRole),u.setAttribute("data-index",String(_)),s.interactive)u.id=s.prefix+"-item-"+p,u.setAttribute("aria-posinset",String(_+1)),u.setAttribute("aria-setsize",V);if(x!==void 0){let R=String(x.id);if(u.setAttribute("data-id",R),R.startsWith(Ke))u.classList.add(s.placeholderClass)}if(s.hasCrossPad)u.style.setProperty(s.crossStartProp,s.crossStartVal),u.style.setProperty(s.crossEndProp,s.crossEndVal);if(y){if(u.classList.toggle(s.selectedClass,$e.selected),u.classList.toggle(s.focusedClass,$e.focused),$e.selected)u.setAttribute("aria-selected","true");else u.removeAttribute("aria-selected");u._lastSelected=$e.selected,u._lastFocused=$e.focused}if(s.oddClass)u.classList.toggle(s.oddClass,(p&1)===1);let E=te-e.baseOffset+s.startPadding;u.style.transform=s.translateProp+E+"px)",u._lastOffset=E;let H=m-s.gap;if(u.style[s.sizeProp]=H+"px",u._lastSize=H,u._lastItem=x,t.set(p,u),I===null)I=document.createDocumentFragment();I.appendChild(u)}else{if(S)L.setAttribute("aria-setsize",V);if(x!==void 0&&F._lastItem!==x){let H=L.getAttribute("data-id"),R=String(x.id),ie;try{ie=i(x,_,$e)}catch(ce){if(s.emitter)s.emitter.emit("error",{error:ce instanceof Error?ce:Error(String(ce)),context:`template:render:${_}`});continue}if(typeof ie==="string")L.innerHTML=ie;else L.textContent="",L.appendChild(ie);if(Xe(L),L.setAttribute("data-id",R),F._lastItem=x,H!==R){let ce=H!==null&&H.startsWith(Ke),de=R.startsWith(Ke);if(ce!==de)L.classList.toggle(s.placeholderClass,de);if(ce&&!de)L.classList.add(s.replacedClass),setTimeout(()=>{L.classList.remove(s.replacedClass)},300)}}if(y){if(F._lastSelected!==$e.selected){if(L.classList.toggle(s.selectedClass,$e.selected),$e.selected)L.setAttribute("aria-selected","true");else L.removeAttribute("aria-selected");F._lastSelected=$e.selected}if(F._lastFocused!==$e.focused)L.classList.toggle(s.focusedClass,$e.focused),F._lastFocused=$e.focused}let u=te-e.baseOffset+s.startPadding;if(F._lastOffset!==u)L.style.transform=s.translateProp+u+"px)",F._lastOffset=u;let E=m-s.gap;if(F._lastSize!==E)L.style[s.sizeProp]=E+"px",F._lastSize=E}}if(I!==null)o.appendChild(I);if(M>0&&Qn(W,M)){let T=W[0],p=W[M-1];for(let[_,te]of t)if(_<T||_>p)te.remove(),n.release(te),t.delete(_)}else for(let[T,p]of t)if(!Jn(W,M,T))p.remove(),n.release(p),t.delete(T);if(s.interactive)e.prevAriaTotal=e.totalItems;ut(a.commit,e)}function Ht(e,n,o,i,r,t,s,a,A,y,l,M){let W=jn(e,n,o,y,A.startPadding);if(e.windowClamped&&!e.windowClampReported)e.windowClampReported=!0,queueMicrotask(()=>{if(e.destroyed)return;A.emitter?.emit("error",{error:Error("[vlist] render window capped to the viewport: the item size spec reports sizes below 1px"),context:"render:window-ceiling"})});if(W)eo(e,i,r,t,s,a,A,y,l,M)}var Vt=()=>{let e={},n=(t,s)=>{if(!e[t])e[t]=new Set;return e[t].add(s),()=>o(t,s)},o=(t,s)=>{e[t]?.delete(s)};return{on:n,off:o,emit:(t,s)=>{e[t]?.forEach((a)=>{try{a(s)}catch(A){}})},clear:(t)=>{if(t)delete e[t];else for(let s in e)delete e[s]}}};var Tn=2,xn=(e=0)=>({velocity:0,sampleCount:0}),Ln=(e,n)=>{let o=performance.now(),i=e._lt??o,r=e._lp??n,t=o-i;if(e._lp=n,e._lt=o,t===0)return e.sampleCount=Math.min(e.sampleCount+1,5),e;if(t>100)return e.velocity=0,e.sampleCount=1,e;return e.velocity=Math.abs(n-r)/t,e.sampleCount=Math.min(e.sampleCount+1,5),e};function ot(e,n,o=!1){if(n===void 0)return;if(typeof n!=="number"||!Number.isFinite(n)||n<0||n===0&&!o)throw Error(`vlist: ${e} must be a ${o?"non-negative":"positive"} number, got ${n}`)}function to(e){let{item:n}=e;if(typeof n.height==="number")ot("item.height",n.height);if(typeof n.width==="number")ot("item.width",n.width);ot("item.estimatedHeight",n.estimatedHeight),ot("item.estimatedWidth",n.estimatedWidth),ot("item.gap",n.gap,!0),ot("overscan",e.overscan,!0);let o=e.scroll;if(o?.runway!==void 0||!/^(auto|native|synthetic)?$/.test(o?.mode??""))throw Error('vlist: scroll.mode is "auto", "native" or "synthetic" (bounded mode and scroll.runway were removed in 3.0)')}function no(e,n){let o=e==="horizontal"?"x":"y";if(n.some((r)=>r.name==="grid"))return{primary:o,cross:o==="x"?"y":"x"};return{primary:o}}function oo(e,n,o){let i=no(e.orientation,n),r=i.primary==="x",t=dn(e.padding);return{axis:i,hasCrossAxis:i.cross!==void 0,overscan:e.overscan??gt,reverse:e.reverse??!1,classPrefix:e.classPrefix??Jt,mainAxisPadding:un(t,r),crossAxisPadding:cn(t,r),startPadding:r?t.left:t.top,endPadding:r?t.right:t.bottom,crossPadStart:r?t.top:t.left,crossPadEnd:r?t.bottom:t.right,striped:e.item.striped||!1,gap:e.item.gap??0,scrollMode:o}}function ro(e,n){if(n)return e.item.width??e.item.estimatedWidth??100;return e.item.height??e.item.estimatedHeight??40}function io(e){let n=[...e];return n.sort((o,i)=>(o.priority??50)-(i.priority??50)),n}function so(e){let n=new Set;for(let o of e){if(n.has(o.name))throw Error(`[vlist] Duplicate plugin: ${o.name}`);n.add(o.name)}for(let o of e)if(o.conflicts){for(let i of o.conflicts)if(n.has(i))throw Error(`[vlist] Plugin "${o.name}" conflicts with "${i}"`)}}function lo(e,n){for(let o of e)o.validateConfig?.(n)}var It=null;function Cn(e,n=[]){let o=!1;return ao(e,n,void 0,{native:an,load:()=>import("./synthetic-driver.js"),onContentSize(i,r){if(!o&&i>at)o=!0,r.emit("error",{error:Error(`Content size (${i}px) exceeds browser limit (${at}px). Use scroll.mode "auto".`),context:"content:size:overflow"})}})}function ao(e,n=[],o,i){to(e);let r=o?"synthetic":e.scroll?.mode??"auto";if(r==="synthetic"&&e.scroll?.scrollbar==="native")throw Error('vlist: scroll.scrollbar "native" needs native scrolling');if(e.orientation==="horizontal"&&getComputedStyle(Rt(e.container)).direction==="rtl")throw Error("vlist: horizontal RTL lists are not supported; use a vertical list, or an LTR container");let t=oo(e,n,r),s=t.axis.primary==="x",a=ro(e,s),A=t.gap,y=A>0?typeof a==="function"?(oe)=>a(oe)+A:a+A:a,l=typeof a==="number"?a:20,M=e.items?.length??0,W=t.striped?`${t.classPrefix}-item--odd`:"",g=Vt(),V=In(t.classPrefix,s,t.startPadding,t.crossPadStart,t.crossPadEnd,W,A,g),S=n.length>0?io(n):n;if(n.length>0)so(S),lo(S,t);let I=Rt(e.container),d=pn(I,t.classPrefix,s,e.ariaLabel);if(e.scroll?.scrollbar==="none")d.viewport.classList.add(`${t.classPrefix}-viewport--no-scrollbar`);if(e.scroll?.gutter==="stable")d.viewport.classList.add(`${t.classPrefix}-viewport--gutter-stable`);let p=St(y,M,A),_=gn(t.classPrefix),te=Math.ceil(4096/l)+t.overscan*2+8,m=mn(te);m.totalItems=M;let x=e.items?[...e.items]:[],L=()=>x,F=new Map,u=xn(),E={velocity:0,reliable:!1},H={range:{start:0,end:-1}},R={scrollPosition:0,direction:"down"},ie={scrollPosition:0},ce=-1,de=-1,b=-1,C=null,w=hn(S),h=new Map,Q=[],f=[],P=[],Y=(oe)=>{let v=(ge)=>{oe.push(ge instanceof Error?ge:Error(String(ge)))};for(let ge of P)try{ge()}catch(ze){v(ze)}for(let ge of S)if(ge.destroy)try{ge.destroy()}catch(ze){v(ze)}},G=null,ee=null,pe,be,O=null,fe=null,j=null,B=null,D=null,se=null,Ie=null,Z=null,k=!1,ae=!1,J=null,ne=0,z=0,N=null,le=null,c=null,re=null,q=null,K=null,he=null,U=null,X=null,me=null,Le=(oe)=>me.setLogical(oe),Ce=!1,Te=!1,Pe=null,Re=null,ve=null,xe=null;m.containerSize=s?d.viewport.clientWidth:d.viewport.clientHeight,m.crossSize=s?d.viewport.clientHeight:d.viewport.clientWidth;function _e(oe){if(ee)ee(oe);else{if(s)d.viewport.scrollLeft=oe;else d.viewport.scrollTop=oe;if(be?.(),Te&&Math.abs(m.scrollPosition-oe)>1)Pe=oe}}let ye=bn({sizeCache:p,getPixel:()=>m.scrollPosition,setPixel:_e,getRenderOrigin:()=>m.baseOffset,getContainerSize:()=>m.containerSize,padding:t.mainAxisPadding});if(n.length>0){let oe={pool:_,config:t,emitter:g,template:e.item.template,getState(){return m},dom:{...d,renderedElement(v){let ge=h.get("_getRenderedElement");if(ge)return ge(v);return F.get(v)??null},enableListbox(){let v=d.content.getAttribute("role");if(!v||v==="list")d.content.setAttribute("role","listbox"),d.content.setAttribute("tabindex","0");V.itemRole="option",V.interactive=!0}},scroll:{...ye,to:_e,shiftBy(v){if(me?.shiftBy)me.shiftBy(v);else oe.scroll.to(m.scrollPosition+v)},smoothTo(v,ge,ze,De){if(U)U.smoothScrollTo(v,ge,ee??void 0,ze,De);else oe.scroll.to(typeof v==="function"?v():v)},cancel(){U?.cancelScroll()},commit(v){be(v)},setSource(v){ee=v.write,pe=v.onContentSize,k=!0},setTarget(v){J=v},setWrap(v,ge){ve=v,xe=ge},setBoundedWrap(v,ge){oe.scroll.setWrap(v,ge)},setToPosFn(v){q=v},setToIndexFn(v){K=v},onFrame:He,onIdle:Ve,disableResize(){ae=!0}},items:{all:L,at(v){return j?j(v):x[v]},removeById(v){if(D)return D(v);let ge=x.findIndex((ze)=>ze.id===v);if(ge===-1)return-1;return x.splice(ge,1),m.totalItems=x.length,p.rebuild(m.totalItems),Fe(),ge},insertAt(v,ge){if(se){se(v,ge);return}x.splice(ge,0,v),m.totalItems=x.length,p.rebuild(m.totalItems),Fe()},setGetFn(v){j=v},setRemoveFn(v){D=v},setInsertFn(v){se=v},setUpdateFn(v){Ie=v},setIndexByIdFn(v){Z=v},setTotalFn(v){G=v,V.ariaTotalFn=v},setIndexMapFn(v){V.indexMap=v}},sizes:{cache:p,get rawSpec(){return a},setConfig(v,ge=0){let ze=St(v,m.totalItems,ge),De=h.get("_setSizeCacheBase");if(De){let Be=p.rebuild;Object.assign(p,ze),p.rebuild=Be,De(ze.rebuild)}else Object.assign(p,ze)},rebuild(){p.rebuild(m.totalItems)}},render:{force(){ke()},ifNeeded(){Ne()},contentSize:Ge,setFn(v,ge){O=()=>{let{prevRangeStart:ze,prevRangeEnd:De}=m;if(v(),m.prevRangeStart!==ze||m.prevRangeEnd!==De)ut(w.commit,m)},fe=()=>{ge(),ut(w.commit,m)}},setStateFn(v){B=v},getStateFn(){return B}},hooks:{method(v,ge){if(!v.startsWith("_")&&h.has(v))throw Error(`[vlist] duplicate method "${v}"; rename it or use a set*Fn hook`);h.set(v,ge)},get(v){return h.get(v)},onClick(v){Q.push(v)},onKeydown(v){f.push(v)},onDestroy(v){P.push(v)}},nav:{set(v){if(v.ud!==void 0)ne=v.ud;if(v.lr!==void 0)z=v.lr;if(v.scrollIndex)N=v.scrollIndex;if(v.navigate)le=v.navigate;if(v.total)c=v.total;if(v.reveal)re=v.reveal},get:(()=>{let v={ud:0,lr:0,scrollIndex:null,navigate:null,total:null,reveal:null};return()=>(v.ud=ne,v.lr=z,v.scrollIndex=N,v.navigate=le,v.total=c,v.reveal=re,v)})()}};for(let v of S)if(v.setup)try{v.setup(oe)}catch(ge){let ze=ge instanceof Error?ge:Error(String(ge));g.emit("error",{error:ze,context:`plugin:setup:${v.name}`})}}let Se=t.classPrefix+"--scrolling",Me=!1,Ae=e.scroll?.idleTimeout??bt;function Oe(){if(R.scrollPosition=m.scrollPosition,s)R.direction=m.scrollDirection>0?"right":"left";else R.direction=m.scrollDirection>0?"down":"up";if(g.emit("scroll",R),Ln(u,m.scrollPosition),E.velocity=u.velocity,E.reliable=u.sampleCount>=Tn,g.emit("velocity:change",E),m.startIndex!==ce||m.prevRangeEnd!==de)ce=m.startIndex,de=m.prevRangeEnd,H.range.start=m.startIndex,H.range.end=m.prevRangeEnd,g.emit("range:change",H)}function Ge(oe,v=!0){let ge=oe+t.mainAxisPadding;if(Ce)Ee(ge);if(me){if(v)me.refresh(oe);return}if(m.totalSize=oe,pe?.(ge),v)d.content.style[s?"width":"height"]=Math.min(ge,at)+"px"}function Fe(){let oe=O?m.totalSize:p.getTotalSize();if(Ge(oe,!O),me||O||Ce)return;i?.onContentSize(oe,g)}function qe(){if(!he)return;if((G?G():x.length)===0)return;let v=he;he=null,Mt.scrollToIndex(v.index,v.alignOrOptions)}function Ne(){if(O)O();else Ht(m,p,t.overscan,_,d.content,e.item.template,L,F,V,w,j,B);qe()}function He(){if(Pe=null,!Me)Me=!0,d.root.classList.add(Se);if(Ne(),_t(w.afterScroll,m.scrollPosition,m.scrollDirection),Re?.sync(),m.scrollPosition!==b)b=m.scrollPosition,Oe()}function ue(){_.trim(F.size)}function Ee(oe){let v=!!me;if(Te=(r==="synthetic"||oe>at*(v?0.75:1))!==v,!Te)return;if(!It)i.load().then((ze)=>{if(It=ze,!m.destroyed)Fe()},(ze)=>g.emit("error",{error:ze,context:"scroll:mode"}));else if(!Me)we(oe)}function we(oe){let v=Pe??m.scrollPosition;if(Te=!1,U.detach(),Re?.destroy(),Re=null,me)U=X,me=ee=null,m.baseOffset=0,d.content.style[s?"width":"height"]=oe+"px",U.attach(),_e(v);else if(d.viewport[s?"scrollLeft":"scrollTop"]=0,U=me=Ye(It.createSyntheticScrollHandler),ee=Le,me.refresh(oe-t.mainAxisPadding),(Re=It.attachScrollbar(m,d,t,p,_e,e.scroll?.scrollbar))?.sync(),m.initialized)U.attach(),me.setLogical(v);g.emit("scroll:mode",{mode:me?"synthetic":"native"})}function Ve(){if(Me)Me=!1,d.root.classList.remove(Se);if(m.scrollDirection=0,ue(),yn(w.idle),E.velocity=0,E.reliable=!1,g.emit("velocity:change",E),ie.scrollPosition=m.scrollPosition,g.emit("scroll:idle",ie),Te)Fe()}function ke(){if(m.renderPending=!0,fe)fe();else Ht(m,p,t.overscan,_,d.content,e.item.template,L,F,V,w,j,B);if(qe(),_t(w.afterScroll,m.scrollPosition,m.scrollDirection),Re?.sync(),m.scrollPosition!==b){if(b=m.scrollPosition,Oe(),C!==null)clearTimeout(C);C=setTimeout(Ve,Ae)}else if(!Me)ue()}let We=k?!1:e.scroll?.wheel!==!1;if(k&&ve)throw Y([]),d.root.remove(),Error("vlist: page() is not compatible with the carousel plugin — document scrolling cannot wrap.");function Ye(oe){return oe({state:m,sizeCache:p,viewport:d.viewport,content:d.content,isX:s,wheelEnabled:We,idleTimeout:Ae,...J?{scrollTarget:J}:{},mainAxisPadding:t.mainAxisPadding,...ve?{wrap:ve,rendered:F,classPrefix:t.classPrefix,oddClass:W,onFold(v){let ge=u;if(ge._lp!==void 0)ge._lp-=v;b-=v}}:{},onFrame:He,onIdle:Ve})}if(!k&&(o||ve))U=me=Ye(o??xe),ee=Le;else X=(k?vt:i.native)({state:m,viewport:d.viewport,isX:s,wheelEnabled:We,idleTimeout:Ae,...J?{scrollTarget:J}:{},onFrame:He,onIdle:Ve}),U=X,be=X.commitScroll,Ce=!k&&r!=="native";function tt(oe){let ge=oe.target.closest("[data-index]");if(!ge)return null;let ze=parseInt(ge.getAttribute("data-index"),10);if(Number.isNaN(ze))return null;let De=h.get("_layoutToDataIndex"),Be,Ze=ze;if(De){let Ue=De(ze);if(Ue<0)return null;let nt=h.get("_getItemAtLayout"),lt=h.get("_getItem");Be=nt?nt(ze):lt?lt(Ue):j?j(Ue):x[Ue],Ze=Ue}else Be=j?j(ze):x[ze];if(Be===void 0)return null;return{item:Be,index:Ze}}function qt(oe){for(let ge=0;ge<Q.length;ge++)Q[ge](oe);let v=tt(oe);if(v)g.emit("item:click",{item:v.item,index:v.index,event:oe})}function Ut(oe){let v=tt(oe);if(v)g.emit("item:dblclick",{item:v.item,index:v.index,event:oe})}function Xt(oe){let v=tt(oe);if(v)g.emit("item:contextmenu",{item:v.item,index:v.index,event:oe})}function Zt(oe){let v=oe.target?.tagName;if((v==="INPUT"||v==="TEXTAREA"||v==="SELECT")&&!((oe.ctrlKey||oe.metaKey)&&(oe.key==="f"||oe.key==="F")))return;for(let ge=0;ge<f.length;ge++)f[ge](oe)}if(d.content.addEventListener("click",qt),d.content.addEventListener("dblclick",Ut),d.content.addEventListener("contextmenu",Xt),f.length>0)d.root.addEventListener("keydown",Zt);let Pt=null;if(!ae)setTimeout(()=>{if(m.destroyed)return;Pt=new ResizeObserver((v)=>{for(let ge of v){let{width:ze,height:De}=ge.contentRect,Be=s?ze:De,Ze=s?De:ze;if(Math.abs(Be-m.containerSize)<1&&Math.abs(Ze-m.crossSize)<1)continue;if(m.containerSize=Be,m.crossSize=Ze,m.resizeCapacity(Be,l,t.overscan),me)me.refresh(p.getTotalSize());ke(),Sn(w.resize,ze,De),g.emit("resize",{width:ze,height:De})}}),Pt.observe(d.viewport)},0);m.resizeCapacity(m.containerSize,l,t.overscan),Fe(),m.initialized=!0;let st=null;if(e.defer)st=requestAnimationFrame(()=>{if(st=null,!m.destroyed)Ne()});else Ne();if(!k)U.attach();let Mt={get element(){return d.root},get items(){return x},get total(){return G?G():x.length},setItems(oe){x=[...oe],m.totalItems=x.length,p.rebuild(m.totalItems),Fe(),ke()},appendItems(oe){let v=()=>Math.max(0,p.getTotalSize()+t.mainAxisPadding-m.containerSize),ge=t.reverse&&m.scrollPosition>=v()-1;if(x.push(...oe),m.totalItems=x.length,p.rebuild(m.totalItems),Fe(),ke(),ge)_e(v())},prependItems(oe){let v=m.totalItems>0,ge=p.getTotalSize();if(x.unshift(...oe),m.totalItems=x.length,p.rebuild(m.totalItems),Fe(),ke(),!t.reverse||!v)return;let ze=p.getTotalSize()-ge;if(ze<=0)return;let De=Math.max(0,p.getTotalSize()+t.mainAxisPadding-m.containerSize);_e(Math.min(m.scrollPosition+ze,De))},updateItem(oe,v){if(Ie){if(!Ie(oe,v))return}else{let ge=x.findIndex((ze)=>ze.id===oe);if(ge===-1)return;x[ge]={...x[ge],...v}}ke()},insertItem(oe,v){if(se)se(oe,v??m.totalItems);else{if(v===void 0)x.push(oe);else x.splice(v,0,oe);m.totalItems=x.length,p.rebuild(m.totalItems),Fe()}ke()},removeItem(oe){if(D){if(D(oe)<0)return}else{let v=x.findIndex((ge)=>ge.id===oe);if(v===-1)return;x.splice(v,1),m.totalItems=x.length,p.rebuild(m.totalItems),Fe()}ke()},removeItems(oe){if(D){let De=0;for(let Be of oe)if(D(Be)>=0)De++;if(De>0)ke();return De}let v=new Set(oe),ge=x.length;x=x.filter((De)=>!v.has(De.id));let ze=ge-x.length;if(ze>0)m.totalItems=x.length,p.rebuild(m.totalItems),Fe(),m.renderPending=!0,Ne();return ze},getItemAt(oe){if(V.indexMap){let ge=h.get("_getLoadedItem");return ge?ge(oe):x[oe]}let v=h.get("_getItemAtLayout");if(v){let ge=h.get("_dataToLayoutIndex");return v(ge?ge(oe):oe)}return j?j(oe):x[oe]},getIndexById(oe){if(Z)return Z(oe);return x.findIndex((v)=>v.id===oe)},scrollToIndex(oe,v="start"){let ge=G?G():x.length;if(ge===0){he={index:oe,alignOrOptions:v};return}let ze=typeof v==="string"?v:v.align??"start",De=typeof v==="object"?v.behavior:void 0,Be=typeof v==="object"?v.duration:void 0,Ze=typeof v==="object"?v.easing:void 0;if(K&&K(oe,ze,De,Be,Ze)!==!1)return;let Ue=Math.max(0,Math.min(oe,ge-1)),nt=p.getOffset(Ue),lt=p.getSize(Ue),ft=m.containerSize,Bn=p.getTotalSize(),jt=t.mainAxisPadding,Nn=Math.max(0,Bn+jt-ft),je;if(q)je=q(Ue,p,ft,ge,ze);else{let Wn=t.startPadding;switch(ze){case"center":je=Wn+nt-(ft-lt)/2;break;case"end":je=nt+lt+jt-ft;break;default:je=nt}je=Math.max(0,Math.min(je,Nn))}if(De==="smooth"&&!Te)U.smoothScrollTo(je,Be??ht,ee??void 0,Ze);else _e(je)},getScrollPosition(){return ye.getPixelEquivalent()},on:g.on.bind(g),off:g.off.bind(g),destroy(){if(m.destroyed)return;if(m.destroyed=!0,Me)Me=!1,d.root.classList.remove(Se);if(st!==null)cancelAnimationFrame(st),st=null;if(C!==null)clearTimeout(C),C=null;U.detach(),Re?.destroy(),Pt?.disconnect(),d.content.removeEventListener("click",qt),d.content.removeEventListener("dblclick",Ut),d.content.removeEventListener("contextmenu",Xt),d.root.removeEventListener("keydown",Zt);let oe=[];Y(oe);for(let[,v]of F)v.remove();if(F.clear(),_.clear(),d.root.remove(),g.emit("destroy",void 0),g.clear(),oe.length>0)for(let v of oe)console.error("vlist: error during destroy:",v)}};for(let[oe,v]of h){if(oe.startsWith("_"))continue;Mt[oe]=v}return Mt}var En="_getScrollPadding",uo={start:0,end:0};function Tt(e){let n;return()=>{if(n===void 0)n=e.hooks.get("_getScrollPadding")??null;return n?n():uo}}var Pn=(e)=>e==null?0:typeof e==="function"?e():e;function Ft(e){let n=e?.scrollPadding,o,i;return{name:"page",priority:5,setup(r){let{dom:t,config:s,emitter:a}=r,A=r.sizes.cache,y=s.axis.primary==="x",l=window,M=r.getState();if(r.scroll.disableResize(),t.root.style.overflow="visible",t.root.style.height="auto",y)t.viewport.style.overflowX="visible",t.viewport.style.overflowY="visible";else t.viewport.style.overflow="visible";t.viewport.classList.remove(`${s.classPrefix}-viewport--custom-scrollbar`);let W=!1,g=!1;r.scroll.setSource({onContentSize(T){if(T>zt&&!g){let p=`vlist: page() native document size ${T}px exceeds the ${zt}px limit. Use the viewport-scrolled default for larger lists. See https://vlist.io/docs/rfcs/RFC-014-Scroll-Input-Model`;if(!W)throw i?.(),o?.(),t.root.remove(),Error(p);g=!0,console.warn(p)}W=!0},write(T){let p=t.viewport.getBoundingClientRect(),_=(y?p.left+l.scrollX:p.top+l.scrollY)+T;if(y)l.scrollTo({left:_,top:l.scrollY,behavior:"instant"});else l.scrollTo({left:l.scrollX,top:_,behavior:"instant"});r.scroll.commit(T)}}),M.containerSize=y?l.innerWidth:l.innerHeight,M.crossSize=y?l.innerHeight:l.innerWidth;let V=()=>{let T=t.viewport.getBoundingClientRect(),p=Math.max(0,y?-T.left:-T.top);if(Math.abs(p-r.scroll.getPixelEquivalent())<0.5)return;r.scroll.commit(p)};l.addEventListener("scroll",V,{passive:!0}),i=()=>l.removeEventListener("scroll",V);let{innerWidth:S,innerHeight:I}=l,d=()=>{let{innerWidth:T,innerHeight:p}=l;if((y?Math.abs(T-S):Math.abs(p-I))<1)return;S=T,I=p,M.containerSize=y?T:p,M.crossSize=y?p:T,r.render.force(),a.emit("resize",{width:T,height:p})};if(l.addEventListener("resize",d),o=()=>l.removeEventListener("resize",d),n){let T=()=>({start:Pn(y?n.left:n.top),end:Pn(y?n.right:n.bottom)});r.hooks.method(En,T),r.scroll.setToPosFn((p,_,te,m,x)=>{let{start:L,end:F}=T();if(m===0)return 0;let u=Math.max(0,Math.min(p,m-1)),E=_.getOffset(u),H=_.getSize(u),R=_.getTotalSize(),ie=Math.max(0,R-te+F),ce;switch(x){case"center":ce=E-L-(te-L-F-H)/2;break;case"end":ce=E-te+H+F;break;default:ce=E-L}return Math.max(-L,Math.min(ce,ie))}),r.hooks.method("_scrollItemIntoView",(p)=>{let _=y?l.innerWidth:l.innerHeight,{start:te,end:m}=T(),x=t.viewport.getBoundingClientRect(),L=y?l.scrollX:l.scrollY,F=y?x.left:x.top,u=F+L,E=A.getOffset(p),H=A.getSize(p),R=F+E,ie=_-m,ce=L;if(R<te)ce=u+E-te;else if(R+H>ie)ce=u+E+H-ie;if(ce!==L)if(y)l.scrollTo({left:ce,top:l.scrollY,behavior:"instant"});else l.scrollTo({left:l.scrollX,top:ce,behavior:"instant"})})}r.hooks.onDestroy(()=>{i?.(),o?.()})},destroy(){i?.(),o?.(),i=void 0,o=void 0}}}function Ot(e){let n=e?.gap??0,o=null,i=0,r=null,t,s,a,A,y,l=new Map,M=new Set,W=new WeakMap,g=0,V=!1,S=!1,I=!1,d=2;function T(u){return l.get(u)??y}function p(u){return l.has(u)&&!M.has(u)}function _(u){if(!r||t.destroyed)return;if(u===void 0){if(l.size===0)return;l.clear(),M.clear(),r.sizes.rebuild(),L()}else{if(!l.has(u))return;M.add(u)}r.render.force()}function te(){return Math.max(0,r.sizes.cache.getTotalSize()+r.config.mainAxisPadding-t.containerSize)}function m(){let u=te();return u>0&&s.getPixelEquivalent()>=u-d}function x(){let u=te();if(u>s.getPixelEquivalent())r.scroll.to(u)}function L(){r.render.contentSize(r.sizes.cache.getTotalSize())}function F(u,E){let H=r;if(H.hooks.get("_setSizeCacheBase"))H.sizes.rebuild();else H.sizes.cache.invalidate(u,E)}return{name:"autosize",priority:5,setup(u){if(i++,s=u.scroll,r=u,t=u.getState(),a=u.config.axis.primary==="x",A=a?"width":"height",n===0)n=u.config.gap;y=typeof u.sizes.rawSpec==="function"?u.sizes.rawSpec(0)+n:u.sizes.rawSpec+n,u.sizes.setConfig(T,n);let E=new ResizeObserver((de)=>{if(t.destroyed||!r)return;let b=!1,C=-1,w=-1,h=u.sizes.cache.indexAtOffset(s.getPixelEquivalent());for(let G of de){let ee=G.target,pe=W.get(ee);if(pe===void 0)continue;if(ee.getAttribute("data-index")!==String(pe)){E.unobserve(ee);continue}if(p(pe))continue;let be=G.borderBoxSize?.[0],O;if(be)O=a?be.inlineSize:be.blockSize;else{let D=ee.getBoundingClientRect();O=a?D.width:D.height}if(O<=0)continue;let fe=O+n,j=l.has(pe),B=l.get(pe)??y;if(l.set(pe,fe),M.delete(pe),!j||fe!==B){if(b=!0,C<0||pe<C)C=pe;if(pe>w)w=pe}if(pe<h&&fe!==B)g+=fe-B;E.unobserve(ee),ee.style[A]=`${O}px`}if(!b)return;let Q=m();if(F(C,w),g)u.scroll.shiftBy(g),g=0;let f=t.scrollDirection!==0,P=t.totalItems>0&&t.prevRangeEnd>=t.totalItems-1,Y=S&&!I;if(Y||Q||P||I||!f){if(L(),V=!1,Y||Q)x()}else V=!0;u.render.force()});o=E,u.scroll.setToIndexFn((de,b,C,w,h)=>{let Q=de>=t.totalItems-1&&b==="end";if(S=Q,I=!1,!Q)return!1;let f=u.config.mainAxisPadding,P=()=>{let Y=u.sizes.cache.getTotalSize();return Math.max(0,Y+f-t.containerSize)};if(C==="smooth")I=!0,u.scroll.smoothTo(P,w??300,h,()=>{if(I=!1,V)L(),V=!1;x()});else u.scroll.to(P())});let H=()=>{S=!1},R=u.dom.viewport;R.addEventListener("wheel",H,{passive:!0}),R.addEventListener("touchstart",H,{passive:!0}),u.hooks.onDestroy(()=>{R.removeEventListener("wheel",H),R.removeEventListener("touchstart",H)});let ie=u.dom.content,ce=(de)=>{let b=de.target;if(!b||b===ie)return;let C=b.closest("[data-index]");if(!C||C.parentNode!==ie)return;let w=Number(C.getAttribute("data-index"));if(p(w))_(w)};ie.addEventListener("load",ce,!0),ie.addEventListener("error",ce,!0),u.hooks.onDestroy(()=>{ie.removeEventListener("load",ce,!0),ie.removeEventListener("error",ce,!0)}),u.hooks.method("isMeasured",p),u.hooks.method("remeasure",_),u.hooks.method("setMeasuredSize",(de,b)=>{l.set(de,b),F(de,de)}),u.hooks.method("getMeasuredCount",()=>l.size),u.hooks.onDestroy(()=>{if(E.disconnect(),o===E)o=null})},hooks:{onCommit(u){if(!o||!r)return;for(let E=0;E<u.visibleCount;E++){let H=u.visibleIndices[E];if(p(H))continue;let R=r.dom.renderedElement(H);if(!R)continue;R.style[A]="",W.set(R,H),o.observe(R)}},onIdle(){if(!r||!V)return;let u=m();if(L(),V=!1,u)x(),r.render.force()}},destroy(){if(i=Math.max(0,i-1),i>0)return;if(o)o.disconnect(),o=null;l.clear(),M.clear(),S=!1,I=!1,r=null}}}var Mn=(e={})=>{let{chunkSize:n=100,maxCachedItems:o=5000,evictionBuffer:i=200,onEvict:r}=e,t=new Map,s=0,a=0,A=(b)=>{let C=t.get(b);if(!C)C={items:Array(n),count:0,lastAccess:Date.now()},t.set(b,C);else C.lastAccess=Date.now();return C},y=(b)=>Math.floor(b/n),l=(b)=>b%n,M=()=>s,W=(b)=>{s=b},g=(b)=>{if(b<0||b>=s)return;let C=y(b),w=t.get(C);if(!w)return;return w.items[l(b)]},V=(b)=>{if(b<0||b>=s)return!1;let C=y(b),w=t.get(C);if(!w)return!1;return w.items[l(b)]!==void 0},S=(b,C)=>{let w=y(b),h=A(w),Q=l(b),f=h.items[Q]===void 0;if(h.items[Q]=C,f)h.count++,a++;if(b>=s)s=b+1},I=(b,C)=>{for(let w=0;w<C.length;w++){let h=C[w];if(h!==void 0)S(b+w,h)}},d=(b,C)=>{if(b<0||b>s)return;let w=y(b),h=Array.from(t.keys()).filter((G)=>G>=w).sort((G,ee)=>G-ee),Q=[];for(let G of h){let ee=t.get(G),pe=G*n;for(let be=0;be<n;be++){if(ee.items[be]===void 0)continue;let O=pe+be;if(O<b)continue;Q.push({oldIndex:O,item:ee.items[be]})}}for(let{oldIndex:G}of Q){let ee=y(G),pe=t.get(ee);if(!pe)continue;let be=l(G);if(pe.items[be]!==void 0){if(pe.items[be]=void 0,pe.count--,a--,pe.count===0)t.delete(ee)}}s++;for(let{oldIndex:G,item:ee}of Q){let pe=G+1,be=y(pe),O=A(be),fe=l(pe);O.items[fe]=ee,O.count++,a++}let f=y(b),P=A(f),Y=l(b);P.items[Y]=C,P.count++,a++},T=(b)=>{if(b<0||b>=s)return!1;let C=y(b),w=t.get(C),h=l(b);if(!(w!==void 0&&w.items[h]!==void 0))return!1;let f=C,P=Array.from(t.keys()).filter((G)=>G>=f).sort((G,ee)=>G-ee),Y=[];for(let G of P){let ee=t.get(G),pe=G*n;for(let be=0;be<n;be++){if(ee.items[be]===void 0)continue;let O=pe+be;if(O<=b)continue;Y.push({oldIndex:O,item:ee.items[be]})}}if(w.items[h]=void 0,w.count--,a--,w.count===0)t.delete(C);for(let{oldIndex:G}of Y){let ee=y(G),pe=t.get(ee);if(!pe)continue;let be=l(G);if(pe.items[be]!==void 0){if(pe.items[be]=void 0,pe.count--,a--,pe.count===0)t.delete(ee)}}for(let{oldIndex:G,item:ee}of Y){let pe=G-1,be=y(pe),O=A(be),fe=l(pe);O.items[fe]=ee,O.count++,a++}return s--,!0},p=(b,C)=>{let w=[];for(let h=b;h<=C&&h<s;h++)w.push(g(h));return w},_=(b,C)=>{for(let w=b;w<=C&&w<s;w++)if(!V(w))return!1;return!0},te=()=>{let b=[],C=null,w=Array.from(t.keys()).sort((h,Q)=>h-Q);for(let h of w){let Q=t.get(h);if(!Q)continue;let f=h*n;for(let P=0;P<n;P++){let Y=f+P;if(Y>=s)break;if(Q.items[P]!==void 0)if(C===null)C={start:Y,end:Y};else if(Y===C.end+1)C.end=Y;else b.push(C),C={start:Y,end:Y};else if(C!==null)b.push(C),C=null}}if(C!==null)b.push(C);return b},m=(b,C)=>{let w=[],h=null;for(let Q=b;Q<=C&&Q<s;Q++)if(!V(Q))if(h===null)h={start:Q,end:Q};else h.end=Q;else if(h!==null)w.push(h),h=null;if(h!==null)w.push(h);return w},x=(b)=>t.has(b),L=(b)=>{let C=t.get(b);if(!C)return!1;let w=b*n,h=Math.min(n,s-w);return C.count>=h},F=(b)=>{let C=t.get(b);if(C)C.lastAccess=Date.now()},u=(b,C)=>{if(b>C||t.size===0)return;let w=Date.now(),h=y(Math.max(0,b)),Q=y(Math.min(s-1,C));for(let f=h;f<=Q;f++){let P=t.get(f);if(P)P.lastAccess=w}},E=(b,C)=>{if(a<=o)return 0;let w=Math.max(0,b-i),h=Math.min(s-1,C+i),Q=y(w),f=y(h),P=0,Y=[];for(let[G,ee]of t)if(G<Q||G>f)P+=ee.count,Y.push(G),a-=ee.count,t.delete(G);if(P>0&&r)r(P,Y);return P},H=()=>{if(a<=o)return 0;let b=Array.from(t.entries()).sort(([,h],[,Q])=>h.lastAccess-Q.lastAccess),C=0,w=[];for(let[h,Q]of b){if(a<=o)break;C+=Q.count,a-=Q.count,w.push(h),t.delete(h)}if(C>0&&r)r(C,w);return C},R=()=>({totalItems:s,cachedItems:a,cachedChunks:t.size,chunkSize:n,maxCachedItems:o,memoryEfficiency:s>0?1-a/s:1}),ie=()=>a,ce=()=>{t.clear(),a=0};return{chunkSize:n,maxCachedItems:o,getTotal:M,setTotal:W,get:g,has:V,set:S,setRange:I,insert:d,delete:T,getRange:p,isRangeLoaded:_,getLoadedRanges:te,findUnloadedRanges:m,getChunkIndex:y,isChunkLoaded:x,isChunkFullyLoaded:L,touchChunk:F,touchChunksForRange:u,evictDistant:E,evictToLimit:H,getStats:R,getCachedCount:ie,clear:ce,reset:()=>{ce(),s=0}}};var zn=(e={})=>{let{maskCharacter:n=sn,maxSampleSize:o=ln}=e,i=[],r=!1,t=(l)=>{if(r||l.length===0)return;let M=Math.min(l.length,o);for(let W=0;W<M;W++){let g=l[W];if(!g||typeof g!=="object")continue;let V={},S=!1;for(let[I,d]of Object.entries(g)){if(I.startsWith("_")||I==="id")continue;V[I]=String(d??"").length,S=!0}if(S)i.push(V)}r=!0},s=()=>r,a=(l)=>{let M={id:`${Ke}${l}`,[kt]:!0,_index:l};if(i.length===0)return M.label=n.repeat(12),M;let W=i[l%i.length];for(let[g,V]of Object.entries(W))M[g]=n.repeat(Math.max(1,V));return M};return{analyzeStructure:t,hasAnalyzedStructure:s,generate:a,generateRange:(l,M)=>{let W=[];for(let g=l;g<=M;g++)W.push(a(g));return W},clear:()=>{i=[],r=!1}}},xt=(e)=>{if(!e||typeof e!=="object")return!1;return e[kt]===!0};var co=50,An=(e={})=>{let{adapter:n,initialItems:o,initialTotal:i,storage:r,placeholder:t,pageSize:s=co,maxConcurrent:a=0,onStateChange:A,onDataChange:y,onItemsLoaded:l,onItemsEvicted:M,onLoadError:W}=e,g=Mn({...r,onEvict:(z,N)=>{M?.(z),E(),u()}}),V=null,S=()=>{if(!V)V=zn(t);return V},I=new Map,d=!1,T,p=!0,_,te,m=[],x=0,L=new Map,F=()=>{for(let z of L.values())z[1].abort();L.clear()},u=()=>{A?.(h())},E=()=>{y?.()},H=()=>{I.clear();let z=g.getLoadedRanges();for(let N of z)for(let le=N.start;le<=N.end;le++){let c=g.get(le);if(c&&!xt(c))I.set(c.id,le)}},R=(z,N)=>{if(!xt(N))I.set(N.id,z)},ie=(z)=>{I.delete(z)},ce=(z,N)=>`${z}-${N}`,de=()=>g.getTotal(),b=()=>g.getCachedCount(),C=()=>d,w=()=>p,h=()=>({total:g.getTotal(),cached:g.getCachedCount(),isLoading:d,pendingRanges:m,error:T,hasMore:p,cursor:_}),Q=()=>g,f=()=>S(),P=(z)=>{let N=g.get(z);if(N!==void 0)return N;if(z>=0&&z<g.getTotal())return S().generate(z);return},Y=(z)=>{let N=I.get(z);if(N===void 0)return;return g.get(N)},G=(z)=>I.get(z)??-1,ee=(z)=>{let N=g.get(z);return N!==void 0&&!xt(N)},pe=(z,N)=>{let le=[],c=g.getTotal();g.touchChunksForRange(z,Math.min(N,c-1));for(let re=z;re<=N&&re<c;re++){let q=g.get(re);if(q!==void 0)le.push(q);else le.push(S().generate(re))}return le},be=(z)=>{g.setTotal(z),p=g.getCachedCount()<z,E(),u()},O=(z,N=0,le)=>{if(n&&z.length>0){let c=S();if(!c.hasAnalyzedStructure())c.analyzeStructure(z)}for(let c=0;c<z.length;c++){let re=z[c];if(re!==void 0){let q=N+c;g.set(q,re),R(q,re)}}if(le!==void 0)g.setTotal(le);else if(N+z.length>g.getTotal())g.setTotal(N+z.length);if(g.getCachedCount()>=g.getTotal()&&g.getTotal()>0)p=!1;E(),u(),l?.(z,N,g.getTotal())},fe=(z,N)=>{let le=g.get(z);if(!le)return!1;let c=le.id,re={...le,...N};if(g.set(z,re),N.id!==void 0&&N.id!==c)ie(c);return R(z,re),E(),u(),!0},j=(z,N)=>{g.insert(N,z),H(),F(),E(),u()},B=(z)=>{let N=I.get(z);if(N===void 0)return!1;if(!g.delete(N))return!1;return H(),F(),E(),u(),!0},D=async(z,N)=>{if(!n)return;let le=g.chunkSize,c=Math.floor(z/le),re=Math.floor(N/le),q=le*2;for(let[U,X]of L){let me=U.indexOf("-"),Le=parseInt(U.slice(0,me),10);if(Math.abs(Le-z)>q)X[1].abort(),L.delete(U)}let K=[],he=[];for(let U=c;U<=re;U++){let X=U*le,me=X+le-1,Le=ce(X,me);if(g.isChunkFullyLoaded(U))continue;let Te=L.get(Le);if(Te)he.push(Te[0]);else K.push({start:X,end:me})}if(K.length===0){if(he.length>0)await Promise.all(he);return}if(a>0){let U=L.size+K.length;if(U>a){let X=(z+N)/2,me=Math.min(U-a,L.size);while(me>0){let Ce=null,Te=-1,Pe=null;for(let[Re,ve]of L){let xe=Re.indexOf("-"),_e=parseInt(Re.slice(0,xe),10),ye=parseInt(Re.slice(xe+1),10),Se=Math.abs((_e+ye)/2-X);if(Se>Te)Te=Se,Ce=Re,Pe=ve[1]}if(Ce)Pe.abort(),L.delete(Ce);me--}let Le=a-L.size;if(K.length>Le)K.sort((Ce,Te)=>{let Pe=Math.abs((Ce.start+Ce.end)/2-X),Re=Math.abs((Te.start+Te.end)/2-X);return Pe-Re}),K.length=Math.max(0,Le)}}if(K.length===0){if(he.length>0)await Promise.all(he);return}for(let U of K){let X=ce(U.start,U.end),me=new AbortController,Le=(async()=>{m.push(U),d=!0,T=void 0,u();try{let Ce=U.end-U.start+1,Te={offset:U.start,limit:Ce,cursor:U.start===te?_:void 0,signal:me.signal},Pe=await n.read(Te);if(O(Pe.items,U.start,Pe.total),Pe.cursor)_=Pe.cursor,te=U.start+Pe.items.length;let Re=U.start+Pe.items.length;if(Re>=x){if(x=Re,Pe.hasMore!==void 0)p=Pe.hasMore;else if(Pe.total!==void 0)p=Re<Pe.total}}catch(Ce){if(Ce?.name==="AbortError")return;T=Ce instanceof Error?Ce:Error(String(Ce)),W?.(T,U)}finally{L.delete(X);let Ce=m.findIndex((Te)=>Te.start===U.start&&Te.end===U.end);if(Ce>=0)m.splice(Ce,1);d=L.size>0,u()}})();L.set(X,[Le,me]),he.push(Le)}await Promise.all(he)},se=async(z,N)=>{if(g.isRangeLoaded(z,N))return;await D(z,N)},Ie=async()=>{if(!n)return;await D(0,s-1)},Z=async()=>{if(!n||d||!p)return!1;let z=g.getCachedCount(),N=g.getTotal(),le=z,c=Math.min(le+s-1,N>0?N-1:le+s-1);if(le>=N&&N>0)return p=!1,!1;return await D(le,c),g.getCachedCount()>z},k=async()=>{if(g.clear(),I.clear(),V)V.clear();F(),m=[],d=!1,_=void 0,te=void 0,p=!0,x=0,T=void 0,E(),u()},ae=(z,N)=>{if(g.evictDistant(z,N)>0)H()},J=()=>{g.clear(),I.clear(),_=void 0,te=void 0,T=void 0,m=[],d=!1,E(),u()},ne=()=>{if(g.reset(),I.clear(),V)V.clear();_=void 0,te=void 0,p=!0,x=0,T=void 0,m=[],d=!1,E(),u()};if(o&&o.length>0)O(o,0,i??o.length);else if(i!==void 0)g.setTotal(i),E(),u();return{getState:h,getTotal:de,getCached:b,getIsLoading:C,getHasMore:w,getStorage:Q,getPlaceholders:f,getItem:P,getItemById:Y,getIndexById:G,isItemLoaded:ee,getItemsInRange:pe,setTotal:be,setItems:O,updateItem:fe,insertItem:j,removeItem:B,loadRange:D,ensureRange:se,loadInitial:Ie,loadMore:Z,reload:k,evictDistant:ae,clear:J,reset:ne}};function Dt(e){let{adapter:n,total:o,autoLoad:i=!0,storage:r}=e,t=e.loading?.cancelThreshold??tn,s=e.loading?.preloadThreshold??en,a=e.loading?.preloadAhead??Qt,A=e.loading?.maxConcurrent??nn,y,l,M,W,g,V,S=null,I=null,d=null,T=0,p=!1,_=null,te=At,m=-1,x=-1,L=-1,F=-1,u=r?.chunkSize??pt,E=()=>{if(S=null,I!==null)clearTimeout(I),I=null},H=(h,Q)=>y.ensureRange(h,Q),R=(h,Q=pt)=>{W.emit("load:start",{offset:h,limit:Q})},ie=(h)=>{W.emit("error",{error:h,context:"ensureRange"})},ce=()=>{S=null;let h={start:l.startIndex,end:l.startIndex+Math.max(0,l.visibleCount-1)};if(h.end<h.start)return;H(h.start,h.end).catch(ie)},de=()=>{if(_!==null)clearTimeout(_),_=null},b=()=>{if(l.destroyed)return;let h=y.getTotal();if(l.visibleCount<=0||l.startIndex>=h)return;let Q=Math.min(l.startIndex+l.visibleCount-1,h-1);if(Q<l.startIndex)return;H(l.startIndex,Q).catch(ie)},C=()=>{if(_!==null||l.destroyed)return;_=setTimeout(()=>{_=null,b()},te),te=Math.min(te*2,on)},w=()=>{de(),te=At};return{name:"data",priority:20,setup(h){l=h.getState(),M=h.sizes.cache,W=h.emitter,g=h.dom,V=h.render.force.bind(h);let Q=null;h.items.setTotalFn(()=>Q?.getTotal()??0),h.items.setIndexByIdFn((P)=>Q?.getIndexById(P)??-1),y=Q=An({adapter:n,...o!==void 0&&{initialTotal:o},pageSize:r?.chunkSize??pt,maxConcurrent:A,...r&&{storage:{...r.chunkSize!==void 0&&{chunkSize:r.chunkSize},...r.maxCachedItems!==void 0&&{maxCachedItems:r.maxCachedItems},...r.evictionBuffer!==void 0&&{evictionBuffer:r.evictionBuffer}}},onDataChange:()=>{if(l.initialized){let P=y.getTotal(),Y=y.getCached();if(l.totalItems=P,P!==m||Y!==x)m=P,x=Y,M.rebuild(P);h.render.contentSize(M.getTotalSize()),h.render.ifNeeded()}},onItemsLoaded:(P)=>{if(w(),l.initialized)h.render.contentSize(M.getTotalSize()),V(),W.emit("load:end",{items:P,total:y.getTotal()})},onLoadError:(P)=>{if(W.emit("error",{error:P,context:"load"}),l.initialized)h.render.ifNeeded();C()}}),h.items.setGetFn((P)=>y.getItem(P)),h.items.setRemoveFn((P)=>{let Y=y.getIndexById(P);if(Y<0)return-1;if(!y.removeItem(P))return-1;return Y}),h.items.setInsertFn((P,Y)=>{y.insertItem(P,Y)}),h.items.setUpdateFn((P,Y)=>{let G=y.getIndexById(P);if(G<0)return!1;return y.updateItem(G,Y)}),h.hooks.method("reload",async()=>{if(S=null,L=-1,F=-1,w(),h.render.force(),await y.reload(),h.scroll.to(0),i)R(0),await y.loadInitial(),h.render.force()}),h.hooks.method("loadVisibleRange",async()=>{S=null,h.render.force();let P=y.getTotal();if(l.visibleCount>0&&l.startIndex<P){let Y=Math.min(l.startIndex+l.visibleCount-1,P-1);R(l.startIndex,Y-l.startIndex+1),await H(l.startIndex,Y)}}),h.hooks.method("loadInitial",async()=>{R(0),await y.loadInitial(),h.render.force()}),h.hooks.method("getTotal",()=>y.getTotal()),h.hooks.method("setTotal",(P)=>{y.setTotal(P)}),h.hooks.method("_getTotal",()=>y.getTotal()),h.hooks.method("_setTotal",(P)=>{y.setTotal(P)}),h.hooks.method("_cancelAutoLoad",()=>{p=!0}),h.hooks.method("_getLoadedItem",(P)=>y.getStorage().get(P)),h.hooks.method("_getItem",(P)=>y.getItem(P)),h.hooks.method("_getLoadedCount",()=>y.getCached()),W.on("load:start",()=>{g.root.setAttribute("aria-busy","true")}),W.on("load:end",()=>{g.root.removeAttribute("aria-busy")}),h.hooks.onDestroy(()=>{if(d!==null)clearTimeout(d),d=null;E(),de()}),W.on("velocity:change",({velocity:P})=>{T=Math.abs(P)});let f=()=>{if(l.destroyed)return;w(),b(),ce()};if(window.addEventListener("online",f),h.hooks.onDestroy(()=>{window.removeEventListener("online",f)}),i)queueMicrotask(()=>{if(p)return;R(0),y.loadInitial().catch((P)=>{W.emit("error",{error:P,context:"loadInitial"})})});else if(o!==void 0)y.setTotal(o)},hooks:{onAfterScroll(){if(l.destroyed)return;let h=l.startIndex+Math.max(0,l.visibleCount-1);if(T>t){if(I!==null)clearTimeout(I),I=null;S={start:l.startIndex,end:h};return}if(T>s){let P=Math.floor(l.startIndex/u),Y=Math.floor(h/u);if(P!==L||Y!==F){if(L=P,F=Y,h>=l.startIndex)H(l.startIndex,h).catch(ie)}let G=l.startIndex,ee=h,pe=l.scrollDirection;if(pe>0)ee=Math.min(ee+a,y.getTotal()-1);else if(pe<0)G=Math.max(0,G-a);if(S={start:G,end:ee},I!==null)clearTimeout(I);I=setTimeout(()=>{if(I=null,l.destroyed||!S)return;let{start:be,end:O}=S;if(S=null,O>=be)H(be,O).catch(ie)},100);return}E();let Q=Math.floor(l.startIndex/u),f=Math.floor(h/u);if(Q!==L||f!==F){if(L=Q,F=f,h>=l.startIndex)H(l.startIndex,h).catch(ie)}},onIdle(){if(l.destroyed)return;T=0,L=-1,F=-1,ce(),E()},onResize(){if(l.destroyed)return;let h=y.getTotal();if(h<=0)return;if(l.visibleCount<=0||l.startIndex>=h)return;let Q=Math.min(l.startIndex+l.visibleCount-1,h-1);if(Q<l.startIndex)return;R(l.startIndex,Q-l.startIndex+1),H(l.startIndex,Q).catch(ie)}},destroy(){if(d!==null)clearTimeout(d);E(),de()}}}var wn=(e)=>{let n=Math.max(1,Math.floor(e.columns)),o=e.gap??0,i=e.isHeaderFn,r={row:0,col:0},t=(S)=>{if(S<=0)return 0;if(!i)return Math.ceil(S/n);let I=0,d=0,T=0;for(let p=0;p<S;p++)if(i(p)){if(T++,d)I++,d=0;I++,d=0}else if(d++,d>=n)I++,d=0;if(d)I++;return I},s=(S)=>(r.row=a(S),r.col=A(S),r),a=(S)=>{if(!i)return Math.floor(S/n);let I=0,d=0;for(let T=0;T<=S;T++)if(i(T)){if(d)I++,d=0;if(T===S)return I;I++,d=0}else{if(T===S)return I;if(d++,d>=n)I++,d=0}return I},A=(S)=>{if(!i)return S%n;if(i(S))return 0;let I=0;for(let d=0;d<=S;d++)if(i(d))I=0;else{if(d===S)return I;if(I++,I>=n)I=0}return I},y=(S,I,d,T)=>{if(d<=0){T.start=0,T.end=-1;return}if(!i){T.start=Math.max(0,S*n),T.end=Math.min(d-1,(I+1)*n-1);return}let p=l(S,I,d);T.start=p.start,T.end=p.end},l=(S,I,d)=>{if(d<=0)return{start:0,end:-1};if(!i){let m=Math.max(0,S*n),x=Math.min(d-1,(I+1)*n-1);return{start:m,end:x}}let T=-1,p=-1,_=0,te=0;for(let m=0;m<d;m++){if(i(m)){if(te)_++,te=0;if(_>=S&&_<=I){if(T<0)T=m;p=m}_++,te=0}else{if(_>=S&&_<=I){if(T<0)T=m;p=m}if(te++,te>=n)_++,te=0}if(_>I&&!te)break}if(T<0)return{start:0,end:-1};return{start:T,end:p}},M=(S,I,d)=>{if(I<0||I>=n)return-1;let T=S*n+I;if(T<0||T>=d)return-1;return T},W=(S)=>{let I=(n-1)*o;return Math.max(0,(S-I)/n)};return{get columns(){return n},get gap(){return o},update:(S)=>{if(S.columns!==void 0)n=Math.max(1,Math.floor(S.columns));if(S.gap!==void 0)o=S.gap;if(S.isHeaderFn!==void 0)i=S.isHeaderFn},getTotalRows:t,getPosition:s,getRow:a,getCol:A,getItemRange:l,fillItemRange:y,getItemIndex:M,getColumnWidth:W,getColumnOffset:(S,I)=>{let d=W(I);return S*(d+o)}}};function rt(e,n,o,i,r){if(o==="smooth")e.smoothTo(n,i??ht,r);else e.to(n)}var Je={selected:!1,focused:!1};function $t(e){if(!e.columns||e.columns<1)throw Error("[vlist] grid: columns must be >= 1");let n,o,i,r,t=0,s,a=null,A=null,y=-1,l,M,W,g,V,S,I=null,d=0,T=0,p=0,_=0,te=new Map,m=0,x=0,L=0,F=0,u=null,E=!1,H="",R="",ie="",ce={start:0,end:-1},de=-1,b=-1,C=-1,w=!0,h,Q=!1;function f(){let j=(x-1)*L;F=Math.max(0,(m-j)/x)}function P(){if(E)return;E=!0,u=I?.()??null}function Y(){if(A!==null||a===null)return;A=a.dom.content.getAttribute("role")==="listbox"}function G(){return n.getTotalRows(i.totalItems)}function ee(j,B){let D=j/x|0,Ie=(j-D*x)*(F+L)+d,Z=o.getOffset(D)-B+p;if(g)return`translate(${Math.round(Z)}px, ${Math.round(Ie)}px)`;return`translate(${Math.round(Ie)}px, ${Math.round(Z)}px)`}function pe(j,B){let D=o.getSize(B)-L;if(g)j.style.width=`${D}px`,j.style.height=`${F}px`;else j.style.width=`${F}px`,j.style.height=`${D}px`}function be(j,B,D){if(u)u(D,Je);else Je.selected=!1,Je.focused=!1;let se=M(B,D,Je);if(typeof se==="string")j.innerHTML=se;else j.innerHTML="",j.appendChild(se);Xe(j)}function O(){if(i.destroyed)return;let j=r.getRenderOrigin(),B=r.getPixelEquivalent(),D=i.containerSize;if(!w&&B===de&&D===b&&j===t)return;de=B,b=D,w=!1;let se=G();if(D<=0||se===0)return;P(),Y();let Ie=o.indexAtOffset(B),Z=o.indexAtOffset(B+D);if(Z<se-1)Z++;Ie=Math.max(0,Ie),Z=Math.min(se-1,Math.max(0,Z));let k=Math.max(0,Ie-S),ae=Math.min(se-1,Z+S);if(k===i.prevRangeStart&&ae===i.prevRangeEnd&&!i.renderPending&&j===t)return;n.fillItemRange(k,ae,i.totalItems,ce);let{start:J,end:ne}=ce;for(let[le,c]of te)if(le<J||le>ne)c.el.remove(),s.release(c.el),te.delete(le);if(A&&i.totalItems!==y){y=i.totalItems;let le=String(i.totalItems);for(let[,c]of te)c.el.setAttribute("aria-setsize",le)}for(let le=J;le<=ne;le++){let c=W(le);if(!c)continue;let re=le/x|0,q=le-re*x,K=te.get(le);if(K===void 0){let X=s.acquire();if(X.className=H,X.setAttribute("data-index",String(le)),X.setAttribute("data-id",String(c.id)),X.setAttribute("role",A?"option":"listitem"),A)X.id=`${V}-item-${le}`,X.setAttribute("aria-posinset",String(le+1)),X.setAttribute("aria-setsize",String(i.totalItems));be(X,c,le),K={el:X,lastItem:c},te.set(le,K),l.appendChild(X)}else if(K.lastItem!==c)K.el.setAttribute("data-id",String(c.id)),K.lastItem=c,be(K.el,c,le);else if(u)u(le,Je);if(u)if(K.el.classList.toggle(R,Je.selected),K.el.classList.toggle(ie,Je.focused),Je.selected)K.el.setAttribute("aria-selected","true");else K.el.removeAttribute("aria-selected");pe(K.el,re);let he=q*(F+L)+d,U=o.getOffset(re)-j+p;K.el.style.transform=g?`translate(${Math.round(U)}px, ${Math.round(he)}px)`:`translate(${Math.round(he)}px, ${Math.round(U)}px)`}let z=o.getTotalSize();if(z!==C)C=z,a?.render.contentSize(z);i.prevRangeStart=k,i.prevRangeEnd=ae,t=j,i.renderPending=!1;let N=ne-J+1;i.visibleCount=Math.min(N,i.capacity),i.startIndex=J;for(let le=0;le<i.visibleCount;le++){let c=J+le,re=c/x|0;i.visibleIndices[le]=c,i.visibleOffsets[le]=o.getOffset(re),i.visibleSizes[le]=o.getSize(re)}}function fe(){if(i.destroyed)return;h(G()),C=-1,i.prevRangeStart=-1,i.prevRangeEnd=-1,i.renderPending=!0,w=!0,O()}return{name:"grid",priority:10,conflicts:["masonry","table","autosize"],setup(j){r=j.scroll,x=Math.max(1,Math.floor(e.columns)),L=e.gap??0,n=wn({columns:e.columns,gap:L}),o=j.sizes.cache,i=j.getState(),s=j.pool,a=j,l=j.dom.content,M=j.template,g=j.config.axis.primary==="x",V=j.config.classPrefix,S=j.config.overscan,W=j.items.at.bind(j),I=()=>j.render.getStateFn(),H=`${V}-item ${V}-grid-item`,R=`${V}-item--selected`,ie=`${V}-item--focused`,d=j.config.crossPadStart,T=j.config.crossAxisPadding,p=j.config.startPadding,_=j.config.mainAxisPadding,m=i.crossSize-T,f();let B=j.sizes.rawSpec,D;Q=typeof B==="function";function se(ae,J,ne,z){let N=ae*J;if(N>=i.totalItems)return D+ne;return B(N,z)+ne}if(typeof B==="function"){let J={columnWidth:n.getColumnWidth(m),columns:e.columns,gap:L};D=i.totalItems>0?B(0,J):0,j.sizes.setConfig((ne)=>(J.columnWidth=n.getColumnWidth(m),se(ne,e.columns,L,J)),L)}else if(D=B,L>0)j.sizes.setConfig(D+L,L);let Ie=null,Z=o.rebuild;function k(){if(o.rebuild===Ie)return;Z=o.rebuild,h=(ae)=>Z(ae),Ie=(ae)=>{h(Math.ceil(ae/x))},o.rebuild=Ie}j.hooks.method("_setSizeCacheBase",(ae)=>{Z=ae,h=(J)=>Z(J)}),k(),h(G()),j.items.setTotalFn(()=>i.totalItems),j.hooks.method("_getTotal",()=>i.totalItems),j.dom.root.classList.add(`${V}--grid`),j.render.setFn(O,fe),j.hooks.method("getGridLayout",()=>n),j.hooks.method("_getRowGap",()=>n.gap),j.hooks.method("updateGrid",(ae)=>{if(ae.columns!==void 0){if(!Number.isInteger(ae.columns)||ae.columns<1)throw Error("[vlist] updateGrid: columns must be >= 1")}if(ae.gap!==void 0&&ae.gap<0)throw Error("[vlist] updateGrid: gap must be >= 0");if(n.update(ae),ae.columns!==void 0)x=Math.max(1,Math.floor(ae.columns));if(ae.gap!==void 0)L=ae.gap;if(ae.gap!==void 0||ae.columns!==void 0){let J=n.gap;if(typeof B==="function"){let ne={columnWidth:n.getColumnWidth(m),columns:n.columns,gap:J};j.sizes.setConfig((z)=>(ne.columnWidth=n.getColumnWidth(m),se(z,n.columns,J,ne)),J)}else j.sizes.setConfig(D+J,J);k(),h(G())}if(ae.columns!==void 0)j.nav.set({ud:n.columns});m=i.crossSize-T,f(),fe()}),j.scroll.setToIndexFn((ae,J,ne,z,N)=>{let le=n.getRow(ae),c=G();if(c===0)return!1;let re=Math.max(0,Math.min(le,c-1)),q=o.getOffset(re)+p,K=o.getSize(re),he=i.containerSize,U=o.getTotalSize()+_,X=Math.max(0,U-he),me;switch(J){case"center":me=q-(he-K)/2;break;case"end":me=q-he+K;break;default:me=q}me=Math.max(0,Math.min(me,X)),rt(j.scroll,me,ne,z,N)}),j.nav.set({total:()=>i.totalItems,ud:e.columns,lr:1,scrollIndex:(ae)=>n.getRow(ae)}),j.hooks.onDestroy(()=>{for(let[,ae]of te)ae.el.remove();te.clear(),A=null,y=-1,j.dom.root.classList.remove(`${V}--grid`)})},hooks:{onResize(j,B){let D=i.crossSize-T;if(Math.abs(D-m)<1)return;if(m=D,f(),Q){fe();return}let se=r.getRenderOrigin();for(let[Ie,Z]of te){let k=Ie/x|0;pe(Z.el,k),Z.el.style.transform=ee(Ie,se)}}},destroy(){te.clear()}}}var kn=(e)=>{let n=Math.max(1,Math.floor(e.columns)),o=e.gap??0,i=e.containerSize,r=e.crossOffset??0,t=e.mainOffset??0,s=0,a=[],A=()=>{let d=(n-1)*o;s=Math.max(0,(i-d)/n),a=Array(n);let T=s+o;for(let p=0;p<n;p++)a[p]=r+p*T};A();let y=[],l=0,M=[],W=(d,T)=>{if(d<=0)return l=0,y=[],[];let p=Array(n).fill(t),_=Array(n);for(let x=0;x<n;x++)_[x]=[];let te=Array(d);for(let x=0;x<d;x++){let L=0,F=p[0];for(let H=1;H<n;H++){let R=p[H];if(R<F)F=R,L=H}let u=T(x),E=p[L];te[x]={index:x,x:a[L],y:E,lane:L,size:u,crossSize:s},_[L].push(x),p[L]=E+u+o}y=_;let m=0;for(let x=0;x<n;x++){let L=p[x],F=L>0?L-o:0;if(F>m)m=F}return l=m,te},g=(d)=>{if(d.length===0)return l;if(l)return l;let T=Array(n).fill(0);for(let _ of d){let te=_.y+_.size,m=T[_.lane];if(te>m)T[_.lane]=te}let p=0;for(let _=0;_<n;_++)if(T[_]>p)p=T[_];return p},V=(d,T,p)=>{if(d.length===0||p<=T)return M.length=0,M;if(y.length===0||y.length!==n)return S(d,T,p);M.length=0;for(let _=0;_<n;_++){let te=y[_],m=te.length;if(!m)continue;let x=0,L=m;while(x<L){let F=x+L>>>1,u=d[te[F]];if(u.y+u.size<=T)x=F+1;else L=F}for(let F=x;F<m;F++){let u=d[te[F]];if(u.y>=p)break;M.push(u)}}return M},S=(d,T,p)=>{M.length=0;for(let _ of d)if(_.y+_.size>T&&_.y<p)M.push(_);return M};return{get columns(){return n},get gap(){return o},get containerSize(){return i},update:(d)=>{let T=!1;if(d.columns!==void 0){let p=Math.max(1,Math.floor(d.columns));if(p!==n)n=p,T=!0}if(d.gap!==void 0&&d.gap!==o)o=d.gap,T=!0;if(d.containerSize!==void 0&&d.containerSize!==i)i=d.containerSize,T=!0;if(d.crossOffset!==void 0&&d.crossOffset!==r)r=d.crossOffset,T=!0;if(d.mainOffset!==void 0&&d.mainOffset!==t)t=d.mainOffset,T=!0;if(T)A()},calculateLayout:W,getTotalSize:g,getVisibleItems:V}};var Rn=(e,n,o)=>{let i=Array.from(n).sort((s,a)=>s-a);if(i.length<=1)return;let r=[];for(let s=0;s<i.length;s++){let a=o(i[s]);if(a)r.push(a)}if(r.length<=1)return;let t=e.firstChild;for(let s=0;s<r.length;s++){let a=r[s];if(a===t)t=t.nextSibling;else e.insertBefore(a,t)}};var mo=(e=200)=>{let n=[];return{acquire:()=>{let t=n.pop();if(t)return t;let s=document.createElement("div");return s.setAttribute("role","option"),s},release:(t)=>{if(t.remove(),n.length<e)t.className="",t.textContent="",t.removeAttribute("style"),t.removeAttribute("data-index"),t.removeAttribute("data-id"),t.removeAttribute("data-lane"),n.push(t)},clear:()=>{n.length=0}}},fo=1,_n=(e,n,o,i=!1,r,t,s,a,A=()=>0)=>{let y=mo(),l=new Map,M=new Set,W=0,g="",V=-1,S=!1,I={selected:!1,focused:!1},d=(b,C)=>(I.selected=b,I.focused=C,I),T=`${o}-item ${o}-masonry-item`,p=`${o}-group-header`,_=`${o}-item--selected`,te=`${o}-item--focused`,m=(b,C)=>{if(typeof C==="string")b.innerHTML=C;else b.replaceChildren(C);Xe(b)},x=(b,C,w)=>{b.classList.toggle(_,C),b.classList.toggle(te,w)},L=(b,C)=>{let w=Math.round(C.y-E);if(i)b.style.transform=`translate(${w}px, ${Math.round(C.x)}px)`;else b.style.transform=`translate(${Math.round(C.x)}px, ${w}px)`},F=(b,C)=>{if(i)b.style.width=`${C.size}px`,b.style.height=`${C.crossSize}px`;else b.style.width=`${C.crossSize}px`,b.style.height=`${C.size}px`},u=(b,C,w,h,Q)=>{let f=y.acquire(),P=C.__groupHeader,Y=d(h,Q);if(f.className=P?p:T,f.dataset.index=String(b),f.dataset.id=String(C.id),f.dataset.lane=String(w.lane),P)f.setAttribute("role","presentation"),f.removeAttribute("aria-selected"),f.removeAttribute("aria-setsize"),f.removeAttribute("aria-posinset"),f.removeAttribute("id");else if(S){if(f.setAttribute("role","option"),f.ariaSelected=String(h),t)f.id=`${t}-item-${b}`;if(r){let ee=r();if(ee!==V)V=ee,g=String(ee);f.setAttribute("aria-setsize",g);let pe=s?s(b):b+1;f.setAttribute("aria-posinset",String(pe))}}else f.setAttribute("role","listitem"),f.removeAttribute("aria-selected"),f.removeAttribute("aria-setsize"),f.removeAttribute("aria-posinset"),f.removeAttribute("id");F(f,w);let G=n(C,b,Y);return m(f,G),x(f,h,Q),L(f,w),{element:f,lastItem:C,lastSelected:h,lastFocused:Q,lastY:w.y-E,absY:w.y,lastX:w.x,lastSize:w.size,lastCrossSize:w.crossSize,lastSeenFrame:W}},E=0,H=(b,C,w,h,Q=A())=>{if(E=Q,W++,S=typeof a==="function"?a():a===!0,S&&r){let P=r();if(P!==V){V=P,g=String(P);for(let Y of l.values())if(Y.element.getAttribute("role")==="option")Y.element.setAttribute("aria-setsize",g)}}M.clear();for(let P=0;P<C.length;P++)M.add(C[P].index);let f=null;for(let P=0;P<C.length;P++){let Y=C[P],G=Y.index,ee=b(G);if(!ee)continue;let pe=w.has(ee.id),be=G===h,O=l.get(G);if(O){let fe=O.lastItem!==ee,j=O.lastSelected!==pe,B=O.lastFocused!==be,D=O.lastY!==Y.y-E||O.lastX!==Y.x,se=O.lastSize!==Y.size||O.lastCrossSize!==Y.crossSize;if(fe){let Ie=d(pe,be),Z=n(ee,G,Ie);if(m(O.element,Z),O.element.dataset.id=String(ee.id),O.lastItem=ee,!ee.__groupHeader&&S){let ae=s?s(G):G+1;O.element.setAttribute("aria-posinset",String(ae))}}if(fe||j||B){if(x(O.element,pe,be),S)O.element.ariaSelected=String(pe);else O.element.removeAttribute("aria-selected");O.lastSelected=pe,O.lastFocused=be}if(se)F(O.element,Y),O.lastSize=Y.size,O.lastCrossSize=Y.crossSize;if(D)L(O.element,Y),O.lastY=Y.y-E,O.absY=Y.y,O.lastX=Y.x}else{let fe=u(G,ee,Y,pe,be);if(!f)f=document.createDocumentFragment();f.appendChild(fe.element),l.set(G,fe)}}if(f)e.appendChild(f);for(let[P,Y]of l)if(M.has(P))Y.lastSeenFrame=W;else if(W-Y.lastSeenFrame>fo)y.release(Y.element),l.delete(P);else{let G=Math.round(Y.absY-E);if(G!==Y.lastY){Y.lastY=G;let ee=Math.round(Y.lastX);Y.element.style.transform=i?`translate(${G}px, ${ee}px)`:`translate(${ee}px, ${G}px)`}}},R=()=>{for(let b of l.values())y.release(b.element);l.clear(),e.innerHTML=""};return{render:H,getElement:(b)=>l.get(b)?.element,updateItemClasses:(b,C,w)=>{let h=l.get(b);if(!h)return;let Q=h.lastSelected!==C,f=h.lastFocused!==w;if(Q||f)x(h.element,C,w),h.lastSelected=C,h.lastFocused=w},sortDOM:()=>{Rn(e,l.keys(),(b)=>l.get(b)?.element)},clear:R,destroy:()=>{R(),y.clear()}}};var go=100,po=new Set;function Gt(e){if(!e.columns||e.columns<1)throw Error("[vlist] masonry: columns must be >= 1");let n,o=null,i=0,r,t,s=0,a=null,A,y,l,M=[],W=-1,g=-1,V=!0,S=-1,I=-1,d=0,T=0,p=0,_=0,te={columnWidth:0,columns:0,gap:0,containerWidth:0},m=[],x=(k)=>P?P(k):m[k],L=null,F=null,u=!1,E=null;function H(){if(u||!a)return;u=!0,L=a.hooks.get("_getSelectedIds")??null,F=a.hooks.get("_getFocusedIndex")??null}function R(){if(E!==null)return E;if(!a)return!1;return E=a.dom.content.getAttribute("role")==="listbox",E}let ie=[],ce=new Int32Array(0),de=[],b=null,C=null,w=null,h=null,Q=!1,f=!0,P=null,Y=!1;function G(){if(Y||!a)return;if(P=a.hooks.get("_getLoadedItem")??null,P)Y=!0}function ee(){if(Q||!a)return;if(b=a.hooks.get("_getItemLane")??null,C=a.hooks.get("_getItemY")??null,w=a.hooks.get("_getItemH")??null,h=a.hooks.get("_isGroupHeader")??null,b||h)Q=!0}function pe(){ee();let k=n.columns,ae=!!b;if(ae){let J=r.totalItems;ie=Array(k);for(let ne=0;ne<k;ne++)ie[ne]=[];if(ce.length<J)ce=new Int32Array(J);for(let ne=0;ne<J;ne++){if(h?.(ne))continue;let z=b(ne);if(z<0||z>=k)continue;ce[ne]=ie[z].length,ie[z].push(ne)}}else{let J=M.length;ie=Array(k);for(let ne=0;ne<k;ne++)ie[ne]=[];if(ce.length<J)ce=new Int32Array(J);for(let ne=0;ne<J;ne++){let z=M[ne];ce[ne]=ie[z.lane].length,ie[z.lane].push(ne)}}de=Array(k);for(let J=0;J<k;J++){let ne=ie[J],z=new Float64Array(ne.length);for(let N=0;N<ne.length;N++){let le=ne[N];if(ae&&C&&w){let c=C(le),re=w(le);z[N]=c>=0?c+(re>0?re*0.5:0):0}else{let c=M[le];z[N]=c.y+c.size*0.5}}de[J]=z}}function be(k,ae){let J=k.length;if(!J)return-1;let ne=0,z=J-1;while(ne<z){let N=ne+z>>1;if(k[N]<ae)ne=N+1;else z=N}if(ne>0&&Math.abs(k[ne-1]-ae)<=Math.abs(k[ne]-ae))return ne-1;return ne}function O(k,ae,J){if(f)pe(),f=!1;let ne=!!b,z,N;if(ne){if(h?.(k))return k;if(z=b(k),z<0)return k;N=ce[k]}else{let q=M[k];if(!q)return k;z=q.lane,N=ce[k]}let le=n.columns,c=ie[z];switch(A?ae==="ArrowDown"?"ArrowRight":ae==="ArrowUp"?"ArrowLeft":ae==="ArrowRight"?"ArrowDown":ae==="ArrowLeft"?"ArrowUp":ae:ae){case"ArrowDown":if(N+1<c.length)return c[N+1];return k;case"ArrowUp":if(N>0)return c[N-1];return k;case"ArrowRight":{if(z>=le-1)return k;let q=z+1,K=ie[q];if(!K.length)return k;let he=be(de[q],de[z]?.[N]??0);return he>=0?K[he]:k}case"ArrowLeft":{if(z<=0)return k;let q=z-1,K=ie[q];if(!K.length)return k;let he=be(de[q],de[z]?.[N]??0);return he>=0?K[he]:k}case"Home":return 0;case"End":{let q=ie[le-1];return q.length>0?q[q.length-1]:k}case"PageDown":{let q=r.containerSize,K=ne?null:M[k],he=K&&K.size>0?K.size:150,U=Math.max(1,Math.floor(q/he)),X=Math.min(N+U,c.length-1);return c[X]}case"PageUp":{let q=r.containerSize,K=ne?null:M[k],he=K&&K.size>0?K.size:150,U=Math.max(1,Math.floor(q/he)),X=Math.max(0,N-U);return c[X]}}return k}let fe=null;function j(){if(e.size)return(k)=>e.size(k,te);if(fe!==null&&typeof fe==="function")return(k)=>fe(k,te);return(k)=>a.sizes.cache.getSize(k)}function B(){let k=n.columns,ae=n.gap;te.containerWidth=n.containerSize,te.columns=k,te.gap=ae,te.columnWidth=Math.max(0,(n.containerSize-(k-1)*ae)/k)}function D(){if(!a)return;B();let k=r.totalItems;M=n.calculateLayout(k,j()),S=k,f=!0,se()}function se(){if(!a)return;let k=n.getTotalSize(M)+_;if(k===I)return;I=k,a.render.contentSize(k)}function Ie(){if(r.destroyed||!a||!o)return;if(r.totalItems!==S)D();if(V)I=-1,se();H(),G();let k=t.getRenderOrigin(),ae=t.getPixelEquivalent(),J=r.containerSize;if(!V&&ae===W&&J===g&&k===s)return;if(W=ae,g=J,V=!1,J<=0||M.length===0)return;let ne=Math.max(0,ae-l),z=ae+J+l,N=n.getVisibleItems(M,ne,z),le=L?.()??po,c=F?.()??-1;m=a.items.all(),o.render(x,N,le,c,k),s=k;let re=N.length,q=re>0?N[0].index:0,K=re>0?N[re-1].index:0;r.prevRangeStart=q,r.prevRangeEnd=K,r.renderPending=!1;let he=Math.min(re,r.capacity);r.visibleCount=he,r.startIndex=q;for(let U=0;U<he;U++){let X=N[U];r.visibleIndices[U]=X.index,r.visibleOffsets[U]=X.y,r.visibleSizes[U]=X.size}}function Z(){if(r.destroyed)return;I=-1,D(),r.prevRangeStart=-1,r.prevRangeEnd=-1,r.renderPending=!0,V=!0,Ie()}return{name:"masonry",priority:10,conflicts:["grid","table"],validateConfig(k){if(k.reverse)throw Error("[vlist] masonry: cannot be combined with reverse mode")},setup(k){i++,t=k.scroll,a=k,r=k.getState(),fe=k.sizes.rawSpec,A=k.config.axis.primary==="x",y=k.config.classPrefix,l=k.config.overscan*go,d=k.config.crossAxisPadding,T=k.config.crossPadStart,p=k.config.startPadding,_=k.config.endPadding;let ae=r.crossSize-d;n=kn({columns:e.columns,gap:e.gap??0,containerSize:ae,crossOffset:T,mainOffset:p}),o=_n(k.dom.content,k.template,y,A,()=>r.totalItems,y,void 0,R,t.getRenderOrigin),k.dom.root.classList.add(`${y}--masonry`);let J=Tt(k);k.render.setFn(Ie,Z),D(),k.hooks.method("getMasonryLayout",()=>n),k.hooks.method("updateMasonry",(z)=>{if(z.columns!==void 0&&z.columns<1)throw Error("[vlist] updateMasonry: columns must be >= 1");if(z.gap!==void 0&&z.gap<0)throw Error("[vlist] updateMasonry: gap must be >= 0");let N={};if(z.columns!==void 0)N.columns=z.columns;if(z.gap!==void 0)N.gap=z.gap;n.update(N),o?.clear(),Z()}),k.scroll.setToIndexFn((z,N,le,c,re)=>{let q=M[z];if(!q)return!1;let K=r.containerSize,he=n.getTotalSize(M)+_,U=Math.max(0,he-K),X=J(),me=q.y-X.start;if(N==="center")me=q.y-X.start-(K-X.start-X.end-q.size)/2;else if(N==="end"){if(me=q.y-K+q.size+X.end,z>=r.totalItems-1&&q.y+q.size>U)me=U+X.end}let Le=X.start>0?-X.start:0;me=Math.max(Le,Math.min(me,U+X.end)),rt(k.scroll,me,le,c,re)}),k.hooks.method("_scrollItemIntoView",(z)=>{let N=M[z];if(!N)return;let le=t.getPixelEquivalent(),c=r.containerSize,re=n.getTotalSize(M)+_,q=Math.max(0,re-c),K=J(),he=p+K.start,U=_+K.end,X=N.y,me=X+N.size,Le=K.start>0?-K.start:0;if(X-he<le)k.scroll.to(Math.max(Le,X-he));else if(me+U>le+c){let Ce=ie[n.columns-1];if(Ce&&Ce.length>0&&z===Ce[Ce.length-1]&&X>=q)k.scroll.to(q+K.end);else k.scroll.to(Math.min(me+U-c,q+K.end))}}),k.nav.set({total:()=>r.totalItems,navigate:O});let ne=o;k.hooks.onDestroy(()=>{if(i=Math.max(0,i-1),ne?.destroy(),o===ne)o=null;if(i===0)E=null;k.dom.root.classList.remove(`${y}--masonry`)})},hooks:{onResize(k,ae){if(!n||!a)return;let J=r.crossSize-d;if(Math.abs(J-n.containerSize)<1)return;n.update({containerSize:J}),o?.clear(),Z()},onIdle(){o?.sortDOM()}},destroy(){if(i>0)return;o?.destroy(),o=null,M=[],E=null,a=null}}}var ct={key:"",groupIndex:0,headerLayoutIndex:0,firstDataIndex:0,count:0},Bt=(e,n)=>{let o=0,i=e.length-1;while(o<i){let r=o+i+1>>>1;if(e[r].headerLayoutIndex<=n)o=r;else i=r-1}return o},Hn=(e,n)=>{let o=0,i=e.length-1;while(o<i){let r=o+i+1>>>1;if(e[r].firstDataIndex<=n)o=r;else i=r-1}return o},Vn=(e,n,o)=>{if(e===0)return[];let i=[],r=null,t=0,s=0;for(let a=0;a<e;a++){let A=o?.(a);if(!A)continue;let y=n(a,A);if(r===null)r=y,t=0;else if(y!==r){let l=a-t;i.push({key:r,groupIndex:i.length,headerLayoutIndex:s,firstDataIndex:t,count:l}),s=s+1+l,r=y,t=a}}if(r!==null)i.push({key:r,groupIndex:i.length,headerLayoutIndex:s,firstDataIndex:t,count:e-t});return i};var Fn=(e,n,o)=>{let i=Vn(e,n.getGroupForIndex,o),r=e+i.length,t=n.header?.height??n.header?.width??n.headerHeight,s=typeof t==="number"?(S)=>t:(S)=>{let I=i[S];if(!I)return 0;return t(I.key,S)},a={type:"header",group:ct},A={type:"item",dataIndex:0,group:ct};return{get totalEntries(){return r},get groupCount(){return i.length},get groups(){return i},getEntry:(S)=>{if(i.length===0)return A.dataIndex=S,A.group=ct,A;let I=Bt(i,S),d=i[I];if(S===d.headerLayoutIndex)return a.group=d,a;let T=S-d.headerLayoutIndex-1;return A.dataIndex=d.firstDataIndex+T,A.group=d,A},layoutToDataIndex:(S)=>{if(i.length===0)return S;let I=Bt(i,S),d=i[I];if(S===d.headerLayoutIndex)return-1;let T=S-d.headerLayoutIndex-1;return d.firstDataIndex+T},dataToLayoutIndex:(S)=>{if(i.length===0)return S;let I=Hn(i,S),d=i[I],T=S-d.firstDataIndex;return d.headerLayoutIndex+1+T},getGroupAtLayoutIndex:(S)=>{if(i.length===0)return ct;let I=Bt(i,S);return i[I]},getGroupAtDataIndex:(S)=>{if(i.length===0)return ct;let I=Hn(i,S);return i[I]},getHeaderHeight:s,rebuild:(S,I)=>{i=Vn(S,n.getGroupForIndex,I??o),r=S+i.length}}};var Nt=(e,n,o,i,r=0)=>{let t=o?"width":"height",s=document.createElement("div");return s.className=`${n}-sticky-header`,s.setAttribute("role","presentation"),s.setAttribute("aria-hidden","true"),s.style.cssText="z-index:5;pointer-events:none;overflow:hidden;"+(o?`position:absolute;top:0;bottom:0;left:${r||0}px`:`position:relative;top:${r||0}px`),s.style[t]=`${i}px`,e.insertBefore(s,e.firstChild),s},On=(e,n,o,i,r,t=!1,s=0,a,A)=>{let y=t?"width":"height",l=t?"height":"width",M=t?"X":"Y",W=(O,fe)=>{O.style[y]=`${fe}px`},g=a??Nt(e,r,t,0,s),V=()=>{let O=document.createElement("div");return O.className="sticky-group",O.style.position="absolute",O.style.willChange="transform",O.style[l]="100%",O},S=V(),I=V();g.append(S,I);let d=S,T=I,p=n.groups,_=[],te=[],m=[],x=0,L=()=>{p=n.groups,x=p.length,_=Array(x),te=Array(x),m=Array(x);for(let O=0;O<x;O++)_[O]=A?A(p[O].headerLayoutIndex):o.getOffset(p[O].headerLayoutIndex),te[O]=n.getHeaderHeight(O),m[O]=te[O]};L();let F=-1,u=0,E=0,H=-1,R=!1,ie=0,ce=!1,de=(O,fe)=>{i(O,fe);let j=te[fe];return W(O,j),j},b=(O)=>{O.replaceChildren(),O.style.transform=""},C=(O)=>{if(O===F)return;if(F=O,u=0,E=0,O<0||O>=x){b(d);return}u=de(d,O),E=m[O],W(g,u),d.style.transform=""},w=(O)=>{if(O===ie)return;ie=O;let fe=Math.round(O);d.style.transform=`translate${M}(${fe}px)`,T.style.transform=`translate${M}(${fe+u}px)`},h=()=>{ie=0,d.style.transform="",T.style.transform=""},Q=()=>{if(!ce)return;let O=d;d=T,T=O,F=H,u=F>=0?te[F]:0,E=F>=0?m[F]:0,W(g,u),b(T),H=-1,ce=!1,h()},f=()=>{if(!ce)return;b(T),H=-1,ce=!1,h()},P=!!a,Y=()=>{if(R)return;if(R=!0,P)g.style.visibility="";else g.style.display=""},G=()=>{if(!R)return;if(R=!1,P)g.style.visibility="hidden";else g.style.display="none";b(d),F=-1,u=0,E=0,f()},ee=(O)=>{if(x===0){if(ce)f();if(!R)Y();C(-1);return}if(O<_[0]){G();return}let fe=0,j=x-1;while(fe<j){let D=fe+j+1>>>1;if(_[D]+m[D]<=O)fe=D;else j=D-1}if(!R)Y();C(fe);let B=fe+1;if(B<x){let D=_[B]-O;if(D<=0&&D>-E){if(H!==B||!ce)H=B,de(T,B),ce=!0;let se=E>0?D/E*u:D;w(se)}else if(D<=-E){if(ce)Q()}else if(ce)f()}else if(ce)f()},pe=()=>{L();let O=F;if(F=-1,u=0,E=0,O>=0)C(O)},be=()=>{g.remove(),F=-1,u=0,E=0,H=-1,R=!1,ce=!1};if(!a)g.style.display="none";return{update:ee,refresh:pe,show:Y,hide:G,destroy:be}};var Qe={selected:!1,focused:!1};function Wt(e){if(!e.getGroupForIndex)throw Error("[vlist] groups: getGroupForIndex is required");let n=e.header?.height??e.header?.width??e.headerHeight;if(n==null||typeof n==="number"&&n<=0)throw Error("[vlist] groups: header height/width must be a positive number or function");let o=e.header?.template??e.headerTemplate;if(!o)throw Error("[vlist] groups: header.template is required");let i=o,r,t=null,s,a,A,y,l,M=null,W,g,V,S=null,I,d,T,p=null,_,te,m=null,x=null,L=0,F=0,u=0,E=0,H=0,R=!1,ie=null,ce=null,de=new Map,b=new Set,C=new Map,w=-1,h=-1,Q=0,f=!0,P=-1,Y=0,G=null,ee;function pe(){return r.totalEntries}function be(){let c=a.totalItems;if(c===P)return;let re=P>0;P=c,r.rebuild(c,S??V),ee(r.totalEntries),D();let q=fe?se():s.getTotalSize();if(M?.(q),t)t.refresh(),t.update(A.getPixelEquivalent());if(re)k();let K=m?.("_scrollbar:getInstance");if(K)K()?.updateBounds(q,a.containerSize)}let O=0,fe=null,j=null,B=null;function D(){if(L<=0){fe=null,j=null;return}O=((a.crossSize||l.clientWidth)-E-(L-1)*F)/L,fe=new Map;let q=r.totalEntries,K=Array(q),he=0;if(R){let U=ie??ce??((Te)=>s.getSize(Te)),X=new Float64Array(L),me=[],Le=0,Ce=-1;for(let Te=0;Te<q;Te++){let Pe=r.getEntry(Te);if(Pe.type==="header"){let Re=0;for(let xe=0;xe<L;xe++)if(X[xe]>Re)Re=X[xe];if(Ce>=0)me[Ce]=Le+Re;Le+=Re;let ve=s.getSize(Te);fe.set(Te,{col:-1,rowY:Le}),K[he++]=[Te,Le,Le+ve],Le+=ve,X.fill(0),Ce=Pe.group.groupIndex}else{let Re=0,ve=X[0];for(let ye=1;ye<L;ye++)if(X[ye]<ve)ve=X[ye],Re=ye;let xe=U(Pe.dataIndex),_e=Le+X[Re];fe.set(Te,{col:Re,rowY:_e,h:xe}),K[he++]=[Te,_e,_e+xe],X[Re]=X[Re]+xe+F}}if(Ce>=0){let Te=0;for(let Pe=0;Pe<L;Pe++)if(X[Pe]>Te)Te=X[Pe];me[Ce]=Le+Te}B=me}else{B=null;let U=0,X=0,me=0;for(let Le=0;Le<q;Le++)if(r.getEntry(Le).type==="header"){if(X>0&&me>0)U+=me;let Te=s.getSize(Le);fe.set(Le,{col:-1,rowY:U}),K[he++]=[Le,U,U+Te],U+=Te,X=0,me=0}else{let Te=X%L,Pe=s.getSize(Le);if(Te===0){if(X>0&&me>0)U+=me+F;me=Pe}else if(Pe>me)me=Pe;fe.set(Le,{col:Te,rowY:U}),K[he++]=[Le,U,U+Pe],X++}}K.length=he,j=K}function se(){if(!fe||fe.size===0)return s.getTotalSize();let c=r.totalEntries;if(R)return B?.[B.length-1]??0;let re=0;for(let q=c-1;q>=0;q--){let K=fe.get(q);if(K){re=K.rowY+(K.h??s.getSize(q));break}if(r.getEntry(q).type==="header"){re=s.getOffset(q)+s.getSize(q);break}}return re}function Ie(c,re){if(fe){let K=fe.get(c);if(K){let he=K.col<0?0:u+K.col*(O+F),U=K.rowY-re;if(I)return`translate(${Math.round(U)}px, ${Math.round(he)}px)`;return`translate(${Math.round(he)}px, ${Math.round(U)}px)`}}let q=s.getOffset(c)-re;if(I)return`translate(${Math.round(q)}px, 0)`;return`translate(0, ${Math.round(q)}px)`}function Z(c,re){let q=fe?.get(re);if(q){let he=q.h??s.getSize(re);if(q.col<0)if(I)c.style.width=`${he}px`,c.style.height="";else c.style.height=`${he}px`,c.style.width="100%";else if(I)c.style.width=`${he}px`,c.style.height=`${O}px`;else c.style.height=`${he}px`,c.style.width=`${O}px`;return}let K=s.getSize(re);if(I)c.style.width=`${K}px`;else c.style.height=`${K}px`}function k(){de.forEach((c)=>{c.remove();let re=c.getAttribute("data-id");if(re)C.set(re,c);else y.release(c)}),de.clear(),b.clear()}function ae(){if(C.size>0)C.forEach((c)=>y.release(c)),C.clear()}function J(c,re,q,K){if(x===null)x=l.getAttribute("role")==="listbox";if(re.type==="header"){let Ce=`__group_header_${re.group.groupIndex}`;if(c.getAttribute("data-id")===Ce)return!0;if(c.className=te,c.setAttribute("role","presentation"),c.removeAttribute("aria-selected"),c.setAttribute("data-id",Ce),I&&t&&re.group.groupIndex===0)c.style.display="none";else{c.style.display="";let Te=i(re.group.key,re.group.groupIndex);if(typeof Te==="string")c.innerHTML=Te;else c.innerHTML="",c.appendChild(Te)}return!0}let he=re.dataIndex,U=V(he);if(!U)return c.innerHTML="",!1;let X=U._isPlaceholder===!0,me=String(U.id);if(!X&&c.getAttribute("data-id")===me){if(x)c.id=`${d}-item-${K}`,c.setAttribute("aria-posinset",String(he+1)),c.setAttribute("aria-setsize",String(a.totalItems));return!0}if(c.className=_,c.setAttribute("role",x?"option":"listitem"),c.setAttribute("data-id",me),x)c.id=`${d}-item-${K}`,c.setAttribute("aria-posinset",String(he+1)),c.setAttribute("aria-setsize",String(a.totalItems));if(X)c.classList.add(`${d}-item--placeholder`);if(q)q(K,Qe);else Qe.selected=!1,Qe.focused=!1;let Le=g(U,he,Qe);if(typeof Le==="string")c.innerHTML=Le;else c.innerHTML="",c.appendChild(Le);return Xe(c),!X}let ne=0;function z(){if(L<=0)return;let c=a.crossSize;if(c===ne)return;ne=c,D();let re=se();if(M?.(re),t)t.refresh(),t.update(A.getPixelEquivalent());f=!0}function N(){if(a.destroyed)return;be(),z();let c=A.getPixelEquivalent(),re=a.containerSize,q=A.getRenderOrigin(),K=q!==Q;if(!f&&c===w&&re===h&&!K)return;w=c,h=re;let he=f;f=!1;let U=pe();if(re<=0||U===0){if(de.size>0)de.forEach((ye)=>{ye.remove(),y.release(ye)}),de.clear(),b.clear();return}let X,me;if(j){let ye=j,Se=ye.length,Me=0,Ae=Se-1;while(Me<Ae){let He=Me+Ae>>>1;if(ye[He][2]<=c)Me=He+1;else Ae=He}let Oe=Me;Ae=Se-1;while(Me<Ae){let He=Me+Ae+1>>>1;if(ye[He][1]>=c+re)Ae=He-1;else Me=He}let Ge=Me,Fe=ye[Oe][0],qe=ye[Ge][0];for(let He=Fe-1;He>=0;He--)if(r.getEntry(He).type==="header"){Fe=He;break}let Ne=T*L;X=Math.max(0,Fe-Ne),me=Math.min(U-1,qe+Ne)}else{let ye=s.indexAtOffset(c),Se=s.indexAtOffset(c+re);if(Se<U-1)Se++;ye=Math.max(0,ye),Se=Math.min(U-1,Math.max(0,Se)),X=Math.max(0,ye-T),me=Math.min(U-1,Se+T)}if(X===a.prevRangeStart&&me===a.prevRangeEnd&&!a.renderPending&&!K)return;Q=q,de.forEach((ye,Se)=>{if(Se<X||Se>me)ye.remove(),y.release(ye),de.delete(Se),b.delete(Se)});let Le=p?.()??null,Ce=Le?`${d}-item--selected`:"",Te=Le?`${d}-item--focused`:"",Pe=null;for(let ye=X;ye<=me;ye++){let Se=de.get(ye),Me=!1;if(Se===void 0){let Ae=r.getEntry(ye);Me=Ae.type==="header";let Oe;if(Ae.type==="header")Oe=`__group_header_${Ae.group.groupIndex}`;else{let Fe=V(Ae.dataIndex);if(Fe&&Fe._isPlaceholder!==!0)Oe=String(Fe.id)}if(Oe!==void 0){let Fe=C.get(Oe);if(Fe)C.delete(Oe),Se=Fe}if(!Se)Se=y.acquire();if(Se.setAttribute("data-index",String(ye)),J(Se,Ae,Le,ye))b.delete(ye);else b.add(ye);if(Z(Se,ye),Se.style.transform=Ie(ye,q),de.set(ye,Se),!Pe)Pe=document.createDocumentFragment();Pe.appendChild(Se)}else if(he&&b.has(ye)){let Ae=r.getEntry(ye);if(Ae.type==="item")if(J(Se,Ae,Le,ye))b.delete(ye);else b.add(ye)}else if(Me=Se.classList.contains(te),he)Z(Se,ye),Se.style.transform=Ie(ye,q);else if(K)Se.style.transform=Ie(ye,q);if(!Me&&Le)if(Le(ye,Qe),Se.classList.toggle(Ce,Qe.selected),Se.classList.toggle(Te,Qe.focused),Qe.selected)Se.setAttribute("aria-selected","true");else Se.removeAttribute("aria-selected")}if(Pe)l.appendChild(Pe);ae();let Re=fe?se():s.getTotalSize();M?.(Re),a.prevRangeStart=X,a.prevRangeEnd=me,a.renderPending=!1;let ve=0,xe=0,_e=!1;for(let ye=X;ye<=me&&ve<a.capacity;ye++){let Se=r.getEntry(ye);if(Se.type==="item"){if(!_e)xe=Se.dataIndex,_e=!0;a.visibleIndices[ve]=Se.dataIndex,a.visibleOffsets[ve]=s.getOffset(ye),a.visibleSizes[ve]=s.getSize(ye),ve++}}a.visibleCount=ve,a.startIndex=xe}function le(){if(a.destroyed)return;z();let c=G?.()??0;if(c!==Y){Y=c;let re=r.groups,q=re.length;r.rebuild(P,S??V);let K=r.groups,he=K.length!==q;if(!he){for(let U=0;U<q;U++)if(K[U].headerLayoutIndex!==re[U].headerLayoutIndex){he=!0;break}}if(he){ee(r.totalEntries),D();let U=fe?se():s.getTotalSize();if(M?.(U),t)t.refresh(),t.update(A.getPixelEquivalent());let X=1/0,me=Math.min(q,K.length);for(let Ce=0;Ce<me;Ce++)if(K[Ce].headerLayoutIndex!==re[Ce].headerLayoutIndex){X=Math.min(K[Ce].headerLayoutIndex,re[Ce].headerLayoutIndex);break}if(K.length>q&&me<K.length)X=Math.min(X,K[me].headerLayoutIndex);else if(q>K.length&&me<q)X=Math.min(X,re[me].headerLayoutIndex);if(X<=a.prevRangeEnd)k();let Le=m?.("_scrollbar:getInstance");if(Le)Le()?.updateBounds(U,a.containerSize)}}a.prevRangeStart=-1,a.prevRangeEnd=-1,a.renderPending=!0,f=!0,N()}return{name:"groups",priority:11,setup(c){A=c.scroll,s=c.sizes.cache,a=c.getState(),y=c.pool,l=c.dom.content,M=c.render.contentSize.bind(c),W=c.dom.root,g=c.template,I=c.config.axis.primary==="x",d=c.config.classPrefix,T=c.config.overscan,H=c.config.mainAxisPadding,V=c.items.at.bind(c),p=()=>c.render.getStateFn(),m=c.hooks.get.bind(c),x=null,_=`${d}-item`,te=`${d}-group-header`;let re=m?.("getGridLayout"),q=m?.("getMasonryLayout");if(re){let ve=re();L=ve.columns,F=ve.gap,u=c.config.crossPadStart,E=c.config.crossAxisPadding}else if(q){let ve=q();L=ve.columns,F=ve.gap,u=c.config.crossPadStart,E=c.config.crossAxisPadding,R=!0;let xe=c.sizes.rawSpec;if(typeof xe==="function")ie=(_e)=>xe(_e,{columnWidth:O})}queueMicrotask(()=>{let ve=m?.("_getLoadedItem");if(ve)S=ve;let xe=m?.("_getLoadedCount");if(xe)G=xe});let K=a.totalItems;r=Fn(K,e,S??V),P=K;let he=typeof n==="number"?(ve)=>n:(ve)=>{let xe=r.groups[ve];if(!xe)return 0;return n(xe.key,ve)},U=s.getSize;ce=U;let X=(ve)=>{let xe=r.getEntry(ve);if(xe.type==="header"){if(e.sticky!==!1&&xe.group.groupIndex===0)return 0;return he(xe.group.groupIndex)}return U(xe.dataIndex)};c.sizes.setConfig(X,c.config.gap);let me=!1,Le=-1;if(c.hooks.method("_setSizeCacheBase",(ve)=>{ee=ve}),ee=s.rebuild,s.rebuild=(ve)=>{if(me){if(!G)G=m?.("_getLoadedCount")??null;let xe=G?.()??0;if(ve!==P||xe!==Le){if(P=ve,Le=xe,!S)S=m?.("_getLoadedItem")??null;if(r.rebuild(ve,S??((_e)=>c.items.all()[_e])),a.totalItems=r.totalEntries,t)t.refresh(),t.update(A.getPixelEquivalent())}}ee(r.totalEntries)},s.rebuild(r.totalEntries),D(),c.items.setTotalFn(()=>r.totalEntries-r.groupCount),W.classList.add(`${d}--grouped`),e.sticky!==!1){let ve=(Se,Me)=>{let Ae=r.groups[Me];if(!Ae)return;let Oe=i(Ae.key,Me);if(typeof Oe==="string")Se.innerHTML=Oe;else Se.replaceChildren(Oe)},xe=r.getHeaderHeight(0),_e=Nt(W,d,I,xe),ye=L>0?(Se)=>{let Me=fe?.get(Se);return Me?Me.rowY:s.getOffset(Se)}:void 0;if(t=On(W,r,s,ve,d,I,0,_e,ye),t.update(A.getPixelEquivalent()),!I)c.dom.viewport.style.height=`calc(100% - ${xe}px)`;else c.dom.viewport.style.width=`calc(100% - ${xe}px)`,c.dom.viewport.style.marginLeft=`${xe}px`}let Ce=!!m?.("_updateTableForGroups");if(me=Ce,Ce)a.totalItems=r.totalEntries,queueMicrotask(()=>{let ve=m?.("_getItem")??null,xe=c.items.all.bind(c),_e=(Se)=>{let Me=r.getEntry(Se);if(Me.type==="header")return{id:`__group_header_${Me.group.groupIndex}`,__groupHeader:!0,groupKey:Me.group.key,groupIndex:Me.group.groupIndex};return ve?ve(Me.dataIndex):xe()[Me.dataIndex]};c.items.setGetFn(_e),c.hooks.method("_getItemAtLayout",_e);let ye=m?.("_updateTableForGroups");if(ye)ye((Se)=>!!Se.__groupHeader,i);c.render.force()});else c.render.setFn(N,le);if(c.hooks.method("getGroupLayout",()=>r),c.hooks.method("_getTotal",()=>r.totalEntries-r.groupCount),c.hooks.method("_dataToLayoutIndex",(ve)=>r.dataToLayoutIndex(ve)),c.hooks.method("_layoutToDataIndex",(ve)=>r.layoutToDataIndex(ve)),!me)c.hooks.method("_getRenderedElement",(ve)=>de.get(ve)??null);c.hooks.method("_isGroupHeader",(ve)=>r.getEntry(ve).type==="header"),c.hooks.method("_getItemLane",(ve)=>{let xe=fe?.get(ve);return xe?xe.col:-1}),c.hooks.method("_getItemY",(ve)=>{let xe=fe?.get(ve);return xe?xe.rowY:-1}),c.hooks.method("_getItemH",(ve)=>fe?.get(ve)?.h??-1);let Te=c.config.startPadding,Pe=H-Te,Re=Tt(c);c.hooks.method("_scrollItemIntoView",(ve)=>{if(ve<0)return;let xe=fe?.get(ve),_e=xe?xe.rowY:s.getOffset(ve),ye=xe?.h??s.getSize(ve),Se=a.containerSize,Me=A.getPixelEquivalent(),Ae=Re(),Oe=Te+Ae.start,Ge=Pe+Ae.end,Fe=Ae.start>0?-Ae.start:0;if(_e<Me+Oe)c.scroll.to(Math.max(Fe,_e-Oe));else if(_e+ye+Ge>Me+Se)c.scroll.to(_e+ye+Ge-Se)}),c.scroll.setToIndexFn((ve,xe,_e,ye,Se)=>{let Me=r.dataToLayoutIndex(ve),Ae=r.totalEntries;if(Ae===0)return!1;let Oe=Math.max(0,Math.min(Me,Ae-1)),Ge=a.containerSize,Fe=fe?.get(Oe),qe=Fe?Fe.rowY:s.getOffset(Oe),Ne=Fe?Fe.h??s.getSize(Oe):s.getSize(Oe),He=fe?se()+H:s.getTotalSize(),ue=Math.max(0,He-Ge),Ee=Re(),we=(fe?H:0)+Ee.end,Ve=qe+Ne;if(R&&B){let Ye=r.getEntry(Oe).group.groupIndex,tt=B[Ye];if(tt!==void 0)Ve=tt}let ke;switch(xe){case"center":ke=qe-Ee.start-(Ge-Ee.start-Ee.end-Ne)/2;break;case"end":ke=Ve-Ge+we;break;default:ke=qe-Ee.start}let We=Ee.start>0?-Ee.start:0;ke=Math.max(We,Math.min(ke,ue+Ee.end)),rt(c.scroll,ke,_e,ye,Se)}),c.hooks.onDestroy(()=>{for(let[,ve]of de)ve.remove();if(de.clear(),b.clear(),t)t.destroy(),t=null;W.classList.remove(`${d}--grouped`)})},hooks:{onAfterScroll(c,re){if(t)t.update(c)},onResize(c,re){if(L<=0)return;ee(r.totalEntries),ne=a.crossSize,D();let q=se();if(M?.(q),t)t.refresh(),t.update(A.getPixelEquivalent());f=!0,N()}},destroy(){if(t)t.destroy(),t=null;de.clear(),b.clear(),C.clear()}}}function et(e,n,o,i){if(i<=0)return 0;let r=i-1;if(o<=1)return e<0?0:e>r?r:e;let t=(n%o+o)%o;if(e<0)return t;if(e>r){let s=Math.floor(r/o)*o;return Math.min(s+t,r)}return e}var Dn=(e,n,o)=>{if(String(o).startsWith(Ke))return!1;let i=Ke+n;if(e.has(i))return e.delete(i),e.add(o),!0;return!1},$n=(e)=>({selected:new Set(e??[]),focusedIndex:-1,focusVisible:!1});function it(e,n,o,i){if(o===0)return;let r=i?-n:n,t=Math.abs(r);if(t>1&&e.focusedIndex>=0){e.focusedIndex=et(e.focusedIndex+r,e.focusedIndex,t,o);return}let s=e.focusedIndex+r;if(s<0)s=0;if(s>=o)s=o-1;e.focusedIndex=s}function Lt(e){return Array.from(e)}var bo={preventScroll:!0};function Kt(e){let n=e?.mode??"single",o=e?.followFocus??!1,i=e?.focusOnClick??!1,r=e?.keyboard??!0,t,s,a,A,y,l,M,W,g=-1,V=new Map,S=null,I=null,d=null,T=null,p,_,te=!1;function m(f){if(te)return;te=!0,S=f.hooks.get("_layoutToDataIndex")??null,I=f.hooks.get("_dataToLayoutIndex")??null,d=f.hooks.get("_isGroupHeader")??null,T=f.hooks.get("_scrollItemIntoView")??null,L=f.hooks.get("_getLoadedItem")??null;let P=f.hooks.get("_getTotal");if(P)_=P;let Y=f.hooks.get("getGroupLayout");if(Y){let G=Y();p=()=>G.totalEntries}}let x=(f)=>S?S(f):f,L=null,F=(f)=>{if(L)return L(f);return s()[f]},u=(f)=>{let P=x(f);return P>=0?F(P):void 0},E=(f,P,Y)=>{if(!d)return f;let G=f;while(G>=0&&G<Y){if(!d(G))return G;G+=P}G=f-P;while(G>=0&&G<Y){if(!d(G))return G;G-=P}return f};function H(f,P){if(n==="single")t.selected.clear(),V.clear();if(t.selected.add(f),P)V.set(f,P)}function R(f,P){if(t.selected.has(f))t.selected.delete(f),V.delete(f);else H(f,P)}function ie(){t.selected.clear(),V.clear()}function ce(f){t.selected.delete(f),V.delete(f)}function de(f,P){let Y=Math.min(f,P),G=Math.max(f,P);for(let ee=Y;ee<=G;ee++){if(d?.(ee))continue;let pe=u(ee);if(pe)t.selected.add(pe.id),V.set(pe.id,pe);else if(L){let be=x(ee);if(be>=0)t.selected.add(Ke+be)}}}function b(){let f=p();for(let P=0;P<f;P++){if(d?.(P))continue;let Y=u(P);if(Y)t.selected.add(Y.id),V.set(Y.id,Y);else if(L){let G=x(P);if(G>=0)t.selected.add(Ke+G)}}}function C(){if(t.selected.size===0)return[];if(V.size>=t.selected.size){let G=[];for(let ee of t.selected){let pe=V.get(ee);if(pe)G.push(pe)}if(G.length===t.selected.size)return G}let f=[],P=new Set(t.selected),Y=p();for(let G=0;G<Y&&P.size>0;G++){if(d?.(G))continue;let ee=u(G);if(ee&&P.has(ee.id))f.push(ee),V.set(ee.id,ee),P.delete(ee.id)}return f}function w(){a(),A.emit("selection:change",{selected:Lt(t.selected),items:C()})}let h=null,Q=-1;return{name:"selection",priority:50,setup(f){t=$n(e?.initial),s=f.items.all.bind(f),a=f.render.force.bind(f),A=f.emitter,y=f.dom;let P=f.config;if(l=f.sizes.cache,M=f.getState(),W=f.scroll.to.bind(f),p=()=>M.totalItems,_=()=>M.totalItems,n==="none"){f.hooks.method("select",()=>{}),f.hooks.method("deselect",()=>{}),f.hooks.method("toggleSelect",()=>{}),f.hooks.method("selectAll",()=>{}),f.hooks.method("clearSelection",()=>{}),f.hooks.method("getSelected",()=>[]),f.hooks.method("getSelectedItems",()=>[]),f.hooks.method("selectNext",()=>{}),f.hooks.method("selectPrevious",()=>{}),f.hooks.method("_seedSelection",()=>{}),f.hooks.method("_getFocusedId",()=>{return}),f.hooks.method("_focusById",()=>{});return}f.dom.enableListbox();let Y=P.classPrefix;f.render.setStateFn((B,D)=>{if(m(f),t.selected.size>0){let se=x(B),Ie=se>=0?u(B):void 0,Z=Ie?.id;if(Z!==void 0)if(t.selected.has(Z))D.selected=!0;else if(Dn(t.selected,se,Z))D.selected=!0,V.delete(Ke+se),V.set(Z,Ie);else D.selected=!1;else D.selected=L!==null&&se>=0&&t.selected.has(Ke+se)}else D.selected=!1;D.focused=t.focusVisible&&t.focusedIndex===B}),f.hooks.method("_getSelectedIds",()=>t.selected),f.hooks.method("_getFocusedIndex",()=>t.focusVisible?t.focusedIndex:-1),y.root.classList.add(`${Y}--selectable`);let G=(B)=>{h=null,Q=-1;let D=B.target.closest("[data-index]");if(!D)return!1;let se=parseInt(D.dataset.index??"-1",10);if(se<0)return!1;if(d?.(se))return!1;if(x(se)<0)return!1;let Z=u(se);if(!Z)return!1;return h=Z,Q=se,!0},ee=0,pe=(B)=>{if(B<0)return;if(f.scroll.cancel(),T){T(B);return}if(!ee){let z=f.hooks.get("_getRowGap");ee=z?z():0}let D=f.nav.get(),se=D.scrollIndex?D.scrollIndex(B):B,Ie=l.getOffset(se),Z=l.getSize(se)-ee,k=M.containerSize,ae=f.scroll.getPixelEquivalent(),{startPadding:J,endPadding:ne}=P;if(Ie<ae)W(Ie);else if(J+Ie+Z+ne>ae+k)W(J+Ie+Z+ne-k)},be=(B)=>{let D=y.content.querySelectorAll(`[data-index="${B}"]`),se=null;for(let Ie=0;Ie<D.length;Ie++){let Z=D[Ie];if(Z.style.display!=="none"){se=Z;break}}if(!se&&D.length>0)se=D[0];y.content.setAttribute("aria-activedescendant",se?.id??`${Y}-item-${B}`)},O=()=>{if(M.destroyed)return;if(m(f),!y.content.matches(":focus-visible")&&!y.root.matches(":focus-visible"))return;let B=p();if(B===0)return;let D=t.focusedIndex>=0?Math.min(t.focusedIndex,B-1):0;D=E(D,1,B),t.focusedIndex=D,t.focusVisible=!0,be(D),pe(D),a()};y.root.addEventListener("focusin",O);let fe=(B)=>{if(M.destroyed)return;let D=B.relatedTarget;if(D&&y.root.contains(D))return;t.focusVisible=!1,a(),y.content.removeAttribute("aria-activedescendant")};if(y.root.addEventListener("focusout",fe),f.hooks.onDestroy(()=>{y.root.removeEventListener("focusin",O),y.root.removeEventListener("focusout",fe)}),f.hooks.onClick((B)=>{if(m(f),!G(B))return;if(n==="multiple"&&B.shiftKey&&t.focusedIndex>=0){let se=g>=0?g:t.focusedIndex,Ie=x(se),Z=x(Q);if(Ie>=0&&Z>=0)de(se,Q);t.focusedIndex=Q,t.focusVisible=i,g=Q,w();return}if(t.focusedIndex=Q,t.focusVisible=i,g=Q,(y.content.getAttribute("tabindex")!==null?y.content:y.root).focus(bo),n==="single")H(h.id,h);else R(h.id,h);w()}),r)f.hooks.onKeydown((B)=>{m(f);let D=p();if(D===0)return;let se=f.nav.get(),Ie=t.focusedIndex,Z=!1,k=!1;if(se.navigate&&(B.key==="ArrowUp"||B.key==="ArrowDown"||B.key==="ArrowLeft"||B.key==="ArrowRight"||B.key==="PageUp"||B.key==="PageDown"||B.key==="Home"||B.key==="End")){let J=se.total?se.total():D,ne=se.navigate(t.focusedIndex,B.key,J);if(ne!==t.focusedIndex)t.focusedIndex=Math.max(0,Math.min(ne,J-1));t.focusVisible=!0,Z=!0}else switch(B.key){case"ArrowUp":{let J=se.ud||1,ne=se.lr,z=P.axis.primary==="x";if(z&&!ne)break;it(t,-(z?ne:J),D,P.reverse),t.focusVisible=!0,Z=!0;break}case"ArrowDown":{let J=se.ud||1,ne=se.lr,z=P.axis.primary==="x";if(z&&!ne)break;it(t,z?ne:J,D,P.reverse),t.focusVisible=!0,Z=!0;break}case"ArrowLeft":{let J=se.ud||1,ne=se.lr,z=P.axis.primary==="x";if(!z&&!ne)break;it(t,-(z?J:ne),D,P.reverse),t.focusVisible=!0,Z=!0;break}case"ArrowRight":{let J=se.ud||1,ne=se.lr,z=P.axis.primary==="x";if(!z&&!ne)break;it(t,z?J:ne,D,P.reverse),t.focusVisible=!0,Z=!0;break}case"Home":if(D>0)t.focusedIndex=0;t.focusVisible=!0,Z=!0;break;case"End":if(D>0)t.focusedIndex=D-1;t.focusVisible=!0,Z=!0;break;case"PageUp":case"PageDown":{let J=se.ud||1,ne=Math.max(0,t.focusedIndex),z=se.scrollIndex?se.scrollIndex(ne):ne,N=l.getSize(z),le=M.containerSize,re=(N>0?Math.max(1,Math.floor(le/N)):10)*J;if(S&&I){let q=S(t.focusedIndex),K=B.key==="PageUp"?-re:re,he=_()-1;t.focusedIndex=I(et(q+K,q,J,he+1))}else{let q=B.key==="PageUp"?t.focusedIndex-re:t.focusedIndex+re;t.focusedIndex=et(q,t.focusedIndex,J,D)}t.focusVisible=!0,Z=!0;break}case" ":case"Enter":if(B.key===" "&&B.shiftKey&&n==="multiple"&&t.focusedIndex>=0){if(g>=0){let J=x(g),ne=x(t.focusedIndex);if(J>=0&&ne>=0)de(g,t.focusedIndex)}t.focusVisible=!0,k=!0,Z=!0;break}if(t.focusedIndex>=0){let J=u(t.focusedIndex);if(J)R(J.id,J),g=t.focusedIndex;t.focusVisible=!0,k=!0,Z=!0}break;case"a":if((B.ctrlKey||B.metaKey)&&n==="multiple"){if(t.selected.size===_())ie();else b();t.focusVisible=!0,k=!0,Z=!0}break;case"Delete":case"Backspace":if(t.selected.size>0)A.emit("delete",{selected:Lt(t.selected),items:C()}),Z=!0;break}if(t.focusedIndex!==Ie&&d){let J=t.focusedIndex>Ie?1:-1;t.focusedIndex=E(t.focusedIndex,J,D)}let ae=t.focusedIndex!==Ie;if(B.shiftKey&&n==="multiple"&&!k&&ae){if(B.key==="ArrowUp"||B.key==="ArrowDown"||B.key==="ArrowLeft"||B.key==="ArrowRight"){let z=u(t.focusedIndex);if(z)R(z.id,z);g=t.focusedIndex,k=!0}if((B.ctrlKey||B.metaKey)&&(B.key==="Home"||B.key==="End")){let z=Ie>=0?Ie:t.focusedIndex,N=x(z),le=x(t.focusedIndex);if(N>=0&&le>=0)de(z,t.focusedIndex);g=t.focusedIndex,k=!0}}if(o&&n==="single"&&!k&&ae&&t.focusedIndex>=0){let J=u(t.focusedIndex);if(J)H(J.id,J);k=!0}if(Z){if(B.preventDefault(),ae&&t.focusedIndex>=0){if(T||!se.navigate)pe(t.focusedIndex);be(t.focusedIndex)}if(k)w();else if(ae){if(a(),t.focusedIndex>=0){let J=u(t.focusedIndex);if(J)A.emit("focus:change",{id:J.id,index:t.focusedIndex})}}}});f.hooks.method("select",(...B)=>{for(let D of B)H(D);w()}),f.hooks.method("deselect",(...B)=>{for(let D of B)ce(D);w()}),f.hooks.method("toggleSelect",(B)=>{R(B),w()}),f.hooks.method("selectAll",()=>{if(n!=="multiple")return;m(f),b(),w()}),f.hooks.method("clearSelection",()=>{ie(),w()}),f.hooks.method("getSelected",()=>Lt(t.selected)),f.hooks.method("getSelectedItems",()=>C());let j=(B)=>{m(f);let D=f.nav.get(),se=D.total?D.total():p();if(se===0)return;if(it(t,B,se,P.reverse),d)t.focusedIndex=E(t.focusedIndex,B,se);let Ie=u(t.focusedIndex);if(Ie)H(Ie.id,Ie);if(t.focusedIndex>=0){if(D.reveal)D.reveal(t.focusedIndex);else pe(t.focusedIndex);be(t.focusedIndex)}w()};f.hooks.method("selectNext",()=>{j(1)}),f.hooks.method("selectPrevious",()=>{j(-1)}),f.hooks.method("_seedSelection",(B)=>{if(n==="single"){if(B.length===1)t.selected.add(B[0])}else for(let D of B)t.selected.add(D)}),f.hooks.method("_isFollowFocus",()=>o),f.hooks.method("_getFocusedId",()=>{if(t.focusedIndex<0)return;return u(t.focusedIndex)?.id}),f.hooks.method("_focusById",(B,D)=>{let se=p();for(let Ie=0;Ie<se;Ie++){if(d?.(Ie))continue;let Z=u(Ie);if(Z&&Z.id===B){if(t.focusedIndex=Ie,D!=="preserve")t.focusVisible=D===!0||i;if(t.focusVisible)be(Ie);else y.content.removeAttribute("aria-activedescendant");A.emit("focus:change",{id:B,index:Ie}),a();return}}})},destroy(){V.clear()}}}function Ct(e){let n=e?.keyboard??!0;return{name:"a11y",priority:55,setup(o){if(o.render.getStateFn())return;o.dom.enableListbox();let{dom:i,config:r}=o,t=o.sizes.cache,s=o.getState(),a=o.emitter,A=r.classPrefix,y=i.liveRegion,l=-1,M=!1,W,g=-1,V=(u)=>o.items.at(u),S=()=>s.totalItems,I={id:0,index:0},d={selected:[],items:[]};o.render.setStateFn((u,E)=>{E.selected=g===u,E.focused=M&&l===u}),o.hooks.method("_getFocusedIndex",()=>M?l:-1),o.hooks.method("_getFocusedId",()=>{if(l<0)return;return V(l)?.id}),o.hooks.method("_focusById",(u,E)=>{let H=S();for(let R=0;R<H;R++){let ie=V(R);if(!ie||ie.id!==u)continue;if(l=R,E!=="preserve")M=E===!0;if(M)i.content.setAttribute("aria-activedescendant",`${A}-item-${R}`);else i.content.removeAttribute("aria-activedescendant");I.id=u,I.index=R,a.emit("focus:change",I),o.render.force();return}});function T(u){y.textContent="",y.textContent=u}let p=(u,E,H)=>{let R=u;while(R>=0&&R<H){let ie=V(R);if(!ie||!ie.__groupHeader)return R;R+=E}R=u-E;while(R>=0&&R<H){let ie=V(R);if(!ie||!ie.__groupHeader)return R;R-=E}return u},_=(u)=>{let E=o.nav.get();if(E.reveal){E.reveal(u);return}let H=o.hooks.get("_scrollItemIntoView");if(H){o.scroll.cancel(),H(u);return}let R=E.scrollIndex?E.scrollIndex(u):u,ie=t.getOffset(R),ce=t.getSize(R),de=o.scroll.getPixelEquivalent(),b=s.containerSize,{startPadding:C,endPadding:w}=r,h=ie+C,Q=h+ce,f=de;if(h<de)f=Math.max(0,ie);else if(Q>de+b)f=Q+w-b;if(f!==de)o.scroll.setPixelEquivalent(f)},te=(u,E)=>{if(i.content.setAttribute("aria-activedescendant",`${A}-item-${u}`),E)_(u);o.render.force()},m=(u)=>{l=u,M=!0,te(u,!0);let E=V(u);if(E)I.id=E.id,I.index=u,a.emit("focus:change",I),T(`Item ${u+1} of ${S()}`)},x=(u,E)=>{if(l=u,E)M=!0;let H=V(u);if(H&&W===H.id)W=void 0,g=-1;else W=H?.id,g=H?u:-1;if(te(u,E),W!==void 0&&H&&W===H.id)d.selected[0]=W,d.selected.length=1,d.items[0]=H,d.items.length=1,T(`Selected, item ${u+1} of ${S()}`);else d.selected.length=0,d.items.length=0,T("Deselected");a.emit("selection:change",d)},L=()=>{if(s.destroyed)return;if(!i.content.matches(":focus-visible"))return;let u=S();if(u===0)return;let E=l>=0?Math.min(l,u-1):0;E=p(E,1,u),m(E)},F=(u)=>{if(s.destroyed)return;let E=u.relatedTarget;if(E&&i.root.contains(E))return;M=!1,i.content.removeAttribute("aria-activedescendant"),o.render.force()};if(i.content.addEventListener("focusin",L),i.content.addEventListener("focusout",F),n)o.hooks.onKeydown((u)=>{if(s.destroyed)return;let E=S();if(E===0)return;let H=l,R=H;if(u.key===" "||u.key==="Enter"){if(H>=0){let ce=V(H);if(ce&&!ce.__groupHeader)x(H,!0)}u.preventDefault();return}let ie=o.nav.get();if(ie.navigate)switch(u.key){case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"PageUp":case"PageDown":case"Home":case"End":R=ie.navigate(H,u.key,E);break;default:return}else{let ce=ie.ud||1,de=ie.lr,b=r.axis.primary==="x",C=(w)=>Math.abs(w)>1&&H>=0?et(H+w,H,Math.abs(w),E):H+w;switch(u.key){case"ArrowUp":if(b&&!de)return;R=C(-(b?de:ce));break;case"ArrowDown":if(b&&!de)return;R=C(b?de:ce);break;case"ArrowLeft":if(!b&&!de)return;R=C(-(b?ce:de));break;case"ArrowRight":if(!b&&!de)return;R=C(b?ce:de);break;case"PageUp":case"PageDown":{let w=t.getSize(Math.max(0,ie.scrollIndex?ie.scrollIndex(H):H)),Q=Math.max(1,Math.floor(s.containerSize/w))*ce;R=et(u.key==="PageUp"?H-Q:H+Q,H,ce,E);break}case"Home":R=0;break;case"End":R=E-1;break;default:return}}if(R<0)R=0;else if(R>=E)R=E-1;if(u.preventDefault(),R=p(R,R>=H?1:-1,E),R!==H)m(R)});o.hooks.onClick((u)=>{if(s.destroyed)return;let E=u.target.closest("[data-index]");if(!E)return;let H=parseInt(E.dataset.index??"-1",10);if(H<0)return;let R=V(H);if(!R||R.__groupHeader)return;M=!1,i.content.focus({preventScroll:!0}),x(H,!1)}),o.hooks.onDestroy(()=>{i.content.removeEventListener("focusin",L),i.content.removeEventListener("focusout",F)})}}}var ho=0,vo=1000,yo=15,So=!0,Io=16,To=!0,mt=2,xo="scroll",Lo=350,Co=12,Eo=(e)=>{if(typeof e!=="object"){let n=e??mt;return{top:n,right:n,bottom:n,left:n}}return{top:e.top??mt,right:e.right??mt,bottom:e.bottom??mt,left:e.left??mt}},Gn=(e,n,o={},i="vlist",r=!1,t,s,a)=>{let A=navigator.userAgentData?.platform||navigator.platform+navigator.userAgent,y=o.platform?o.platform==="windows":!/Mac|Android/i.test(A),{autoHide:l=!y,autoHideDelay:M=vo,minThumbSize:W=yo,showOnHover:g=So,showOnViewportEnter:V=To,clickBehavior:S=xo}=o,I=S==="page"?"scroll":S,d=t??e,T=Eo(o.padding),p=r?T.left:T.top,_=r?T.right:T.bottom,te=r?T.bottom:T.right,m=o.hoverZoneWidth??te+Io,x=!0,L=0,F=0,u=0,E=0,H=!1,R=!1,ie=0,ce=0,de=0,b=null,C=!1,w=null,h=null,Q=-1,f=-1,P=-1,Y=-1,G=-1,ee=e.id?"":(()=>{let ue;do ue=`${i}-scrollport-${++ho}`;while(document.getElementById(ue));return e.id=ue,ue})(),pe=0,be=0,O=null,fe=null,j=null,B=r?"width":"height",D=r?"translateX":"translateY",se=r?(ue)=>ue.clientX:(ue)=>ue.clientY,Ie=r?"left":"top",Z=document.createElement("div"),k=document.createElement("div"),ae=document.createElement("div"),J=r?"--vlist-custom-scrollbar-padding-left":"--vlist-custom-scrollbar-padding-top",ne=()=>{if(d===e)return;let ue=e.offsetTop;Z.style[r?"left":"top"]=ue?`calc(var(${J}) + ${ue}px)`:`var(${J})`,ae.style[r?"left":"top"]=`${ue}px`},z=()=>{if(Z.className=`${i}-scrollbar`,Z.setAttribute("role","scrollbar"),Z.setAttribute("aria-controls",e.id),Z.setAttribute("aria-orientation",r?"horizontal":"vertical"),Z.setAttribute("aria-label",e.getAttribute("aria-label")||"Scroll"),Z.setAttribute("aria-valuemin","0"),Z.tabIndex=0,k.className=`${i}-scrollbar__thumb`,r)Z.classList.add(`${i}-scrollbar--horizontal`);if(o.padding!==void 0)d.style.setProperty("--vlist-custom-scrollbar-padding-top",`${T.top}px`),d.style.setProperty("--vlist-custom-scrollbar-padding-right",`${T.right}px`),d.style.setProperty("--vlist-custom-scrollbar-padding-bottom",`${T.bottom}px`),d.style.setProperty("--vlist-custom-scrollbar-padding-left",`${T.left}px`);if(o.minThumbSize!==void 0)Z.style.setProperty("--vlist-custom-scrollbar-min-thumb-size",`${W}px`);if(Z.appendChild(k),d.appendChild(Z),ae.className=`${i}-scrollbar__hover`,r)ae.classList.add(`${i}-scrollbar__hover--horizontal`),ae.style.height=`${m}px`;else ae.style.width=`${m}px`;if(d.appendChild(ae),d!==e)ne()},N=()=>{if(b)clearTimeout(b),b=null},le=()=>{if(!l)return;N(),b=setTimeout(re,M)},c=()=>{if(!x||L<=F)return;if(N(),!C)Z.classList.add(`${i}-scrollbar--visible`),C=!0;if(l&&!H&&!R&&document.activeElement!==Z)le()},re=()=>{if(H||R||document.activeElement===Z)return;Z.classList.remove(`${i}-scrollbar--visible`),C=!1},q=(ue,Ee)=>{if(L=ue,F=Ee,ne(),K(de),!x||L<=F){Z.style.display="none",Z.classList.remove(`${i}-scrollbar--visible`),C=!1;return}Z.style.display="";let we=Math.max(0,F-p-_),Ve=F/L;if(u=Math.max(W,Ve*we),k.style[B]=`${u}px`,E=we-u,K(de),!l)c()},K=(ue)=>{let Ee=Math.max(0,L-F);if(de=Math.max(0,Math.min(ue,Ee)),Q!==Ee)Q=Ee,Z.setAttribute("aria-valuemax",String(Ee));if(f!==de)f=de,Z.setAttribute("aria-valuenow",String(de));let we=s?.(),Ve=we?.getTotal()??0,ke=Ve?we.indexAtOffset(de)+1:0;if(ke!==P||Ve!==Y)P=ke,Y=Ve,Z.setAttribute("aria-valuetext",`Row ${ke} of ${Ve}`);if(Ee<=0||E<=0)return;let We=de/Ee*E;if(We!==G)G=We,k.style.transform=`${D}(${We}px)`},he=(ue)=>{if(!x||ue.target!==Z||document.activeElement!==Z)return;if(ue.stopPropagation(),ue.altKey||ue.ctrlKey||ue.metaKey)return;let Ee=s?.(),we=Ee?.getSize(Ee.indexAtOffset(de))??40,Ve=de;switch(ue.key){case(r?"ArrowLeft":"ArrowUp"):Ve-=we;break;case(r?"ArrowRight":"ArrowDown"):Ve+=we;break;case"PageUp":Ve-=F;break;case"PageDown":Ve+=F;break;case"Home":Ve=0;break;case"End":Ve=L;break;default:return}ue.preventDefault(),n(Math.max(0,Math.min(Ve,Math.max(0,L-F)))),c()},U=(ue)=>{if(ue.target===k||I!=="jump"||E<=0)return;let Ee=L-F,we=Z.getBoundingClientRect(),Ve=se(ue)-we[Ie],ke=Math.max(0,Math.min(Ve-u/2,E));n(ke/E*Ee),c()},X=()=>{if(O!==null)clearTimeout(O),O=null;if(fe!==null)cancelAnimationFrame(fe),fe=null;j=null},me=(ue)=>{let Ee=E>0?be/ue*E:0;if(pe<Ee)return-1;if(pe>=Ee+u)return 1;return 0},Le=()=>{let ue=L-F,Ee=me(ue);if(Ee===0){X();return}if(Ee===-1){if(be<=0){X();return}let we=Math.max(0,be-F);be=we,n(we)}else{if(be>=ue){X();return}let we=Math.min(ue,be+F);be=we,n(we)}c()},Ce=(ue)=>{if(j===null){j=ue,fe=requestAnimationFrame(Ce);return}let Ee=L-F,we=ue-j;j=ue;let Ve=me(Ee);if(Ve===0){X();return}let ke=Co*F/1000,We=Math.min(ke*we,F);if(Ve===-1){if(be<=0){X();return}let Ye=Math.max(0,be-We);be=Ye,n(Ye)}else{if(be>=Ee){X();return}let Ye=Math.min(Ee,be+We);be=Ye,n(Ye)}N(),fe=requestAnimationFrame(Ce)},Te=(ue)=>{if(ue&&ue.pointerId!==w)return;let Ee=w,we=h;if(w=null,h=null,H=!1,Z.classList.remove(`${i}-scrollbar--dragging`),X(),Ee!==null&&we?.hasPointerCapture(Ee))we.releasePointerCapture(Ee);le()},Pe=(ue)=>{if(!x||ue.button!==0||w!==null||E<=0)return;if(ue.preventDefault(),ue.stopPropagation(),w=ue.pointerId,H=ue.target===k,h=H?k:ue.currentTarget,h.setPointerCapture(w),N(),H)ie=se(ue),ce=de,Z.classList.add(`${i}-scrollbar--dragging`);else if(I==="jump")U(ue);else pe=se(ue)-Z.getBoundingClientRect()[Ie],be=de,Le(),O=setTimeout(()=>{fe=requestAnimationFrame(Ce)},Lo);c()},Re=(ue)=>{if(!H||ue.pointerId!==w)return;ue.stopPropagation();let Ee=se(ue)-ie,we=Math.max(0,L-F),Ve=Math.max(0,Math.min(ce+Ee/E*we,we));K(Ve),n(Ve)},ve=()=>{if(V)c()},xe=()=>{if(!H){if(R=!1,l)le()}},_e=()=>{R=!0,N(),c()},ye=()=>{if(R=!1,!H&&l)le()},Se=["width","radius","thumb-color","track-color"],Me=(ue,Ee)=>d.style.setProperty(`--vlist-custom-scrollbar-${ue}`,Ee),Ae=Se.map((ue)=>d.style.getPropertyValue(`--vlist-custom-scrollbar-${ue}`)),Oe=Ae.slice(0,2),Ge=[],Fe=()=>{for(let ke=0;ke<2;ke++){let We=Se[ke],Ye=d.style.getPropertyValue(`--vlist-custom-scrollbar-${We}`);if(Ye!==Ge[ke])Oe[ke]=Ye;Me(We,Oe[ke])}let ue=getComputedStyle(a??d),Ee=o.width??ue.getPropertyValue("scrollbar-width"),we=ue.getPropertyValue("scrollbar-color").match(/[\w-]+\([^)]*\)|\S+/g);x=o.enabled!==!1&&Ee!=="none";let Ve=[typeof o.width==="number"?`${o.width}px`:ue.getPropertyValue("--vlist-custom-scrollbar-width").trim()||(Ee==="thin"||!y?"6px":"14px"),typeof o.radius==="number"?`${o.radius}px`:ue.getPropertyValue("--vlist-custom-scrollbar-radius").trim()||(y?"0px":"4px"),o.thumbColor??(we?.length===2?we[0]:Ae[2]),o.trackColor??(we?.length===2?we[1]:Ae[3])];for(let ke=0;ke<Se.length;ke++)Me(Se[ke],Ve[ke]);if(Ge=Ve.slice(0,2),ae.style.display=x?"":"none",e.classList.toggle(`${i}-viewport--gutter`,x&&!!o.gutter),!x)Te();q(L,F)},qe=()=>{N(),X(),Te(),N();for(let ue of Ne)ue();for(let ue=0;ue<Se.length;ue++)Me(Se[ue],Ae[ue]);if(e.classList.remove(`${i}-viewport--gutter`),ae.remove(),d.style.removeProperty("--vlist-custom-scrollbar-padding-top"),d.style.removeProperty("--vlist-custom-scrollbar-padding-right"),d.style.removeProperty("--vlist-custom-scrollbar-padding-bottom"),d.style.removeProperty("--vlist-custom-scrollbar-padding-left"),Z.remove(),ee&&e.id===ee)e.removeAttribute("id")};z();let Ne=[],He=(ue,Ee,we)=>{ue.addEventListener(Ee,we),Ne.push(()=>ue.removeEventListener(Ee,we))};for(let ue of[Z,k,ae])He(ue,"pointerdown",Pe),He(ue,"pointermove",Re),He(ue,"pointerup",Te),He(ue,"pointercancel",Te),He(ue,"lostpointercapture",Te);if(He(Z,"keydown",he),He(Z,"focus",c),He(Z,"blur",le),He(e,"mouseenter",ve),He(e,"mouseleave",xe),He(Z,"mouseenter",_e),He(Z,"mouseleave",ye),g)He(ae,"mouseenter",_e),He(ae,"mouseleave",ye);return Fe(),{refresh:Fe,show:c,hide:re,updateBounds:q,updatePosition:K,isVisible:()=>C,destroy:qe}};function Et(e){let n=null,o,i=0,r=0,t=0;return{name:"scrollbar",priority:15,setup(s){let{dom:a,config:A}=s,{classPrefix:y}=A,l=A.axis.primary==="x";o=s.getState(),i=A.mainAxisPadding,n=Gn(a.viewport,(M)=>{s.scroll.to(M)},e,y,l,a.root,()=>s.sizes.cache,a.root.parentElement),a.viewport.classList.add(`${y}-viewport--custom-scrollbar`),s.hooks.method("refreshScrollbar",()=>n?.refresh()),queueMicrotask(()=>{n?.updateBounds(o.totalSize+i,o.containerSize)}),s.hooks.method("_scrollbar:getInstance",()=>n),s.hooks.onDestroy(()=>{if(n?.destroy(),n=null,a.viewport.classList.remove(`${y}-viewport--custom-scrollbar`),e?.gutter)a.viewport.classList.remove(`${y}-viewport--gutter`)})},hooks:{onAfterScroll(s){let a=o.totalSize+i,A=o.containerSize;if(a!==r||A!==t)r=a,t=A,n?.updateBounds(a,A);n?.updatePosition(s),n?.show()},onResize(){let s=o.totalSize+i,a=o.containerSize;r=s,t=a,n?.updateBounds(s,a)}},destroy(){n?.destroy(),n=null}}}var Po=(e)=>{try{let n=sessionStorage.getItem(e);if(!n)return;return JSON.parse(n)}catch{return}};function Yt(e){let n=e?.autoSave,o=e?.restore??(n?Po(n):void 0),i=!1,r=null;return{name:"snapshots",priority:50,setup(t){let{emitter:s,scroll:a}=t,A=t.sizes.cache,y=t.getState(),l=()=>{let g=a.getPixelEquivalent(),V=y.totalItems,I=t.hooks.get("getSelected")?.();if(V===0){let L={index:0,offsetInItem:0,total:0};if(I?.length)L.selectedIds=I;return L}let d=A.indexAtOffset(g),T=g-A.getOffset(d);T=Math.max(0,T);let p={index:d,offsetInItem:T,total:V,scrollTop:g},_=A.getSize(d);if(_)p.offsetRatio=T/_;let te=t.hooks.get("_layoutToDataIndex");if(te){let L=te(d);if(L<0){for(let F=d+1;F<V;F++)if(L=te(F),L>=0)break}if(L>=0)p.dataIndex=L}let m=t.hooks.get("_getTotal");if(m)p.dataTotal=m();if(I?.length)p.selectedIds=I;let x=t.hooks.get("_getFocusedId");if(x){let L=x();if(L!==void 0)p.focusedId=L}return p};t.hooks.method("getScrollSnapshot",l);let M=(g,V=!0)=>{let{index:S,offsetInItem:I,selectedIds:d,focusedId:T}=g,p=y.totalItems,_=g.dataTotal??g.total;if(p===0&&_&&_>0){let b=t.hooks.get("_setTotal");if(b)b(_),p=y.totalItems;A.rebuild(p),t.render.contentSize(A.getTotalSize()),y.totalSize=A.getTotalSize()}if(p===0)return Promise.resolve();if(!Number.isFinite(S)||!Number.isFinite(I))return Promise.resolve();if(A.getTotal()===0)A.rebuild(p),t.render.contentSize(A.getTotalSize()),y.totalSize=A.getTotalSize();let m=t.hooks.get("_dataToLayoutIndex"),x=S;if(g.dataIndex!==void 0&&g.dataIndex>=0)x=m?m(g.dataIndex):g.dataIndex;else if(m)x=m(S);let L=Math.max(0,Math.min(x,p-1)),F=A.getSize(L),u=g.offsetRatio!==void 0?g.offsetRatio*F:Math.min(I,F),E=t.hooks.get("_getTotal")?.(),H=g.total===p||E!==void 0&&g.dataTotal===E,R;if(g.scrollTop!==void 0&&H)R=g.scrollTop;else R=A.getOffset(L)+u;let ie=Math.max(0,y.totalSize-y.containerSize);if(R=Math.max(0,Math.min(R,ie)),t.scroll.to(R),V&&d?.length){let b=t.hooks.get("select");if(b)b(...d)}let ce=t.hooks.get("loadVisibleRange"),de=()=>{if(T===void 0)return;let b=t.hooks.get("_focusById");if(b)b(T,"preserve")};return new Promise((b)=>{let C=(w)=>{if(w)de();b()};if(ce){let w=0,h=()=>{if(y.containerSize>0){if(Math.abs(a.getPixelEquivalent()-R)>1)t.scroll.to(R);ce().then(()=>C(!0),()=>C(!1))}else if(++w<10)requestAnimationFrame(h);else C(!1)};requestAnimationFrame(h)}else{let w=t.hooks.get("reload");if(w)requestAnimationFrame(()=>{w().then(()=>C(!0),()=>C(!1))});else requestAnimationFrame(()=>C(!0))}})};t.hooks.method("restoreScroll",M);let W=!!(o&&n);if(t.hooks.onDestroy(()=>{i=!0}),n){r=()=>{if(i||W)return;let p=l();try{sessionStorage.setItem(n,JSON.stringify(p))}catch{}},t.hooks.method("_saveSnapshot",r);let g=0,V=()=>{if(g)return;g=requestAnimationFrame(()=>{if(g=0,r)r()})};s.on("selection:change",V),s.on("focus:change",V);let S=0,I=()=>{if(S=0,r)r()},d=()=>{if(S)clearTimeout(S);S=setTimeout(I,300)};s.on("scroll",d);let T=()=>{r?.()};if(window.addEventListener("beforeunload",T),t.hooks.onDestroy(()=>{if(g)cancelAnimationFrame(g);if(S)clearTimeout(S);window.removeEventListener("beforeunload",T)}),o&&o.total&&o.total>0){let p=t.hooks.get("_cancelAutoLoad");if(p)p();let _=t.hooks.get("_setTotal");if(_)_(o.total)}}if(o){let g=!0;if(o.selectedIds?.length){let V=t.hooks.get("_seedSelection");if(V)V(o.selectedIds),g=!1}queueMicrotask(()=>{if(M(o,g),W=!1,r)r()})}},hooks:{onIdle(){if(r&&!i)r()}},destroy(){i=!0,r=null}}}function Mo(e){let n=[];if(typeof window<"u"&&e.scroll?.element===window)n.push(Ft());let o=e.item,i=e.orientation==="horizontal",r=i?o.width!=null:o.height!=null,t=i?o.estimatedWidth!=null:o.estimatedHeight!=null;if(!r&&t){if(e.layout==="grid")throw Error('[vlist] config: layout: "grid" needs a fixed item size. An estimate wires autosize(), which grid() cannot combine with: grid indexes its size cache by row, autosize measures items. Use item.height (item.width when horizontal).');n.push(Ot())}if(e.adapter)n.push(Dt({adapter:e.adapter,...e.loading&&{loading:e.loading}}));if(e.layout==="grid"){if(!e.grid)throw Error('[vlist] config: layout: "grid" requires a `grid` option, e.g. { columns: 3 }');n.push($t(e.grid))}if(e.layout==="masonry"){if(!e.masonry)throw Error('[vlist] config: layout: "masonry" requires a `masonry` option, e.g. { columns: 3 }');n.push(Gt(e.masonry))}if(e.groups)n.push(Wt(e.groups));if(e.selection)n.push(Kt(e.selection));if(e.a11y)n.push(e.a11y===!0?Ct():Ct(e.a11y));let s=e.scroll?.scrollbar??e.scrollbar;if(s===!0)n.push(Et({}));else if(s&&typeof s==="object")n.push(Et(s));if(e.snapshots)n.push(Yt());if(e.plugins&&e.plugins.length>0){let a=new Set(e.plugins.map((y)=>y.name));return[...n.filter((y)=>!a.has(y.name)),...e.plugins]}return n}function Yi(e){let{factory:n,...o}=e;return(n??Cn)(o,Mo(e))}export{Yi as createVListFromConfig,Mo as resolvePlugins};
|
|
1
|
+
import{createVList as u,page as g,autosize as m,data as f,grid as C,masonry as y,groups as h,selection as T,a11y as r,scrollbar as l,snapshots as c}from"./index.js";function L(t){let e=[];if(typeof window<"u"&&t.scroll?.element===window)e.push(g());let i=t.item,n=t.orientation==="horizontal",a=n?i.width!=null:i.height!=null,p=n?i.estimatedWidth!=null:i.estimatedHeight!=null;if(!a&&p){if(t.layout==="grid")throw Error('[vlist] config: layout: "grid" needs a fixed item size. An estimate wires autosize(), which grid() cannot combine with: grid indexes its size cache by row, autosize measures items. Use item.height (item.width when horizontal).');e.push(m())}if(t.adapter)e.push(f({adapter:t.adapter,...t.loading&&{loading:t.loading}}));if(t.layout==="grid"){if(!t.grid)throw Error('[vlist] config: layout: "grid" requires a `grid` option, e.g. { columns: 3 }');e.push(C(t.grid))}if(t.layout==="masonry"){if(!t.masonry)throw Error('[vlist] config: layout: "masonry" requires a `masonry` option, e.g. { columns: 3 }');e.push(y(t.masonry))}if(t.groups)e.push(h(t.groups));if(t.selection)e.push(T(t.selection));if(t.a11y)e.push(t.a11y===!0?r():r(t.a11y));let s=t.scroll?.scrollbar??t.scrollbar;if(s===!0)e.push(l({}));else if(s&&typeof s==="object")e.push(l(s));if(t.snapshots)e.push(c());if(t.plugins&&t.plugins.length>0){let d=new Set(t.plugins.map((o)=>o.name));return[...e.filter((o)=>!d.has(o.name)),...t.plugins]}return e}function M(t){let{factory:e,...i}=t;return(e??u)(i,L(t))}export{M as createVListFromConfig,L as resolvePlugins};
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/react — React hooks, feature-first (#328).
|
|
3
|
+
*
|
|
4
|
+
* Features are passed explicitly, as with the vanilla builder, so an app only
|
|
5
|
+
* bundles what it uses:
|
|
6
|
+
*
|
|
7
|
+
* const { containerRef } = useVList({ items, item }, [grid({ columns: 4 })]);
|
|
8
|
+
*
|
|
9
|
+
* The core comes from the root entry (`import … from "vlist"` in the built
|
|
10
|
+
* package), never a copy of its own.
|
|
11
|
+
*/
|
|
12
|
+
import { type RefObject } from "react";
|
|
13
|
+
import { createVList } from "./index";
|
|
14
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
15
|
+
/** `createVList`'s config without `container`: the hook owns the element. */
|
|
16
|
+
export type UseVListConfig<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
17
|
+
export interface UseVListReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
18
|
+
/** Attach to the element the list renders into. */
|
|
19
|
+
containerRef: RefObject<HTMLDivElement | null>;
|
|
20
|
+
/** The list once mounted, with the methods its plugins add. */
|
|
21
|
+
instanceRef: RefObject<(VList<T> & PluginMethods<P>) | null>;
|
|
22
|
+
getInstance: () => (VList<T> & PluginMethods<P>) | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A vlist in a React component. `plugins` are read at mount: changing them
|
|
26
|
+
* means remounting (a `key`). `config.items` changes update the list.
|
|
27
|
+
*
|
|
28
|
+
* @param create Advanced: the factory that builds the list, `createVList` by
|
|
29
|
+
* default. The deprecated vlist-react package passes its own.
|
|
30
|
+
*/
|
|
31
|
+
export declare function useVList<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(config: UseVListConfig<T>, plugins?: P, create?: typeof createVList): UseVListReturn<T, P>;
|
|
32
|
+
/**
|
|
33
|
+
* Subscribe to a list event for the component's lifetime. After `useVList` in
|
|
34
|
+
* the same component it subscribes at mount; in a child, whose effects run
|
|
35
|
+
* before the parent's, on its first render once the list exists.
|
|
36
|
+
*/
|
|
37
|
+
export declare function useVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instanceRef: RefObject<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
38
|
+
//# sourceMappingURL=react.d.ts.map
|
package/dist/react.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useRef as s,useEffect as c,useCallback as V}from"react";import{createVList as f}from"./index.js";function d(e,i=[],r=f){let n=s(null),t=s(null),u=s(e);u.current=e;let L=s(i);c(()=>{let o=n.current;if(!o)return;let l=r({...u.current,container:o},L.current);return t.current=l,()=>{l.destroy(),t.current=null}},[]),c(()=>{if(t.current&&e.items)t.current.setItems(e.items)},[e.items]);let a=V(()=>t.current,[]);return{containerRef:n,instanceRef:t,getInstance:a}}function P(e,i,r){let n=s(r);n.current=r,c(()=>{let t=e.current;if(!t)return;return t.on(i,(u)=>n.current(u))},[e.current,i])}export{d as useVList,P as useVListEvent};
|
package/dist/size.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"base":{"minified":"27.3","gzipped":"10.3","minBytes":27986,"gzBytes":10539},"synthetic":{"minified":"34.2","gzipped":"12.9","minBytes":35039,"gzBytes":13192},"synthetic + carousel":{"minified":"49.3","gzipped":"18.1","minBytes":50498,"gzBytes":18513},"synthetic + sortable":{"minified":"46.1","gzipped":"16.5","minBytes":47232,"gzBytes":16885},"createStats":{"minified":"27.9","gzipped":"10.5","minBytes":28588,"gzBytes":10770},"synthetic + createStats":{"minified":"34.8","gzipped":"13.1","minBytes":35641,"gzBytes":13422},"native":{"minified":"27.3","gzipped":"10.3","minBytes":27986,"gzBytes":10536},"a11y":{"minified":"31.2","gzipped":"11.7","minBytes":31938,"gzBytes":11988},"selection":{"minified":"36.9","gzipped":"13.3","minBytes":37809,"gzBytes":13568},"data":{"minified":"41.0","gzipped":"15.1","minBytes":41945,"gzBytes":15449},"scrollbar":{"minified":"35.5","gzipped":"13.2","minBytes":36335,"gzBytes":13499},"sortable":{"minified":"39.2","gzipped":"13.9","minBytes":40170,"gzBytes":14245},"groups":{"minified":"43.4","gzipped":"15.7","minBytes":44439,"gzBytes":16060},"page":{"minified":"29.9","gzipped":"11.2","minBytes":30588,"gzBytes":11478},"snapshots":{"minified":"30.6","gzipped":"11.4","minBytes":31366,"gzBytes":11697},"transition":{"minified":"34.1","gzipped":"12.3","minBytes":34883,"gzBytes":12570},"autosize":{"minified":"30.6","gzipped":"11.5","minBytes":31336,"gzBytes":11739},"grid":{"minified":"34.7","gzipped":"12.9","minBytes":35573,"gzBytes":13179},"table":{"minified":"45.8","gzipped":"16.2","minBytes":46881,"gzBytes":16634},"masonry":{"minified":"39.4","gzipped":"14.7","minBytes":40373,"gzBytes":15056},"tree":{"minified":"43.5","gzipped":"15.7","minBytes":44581,"gzBytes":16050},"search":{"minified":"36.9","gzipped":"13.6","minBytes":37750,"gzBytes":13912},"carousel":{"minified":"43.2","gzipped":"15.8","minBytes":44286,"gzBytes":16154}}
|
|
1
|
+
{"base":{"minified":"27.3","gzipped":"10.3","minBytes":27986,"gzBytes":10539},"synthetic":{"minified":"34.2","gzipped":"12.9","minBytes":35039,"gzBytes":13192},"synthetic + carousel":{"minified":"49.3","gzipped":"18.1","minBytes":50498,"gzBytes":18513},"synthetic + sortable":{"minified":"46.1","gzipped":"16.5","minBytes":47232,"gzBytes":16885},"createStats":{"minified":"27.9","gzipped":"10.5","minBytes":28588,"gzBytes":10770},"synthetic + createStats":{"minified":"34.8","gzipped":"13.1","minBytes":35641,"gzBytes":13422},"native":{"minified":"27.3","gzipped":"10.3","minBytes":27986,"gzBytes":10536},"vue":{"minified":"27.7","gzipped":"10.5","minBytes":28376,"gzBytes":10722},"svelte":{"minified":"27.5","gzipped":"10.4","minBytes":28171,"gzBytes":10626},"solid":{"minified":"27.6","gzipped":"10.4","minBytes":28283,"gzBytes":10688},"react":{"minified":"27.8","gzipped":"10.5","minBytes":28423,"gzBytes":10717},"react + grid":{"minified":"35.2","gzipped":"13.1","minBytes":36010,"gzBytes":13373},"a11y":{"minified":"31.2","gzipped":"11.7","minBytes":31938,"gzBytes":11988},"selection":{"minified":"36.9","gzipped":"13.3","minBytes":37809,"gzBytes":13568},"data":{"minified":"41.0","gzipped":"15.1","minBytes":41945,"gzBytes":15449},"scrollbar":{"minified":"35.5","gzipped":"13.2","minBytes":36335,"gzBytes":13499},"sortable":{"minified":"39.2","gzipped":"13.9","minBytes":40170,"gzBytes":14245},"groups":{"minified":"43.4","gzipped":"15.7","minBytes":44439,"gzBytes":16060},"page":{"minified":"29.9","gzipped":"11.2","minBytes":30588,"gzBytes":11478},"snapshots":{"minified":"30.6","gzipped":"11.4","minBytes":31366,"gzBytes":11697},"transition":{"minified":"34.1","gzipped":"12.3","minBytes":34883,"gzBytes":12570},"autosize":{"minified":"30.6","gzipped":"11.5","minBytes":31336,"gzBytes":11739},"grid":{"minified":"34.7","gzipped":"12.9","minBytes":35573,"gzBytes":13179},"table":{"minified":"45.8","gzipped":"16.2","minBytes":46881,"gzBytes":16634},"masonry":{"minified":"39.4","gzipped":"14.7","minBytes":40373,"gzBytes":15056},"tree":{"minified":"43.5","gzipped":"15.7","minBytes":44581,"gzBytes":16050},"search":{"minified":"36.9","gzipped":"13.6","minBytes":37750,"gzBytes":13912},"carousel":{"minified":"43.2","gzipped":"15.8","minBytes":44286,"gzBytes":16154}}
|
package/dist/solid.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/solid — SolidJS primitives, feature-first (#328).
|
|
3
|
+
*
|
|
4
|
+
* const { setRef } = createVList(() => ({ items, item }), [grid({ columns: 4 })]);
|
|
5
|
+
*
|
|
6
|
+
* `createVList` keeps the Solid primitive idiom and the vlist-solidjs name. In
|
|
7
|
+
* a file that also uses the core builder, alias one of them:
|
|
8
|
+
* `import { createVList as createSolidVList } from "vlist/solid"`.
|
|
9
|
+
*
|
|
10
|
+
* Features are passed explicitly, so an app only bundles what it uses. The
|
|
11
|
+
* core comes from the root entry, never a copy of its own.
|
|
12
|
+
*/
|
|
13
|
+
import { type Accessor } from "solid-js";
|
|
14
|
+
import { createVList as createCoreVList } from "./index";
|
|
15
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
16
|
+
/** `createVList`'s config without `container`: the primitive owns the element. */
|
|
17
|
+
export type CreateVListConfigInput<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
18
|
+
export interface CreateVListReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
19
|
+
/** Pass as `ref={setRef}` on the element the list renders into. */
|
|
20
|
+
setRef: (el: HTMLDivElement) => void;
|
|
21
|
+
/** The list once mounted, with the methods its plugins add. */
|
|
22
|
+
instance: Accessor<(VList<T> & PluginMethods<P>) | null>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A vlist in a component. `plugins` are read at mount; `items` changes in the
|
|
26
|
+
* config accessor update the list.
|
|
27
|
+
*
|
|
28
|
+
* @param create Advanced: the factory that builds the list, the core
|
|
29
|
+
* `createVList` by default. The deprecated vlist-solidjs package passes its own.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createVList<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(config: Accessor<CreateVListConfigInput<T>>, plugins?: P, create?: typeof createCoreVList): CreateVListReturn<T, P>;
|
|
32
|
+
/** Subscribe to a list event for the component's lifetime. */
|
|
33
|
+
export declare function createVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: Accessor<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
34
|
+
//# sourceMappingURL=solid.d.ts.map
|
package/dist/solid.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{onMount as r,onCleanup as l,createEffect as a,on as L}from"solid-js";import{createVList as V}from"./index.js";function f(n,i=[],o=V){let e=null,t=null;return r(()=>{if(!e)return;t=o({...n(),container:e},i)}),a(L(()=>n().items,(s)=>{if(t&&s)t.setItems(s)})),l(()=>{t?.destroy(),t=null}),{setRef:(s)=>{e=s},instance:()=>t}}function T(n,i,o){r(()=>{let e=n();if(!e)return;let t=e.on(i,o);l(t)})}export{f as createVList,T as createVListEvent};
|
package/dist/svelte.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/svelte — a Svelte action, feature-first (#328). Works in Svelte 4 and 5.
|
|
3
|
+
*
|
|
4
|
+
* <div use:vlist={{ config: { items, item }, plugins: [grid({ columns: 4 })] }} />
|
|
5
|
+
*
|
|
6
|
+
* Features are passed explicitly, so an app only bundles what it uses. The
|
|
7
|
+
* core comes from the root entry, never a copy of its own.
|
|
8
|
+
*/
|
|
9
|
+
import { createVList } from "./index";
|
|
10
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, Unsubscribe, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
11
|
+
/** `createVList`'s config without `container`: the action owns the node. */
|
|
12
|
+
export type VListActionConfig<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
13
|
+
export interface VListActionOptions<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
14
|
+
config: VListActionConfig<T>;
|
|
15
|
+
/** Read when the action mounts: changing them means remounting. */
|
|
16
|
+
plugins?: P;
|
|
17
|
+
/** Receives the list once created, with the methods its plugins add. */
|
|
18
|
+
onInstance?: (instance: VList<T> & PluginMethods<P>) => void;
|
|
19
|
+
/** Advanced: the factory that builds the list, `createVList` by default. */
|
|
20
|
+
create?: typeof createVList;
|
|
21
|
+
}
|
|
22
|
+
export interface VListActionReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
23
|
+
update: (options: VListActionOptions<T, P>) => void;
|
|
24
|
+
destroy: () => void;
|
|
25
|
+
}
|
|
26
|
+
/** A vlist on the node: `use:vlist={{ config, plugins }}`. `config.items` changes update it. */
|
|
27
|
+
export declare function vlist<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(node: HTMLElement, options: VListActionOptions<T, P>): VListActionReturn<T, P>;
|
|
28
|
+
/** Subscribe to a list event; call the returned function to unsubscribe. */
|
|
29
|
+
export declare function onVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: VList<T>, event: K, handler: EventHandler<VListEvents<T>[K]>): Unsubscribe;
|
|
30
|
+
//# sourceMappingURL=svelte.d.ts.map
|
package/dist/svelte.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createVList as o}from"./index.js";function r(e,t){let i=(t.create??o)({...t.config,container:e},t.plugins??[]);return t.onInstance?.(i),{update(s){if(s.config.items)i.setItems(s.config.items)},destroy(){i.destroy()}}}function V(e,t,n){return e.on(t,n)}export{V as onVListEvent,r as vlist};
|
package/dist/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"3.1.0
|
|
1
|
+
{"version":"3.1.0","commit":"33f96bd","builtAt":"2026-10-01T11:24:47.852Z","released":true}
|
package/dist/vue.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vlist/vue — Vue composables, feature-first (#328).
|
|
3
|
+
*
|
|
4
|
+
* const { containerRef } = useVList({ items, item }, [grid({ columns: 4 })]);
|
|
5
|
+
*
|
|
6
|
+
* Features are passed explicitly, so an app only bundles what it uses. The
|
|
7
|
+
* core comes from the root entry, never a copy of its own.
|
|
8
|
+
*/
|
|
9
|
+
import { type Ref, type ShallowRef } from "vue";
|
|
10
|
+
import { createVList } from "./index";
|
|
11
|
+
import type { CreateVListConfig, EventHandler, PluginMethods, VList, VListEvents, VListItem, VListPlugin } from "./index";
|
|
12
|
+
/** `createVList`'s config without `container`: the composable owns the element. */
|
|
13
|
+
export type UseVListConfig<T extends VListItem = VListItem> = Omit<CreateVListConfig<T>, "container">;
|
|
14
|
+
export interface UseVListReturn<T extends VListItem = VListItem, P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]> {
|
|
15
|
+
/** Bind to the element the list renders into (`ref="containerRef"`). */
|
|
16
|
+
containerRef: Ref<HTMLDivElement | null>;
|
|
17
|
+
/** The list once mounted, with the methods its plugins add. */
|
|
18
|
+
instance: ShallowRef<(VList<T> & PluginMethods<P>) | null>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A vlist in a component. `plugins` are read at mount. With a `Ref` config,
|
|
22
|
+
* `items` changes update the list.
|
|
23
|
+
*
|
|
24
|
+
* @param create Advanced: the factory that builds the list, `createVList` by
|
|
25
|
+
* default. The deprecated vlist-vue package passes its own.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useVList<T extends VListItem = VListItem, const P extends readonly VListPlugin<T, any>[] = VListPlugin<T>[]>(config: UseVListConfig<T> | Ref<UseVListConfig<T>>, plugins?: P, create?: typeof createVList): UseVListReturn<T, P>;
|
|
28
|
+
/** Subscribe to a list event for the component's lifetime. */
|
|
29
|
+
export declare function useVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: Ref<VList<T> | null> | ShallowRef<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
30
|
+
//# sourceMappingURL=vue.d.ts.map
|
package/dist/vue.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ref as u,shallowRef as L,onMounted as r,onBeforeUnmount as o,watch as a,isRef as V,unref as f}from"vue";import{createVList as d}from"./index.js";function v(n,i=[],l=d){let t=u(null),e=L(null);if(r(()=>{let s=t.value;if(!s)return;e.value=l({...f(n),container:s},i)}),o(()=>{e.value?.destroy(),e.value=null}),V(n))a(()=>n.value.items,(s)=>{if(e.value&&s)e.value.setItems(s)});return{containerRef:t,instance:e}}function c(n,i,l){let t;a(()=>n.value,(e)=>{t?.(),t=e?.on(i,l)},{immediate:!0}),o(()=>t?.())}export{v as useVList,c as useVListEvent};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vlist",
|
|
3
|
-
"version": "3.1.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Lightweight, high-performance virtual list with zero dependencies",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Floor IO",
|
|
@@ -49,6 +49,26 @@
|
|
|
49
49
|
"import": "./dist/config.js",
|
|
50
50
|
"default": "./dist/config.js"
|
|
51
51
|
},
|
|
52
|
+
"./vue": {
|
|
53
|
+
"types": "./dist/vue.d.ts",
|
|
54
|
+
"import": "./dist/vue.js",
|
|
55
|
+
"default": "./dist/vue.js"
|
|
56
|
+
},
|
|
57
|
+
"./svelte": {
|
|
58
|
+
"types": "./dist/svelte.d.ts",
|
|
59
|
+
"import": "./dist/svelte.js",
|
|
60
|
+
"default": "./dist/svelte.js"
|
|
61
|
+
},
|
|
62
|
+
"./solid": {
|
|
63
|
+
"types": "./dist/solid.d.ts",
|
|
64
|
+
"import": "./dist/solid.js",
|
|
65
|
+
"default": "./dist/solid.js"
|
|
66
|
+
},
|
|
67
|
+
"./react": {
|
|
68
|
+
"types": "./dist/react.d.ts",
|
|
69
|
+
"import": "./dist/react.js",
|
|
70
|
+
"default": "./dist/react.js"
|
|
71
|
+
},
|
|
52
72
|
"./internals": {
|
|
53
73
|
"types": "./dist/internals.d.ts",
|
|
54
74
|
"import": "./dist/internals.js",
|
|
@@ -97,13 +117,40 @@
|
|
|
97
117
|
"url": "https://github.com/floor/vlist/issues"
|
|
98
118
|
},
|
|
99
119
|
"homepage": "https://vlist.io",
|
|
120
|
+
"peerDependencies": {
|
|
121
|
+
"react": ">=17.0.0",
|
|
122
|
+
"vue": ">=3.0.0",
|
|
123
|
+
"svelte": ">=4.0.0",
|
|
124
|
+
"solid-js": ">=1.6.0"
|
|
125
|
+
},
|
|
126
|
+
"peerDependenciesMeta": {
|
|
127
|
+
"react": {
|
|
128
|
+
"optional": true
|
|
129
|
+
},
|
|
130
|
+
"vue": {
|
|
131
|
+
"optional": true
|
|
132
|
+
},
|
|
133
|
+
"svelte": {
|
|
134
|
+
"optional": true
|
|
135
|
+
},
|
|
136
|
+
"solid-js": {
|
|
137
|
+
"optional": true
|
|
138
|
+
}
|
|
139
|
+
},
|
|
100
140
|
"devDependencies": {
|
|
101
141
|
"@happy-dom/global-registrator": "^20.9.0",
|
|
102
142
|
"@types/bun": "^1.0.0",
|
|
103
143
|
"@types/jsdom": "^27.0.0",
|
|
144
|
+
"@types/react": "^19.2.13",
|
|
145
|
+
"@types/react-dom": "^19.2.3",
|
|
104
146
|
"happy-dom": "^20.9.0",
|
|
105
147
|
"jsdom": "^28.0.0",
|
|
106
148
|
"puppeteer-core": "^24.43.1",
|
|
107
|
-
"
|
|
149
|
+
"react": "19.2.7",
|
|
150
|
+
"react-dom": "19.2.7",
|
|
151
|
+
"solid-js": "^1.9.3",
|
|
152
|
+
"svelte": "^5.0.0",
|
|
153
|
+
"typescript": "^5.0.0",
|
|
154
|
+
"vue": "^3.5.28"
|
|
108
155
|
}
|
|
109
156
|
}
|