virtua 0.36.3 → 0.37.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.
@@ -1,16 +1,14 @@
1
1
  <script lang="ts" generics="T">
2
2
  import { onMount, onDestroy } from "svelte";
3
3
  import {
4
- SCROLL_IDLE,
5
4
  type StateVersion,
6
- getOverscanedRange,
7
5
  CHANGE_ITEM_LENGTH,
8
6
  createVirtualizer,
9
7
  FIX_SCROLL_JUMP,
10
8
  GET_ITEM_OFFSET,
11
9
  GET_JUMP_COUNT,
12
10
  GET_RANGE,
13
- GET_SCROLL_DIRECTION,
11
+ GET_IS_SCROLLING,
14
12
  GET_SCROLL_OFFSET,
15
13
  GET_SCROLL_SIZE,
16
14
  GET_TOTAL_SIZE,
@@ -26,6 +24,8 @@
26
24
  GET_START_SPACER_SIZE,
27
25
  GET_ITEMS_LENGTH,
28
26
  GET_ITEM_SIZE,
27
+ GET_START_INDEX,
28
+ GET_END_INDEX,
29
29
  } from "./core";
30
30
  import { defaultGetKey, styleToString } from "./utils";
31
31
  import ListItem from "./ListItem.svelte";
@@ -39,7 +39,7 @@
39
39
  as = "div",
40
40
  item: itemAs,
41
41
  scrollRef,
42
- overscan = 4,
42
+ overscan,
43
43
  itemSize,
44
44
  shift = false,
45
45
  horizontal = false,
@@ -47,12 +47,12 @@
47
47
  children,
48
48
  onscroll,
49
49
  onscrollend,
50
- onrangechange,
51
50
  }: Props = $props();
52
51
 
53
52
  const virtualizer = createVirtualizer(
54
53
  data.length,
55
54
  itemSize,
55
+ overscan,
56
56
  horizontal,
57
57
  (v) => {
58
58
  rerender = v;
@@ -70,20 +70,9 @@
70
70
  let rerender: StateVersion = $state([]);
71
71
 
72
72
  let range = $derived(rerender && virtualizer[GET_RANGE]());
73
- let scrollDirection = $derived(
74
- rerender && virtualizer[GET_SCROLL_DIRECTION]()
75
- );
73
+ let isScrolling = $derived(rerender && virtualizer[GET_IS_SCROLLING]());
76
74
  let totalSize = $derived(rerender && virtualizer[GET_TOTAL_SIZE]());
77
75
  let jumpCount = $derived(rerender && virtualizer[GET_JUMP_COUNT]());
78
- let extendedRange = $derived(
79
- getOverscanedRange(
80
- range[0],
81
- range[1],
82
- overscan,
83
- scrollDirection,
84
- data.length
85
- )
86
- );
87
76
 
88
77
  onMount(() => {
89
78
  if (scrollRef) {
@@ -115,14 +104,6 @@
115
104
  virtualizer[FIX_SCROLL_JUMP]();
116
105
  });
117
106
 
118
- let prevRange: typeof range | undefined;
119
- $effect(() => {
120
- if (prevRange && prevRange[0] === range[0] && prevRange[1] === range[1])
121
- return;
122
- prevRange = range;
123
- onrangechange && onrangechange(range[0], range[1]);
124
- });
125
-
126
107
  export const getScrollOffset = virtualizer[
127
108
  GET_SCROLL_OFFSET
128
109
  ] satisfies VirtualizerHandle["getScrollOffset"] as VirtualizerHandle["getScrollOffset"];
@@ -132,6 +113,12 @@
132
113
  export const getViewportSize = virtualizer[
133
114
  GET_VIEWPORT_SIZE
134
115
  ] satisfies VirtualizerHandle["getViewportSize"] as VirtualizerHandle["getViewportSize"];
116
+ export const getStartIndex = virtualizer[
117
+ GET_START_INDEX
118
+ ] satisfies VirtualizerHandle["getStartIndex"] as VirtualizerHandle["getStartIndex"];
119
+ export const getEndIndex = virtualizer[
120
+ GET_END_INDEX
121
+ ] satisfies VirtualizerHandle["getEndIndex"] as VirtualizerHandle["getEndIndex"];
135
122
  export const getItemOffset = virtualizer[
136
123
  GET_ITEM_OFFSET
137
124
  ] satisfies VirtualizerHandle["getItemOffset"] as VirtualizerHandle["getItemOffset"];
@@ -149,7 +136,7 @@
149
136
  ] satisfies VirtualizerHandle["scrollBy"] as VirtualizerHandle["scrollBy"];
150
137
 
151
138
  let items = $derived.by(() => {
152
- const [startIndex, endIndex] = extendedRange;
139
+ const [startIndex, endIndex] = range;
153
140
  const newItems: T[] = [];
154
141
  for (let i = startIndex, j = endIndex; i <= j; i++) {
155
142
  newItems.push(data[i]!);
@@ -166,7 +153,7 @@
166
153
  visibility: "hidden", // TODO replace with other optimization methods
167
154
  width: horizontal ? totalSize + "px" : "100%",
168
155
  height: horizontal ? "100%" : totalSize + "px",
169
- "pointer-events": scrollDirection !== SCROLL_IDLE ? "none" : undefined,
156
+ "pointer-events": isScrolling ? "none" : undefined,
170
157
  })
171
158
  );
172
159
  </script>
@@ -176,8 +163,8 @@
176
163
  Customizable list virtualizer for advanced usage. See {@link VirtualizerProps} and {@link VirtualizerHandle}.
177
164
  -->
178
165
  <svelte:element this={as} bind:this={containerRef} style={containerStyle}>
179
- {#each items as item, i (getKey(item, i + extendedRange[0]))}
180
- {@const index = i + extendedRange[0]}
166
+ {#each items as item, i (getKey(item, i + range[0]))}
167
+ {@const index = i + range[0]}
181
168
  <ListItem
182
169
  {children}
183
170
  {item}
@@ -8,6 +8,8 @@ declare class __sveltets_Render<T> {
8
8
  getScrollOffset: () => number;
9
9
  getScrollSize: () => number;
10
10
  getViewportSize: () => number;
11
+ getStartIndex: () => number;
12
+ getEndIndex: () => number;
11
13
  getItemOffset: (index: number) => number;
12
14
  getItemSize: (index: number) => number;
13
15
  scrollToIndex: (index: number, opts?: import("../core/types").ScrollToIndexOpts) => void;
@@ -66,12 +66,6 @@ export interface VirtualizerProps<T> {
66
66
  * Callback invoked when scrolling stops.
67
67
  */
68
68
  onscrollend?: () => void;
69
- /**
70
- * Callback invoked when visible items range changes.
71
- * @param startIndex The start index of viewable items.
72
- * @param endIndex The end index of viewable items.
73
- */
74
- onrangechange?: (startIndex: number, endIndex: number) => void;
75
69
  }
76
70
  /**
77
71
  * Methods of {@link Virtualizer}.
@@ -89,6 +83,14 @@ export interface VirtualizerHandle {
89
83
  * Get current offsetHeight, or offsetWidth if horizontal: true.
90
84
  */
91
85
  getViewportSize: () => number;
86
+ /**
87
+ * Get the start index of visible range of items.
88
+ */
89
+ getStartIndex: () => number;
90
+ /**
91
+ * Get the end index of visible range of items.
92
+ */
93
+ getEndIndex: () => number;
92
94
  /**
93
95
  * Get item offset from start.
94
96
  * @param index index of item
@@ -1,48 +1,55 @@
1
1
  <script lang="ts" generics="T">
2
2
  import { onMount, onDestroy } from "svelte";
3
3
  import {
4
- SCROLL_IDLE,
5
4
  type StateVersion,
6
- getOverscanedRange,
7
5
  CHANGE_ITEM_LENGTH,
8
6
  createWindowVirtualizer,
9
7
  FIX_SCROLL_JUMP,
10
8
  GET_ITEM_OFFSET,
11
9
  GET_JUMP_COUNT,
12
10
  GET_RANGE,
13
- GET_SCROLL_DIRECTION,
11
+ GET_IS_SCROLLING,
14
12
  GET_TOTAL_SIZE,
15
13
  IS_ITEM_HIDDEN,
16
14
  OBSERVE_ITEM_RESIZE,
17
15
  ON_MOUNT,
18
16
  ON_UN_MOUNT,
19
17
  GET_ITEMS_LENGTH,
18
+ GET_START_INDEX,
19
+ GET_END_INDEX,
20
20
  } from "./core";
21
21
  import { defaultGetKey, styleToString } from "./utils";
22
22
  import ListItem from "./ListItem.svelte";
23
- import type { WindowVirtualizerProps } from "./WindowVirtualizer.type";
23
+ import type {
24
+ WindowVirtualizerHandle,
25
+ WindowVirtualizerProps,
26
+ } from "./WindowVirtualizer.type";
24
27
 
25
28
  interface Props extends WindowVirtualizerProps<T> {}
26
29
 
27
30
  let {
28
31
  data,
29
32
  getKey = defaultGetKey,
30
- overscan = 4,
33
+ overscan,
31
34
  itemSize,
32
35
  shift = false,
33
36
  horizontal = false,
34
37
  children,
38
+ onscroll,
35
39
  onscrollend,
36
- onrangechange,
37
40
  }: Props = $props();
38
41
 
39
42
  const virtualizer = createWindowVirtualizer(
40
43
  data.length,
41
44
  itemSize,
45
+ overscan,
42
46
  horizontal,
43
47
  (v) => {
44
48
  rerender = v;
45
49
  },
50
+ (offset) => {
51
+ onscroll && onscroll(offset);
52
+ },
46
53
  () => {
47
54
  onscrollend && onscrollend();
48
55
  }
@@ -53,20 +60,9 @@
53
60
  let rerender: StateVersion = $state([]);
54
61
 
55
62
  let range = $derived(rerender && virtualizer[GET_RANGE]());
56
- let scrollDirection = $derived(
57
- rerender && virtualizer[GET_SCROLL_DIRECTION]()
58
- );
63
+ let isScrolling = $derived(rerender && virtualizer[GET_IS_SCROLLING]());
59
64
  let totalSize = $derived(rerender && virtualizer[GET_TOTAL_SIZE]());
60
65
  let jumpCount = $derived(rerender && virtualizer[GET_JUMP_COUNT]());
61
- let extendedRange = $derived(
62
- getOverscanedRange(
63
- range[0],
64
- range[1],
65
- overscan,
66
- scrollDirection,
67
- data.length
68
- )
69
- );
70
66
 
71
67
  onMount(() => {
72
68
  virtualizer[ON_MOUNT](containerRef!);
@@ -88,16 +84,15 @@
88
84
  virtualizer[FIX_SCROLL_JUMP]();
89
85
  });
90
86
 
91
- let prevRange: typeof range | undefined;
92
- $effect(() => {
93
- if (prevRange && prevRange[0] === range[0] && prevRange[1] === range[1])
94
- return;
95
- prevRange = range;
96
- onrangechange && onrangechange(range[0], range[1]);
97
- });
87
+ export const getStartIndex = virtualizer[
88
+ GET_START_INDEX
89
+ ] satisfies WindowVirtualizerHandle["getStartIndex"] as WindowVirtualizerHandle["getStartIndex"];
90
+ export const getEndIndex = virtualizer[
91
+ GET_END_INDEX
92
+ ] satisfies WindowVirtualizerHandle["getEndIndex"] as WindowVirtualizerHandle["getEndIndex"];
98
93
 
99
94
  let items = $derived.by(() => {
100
- const [startIndex, endIndex] = extendedRange;
95
+ const [startIndex, endIndex] = range;
101
96
  const newItems: T[] = [];
102
97
  for (let i = startIndex, j = endIndex; i <= j; i++) {
103
98
  newItems.push(data[i]!);
@@ -114,7 +109,7 @@
114
109
  visibility: "hidden", // TODO replace with other optimization methods
115
110
  width: horizontal ? totalSize + "px" : "100%",
116
111
  height: horizontal ? "100%" : totalSize + "px",
117
- "pointer-events": scrollDirection !== SCROLL_IDLE ? "none" : undefined,
112
+ "pointer-events": isScrolling ? "none" : undefined,
118
113
  })
119
114
  );
120
115
  </script>
@@ -124,8 +119,8 @@
124
119
  {@link Virtualizer} controlled by the window scrolling. See {@link WindowVirtualizerProps} and {@link WindowVirtualizerHandle}.
125
120
  -->
126
121
  <div bind:this={containerRef} style={containerStyle}>
127
- {#each items as item, i (getKey(item, i + extendedRange[0]))}
128
- {@const index = i + extendedRange[0]}
122
+ {#each items as item, i (getKey(item, i + range[0]))}
123
+ {@const index = i + range[0]}
129
124
  <ListItem
130
125
  {children}
131
126
  {item}
@@ -4,7 +4,10 @@ declare class __sveltets_Render<T> {
4
4
  events(): {};
5
5
  slots(): {};
6
6
  bindings(): "";
7
- exports(): {};
7
+ exports(): {
8
+ getStartIndex: () => number;
9
+ getEndIndex: () => number;
10
+ };
8
11
  }
9
12
  interface $$IsomorphicComponent {
10
13
  new <T>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
@@ -37,14 +37,26 @@ export interface WindowVirtualizerProps<T> {
37
37
  * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.
38
38
  */
39
39
  horizontal?: boolean;
40
+ /**
41
+ * Callback invoked whenever scroll offset changes.
42
+ * @param offset Current scrollTop, or scrollLeft if horizontal: true.
43
+ */
44
+ onscroll?: (offset: number) => void;
40
45
  /**
41
46
  * Callback invoked when scrolling stops.
42
47
  */
43
48
  onscrollend?: () => void;
49
+ }
50
+ /**
51
+ * Methods of {@link WindowVirtualizer}.
52
+ */
53
+ export interface WindowVirtualizerHandle {
54
+ /**
55
+ * Get the start index of visible range of items.
56
+ */
57
+ getStartIndex: () => number;
44
58
  /**
45
- * Callback invoked when visible items range changes.
46
- * @param startIndex The start index of viewable items.
47
- * @param endIndex The end index of viewable items.
59
+ * Get the end index of visible range of items.
48
60
  */
49
- onrangechange?: (startIndex: number, endIndex: number) => void;
61
+ getEndIndex: () => number;
50
62
  }
@@ -1,10 +1 @@
1
1
  export {};
2
- // /**
3
- // * Methods of {@link WindowVirtualizer}.
4
- // */
5
- // export interface WindowVirtualizerHandle {
6
- // /**
7
- // * Get current {@link CacheSnapshot}.
8
- // */
9
- // readonly cache: CacheSnapshot;
10
- // }
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  import { type StateVersion } from "../core/store";
3
- export { SCROLL_IDLE, type StateVersion, getOverscanedRange, } from "../core/store";
3
+ export { type StateVersion } from "../core/store";
4
4
  export { isRTLDocument } from "../core/environment";
5
5
  export type { ItemResizeObserver } from "../core/resizer";
6
6
  export declare const ON_MOUNT = 0;
@@ -9,7 +9,7 @@ export declare const GET_RANGE = 2;
9
9
  export declare const GET_TOTAL_SIZE = 3;
10
10
  export declare const GET_VIEWPORT_SIZE = 4;
11
11
  export declare const GET_SCROLL_OFFSET = 5;
12
- export declare const GET_SCROLL_DIRECTION = 6;
12
+ export declare const GET_IS_SCROLLING = 6;
13
13
  export declare const GET_JUMP_COUNT = 7;
14
14
  export declare const GET_ITEM_OFFSET = 8;
15
15
  export declare const GET_ITEM_SIZE = 9;
@@ -24,18 +24,20 @@ export declare const GET_SCROLL_SIZE = 17;
24
24
  export declare const SCROLL_TO = 18;
25
25
  export declare const SCROLL_BY = 19;
26
26
  export declare const SCROLL_TO_INDEX = 20;
27
+ export declare const GET_START_INDEX = 21;
28
+ export declare const GET_END_INDEX = 22;
27
29
  /**
28
30
  * This function is workaround for terser minification.
29
31
  * Svelte doesn't seem to have a good way to modify and print its AST.
30
32
  */
31
- export declare const createVirtualizer: (count: number, itemSize: number | undefined, horizontal: boolean, onUpdate: (v: StateVersion) => void, onScroll: (offset: number) => void, onScrollEnd: () => void) => {
33
+ export declare const createVirtualizer: (count: number, itemSize: number | undefined, overscan: number | undefined, horizontal: boolean, onUpdate: (v: StateVersion) => void, onScroll: (offset: number) => void, onScrollEnd: () => void) => {
32
34
  0: (scrollable: HTMLElement) => void;
33
35
  1: () => void;
34
36
  2: () => import("../core/types").ItemsRange;
35
37
  3: () => number;
36
38
  4: () => number;
37
39
  5: () => number;
38
- 6: () => import("../core/store").ScrollDirection;
40
+ 6: () => boolean;
39
41
  7: () => number;
40
42
  8: (index: number) => number;
41
43
  9: (index: number) => number;
@@ -50,19 +52,21 @@ export declare const createVirtualizer: (count: number, itemSize: number | undef
50
52
  18: (offset: number) => void;
51
53
  19: (offset: number) => void;
52
54
  20: (index: number, opts?: import("..").ScrollToIndexOpts) => void;
55
+ 21: () => number;
56
+ 22: () => number;
53
57
  };
54
58
  /**
55
59
  * This function is workaround for terser minification.
56
60
  * Svelte doesn't seem to have a good way to modify and print its AST.
57
61
  */
58
- export declare const createWindowVirtualizer: (count: number, itemSize: number | undefined, horizontal: boolean, onUpdate: (v: StateVersion) => void, onScrollEnd: () => void) => {
62
+ export declare const createWindowVirtualizer: (count: number, itemSize: number | undefined, overscan: number | undefined, horizontal: boolean, onUpdate: (v: StateVersion) => void, onScroll: (offset: number) => void, onScrollEnd: () => void) => {
59
63
  0: (scrollable: HTMLElement) => void;
60
64
  1: () => void;
61
65
  2: () => import("../core/types").ItemsRange;
62
66
  3: () => number;
63
67
  4: () => number;
64
68
  5: () => number;
65
- 6: () => import("../core/store").ScrollDirection;
69
+ 6: () => boolean;
66
70
  7: () => number;
67
71
  8: (index: number) => number;
68
72
  10: (index: number) => boolean;
@@ -70,4 +74,6 @@ export declare const createWindowVirtualizer: (count: number, itemSize: number |
70
74
  13: import("./core").ItemResizeObserver;
71
75
  14: () => void;
72
76
  15: (len: number, shift?: boolean) => void;
77
+ 21: () => number;
78
+ 22: () => number;
73
79
  };
@@ -1 +1 @@
1
- const e=null,{min:t,max:o,abs:r,floor:n}=Math,s=setTimeout,c=(e,r,n)=>t(n,o(r,e)),i="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},l=e=>{let t,o;return(...r)=>(t||(t=!0,o=e(...r)),o)},u=-1,a=(e,t,o)=>{const r=o?"unshift":"push";for(let o=0;o<t;o++)e[r](u);return e},f=(e,t)=>{const o=e.t[t];return o===u?e.o:o},_=(e,o,r)=>{const n=e.t[o]===u;return e.t[o]=r,e.i=t(o,e.i),n},d=(e,t)=>{if(!e.l)return 0;if(e.i>=t)return e.u[t];e.i<0&&(e.u[0]=0,e.i=0);let o=e.i,r=e.u[o];for(;o<t;)r+=f(e,o),e.u[++o]=r;return e.i=t,r},h=(e,t,o=0,r=e.l-1)=>{for(;o<=r;){const s=n((o+r)/2),c=d(e,s);if(c<=t){if(c+f(e,s)>t)return s;o=s+1}else r=s-1}return c(o,0,e.l-1)},p=(e,o,r)=>{const n=o-e.l;return e.i=r?-1:t(o-1,e.i),e.l=o,n>0?(a(e.u,n),a(e.t,n,r),e.o*n):(e.u.splice(n),(r?e.t.splice(0,-n):e.t.splice(n)).reduce(((t,o)=>t-(o===u?e.o:o)),0))},m="undefined"!=typeof window,g=()=>document.documentElement,v=e=>e.ownerDocument,b=e=>e.defaultView,w=/*#__PURE__*/l((()=>!!m&&"rtl"===getComputedStyle(g()).direction)),S=/*#__PURE__*/l((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),k=/*#__PURE__*/l((()=>"scrollBehavior"in g().style)),I=0,y=(e,r,n,s,c)=>(1!==s&&(e-=o(0,n)),2!==s&&(r+=o(0,n)),[o(e,0),t(r,c-1)]),z=(n,s=40,c=0,i,l=!1)=>{let m=!!c,g=[],v=0,b=0,w=0,k=0,I=0,y=0,z=0,x=0,T=0,R=m?[0,o(c-1,0)]:e,J=[0,0],M=0;const C=((e,t)=>({o:t,t:a([],e),l:e,i:-1,u:a([],e)}))(n,s),L=new Set,O=()=>w-b,P=e=>((e,o,r,n)=>{if(n=t(n,e.l-1),d(e,n)<=o){const t=h(e,o+r,n);return[h(e,o,n,t),t]}{const t=h(e,o,void 0,n);return[t,h(e,o+r,t)]}})(C,e,v,J[0]),W=()=>(e=>e.l?d(e,e.l-1)+f(e,e.l-1):0)(C),q=e=>d(C,e)-y,B=e=>f(C,e),D=e=>{e&&(S()&&0!==x?y+=e:(I+=e,k++))};return{_:()=>g,h:()=>(e=>[e.t.slice(),e.o])(C),p:()=>z?J:(J=P(o(0,O()+y+I)),R?[t(J[0],R[0]),o(J[1],R[1])]:J),m:e=>C.t[e]===u,v:()=>!!R&&C.t.slice(o(0,R[0]-1),t(C.l-1,R[1]+1)+1).includes(u),S:q,k:B,I:()=>C.l,T:()=>w,R:()=>x,J:()=>v,M:()=>b,C:W,L:()=>k,O:()=>(z=I,I=0,[z,2===T||O()+v>=W()]),P(e,t){const o=[e,t];return L.add(o),()=>{L.delete(o)}},W(t,n){let s,c,i=0;switch(t){case 1:{const t=z;z=0;const o=n-w,s=r(o);t&&s<r(t)+1||0!==T||(x=o<0?2:1),m&&(R=e,m=!1),w=n,i=4;const l=O();l>=-v&&l<=W()&&(i+=1,c=s>v);break}case 2:i=8,0!==x&&(s=!0,i+=1),x=0,T=0,R=e;break;case 3:{const e=n.filter((([e,t])=>C.t[e]!==t));if(!e.length)break;D(e.reduce(((e,[t,o])=>((2===T||(R?t<R[0]:q(t)+(0===x&&0===T?B(t):0)<O()))&&(e+=o-B(t)),e)),0));for(const[t,o]of e){const e=B(t),r=_(C,t,o);l&&(M+=r?o:o-e)}l&&v&&M>v&&(D(((e,t)=>{let r=0;const n=e.t.filter(((e,o)=>{const n=e!==u;return n&&o<t&&r++,n})),s=e.o;return e.i=-1,((e.o=(e=>{const t=(e=>[...e].sort(((e,t)=>e-t)))(e),o=e.length/2|0;return t.length%2==0?(t[o-1]+t[o])/2:t[o]})(n))-s)*o(t-r,0)})(C,J[0])),l=!1),i=3,c=!0;break}case 4:v!==n&&(v=n,i=3);break;case 5:n[1]?(D(p(C,n[0],!0)),T=2,i=1):p(C,n[0]);break;case 6:b=n;break;case 7:T=1;break;case 8:R=P(n),i=1}i&&(g=[],s&&y&&(I+=y,y=0,k++),L.forEach((([e,t])=>{i&e&&t(c)})))}}},x=e=>{let t;return{q(o){(t||(t=new(b(v(o)).ResizeObserver)(e))).observe(o)},B(e){t.unobserve(e)},D(){t&&t.disconnect()}}},T=(e,t)=>t&&w()?-e:e,R=(t,o,r,n,c,i)=>{const l=Date.now;let u=0,a=!1,f=!1,_=!1,d=!1;const h=(()=>{let o;const r=()=>{o!=e&&clearTimeout(o)},n=()=>{r(),o=s((()=>{o=e,(()=>{if(a||f)return a=!1,void h();_=!1,t.W(2)})()}),150)};return n.U=r,n})(),p=()=>{u=l(),_&&(d=!0),i&&t.W(6,i()),t.W(1,n()),h()},m=e=>{if(a||0===t.R()||e.ctrlKey)return;const o=l()-u;150>o&&50<o&&(r?e.deltaX:e.deltaY)&&(a=!0)},g=()=>{f=!0,_=d=!1},v=()=>{f=!1,S()&&(_=!0)};return o.addEventListener("scroll",p),o.addEventListener("wheel",m,{passive:!0}),o.addEventListener("touchstart",g,{passive:!0}),o.addEventListener("touchend",v,{passive:!0}),{D:()=>{o.removeEventListener("scroll",p),o.removeEventListener("wheel",m),o.removeEventListener("touchstart",g),o.removeEventListener("touchend",v),h.U()},V:()=>{const[e,o]=t.O();e&&(c(T(e,r),o,d),d=!1,o&&t.J()>t.C()&&t.W(1,n()))}}},J=0,M=1,C=2,L=3,O=4,P=5,W=6,q=7,B=8,D=9,U=10,V=11,X=12,Y=13,F=14,H=15,j=16,A=17,E=18,G=19,K=20,N=(t,r,n,l,u,a)=>{const f=z(t,null!=r?r:40,void 0,0,!r),_=((t,o)=>{let r;const n=o?"width":"height",s=new WeakMap,c=x((o=>{const c=[];for(const{target:i,contentRect:l}of o)if(i.offsetParent)if(i===r)t.W(4,l[n]);else{const t=s.get(i);t!=e&&c.push([t,l[n]])}c.length&&t.W(3,c)}));return{X(e){c.q(r=e)},Y:(e,t)=>(s.set(e,t),c.q(e),()=>{s.delete(e),c.B(e)}),D:c.D}})(f,n),d=((e,t)=>{let o,r,n;const l=t?"scrollLeft":"scrollTop",u=t?"overflowX":"overflowY",a=async(r,c)=>{if(!o)return void i((()=>a(r,c)));n&&n();const u=()=>{let t;return[new Promise(((o,r)=>{t=o,n=r,(e=>!!e.J())(e)&&s(r,150)})),e.P(2,(()=>{t&&t()}))]};if(c&&k()){for(;e.W(8,r()),e.v();){const[e,t]=u();try{await e}catch(e){return}finally{t()}}o.scrollTo({[t?"left":"top"]:T(r(),t),behavior:"smooth"})}else for(;;){const[n,s]=u();try{o[l]=T(r(),t),e.W(7),await n}catch(e){return}finally{s()}}};return{q(c){o=c,r=R(e,c,t,(()=>T(c[l],t)),((t,o,r)=>{if(r){const e=c.style,t=e[u];e[u]="hidden",s((()=>{e[u]=t}))}o?(c[l]=e.T()+t,n&&n()):c[l]+=t}))},D(){r&&r.D()},F(e){a((()=>e))},H(t){t+=e.T(),a((()=>t))},j(t,{align:o,smooth:r,offset:n=0}={}){if(t=c(t,0,e.I()-1),"nearest"===o){const r=e.S(t),n=e.T();if(r<n)o="start";else{if(!(r+e.k(t)>n+e.J()))return;o="end"}}a((()=>n+e.M()+e.S(t)+("end"===o?e.k(t)-e.J():"center"===o?(e.k(t)-e.J())/2:0)),r)},V:()=>{r&&r.V()}}})(f,n),h=f.P(1,(()=>{l(f._())})),p=f.P(4,(()=>{u(f.T())})),m=f.P(8,(()=>{a()}));return{[J]:e=>{_.X(e),d.q(e)},[M]:()=>{h(),p(),m(),_.D(),d.D()},[C]:f.p,[L]:f.C,[O]:f.J,[P]:f.T,[W]:f.R,[q]:f.L,[B]:f.S,[D]:f.k,[U]:f.m,[V]:f.I,[X]:f.M,[Y]:_.Y,[F]:d.V,[H]:(e,t)=>{f.W(5,[e,t])},[j]:e=>{f.W(6,e)},[A]:()=>(e=>o(e.C(),e.J()))(f),[E]:d.F,[G]:d.H,[K]:d.j}},Q=(t,o,r,n,s)=>{const c=z(t,null!=o?o:40,void 0,0,!o),i=((t,o)=>{const r=o?"width":"height",n=o?"innerWidth":"innerHeight",s=new WeakMap,c=x((o=>{const n=[];for(const{target:t,contentRect:c}of o){if(!t.offsetParent)continue;const o=s.get(t);o!=e&&n.push([o,c[r]])}n.length&&t.W(3,n)}));let i;return{X(e){const o=b(v(e)),r=()=>{t.W(4,o[n])};o.addEventListener("resize",r),r(),i=()=>{o.removeEventListener("resize",r)}},Y:(e,t)=>(s.set(e,t),c.q(e),()=>{s.delete(e),c.B(e)}),D(){i&&i(),c.D()}}})(c,r),l=((e,t)=>{let o;return{q(r){const n=t?"scrollX":"scrollY",s=v(r),c=b(s),i=s.body,l=(e,t,o,r=0)=>{const n=o?"offsetLeft":"offsetTop",s=r+(o&&w()?c.innerWidth-e[n]-e.offsetWidth:e[n]),i=e.offsetParent;return e!==t&&i?l(i,t,o,s):s};o=R(e,c,t,(()=>T(c[n],t)),((o,r)=>{r?c.scroll({[t?"left":"top"]:e.T()+o}):c.scrollBy(t?o:0,t?0:o)}),(()=>l(r,i,t)))},D(){o&&o.D()},V:()=>{o&&o.V()}}})(c,r),u=c.P(1,(()=>{n(c._())})),a=c.P(8,(()=>{s()}));return{[J]:e=>{i.X(e),l.q(e)},[M]:()=>{u(),a(),i.D(),l.D()},[C]:c.p,[L]:c.C,[O]:c.J,[P]:c.T,[W]:c.R,[q]:c.L,[B]:c.S,[U]:c.m,[V]:c.I,[Y]:i.Y,[F]:l.V,[H]:(e,t)=>{c.W(5,[e,t])}}};export{H as CHANGE_ITEM_LENGTH,j as CHANGE_START_MARGIN,F as FIX_SCROLL_JUMP,V as GET_ITEMS_LENGTH,B as GET_ITEM_OFFSET,D as GET_ITEM_SIZE,q as GET_JUMP_COUNT,C as GET_RANGE,W as GET_SCROLL_DIRECTION,P as GET_SCROLL_OFFSET,A as GET_SCROLL_SIZE,X as GET_START_SPACER_SIZE,L as GET_TOTAL_SIZE,O as GET_VIEWPORT_SIZE,U as IS_ITEM_HIDDEN,Y as OBSERVE_ITEM_RESIZE,J as ON_MOUNT,M as ON_UN_MOUNT,G as SCROLL_BY,I as SCROLL_IDLE,E as SCROLL_TO,K as SCROLL_TO_INDEX,N as createVirtualizer,Q as createWindowVirtualizer,y as getOverscanedRange,w as isRTLDocument};
1
+ const e=null,{min:t,max:r,abs:o,floor:n}=Math,s=setTimeout,c=(e,o,n)=>t(n,r(o,e)),i="function"==typeof queueMicrotask?queueMicrotask:e=>{Promise.resolve().then(e)},l=e=>{let t,r;return()=>(t||(t=!0,r=e()),r)},u=-1,a=(e,t,r)=>{const o=r?"unshift":"push";for(let r=0;r<t;r++)e[o](u);return e},f=(e,t)=>{const r=e.t[t];return r===u?e.o:r},_=(e,r,o)=>{const n=e.t[r]===u;return e.t[r]=o,e.i=t(r,e.i),n},d=(e,t)=>{if(!e.l)return 0;if(e.i>=t)return e.u[t];e.i<0&&(e.u[0]=0,e.i=0);let r=e.i,o=e.u[r];for(;r<t;)o+=f(e,r),e.u[++r]=o;return e.i=t,o},h=(e,t,r=0,o=e.l-1)=>{for(;r<=o;){const s=n((r+o)/2),c=d(e,s);if(c<=t){if(c+f(e,s)>t)return s;r=s+1}else o=s-1}return c(r,0,e.l-1)},p=(e,r,o)=>{const n=r-e.l;return e.i=o?-1:t(r-1,e.i),e.l=r,n>0?(a(e.u,n),a(e.t,n,o),e.o*n):(e.u.splice(n),(o?e.t.splice(0,-n):e.t.splice(n)).reduce(((t,r)=>t-(r===u?e.o:r)),0))},g="undefined"!=typeof window,m=()=>document.documentElement,v=e=>e.ownerDocument,b=e=>e.defaultView,w=/*#__PURE__*/l((()=>!!g&&"rtl"===getComputedStyle(m()).direction)),S=/*#__PURE__*/l((()=>/iP(hone|od|ad)/.test(navigator.userAgent))),I=/*#__PURE__*/l((()=>"scrollBehavior"in m().style)),k=(n,s=40,c=4,i=0,l,g=!1)=>{let m=!!i,v=[],b=0,w=0,I=0,k=0,x=0,y=0,z=0,T=0,R=0,J=m?[0,r(i-1,0)]:e,M=[0,0],C=0;const L=((e,t)=>({o:t,t:a([],e),l:e,i:-1,u:a([],e)}))(n,s),O=new Set,P=()=>I-w,W=()=>P()+y+x,q=e=>((e,r,o,n)=>{if(n=t(n,e.l-1),d(e,n)<=r){const t=h(e,r+o,n);return[h(e,r,n,t),t]}{const t=h(e,r,void 0,n);return[t,h(e,r+o,t)]}})(L,e,b,M[0]),B=()=>(e=>e.l?d(e,e.l-1)+f(e,e.l-1):0)(L),U=e=>d(L,e)-y,V=e=>f(L,e),X=e=>{e&&(S()&&0!==T?y+=e:(x+=e,k++))};return{_:()=>v,h:()=>(e=>[e.t.slice(),e.o])(L),p:()=>{if(z)return M;let[e,o]=q(r(0,W()));return J&&(e=t(e,J[0]),o=r(o,J[1])),1!==T&&(e-=r(0,c)),2!==T&&(o+=r(0,c)),M=[r(e,0),t(o,L.l-1)]},m:()=>h(L,W()),v:()=>h(L,W()+b),S:e=>L.t[e]===u,I:()=>!!J&&L.t.slice(r(0,J[0]-1),t(L.l-1,J[1]+1)+1).includes(u),k:U,T:V,R:()=>L.l,J:()=>I,M:()=>0!==T,C:()=>b,L:()=>w,O:B,P:()=>k,W:()=>(z=x,x=0,[z,2===R||P()+b>=B()]),q:(e,t)=>{const r=[e,t];return O.add(r),()=>{O.delete(r)}},B:(t,n)=>{let s,c,i=0;switch(t){case 1:{const t=z;z=0;const r=n-I,s=o(r);t&&s<o(t)+1||0!==R||(T=r<0?2:1),m&&(J=e,m=!1),I=n,i=4;const l=P();l>=-b&&l<=B()&&(i+=1,c=s>b);break}case 2:i=8,0!==T&&(s=!0,i+=1),T=0,R=0,J=e;break;case 3:{const e=n.filter((([e,t])=>L.t[e]!==t));if(!e.length)break;X(e.reduce(((e,[t,r])=>((2===R||(J?t<J[0]:U(t)+(0===T&&0===R?V(t):0)<P()))&&(e+=r-V(t)),e)),0));for(const[t,r]of e){const e=V(t),o=_(L,t,r);g&&(C+=o?r:r-e)}g&&b&&C>b&&(X(((e,t)=>{let o=0;const n=e.t.filter(((e,r)=>{const n=e!==u;return n&&r<t&&o++,n})),s=e.o;return e.i=-1,((e.o=(e=>{const t=(e=>[...e].sort(((e,t)=>e-t)))(e),r=e.length/2|0;return t.length%2==0?(t[r-1]+t[r])/2:t[r]})(n))-s)*r(t-o,0)})(L,h(L,W()))),g=!1),i=3,c=!0;break}case 4:b!==n&&(b=n,i=3);break;case 5:n[1]?(X(p(L,n[0],!0)),R=2,i=1):p(L,n[0]);break;case 6:w=n;break;case 7:R=1;break;case 8:J=q(n),i=1}i&&(v=[],s&&y&&(x+=y,y=0,k++),O.forEach((([e,t])=>{i&e&&t(c)})))}}},x=e=>{let t;return{U(r){(t||(t=new(b(v(r)).ResizeObserver)(e))).observe(r)},V(e){t.unobserve(e)},X(){t&&t.disconnect()}}},y=(e,t)=>t&&w()?-e:e,z=(t,r,o,n,c,i)=>{const l=Date.now;let u=0,a=!1,f=!1,_=!1,d=!1;const h=(()=>{let r;const o=()=>{r!=e&&clearTimeout(r)},n=()=>{o(),r=s((()=>{r=e,(()=>{if(a||f)return a=!1,void h();_=!1,t.B(2)})()}),150)};return n.Y=o,n})(),p=()=>{u=l(),_&&(d=!0),i&&t.B(6,i()),t.B(1,n()),h()},g=e=>{if(a||!t.M()||e.ctrlKey)return;const r=l()-u;150>r&&50<r&&(o?e.deltaX:e.deltaY)&&(a=!0)},m=()=>{f=!0,_=d=!1},v=()=>{f=!1,S()&&(_=!0)};return r.addEventListener("scroll",p),r.addEventListener("wheel",g,{passive:!0}),r.addEventListener("touchstart",m,{passive:!0}),r.addEventListener("touchend",v,{passive:!0}),{X:()=>{r.removeEventListener("scroll",p),r.removeEventListener("wheel",g),r.removeEventListener("touchstart",m),r.removeEventListener("touchend",v),h.Y()},D:()=>{const[e,r]=t.W();e&&(c(y(e,o),r,d),d=!1,r&&t.C()>t.O()&&t.B(1,n()))}}},T=0,R=1,J=2,M=3,C=4,L=5,O=6,P=7,W=8,q=9,B=10,U=11,V=12,X=13,Y=14,D=15,E=16,F=17,H=18,j=19,A=20,G=21,K=22,N=(t,o,n,l,u,a,f)=>{const _=k(t,o,n,void 0,0,!o),d=((t,r)=>{let o;const n=r?"width":"height",s=new WeakMap,c=x((r=>{const c=[];for(const{target:i,contentRect:l}of r)if(i.offsetParent)if(i===o)t.B(4,l[n]);else{const t=s.get(i);t!=e&&c.push([t,l[n]])}c.length&&t.B(3,c)}));return{F(e){c.U(o=e)},H:(e,t)=>(s.set(e,t),c.U(e),()=>{s.delete(e),c.V(e)}),X:c.X}})(_,l),h=((e,t)=>{let r,o,n;const l=t?"scrollLeft":"scrollTop",u=t?"overflowX":"overflowY",a=async(o,c)=>{if(!r)return void i((()=>a(o,c)));n&&n();const u=()=>{let t;return[new Promise(((r,o)=>{t=r,n=o,(e=>!!e.C())(e)&&s(o,150)})),e.q(2,(()=>{t&&t()}))]};if(c&&I()){for(;e.B(8,o()),e.I();){const[e,t]=u();try{await e}catch(e){return}finally{t()}}r.scrollTo({[t?"left":"top"]:y(o(),t),behavior:"smooth"})}else for(;;){const[n,s]=u();try{r[l]=y(o(),t),e.B(7),await n}catch(e){return}finally{s()}}};return{U(c){r=c,o=z(e,c,t,(()=>y(c[l],t)),((t,r,o)=>{if(o){const e=c.style,t=e[u];e[u]="hidden",s((()=>{e[u]=t}))}r?(c[l]=e.J()+t,n&&n()):c[l]+=t}))},X(){o&&o.X()},j(e){a((()=>e))},A(t){t+=e.J(),a((()=>t))},G(t,{align:r,smooth:o,offset:n=0}={}){if(t=c(t,0,e.R()-1),"nearest"===r){const o=e.k(t),n=e.J();if(o<n)r="start";else{if(!(o+e.T(t)>n+e.C()))return;r="end"}}a((()=>n+e.L()+e.k(t)+("end"===r?e.T(t)-e.C():"center"===r?(e.T(t)-e.C())/2:0)),o)},D:()=>{o&&o.D()}}})(_,l),p=_.q(1,(()=>{u(_._())})),g=_.q(4,(()=>{a(_.J())})),m=_.q(8,(()=>{f()}));return{[T]:e=>{d.F(e),h.U(e)},[R]:()=>{p(),g(),m(),d.X(),h.X()},[J]:_.p,[M]:_.O,[C]:_.C,[L]:_.J,[O]:_.M,[P]:_.P,[W]:_.k,[q]:_.T,[B]:_.S,[U]:_.R,[V]:_.L,[X]:d.H,[Y]:h.D,[D]:(e,t)=>{_.B(5,[e,t])},[E]:e=>{_.B(6,e)},[F]:()=>(e=>r(e.O(),e.C()))(_),[H]:h.j,[j]:h.A,[A]:h.G,[G]:_.m,[K]:_.v}},Q=(t,r,o,n,s,c,i)=>{const l=k(t,r,o,void 0,0,!r),u=((t,r)=>{const o=r?"width":"height",n=r?"innerWidth":"innerHeight",s=new WeakMap,c=x((r=>{const n=[];for(const{target:t,contentRect:c}of r){if(!t.offsetParent)continue;const r=s.get(t);r!=e&&n.push([r,c[o]])}n.length&&t.B(3,n)}));let i;return{F(e){const r=b(v(e)),o=()=>{t.B(4,r[n])};r.addEventListener("resize",o),o(),i=()=>{r.removeEventListener("resize",o)}},H:(e,t)=>(s.set(e,t),c.U(e),()=>{s.delete(e),c.V(e)}),X(){i&&i(),c.X()}}})(l,n),a=((e,t)=>{let r;return{U(o){const n=t?"scrollX":"scrollY",s=v(o),c=b(s),i=s.body,l=(e,t,r,o=0)=>{const n=r?"offsetLeft":"offsetTop",s=o+(r&&w()?c.innerWidth-e[n]-e.offsetWidth:e[n]),i=e.offsetParent;return e!==t&&i?l(i,t,r,s):s};r=z(e,c,t,(()=>y(c[n],t)),((r,o)=>{o?c.scroll({[t?"left":"top"]:e.J()+r}):c.scrollBy(t?r:0,t?0:r)}),(()=>l(o,i,t)))},X(){r&&r.X()},D:()=>{r&&r.D()}}})(l,n),f=l.q(1,(()=>{s(l._())})),_=l.q(4,(()=>{c(l.J())})),d=l.q(8,(()=>{i()}));return{[T]:e=>{u.F(e),a.U(e)},[R]:()=>{f(),_(),d(),u.X(),a.X()},[J]:l.p,[M]:l.O,[C]:l.C,[L]:l.J,[O]:l.M,[P]:l.P,[W]:l.k,[B]:l.S,[U]:l.R,[X]:u.H,[Y]:a.D,[D]:(e,t)=>{l.B(5,[e,t])},[G]:l.m,[K]:l.v}};export{D as CHANGE_ITEM_LENGTH,E as CHANGE_START_MARGIN,Y as FIX_SCROLL_JUMP,K as GET_END_INDEX,O as GET_IS_SCROLLING,U as GET_ITEMS_LENGTH,W as GET_ITEM_OFFSET,q as GET_ITEM_SIZE,P as GET_JUMP_COUNT,J as GET_RANGE,L as GET_SCROLL_OFFSET,F as GET_SCROLL_SIZE,G as GET_START_INDEX,V as GET_START_SPACER_SIZE,M as GET_TOTAL_SIZE,C as GET_VIEWPORT_SIZE,B as IS_ITEM_HIDDEN,X as OBSERVE_ITEM_RESIZE,T as ON_MOUNT,R as ON_UN_MOUNT,j as SCROLL_BY,H as SCROLL_TO,A as SCROLL_TO_INDEX,N as createVirtualizer,Q as createWindowVirtualizer,w as isRTLDocument};
@@ -15,10 +15,7 @@ export declare const VList: import("vue").DefineComponent<{
15
15
  * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.
16
16
  * @defaultValue 4
17
17
  */
18
- overscan: {
19
- type: NumberConstructor;
20
- default: number;
21
- };
18
+ overscan: NumberConstructor;
22
19
  /**
23
20
  * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.
24
21
  *
@@ -48,12 +45,6 @@ export declare const VList: import("vue").DefineComponent<{
48
45
  * Callback invoked when scrolling stops.
49
46
  */
50
47
  scrollEnd: () => void;
51
- /**
52
- * Callback invoked when visible items range changes.
53
- * @param startIndex The start index of viewable items.
54
- * @param endIndex The end index of viewable items.
55
- */
56
- rangeChange: (startIndex: number, endIndex: number) => void;
57
48
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
58
49
  /**
59
50
  * The data items rendered by this component.
@@ -66,10 +57,7 @@ export declare const VList: import("vue").DefineComponent<{
66
57
  * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.
67
58
  * @defaultValue 4
68
59
  */
69
- overscan: {
70
- type: NumberConstructor;
71
- default: number;
72
- };
60
+ overscan: NumberConstructor;
73
61
  /**
74
62
  * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.
75
63
  *
@@ -92,10 +80,8 @@ export declare const VList: import("vue").DefineComponent<{
92
80
  }>> & {
93
81
  onScroll?: ((offset: number) => any) | undefined;
94
82
  onScrollEnd?: (() => any) | undefined;
95
- onRangeChange?: ((startIndex: number, endIndex: number) => any) | undefined;
96
83
  }, {
97
84
  shift: boolean;
98
- overscan: number;
99
85
  horizontal: boolean;
100
86
  }, SlotsType<{
101
87
  default: (arg: {
@@ -14,6 +14,14 @@ export interface VirtualizerHandle {
14
14
  * Get current offsetHeight, or offsetWidth if horizontal: true.
15
15
  */
16
16
  readonly viewportSize: number;
17
+ /**
18
+ * Get the start index of visible range of items.
19
+ */
20
+ readonly startIndex: number;
21
+ /**
22
+ * Get the end index of visible range of items.
23
+ */
24
+ readonly endIndex: number;
17
25
  /**
18
26
  * Get item offset from start.
19
27
  * @param index index of item
@@ -53,10 +61,7 @@ export declare const Virtualizer: import("vue").DefineComponent<{
53
61
  * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.
54
62
  * @defaultValue 4
55
63
  */
56
- overscan: {
57
- type: NumberConstructor;
58
- default: number;
59
- };
64
+ overscan: NumberConstructor;
60
65
  /**
61
66
  * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.
62
67
  *
@@ -113,12 +118,6 @@ export declare const Virtualizer: import("vue").DefineComponent<{
113
118
  * Callback invoked when scrolling stops.
114
119
  */
115
120
  scrollEnd: () => void;
116
- /**
117
- * Callback invoked when visible items range changes.
118
- * @param startIndex The start index of viewable items.
119
- * @param endIndex The end index of viewable items.
120
- */
121
- rangeChange: (startIndex: number, endIndex: number) => void;
122
121
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
123
122
  /**
124
123
  * The data items rendered by this component.
@@ -131,10 +130,7 @@ export declare const Virtualizer: import("vue").DefineComponent<{
131
130
  * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.
132
131
  * @defaultValue 4
133
132
  */
134
- overscan: {
135
- type: NumberConstructor;
136
- default: number;
137
- };
133
+ overscan: NumberConstructor;
138
134
  /**
139
135
  * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.
140
136
  *
@@ -184,10 +180,8 @@ export declare const Virtualizer: import("vue").DefineComponent<{
184
180
  }>> & {
185
181
  onScroll?: ((offset: number) => any) | undefined;
186
182
  onScrollEnd?: (() => any) | undefined;
187
- onRangeChange?: ((startIndex: number, endIndex: number) => any) | undefined;
188
183
  }, {
189
184
  shift: boolean;
190
- overscan: number;
191
185
  horizontal: boolean;
192
186
  startMargin: number;
193
187
  as: keyof import("vue").IntrinsicElementAttributes;