@floor/vlist 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  Lightweight, high-performance virtual list with zero dependencies.
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/vlist.svg)](https://www.npmjs.com/package/vlist)
6
- [![bundle size](https://img.shields.io/bundlephobia/minzip/vlist)](https://bundlephobia.com/package/vlist)
5
+ [![npm version](https://img.shields.io/npm/v/%40floor%2Fvlist.svg)](https://www.npmjs.com/package/@floor/vlist)
6
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/@floor/vlist)](https://bundlephobia.com/package/@floor/vlist)
7
+ [![tests](https://img.shields.io/badge/tests-1730%20passing-brightgreen)](https://github.com/floor/vlist)
7
8
  [![license](https://img.shields.io/npm/l/vlist.svg)](https://github.com/floor/vlist/blob/main/LICENSE)
8
9
 
9
10
  ## Features
@@ -13,10 +14,12 @@ Lightweight, high-performance virtual list with zero dependencies.
13
14
  - 🎯 **Simple API** - Easy to use with TypeScript support
14
15
  - 📐 **Grid layout** - 2D virtualized grid with configurable columns and gap
15
16
  - 📏 **Variable heights** - Fixed or per-item height via `(index) => number`
17
+ - ↔️ **Horizontal scrolling** - Horizontal lists and carousels with `direction: 'horizontal'`
16
18
  - 📜 **Infinite scroll** - Built-in async adapter support
17
19
  - ✅ **Selection** - Single and multiple selection modes
18
20
  - 📌 **Sticky headers** - Grouped lists with sticky section headers
19
21
  - 🪟 **Window scrolling** - Document-level scrolling with `scrollElement: window`
22
+ - 🔄 **Wrap navigation** - Circular scrolling for wizards and carousels
20
23
  - 🎨 **Customizable** - Beautiful, customizable styles
21
24
  - ♿ **Accessible** - WAI-ARIA listbox pattern, `aria-setsize`/`aria-posinset`, `aria-activedescendant`, live region, keyboard navigation
22
25
  - 🌊 **Smooth scrolling** - Animated `scrollToIndex` / `scrollToItem`
@@ -29,76 +32,76 @@ Lightweight, high-performance virtual list with zero dependencies.
29
32
 
30
33
  Interactive examples and documentation are available at **[vlist.dev](https://vlist.dev)**.
31
34
 
32
- | Example | Description |
33
- |---------|-------------|
34
- | [Basic](https://vlist.dev/sandbox/basic/) | Pure vanilla JS — no frameworks, no dependencies |
35
- | [Core](https://vlist.dev/sandbox/core/) | Lightweight `vlist/core` — 7.3 KB, 83% smaller |
36
- | [Grid](https://vlist.dev/sandbox/grid/) | 2D photo gallery with real photos from Lorem Picsum |
37
- | [Variable Heights](https://vlist.dev/sandbox/variable-heights/) | Chat-style messages with 4 different item heights |
38
- | [Reverse Chat](https://vlist.dev/sandbox/reverse-chat/) | Chat UI with reverse mode, prepend history, auto-scroll |
39
- | [Selection](https://vlist.dev/sandbox/selection/) | Single/multiple selection with keyboard navigation |
40
- | [Infinite Scroll](https://vlist.dev/sandbox/infinite-scroll/) | Async data loading with simulated API |
41
- | [Million Items](https://vlist.dev/sandbox/million-items/) | Stress test with 15 million items |
42
- | [Velocity Loading](https://vlist.dev/sandbox/velocity-loading/) | Velocity-based load skipping demo |
43
- | [Sticky Headers](https://vlist.dev/sandbox/sticky-headers/) | Grouped contact list with sticky section headers |
44
- | [Window Scroll](https://vlist.dev/sandbox/window-scroll/) | Document-level scrolling with `scrollElement: window` |
45
- | [Scroll Restore](https://vlist.dev/sandbox/scroll-restore/) | Save/restore scroll position across SPA navigation |
35
+ **14 examples** across 7 categories — many with multi-framework implementations (JavaScript, React, Svelte, Vue):
36
+
37
+ | Category | Examples |
38
+ |----------|----------|
39
+ | **Getting Started** | [Basic](https://vlist.dev/sandbox/basic/) [Controls](https://vlist.dev/sandbox/controls/) |
40
+ | **Core (Lightweight)** | [Basic Core](https://vlist.dev/sandbox/core/basic/) 7.8KB, 83% smaller |
41
+ | **Grid Plugin** | [Photo Album](https://vlist.dev/sandbox/grid/photo-album/) [File Browser](https://vlist.dev/sandbox/grid/file-browser/) |
42
+ | **Data Plugin** | [Large List](https://vlist.dev/sandbox/data/large-list/) (100K–5M items) [Velocity Loading](https://vlist.dev/sandbox/data/velocity-loading/) |
43
+ | **Horizontal** | [Basic Horizontal](https://vlist.dev/sandbox/horizontal/basic/) 10K card carousel |
44
+ | **Groups Plugin** | [Sticky Headers](https://vlist.dev/sandbox/groups/sticky-headers/) AZ contact list |
45
+ | **Other Plugins** | [Scroll Restore](https://vlist.dev/sandbox/scroll-restore/) [Window Scroll](https://vlist.dev/sandbox/window-scroll/) |
46
+ | **Advanced** | [Variable Heights](https://vlist.dev/sandbox/variable-heights/) [Reverse Chat](https://vlist.dev/sandbox/reverse-chat/) [Wizard Nav](https://vlist.dev/sandbox/wizard-nav/) |
46
47
 
47
48
  ## Installation
48
49
 
49
50
  ```bash
50
- npm install vlist
51
+ npm install @floor/vlist
51
52
  ```
52
53
 
54
+ > **Note:** Currently published as `@floor/vlist` (scoped package). When the npm dispute for `vlist` is resolved, the package will migrate to the simpler `vlist` name.
55
+
53
56
  ### Sub-module Imports
54
57
 
55
58
  For smaller bundles, import only what you need:
56
59
 
57
60
  ```typescript
58
- import { createVList } from 'vlist' // full library (48.2 KB / 16.0 KB gzip)
59
- import { createVList } from 'vlist/core' // lightweight core (7.8 KB / 3.2 KB gzip)
60
- import { createGridLayout } from 'vlist/grid' // grid layout utilities only
61
- import { createSparseStorage } from 'vlist/data' // data utilities only
62
- import { getCompressionInfo } from 'vlist/compression' // compression utilities only
63
- import { createSelectionState } from 'vlist/selection' // selection utilities only
64
- import { createScrollController } from 'vlist/scroll' // scroll utilities only
65
- import { createGroupLayout } from 'vlist/groups' // group/sticky header utilities only
61
+ import { createVList } from '@floor/vlist' // full library (48.2 KB / 16.0 KB gzip)
62
+ import { createVList } from '@floor/vlist/core' // lightweight core (7.8 KB / 3.2 KB gzip)
63
+ import { createGridLayout } from '@floor/vlist/grid' // grid layout utilities only
64
+ import { createSparseStorage } from '@floor/vlist/data' // data utilities only
65
+ import { getCompressionInfo } from '@floor/vlist/compression' // compression utilities only
66
+ import { createSelectionState } from '@floor/vlist/selection' // selection utilities only
67
+ import { createScrollController } from '@floor/vlist/scroll' // scroll utilities only
68
+ import { createGroupLayout } from '@floor/vlist/groups' // group/sticky header utilities only
66
69
  ```
67
70
 
68
71
  | Import | Minified | Gzipped | Description |
69
72
  |--------|----------|---------|-------------|
70
- | `vlist` | 48.2 KB | 16.0 KB | All features |
71
- | **`vlist/core`** | **7.8 KB** | **3.2 KB** | **Lightweight — 83% smaller** |
72
- | `vlist/data` | 9.2 KB | 3.8 KB | Sparse storage, placeholders, data manager |
73
- | `vlist/scroll` | 6.0 KB | 2.3 KB | Scroll controller + custom scrollbar |
74
- | `vlist/grid` | 4.1 KB | 1.9 KB | Grid layout + 2D renderer |
75
- | `vlist/groups` | 3.6 KB | 1.4 KB | Group layout + sticky headers |
76
- | `vlist/compression` | 2.6 KB | 1.1 KB | Large-list compression utilities |
77
- | `vlist/selection` | 1.9 KB | 0.7 KB | Selection state management |
73
+ | `@floor/vlist` | 48.2 KB | 16.0 KB | All features |
74
+ | **`@floor/vlist/core`** | **7.8 KB** | **3.2 KB** | **Lightweight — 83% smaller** |
75
+ | `@floor/vlist/data` | 9.2 KB | 3.8 KB | Sparse storage, placeholders, data manager |
76
+ | `@floor/vlist/scroll` | 6.0 KB | 2.3 KB | Scroll controller + custom scrollbar |
77
+ | `@floor/vlist/grid` | 4.1 KB | 1.9 KB | Grid layout + 2D renderer |
78
+ | `@floor/vlist/groups` | 3.6 KB | 1.4 KB | Group layout + sticky headers |
79
+ | `@floor/vlist/compression` | 2.6 KB | 1.1 KB | Large-list compression utilities |
80
+ | `@floor/vlist/selection` | 1.9 KB | 0.7 KB | Selection state management |
78
81
 
79
82
  ### Framework Adapters
80
83
 
81
84
  Thin wrappers for React, Vue, and Svelte — each under 1 KB:
82
85
 
83
86
  ```typescript
84
- import { useVList } from 'vlist/react' // React hook (0.7 KB / 0.4 KB gzip)
85
- import { useVList } from 'vlist/vue' // Vue 3 composable (0.5 KB / 0.4 KB gzip)
86
- import { vlist } from 'vlist/svelte' // Svelte action (0.3 KB / 0.2 KB gzip)
87
+ import { useVList } from '@floor/vlist/react' // React hook (0.7 KB / 0.4 KB gzip)
88
+ import { useVList } from '@floor/vlist/vue' // Vue 3 composable (0.5 KB / 0.4 KB gzip)
89
+ import { vlist } from '@floor/vlist/svelte' // Svelte action (0.3 KB / 0.2 KB gzip)
87
90
  ```
88
91
 
89
92
  | Import | Minified | Gzipped | Description |
90
93
  |--------|----------|---------|-------------|
91
- | `vlist/react` | 0.7 KB | 0.4 KB | `useVList` hook + `useVListEvent` |
92
- | `vlist/vue` | 0.5 KB | 0.4 KB | `useVList` composable + `useVListEvent` |
93
- | `vlist/svelte` | 0.3 KB | 0.2 KB | `vlist` action + `onVListEvent` |
94
+ | `@floor/vlist/react` | 0.7 KB | 0.4 KB | `useVList` hook + `useVListEvent` |
95
+ | `@floor/vlist/vue` | 0.5 KB | 0.4 KB | `useVList` composable + `useVListEvent` |
96
+ | `@floor/vlist/svelte` | 0.3 KB | 0.2 KB | `vlist` action + `onVListEvent` |
94
97
 
95
98
  Adapters manage the vlist lifecycle (create on mount, destroy on unmount) and sync items reactively. See [Framework Adapters](#framework-adapters) for full examples.
96
99
 
97
100
  ## Quick Start
98
101
 
99
102
  ```typescript
100
- import { createVList } from 'vlist';
101
- import 'vlist/styles';
103
+ import { createVList } from '@floor/vlist';
104
+ import '@floor/vlist/styles';
102
105
 
103
106
  const list = createVList({
104
107
  container: '#my-list',
@@ -120,13 +123,13 @@ const list = createVList({
120
123
  });
121
124
  ```
122
125
 
123
- ### Lightweight Core (7.3 KB)
126
+ ### Lightweight Core (7.8 KB)
124
127
 
125
128
  If you don't need selection, groups, grid, compression, custom scrollbar, or async data adapters, use the lightweight core for an **83% smaller bundle**:
126
129
 
127
130
  ```typescript
128
- import { createVList } from 'vlist/core';
129
- import 'vlist/styles';
131
+ import { createVList } from '@floor/vlist/core';
132
+ import '@floor/vlist/styles';
130
133
 
131
134
  const list = createVList({
132
135
  container: '#my-list',
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @packageDocumentation
9
9
  */
10
- import type { VListConfig, VListItem, VList, VListEvents, EventHandler } from "vlist";
10
+ import type { VListConfig, VListItem, VList, VListEvents, EventHandler } from "../types";
11
11
  /** Configuration for useVList (VListConfig without container) */
12
12
  export type UseVListConfig<T extends VListItem = VListItem> = Omit<VListConfig<T>, "container">;
13
13
  /** Return value from the useVList hook */
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/adapters/react.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EAEb,MAAM,OAAO,CAAC;AAMf,iEAAiE;AACjE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CAChE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CACZ,CAAC;AAEF,0CAA0C;AAC1C,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;OAOG;IACH,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAErD;;;;;;;;OAQG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE9C;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACpC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACtD,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,cAAc,CAAC,CAAC,CAAC,CAqDnB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAC7C,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAmBN"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/adapters/react.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EAEb,MAAM,UAAU,CAAC;AAMlB,iEAAiE;AACjE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CAChE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CACZ,CAAC;AAEF,0CAA0C;AAC1C,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;OAOG;IACH,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAErD;;;;;;;;OAQG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE9C;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACpC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACtD,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,cAAc,CAAC,CAAC,CAAC,CAqDnB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAC7C,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAmBN"}
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * @packageDocumentation
12
12
  */
13
- import type { VListConfig, VListItem, VList, VListEvents, EventHandler, Unsubscribe } from "vlist";
13
+ import type { VListConfig, VListItem, VList, VListEvents, EventHandler, Unsubscribe } from "../types";
14
14
  /** Configuration for the vlist action (VListConfig without container) */
15
15
  export type VListActionConfig<T extends VListItem = VListItem> = Omit<VListConfig<T>, "container">;
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../src/adapters/svelte.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAW,EACZ,MAAM,OAAO,CAAC;AAMf,yEAAyE;AACzE,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CACnE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,CAChE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KACf,IAAI,CAAC;AAEV,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACjE,8CAA8C;IAC9C,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAE7B;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;CACpC;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAChE,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAErD,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0GG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CA4BtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,YAAY,CAC1B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvC,WAAW,CAEb"}
1
+ {"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../src/adapters/svelte.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAMlB,yEAAyE;AACzE,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CACnE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,CAChE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KACf,IAAI,CAAC;AAEV,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACjE,8CAA8C;IAC9C,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAE7B;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;CACpC;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAChE,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAErD,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0GG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CA4BtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,YAAY,CAC1B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvC,WAAW,CAEb"}
@@ -8,7 +8,7 @@
8
8
  * @packageDocumentation
9
9
  */
10
10
  import { type Ref, type ShallowRef } from "vue";
11
- import type { VListConfig, VListItem, VList, VListEvents, EventHandler } from "vlist";
11
+ import type { VListConfig, VListItem, VList, VListEvents, EventHandler } from "../types";
12
12
  /** Configuration for useVList (VListConfig without container) */
13
13
  export type UseVListConfig<T extends VListItem = VListItem> = Omit<VListConfig<T>, "container">;
14
14
  /** Accepted config input — plain object or reactive ref */
@@ -1 +1 @@
1
- {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/adapters/vue.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAQL,KAAK,GAAG,EACR,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AAEb,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EAEb,MAAM,OAAO,CAAC;AAMf,iEAAiE;AACjE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CAChE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CACZ,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAC3D,cAAc,CAAC,CAAC,CAAC,GACjB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3B,gDAAgD;AAChD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACH,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACvC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACtD,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAClC,cAAc,CAAC,CAAC,CAAC,CAwCnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CA4BN"}
1
+ {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/adapters/vue.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAQL,KAAK,GAAG,EACR,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AAEb,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EAEb,MAAM,UAAU,CAAC;AAMlB,iEAAiE;AACjE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CAChE,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CACZ,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAC3D,cAAc,CAAC,CAAC,CAAC,GACjB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3B,gDAAgD;AAChD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACH,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACvC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACtD,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAClC,cAAc,CAAC,CAAC,CAAC,CAwCnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CA4BN"}
@@ -9,7 +9,7 @@ import type { VListItem, VListEvents } from "../types";
9
9
  import type { HeightCache } from "../render/heights";
10
10
  import type { Renderer, DOMStructure } from "../render/renderer";
11
11
  import type { SimpleDataManager } from "./data";
12
- import type { ScrollController } from "../scroll/controller";
12
+ import type { ScrollController } from "../plugins/scroll/controller";
13
13
  import type { Emitter } from "../events/emitter";
14
14
  import type { BuilderConfig, BuilderContext, BuilderState, ResolvedBuilderConfig } from "./types";
15
15
  /** Options for creating a BuilderContext */
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/builder/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAMjB,4CAA4C;AAC5C,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC1E,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,cAAc,EAAE,qBAAqB,CAAC;IACtC,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC3D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EAClE,SAAS,2BAA2B,CAAC,CAAC,CAAC,KACtC,cAAc,CAAC,CAAC,CA+SlB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/builder/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAMjB,4CAA4C;AAC5C,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC1E,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,cAAc,EAAE,qBAAqB,CAAC;IACtC,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC3D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EAClE,SAAS,2BAA2B,CAAC,CAAC,CAAC,KACtC,cAAc,CAAC,CAAC,CAmUlB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/builder/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,SAAS,EAOV,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACV,aAAa,EAKb,YAAY,EAGb,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqb1D,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,QAAQ,aAAa,CAAC,CAAC,CAAC,KACvB,YAAY,CAAC,CAAC,CAoEhB,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/builder/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,SAAS,EAOV,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACV,aAAa,EAKb,YAAY,EAEb,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqb1D,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,QAAQ,aAAa,CAAC,CAAC,CAAC,KACvB,YAAY,CAAC,CAAC,CAoEhB,CAAC"}
@@ -1 +1 @@
1
- var QJ=0,m=5,qJ=100,Oj=2,KJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},UJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>qJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Oj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],W=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(W)/C:0}return X.lastPosition=U,X.lastTime=$,X},Ij=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,W=$-1;while(K<W){let C=K+W+1>>>1;if(Y[C]<=Q)K=C;else W=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},YJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((W)=>{try{W(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},BJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},GJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let W=document.createElement("div");if(W.className=`${U}-items`,W.style.position="relative",Y)W.style.height="100%";else W.style.width="100%";return K.appendChild(W),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:W}},DJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},WJ=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},VJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},_J=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),W=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-W)/2;break;case"end":f=K-$+W;break;default:f=K}return Math.max(0,Math.min(f,C))},LJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,NJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},MJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(W){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(W.name,W),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,AJ(X,V,U,Y)}};return K};function AJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:W="vlist",ariaLabel:C,reverse:f=!1,scroll:Kj}=X,Sj=Kj?.wheel??!0,Fj=Kj?.wrap??!1,c=f,Rj=`${W}-${QJ++}`,Tj=Y,yj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,e=V.template,uj={overscan:K,classPrefix:W,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:Rj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),s=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(s.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(s.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(s.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(s.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true");if(s.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with reverse: true")}let fj=BJ(X.container),_=GJ(fj,W,C,$),k=YJ(),B=Q?[...Q]:[],N=Ij(Tj,B.length),jj=DJ(),R=_.viewport.clientHeight,l=_.viewport.clientWidth,a=!1,x=!1,O=0,p=null,r=null,S=KJ(0),Jj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},z={viewportState:{scrollTop:0,containerHeight:R,totalHeight:N.getTotalHeight(),actualHeight:N.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},v=new Map,Uj={selected:!1,focused:!1},xj=`${W}-item`,o="",P=new Map,Yj=()=>{P.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)P.set(J.id,j)}};Yj();let F=null,H=()=>F?F.getTotal():B.length,Bj=[],Gj=[],Dj=[],Wj=[],n=[],Vj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},I=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},Cj=(j=2)=>{let J=N.getTotalHeight();return O+R>=J-j},pj=!1,y,T,kj=(j,J,Z,q,D)=>{WJ(j,J,Z,q,D)},Xj=(j,J,Z,q,D)=>{return _J(j,J,Z,q,D)},_j=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Lj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},hj=(j,J)=>{let Z=jj.acquire();if(Z.className=xj,$){if(Z.style.width=`${N.getHeight(j)}px`,yj!=null)Z.style.height=`${yj}px`}else Z.style.height=`${N.getHeight(j)}px`;return Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${Rj}-item-${j}`,o=String(H()),Z.setAttribute("aria-setsize",o),Z.setAttribute("aria-posinset",String(j+1)),_j(Z,e(J,j,Uj)),Lj(Z,j),Z},i=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Nj=new Set,Mj=-1,gj=()=>{if(a)return;let j=H();if(kj(O,R,N,j,Jj),VJ(Jj,K,j,E),E.start===h.start&&E.end===h.end)return;let J=String(j),Z=J!==o;o=J;for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),jj.release(A),v.delete(G);let q=document.createDocumentFragment(),D=[];for(let G=E.start;G<=E.end;G++){let A=F?F.getItem(G):B[G];if(!A)continue;let b=v.get(G);if(b){let w=b.dataset.id,Qj=String(A.id);if(w!==Qj)if(_j(b,e(A,G,Uj)),b.dataset.id=Qj,$)b.style.width=`${N.getHeight(G)}px`;else b.style.height=`${N.getHeight(G)}px`;Lj(b,G);let qj=Nj.has(A.id),$J=G===Mj;if(b.classList.toggle(`${W}-item--selected`,qj),b.classList.toggle(`${W}-item--focused`,$J),b.ariaSelected=qj?"true":"false",Z)b.setAttribute("aria-setsize",o)}else{let w=hj(G,A),Qj=Nj.has(A.id),qj=G===Mj;if(Qj)w.classList.add(`${W}-item--selected`),w.ariaSelected="true";if(qj)w.classList.add(`${W}-item--focused`);q.appendChild(w),D.push({index:G,element:w})}}if(D.length>0){_.items.appendChild(q);for(let{index:G,element:A}of D)v.set(G,A)}h.start=E.start,h.end=E.end,z.lastRenderRange.start=E.start,z.lastRenderRange.end=E.end,z.viewportState.scrollTop=O,z.viewportState.visibleRange.start=Jj.start,z.viewportState.visibleRange.end=Jj.end,z.viewportState.renderRange.start=E.start,z.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},mj=()=>{h.start=-1,h.end=-1,y()};y=gj,T=mj;let t=()=>{if(a)return;let j=u(),J=j>=O?"down":"up";if(S=UJ(S,j),!_.root.classList.contains(`${W}--scrolling`))_.root.classList.add(`${W}--scrolling`);O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:S.velocity,reliable:S.sampleCount>=Oj});for(let Z=0;Z<Bj.length;Z++)Bj[Z](j,J);if(r)clearTimeout(r);r=setTimeout(()=>{_.root.classList.remove(`${W}--scrolling`),S.velocity=0,S.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Kj?.idleTimeout??150)},Zj=null,g=_.viewport;if(g.addEventListener("scroll",t,{passive:!0}),$&&Sj)Zj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",Zj);_.viewport.classList.add(`${W}-viewport--custom-scrollbar`);let zj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=F?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;k.emit("item:click",{item:D,index:q,event:j})}}}for(let q=0;q<Gj.length;q++)Gj[q](j)},cj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let D=F?.getItem(q)??B[q];if(D){if(D.__groupHeader)return;k.emit("item:dblclick",{item:D,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;J<Dj.length;J++)Dj[J](j)};_.items.addEventListener("click",zj),_.items.addEventListener("dblclick",cj),_.root.addEventListener("keydown",Pj);let Aj=!0,dj=()=>l,sj=()=>R,bj=new ResizeObserver((j)=>{if(a)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,D=$?q:Z;if(l=q,Math.abs(D-R)>1){if(R=D,z.viewportState.containerHeight=D,x)i(),y(),k.emit("resize",{height:Z,width:q})}if(x)for(let G=0;G<Wj.length;G++)Wj[G](q,Z)}});if(Aj)bj.observe(_.viewport);let M={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return uj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,D)=>{Nj=Z,Mj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);if(!q)return;q.classList.toggle(`${W}-item--selected`,J),q.classList.toggle(`${W}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return F},set dataManager(j){F=j},get scrollController(){return Ej},set scrollController(j){Ej=j},state:z,getContainerWidth(){return l},afterScroll:Bj,clickHandlers:Gj,keydownHandlers:Dj,resizeHandlers:Wj,contentSizeHandlers:n,destroyHandlers:Vj,methods:L,replaceTemplate(j){e=j},replaceRenderer(j){},replaceDataManager(j){F=j},replaceScrollController(j){Ej=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=F?F.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(F){let j=F.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=F.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return H()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:H(),containerHeight:R,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){H=j},rebuildHeightCache(j){N.rebuild(j??H())},setHeightConfig(j){N=Ij(j,H())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){kj=j},setScrollToPosFn(j){Xj=j},setPositionElementFn(j){Lj=j},setScrollFns(j,J){u=j,I=(Z)=>{J(Z),t()}},setScrollTarget(j){g.removeEventListener("scroll",t),g=j,g.addEventListener("scroll",t,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){dj=j.width,sj=j.height,l=j.width(),R=j.height(),z.viewportState.containerWidth=l,z.viewportState.containerHeight=R},disableViewportResize(){if(Aj)Aj=!1,bj.unobserve(_.viewport)}};F={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=P.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>P.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),D=Math.min(J,B.length-1);for(let G=q;G<=D;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let D=0;D<j.length;D++)B[J+D]=j[D]}if(Yj(),x){N.rebuild(H()),i(),M.updateCompressionMode();for(let q=0;q<n.length;q++)n[q]();T()}},updateItem:(j,J)=>{let Z=P.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)P.delete(j),P.set(J.id,Z);let D=v.get(Z);if(D)_j(D,e(B[Z],Z,Uj)),D.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=P.get(j);if(J===void 0)return!1;if(B.splice(J,1),Yj(),x){N.rebuild(H()),i(),M.updateCompressionMode();for(let Z=0;Z<n.length;Z++)n[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],P.clear()},reset:()=>{if(B=[],P.clear(),x)N.rebuild(0),i(),T()}};let Ej={getScrollTop:()=>u(),scrollTo:(j)=>{I(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;I(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>Cj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-R);return J>0?O/J:0},getVelocity:()=>S.velocity,isTracking:()=>S.sampleCount>=Oj,isScrolling:()=>_.root.classList.contains(`${W}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>pj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{R=j},destroy:()=>{}},Hj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=Hj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);Hj.set(J,j.name)}for(let j of d)j.setup(M);if(x=!0,M.state.isInitialized=!0,i(),y(),c&&B.length>0){let j=Xj(B.length-1,N,R,B.length,"end");I(j),O=j,y()}let lj=(j)=>{M.dataManager.setItems(j,0,j.length)},aj=c?(j)=>{let J=Cj(2),Z=B.length;if(M.dataManager.setItems(j,Z),J&&B.length>0){let q=Xj(B.length-1,N,R,B.length,"end");I(q),O=q,y()}}:(j)=>{let J=B.length;M.dataManager.setItems(j,J)},rj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)I(J+G),O=J+G}:(j)=>{let J=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...J],0)},oj=(j,J)=>{M.dataManager.updateItem(j,J)},nj=(j)=>{M.dataManager.removeItem(j)},ij=async()=>{if(M.dataManager.reload)await M.dataManager.reload()},$j=()=>{if(p!==null)cancelAnimationFrame(p),p=null},tj=(j,J,Z)=>{if($j(),Math.abs(J-j)<1){I(J),O=J,y();return}let q=performance.now(),D=(G)=>{let A=G-q,b=Math.min(A/Z,1),w=j+(J-j)*LJ(b);if(I(w),O=w,y(),b<1)p=requestAnimationFrame(D);else p=null};p=requestAnimationFrame(D)},wj=(j,J)=>{let{align:Z,behavior:q,duration:D}=NJ(J),G=H(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let b=Xj(A,N,R,G,Z);if(q==="smooth")tj(u(),b,D);else $j(),I(b)},ej=(j,J)=>{let Z=P.get(j)??M.dataManager.getIndexById(j);if(Z>=0)wj(Z,J)},jJ=()=>u(),JJ=(j,J)=>{return k.on(j,J)},XJ=(j,J)=>{k.off(j,J)},ZJ=()=>{if(a)return;if(a=!0,M.state.isDestroyed=!0,_.items.removeEventListener("click",zj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",t),bj.disconnect(),Zj)_.viewport.removeEventListener("wheel",Zj);if(r)clearTimeout(r);for(let j=0;j<Vj.length;j++)Vj[j]();for(let j of d)if(j.destroy)j.destroy();$j();for(let[,j]of v)j.remove(),jj.release(j);v.clear(),jj.clear(),k.clear(),_.root.remove()},vj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return H()},setItems:L.has("setItems")?L.get("setItems"):lj,appendItems:L.has("appendItems")?L.get("appendItems"):aj,prependItems:L.has("prependItems")?L.get("prependItems"):rj,updateItem:L.has("updateItem")?L.get("updateItem"):oj,removeItem:L.has("removeItem")?L.get("removeItem"):nj,reload:L.has("reload")?L.get("reload"):ij,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):wj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):ej,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):$j,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):jJ,on:JJ,off:XJ,destroy:ZJ};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;vj[j]=J}return vj}export{MJ as vlist};
1
+ var QJ=0,m=5,qJ=100,Oj=2,KJ=(X=0)=>{let U=Array(m);for(let $=0;$<m;$++)U[$]={position:0,time:0};return{velocity:0,lastPosition:X,lastTime:performance.now(),samples:U,sampleIndex:0,sampleCount:0}},UJ=(X,U)=>{let $=performance.now(),Y=$-X.lastTime;if(Y===0)return X;if(Y>qJ){X.sampleCount=0,X.sampleIndex=0,X.velocity=0;let Q=X.samples[0];return Q.position=U,Q.time=$,X.sampleIndex=1,X.sampleCount=1,X.lastPosition=U,X.lastTime=$,X}let V=X.samples[X.sampleIndex];if(V.position=U,V.time=$,X.sampleIndex=(X.sampleIndex+1)%m,X.sampleCount=Math.min(X.sampleCount+1,m),X.sampleCount>=Oj){let Q=(X.sampleIndex-X.sampleCount+m)%m,K=X.samples[Q],D=U-K.position,C=$-K.time;X.velocity=C>0?Math.abs(D)/C:0}return X.lastPosition=U,X.lastTime=$,X},Sj=(X,U)=>{if(typeof X==="number"){let Q=U;return{getOffset:(K)=>K*X,getHeight:()=>X,indexAtOffset:(K)=>{if(Q===0||X===0)return 0;return Math.max(0,Math.min(Math.floor(K/X),Q-1))},getTotalHeight:()=>Q*X,getTotal:()=>Q,rebuild:(K)=>{Q=K},isVariable:()=>!1}}let $=U,Y=new Float64Array(0),V=(Q)=>{$=Q,Y=new Float64Array(Q+1),Y[0]=0;for(let K=0;K<Q;K++)Y[K+1]=Y[K]+X(K)};return V(U),{getOffset:(Q)=>{if(Q<=0)return 0;if(Q>=$)return Y[$];return Y[Q]},getHeight:(Q)=>X(Q),indexAtOffset:(Q)=>{if($===0)return 0;if(Q<=0)return 0;if(Q>=Y[$])return $-1;let K=0,D=$-1;while(K<D){let C=K+D+1>>>1;if(Y[C]<=Q)K=C;else D=C-1}return K},getTotalHeight:()=>Y[$]??0,getTotal:()=>$,rebuild:(Q)=>V(Q),isVariable:()=>!0}},YJ=()=>{let X={},U=(Q,K)=>{if(!X[Q])X[Q]=new Set;return X[Q].add(K),()=>$(Q,K)},$=(Q,K)=>{X[Q]?.delete(K)};return{on:U,off:$,emit:(Q,K)=>{X[Q]?.forEach((D)=>{try{D(K)}catch(C){console.error(`[vlist] Error in "${Q}" handler:`,C)}})},clear:()=>{for(let Q in X)delete X[Q]}}},BJ=(X)=>{if(typeof X==="string"){let U=document.querySelector(X);if(!U)throw Error(`[vlist/builder] Container not found: ${X}`);return U}return X},GJ=(X,U,$,Y)=>{let V=document.createElement("div");if(V.className=U,Y)V.classList.add(`${U}--horizontal`);if(V.setAttribute("role","listbox"),V.setAttribute("tabindex","0"),$)V.setAttribute("aria-label",$);if(Y)V.setAttribute("aria-orientation","horizontal");let Q=document.createElement("div");if(Q.className=`${U}-viewport`,Y)Q.style.overflowX="auto",Q.style.overflowY="hidden";else Q.style.overflow="auto";Q.style.height="100%",Q.style.width="100%";let K=document.createElement("div");if(K.className=`${U}-content`,K.style.position="relative",Y)K.style.height="100%";else K.style.width="100%";let D=document.createElement("div");if(D.className=`${U}-items`,D.style.position="relative",Y)D.style.height="100%";else D.style.width="100%";return K.appendChild(D),Q.appendChild(K),V.appendChild(Q),X.appendChild(V),{root:V,viewport:Q,content:K,items:D}},WJ=(X=100)=>{let U=[];return{acquire:()=>{let $=U.pop();if($)return $;let Y=document.createElement("div");return Y.setAttribute("role","option"),Y},release:($)=>{if(U.length<X)$.className="",$.textContent="",$.removeAttribute("style"),$.removeAttribute("data-index"),$.removeAttribute("data-id"),U.push($)},clear:()=>{U.length=0}}},DJ=(X,U,$,Y,V)=>{if(Y===0||U===0){V.start=0,V.end=0;return}let Q=$.indexAtOffset(X),K=$.indexAtOffset(X+U);if(K<Y-1)K++;V.start=Math.max(0,Q),V.end=Math.min(Y-1,Math.max(0,K))},VJ=(X,U,$,Y)=>{if($===0){Y.start=0,Y.end=0;return}Y.start=Math.max(0,X.start-U),Y.end=Math.min($-1,X.end+U)},_J=(X,U,$,Y,V)=>{if(Y===0)return 0;let Q=Math.max(0,Math.min(X,Y-1)),K=U.getOffset(Q),D=U.getHeight(Q),C=Math.max(0,U.getTotalHeight()-$),f;switch(V){case"center":f=K-($-D)/2;break;case"end":f=K-$+D;break;default:f=K}return Math.max(0,Math.min(f,C))},LJ=(X)=>X<0.5?2*X*X:-1+(4-2*X)*X,NJ=(X)=>{if(typeof X==="string")return{align:X,behavior:"auto",duration:300};if(X&&typeof X==="object")return{align:X.align??"start",behavior:X.behavior??"auto",duration:X.duration??300};return{align:"start",behavior:"auto",duration:300}},MJ=(X)=>{if(!X.container)throw Error("[vlist/builder] Container is required");if(!X.item)throw Error("[vlist/builder] item configuration is required");let U=X.direction==="horizontal",$=U?"width":"height",Y=U?X.item.width:X.item.height;if(Y==null)throw Error(`[vlist/builder] item.${$} is required${U?" when direction is 'horizontal'":""}`);if(typeof Y==="number"&&Y<=0)throw Error(`[vlist/builder] item.${$} must be a positive number`);if(typeof Y!=="number"&&typeof Y!=="function")throw Error(`[vlist/builder] item.${$} must be a number or a function (index) => number`);if(!X.item.template)throw Error("[vlist/builder] item.template is required");if(U&&X.reverse)throw Error("[vlist/builder] horizontal direction cannot be combined with reverse mode");let V=new Map,Q=!1,K={use(D){if(Q)throw Error("[vlist/builder] Cannot call .use() after .build()");return V.set(D.name,D),K},build(){if(Q)throw Error("[vlist/builder] .build() can only be called once");return Q=!0,AJ(X,V,U,Y)}};return K};function AJ(X,U,$,Y){let{item:V,items:Q,overscan:K=3,classPrefix:D="vlist",ariaLabel:C,reverse:f=!1,scroll:Kj}=X,Ij=Kj?.wheel??!0,Fj=Kj?.wrap??!1,c=f,Rj=`${D}-${QJ++}`,Tj=Y,yj=$?typeof V.height==="number"?V.height:void 0:typeof V.width==="number"?V.width:void 0,t=V.template,uj={overscan:K,classPrefix:D,reverse:c,wrap:Fj,horizontal:$,ariaIdPrefix:Rj},d=Array.from(U.values()).sort((j,J)=>(j.priority??50)-(J.priority??50)),s=new Set(d.map((j)=>j.name));for(let j of d)if(j.conflicts){for(let J of j.conflicts)if(s.has(J))throw Error(`[vlist/builder] ${j.name} and ${J} cannot be combined`)}if($){if(s.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(s.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with direction: 'horizontal'")}if(c){if(s.has("withGrid"))throw Error("[vlist/builder] withGrid cannot be used with reverse: true");if(s.has("withGroups"))throw Error("[vlist/builder] withGroups cannot be used with reverse: true")}let fj=BJ(X.container),_=GJ(fj,D,C,$),k=YJ(),B=Q?[...Q]:[],N=Sj(Tj,B.length),e=WJ(),R=_.viewport.clientHeight,jj=_.viewport.clientWidth,l=!1,x=!1,O=0,p=null,a=null,I=KJ(0),Jj={start:0,end:0},E={start:0,end:0},h={start:-1,end:-1},H={viewportState:{scrollTop:0,containerHeight:R,totalHeight:N.getTotalHeight(),actualHeight:N.getTotalHeight(),isCompressed:!1,compressionRatio:1,visibleRange:{start:0,end:0},renderRange:{start:0,end:0}},lastRenderRange:{start:-1,end:-1},isInitialized:!1,isDestroyed:!1,cachedCompression:null},v=new Map,Uj={selected:!1,focused:!1},xj=`${D}-item`,r="",z=new Map,Yj=()=>{z.clear();for(let j=0;j<B.length;j++){let J=B[j];if(J)z.set(J.id,j)}};Yj();let F=null,P=()=>F?F.getTotal():B.length,Bj=[],Gj=[],Wj=[],Dj=[],o=[],Vj=[],L=new Map,u=()=>{return $?_.viewport.scrollLeft:_.viewport.scrollTop},S=(j)=>{if($)_.viewport.scrollLeft=j;else _.viewport.scrollTop=j},Cj=(j=2)=>{let J=N.getTotalHeight();return O+R>=J-j},pj=!1,y,T,kj=(j,J,Z,q,W)=>{DJ(j,J,Z,q,W)},Xj=(j,J,Z,q,W)=>{return _J(j,J,Z,q,W)},_j=(j,J)=>{if(typeof J==="string")j.innerHTML=J;else j.replaceChildren(J)},Lj=(j,J)=>{let Z=Math.round(N.getOffset(J));if($)j.style.transform=`translateX(${Z}px)`;else j.style.transform=`translateY(${Z}px)`},hj=(j,J)=>{let Z=e.acquire();if(Z.className=xj,$){if(Z.style.width=`${N.getHeight(j)}px`,yj!=null)Z.style.height=`${yj}px`}else Z.style.height=`${N.getHeight(j)}px`;return Z.dataset.index=String(j),Z.dataset.id=String(J.id),Z.ariaSelected="false",Z.id=`${Rj}-item-${j}`,r=String(P()),Z.setAttribute("aria-setsize",r),Z.setAttribute("aria-posinset",String(j+1)),_j(Z,t(J,j,Uj)),Lj(Z,j),Z},n=()=>{let j=`${N.getTotalHeight()}px`;if($)_.content.style.width=j;else _.content.style.height=j},Nj=new Set,Mj=-1,gj=()=>{if(l)return;let j=P();if(kj(O,R,N,j,Jj),VJ(Jj,K,j,E),E.start===h.start&&E.end===h.end)return;let J=String(j),Z=J!==r;r=J;for(let[G,A]of v)if(G<E.start||G>E.end)A.remove(),e.release(A),v.delete(G);let q=document.createDocumentFragment(),W=[];for(let G=E.start;G<=E.end;G++){let A=F?F.getItem(G):B[G];if(!A)continue;let b=v.get(G);if(b){let w=b.dataset.id,Qj=String(A.id);if(w!==Qj)if(_j(b,t(A,G,Uj)),b.dataset.id=Qj,$)b.style.width=`${N.getHeight(G)}px`;else b.style.height=`${N.getHeight(G)}px`;Lj(b,G);let qj=Nj.has(A.id),$J=G===Mj;if(b.classList.toggle(`${D}-item--selected`,qj),b.classList.toggle(`${D}-item--focused`,$J),b.ariaSelected=qj?"true":"false",Z)b.setAttribute("aria-setsize",r)}else{let w=hj(G,A),Qj=Nj.has(A.id),qj=G===Mj;if(Qj)w.classList.add(`${D}-item--selected`),w.ariaSelected="true";if(qj)w.classList.add(`${D}-item--focused`);q.appendChild(w),W.push({index:G,element:w})}}if(W.length>0){_.items.appendChild(q);for(let{index:G,element:A}of W)v.set(G,A)}h.start=E.start,h.end=E.end,H.lastRenderRange.start=E.start,H.lastRenderRange.end=E.end,H.viewportState.scrollTop=O,H.viewportState.visibleRange.start=Jj.start,H.viewportState.visibleRange.end=Jj.end,H.viewportState.renderRange.start=E.start,H.viewportState.renderRange.end=E.end,k.emit("range:change",{range:{start:E.start,end:E.end}})},mj=()=>{h.start=-1,h.end=-1,y()};y=gj,T=mj;let i=()=>{if(l)return;let j=u(),J=j>=O?"down":"up";if(I=UJ(I,j),!_.root.classList.contains(`${D}--scrolling`))_.root.classList.add(`${D}--scrolling`);O=j,y(),k.emit("scroll",{scrollTop:j,direction:J}),k.emit("velocity:change",{velocity:I.velocity,reliable:I.sampleCount>=Oj});for(let Z=0;Z<Bj.length;Z++)Bj[Z](j,J);if(a)clearTimeout(a);a=setTimeout(()=>{_.root.classList.remove(`${D}--scrolling`),I.velocity=0,I.sampleCount=0,k.emit("velocity:change",{velocity:0,reliable:!1})},Kj?.idleTimeout??150)},Zj=null,g=_.viewport;if(g.addEventListener("scroll",i,{passive:!0}),$&&Ij)Zj=(j)=>{if(j.deltaX)return;j.preventDefault(),_.viewport.scrollLeft+=j.deltaY},_.viewport.addEventListener("wheel",Zj);_.viewport.classList.add(`${D}-viewport--custom-scrollbar`);let zj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let W=F?.getItem(q)??B[q];if(W){if(W.__groupHeader)return;k.emit("item:click",{item:W,index:q,event:j})}}}for(let q=0;q<Gj.length;q++)Gj[q](j)},cj=(j)=>{let Z=j.target.closest("[data-index]");if(Z){let q=parseInt(Z.dataset.index??"-1",10);if(q>=0){let W=F?.getItem(q)??B[q];if(W){if(W.__groupHeader)return;k.emit("item:dblclick",{item:W,index:q,event:j})}}}},Pj=(j)=>{for(let J=0;J<Wj.length;J++)Wj[J](j)};_.items.addEventListener("click",zj),_.items.addEventListener("dblclick",cj),_.root.addEventListener("keydown",Pj);let Aj=!0,dj=()=>jj,sj=()=>R,bj=new ResizeObserver((j)=>{if(l)return;for(let J of j){let Z=J.contentRect.height,q=J.contentRect.width,W=$?q:Z;if(jj=q,Math.abs(W-R)>1){if(R=W,H.viewportState.containerHeight=W,x)n(),y(),k.emit("resize",{height:Z,width:q})}if(x)for(let G=0;G<Dj.length;G++)Dj[G](q,Z)}});if(Aj)bj.observe(_.viewport);let M={get dom(){return _},get heightCache(){return N},get emitter(){return k},get config(){return uj},get rawConfig(){return X},get renderer(){return{render:(j,J,Z,q,W)=>{Nj=Z,Mj=q,T()},updateItemClasses:(j,J,Z)=>{let q=v.get(j);if(!q)return;q.classList.toggle(`${D}-item--selected`,J),q.classList.toggle(`${D}-item--focused`,Z),q.ariaSelected=J?"true":"false"},updatePositions:()=>{},updateItem:()=>{},getElement:(j)=>v.get(j)??null,clear:()=>{},destroy:()=>{}}},set renderer(j){},get dataManager(){return F},set dataManager(j){F=j},get scrollController(){return Ej},set scrollController(j){Ej=j},state:H,getContainerWidth(){return jj},afterScroll:Bj,clickHandlers:Gj,keydownHandlers:Wj,resizeHandlers:Dj,contentSizeHandlers:o,destroyHandlers:Vj,methods:L,replaceTemplate(j){t=j},replaceRenderer(j){},replaceDataManager(j){F=j},replaceScrollController(j){Ej=j},getItemsForRange(j){let J=[];for(let Z=j.start;Z<=j.end;Z++){let q=F?F.getItem(Z):B[Z];if(q)J.push(q)}return J},getAllLoadedItems(){if(F){let j=F.getTotal(),J=[];for(let Z=0;Z<j;Z++){let q=F.getItem(Z);if(q)J.push(q)}return J}return[...B]},getVirtualTotal(){return P()},getCachedCompression(){return{isCompressed:!1,actualHeight:N.getTotalHeight(),virtualHeight:N.getTotalHeight(),ratio:1}},getCompressionContext(){return{scrollTop:O,totalItems:P(),containerHeight:R,rangeStart:E.start}},renderIfNeeded(){y()},forceRender(){T()},getRenderFns(){return{renderIfNeeded:y,forceRender:T}},setRenderFns(j,J){y=j,T=J},setVirtualTotalFn(j){P=j},rebuildHeightCache(j){N.rebuild(j??P())},setHeightConfig(j){N=Sj(j,P())},updateContentSize(j){let J=`${j}px`;if($)_.content.style.width=J;else _.content.style.height=J},updateCompressionMode(){},setVisibleRangeFn(j){kj=j},setScrollToPosFn(j){Xj=j},setPositionElementFn(j){Lj=j},setScrollFns(j,J){u=j,S=(Z)=>{J(Z),i()}},setScrollTarget(j){g.removeEventListener("scroll",i),g=j,g.addEventListener("scroll",i,{passive:!0})},getScrollTarget(){return g},setContainerDimensions(j){dj=j.width,sj=j.height,jj=j.width(),R=j.height(),H.viewportState.containerHeight=R},disableViewportResize(){if(Aj)Aj=!1,bj.unobserve(_.viewport)}};F={getState:()=>({total:B.length,cached:B.length,isLoading:!1,pendingRanges:[],error:void 0,hasMore:!1,cursor:void 0}),getTotal:()=>B.length,getCached:()=>B.length,getIsLoading:()=>!1,getHasMore:()=>!1,getStorage:()=>null,getPlaceholders:()=>null,getItem:(j)=>B[j],getItemById:(j)=>{let J=z.get(j);return J!==void 0?B[J]:void 0},getIndexById:(j)=>z.get(j)??-1,isItemLoaded:(j)=>j>=0&&j<B.length&&B[j]!==void 0,getItemsInRange:(j,J)=>{let Z=[],q=Math.max(0,j),W=Math.min(J,B.length-1);for(let G=q;G<=W;G++)Z.push(B[G]);return Z},setTotal:(j)=>{},setItems:(j,J=0,Z)=>{if(J===0&&(Z!==void 0||B.length===0))B=[...j];else{let q=J+j.length;if(B.length<q)B.length=q;for(let W=0;W<j.length;W++)B[J+W]=j[W]}if(Yj(),x){N.rebuild(P()),n(),M.updateCompressionMode();for(let q=0;q<o.length;q++)o[q]();T()}},updateItem:(j,J)=>{let Z=z.get(j);if(Z===void 0)return!1;let q=B[Z];if(!q)return!1;if(B[Z]={...q,...J},J.id!==void 0&&J.id!==j)z.delete(j),z.set(J.id,Z);let W=v.get(Z);if(W)_j(W,t(B[Z],Z,Uj)),W.dataset.id=String(B[Z].id);return!0},removeItem:(j)=>{let J=z.get(j);if(J===void 0)return!1;if(B.splice(J,1),Yj(),x){N.rebuild(P()),n(),M.updateCompressionMode();for(let Z=0;Z<o.length;Z++)o[Z]();T()}return!0},loadRange:async()=>{},ensureRange:async()=>{},loadInitial:async()=>{},loadMore:async()=>!1,reload:async()=>{},evictDistant:()=>{},clear:()=>{B=[],z.clear()},reset:()=>{if(B=[],z.clear(),x)N.rebuild(0),n(),T()}};let Ej={getScrollTop:()=>u(),scrollTo:(j)=>{S(j),O=j,y()},scrollBy:(j)=>{let J=u()+j;S(J),O=J,y()},isAtTop:()=>O<=2,isAtBottom:(j=2)=>Cj(j),getScrollPercentage:()=>{let j=N.getTotalHeight(),J=Math.max(0,j-R);return J>0?O/J:0},getVelocity:()=>I.velocity,isTracking:()=>I.sampleCount>=Oj,isScrolling:()=>_.root.classList.contains(`${D}--scrolling`),updateConfig:()=>{},enableCompression:()=>{},disableCompression:()=>{},isCompressed:()=>pj,isWindowMode:()=>!1,updateContainerHeight:(j)=>{R=j},destroy:()=>{}},Hj=new Map;for(let j of d)if(j.methods)for(let J of j.methods){let Z=Hj.get(J);if(Z)throw Error(`[vlist/builder] Method "${J}" is registered by both "${Z}" and "${j.name}"`);Hj.set(J,j.name)}for(let j of d)j.setup(M);if(x=!0,M.state.isInitialized=!0,n(),y(),c&&B.length>0){let j=Xj(B.length-1,N,R,B.length,"end");S(j),O=j,y()}let lj=(j)=>{M.dataManager.setItems(j,0,j.length)},aj=c?(j)=>{let J=Cj(2),Z=B.length;if(M.dataManager.setItems(j,Z),J&&B.length>0){let q=Xj(B.length-1,N,R,B.length,"end");S(q),O=q,y()}}:(j)=>{let J=B.length;M.dataManager.setItems(j,J)},rj=c?(j)=>{let J=u(),Z=N.getTotalHeight(),q=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...q],0);let G=N.getTotalHeight()-Z;if(G>0)S(J+G),O=J+G}:(j)=>{let J=[...B];M.dataManager.clear(),M.dataManager.setItems([...j,...J],0)},oj=(j,J)=>{M.dataManager.updateItem(j,J)},nj=(j)=>{M.dataManager.removeItem(j)},ij=async()=>{if(M.dataManager.reload)await M.dataManager.reload()},$j=()=>{if(p!==null)cancelAnimationFrame(p),p=null},tj=(j,J,Z)=>{if($j(),Math.abs(J-j)<1){S(J),O=J,y();return}let q=performance.now(),W=(G)=>{let A=G-q,b=Math.min(A/Z,1),w=j+(J-j)*LJ(b);if(S(w),O=w,y(),b<1)p=requestAnimationFrame(W);else p=null};p=requestAnimationFrame(W)},wj=(j,J)=>{let{align:Z,behavior:q,duration:W}=NJ(J),G=P(),A=j;if(Fj&&G>0)A=(A%G+G)%G;let b=Xj(A,N,R,G,Z);if(q==="smooth")tj(u(),b,W);else $j(),S(b)},ej=(j,J)=>{let Z=z.get(j)??M.dataManager.getIndexById(j);if(Z>=0)wj(Z,J)},jJ=()=>u(),JJ=(j,J)=>{return k.on(j,J)},XJ=(j,J)=>{k.off(j,J)},ZJ=()=>{if(l)return;if(l=!0,M.state.isDestroyed=!0,_.items.removeEventListener("click",zj),_.root.removeEventListener("keydown",Pj),g.removeEventListener("scroll",i),bj.disconnect(),Zj)_.viewport.removeEventListener("wheel",Zj);if(a)clearTimeout(a);for(let j=0;j<Vj.length;j++)Vj[j]();for(let j of d)if(j.destroy)j.destroy();$j();for(let[,j]of v)j.remove(),e.release(j);v.clear(),e.clear(),k.clear(),_.root.remove()},vj={get element(){return _.root},get items(){if(L.has("_getItems"))return L.get("_getItems")();return B},get total(){if(L.has("_getTotal"))return L.get("_getTotal")();return P()},setItems:L.has("setItems")?L.get("setItems"):lj,appendItems:L.has("appendItems")?L.get("appendItems"):aj,prependItems:L.has("prependItems")?L.get("prependItems"):rj,updateItem:L.has("updateItem")?L.get("updateItem"):oj,removeItem:L.has("removeItem")?L.get("removeItem"):nj,reload:L.has("reload")?L.get("reload"):ij,scrollToIndex:L.has("scrollToIndex")?L.get("scrollToIndex"):wj,scrollToItem:L.has("scrollToItem")?L.get("scrollToItem"):ej,cancelScroll:L.has("cancelScroll")?L.get("cancelScroll"):$j,getScrollPosition:L.has("getScrollPosition")?L.get("getScrollPosition"):jJ,on:JJ,off:XJ,destroy:ZJ};for(let[j,J]of L){if(j==="setItems"||j==="appendItems"||j==="prependItems"||j==="updateItem"||j==="removeItem"||j==="reload"||j==="scrollToIndex"||j==="scrollToItem"||j==="cancelScroll"||j==="getScrollPosition")continue;vj[j]=J}return vj}export{MJ as vlist};
@@ -2,11 +2,11 @@
2
2
  * vlist/builder - Types
3
3
  * Plugin interface, builder config, builder context, and return types
4
4
  */
5
- import type { VListItem, VListEvents, ItemConfig, Range, ViewportState, EventHandler, Unsubscribe, ScrollToOptions, ScrollSnapshot } from "../types";
5
+ import type { VListItem, VListEvents, ItemConfig, ItemTemplate, Range, ViewportState, EventHandler, Unsubscribe, ScrollToOptions, ScrollSnapshot } from "../types";
6
6
  import type { DOMStructure, Renderer, HeightCache, CompressionContext } from "../render";
7
7
  import type { CompressionState } from "../render/virtual";
8
8
  import type { SimpleDataManager } from "./data";
9
- import type { ScrollController } from "../scroll/controller";
9
+ import type { ScrollController } from "../plugins/scroll/controller";
10
10
  import type { Emitter } from "../events";
11
11
  /** Configuration accepted by the builder's vlist() factory */
12
12
  export interface BuilderConfig<T extends VListItem = VListItem> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- var z=16000000;var Ny=(j,K,J,y)=>{if(y===0)return 0;if(!j.isVariable())return Math.ceil(J/j.getHeight(0));let N=0,Q=0,q=K;while(q<y&&Q<J)Q+=j.getHeight(q),N++,q++;return Math.max(1,N)},n=(j,K,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.floor(K/j.getHeight(0));let y=0,N=0;for(let Q=J-1;Q>=0;Q--){let q=j.getHeight(Q);if(N+q>K)break;N+=q,y++}return Math.max(y,1)},l=(j,K,J)=>{if(J===0)return 0;let y=Math.floor(K),N=K-y,Q=Math.max(0,Math.min(y,J-1));return j.getOffset(Q)+N*j.getHeight(Q)};var P=(j,K)=>{let J=K.getTotalHeight(),y=J>z,N=y?z:J,Q=J>0?N/J:1;return{isCompressed:y,actualHeight:J,virtualHeight:N,ratio:Q}},r=(j,K,J,y,N,Q)=>{if(y===0||K===0)return Q.start=0,Q.end=-1,Q;if(!N.isCompressed){let X=J.indexAtOffset(j),W=J.indexAtOffset(j+K);if(W<y-1)W++;return Q.start=Math.max(0,X),Q.end=Math.min(y-1,Math.max(0,W)),Q}let{virtualHeight:q}=N,V=j/q*y,_=Math.floor(V),M=Ny(J,Math.max(0,_),K,y),G=Math.ceil(V)+M,U=q-K-j;if(U<=K&&U>=-1){let X=n(J,K,y),W=Math.max(0,y-X),$=Math.max(0,Math.min(1,1-U/K));_=Math.floor(_+(W-_)*$),G=U<=1?y-1:Math.min(y-1,_+M)}return Q.start=Math.max(0,_),Q.end=Math.min(y-1,Math.max(0,G)),Q},Gy=(j,K,J,y)=>{if(J===0)return y.start=0,y.end=-1,y;return y.start=Math.max(0,j.start-K),y.end=Math.min(J-1,j.end+K),y},c=(j,K,J,y,N,Q,q)=>{if(!Q.isCompressed||y===0)return J.getOffset(j);let{virtualHeight:O}=Q,V=O-N,_=V-K;if(_<=N&&_>=-1){if(K>=V-1){let F=J.getTotalHeight()-J.getOffset(j);return N-F}let Y=n(J,N,y),U=Math.max(0,y-Y),W=K/O*y,$=Math.max(0,Math.min(1,1-_/N)),B=J.getOffset(j)-J.getOffset(U),A=J.getOffset(j)-l(J,W,y);return A+(B-A)*$}let G=K/O*y;return J.getOffset(j)-l(J,G,y)},a=(j,K,J,y,N,Q="start")=>{if(y===0)return 0;let q;if(N.isCompressed){if(Q==="end"&&j===y-1)return Math.max(0,N.virtualHeight-J);q=j/y*N.virtualHeight}else q=K.getOffset(j);let O=K.getHeight(j);switch(Q){case"center":q-=(J-O)/2;break;case"end":q-=J-O;break}let V=N.virtualHeight-J;return Math.max(0,Math.min(q,V))},Uy=(j,K,J,y)=>{if(J===0)return 0;if(y.isCompressed){let N=j/y.virtualHeight;return Math.floor(N*J)}return K.indexAtOffset(j)},Dy=(j,K)=>{if(typeof K==="number")return j*K>z;return K.getTotalHeight()>z},_y=(j)=>{if(j<=0)return 0;return Math.floor(z/j)},Ey=(j,K)=>{let J=P(j,K);if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(J.ratio*100).toFixed(1)}% (${j} items, ${(J.actualHeight/1e6).toFixed(1)}M px → ${(J.virtualHeight/1e6).toFixed(1)}M px virtual)`};var i=(j,K,J={},y="vlist",N=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:O=30,showOnHover:V=!0,hoverZoneWidth:_=16,showOnViewportEnter:M=!0}=J,G=0,Y=0,U=0,X=0,W=!1,$=!1,B=0,A=0,F=0,f=null,T=!1,Z=null,C=null,Qy=N?"width":"height",o=N?"translateX":"translateY",u=N?(E)=>E.clientX:(E)=>E.clientY,Yy=N?"left":"top",D=document.createElement("div"),R=document.createElement("div"),L=V?document.createElement("div"):null,$y=()=>{if(D.className=`${y}-scrollbar`,R.className=`${y}-scrollbar-thumb`,N)D.classList.add(`${y}-scrollbar--horizontal`);if(D.appendChild(R),j.appendChild(D),L){if(L.className=`${y}-scrollbar-hover`,N)L.classList.add(`${y}-scrollbar-hover--horizontal`),L.style.height=`${_}px`;else L.style.width=`${_}px`;j.appendChild(L)}},S=()=>{if(f)clearTimeout(f),f=null},v=()=>{if(!Q)return;S(),f=setTimeout(d,q)},H=()=>{if(G<=Y)return;if(S(),!T)D.classList.add(`${y}-scrollbar--visible`),T=!0;if(Q&&!W&&!$)v()},d=()=>{if(W||$)return;D.classList.remove(`${y}-scrollbar--visible`),T=!1},Wy=(E,w)=>{G=E,Y=w;let b=G>Y;if(D.style.display=b?"":"none",!b){d();return}let k=Y/G;U=Math.max(O,k*Y),R.style[Qy]=`${U}px`,X=Y-U,e(F)},e=(E)=>{if(F=E,G<=Y||X<=0)return;let w=G-Y,k=Math.min(1,Math.max(0,E/w))*X;R.style.transform=`${o}(${k}px)`},t=(E)=>{if(E.target===R)return;let w=D.getBoundingClientRect(),m=u(E)-w[Yy]-U/2,Ky=Math.max(0,Math.min(m,X))/X,h=G-Y,qy=Ky*h;K(qy),H()},yy=(E)=>{E.preventDefault(),E.stopPropagation(),W=!0,B=u(E),A=F,S(),D.classList.add(`${y}-scrollbar--dragging`),document.addEventListener("mousemove",x),document.addEventListener("mouseup",g)},x=(E)=>{if(!W)return;let w=u(E)-B,b=X>0?w/X:0,k=G-Y,m=b*k,s=Math.max(0,Math.min(A+m,k)),h=s/k*X;if(R.style.transform=`${o}(${h}px)`,C=s,Z===null)Z=requestAnimationFrame(()=>{if(C!==null)K(C);Z=null})},g=()=>{if(W=!1,Z!==null)cancelAnimationFrame(Z),Z=null;if(C!==null)K(C),C=null;if(D.classList.remove(`${y}-scrollbar--dragging`),Q&&!$)v();document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g)},jy=()=>{if(M)H()},Jy=()=>{if(!W){if($=!1,Q)v()}},p=()=>{$=!0,S(),H()},I=()=>{if($=!1,!W&&Q)v()},Xy=()=>{if(S(),Z!==null)cancelAnimationFrame(Z),Z=null;if(D.removeEventListener("click",t),D.removeEventListener("mouseenter",p),D.removeEventListener("mouseleave",I),R.removeEventListener("mousedown",yy),j.removeEventListener("mouseenter",jy),j.removeEventListener("mouseleave",Jy),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g),L){if(L.removeEventListener("mouseenter",p),L.removeEventListener("mouseleave",I),L.parentNode)L.parentNode.removeChild(L)}if(D.parentNode)D.parentNode.removeChild(D)};if($y(),D.addEventListener("click",t),D.addEventListener("mouseenter",p),D.addEventListener("mouseleave",I),R.addEventListener("mousedown",yy),j.addEventListener("mouseenter",jy),j.addEventListener("mouseleave",Jy),L)L.addEventListener("mouseenter",p),L.addEventListener("mouseleave",I);return{show:H,hide:d,updateBounds:Wy,updatePosition:e,isVisible:()=>T,destroy:Xy}};var Ly=()=>{let j=null,K=0,J=!1;return{name:"withCompression",priority:20,setup(y){let{dom:N,config:Q}=y,{classPrefix:q,horizontal:O}=Q,V=y.updateCompressionMode.bind(y),_=()=>{let G=y.getVirtualTotal(),Y=P(G,y.heightCache);if(Y.isCompressed&&!J){J=!0,y.scrollController.enableCompression(Y),y.updateContentSize(Y.virtualHeight),y.setScrollFns(()=>K,($)=>{K=$});let U=N.viewport,X=($)=>{$.preventDefault();let B=Y.virtualHeight-y.state.viewportState.containerHeight;K=Math.max(0,Math.min(K+$.deltaY,B)),y.scrollController.scrollTo(K)};if(U.addEventListener("wheel",X,{passive:!1}),y.destroyHandlers.push(()=>{U.removeEventListener("wheel",X)}),!N.viewport.querySelector(`.${q}-scrollbar-track`)){if(j=i(N.viewport,(B)=>y.scrollController.scrollTo(B),{},q,O),!N.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))N.viewport.classList.add(`${q}-viewport--custom-scrollbar`);j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);let $=j;y.afterScroll.push((B,A)=>{if($)$.updatePosition(B),$.show()}),y.resizeHandlers.push((B,A)=>{if($){let F=y.getCachedCompression();$.updateBounds(F.virtualHeight,y.state.viewportState.containerHeight)}})}}else if(!Y.isCompressed&&J)J=!1,y.scrollController.disableCompression(),y.updateContentSize(Y.actualHeight);else if(Y.isCompressed)y.scrollController.updateConfig({compression:Y}),y.updateContentSize(Y.virtualHeight);if(j)j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);y.state.cachedCompression={state:Y,totalItems:G}};y.updateCompressionMode=_;let M=y.getCachedCompression.bind(y);y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;return M()},y.setVisibleRangeFn((G,Y,U,X,W)=>{let $=P(X,U);r(G,Y,U,X,$,W)}),y.setScrollToPosFn((G,Y,U,X,W)=>{let $=P(X,Y);return a(G,Y,U,X,$,W)}),y.setPositionElementFn((G,Y)=>{let U=y.getVirtualTotal(),X=P(U,y.heightCache);if(X.isCompressed){let W=Math.round(c(Y,y.scrollController.getScrollTop(),y.heightCache,U,y.state.viewportState.containerHeight,X)),$=y.config.horizontal;G.style.transform=$?`translateX(${W}px)`:`translateY(${W}px)`}else{let W=Math.round(y.heightCache.getOffset(Y)),$=y.config.horizontal;G.style.transform=$?`translateX(${W}px)`:`translateY(${W}px)`}}),_(),y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null})},destroy(){if(j)j.destroy(),j=null}}};export{Ly as withCompression,Dy as needsCompression,_y as getMaxItemsWithoutCompression,P as getCompressionState,Ey as getCompressionInfo,Uy as calculateIndexFromScrollPosition,r as calculateCompressedVisibleRange,a as calculateCompressedScrollToIndex,Gy as calculateCompressedRenderRange,c as calculateCompressedItemPosition,z as MAX_VIRTUAL_HEIGHT};
1
+ var F=16000000;var Ny=(j,K,J,y)=>{if(y===0)return 0;if(!j.isVariable())return Math.ceil(J/j.getHeight(0));let N=0,Q=0,q=K;while(q<y&&Q<J)Q+=j.getHeight(q),N++,q++;return Math.max(1,N)},n=(j,K,J)=>{if(J===0)return 0;if(!j.isVariable())return Math.floor(K/j.getHeight(0));let y=0,N=0;for(let Q=J-1;Q>=0;Q--){let q=j.getHeight(Q);if(N+q>K)break;N+=q,y++}return Math.max(y,1)},l=(j,K,J)=>{if(J===0)return 0;let y=Math.floor(K),N=K-y,Q=Math.max(0,Math.min(y,J-1));return j.getOffset(Q)+N*j.getHeight(Q)};var w=(j,K)=>{let J=K.getTotalHeight(),y=J>F,N=y?F:J,Q=J>0?N/J:1;return{isCompressed:y,actualHeight:J,virtualHeight:N,ratio:Q}},c=(j,K,J,y,N,Q)=>{if(y===0||K===0)return Q.start=0,Q.end=-1,Q;if(!N.isCompressed){let X=J.indexAtOffset(j),$=J.indexAtOffset(j+K);if($<y-1)$++;return Q.start=Math.max(0,X),Q.end=Math.min(y-1,Math.max(0,$)),Q}let{virtualHeight:q}=N,B=j/q*y,E=Math.floor(B),L=Ny(J,Math.max(0,E),K,y),Y=Math.ceil(B)+L,G=q-K-j;if(G<=K&&G>=-1){let X=n(J,K,y),$=Math.max(0,y-X),D=Math.max(0,Math.min(1,1-G/K));E=Math.floor(E+($-E)*D),Y=G<=1?y-1:Math.min(y-1,E+L)}return Q.start=Math.max(0,E),Q.end=Math.min(y-1,Math.max(0,Y)),Q},Gy=(j,K,J,y)=>{if(J===0)return y.start=0,y.end=-1,y;return y.start=Math.max(0,j.start-K),y.end=Math.min(J-1,j.end+K),y},r=(j,K,J,y,N,Q,q)=>{if(!Q.isCompressed||y===0)return J.getOffset(j);let{virtualHeight:V}=Q,B=V-N,E=B-K;if(E<=N&&E>=-1){if(K>=B-1){let b=J.getTotalHeight()-J.getOffset(j);return N-b}let W=n(J,N,y),G=Math.max(0,y-W),$=K/V*y,D=Math.max(0,Math.min(1,1-E/N)),z=J.getOffset(j)-J.getOffset(G),M=J.getOffset(j)-l(J,$,y);return M+(z-M)*D}let Y=K/V*y;return J.getOffset(j)-l(J,Y,y)},a=(j,K,J,y,N,Q="start")=>{if(y===0)return 0;let q;if(N.isCompressed){if(Q==="end"&&j===y-1)return Math.max(0,N.virtualHeight-J);q=j/y*N.virtualHeight}else q=K.getOffset(j);let V=K.getHeight(j);switch(Q){case"center":q-=(J-V)/2;break;case"end":q-=J-V;break}let B=N.virtualHeight-J;return Math.max(0,Math.min(q,B))},Uy=(j,K,J,y)=>{if(J===0)return 0;if(y.isCompressed){let N=j/y.virtualHeight;return Math.floor(N*J)}return K.indexAtOffset(j)},Dy=(j,K)=>{if(typeof K==="number")return j*K>F;return K.getTotalHeight()>F},_y=(j)=>{if(j<=0)return 0;return Math.floor(F/j)},Ey=(j,K)=>{let J=w(j,K);if(!J.isCompressed)return`No compression needed (${j} items, ${(J.actualHeight/1e6).toFixed(2)}M px)`;return`Compressed to ${(J.ratio*100).toFixed(1)}% (${j} items, ${(J.actualHeight/1e6).toFixed(1)}M px → ${(J.virtualHeight/1e6).toFixed(1)}M px virtual)`};var i=(j,K,J={},y="vlist",N=!1)=>{let{autoHide:Q=!0,autoHideDelay:q=1000,minThumbSize:V=30,showOnHover:B=!0,hoverZoneWidth:E=16,showOnViewportEnter:L=!0}=J,Y=0,W=0,G=0,X=0,$=!1,D=!1,z=0,M=0,b=0,f=null,T=!1,Z=null,P=null,Qy=N?"width":"height",o=N?"translateX":"translateY",u=N?(_)=>_.clientX:(_)=>_.clientY,Yy=N?"left":"top",U=document.createElement("div"),R=document.createElement("div"),O=B?document.createElement("div"):null,$y=()=>{if(U.className=`${y}-scrollbar`,R.className=`${y}-scrollbar-thumb`,N)U.classList.add(`${y}-scrollbar--horizontal`);if(U.appendChild(R),j.appendChild(U),O){if(O.className=`${y}-scrollbar-hover`,N)O.classList.add(`${y}-scrollbar-hover--horizontal`),O.style.height=`${E}px`;else O.style.width=`${E}px`;j.appendChild(O)}},S=()=>{if(f)clearTimeout(f),f=null},v=()=>{if(!Q)return;S(),f=setTimeout(d,q)},H=()=>{if(Y<=W)return;if(S(),!T)U.classList.add(`${y}-scrollbar--visible`),T=!0;if(Q&&!$&&!D)v()},d=()=>{if($||D)return;U.classList.remove(`${y}-scrollbar--visible`),T=!1},Wy=(_,A)=>{Y=_,W=A;let C=Y>W;if(U.style.display=C?"":"none",!C){d();return}let k=W/Y;G=Math.max(V,k*W),R.style[Qy]=`${G}px`,X=W-G,e(b)},e=(_)=>{if(b=_,Y<=W||X<=0)return;let A=Y-W,k=Math.min(1,Math.max(0,_/A))*X;R.style.transform=`${o}(${k}px)`},t=(_)=>{if(_.target===R)return;let A=U.getBoundingClientRect(),m=u(_)-A[Yy]-G/2,Ky=Math.max(0,Math.min(m,X))/X,h=Y-W,qy=Ky*h;K(qy),H()},yy=(_)=>{_.preventDefault(),_.stopPropagation(),$=!0,z=u(_),M=b,S(),U.classList.add(`${y}-scrollbar--dragging`),document.addEventListener("mousemove",x),document.addEventListener("mouseup",g)},x=(_)=>{if(!$)return;let A=u(_)-z,C=X>0?A/X:0,k=Y-W,m=C*k,s=Math.max(0,Math.min(M+m,k)),h=s/k*X;if(R.style.transform=`${o}(${h}px)`,P=s,Z===null)Z=requestAnimationFrame(()=>{if(P!==null)K(P);Z=null})},g=()=>{if($=!1,Z!==null)cancelAnimationFrame(Z),Z=null;if(P!==null)K(P),P=null;if(U.classList.remove(`${y}-scrollbar--dragging`),Q&&!D)v();document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g)},jy=()=>{if(L)H()},Jy=()=>{if(!$){if(D=!1,Q)v()}},p=()=>{D=!0,S(),H()},I=()=>{if(D=!1,!$&&Q)v()},Xy=()=>{if(S(),Z!==null)cancelAnimationFrame(Z),Z=null;if(U.removeEventListener("click",t),U.removeEventListener("mouseenter",p),U.removeEventListener("mouseleave",I),R.removeEventListener("mousedown",yy),j.removeEventListener("mouseenter",jy),j.removeEventListener("mouseleave",Jy),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",g),O){if(O.removeEventListener("mouseenter",p),O.removeEventListener("mouseleave",I),O.parentNode)O.parentNode.removeChild(O)}if(U.parentNode)U.parentNode.removeChild(U)};if($y(),U.addEventListener("click",t),U.addEventListener("mouseenter",p),U.addEventListener("mouseleave",I),R.addEventListener("mousedown",yy),j.addEventListener("mouseenter",jy),j.addEventListener("mouseleave",Jy),O)O.addEventListener("mouseenter",p),O.addEventListener("mouseleave",I);return{show:H,hide:d,updateBounds:Wy,updatePosition:e,isVisible:()=>T,destroy:Xy}};var Ly=()=>{let j=null,K=0,J=!1;return{name:"withCompression",priority:20,setup(y){let{dom:N,config:Q}=y,{classPrefix:q,horizontal:V}=Q,B=()=>{let L=y.getVirtualTotal(),Y=w(L,y.heightCache);if(Y.isCompressed&&!J){J=!0,y.scrollController.enableCompression(Y),y.updateContentSize(Y.virtualHeight),y.setScrollFns(()=>K,($)=>{K=$});let W=N.viewport,G=($)=>{$.preventDefault();let D=Y.virtualHeight-y.state.viewportState.containerHeight;K=Math.max(0,Math.min(K+$.deltaY,D)),y.scrollController.scrollTo(K)};if(W.addEventListener("wheel",G,{passive:!1}),y.destroyHandlers.push(()=>{W.removeEventListener("wheel",G)}),!N.viewport.querySelector(`.${q}-scrollbar-track`)){if(j=i(N.viewport,(D)=>y.scrollController.scrollTo(D),{},q,V),!N.viewport.classList.contains(`${q}-viewport--custom-scrollbar`))N.viewport.classList.add(`${q}-viewport--custom-scrollbar`);j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);let $=j;y.afterScroll.push((D,z)=>{if($)$.updatePosition(D),$.show()}),y.resizeHandlers.push((D,z)=>{if($){let M=y.getCachedCompression();$.updateBounds(M.virtualHeight,y.state.viewportState.containerHeight)}})}}else if(!Y.isCompressed&&J)J=!1,y.scrollController.disableCompression(),y.updateContentSize(Y.actualHeight);else if(Y.isCompressed)y.scrollController.updateConfig({compression:Y}),y.updateContentSize(Y.virtualHeight);if(j)j.updateBounds(Y.virtualHeight,y.state.viewportState.containerHeight);y.state.cachedCompression={state:Y,totalItems:L}};y.updateCompressionMode=B;let E=y.getCachedCompression.bind(y);y.getCachedCompression=()=>{if(y.state.cachedCompression)return y.state.cachedCompression.state;return E()},y.setVisibleRangeFn((L,Y,W,G,X)=>{let $=w(G,W);c(L,Y,W,G,$,X)}),y.setScrollToPosFn((L,Y,W,G,X)=>{let $=w(G,Y);return a(L,Y,W,G,$,X)}),y.setPositionElementFn((L,Y)=>{let W=y.getVirtualTotal(),G=w(W,y.heightCache);if(G.isCompressed){let X=Math.round(r(Y,y.scrollController.getScrollTop(),y.heightCache,W,y.state.viewportState.containerHeight,G)),$=y.config.horizontal;L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}else{let X=Math.round(y.heightCache.getOffset(Y)),$=y.config.horizontal;L.style.transform=$?`translateX(${X}px)`:`translateY(${X}px)`}}),B(),y.destroyHandlers.push(()=>{if(j)j.destroy(),j=null})},destroy(){if(j)j.destroy(),j=null}}};export{Ly as withCompression,Dy as needsCompression,_y as getMaxItemsWithoutCompression,w as getCompressionState,Ey as getCompressionInfo,Uy as calculateIndexFromScrollPosition,c as calculateCompressedVisibleRange,a as calculateCompressedScrollToIndex,Gy as calculateCompressedRenderRange,r as calculateCompressedItemPosition,F as MAX_VIRTUAL_HEIGHT};
@@ -50,7 +50,7 @@ export interface Range {
50
50
  export type EventHandler<T> = (payload: T) => void;
51
51
  export type Unsubscribe = () => void;
52
52
  /** Core event map */
53
- export interface CoreEvents<T extends VListItem = VListItem> {
53
+ export interface CoreEvents {
54
54
  scroll: {
55
55
  scrollTop: number;
56
56
  direction: "up" | "down";
@@ -89,8 +89,8 @@ export interface VListCore<T extends VListItem = VListItem> {
89
89
  selectItem(id: string | number): void;
90
90
  deselectItem(): void;
91
91
  getSelectedId(): string | number | null;
92
- on<K extends keyof CoreEvents<T>>(event: K, handler: EventHandler<CoreEvents<T>[K]>): Unsubscribe;
93
- off<K extends keyof CoreEvents<T>>(event: K, handler: EventHandler<CoreEvents<T>[K]>): void;
92
+ on<K extends keyof CoreEvents>(event: K, handler: EventHandler<CoreEvents[K]>): Unsubscribe;
93
+ off<K extends keyof CoreEvents>(event: K, handler: EventHandler<CoreEvents[K]>): void;
94
94
  destroy(): void;
95
95
  }
96
96
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"core-light.d.ts","sourceRoot":"","sources":["../src/core-light.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-light.d.ts","sourceRoot":"","sources":["../src/core-light.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- var o=(Y)=>{let q=Math.max(1,Math.floor(Y.columns)),J=Y.gap??0,j=Y.isHeaderFn,D={row:0,col:0},X=(K)=>{if(K<=0)return 0;if(!j)return Math.ceil(K/q);let $=0,N=0,M=0;for(let F=0;F<K;F++)if(j(F)){if(M++,N>0)$++,N=0;$++,N=0}else if(N++,N>=q)$++,N=0;if(N>0)$++;return $},z=(K)=>{return D.row=L(K),D.col=O(K),D},L=(K)=>{if(!j)return Math.floor(K/q);let $=0,N=0;for(let M=0;M<=K;M++)if(j(M)){if(N>0)$++,N=0;if(M===K)return $;$++,N=0}else{if(M===K)return $;if(N++,N>=q)$++,N=0}return console.warn(`⚠️ getRow(${K}) fell through - returning ${$}`),$},O=(K)=>{if(!j)return K%q;if(j(K))return 0;let $=0;for(let N=0;N<=K;N++)if(j(N))$=0;else{if(N===K)return $;if($++,$>=q)$=0}return $},_=(K,$,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let T=Math.max(0,K*q),k=Math.min(N-1,($+1)*q-1);return{start:T,end:k}}let M=-1,F=-1,v=0,H=0;for(let T=0;T<N;T++){if(j(T)){if(H>0)v++,H=0;if(v>=K&&v<=$){if(M===-1)M=T;F=T}v++,H=0}else{if(v>=K&&v<=$){if(M===-1)M=T;F=T}if(H++,H>=q)v++,H=0}if(v>$&&H===0)break}if(M===-1)return{start:0,end:-1};return{start:M,end:F}},W=(K,$,N)=>{if($<0||$>=q)return-1;let M=K*q+$;if(M<0||M>=N)return-1;return M},b=(K)=>{let $=(q-1)*J;return Math.max(0,(K-$)/q)};return{get columns(){return q},get gap(){return J},update:(K)=>{if(K.columns!==void 0)q=Math.max(1,Math.floor(K.columns));if(K.gap!==void 0)J=K.gap;if(K.isHeaderFn!==void 0)j=K.isHeaderFn},getTotalRows:X,getPosition:z,getRow:L,getCol:O,getItemRange:_,getItemIndex:W,getColumnWidth:b,getColumnOffset:(K,$)=>{let N=b($);return K*(N+J)}}};var i=16000000;var K2=(Y,q,J)=>{if(J===0)return 0;if(!Y.isVariable())return Math.floor(q/Y.getHeight(0));let j=0,D=0;for(let X=J-1;X>=0;X--){let z=Y.getHeight(X);if(D+z>q)break;D+=z,j++}return Math.max(j,1)},t=(Y,q,J)=>{if(J===0)return 0;let j=Math.floor(q),D=q-j,X=Math.max(0,Math.min(j,J-1));return Y.getOffset(X)+D*Y.getHeight(X)};var Q2=(Y,q)=>{let J=q.getTotalHeight(),j=J>i,D=j?i:J,X=J>0?D/J:1;return{isCompressed:j,actualHeight:J,virtualHeight:D,ratio:X}};var Y2=(Y,q,J,j,D,X,z)=>{if(!X.isCompressed||j===0)return J.getOffset(Y);let{virtualHeight:L}=X,O=L-D,_=O-q;if(_<=D&&_>=-1){if(q>=O-1){let v=J.getTotalHeight()-J.getOffset(Y);return D-v}let f=K2(J,D,j),u=Math.max(0,j-f),$=q/L*j,N=Math.max(0,Math.min(1,1-_/D)),M=J.getOffset(Y)-J.getOffset(u),F=J.getOffset(Y)-t(J,$,j);return F+(M-F)*N}let b=q/L*j;return J.getOffset(Y)-t(J,b,j)};var Z2=(Y)=>{return Y!==null&&typeof Y==="object"&&Y.__groupHeader===!0};var X2=(Y=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let z=document.createElement("div");return z.setAttribute("role","option"),z},release:(X)=>{if(q.length<Y)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},e=(Y,q,J,j,D,X,z,L)=>{let O=X2(),_=new Map,W=X,b=!1,f=null,u=0,K="",$=(Q)=>{if(f&&u===Q)return f;return f=Q2(Q,J),u=Q,f},N={selected:!1,focused:!1},M=(Q,Z)=>{return N.selected=Q,N.focused=Z,N},F=`${D}-item ${D}-grid-item`,v=`${D}-item--selected`,H=`${D}-item--focused`,T=(Q,Z)=>{if(typeof Z==="string")Q.innerHTML=Z;else Q.replaceChildren(Z)},k=(Q,Z,B)=>{Q.classList.toggle(v,Z),Q.classList.toggle(H,B)},P=(Q,Z)=>{let B=j.getRow(Q);if(Z){let A=Z.totalItems,E=$(A);if(E.isCompressed)return Y2(B,Z.scrollTop,J,A,Z.containerHeight,E,Z.rangeStart)}return J.getOffset(B)},S=(Q,Z,B)=>{let A=Q.dataset.id?.startsWith("__group_header"),E=A?0:j.getCol(Z),V=A?0:j.getColumnOffset(E,W),R;if(b){let g=j.getRow(Z),U=0,I=new Set;for(let C=0;C<Z;C++){let h=j.getRow(C);if(h<g&&!I.has(h)){let c=J.getHeight(C);U+=c,I.add(h)}}R=U}else R=P(Z,B);Q.style.transform=`translate(${Math.round(V)}px, ${Math.round(R)}px)`},G=(Q,Z)=>{let B=Q.dataset.id?.startsWith("__group_header"),A=B?W:j.getColumnWidth(W),E;if(b||B)E=J.getHeight(Z)-j.gap;else{let V=j.getRow(Z);E=J.getHeight(V)-j.gap}Q.style.width=`${A}px`,Q.style.height=`${E}px`},p=(Q,Z,B,A,E)=>{let V=O.acquire(),R=M(B,A);if(V.className=F,V.dataset.index=String(Q),V.dataset.id=String(Z.id),V.dataset.row=String(j.getRow(Q)),V.dataset.col=String(j.getCol(Q)),V.ariaSelected=String(B),L)V.id=`${L}-item-${Q}`;if(z)K=String(z()),V.setAttribute("aria-setsize",K),V.setAttribute("aria-posinset",String(Q+1));G(V,Q);let g=q(Z,Q,R);return T(V,g),k(V,B,A),S(V,Q,E),V},y=(Q,Z,B,A,E)=>{if(Z.start===0&&Q.length>0)b=Z2(Q[0]);for(let[U,I]of _)if(U<Z.start||U>Z.end)I.element.remove(),O.release(I.element),_.delete(U);let V=!1;if(z){let U=String(z());V=U!==K,K=U}let R=document.createDocumentFragment(),g=[];for(let U=Z.start;U<=Z.end;U++){let I=U-Z.start,C=Q[I];if(!C){console.warn(`⚠️ RENDER: Missing item at index ${U} (range: ${Z.start}-${Z.end}, items.length: ${Q.length})`);continue}let h=B.has(C.id),c=U===A,w=_.get(U);if(w){let a=w.element.dataset.id,J2=String(C.id);if(a!==J2){let k2=M(h,c),N2=q(C,U,k2);T(w.element,N2),w.element.dataset.id=J2,w.element.dataset.row=String(j.getRow(U)),w.element.dataset.col=String(j.getCol(U)),G(w.element,U)}if(k(w.element,h,c),w.element.ariaSelected=String(h),S(w.element,U,E),V)w.element.setAttribute("aria-setsize",K)}else{let a=p(U,C,h,c,E);R.appendChild(a),g.push({index:U,element:a})}}if(g.length>0){Y.appendChild(R);for(let{index:U,element:I}of g)_.set(U,{index:U,element:I})}},x=(Q)=>{for(let[Z,B]of _)S(B.element,Z,Q)},m=(Q,Z,B,A)=>{let E=_.get(Q);if(E){let V=M(B,A),R=q(Z,Q,V);T(E.element,R),k(E.element,B,A),E.element.dataset.id=String(Z.id),E.element.ariaSelected=String(B),G(E.element,Q)}},l=(Q,Z,B)=>{let A=_.get(Q);if(A)k(A.element,Z,B)},d=(Q)=>{return _.get(Q)?.element},n=(Q)=>{if(Math.abs(Q-W)<1)return;W=Q;for(let[Z,B]of _)G(B.element,Z),S(B.element,Z)},r=()=>{for(let[,Q]of _)Q.element.remove(),O.release(Q.element);_.clear()};return{render:y,updatePositions:x,updateItem:m,updateItemClasses:l,getElement:d,updateContainerWidth:n,clear:r,destroy:()=>{r(),O.clear()}}};var $2=(Y,q,J,j,D,X)=>{if(j===0)return 0;let z=Math.max(0,Math.min(Y,j-1)),L=q.getOffset(z),O=q.getHeight(z),_=q.getTotalHeight(),W=Math.max(0,_-J),b;switch(X){case"center":b=L-J/2+O/2;break;case"end":b=L-J+O;break;case"start":default:b=L;break}return Math.max(0,Math.min(b,W))};var j2=(Y,q,J,j,D="start",X,z=$2)=>{return z(Y,q,J,j,X,D)};var D2=(Y)=>{if(!Y.columns||Y.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,J=null;return{name:"withGrid",priority:10,setup(j){let{dom:D,emitter:X,config:z,rawConfig:L}=j,{classPrefix:O}=z;if(z.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(z.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let _=L.items?.some((k)=>k.__groupHeader===!0),W={columns:Y.columns,gap:Y.gap??0};if(_)W.isHeaderFn=(k)=>{let P=j.dataManager.getItem(k);return P&&P.__groupHeader===!0};q=o(W);let b=q.gap;j.setVirtualTotalFn(()=>{let k=j.dataManager.getTotal();return q.getTotalRows(k)});let f=L.item,u=z.horizontal?f.width:f.height,K={containerWidth:j.getContainerWidth(),columns:q.columns,gap:q.gap};if(typeof u==="function")j.setHeightConfig((k)=>{let P=K.containerWidth-2,S=(K.columns-1)*K.gap,G=(P-S)/K.columns,p={containerWidth:K.containerWidth,columns:K.columns,gap:K.gap,columnWidth:G};return u(k,p)+K.gap});else if(b>0)j.setHeightConfig(u+b);let $=j.dataManager.getTotal(),N=q.getTotalRows($);j.rebuildHeightCache(),D.root.classList.add(`${O}--grid`);let M=j.getContainerWidth(),F=L.item.template,v=()=>{J=e(D.items,F,j.heightCache,q,O,M,()=>j.dataManager.getTotal(),z.ariaIdPrefix),j.replaceRenderer(J)};v(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>W),j.methods.set("_replaceGridRenderer",(k)=>{J=k}),j.methods.set("_updateGridLayoutForGroups",(k)=>{q.update({isHeaderFn:k});let P=j.dataManager.getTotal(),S=q.getTotalRows(P),G=0;for(let y=0;y<P;y++)if(q.getCol(y)===0){let x=j.heightCache.getHeight(y);G+=x}let p=j.heightCache.getTotalHeight.bind(j.heightCache);j.heightCache.getTotalHeight=()=>G,j.dom.content.style.height=`${G}px`,v()}),j.methods.set("updateGrid",(k)=>{if(k.columns!==void 0){if(!Number.isInteger(k.columns)||k.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");W.columns=k.columns}if(k.gap!==void 0){if(k.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");W.gap=k.gap}if(q)q.update(W);let P=j.getContainerWidth();if(K.containerWidth=P,K.columns=W.columns,K.gap=W.gap,J)J.updateContainerWidth(P);let S=Math.ceil(j.dataManager.getTotal()/W.columns);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let G=0;G<j.contentSizeHandlers.length;G++)j.contentSizeHandlers[G]();if(J)J.clear();j.forceRender()});let H=()=>{if(j.state.isDestroyed)return;let k=j.scrollController.getScrollTop(),P=j.state.viewportState.containerHeight,S=j.getVirtualTotal(),G={start:0,end:0};if(S===0||P===0)G.start=0,G.end=0;else{G.start=Math.max(0,j.heightCache.indexAtOffset(k));let s=j.heightCache.indexAtOffset(k+P);if(s<S-1)s++;G.end=Math.min(S-1,Math.max(0,s))}let p=z.overscan??3,y={start:Math.max(0,G.start-p),end:Math.min(S-1,G.end+p)};j.state.viewportState.scrollTop=k,j.state.viewportState.visibleRange=G,j.state.viewportState.renderRange=y;let x=j.state.lastRenderRange,m=j.state.viewportState.isCompressed;if(y.start===x.start&&y.end===x.end){if(m)J.updatePositions(j.getCompressionContext());return}let l=j.dataManager.getTotal(),d=q.getItemRange(y.start,y.end,l),n=j.dataManager.getItemsInRange(d.start,d.end),r=m?j.getCompressionContext():void 0;J.render(n,d,new Set,-1,r),j.state.lastRenderRange={...y},X.emit("range:change",{range:y})},T=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},H()};if(j.setRenderFns(H,T),j.resizeHandlers.push((k,P)=>{if(J)J.updateContainerWidth(k)}),j.methods.set("scrollToIndex",(k,P)=>{let S=Math.floor(k/Y.columns),{align:G,behavior:p,duration:y}=M2(P),x=j.dataManager.getState(),m=q.getTotalRows(x.total),l=Math.max(0,Math.min(S,m-1)),d=j2(l,j.heightCache,j.state.viewportState.containerHeight,m,G,j.getCachedCompression());if(p==="smooth")j.scrollController.scrollTo(d);else j.scrollController.scrollTo(d)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;D.root.classList.remove(`${O}--grid`)})},destroy(){if(J)J.destroy(),J=null}}},q2=300,M2=(Y)=>{if(typeof Y==="string")return{align:Y,behavior:"auto",duration:q2};if(Y&&typeof Y==="object")return{align:Y.align??"start",behavior:Y.behavior??"auto",duration:Y.duration??q2};return{align:"start",behavior:"auto",duration:q2}};export{D2 as withGrid,e as createGridRenderer,o as createGridLayout};
1
+ var a=(Y)=>{let q=Math.max(1,Math.floor(Y.columns)),J=Y.gap??0,j=Y.isHeaderFn,D={row:0,col:0},X=(K)=>{if(K<=0)return 0;if(!j)return Math.ceil(K/q);let $=0,N=0,B=0;for(let y=0;y<K;y++)if(j(y)){if(B++,N>0)$++,N=0;$++,N=0}else if(N++,N>=q)$++,N=0;if(N>0)$++;return $},G=(K)=>{return D.row=O(K),D.col=b(K),D},O=(K)=>{if(!j)return Math.floor(K/q);let $=0,N=0;for(let B=0;B<=K;B++)if(j(B)){if(N>0)$++,N=0;if(B===K)return $;$++,N=0}else{if(B===K)return $;if(N++,N>=q)$++,N=0}return console.warn(`⚠️ getRow(${K}) fell through - returning ${$}`),$},b=(K)=>{if(!j)return K%q;if(j(K))return 0;let $=0;for(let N=0;N<=K;N++)if(j(N))$=0;else{if(N===K)return $;if($++,$>=q)$=0}return $},W=(K,$,N)=>{if(N<=0)return{start:0,end:-1};if(!j){let M=Math.max(0,K*q),V=Math.min(N-1,($+1)*q-1);return{start:M,end:V}}let B=-1,y=-1,T=0,k=0;for(let M=0;M<N;M++){if(j(M)){if(k>0)T++,k=0;if(T>=K&&T<=$){if(B===-1)B=M;y=M}T++,k=0}else{if(T>=K&&T<=$){if(B===-1)B=M;y=M}if(k++,k>=q)T++,k=0}if(T>$&&k===0)break}if(B===-1)return{start:0,end:-1};return{start:B,end:y}},P=(K,$,N)=>{if($<0||$>=q)return-1;let B=K*q+$;if(B<0||B>=N)return-1;return B},F=(K)=>{let $=(q-1)*J;return Math.max(0,(K-$)/q)};return{get columns(){return q},get gap(){return J},update:(K)=>{if(K.columns!==void 0)q=Math.max(1,Math.floor(K.columns));if(K.gap!==void 0)J=K.gap;if(K.isHeaderFn!==void 0)j=K.isHeaderFn},getTotalRows:X,getPosition:G,getRow:O,getCol:b,getItemRange:W,getItemIndex:P,getColumnWidth:F,getColumnOffset:(K,$)=>{let N=F($);return K*(N+J)}}};var n=16000000;var J2=(Y,q,J)=>{if(J===0)return 0;if(!Y.isVariable())return Math.floor(q/Y.getHeight(0));let j=0,D=0;for(let X=J-1;X>=0;X--){let G=Y.getHeight(X);if(D+G>q)break;D+=G,j++}return Math.max(j,1)},o=(Y,q,J)=>{if(J===0)return 0;let j=Math.floor(q),D=q-j,X=Math.max(0,Math.min(j,J-1));return Y.getOffset(X)+D*Y.getHeight(X)};var K2=(Y,q)=>{let J=q.getTotalHeight(),j=J>n,D=j?n:J,X=J>0?D/J:1;return{isCompressed:j,actualHeight:J,virtualHeight:D,ratio:X}};var Q2=(Y,q,J,j,D,X,G)=>{if(!X.isCompressed||j===0)return J.getOffset(Y);let{virtualHeight:O}=X,b=O-D,W=b-q;if(W<=D&&W>=-1){if(q>=b-1){let T=J.getTotalHeight()-J.getOffset(Y);return D-T}let w=J2(J,D,j),C=Math.max(0,j-w),$=q/O*j,N=Math.max(0,Math.min(1,1-W/D)),B=J.getOffset(Y)-J.getOffset(C),y=J.getOffset(Y)-o(J,$,j);return y+(B-y)*N}let F=q/O*j;return J.getOffset(Y)-o(J,F,j)};var Y2=(Y)=>{return Y!==null&&typeof Y==="object"&&Y.__groupHeader===!0};var N2=(Y=200)=>{let q=[];return{acquire:()=>{let X=q.pop();if(X)return X;let G=document.createElement("div");return G.setAttribute("role","option"),G},release:(X)=>{if(q.length<Y)X.className="",X.textContent="",X.removeAttribute("style"),X.removeAttribute("data-index"),X.removeAttribute("data-id"),X.removeAttribute("data-row"),X.removeAttribute("data-col"),q.push(X)},clear:()=>{q.length=0}}},i=(Y,q,J,j,D,X,G,O)=>{let b=N2(),W=new Map,P=X,F=!1,w=null,C=0,K="",$=(Q)=>{if(w&&C===Q)return w;return w=K2(Q,J),C=Q,w},N={selected:!1,focused:!1},B=(Q,Z)=>{return N.selected=Q,N.focused=Z,N},y=`${D}-item ${D}-grid-item`,T=`${D}-item--selected`,k=`${D}-item--focused`,M=(Q,Z)=>{if(typeof Z==="string")Q.innerHTML=Z;else Q.replaceChildren(Z)},V=(Q,Z,U)=>{Q.classList.toggle(T,Z),Q.classList.toggle(k,U)},A=(Q,Z)=>{let U=j.getRow(Q);if(Z){let L=Z.totalItems,E=$(L);if(E.isCompressed)return Q2(U,Z.scrollTop,J,L,Z.containerHeight,E,Z.rangeStart)}return J.getOffset(U)},S=(Q,Z,U)=>{let L=Q.dataset.id?.startsWith("__group_header"),E=L?0:j.getCol(Z),_=L?0:j.getColumnOffset(E,P),f;if(F){let x=j.getRow(Z),z=0,u=new Set;for(let R=0;R<Z;R++){let p=j.getRow(R);if(p<x&&!u.has(p)){let l=J.getHeight(R);z+=l,u.add(p)}}f=z}else f=A(Z,U);Q.style.transform=`translate(${Math.round(_)}px, ${Math.round(f)}px)`},v=(Q,Z)=>{let U=Q.dataset.id?.startsWith("__group_header"),L=U?P:j.getColumnWidth(P),E;if(F||U)E=J.getHeight(Z)-j.gap;else{let _=j.getRow(Z);E=J.getHeight(_)-j.gap}Q.style.width=`${L}px`,Q.style.height=`${E}px`},I=(Q,Z,U,L,E)=>{let _=b.acquire(),f=B(U,L);if(_.className=y,_.dataset.index=String(Q),_.dataset.id=String(Z.id),_.dataset.row=String(j.getRow(Q)),_.dataset.col=String(j.getCol(Q)),_.ariaSelected=String(U),O)_.id=`${O}-item-${Q}`;if(G)K=String(G()),_.setAttribute("aria-setsize",K),_.setAttribute("aria-posinset",String(Q+1));v(_,Q);let x=q(Z,Q,f);return M(_,x),V(_,U,L),S(_,Q,E),_},d=(Q,Z,U,L,E)=>{if(Z.start===0&&Q.length>0)F=Y2(Q[0]);for(let[z,u]of W)if(z<Z.start||z>Z.end)u.element.remove(),b.release(u.element),W.delete(z);let _=!1;if(G){let z=String(G());_=z!==K,K=z}let f=document.createDocumentFragment(),x=[];for(let z=Z.start;z<=Z.end;z++){let u=z-Z.start,R=Q[u];if(!R){console.warn(`⚠️ RENDER: Missing item at index ${z} (range: ${Z.start}-${Z.end}, items.length: ${Q.length})`);continue}let p=U.has(R.id),l=z===L,H=W.get(z);if(H){let c=H.element.dataset.id,q2=String(R.id);if(c!==q2){let $2=B(p,l),k2=q(R,z,$2);M(H.element,k2),H.element.dataset.id=q2,H.element.dataset.row=String(j.getRow(z)),H.element.dataset.col=String(j.getCol(z)),v(H.element,z)}if(V(H.element,p,l),H.element.ariaSelected=String(p),S(H.element,z,E),_)H.element.setAttribute("aria-setsize",K)}else{let c=I(z,R,p,l,E);f.appendChild(c),x.push({index:z,element:c})}}if(x.length>0){Y.appendChild(f);for(let{index:z,element:u}of x)W.set(z,{index:z,element:u})}},h=(Q)=>{for(let[Z,U]of W)S(U.element,Z,Q)},m=(Q,Z,U,L)=>{let E=W.get(Q);if(E){let _=B(U,L),f=q(Z,Q,_);M(E.element,f),V(E.element,U,L),E.element.dataset.id=String(Z.id),E.element.ariaSelected=String(U),v(E.element,Q)}},r=(Q,Z,U)=>{let L=W.get(Q);if(L)V(L.element,Z,U)},s=(Q)=>{return W.get(Q)?.element},g=(Q)=>{if(Math.abs(Q-P)<1)return;P=Q;for(let[Z,U]of W)v(U.element,Z),S(U.element,Z)},j2=()=>{for(let[,Q]of W)Q.element.remove(),b.release(Q.element);W.clear()};return{render:d,updatePositions:h,updateItem:m,updateItemClasses:r,getElement:s,updateContainerWidth:g,clear:j2,destroy:()=>{j2(),b.clear()}}};var Z2=(Y,q,J,j,D,X)=>{if(j===0)return 0;let G=Math.max(0,Math.min(Y,j-1)),O=q.getOffset(G),b=q.getHeight(G),W=q.getTotalHeight(),P=Math.max(0,W-J),F;switch(X){case"center":F=O-J/2+b/2;break;case"end":F=O-J+b;break;case"start":default:F=O;break}return Math.max(0,Math.min(F,P))};var t=(Y,q,J,j,D="start",X,G=Z2)=>{return G(Y,q,J,j,X,D)};var X2=(Y)=>{if(!Y.columns||Y.columns<1)throw Error("[vlist/builder] withGrid: columns must be a positive integer >= 1");let q=null,J=null;return{name:"withGrid",priority:10,setup(j){let{dom:D,emitter:X,config:G,rawConfig:O}=j,{classPrefix:b}=G;if(G.horizontal)throw Error("[vlist/builder] withGrid cannot be used with direction: 'horizontal'");if(G.reverse)throw Error("[vlist/builder] withGrid cannot be used with reverse: true");let W=O.items?.some((k)=>k.__groupHeader===!0),P={columns:Y.columns,gap:Y.gap??0};if(W)P.isHeaderFn=(k)=>{let M=j.dataManager.getItem(k);return!!(M&&M.__groupHeader===!0)};q=a(P);let F=q.gap;j.setVirtualTotalFn(()=>{let k=j.dataManager.getTotal();return q.getTotalRows(k)});let w=O.item,C=G.horizontal?w.width:w.height,K={containerWidth:j.getContainerWidth(),columns:q.columns,gap:q.gap};if(typeof C==="function")j.setHeightConfig((k)=>{let M=K.containerWidth-2,V=(K.columns-1)*K.gap,A=(M-V)/K.columns,S={containerWidth:K.containerWidth,columns:K.columns,gap:K.gap,columnWidth:A,row:q.getRow(k),column:q.getCol(k),totalRows:q.getTotalRows(j.dataManager.getTotal()),totalColumns:K.columns};return C(k,S)+K.gap});else if(F>0)j.setHeightConfig(C+F);j.rebuildHeightCache(),D.root.classList.add(`${b}--grid`);let $=j.getContainerWidth(),N=O.item.template,B=()=>{J=i(D.items,N,j.heightCache,q,b,$,()=>j.dataManager.getTotal(),G.ariaIdPrefix),j.replaceRenderer(J)};B(),j.methods.set("_getGridLayout",()=>q),j.methods.set("_getGridConfig",()=>P),j.methods.set("_replaceGridRenderer",(k)=>{J=k}),j.methods.set("_updateGridLayoutForGroups",(k)=>{q.update({isHeaderFn:k});let M=j.dataManager.getTotal(),V=0;for(let A=0;A<M;A++)if(q.getCol(A)===0){let S=j.heightCache.getHeight(A);V+=S}j.heightCache.getTotalHeight=()=>V,j.dom.content.style.height=`${V}px`,B()}),j.methods.set("updateGrid",(k)=>{if(k.columns!==void 0){if(!Number.isInteger(k.columns)||k.columns<1)throw Error("[vlist/builder] updateGrid: columns must be a positive integer >= 1");P.columns=k.columns}if(k.gap!==void 0){if(k.gap<0)throw Error("[vlist/builder] updateGrid: gap must be non-negative");P.gap=k.gap}if(q)q.update(P);let M=j.getContainerWidth();if(K.containerWidth=M,K.columns=P.columns,K.gap=P.gap??0,J)J.updateContainerWidth(M);j.rebuildHeightCache(),j.updateContentSize(j.heightCache.getTotalHeight()),j.updateCompressionMode();for(let V=0;V<j.contentSizeHandlers.length;V++)j.contentSizeHandlers[V]();if(J)J.clear();j.forceRender()});let y=()=>{if(j.state.isDestroyed)return;let k=j.scrollController.getScrollTop(),M=j.state.viewportState.containerHeight,V=j.getVirtualTotal(),A={start:0,end:0};if(V===0||M===0)A.start=0,A.end=0;else{A.start=Math.max(0,j.heightCache.indexAtOffset(k));let g=j.heightCache.indexAtOffset(k+M);if(g<V-1)g++;A.end=Math.min(V-1,Math.max(0,g))}let S=G.overscan??3,v={start:Math.max(0,A.start-S),end:Math.min(V-1,A.end+S)};j.state.viewportState.scrollTop=k,j.state.viewportState.visibleRange=A,j.state.viewportState.renderRange=v;let I=j.state.lastRenderRange,d=j.state.viewportState.isCompressed;if(v.start===I.start&&v.end===I.end){if(d)J.updatePositions(j.getCompressionContext());return}let h=j.dataManager.getTotal(),m=q.getItemRange(v.start,v.end,h),r=j.dataManager.getItemsInRange(m.start,m.end),s=d?j.getCompressionContext():void 0;J.render(r,m,new Set,-1,s),j.state.lastRenderRange={...v},X.emit("range:change",{range:v})},T=()=>{if(j.state.isDestroyed)return;j.state.lastRenderRange={start:-1,end:-1},y()};if(j.setRenderFns(y,T),j.resizeHandlers.push((k,M)=>{if(J)J.updateContainerWidth(k)}),j.methods.set("scrollToIndex",(k,M)=>{let V=Math.floor(k/Y.columns),{align:A,behavior:S}=D2(M),v=j.dataManager.getState(),I=q.getTotalRows(v.total),d=Math.max(0,Math.min(V,I-1)),h=t(d,j.heightCache,j.state.viewportState.containerHeight,I,A,j.getCachedCompression());if(S==="smooth")j.scrollController.scrollTo(h);else j.scrollController.scrollTo(h)}),!j.methods.has("_getTotal"))j.methods.set("_getTotal",()=>j.dataManager.getTotal());j.destroyHandlers.push(()=>{if(J)J.destroy(),J=null;D.root.classList.remove(`${b}--grid`)})},destroy(){if(J)J.destroy(),J=null}}},e=300,D2=(Y)=>{if(typeof Y==="string")return{align:Y,behavior:"auto",duration:e};if(Y&&typeof Y==="object")return{align:Y.align??"start",behavior:Y.behavior??"auto",duration:Y.duration??e};return{align:"start",behavior:"auto",duration:e}};export{X2 as withGrid,i as createGridRenderer,a as createGridLayout};