@legendapp/list 1.1.4 → 2.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.mts +107 -58
- package/index.d.ts +107 -58
- package/index.js +1586 -1692
- package/index.mjs +1552 -1658
- package/package.json +1 -1
package/index.d.mts
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import { ComponentProps, ReactNode, Dispatch, SetStateAction } from 'react';
|
|
3
3
|
import * as react_native from 'react-native';
|
|
4
|
-
import { ScrollView, StyleProp, ViewStyle, ScrollViewProps, NativeSyntheticEvent, NativeScrollEvent, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
|
|
4
|
+
import { View, ScrollView, StyleProp, ViewStyle, ScrollViewProps, NativeSyntheticEvent, NativeScrollEvent, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
|
|
5
5
|
import Animated from 'react-native-reanimated';
|
|
6
6
|
import * as _legendapp_list_reanimated from '@legendapp/list/reanimated';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
type ListenerType = "numContainers" | "numContainersPooled" | `containerItemKey${number}` | `containerItemData${number}` | `containerPosition${number}` | `containerColumn${number}` | "containersDidLayout" | "extraData" | "numColumns" | "lastItemKeys" | "totalSize" | "alignItemsPaddingTop" | "stylePaddingTop" | "scrollAdjust" | "scrollAdjustUserOffset" | "headerSize" | "footerSize" | "maintainVisibleContentPosition" | "debugRawScroll" | "debugComputedScroll" | "otherAxisSize" | "scrollSize";
|
|
9
|
+
interface StateContext {
|
|
10
|
+
listeners: Map<ListenerType, Set<(value: any) => void>>;
|
|
11
|
+
values: Map<ListenerType, any>;
|
|
12
|
+
mapViewabilityCallbacks: Map<string, ViewabilityCallback>;
|
|
13
|
+
mapViewabilityValues: Map<string, ViewToken>;
|
|
14
|
+
mapViewabilityAmountCallbacks: Map<number, ViewabilityAmountCallback>;
|
|
15
|
+
mapViewabilityAmountValues: Map<number, ViewAmountToken>;
|
|
16
|
+
columnWrapperStyle: ColumnWrapperStyle | undefined;
|
|
17
|
+
viewRefs: Map<number, React$1.RefObject<View>>;
|
|
18
|
+
}
|
|
9
19
|
|
|
10
20
|
declare class ScrollAdjustHandler {
|
|
11
|
-
private ctx;
|
|
12
21
|
private appliedAdjust;
|
|
13
|
-
private busy;
|
|
14
22
|
private context;
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
requestAdjust(adjust: number, onAdjusted: (diff: number) => void): void;
|
|
20
|
-
getAppliedAdjust(): number;
|
|
21
|
-
pauseAdjust(): void;
|
|
22
|
-
setDisableAdjust(disable: boolean): void;
|
|
23
|
-
unPauseAdjust(): boolean;
|
|
23
|
+
private mounted;
|
|
24
|
+
constructor(ctx: StateContext);
|
|
25
|
+
requestAdjust(add: number): void;
|
|
26
|
+
setMounted(): void;
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof ScrollView> | ComponentProps<typeof Animated.ScrollView>> = Omit<TScrollView, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
@@ -235,29 +238,18 @@ interface ColumnWrapperStyle {
|
|
|
235
238
|
gap?: number;
|
|
236
239
|
columnGap?: number;
|
|
237
240
|
}
|
|
238
|
-
type AnchoredPosition = {
|
|
239
|
-
type: "top" | "bottom";
|
|
240
|
-
relativeCoordinate: number;
|
|
241
|
-
top: number;
|
|
242
|
-
};
|
|
243
241
|
type LegendListProps<ItemT> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
|
|
244
242
|
interface InternalState {
|
|
245
|
-
anchorElement?: {
|
|
246
|
-
id: string;
|
|
247
|
-
coordinate: number;
|
|
248
|
-
};
|
|
249
|
-
belowAnchorElementPositions?: Map<string, number>;
|
|
250
|
-
rowHeights: Map<number, number>;
|
|
251
243
|
positions: Map<string, number>;
|
|
252
244
|
columns: Map<string, number>;
|
|
253
245
|
sizes: Map<string, number>;
|
|
254
246
|
sizesKnown: Map<string, number>;
|
|
247
|
+
containerItemKeys: Set<string>;
|
|
255
248
|
pendingAdjust: number;
|
|
256
249
|
isStartReached: boolean;
|
|
257
250
|
isEndReached: boolean;
|
|
258
251
|
isAtEnd: boolean;
|
|
259
252
|
isAtStart: boolean;
|
|
260
|
-
data: readonly any[];
|
|
261
253
|
hasScrolled?: boolean;
|
|
262
254
|
scrollLength: number;
|
|
263
255
|
startBuffered: number;
|
|
@@ -265,28 +257,27 @@ interface InternalState {
|
|
|
265
257
|
startNoBuffer: number;
|
|
266
258
|
endBuffered: number;
|
|
267
259
|
endNoBuffer: number;
|
|
260
|
+
firstFullyOnScreenIndex: number;
|
|
261
|
+
idsInView: string[];
|
|
268
262
|
scrollPending: number;
|
|
269
263
|
scroll: number;
|
|
270
264
|
scrollTime: number;
|
|
271
265
|
scrollPrev: number;
|
|
272
266
|
scrollPrevTime: number;
|
|
273
|
-
scrollVelocity: number;
|
|
274
267
|
scrollAdjustHandler: ScrollAdjustHandler;
|
|
275
268
|
maintainingScrollAtEnd?: boolean;
|
|
276
269
|
totalSize: number;
|
|
277
|
-
totalSizeBelowAnchor: number;
|
|
278
270
|
otherAxisSize?: number;
|
|
279
271
|
timeouts: Set<number>;
|
|
280
272
|
timeoutSizeMessage: any;
|
|
281
273
|
nativeMarginTop: number;
|
|
282
274
|
indexByKey: Map<string, number>;
|
|
275
|
+
idCache: Map<number, string>;
|
|
283
276
|
viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs | undefined;
|
|
284
|
-
renderItem: ((props: LegendListRenderItemProps<any>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<any>>;
|
|
285
277
|
scrollHistory: Array<{
|
|
286
278
|
scroll: number;
|
|
287
279
|
time: number;
|
|
288
280
|
}>;
|
|
289
|
-
scrollTimer: Timer | undefined;
|
|
290
281
|
startReachedBlockedByTimer: boolean;
|
|
291
282
|
endReachedBlockedByTimer: boolean;
|
|
292
283
|
scrollForNextCalculateItemsInView: {
|
|
@@ -298,8 +289,11 @@ interface InternalState {
|
|
|
298
289
|
queuedInitialLayout?: boolean | undefined;
|
|
299
290
|
queuedCalculateItemsInView: number | undefined;
|
|
300
291
|
lastBatchingAction: number;
|
|
301
|
-
|
|
302
|
-
|
|
292
|
+
ignoreScrollFromMVCP?: {
|
|
293
|
+
lt?: number;
|
|
294
|
+
gt?: number;
|
|
295
|
+
};
|
|
296
|
+
ignoreScrollFromMVCPTimeout?: any;
|
|
303
297
|
scrollingTo?: {
|
|
304
298
|
offset: number;
|
|
305
299
|
index?: number;
|
|
@@ -307,14 +301,57 @@ interface InternalState {
|
|
|
307
301
|
viewPosition?: number;
|
|
308
302
|
animated?: boolean;
|
|
309
303
|
} | undefined;
|
|
310
|
-
previousTotalSize?: number;
|
|
311
304
|
needsOtherAxisSize?: boolean;
|
|
312
305
|
averageSizes: Record<string, {
|
|
313
306
|
num: number;
|
|
314
307
|
avg: number;
|
|
315
308
|
}>;
|
|
316
|
-
|
|
317
|
-
|
|
309
|
+
refScroller: React.RefObject<ScrollView>;
|
|
310
|
+
loadStartTime: number;
|
|
311
|
+
initialScroll: ScrollIndexWithOffsetPosition | undefined;
|
|
312
|
+
props: {
|
|
313
|
+
alignItemsAtEnd: boolean;
|
|
314
|
+
data: readonly any[];
|
|
315
|
+
estimatedItemSize: number | undefined;
|
|
316
|
+
getEstimatedItemSize: ((index: number, item: any) => number) | undefined;
|
|
317
|
+
horizontal: boolean;
|
|
318
|
+
keyExtractor: ((item: any, index: number) => string) | undefined;
|
|
319
|
+
maintainScrollAtEnd: boolean;
|
|
320
|
+
maintainScrollAtEndThreshold: number | undefined;
|
|
321
|
+
maintainVisibleContentPosition: boolean;
|
|
322
|
+
onEndReached: (((info: {
|
|
323
|
+
distanceFromEnd: number;
|
|
324
|
+
}) => void) | null | undefined) | undefined;
|
|
325
|
+
onEndReachedThreshold: number | null | undefined;
|
|
326
|
+
onItemSizeChanged: ((info: {
|
|
327
|
+
size: number;
|
|
328
|
+
previous: number;
|
|
329
|
+
index: number;
|
|
330
|
+
itemKey: string;
|
|
331
|
+
itemData: any;
|
|
332
|
+
}) => void) | undefined;
|
|
333
|
+
onLoad: ((info: {
|
|
334
|
+
elapsedTimeInMs: number;
|
|
335
|
+
}) => void) | undefined;
|
|
336
|
+
onScroll: ((event: NativeSyntheticEvent<NativeScrollEvent>) => void) | undefined;
|
|
337
|
+
onStartReached: (((info: {
|
|
338
|
+
distanceFromStart: number;
|
|
339
|
+
}) => void) | null | undefined) | undefined;
|
|
340
|
+
onStartReachedThreshold: number | null | undefined;
|
|
341
|
+
suggestEstimatedItemSize: boolean;
|
|
342
|
+
stylePaddingBottom: number | undefined;
|
|
343
|
+
renderItem: ((props: LegendListRenderItemProps<any>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<any>>;
|
|
344
|
+
initialScroll: {
|
|
345
|
+
index: number;
|
|
346
|
+
viewOffset?: number;
|
|
347
|
+
viewPosition?: number;
|
|
348
|
+
} | undefined;
|
|
349
|
+
scrollBuffer: number;
|
|
350
|
+
viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs | undefined;
|
|
351
|
+
numColumns: number;
|
|
352
|
+
initialContainerPoolRatio: number;
|
|
353
|
+
stylePaddingTop: number | undefined;
|
|
354
|
+
};
|
|
318
355
|
}
|
|
319
356
|
interface ViewableRange<T> {
|
|
320
357
|
startBuffered: number;
|
|
@@ -428,6 +465,12 @@ type LegendListRef = {
|
|
|
428
465
|
offset: number;
|
|
429
466
|
animated?: boolean | undefined;
|
|
430
467
|
}): void;
|
|
468
|
+
/**
|
|
469
|
+
* Sets or adds to the offset of the visible content anchor.
|
|
470
|
+
* @param value - The offset to set or add.
|
|
471
|
+
* @param animated - If true, uses Animated to animate the change.
|
|
472
|
+
*/
|
|
473
|
+
setVisibleContentAnchorOffset(value: number | ((value: number) => number)): void;
|
|
431
474
|
};
|
|
432
475
|
interface ViewToken<ItemT = any> {
|
|
433
476
|
item: ItemT;
|
|
@@ -500,6 +543,12 @@ type ScrollIndexWithOffsetPosition = {
|
|
|
500
543
|
viewOffset?: number;
|
|
501
544
|
viewPosition?: number;
|
|
502
545
|
};
|
|
546
|
+
type GetRenderedItemResult<ItemT> = {
|
|
547
|
+
index: number;
|
|
548
|
+
item: ItemT;
|
|
549
|
+
renderedItem: React.ReactNode;
|
|
550
|
+
};
|
|
551
|
+
type GetRenderedItem = (key: string) => GetRenderedItemResult<any> | null;
|
|
503
552
|
|
|
504
553
|
declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
505
554
|
alignItemsAtEnd?: boolean;
|
|
@@ -526,9 +575,9 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
|
|
|
526
575
|
keyExtractor?: ((item: T, index: number) => string) | undefined;
|
|
527
576
|
ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
528
577
|
ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
529
|
-
ListFooterComponentStyle?: react_native.StyleProp<ViewStyle> | undefined;
|
|
578
|
+
ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
530
579
|
ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
531
|
-
ListHeaderComponentStyle?: react_native.StyleProp<ViewStyle> | undefined;
|
|
580
|
+
ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
532
581
|
maintainScrollAtEnd?: boolean;
|
|
533
582
|
maintainScrollAtEndThreshold?: number;
|
|
534
583
|
maintainVisibleContentPosition?: boolean;
|
|
@@ -565,13 +614,13 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
|
|
|
565
614
|
}) => void;
|
|
566
615
|
} & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
|
|
567
616
|
|
|
568
|
-
interface LazyLegendListProps<ItemT, ListT> extends Omit<LegendListProps
|
|
617
|
+
interface LazyLegendListProps<ItemT, ListT> extends Omit<LegendListProps<ItemT>, "data" | "keyExtractor" | "renderItem"> {
|
|
569
618
|
children?: React$1.ReactNode | undefined;
|
|
570
619
|
LegendList?: ListT;
|
|
571
620
|
}
|
|
572
621
|
declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
573
622
|
alignItemsAtEnd?: boolean;
|
|
574
|
-
columnWrapperStyle?:
|
|
623
|
+
columnWrapperStyle?: ColumnWrapperStyle;
|
|
575
624
|
data: readonly T[];
|
|
576
625
|
drawDistance?: number;
|
|
577
626
|
estimatedItemSize?: number;
|
|
@@ -617,23 +666,23 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
|
|
|
617
666
|
distanceFromStart: number;
|
|
618
667
|
}) => void) | null | undefined;
|
|
619
668
|
onStartReachedThreshold?: number | null | undefined;
|
|
620
|
-
onViewableItemsChanged?:
|
|
669
|
+
onViewableItemsChanged?: OnViewableItemsChanged | undefined;
|
|
621
670
|
progressViewOffset?: number;
|
|
622
671
|
recycleItems?: boolean;
|
|
623
672
|
refScrollView?: React$1.Ref<react_native.ScrollView>;
|
|
624
673
|
refreshing?: boolean;
|
|
625
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps
|
|
674
|
+
renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
|
|
626
675
|
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
627
676
|
suggestEstimatedItemSize?: boolean;
|
|
628
|
-
viewabilityConfig?:
|
|
629
|
-
viewabilityConfigCallbackPairs?:
|
|
677
|
+
viewabilityConfig?: ViewabilityConfig;
|
|
678
|
+
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
|
|
630
679
|
waitForInitialLayout?: boolean;
|
|
631
680
|
onLoad?: (info: {
|
|
632
681
|
elapsedTimeInMs: number;
|
|
633
682
|
}) => void;
|
|
634
|
-
} & React$1.RefAttributes<LegendListRef
|
|
683
|
+
} & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode) | react_native.Animated.AnimatedComponent<(<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
635
684
|
alignItemsAtEnd?: boolean;
|
|
636
|
-
columnWrapperStyle?:
|
|
685
|
+
columnWrapperStyle?: ColumnWrapperStyle;
|
|
637
686
|
data: readonly T[];
|
|
638
687
|
drawDistance?: number;
|
|
639
688
|
estimatedItemSize?: number;
|
|
@@ -679,25 +728,25 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
|
|
|
679
728
|
distanceFromStart: number;
|
|
680
729
|
}) => void) | null | undefined;
|
|
681
730
|
onStartReachedThreshold?: number | null | undefined;
|
|
682
|
-
onViewableItemsChanged?:
|
|
731
|
+
onViewableItemsChanged?: OnViewableItemsChanged | undefined;
|
|
683
732
|
progressViewOffset?: number;
|
|
684
733
|
recycleItems?: boolean;
|
|
685
734
|
refScrollView?: React$1.Ref<react_native.ScrollView>;
|
|
686
735
|
refreshing?: boolean;
|
|
687
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps
|
|
736
|
+
renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
|
|
688
737
|
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
689
738
|
suggestEstimatedItemSize?: boolean;
|
|
690
|
-
viewabilityConfig?:
|
|
691
|
-
viewabilityConfigCallbackPairs?:
|
|
739
|
+
viewabilityConfig?: ViewabilityConfig;
|
|
740
|
+
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
|
|
692
741
|
waitForInitialLayout?: boolean;
|
|
693
742
|
onLoad?: (info: {
|
|
694
743
|
elapsedTimeInMs: number;
|
|
695
744
|
}) => void;
|
|
696
|
-
} & React$1.RefAttributes<LegendListRef
|
|
697
|
-
ref?: React$1.Ref<LegendListRef
|
|
745
|
+
} & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode)> | (<ItemT_1>(props: _legendapp_list_reanimated.AnimatedLegendListProps<ItemT_1> & {
|
|
746
|
+
ref?: React$1.Ref<LegendListRef>;
|
|
698
747
|
}) => React$1.ReactElement | null) = <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
699
748
|
alignItemsAtEnd?: boolean;
|
|
700
|
-
columnWrapperStyle?:
|
|
749
|
+
columnWrapperStyle?: ColumnWrapperStyle;
|
|
701
750
|
data: readonly T[];
|
|
702
751
|
drawDistance?: number;
|
|
703
752
|
estimatedItemSize?: number;
|
|
@@ -743,21 +792,21 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
|
|
|
743
792
|
distanceFromStart: number;
|
|
744
793
|
}) => void) | null | undefined;
|
|
745
794
|
onStartReachedThreshold?: number | null | undefined;
|
|
746
|
-
onViewableItemsChanged?:
|
|
795
|
+
onViewableItemsChanged?: OnViewableItemsChanged | undefined;
|
|
747
796
|
progressViewOffset?: number;
|
|
748
797
|
recycleItems?: boolean;
|
|
749
798
|
refScrollView?: React$1.Ref<react_native.ScrollView>;
|
|
750
799
|
refreshing?: boolean;
|
|
751
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps
|
|
800
|
+
renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
|
|
752
801
|
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
753
802
|
suggestEstimatedItemSize?: boolean;
|
|
754
|
-
viewabilityConfig?:
|
|
755
|
-
viewabilityConfigCallbackPairs?:
|
|
803
|
+
viewabilityConfig?: ViewabilityConfig;
|
|
804
|
+
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
|
|
756
805
|
waitForInitialLayout?: boolean;
|
|
757
806
|
onLoad?: (info: {
|
|
758
807
|
elapsedTimeInMs: number;
|
|
759
808
|
}) => void;
|
|
760
|
-
} & React$1.RefAttributes<LegendListRef
|
|
809
|
+
} & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
|
|
761
810
|
|
|
762
811
|
declare function useViewability(callback: ViewabilityCallback, configId?: string): void;
|
|
763
812
|
declare function useViewabilityAmount(callback: ViewabilityAmountCallback): void;
|
|
@@ -769,4 +818,4 @@ declare function useListScrollSize(): {
|
|
|
769
818
|
height: number;
|
|
770
819
|
};
|
|
771
820
|
|
|
772
|
-
export { type
|
|
821
|
+
export { type ColumnWrapperStyle, type GetRenderedItem, type GetRenderedItemResult, type InternalState, LazyLegendList, type LazyLegendListProps, LegendList, type LegendListProps, type LegendListPropsBase, type LegendListRecyclingState, type LegendListRef, type LegendListRenderItemProps, type OnViewableItemsChanged, type ScrollIndexWithOffsetPosition, type ScrollState, type TypedForwardRef, type TypedMemo, type ViewAmountToken, type ViewToken, type ViewabilityAmountCallback, type ViewabilityCallback, type ViewabilityConfig, type ViewabilityConfigCallbackPair, type ViewabilityConfigCallbackPairs, type ViewableRange, typedForwardRef, typedMemo, useIsLastItem, useListScrollSize, useRecyclingEffect, useRecyclingState, useViewability, useViewabilityAmount };
|