@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.
Files changed (5) hide show
  1. package/index.d.mts +107 -58
  2. package/index.d.ts +107 -58
  3. package/index.js +1586 -1692
  4. package/index.mjs +1552 -1658
  5. 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
- import * as _legendapp_list from '@legendapp/list';
8
- import { LegendListProps as LegendListProps$1, LegendListRenderItemProps as LegendListRenderItemProps$1, LegendListRef as LegendListRef$1 } from '@legendapp/list';
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 isPaused;
16
- private isDisabled;
17
- constructor(ctx: any);
18
- private doAjdust;
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
- ignoreScrollFromCalcTotal?: boolean;
302
- disableScrollJumpsFrom?: number;
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
- onScroll: ((event: NativeSyntheticEvent<NativeScrollEvent>) => void) | undefined;
317
- stylePaddingBottom?: number;
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$1<ItemT>, "data" | "keyExtractor" | "renderItem"> {
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?: _legendapp_list.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?: _legendapp_list.OnViewableItemsChanged | undefined;
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$1<T>> | ((props: LegendListRenderItemProps$1<T>) => React$1.ReactNode) | undefined;
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?: _legendapp_list.ViewabilityConfig;
629
- viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
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$1>) => React$1.ReactNode) | react_native.Animated.AnimatedComponent<(<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
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?: _legendapp_list.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?: _legendapp_list.OnViewableItemsChanged | undefined;
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$1<T>> | ((props: LegendListRenderItemProps$1<T>) => React$1.ReactNode) | undefined;
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?: _legendapp_list.ViewabilityConfig;
691
- viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
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$1>) => React$1.ReactNode)> | (<ItemT_1>(props: _legendapp_list_reanimated.AnimatedLegendListProps<ItemT_1> & {
697
- ref?: React$1.Ref<LegendListRef$1>;
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?: _legendapp_list.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?: _legendapp_list.OnViewableItemsChanged | undefined;
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$1<T>> | ((props: LegendListRenderItemProps$1<T>) => React$1.ReactNode) | undefined;
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?: _legendapp_list.ViewabilityConfig;
755
- viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
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$1>) => React$1.ReactNode>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef$1>) => React$1.ReactNode;
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 AnchoredPosition, type ColumnWrapperStyle, 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 };
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 };