@floor/vlist 0.6.2 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -75
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/vlist.d.ts +7 -5
- package/dist/vlist.js +1 -0
- package/package.json +12 -28
- 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 +0 -22
- 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.map +0 -1
- package/dist/vue/index.js +0 -1
- package/dist/vue/vue.js +0 -1
- package/dist/window/index.js +0 -1
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
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vlist - Virtual List (Builder-based)
|
|
3
|
-
*
|
|
4
|
-
* This is the new default entry point that uses the builder pattern internally.
|
|
5
|
-
* It provides full backwards compatibility with the monolithic API while maintaining
|
|
6
|
-
* modularity and smaller bundle sizes through automatic plugin application.
|
|
7
|
-
*
|
|
8
|
-
* For the legacy monolithic implementation, use 'vlist/full' instead.
|
|
9
|
-
*/
|
|
10
|
-
import type { VListConfig, VListItem, VList } from "../types";
|
|
11
|
-
/**
|
|
12
|
-
* Create a virtual list instance.
|
|
13
|
-
*
|
|
14
|
-
* This is a convenience wrapper around the builder pattern that automatically
|
|
15
|
-
* includes plugins based on the configuration provided, maintaining full backwards
|
|
16
|
-
* compatibility with the monolithic API.
|
|
17
|
-
*
|
|
18
|
-
* @param config - Virtual list configuration
|
|
19
|
-
* @returns Virtual list instance with full API
|
|
20
|
-
*/
|
|
21
|
-
export declare const createVList: <T extends VListItem = VListItem>(config: VListConfig<T>) => VList<T>;
|
|
22
|
-
//# sourceMappingURL=full.d.ts.map
|
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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"}
|
package/dist/core/minimal.d.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vlist/core-light - Ultra-Lightweight Virtual List (Fixed Heights Only)
|
|
3
|
-
*
|
|
4
|
-
* An even lighter variant of vlist/core that only supports fixed-height items.
|
|
5
|
-
* Use this when all items have the same height and you need the absolute smallest bundle.
|
|
6
|
-
*
|
|
7
|
-
* ~3-4 KB minified vs ~10 KB for vlist/core vs ~42 KB for the full bundle.
|
|
8
|
-
*
|
|
9
|
-
* Supports:
|
|
10
|
-
* - Fixed item heights only
|
|
11
|
-
* - Container scrolling only
|
|
12
|
-
* - Single item selection
|
|
13
|
-
* - Instant scrollToIndex (no animation)
|
|
14
|
-
* - setItems / appendItems / prependItems
|
|
15
|
-
* - Events (scroll, range:change, selection:change)
|
|
16
|
-
* - DOM element pooling & DocumentFragment batching
|
|
17
|
-
*
|
|
18
|
-
* Does NOT include (use vlist/core or full `vlist` if needed):
|
|
19
|
-
* - Variable item heights
|
|
20
|
-
* - Window scrolling
|
|
21
|
-
* - Smooth scroll animation
|
|
22
|
-
* - Single item mutations (updateItem/removeItem)
|
|
23
|
-
* - Click event handling
|
|
24
|
-
* - ResizeObserver / auto-resize
|
|
25
|
-
* - Validation
|
|
26
|
-
* - Selection / keyboard navigation
|
|
27
|
-
* - Groups / sticky headers
|
|
28
|
-
* - Compression (lists > ~100K items)
|
|
29
|
-
* - Custom scrollbar
|
|
30
|
-
* - Async data adapter / placeholders
|
|
31
|
-
*/
|
|
32
|
-
/** Base item interface — must have an id */
|
|
33
|
-
export interface VListItem {
|
|
34
|
-
id: string | number;
|
|
35
|
-
[key: string]: unknown;
|
|
36
|
-
}
|
|
37
|
-
/** State passed to template */
|
|
38
|
-
export interface ItemState {
|
|
39
|
-
selected: boolean;
|
|
40
|
-
focused: boolean;
|
|
41
|
-
}
|
|
42
|
-
/** Item template function */
|
|
43
|
-
export type ItemTemplate<T extends VListItem = VListItem> = (item: T, index: number, state: ItemState) => string | HTMLElement;
|
|
44
|
-
/** Visible range */
|
|
45
|
-
export interface Range {
|
|
46
|
-
start: number;
|
|
47
|
-
end: number;
|
|
48
|
-
}
|
|
49
|
-
/** Event handler / unsubscribe */
|
|
50
|
-
export type EventHandler<T> = (payload: T) => void;
|
|
51
|
-
export type Unsubscribe = () => void;
|
|
52
|
-
/** Core event map */
|
|
53
|
-
export interface CoreEvents {
|
|
54
|
-
scroll: {
|
|
55
|
-
scrollTop: number;
|
|
56
|
-
direction: "up" | "down";
|
|
57
|
-
};
|
|
58
|
-
"range:change": {
|
|
59
|
-
range: Range;
|
|
60
|
-
};
|
|
61
|
-
"selection:change": {
|
|
62
|
-
selectedId: string | number | null;
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
/** Item configuration */
|
|
66
|
-
export interface CoreItemConfig<T extends VListItem = VListItem> {
|
|
67
|
-
height: number;
|
|
68
|
-
template: ItemTemplate<T>;
|
|
69
|
-
}
|
|
70
|
-
/** Core configuration */
|
|
71
|
-
export interface CoreConfig<T extends VListItem = VListItem> {
|
|
72
|
-
container: HTMLElement | string;
|
|
73
|
-
item: CoreItemConfig<T>;
|
|
74
|
-
items?: T[];
|
|
75
|
-
overscan?: number;
|
|
76
|
-
classPrefix?: string;
|
|
77
|
-
ariaLabel?: string;
|
|
78
|
-
}
|
|
79
|
-
/** Core VList instance */
|
|
80
|
-
export interface VListCore<T extends VListItem = VListItem> {
|
|
81
|
-
readonly element: HTMLElement;
|
|
82
|
-
readonly items: readonly T[];
|
|
83
|
-
readonly total: number;
|
|
84
|
-
setItems(items: T[]): void;
|
|
85
|
-
appendItems(items: T[]): void;
|
|
86
|
-
prependItems(items: T[]): void;
|
|
87
|
-
scrollToIndex(index: number, align?: "start" | "center" | "end"): void;
|
|
88
|
-
getScrollPosition(): number;
|
|
89
|
-
selectItem(id: string | number): void;
|
|
90
|
-
deselectItem(): void;
|
|
91
|
-
getSelectedId(): string | number | null;
|
|
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
|
-
destroy(): void;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create a lightweight virtual list (core).
|
|
98
|
-
*
|
|
99
|
-
* This is the minimal-footprint alternative to `createVList` from `vlist`.
|
|
100
|
-
* Same essential behaviour, but without selection, groups, compression,
|
|
101
|
-
* custom scrollbar, or async data adapter support.
|
|
102
|
-
*/
|
|
103
|
-
export declare const createVList: <T extends VListItem = VListItem>(config: CoreConfig<T>) => VListCore<T>;
|
|
104
|
-
//# sourceMappingURL=minimal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"minimal.d.ts","sourceRoot":"","sources":["../../src/core/minimal.ts"],"names":[],"mappings":"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"}
|
package/dist/core-light.d.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vlist/core-light - Ultra-Lightweight Virtual List (Fixed Heights Only)
|
|
3
|
-
*
|
|
4
|
-
* An even lighter variant of vlist/core that only supports fixed-height items.
|
|
5
|
-
* Use this when all items have the same height and you need the absolute smallest bundle.
|
|
6
|
-
*
|
|
7
|
-
* ~3-4 KB minified vs ~10 KB for vlist/core vs ~42 KB for the full bundle.
|
|
8
|
-
*
|
|
9
|
-
* Supports:
|
|
10
|
-
* - Fixed item heights only
|
|
11
|
-
* - Container scrolling only
|
|
12
|
-
* - Single item selection
|
|
13
|
-
* - Instant scrollToIndex (no animation)
|
|
14
|
-
* - setItems / appendItems / prependItems
|
|
15
|
-
* - Events (scroll, range:change, selection:change)
|
|
16
|
-
* - DOM element pooling & DocumentFragment batching
|
|
17
|
-
*
|
|
18
|
-
* Does NOT include (use vlist/core or full `vlist` if needed):
|
|
19
|
-
* - Variable item heights
|
|
20
|
-
* - Window scrolling
|
|
21
|
-
* - Smooth scroll animation
|
|
22
|
-
* - Single item mutations (updateItem/removeItem)
|
|
23
|
-
* - Click event handling
|
|
24
|
-
* - ResizeObserver / auto-resize
|
|
25
|
-
* - Validation
|
|
26
|
-
* - Selection / keyboard navigation
|
|
27
|
-
* - Groups / sticky headers
|
|
28
|
-
* - Compression (lists > ~100K items)
|
|
29
|
-
* - Custom scrollbar
|
|
30
|
-
* - Async data adapter / placeholders
|
|
31
|
-
*/
|
|
32
|
-
/** Base item interface — must have an id */
|
|
33
|
-
export interface VListItem {
|
|
34
|
-
id: string | number;
|
|
35
|
-
[key: string]: unknown;
|
|
36
|
-
}
|
|
37
|
-
/** State passed to template */
|
|
38
|
-
export interface ItemState {
|
|
39
|
-
selected: boolean;
|
|
40
|
-
focused: boolean;
|
|
41
|
-
}
|
|
42
|
-
/** Item template function */
|
|
43
|
-
export type ItemTemplate<T extends VListItem = VListItem> = (item: T, index: number, state: ItemState) => string | HTMLElement;
|
|
44
|
-
/** Visible range */
|
|
45
|
-
export interface Range {
|
|
46
|
-
start: number;
|
|
47
|
-
end: number;
|
|
48
|
-
}
|
|
49
|
-
/** Event handler / unsubscribe */
|
|
50
|
-
export type EventHandler<T> = (payload: T) => void;
|
|
51
|
-
export type Unsubscribe = () => void;
|
|
52
|
-
/** Core event map */
|
|
53
|
-
export interface CoreEvents {
|
|
54
|
-
scroll: {
|
|
55
|
-
scrollTop: number;
|
|
56
|
-
direction: "up" | "down";
|
|
57
|
-
};
|
|
58
|
-
"range:change": {
|
|
59
|
-
range: Range;
|
|
60
|
-
};
|
|
61
|
-
"selection:change": {
|
|
62
|
-
selectedId: string | number | null;
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
/** Item configuration */
|
|
66
|
-
export interface CoreItemConfig<T extends VListItem = VListItem> {
|
|
67
|
-
height: number;
|
|
68
|
-
template: ItemTemplate<T>;
|
|
69
|
-
}
|
|
70
|
-
/** Core configuration */
|
|
71
|
-
export interface CoreConfig<T extends VListItem = VListItem> {
|
|
72
|
-
container: HTMLElement | string;
|
|
73
|
-
item: CoreItemConfig<T>;
|
|
74
|
-
items?: T[];
|
|
75
|
-
overscan?: number;
|
|
76
|
-
classPrefix?: string;
|
|
77
|
-
ariaLabel?: string;
|
|
78
|
-
}
|
|
79
|
-
/** Core VList instance */
|
|
80
|
-
export interface VListCore<T extends VListItem = VListItem> {
|
|
81
|
-
readonly element: HTMLElement;
|
|
82
|
-
readonly items: readonly T[];
|
|
83
|
-
readonly total: number;
|
|
84
|
-
setItems(items: T[]): void;
|
|
85
|
-
appendItems(items: T[]): void;
|
|
86
|
-
prependItems(items: T[]): void;
|
|
87
|
-
scrollToIndex(index: number, align?: "start" | "center" | "end"): void;
|
|
88
|
-
getScrollPosition(): number;
|
|
89
|
-
selectItem(id: string | number): void;
|
|
90
|
-
deselectItem(): void;
|
|
91
|
-
getSelectedId(): string | number | null;
|
|
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
|
-
destroy(): void;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create a lightweight virtual list (core).
|
|
98
|
-
*
|
|
99
|
-
* This is the minimal-footprint alternative to `createVList` from `vlist`.
|
|
100
|
-
* Same essential behaviour, but without selection, groups, compression,
|
|
101
|
-
* custom scrollbar, or async data adapter support.
|
|
102
|
-
*/
|
|
103
|
-
export declare const createVList: <T extends VListItem = VListItem>(config: CoreConfig<T>) => VListCore<T>;
|
|
104
|
-
//# sourceMappingURL=core-light.d.ts.map
|