forked from wellyshen/react-cool-virtual
-
Notifications
You must be signed in to change notification settings - Fork 0
/
react-cool-virtual.d.ts
136 lines (112 loc) · 3.13 KB
/
react-cool-virtual.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
declare module "react-cool-virtual" {
import { MutableRefObject, RefCallback } from "react";
export interface ItemSizeFunction {
(index: number, width: number): number;
}
export type ItemSize = number | ItemSizeFunction;
export interface UseIsScrollingFunction {
(speed: number): boolean;
}
export type UseIsScrolling = boolean | UseIsScrollingFunction;
export type ScrollDuration = number | ((distance: number) => number);
export interface ScrollEasingFunction {
(time: number): number;
}
export interface IsItemLoaded {
(index: number): boolean;
}
export interface LoadMoreEvent {
startIndex: number;
stopIndex: number;
loadIndex: number;
readonly scrollOffset: number;
readonly userScroll: boolean;
}
export interface LoadMore {
(event: LoadMoreEvent): void;
}
export interface OnScrollEvent {
overscanStartIndex: number;
overscanStopIndex: number;
visibleStartIndex: number;
visibleStopIndex: number;
readonly scrollOffset: number;
readonly scrollForward: boolean;
readonly userScroll: boolean;
}
export interface OnScroll {
(event: OnScrollEvent): void;
}
export interface OnResizeEvent {
width: number;
height: number;
}
export interface OnResize {
(event: OnResizeEvent): void;
}
export type MeasureRef = RefCallback<HTMLElement>;
export interface Item {
readonly index: number;
readonly start: number;
readonly size: number;
readonly width: number;
readonly isScrolling?: true;
readonly isSticky?: true;
measureRef: MeasureRef;
}
export interface Callback {
(): void;
}
export interface ScrollToOptions {
offset: number;
smooth?: boolean;
}
export interface ScrollTo {
(offset: number, callback?: Callback): void;
(options: ScrollToOptions, callback?: Callback): void;
}
export interface ScrollToItemOptions {
index: number;
align?: "auto" | "start" | "center" | "end";
smooth?: boolean;
}
export interface ScrollToItem {
(index: number, callback?: Callback): void;
(options: ScrollToItemOptions, callback?: Callback): void;
}
export interface StartItem {
(index: number, callback?: () => void): void;
}
export interface Options {
itemCount: number;
ssrItemCount?: number | [number, number];
itemSize?: ItemSize;
horizontal?: boolean;
resetScroll?: boolean;
overscanCount?: number;
useIsScrolling?: UseIsScrolling;
stickyIndices?: number[];
scrollDuration?: ScrollDuration;
scrollEasingFunction?: ScrollEasingFunction;
loadMoreCount?: number;
isItemLoaded?: IsItemLoaded;
loadMore?: LoadMore;
onScroll?: OnScroll;
onResize?: OnResize;
}
export interface Return<
O extends HTMLElement = HTMLElement,
I extends HTMLElement = O
> {
outerRef: MutableRefObject<O | null>;
innerRef: MutableRefObject<I | null>;
items: Item[];
scrollTo: ScrollTo;
scrollToItem: ScrollToItem;
startItem: StartItem;
}
export default function useVirtual<
O extends HTMLElement = HTMLElement,
I extends HTMLElement = O
>(config: Options): Return<O, I>;
}