@legendapp/list 2.0.0-next.10 → 2.0.0-next.12

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 ADDED
Binary file
package/animated.d.mts CHANGED
@@ -14,7 +14,7 @@ declare const AnimatedLegendList: Animated.AnimatedComponent<(<T>(props: Omit<Om
14
14
  width: number;
15
15
  };
16
16
  extraData?: any;
17
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
17
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
18
18
  initialContainerPoolRatio?: number | undefined;
19
19
  initialScrollOffset?: number;
20
20
  initialScrollIndex?: number | {
@@ -56,7 +56,7 @@ declare const AnimatedLegendList: Animated.AnimatedComponent<(<T>(props: Omit<Om
56
56
  recycleItems?: boolean;
57
57
  refScrollView?: React.Ref<react_native.ScrollView>;
58
58
  refreshing?: boolean;
59
- renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<_legendapp_list.LegendListRenderItemProps<T>> | undefined;
59
+ renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<_legendapp_list.LegendListRenderItemProps<T, string | undefined>> | undefined;
60
60
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React.ReactElement<react_native.ScrollViewProps>;
61
61
  suggestEstimatedItemSize?: boolean;
62
62
  viewabilityConfig?: _legendapp_list.ViewabilityConfig;
@@ -66,6 +66,9 @@ declare const AnimatedLegendList: Animated.AnimatedComponent<(<T>(props: Omit<Om
66
66
  elapsedTimeInMs: number;
67
67
  }) => void;
68
68
  snapToIndices?: number[];
69
+ stickyIndices?: number[];
70
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
71
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
69
72
  } & React$1.RefAttributes<_legendapp_list.LegendListRef>) => React.ReactNode)>;
70
73
 
71
74
  export { AnimatedLegendList };
package/animated.d.ts CHANGED
@@ -14,7 +14,7 @@ declare const AnimatedLegendList: Animated.AnimatedComponent<(<T>(props: Omit<Om
14
14
  width: number;
15
15
  };
16
16
  extraData?: any;
17
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
17
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
18
18
  initialContainerPoolRatio?: number | undefined;
19
19
  initialScrollOffset?: number;
20
20
  initialScrollIndex?: number | {
@@ -56,7 +56,7 @@ declare const AnimatedLegendList: Animated.AnimatedComponent<(<T>(props: Omit<Om
56
56
  recycleItems?: boolean;
57
57
  refScrollView?: React.Ref<react_native.ScrollView>;
58
58
  refreshing?: boolean;
59
- renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<_legendapp_list.LegendListRenderItemProps<T>> | undefined;
59
+ renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<_legendapp_list.LegendListRenderItemProps<T, string | undefined>> | undefined;
60
60
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React.ReactElement<react_native.ScrollViewProps>;
61
61
  suggestEstimatedItemSize?: boolean;
62
62
  viewabilityConfig?: _legendapp_list.ViewabilityConfig;
@@ -66,6 +66,9 @@ declare const AnimatedLegendList: Animated.AnimatedComponent<(<T>(props: Omit<Om
66
66
  elapsedTimeInMs: number;
67
67
  }) => void;
68
68
  snapToIndices?: number[];
69
+ stickyIndices?: number[];
70
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
71
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
69
72
  } & React$1.RefAttributes<_legendapp_list.LegendListRef>) => React.ReactNode)>;
70
73
 
71
74
  export { AnimatedLegendList };
package/index.d.mts CHANGED
@@ -2,10 +2,10 @@ import * as _legendapp_list_reanimated from '@legendapp/list/reanimated';
2
2
  import * as React$1 from 'react';
3
3
  import { ComponentProps, ReactNode, Dispatch, SetStateAction } from 'react';
4
4
  import * as react_native from 'react-native';
5
- import { View, ScrollView, Animated, StyleProp, ViewStyle, ScrollViewProps, LayoutRectangle, NativeSyntheticEvent, NativeScrollEvent, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
5
+ import { View, Animated, ScrollView, StyleProp, ViewStyle, ScrollViewProps, LayoutRectangle, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
6
6
  import Animated$1 from 'react-native-reanimated';
7
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" | "snapToOffsets" | "scrollSize";
8
+ 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";
9
9
  interface StateContext {
10
10
  listeners: Map<ListenerType, Set<(value: any) => void>>;
11
11
  values: Map<ListenerType, any>;
@@ -15,6 +15,7 @@ interface StateContext {
15
15
  mapViewabilityAmountValues: Map<number, ViewAmountToken>;
16
16
  columnWrapperStyle: ColumnWrapperStyle | undefined;
17
17
  viewRefs: Map<number, React$1.RefObject<View>>;
18
+ animatedScrollY: Animated.Value;
18
19
  }
19
20
 
20
21
  declare class ScrollAdjustHandler {
@@ -26,7 +27,7 @@ declare class ScrollAdjustHandler {
26
27
  setMounted(): void;
27
28
  }
28
29
 
29
- type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof ScrollView> | ComponentProps<typeof Animated.ScrollView> | ComponentProps<typeof Animated$1.ScrollView>> = Omit<TScrollView, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
30
+ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof ScrollView> | ComponentProps<typeof Animated.ScrollView> | ComponentProps<typeof Animated$1.ScrollView>, TItemType extends string | undefined = string | undefined> = Omit<TScrollView, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
30
31
  /**
31
32
  * If true, aligns items at the end of the list.
32
33
  * @default false
@@ -68,7 +69,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
68
69
  * In case you have distinct item sizes, you can provide a function to get the size of an item.
69
70
  * Use instead of FlatList's getItemLayout or FlashList overrideItemLayout if you want to have accurate initialScrollOffset, you should provide this function
70
71
  */
71
- getEstimatedItemSize?: (index: number, item: ItemT) => number;
72
+ getEstimatedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
72
73
  /**
73
74
  * Ratio of initial container pool size to data length (e.g., 0.5 for half).
74
75
  * @default 2
@@ -204,7 +205,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
204
205
  * - A React component: React.ComponentType<LegendListRenderItemProps<ItemT>>
205
206
  * @required
206
207
  */
207
- renderItem?: ((props: LegendListRenderItemProps<ItemT>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT>>;
208
+ renderItem?: ((props: LegendListRenderItemProps<ItemT, TItemType>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT, TItemType>>;
208
209
  /**
209
210
  * Render custom ScrollView component.
210
211
  * @default (props) => <ScrollView {...props} />
@@ -233,6 +234,15 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
233
234
  elapsedTimeInMs: number;
234
235
  }) => void;
235
236
  snapToIndices?: number[];
237
+ /**
238
+ * Array of child indices determining which children get docked to the top of the screen when scrolling.
239
+ * For example, passing stickyIndices={[0]} will cause the first child to be fixed to the top of the scroll view.
240
+ * Not supported in conjunction with horizontal={true}.
241
+ * @default undefined
242
+ */
243
+ stickyIndices?: number[];
244
+ getItemType?: (item: ItemT, index: number) => TItemType;
245
+ getFixedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
236
246
  };
237
247
  interface MaintainScrollAtEndOptions {
238
248
  onLayout?: boolean;
@@ -244,13 +254,14 @@ interface ColumnWrapperStyle {
244
254
  gap?: number;
245
255
  columnGap?: number;
246
256
  }
247
- type LegendListProps<ItemT> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
257
+ type LegendListProps<ItemT = any> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
248
258
  interface InternalState {
249
259
  positions: Map<string, number>;
250
260
  columns: Map<string, number>;
251
261
  sizes: Map<string, number>;
252
262
  sizesKnown: Map<string, number>;
253
263
  containerItemKeys: Set<string>;
264
+ containerItemTypes: Map<number, string>;
254
265
  pendingAdjust: number;
255
266
  isStartReached: boolean;
256
267
  isEndReached: boolean;
@@ -325,38 +336,32 @@ interface InternalState {
325
336
  }[];
326
337
  queuedItemSizeUpdatesWaiting?: boolean;
327
338
  timeoutSetPaddingTop?: any;
339
+ activeStickyIndex: number | undefined;
340
+ stickyContainers: Map<number, number>;
341
+ stickyContainerPool: Set<number>;
328
342
  props: {
329
343
  alignItemsAtEnd: boolean;
330
344
  data: readonly any[];
331
345
  estimatedItemSize: number | undefined;
332
- getEstimatedItemSize: ((index: number, item: any) => number) | undefined;
346
+ getEstimatedItemSize: LegendListProps["getEstimatedItemSize"];
347
+ getFixedItemSize: LegendListProps["getFixedItemSize"];
348
+ getItemType: LegendListProps["getItemType"];
333
349
  horizontal: boolean;
334
- keyExtractor: ((item: any, index: number) => string) | undefined;
350
+ keyExtractor: LegendListProps["keyExtractor"];
335
351
  maintainScrollAtEnd: boolean | MaintainScrollAtEndOptions;
336
352
  maintainScrollAtEndThreshold: number | undefined;
337
353
  maintainVisibleContentPosition: boolean;
338
- onEndReached: (((info: {
339
- distanceFromEnd: number;
340
- }) => void) | null | undefined) | undefined;
354
+ onEndReached: LegendListProps["onEndReached"];
341
355
  onEndReachedThreshold: number | null | undefined;
342
- onItemSizeChanged: ((info: {
343
- size: number;
344
- previous: number;
345
- index: number;
346
- itemKey: string;
347
- itemData: any;
348
- }) => void) | undefined;
349
- onLoad: ((info: {
350
- elapsedTimeInMs: number;
351
- }) => void) | undefined;
352
- onScroll: ((event: NativeSyntheticEvent<NativeScrollEvent>) => void) | undefined;
353
- onStartReached: (((info: {
354
- distanceFromStart: number;
355
- }) => void) | null | undefined) | undefined;
356
+ onItemSizeChanged: LegendListProps["onItemSizeChanged"];
357
+ onLoad: LegendListProps["onLoad"];
358
+ onScroll: LegendListProps["onScroll"];
359
+ onStartReached: LegendListProps["onStartReached"];
356
360
  onStartReachedThreshold: number | null | undefined;
361
+ recycleItems: boolean;
357
362
  suggestEstimatedItemSize: boolean;
358
363
  stylePaddingBottom: number | undefined;
359
- renderItem: ((props: LegendListRenderItemProps<any>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<any>>;
364
+ renderItem: LegendListProps["renderItem"];
360
365
  initialScroll: {
361
366
  index: number;
362
367
  viewOffset?: number;
@@ -367,6 +372,8 @@ interface InternalState {
367
372
  initialContainerPoolRatio: number;
368
373
  stylePaddingTop: number | undefined;
369
374
  snapToIndices: number[] | undefined;
375
+ stickyIndicesSet: Set<number>;
376
+ stickyIndicesArr: number[];
370
377
  };
371
378
  }
372
379
  interface ViewableRange<T> {
@@ -376,8 +383,9 @@ interface ViewableRange<T> {
376
383
  end: number;
377
384
  items: T[];
378
385
  }
379
- interface LegendListRenderItemProps<ItemT> {
386
+ interface LegendListRenderItemProps<ItemT, TItemType extends string | number | undefined = string | number | undefined> {
380
387
  item: ItemT;
388
+ type: TItemType;
381
389
  index: number;
382
390
  extraData: any;
383
391
  }
@@ -584,7 +592,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
584
592
  width: number;
585
593
  };
586
594
  extraData?: any;
587
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
595
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
588
596
  initialContainerPoolRatio?: number | undefined;
589
597
  initialScrollOffset?: number;
590
598
  initialScrollIndex?: number | {
@@ -626,7 +634,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
626
634
  recycleItems?: boolean;
627
635
  refScrollView?: React$1.Ref<react_native.ScrollView>;
628
636
  refreshing?: boolean;
629
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
637
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
630
638
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
631
639
  suggestEstimatedItemSize?: boolean;
632
640
  viewabilityConfig?: ViewabilityConfig;
@@ -636,6 +644,9 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
636
644
  elapsedTimeInMs: number;
637
645
  }) => void;
638
646
  snapToIndices?: number[];
647
+ stickyIndices?: number[];
648
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
649
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
639
650
  } & 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"> & {
640
651
  alignItemsAtEnd?: boolean;
641
652
  columnWrapperStyle?: ColumnWrapperStyle;
@@ -647,7 +658,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
647
658
  width: number;
648
659
  };
649
660
  extraData?: any;
650
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
661
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
651
662
  initialContainerPoolRatio?: number | undefined;
652
663
  initialScrollOffset?: number;
653
664
  initialScrollIndex?: number | {
@@ -689,7 +700,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
689
700
  recycleItems?: boolean;
690
701
  refScrollView?: React$1.Ref<react_native.ScrollView>;
691
702
  refreshing?: boolean;
692
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
703
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
693
704
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
694
705
  suggestEstimatedItemSize?: boolean;
695
706
  viewabilityConfig?: ViewabilityConfig;
@@ -699,6 +710,9 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
699
710
  elapsedTimeInMs: number;
700
711
  }) => void;
701
712
  snapToIndices?: number[];
713
+ stickyIndices?: number[];
714
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
715
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
702
716
  } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode)> | (<ItemT_1>(props: _legendapp_list_reanimated.AnimatedLegendListProps<ItemT_1> & {
703
717
  ref?: React$1.Ref<LegendListRef>;
704
718
  }) => React$1.ReactElement | null) = <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
@@ -712,7 +726,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
712
726
  width: number;
713
727
  };
714
728
  extraData?: any;
715
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
729
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
716
730
  initialContainerPoolRatio?: number | undefined;
717
731
  initialScrollOffset?: number;
718
732
  initialScrollIndex?: number | {
@@ -754,7 +768,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
754
768
  recycleItems?: boolean;
755
769
  refScrollView?: React$1.Ref<react_native.ScrollView>;
756
770
  refreshing?: boolean;
757
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
771
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
758
772
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
759
773
  suggestEstimatedItemSize?: boolean;
760
774
  viewabilityConfig?: ViewabilityConfig;
@@ -764,6 +778,9 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
764
778
  elapsedTimeInMs: number;
765
779
  }) => void;
766
780
  snapToIndices?: number[];
781
+ stickyIndices?: number[];
782
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
783
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
767
784
  } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
768
785
 
769
786
  declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
@@ -777,7 +794,7 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
777
794
  width: number;
778
795
  };
779
796
  extraData?: any;
780
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
797
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
781
798
  initialContainerPoolRatio?: number | undefined;
782
799
  initialScrollOffset?: number;
783
800
  initialScrollIndex?: number | {
@@ -819,7 +836,7 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
819
836
  recycleItems?: boolean;
820
837
  refScrollView?: React$1.Ref<ScrollView>;
821
838
  refreshing?: boolean;
822
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
839
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
823
840
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
824
841
  suggestEstimatedItemSize?: boolean;
825
842
  viewabilityConfig?: ViewabilityConfig;
@@ -829,6 +846,9 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
829
846
  elapsedTimeInMs: number;
830
847
  }) => void;
831
848
  snapToIndices?: number[];
849
+ stickyIndices?: number[];
850
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
851
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
832
852
  } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
833
853
 
834
854
  declare function useViewability(callback: ViewabilityCallback, configId?: string): void;
package/index.d.ts CHANGED
@@ -2,10 +2,10 @@ import * as _legendapp_list_reanimated from '@legendapp/list/reanimated';
2
2
  import * as React$1 from 'react';
3
3
  import { ComponentProps, ReactNode, Dispatch, SetStateAction } from 'react';
4
4
  import * as react_native from 'react-native';
5
- import { View, ScrollView, Animated, StyleProp, ViewStyle, ScrollViewProps, LayoutRectangle, NativeSyntheticEvent, NativeScrollEvent, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
5
+ import { View, Animated, ScrollView, StyleProp, ViewStyle, ScrollViewProps, LayoutRectangle, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
6
6
  import Animated$1 from 'react-native-reanimated';
7
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" | "snapToOffsets" | "scrollSize";
8
+ 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";
9
9
  interface StateContext {
10
10
  listeners: Map<ListenerType, Set<(value: any) => void>>;
11
11
  values: Map<ListenerType, any>;
@@ -15,6 +15,7 @@ interface StateContext {
15
15
  mapViewabilityAmountValues: Map<number, ViewAmountToken>;
16
16
  columnWrapperStyle: ColumnWrapperStyle | undefined;
17
17
  viewRefs: Map<number, React$1.RefObject<View>>;
18
+ animatedScrollY: Animated.Value;
18
19
  }
19
20
 
20
21
  declare class ScrollAdjustHandler {
@@ -26,7 +27,7 @@ declare class ScrollAdjustHandler {
26
27
  setMounted(): void;
27
28
  }
28
29
 
29
- type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof ScrollView> | ComponentProps<typeof Animated.ScrollView> | ComponentProps<typeof Animated$1.ScrollView>> = Omit<TScrollView, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
30
+ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof ScrollView> | ComponentProps<typeof Animated.ScrollView> | ComponentProps<typeof Animated$1.ScrollView>, TItemType extends string | undefined = string | undefined> = Omit<TScrollView, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
30
31
  /**
31
32
  * If true, aligns items at the end of the list.
32
33
  * @default false
@@ -68,7 +69,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
68
69
  * In case you have distinct item sizes, you can provide a function to get the size of an item.
69
70
  * Use instead of FlatList's getItemLayout or FlashList overrideItemLayout if you want to have accurate initialScrollOffset, you should provide this function
70
71
  */
71
- getEstimatedItemSize?: (index: number, item: ItemT) => number;
72
+ getEstimatedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
72
73
  /**
73
74
  * Ratio of initial container pool size to data length (e.g., 0.5 for half).
74
75
  * @default 2
@@ -204,7 +205,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
204
205
  * - A React component: React.ComponentType<LegendListRenderItemProps<ItemT>>
205
206
  * @required
206
207
  */
207
- renderItem?: ((props: LegendListRenderItemProps<ItemT>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT>>;
208
+ renderItem?: ((props: LegendListRenderItemProps<ItemT, TItemType>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT, TItemType>>;
208
209
  /**
209
210
  * Render custom ScrollView component.
210
211
  * @default (props) => <ScrollView {...props} />
@@ -233,6 +234,15 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
233
234
  elapsedTimeInMs: number;
234
235
  }) => void;
235
236
  snapToIndices?: number[];
237
+ /**
238
+ * Array of child indices determining which children get docked to the top of the screen when scrolling.
239
+ * For example, passing stickyIndices={[0]} will cause the first child to be fixed to the top of the scroll view.
240
+ * Not supported in conjunction with horizontal={true}.
241
+ * @default undefined
242
+ */
243
+ stickyIndices?: number[];
244
+ getItemType?: (item: ItemT, index: number) => TItemType;
245
+ getFixedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
236
246
  };
237
247
  interface MaintainScrollAtEndOptions {
238
248
  onLayout?: boolean;
@@ -244,13 +254,14 @@ interface ColumnWrapperStyle {
244
254
  gap?: number;
245
255
  columnGap?: number;
246
256
  }
247
- type LegendListProps<ItemT> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
257
+ type LegendListProps<ItemT = any> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
248
258
  interface InternalState {
249
259
  positions: Map<string, number>;
250
260
  columns: Map<string, number>;
251
261
  sizes: Map<string, number>;
252
262
  sizesKnown: Map<string, number>;
253
263
  containerItemKeys: Set<string>;
264
+ containerItemTypes: Map<number, string>;
254
265
  pendingAdjust: number;
255
266
  isStartReached: boolean;
256
267
  isEndReached: boolean;
@@ -325,38 +336,32 @@ interface InternalState {
325
336
  }[];
326
337
  queuedItemSizeUpdatesWaiting?: boolean;
327
338
  timeoutSetPaddingTop?: any;
339
+ activeStickyIndex: number | undefined;
340
+ stickyContainers: Map<number, number>;
341
+ stickyContainerPool: Set<number>;
328
342
  props: {
329
343
  alignItemsAtEnd: boolean;
330
344
  data: readonly any[];
331
345
  estimatedItemSize: number | undefined;
332
- getEstimatedItemSize: ((index: number, item: any) => number) | undefined;
346
+ getEstimatedItemSize: LegendListProps["getEstimatedItemSize"];
347
+ getFixedItemSize: LegendListProps["getFixedItemSize"];
348
+ getItemType: LegendListProps["getItemType"];
333
349
  horizontal: boolean;
334
- keyExtractor: ((item: any, index: number) => string) | undefined;
350
+ keyExtractor: LegendListProps["keyExtractor"];
335
351
  maintainScrollAtEnd: boolean | MaintainScrollAtEndOptions;
336
352
  maintainScrollAtEndThreshold: number | undefined;
337
353
  maintainVisibleContentPosition: boolean;
338
- onEndReached: (((info: {
339
- distanceFromEnd: number;
340
- }) => void) | null | undefined) | undefined;
354
+ onEndReached: LegendListProps["onEndReached"];
341
355
  onEndReachedThreshold: number | null | undefined;
342
- onItemSizeChanged: ((info: {
343
- size: number;
344
- previous: number;
345
- index: number;
346
- itemKey: string;
347
- itemData: any;
348
- }) => void) | undefined;
349
- onLoad: ((info: {
350
- elapsedTimeInMs: number;
351
- }) => void) | undefined;
352
- onScroll: ((event: NativeSyntheticEvent<NativeScrollEvent>) => void) | undefined;
353
- onStartReached: (((info: {
354
- distanceFromStart: number;
355
- }) => void) | null | undefined) | undefined;
356
+ onItemSizeChanged: LegendListProps["onItemSizeChanged"];
357
+ onLoad: LegendListProps["onLoad"];
358
+ onScroll: LegendListProps["onScroll"];
359
+ onStartReached: LegendListProps["onStartReached"];
356
360
  onStartReachedThreshold: number | null | undefined;
361
+ recycleItems: boolean;
357
362
  suggestEstimatedItemSize: boolean;
358
363
  stylePaddingBottom: number | undefined;
359
- renderItem: ((props: LegendListRenderItemProps<any>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<any>>;
364
+ renderItem: LegendListProps["renderItem"];
360
365
  initialScroll: {
361
366
  index: number;
362
367
  viewOffset?: number;
@@ -367,6 +372,8 @@ interface InternalState {
367
372
  initialContainerPoolRatio: number;
368
373
  stylePaddingTop: number | undefined;
369
374
  snapToIndices: number[] | undefined;
375
+ stickyIndicesSet: Set<number>;
376
+ stickyIndicesArr: number[];
370
377
  };
371
378
  }
372
379
  interface ViewableRange<T> {
@@ -376,8 +383,9 @@ interface ViewableRange<T> {
376
383
  end: number;
377
384
  items: T[];
378
385
  }
379
- interface LegendListRenderItemProps<ItemT> {
386
+ interface LegendListRenderItemProps<ItemT, TItemType extends string | number | undefined = string | number | undefined> {
380
387
  item: ItemT;
388
+ type: TItemType;
381
389
  index: number;
382
390
  extraData: any;
383
391
  }
@@ -584,7 +592,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
584
592
  width: number;
585
593
  };
586
594
  extraData?: any;
587
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
595
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
588
596
  initialContainerPoolRatio?: number | undefined;
589
597
  initialScrollOffset?: number;
590
598
  initialScrollIndex?: number | {
@@ -626,7 +634,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
626
634
  recycleItems?: boolean;
627
635
  refScrollView?: React$1.Ref<react_native.ScrollView>;
628
636
  refreshing?: boolean;
629
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
637
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
630
638
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
631
639
  suggestEstimatedItemSize?: boolean;
632
640
  viewabilityConfig?: ViewabilityConfig;
@@ -636,6 +644,9 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
636
644
  elapsedTimeInMs: number;
637
645
  }) => void;
638
646
  snapToIndices?: number[];
647
+ stickyIndices?: number[];
648
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
649
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
639
650
  } & 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"> & {
640
651
  alignItemsAtEnd?: boolean;
641
652
  columnWrapperStyle?: ColumnWrapperStyle;
@@ -647,7 +658,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
647
658
  width: number;
648
659
  };
649
660
  extraData?: any;
650
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
661
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
651
662
  initialContainerPoolRatio?: number | undefined;
652
663
  initialScrollOffset?: number;
653
664
  initialScrollIndex?: number | {
@@ -689,7 +700,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
689
700
  recycleItems?: boolean;
690
701
  refScrollView?: React$1.Ref<react_native.ScrollView>;
691
702
  refreshing?: boolean;
692
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
703
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
693
704
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
694
705
  suggestEstimatedItemSize?: boolean;
695
706
  viewabilityConfig?: ViewabilityConfig;
@@ -699,6 +710,9 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
699
710
  elapsedTimeInMs: number;
700
711
  }) => void;
701
712
  snapToIndices?: number[];
713
+ stickyIndices?: number[];
714
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
715
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
702
716
  } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode)> | (<ItemT_1>(props: _legendapp_list_reanimated.AnimatedLegendListProps<ItemT_1> & {
703
717
  ref?: React$1.Ref<LegendListRef>;
704
718
  }) => React$1.ReactElement | null) = <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
@@ -712,7 +726,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
712
726
  width: number;
713
727
  };
714
728
  extraData?: any;
715
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
729
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
716
730
  initialContainerPoolRatio?: number | undefined;
717
731
  initialScrollOffset?: number;
718
732
  initialScrollIndex?: number | {
@@ -754,7 +768,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
754
768
  recycleItems?: boolean;
755
769
  refScrollView?: React$1.Ref<react_native.ScrollView>;
756
770
  refreshing?: boolean;
757
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
771
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
758
772
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
759
773
  suggestEstimatedItemSize?: boolean;
760
774
  viewabilityConfig?: ViewabilityConfig;
@@ -764,6 +778,9 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
764
778
  elapsedTimeInMs: number;
765
779
  }) => void;
766
780
  snapToIndices?: number[];
781
+ stickyIndices?: number[];
782
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
783
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
767
784
  } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
768
785
 
769
786
  declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
@@ -777,7 +794,7 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
777
794
  width: number;
778
795
  };
779
796
  extraData?: any;
780
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
797
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
781
798
  initialContainerPoolRatio?: number | undefined;
782
799
  initialScrollOffset?: number;
783
800
  initialScrollIndex?: number | {
@@ -819,7 +836,7 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
819
836
  recycleItems?: boolean;
820
837
  refScrollView?: React$1.Ref<ScrollView>;
821
838
  refreshing?: boolean;
822
- renderItem?: ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T>> | undefined;
839
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
823
840
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
824
841
  suggestEstimatedItemSize?: boolean;
825
842
  viewabilityConfig?: ViewabilityConfig;
@@ -829,6 +846,9 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
829
846
  elapsedTimeInMs: number;
830
847
  }) => void;
831
848
  snapToIndices?: number[];
849
+ stickyIndices?: number[];
850
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
851
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
832
852
  } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
833
853
 
834
854
  declare function useViewability(callback: ViewabilityCallback, configId?: string): void;