@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
@@ -0,0 +1,148 @@
1
+ import * as _legendapp_list from '@legendapp/list';
2
+ import { LegendList as LegendList$1, LegendListRef } from '@legendapp/list';
3
+ import * as react_native from 'react-native';
4
+ import * as React from 'react';
5
+ import { AnimatedLegendList } from '@legendapp/list/animated';
6
+ import { AnimatedLegendList as AnimatedLegendList$1 } from '@legendapp/list/reanimated';
7
+
8
+ declare const LegendList: <ItemT, ListT extends typeof LegendList$1 | typeof AnimatedLegendList | typeof AnimatedLegendList$1 = (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
9
+ alignItemsAtEnd?: boolean;
10
+ columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
11
+ data: readonly T[];
12
+ drawDistance?: number;
13
+ estimatedItemSize?: number;
14
+ estimatedListSize?: {
15
+ height: number;
16
+ width: number;
17
+ };
18
+ extraData?: any;
19
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
20
+ initialContainerPoolRatio?: number | undefined;
21
+ initialScrollOffset?: number;
22
+ initialScrollIndex?: number | {
23
+ index: number;
24
+ viewOffset?: number | undefined;
25
+ viewPosition?: number | undefined;
26
+ };
27
+ ItemSeparatorComponent?: React.ComponentType<{
28
+ leadingItem: T;
29
+ }> | undefined;
30
+ keyExtractor?: ((item: T, index: number) => string) | undefined;
31
+ ListEmptyComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
32
+ ListFooterComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
33
+ ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
34
+ ListHeaderComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
35
+ ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
36
+ maintainScrollAtEnd?: boolean | _legendapp_list.MaintainScrollAtEndOptions;
37
+ maintainScrollAtEndThreshold?: number;
38
+ maintainVisibleContentPosition?: boolean;
39
+ numColumns?: number;
40
+ onEndReached?: ((info: {
41
+ distanceFromEnd: number;
42
+ }) => void) | null | undefined;
43
+ onEndReachedThreshold?: number | null | undefined;
44
+ onItemSizeChanged?: ((info: {
45
+ size: number;
46
+ previous: number;
47
+ index: number;
48
+ itemKey: string;
49
+ itemData: T;
50
+ }) => void) | undefined;
51
+ onRefresh?: () => void;
52
+ onStartReached?: ((info: {
53
+ distanceFromStart: number;
54
+ }) => void) | null | undefined;
55
+ onStartReachedThreshold?: number | null | undefined;
56
+ onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
57
+ progressViewOffset?: number;
58
+ recycleItems?: boolean;
59
+ refScrollView?: React.Ref<react_native.ScrollView>;
60
+ refreshing?: boolean;
61
+ renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<T, string | undefined>) => React.ReactNode) | React.ComponentType<_legendapp_list.LegendListRenderItemProps<T, string | undefined>> | undefined;
62
+ renderScrollComponent?: (props: react_native.ScrollViewProps) => React.ReactElement<react_native.ScrollViewProps>;
63
+ suggestEstimatedItemSize?: boolean;
64
+ viewabilityConfig?: _legendapp_list.ViewabilityConfig;
65
+ viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
66
+ waitForInitialLayout?: boolean;
67
+ onLoad?: (info: {
68
+ elapsedTimeInMs: number;
69
+ }) => void;
70
+ snapToIndices?: number[];
71
+ stickyIndices?: number[];
72
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
73
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
74
+ itemsAreEqual?: ((itemPrevious: T, item: T, index: number, data: readonly T[]) => boolean) | undefined;
75
+ } & React.RefAttributes<LegendListRef>) => React.ReactNode) & {
76
+ displayName?: string;
77
+ }>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
78
+ alignItemsAtEnd?: boolean;
79
+ columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
80
+ data: readonly ItemT[];
81
+ drawDistance?: number;
82
+ estimatedItemSize?: number;
83
+ estimatedListSize?: {
84
+ height: number;
85
+ width: number;
86
+ };
87
+ extraData?: any;
88
+ getEstimatedItemSize?: ((index: number, item: ItemT, type: string | undefined) => number) | undefined;
89
+ initialContainerPoolRatio?: number | undefined;
90
+ initialScrollOffset?: number;
91
+ initialScrollIndex?: number | {
92
+ index: number;
93
+ viewOffset?: number | undefined;
94
+ viewPosition?: number | undefined;
95
+ };
96
+ ItemSeparatorComponent?: React.ComponentType<{
97
+ leadingItem: ItemT;
98
+ }> | undefined;
99
+ keyExtractor?: ((item: ItemT, index: number) => string) | undefined;
100
+ ListEmptyComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
101
+ ListFooterComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
102
+ ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
103
+ ListHeaderComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
104
+ ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
105
+ maintainScrollAtEnd?: boolean | _legendapp_list.MaintainScrollAtEndOptions;
106
+ maintainScrollAtEndThreshold?: number;
107
+ maintainVisibleContentPosition?: boolean;
108
+ numColumns?: number;
109
+ onEndReached?: ((info: {
110
+ distanceFromEnd: number;
111
+ }) => void) | null | undefined;
112
+ onEndReachedThreshold?: number | null | undefined;
113
+ onItemSizeChanged?: ((info: {
114
+ size: number;
115
+ previous: number;
116
+ index: number;
117
+ itemKey: string;
118
+ itemData: ItemT;
119
+ }) => void) | undefined;
120
+ onRefresh?: () => void;
121
+ onStartReached?: ((info: {
122
+ distanceFromStart: number;
123
+ }) => void) | null | undefined;
124
+ onStartReachedThreshold?: number | null | undefined;
125
+ onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
126
+ progressViewOffset?: number;
127
+ recycleItems?: boolean;
128
+ refScrollView?: React.Ref<react_native.ScrollView>;
129
+ refreshing?: boolean;
130
+ renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<ItemT, string | undefined>) => React.ReactNode) | React.ComponentType<_legendapp_list.LegendListRenderItemProps<ItemT, string | undefined>> | undefined;
131
+ renderScrollComponent?: (props: react_native.ScrollViewProps) => React.ReactElement<react_native.ScrollViewProps>;
132
+ suggestEstimatedItemSize?: boolean;
133
+ viewabilityConfig?: _legendapp_list.ViewabilityConfig;
134
+ viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
135
+ waitForInitialLayout?: boolean;
136
+ onLoad?: (info: {
137
+ elapsedTimeInMs: number;
138
+ }) => void;
139
+ snapToIndices?: number[];
140
+ stickyIndices?: number[];
141
+ getItemType?: ((item: ItemT, index: number) => string | undefined) | undefined;
142
+ getFixedItemSize?: ((index: number, item: ItemT, type: string | undefined) => number) | undefined;
143
+ itemsAreEqual?: ((itemPrevious: ItemT, item: ItemT, index: number, data: readonly ItemT[]) => boolean) | undefined;
144
+ } & {
145
+ LegendList?: ListT;
146
+ } & React.RefAttributes<LegendListRef>) => React.ReactNode;
147
+
148
+ export { LegendList };
@@ -0,0 +1,148 @@
1
+ import * as _legendapp_list from '@legendapp/list';
2
+ import { LegendList as LegendList$1, LegendListRef } from '@legendapp/list';
3
+ import * as react_native from 'react-native';
4
+ import * as React from 'react';
5
+ import { AnimatedLegendList } from '@legendapp/list/animated';
6
+ import { AnimatedLegendList as AnimatedLegendList$1 } from '@legendapp/list/reanimated';
7
+
8
+ declare const LegendList: <ItemT, ListT extends typeof LegendList$1 | typeof AnimatedLegendList | typeof AnimatedLegendList$1 = (<T>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
9
+ alignItemsAtEnd?: boolean;
10
+ columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
11
+ data: readonly T[];
12
+ drawDistance?: number;
13
+ estimatedItemSize?: number;
14
+ estimatedListSize?: {
15
+ height: number;
16
+ width: number;
17
+ };
18
+ extraData?: any;
19
+ getEstimatedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
20
+ initialContainerPoolRatio?: number | undefined;
21
+ initialScrollOffset?: number;
22
+ initialScrollIndex?: number | {
23
+ index: number;
24
+ viewOffset?: number | undefined;
25
+ viewPosition?: number | undefined;
26
+ };
27
+ ItemSeparatorComponent?: React.ComponentType<{
28
+ leadingItem: T;
29
+ }> | undefined;
30
+ keyExtractor?: ((item: T, index: number) => string) | undefined;
31
+ ListEmptyComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
32
+ ListFooterComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
33
+ ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
34
+ ListHeaderComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
35
+ ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
36
+ maintainScrollAtEnd?: boolean | _legendapp_list.MaintainScrollAtEndOptions;
37
+ maintainScrollAtEndThreshold?: number;
38
+ maintainVisibleContentPosition?: boolean;
39
+ numColumns?: number;
40
+ onEndReached?: ((info: {
41
+ distanceFromEnd: number;
42
+ }) => void) | null | undefined;
43
+ onEndReachedThreshold?: number | null | undefined;
44
+ onItemSizeChanged?: ((info: {
45
+ size: number;
46
+ previous: number;
47
+ index: number;
48
+ itemKey: string;
49
+ itemData: T;
50
+ }) => void) | undefined;
51
+ onRefresh?: () => void;
52
+ onStartReached?: ((info: {
53
+ distanceFromStart: number;
54
+ }) => void) | null | undefined;
55
+ onStartReachedThreshold?: number | null | undefined;
56
+ onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
57
+ progressViewOffset?: number;
58
+ recycleItems?: boolean;
59
+ refScrollView?: React.Ref<react_native.ScrollView>;
60
+ refreshing?: boolean;
61
+ renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<T, string | undefined>) => React.ReactNode) | React.ComponentType<_legendapp_list.LegendListRenderItemProps<T, string | undefined>> | undefined;
62
+ renderScrollComponent?: (props: react_native.ScrollViewProps) => React.ReactElement<react_native.ScrollViewProps>;
63
+ suggestEstimatedItemSize?: boolean;
64
+ viewabilityConfig?: _legendapp_list.ViewabilityConfig;
65
+ viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
66
+ waitForInitialLayout?: boolean;
67
+ onLoad?: (info: {
68
+ elapsedTimeInMs: number;
69
+ }) => void;
70
+ snapToIndices?: number[];
71
+ stickyIndices?: number[];
72
+ getItemType?: ((item: T, index: number) => string | undefined) | undefined;
73
+ getFixedItemSize?: ((index: number, item: T, type: string | undefined) => number) | undefined;
74
+ itemsAreEqual?: ((itemPrevious: T, item: T, index: number, data: readonly T[]) => boolean) | undefined;
75
+ } & React.RefAttributes<LegendListRef>) => React.ReactNode) & {
76
+ displayName?: string;
77
+ }>(props: Omit<Omit<react_native.ScrollViewProps, "scrollEventThrottle">, "contentOffset" | "contentInset" | "maintainVisibleContentPosition" | "stickyHeaderIndices" | "removeClippedSubviews" | "children"> & {
78
+ alignItemsAtEnd?: boolean;
79
+ columnWrapperStyle?: _legendapp_list.ColumnWrapperStyle;
80
+ data: readonly ItemT[];
81
+ drawDistance?: number;
82
+ estimatedItemSize?: number;
83
+ estimatedListSize?: {
84
+ height: number;
85
+ width: number;
86
+ };
87
+ extraData?: any;
88
+ getEstimatedItemSize?: ((index: number, item: ItemT, type: string | undefined) => number) | undefined;
89
+ initialContainerPoolRatio?: number | undefined;
90
+ initialScrollOffset?: number;
91
+ initialScrollIndex?: number | {
92
+ index: number;
93
+ viewOffset?: number | undefined;
94
+ viewPosition?: number | undefined;
95
+ };
96
+ ItemSeparatorComponent?: React.ComponentType<{
97
+ leadingItem: ItemT;
98
+ }> | undefined;
99
+ keyExtractor?: ((item: ItemT, index: number) => string) | undefined;
100
+ ListEmptyComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
101
+ ListFooterComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
102
+ ListFooterComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
103
+ ListHeaderComponent?: React.ComponentType<any> | React.ReactElement | null | undefined;
104
+ ListHeaderComponentStyle?: react_native.StyleProp<react_native.ViewStyle> | undefined;
105
+ maintainScrollAtEnd?: boolean | _legendapp_list.MaintainScrollAtEndOptions;
106
+ maintainScrollAtEndThreshold?: number;
107
+ maintainVisibleContentPosition?: boolean;
108
+ numColumns?: number;
109
+ onEndReached?: ((info: {
110
+ distanceFromEnd: number;
111
+ }) => void) | null | undefined;
112
+ onEndReachedThreshold?: number | null | undefined;
113
+ onItemSizeChanged?: ((info: {
114
+ size: number;
115
+ previous: number;
116
+ index: number;
117
+ itemKey: string;
118
+ itemData: ItemT;
119
+ }) => void) | undefined;
120
+ onRefresh?: () => void;
121
+ onStartReached?: ((info: {
122
+ distanceFromStart: number;
123
+ }) => void) | null | undefined;
124
+ onStartReachedThreshold?: number | null | undefined;
125
+ onViewableItemsChanged?: _legendapp_list.OnViewableItemsChanged | undefined;
126
+ progressViewOffset?: number;
127
+ recycleItems?: boolean;
128
+ refScrollView?: React.Ref<react_native.ScrollView>;
129
+ refreshing?: boolean;
130
+ renderItem?: ((props: _legendapp_list.LegendListRenderItemProps<ItemT, string | undefined>) => React.ReactNode) | React.ComponentType<_legendapp_list.LegendListRenderItemProps<ItemT, string | undefined>> | undefined;
131
+ renderScrollComponent?: (props: react_native.ScrollViewProps) => React.ReactElement<react_native.ScrollViewProps>;
132
+ suggestEstimatedItemSize?: boolean;
133
+ viewabilityConfig?: _legendapp_list.ViewabilityConfig;
134
+ viewabilityConfigCallbackPairs?: _legendapp_list.ViewabilityConfigCallbackPairs | undefined;
135
+ waitForInitialLayout?: boolean;
136
+ onLoad?: (info: {
137
+ elapsedTimeInMs: number;
138
+ }) => void;
139
+ snapToIndices?: number[];
140
+ stickyIndices?: number[];
141
+ getItemType?: ((item: ItemT, index: number) => string | undefined) | undefined;
142
+ getFixedItemSize?: ((index: number, item: ItemT, type: string | undefined) => number) | undefined;
143
+ itemsAreEqual?: ((itemPrevious: ItemT, item: ItemT, index: number, data: readonly ItemT[]) => boolean) | undefined;
144
+ } & {
145
+ LegendList?: ListT;
146
+ } & React.RefAttributes<LegendListRef>) => React.ReactNode;
147
+
148
+ export { LegendList };
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var list = require('@legendapp/list');
4
3
  var React = require('react');
5
4
  var reactNative = require('react-native');
6
5
  var reactNativeKeyboardController = require('react-native-keyboard-controller');
7
6
  var reactNativeReanimated = require('react-native-reanimated');
7
+ var list = require('@legendapp/list');
8
8
 
9
9
  function _interopNamespace(e) {
10
10
  if (e && e.__esModule) return e;
@@ -26,7 +26,7 @@ function _interopNamespace(e) {
26
26
 
27
27
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
28
 
29
- // src/keyboard-controller.tsx
29
+ // src/integrations/keyboard-controller.tsx
30
30
  var typedForwardRef = React.forwardRef;
31
31
  var LegendList = typedForwardRef(function LegendList2(props, forwardedRef) {
32
32
  const {
@@ -59,8 +59,8 @@ var LegendList = typedForwardRef(function LegendList2(props, forwardedRef) {
59
59
  {
60
60
  ...rest,
61
61
  contentContainerStyle,
62
- scrollIndicatorInsets,
63
- ref: forwardedRef
62
+ ref: forwardedRef,
63
+ scrollIndicatorInsets
64
64
  }
65
65
  )
66
66
  );
@@ -1,11 +1,11 @@
1
- import { LegendList as LegendList$1 } from '@legendapp/list';
2
1
  import * as React from 'react';
3
2
  import { useState, forwardRef } from 'react';
4
3
  import { StyleSheet } from 'react-native';
5
4
  import { useKeyboardHandler } from 'react-native-keyboard-controller';
6
5
  import { runOnJS } from 'react-native-reanimated';
6
+ import { LegendList as LegendList$1 } from '@legendapp/list';
7
7
 
8
- // src/keyboard-controller.tsx
8
+ // src/integrations/keyboard-controller.tsx
9
9
  var typedForwardRef = forwardRef;
10
10
  var LegendList = typedForwardRef(function LegendList2(props, forwardedRef) {
11
11
  const {
@@ -38,8 +38,8 @@ var LegendList = typedForwardRef(function LegendList2(props, forwardedRef) {
38
38
  {
39
39
  ...rest,
40
40
  contentContainerStyle,
41
- scrollIndicatorInsets,
42
- ref: forwardedRef
41
+ ref: forwardedRef,
42
+ scrollIndicatorInsets
43
43
  }
44
44
  )
45
45
  );
package/package.json CHANGED
@@ -1,89 +1,35 @@
1
1
  {
2
- "name": "@legendapp/list",
3
- "version": "2.0.0-next.2",
4
- "description": "Legend List is a drop-in replacement for FlatList with much better performance and supporting dynamically sized items.",
5
- "sideEffects": false,
6
- "private": false,
7
- "main": "./index.js",
8
- "module": "./index.mjs",
9
- "types": "./index.d.ts",
10
- "files": [
11
- "**"
12
- ],
13
- "exports": {
14
- "./package.json": "./package.json",
15
- ".": {
16
- "types": "./index.d.ts",
17
- "import": "./index.mjs",
18
- "require": "./index.js"
19
- },
20
- "./animated": {
21
- "types": "./animated.d.ts",
22
- "import": "./animated.mjs",
23
- "require": "./animated.js"
24
- },
25
- "./reanimated": {
26
- "types": "./reanimated.d.ts",
27
- "import": "./reanimated.mjs",
28
- "require": "./reanimated.js"
29
- },
30
- "./keyboard-controller": {
31
- "types": "./keyboard-controller.d.ts",
32
- "import": "./keyboard-controller.mjs",
33
- "require": "./keyboard-controller.js"
34
- }
35
- },
36
- "engines": {
37
- "node": ">=16.6.0",
38
- "npm": ">=8.11.0"
39
- },
40
- "scripts": {
41
- "build": "tsup && bun run posttsup.ts",
42
- "publish": "bun run build && cd dist && npm publish",
43
- "publish:next": "bun run build && cd dist && npm publish --tag next",
44
- "publish:beta": "bun run build && cd dist && npm publish --tag beta",
45
- "lint": "bunx biome check ./src && bunx biome format ./src && bun run lint:example",
46
- "lint:example": "bunx biome check ./example/app && bunx biome format ./example/app",
47
- "lint:fix": "bunx biome lint --write ./src && bunx biome format --write ./src && bunx biome check --write ./src && bun run lint:fix:example",
48
- "lint:fix:example": "bunx biome lint --write ./example/app && bunx biome format --write ./example/app && bunx biome check --write ./example/app"
49
- },
50
- "peerDependencies": {
51
- "react": "*",
52
- "react-native": "*"
53
- },
54
- "devDependencies": {
55
- "@biomejs/biome": "^1.9.4",
56
- "@types/bun": "^1.1.13",
57
- "@types/react": "^18.3.12",
58
- "@types/use-sync-external-store": "^1.5.0",
59
- "react": "^18.3.1",
60
- "react-native": "^0.76.2",
61
- "react-native-keyboard-controller": "^1.17.0",
62
- "react-native-reanimated": "^3.16.6",
63
- "tsup": "^8.3.5",
64
- "typescript": "^5.8.3"
65
- },
66
- "author": "Legend <contact@legendapp.com> (https://github.com/LegendApp)",
67
- "keywords": [
68
- "react",
69
- "react-native",
70
- "list"
71
- ],
72
- "repository": "github:LegendApp/legend-list",
73
- "license": "MIT",
74
- "bugs": {
75
- "url": "https://github.com/LegendApp/legend-list/issues"
76
- },
77
- "homepage": "https://github.com/LegendApp/legend-list#readme",
78
- "publishConfig": {
79
- "registry": "https://registry.npmjs.org/"
80
- },
81
- "commitlint": {
82
- "extends": [
83
- "@commitlint/config-conventional"
84
- ]
85
- },
86
- "dependencies": {
87
- "use-sync-external-store": "^1.5.0"
88
- }
89
- }
2
+ "name": "@legendapp/list",
3
+ "version": "2.0.0-next.21",
4
+ "description": "Legend List is a drop-in replacement for FlatList with much better performance and supporting dynamically sized items.",
5
+ "sideEffects": false,
6
+ "private": false,
7
+ "main": "./index.js",
8
+ "module": "./index.mjs",
9
+ "types": "./index.d.ts",
10
+ "files": [
11
+ "**"
12
+ ],
13
+ "peerDependencies": {
14
+ "react": "*",
15
+ "react-native": "*"
16
+ },
17
+ "author": "Legend <contact@legendapp.com> (https://github.com/LegendApp)",
18
+ "keywords": [
19
+ "react",
20
+ "react-native",
21
+ "list"
22
+ ],
23
+ "repository": "github:LegendApp/legend-list",
24
+ "license": "MIT",
25
+ "bugs": {
26
+ "url": "https://github.com/LegendApp/legend-list/issues"
27
+ },
28
+ "homepage": "https://github.com/LegendApp/legend-list#readme",
29
+ "publishConfig": {
30
+ "registry": "https://registry.npmjs.org/"
31
+ },
32
+ "dependencies": {
33
+ "use-sync-external-store": "^1.5.0"
34
+ }
35
+ }
@@ -1,8 +1,8 @@
1
- import { LegendListPropsBase, LegendListRef } from '@legendapp/list';
2
1
  import React__default, { ComponentProps } from 'react';
3
2
  import Animated from 'react-native-reanimated';
3
+ import { LegendListPropsBase, LegendListRef } from '@legendapp/list';
4
4
 
5
- type KeysToOmit = "getEstimatedItemSize" | "keyExtractor" | "animatedProps" | "renderItem" | "onItemSizeChanged" | "ItemSeparatorComponent";
5
+ type KeysToOmit = "getEstimatedItemSize" | "getFixedItemSize" | "getItemType" | "keyExtractor" | "animatedProps" | "renderItem" | "onItemSizeChanged" | "itemsAreEqual" | "ItemSeparatorComponent";
6
6
  type PropsBase<ItemT> = LegendListPropsBase<ItemT, ComponentProps<typeof Animated.ScrollView>>;
7
7
  interface AnimatedLegendListPropsBase<ItemT> extends Omit<PropsBase<ItemT>, KeysToOmit> {
8
8
  refScrollView?: React__default.Ref<Animated.ScrollView>;
@@ -1,8 +1,8 @@
1
- import { LegendListPropsBase, LegendListRef } from '@legendapp/list';
2
1
  import React__default, { ComponentProps } from 'react';
3
2
  import Animated from 'react-native-reanimated';
3
+ import { LegendListPropsBase, LegendListRef } from '@legendapp/list';
4
4
 
5
- type KeysToOmit = "getEstimatedItemSize" | "keyExtractor" | "animatedProps" | "renderItem" | "onItemSizeChanged" | "ItemSeparatorComponent";
5
+ type KeysToOmit = "getEstimatedItemSize" | "getFixedItemSize" | "getItemType" | "keyExtractor" | "animatedProps" | "renderItem" | "onItemSizeChanged" | "itemsAreEqual" | "ItemSeparatorComponent";
6
6
  type PropsBase<ItemT> = LegendListPropsBase<ItemT, ComponentProps<typeof Animated.ScrollView>>;
7
7
  interface AnimatedLegendListPropsBase<ItemT> extends Omit<PropsBase<ItemT>, KeysToOmit> {
8
8
  refScrollView?: React__default.Ref<Animated.ScrollView>;
package/reanimated.js ADDED
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var Animated = require('react-native-reanimated');
5
+ var list = require('@legendapp/list');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var React__default = /*#__PURE__*/_interopDefault(React);
10
+ var Animated__default = /*#__PURE__*/_interopDefault(Animated);
11
+
12
+ // src/integrations/reanimated.tsx
13
+
14
+ // src/utils/helpers.ts
15
+ function isFunction(obj) {
16
+ return typeof obj === "function";
17
+ }
18
+
19
+ // src/hooks/useCombinedRef.ts
20
+ var useCombinedRef = (...refs) => {
21
+ const callback = React.useCallback((element) => {
22
+ for (const ref of refs) {
23
+ if (!ref) {
24
+ continue;
25
+ }
26
+ if (isFunction(ref)) {
27
+ ref(element);
28
+ } else {
29
+ ref.current = element;
30
+ }
31
+ }
32
+ }, refs);
33
+ return callback;
34
+ };
35
+
36
+ // src/integrations/reanimated.tsx
37
+ var typedMemo = React.memo;
38
+ var LegendListForwardedRef = typedMemo(
39
+ React__default.default.forwardRef(function LegendListForwardedRef2(props, ref) {
40
+ const { refLegendList, ...rest } = props;
41
+ const refFn = React.useCallback(
42
+ (r) => {
43
+ refLegendList(r);
44
+ },
45
+ [refLegendList]
46
+ );
47
+ return /* @__PURE__ */ React__default.default.createElement(list.LegendList, { ref: refFn, refScrollView: ref, ...rest });
48
+ })
49
+ );
50
+ var AnimatedLegendListComponent = Animated__default.default.createAnimatedComponent(LegendListForwardedRef);
51
+ var AnimatedLegendList = typedMemo(
52
+ React__default.default.forwardRef(function AnimatedLegendList2(props, ref) {
53
+ const { refScrollView, ...rest } = props;
54
+ const refLegendList = React__default.default.useRef(null);
55
+ const combinedRef = useCombinedRef(refLegendList, ref);
56
+ return /* @__PURE__ */ React__default.default.createElement(AnimatedLegendListComponent, { ref: refScrollView, refLegendList: combinedRef, ...rest });
57
+ })
58
+ );
59
+
60
+ exports.AnimatedLegendList = AnimatedLegendList;
package/reanimated.mjs ADDED
@@ -0,0 +1,53 @@
1
+ import React, { useCallback, memo } from 'react';
2
+ import Animated from 'react-native-reanimated';
3
+ import { LegendList } from '@legendapp/list';
4
+
5
+ // src/integrations/reanimated.tsx
6
+
7
+ // src/utils/helpers.ts
8
+ function isFunction(obj) {
9
+ return typeof obj === "function";
10
+ }
11
+
12
+ // src/hooks/useCombinedRef.ts
13
+ var useCombinedRef = (...refs) => {
14
+ const callback = useCallback((element) => {
15
+ for (const ref of refs) {
16
+ if (!ref) {
17
+ continue;
18
+ }
19
+ if (isFunction(ref)) {
20
+ ref(element);
21
+ } else {
22
+ ref.current = element;
23
+ }
24
+ }
25
+ }, refs);
26
+ return callback;
27
+ };
28
+
29
+ // src/integrations/reanimated.tsx
30
+ var typedMemo = memo;
31
+ var LegendListForwardedRef = typedMemo(
32
+ React.forwardRef(function LegendListForwardedRef2(props, ref) {
33
+ const { refLegendList, ...rest } = props;
34
+ const refFn = useCallback(
35
+ (r) => {
36
+ refLegendList(r);
37
+ },
38
+ [refLegendList]
39
+ );
40
+ return /* @__PURE__ */ React.createElement(LegendList, { ref: refFn, refScrollView: ref, ...rest });
41
+ })
42
+ );
43
+ var AnimatedLegendListComponent = Animated.createAnimatedComponent(LegendListForwardedRef);
44
+ var AnimatedLegendList = typedMemo(
45
+ React.forwardRef(function AnimatedLegendList2(props, ref) {
46
+ const { refScrollView, ...rest } = props;
47
+ const refLegendList = React.useRef(null);
48
+ const combinedRef = useCombinedRef(refLegendList, ref);
49
+ return /* @__PURE__ */ React.createElement(AnimatedLegendListComponent, { ref: refScrollView, refLegendList: combinedRef, ...rest });
50
+ })
51
+ );
52
+
53
+ export { AnimatedLegendList };
@@ -1,8 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(bun run:*)"
5
- ],
6
- "deny": []
7
- }
8
- }