@kdcloudjs/kdesign 1.6.30 → 1.6.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/LICENSE +3 -0
- package/dist/kdesign-complete.less +16 -0
- package/dist/kdesign.css +13 -1
- package/dist/kdesign.css.map +1 -1
- package/dist/kdesign.js +1678 -49
- package/dist/kdesign.js.map +1 -1
- package/dist/kdesign.min.css +3 -3
- package/dist/kdesign.min.js +8 -8
- package/dist/kdesign.min.js.map +1 -1
- package/es/_utils/getStringLength.d.ts +1 -0
- package/es/_utils/getStringLength.js +14 -0
- package/es/_utils/hooks.d.ts +3 -0
- package/es/_utils/hooks.js +50 -1
- package/es/_utils/raf.d.ts +3 -0
- package/es/_utils/raf.js +35 -0
- package/es/_utils/resizeObserver.d.ts +15 -0
- package/es/_utils/resizeObserver.js +79 -0
- package/es/_utils/testBrowserType.d.ts +1 -0
- package/es/_utils/testBrowserType.js +11 -0
- package/es/_utils/usePopper.js +1 -1
- package/es/form/style/index.css +4 -0
- package/es/form/style/index.less +6 -0
- package/es/grid/col.js +7 -2
- package/es/grid/row.js +6 -1
- package/es/grid/style/index.css +6 -0
- package/es/grid/style/index.less +8 -0
- package/es/select/interface.d.ts +2 -0
- package/es/select/select.js +52 -21
- package/es/select/style/index.css +2 -0
- package/es/select/style/index.less +2 -0
- package/es/stepper/stepper.js +2 -1
- package/es/tree/treeHooks.js +1 -1
- package/es/virtual-list/Filler.d.ts +9 -0
- package/es/virtual-list/Filler.js +38 -0
- package/es/virtual-list/index.d.ts +3 -0
- package/es/virtual-list/index.js +3 -0
- package/es/virtual-list/utils/algorithmUtil.d.ts +19 -0
- package/es/virtual-list/utils/algorithmUtil.js +79 -0
- package/es/virtual-list/utils/itemUtil.d.ts +75 -0
- package/es/virtual-list/utils/itemUtil.js +176 -0
- package/es/virtual-list/virtual-list.d.ts +34 -0
- package/es/virtual-list/virtual-list.js +589 -0
- package/lib/_utils/getStringLength.d.ts +1 -0
- package/lib/_utils/getStringLength.js +21 -0
- package/lib/_utils/hooks.d.ts +3 -0
- package/lib/_utils/hooks.js +56 -0
- package/lib/_utils/raf.d.ts +3 -0
- package/lib/_utils/raf.js +43 -0
- package/lib/_utils/resizeObserver.d.ts +15 -0
- package/lib/_utils/resizeObserver.js +95 -0
- package/lib/_utils/testBrowserType.d.ts +1 -0
- package/lib/_utils/testBrowserType.js +18 -0
- package/lib/_utils/usePopper.js +1 -1
- package/lib/form/style/index.css +4 -0
- package/lib/form/style/index.less +6 -0
- package/lib/grid/col.js +8 -2
- package/lib/grid/row.js +7 -1
- package/lib/grid/style/index.css +6 -0
- package/lib/grid/style/index.less +8 -0
- package/lib/select/interface.d.ts +2 -0
- package/lib/select/select.js +52 -21
- package/lib/select/style/index.css +2 -0
- package/lib/select/style/index.less +2 -0
- package/lib/stepper/stepper.js +3 -1
- package/lib/tree/treeHooks.js +1 -1
- package/lib/virtual-list/Filler.d.ts +9 -0
- package/lib/virtual-list/Filler.js +59 -0
- package/lib/virtual-list/index.d.ts +3 -0
- package/lib/virtual-list/index.js +36 -0
- package/lib/virtual-list/utils/algorithmUtil.d.ts +19 -0
- package/lib/virtual-list/utils/algorithmUtil.js +88 -0
- package/lib/virtual-list/utils/itemUtil.d.ts +75 -0
- package/lib/virtual-list/utils/itemUtil.js +206 -0
- package/lib/virtual-list/virtual-list.d.ts +34 -0
- package/lib/virtual-list/virtual-list.js +626 -0
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get index with specific start index one by one. e.g.
|
|
3
|
+
* min: 3, max: 9, start: 6
|
|
4
|
+
*
|
|
5
|
+
* Return index is:
|
|
6
|
+
* [0]: 6
|
|
7
|
+
* [1]: 7
|
|
8
|
+
* [2]: 5
|
|
9
|
+
* [3]: 8
|
|
10
|
+
* [4]: 4
|
|
11
|
+
* [5]: 9
|
|
12
|
+
* [6]: 3
|
|
13
|
+
*/
|
|
14
|
+
export function getIndexByStartLoc(min, max, start, index) {
|
|
15
|
+
var beforeCount = start - min;
|
|
16
|
+
var afterCount = max - start;
|
|
17
|
+
var balanceCount = Math.min(beforeCount, afterCount) * 2;
|
|
18
|
+
|
|
19
|
+
if (index <= balanceCount) {
|
|
20
|
+
var stepIndex = Math.floor(index / 2);
|
|
21
|
+
|
|
22
|
+
if (index % 2) {
|
|
23
|
+
return start + stepIndex + 1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return start - stepIndex;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (beforeCount > afterCount) {
|
|
30
|
+
return start - (index - afterCount);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return start + (index - beforeCount);
|
|
34
|
+
}
|
|
35
|
+
export function findListDiffIndex(originList, targetList, getKey) {
|
|
36
|
+
var originLen = originList.length;
|
|
37
|
+
var targetLen = targetList.length;
|
|
38
|
+
var shortList;
|
|
39
|
+
var longList;
|
|
40
|
+
|
|
41
|
+
if (originLen === 0 && targetLen === 0) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (originLen < targetLen) {
|
|
46
|
+
shortList = originList;
|
|
47
|
+
longList = targetList;
|
|
48
|
+
} else {
|
|
49
|
+
shortList = targetList;
|
|
50
|
+
longList = originList;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
var notExistKey = {
|
|
54
|
+
__EMPTY_ITEM__: true
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
function getItemKey(item, index) {
|
|
58
|
+
return item !== undefined ? getKey(item, index) : notExistKey;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var diffIndex = null;
|
|
62
|
+
var multiple = Math.abs(originLen - targetLen) !== 1;
|
|
63
|
+
|
|
64
|
+
for (var i = 0; i < longList.length; i += 1) {
|
|
65
|
+
var shortKey = getItemKey(shortList[i], i);
|
|
66
|
+
var longKey = getItemKey(longList[i], i);
|
|
67
|
+
|
|
68
|
+
if (shortKey !== longKey) {
|
|
69
|
+
diffIndex = i;
|
|
70
|
+
multiple = multiple || shortKey !== getItemKey(longList[i + 1], i + 1);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return diffIndex === null ? null : {
|
|
76
|
+
index: diffIndex,
|
|
77
|
+
multiple: multiple
|
|
78
|
+
};
|
|
79
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 为了计算方便,定位元素的下标可能返回数组长度,代表最后一个元素
|
|
3
|
+
*/
|
|
4
|
+
export declare const GHOST_ITEM_KEY = "__rc_ghost_item__";
|
|
5
|
+
export declare type Key = string | number;
|
|
6
|
+
interface LocationItemResult {
|
|
7
|
+
/** 用于定位的元素的下标 */
|
|
8
|
+
index: number;
|
|
9
|
+
/** 定位元素自身需要补充的偏移量 */
|
|
10
|
+
offsetPtg: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 根据滚动条当前的滚动百分比,计算出基准元素
|
|
14
|
+
* 在基准元素的上方和下方渲染可见区域的其他元素
|
|
15
|
+
*/
|
|
16
|
+
export declare function getLocationItem(scrollPtg: number, total: number): LocationItemResult;
|
|
17
|
+
/**
|
|
18
|
+
* 获取HTML元素高度
|
|
19
|
+
*/
|
|
20
|
+
export declare function getNodeHeight(node: HTMLElement, needMargin?: boolean): number;
|
|
21
|
+
/**
|
|
22
|
+
* 获取有效的scrollTop值
|
|
23
|
+
* Safari的缓动效果会获得负值的scrollTop
|
|
24
|
+
*/
|
|
25
|
+
export declare function getValidScrollTop(scrollTop: number, scrollRange: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* 视口已滚动距离 / 总可滚动距离
|
|
28
|
+
*/
|
|
29
|
+
export declare function getScrollPercentage({ scrollTop, scrollHeight, clientHeight, }: {
|
|
30
|
+
scrollTop: number;
|
|
31
|
+
scrollHeight: number;
|
|
32
|
+
clientHeight: number;
|
|
33
|
+
}): number;
|
|
34
|
+
/**
|
|
35
|
+
* 计算需要渲染的元素的开始下标、结束下标和用于定位的元素下标
|
|
36
|
+
*/
|
|
37
|
+
export declare function getRangeIndex(scrollPtg: number, itemCount: number, visibleCount: number): {
|
|
38
|
+
itemIndex: number;
|
|
39
|
+
itemOffsetPtg: number;
|
|
40
|
+
startIndex: number;
|
|
41
|
+
endIndex: number;
|
|
42
|
+
};
|
|
43
|
+
interface ItemTopConfig {
|
|
44
|
+
itemHeight: number;
|
|
45
|
+
itemOffsetPtg: number;
|
|
46
|
+
scrollTop: number;
|
|
47
|
+
scrollPtg: number;
|
|
48
|
+
clientHeight: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 计算元素相对于视口顶部的偏移量
|
|
52
|
+
*/
|
|
53
|
+
export declare function getItemRelativeTop({ itemHeight, itemOffsetPtg, scrollPtg, clientHeight, }: Omit<ItemTopConfig, 'scrollTop'>): number;
|
|
54
|
+
/**
|
|
55
|
+
* 计算元素相对于整个滚动区域顶部的偏移量
|
|
56
|
+
*/
|
|
57
|
+
export declare function getItemAbsoluteTop({ scrollTop, ...rest }: ItemTopConfig): number;
|
|
58
|
+
interface CompareItemConfig {
|
|
59
|
+
locatedItemRelativeTop: number;
|
|
60
|
+
locatedItemIndex: number;
|
|
61
|
+
compareItemIndex: number;
|
|
62
|
+
getItemKey: (index: number) => Key;
|
|
63
|
+
startIndex: number;
|
|
64
|
+
endIndex: number;
|
|
65
|
+
itemElementHeights: {
|
|
66
|
+
[key: string]: number;
|
|
67
|
+
};
|
|
68
|
+
itemHeight: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 计算某一指定下标的元素相对于视口顶部的偏移量
|
|
72
|
+
*/
|
|
73
|
+
export declare function getCompareItemRelativeTop({ locatedItemRelativeTop, locatedItemIndex, compareItemIndex, startIndex, endIndex, getItemKey, itemElementHeights, itemHeight, }: CompareItemConfig): number;
|
|
74
|
+
export declare function getLongestItemIndex(data: Array<any>): number;
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
|
2
|
+
import _Number$isNaN from "@babel/runtime-corejs3/core-js-stable/number/is-nan";
|
|
3
|
+
|
|
4
|
+
var __rest = this && this.__rest || function (s, e) {
|
|
5
|
+
var t = {};
|
|
6
|
+
|
|
7
|
+
for (var p in s) {
|
|
8
|
+
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (s != null && typeof _Object$getOwnPropertySymbols === "function") for (var i = 0, p = _Object$getOwnPropertySymbols(s); i < p.length; i++) {
|
|
12
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
13
|
+
}
|
|
14
|
+
return t;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
import { findDOMNode } from 'react-dom';
|
|
18
|
+
import getStringLength from '../../_utils/getStringLength';
|
|
19
|
+
/**
|
|
20
|
+
* 为了计算方便,定位元素的下标可能返回数组长度,代表最后一个元素
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export var GHOST_ITEM_KEY = '__rc_ghost_item__';
|
|
24
|
+
/**
|
|
25
|
+
* 根据滚动条当前的滚动百分比,计算出基准元素
|
|
26
|
+
* 在基准元素的上方和下方渲染可见区域的其他元素
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
export function getLocationItem(scrollPtg, total) {
|
|
30
|
+
var itemIndex = Math.floor(scrollPtg * total);
|
|
31
|
+
var itemTopPtg = itemIndex / total;
|
|
32
|
+
var offsetPtg = (scrollPtg - itemTopPtg) / (1 / total);
|
|
33
|
+
return {
|
|
34
|
+
index: itemIndex,
|
|
35
|
+
offsetPtg: _Number$isNaN(offsetPtg) ? 0 : offsetPtg
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 获取HTML元素高度
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
export function getNodeHeight(node) {
|
|
43
|
+
var needMargin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
44
|
+
// eslint-disable-next-line react/no-find-dom-node
|
|
45
|
+
var element = findDOMNode(node);
|
|
46
|
+
var marginVertical = 0;
|
|
47
|
+
|
|
48
|
+
if (needMargin) {
|
|
49
|
+
var _window$getComputedSt = window.getComputedStyle(node),
|
|
50
|
+
marginTop = _window$getComputedSt.marginTop,
|
|
51
|
+
marginBottom = _window$getComputedSt.marginBottom;
|
|
52
|
+
|
|
53
|
+
marginVertical = Number(marginTop.replace(/\D/g, '')) + Number(marginBottom.replace(/\D/g, ''));
|
|
54
|
+
marginVertical = isNaN(marginVertical) ? 0 : marginVertical;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return element ? element.offsetHeight + marginVertical : 0;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 获取有效的scrollTop值
|
|
61
|
+
* Safari的缓动效果会获得负值的scrollTop
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
export function getValidScrollTop(scrollTop, scrollRange) {
|
|
65
|
+
return scrollTop < 0 ? 0 : scrollTop > scrollRange ? scrollRange : scrollTop;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 视口已滚动距离 / 总可滚动距离
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
export function getScrollPercentage(_ref) {
|
|
72
|
+
var scrollTop = _ref.scrollTop,
|
|
73
|
+
scrollHeight = _ref.scrollHeight,
|
|
74
|
+
clientHeight = _ref.clientHeight;
|
|
75
|
+
var scrollRange = scrollHeight - clientHeight;
|
|
76
|
+
return scrollRange <= 0 ? 0 : getValidScrollTop(scrollTop, scrollRange) / scrollRange;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 计算需要渲染的元素的开始下标、结束下标和用于定位的元素下标
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
export function getRangeIndex(scrollPtg, itemCount, visibleCount) {
|
|
83
|
+
var _getLocationItem = getLocationItem(scrollPtg, itemCount),
|
|
84
|
+
index = _getLocationItem.index,
|
|
85
|
+
offsetPtg = _getLocationItem.offsetPtg;
|
|
86
|
+
|
|
87
|
+
var beforeCount = Math.ceil(scrollPtg * visibleCount);
|
|
88
|
+
var afterCount = Math.ceil((1 - scrollPtg) * visibleCount);
|
|
89
|
+
return {
|
|
90
|
+
itemIndex: index,
|
|
91
|
+
itemOffsetPtg: offsetPtg,
|
|
92
|
+
startIndex: Math.max(0, index - beforeCount),
|
|
93
|
+
endIndex: Math.min(itemCount - 1, index + afterCount)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 计算元素相对于视口顶部的偏移量
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
export function getItemRelativeTop(_ref2) {
|
|
101
|
+
var itemHeight = _ref2.itemHeight,
|
|
102
|
+
itemOffsetPtg = _ref2.itemOffsetPtg,
|
|
103
|
+
scrollPtg = _ref2.scrollPtg,
|
|
104
|
+
clientHeight = _ref2.clientHeight;
|
|
105
|
+
return Math.floor(clientHeight * scrollPtg - itemHeight * itemOffsetPtg);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 计算元素相对于整个滚动区域顶部的偏移量
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
export function getItemAbsoluteTop(_a) {
|
|
112
|
+
var scrollTop = _a.scrollTop,
|
|
113
|
+
rest = __rest(_a, ["scrollTop"]);
|
|
114
|
+
|
|
115
|
+
return scrollTop + getItemRelativeTop(rest);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 计算某一指定下标的元素相对于视口顶部的偏移量
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
export function getCompareItemRelativeTop(_ref3) {
|
|
122
|
+
var locatedItemRelativeTop = _ref3.locatedItemRelativeTop,
|
|
123
|
+
locatedItemIndex = _ref3.locatedItemIndex,
|
|
124
|
+
compareItemIndex = _ref3.compareItemIndex,
|
|
125
|
+
startIndex = _ref3.startIndex,
|
|
126
|
+
endIndex = _ref3.endIndex,
|
|
127
|
+
getItemKey = _ref3.getItemKey,
|
|
128
|
+
itemElementHeights = _ref3.itemElementHeights,
|
|
129
|
+
itemHeight = _ref3.itemHeight;
|
|
130
|
+
var compareItemTop = locatedItemRelativeTop;
|
|
131
|
+
var compareItemKey = getItemKey(compareItemIndex);
|
|
132
|
+
|
|
133
|
+
if (compareItemIndex <= locatedItemIndex) {
|
|
134
|
+
for (var index = locatedItemIndex; index >= startIndex; index -= 1) {
|
|
135
|
+
var key = getItemKey(index);
|
|
136
|
+
|
|
137
|
+
if (key === compareItemKey) {
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
var prevItemKey = getItemKey(index - 1);
|
|
142
|
+
compareItemTop -= itemElementHeights[prevItemKey] || itemHeight;
|
|
143
|
+
}
|
|
144
|
+
} else {
|
|
145
|
+
for (var _index = locatedItemIndex; _index <= endIndex; _index += 1) {
|
|
146
|
+
var _key = getItemKey(_index);
|
|
147
|
+
|
|
148
|
+
if (_key === compareItemKey) {
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
compareItemTop += itemElementHeights[_key] || itemHeight;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return compareItemTop;
|
|
157
|
+
}
|
|
158
|
+
export function getLongestItemIndex(data) {
|
|
159
|
+
var result = -1;
|
|
160
|
+
var length = 0;
|
|
161
|
+
data.forEach(function (item, index) {
|
|
162
|
+
var _a;
|
|
163
|
+
|
|
164
|
+
item = typeof item === 'string' ? item : (_a = item.props) === null || _a === void 0 ? void 0 : _a.children;
|
|
165
|
+
|
|
166
|
+
if (typeof item === 'string') {
|
|
167
|
+
var _length = getStringLength(item);
|
|
168
|
+
|
|
169
|
+
if (_length > length) {
|
|
170
|
+
length = _length;
|
|
171
|
+
result = index;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React, { ReactNode, CSSProperties } from 'react';
|
|
2
|
+
import { Key } from './utils/itemUtil';
|
|
3
|
+
export declare function isNumber(obj: any): obj is number;
|
|
4
|
+
export declare type RenderFunc<T> = (item: T, index: number, props: {
|
|
5
|
+
style: React.CSSProperties;
|
|
6
|
+
}) => ReactNode;
|
|
7
|
+
export interface VirtualListProps<T> extends Omit<React.HTMLAttributes<any>, 'children'> {
|
|
8
|
+
children: RenderFunc<T>;
|
|
9
|
+
data: T[];
|
|
10
|
+
height?: number | string;
|
|
11
|
+
itemHeight?: number;
|
|
12
|
+
wrapper?: string | React.FC<any> | React.ComponentClass<any>;
|
|
13
|
+
threshold?: number | null;
|
|
14
|
+
isStaticItemHeight?: boolean;
|
|
15
|
+
itemKey?: Key | ((item: T, index: number) => Key);
|
|
16
|
+
measureLongestItem?: boolean;
|
|
17
|
+
scrollOptions?: ScrollIntoViewOptions;
|
|
18
|
+
needFiller?: boolean;
|
|
19
|
+
outerStyle?: CSSProperties;
|
|
20
|
+
onScroll?: React.UIEventHandler<HTMLElement>;
|
|
21
|
+
}
|
|
22
|
+
export declare type AvailableVirtualListProps = Pick<VirtualListProps<any>, 'height' | 'itemHeight' | 'threshold' | 'isStaticItemHeight' | 'scrollOptions'>;
|
|
23
|
+
export declare type VirtualListHandle = {
|
|
24
|
+
dom: HTMLElement;
|
|
25
|
+
scrollTo: (arg: number | {
|
|
26
|
+
index: number;
|
|
27
|
+
options?: ScrollIntoViewOptions;
|
|
28
|
+
} | {
|
|
29
|
+
key: Key;
|
|
30
|
+
options?: ScrollIntoViewOptions;
|
|
31
|
+
}) => void;
|
|
32
|
+
};
|
|
33
|
+
declare const VirtualList: React.ForwardRefExoticComponent<VirtualListProps<any> & React.RefAttributes<VirtualListHandle>>;
|
|
34
|
+
export default VirtualList;
|