@legendapp/list 3.0.0-beta.1 → 3.0.0-beta.10

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.
@@ -1,15 +1,57 @@
1
1
  import * as React$1 from 'react';
2
2
  import { ComponentProps, Key, ReactNode } from 'react';
3
- import { View, ScrollView, Animated, LayoutRectangle, ScrollViewComponent, ScrollResponderMixin, StyleProp, ViewStyle, NativeSyntheticEvent, NativeScrollEvent, ScrollViewProps } from 'react-native';
3
+ import { View, ScrollView, Animated, LayoutRectangle, ScrollViewProps, Insets, ScrollViewComponent, ScrollResponderMixin, StyleProp, ViewStyle, NativeSyntheticEvent, NativeScrollEvent } from 'react-native';
4
4
  import Reanimated from 'react-native-reanimated';
5
5
 
6
6
  type AnimatedValue = number;
7
7
 
8
- type ListenerType = "numContainers" | "numContainersPooled" | `containerItemKey${number}` | `containerItemData${number}` | `containerPosition${number}` | `containerColumn${number}` | `containerSticky${number}` | `containerStickyOffset${number}` | "containersDidLayout" | "extraData" | "numColumns" | "lastItemKeys" | "totalSize" | "alignItemsPaddingTop" | "lastPositionUpdate" | "stylePaddingTop" | "scrollAdjust" | "scrollAdjustUserOffset" | "scrollAdjustPending" | "scrollingTo" | "headerSize" | "footerSize" | "maintainVisibleContentPosition" | "debugRawScroll" | "debugComputedScroll" | "otherAxisSize" | "snapToOffsets" | "scrollSize" | "activeStickyIndex";
8
+ type ListenerType = "activeStickyIndex" | "alignItemsPaddingTop" | "debugComputedScroll" | "debugRawScroll" | "extraData" | "footerSize" | "headerSize" | "lastItemKeys" | "lastPositionUpdate" | "maintainVisibleContentPosition" | "numColumns" | "numContainers" | "numContainersPooled" | "otherAxisSize" | "readyToRender" | "scrollAdjust" | "scrollAdjustPending" | "scrollAdjustUserOffset" | "scrollSize" | "snapToOffsets" | "stylePaddingTop" | "totalSize" | `containerColumn${number}` | `containerItemData${number}` | `containerItemKey${number}` | `containerPosition${number}` | `containerSticky${number}` | `containerStickyOffset${number}`;
9
+ type LegendListListenerType = Extract<ListenerType, "activeStickyIndex" | "footerSize" | "headerSize" | "lastItemKeys" | "lastPositionUpdate" | "numContainers" | "numContainersPooled" | "otherAxisSize" | "readyToRender" | "snapToOffsets" | "totalSize">;
10
+ type ListenerTypeValueMap = {
11
+ activeStickyIndex: number;
12
+ alignItemsPaddingTop: number;
13
+ animatedScrollY: any;
14
+ debugComputedScroll: number;
15
+ debugRawScroll: number;
16
+ extraData: any;
17
+ footerSize: number;
18
+ headerSize: number;
19
+ lastItemKeys: string[];
20
+ lastPositionUpdate: number;
21
+ maintainVisibleContentPosition: boolean;
22
+ numColumns: number;
23
+ numContainers: number;
24
+ numContainersPooled: number;
25
+ otherAxisSize: number;
26
+ readyToRender: boolean;
27
+ scrollAdjust: number;
28
+ scrollAdjustPending: number;
29
+ scrollAdjustUserOffset: number;
30
+ scrollSize: {
31
+ width: number;
32
+ height: number;
33
+ };
34
+ snapToOffsets: number[];
35
+ stylePaddingTop: number;
36
+ totalSize: number;
37
+ } & {
38
+ [K in ListenerType as K extends `containerItemKey${number}` ? K : never]: string;
39
+ } & {
40
+ [K in ListenerType as K extends `containerItemData${number}` ? K : never]: any;
41
+ } & {
42
+ [K in ListenerType as K extends `containerPosition${number}` ? K : never]: number;
43
+ } & {
44
+ [K in ListenerType as K extends `containerColumn${number}` ? K : never]: number;
45
+ } & {
46
+ [K in ListenerType as K extends `containerSticky${number}` ? K : never]: boolean;
47
+ } & {
48
+ [K in ListenerType as K extends `containerStickyOffset${number}` ? K : never]: number;
49
+ };
9
50
  interface StateContext {
10
- internalState: InternalState | undefined;
51
+ animatedScrollY: AnimatedValue;
52
+ columnWrapperStyle: ColumnWrapperStyle | undefined;
53
+ contextNum: number;
11
54
  listeners: Map<ListenerType, Set<(value: any) => void>>;
12
- values: Map<ListenerType, any>;
13
55
  mapViewabilityCallbacks: Map<string, ViewabilityCallback>;
14
56
  mapViewabilityValues: Map<string, ViewToken>;
15
57
  mapViewabilityAmountCallbacks: Map<number, ViewabilityAmountCallback>;
@@ -21,22 +63,29 @@ interface StateContext {
21
63
  previousStart: number;
22
64
  previousEnd: number;
23
65
  }>;
24
- columnWrapperStyle: ColumnWrapperStyle | undefined;
66
+ positionListeners: Map<string, Set<(value: any) => void>>;
67
+ state: InternalState;
68
+ values: Map<ListenerType, any>;
25
69
  viewRefs: Map<number, React$1.RefObject<View>>;
26
- animatedScrollY: AnimatedValue;
27
70
  }
28
71
 
29
72
  declare class ScrollAdjustHandler {
30
73
  private appliedAdjust;
31
74
  private pendingAdjust;
32
- private context;
33
- private mounted;
75
+ private ctx;
34
76
  constructor(ctx: StateContext);
35
77
  requestAdjust(add: number): void;
36
- setMounted(): void;
37
78
  getAdjust(): number;
79
+ commitPendingAdjust(): void;
38
80
  }
39
81
 
82
+ type BaseSharedValue<T = number> = {
83
+ get: () => T;
84
+ };
85
+ type StylesAsSharedValue<Style> = {
86
+ [key in keyof Style]: Style[key] | BaseSharedValue<Style[key]>;
87
+ };
88
+
40
89
  type BaseScrollViewProps<TScrollView> = Omit<TScrollView, "contentOffset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children" | "onScroll">;
41
90
  interface DataModeProps<ItemT, TItemType extends string | undefined> {
42
91
  /**
@@ -70,11 +119,6 @@ interface LegendListSpecificProps<ItemT, TItemType extends string | undefined> {
70
119
  * @default false
71
120
  */
72
121
  alignItemsAtEnd?: boolean;
73
- /**
74
- * If true, enables using average sizes for performance optimization.
75
- * @default true
76
- */
77
- enableAverages?: boolean;
78
122
  /**
79
123
  * Style applied to each column's wrapper view.
80
124
  */
@@ -317,100 +361,109 @@ interface ThresholdSnapshot {
317
361
  atThreshold: boolean;
318
362
  }
319
363
  interface ScrollTarget {
320
- offset: number;
321
- index?: number;
322
- viewOffset?: number;
323
- viewPosition?: number;
324
364
  animated?: boolean;
365
+ index?: number;
325
366
  isInitialScroll?: boolean;
367
+ itemSize?: number;
368
+ offset: number;
326
369
  precomputedWithViewOffset?: boolean;
370
+ viewOffset?: number;
371
+ viewPosition?: number;
327
372
  }
328
373
  interface InternalState {
329
- positions: Map<string, number>;
374
+ activeStickyIndex: number | undefined;
375
+ adjustingFromInitialMount?: number;
376
+ animFrameCheckFinishedScroll?: any;
377
+ averageSizes: Record<string, {
378
+ num: number;
379
+ avg: number;
380
+ }>;
330
381
  columns: Map<string, number>;
331
- sizes: Map<string, number>;
332
- sizesKnown: Map<string, number>;
333
382
  containerItemKeys: Set<string>;
334
383
  containerItemTypes: Map<number, string>;
335
- isStartReached: boolean;
336
- isEndReached: boolean;
337
- isAtEnd: boolean;
338
- isAtStart: boolean;
339
- hasScrolled?: boolean;
340
- scrollLength: number;
341
- startBuffered: number;
342
- startBufferedId?: string;
343
- startNoBuffer: number;
384
+ dataChangeNeedsScrollUpdate: boolean;
385
+ didColumnsChange?: boolean;
386
+ didDataChange?: boolean;
387
+ didFinishInitialScroll?: boolean;
388
+ didContainersLayout?: boolean;
389
+ enableScrollForNextCalculateItemsInView: boolean;
344
390
  endBuffered: number;
345
391
  endNoBuffer: number;
392
+ endReachedSnapshot: ThresholdSnapshot | undefined;
346
393
  firstFullyOnScreenIndex: number;
347
- idsInView: string[];
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>;
394
+ hasScrolled?: boolean;
366
395
  idCache: string[];
367
- viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs<any> | undefined;
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;
396
+ idsInView: string[];
389
397
  ignoreScrollFromMVCP?: {
390
398
  lt?: number;
391
399
  gt?: number;
392
400
  };
393
401
  ignoreScrollFromMVCPIgnored?: boolean;
394
402
  ignoreScrollFromMVCPTimeout?: any;
395
- needsOtherAxisSize?: boolean;
396
- averageSizes: Record<string, {
397
- num: number;
398
- avg: number;
399
- }>;
400
- refScroller: React.RefObject<ScrollView>;
401
- loadStartTime: number;
402
- initialScroll: ScrollIndexWithOffsetAndContentOffset | undefined;
403
+ indexByKey: Map<string, number>;
403
404
  initialAnchor?: InitialScrollAnchor;
405
+ initialScroll: ScrollIndexWithOffsetAndContentOffset | undefined;
406
+ isAtEnd: boolean;
407
+ isAtStart: boolean;
408
+ isEndReached: boolean | null;
409
+ isFirst?: boolean;
410
+ isStartReached: boolean | null;
411
+ lastBatchingAction: number;
404
412
  lastLayout: LayoutRectangle | undefined;
405
- timeoutSetPaddingTop?: any;
406
- activeStickyIndex: number | undefined;
407
- stickyContainers: Map<number, number>;
408
- stickyContainerPool: Set<number>;
409
- scrollProcessingEnabled: boolean;
413
+ lastScrollAdjustForHistory?: number;
414
+ loadStartTime: number;
415
+ maintainingScrollAtEnd?: boolean;
416
+ minIndexSizeChanged: number | undefined;
417
+ nativeMarginTop: number;
418
+ needsOtherAxisSize?: boolean;
419
+ otherAxisSize?: number;
410
420
  pendingTotalSize?: number;
411
- adjustingFromInitialMount?: number;
421
+ positions: Map<string, number>;
422
+ previousData?: readonly unknown[];
423
+ queuedCalculateItemsInView: number | undefined;
424
+ queuedInitialLayout?: boolean | undefined;
425
+ refScroller: React.RefObject<ScrollView>;
426
+ scroll: number;
427
+ scrollAdjustHandler: ScrollAdjustHandler;
428
+ scrollForNextCalculateItemsInView: {
429
+ top: number | null;
430
+ bottom: number | null;
431
+ } | undefined;
432
+ scrollHistory: Array<{
433
+ scroll: number;
434
+ time: number;
435
+ }>;
436
+ scrollingTo?: ScrollTarget | undefined;
437
+ scrollLastCalculate?: number;
438
+ scrollLength: number;
439
+ scrollPending: number;
440
+ scrollPrev: number;
441
+ scrollPrevTime: number;
442
+ scrollProcessingEnabled: boolean;
443
+ scrollTime: number;
444
+ sizes: Map<string, number>;
445
+ sizesKnown: Map<string, number>;
446
+ startBuffered: number;
447
+ startBufferedId?: string;
448
+ startNoBuffer: number;
449
+ startReachedSnapshot: ThresholdSnapshot | undefined;
450
+ stickyContainerPool: Set<number>;
451
+ stickyContainers: Map<number, number>;
452
+ timeouts: Set<number>;
453
+ timeoutSetPaddingTop?: any;
454
+ timeoutSizeMessage: any;
455
+ timeoutCheckFinishedScrollFallback?: any;
456
+ totalSize: number;
457
+ triggerCalculateItemsInView?: (params?: {
458
+ doMVCP?: boolean;
459
+ dataChanged?: boolean;
460
+ forceFullItemPositions?: boolean;
461
+ }) => void;
462
+ viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs<any> | undefined;
412
463
  props: {
413
464
  alignItemsAtEnd: boolean;
465
+ animatedProps: StylesAsSharedValue<ScrollViewProps>;
466
+ contentInset: Insets | undefined;
414
467
  data: readonly any[];
415
468
  dataVersion: Key | undefined;
416
469
  estimatedItemSize: number | undefined;
@@ -418,10 +471,13 @@ interface InternalState {
418
471
  getFixedItemSize: LegendListProps["getFixedItemSize"];
419
472
  getItemType: LegendListProps["getItemType"];
420
473
  horizontal: boolean;
474
+ initialContainerPoolRatio: number;
475
+ itemsAreEqual: LegendListProps["itemsAreEqual"];
421
476
  keyExtractor: LegendListProps["keyExtractor"];
422
477
  maintainScrollAtEnd: boolean | MaintainScrollAtEndOptions;
423
478
  maintainScrollAtEndThreshold: number | undefined;
424
479
  maintainVisibleContentPosition: boolean;
480
+ numColumns: number;
425
481
  onEndReached: LegendListProps["onEndReached"];
426
482
  onEndReachedThreshold: number | null | undefined;
427
483
  onItemSizeChanged: LegendListProps["onItemSizeChanged"];
@@ -431,36 +487,32 @@ interface InternalState {
431
487
  onStartReachedThreshold: number | null | undefined;
432
488
  onStickyHeaderChange: LegendListProps["onStickyHeaderChange"];
433
489
  recycleItems: boolean;
434
- suggestEstimatedItemSize: boolean;
435
- stylePaddingBottom: number | undefined;
436
490
  renderItem: LegendListProps["renderItem"];
437
491
  scrollBuffer: number;
438
- numColumns: number;
439
- initialContainerPoolRatio: number;
440
- stylePaddingTop: number | undefined;
441
492
  snapToIndices: number[] | undefined;
442
- stickyIndicesSet: Set<number>;
443
493
  stickyIndicesArr: number[];
444
- itemsAreEqual: LegendListProps["itemsAreEqual"];
445
- enableAverages: boolean;
494
+ stickyIndicesSet: Set<number>;
495
+ stylePaddingBottom: number | undefined;
496
+ stylePaddingTop: number | undefined;
497
+ suggestEstimatedItemSize: boolean;
446
498
  };
447
499
  }
448
500
  interface ViewableRange<T> {
449
- startBuffered: number;
450
- start: number;
451
- endBuffered: number;
452
501
  end: number;
502
+ endBuffered: number;
453
503
  items: T[];
504
+ start: number;
505
+ startBuffered: number;
454
506
  }
455
507
  interface LegendListRenderItemProps<ItemT, TItemType extends string | number | undefined = string | number | undefined> {
456
- item: ItemT;
457
- type: TItemType;
458
- index: number;
459
508
  data: readonly ItemT[];
460
509
  extraData: any;
510
+ index: number;
511
+ item: ItemT;
512
+ type: TItemType;
461
513
  }
462
- type ScrollState = {
463
- activeStickyIndex: number | undefined;
514
+ type LegendListState = {
515
+ activeStickyIndex: number;
464
516
  contentLength: number;
465
517
  data: readonly any[];
466
518
  elementAtIndex: (index: number) => View | null | undefined;
@@ -468,6 +520,8 @@ type ScrollState = {
468
520
  endBuffered: number;
469
521
  isAtEnd: boolean;
470
522
  isAtStart: boolean;
523
+ listen: <T extends LegendListListenerType>(listenerType: T, callback: (value: ListenerTypeValueMap[T]) => void) => () => void;
524
+ listenToPosition: (key: string, callback: (value: number) => void) => () => void;
471
525
  positionAtIndex: (index: number) => number;
472
526
  positions: Map<string, number>;
473
527
  scroll: number;
@@ -497,7 +551,7 @@ type LegendListRef = {
497
551
  /**
498
552
  * Returns the internal state of the scroll virtualization.
499
553
  */
500
- getState(): ScrollState;
554
+ getState(): LegendListState;
501
555
  /**
502
556
  * Scrolls a specific index into view.
503
557
  * @param params - Parameters for scrolling.
@@ -571,7 +625,7 @@ type LegendListRef = {
571
625
  * @param value - The offset to set or add.
572
626
  * @param animated - If true, uses Animated to animate the change.
573
627
  */
574
- setVisibleContentAnchorOffset(value: number | ((value: number) => number)): void;
628
+ setVisibleContentAnchorOffset(value: number | ((val: number) => number)): void;
575
629
  /**
576
630
  * Sets whether scroll processing is enabled.
577
631
  * @param enabled - If true, scroll processing is enabled.
@@ -579,22 +633,22 @@ type LegendListRef = {
579
633
  setScrollProcessingEnabled(enabled: boolean): void;
580
634
  };
581
635
  interface ViewToken<ItemT = any> {
582
- item: ItemT;
583
- key: string;
636
+ containerId: number;
584
637
  index: number;
585
638
  isViewable: boolean;
586
- containerId: number;
639
+ item: ItemT;
640
+ key: string;
587
641
  }
588
642
  interface ViewAmountToken<ItemT = any> extends ViewToken<ItemT> {
589
- sizeVisible: number;
590
- size: number;
591
- percentVisible: number;
592
643
  percentOfScroller: number;
644
+ percentVisible: number;
593
645
  scrollSize: number;
646
+ size: number;
647
+ sizeVisible: number;
594
648
  }
595
649
  interface ViewabilityConfigCallbackPair<ItemT = any> {
596
- viewabilityConfig: ViewabilityConfig;
597
650
  onViewableItemsChanged?: OnViewableItemsChanged<ItemT>;
651
+ viewabilityConfig: ViewabilityConfig;
598
652
  }
599
653
  type ViewabilityConfigCallbackPairs<ItemT> = ViewabilityConfigCallbackPair<ItemT>[];
600
654
  type OnViewableItemsChanged<ItemT> = ((info: {
@@ -633,10 +687,10 @@ interface ViewabilityConfig {
633
687
  type ViewabilityCallback<ItemT = any> = (viewToken: ViewToken<ItemT>) => void;
634
688
  type ViewabilityAmountCallback<ItemT = any> = (viewToken: ViewAmountToken<ItemT>) => void;
635
689
  interface LegendListRecyclingState<T> {
636
- item: T;
637
- prevItem: T | undefined;
638
690
  index: number;
691
+ item: T;
639
692
  prevIndex: number | undefined;
693
+ prevItem: T | undefined;
640
694
  }
641
695
  type TypedForwardRef = <T, P = {}>(render: (props: P, ref: React.Ref<T>) => React.ReactNode) => (props: P & React.RefAttributes<T>) => React.ReactNode;
642
696
  declare const typedForwardRef: TypedForwardRef;
@@ -667,4 +721,4 @@ type GetRenderedItemResult<ItemT> = {
667
721
  };
668
722
  type GetRenderedItem = (key: string) => GetRenderedItemResult<any> | null;
669
723
 
670
- export { type ColumnWrapperStyle as C, type GetRenderedItemResult as G, type InternalState as I, type LegendListProps as L, type MaintainScrollAtEndOptions as M, type OnViewableItemsChanged as O, type ScrollTarget as S, type ThresholdSnapshot as T, type ViewabilityCallback as V, type LegendListRef as a, type ViewabilityAmountCallback as b, type LegendListRecyclingState as c, type LegendListPropsBase as d, type ViewableRange as e, type LegendListRenderItemProps as f, type ScrollState as g, type ViewToken as h, type ViewAmountToken as i, type ViewabilityConfigCallbackPair as j, type ViewabilityConfigCallbackPairs as k, type ViewabilityConfig as l, type TypedForwardRef as m, type TypedMemo as n, typedMemo as o, type ScrollIndexWithOffset as p, type ScrollIndexWithOffsetPosition as q, type ScrollIndexWithOffsetAndContentOffset as r, type InitialScrollAnchor as s, typedForwardRef as t, type GetRenderedItem as u };
724
+ export { type ColumnWrapperStyle as C, type GetRenderedItemResult as G, type InternalState as I, type LegendListProps as L, type MaintainScrollAtEndOptions as M, type OnViewableItemsChanged as O, type ScrollTarget as S, type ThresholdSnapshot as T, type ViewabilityCallback as V, type LegendListRef as a, type ViewabilityAmountCallback as b, type LegendListRecyclingState as c, type LegendListPropsBase as d, type ViewableRange as e, type LegendListRenderItemProps as f, type LegendListState as g, type ViewToken as h, type ViewAmountToken as i, type ViewabilityConfigCallbackPair as j, type ViewabilityConfigCallbackPairs as k, type ViewabilityConfig as l, type TypedForwardRef as m, type TypedMemo as n, typedMemo as o, type ScrollIndexWithOffset as p, type ScrollIndexWithOffsetPosition as q, type ScrollIndexWithOffsetAndContentOffset as r, type InitialScrollAnchor as s, typedForwardRef as t, type GetRenderedItem as u };