@shopify/flash-list 1.8.0 → 2.0.0-alpha.2

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 (170) hide show
  1. package/README.md +147 -26
  2. package/dist/FlashListProps.d.ts +65 -2
  3. package/dist/FlashListProps.d.ts.map +1 -1
  4. package/dist/__tests__/AverageWindow.test.js +35 -0
  5. package/dist/__tests__/AverageWindow.test.js.map +1 -1
  6. package/dist/enableNewCore.d.ts +3 -0
  7. package/dist/enableNewCore.d.ts.map +1 -0
  8. package/dist/enableNewCore.js +25 -0
  9. package/dist/enableNewCore.js.map +1 -0
  10. package/dist/index.d.ts +5 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +28 -8
  13. package/dist/index.js.map +1 -1
  14. package/dist/recyclerview/RecycleKeyManager.d.ts +82 -0
  15. package/dist/recyclerview/RecycleKeyManager.d.ts.map +1 -0
  16. package/dist/recyclerview/RecycleKeyManager.js +135 -0
  17. package/dist/recyclerview/RecycleKeyManager.js.map +1 -0
  18. package/dist/recyclerview/RecyclerView.d.ts +12 -0
  19. package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
  20. package/dist/recyclerview/RecyclerView.js +283 -0
  21. package/dist/recyclerview/RecyclerView.js.map +1 -0
  22. package/dist/recyclerview/RecyclerViewContextProvider.d.ts +12 -0
  23. package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
  24. package/dist/recyclerview/RecyclerViewContextProvider.js +11 -0
  25. package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
  26. package/dist/recyclerview/RecyclerViewManager.d.ts +52 -0
  27. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
  28. package/dist/recyclerview/RecyclerViewManager.js +323 -0
  29. package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
  30. package/dist/recyclerview/RecyclerViewProps.d.ts +9 -0
  31. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
  32. package/dist/recyclerview/RecyclerViewProps.js +3 -0
  33. package/dist/recyclerview/RecyclerViewProps.js.map +1 -0
  34. package/dist/recyclerview/ViewHolder.d.ts +45 -0
  35. package/dist/recyclerview/ViewHolder.d.ts.map +1 -0
  36. package/dist/recyclerview/ViewHolder.js +96 -0
  37. package/dist/recyclerview/ViewHolder.js.map +1 -0
  38. package/dist/recyclerview/ViewHolderCollection.d.ts +57 -0
  39. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
  40. package/dist/recyclerview/ViewHolderCollection.js +75 -0
  41. package/dist/recyclerview/ViewHolderCollection.js.map +1 -0
  42. package/dist/recyclerview/components/CompatScroller.d.ts +7 -0
  43. package/dist/recyclerview/components/CompatScroller.d.ts.map +1 -0
  44. package/dist/recyclerview/components/CompatScroller.js +8 -0
  45. package/dist/recyclerview/components/CompatScroller.js.map +1 -0
  46. package/dist/recyclerview/components/CompatView.d.ts +7 -0
  47. package/dist/recyclerview/components/CompatView.d.ts.map +1 -0
  48. package/dist/recyclerview/components/CompatView.js +8 -0
  49. package/dist/recyclerview/components/CompatView.js.map +1 -0
  50. package/dist/recyclerview/components/ScrollAnchor.d.ts +28 -0
  51. package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
  52. package/dist/recyclerview/components/ScrollAnchor.js +35 -0
  53. package/dist/recyclerview/components/ScrollAnchor.js.map +1 -0
  54. package/dist/recyclerview/components/StickyHeaders.d.ts +38 -0
  55. package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -0
  56. package/dist/recyclerview/components/StickyHeaders.js +119 -0
  57. package/dist/recyclerview/components/StickyHeaders.js.map +1 -0
  58. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +51 -0
  59. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -0
  60. package/dist/recyclerview/helpers/ConsecutiveNumbers.js +122 -0
  61. package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
  62. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +59 -0
  63. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
  64. package/dist/recyclerview/helpers/EngagedIndicesTracker.js +138 -0
  65. package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
  66. package/dist/recyclerview/hooks/useBoundDetection.d.ts +19 -0
  67. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
  68. package/dist/recyclerview/hooks/useBoundDetection.js +103 -0
  69. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
  70. package/dist/recyclerview/hooks/useLayoutState.d.ts +12 -0
  71. package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
  72. package/dist/recyclerview/hooks/useLayoutState.js +43 -0
  73. package/dist/recyclerview/hooks/useLayoutState.js.map +1 -0
  74. package/dist/recyclerview/hooks/useOnLoad.d.ts +25 -0
  75. package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -0
  76. package/dist/recyclerview/hooks/useOnLoad.js +73 -0
  77. package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
  78. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +72 -0
  79. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
  80. package/dist/recyclerview/hooks/useRecyclerViewController.js +370 -0
  81. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
  82. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +6 -0
  83. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
  84. package/dist/recyclerview/hooks/useRecyclerViewManager.js +27 -0
  85. package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
  86. package/dist/recyclerview/hooks/useRecyclingState.d.ts +16 -0
  87. package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
  88. package/dist/recyclerview/hooks/useRecyclingState.js +54 -0
  89. package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -0
  90. package/dist/recyclerview/hooks/useSecondaryProps.d.ts +27 -0
  91. package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -0
  92. package/dist/recyclerview/hooks/useSecondaryProps.js +93 -0
  93. package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
  94. package/dist/recyclerview/hooks/useUnmountFlag.d.ts +11 -0
  95. package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
  96. package/dist/recyclerview/hooks/useUnmountFlag.js +28 -0
  97. package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
  98. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +65 -0
  99. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
  100. package/dist/recyclerview/layout-managers/GridLayoutManager.js +204 -0
  101. package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
  102. package/dist/recyclerview/layout-managers/LayoutManager.d.ts +281 -0
  103. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
  104. package/dist/recyclerview/layout-managers/LayoutManager.js +250 -0
  105. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
  106. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +52 -0
  107. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
  108. package/dist/recyclerview/layout-managers/LinearLayoutManager.js +191 -0
  109. package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
  110. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +73 -0
  111. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
  112. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +274 -0
  113. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -0
  114. package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts +12 -0
  115. package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts.map +1 -0
  116. package/dist/recyclerview/utils/adjustOffsetForRTL.js +18 -0
  117. package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -0
  118. package/dist/recyclerview/utils/componentUtils.d.ts +19 -0
  119. package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -0
  120. package/dist/recyclerview/utils/componentUtils.js +32 -0
  121. package/dist/recyclerview/utils/componentUtils.js.map +1 -0
  122. package/dist/recyclerview/utils/findVisibleIndex.d.ts +24 -0
  123. package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -0
  124. package/dist/recyclerview/utils/findVisibleIndex.js +82 -0
  125. package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
  126. package/dist/recyclerview/utils/measureLayout.d.ts +56 -0
  127. package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
  128. package/dist/recyclerview/utils/measureLayout.js +77 -0
  129. package/dist/recyclerview/utils/measureLayout.js.map +1 -0
  130. package/dist/tsconfig.tsbuildinfo +1 -1
  131. package/dist/utils/AverageWindow.d.ts +13 -0
  132. package/dist/utils/AverageWindow.d.ts.map +1 -1
  133. package/dist/utils/AverageWindow.js +30 -1
  134. package/dist/utils/AverageWindow.js.map +1 -1
  135. package/package.json +1 -1
  136. package/src/FlashListProps.ts +73 -2
  137. package/src/__tests__/AverageWindow.test.ts +49 -1
  138. package/src/enableNewCore.ts +22 -0
  139. package/src/index.ts +21 -0
  140. package/src/recyclerview/RecycleKeyManager.ts +185 -0
  141. package/src/recyclerview/RecyclerView.tsx +500 -0
  142. package/src/recyclerview/RecyclerViewContextProvider.ts +19 -0
  143. package/src/recyclerview/RecyclerViewManager.ts +379 -0
  144. package/src/recyclerview/RecyclerViewProps.ts +10 -0
  145. package/src/recyclerview/ViewHolder.tsx +173 -0
  146. package/src/recyclerview/ViewHolderCollection.tsx +164 -0
  147. package/src/recyclerview/components/CompatScroller.ts +9 -0
  148. package/src/recyclerview/components/CompatView.ts +9 -0
  149. package/src/recyclerview/components/ScrollAnchor.tsx +53 -0
  150. package/src/recyclerview/components/StickyHeaders.tsx +210 -0
  151. package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
  152. package/src/recyclerview/helpers/EngagedIndicesTracker.ts +191 -0
  153. package/src/recyclerview/hooks/useBoundDetection.ts +127 -0
  154. package/src/recyclerview/hooks/useLayoutState.ts +46 -0
  155. package/src/recyclerview/hooks/useOnLoad.ts +78 -0
  156. package/src/recyclerview/hooks/useRecyclerViewController.tsx +487 -0
  157. package/src/recyclerview/hooks/useRecyclerViewManager.ts +30 -0
  158. package/src/recyclerview/hooks/useRecyclingState.ts +63 -0
  159. package/src/recyclerview/hooks/useSecondaryProps.tsx +119 -0
  160. package/src/recyclerview/hooks/useUnmountFlag.ts +26 -0
  161. package/src/recyclerview/layout-managers/GridLayoutManager.ts +215 -0
  162. package/src/recyclerview/layout-managers/LayoutManager.ts +493 -0
  163. package/src/recyclerview/layout-managers/LinearLayoutManager.ts +167 -0
  164. package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +302 -0
  165. package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
  166. package/src/recyclerview/utils/componentUtils.ts +28 -0
  167. package/src/recyclerview/utils/findVisibleIndex.ts +94 -0
  168. package/src/recyclerview/utils/measureLayout.ts +89 -0
  169. package/src/utils/AverageWindow.ts +33 -0
  170. package/src/viewability/ViewToken.ts +1 -1
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ // Interface of layout manager for app's listviews
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RVLayoutManager = void 0;
5
+ var tslib_1 = require("tslib");
6
+ var AverageWindow_1 = require("../../utils/AverageWindow");
7
+ var ConsecutiveNumbers_1 = require("../helpers/ConsecutiveNumbers");
8
+ var findVisibleIndex_1 = require("../utils/findVisibleIndex");
9
+ var measureLayout_1 = require("../utils/measureLayout");
10
+ /**
11
+ * Base abstract class for layout managers in the recycler view system.
12
+ * Provides common functionality for managing item layouts and dimensions.
13
+ * Supports both horizontal and vertical layouts with dynamic item sizing.
14
+ */
15
+ var RVLayoutManager = /** @class */ (function () {
16
+ function RVLayoutManager(params, previousLayoutManager) {
17
+ var _a, _b;
18
+ /** Information about item spans and sizes */
19
+ this.spanSizeInfo = {};
20
+ /** Flag indicating if the layout requires repainting */
21
+ this.requiresRepaint = false;
22
+ /** Maximum number of items to process in a single layout pass */
23
+ this.maxItemsToProcess = 250; // TODO: make this dynamic
24
+ this.heightAverageWindow = new AverageWindow_1.MultiTypeAverageWindow(5, 200);
25
+ this.widthAverageWindow = new AverageWindow_1.MultiTypeAverageWindow(5, 200);
26
+ this._getItemType = params.getItemType;
27
+ this.overrideItemLayout = params.overrideItemLayout;
28
+ this.layouts = (_a = previousLayoutManager === null || previousLayoutManager === void 0 ? void 0 : previousLayoutManager.layouts) !== null && _a !== void 0 ? _a : [];
29
+ if (previousLayoutManager) {
30
+ this.updateLayoutParams(params);
31
+ }
32
+ else {
33
+ this.horizontal = Boolean(params.horizontal);
34
+ this.windowSize = params.windowSize;
35
+ this.maxColumns = (_b = params.maxColumns) !== null && _b !== void 0 ? _b : 1;
36
+ }
37
+ }
38
+ /**
39
+ * Gets the type of an item at the given index.
40
+ * @param index Index of the item
41
+ * @returns Item type or "default" if not specified
42
+ */
43
+ RVLayoutManager.prototype.getItemType = function (index) {
44
+ var _a, _b;
45
+ return (_b = (_a = this._getItemType) === null || _a === void 0 ? void 0 : _a.call(this, index)) !== null && _b !== void 0 ? _b : "default";
46
+ };
47
+ /**
48
+ * Gets the estimated width for an item based on its type.
49
+ * @param index Index of the item
50
+ * @returns Estimated width
51
+ */
52
+ RVLayoutManager.prototype.getEstimatedWidth = function (index) {
53
+ return this.widthAverageWindow.getCurrentValue(this.getItemType(index));
54
+ };
55
+ /**
56
+ * Gets the estimated height for an item based on its type.
57
+ * @param index Index of the item
58
+ * @returns Estimated height
59
+ */
60
+ RVLayoutManager.prototype.getEstimatedHeight = function (index) {
61
+ return this.heightAverageWindow.getCurrentValue(this.getItemType(index));
62
+ };
63
+ /**
64
+ * Checks if the layout is horizontal.
65
+ * @returns True if horizontal, false if vertical
66
+ */
67
+ RVLayoutManager.prototype.isHorizontal = function () {
68
+ return this.horizontal;
69
+ };
70
+ /**
71
+ * Gets the dimensions of the visible window.
72
+ * @returns Window dimensions
73
+ */
74
+ RVLayoutManager.prototype.getWindowsSize = function () {
75
+ return this.windowSize;
76
+ };
77
+ /**
78
+ * Gets indices of items currently visible in the viewport.
79
+ * Uses binary search for efficient lookup.
80
+ * @param unboundDimensionStart Start position of viewport
81
+ * @param unboundDimensionEnd End position of viewport
82
+ * @returns ConsecutiveNumbers containing visible indices
83
+ */
84
+ RVLayoutManager.prototype.getVisibleLayouts = function (unboundDimensionStart, unboundDimensionEnd) {
85
+ // Find the first visible index
86
+ var firstVisibleIndex = (0, findVisibleIndex_1.findFirstVisibleIndex)(this.layouts, unboundDimensionStart, this.horizontal);
87
+ // Find the last visible index
88
+ var lastVisibleIndex = (0, findVisibleIndex_1.findLastVisibleIndex)(this.layouts, unboundDimensionEnd, this.horizontal);
89
+ // Collect the indices in the range
90
+ if (firstVisibleIndex !== -1 && lastVisibleIndex !== -1) {
91
+ return new ConsecutiveNumbers_1.ConsecutiveNumbers(firstVisibleIndex, lastVisibleIndex);
92
+ }
93
+ return ConsecutiveNumbers_1.ConsecutiveNumbers.EMPTY;
94
+ };
95
+ /**
96
+ * Removes layout information for specified indices and recomputes layout.
97
+ * @param indices Array of indices to remove
98
+ */
99
+ RVLayoutManager.prototype.deleteLayout = function (indices) {
100
+ var e_1, _a;
101
+ // Sort indices in descending order
102
+ indices.sort(function (num1, num2) { return num2 - num1; });
103
+ try {
104
+ // Remove elements from the array
105
+ for (var indices_1 = tslib_1.__values(indices), indices_1_1 = indices_1.next(); !indices_1_1.done; indices_1_1 = indices_1.next()) {
106
+ var index = indices_1_1.value;
107
+ this.layouts.splice(index, 1);
108
+ }
109
+ }
110
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
111
+ finally {
112
+ try {
113
+ if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);
114
+ }
115
+ finally { if (e_1) throw e_1.error; }
116
+ }
117
+ var startIndex = Math.min.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(indices), false));
118
+ // Recompute layouts starting from the smallest index in the original indices array
119
+ this.recomputeLayouts(this.getMinRecomputeIndex(startIndex), this.getMaxRecomputeIndex(startIndex));
120
+ };
121
+ /**
122
+ * Updates layout information for items and recomputes layout if necessary.
123
+ * @param layoutInfo Array of layout information for items (real measurements)
124
+ * @param totalItemCount Total number of items in the list
125
+ */
126
+ RVLayoutManager.prototype.modifyLayout = function (layoutInfo, totalItemCount) {
127
+ var _a;
128
+ var minRecomputeIndex = Number.MAX_VALUE;
129
+ if (this.layouts.length > totalItemCount) {
130
+ this.layouts.length = totalItemCount;
131
+ minRecomputeIndex = totalItemCount - 1; // <0 gets skipped so it's safe to set to totalItemCount - 1
132
+ }
133
+ // update average windows
134
+ minRecomputeIndex = Math.min(minRecomputeIndex, this.computeEstimatesAndMinRecomputeIndex(layoutInfo));
135
+ if (this.layouts.length < totalItemCount && totalItemCount > 0) {
136
+ var startIndex = this.layouts.length;
137
+ this.layouts.length = totalItemCount;
138
+ for (var i = startIndex; i < totalItemCount; i++) {
139
+ this.getLayout(i);
140
+ }
141
+ this.recomputeLayouts(startIndex, totalItemCount - 1);
142
+ }
143
+ minRecomputeIndex = Math.min(minRecomputeIndex, (_a = this.processLayoutInfo(layoutInfo, totalItemCount)) !== null && _a !== void 0 ? _a : minRecomputeIndex);
144
+ // compute minRecomputeIndex
145
+ minRecomputeIndex = Math.min(minRecomputeIndex, this.computeEstimatesAndMinRecomputeIndex(layoutInfo));
146
+ if (minRecomputeIndex >= 0 && minRecomputeIndex < totalItemCount) {
147
+ this.recomputeLayouts(this.getMinRecomputeIndex(minRecomputeIndex), this.getMaxRecomputeIndex(minRecomputeIndex));
148
+ }
149
+ };
150
+ /**
151
+ * Gets layout information for an item at the given index.
152
+ * Creates and initializes a new layout if one doesn't exist.
153
+ * @param index Index of the item
154
+ * @returns Layout information for the item
155
+ */
156
+ RVLayoutManager.prototype.getLayout = function (index) {
157
+ if (index >= this.layouts.length) {
158
+ throw new Error("index out of bounds, not enough layouts");
159
+ }
160
+ var layout = this.layouts[index];
161
+ if (!layout) {
162
+ // Create new layout with estimated dimensions
163
+ layout = {
164
+ x: 0,
165
+ y: 0,
166
+ width: 0,
167
+ height: 0,
168
+ };
169
+ this.layouts[index] = layout;
170
+ }
171
+ if (!layout.isWidthMeasured || !layout.isHeightMeasured) {
172
+ this.estimateLayout(index);
173
+ }
174
+ return layout;
175
+ };
176
+ /**
177
+ * Updates layout parameters and triggers recomputation if necessary.
178
+ * @param params New layout parameters
179
+ */
180
+ RVLayoutManager.prototype.updateLayoutParams = function (params) {
181
+ var _a, _b, _c;
182
+ this.windowSize = params.windowSize;
183
+ this.horizontal = (_a = params.horizontal) !== null && _a !== void 0 ? _a : this.horizontal;
184
+ this.maxColumns = (_b = params.maxColumns) !== null && _b !== void 0 ? _b : this.maxColumns;
185
+ this.optimizeItemArrangement =
186
+ (_c = params.optimizeItemArrangement) !== null && _c !== void 0 ? _c : this.optimizeItemArrangement;
187
+ };
188
+ /**
189
+ * Gets span size information for an item, applying any overrides.
190
+ * @param index Index of the item
191
+ * @returns SpanSizeInfo for the item
192
+ */
193
+ RVLayoutManager.prototype.getSpanSizeInfo = function (index) {
194
+ var _a;
195
+ this.spanSizeInfo.span = undefined;
196
+ (_a = this.overrideItemLayout) === null || _a === void 0 ? void 0 : _a.call(this, index, this.spanSizeInfo);
197
+ return this.spanSizeInfo;
198
+ };
199
+ /**
200
+ * Gets the maximum index to process in a single layout pass.
201
+ * @param startIndex Starting index
202
+ * @returns Maximum index to process
203
+ */
204
+ RVLayoutManager.prototype.getMaxRecomputeIndex = function (startIndex) {
205
+ return Math.min(startIndex + this.maxItemsToProcess, this.layouts.length - 1);
206
+ };
207
+ /**
208
+ * Gets the minimum index to process in a single layout pass.
209
+ * @param startIndex Starting index
210
+ * @returns Minimum index to process
211
+ */
212
+ RVLayoutManager.prototype.getMinRecomputeIndex = function (startIndex) {
213
+ return startIndex;
214
+ };
215
+ /**
216
+ * Computes size estimates and finds the minimum recompute index.
217
+ * @param layoutInfo Array of layout information for items
218
+ * @returns Minimum index that needs recomputation
219
+ */
220
+ RVLayoutManager.prototype.computeEstimatesAndMinRecomputeIndex = function (layoutInfo) {
221
+ var e_2, _a;
222
+ var minRecomputeIndex = Number.MAX_VALUE;
223
+ try {
224
+ for (var layoutInfo_1 = tslib_1.__values(layoutInfo), layoutInfo_1_1 = layoutInfo_1.next(); !layoutInfo_1_1.done; layoutInfo_1_1 = layoutInfo_1.next()) {
225
+ var info = layoutInfo_1_1.value;
226
+ var index = info.index, dimensions = info.dimensions;
227
+ var storedLayout = this.layouts[index];
228
+ if (!storedLayout.isHeightMeasured ||
229
+ !storedLayout.isWidthMeasured ||
230
+ (0, measureLayout_1.areDimensionsNotEqual)(storedLayout.height, dimensions.height) ||
231
+ (0, measureLayout_1.areDimensionsNotEqual)(storedLayout.width, dimensions.width)) {
232
+ minRecomputeIndex = Math.min(minRecomputeIndex, index);
233
+ }
234
+ this.heightAverageWindow.addValue(dimensions.height, this.getItemType(index));
235
+ this.widthAverageWindow.addValue(dimensions.width, this.getItemType(index));
236
+ }
237
+ }
238
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
239
+ finally {
240
+ try {
241
+ if (layoutInfo_1_1 && !layoutInfo_1_1.done && (_a = layoutInfo_1.return)) _a.call(layoutInfo_1);
242
+ }
243
+ finally { if (e_2) throw e_2.error; }
244
+ }
245
+ return minRecomputeIndex;
246
+ };
247
+ return RVLayoutManager;
248
+ }());
249
+ exports.RVLayoutManager = RVLayoutManager;
250
+ //# sourceMappingURL=LayoutManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutManager.js","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/LayoutManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { LayoutParams, RVDimension, RVLayoutInfo } from "./LayoutManager";
2
+ import { RVLayoutManager } from "./LayoutManager";
3
+ /**
4
+ * LinearLayoutManager implementation that arranges items in a single row or column.
5
+ * Supports both horizontal and vertical layouts with dynamic item sizing.
6
+ */
7
+ export declare class RVLinearLayoutManagerImpl extends RVLayoutManager {
8
+ /** The bounded size (width for vertical, height for horizontal) */
9
+ private boundedSize;
10
+ /** Whether the bounded size has been set */
11
+ private hasSize;
12
+ /** Reference to the tallest item in the layout */
13
+ private tallestItem?;
14
+ /** Height of the tallest item */
15
+ private tallestItemHeight;
16
+ constructor(params: LayoutParams, previousLayoutManager?: RVLayoutManager);
17
+ /**
18
+ * Updates layout parameters and triggers recomputation if necessary.
19
+ * @param params New layout parameters
20
+ */
21
+ updateLayoutParams(params: LayoutParams): void;
22
+ /**
23
+ * Processes layout information for items, updating their dimensions.
24
+ * For horizontal layouts, also normalizes heights of items.
25
+ * @param layoutInfo Array of layout information for items
26
+ * @param itemCount Total number of items in the list
27
+ */
28
+ processLayoutInfo(layoutInfo: RVLayoutInfo[], itemCount: number): void;
29
+ /**
30
+ * Estimates layout dimensions for an item at the given index.
31
+ * @param index Index of the item to estimate layout for
32
+ */
33
+ estimateLayout(index: number): void;
34
+ /**
35
+ * Returns the total size of the layout area.
36
+ * @returns RVDimension containing width and height of the layout
37
+ */
38
+ getLayoutSize(): RVDimension;
39
+ /**
40
+ * Normalizes heights of items in horizontal layout to match the tallest item.
41
+ * @param layoutInfo Array of layout information for items
42
+ */
43
+ private normalizeLayoutHeights;
44
+ /**
45
+ * Recomputes layouts for items in the given range.
46
+ * Positions items sequentially based on layout direction.
47
+ * @param startIndex Starting index of items to recompute
48
+ * @param endIndex Ending index of items to recompute
49
+ */
50
+ recomputeLayouts(startIndex: number, endIndex: number): void;
51
+ }
52
+ //# sourceMappingURL=LinearLayoutManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinearLayoutManager.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/LinearLayoutManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,mEAAmE;IACnE,OAAO,CAAC,WAAW,CAAS;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,OAAO,CAAkB;IAEjC,kDAAkD;IAClD,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,iCAAiC;IACjC,OAAO,CAAC,iBAAiB,CAAa;gBAE1B,MAAM,EAAE,YAAY,EAAE,qBAAqB,CAAC,EAAE,eAAe;IAQzE;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAmB9C;;;;;OAKG;IACH,iBAAiB,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM;IAgB/D;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM;IAU5B;;;OAGG;IACH,aAAa,IAAI,WAAW;IAa5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;;;;OAKG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAsB7D"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RVLinearLayoutManagerImpl = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var LayoutManager_1 = require("./LayoutManager");
6
+ /**
7
+ * LinearLayoutManager implementation that arranges items in a single row or column.
8
+ * Supports both horizontal and vertical layouts with dynamic item sizing.
9
+ */
10
+ var RVLinearLayoutManagerImpl = /** @class */ (function (_super) {
11
+ tslib_1.__extends(RVLinearLayoutManagerImpl, _super);
12
+ function RVLinearLayoutManagerImpl(params, previousLayoutManager) {
13
+ var _this = _super.call(this, params, previousLayoutManager) || this;
14
+ /** Whether the bounded size has been set */
15
+ _this.hasSize = false;
16
+ /** Height of the tallest item */
17
+ _this.tallestItemHeight = 0;
18
+ _this.boundedSize = _this.horizontal
19
+ ? params.windowSize.height
20
+ : params.windowSize.width;
21
+ _this.hasSize = _this.boundedSize > 0;
22
+ return _this;
23
+ }
24
+ /**
25
+ * Updates layout parameters and triggers recomputation if necessary.
26
+ * @param params New layout parameters
27
+ */
28
+ RVLinearLayoutManagerImpl.prototype.updateLayoutParams = function (params) {
29
+ var prevHorizontal = this.horizontal;
30
+ _super.prototype.updateLayoutParams.call(this, params);
31
+ var oldBoundedSize = this.boundedSize;
32
+ this.boundedSize = this.horizontal
33
+ ? params.windowSize.height
34
+ : params.windowSize.width;
35
+ if (oldBoundedSize !== this.boundedSize ||
36
+ prevHorizontal !== this.horizontal) {
37
+ if (this.layouts.length > 0) {
38
+ //console.log("-----> recomputeLayouts", this.horizontal);
39
+ this.recomputeLayouts(0, this.layouts.length - 1);
40
+ this.requiresRepaint = true;
41
+ }
42
+ }
43
+ };
44
+ /**
45
+ * Processes layout information for items, updating their dimensions.
46
+ * For horizontal layouts, also normalizes heights of items.
47
+ * @param layoutInfo Array of layout information for items
48
+ * @param itemCount Total number of items in the list
49
+ */
50
+ RVLinearLayoutManagerImpl.prototype.processLayoutInfo = function (layoutInfo, itemCount) {
51
+ var e_1, _a;
52
+ try {
53
+ // Update layout information
54
+ for (var layoutInfo_1 = tslib_1.__values(layoutInfo), layoutInfo_1_1 = layoutInfo_1.next(); !layoutInfo_1_1.done; layoutInfo_1_1 = layoutInfo_1.next()) {
55
+ var info = layoutInfo_1_1.value;
56
+ var index = info.index, dimensions = info.dimensions;
57
+ var layout = this.layouts[index];
58
+ layout.width = this.horizontal ? dimensions.width : this.boundedSize;
59
+ layout.isHeightMeasured = true;
60
+ layout.isWidthMeasured = true;
61
+ layout.height = dimensions.height;
62
+ }
63
+ }
64
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
65
+ finally {
66
+ try {
67
+ if (layoutInfo_1_1 && !layoutInfo_1_1.done && (_a = layoutInfo_1.return)) _a.call(layoutInfo_1);
68
+ }
69
+ finally { if (e_1) throw e_1.error; }
70
+ }
71
+ if (this.horizontal && !this.hasSize) {
72
+ this.normalizeLayoutHeights(layoutInfo);
73
+ }
74
+ };
75
+ /**
76
+ * Estimates layout dimensions for an item at the given index.
77
+ * @param index Index of the item to estimate layout for
78
+ */
79
+ RVLinearLayoutManagerImpl.prototype.estimateLayout = function (index) {
80
+ var layout = this.layouts[index];
81
+ layout.width = this.horizontal
82
+ ? this.getEstimatedWidth(index)
83
+ : this.boundedSize;
84
+ layout.height = this.getEstimatedHeight(index);
85
+ layout.isWidthMeasured = !this.horizontal;
86
+ layout.enforcedWidth = !this.horizontal;
87
+ };
88
+ /**
89
+ * Returns the total size of the layout area.
90
+ * @returns RVDimension containing width and height of the layout
91
+ */
92
+ RVLinearLayoutManagerImpl.prototype.getLayoutSize = function () {
93
+ var _a, _b;
94
+ if (this.layouts.length === 0)
95
+ return { width: 0, height: 0 };
96
+ var lastLayout = this.layouts[this.layouts.length - 1];
97
+ return {
98
+ width: this.horizontal
99
+ ? lastLayout.x + lastLayout.width
100
+ : this.boundedSize,
101
+ height: this.horizontal
102
+ ? (_b = (_a = this.tallestItem) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0
103
+ : lastLayout.y + lastLayout.height,
104
+ };
105
+ };
106
+ /**
107
+ * Normalizes heights of items in horizontal layout to match the tallest item.
108
+ * @param layoutInfo Array of layout information for items
109
+ */
110
+ RVLinearLayoutManagerImpl.prototype.normalizeLayoutHeights = function (layoutInfo) {
111
+ var e_2, _a, e_3, _b;
112
+ var _c, _d;
113
+ var newTallestItem;
114
+ try {
115
+ for (var layoutInfo_2 = tslib_1.__values(layoutInfo), layoutInfo_2_1 = layoutInfo_2.next(); !layoutInfo_2_1.done; layoutInfo_2_1 = layoutInfo_2.next()) {
116
+ var info = layoutInfo_2_1.value;
117
+ var index = info.index;
118
+ var layout = this.layouts[index];
119
+ if (layout.height > ((_c = layout.minHeight) !== null && _c !== void 0 ? _c : 0) &&
120
+ layout.height > ((_d = newTallestItem === null || newTallestItem === void 0 ? void 0 : newTallestItem.height) !== null && _d !== void 0 ? _d : 0)) {
121
+ newTallestItem = layout;
122
+ }
123
+ }
124
+ }
125
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
126
+ finally {
127
+ try {
128
+ if (layoutInfo_2_1 && !layoutInfo_2_1.done && (_a = layoutInfo_2.return)) _a.call(layoutInfo_2);
129
+ }
130
+ finally { if (e_2) throw e_2.error; }
131
+ }
132
+ if (newTallestItem && newTallestItem.height !== this.tallestItemHeight) {
133
+ var targetMinHeight = newTallestItem.height;
134
+ if (newTallestItem.height < this.tallestItemHeight) {
135
+ this.requiresRepaint = true;
136
+ targetMinHeight = 0;
137
+ }
138
+ try {
139
+ //set minHeight for all layouts
140
+ for (var _e = tslib_1.__values(this.layouts), _f = _e.next(); !_f.done; _f = _e.next()) {
141
+ var layout = _f.value;
142
+ if (targetMinHeight > 0) {
143
+ layout.height = newTallestItem.height;
144
+ }
145
+ layout.minHeight = targetMinHeight;
146
+ }
147
+ }
148
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
149
+ finally {
150
+ try {
151
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
152
+ }
153
+ finally { if (e_3) throw e_3.error; }
154
+ }
155
+ newTallestItem.minHeight = 0;
156
+ this.tallestItem = newTallestItem;
157
+ this.tallestItemHeight = newTallestItem.height;
158
+ }
159
+ };
160
+ /**
161
+ * Recomputes layouts for items in the given range.
162
+ * Positions items sequentially based on layout direction.
163
+ * @param startIndex Starting index of items to recompute
164
+ * @param endIndex Ending index of items to recompute
165
+ */
166
+ RVLinearLayoutManagerImpl.prototype.recomputeLayouts = function (startIndex, endIndex) {
167
+ for (var i = startIndex; i <= endIndex; i++) {
168
+ var layout = this.getLayout(i);
169
+ // Set positions based on whether this is the first item or not
170
+ if (i === 0) {
171
+ layout.x = 0;
172
+ layout.y = 0;
173
+ }
174
+ else {
175
+ var prevLayout = this.getLayout(i - 1);
176
+ layout.x = this.horizontal ? prevLayout.x + prevLayout.width : 0;
177
+ layout.y = this.horizontal ? 0 : prevLayout.y + prevLayout.height;
178
+ }
179
+ // Set width for vertical layouts
180
+ if (!this.horizontal) {
181
+ layout.width = this.boundedSize;
182
+ }
183
+ else if (this.hasSize) {
184
+ layout.minHeight = this.boundedSize;
185
+ }
186
+ }
187
+ };
188
+ return RVLinearLayoutManagerImpl;
189
+ }(LayoutManager_1.RVLayoutManager));
190
+ exports.RVLinearLayoutManagerImpl = RVLinearLayoutManagerImpl;
191
+ //# sourceMappingURL=LinearLayoutManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinearLayoutManager.js","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/LinearLayoutManager.ts"],"names":[],"mappings":";;;;AAEA,iDAAkD;AAElD;;;GAGG;AACH;IAA+C,qDAAe;IAW5D,mCAAY,MAAoB,EAAE,qBAAuC;QAAzE,YACE,kBAAM,MAAM,EAAE,qBAAqB,CAAC,SAKrC;QAdD,4CAA4C;QACpC,aAAO,GAAY,KAAK,CAAC;QAIjC,iCAAiC;QACzB,uBAAiB,GAAW,CAAC,CAAC;QAIpC,KAAI,CAAC,WAAW,GAAG,KAAI,CAAC,UAAU;YAChC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;YAC1B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;IACtC,CAAC;IAED;;;OAGG;IACH,sDAAkB,GAAlB,UAAmB,MAAoB;QACrC,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;QACvC,iBAAM,kBAAkB,YAAC,MAAM,CAAC,CAAC;QACjC,IAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU;YAChC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;YAC1B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,IACE,cAAc,KAAK,IAAI,CAAC,WAAW;YACnC,cAAc,KAAK,IAAI,CAAC,UAAU,EAClC;YACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,0DAA0D;gBAC1D,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aAC7B;SACF;IACH,CAAC;IAED;;;;;OAKG;IACH,qDAAiB,GAAjB,UAAkB,UAA0B,EAAE,SAAiB;;;YAC7D,4BAA4B;YAC5B,KAAmB,IAAA,eAAA,iBAAA,UAAU,CAAA,sCAAA,8DAAE;gBAA1B,IAAM,IAAI,uBAAA;gBACL,IAAA,KAAK,GAAiB,IAAI,MAArB,EAAE,UAAU,GAAK,IAAI,WAAT,CAAU;gBACnC,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;gBACrE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC/B,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;aACnC;;;;;;;;;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;SACzC;IACH,CAAC;IAED;;;OAGG;IACH,kDAAc,GAAd,UAAe,KAAa;QAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU;YAC5B,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACrB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C,MAAM,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,iDAAa,GAAb;;QACE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,UAAU;gBACpB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;gBACjC,CAAC,CAAC,IAAI,CAAC,WAAW;YACpB,MAAM,EAAE,IAAI,CAAC,UAAU;gBACrB,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,MAAM,mCAAI,CAAC;gBAC/B,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM;SACrC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,0DAAsB,GAA9B,UAA+B,UAA0B;;;QACvD,IAAI,cAAoC,CAAC;;YACzC,KAAmB,IAAA,eAAA,iBAAA,UAAU,CAAA,sCAAA,8DAAE;gBAA1B,IAAM,IAAI,uBAAA;gBACL,IAAA,KAAK,GAAK,IAAI,MAAT,CAAU;gBACvB,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnC,IACE,MAAM,CAAC,MAAM,GAAG,CAAC,MAAA,MAAM,CAAC,SAAS,mCAAI,CAAC,CAAC;oBACvC,MAAM,CAAC,MAAM,GAAG,CAAC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,mCAAI,CAAC,CAAC,EAC7C;oBACA,cAAc,GAAG,MAAM,CAAC;iBACzB;aACF;;;;;;;;;QACD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE;YACtE,IAAI,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC;YAC5C,IAAI,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,eAAe,GAAG,CAAC,CAAC;aACrB;;gBACD,+BAA+B;gBAC/B,KAAqB,IAAA,KAAA,iBAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;oBAA9B,IAAM,MAAM,WAAA;oBACf,IAAI,eAAe,GAAG,CAAC,EAAE;wBACvB,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;qBACvC;oBACD,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;iBACpC;;;;;;;;;YACD,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC;YAClC,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC;SAChD;IACH,CAAC;IAED;;;;;OAKG;IACH,oDAAgB,GAAhB,UAAiB,UAAkB,EAAE,QAAgB;QACnD,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAEjC,+DAA+D;YAC/D,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;aACd;iBAAM;gBACL,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;aACnE;YAED,iCAAiC;YACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;aACjC;iBAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACvB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;aACrC;SACF;IACH,CAAC;IACH,gCAAC;AAAD,CAAC,AA9JD,CAA+C,+BAAe,GA8J7D;AA9JY,8DAAyB"}
@@ -0,0 +1,73 @@
1
+ import { LayoutParams, RVDimension, RVLayoutInfo, RVLayoutManager } from "./LayoutManager";
2
+ /**
3
+ * MasonryLayoutManager implementation that arranges items in a masonry/pinterest-style layout.
4
+ * Items are placed in columns, with support for items spanning multiple columns.
5
+ * Can optimize item placement to minimize column height differences.
6
+ */
7
+ export declare class RVMasonryLayoutManagerImpl extends RVLayoutManager {
8
+ /** The width of the bounded area for the masonry layout */
9
+ private boundedSize;
10
+ /** Array tracking the current height of each column */
11
+ private columnHeights;
12
+ /** Current column index for sequential placement */
13
+ private currentColumn;
14
+ constructor(params: LayoutParams, previousLayoutManager?: RVLayoutManager);
15
+ /**
16
+ * Updates layout parameters and triggers recomputation if necessary.
17
+ * @param params New layout parameters
18
+ */
19
+ updateLayoutParams(params: LayoutParams): void;
20
+ /**
21
+ * Processes layout information for items, updating their dimensions.
22
+ * @param layoutInfo Array of layout information for items (real measurements)
23
+ * @param itemCount Total number of items in the list
24
+ */
25
+ processLayoutInfo(layoutInfo: RVLayoutInfo[], itemCount: number): void;
26
+ /**
27
+ * Estimates layout dimensions for an item at the given index.
28
+ * Can be called by base class if estimate is required.
29
+ * @param index Index of the item to estimate layout for
30
+ */
31
+ estimateLayout(index: number): void;
32
+ /**
33
+ * Returns the total size of the layout area.
34
+ * @returns RVDimension containing width and height of the layout
35
+ */
36
+ getLayoutSize(): RVDimension;
37
+ /**
38
+ * Recomputes layouts for items in the given range.
39
+ * Uses different placement strategies based on optimization settings.
40
+ * @param startIndex Starting index of items to recompute
41
+ * @param endIndex Ending index of items to recompute
42
+ */
43
+ recomputeLayouts(startIndex: number, endIndex: number): void;
44
+ /**
45
+ * Calculates the width of an item based on its span.
46
+ * @param index Index of the item
47
+ * @returns Width of the item
48
+ */
49
+ private getWidth;
50
+ /**
51
+ * Places an item sequentially in the next available position.
52
+ * @param layout Layout information for the item
53
+ * @param span Number of columns the item spans
54
+ */
55
+ private placeItemSequentially;
56
+ /**
57
+ * Places a single-column item in the shortest available column.
58
+ * @param layout Layout information for the item
59
+ */
60
+ private placeSingleColumnItem;
61
+ /**
62
+ * Places a multi-column item in the position that minimizes total column heights.
63
+ * @param layout Layout information for the item
64
+ * @param span Number of columns the item spans
65
+ */
66
+ private placeOptimizedMultiColumnItem;
67
+ /**
68
+ * Updates column heights up to a given index by recalculating item positions.
69
+ * @param index Index to update column heights up to
70
+ */
71
+ private updateColumnHeightsToIndex;
72
+ }
73
+ //# sourceMappingURL=MasonryLayoutManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MasonryLayoutManager.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/MasonryLayoutManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,WAAW,EAEX,YAAY,EACZ,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,2DAA2D;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,uDAAuD;IACvD,OAAO,CAAC,aAAa,CAAW;IAChC,oDAAoD;IACpD,OAAO,CAAC,aAAa,CAAa;gBAEtB,MAAM,EAAE,YAAY,EAAE,qBAAqB,CAAC,EAAE,eAAe;IAOzE;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY;IAyBvC;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM;IAY/D;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM;IAW5B;;;OAGG;IACH,aAAa,IAAI,WAAW;IAY5B;;;;;OAKG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgC5D;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAqC7B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IA0CrC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;CA8BnC"}