@legendapp/list 1.1.4 → 2.0.0-beta.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/animated.d.mts +3 -64
- package/animated.d.ts +3 -64
- package/animated.js +2 -2
- package/animated.mjs +2 -2
- package/index.d.mts +186 -335
- package/index.d.ts +186 -335
- package/index.js +2277 -1779
- package/index.mjs +2253 -1755
- package/keyboard-controller.d.mts +7 -256
- package/keyboard-controller.d.ts +7 -256
- package/keyboard-controller.js +4 -4
- package/keyboard-controller.mjs +4 -4
- package/package.json +1 -1
- package/reanimated.d.mts +2 -2
- package/reanimated.d.ts +2 -2
- package/reanimated.js +24 -22
- package/reanimated.mjs +25 -23
package/index.d.mts
CHANGED
|
@@ -1,29 +1,65 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import { ComponentProps, ReactNode, Dispatch, SetStateAction } from 'react';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { View, Animated, ScrollView, LayoutRectangle, ScrollViewComponent, ScrollResponderMixin, StyleProp, ViewStyle, ScrollViewProps } from 'react-native';
|
|
4
|
+
import Animated$1 from 'react-native-reanimated';
|
|
5
|
+
|
|
6
|
+
type ListenerType = "numContainers" | "numContainersPooled" | `containerItemKey${number}` | `containerItemData${number}` | `containerPosition${number}` | `containerColumn${number}` | `containerSticky${number}` | `containerStickyOffset${number}` | "containersDidLayout" | "extraData" | "numColumns" | "lastItemKeys" | "totalSize" | "alignItemsPaddingTop" | "stylePaddingTop" | "scrollAdjust" | "scrollAdjustUserOffset" | "headerSize" | "footerSize" | "maintainVisibleContentPosition" | "debugRawScroll" | "debugComputedScroll" | "otherAxisSize" | "snapToOffsets" | "scrollSize";
|
|
7
|
+
interface StateContext {
|
|
8
|
+
listeners: Map<ListenerType, Set<(value: any) => void>>;
|
|
9
|
+
values: Map<ListenerType, any>;
|
|
10
|
+
mapViewabilityCallbacks: Map<string, ViewabilityCallback>;
|
|
11
|
+
mapViewabilityValues: Map<string, ViewToken>;
|
|
12
|
+
mapViewabilityAmountCallbacks: Map<number, ViewabilityAmountCallback>;
|
|
13
|
+
mapViewabilityAmountValues: Map<number, ViewAmountToken>;
|
|
14
|
+
mapViewabilityConfigStates: Map<string, {
|
|
15
|
+
viewableItems: ViewToken[];
|
|
16
|
+
start: number;
|
|
17
|
+
end: number;
|
|
18
|
+
previousStart: number;
|
|
19
|
+
previousEnd: number;
|
|
20
|
+
}>;
|
|
21
|
+
columnWrapperStyle: ColumnWrapperStyle | undefined;
|
|
22
|
+
viewRefs: Map<number, React$1.RefObject<View>>;
|
|
23
|
+
animatedScrollY: Animated.Value;
|
|
24
|
+
}
|
|
9
25
|
|
|
10
26
|
declare class ScrollAdjustHandler {
|
|
11
|
-
private ctx;
|
|
12
27
|
private appliedAdjust;
|
|
13
|
-
private busy;
|
|
14
28
|
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;
|
|
29
|
+
private mounted;
|
|
30
|
+
constructor(ctx: StateContext);
|
|
31
|
+
requestAdjust(add: number): void;
|
|
32
|
+
setMounted(): void;
|
|
24
33
|
}
|
|
25
34
|
|
|
26
|
-
type
|
|
35
|
+
type BaseScrollViewProps<TScrollView> = Omit<TScrollView, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children">;
|
|
36
|
+
interface DataModeProps<ItemT, TItemType extends string | undefined> {
|
|
37
|
+
/**
|
|
38
|
+
* Array of items to render in the list.
|
|
39
|
+
* @required when using data mode
|
|
40
|
+
*/
|
|
41
|
+
data: ReadonlyArray<ItemT>;
|
|
42
|
+
/**
|
|
43
|
+
* Function or React component to render each item in the list.
|
|
44
|
+
* Can be either:
|
|
45
|
+
* - A function: (props: LegendListRenderItemProps<ItemT>) => ReactNode
|
|
46
|
+
* - A React component: React.ComponentType<LegendListRenderItemProps<ItemT>>
|
|
47
|
+
* @required when using data mode
|
|
48
|
+
*/
|
|
49
|
+
renderItem: ((props: LegendListRenderItemProps<ItemT, TItemType>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT, TItemType>>;
|
|
50
|
+
children?: never;
|
|
51
|
+
}
|
|
52
|
+
interface ChildrenModeProps {
|
|
53
|
+
/**
|
|
54
|
+
* React children elements to render as list items.
|
|
55
|
+
* Each child will be treated as an individual list item.
|
|
56
|
+
* @required when using children mode
|
|
57
|
+
*/
|
|
58
|
+
children: ReactNode;
|
|
59
|
+
data?: never;
|
|
60
|
+
renderItem?: never;
|
|
61
|
+
}
|
|
62
|
+
interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
27
63
|
/**
|
|
28
64
|
* If true, aligns items at the end of the list.
|
|
29
65
|
* @default false
|
|
@@ -33,11 +69,6 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
33
69
|
* Style applied to each column's wrapper view.
|
|
34
70
|
*/
|
|
35
71
|
columnWrapperStyle?: ColumnWrapperStyle;
|
|
36
|
-
/**
|
|
37
|
-
* Array of items to render in the list.
|
|
38
|
-
* @required
|
|
39
|
-
*/
|
|
40
|
-
data: ReadonlyArray<ItemT>;
|
|
41
72
|
/**
|
|
42
73
|
* Distance in pixels to pre-render items ahead of the visible area.
|
|
43
74
|
* @default 250
|
|
@@ -65,7 +96,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
65
96
|
* In case you have distinct item sizes, you can provide a function to get the size of an item.
|
|
66
97
|
* Use instead of FlatList's getItemLayout or FlashList overrideItemLayout if you want to have accurate initialScrollOffset, you should provide this function
|
|
67
98
|
*/
|
|
68
|
-
getEstimatedItemSize?: (index: number, item: ItemT) => number;
|
|
99
|
+
getEstimatedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
|
|
69
100
|
/**
|
|
70
101
|
* Ratio of initial container pool size to data length (e.g., 0.5 for half).
|
|
71
102
|
* @default 2
|
|
@@ -83,7 +114,6 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
83
114
|
initialScrollIndex?: number | {
|
|
84
115
|
index: number;
|
|
85
116
|
viewOffset?: number | undefined;
|
|
86
|
-
viewPosition?: number | undefined;
|
|
87
117
|
};
|
|
88
118
|
/**
|
|
89
119
|
* Component to render between items, receiving the leading item as prop.
|
|
@@ -119,7 +149,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
119
149
|
* If true, auto-scrolls to end when new items are added.
|
|
120
150
|
* @default false
|
|
121
151
|
*/
|
|
122
|
-
maintainScrollAtEnd?: boolean;
|
|
152
|
+
maintainScrollAtEnd?: boolean | MaintainScrollAtEndOptions;
|
|
123
153
|
/**
|
|
124
154
|
* Distance threshold in percentage of screen size to trigger maintainScrollAtEnd.
|
|
125
155
|
* @default 0.1
|
|
@@ -174,7 +204,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
174
204
|
/**
|
|
175
205
|
* Called when the viewability of items changes.
|
|
176
206
|
*/
|
|
177
|
-
onViewableItemsChanged?: OnViewableItemsChanged | undefined;
|
|
207
|
+
onViewableItemsChanged?: OnViewableItemsChanged<ItemT> | undefined;
|
|
178
208
|
/**
|
|
179
209
|
* Offset in pixels for the refresh indicator.
|
|
180
210
|
* @default 0
|
|
@@ -194,14 +224,6 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
194
224
|
* @default false
|
|
195
225
|
*/
|
|
196
226
|
refreshing?: boolean;
|
|
197
|
-
/**
|
|
198
|
-
* Function or React component to render each item in the list.
|
|
199
|
-
* Can be either:
|
|
200
|
-
* - A function: (props: LegendListRenderItemProps<ItemT>) => ReactNode
|
|
201
|
-
* - A React component: React.ComponentType<LegendListRenderItemProps<ItemT>>
|
|
202
|
-
* @required
|
|
203
|
-
*/
|
|
204
|
-
renderItem?: ((props: LegendListRenderItemProps<ItemT>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT>>;
|
|
205
227
|
/**
|
|
206
228
|
* Render custom ScrollView component.
|
|
207
229
|
* @default (props) => <ScrollView {...props} />
|
|
@@ -220,7 +242,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
220
242
|
/**
|
|
221
243
|
* Pairs of viewability configs and their callbacks for tracking visibility.
|
|
222
244
|
*/
|
|
223
|
-
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
|
|
245
|
+
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs<ItemT> | undefined;
|
|
224
246
|
/**
|
|
225
247
|
* If true, delays rendering until initial layout is complete.
|
|
226
248
|
* @default false
|
|
@@ -229,35 +251,42 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
|
|
|
229
251
|
onLoad?: (info: {
|
|
230
252
|
elapsedTimeInMs: number;
|
|
231
253
|
}) => void;
|
|
232
|
-
|
|
254
|
+
snapToIndices?: number[];
|
|
255
|
+
/**
|
|
256
|
+
* Array of child indices determining which children get docked to the top of the screen when scrolling.
|
|
257
|
+
* For example, passing stickyIndices={[0]} will cause the first child to be fixed to the top of the scroll view.
|
|
258
|
+
* Not supported in conjunction with horizontal={true}.
|
|
259
|
+
* @default undefined
|
|
260
|
+
*/
|
|
261
|
+
stickyIndices?: number[];
|
|
262
|
+
getItemType?: (item: ItemT, index: number) => TItemType;
|
|
263
|
+
getFixedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
|
|
264
|
+
itemsAreEqual?: (itemPrevious: ItemT, item: ItemT, index: number, data: readonly ItemT[]) => boolean;
|
|
265
|
+
}
|
|
266
|
+
type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof ScrollView> | ComponentProps<typeof Animated.ScrollView> | ComponentProps<typeof Animated$1.ScrollView>, TItemType extends string | undefined = string | undefined> = BaseScrollViewProps<TScrollView> & LegendListSpecificProps<ItemT, TItemType> & (DataModeProps<ItemT, TItemType> | ChildrenModeProps);
|
|
267
|
+
interface MaintainScrollAtEndOptions {
|
|
268
|
+
onLayout?: boolean;
|
|
269
|
+
onItemLayout?: boolean;
|
|
270
|
+
onDataChange?: boolean;
|
|
271
|
+
}
|
|
233
272
|
interface ColumnWrapperStyle {
|
|
234
273
|
rowGap?: number;
|
|
235
274
|
gap?: number;
|
|
236
275
|
columnGap?: number;
|
|
237
276
|
}
|
|
238
|
-
type
|
|
239
|
-
type: "top" | "bottom";
|
|
240
|
-
relativeCoordinate: number;
|
|
241
|
-
top: number;
|
|
242
|
-
};
|
|
243
|
-
type LegendListProps<ItemT> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
|
|
277
|
+
type LegendListProps<ItemT = any> = LegendListPropsBase<ItemT, ComponentProps<typeof ScrollView>>;
|
|
244
278
|
interface InternalState {
|
|
245
|
-
anchorElement?: {
|
|
246
|
-
id: string;
|
|
247
|
-
coordinate: number;
|
|
248
|
-
};
|
|
249
|
-
belowAnchorElementPositions?: Map<string, number>;
|
|
250
|
-
rowHeights: Map<number, number>;
|
|
251
279
|
positions: Map<string, number>;
|
|
252
280
|
columns: Map<string, number>;
|
|
253
281
|
sizes: Map<string, number>;
|
|
254
282
|
sizesKnown: Map<string, number>;
|
|
283
|
+
containerItemKeys: Set<string>;
|
|
284
|
+
containerItemTypes: Map<number, string>;
|
|
255
285
|
pendingAdjust: number;
|
|
256
286
|
isStartReached: boolean;
|
|
257
287
|
isEndReached: boolean;
|
|
258
288
|
isAtEnd: boolean;
|
|
259
289
|
isAtStart: boolean;
|
|
260
|
-
data: readonly any[];
|
|
261
290
|
hasScrolled?: boolean;
|
|
262
291
|
scrollLength: number;
|
|
263
292
|
startBuffered: number;
|
|
@@ -265,28 +294,27 @@ interface InternalState {
|
|
|
265
294
|
startNoBuffer: number;
|
|
266
295
|
endBuffered: number;
|
|
267
296
|
endNoBuffer: number;
|
|
297
|
+
firstFullyOnScreenIndex: number;
|
|
298
|
+
idsInView: string[];
|
|
268
299
|
scrollPending: number;
|
|
269
300
|
scroll: number;
|
|
270
301
|
scrollTime: number;
|
|
271
302
|
scrollPrev: number;
|
|
272
303
|
scrollPrevTime: number;
|
|
273
|
-
scrollVelocity: number;
|
|
274
304
|
scrollAdjustHandler: ScrollAdjustHandler;
|
|
275
305
|
maintainingScrollAtEnd?: boolean;
|
|
276
306
|
totalSize: number;
|
|
277
|
-
totalSizeBelowAnchor: number;
|
|
278
307
|
otherAxisSize?: number;
|
|
279
308
|
timeouts: Set<number>;
|
|
280
309
|
timeoutSizeMessage: any;
|
|
281
310
|
nativeMarginTop: number;
|
|
282
311
|
indexByKey: Map<string, number>;
|
|
283
|
-
|
|
284
|
-
|
|
312
|
+
idCache: Map<number, string>;
|
|
313
|
+
viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs<any> | undefined;
|
|
285
314
|
scrollHistory: Array<{
|
|
286
315
|
scroll: number;
|
|
287
316
|
time: number;
|
|
288
317
|
}>;
|
|
289
|
-
scrollTimer: Timer | undefined;
|
|
290
318
|
startReachedBlockedByTimer: boolean;
|
|
291
319
|
endReachedBlockedByTimer: boolean;
|
|
292
320
|
scrollForNextCalculateItemsInView: {
|
|
@@ -298,8 +326,11 @@ interface InternalState {
|
|
|
298
326
|
queuedInitialLayout?: boolean | undefined;
|
|
299
327
|
queuedCalculateItemsInView: number | undefined;
|
|
300
328
|
lastBatchingAction: number;
|
|
301
|
-
|
|
302
|
-
|
|
329
|
+
ignoreScrollFromMVCP?: {
|
|
330
|
+
lt?: number;
|
|
331
|
+
gt?: number;
|
|
332
|
+
};
|
|
333
|
+
ignoreScrollFromMVCPTimeout?: any;
|
|
303
334
|
scrollingTo?: {
|
|
304
335
|
offset: number;
|
|
305
336
|
index?: number;
|
|
@@ -307,14 +338,61 @@ interface InternalState {
|
|
|
307
338
|
viewPosition?: number;
|
|
308
339
|
animated?: boolean;
|
|
309
340
|
} | undefined;
|
|
310
|
-
previousTotalSize?: number;
|
|
311
341
|
needsOtherAxisSize?: boolean;
|
|
312
342
|
averageSizes: Record<string, {
|
|
313
343
|
num: number;
|
|
314
344
|
avg: number;
|
|
315
345
|
}>;
|
|
316
|
-
|
|
317
|
-
|
|
346
|
+
refScroller: React.RefObject<ScrollView>;
|
|
347
|
+
loadStartTime: number;
|
|
348
|
+
initialScroll: ScrollIndexWithOffset | undefined;
|
|
349
|
+
lastLayout: LayoutRectangle | undefined;
|
|
350
|
+
queuedItemSizeUpdates: {
|
|
351
|
+
itemKey: string;
|
|
352
|
+
sizeObj: {
|
|
353
|
+
width: number;
|
|
354
|
+
height: number;
|
|
355
|
+
};
|
|
356
|
+
}[];
|
|
357
|
+
queuedItemSizeUpdatesWaiting?: boolean;
|
|
358
|
+
timeoutSetPaddingTop?: any;
|
|
359
|
+
activeStickyIndex: number | undefined;
|
|
360
|
+
stickyContainers: Map<number, number>;
|
|
361
|
+
stickyContainerPool: Set<number>;
|
|
362
|
+
scrollProcessingEnabled: boolean;
|
|
363
|
+
props: {
|
|
364
|
+
alignItemsAtEnd: boolean;
|
|
365
|
+
data: readonly any[];
|
|
366
|
+
estimatedItemSize: number | undefined;
|
|
367
|
+
getEstimatedItemSize: LegendListProps["getEstimatedItemSize"];
|
|
368
|
+
getFixedItemSize: LegendListProps["getFixedItemSize"];
|
|
369
|
+
getItemType: LegendListProps["getItemType"];
|
|
370
|
+
horizontal: boolean;
|
|
371
|
+
keyExtractor: LegendListProps["keyExtractor"];
|
|
372
|
+
maintainScrollAtEnd: boolean | MaintainScrollAtEndOptions;
|
|
373
|
+
maintainScrollAtEndThreshold: number | undefined;
|
|
374
|
+
maintainVisibleContentPosition: boolean;
|
|
375
|
+
onEndReached: LegendListProps["onEndReached"];
|
|
376
|
+
onEndReachedThreshold: number | null | undefined;
|
|
377
|
+
onItemSizeChanged: LegendListProps["onItemSizeChanged"];
|
|
378
|
+
onLoad: LegendListProps["onLoad"];
|
|
379
|
+
onScroll: LegendListProps["onScroll"];
|
|
380
|
+
onStartReached: LegendListProps["onStartReached"];
|
|
381
|
+
onStartReachedThreshold: number | null | undefined;
|
|
382
|
+
recycleItems: boolean;
|
|
383
|
+
suggestEstimatedItemSize: boolean;
|
|
384
|
+
stylePaddingBottom: number | undefined;
|
|
385
|
+
renderItem: LegendListProps["renderItem"];
|
|
386
|
+
initialScroll: ScrollIndexWithOffset | undefined;
|
|
387
|
+
scrollBuffer: number;
|
|
388
|
+
numColumns: number;
|
|
389
|
+
initialContainerPoolRatio: number;
|
|
390
|
+
stylePaddingTop: number | undefined;
|
|
391
|
+
snapToIndices: number[] | undefined;
|
|
392
|
+
stickyIndicesSet: Set<number>;
|
|
393
|
+
stickyIndicesArr: number[];
|
|
394
|
+
itemsAreEqual: LegendListProps["itemsAreEqual"];
|
|
395
|
+
};
|
|
318
396
|
}
|
|
319
397
|
interface ViewableRange<T> {
|
|
320
398
|
startBuffered: number;
|
|
@@ -323,23 +401,28 @@ interface ViewableRange<T> {
|
|
|
323
401
|
end: number;
|
|
324
402
|
items: T[];
|
|
325
403
|
}
|
|
326
|
-
interface LegendListRenderItemProps<ItemT> {
|
|
404
|
+
interface LegendListRenderItemProps<ItemT, TItemType extends string | number | undefined = string | number | undefined> {
|
|
327
405
|
item: ItemT;
|
|
406
|
+
type: TItemType;
|
|
328
407
|
index: number;
|
|
408
|
+
data: readonly ItemT[];
|
|
329
409
|
extraData: any;
|
|
330
410
|
}
|
|
331
411
|
type ScrollState = {
|
|
332
412
|
contentLength: number;
|
|
413
|
+
data: readonly any[];
|
|
333
414
|
end: number;
|
|
334
415
|
endBuffered: number;
|
|
335
416
|
isAtEnd: boolean;
|
|
336
417
|
isAtStart: boolean;
|
|
418
|
+
positionAtIndex: (index: number) => number;
|
|
419
|
+
positions: Map<string, number>;
|
|
337
420
|
scroll: number;
|
|
338
421
|
scrollLength: number;
|
|
422
|
+
sizeAtIndex: (index: number) => number;
|
|
423
|
+
sizes: Map<string, number>;
|
|
339
424
|
start: number;
|
|
340
425
|
startBuffered: number;
|
|
341
|
-
sizes: Map<string, number>;
|
|
342
|
-
sizeAtIndex: (index: number) => number;
|
|
343
426
|
};
|
|
344
427
|
type LegendListRef = {
|
|
345
428
|
/**
|
|
@@ -386,9 +469,11 @@ type LegendListRef = {
|
|
|
386
469
|
* Scrolls to the end of the list.
|
|
387
470
|
* @param options - Options for scrolling.
|
|
388
471
|
* @param options.animated - If true, animates the scroll. Default: true.
|
|
472
|
+
* @param options.viewOffset - Offset from the target position.
|
|
389
473
|
*/
|
|
390
474
|
scrollToEnd(options?: {
|
|
391
475
|
animated?: boolean | undefined;
|
|
476
|
+
viewOffset?: number | undefined;
|
|
392
477
|
}): void;
|
|
393
478
|
/**
|
|
394
479
|
* Scrolls to a specific index in the list.
|
|
@@ -428,6 +513,17 @@ type LegendListRef = {
|
|
|
428
513
|
offset: number;
|
|
429
514
|
animated?: boolean | undefined;
|
|
430
515
|
}): void;
|
|
516
|
+
/**
|
|
517
|
+
* Sets or adds to the offset of the visible content anchor.
|
|
518
|
+
* @param value - The offset to set or add.
|
|
519
|
+
* @param animated - If true, uses Animated to animate the change.
|
|
520
|
+
*/
|
|
521
|
+
setVisibleContentAnchorOffset(value: number | ((value: number) => number)): void;
|
|
522
|
+
/**
|
|
523
|
+
* Sets whether scroll processing is enabled.
|
|
524
|
+
* @param enabled - If true, scroll processing is enabled.
|
|
525
|
+
*/
|
|
526
|
+
setScrollProcessingEnabled(enabled: boolean): void;
|
|
431
527
|
};
|
|
432
528
|
interface ViewToken<ItemT = any> {
|
|
433
529
|
item: ItemT;
|
|
@@ -443,14 +539,14 @@ interface ViewAmountToken<ItemT = any> extends ViewToken<ItemT> {
|
|
|
443
539
|
percentOfScroller: number;
|
|
444
540
|
scrollSize: number;
|
|
445
541
|
}
|
|
446
|
-
interface ViewabilityConfigCallbackPair {
|
|
542
|
+
interface ViewabilityConfigCallbackPair<ItemT> {
|
|
447
543
|
viewabilityConfig: ViewabilityConfig;
|
|
448
|
-
onViewableItemsChanged?: OnViewableItemsChanged
|
|
544
|
+
onViewableItemsChanged?: OnViewableItemsChanged<ItemT>;
|
|
449
545
|
}
|
|
450
|
-
type ViewabilityConfigCallbackPairs = ViewabilityConfigCallbackPair[];
|
|
451
|
-
type OnViewableItemsChanged = ((info: {
|
|
452
|
-
viewableItems: Array<ViewToken
|
|
453
|
-
changed: Array<ViewToken
|
|
546
|
+
type ViewabilityConfigCallbackPairs<ItemT> = ViewabilityConfigCallbackPair<ItemT>[];
|
|
547
|
+
type OnViewableItemsChanged<ItemT> = ((info: {
|
|
548
|
+
viewableItems: Array<ViewToken<ItemT>>;
|
|
549
|
+
changed: Array<ViewToken<ItemT>>;
|
|
454
550
|
}) => void) | null;
|
|
455
551
|
interface ViewabilityConfig {
|
|
456
552
|
/**
|
|
@@ -481,8 +577,8 @@ interface ViewabilityConfig {
|
|
|
481
577
|
*/
|
|
482
578
|
waitForInteraction?: boolean | undefined;
|
|
483
579
|
}
|
|
484
|
-
type ViewabilityCallback = (viewToken: ViewToken) => void;
|
|
485
|
-
type ViewabilityAmountCallback = (viewToken: ViewAmountToken) => void;
|
|
580
|
+
type ViewabilityCallback<ItemT = any> = (viewToken: ViewToken<ItemT>) => void;
|
|
581
|
+
type ViewabilityAmountCallback<ItemT = any> = (viewToken: ViewAmountToken<ItemT>) => void;
|
|
486
582
|
interface LegendListRecyclingState<T> {
|
|
487
583
|
item: T;
|
|
488
584
|
prevItem: T | undefined;
|
|
@@ -491,276 +587,30 @@ interface LegendListRecyclingState<T> {
|
|
|
491
587
|
}
|
|
492
588
|
type TypedForwardRef = <T, P = {}>(render: (props: P, ref: React.Ref<T>) => React.ReactNode) => (props: P & React.RefAttributes<T>) => React.ReactNode;
|
|
493
589
|
declare const typedForwardRef: TypedForwardRef;
|
|
494
|
-
type TypedMemo = <T extends React.ComponentType<any>>(Component: T, propsAreEqual?: (prevProps: Readonly<
|
|
590
|
+
type TypedMemo = <T extends React.ComponentType<any>>(Component: T, propsAreEqual?: (prevProps: Readonly<React.JSXElementConstructor<T>>, nextProps: Readonly<React.JSXElementConstructor<T>>) => boolean) => T & {
|
|
495
591
|
displayName?: string;
|
|
496
592
|
};
|
|
497
593
|
declare const typedMemo: TypedMemo;
|
|
498
|
-
|
|
594
|
+
interface ScrollIndexWithOffset {
|
|
595
|
+
index: number;
|
|
596
|
+
viewOffset: number;
|
|
597
|
+
}
|
|
598
|
+
interface ScrollIndexWithOffsetPosition extends ScrollIndexWithOffset {
|
|
599
|
+
viewPosition: number;
|
|
600
|
+
}
|
|
601
|
+
type GetRenderedItemResult<ItemT> = {
|
|
499
602
|
index: number;
|
|
500
|
-
|
|
501
|
-
|
|
603
|
+
item: ItemT;
|
|
604
|
+
renderedItem: React.ReactNode;
|
|
502
605
|
};
|
|
606
|
+
type GetRenderedItem = (key: string) => GetRenderedItemResult<any> | null;
|
|
503
607
|
|
|
504
|
-
declare const LegendList: <T>(props:
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
data: readonly T[];
|
|
508
|
-
drawDistance?: number;
|
|
509
|
-
estimatedItemSize?: number;
|
|
510
|
-
estimatedListSize?: {
|
|
511
|
-
height: number;
|
|
512
|
-
width: number;
|
|
513
|
-
};
|
|
514
|
-
extraData?: any;
|
|
515
|
-
getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
|
|
516
|
-
initialContainerPoolRatio?: number | undefined;
|
|
517
|
-
initialScrollOffset?: number;
|
|
518
|
-
initialScrollIndex?: number | {
|
|
519
|
-
index: number;
|
|
520
|
-
viewOffset?: number | undefined;
|
|
521
|
-
viewPosition?: number | undefined;
|
|
522
|
-
};
|
|
523
|
-
ItemSeparatorComponent?: React$1.ComponentType<{
|
|
524
|
-
leadingItem: T;
|
|
525
|
-
}> | undefined;
|
|
526
|
-
keyExtractor?: ((item: T, index: number) => string) | undefined;
|
|
527
|
-
ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
528
|
-
ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
529
|
-
ListFooterComponentStyle?: react_native.StyleProp<ViewStyle> | undefined;
|
|
530
|
-
ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
531
|
-
ListHeaderComponentStyle?: react_native.StyleProp<ViewStyle> | undefined;
|
|
532
|
-
maintainScrollAtEnd?: boolean;
|
|
533
|
-
maintainScrollAtEndThreshold?: number;
|
|
534
|
-
maintainVisibleContentPosition?: boolean;
|
|
535
|
-
numColumns?: number;
|
|
536
|
-
onEndReached?: ((info: {
|
|
537
|
-
distanceFromEnd: number;
|
|
538
|
-
}) => void) | null | undefined;
|
|
539
|
-
onEndReachedThreshold?: number | null | undefined;
|
|
540
|
-
onItemSizeChanged?: ((info: {
|
|
541
|
-
size: number;
|
|
542
|
-
previous: number;
|
|
543
|
-
index: number;
|
|
544
|
-
itemKey: string;
|
|
545
|
-
itemData: T;
|
|
546
|
-
}) => void) | undefined;
|
|
547
|
-
onRefresh?: () => void;
|
|
548
|
-
onStartReached?: ((info: {
|
|
549
|
-
distanceFromStart: number;
|
|
550
|
-
}) => void) | null | undefined;
|
|
551
|
-
onStartReachedThreshold?: number | null | undefined;
|
|
552
|
-
onViewableItemsChanged?: OnViewableItemsChanged | undefined;
|
|
553
|
-
progressViewOffset?: number;
|
|
554
|
-
recycleItems?: boolean;
|
|
555
|
-
refScrollView?: React$1.Ref<ScrollView>;
|
|
556
|
-
refreshing?: boolean;
|
|
557
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
|
|
558
|
-
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
559
|
-
suggestEstimatedItemSize?: boolean;
|
|
560
|
-
viewabilityConfig?: ViewabilityConfig;
|
|
561
|
-
viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
|
|
562
|
-
waitForInitialLayout?: boolean;
|
|
563
|
-
onLoad?: (info: {
|
|
564
|
-
elapsedTimeInMs: number;
|
|
565
|
-
}) => void;
|
|
566
|
-
} & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
|
|
567
|
-
|
|
568
|
-
interface LazyLegendListProps<ItemT, ListT> extends Omit<LegendListProps$1<ItemT>, "data" | "keyExtractor" | "renderItem"> {
|
|
569
|
-
children?: React$1.ReactNode | undefined;
|
|
570
|
-
LegendList?: ListT;
|
|
571
|
-
}
|
|
572
|
-
declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
573
|
-
alignItemsAtEnd?: boolean;
|
|
574
|
-
columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
|
|
575
|
-
data: readonly T[];
|
|
576
|
-
drawDistance?: number;
|
|
577
|
-
estimatedItemSize?: number;
|
|
578
|
-
estimatedListSize?: {
|
|
579
|
-
height: number;
|
|
580
|
-
width: number;
|
|
581
|
-
};
|
|
582
|
-
extraData?: any;
|
|
583
|
-
getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
|
|
584
|
-
initialContainerPoolRatio?: number | undefined;
|
|
585
|
-
initialScrollOffset?: number;
|
|
586
|
-
initialScrollIndex?: number | {
|
|
587
|
-
index: number;
|
|
588
|
-
viewOffset?: number | undefined;
|
|
589
|
-
viewPosition?: number | undefined;
|
|
590
|
-
};
|
|
591
|
-
ItemSeparatorComponent?: React$1.ComponentType<{
|
|
592
|
-
leadingItem: T;
|
|
593
|
-
}> | undefined;
|
|
594
|
-
keyExtractor?: ((item: T, index: number) => string) | undefined;
|
|
595
|
-
ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
596
|
-
ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
597
|
-
ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
598
|
-
ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
599
|
-
ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
600
|
-
maintainScrollAtEnd?: boolean;
|
|
601
|
-
maintainScrollAtEndThreshold?: number;
|
|
602
|
-
maintainVisibleContentPosition?: boolean;
|
|
603
|
-
numColumns?: number;
|
|
604
|
-
onEndReached?: ((info: {
|
|
605
|
-
distanceFromEnd: number;
|
|
606
|
-
}) => void) | null | undefined;
|
|
607
|
-
onEndReachedThreshold?: number | null | undefined;
|
|
608
|
-
onItemSizeChanged?: ((info: {
|
|
609
|
-
size: number;
|
|
610
|
-
previous: number;
|
|
611
|
-
index: number;
|
|
612
|
-
itemKey: string;
|
|
613
|
-
itemData: T;
|
|
614
|
-
}) => void) | undefined;
|
|
615
|
-
onRefresh?: () => void;
|
|
616
|
-
onStartReached?: ((info: {
|
|
617
|
-
distanceFromStart: number;
|
|
618
|
-
}) => void) | null | undefined;
|
|
619
|
-
onStartReachedThreshold?: number | null | undefined;
|
|
620
|
-
onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
|
|
621
|
-
progressViewOffset?: number;
|
|
622
|
-
recycleItems?: boolean;
|
|
623
|
-
refScrollView?: React$1.Ref<react_native.ScrollView>;
|
|
624
|
-
refreshing?: boolean;
|
|
625
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps$1<T>> | ((props: LegendListRenderItemProps$1<T>) => React$1.ReactNode) | undefined;
|
|
626
|
-
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
627
|
-
suggestEstimatedItemSize?: boolean;
|
|
628
|
-
viewabilityConfig?: _legendapp_list.ViewabilityConfig;
|
|
629
|
-
viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
|
|
630
|
-
waitForInitialLayout?: boolean;
|
|
631
|
-
onLoad?: (info: {
|
|
632
|
-
elapsedTimeInMs: number;
|
|
633
|
-
}) => void;
|
|
634
|
-
} & React$1.RefAttributes<LegendListRef$1>) => React$1.ReactNode) | react_native.Animated.AnimatedComponent<(<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
635
|
-
alignItemsAtEnd?: boolean;
|
|
636
|
-
columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
|
|
637
|
-
data: readonly T[];
|
|
638
|
-
drawDistance?: number;
|
|
639
|
-
estimatedItemSize?: number;
|
|
640
|
-
estimatedListSize?: {
|
|
641
|
-
height: number;
|
|
642
|
-
width: number;
|
|
643
|
-
};
|
|
644
|
-
extraData?: any;
|
|
645
|
-
getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
|
|
646
|
-
initialContainerPoolRatio?: number | undefined;
|
|
647
|
-
initialScrollOffset?: number;
|
|
648
|
-
initialScrollIndex?: number | {
|
|
649
|
-
index: number;
|
|
650
|
-
viewOffset?: number | undefined;
|
|
651
|
-
viewPosition?: number | undefined;
|
|
652
|
-
};
|
|
653
|
-
ItemSeparatorComponent?: React$1.ComponentType<{
|
|
654
|
-
leadingItem: T;
|
|
655
|
-
}> | undefined;
|
|
656
|
-
keyExtractor?: ((item: T, index: number) => string) | undefined;
|
|
657
|
-
ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
658
|
-
ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
659
|
-
ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
660
|
-
ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
661
|
-
ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
662
|
-
maintainScrollAtEnd?: boolean;
|
|
663
|
-
maintainScrollAtEndThreshold?: number;
|
|
664
|
-
maintainVisibleContentPosition?: boolean;
|
|
665
|
-
numColumns?: number;
|
|
666
|
-
onEndReached?: ((info: {
|
|
667
|
-
distanceFromEnd: number;
|
|
668
|
-
}) => void) | null | undefined;
|
|
669
|
-
onEndReachedThreshold?: number | null | undefined;
|
|
670
|
-
onItemSizeChanged?: ((info: {
|
|
671
|
-
size: number;
|
|
672
|
-
previous: number;
|
|
673
|
-
index: number;
|
|
674
|
-
itemKey: string;
|
|
675
|
-
itemData: T;
|
|
676
|
-
}) => void) | undefined;
|
|
677
|
-
onRefresh?: () => void;
|
|
678
|
-
onStartReached?: ((info: {
|
|
679
|
-
distanceFromStart: number;
|
|
680
|
-
}) => void) | null | undefined;
|
|
681
|
-
onStartReachedThreshold?: number | null | undefined;
|
|
682
|
-
onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
|
|
683
|
-
progressViewOffset?: number;
|
|
684
|
-
recycleItems?: boolean;
|
|
685
|
-
refScrollView?: React$1.Ref<react_native.ScrollView>;
|
|
686
|
-
refreshing?: boolean;
|
|
687
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps$1<T>> | ((props: LegendListRenderItemProps$1<T>) => React$1.ReactNode) | undefined;
|
|
688
|
-
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
689
|
-
suggestEstimatedItemSize?: boolean;
|
|
690
|
-
viewabilityConfig?: _legendapp_list.ViewabilityConfig;
|
|
691
|
-
viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
|
|
692
|
-
waitForInitialLayout?: boolean;
|
|
693
|
-
onLoad?: (info: {
|
|
694
|
-
elapsedTimeInMs: number;
|
|
695
|
-
}) => void;
|
|
696
|
-
} & React$1.RefAttributes<LegendListRef$1>) => React$1.ReactNode)> | (<ItemT_1>(props: _legendapp_list_reanimated.AnimatedLegendListProps<ItemT_1> & {
|
|
697
|
-
ref?: React$1.Ref<LegendListRef$1>;
|
|
698
|
-
}) => React$1.ReactElement | null) = <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
|
|
699
|
-
alignItemsAtEnd?: boolean;
|
|
700
|
-
columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
|
|
701
|
-
data: readonly T[];
|
|
702
|
-
drawDistance?: number;
|
|
703
|
-
estimatedItemSize?: number;
|
|
704
|
-
estimatedListSize?: {
|
|
705
|
-
height: number;
|
|
706
|
-
width: number;
|
|
707
|
-
};
|
|
708
|
-
extraData?: any;
|
|
709
|
-
getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
|
|
710
|
-
initialContainerPoolRatio?: number | undefined;
|
|
711
|
-
initialScrollOffset?: number;
|
|
712
|
-
initialScrollIndex?: number | {
|
|
713
|
-
index: number;
|
|
714
|
-
viewOffset?: number | undefined;
|
|
715
|
-
viewPosition?: number | undefined;
|
|
716
|
-
};
|
|
717
|
-
ItemSeparatorComponent?: React$1.ComponentType<{
|
|
718
|
-
leadingItem: T;
|
|
719
|
-
}> | undefined;
|
|
720
|
-
keyExtractor?: ((item: T, index: number) => string) | undefined;
|
|
721
|
-
ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
722
|
-
ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
723
|
-
ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
724
|
-
ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
|
|
725
|
-
ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
|
|
726
|
-
maintainScrollAtEnd?: boolean;
|
|
727
|
-
maintainScrollAtEndThreshold?: number;
|
|
728
|
-
maintainVisibleContentPosition?: boolean;
|
|
729
|
-
numColumns?: number;
|
|
730
|
-
onEndReached?: ((info: {
|
|
731
|
-
distanceFromEnd: number;
|
|
732
|
-
}) => void) | null | undefined;
|
|
733
|
-
onEndReachedThreshold?: number | null | undefined;
|
|
734
|
-
onItemSizeChanged?: ((info: {
|
|
735
|
-
size: number;
|
|
736
|
-
previous: number;
|
|
737
|
-
index: number;
|
|
738
|
-
itemKey: string;
|
|
739
|
-
itemData: T;
|
|
740
|
-
}) => void) | undefined;
|
|
741
|
-
onRefresh?: () => void;
|
|
742
|
-
onStartReached?: ((info: {
|
|
743
|
-
distanceFromStart: number;
|
|
744
|
-
}) => void) | null | undefined;
|
|
745
|
-
onStartReachedThreshold?: number | null | undefined;
|
|
746
|
-
onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
|
|
747
|
-
progressViewOffset?: number;
|
|
748
|
-
recycleItems?: boolean;
|
|
749
|
-
refScrollView?: React$1.Ref<react_native.ScrollView>;
|
|
750
|
-
refreshing?: boolean;
|
|
751
|
-
renderItem?: React$1.ComponentType<LegendListRenderItemProps$1<T>> | ((props: LegendListRenderItemProps$1<T>) => React$1.ReactNode) | undefined;
|
|
752
|
-
renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
|
|
753
|
-
suggestEstimatedItemSize?: boolean;
|
|
754
|
-
viewabilityConfig?: _legendapp_list.ViewabilityConfig;
|
|
755
|
-
viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
|
|
756
|
-
waitForInitialLayout?: boolean;
|
|
757
|
-
onLoad?: (info: {
|
|
758
|
-
elapsedTimeInMs: number;
|
|
759
|
-
}) => void;
|
|
760
|
-
} & React$1.RefAttributes<LegendListRef$1>) => React$1.ReactNode>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef$1>) => React$1.ReactNode;
|
|
608
|
+
declare const LegendList: (<T>(props: LegendListProps<T> & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode) & {
|
|
609
|
+
displayName?: string;
|
|
610
|
+
};
|
|
761
611
|
|
|
762
|
-
declare function useViewability(callback: ViewabilityCallback
|
|
763
|
-
declare function useViewabilityAmount(callback: ViewabilityAmountCallback): void;
|
|
612
|
+
declare function useViewability<ItemT = any>(callback: ViewabilityCallback<ItemT>, configId?: string): void;
|
|
613
|
+
declare function useViewabilityAmount<ItemT = any>(callback: ViewabilityAmountCallback<ItemT>): void;
|
|
764
614
|
declare function useRecyclingEffect(effect: (info: LegendListRecyclingState<unknown>) => void | (() => void)): void;
|
|
765
615
|
declare function useRecyclingState<ItemT>(valueOrFun: ((info: LegendListRecyclingState<ItemT>) => ItemT) | ItemT): readonly [ItemT | null, Dispatch<SetStateAction<ItemT>>];
|
|
766
616
|
declare function useIsLastItem(): boolean;
|
|
@@ -768,5 +618,6 @@ declare function useListScrollSize(): {
|
|
|
768
618
|
width: number;
|
|
769
619
|
height: number;
|
|
770
620
|
};
|
|
621
|
+
declare function useSyncLayout(): () => void;
|
|
771
622
|
|
|
772
|
-
export { type
|
|
623
|
+
export { type ColumnWrapperStyle, type GetRenderedItem, type GetRenderedItemResult, type InternalState, LegendList, type LegendListProps, type LegendListPropsBase, type LegendListRecyclingState, type LegendListRef, type LegendListRenderItemProps, type MaintainScrollAtEndOptions, type OnViewableItemsChanged, type ScrollIndexWithOffset, 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, useSyncLayout, useViewability, useViewabilityAmount };
|