@floor/vlist 0.6.2 → 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.
Files changed (144) hide show
  1. package/README.md +70 -75
  2. package/package.json +8 -29
  3. package/dist/adapters/index.d.ts +0 -20
  4. package/dist/adapters/index.d.ts.map +0 -1
  5. package/dist/adapters/react.d.ts +0 -119
  6. package/dist/adapters/react.d.ts.map +0 -1
  7. package/dist/adapters/svelte.d.ts +0 -198
  8. package/dist/adapters/svelte.d.ts.map +0 -1
  9. package/dist/adapters/vue.d.ts +0 -151
  10. package/dist/adapters/vue.d.ts.map +0 -1
  11. package/dist/builder/context.d.ts.map +0 -1
  12. package/dist/builder/core.d.ts.map +0 -1
  13. package/dist/builder/data.d.ts.map +0 -1
  14. package/dist/builder/index.d.ts.map +0 -1
  15. package/dist/builder/types.d.ts.map +0 -1
  16. package/dist/compression/index.js +0 -1
  17. package/dist/constants.d.ts.map +0 -1
  18. package/dist/core/core.js +0 -1
  19. package/dist/core/full.d.ts.map +0 -1
  20. package/dist/core/index.js +0 -1
  21. package/dist/core/lite.d.ts +0 -129
  22. package/dist/core/lite.d.ts.map +0 -1
  23. package/dist/core/minimal.d.ts +0 -104
  24. package/dist/core/minimal.d.ts.map +0 -1
  25. package/dist/core-light.d.ts +0 -104
  26. package/dist/core-light.d.ts.map +0 -1
  27. package/dist/core-light.js +0 -1
  28. package/dist/core.d.ts +0 -129
  29. package/dist/core.d.ts.map +0 -1
  30. package/dist/data/index.js +0 -1
  31. package/dist/events/emitter.d.ts.map +0 -1
  32. package/dist/events/index.d.ts.map +0 -1
  33. package/dist/features/async/index.d.ts.map +0 -1
  34. package/dist/features/async/manager.d.ts.map +0 -1
  35. package/dist/features/async/placeholder.d.ts.map +0 -1
  36. package/dist/features/async/plugin.d.ts.map +0 -1
  37. package/dist/features/async/sparse.d.ts.map +0 -1
  38. package/dist/features/grid/index.d.ts.map +0 -1
  39. package/dist/features/grid/layout.d.ts.map +0 -1
  40. package/dist/features/grid/plugin.d.ts.map +0 -1
  41. package/dist/features/grid/renderer.d.ts.map +0 -1
  42. package/dist/features/grid/types.d.ts.map +0 -1
  43. package/dist/features/page/index.d.ts.map +0 -1
  44. package/dist/features/page/plugin.d.ts.map +0 -1
  45. package/dist/features/scale/index.d.ts.map +0 -1
  46. package/dist/features/scale/plugin.d.ts.map +0 -1
  47. package/dist/features/scrollbar/controller.d.ts.map +0 -1
  48. package/dist/features/scrollbar/index.d.ts.map +0 -1
  49. package/dist/features/scrollbar/plugin.d.ts.map +0 -1
  50. package/dist/features/scrollbar/scrollbar.d.ts.map +0 -1
  51. package/dist/features/sections/index.d.ts.map +0 -1
  52. package/dist/features/sections/layout.d.ts.map +0 -1
  53. package/dist/features/sections/plugin.d.ts.map +0 -1
  54. package/dist/features/sections/sticky.d.ts.map +0 -1
  55. package/dist/features/sections/types.d.ts.map +0 -1
  56. package/dist/features/selection/index.d.ts.map +0 -1
  57. package/dist/features/selection/plugin.d.ts.map +0 -1
  58. package/dist/features/selection/state.d.ts.map +0 -1
  59. package/dist/features/snapshots/index.d.ts.map +0 -1
  60. package/dist/features/snapshots/plugin.d.ts.map +0 -1
  61. package/dist/groups/index.js +0 -1
  62. package/dist/index.d.ts.map +0 -1
  63. package/dist/plugins/compression/index.d.ts +0 -10
  64. package/dist/plugins/compression/index.d.ts.map +0 -1
  65. package/dist/plugins/compression/plugin.d.ts +0 -42
  66. package/dist/plugins/compression/plugin.d.ts.map +0 -1
  67. package/dist/plugins/data/index.d.ts +0 -9
  68. package/dist/plugins/data/index.d.ts.map +0 -1
  69. package/dist/plugins/data/manager.d.ts +0 -103
  70. package/dist/plugins/data/manager.d.ts.map +0 -1
  71. package/dist/plugins/data/placeholder.d.ts +0 -62
  72. package/dist/plugins/data/placeholder.d.ts.map +0 -1
  73. package/dist/plugins/data/plugin.d.ts +0 -60
  74. package/dist/plugins/data/plugin.d.ts.map +0 -1
  75. package/dist/plugins/data/sparse.d.ts +0 -91
  76. package/dist/plugins/data/sparse.d.ts.map +0 -1
  77. package/dist/plugins/grid/index.d.ts +0 -9
  78. package/dist/plugins/grid/index.d.ts.map +0 -1
  79. package/dist/plugins/grid/layout.d.ts +0 -29
  80. package/dist/plugins/grid/layout.d.ts.map +0 -1
  81. package/dist/plugins/grid/plugin.d.ts +0 -48
  82. package/dist/plugins/grid/plugin.d.ts.map +0 -1
  83. package/dist/plugins/grid/renderer.d.ts +0 -55
  84. package/dist/plugins/grid/renderer.d.ts.map +0 -1
  85. package/dist/plugins/grid/types.d.ts +0 -71
  86. package/dist/plugins/grid/types.d.ts.map +0 -1
  87. package/dist/plugins/groups/index.d.ts +0 -10
  88. package/dist/plugins/groups/index.d.ts.map +0 -1
  89. package/dist/plugins/groups/layout.d.ts +0 -46
  90. package/dist/plugins/groups/layout.d.ts.map +0 -1
  91. package/dist/plugins/groups/plugin.d.ts +0 -64
  92. package/dist/plugins/groups/plugin.d.ts.map +0 -1
  93. package/dist/plugins/groups/sticky.d.ts +0 -33
  94. package/dist/plugins/groups/sticky.d.ts.map +0 -1
  95. package/dist/plugins/groups/types.d.ts +0 -86
  96. package/dist/plugins/groups/types.d.ts.map +0 -1
  97. package/dist/plugins/scroll/controller.d.ts +0 -121
  98. package/dist/plugins/scroll/controller.d.ts.map +0 -1
  99. package/dist/plugins/scroll/index.d.ts +0 -8
  100. package/dist/plugins/scroll/index.d.ts.map +0 -1
  101. package/dist/plugins/scroll/plugin.d.ts +0 -60
  102. package/dist/plugins/scroll/plugin.d.ts.map +0 -1
  103. package/dist/plugins/scroll/scrollbar.d.ts +0 -73
  104. package/dist/plugins/scroll/scrollbar.d.ts.map +0 -1
  105. package/dist/plugins/selection/index.d.ts +0 -7
  106. package/dist/plugins/selection/index.d.ts.map +0 -1
  107. package/dist/plugins/selection/plugin.d.ts +0 -44
  108. package/dist/plugins/selection/plugin.d.ts.map +0 -1
  109. package/dist/plugins/selection/state.d.ts +0 -102
  110. package/dist/plugins/selection/state.d.ts.map +0 -1
  111. package/dist/plugins/snapshots/index.d.ts +0 -8
  112. package/dist/plugins/snapshots/index.d.ts.map +0 -1
  113. package/dist/plugins/snapshots/plugin.d.ts +0 -44
  114. package/dist/plugins/snapshots/plugin.d.ts.map +0 -1
  115. package/dist/plugins/window/index.d.ts +0 -8
  116. package/dist/plugins/window/index.d.ts.map +0 -1
  117. package/dist/plugins/window/plugin.d.ts +0 -53
  118. package/dist/plugins/window/plugin.d.ts.map +0 -1
  119. package/dist/react/index.js +0 -1
  120. package/dist/react/react.js +0 -1
  121. package/dist/render/compression.d.ts +0 -116
  122. package/dist/render/compression.d.ts.map +0 -1
  123. package/dist/render/heights.d.ts +0 -63
  124. package/dist/render/heights.d.ts.map +0 -1
  125. package/dist/render/index.d.ts +0 -9
  126. package/dist/render/index.d.ts.map +0 -1
  127. package/dist/render/renderer.d.ts +0 -103
  128. package/dist/render/renderer.d.ts.map +0 -1
  129. package/dist/render/virtual.d.ts +0 -139
  130. package/dist/render/virtual.d.ts.map +0 -1
  131. package/dist/rendering/heights.d.ts.map +0 -1
  132. package/dist/rendering/index.d.ts.map +0 -1
  133. package/dist/rendering/renderer.d.ts.map +0 -1
  134. package/dist/rendering/scale.d.ts.map +0 -1
  135. package/dist/rendering/viewport.d.ts.map +0 -1
  136. package/dist/scroll/index.js +0 -1
  137. package/dist/svelte/index.js +0 -1
  138. package/dist/svelte/svelte.js +0 -1
  139. package/dist/types.d.ts.map +0 -1
  140. package/dist/vlist.d.ts +0 -22
  141. package/dist/vlist.d.ts.map +0 -1
  142. package/dist/vue/index.js +0 -1
  143. package/dist/vue/vue.js +0 -1
  144. package/dist/window/index.js +0 -1
@@ -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};
@@ -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};
@@ -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"}
@@ -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};
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"lite.d.ts","sourceRoot":"","sources":["../../src/core/lite.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-light.d.ts","sourceRoot":"","sources":["../src/core-light.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- var e=(B,K)=>{let W=K;return{getOffset:(J)=>J*B,getHeight:()=>B,indexAtOffset:(J)=>{if(W===0||B===0)return 0;return Math.max(0,Math.min(Math.floor(J/B),W-1))},getTotalHeight:()=>W*B,getTotal:()=>W,rebuild:(J)=>{W=J}}},jj=()=>{let B={},K=(j,Q)=>{if(!B[j])B[j]=new Set;return B[j].add(Q),()=>W(j,Q)},W=(j,Q)=>{B[j]?.delete(Q)};return{on:K,off:W,emit:(j,Q)=>{B[j]?.forEach((N)=>{try{N(Q)}catch(Z){console.error(`[vlist] Error in "${j}" handler:`,Z)}})},clear:()=>{for(let j in B)delete B[j]}}},qj=(B)=>{if(typeof B==="string"){let K=document.querySelector(B);if(!K)throw Error(`[vlist] Container not found: ${B}`);return K}return B},Bj=(B,K,W)=>{let J=document.createElement("div");if(J.className=K,J.setAttribute("role","listbox"),J.setAttribute("tabindex","0"),W)J.setAttribute("aria-label",W);let G=document.createElement("div");G.className=`${K}-viewport`,G.style.overflow="auto",G.style.height="100%",G.style.width="100%";let j=document.createElement("div");j.className=`${K}-content`,j.style.position="relative",j.style.width="100%";let Q=document.createElement("div");return Q.className=`${K}-items`,Q.style.position="relative",Q.style.width="100%",j.appendChild(Q),G.appendChild(j),J.appendChild(G),B.appendChild(J),{root:J,viewport:G,content:j,items:Q}},Gj=(B=100)=>{let K=[];return{acquire:()=>{let j=K.pop();if(j)return j;let Q=document.createElement("div");return Q.setAttribute("role","option"),Q},release:(j)=>{if(K.length<B)j.className="",j.textContent="",j.removeAttribute("style"),j.removeAttribute("data-index"),j.removeAttribute("data-id"),K.push(j)},clear:()=>{K.length=0}}},Jj=(B,K,W,J,G)=>{if(J===0){G.start=0,G.end=0;return}let j=W.indexAtOffset(B),Q=j,N=W.getOffset(j)-B;while(Q<J-1&&N<K)N+=W.getHeight(Q),Q++;G.start=j,G.end=Math.min(Q,J-1)},Kj=(B,K,W,J)=>{J.start=Math.max(0,B.start-K),J.end=Math.min(W-1,B.end+K)},Qj=0,Uj=(B)=>{let{item:K,items:W,overscan:J=3,classPrefix:G="vlist",ariaLabel:j}=B,{height:Q,template:N}=K,Z=W?[...W]:[],y=!1,H=0,O=null,h=`${G}-${Qj++}`,c=qj(B.container),$=Bj(c,G,j),D=jj(),F=e(Q,Z.length),b=Gj(),w=$.viewport.clientHeight,S={start:0,end:0},M={start:0,end:0},L={start:-1,end:-1},A=new Map,P={selected:!1,focused:!1},m=`${G}-item`,z="",v=(q,U)=>{if(typeof U==="string")q.innerHTML=U;else q.replaceChildren(U)},I=(q,U)=>{q.style.transform=`translateY(${Math.round(F.getOffset(U))}px)`},d=(q,U)=>{let X=b.acquire();X.className=m,X.style.height=`${F.getHeight(q)}px`,X.dataset.index=String(q),X.dataset.id=String(U.id),X.ariaSelected="false",X.id=`${h}-item-${q}`,z=String(Z.length),X.setAttribute("aria-setsize",z),X.setAttribute("aria-posinset",String(q+1));let V=U.id===O;if(P.selected=V,V)X.classList.add(`${G}-item--selected`);else X.classList.remove(`${G}-item--selected`);return v(X,N(U,q,P)),I(X,q),X},f=()=>{$.content.style.height=`${F.getTotalHeight()}px`},C=()=>{if(y)return;if(Jj(H,w,F,Z.length,S),Kj(S,J,Z.length,M),M.start===L.start&&M.end===L.end)return;let q=String(Z.length),U=q!==z;z=q;for(let[Y,k]of A)if(Y<M.start||Y>M.end)k.remove(),b.release(k),A.delete(Y);let X=document.createDocumentFragment(),V=[];for(let Y=M.start;Y<=M.end;Y++){let k=Z[Y];if(!k)continue;let _=A.get(Y);if(_){let T=_.dataset.id,p=String(k.id);if(T!==p)v(_,N(k,Y,P)),_.dataset.id=p,_.style.height=`${F.getHeight(Y)}px`;let g=k.id===O;if(P.selected=g,g)_.classList.add(`${G}-item--selected`);else _.classList.remove(`${G}-item--selected`);if(I(_,Y),U)_.setAttribute("aria-setsize",z)}else{let T=d(Y,k);X.appendChild(T),V.push({index:Y,element:T})}}if(V.length>0){$.items.appendChild(X);for(let{index:Y,element:k}of V)A.set(Y,k)}L.start=M.start,L.end=M.end,D.emit("range:change",{range:{start:M.start,end:M.end}})},u=()=>{L.start=-1,L.end=-1,C()},E=null,x=()=>{if(y)return;let q=$.viewport.scrollTop,U=Math.max(0,q),X=U>=H?"down":"up";if(!$.root.classList.contains(`${G}--scrolling`))$.root.classList.add(`${G}--scrolling`);if(H=U,C(),D.emit("scroll",{scrollTop:U,direction:X}),E)clearTimeout(E);E=setTimeout(()=>{$.root.classList.remove(`${G}--scrolling`)},150)};$.viewport.addEventListener("scroll",x,{passive:!0});let o=(q)=>{if(O===q)return;O=q,u(),D.emit("selection:change",{selectedId:O})},s=()=>{if(O===null)return;O=null,u(),D.emit("selection:change",{selectedId:null})},a=()=>O,r=(q,U="start")=>{let X=Math.max(0,Math.min(q,Z.length-1)),V=F.getOffset(X),Y=F.getHeight(X),k=Math.max(0,F.getTotalHeight()-w),_=V;if(U==="center")_=V-w/2+Y/2;else if(U==="end")_=V-w+Y;_=Math.max(0,Math.min(_,k)),$.viewport.scrollTop=_},R=()=>{F.rebuild(Z.length),f(),u()},l=(q)=>{Z=[...q],R()},n=(q)=>{Z=[...Z,...q],R()},i=(q)=>{Z=[...q,...Z],R()},t=()=>{if(y)return;if(y=!0,$.viewport.removeEventListener("scroll",x),E)clearTimeout(E);for(let[,q]of A)q.remove(),b.release(q);A.clear(),b.clear(),D.clear(),$.root.remove()};return f(),C(),{get element(){return $.root},get items(){return Z},get total(){return Z.length},setItems:l,appendItems:n,prependItems:i,scrollToIndex:r,getScrollPosition:()=>H,selectItem:o,deselectItem:s,getSelectedId:a,on:(q,U)=>D.on(q,U),off:(q,U)=>D.off(q,U),destroy:t}};export{Uj as createVList};