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

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