@floor/vlist 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -75
- package/dist/builder/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +8 -29
- package/dist/adapters/index.d.ts +0 -20
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/react.d.ts +0 -119
- package/dist/adapters/react.d.ts.map +0 -1
- package/dist/adapters/svelte.d.ts +0 -198
- package/dist/adapters/svelte.d.ts.map +0 -1
- package/dist/adapters/vue.d.ts +0 -151
- package/dist/adapters/vue.d.ts.map +0 -1
- package/dist/builder/context.d.ts.map +0 -1
- package/dist/builder/core.d.ts.map +0 -1
- package/dist/builder/data.d.ts.map +0 -1
- package/dist/builder/index.d.ts.map +0 -1
- package/dist/builder/types.d.ts.map +0 -1
- package/dist/compression/index.js +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/core/core.js +0 -1
- package/dist/core/full.d.ts.map +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/lite.d.ts +0 -129
- package/dist/core/lite.d.ts.map +0 -1
- package/dist/core/minimal.d.ts +0 -104
- package/dist/core/minimal.d.ts.map +0 -1
- package/dist/core-light.d.ts +0 -104
- package/dist/core-light.d.ts.map +0 -1
- package/dist/core-light.js +0 -1
- package/dist/core.d.ts +0 -129
- package/dist/core.d.ts.map +0 -1
- package/dist/data/index.js +0 -1
- package/dist/events/emitter.d.ts.map +0 -1
- package/dist/events/index.d.ts.map +0 -1
- package/dist/features/async/index.d.ts.map +0 -1
- package/dist/features/async/manager.d.ts.map +0 -1
- package/dist/features/async/placeholder.d.ts.map +0 -1
- package/dist/features/async/plugin.d.ts.map +0 -1
- package/dist/features/async/sparse.d.ts.map +0 -1
- package/dist/features/grid/index.d.ts.map +0 -1
- package/dist/features/grid/layout.d.ts.map +0 -1
- package/dist/features/grid/plugin.d.ts.map +0 -1
- package/dist/features/grid/renderer.d.ts.map +0 -1
- package/dist/features/grid/types.d.ts.map +0 -1
- package/dist/features/page/index.d.ts.map +0 -1
- package/dist/features/page/plugin.d.ts.map +0 -1
- package/dist/features/scale/index.d.ts.map +0 -1
- package/dist/features/scale/plugin.d.ts.map +0 -1
- package/dist/features/scrollbar/controller.d.ts.map +0 -1
- package/dist/features/scrollbar/index.d.ts.map +0 -1
- package/dist/features/scrollbar/plugin.d.ts.map +0 -1
- package/dist/features/scrollbar/scrollbar.d.ts.map +0 -1
- package/dist/features/sections/index.d.ts.map +0 -1
- package/dist/features/sections/layout.d.ts.map +0 -1
- package/dist/features/sections/plugin.d.ts.map +0 -1
- package/dist/features/sections/sticky.d.ts.map +0 -1
- package/dist/features/sections/types.d.ts.map +0 -1
- package/dist/features/selection/index.d.ts.map +0 -1
- package/dist/features/selection/plugin.d.ts.map +0 -1
- package/dist/features/selection/state.d.ts.map +0 -1
- package/dist/features/snapshots/index.d.ts.map +0 -1
- package/dist/features/snapshots/plugin.d.ts.map +0 -1
- package/dist/groups/index.js +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/plugins/compression/index.d.ts +0 -10
- package/dist/plugins/compression/index.d.ts.map +0 -1
- package/dist/plugins/compression/plugin.d.ts +0 -42
- package/dist/plugins/compression/plugin.d.ts.map +0 -1
- package/dist/plugins/data/index.d.ts +0 -9
- package/dist/plugins/data/index.d.ts.map +0 -1
- package/dist/plugins/data/manager.d.ts +0 -103
- package/dist/plugins/data/manager.d.ts.map +0 -1
- package/dist/plugins/data/placeholder.d.ts +0 -62
- package/dist/plugins/data/placeholder.d.ts.map +0 -1
- package/dist/plugins/data/plugin.d.ts +0 -60
- package/dist/plugins/data/plugin.d.ts.map +0 -1
- package/dist/plugins/data/sparse.d.ts +0 -91
- package/dist/plugins/data/sparse.d.ts.map +0 -1
- package/dist/plugins/grid/index.d.ts +0 -9
- package/dist/plugins/grid/index.d.ts.map +0 -1
- package/dist/plugins/grid/layout.d.ts +0 -29
- package/dist/plugins/grid/layout.d.ts.map +0 -1
- package/dist/plugins/grid/plugin.d.ts +0 -48
- package/dist/plugins/grid/plugin.d.ts.map +0 -1
- package/dist/plugins/grid/renderer.d.ts +0 -55
- package/dist/plugins/grid/renderer.d.ts.map +0 -1
- package/dist/plugins/grid/types.d.ts +0 -71
- package/dist/plugins/grid/types.d.ts.map +0 -1
- package/dist/plugins/groups/index.d.ts +0 -10
- package/dist/plugins/groups/index.d.ts.map +0 -1
- package/dist/plugins/groups/layout.d.ts +0 -46
- package/dist/plugins/groups/layout.d.ts.map +0 -1
- package/dist/plugins/groups/plugin.d.ts +0 -64
- package/dist/plugins/groups/plugin.d.ts.map +0 -1
- package/dist/plugins/groups/sticky.d.ts +0 -33
- package/dist/plugins/groups/sticky.d.ts.map +0 -1
- package/dist/plugins/groups/types.d.ts +0 -86
- package/dist/plugins/groups/types.d.ts.map +0 -1
- package/dist/plugins/scroll/controller.d.ts +0 -121
- package/dist/plugins/scroll/controller.d.ts.map +0 -1
- package/dist/plugins/scroll/index.d.ts +0 -8
- package/dist/plugins/scroll/index.d.ts.map +0 -1
- package/dist/plugins/scroll/plugin.d.ts +0 -60
- package/dist/plugins/scroll/plugin.d.ts.map +0 -1
- package/dist/plugins/scroll/scrollbar.d.ts +0 -73
- package/dist/plugins/scroll/scrollbar.d.ts.map +0 -1
- package/dist/plugins/selection/index.d.ts +0 -7
- package/dist/plugins/selection/index.d.ts.map +0 -1
- package/dist/plugins/selection/plugin.d.ts +0 -44
- package/dist/plugins/selection/plugin.d.ts.map +0 -1
- package/dist/plugins/selection/state.d.ts +0 -102
- package/dist/plugins/selection/state.d.ts.map +0 -1
- package/dist/plugins/snapshots/index.d.ts +0 -8
- package/dist/plugins/snapshots/index.d.ts.map +0 -1
- package/dist/plugins/snapshots/plugin.d.ts +0 -44
- package/dist/plugins/snapshots/plugin.d.ts.map +0 -1
- package/dist/plugins/window/index.d.ts +0 -8
- package/dist/plugins/window/index.d.ts.map +0 -1
- package/dist/plugins/window/plugin.d.ts +0 -53
- package/dist/plugins/window/plugin.d.ts.map +0 -1
- package/dist/react/index.js +0 -1
- package/dist/react/react.js +0 -1
- package/dist/render/compression.d.ts +0 -116
- package/dist/render/compression.d.ts.map +0 -1
- package/dist/render/heights.d.ts +0 -63
- package/dist/render/heights.d.ts.map +0 -1
- package/dist/render/index.d.ts +0 -9
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/renderer.d.ts +0 -103
- package/dist/render/renderer.d.ts.map +0 -1
- package/dist/render/virtual.d.ts +0 -139
- package/dist/render/virtual.d.ts.map +0 -1
- package/dist/rendering/heights.d.ts.map +0 -1
- package/dist/rendering/index.d.ts.map +0 -1
- package/dist/rendering/renderer.d.ts.map +0 -1
- package/dist/rendering/scale.d.ts.map +0 -1
- package/dist/rendering/viewport.d.ts.map +0 -1
- package/dist/scroll/index.js +0 -1
- package/dist/svelte/index.js +0 -1
- package/dist/svelte/svelte.js +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/vlist.d.ts +0 -22
- package/dist/vlist.d.ts.map +0 -1
- package/dist/vue/index.js +0 -1
- package/dist/vue/vue.js +0 -1
- package/dist/window/index.js +0 -1
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vlist/svelte — Thin Svelte wrapper for vlist
|
|
3
|
-
*
|
|
4
|
-
* Provides a `vlist` action that manages the vlist lifecycle
|
|
5
|
-
* within Svelte's component model. The action creates a vlist instance
|
|
6
|
-
* when the element mounts, syncs items on update, and destroys on unmount.
|
|
7
|
-
*
|
|
8
|
-
* Works with both Svelte 4 and Svelte 5 (actions are framework-stable).
|
|
9
|
-
* No Svelte imports needed — actions are plain functions.
|
|
10
|
-
*
|
|
11
|
-
* @packageDocumentation
|
|
12
|
-
*/
|
|
13
|
-
import type { VListConfig, VListItem, VList, VListEvents, EventHandler, Unsubscribe } from "../types";
|
|
14
|
-
/** Configuration for the vlist action (VListConfig without container) */
|
|
15
|
-
export type VListActionConfig<T extends VListItem = VListItem> = Omit<VListConfig<T>, "container">;
|
|
16
|
-
/**
|
|
17
|
-
* Callback invoked once the vlist instance is ready.
|
|
18
|
-
* Use this to subscribe to events, call methods, or store a reference.
|
|
19
|
-
*/
|
|
20
|
-
export type OnInstanceCallback<T extends VListItem = VListItem> = (instance: VList<T>) => void;
|
|
21
|
-
/** Full options passed to the vlist action */
|
|
22
|
-
export interface VListActionOptions<T extends VListItem = VListItem> {
|
|
23
|
-
/** VList configuration (without container) */
|
|
24
|
-
config: VListActionConfig<T>;
|
|
25
|
-
/**
|
|
26
|
-
* Called once the instance is created (on mount).
|
|
27
|
-
* Use this to get a reference to the vlist instance for calling methods.
|
|
28
|
-
*
|
|
29
|
-
* ```svelte
|
|
30
|
-
* <script>
|
|
31
|
-
* let vlistInstance;
|
|
32
|
-
* const options = {
|
|
33
|
-
* config: { ... },
|
|
34
|
-
* onInstance: (inst) => { vlistInstance = inst; },
|
|
35
|
-
* };
|
|
36
|
-
* </script>
|
|
37
|
-
* <div use:vlist={options} />
|
|
38
|
-
* <button on:click={() => vlistInstance?.scrollToIndex(0)}>Top</button>
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
onInstance?: OnInstanceCallback<T>;
|
|
42
|
-
}
|
|
43
|
-
/** Svelte action return type */
|
|
44
|
-
export interface VListActionReturn<T extends VListItem = VListItem> {
|
|
45
|
-
/** Called by Svelte when the action parameter changes */
|
|
46
|
-
update?: (newOptions: VListActionOptions<T>) => void;
|
|
47
|
-
/** Called by Svelte when the element is removed from the DOM */
|
|
48
|
-
destroy?: () => void;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Svelte action for vlist integration.
|
|
52
|
-
*
|
|
53
|
-
* Attaches a virtual list to the target element. The list is created
|
|
54
|
-
* when the element mounts and destroyed when it unmounts. Passing
|
|
55
|
-
* new options via Svelte's reactivity triggers an update.
|
|
56
|
-
*
|
|
57
|
-
* **Basic usage:**
|
|
58
|
-
* ```svelte
|
|
59
|
-
* <script>
|
|
60
|
-
* import { vlist } from 'vlist/svelte';
|
|
61
|
-
*
|
|
62
|
-
* const users = [
|
|
63
|
-
* { id: 1, name: 'Alice' },
|
|
64
|
-
* { id: 2, name: 'Bob' },
|
|
65
|
-
* ];
|
|
66
|
-
*
|
|
67
|
-
* const options = {
|
|
68
|
-
* config: {
|
|
69
|
-
* item: {
|
|
70
|
-
* height: 48,
|
|
71
|
-
* template: (user) => `<div class="user">${user.name}</div>`,
|
|
72
|
-
* },
|
|
73
|
-
* items: users,
|
|
74
|
-
* },
|
|
75
|
-
* };
|
|
76
|
-
* </script>
|
|
77
|
-
*
|
|
78
|
-
* <div use:vlist={options} style="height: 400px" />
|
|
79
|
-
* ```
|
|
80
|
-
*
|
|
81
|
-
* **With instance access (for methods):**
|
|
82
|
-
* ```svelte
|
|
83
|
-
* <script>
|
|
84
|
-
* import { vlist } from 'vlist/svelte';
|
|
85
|
-
*
|
|
86
|
-
* let instance;
|
|
87
|
-
*
|
|
88
|
-
* const options = {
|
|
89
|
-
* config: {
|
|
90
|
-
* item: {
|
|
91
|
-
* height: 48,
|
|
92
|
-
* template: (item) => `<div>${item.name}</div>`,
|
|
93
|
-
* },
|
|
94
|
-
* items: users,
|
|
95
|
-
* selection: { mode: 'single' },
|
|
96
|
-
* },
|
|
97
|
-
* onInstance: (inst) => { instance = inst; },
|
|
98
|
-
* };
|
|
99
|
-
*
|
|
100
|
-
* function jumpToTop() {
|
|
101
|
-
* instance?.scrollToIndex(0);
|
|
102
|
-
* }
|
|
103
|
-
* </script>
|
|
104
|
-
*
|
|
105
|
-
* <div use:vlist={options} style="height: 400px" />
|
|
106
|
-
* <button on:click={jumpToTop}>Jump to top</button>
|
|
107
|
-
* ```
|
|
108
|
-
*
|
|
109
|
-
* **Reactive items (Svelte 4):**
|
|
110
|
-
* ```svelte
|
|
111
|
-
* <script>
|
|
112
|
-
* import { vlist } from 'vlist/svelte';
|
|
113
|
-
*
|
|
114
|
-
* let users = [...];
|
|
115
|
-
*
|
|
116
|
-
* // Svelte re-runs the action's update when this object changes
|
|
117
|
-
* $: options = {
|
|
118
|
-
* config: {
|
|
119
|
-
* item: { height: 48, template: (u) => `<div>${u.name}</div>` },
|
|
120
|
-
* items: users,
|
|
121
|
-
* },
|
|
122
|
-
* };
|
|
123
|
-
* </script>
|
|
124
|
-
*
|
|
125
|
-
* <div use:vlist={options} style="height: 400px" />
|
|
126
|
-
* ```
|
|
127
|
-
*
|
|
128
|
-
* **With adapter (async/infinite scroll):**
|
|
129
|
-
* ```svelte
|
|
130
|
-
* <script>
|
|
131
|
-
* import { vlist } from 'vlist/svelte';
|
|
132
|
-
*
|
|
133
|
-
* const options = {
|
|
134
|
-
* config: {
|
|
135
|
-
* item: {
|
|
136
|
-
* height: 64,
|
|
137
|
-
* template: (item) => `<div>${item.title}</div>`,
|
|
138
|
-
* },
|
|
139
|
-
* adapter: {
|
|
140
|
-
* read: async ({ offset, limit }) => {
|
|
141
|
-
* const res = await fetch(`/api/items?offset=${offset}&limit=${limit}`);
|
|
142
|
-
* const data = await res.json();
|
|
143
|
-
* return { items: data.items, total: data.total };
|
|
144
|
-
* },
|
|
145
|
-
* },
|
|
146
|
-
* },
|
|
147
|
-
* };
|
|
148
|
-
* </script>
|
|
149
|
-
*
|
|
150
|
-
* <div use:vlist={options} style="height: 400px" />
|
|
151
|
-
* ```
|
|
152
|
-
*
|
|
153
|
-
* @param node - The DOM element Svelte binds the action to
|
|
154
|
-
* @param options - Configuration and callbacks
|
|
155
|
-
* @returns Action lifecycle object (update + destroy)
|
|
156
|
-
*/
|
|
157
|
-
export declare function vlist<T extends VListItem = VListItem>(node: HTMLElement, options: VListActionOptions<T>): VListActionReturn<T>;
|
|
158
|
-
/**
|
|
159
|
-
* Helper to subscribe to vlist events with automatic cleanup.
|
|
160
|
-
* Returns an unsubscribe function.
|
|
161
|
-
*
|
|
162
|
-
* ```svelte
|
|
163
|
-
* <script>
|
|
164
|
-
* import { vlist, onVListEvent } from 'vlist/svelte';
|
|
165
|
-
* import { onDestroy } from 'svelte';
|
|
166
|
-
*
|
|
167
|
-
* let instance;
|
|
168
|
-
* let unsubs = [];
|
|
169
|
-
*
|
|
170
|
-
* function handleInstance(inst) {
|
|
171
|
-
* instance = inst;
|
|
172
|
-
*
|
|
173
|
-
* unsubs.push(
|
|
174
|
-
* onVListEvent(inst, 'selection:change', ({ selected }) => {
|
|
175
|
-
* console.log('Selected:', selected);
|
|
176
|
-
* })
|
|
177
|
-
* );
|
|
178
|
-
*
|
|
179
|
-
* unsubs.push(
|
|
180
|
-
* onVListEvent(inst, 'scroll', ({ scrollTop, direction }) => {
|
|
181
|
-
* console.log(`Scrolling ${direction} at ${scrollTop}px`);
|
|
182
|
-
* })
|
|
183
|
-
* );
|
|
184
|
-
* }
|
|
185
|
-
*
|
|
186
|
-
* onDestroy(() => unsubs.forEach(fn => fn()));
|
|
187
|
-
* </script>
|
|
188
|
-
*
|
|
189
|
-
* <div use:vlist={{ config, onInstance: handleInstance }} />
|
|
190
|
-
* ```
|
|
191
|
-
*
|
|
192
|
-
* @param instance - The vlist instance
|
|
193
|
-
* @param event - Event name
|
|
194
|
-
* @param handler - Event handler
|
|
195
|
-
* @returns Unsubscribe function
|
|
196
|
-
*/
|
|
197
|
-
export declare function onVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: VList<T>, event: K, handler: EventHandler<VListEvents<T>[K]>): Unsubscribe;
|
|
198
|
-
//# sourceMappingURL=svelte.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/adapters/vue.d.ts
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vlist/vue — Thin Vue 3 wrapper for vlist
|
|
3
|
-
*
|
|
4
|
-
* Provides a `useVList` composable that manages the vlist lifecycle
|
|
5
|
-
* within Vue's composition API. The composable creates a vlist instance
|
|
6
|
-
* on mount, syncs items reactively, and destroys on unmount.
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
*/
|
|
10
|
-
import { type Ref, type ShallowRef } from "vue";
|
|
11
|
-
import type { VListConfig, VListItem, VList, VListEvents, EventHandler } from "../types";
|
|
12
|
-
/** Configuration for useVList (VListConfig without container) */
|
|
13
|
-
export type UseVListConfig<T extends VListItem = VListItem> = Omit<VListConfig<T>, "container">;
|
|
14
|
-
/** Accepted config input — plain object or reactive ref */
|
|
15
|
-
export type UseVListConfigInput<T extends VListItem = VListItem> = UseVListConfig<T> | Ref<UseVListConfig<T>>;
|
|
16
|
-
/** Return value from the useVList composable */
|
|
17
|
-
export interface UseVListReturn<T extends VListItem = VListItem> {
|
|
18
|
-
/**
|
|
19
|
-
* Template ref to bind to your container element.
|
|
20
|
-
*
|
|
21
|
-
* ```vue
|
|
22
|
-
* <template>
|
|
23
|
-
* <div ref="containerRef" style="height: 400px" />
|
|
24
|
-
* </template>
|
|
25
|
-
*
|
|
26
|
-
* <script setup>
|
|
27
|
-
* const { containerRef } = useVList(config);
|
|
28
|
-
* </script>
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
containerRef: Ref<HTMLElement | null>;
|
|
32
|
-
/**
|
|
33
|
-
* Shallow ref holding the underlying vlist instance.
|
|
34
|
-
* Populated after mount, `null` before.
|
|
35
|
-
*
|
|
36
|
-
* ```vue
|
|
37
|
-
* <script setup>
|
|
38
|
-
* const { instance } = useVList(config);
|
|
39
|
-
*
|
|
40
|
-
* function jumpToTop() {
|
|
41
|
-
* instance.value?.scrollToIndex(0);
|
|
42
|
-
* }
|
|
43
|
-
* </script>
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
instance: ShallowRef<VList<T> | null>;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Vue 3 composable for vlist integration.
|
|
50
|
-
*
|
|
51
|
-
* Creates a virtual list instance bound to a template ref.
|
|
52
|
-
* The instance is created on mount and destroyed on unmount.
|
|
53
|
-
* When items change (detected via `watch`), they are synced automatically.
|
|
54
|
-
*
|
|
55
|
-
* **Basic usage:**
|
|
56
|
-
* ```vue
|
|
57
|
-
* <template>
|
|
58
|
-
* <div ref="containerRef" style="height: 400px" />
|
|
59
|
-
* </template>
|
|
60
|
-
*
|
|
61
|
-
* <script setup lang="ts">
|
|
62
|
-
* import { useVList } from 'vlist/vue';
|
|
63
|
-
* import { ref } from 'vue';
|
|
64
|
-
*
|
|
65
|
-
* const users = ref([
|
|
66
|
-
* { id: 1, name: 'Alice' },
|
|
67
|
-
* { id: 2, name: 'Bob' },
|
|
68
|
-
* ]);
|
|
69
|
-
*
|
|
70
|
-
* const { containerRef, instance } = useVList({
|
|
71
|
-
* item: {
|
|
72
|
-
* height: 48,
|
|
73
|
-
* template: (user) => `<div class="user">${user.name}</div>`,
|
|
74
|
-
* },
|
|
75
|
-
* items: users.value,
|
|
76
|
-
* });
|
|
77
|
-
* </script>
|
|
78
|
-
* ```
|
|
79
|
-
*
|
|
80
|
-
* **With reactive config (auto-syncs items):**
|
|
81
|
-
* ```vue
|
|
82
|
-
* <script setup lang="ts">
|
|
83
|
-
* import { useVList } from 'vlist/vue';
|
|
84
|
-
* import { computed, ref } from 'vue';
|
|
85
|
-
*
|
|
86
|
-
* const filter = ref('');
|
|
87
|
-
* const allUsers = ref([...]);
|
|
88
|
-
*
|
|
89
|
-
* const config = computed(() => ({
|
|
90
|
-
* item: {
|
|
91
|
-
* height: 48,
|
|
92
|
-
* template: (user) => `<div>${user.name}</div>`,
|
|
93
|
-
* },
|
|
94
|
-
* items: allUsers.value.filter(u =>
|
|
95
|
-
* u.name.includes(filter.value)
|
|
96
|
-
* ),
|
|
97
|
-
* }));
|
|
98
|
-
*
|
|
99
|
-
* const { containerRef, instance } = useVList(config);
|
|
100
|
-
* </script>
|
|
101
|
-
* ```
|
|
102
|
-
*
|
|
103
|
-
* **With adapter (async/infinite scroll):**
|
|
104
|
-
* ```vue
|
|
105
|
-
* <script setup lang="ts">
|
|
106
|
-
* const { containerRef } = useVList({
|
|
107
|
-
* item: {
|
|
108
|
-
* height: 64,
|
|
109
|
-
* template: (item) => `<div>${item.title}</div>`,
|
|
110
|
-
* },
|
|
111
|
-
* adapter: {
|
|
112
|
-
* read: async ({ offset, limit }) => {
|
|
113
|
-
* const res = await fetch(`/api/items?offset=${offset}&limit=${limit}`);
|
|
114
|
-
* const data = await res.json();
|
|
115
|
-
* return { items: data.items, total: data.total };
|
|
116
|
-
* },
|
|
117
|
-
* },
|
|
118
|
-
* });
|
|
119
|
-
* </script>
|
|
120
|
-
* ```
|
|
121
|
-
*
|
|
122
|
-
* @param configInput - VList configuration (without `container`), plain or reactive
|
|
123
|
-
* @returns containerRef and reactive instance ref
|
|
124
|
-
*/
|
|
125
|
-
export declare function useVList<T extends VListItem = VListItem>(configInput: UseVListConfigInput<T>): UseVListReturn<T>;
|
|
126
|
-
/**
|
|
127
|
-
* Subscribe to a vlist event within Vue's lifecycle.
|
|
128
|
-
* Automatically unsubscribes on unmount.
|
|
129
|
-
*
|
|
130
|
-
* ```vue
|
|
131
|
-
* <script setup lang="ts">
|
|
132
|
-
* import { useVList, useVListEvent } from 'vlist/vue';
|
|
133
|
-
*
|
|
134
|
-
* const { containerRef, instance } = useVList(config);
|
|
135
|
-
*
|
|
136
|
-
* useVListEvent(instance, 'selection:change', ({ selected }) => {
|
|
137
|
-
* console.log('Selected items:', selected);
|
|
138
|
-
* });
|
|
139
|
-
*
|
|
140
|
-
* useVListEvent(instance, 'scroll', ({ scrollTop, direction }) => {
|
|
141
|
-
* console.log(`Scrolling ${direction} at ${scrollTop}px`);
|
|
142
|
-
* });
|
|
143
|
-
* </script>
|
|
144
|
-
* ```
|
|
145
|
-
*
|
|
146
|
-
* @param instance - Shallow ref to the vlist instance (from useVList)
|
|
147
|
-
* @param event - Event name
|
|
148
|
-
* @param handler - Event handler
|
|
149
|
-
*/
|
|
150
|
-
export declare function useVListEvent<T extends VListItem, K extends keyof VListEvents<T>>(instance: ShallowRef<VList<T> | null>, event: K, handler: EventHandler<VListEvents<T>[K]>): void;
|
|
151
|
-
//# sourceMappingURL=vue.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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,sBAAsB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,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 +0,0 @@
|
|
|
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,uBAAuB,CAAC;AAqb9D,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACnD,QAAQ,aAAa,CAAC,CAAC,CAAC,KACvB,YAAY,CAAC,CAAC,CAoEhB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/builder/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B,YAAY,EAEV,YAAY,EACZ,UAAU,EACV,aAAa,EAGb,WAAW,EACX,cAAc,EAGd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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};
|
package/dist/constants.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAM5C,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,yCAAyC;AACzC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAMpC;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAMtC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WAAa,CAAC;AAM7C,iCAAiC;AACjC,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,8CAA8C;AAC9C,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAEtD,2CAA2C;AAC3C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAMnD,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,WAAM,CAAC;AAE1C,iEAAiE;AACjE,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,sCAAsC;AACtC,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAMtD,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,mDAAmD;AACnD,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAM3C,6CAA6C;AAC7C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC"}
|
package/dist/core/core.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var ae="vlist";var ce=(n,l)=>{if(typeof n=="number"){let t=l;return{getOffset:o=>o*n,getHeight:()=>n,indexAtOffset:o=>t===0||n===0?0:Math.max(0,Math.min(Math.floor(o/n),t-1)),getTotalHeight:()=>t*n,getTotal:()=>t,rebuild:o=>{t=o}}}let a=l,s=new Float64Array(0),m=t=>{a=t,s=new Float64Array(t+1),s[0]=0;for(let o=0;o<t;o++)s[o+1]=s[o]+n(o)};return m(l),{getOffset:t=>t<=0?0:t>=a?s[a]:s[t],getHeight:t=>n(t),indexAtOffset:t=>{if(a===0||t<=0)return 0;if(t>=s[a])return a-1;let o=0,v=a-1;for(;o<v;){let p=o+v+1>>>1;s[p]<=t?o=p:v=p-1}return o},getTotalHeight:()=>s[a]??0,getTotal:()=>a,rebuild:t=>m(t)}},de=()=>{let n={},l=(t,o)=>(n[t]||(n[t]=new Set),n[t].add(o),()=>a(t,o)),a=(t,o)=>{n[t]?.delete(o)};return{on:l,off:a,emit:(t,o)=>{n[t]?.forEach(v=>{try{v(o)}catch(p){console.error(`[vlist] Error in "${t}" handler:`,p)}})},clear:()=>{for(let t in n)delete n[t]}}},me=n=>{if(typeof n=="string"){let l=document.querySelector(n);if(!l)throw new Error(`[vlist] Container not found: ${n}`);return l}return n},ue=(n,l,a)=>{let s=document.createElement("div");s.className=l,s.setAttribute("role","listbox"),s.setAttribute("tabindex","0"),a&&s.setAttribute("aria-label",a);let m=document.createElement("div");m.className=`${l}-viewport`,m.style.overflow="auto",m.style.height="100%",m.style.width="100%";let t=document.createElement("div");t.className=`${l}-content`,t.style.position="relative",t.style.width="100%";let o=document.createElement("div");return o.className=`${l}-items`,o.style.position="relative",o.style.width="100%",t.appendChild(o),m.appendChild(t),s.appendChild(m),n.appendChild(s),{root:s,viewport:m,content:t,items:o}},fe=(n=100)=>{let l=[];return{acquire:()=>{let t=l.pop();if(t)return t;let o=document.createElement("div");return o.setAttribute("role","option"),o},release:t=>{l.length<n&&(t.className="",t.textContent="",t.removeAttribute("style"),t.removeAttribute("data-index"),t.removeAttribute("data-id"),l.push(t))},clear:()=>{l.length=0}}},ge=(n,l,a,s,m)=>{if(s===0){m.start=0,m.end=0;return}let t=a.indexAtOffset(n),o=t,v=a.getOffset(t)-n;for(;o<s-1&&v<l;)v+=a.getHeight(o),o++;m.start=t,m.end=Math.min(o,s-1)},he=(n,l,a,s)=>{s.start=Math.max(0,n.start-l),s.end=Math.min(a-1,n.end+l)},ve=(n,l,a,s,m)=>{if(s===0)return 0;let t=Math.max(0,Math.min(n,s-1)),o=l.getOffset(t),v=l.getHeight(t),p=Math.max(0,l.getTotalHeight()-a),h;switch(m){case"center":h=o-(a-v)/2;break;case"end":h=o-a+v;break;default:h=o}return Math.max(0,Math.min(h,p))},pe=n=>n<.5?2*n*n:-1+(4-2*n)*n,be=0,Te=n=>{if(!n.container)throw new Error("[vlist] container is required");if(!n.item)throw new Error("[vlist] item configuration is required");if(n.item.height==null)throw new Error("[vlist] item.height is required");if(typeof n.item.height=="number"&&n.item.height<=0)throw new Error("[vlist] item.height must be positive");if(typeof n.item.height!="number"&&typeof n.item.height!="function")throw new Error("[vlist] item.height must be a number or (index) => number");if(!n.item.template)throw new Error("[vlist] item.template is required");let{item:l,items:a,overscan:s=3,classPrefix:m=ae,scrollElement:t,ariaLabel:o}=n,{height:v,template:p}=l,h=!!t,d=a?[...a]:[],S=!1,y=null,E=0,j=`${m}-${be++}`,Q=me(n.container),f=ue(Q,m,o),w=de(),b=ce(v,d.length),k=fe();h&&(f.root.style.overflow="visible",f.root.style.height="auto",f.viewport.style.overflow="visible",f.viewport.style.height="auto");let I=h?window.innerHeight:f.viewport.clientHeight,N={start:0,end:0},T={start:0,end:0},C={start:-1,end:-1},M=new Map,F={selected:!1,focused:!1},X=`${m}-item`,A="",_=(e,i)=>{typeof i=="string"?e.innerHTML=i:e.replaceChildren(i)},K=(e,i)=>{e.style.transform=`translateY(${Math.round(b.getOffset(i))}px)`},G=(e,i)=>{let r=k.acquire();return r.className=X,r.style.height=`${b.getHeight(e)}px`,r.dataset.index=String(e),r.dataset.id=String(i.id),r.ariaSelected="false",r.id=`${j}-item-${e}`,A=String(d.length),r.setAttribute("aria-setsize",A),r.setAttribute("aria-posinset",String(e+1)),_(r,p(i,e,F)),K(r,e),r},D=()=>{f.content.style.height=`${b.getTotalHeight()}px`},L=()=>{if(S||(ge(E,I,b,d.length,N),he(N,s,d.length,T),T.start===C.start&&T.end===C.end))return;let e=String(d.length),i=e!==A;A=e;for(let[c,g]of M)(c<T.start||c>T.end)&&(g.remove(),k.release(g),M.delete(c));let r=document.createDocumentFragment(),u=[];for(let c=T.start;c<=T.end;c++){let g=d[c];if(!g)continue;let x=M.get(c);if(x){let H=x.dataset.id,R=String(g.id);H!==R&&(_(x,p(g,c,F)),x.dataset.id=R,x.style.height=`${b.getHeight(c)}px`),K(x,c),i&&x.setAttribute("aria-setsize",A)}else{let H=G(c,g);r.appendChild(H),u.push({index:c,element:H})}}if(u.length>0){f.items.appendChild(r);for(let{index:c,element:g}of u)M.set(c,g)}C.start=T.start,C.end=T.end,w.emit("range:change",{range:{start:T.start,end:T.end}})},J=()=>{C.start=-1,C.end=-1,L()},O=null,q=()=>{if(S)return;let e=h?Math.max(0,t.scrollY-f.viewport.getBoundingClientRect().top-t.scrollY+window.scrollY):f.viewport.scrollTop,i=h?Math.max(0,t.scrollY+f.viewport.getBoundingClientRect().top*-1):e,r=i>=E?"down":"up";f.root.classList.contains(`${m}--scrolling`)||f.root.classList.add(`${m}--scrolling`),E=i,L(),w.emit("scroll",{scrollTop:i,direction:r}),O&&clearTimeout(O),O=setTimeout(()=>{f.root.classList.remove(`${m}--scrolling`)},150)},W=h?t:f.viewport;W.addEventListener("scroll",q,{passive:!0});let P=e=>{if(S)return;let r=e.target.closest("[data-index]");if(!r)return;let u=parseInt(r.dataset.index??"-1",10);if(u<0)return;let c=d[u];c&&w.emit("item:click",{item:c,index:u,event:e})},Z=e=>{if(S)return;let r=e.target.closest("[data-index]");if(!r)return;let u=parseInt(r.dataset.index??"-1",10);if(u<0)return;let c=d[u];c&&w.emit("item:dblclick",{item:c,index:u,event:e})};f.items.addEventListener("click",P),f.items.addEventListener("dblclick",Z);let Y=new ResizeObserver(e=>{if(!(S||h))for(let i of e){let r=i.contentRect.height;Math.abs(r-I)>1&&(I=r,D(),L(),w.emit("resize",{height:r,width:i.contentRect.width}))}});Y.observe(f.viewport);let V=null;h&&(V=()=>{if(S)return;let e=window.innerHeight;Math.abs(e-I)>1&&(I=e,D(),L(),w.emit("resize",{height:e,width:window.innerWidth}))},window.addEventListener("resize",V));let U=()=>{y!==null&&(cancelAnimationFrame(y),y=null)},ee=e=>typeof e=="string"?{align:e,behavior:"auto",duration:300}:e&&typeof e=="object"?{align:e.align??"start",behavior:e.behavior??"auto",duration:e.duration??300}:{align:"start",behavior:"auto",duration:300},z=e=>{if(h){let r=f.viewport.getBoundingClientRect().top+window.scrollY;t.scrollTo(0,r+e)}else f.viewport.scrollTop=e},te=(e,i,r)=>{if(U(),Math.abs(i-e)<1){z(i),E=i,L();return}let u=performance.now(),c=g=>{let x=g-u,H=Math.min(x/r,1),R=e+(i-e)*pe(H);z(R),E=R,L(),H<1?y=requestAnimationFrame(c):y=null};y=requestAnimationFrame(c)},B=(e,i)=>{let{align:r,behavior:u,duration:c}=ee(i),g=ve(e,b,I,d.length,r);u==="smooth"?te(E,g,c):(U(),z(g))},$=()=>{b.rebuild(d.length),D(),J()},ne=e=>{d=[...e],$()},re=e=>{d=[...d,...e],$()},oe=e=>{d=[...e,...d],$()},ie=(e,i)=>{let r=d.findIndex(c=>c.id===e);if(r<0)return;d[r]={...d[r],...i};let u=M.get(r);u&&(_(u,p(d[r],r,F)),u.dataset.id=String(d[r].id))},se=e=>{d=d.filter(i=>i.id!==e),$()},le=()=>{if(!S){S=!0,U(),W.removeEventListener("scroll",q),f.items.removeEventListener("click",P),Y.disconnect(),V&&window.removeEventListener("resize",V),O&&clearTimeout(O);for(let[,e]of M)e.remove(),k.release(e);M.clear(),k.clear(),w.clear(),f.root.remove()}};return D(),L(),{get element(){return f.root},get items(){return d},get total(){return d.length},setItems:ne,appendItems:re,prependItems:oe,updateItem:ie,removeItem:se,scrollToIndex:B,scrollToItem:(e,i)=>{let r=d.findIndex(u=>u.id===e);r>=0&&B(r,i)},cancelScroll:U,getScrollPosition:()=>E,getScrollSnapshot:()=>{if(d.length===0)return{index:0,offsetInItem:0};let e=b.indexAtOffset(E),i=Math.max(0,E-b.getOffset(e));return{index:e,offsetInItem:i}},restoreScroll:e=>{if(d.length===0)return;let i=Math.max(0,Math.min(e.index,d.length-1)),r=Math.max(0,b.getTotalHeight()-I),u=Math.max(0,Math.min(b.getOffset(i)+e.offsetInItem,r));if(h){let g=f.viewport.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:g+u,behavior:"auto"})}else f.viewport.scrollTo({top:u,behavior:"auto"});E=u,L()},on:(e,i)=>w.on(e,i),off:(e,i)=>w.off(e,i),destroy:le}};export{Te as createVList};
|
package/dist/core/full.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/core/full.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EACzD,QAAQ,WAAW,CAAC,CAAC,CAAC,KACrB,KAAK,CAAC,CAAC,CA6IT,CAAC"}
|
package/dist/core/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var Yj=(B,X)=>{if(typeof B==="number"){let q=X;return{getOffset:(J)=>J*B,getHeight:()=>B,indexAtOffset:(J)=>{if(q===0||B===0)return 0;return Math.max(0,Math.min(Math.floor(J/B),q-1))},getTotalHeight:()=>q*B,getTotal:()=>q,rebuild:(J)=>{q=J}}}let Y=X,U=new Float64Array(0),$=(q)=>{Y=q,U=new Float64Array(q+1),U[0]=0;for(let J=0;J<q;J++)U[J+1]=U[J]+B(J)};return $(X),{getOffset:(q)=>{if(q<=0)return 0;if(q>=Y)return U[Y];return U[q]},getHeight:(q)=>B(q),indexAtOffset:(q)=>{if(Y===0)return 0;if(q<=0)return 0;if(q>=U[Y])return Y-1;let J=0,F=Y-1;while(J<F){let N=J+F+1>>>1;if(U[N]<=q)J=N;else F=N-1}return J},getTotalHeight:()=>U[Y]??0,getTotal:()=>Y,rebuild:(q)=>$(q)}},Zj=()=>{let B={},X=(q,J)=>{if(!B[q])B[q]=new Set;return B[q].add(J),()=>Y(q,J)},Y=(q,J)=>{B[q]?.delete(J)};return{on:X,off:Y,emit:(q,J)=>{B[q]?.forEach((F)=>{try{F(J)}catch(N){console.error(`[vlist] Error in "${q}" handler:`,N)}})},clear:()=>{for(let q in B)delete B[q]}}},_j=(B)=>{if(typeof B==="string"){let X=document.querySelector(B);if(!X)throw Error(`[vlist] Container not found: ${B}`);return X}return B},$j=(B,X,Y)=>{let U=document.createElement("div");if(U.className=X,U.setAttribute("role","listbox"),U.setAttribute("tabindex","0"),Y)U.setAttribute("aria-label",Y);let $=document.createElement("div");$.className=`${X}-viewport`,$.style.overflow="auto",$.style.height="100%",$.style.width="100%";let q=document.createElement("div");q.className=`${X}-content`,q.style.position="relative",q.style.width="100%";let J=document.createElement("div");return J.className=`${X}-items`,J.style.position="relative",J.style.width="100%",q.appendChild(J),$.appendChild(q),U.appendChild($),B.appendChild(U),{root:U,viewport:$,content:q,items:J}},Qj=(B=100)=>{let X=[];return{acquire:()=>{let q=X.pop();if(q)return q;let J=document.createElement("div");return J.setAttribute("role","option"),J},release:(q)=>{if(X.length<B)q.className="",q.textContent="",q.removeAttribute("style"),q.removeAttribute("data-index"),q.removeAttribute("data-id"),X.push(q)},clear:()=>{X.length=0}}},Vj=(B,X,Y,U,$)=>{if(U===0){$.start=0,$.end=0;return}let q=Y.indexAtOffset(B),J=q,F=Y.getOffset(q)-B;while(J<U-1&&F<X)F+=Y.getHeight(J),J++;$.start=q,$.end=Math.min(J,U-1)},Lj=(B,X,Y,U)=>{U.start=Math.max(0,B.start-X),U.end=Math.min(Y-1,B.end+X)},kj=(B,X,Y,U,$)=>{if(U===0)return 0;let q=Math.max(0,Math.min(B,U-1)),J=X.getOffset(q),F=X.getHeight(q),N=Math.max(0,X.getTotalHeight()-Y),k;switch($){case"center":k=J-(Y-F)/2;break;case"end":k=J-Y+F;break;default:k=J}return Math.max(0,Math.min(k,N))},Fj=(B)=>B<0.5?2*B*B:-1+(4-2*B)*B,Nj=0,Aj=(B)=>{if(!B.container)throw Error("[vlist] container is required");if(!B.item)throw Error("[vlist] item configuration is required");if(B.item.height==null)throw Error("[vlist] item.height is required");if(typeof B.item.height==="number"&&B.item.height<=0)throw Error("[vlist] item.height must be positive");if(typeof B.item.height!=="number"&&typeof B.item.height!=="function")throw Error("[vlist] item.height must be a number or (index) => number");if(!B.item.template)throw Error("[vlist] item.template is required");let{item:X,items:Y,overscan:U=3,classPrefix:$="vlist",scrollElement:q,ariaLabel:J}=B,{height:F,template:N}=X,k=!!q,_=Y?[...Y]:[],y=!1,R=null,D=0,l=`${$}-${Nj++}`,o=_j(B.container),V=$j(o,$,J),W=Zj(),A=Yj(F,_.length),I=Qj();if(k)V.root.style.overflow="visible",V.root.style.height="auto",V.viewport.style.overflow="visible",V.viewport.style.height="auto";let E=k?window.innerHeight:V.viewport.clientHeight,h={start:0,end:0},M={start:0,end:0},C={start:-1,end:-1},b=new Map,f={selected:!1,focused:!1},n=`${$}-item`,T="",p=(j,K)=>{if(typeof K==="string")j.innerHTML=K;else j.replaceChildren(K)},c=(j,K)=>{j.style.transform=`translateY(${Math.round(A.getOffset(K))}px)`},i=(j,K)=>{let G=I.acquire();return G.className=n,G.style.height=`${A.getHeight(j)}px`,G.dataset.index=String(j),G.dataset.id=String(K.id),G.ariaSelected="false",G.id=`${l}-item-${j}`,T=String(_.length),G.setAttribute("aria-setsize",T),G.setAttribute("aria-posinset",String(j+1)),p(G,N(K,j,f)),c(G,j),G},v=()=>{V.content.style.height=`${A.getTotalHeight()}px`},P=()=>{if(y)return;if(Vj(D,E,A,_.length,h),Lj(h,U,_.length,M),M.start===C.start&&M.end===C.end)return;let j=String(_.length),K=j!==T;T=j;for(let[Z,L]of b)if(Z<M.start||Z>M.end)L.remove(),I.release(L),b.delete(Z);let G=document.createDocumentFragment(),Q=[];for(let Z=M.start;Z<=M.end;Z++){let L=_[Z];if(!L)continue;let z=b.get(Z);if(z){let H=z.dataset.id,w=String(L.id);if(H!==w)p(z,N(L,Z,f)),z.dataset.id=w,z.style.height=`${A.getHeight(Z)}px`;if(c(z,Z),K)z.setAttribute("aria-setsize",T)}else{let H=i(Z,L);G.appendChild(H),Q.push({index:Z,element:H})}}if(Q.length>0){V.items.appendChild(G);for(let{index:Z,element:L}of Q)b.set(Z,L)}C.start=M.start,C.end=M.end,W.emit("range:change",{range:{start:M.start,end:M.end}})},t=()=>{C.start=-1,C.end=-1,P()},O=null,m=()=>{if(y)return;let j=k?Math.max(0,q.scrollY-V.viewport.getBoundingClientRect().top-q.scrollY+window.scrollY):V.viewport.scrollTop,K=k?Math.max(0,q.scrollY+V.viewport.getBoundingClientRect().top*-1):j,G=K>=D?"down":"up";if(!V.root.classList.contains(`${$}--scrolling`))V.root.classList.add(`${$}--scrolling`);if(D=K,P(),W.emit("scroll",{scrollTop:K,direction:G}),O)clearTimeout(O);O=setTimeout(()=>{V.root.classList.remove(`${$}--scrolling`)},150)},d=k?q:V.viewport;d.addEventListener("scroll",m,{passive:!0});let s=(j)=>{if(y)return;let G=j.target.closest("[data-index]");if(!G)return;let Q=parseInt(G.dataset.index??"-1",10);if(Q<0)return;let Z=_[Q];if(!Z)return;W.emit("item:click",{item:Z,index:Q,event:j})},e=(j)=>{if(y)return;let G=j.target.closest("[data-index]");if(!G)return;let Q=parseInt(G.dataset.index??"-1",10);if(Q<0)return;let Z=_[Q];if(!Z)return;W.emit("item:dblclick",{item:Z,index:Q,event:j})};V.items.addEventListener("click",s),V.items.addEventListener("dblclick",e);let a=new ResizeObserver((j)=>{if(y||k)return;for(let K of j){let G=K.contentRect.height;if(Math.abs(G-E)>1)E=G,v(),P(),W.emit("resize",{height:G,width:K.contentRect.width})}});a.observe(V.viewport);let u=null;if(k)u=()=>{if(y)return;let j=window.innerHeight;if(Math.abs(j-E)>1)E=j,v(),P(),W.emit("resize",{height:j,width:window.innerWidth})},window.addEventListener("resize",u);let S=()=>{if(R!==null)cancelAnimationFrame(R),R=null},jj=(j)=>{if(typeof j==="string")return{align:j,behavior:"auto",duration:300};if(j&&typeof j==="object")return{align:j.align??"start",behavior:j.behavior??"auto",duration:j.duration??300};return{align:"start",behavior:"auto",duration:300}},g=(j)=>{if(k){let G=V.viewport.getBoundingClientRect().top+window.scrollY;q.scrollTo(0,G+j)}else V.viewport.scrollTop=j},qj=(j,K,G)=>{if(S(),Math.abs(K-j)<1){g(K),D=K,P();return}let Q=performance.now(),Z=(L)=>{let z=L-Q,H=Math.min(z/G,1),w=j+(K-j)*Fj(H);if(g(w),D=w,P(),H<1)R=requestAnimationFrame(Z);else R=null};R=requestAnimationFrame(Z)},r=(j,K)=>{let{align:G,behavior:Q,duration:Z}=jj(K),L=kj(j,A,E,_.length,G);if(Q==="smooth")qj(D,L,Z);else S(),g(L)},x=()=>{A.rebuild(_.length),v(),t()},Bj=(j)=>{_=[...j],x()},Gj=(j)=>{_=[..._,...j],x()},Jj=(j)=>{_=[...j,..._],x()},Kj=(j,K)=>{let G=_.findIndex((Z)=>Z.id===j);if(G<0)return;_[G]={..._[G],...K};let Q=b.get(G);if(Q)p(Q,N(_[G],G,f)),Q.dataset.id=String(_[G].id)},Uj=(j)=>{_=_.filter((K)=>K.id!==j),x()},Xj=()=>{if(y)return;if(y=!0,S(),d.removeEventListener("scroll",m),V.items.removeEventListener("click",s),a.disconnect(),u)window.removeEventListener("resize",u);if(O)clearTimeout(O);for(let[,j]of b)j.remove(),I.release(j);b.clear(),I.clear(),W.clear(),V.root.remove()};return v(),P(),{get element(){return V.root},get items(){return _},get total(){return _.length},setItems:Bj,appendItems:Gj,prependItems:Jj,updateItem:Kj,removeItem:Uj,scrollToIndex:r,scrollToItem:(j,K)=>{let G=_.findIndex((Q)=>Q.id===j);if(G>=0)r(G,K)},cancelScroll:S,getScrollPosition:()=>D,getScrollSnapshot:()=>{if(_.length===0)return{index:0,offsetInItem:0};let j=A.indexAtOffset(D),K=Math.max(0,D-A.getOffset(j));return{index:j,offsetInItem:K}},restoreScroll:(j)=>{if(_.length===0)return;let K=Math.max(0,Math.min(j.index,_.length-1)),G=Math.max(0,A.getTotalHeight()-E),Q=Math.max(0,Math.min(A.getOffset(K)+j.offsetInItem,G));if(k){let L=V.viewport.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:L+Q,behavior:"auto"})}else V.viewport.scrollTo({top:Q,behavior:"auto"});D=Q,P()},on:(j,K)=>W.on(j,K),off:(j,K)=>W.off(j,K),destroy:Xj}};export{Aj as createVList};
|
package/dist/core/lite.d.ts
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vlist/core - Lightweight Virtual List
|
|
3
|
-
*
|
|
4
|
-
* A self-contained, minimal virtual list factory for the common case:
|
|
5
|
-
* static or streaming lists that don't need selection, groups,
|
|
6
|
-
* compression, custom scrollbar, or async data adapters.
|
|
7
|
-
*
|
|
8
|
-
* ~10 KB minified vs ~42 KB for the full bundle.
|
|
9
|
-
*
|
|
10
|
-
* Supports:
|
|
11
|
-
* - Fixed and variable item heights
|
|
12
|
-
* - scrollToIndex with smooth animation
|
|
13
|
-
* - setItems / appendItems / prependItems / updateItem / removeItem
|
|
14
|
-
* - Events (scroll, item:click, range:change, resize)
|
|
15
|
-
* - Window (document) scrolling
|
|
16
|
-
* - ResizeObserver for container resize
|
|
17
|
-
* - DOM element pooling & DocumentFragment batching
|
|
18
|
-
*
|
|
19
|
-
* Does NOT include (use full `vlist` if needed):
|
|
20
|
-
* - Selection / keyboard navigation
|
|
21
|
-
* - Groups / sticky headers
|
|
22
|
-
* - Compression (lists > ~100K items)
|
|
23
|
-
* - Custom scrollbar
|
|
24
|
-
* - Async data adapter / placeholders
|
|
25
|
-
* - Velocity tracking / load cancellation
|
|
26
|
-
*/
|
|
27
|
-
/** Base item interface — must have an id */
|
|
28
|
-
export interface VListItem {
|
|
29
|
-
id: string | number;
|
|
30
|
-
[key: string]: unknown;
|
|
31
|
-
}
|
|
32
|
-
/** State passed to template */
|
|
33
|
-
export interface ItemState {
|
|
34
|
-
selected: boolean;
|
|
35
|
-
focused: boolean;
|
|
36
|
-
}
|
|
37
|
-
/** Item template function */
|
|
38
|
-
export type ItemTemplate<T extends VListItem = VListItem> = (item: T, index: number, state: ItemState) => string | HTMLElement;
|
|
39
|
-
/** Visible range */
|
|
40
|
-
export interface Range {
|
|
41
|
-
start: number;
|
|
42
|
-
end: number;
|
|
43
|
-
}
|
|
44
|
-
/** Options for scrollToIndex */
|
|
45
|
-
export interface ScrollToOptions {
|
|
46
|
-
align?: "start" | "center" | "end";
|
|
47
|
-
behavior?: "auto" | "smooth";
|
|
48
|
-
duration?: number;
|
|
49
|
-
}
|
|
50
|
-
/** Scroll position snapshot for save/restore */
|
|
51
|
-
export interface CoreScrollSnapshot {
|
|
52
|
-
/** First visible item index */
|
|
53
|
-
index: number;
|
|
54
|
-
/** Pixel offset within the first visible item (how far it's scrolled off) */
|
|
55
|
-
offsetInItem: number;
|
|
56
|
-
}
|
|
57
|
-
/** Event handler / unsubscribe */
|
|
58
|
-
export type EventHandler<T> = (payload: T) => void;
|
|
59
|
-
export type Unsubscribe = () => void;
|
|
60
|
-
/** Core event map */
|
|
61
|
-
export interface CoreEvents<T extends VListItem = VListItem> {
|
|
62
|
-
"item:click": {
|
|
63
|
-
item: T;
|
|
64
|
-
index: number;
|
|
65
|
-
event: MouseEvent;
|
|
66
|
-
};
|
|
67
|
-
"item:dblclick": {
|
|
68
|
-
item: T;
|
|
69
|
-
index: number;
|
|
70
|
-
event: MouseEvent;
|
|
71
|
-
};
|
|
72
|
-
scroll: {
|
|
73
|
-
scrollTop: number;
|
|
74
|
-
direction: "up" | "down";
|
|
75
|
-
};
|
|
76
|
-
"range:change": {
|
|
77
|
-
range: Range;
|
|
78
|
-
};
|
|
79
|
-
resize: {
|
|
80
|
-
height: number;
|
|
81
|
-
width: number;
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
/** Item configuration */
|
|
85
|
-
export interface CoreItemConfig<T extends VListItem = VListItem> {
|
|
86
|
-
height: number | ((index: number) => number);
|
|
87
|
-
template: ItemTemplate<T>;
|
|
88
|
-
}
|
|
89
|
-
/** Core configuration */
|
|
90
|
-
export interface CoreConfig<T extends VListItem = VListItem> {
|
|
91
|
-
container: HTMLElement | string;
|
|
92
|
-
item: CoreItemConfig<T>;
|
|
93
|
-
items?: T[];
|
|
94
|
-
overscan?: number;
|
|
95
|
-
classPrefix?: string;
|
|
96
|
-
ariaLabel?: string;
|
|
97
|
-
scrollElement?: Window;
|
|
98
|
-
}
|
|
99
|
-
/** Core VList instance */
|
|
100
|
-
export interface VListCore<T extends VListItem = VListItem> {
|
|
101
|
-
readonly element: HTMLElement;
|
|
102
|
-
readonly items: readonly T[];
|
|
103
|
-
readonly total: number;
|
|
104
|
-
setItems(items: T[]): void;
|
|
105
|
-
appendItems(items: T[]): void;
|
|
106
|
-
prependItems(items: T[]): void;
|
|
107
|
-
updateItem(id: string | number, updates: Partial<T>): void;
|
|
108
|
-
removeItem(id: string | number): void;
|
|
109
|
-
scrollToIndex(index: number, alignOrOptions?: "start" | "center" | "end" | ScrollToOptions): void;
|
|
110
|
-
scrollToItem(id: string | number, alignOrOptions?: "start" | "center" | "end" | ScrollToOptions): void;
|
|
111
|
-
cancelScroll(): void;
|
|
112
|
-
getScrollPosition(): number;
|
|
113
|
-
/** Get a snapshot of the current scroll position for save/restore */
|
|
114
|
-
getScrollSnapshot(): CoreScrollSnapshot;
|
|
115
|
-
/** Restore scroll position from a snapshot */
|
|
116
|
-
restoreScroll(snapshot: CoreScrollSnapshot): void;
|
|
117
|
-
on<K extends keyof CoreEvents<T>>(event: K, handler: EventHandler<CoreEvents<T>[K]>): Unsubscribe;
|
|
118
|
-
off<K extends keyof CoreEvents<T>>(event: K, handler: EventHandler<CoreEvents<T>[K]>): void;
|
|
119
|
-
destroy(): void;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Create a lightweight virtual list (core).
|
|
123
|
-
*
|
|
124
|
-
* This is the minimal-footprint alternative to `createVList` from `vlist`.
|
|
125
|
-
* Same essential behaviour, but without selection, groups, compression,
|
|
126
|
-
* custom scrollbar, or async data adapter support.
|
|
127
|
-
*/
|
|
128
|
-
export declare const createVList: <T extends VListItem = VListItem>(config: CoreConfig<T>) => VListCore<T>;
|
|
129
|
-
//# sourceMappingURL=lite.d.ts.map
|
package/dist/core/lite.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lite.d.ts","sourceRoot":"","sources":["../../src/core/lite.ts"],"names":[],"mappings":"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"}
|