@legendapp/list 3.0.0-beta.4 → 3.0.0-beta.41
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/.DS_Store +0 -0
- package/CHANGELOG.md +19 -0
- package/README.md +9 -2
- package/animated.d.ts +620 -5
- package/animated.js +2 -2
- package/animated.mjs +1 -1
- package/index.d.ts +1227 -11
- package/index.js +2594 -1023
- package/index.mjs +2593 -1024
- package/index.native.js +2347 -961
- package/index.native.mjs +2327 -943
- package/keyboard-test.d.ts +206 -0
- package/keyboard-test.js +34 -0
- package/keyboard-test.mjs +13 -0
- package/keyboard.d.ts +206 -8
- package/keyboard.js +340 -32
- package/keyboard.mjs +343 -34
- package/package.json +62 -1
- package/{types-JPHClxiw.d.mts → react-native.d.ts} +436 -158
- package/react-native.js +4942 -0
- package/react-native.mjs +4911 -0
- package/{types-JPHClxiw.d.ts → react-native.web.d.ts} +493 -158
- package/react-native.web.js +5357 -0
- package/react-native.web.mjs +5326 -0
- package/{types-YNdphn_A.d.mts → react.d.ts} +493 -158
- package/react.js +5357 -0
- package/react.mjs +5326 -0
- package/reanimated.d.ts +631 -7
- package/reanimated.js +156 -30
- package/reanimated.mjs +155 -29
- package/section-list.d.ts +620 -5
- package/section-list.js +38 -3679
- package/section-list.mjs +34 -3676
- package/animated.d.mts +0 -9
- package/index.d.mts +0 -23
- package/index.native.d.mts +0 -23
- package/index.native.d.ts +0 -23
- package/keyboard-controller.d.mts +0 -12
- package/keyboard-controller.d.ts +0 -12
- package/keyboard-controller.js +0 -69
- package/keyboard-controller.mjs +0 -48
- package/keyboard.d.mts +0 -13
- package/reanimated.d.mts +0 -18
- package/section-list.d.mts +0 -113
- package/section-list.native.d.mts +0 -113
- package/section-list.native.d.ts +0 -113
- package/section-list.native.js +0 -3700
- package/section-list.native.mjs +0 -3679
- package/types-YNdphn_A.d.ts +0 -670
|
@@ -1,15 +1,79 @@
|
|
|
1
|
-
import * as React
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Key, ReactElement, HTMLAttributes, CSSProperties, Ref, RefAttributes, Dispatch, SetStateAction } from 'react';
|
|
3
|
+
|
|
4
|
+
type ScrollEventTarget = Window | HTMLElement;
|
|
5
|
+
|
|
6
|
+
interface ScrollViewMethods {
|
|
7
|
+
getBoundingClientRect(): DOMRect | null | undefined;
|
|
8
|
+
getContentNode(): HTMLElement | null;
|
|
9
|
+
getCurrentScrollOffset(): number;
|
|
10
|
+
getScrollableNode(): HTMLElement;
|
|
11
|
+
getScrollEventTarget(): ScrollEventTarget | null;
|
|
12
|
+
getScrollResponder(): HTMLElement | null;
|
|
13
|
+
isWindowScroll?(): boolean;
|
|
14
|
+
scrollBy(x: number, y: number): void;
|
|
15
|
+
scrollTo(options: {
|
|
16
|
+
x?: number;
|
|
17
|
+
y?: number;
|
|
18
|
+
animated?: boolean;
|
|
19
|
+
}): void;
|
|
20
|
+
scrollToEnd(options?: {
|
|
21
|
+
animated?: boolean;
|
|
22
|
+
}): void;
|
|
23
|
+
scrollToOffset(params: {
|
|
24
|
+
offset: number;
|
|
25
|
+
animated?: boolean;
|
|
26
|
+
}): void;
|
|
27
|
+
}
|
|
5
28
|
|
|
6
29
|
type AnimatedValue = number;
|
|
7
30
|
|
|
8
|
-
type ListenerType = "
|
|
31
|
+
type ListenerType = "activeStickyIndex" | "debugComputedScroll" | "debugRawScroll" | "extraData" | "footerSize" | "headerSize" | "lastItemKeys" | "lastPositionUpdate" | "maintainVisibleContentPosition" | "numColumns" | "numContainers" | "numContainersPooled" | "otherAxisSize" | "readyToRender" | "scrollAdjust" | "scrollAdjustPending" | "scrollAdjustUserOffset" | "scrollSize" | "snapToOffsets" | "stylePaddingTop" | "totalSize" | `containerColumn${number}` | `containerSpan${number}` | `containerItemData${number}` | `containerItemKey${number}` | `containerPosition${number}` | `containerSticky${number}`;
|
|
32
|
+
type LegendListListenerType = Extract<ListenerType, "activeStickyIndex" | "footerSize" | "headerSize" | "lastItemKeys" | "lastPositionUpdate" | "numContainers" | "numContainersPooled" | "otherAxisSize" | "readyToRender" | "snapToOffsets" | "totalSize">;
|
|
33
|
+
type ListenerTypeValueMap = {
|
|
34
|
+
activeStickyIndex: number;
|
|
35
|
+
animatedScrollY: any;
|
|
36
|
+
debugComputedScroll: number;
|
|
37
|
+
debugRawScroll: number;
|
|
38
|
+
extraData: any;
|
|
39
|
+
footerSize: number;
|
|
40
|
+
headerSize: number;
|
|
41
|
+
lastItemKeys: string[];
|
|
42
|
+
lastPositionUpdate: number;
|
|
43
|
+
maintainVisibleContentPosition: MaintainVisibleContentPositionNormalized;
|
|
44
|
+
numColumns: number;
|
|
45
|
+
numContainers: number;
|
|
46
|
+
numContainersPooled: number;
|
|
47
|
+
otherAxisSize: number;
|
|
48
|
+
readyToRender: boolean;
|
|
49
|
+
scrollAdjust: number;
|
|
50
|
+
scrollAdjustPending: number;
|
|
51
|
+
scrollAdjustUserOffset: number;
|
|
52
|
+
scrollSize: {
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
};
|
|
56
|
+
snapToOffsets: number[];
|
|
57
|
+
stylePaddingTop: number;
|
|
58
|
+
totalSize: number;
|
|
59
|
+
} & {
|
|
60
|
+
[K in ListenerType as K extends `containerItemKey${number}` ? K : never]: string;
|
|
61
|
+
} & {
|
|
62
|
+
[K in ListenerType as K extends `containerItemData${number}` ? K : never]: any;
|
|
63
|
+
} & {
|
|
64
|
+
[K in ListenerType as K extends `containerPosition${number}` ? K : never]: number;
|
|
65
|
+
} & {
|
|
66
|
+
[K in ListenerType as K extends `containerColumn${number}` ? K : never]: number;
|
|
67
|
+
} & {
|
|
68
|
+
[K in ListenerType as K extends `containerSpan${number}` ? K : never]: number;
|
|
69
|
+
} & {
|
|
70
|
+
[K in ListenerType as K extends `containerSticky${number}` ? K : never]: boolean;
|
|
71
|
+
};
|
|
9
72
|
interface StateContext {
|
|
10
|
-
|
|
73
|
+
animatedScrollY: AnimatedValue;
|
|
74
|
+
columnWrapperStyle: ColumnWrapperStyle | undefined;
|
|
75
|
+
contextNum: number;
|
|
11
76
|
listeners: Map<ListenerType, Set<(value: any) => void>>;
|
|
12
|
-
values: Map<ListenerType, any>;
|
|
13
77
|
mapViewabilityCallbacks: Map<string, ViewabilityCallback>;
|
|
14
78
|
mapViewabilityValues: Map<string, ViewToken>;
|
|
15
79
|
mapViewabilityAmountCallbacks: Map<number, ViewabilityAmountCallback>;
|
|
@@ -21,22 +85,85 @@ interface StateContext {
|
|
|
21
85
|
previousStart: number;
|
|
22
86
|
previousEnd: number;
|
|
23
87
|
}>;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
88
|
+
positionListeners: Map<string, Set<(value: any) => void>>;
|
|
89
|
+
state: InternalState;
|
|
90
|
+
values: Map<ListenerType, any>;
|
|
91
|
+
viewRefs: Map<number, React.RefObject<LooseView | null>>;
|
|
27
92
|
}
|
|
28
93
|
|
|
29
94
|
declare class ScrollAdjustHandler {
|
|
30
95
|
private appliedAdjust;
|
|
31
96
|
private pendingAdjust;
|
|
32
|
-
private
|
|
33
|
-
private mounted;
|
|
97
|
+
private ctx;
|
|
34
98
|
constructor(ctx: StateContext);
|
|
35
99
|
requestAdjust(add: number): void;
|
|
36
|
-
setMounted(): void;
|
|
37
100
|
getAdjust(): number;
|
|
101
|
+
commitPendingAdjust(scrollTarget: ScrollTarget): void;
|
|
38
102
|
}
|
|
39
103
|
|
|
104
|
+
type BaseSharedValue<T = number> = {
|
|
105
|
+
get: () => T;
|
|
106
|
+
};
|
|
107
|
+
type StylesAsSharedValue<Style> = {
|
|
108
|
+
[key in keyof Style]: Style[key] | BaseSharedValue<Style[key]>;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
interface Insets {
|
|
112
|
+
top: number;
|
|
113
|
+
left: number;
|
|
114
|
+
bottom: number;
|
|
115
|
+
right: number;
|
|
116
|
+
}
|
|
117
|
+
interface LayoutRectangle {
|
|
118
|
+
x: number;
|
|
119
|
+
y: number;
|
|
120
|
+
width: number;
|
|
121
|
+
height: number;
|
|
122
|
+
}
|
|
123
|
+
interface NativeScrollEvent {
|
|
124
|
+
contentOffset: {
|
|
125
|
+
x: number;
|
|
126
|
+
y: number;
|
|
127
|
+
};
|
|
128
|
+
contentSize: {
|
|
129
|
+
width: number;
|
|
130
|
+
height: number;
|
|
131
|
+
};
|
|
132
|
+
layoutMeasurement: {
|
|
133
|
+
width: number;
|
|
134
|
+
height: number;
|
|
135
|
+
};
|
|
136
|
+
contentInset: Insets;
|
|
137
|
+
zoomScale: number;
|
|
138
|
+
}
|
|
139
|
+
interface NativeSyntheticEvent<T> {
|
|
140
|
+
nativeEvent: T;
|
|
141
|
+
}
|
|
142
|
+
type ViewStyle = Record<string, unknown>;
|
|
143
|
+
type StyleProp<T> = T | T[] | null | undefined | false;
|
|
144
|
+
interface ScrollEventTargetLike {
|
|
145
|
+
addEventListener(type: string, listener: (...args: any[]) => void): void;
|
|
146
|
+
removeEventListener(type: string, listener: (...args: any[]) => void): void;
|
|
147
|
+
}
|
|
148
|
+
interface ScrollableNodeLike {
|
|
149
|
+
scrollLeft?: number;
|
|
150
|
+
scrollTop?: number;
|
|
151
|
+
}
|
|
152
|
+
interface LegendListScrollerRef {
|
|
153
|
+
flashScrollIndicators(): void;
|
|
154
|
+
getCurrentScrollOffset?(): number;
|
|
155
|
+
getScrollEventTarget(): ScrollEventTargetLike | null;
|
|
156
|
+
getScrollableNode(): ScrollableNodeLike | null;
|
|
157
|
+
getScrollResponder(): unknown;
|
|
158
|
+
scrollTo(options: {
|
|
159
|
+
animated?: boolean;
|
|
160
|
+
x?: number;
|
|
161
|
+
y?: number;
|
|
162
|
+
}): void;
|
|
163
|
+
scrollToEnd(options?: {
|
|
164
|
+
animated?: boolean;
|
|
165
|
+
}): void;
|
|
166
|
+
}
|
|
40
167
|
type BaseScrollViewProps<TScrollView> = Omit<TScrollView, "contentOffset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children" | "onScroll">;
|
|
41
168
|
interface DataModeProps<ItemT, TItemType extends string | undefined> {
|
|
42
169
|
/**
|
|
@@ -51,7 +178,7 @@ interface DataModeProps<ItemT, TItemType extends string | undefined> {
|
|
|
51
178
|
* - A React component: React.ComponentType<LegendListRenderItemProps<ItemT>>
|
|
52
179
|
* @required when using data mode
|
|
53
180
|
*/
|
|
54
|
-
renderItem: ((props: LegendListRenderItemProps<ItemT, TItemType>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT, TItemType>>;
|
|
181
|
+
renderItem: ((props: LegendListRenderItemProps<ItemT, TItemType>) => React.ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT, TItemType>>;
|
|
55
182
|
children?: never;
|
|
56
183
|
}
|
|
57
184
|
interface ChildrenModeProps {
|
|
@@ -60,7 +187,7 @@ interface ChildrenModeProps {
|
|
|
60
187
|
* Each child will be treated as an individual list item.
|
|
61
188
|
* @required when using children mode
|
|
62
189
|
*/
|
|
63
|
-
children: ReactNode;
|
|
190
|
+
children: React.ReactNode;
|
|
64
191
|
data?: never;
|
|
65
192
|
renderItem?: never;
|
|
66
193
|
}
|
|
@@ -71,10 +198,10 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
71
198
|
*/
|
|
72
199
|
alignItemsAtEnd?: boolean;
|
|
73
200
|
/**
|
|
74
|
-
*
|
|
75
|
-
* @default
|
|
201
|
+
* Keeps selected items mounted even when they scroll out of view.
|
|
202
|
+
* @default undefined
|
|
76
203
|
*/
|
|
77
|
-
|
|
204
|
+
alwaysRender?: AlwaysRenderConfig;
|
|
78
205
|
/**
|
|
79
206
|
* Style applied to each column's wrapper view.
|
|
80
207
|
*/
|
|
@@ -111,7 +238,14 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
111
238
|
* In case you have distinct item sizes, you can provide a function to get the size of an item.
|
|
112
239
|
* Use instead of FlatList's getItemLayout or FlashList overrideItemLayout if you want to have accurate initialScrollOffset, you should provide this function
|
|
113
240
|
*/
|
|
114
|
-
getEstimatedItemSize?: (
|
|
241
|
+
getEstimatedItemSize?: (item: ItemT, index: number, type: TItemType) => number;
|
|
242
|
+
/**
|
|
243
|
+
* Customize layout for multi-column lists, such as allowing items to span multiple columns.
|
|
244
|
+
* Similar to FlashList's overrideItemLayout.
|
|
245
|
+
*/
|
|
246
|
+
overrideItemLayout?: (layout: {
|
|
247
|
+
span?: number;
|
|
248
|
+
}, item: ItemT, index: number, maxColumns: number, extraData?: any) => void;
|
|
115
249
|
/**
|
|
116
250
|
* Ratio of initial container pool size to data length (e.g., 0.5 for half).
|
|
117
251
|
* @default 2
|
|
@@ -129,6 +263,7 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
129
263
|
initialScrollIndex?: number | {
|
|
130
264
|
index: number;
|
|
131
265
|
viewOffset?: number | undefined;
|
|
266
|
+
viewPosition?: number | undefined;
|
|
132
267
|
};
|
|
133
268
|
/**
|
|
134
269
|
* When true, the list initializes scrolled to the last item.
|
|
@@ -168,6 +303,7 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
168
303
|
ListHeaderComponentStyle?: StyleProp<ViewStyle> | undefined;
|
|
169
304
|
/**
|
|
170
305
|
* If true, auto-scrolls to end when new items are added.
|
|
306
|
+
* Use an options object to opt into specific triggers and control whether that scroll is animated.
|
|
171
307
|
* @default false
|
|
172
308
|
*/
|
|
173
309
|
maintainScrollAtEnd?: boolean | MaintainScrollAtEndOptions;
|
|
@@ -177,11 +313,19 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
177
313
|
*/
|
|
178
314
|
maintainScrollAtEndThreshold?: number;
|
|
179
315
|
/**
|
|
180
|
-
*
|
|
181
|
-
*
|
|
316
|
+
* Maintains visibility of content.
|
|
317
|
+
* - scroll (default: true) stabilizes during size/layout changes while scrolling.
|
|
318
|
+
* - data (default: false) stabilizes when the data array changes; passing true also sets the RN maintainVisibleContentPosition prop.
|
|
319
|
+
* - shouldRestorePosition can opt out specific items from data-change anchoring.
|
|
320
|
+
* - undefined (default) enables scroll stabilization but skips data-change anchoring.
|
|
321
|
+
* - true enables both behaviors; false disables both.
|
|
322
|
+
*/
|
|
323
|
+
maintainVisibleContentPosition?: boolean | MaintainVisibleContentPositionConfig<ItemT>;
|
|
324
|
+
/**
|
|
325
|
+
* Web only: when true, listens to window/body scrolling instead of rendering a scrollable list container.
|
|
182
326
|
* @default false
|
|
183
327
|
*/
|
|
184
|
-
|
|
328
|
+
useWindowScroll?: boolean;
|
|
185
329
|
/**
|
|
186
330
|
* Number of columns to render items in.
|
|
187
331
|
* @default 1
|
|
@@ -208,6 +352,10 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
208
352
|
itemKey: string;
|
|
209
353
|
itemData: ItemT;
|
|
210
354
|
}) => void;
|
|
355
|
+
/**
|
|
356
|
+
* Called when list layout metrics change.
|
|
357
|
+
*/
|
|
358
|
+
onMetricsChange?: (metrics: LegendListMetrics) => void;
|
|
211
359
|
/**
|
|
212
360
|
* Function to call when the user pulls to refresh.
|
|
213
361
|
*/
|
|
@@ -248,7 +396,7 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
248
396
|
/**
|
|
249
397
|
* Ref to the underlying ScrollView component.
|
|
250
398
|
*/
|
|
251
|
-
refScrollView?: React.Ref<
|
|
399
|
+
refScrollView?: React.Ref<any>;
|
|
252
400
|
/**
|
|
253
401
|
* If true, shows a refresh indicator.
|
|
254
402
|
* @default false
|
|
@@ -259,7 +407,7 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
259
407
|
* Note: When using `stickyHeaderIndices`, you must provide an Animated ScrollView component.
|
|
260
408
|
* @default (props) => <ScrollView {...props} />
|
|
261
409
|
*/
|
|
262
|
-
renderScrollComponent?: (props:
|
|
410
|
+
renderScrollComponent?: (props: any) => React.ReactElement | null;
|
|
263
411
|
/**
|
|
264
412
|
* This will log a suggested estimatedItemSize.
|
|
265
413
|
* @required
|
|
@@ -294,22 +442,72 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
|
|
|
294
442
|
* @deprecated Use stickyHeaderIndices instead for parity with React Native.
|
|
295
443
|
*/
|
|
296
444
|
stickyIndices?: number[];
|
|
445
|
+
/**
|
|
446
|
+
* Configuration for sticky headers.
|
|
447
|
+
* @default undefined
|
|
448
|
+
*/
|
|
449
|
+
stickyHeaderConfig?: StickyHeaderConfig;
|
|
297
450
|
getItemType?: (item: ItemT, index: number) => TItemType;
|
|
298
|
-
getFixedItemSize?: (
|
|
451
|
+
getFixedItemSize?: (item: ItemT, index: number, type: TItemType) => number | undefined;
|
|
299
452
|
itemsAreEqual?: (itemPrevious: ItemT, item: ItemT, index: number, data: readonly ItemT[]) => boolean;
|
|
300
453
|
}
|
|
301
|
-
type LegendListPropsBase<ItemT,
|
|
454
|
+
type LegendListPropsBase<ItemT, TScrollViewProps = Record<string, any>, TItemType extends string | undefined = string | undefined> = BaseScrollViewProps<TScrollViewProps> & LegendListSpecificProps<ItemT, TItemType> & (DataModeProps<ItemT, TItemType> | ChildrenModeProps);
|
|
455
|
+
type LegendListPropsInternal = LegendListSpecificProps<any, string | undefined> & DataModeProps<any, string | undefined>;
|
|
456
|
+
interface MaintainVisibleContentPositionConfig<ItemT = any> {
|
|
457
|
+
data?: boolean;
|
|
458
|
+
size?: boolean;
|
|
459
|
+
shouldRestorePosition?: (item: ItemT, index: number, data: readonly ItemT[]) => boolean;
|
|
460
|
+
}
|
|
461
|
+
interface MaintainVisibleContentPositionNormalized<ItemT = any> {
|
|
462
|
+
data: boolean;
|
|
463
|
+
size: boolean;
|
|
464
|
+
shouldRestorePosition?: (item: ItemT, index: number, data: readonly ItemT[]) => boolean;
|
|
465
|
+
}
|
|
466
|
+
interface StickyHeaderConfig {
|
|
467
|
+
/**
|
|
468
|
+
* Specifies how far from the top edge sticky headers should start sticking.
|
|
469
|
+
* Useful for scenarios with a fixed navbar or header, where sticky elements pin below it..
|
|
470
|
+
* @default 0
|
|
471
|
+
*/
|
|
472
|
+
offset?: number;
|
|
473
|
+
/**
|
|
474
|
+
* Component to render as a backdrop behind the sticky header.
|
|
475
|
+
* @default undefined
|
|
476
|
+
*/
|
|
477
|
+
backdropComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
|
|
478
|
+
}
|
|
479
|
+
interface AlwaysRenderConfig {
|
|
480
|
+
top?: number;
|
|
481
|
+
bottom?: number;
|
|
482
|
+
indices?: number[];
|
|
483
|
+
keys?: string[];
|
|
484
|
+
}
|
|
485
|
+
interface MaintainScrollAtEndOnOptions {
|
|
486
|
+
dataChange?: boolean;
|
|
487
|
+
itemLayout?: boolean;
|
|
488
|
+
layout?: boolean;
|
|
489
|
+
}
|
|
302
490
|
interface MaintainScrollAtEndOptions {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
491
|
+
/**
|
|
492
|
+
* Whether maintainScrollAtEnd should animate when it scrolls to the end.
|
|
493
|
+
*/
|
|
494
|
+
animated?: boolean;
|
|
495
|
+
/**
|
|
496
|
+
* Which events should keep the list pinned to the end.
|
|
497
|
+
* - If omitted, object values default to all triggers.
|
|
498
|
+
* - If provided, only the keys set to `true` are enabled.
|
|
499
|
+
*/
|
|
500
|
+
on?: MaintainScrollAtEndOnOptions;
|
|
306
501
|
}
|
|
307
502
|
interface ColumnWrapperStyle {
|
|
308
503
|
rowGap?: number;
|
|
309
504
|
gap?: number;
|
|
310
505
|
columnGap?: number;
|
|
311
506
|
}
|
|
312
|
-
|
|
507
|
+
interface LegendListMetrics {
|
|
508
|
+
headerSize: number;
|
|
509
|
+
footerSize: number;
|
|
510
|
+
}
|
|
313
511
|
interface ThresholdSnapshot {
|
|
314
512
|
scrollPosition: number;
|
|
315
513
|
contentSize?: number;
|
|
@@ -317,167 +515,222 @@ interface ThresholdSnapshot {
|
|
|
317
515
|
atThreshold: boolean;
|
|
318
516
|
}
|
|
319
517
|
interface ScrollTarget {
|
|
320
|
-
offset: number;
|
|
321
|
-
index?: number;
|
|
322
|
-
viewOffset?: number;
|
|
323
|
-
viewPosition?: number;
|
|
324
518
|
animated?: boolean;
|
|
519
|
+
index?: number;
|
|
325
520
|
isInitialScroll?: boolean;
|
|
521
|
+
itemSize?: number;
|
|
522
|
+
offset: number;
|
|
326
523
|
precomputedWithViewOffset?: boolean;
|
|
524
|
+
targetOffset?: number;
|
|
525
|
+
viewOffset?: number;
|
|
526
|
+
viewPosition?: number;
|
|
327
527
|
}
|
|
328
528
|
interface InternalState {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
529
|
+
activeStickyIndex: number | undefined;
|
|
530
|
+
adjustingFromInitialMount?: number;
|
|
531
|
+
animFrameCheckFinishedScroll?: any;
|
|
532
|
+
averageSizes: Record<string, {
|
|
533
|
+
num: number;
|
|
534
|
+
avg: number;
|
|
535
|
+
}>;
|
|
536
|
+
columns: Array<number | undefined>;
|
|
537
|
+
columnSpans: Array<number | undefined>;
|
|
538
|
+
containerItemKeys: Map<string, number>;
|
|
334
539
|
containerItemTypes: Map<number, string>;
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
startBufferedId?: string;
|
|
343
|
-
startNoBuffer: number;
|
|
540
|
+
dataChangeEpoch: number;
|
|
541
|
+
dataChangeNeedsScrollUpdate: boolean;
|
|
542
|
+
didColumnsChange?: boolean;
|
|
543
|
+
didDataChange?: boolean;
|
|
544
|
+
didFinishInitialScroll?: boolean;
|
|
545
|
+
didContainersLayout?: boolean;
|
|
546
|
+
enableScrollForNextCalculateItemsInView: boolean;
|
|
344
547
|
endBuffered: number;
|
|
345
548
|
endNoBuffer: number;
|
|
549
|
+
endReachedSnapshot: ThresholdSnapshot | undefined;
|
|
346
550
|
firstFullyOnScreenIndex: number;
|
|
347
|
-
|
|
348
|
-
scrollPending: number;
|
|
349
|
-
scroll: number;
|
|
350
|
-
scrollTime: number;
|
|
351
|
-
scrollPrev: number;
|
|
352
|
-
scrollPrevTime: number;
|
|
353
|
-
scrollAdjustHandler: ScrollAdjustHandler;
|
|
354
|
-
triggerCalculateItemsInView?: (params?: {
|
|
355
|
-
doMVCP?: boolean;
|
|
356
|
-
dataChanged?: boolean;
|
|
357
|
-
forceFullItemPositions?: boolean;
|
|
358
|
-
}) => void;
|
|
359
|
-
maintainingScrollAtEnd?: boolean;
|
|
360
|
-
totalSize: number;
|
|
361
|
-
otherAxisSize?: number;
|
|
362
|
-
timeouts: Set<number>;
|
|
363
|
-
timeoutSizeMessage: any;
|
|
364
|
-
nativeMarginTop: number;
|
|
365
|
-
indexByKey: Map<string, number>;
|
|
551
|
+
hasScrolled?: boolean;
|
|
366
552
|
idCache: string[];
|
|
367
|
-
|
|
368
|
-
scrollHistory: Array<{
|
|
369
|
-
scroll: number;
|
|
370
|
-
time: number;
|
|
371
|
-
}>;
|
|
372
|
-
lastScrollAdjustForHistory?: number;
|
|
373
|
-
startReachedSnapshot: ThresholdSnapshot | undefined;
|
|
374
|
-
endReachedSnapshot: ThresholdSnapshot | undefined;
|
|
375
|
-
scrollForNextCalculateItemsInView: {
|
|
376
|
-
top: number;
|
|
377
|
-
bottom: number;
|
|
378
|
-
} | undefined;
|
|
379
|
-
enableScrollForNextCalculateItemsInView: boolean;
|
|
380
|
-
minIndexSizeChanged: number | undefined;
|
|
381
|
-
queuedInitialLayout?: boolean | undefined;
|
|
382
|
-
queuedCalculateItemsInView: number | undefined;
|
|
383
|
-
dataChangeNeedsScrollUpdate: boolean;
|
|
384
|
-
previousData?: readonly unknown[];
|
|
385
|
-
didColumnsChange?: boolean;
|
|
386
|
-
didDataChange?: boolean;
|
|
387
|
-
isFirst?: boolean;
|
|
388
|
-
lastBatchingAction: number;
|
|
553
|
+
idsInView: string[];
|
|
389
554
|
ignoreScrollFromMVCP?: {
|
|
390
555
|
lt?: number;
|
|
391
556
|
gt?: number;
|
|
392
557
|
};
|
|
393
558
|
ignoreScrollFromMVCPIgnored?: boolean;
|
|
394
559
|
ignoreScrollFromMVCPTimeout?: any;
|
|
395
|
-
|
|
396
|
-
averageSizes: Record<string, {
|
|
397
|
-
num: number;
|
|
398
|
-
avg: number;
|
|
399
|
-
}>;
|
|
400
|
-
refScroller: React.RefObject<ScrollView>;
|
|
401
|
-
loadStartTime: number;
|
|
402
|
-
initialScroll: ScrollIndexWithOffsetAndContentOffset | undefined;
|
|
560
|
+
indexByKey: Map<string, number>;
|
|
403
561
|
initialAnchor?: InitialScrollAnchor;
|
|
562
|
+
initialNativeScrollWatchdog?: {
|
|
563
|
+
startScroll: number;
|
|
564
|
+
targetOffset: number;
|
|
565
|
+
};
|
|
566
|
+
initialScrollLastDidFinish: boolean;
|
|
567
|
+
initialScrollLastTarget: ScrollIndexWithOffsetAndContentOffset | undefined;
|
|
568
|
+
initialScrollLastTargetUsesOffset: boolean;
|
|
569
|
+
initialScrollPreviousDataLength: number;
|
|
570
|
+
initialScrollRetryLastLength: number | undefined;
|
|
571
|
+
initialScrollRetryWindowUntil: number;
|
|
572
|
+
initialScroll: ScrollIndexWithOffsetAndContentOffset | undefined;
|
|
573
|
+
initialScrollUsesOffset: boolean;
|
|
574
|
+
isAtEnd: boolean;
|
|
575
|
+
isAtStart: boolean;
|
|
576
|
+
isEndReached: boolean | null;
|
|
577
|
+
isFirst?: boolean;
|
|
578
|
+
isStartReached: boolean | null;
|
|
579
|
+
lastBatchingAction: number;
|
|
404
580
|
lastLayout: LayoutRectangle | undefined;
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
581
|
+
lastScrollAdjustForHistory?: number;
|
|
582
|
+
lastScrollDelta: number;
|
|
583
|
+
loadStartTime: number;
|
|
584
|
+
maintainingScrollAtEnd?: boolean;
|
|
585
|
+
minIndexSizeChanged: number | undefined;
|
|
586
|
+
mvcpAnchorLock?: {
|
|
587
|
+
id: string;
|
|
588
|
+
position: number;
|
|
589
|
+
quietPasses: number;
|
|
590
|
+
expiresAt: number;
|
|
591
|
+
};
|
|
592
|
+
contentInsetOverride?: Partial<Insets> | null;
|
|
593
|
+
nativeContentInset?: Insets;
|
|
594
|
+
nativeMarginTop: number;
|
|
595
|
+
needsOtherAxisSize?: boolean;
|
|
596
|
+
otherAxisSize?: number;
|
|
597
|
+
pendingNativeMVCPAdjust?: {
|
|
598
|
+
amount: number;
|
|
599
|
+
closestDistanceToClamp: number;
|
|
600
|
+
hasApproachedClamp: boolean;
|
|
601
|
+
manualApplied: number;
|
|
602
|
+
startScroll: number;
|
|
603
|
+
};
|
|
604
|
+
pendingMaintainScrollAtEnd?: boolean;
|
|
410
605
|
pendingTotalSize?: number;
|
|
411
|
-
|
|
606
|
+
pendingScrollResolve?: (() => void) | undefined;
|
|
607
|
+
positions: Array<number | undefined>;
|
|
608
|
+
previousData?: readonly unknown[];
|
|
609
|
+
queuedCalculateItemsInView: number | undefined;
|
|
610
|
+
queuedMVCPRecalculate?: number;
|
|
611
|
+
queuedInitialLayout?: boolean | undefined;
|
|
612
|
+
refScroller: React.RefObject<LegendListScrollerRef | null>;
|
|
613
|
+
scroll: number;
|
|
614
|
+
scrollAdjustHandler: ScrollAdjustHandler;
|
|
615
|
+
scrollForNextCalculateItemsInView: {
|
|
616
|
+
top: number | null;
|
|
617
|
+
bottom: number | null;
|
|
618
|
+
} | undefined;
|
|
619
|
+
scrollHistory: Array<{
|
|
620
|
+
scroll: number;
|
|
621
|
+
time: number;
|
|
622
|
+
}>;
|
|
623
|
+
scrollingTo?: ScrollTarget | undefined;
|
|
624
|
+
scrollLastCalculate?: number;
|
|
625
|
+
scrollLength: number;
|
|
626
|
+
scrollPending: number;
|
|
627
|
+
scrollPrev: number;
|
|
628
|
+
scrollPrevTime: number;
|
|
629
|
+
scrollProcessingEnabled: boolean;
|
|
630
|
+
scrollTime: number;
|
|
631
|
+
sizes: Map<string, number>;
|
|
632
|
+
sizesKnown: Map<string, number>;
|
|
633
|
+
startBuffered: number;
|
|
634
|
+
startBufferedId?: string;
|
|
635
|
+
startNoBuffer: number;
|
|
636
|
+
startReachedSnapshotDataChangeEpoch: number | undefined;
|
|
637
|
+
startReachedSnapshot: ThresholdSnapshot | undefined;
|
|
638
|
+
stickyContainerPool: Set<number>;
|
|
639
|
+
stickyContainers: Map<number, number>;
|
|
640
|
+
timeouts: Set<number>;
|
|
641
|
+
timeoutSetPaddingTop?: any;
|
|
642
|
+
timeoutSizeMessage: any;
|
|
643
|
+
timeoutCheckFinishedScrollFallback?: any;
|
|
644
|
+
totalSize: number;
|
|
645
|
+
triggerCalculateItemsInView?: (params?: {
|
|
646
|
+
doMVCP?: boolean;
|
|
647
|
+
dataChanged?: boolean;
|
|
648
|
+
forceFullItemPositions?: boolean;
|
|
649
|
+
}) => void;
|
|
650
|
+
viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs<any> | undefined;
|
|
412
651
|
props: {
|
|
413
652
|
alignItemsAtEnd: boolean;
|
|
653
|
+
animatedProps: StylesAsSharedValue<Record<string, any>>;
|
|
654
|
+
alwaysRender: AlwaysRenderConfig | undefined;
|
|
655
|
+
alwaysRenderIndicesArr: number[];
|
|
656
|
+
alwaysRenderIndicesSet: Set<number>;
|
|
657
|
+
contentInset: Insets | undefined;
|
|
414
658
|
data: readonly any[];
|
|
415
659
|
dataVersion: Key | undefined;
|
|
660
|
+
drawDistance: number;
|
|
416
661
|
estimatedItemSize: number | undefined;
|
|
417
|
-
getEstimatedItemSize:
|
|
418
|
-
getFixedItemSize:
|
|
419
|
-
getItemType:
|
|
662
|
+
getEstimatedItemSize: LegendListPropsInternal["getEstimatedItemSize"];
|
|
663
|
+
getFixedItemSize: LegendListPropsInternal["getFixedItemSize"];
|
|
664
|
+
getItemType: LegendListPropsInternal["getItemType"];
|
|
420
665
|
horizontal: boolean;
|
|
421
|
-
|
|
422
|
-
|
|
666
|
+
initialContainerPoolRatio: number;
|
|
667
|
+
itemsAreEqual: LegendListPropsInternal["itemsAreEqual"];
|
|
668
|
+
keyExtractor: LegendListPropsInternal["keyExtractor"];
|
|
669
|
+
maintainScrollAtEnd: MaintainScrollAtEndNormalized | undefined;
|
|
423
670
|
maintainScrollAtEndThreshold: number | undefined;
|
|
424
|
-
maintainVisibleContentPosition:
|
|
425
|
-
|
|
671
|
+
maintainVisibleContentPosition: MaintainVisibleContentPositionNormalized;
|
|
672
|
+
numColumns: number;
|
|
673
|
+
onEndReached: LegendListPropsInternal["onEndReached"];
|
|
426
674
|
onEndReachedThreshold: number | null | undefined;
|
|
427
|
-
onItemSizeChanged:
|
|
428
|
-
onLoad:
|
|
429
|
-
onScroll:
|
|
430
|
-
onStartReached:
|
|
675
|
+
onItemSizeChanged: LegendListPropsInternal["onItemSizeChanged"];
|
|
676
|
+
onLoad: LegendListPropsInternal["onLoad"];
|
|
677
|
+
onScroll: LegendListPropsInternal["onScroll"];
|
|
678
|
+
onStartReached: LegendListPropsInternal["onStartReached"];
|
|
431
679
|
onStartReachedThreshold: number | null | undefined;
|
|
432
|
-
onStickyHeaderChange:
|
|
680
|
+
onStickyHeaderChange: LegendListPropsInternal["onStickyHeaderChange"];
|
|
681
|
+
overrideItemLayout: LegendListPropsInternal["overrideItemLayout"];
|
|
433
682
|
recycleItems: boolean;
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
renderItem: LegendListProps["renderItem"];
|
|
437
|
-
scrollBuffer: number;
|
|
438
|
-
numColumns: number;
|
|
439
|
-
initialContainerPoolRatio: number;
|
|
440
|
-
stylePaddingTop: number | undefined;
|
|
683
|
+
renderItem: LegendListPropsInternal["renderItem"];
|
|
684
|
+
scrollBuffer?: number;
|
|
441
685
|
snapToIndices: number[] | undefined;
|
|
442
|
-
|
|
686
|
+
positionComponentInternal: React.ComponentType<any> | undefined;
|
|
687
|
+
stickyPositionComponentInternal: React.ComponentType<any> | undefined;
|
|
443
688
|
stickyIndicesArr: number[];
|
|
444
|
-
|
|
445
|
-
|
|
689
|
+
stickyIndicesSet: Set<number>;
|
|
690
|
+
stylePaddingBottom: number | undefined;
|
|
691
|
+
stylePaddingTop: number | undefined;
|
|
692
|
+
suggestEstimatedItemSize: boolean;
|
|
693
|
+
useWindowScroll: boolean;
|
|
446
694
|
};
|
|
447
695
|
}
|
|
448
696
|
interface ViewableRange<T> {
|
|
449
|
-
startBuffered: number;
|
|
450
|
-
start: number;
|
|
451
|
-
endBuffered: number;
|
|
452
697
|
end: number;
|
|
698
|
+
endBuffered: number;
|
|
453
699
|
items: T[];
|
|
700
|
+
start: number;
|
|
701
|
+
startBuffered: number;
|
|
454
702
|
}
|
|
455
703
|
interface LegendListRenderItemProps<ItemT, TItemType extends string | number | undefined = string | number | undefined> {
|
|
456
|
-
item: ItemT;
|
|
457
|
-
type: TItemType;
|
|
458
|
-
index: number;
|
|
459
704
|
data: readonly ItemT[];
|
|
460
705
|
extraData: any;
|
|
706
|
+
index: number;
|
|
707
|
+
item: ItemT;
|
|
708
|
+
type: TItemType;
|
|
461
709
|
}
|
|
462
|
-
type
|
|
463
|
-
activeStickyIndex: number
|
|
710
|
+
type LegendListState$1 = {
|
|
711
|
+
activeStickyIndex: number;
|
|
464
712
|
contentLength: number;
|
|
465
713
|
data: readonly any[];
|
|
466
|
-
elementAtIndex: (index: number) =>
|
|
714
|
+
elementAtIndex: (index: number) => any;
|
|
467
715
|
end: number;
|
|
468
716
|
endBuffered: number;
|
|
469
717
|
isAtEnd: boolean;
|
|
470
718
|
isAtStart: boolean;
|
|
719
|
+
isEndReached: boolean;
|
|
720
|
+
isStartReached: boolean;
|
|
721
|
+
listen: <T extends LegendListListenerType>(listenerType: T, callback: (value: ListenerTypeValueMap[T]) => void) => () => void;
|
|
722
|
+
listenToPosition: (key: string, callback: (value: number) => void) => () => void;
|
|
471
723
|
positionAtIndex: (index: number) => number;
|
|
472
|
-
|
|
724
|
+
positionByKey: (key: string) => number | undefined;
|
|
473
725
|
scroll: number;
|
|
474
726
|
scrollLength: number;
|
|
727
|
+
scrollVelocity: number;
|
|
475
728
|
sizeAtIndex: (index: number) => number;
|
|
476
729
|
sizes: Map<string, number>;
|
|
477
730
|
start: number;
|
|
478
731
|
startBuffered: number;
|
|
479
732
|
};
|
|
480
|
-
type LegendListRef = {
|
|
733
|
+
type LegendListRef$1 = {
|
|
481
734
|
/**
|
|
482
735
|
* Displays the scroll indicators momentarily.
|
|
483
736
|
*/
|
|
@@ -485,7 +738,7 @@ type LegendListRef = {
|
|
|
485
738
|
/**
|
|
486
739
|
* Returns the native ScrollView component reference.
|
|
487
740
|
*/
|
|
488
|
-
getNativeScrollRef():
|
|
741
|
+
getNativeScrollRef(): any;
|
|
489
742
|
/**
|
|
490
743
|
* Returns the scroll responder instance for handling scroll events.
|
|
491
744
|
*/
|
|
@@ -493,11 +746,11 @@ type LegendListRef = {
|
|
|
493
746
|
/**
|
|
494
747
|
* Returns the ScrollResponderMixin for advanced scroll handling.
|
|
495
748
|
*/
|
|
496
|
-
getScrollResponder():
|
|
749
|
+
getScrollResponder(): any;
|
|
497
750
|
/**
|
|
498
751
|
* Returns the internal state of the scroll virtualization.
|
|
499
752
|
*/
|
|
500
|
-
getState():
|
|
753
|
+
getState(): LegendListState$1;
|
|
501
754
|
/**
|
|
502
755
|
* Scrolls a specific index into view.
|
|
503
756
|
* @param params - Parameters for scrolling.
|
|
@@ -507,7 +760,7 @@ type LegendListRef = {
|
|
|
507
760
|
scrollIndexIntoView(params: {
|
|
508
761
|
animated?: boolean | undefined;
|
|
509
762
|
index: number;
|
|
510
|
-
}): void
|
|
763
|
+
}): Promise<void>;
|
|
511
764
|
/**
|
|
512
765
|
* Scrolls a specific index into view.
|
|
513
766
|
* @param params - Parameters for scrolling.
|
|
@@ -517,7 +770,7 @@ type LegendListRef = {
|
|
|
517
770
|
scrollItemIntoView(params: {
|
|
518
771
|
animated?: boolean | undefined;
|
|
519
772
|
item: any;
|
|
520
|
-
}): void
|
|
773
|
+
}): Promise<void>;
|
|
521
774
|
/**
|
|
522
775
|
* Scrolls to the end of the list.
|
|
523
776
|
* @param options - Options for scrolling.
|
|
@@ -527,7 +780,7 @@ type LegendListRef = {
|
|
|
527
780
|
scrollToEnd(options?: {
|
|
528
781
|
animated?: boolean | undefined;
|
|
529
782
|
viewOffset?: number | undefined;
|
|
530
|
-
}): void
|
|
783
|
+
}): Promise<void>;
|
|
531
784
|
/**
|
|
532
785
|
* Scrolls to a specific index in the list.
|
|
533
786
|
* @param params - Parameters for scrolling.
|
|
@@ -541,7 +794,7 @@ type LegendListRef = {
|
|
|
541
794
|
index: number;
|
|
542
795
|
viewOffset?: number | undefined;
|
|
543
796
|
viewPosition?: number | undefined;
|
|
544
|
-
}): void
|
|
797
|
+
}): Promise<void>;
|
|
545
798
|
/**
|
|
546
799
|
* Scrolls to a specific item in the list.
|
|
547
800
|
* @param params - Parameters for scrolling.
|
|
@@ -555,7 +808,7 @@ type LegendListRef = {
|
|
|
555
808
|
item: any;
|
|
556
809
|
viewOffset?: number | undefined;
|
|
557
810
|
viewPosition?: number | undefined;
|
|
558
|
-
}): void
|
|
811
|
+
}): Promise<void>;
|
|
559
812
|
/**
|
|
560
813
|
* Scrolls to a specific offset in pixels.
|
|
561
814
|
* @param params - Parameters for scrolling.
|
|
@@ -565,36 +818,49 @@ type LegendListRef = {
|
|
|
565
818
|
scrollToOffset(params: {
|
|
566
819
|
offset: number;
|
|
567
820
|
animated?: boolean | undefined;
|
|
568
|
-
}): void
|
|
821
|
+
}): Promise<void>;
|
|
569
822
|
/**
|
|
570
823
|
* Sets or adds to the offset of the visible content anchor.
|
|
571
824
|
* @param value - The offset to set or add.
|
|
572
825
|
* @param animated - If true, uses Animated to animate the change.
|
|
573
826
|
*/
|
|
574
|
-
setVisibleContentAnchorOffset(value: number | ((
|
|
827
|
+
setVisibleContentAnchorOffset(value: number | ((val: number) => number)): void;
|
|
575
828
|
/**
|
|
576
829
|
* Sets whether scroll processing is enabled.
|
|
577
830
|
* @param enabled - If true, scroll processing is enabled.
|
|
578
831
|
*/
|
|
579
832
|
setScrollProcessingEnabled(enabled: boolean): void;
|
|
833
|
+
/**
|
|
834
|
+
* Clears internal virtualization caches.
|
|
835
|
+
* @param options - Cache clearing options.
|
|
836
|
+
* @param options.mode - `sizes` clears measurement caches. `full` also clears key/position caches.
|
|
837
|
+
*/
|
|
838
|
+
clearCaches(options?: {
|
|
839
|
+
mode?: "sizes" | "full";
|
|
840
|
+
}): void;
|
|
841
|
+
/**
|
|
842
|
+
* Reports an externally measured content inset. Pass null/undefined to clear.
|
|
843
|
+
* Values are merged on top of props/animated/native insets.
|
|
844
|
+
*/
|
|
845
|
+
reportContentInset(inset?: Partial<Insets> | null): void;
|
|
580
846
|
};
|
|
581
847
|
interface ViewToken<ItemT = any> {
|
|
582
|
-
|
|
583
|
-
key: string;
|
|
848
|
+
containerId: number;
|
|
584
849
|
index: number;
|
|
585
850
|
isViewable: boolean;
|
|
586
|
-
|
|
851
|
+
item: ItemT;
|
|
852
|
+
key: string;
|
|
587
853
|
}
|
|
588
854
|
interface ViewAmountToken<ItemT = any> extends ViewToken<ItemT> {
|
|
589
|
-
sizeVisible: number;
|
|
590
|
-
size: number;
|
|
591
|
-
percentVisible: number;
|
|
592
855
|
percentOfScroller: number;
|
|
856
|
+
percentVisible: number;
|
|
593
857
|
scrollSize: number;
|
|
858
|
+
size: number;
|
|
859
|
+
sizeVisible: number;
|
|
594
860
|
}
|
|
595
861
|
interface ViewabilityConfigCallbackPair<ItemT = any> {
|
|
596
|
-
viewabilityConfig: ViewabilityConfig;
|
|
597
862
|
onViewableItemsChanged?: OnViewableItemsChanged<ItemT>;
|
|
863
|
+
viewabilityConfig: ViewabilityConfig;
|
|
598
864
|
}
|
|
599
865
|
type ViewabilityConfigCallbackPairs<ItemT> = ViewabilityConfigCallbackPair<ItemT>[];
|
|
600
866
|
type OnViewableItemsChanged<ItemT> = ((info: {
|
|
@@ -633,14 +899,14 @@ interface ViewabilityConfig {
|
|
|
633
899
|
type ViewabilityCallback<ItemT = any> = (viewToken: ViewToken<ItemT>) => void;
|
|
634
900
|
type ViewabilityAmountCallback<ItemT = any> = (viewToken: ViewAmountToken<ItemT>) => void;
|
|
635
901
|
interface LegendListRecyclingState<T> {
|
|
636
|
-
item: T;
|
|
637
|
-
prevItem: T | undefined;
|
|
638
902
|
index: number;
|
|
903
|
+
item: T;
|
|
639
904
|
prevIndex: number | undefined;
|
|
905
|
+
prevItem: T | undefined;
|
|
640
906
|
}
|
|
641
|
-
type TypedForwardRef = <T, P = {}>(render: (props: P, ref: React.Ref<T>) => React.
|
|
907
|
+
type TypedForwardRef = <T, P = {}>(render: (props: P, ref: React.Ref<T>) => React.ReactElement | null) => (props: P & React.RefAttributes<T>) => React.ReactElement | null;
|
|
642
908
|
declare const typedForwardRef: TypedForwardRef;
|
|
643
|
-
type TypedMemo = <T extends React.ComponentType<any>>(Component: T, propsAreEqual?: (prevProps: Readonly<React.
|
|
909
|
+
type TypedMemo = <T extends React.ComponentType<any>>(Component: T, propsAreEqual?: (prevProps: Readonly<React.ComponentProps<T>>, nextProps: Readonly<React.ComponentProps<T>>) => boolean) => T & {
|
|
644
910
|
displayName?: string;
|
|
645
911
|
};
|
|
646
912
|
declare const typedMemo: TypedMemo;
|
|
@@ -667,4 +933,73 @@ type GetRenderedItemResult<ItemT> = {
|
|
|
667
933
|
};
|
|
668
934
|
type GetRenderedItem = (key: string) => GetRenderedItemResult<any> | null;
|
|
669
935
|
|
|
670
|
-
|
|
936
|
+
type LooseLayoutChangeEvent = {
|
|
937
|
+
nativeEvent: {
|
|
938
|
+
layout: LayoutRectangle;
|
|
939
|
+
};
|
|
940
|
+
};
|
|
941
|
+
type LooseMeasureCallback = (x: number, y: number, width: number, height: number, pageX: number, pageY: number) => void;
|
|
942
|
+
interface LooseView {
|
|
943
|
+
measure?: (callback: LooseMeasureCallback) => void;
|
|
944
|
+
}
|
|
945
|
+
interface LooseScrollViewProps {
|
|
946
|
+
contentContainerStyle?: StyleProp<ViewStyle>;
|
|
947
|
+
contentInset?: Insets;
|
|
948
|
+
contentOffset?: {
|
|
949
|
+
x: number;
|
|
950
|
+
y: number;
|
|
951
|
+
};
|
|
952
|
+
horizontal?: boolean;
|
|
953
|
+
maintainVisibleContentPosition?: {
|
|
954
|
+
autoscrollToTopThreshold?: number;
|
|
955
|
+
minIndexForVisible: number;
|
|
956
|
+
};
|
|
957
|
+
onLayout?: (event: LooseLayoutChangeEvent) => void;
|
|
958
|
+
onMomentumScrollBegin?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
959
|
+
onMomentumScrollEnd?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
960
|
+
onScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
961
|
+
refreshControl?: ReactElement | null;
|
|
962
|
+
removeClippedSubviews?: boolean;
|
|
963
|
+
scrollEventThrottle?: number;
|
|
964
|
+
showsHorizontalScrollIndicator?: boolean;
|
|
965
|
+
showsVerticalScrollIndicator?: boolean;
|
|
966
|
+
stickyHeaderIndices?: number[];
|
|
967
|
+
style?: StyleProp<ViewStyle>;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
type ScrollViewPropsWeb = Omit<LooseScrollViewProps, "style" | "contentContainerStyle" | "onScroll" | "onLayout" | "pagingEnabled" | "snapToInterval"> & Omit<HTMLAttributes<HTMLDivElement>, "onScroll" | "onLayout" | "style"> & {
|
|
971
|
+
style?: CSSProperties;
|
|
972
|
+
contentContainerStyle?: CSSProperties;
|
|
973
|
+
onScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
|
|
974
|
+
onLayout?: (event: LooseLayoutChangeEvent) => void;
|
|
975
|
+
};
|
|
976
|
+
type LegendListPropsOverrides<ItemT, TItemType extends string | undefined> = Omit<LegendListPropsBase<ItemT, ScrollViewPropsWeb, TItemType>, "refScrollView" | "renderScrollComponent" | "ListHeaderComponentStyle" | "ListFooterComponentStyle"> & {
|
|
977
|
+
refScrollView?: Ref<HTMLElement | ScrollViewMethods>;
|
|
978
|
+
ListHeaderComponentStyle?: CSSProperties | undefined;
|
|
979
|
+
ListFooterComponentStyle?: CSSProperties | undefined;
|
|
980
|
+
};
|
|
981
|
+
type LegendListProps<ItemT = any, TItemType extends string | undefined = string | undefined> = LegendListPropsOverrides<ItemT, TItemType>;
|
|
982
|
+
type LegendListRef = Omit<LegendListRef$1, "getNativeScrollRef" | "getScrollableNode" | "getScrollResponder"> & {
|
|
983
|
+
getNativeScrollRef(): HTMLElement | ScrollViewMethods;
|
|
984
|
+
getScrollableNode(): HTMLElement;
|
|
985
|
+
getScrollResponder(): HTMLElement | null;
|
|
986
|
+
};
|
|
987
|
+
type LegendListState = Omit<LegendListState$1, "elementAtIndex"> & {
|
|
988
|
+
elementAtIndex: (index: number) => HTMLElement | null | undefined;
|
|
989
|
+
};
|
|
990
|
+
type LegendListComponent = <ItemT = any>(props: LegendListProps<ItemT> & RefAttributes<LegendListRef>) => ReactElement | null;
|
|
991
|
+
|
|
992
|
+
declare function useViewability<ItemT = any>(callback: ViewabilityCallback<ItemT>, configId?: string): void;
|
|
993
|
+
declare function useViewabilityAmount<ItemT = any>(callback: ViewabilityAmountCallback<ItemT>): void;
|
|
994
|
+
declare function useRecyclingEffect(effect: (info: LegendListRecyclingState<unknown>) => void | (() => void)): void;
|
|
995
|
+
declare function useRecyclingState<ItemT>(valueOrFun: ((info: LegendListRecyclingState<ItemT>) => ItemT) | ItemT): readonly [ItemT, Dispatch<SetStateAction<ItemT>>];
|
|
996
|
+
declare function useIsLastItem(): boolean;
|
|
997
|
+
declare function useListScrollSize(): {
|
|
998
|
+
width: number;
|
|
999
|
+
height: number;
|
|
1000
|
+
};
|
|
1001
|
+
declare function useSyncLayout(): () => void;
|
|
1002
|
+
|
|
1003
|
+
declare const LegendList: LegendListComponent;
|
|
1004
|
+
|
|
1005
|
+
export { type AlwaysRenderConfig, type BaseScrollViewProps, type ColumnWrapperStyle, type GetRenderedItem, type GetRenderedItemResult, type InitialScrollAnchor, type Insets, type InternalState, type LayoutRectangle, LegendList, type LegendListComponent, type LegendListMetrics, type LegendListProps, type LegendListPropsBase, type LegendListRecyclingState, type LegendListRef, type LegendListRenderItemProps, type LegendListScrollerRef, type LegendListState, type MaintainScrollAtEndOnOptions, type MaintainScrollAtEndOptions, type MaintainVisibleContentPositionConfig, type MaintainVisibleContentPositionNormalized, type NativeScrollEvent, type NativeSyntheticEvent, type OnViewableItemsChanged, type ScrollEventTargetLike, type ScrollIndexWithOffset, type ScrollIndexWithOffsetAndContentOffset, type ScrollIndexWithOffsetPosition, type ScrollTarget, type ScrollableNodeLike, type StickyHeaderConfig, type StyleProp, type ThresholdSnapshot, type TypedForwardRef, type TypedMemo, type ViewAmountToken, type ViewStyle, type ViewToken, type ViewabilityAmountCallback, type ViewabilityCallback, type ViewabilityConfig, type ViewabilityConfigCallbackPair, type ViewabilityConfigCallbackPairs, type ViewableRange, typedForwardRef, typedMemo, useIsLastItem, useListScrollSize, useRecyclingEffect, useRecyclingState, useSyncLayout, useViewability, useViewabilityAmount };
|