@legendapp/list 2.0.0-next.2 → 2.0.0-next.21

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 (264) hide show
  1. package/{dist/animated.d.mts → animated.d.mts} +10 -3
  2. package/{dist/animated.d.ts → animated.d.ts} +10 -3
  3. package/{dist/animated.js → animated.js} +2 -2
  4. package/{dist/animated.mjs → animated.mjs} +2 -2
  5. package/{dist/index.d.mts → index.d.mts} +86 -167
  6. package/{dist/index.d.ts → index.d.ts} +86 -167
  7. package/{dist/index.js → index.js} +1594 -1098
  8. package/{dist/index.mjs → index.mjs} +1596 -1100
  9. package/keyboard-controller.d.mts +148 -0
  10. package/keyboard-controller.d.ts +148 -0
  11. package/{dist/keyboard-controller.js → keyboard-controller.js} +4 -4
  12. package/{dist/keyboard-controller.mjs → keyboard-controller.mjs} +4 -4
  13. package/package.json +34 -88
  14. package/{dist/reanimated.d.mts → reanimated.d.mts} +2 -2
  15. package/{dist/reanimated.d.ts → reanimated.d.ts} +2 -2
  16. package/reanimated.js +60 -0
  17. package/reanimated.mjs +53 -0
  18. package/.claude/settings.local.json +0 -8
  19. package/.cursor/rules/changelog.mdc +0 -60
  20. package/.github/FUNDING.yml +0 -15
  21. package/.gitignore +0 -5
  22. package/.prettierrc.json +0 -5
  23. package/.vscode/settings.json +0 -14
  24. package/CLAUDE.md +0 -126
  25. package/biome.json +0 -46
  26. package/bun.lock +0 -1289
  27. package/bunfig.toml +0 -2
  28. package/dist/CHANGELOG.md +0 -119
  29. package/dist/LICENSE +0 -21
  30. package/dist/README.md +0 -139
  31. package/dist/keyboard-controller.d.mts +0 -261
  32. package/dist/keyboard-controller.d.ts +0 -261
  33. package/dist/package.json +0 -35
  34. package/dist/reanimated.js +0 -58
  35. package/dist/reanimated.mjs +0 -51
  36. package/example/README.md +0 -40
  37. package/example/api/data/genres.json +0 -23
  38. package/example/api/data/playlist/10402-10749.json +0 -1
  39. package/example/api/data/playlist/10402-10770.json +0 -1
  40. package/example/api/data/playlist/10402-37.json +0 -1
  41. package/example/api/data/playlist/10749-10752.json +0 -1
  42. package/example/api/data/playlist/10749-10770.json +0 -1
  43. package/example/api/data/playlist/10749-37.json +0 -1
  44. package/example/api/data/playlist/10749-878.json +0 -1
  45. package/example/api/data/playlist/10751-10402.json +0 -1
  46. package/example/api/data/playlist/10751-10752.json +0 -1
  47. package/example/api/data/playlist/10751-37.json +0 -1
  48. package/example/api/data/playlist/10751-53.json +0 -1
  49. package/example/api/data/playlist/10751-878.json +0 -1
  50. package/example/api/data/playlist/10751-9648.json +0 -1
  51. package/example/api/data/playlist/10752-37.json +0 -1
  52. package/example/api/data/playlist/12-10402.json +0 -1
  53. package/example/api/data/playlist/12-10749.json +0 -1
  54. package/example/api/data/playlist/12-18.json +0 -1
  55. package/example/api/data/playlist/12-27.json +0 -1
  56. package/example/api/data/playlist/12-35.json +0 -1
  57. package/example/api/data/playlist/14-36.json +0 -1
  58. package/example/api/data/playlist/14-878.json +0 -1
  59. package/example/api/data/playlist/16-10751.json +0 -1
  60. package/example/api/data/playlist/16-10770.json +0 -1
  61. package/example/api/data/playlist/16-35.json +0 -1
  62. package/example/api/data/playlist/16-36.json +0 -1
  63. package/example/api/data/playlist/16-53.json +0 -1
  64. package/example/api/data/playlist/18-10751.json +0 -1
  65. package/example/api/data/playlist/18-10752.json +0 -1
  66. package/example/api/data/playlist/18-37.json +0 -1
  67. package/example/api/data/playlist/18-53.json +0 -1
  68. package/example/api/data/playlist/18-878.json +0 -1
  69. package/example/api/data/playlist/27-10749.json +0 -1
  70. package/example/api/data/playlist/27-10770.json +0 -1
  71. package/example/api/data/playlist/28-10749.json +0 -1
  72. package/example/api/data/playlist/28-10751.json +0 -1
  73. package/example/api/data/playlist/28-10770.json +0 -1
  74. package/example/api/data/playlist/28-16.json +0 -1
  75. package/example/api/data/playlist/28-18.json +0 -1
  76. package/example/api/data/playlist/28-36.json +0 -1
  77. package/example/api/data/playlist/28-37.json +0 -1
  78. package/example/api/data/playlist/28-53.json +0 -1
  79. package/example/api/data/playlist/28-80.json +0 -1
  80. package/example/api/data/playlist/28-99.json +0 -1
  81. package/example/api/data/playlist/35-10749.json +0 -1
  82. package/example/api/data/playlist/35-10751.json +0 -1
  83. package/example/api/data/playlist/35-10752.json +0 -1
  84. package/example/api/data/playlist/35-27.json +0 -1
  85. package/example/api/data/playlist/35-36.json +0 -1
  86. package/example/api/data/playlist/35-53.json +0 -1
  87. package/example/api/data/playlist/35-80.json +0 -1
  88. package/example/api/data/playlist/36-37.json +0 -1
  89. package/example/api/data/playlist/36-878.json +0 -1
  90. package/example/api/data/playlist/36-9648.json +0 -1
  91. package/example/api/data/playlist/53-10752.json +0 -1
  92. package/example/api/data/playlist/80-10770.json +0 -1
  93. package/example/api/data/playlist/80-14.json +0 -1
  94. package/example/api/data/playlist/80-18.json +0 -1
  95. package/example/api/data/playlist/80-37.json +0 -1
  96. package/example/api/data/playlist/878-37.json +0 -1
  97. package/example/api/data/playlist/9648-10770.json +0 -1
  98. package/example/api/data/playlist/9648-37.json +0 -1
  99. package/example/api/data/playlist/9648-53.json +0 -1
  100. package/example/api/data/playlist/9648-878.json +0 -1
  101. package/example/api/data/playlist/99-10749.json +0 -1
  102. package/example/api/data/playlist/99-14.json +0 -1
  103. package/example/api/data/playlist/99-18.json +0 -1
  104. package/example/api/data/playlist/99-27.json +0 -1
  105. package/example/api/data/playlist/99-53.json +0 -1
  106. package/example/api/data/playlist/99-9648.json +0 -1
  107. package/example/api/data/playlist/index.ts +0 -73
  108. package/example/api/data/rows.json +0 -1
  109. package/example/api/index.ts +0 -36
  110. package/example/app/(tabs)/_layout.tsx +0 -60
  111. package/example/app/(tabs)/cards.tsx +0 -81
  112. package/example/app/(tabs)/index.tsx +0 -205
  113. package/example/app/(tabs)/moviesL.tsx +0 -7
  114. package/example/app/(tabs)/moviesLR.tsx +0 -7
  115. package/example/app/+not-found.tsx +0 -32
  116. package/example/app/_layout.tsx +0 -34
  117. package/example/app/accurate-scrollto/index.tsx +0 -125
  118. package/example/app/accurate-scrollto-2/index.tsx +0 -52
  119. package/example/app/accurate-scrollto-huge/index.tsx +0 -128
  120. package/example/app/add-to-end/index.tsx +0 -82
  121. package/example/app/ai-chat/index.tsx +0 -236
  122. package/example/app/bidirectional-infinite-list/index.tsx +0 -133
  123. package/example/app/cards-columns/index.tsx +0 -37
  124. package/example/app/cards-flashlist/index.tsx +0 -122
  125. package/example/app/cards-flatlist/index.tsx +0 -94
  126. package/example/app/cards-no-recycle/index.tsx +0 -110
  127. package/example/app/cards-renderItem.tsx +0 -354
  128. package/example/app/chat-example/index.tsx +0 -167
  129. package/example/app/chat-infinite/index.tsx +0 -239
  130. package/example/app/chat-keyboard/index.tsx +0 -248
  131. package/example/app/chat-resize-outer/index.tsx +0 -247
  132. package/example/app/columns/index.tsx +0 -78
  133. package/example/app/countries/index.tsx +0 -182
  134. package/example/app/countries-flashlist/index.tsx +0 -163
  135. package/example/app/countries-reorder/index.tsx +0 -187
  136. package/example/app/extra-data/index.tsx +0 -86
  137. package/example/app/filter-elements/filter-data-provider.tsx +0 -55
  138. package/example/app/filter-elements/index.tsx +0 -118
  139. package/example/app/initial-scroll-index/index.tsx +0 -106
  140. package/example/app/initial-scroll-index/renderFixedItem.tsx +0 -215
  141. package/example/app/initial-scroll-index-free-height/index.tsx +0 -70
  142. package/example/app/initial-scroll-index-keyed/index.tsx +0 -62
  143. package/example/app/lazy-list/index.tsx +0 -123
  144. package/example/app/movies-flashlist/index.tsx +0 -7
  145. package/example/app/mutable-cells/index.tsx +0 -104
  146. package/example/app/video-feed/index.tsx +0 -119
  147. package/example/app.config.js +0 -22
  148. package/example/app.json +0 -45
  149. package/example/assets/fonts/SpaceMono-Regular.ttf +0 -0
  150. package/example/assets/images/adaptive-icon.png +0 -0
  151. package/example/assets/images/favicon.png +0 -0
  152. package/example/assets/images/icon.png +0 -0
  153. package/example/assets/images/partial-react-logo.png +0 -0
  154. package/example/assets/images/react-logo.png +0 -0
  155. package/example/assets/images/react-logo@2x.png +0 -0
  156. package/example/assets/images/react-logo@3x.png +0 -0
  157. package/example/assets/images/splash-icon.png +0 -0
  158. package/example/autoscroll.sh +0 -101
  159. package/example/bun.lock +0 -2266
  160. package/example/bunfig.toml +0 -2
  161. package/example/components/Breathe.tsx +0 -54
  162. package/example/components/Circle.tsx +0 -69
  163. package/example/components/Collapsible.tsx +0 -44
  164. package/example/components/ExternalLink.tsx +0 -24
  165. package/example/components/HapticTab.tsx +0 -18
  166. package/example/components/HelloWave.tsx +0 -37
  167. package/example/components/Movies.tsx +0 -179
  168. package/example/components/ParallaxScrollView.tsx +0 -81
  169. package/example/components/ThemedText.tsx +0 -60
  170. package/example/components/ThemedView.tsx +0 -14
  171. package/example/components/__tests__/ThemedText-test.tsx +0 -10
  172. package/example/components/__tests__/__snapshots__/ThemedText-test.tsx.snap +0 -24
  173. package/example/components/ui/IconSymbol.ios.tsx +0 -32
  174. package/example/components/ui/IconSymbol.tsx +0 -43
  175. package/example/components/ui/TabBarBackground.ios.tsx +0 -22
  176. package/example/components/ui/TabBarBackground.tsx +0 -6
  177. package/example/constants/Colors.ts +0 -26
  178. package/example/constants/constants.ts +0 -5
  179. package/example/constants/useScrollTest.ts +0 -19
  180. package/example/hooks/useColorScheme.ts +0 -1
  181. package/example/hooks/useColorScheme.web.ts +0 -8
  182. package/example/hooks/useThemeColor.ts +0 -22
  183. package/example/ios/.xcode.env +0 -11
  184. package/example/ios/Podfile +0 -64
  185. package/example/ios/Podfile.lock +0 -2767
  186. package/example/ios/Podfile.properties.json +0 -5
  187. package/example/ios/listtest/AppDelegate.swift +0 -70
  188. package/example/ios/listtest/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png +0 -0
  189. package/example/ios/listtest/Images.xcassets/AppIcon.appiconset/Contents.json +0 -14
  190. package/example/ios/listtest/Images.xcassets/Contents.json +0 -6
  191. package/example/ios/listtest/Images.xcassets/SplashScreenBackground.colorset/Contents.json +0 -20
  192. package/example/ios/listtest/Images.xcassets/SplashScreenLogo.imageset/Contents.json +0 -23
  193. package/example/ios/listtest/Images.xcassets/SplashScreenLogo.imageset/image.png +0 -0
  194. package/example/ios/listtest/Images.xcassets/SplashScreenLogo.imageset/image@2x.png +0 -0
  195. package/example/ios/listtest/Images.xcassets/SplashScreenLogo.imageset/image@3x.png +0 -0
  196. package/example/ios/listtest/Info.plist +0 -85
  197. package/example/ios/listtest/PrivacyInfo.xcprivacy +0 -48
  198. package/example/ios/listtest/SplashScreen.storyboard +0 -42
  199. package/example/ios/listtest/Supporting/Expo.plist +0 -12
  200. package/example/ios/listtest/listtest-Bridging-Header.h +0 -3
  201. package/example/ios/listtest/listtest.entitlements +0 -5
  202. package/example/ios/listtest.xcodeproj/project.pbxproj +0 -547
  203. package/example/ios/listtest.xcodeproj/xcshareddata/xcschemes/listtest.xcscheme +0 -88
  204. package/example/ios/listtest.xcworkspace/contents.xcworkspacedata +0 -10
  205. package/example/metro.config.js +0 -16
  206. package/example/package.json +0 -73
  207. package/example/scripts/reset-project.js +0 -84
  208. package/example/tsconfig.json +0 -26
  209. package/posttsup.ts +0 -24
  210. package/src/Container.tsx +0 -176
  211. package/src/Containers.tsx +0 -85
  212. package/src/ContextContainer.ts +0 -145
  213. package/src/DebugView.tsx +0 -83
  214. package/src/LazyLegendList.tsx +0 -41
  215. package/src/LeanView.tsx +0 -18
  216. package/src/LegendList.tsx +0 -558
  217. package/src/ListComponent.tsx +0 -191
  218. package/src/ScrollAdjust.tsx +0 -24
  219. package/src/ScrollAdjustHandler.ts +0 -26
  220. package/src/Separator.tsx +0 -14
  221. package/src/animated.tsx +0 -6
  222. package/src/calculateItemsInView.ts +0 -363
  223. package/src/calculateOffsetForIndex.ts +0 -23
  224. package/src/calculateOffsetWithOffsetPosition.ts +0 -26
  225. package/src/checkAllSizesKnown.ts +0 -17
  226. package/src/checkAtBottom.ts +0 -36
  227. package/src/checkAtTop.ts +0 -27
  228. package/src/checkThreshold.ts +0 -30
  229. package/src/constants.ts +0 -11
  230. package/src/createColumnWrapperStyle.ts +0 -16
  231. package/src/doInitialAllocateContainers.ts +0 -40
  232. package/src/doMaintainScrollAtEnd.ts +0 -34
  233. package/src/findAvailableContainers.ts +0 -98
  234. package/src/finishScrollTo.ts +0 -8
  235. package/src/getId.ts +0 -21
  236. package/src/getItemSize.ts +0 -52
  237. package/src/getRenderedItem.ts +0 -34
  238. package/src/getScrollVelocity.ts +0 -47
  239. package/src/handleLayout.ts +0 -70
  240. package/src/helpers.ts +0 -39
  241. package/src/index.ts +0 -11
  242. package/src/keyboard-controller.tsx +0 -63
  243. package/src/onScroll.ts +0 -66
  244. package/src/prepareMVCP.ts +0 -50
  245. package/src/reanimated.tsx +0 -63
  246. package/src/requestAdjust.ts +0 -41
  247. package/src/scrollTo.ts +0 -40
  248. package/src/scrollToIndex.ts +0 -34
  249. package/src/setDidLayout.ts +0 -25
  250. package/src/setPaddingTop.ts +0 -28
  251. package/src/state.tsx +0 -304
  252. package/src/types.ts +0 -610
  253. package/src/updateAlignItemsPaddingTop.ts +0 -18
  254. package/src/updateAllPositions.ts +0 -130
  255. package/src/updateItemSize.ts +0 -203
  256. package/src/updateTotalSize.ts +0 -44
  257. package/src/useAnimatedValue.ts +0 -6
  258. package/src/useCombinedRef.ts +0 -22
  259. package/src/useInit.ts +0 -17
  260. package/src/useSyncLayout.tsx +0 -68
  261. package/src/useValue$.ts +0 -53
  262. package/src/viewability.ts +0 -279
  263. package/tsconfig.json +0 -59
  264. package/tsup.config.ts +0 -21
@@ -1,11 +1,12 @@
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 { View, ScrollView, Animated, StyleProp, ViewStyle, ScrollViewProps, LayoutRectangle, NativeSyntheticEvent, NativeScrollEvent, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
4
+ import { View, Animated, ScrollView, StyleProp, ViewStyle, ScrollViewProps, LayoutRectangle, ScrollViewComponent, ScrollResponderMixin } from 'react-native';
5
5
  import Animated$1 from 'react-native-reanimated';
6
- import * as _legendapp_list_reanimated from '@legendapp/list/reanimated';
6
+ import { AnimatedLegendList } from '@legendapp/list/animated';
7
+ import { AnimatedLegendList as AnimatedLegendList$1 } from '@legendapp/list/reanimated';
7
8
 
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
+ 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
10
  interface StateContext {
10
11
  listeners: Map<ListenerType, Set<(value: any) => void>>;
11
12
  values: Map<ListenerType, any>;
@@ -15,6 +16,7 @@ interface StateContext {
15
16
  mapViewabilityAmountValues: Map<number, ViewAmountToken>;
16
17
  columnWrapperStyle: ColumnWrapperStyle | undefined;
17
18
  viewRefs: Map<number, React$1.RefObject<View>>;
19
+ animatedScrollY: Animated.Value;
18
20
  }
19
21
 
20
22
  declare class ScrollAdjustHandler {
@@ -26,7 +28,7 @@ declare class ScrollAdjustHandler {
26
28
  setMounted(): void;
27
29
  }
28
30
 
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"> & {
31
+ 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
32
  /**
31
33
  * If true, aligns items at the end of the list.
32
34
  * @default false
@@ -68,7 +70,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
68
70
  * In case you have distinct item sizes, you can provide a function to get the size of an item.
69
71
  * Use instead of FlatList's getItemLayout or FlashList overrideItemLayout if you want to have accurate initialScrollOffset, you should provide this function
70
72
  */
71
- getEstimatedItemSize?: (index: number, item: ItemT) => number;
73
+ getEstimatedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
72
74
  /**
73
75
  * Ratio of initial container pool size to data length (e.g., 0.5 for half).
74
76
  * @default 2
@@ -204,7 +206,7 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
204
206
  * - A React component: React.ComponentType<LegendListRenderItemProps<ItemT>>
205
207
  * @required
206
208
  */
207
- renderItem?: ((props: LegendListRenderItemProps<ItemT>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT>>;
209
+ renderItem?: ((props: LegendListRenderItemProps<ItemT, TItemType>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<ItemT, TItemType>>;
208
210
  /**
209
211
  * Render custom ScrollView component.
210
212
  * @default (props) => <ScrollView {...props} />
@@ -232,6 +234,17 @@ type LegendListPropsBase<ItemT, TScrollView extends ComponentProps<typeof Scroll
232
234
  onLoad?: (info: {
233
235
  elapsedTimeInMs: number;
234
236
  }) => void;
237
+ snapToIndices?: number[];
238
+ /**
239
+ * Array of child indices determining which children get docked to the top of the screen when scrolling.
240
+ * For example, passing stickyIndices={[0]} will cause the first child to be fixed to the top of the scroll view.
241
+ * Not supported in conjunction with horizontal={true}.
242
+ * @default undefined
243
+ */
244
+ stickyIndices?: number[];
245
+ getItemType?: (item: ItemT, index: number) => TItemType;
246
+ getFixedItemSize?: (index: number, item: ItemT, type: TItemType) => number;
247
+ itemsAreEqual?: (itemPrevious: ItemT, item: ItemT, index: number, data: readonly ItemT[]) => boolean;
235
248
  };
236
249
  interface MaintainScrollAtEndOptions {
237
250
  onLayout?: boolean;
@@ -243,13 +256,14 @@ interface ColumnWrapperStyle {
243
256
  gap?: number;
244
257
  columnGap?: number;
245
258
  }
246
- type LegendListProps<ItemT> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
259
+ type LegendListProps<ItemT = any> = LegendListPropsBase<ItemT, Omit<ComponentProps<typeof ScrollView>, "scrollEventThrottle">>;
247
260
  interface InternalState {
248
261
  positions: Map<string, number>;
249
262
  columns: Map<string, number>;
250
263
  sizes: Map<string, number>;
251
264
  sizesKnown: Map<string, number>;
252
265
  containerItemKeys: Set<string>;
266
+ containerItemTypes: Map<number, string>;
253
267
  pendingAdjust: number;
254
268
  isStartReached: boolean;
255
269
  isEndReached: boolean;
@@ -263,7 +277,6 @@ interface InternalState {
263
277
  endBuffered: number;
264
278
  endNoBuffer: number;
265
279
  firstFullyOnScreenIndex: number;
266
- idsInView: string[];
267
280
  scrollPending: number;
268
281
  scroll: number;
269
282
  scrollTime: number;
@@ -315,48 +328,55 @@ interface InternalState {
315
328
  loadStartTime: number;
316
329
  initialScroll: ScrollIndexWithOffsetPosition | undefined;
317
330
  lastLayout: LayoutRectangle | undefined;
331
+ queuedItemSizeUpdates: {
332
+ itemKey: string;
333
+ sizeObj: {
334
+ width: number;
335
+ height: number;
336
+ };
337
+ }[];
338
+ queuedItemSizeUpdatesWaiting?: boolean;
339
+ timeoutSetPaddingTop?: any;
340
+ activeStickyIndex: number | undefined;
341
+ stickyContainers: Map<number, number>;
342
+ stickyContainerPool: Set<number>;
343
+ scrollProcessingEnabled: boolean;
318
344
  props: {
319
345
  alignItemsAtEnd: boolean;
320
346
  data: readonly any[];
321
347
  estimatedItemSize: number | undefined;
322
- getEstimatedItemSize: ((index: number, item: any) => number) | undefined;
348
+ getEstimatedItemSize: LegendListProps["getEstimatedItemSize"];
349
+ getFixedItemSize: LegendListProps["getFixedItemSize"];
350
+ getItemType: LegendListProps["getItemType"];
323
351
  horizontal: boolean;
324
- keyExtractor: ((item: any, index: number) => string) | undefined;
352
+ keyExtractor: LegendListProps["keyExtractor"];
325
353
  maintainScrollAtEnd: boolean | MaintainScrollAtEndOptions;
326
354
  maintainScrollAtEndThreshold: number | undefined;
327
355
  maintainVisibleContentPosition: boolean;
328
- onEndReached: (((info: {
329
- distanceFromEnd: number;
330
- }) => void) | null | undefined) | undefined;
356
+ onEndReached: LegendListProps["onEndReached"];
331
357
  onEndReachedThreshold: number | null | undefined;
332
- onItemSizeChanged: ((info: {
333
- size: number;
334
- previous: number;
335
- index: number;
336
- itemKey: string;
337
- itemData: any;
338
- }) => void) | undefined;
339
- onLoad: ((info: {
340
- elapsedTimeInMs: number;
341
- }) => void) | undefined;
342
- onScroll: ((event: NativeSyntheticEvent<NativeScrollEvent>) => void) | undefined;
343
- onStartReached: (((info: {
344
- distanceFromStart: number;
345
- }) => void) | null | undefined) | undefined;
358
+ onItemSizeChanged: LegendListProps["onItemSizeChanged"];
359
+ onLoad: LegendListProps["onLoad"];
360
+ onScroll: LegendListProps["onScroll"];
361
+ onStartReached: LegendListProps["onStartReached"];
346
362
  onStartReachedThreshold: number | null | undefined;
363
+ recycleItems: boolean;
347
364
  suggestEstimatedItemSize: boolean;
348
365
  stylePaddingBottom: number | undefined;
349
- renderItem: ((props: LegendListRenderItemProps<any>) => ReactNode) | React.ComponentType<LegendListRenderItemProps<any>>;
366
+ renderItem: LegendListProps["renderItem"];
350
367
  initialScroll: {
351
368
  index: number;
352
369
  viewOffset?: number;
353
370
  viewPosition?: number;
354
371
  } | undefined;
355
372
  scrollBuffer: number;
356
- viewabilityConfigCallbackPairs: ViewabilityConfigCallbackPairs | undefined;
357
373
  numColumns: number;
358
374
  initialContainerPoolRatio: number;
359
375
  stylePaddingTop: number | undefined;
376
+ snapToIndices: number[] | undefined;
377
+ stickyIndicesSet: Set<number>;
378
+ stickyIndicesArr: number[];
379
+ itemsAreEqual: LegendListProps["itemsAreEqual"];
360
380
  };
361
381
  }
362
382
  interface ViewableRange<T> {
@@ -366,23 +386,27 @@ interface ViewableRange<T> {
366
386
  end: number;
367
387
  items: T[];
368
388
  }
369
- interface LegendListRenderItemProps<ItemT> {
389
+ interface LegendListRenderItemProps<ItemT, TItemType extends string | number | undefined = string | number | undefined> {
370
390
  item: ItemT;
391
+ type: TItemType;
371
392
  index: number;
372
393
  extraData: any;
373
394
  }
374
395
  type ScrollState = {
375
396
  contentLength: number;
397
+ data: readonly any[];
376
398
  end: number;
377
399
  endBuffered: number;
378
400
  isAtEnd: boolean;
379
401
  isAtStart: boolean;
402
+ positionAtIndex: (index: number) => number;
403
+ positions: Map<string, number>;
380
404
  scroll: number;
381
405
  scrollLength: number;
406
+ sizeAtIndex: (index: number) => number;
407
+ sizes: Map<string, number>;
382
408
  start: number;
383
409
  startBuffered: number;
384
- sizes: Map<string, number>;
385
- sizeAtIndex: (index: number) => number;
386
410
  };
387
411
  type LegendListRef = {
388
412
  /**
@@ -429,9 +453,11 @@ type LegendListRef = {
429
453
  * Scrolls to the end of the list.
430
454
  * @param options - Options for scrolling.
431
455
  * @param options.animated - If true, animates the scroll. Default: true.
456
+ * @param options.viewOffset - Offset from the target position.
432
457
  */
433
458
  scrollToEnd(options?: {
434
459
  animated?: boolean | undefined;
460
+ viewOffset?: number | undefined;
435
461
  }): void;
436
462
  /**
437
463
  * Scrolls to a specific index in the list.
@@ -477,6 +503,11 @@ type LegendListRef = {
477
503
  * @param animated - If true, uses Animated to animate the change.
478
504
  */
479
505
  setVisibleContentAnchorOffset(value: number | ((value: number) => number)): void;
506
+ /**
507
+ * Sets whether scroll processing is enabled.
508
+ * @param enabled - If true, scroll processing is enabled.
509
+ */
510
+ setScrollProcessingEnabled(enabled: boolean): void;
480
511
  };
481
512
  interface ViewToken<ItemT = any> {
482
513
  item: ItemT;
@@ -540,7 +571,7 @@ interface LegendListRecyclingState<T> {
540
571
  }
541
572
  type TypedForwardRef = <T, P = {}>(render: (props: P, ref: React.Ref<T>) => React.ReactNode) => (props: P & React.RefAttributes<T>) => React.ReactNode;
542
573
  declare const typedForwardRef: TypedForwardRef;
543
- type TypedMemo = <T extends React.ComponentType<any>>(Component: T, propsAreEqual?: (prevProps: Readonly<ComponentProps<T>>, nextProps: Readonly<ComponentProps<T>>) => boolean) => T & {
574
+ type TypedMemo = <T extends React.ComponentType<any>>(Component: T, propsAreEqual?: (prevProps: Readonly<React.JSXElementConstructor<T>>, nextProps: Readonly<React.JSXElementConstructor<T>>) => boolean) => T & {
544
575
  displayName?: string;
545
576
  };
546
577
  declare const typedMemo: TypedMemo;
@@ -556,7 +587,7 @@ type GetRenderedItemResult<ItemT> = {
556
587
  };
557
588
  type GetRenderedItem = (key: string) => GetRenderedItemResult<any> | null;
558
589
 
559
- declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
590
+ declare const LegendList: (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
560
591
  alignItemsAtEnd?: boolean;
561
592
  columnWrapperStyle?: ColumnWrapperStyle;
562
593
  data: readonly T[];
@@ -567,7 +598,7 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
567
598
  width: number;
568
599
  };
569
600
  extraData?: any;
570
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
601
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
571
602
  initialContainerPoolRatio?: number | undefined;
572
603
  initialScrollOffset?: number;
573
604
  initialScrollIndex?: number | {
@@ -609,7 +640,7 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
609
640
  recycleItems?: boolean;
610
641
  refScrollView?: React$1.Ref<ScrollView>;
611
642
  refreshing?: boolean;
612
- renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
643
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
613
644
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
614
645
  suggestEstimatedItemSize?: boolean;
615
646
  viewabilityConfig?: ViewabilityConfig;
@@ -618,75 +649,20 @@ declare const LegendList: <T>(props: Omit<Omit<react_native.ScrollViewProps, "sc
618
649
  onLoad?: (info: {
619
650
  elapsedTimeInMs: number;
620
651
  }) => void;
621
- } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
652
+ snapToIndices?: number[];
653
+ stickyIndices?: number[];
654
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
655
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
656
+ itemsAreEqual?: ((itemPrevious: T, item: T, index: number, data: readonly T[]) => boolean) | undefined;
657
+ } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode) & {
658
+ displayName?: string;
659
+ };
622
660
 
623
661
  interface LazyLegendListProps<ItemT, ListT> extends Omit<LegendListProps<ItemT>, "data" | "keyExtractor" | "renderItem"> {
624
662
  children?: React$1.ReactNode | undefined;
625
663
  LegendList?: ListT;
626
664
  }
627
- declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
628
- alignItemsAtEnd?: boolean;
629
- columnWrapperStyle?: ColumnWrapperStyle;
630
- data: readonly T[];
631
- drawDistance?: number;
632
- estimatedItemSize?: number;
633
- estimatedListSize?: {
634
- height: number;
635
- width: number;
636
- };
637
- extraData?: any;
638
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
639
- initialContainerPoolRatio?: number | undefined;
640
- initialScrollOffset?: number;
641
- initialScrollIndex?: number | {
642
- index: number;
643
- viewOffset?: number | undefined;
644
- viewPosition?: number | undefined;
645
- };
646
- ItemSeparatorComponent?: React$1.ComponentType<{
647
- leadingItem: T;
648
- }> | undefined;
649
- keyExtractor?: ((item: T, index: number) => string) | undefined;
650
- ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
651
- ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
652
- ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
653
- ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
654
- ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
655
- maintainScrollAtEnd?: boolean | MaintainScrollAtEndOptions;
656
- maintainScrollAtEndThreshold?: number;
657
- maintainVisibleContentPosition?: boolean;
658
- numColumns?: number;
659
- onEndReached?: ((info: {
660
- distanceFromEnd: number;
661
- }) => void) | null | undefined;
662
- onEndReachedThreshold?: number | null | undefined;
663
- onItemSizeChanged?: ((info: {
664
- size: number;
665
- previous: number;
666
- index: number;
667
- itemKey: string;
668
- itemData: T;
669
- }) => void) | undefined;
670
- onRefresh?: () => void;
671
- onStartReached?: ((info: {
672
- distanceFromStart: number;
673
- }) => void) | null | undefined;
674
- onStartReachedThreshold?: number | null | undefined;
675
- onViewableItemsChanged?: OnViewableItemsChanged | undefined;
676
- progressViewOffset?: number;
677
- recycleItems?: boolean;
678
- refScrollView?: React$1.Ref<react_native.ScrollView>;
679
- refreshing?: boolean;
680
- renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
681
- renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
682
- suggestEstimatedItemSize?: boolean;
683
- viewabilityConfig?: ViewabilityConfig;
684
- viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
685
- waitForInitialLayout?: boolean;
686
- onLoad?: (info: {
687
- elapsedTimeInMs: number;
688
- }) => void;
689
- } & 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"> & {
665
+ declare const LazyLegendList: <ItemT, ListT extends typeof LegendList | typeof AnimatedLegendList | typeof AnimatedLegendList$1 = (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
690
666
  alignItemsAtEnd?: boolean;
691
667
  columnWrapperStyle?: ColumnWrapperStyle;
692
668
  data: readonly T[];
@@ -697,7 +673,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
697
673
  width: number;
698
674
  };
699
675
  extraData?: any;
700
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
676
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
701
677
  initialContainerPoolRatio?: number | undefined;
702
678
  initialScrollOffset?: number;
703
679
  initialScrollIndex?: number | {
@@ -739,7 +715,7 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
739
715
  recycleItems?: boolean;
740
716
  refScrollView?: React$1.Ref<react_native.ScrollView>;
741
717
  refreshing?: boolean;
742
- renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
718
+ renderItem?: ((props: LegendListRenderItemProps<T, string | undefined>) => React$1.ReactNode) | React$1.ComponentType<LegendListRenderItemProps<T, string | undefined>> | undefined;
743
719
  renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
744
720
  suggestEstimatedItemSize?: boolean;
745
721
  viewabilityConfig?: ViewabilityConfig;
@@ -748,71 +724,14 @@ declare const LazyLegendList: <ItemT, ListT extends (<T>(props: Omit<Omit<react_
748
724
  onLoad?: (info: {
749
725
  elapsedTimeInMs: number;
750
726
  }) => void;
751
- } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode)> | (<ItemT_1>(props: _legendapp_list_reanimated.AnimatedLegendListProps<ItemT_1> & {
752
- ref?: React$1.Ref<LegendListRef>;
753
- }) => React$1.ReactElement | null) = <T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
754
- alignItemsAtEnd?: boolean;
755
- columnWrapperStyle?: ColumnWrapperStyle;
756
- data: readonly T[];
757
- drawDistance?: number;
758
- estimatedItemSize?: number;
759
- estimatedListSize?: {
760
- height: number;
761
- width: number;
762
- };
763
- extraData?: any;
764
- getEstimatedItemSize?: ((index: number, item: T) => number) | undefined;
765
- initialContainerPoolRatio?: number | undefined;
766
- initialScrollOffset?: number;
767
- initialScrollIndex?: number | {
768
- index: number;
769
- viewOffset?: number | undefined;
770
- viewPosition?: number | undefined;
771
- };
772
- ItemSeparatorComponent?: React$1.ComponentType<{
773
- leadingItem: T;
774
- }> | undefined;
775
- keyExtractor?: ((item: T, index: number) => string) | undefined;
776
- ListEmptyComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
777
- ListFooterComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
778
- ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
779
- ListHeaderComponent?: React$1.ComponentType<any> | React$1.ReactElement | null | undefined;
780
- ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
781
- maintainScrollAtEnd?: boolean | MaintainScrollAtEndOptions;
782
- maintainScrollAtEndThreshold?: number;
783
- maintainVisibleContentPosition?: boolean;
784
- numColumns?: number;
785
- onEndReached?: ((info: {
786
- distanceFromEnd: number;
787
- }) => void) | null | undefined;
788
- onEndReachedThreshold?: number | null | undefined;
789
- onItemSizeChanged?: ((info: {
790
- size: number;
791
- previous: number;
792
- index: number;
793
- itemKey: string;
794
- itemData: T;
795
- }) => void) | undefined;
796
- onRefresh?: () => void;
797
- onStartReached?: ((info: {
798
- distanceFromStart: number;
799
- }) => void) | null | undefined;
800
- onStartReachedThreshold?: number | null | undefined;
801
- onViewableItemsChanged?: OnViewableItemsChanged | undefined;
802
- progressViewOffset?: number;
803
- recycleItems?: boolean;
804
- refScrollView?: React$1.Ref<react_native.ScrollView>;
805
- refreshing?: boolean;
806
- renderItem?: React$1.ComponentType<LegendListRenderItemProps<T>> | ((props: LegendListRenderItemProps<T>) => React$1.ReactNode) | undefined;
807
- renderScrollComponent?: (props: react_native.ScrollViewProps) => React$1.ReactElement<react_native.ScrollViewProps>;
808
- suggestEstimatedItemSize?: boolean;
809
- viewabilityConfig?: ViewabilityConfig;
810
- viewabilityConfigCallbackPairs?: ViewabilityConfigCallbackPairs | undefined;
811
- waitForInitialLayout?: boolean;
812
- onLoad?: (info: {
813
- elapsedTimeInMs: number;
814
- }) => void;
815
- } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
727
+ snapToIndices?: number[];
728
+ stickyIndices?: number[];
729
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
730
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
731
+ itemsAreEqual?: ((itemPrevious: T, item: T, index: number, data: readonly T[]) => boolean) | undefined;
732
+ } & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode) & {
733
+ displayName?: string;
734
+ }>(props: LazyLegendListProps<ItemT, ListT> & React$1.RefAttributes<LegendListRef>) => React$1.ReactNode;
816
735
 
817
736
  declare function useViewability(callback: ViewabilityCallback, configId?: string): void;
818
737
  declare function useViewabilityAmount(callback: ViewabilityAmountCallback): void;