@shopify/flash-list 2.0.4-alpha.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AnimatedFlashList.js +4 -6
- package/dist/AnimatedFlashList.js.map +1 -1
- package/dist/FlashList.js +1 -5
- package/dist/FlashList.js.map +1 -1
- package/dist/FlashListProps.d.ts +41 -1
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/FlashListProps.js +1 -4
- package/dist/FlashListProps.js.map +1 -1
- package/dist/FlashListRef.js +1 -2
- package/dist/benchmark/AutoScrollHelper.js +22 -30
- package/dist/benchmark/AutoScrollHelper.js.map +1 -1
- package/dist/benchmark/JSFPSMonitor.js +27 -33
- package/dist/benchmark/JSFPSMonitor.js.map +1 -1
- package/dist/benchmark/roundToDecimalPlaces.js +2 -5
- package/dist/benchmark/roundToDecimalPlaces.js.map +1 -1
- package/dist/benchmark/useBenchmark.d.ts +9 -1
- package/dist/benchmark/useBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useBenchmark.js +86 -95
- package/dist/benchmark/useBenchmark.js.map +1 -1
- package/dist/benchmark/useDataMultiplier.js +6 -10
- package/dist/benchmark/useDataMultiplier.js.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.d.ts +4 -1
- package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
- package/dist/benchmark/useFlatListBenchmark.js +73 -81
- package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
- package/dist/errors/ErrorMessages.js +1 -4
- package/dist/errors/ErrorMessages.js.map +1 -1
- package/dist/errors/WarningMessages.js +1 -4
- package/dist/errors/WarningMessages.js.map +1 -1
- package/dist/index.js +17 -35
- package/dist/index.js.map +1 -1
- package/dist/isNewArch.js +6 -9
- package/dist/isNewArch.js.map +1 -1
- package/dist/native/config/PlatformHelper.android.js +2 -5
- package/dist/native/config/PlatformHelper.android.js.map +1 -1
- package/dist/native/config/PlatformHelper.ios.js +2 -5
- package/dist/native/config/PlatformHelper.ios.js.map +1 -1
- package/dist/native/config/PlatformHelper.js +2 -5
- package/dist/native/config/PlatformHelper.js.map +1 -1
- package/dist/native/config/PlatformHelper.web.js +2 -5
- package/dist/native/config/PlatformHelper.web.js.map +1 -1
- package/dist/recyclerview/LayoutCommitObserver.js +20 -24
- package/dist/recyclerview/LayoutCommitObserver.js.map +1 -1
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
- package/dist/recyclerview/RecyclerView.js +134 -111
- package/dist/recyclerview/RecyclerView.js.map +1 -1
- package/dist/recyclerview/RecyclerViewContextProvider.js +7 -12
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -1
- package/dist/recyclerview/RecyclerViewManager.js +138 -167
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/RecyclerViewProps.js +1 -2
- package/dist/recyclerview/RenderStackManager.js +97 -188
- package/dist/recyclerview/RenderStackManager.js.map +1 -1
- package/dist/recyclerview/ViewHolder.d.ts +2 -0
- package/dist/recyclerview/ViewHolder.d.ts.map +1 -1
- package/dist/recyclerview/ViewHolder.js +19 -21
- package/dist/recyclerview/ViewHolder.js.map +1 -1
- package/dist/recyclerview/ViewHolderCollection.d.ts +4 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -1
- package/dist/recyclerview/ViewHolderCollection.js +26 -30
- package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
- package/dist/recyclerview/components/CompatScroller.js +6 -7
- package/dist/recyclerview/components/CompatScroller.js.map +1 -1
- package/dist/recyclerview/components/CompatView.js +6 -7
- package/dist/recyclerview/components/CompatView.js.map +1 -1
- package/dist/recyclerview/components/ScrollAnchor.js +10 -15
- package/dist/recyclerview/components/ScrollAnchor.js.map +1 -1
- package/dist/recyclerview/components/StickyHeaders.d.ts +5 -1
- package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -1
- package/dist/recyclerview/components/StickyHeaders.js +77 -51
- package/dist/recyclerview/components/StickyHeaders.js.map +1 -1
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js +39 -66
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -1
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +57 -63
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -1
- package/dist/recyclerview/helpers/RenderTimeTracker.js +19 -24
- package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -1
- package/dist/recyclerview/helpers/VelocityTracker.js +16 -22
- package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -1
- package/dist/recyclerview/hooks/useBoundDetection.js +37 -40
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
- package/dist/recyclerview/hooks/useLayoutState.js +9 -15
- package/dist/recyclerview/hooks/useLayoutState.js.map +1 -1
- package/dist/recyclerview/hooks/useMappingHelper.js +6 -10
- package/dist/recyclerview/hooks/useMappingHelper.js.map +1 -1
- package/dist/recyclerview/hooks/useOnLoad.js +16 -22
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewController.js +169 -188
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +12 -17
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -1
- package/dist/recyclerview/hooks/useRecyclingState.js +10 -14
- package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -1
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts +2 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -1
- package/dist/recyclerview/hooks/useSecondaryProps.js +39 -30
- package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -1
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +17 -22
- package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -1
- package/dist/recyclerview/hooks/useUnmountFlag.js +5 -9
- package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -1
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +61 -80
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/LayoutManager.js +83 -123
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js +51 -91
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -1
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +77 -96
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -1
- package/dist/recyclerview/utils/adjustOffsetForRTL.js +1 -4
- package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -1
- package/dist/recyclerview/utils/componentUtils.js +4 -9
- package/dist/recyclerview/utils/componentUtils.js.map +1 -1
- package/dist/recyclerview/utils/findVisibleIndex.js +9 -13
- package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -1
- package/dist/recyclerview/utils/measureLayout.js +12 -20
- package/dist/recyclerview/utils/measureLayout.js.map +1 -1
- package/dist/recyclerview/utils/measureLayout.web.js +15 -23
- package/dist/recyclerview/utils/measureLayout.web.js.map +1 -1
- package/dist/recyclerview/viewability/ViewToken.js +1 -2
- package/dist/recyclerview/viewability/ViewabilityHelper.js +34 -41
- package/dist/recyclerview/viewability/ViewabilityHelper.js.map +1 -1
- package/dist/recyclerview/viewability/ViewabilityManager.js +48 -61
- package/dist/recyclerview/viewability/ViewabilityManager.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/AverageWindow.js +28 -39
- package/dist/utils/AverageWindow.js.map +1 -1
- package/package.json +4 -6
- package/src/FlashListProps.ts +51 -1
- package/src/benchmark/useBenchmark.ts +47 -4
- package/src/benchmark/useFlatListBenchmark.ts +38 -5
- package/src/recyclerview/RecyclerView.tsx +42 -8
- package/src/recyclerview/ViewHolder.tsx +6 -1
- package/src/recyclerview/ViewHolderCollection.tsx +10 -0
- package/src/recyclerview/components/StickyHeaders.tsx +54 -13
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +7 -4
- package/src/recyclerview/hooks/useSecondaryProps.tsx +23 -0
- package/dist/__tests__/AverageWindow.test.d.ts +0 -2
- package/dist/__tests__/AverageWindow.test.d.ts.map +0 -1
- package/dist/__tests__/AverageWindow.test.js +0 -104
- package/dist/__tests__/AverageWindow.test.js.map +0 -1
- package/dist/__tests__/ConsecutiveNumbers.test.d.ts +0 -2
- package/dist/__tests__/ConsecutiveNumbers.test.d.ts.map +0 -1
- package/dist/__tests__/ConsecutiveNumbers.test.js +0 -224
- package/dist/__tests__/ConsecutiveNumbers.test.js.map +0 -1
- package/dist/__tests__/GridLayoutManager.test.d.ts +0 -2
- package/dist/__tests__/GridLayoutManager.test.d.ts.map +0 -1
- package/dist/__tests__/GridLayoutManager.test.js +0 -69
- package/dist/__tests__/GridLayoutManager.test.js.map +0 -1
- package/dist/__tests__/LayoutCommitObserver.test.d.ts +0 -2
- package/dist/__tests__/LayoutCommitObserver.test.d.ts.map +0 -1
- package/dist/__tests__/LayoutCommitObserver.test.js +0 -37
- package/dist/__tests__/LayoutCommitObserver.test.js.map +0 -1
- package/dist/__tests__/LinearLayoutManager.test.d.ts +0 -2
- package/dist/__tests__/LinearLayoutManager.test.d.ts.map +0 -1
- package/dist/__tests__/LinearLayoutManager.test.js +0 -140
- package/dist/__tests__/LinearLayoutManager.test.js.map +0 -1
- package/dist/__tests__/MasonryLayoutManager.test.d.ts +0 -2
- package/dist/__tests__/MasonryLayoutManager.test.d.ts.map +0 -1
- package/dist/__tests__/MasonryLayoutManager.test.js +0 -148
- package/dist/__tests__/MasonryLayoutManager.test.js.map +0 -1
- package/dist/__tests__/RecyclerView.test.d.ts +0 -2
- package/dist/__tests__/RecyclerView.test.d.ts.map +0 -1
- package/dist/__tests__/RecyclerView.test.js +0 -103
- package/dist/__tests__/RecyclerView.test.js.map +0 -1
- package/dist/__tests__/RecyclerViewManager.test.d.ts +0 -2
- package/dist/__tests__/RecyclerViewManager.test.d.ts.map +0 -1
- package/dist/__tests__/RecyclerViewManager.test.js +0 -56
- package/dist/__tests__/RecyclerViewManager.test.js.map +0 -1
- package/dist/__tests__/RenderStackManager.test.d.ts +0 -2
- package/dist/__tests__/RenderStackManager.test.d.ts.map +0 -1
- package/dist/__tests__/RenderStackManager.test.js +0 -485
- package/dist/__tests__/RenderStackManager.test.js.map +0 -1
- package/dist/__tests__/ViewabilityHelper.test.d.ts +0 -2
- package/dist/__tests__/ViewabilityHelper.test.d.ts.map +0 -1
- package/dist/__tests__/ViewabilityHelper.test.js +0 -186
- package/dist/__tests__/ViewabilityHelper.test.js.map +0 -1
- package/dist/__tests__/findVisibleIndex.test.d.ts +0 -2
- package/dist/__tests__/findVisibleIndex.test.d.ts.map +0 -1
- package/dist/__tests__/findVisibleIndex.test.js +0 -259
- package/dist/__tests__/findVisibleIndex.test.js.map +0 -1
- package/dist/__tests__/helpers/createLayoutManager.d.ts +0 -34
- package/dist/__tests__/helpers/createLayoutManager.d.ts.map +0 -1
- package/dist/__tests__/helpers/createLayoutManager.js +0 -110
- package/dist/__tests__/helpers/createLayoutManager.js.map +0 -1
- package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts +0 -2
- package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts.map +0 -1
- package/dist/__tests__/useUnmountAwareCallbacks.test.js +0 -185
- package/dist/__tests__/useUnmountAwareCallbacks.test.js.map +0 -1
- package/src/__tests__/AverageWindow.test.ts +0 -128
- package/src/__tests__/ConsecutiveNumbers.test.ts +0 -232
- package/src/__tests__/GridLayoutManager.test.ts +0 -113
- package/src/__tests__/LayoutCommitObserver.test.tsx +0 -63
- package/src/__tests__/LinearLayoutManager.test.ts +0 -227
- package/src/__tests__/MasonryLayoutManager.test.ts +0 -202
- package/src/__tests__/RecyclerView.test.tsx +0 -144
- package/src/__tests__/RecyclerViewManager.test.ts +0 -74
- package/src/__tests__/RenderStackManager.test.ts +0 -574
- package/src/__tests__/ViewabilityHelper.test.ts +0 -282
- package/src/__tests__/findVisibleIndex.test.ts +0 -369
- package/src/__tests__/helpers/createLayoutManager.ts +0 -141
- package/src/__tests__/useUnmountAwareCallbacks.test.tsx +0 -285
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RVLinearLayoutManagerImpl = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
|
-
var LayoutManager_1 = require("./LayoutManager");
|
|
1
|
+
import { RVLayoutManager, } from "./LayoutManager";
|
|
6
2
|
/**
|
|
7
3
|
* LinearLayoutManager implementation that arranges items in a single row or column.
|
|
8
4
|
* Supports both horizontal and vertical layouts with dynamic item sizing.
|
|
9
5
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _this = _super.call(this, params, previousLayoutManager) || this;
|
|
6
|
+
export class RVLinearLayoutManagerImpl extends RVLayoutManager {
|
|
7
|
+
constructor(params, previousLayoutManager) {
|
|
8
|
+
super(params, previousLayoutManager);
|
|
14
9
|
/** Whether the bounded size has been set */
|
|
15
|
-
|
|
10
|
+
this.hasSize = false;
|
|
16
11
|
/** Height of the tallest item */
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
this.tallestItemHeight = 0;
|
|
13
|
+
this.boundedSize = this.horizontal
|
|
19
14
|
? params.windowSize.height
|
|
20
15
|
: params.windowSize.width;
|
|
21
|
-
|
|
22
|
-
return _this;
|
|
16
|
+
this.hasSize = this.boundedSize > 0;
|
|
23
17
|
}
|
|
24
18
|
/**
|
|
25
19
|
* Updates layout parameters and triggers recomputation if necessary.
|
|
26
20
|
* @param params New layout parameters
|
|
27
21
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
updateLayoutParams(params) {
|
|
23
|
+
const prevHorizontal = this.horizontal;
|
|
24
|
+
super.updateLayoutParams(params);
|
|
25
|
+
const oldBoundedSize = this.boundedSize;
|
|
32
26
|
this.boundedSize = this.horizontal
|
|
33
27
|
? params.windowSize.height
|
|
34
28
|
: params.windowSize.width;
|
|
@@ -40,60 +34,49 @@ var RVLinearLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
40
34
|
this.requiresRepaint = true;
|
|
41
35
|
}
|
|
42
36
|
}
|
|
43
|
-
}
|
|
37
|
+
}
|
|
44
38
|
/**
|
|
45
39
|
* Processes layout information for items, updating their dimensions.
|
|
46
40
|
* For horizontal layouts, also normalizes heights of items.
|
|
47
41
|
* @param layoutInfo Array of layout information for items
|
|
48
42
|
* @param itemCount Total number of items in the list
|
|
49
43
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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; }
|
|
44
|
+
processLayoutInfo(layoutInfo, itemCount) {
|
|
45
|
+
// Update layout information
|
|
46
|
+
for (const info of layoutInfo) {
|
|
47
|
+
const { index, dimensions } = info;
|
|
48
|
+
const layout = this.layouts[index];
|
|
49
|
+
layout.width = this.horizontal ? dimensions.width : this.boundedSize;
|
|
50
|
+
layout.isHeightMeasured = true;
|
|
51
|
+
layout.isWidthMeasured = true;
|
|
52
|
+
layout.height = dimensions.height;
|
|
70
53
|
}
|
|
71
54
|
if (this.horizontal && !this.hasSize) {
|
|
72
55
|
this.normalizeLayoutHeights(layoutInfo);
|
|
73
56
|
}
|
|
74
|
-
}
|
|
57
|
+
}
|
|
75
58
|
/**
|
|
76
59
|
* Estimates layout dimensions for an item at the given index.
|
|
77
60
|
* @param index Index of the item to estimate layout for
|
|
78
61
|
*/
|
|
79
|
-
|
|
80
|
-
|
|
62
|
+
estimateLayout(index) {
|
|
63
|
+
const layout = this.layouts[index];
|
|
81
64
|
layout.width = this.horizontal
|
|
82
65
|
? this.getEstimatedWidth(index)
|
|
83
66
|
: this.boundedSize;
|
|
84
67
|
layout.height = this.getEstimatedHeight(index);
|
|
85
68
|
layout.isWidthMeasured = !this.horizontal;
|
|
86
69
|
layout.enforcedWidth = !this.horizontal;
|
|
87
|
-
}
|
|
70
|
+
}
|
|
88
71
|
/**
|
|
89
72
|
* Returns the total size of the layout area.
|
|
90
73
|
* @returns RVDimension containing width and height of the layout
|
|
91
74
|
*/
|
|
92
|
-
|
|
75
|
+
getLayoutSize() {
|
|
93
76
|
var _a, _b;
|
|
94
77
|
if (this.layouts.length === 0)
|
|
95
78
|
return { width: 0, height: 0 };
|
|
96
|
-
|
|
79
|
+
const lastLayout = this.layouts[this.layouts.length - 1];
|
|
97
80
|
return {
|
|
98
81
|
width: this.horizontal
|
|
99
82
|
? lastLayout.x + lastLayout.width
|
|
@@ -102,77 +85,56 @@ var RVLinearLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
102
85
|
? (_b = (_a = this.tallestItem) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : this.boundedSize
|
|
103
86
|
: lastLayout.y + lastLayout.height,
|
|
104
87
|
};
|
|
105
|
-
}
|
|
88
|
+
}
|
|
106
89
|
/**
|
|
107
90
|
* Normalizes heights of items in horizontal layout to match the tallest item.
|
|
108
91
|
* @param layoutInfo Array of layout information for items
|
|
109
92
|
*/
|
|
110
|
-
|
|
111
|
-
var
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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);
|
|
93
|
+
normalizeLayoutHeights(layoutInfo) {
|
|
94
|
+
var _a, _b;
|
|
95
|
+
let newTallestItem;
|
|
96
|
+
for (const info of layoutInfo) {
|
|
97
|
+
const { index } = info;
|
|
98
|
+
const layout = this.layouts[index];
|
|
99
|
+
if (layout.height > ((_a = layout.minHeight) !== null && _a !== void 0 ? _a : 0) &&
|
|
100
|
+
layout.height > ((_b = newTallestItem === null || newTallestItem === void 0 ? void 0 : newTallestItem.height) !== null && _b !== void 0 ? _b : 0)) {
|
|
101
|
+
newTallestItem = layout;
|
|
129
102
|
}
|
|
130
|
-
finally { if (e_2) throw e_2.error; }
|
|
131
103
|
}
|
|
132
104
|
if (newTallestItem && newTallestItem.height !== this.tallestItemHeight) {
|
|
133
|
-
|
|
105
|
+
let targetMinHeight = newTallestItem.height;
|
|
134
106
|
if (newTallestItem.height < this.tallestItemHeight) {
|
|
135
107
|
this.requiresRepaint = true;
|
|
136
108
|
targetMinHeight = 0;
|
|
137
109
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (targetMinHeight > 0) {
|
|
143
|
-
layout.height = newTallestItem.height;
|
|
144
|
-
}
|
|
145
|
-
layout.minHeight = targetMinHeight;
|
|
110
|
+
// set minHeight for all layouts
|
|
111
|
+
for (const layout of this.layouts) {
|
|
112
|
+
if (targetMinHeight > 0) {
|
|
113
|
+
layout.height = newTallestItem.height;
|
|
146
114
|
}
|
|
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; }
|
|
115
|
+
layout.minHeight = targetMinHeight;
|
|
154
116
|
}
|
|
155
117
|
newTallestItem.minHeight = 0;
|
|
156
118
|
this.tallestItem = newTallestItem;
|
|
157
119
|
this.tallestItemHeight = newTallestItem.height;
|
|
158
120
|
}
|
|
159
|
-
}
|
|
121
|
+
}
|
|
160
122
|
/**
|
|
161
123
|
* Recomputes layouts for items in the given range.
|
|
162
124
|
* Positions items sequentially based on layout direction.
|
|
163
125
|
* @param startIndex Starting index of items to recompute
|
|
164
126
|
* @param endIndex Ending index of items to recompute
|
|
165
127
|
*/
|
|
166
|
-
|
|
167
|
-
for (
|
|
168
|
-
|
|
128
|
+
recomputeLayouts(startIndex, endIndex) {
|
|
129
|
+
for (let i = startIndex; i <= endIndex; i++) {
|
|
130
|
+
const layout = this.getLayout(i);
|
|
169
131
|
// Set positions based on whether this is the first item or not
|
|
170
132
|
if (i === 0) {
|
|
171
133
|
layout.x = 0;
|
|
172
134
|
layout.y = 0;
|
|
173
135
|
}
|
|
174
136
|
else {
|
|
175
|
-
|
|
137
|
+
const prevLayout = this.getLayout(i - 1);
|
|
176
138
|
layout.x = this.horizontal ? prevLayout.x + prevLayout.width : 0;
|
|
177
139
|
layout.y = this.horizontal ? 0 : prevLayout.y + prevLayout.height;
|
|
178
140
|
}
|
|
@@ -184,8 +146,6 @@ var RVLinearLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
184
146
|
layout.minHeight = this.boundedSize;
|
|
185
147
|
}
|
|
186
148
|
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
}(LayoutManager_1.RVLayoutManager));
|
|
190
|
-
exports.RVLinearLayoutManagerImpl = RVLinearLayoutManagerImpl;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
191
151
|
//# sourceMappingURL=LinearLayoutManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinearLayoutManager.js","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/LinearLayoutManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LinearLayoutManager.js","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/LinearLayoutManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RVMasonryLayoutManagerImpl = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
|
-
var LayoutManager_1 = require("./LayoutManager");
|
|
1
|
+
import { RVLayoutManager, } from "./LayoutManager";
|
|
6
2
|
/**
|
|
7
3
|
* MasonryLayoutManager implementation that arranges items in a masonry/pinterest-style layout.
|
|
8
4
|
* Items are placed in columns, with support for items spanning multiple columns.
|
|
9
5
|
* Can optimize item placement to minimize column height differences.
|
|
10
6
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function RVMasonryLayoutManagerImpl(params, previousLayoutManager) {
|
|
7
|
+
export class RVMasonryLayoutManagerImpl extends RVLayoutManager {
|
|
8
|
+
constructor(params, previousLayoutManager) {
|
|
14
9
|
var _a;
|
|
15
|
-
|
|
10
|
+
super(params, previousLayoutManager);
|
|
16
11
|
/** Current column index for sequential placement */
|
|
17
|
-
|
|
12
|
+
this.currentColumn = 0;
|
|
18
13
|
/** If there's a span change for masonry layout, we need to recompute all the widths */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return _this;
|
|
14
|
+
this.fullRelayoutRequired = false;
|
|
15
|
+
this.boundedSize = params.windowSize.width;
|
|
16
|
+
this.optimizeItemArrangement = params.optimizeItemArrangement;
|
|
17
|
+
this.columnHeights = (_a = this.columnHeights) !== null && _a !== void 0 ? _a : Array(this.maxColumns).fill(0);
|
|
24
18
|
}
|
|
25
19
|
/**
|
|
26
20
|
* Updates layout parameters and triggers recomputation if necessary.
|
|
27
21
|
* @param params New layout parameters
|
|
28
22
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
updateLayoutParams(params) {
|
|
24
|
+
const prevMaxColumns = this.maxColumns;
|
|
25
|
+
const prevOptimizeItemArrangement = this.optimizeItemArrangement;
|
|
26
|
+
super.updateLayoutParams(params);
|
|
33
27
|
if (this.boundedSize !== params.windowSize.width ||
|
|
34
28
|
prevMaxColumns !== params.maxColumns ||
|
|
35
29
|
prevOptimizeItemArrangement !== params.optimizeItemArrangement) {
|
|
@@ -42,32 +36,21 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
42
36
|
this.requiresRepaint = true;
|
|
43
37
|
}
|
|
44
38
|
}
|
|
45
|
-
}
|
|
39
|
+
}
|
|
46
40
|
/**
|
|
47
41
|
* Processes layout information for items, updating their dimensions.
|
|
48
42
|
* @param layoutInfo Array of layout information for items (real measurements)
|
|
49
43
|
* @param itemCount Total number of items in the list
|
|
50
44
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
layout.isHeightMeasured = true;
|
|
61
|
-
layout.isWidthMeasured = true;
|
|
62
|
-
this.layouts[index] = layout;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
66
|
-
finally {
|
|
67
|
-
try {
|
|
68
|
-
if (layoutInfo_1_1 && !layoutInfo_1_1.done && (_a = layoutInfo_1.return)) _a.call(layoutInfo_1);
|
|
69
|
-
}
|
|
70
|
-
finally { if (e_1) throw e_1.error; }
|
|
45
|
+
processLayoutInfo(layoutInfo, itemCount) {
|
|
46
|
+
// Update layout information
|
|
47
|
+
for (const info of layoutInfo) {
|
|
48
|
+
const { index, dimensions } = info;
|
|
49
|
+
const layout = this.layouts[index];
|
|
50
|
+
layout.height = dimensions.height;
|
|
51
|
+
layout.isHeightMeasured = true;
|
|
52
|
+
layout.isWidthMeasured = true;
|
|
53
|
+
this.layouts[index] = layout;
|
|
71
54
|
}
|
|
72
55
|
// TODO: Can be optimized
|
|
73
56
|
if (this.fullRelayoutRequired) {
|
|
@@ -75,48 +58,48 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
75
58
|
this.fullRelayoutRequired = false;
|
|
76
59
|
return 0;
|
|
77
60
|
}
|
|
78
|
-
}
|
|
61
|
+
}
|
|
79
62
|
/**
|
|
80
63
|
* Estimates layout dimensions for an item at the given index.
|
|
81
64
|
* Can be called by base class if estimate is required.
|
|
82
65
|
* @param index Index of the item to estimate layout for
|
|
83
66
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
67
|
+
estimateLayout(index) {
|
|
68
|
+
const layout = this.layouts[index];
|
|
86
69
|
// Set width based on columns and span
|
|
87
70
|
layout.width = this.getWidth(index);
|
|
88
71
|
layout.height = this.getEstimatedHeight(index);
|
|
89
72
|
layout.isWidthMeasured = true;
|
|
90
73
|
layout.enforcedWidth = true;
|
|
91
|
-
}
|
|
74
|
+
}
|
|
92
75
|
/**
|
|
93
76
|
* Handles span change for an item.
|
|
94
77
|
* @param index Index of the item
|
|
95
78
|
*/
|
|
96
|
-
|
|
79
|
+
handleSpanChange(index) {
|
|
97
80
|
this.fullRelayoutRequired = true;
|
|
98
|
-
}
|
|
81
|
+
}
|
|
99
82
|
/**
|
|
100
83
|
* Returns the total size of the layout area.
|
|
101
84
|
* @returns RVDimension containing width and height of the layout
|
|
102
85
|
*/
|
|
103
|
-
|
|
86
|
+
getLayoutSize() {
|
|
104
87
|
if (this.layouts.length === 0)
|
|
105
88
|
return { width: 0, height: 0 };
|
|
106
89
|
// Find the tallest column
|
|
107
|
-
|
|
90
|
+
const maxHeight = Math.max(...this.columnHeights);
|
|
108
91
|
return {
|
|
109
92
|
width: this.boundedSize,
|
|
110
93
|
height: maxHeight,
|
|
111
94
|
};
|
|
112
|
-
}
|
|
95
|
+
}
|
|
113
96
|
/**
|
|
114
97
|
* Recomputes layouts for items in the given range.
|
|
115
98
|
* Uses different placement strategies based on optimization settings.
|
|
116
99
|
* @param startIndex Starting index of items to recompute
|
|
117
100
|
* @param endIndex Ending index of items to recompute
|
|
118
101
|
*/
|
|
119
|
-
|
|
102
|
+
recomputeLayouts(startIndex, endIndex) {
|
|
120
103
|
// Reset column heights if starting from the beginning
|
|
121
104
|
if (startIndex === 0) {
|
|
122
105
|
this.columnHeights = Array(this.maxColumns).fill(0);
|
|
@@ -127,11 +110,11 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
127
110
|
// and adjust column heights accordingly
|
|
128
111
|
this.updateColumnHeightsToIndex(startIndex);
|
|
129
112
|
}
|
|
130
|
-
|
|
131
|
-
for (
|
|
132
|
-
|
|
113
|
+
const itemCount = this.layouts.length;
|
|
114
|
+
for (let i = startIndex; i < itemCount; i++) {
|
|
115
|
+
const layout = this.getLayout(i);
|
|
133
116
|
// Skip tracking span because we're not changing widths
|
|
134
|
-
|
|
117
|
+
const span = this.getSpan(i, true);
|
|
135
118
|
if (this.optimizeItemArrangement) {
|
|
136
119
|
if (span === 1) {
|
|
137
120
|
// For single column items, place in the shortest column
|
|
@@ -147,35 +130,35 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
147
130
|
this.placeItemSequentially(layout, span);
|
|
148
131
|
}
|
|
149
132
|
}
|
|
150
|
-
}
|
|
133
|
+
}
|
|
151
134
|
/**
|
|
152
135
|
* Calculates the width of an item based on its span.
|
|
153
136
|
* @param index Index of the item
|
|
154
137
|
* @returns Width of the item
|
|
155
138
|
*/
|
|
156
|
-
|
|
139
|
+
getWidth(index) {
|
|
157
140
|
return (this.boundedSize / this.maxColumns) * this.getSpan(index);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
for (
|
|
141
|
+
}
|
|
142
|
+
updateAllWidths() {
|
|
143
|
+
for (let i = 0; i < this.layouts.length; i++) {
|
|
161
144
|
this.layouts[i].width = this.getWidth(i);
|
|
162
145
|
this.layouts[i].minHeight = undefined;
|
|
163
146
|
}
|
|
164
|
-
}
|
|
147
|
+
}
|
|
165
148
|
/**
|
|
166
149
|
* Places an item sequentially in the next available position.
|
|
167
150
|
* @param layout Layout information for the item
|
|
168
151
|
* @param span Number of columns the item spans
|
|
169
152
|
*/
|
|
170
|
-
|
|
153
|
+
placeItemSequentially(layout, span) {
|
|
171
154
|
// Check if the item can fit in the current row
|
|
172
155
|
if (this.currentColumn + span > this.maxColumns) {
|
|
173
156
|
// Move to the next row
|
|
174
157
|
this.currentColumn = 0;
|
|
175
158
|
}
|
|
176
159
|
// Find the maximum height of the columns this item will span
|
|
177
|
-
|
|
178
|
-
for (
|
|
160
|
+
let maxHeight = this.columnHeights[this.currentColumn];
|
|
161
|
+
for (let col = this.currentColumn + 1; col < this.currentColumn + span; col++) {
|
|
179
162
|
if (col < this.maxColumns) {
|
|
180
163
|
maxHeight = Math.max(maxHeight, this.columnHeights[col]);
|
|
181
164
|
}
|
|
@@ -184,7 +167,7 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
184
167
|
layout.x = (this.boundedSize / this.maxColumns) * this.currentColumn;
|
|
185
168
|
layout.y = maxHeight;
|
|
186
169
|
// Update column heights
|
|
187
|
-
for (
|
|
170
|
+
for (let col = this.currentColumn; col < this.currentColumn + span; col++) {
|
|
188
171
|
if (col < this.maxColumns) {
|
|
189
172
|
this.columnHeights[col] = maxHeight + layout.height;
|
|
190
173
|
}
|
|
@@ -194,16 +177,16 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
194
177
|
if (this.currentColumn >= this.maxColumns) {
|
|
195
178
|
this.currentColumn = 0;
|
|
196
179
|
}
|
|
197
|
-
}
|
|
180
|
+
}
|
|
198
181
|
/**
|
|
199
182
|
* Places a single-column item in the shortest available column.
|
|
200
183
|
* @param layout Layout information for the item
|
|
201
184
|
*/
|
|
202
|
-
|
|
185
|
+
placeSingleColumnItem(layout) {
|
|
203
186
|
// Find the shortest column
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
for (
|
|
187
|
+
let shortestColumnIndex = 0;
|
|
188
|
+
let minHeight = this.columnHeights[0];
|
|
189
|
+
for (let i = 1; i < this.maxColumns; i++) {
|
|
207
190
|
if (this.columnHeights[i] < minHeight) {
|
|
208
191
|
minHeight = this.columnHeights[i];
|
|
209
192
|
shortestColumnIndex = i;
|
|
@@ -214,27 +197,27 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
214
197
|
layout.y = this.columnHeights[shortestColumnIndex];
|
|
215
198
|
// Update the column height
|
|
216
199
|
this.columnHeights[shortestColumnIndex] += layout.height;
|
|
217
|
-
}
|
|
200
|
+
}
|
|
218
201
|
/**
|
|
219
202
|
* Places a multi-column item in the position that minimizes total column heights.
|
|
220
203
|
* @param layout Layout information for the item
|
|
221
204
|
* @param span Number of columns the item spans
|
|
222
205
|
*/
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
206
|
+
placeOptimizedMultiColumnItem(layout, span) {
|
|
207
|
+
let bestStartColumn = 0;
|
|
208
|
+
let minTotalHeight = Number.MAX_VALUE;
|
|
226
209
|
// Try all possible positions
|
|
227
|
-
for (
|
|
210
|
+
for (let startCol = 0; startCol <= this.maxColumns - span; startCol++) {
|
|
228
211
|
// Find the maximum height among the columns this item would span
|
|
229
|
-
|
|
230
|
-
for (
|
|
231
|
-
|
|
212
|
+
let maxHeight = this.columnHeights[startCol];
|
|
213
|
+
for (let col = startCol + 1; col < startCol + span; col++) {
|
|
214
|
+
maxHeight = Math.max(maxHeight, this.columnHeights[col]);
|
|
232
215
|
}
|
|
233
216
|
// Calculate the total height after placing the item
|
|
234
|
-
|
|
235
|
-
for (
|
|
217
|
+
let totalHeight = 0;
|
|
218
|
+
for (let col = 0; col < this.maxColumns; col++) {
|
|
236
219
|
if (col >= startCol && col < startCol + span) {
|
|
237
|
-
totalHeight +=
|
|
220
|
+
totalHeight += maxHeight + layout.height;
|
|
238
221
|
}
|
|
239
222
|
else {
|
|
240
223
|
totalHeight += this.columnHeights[col];
|
|
@@ -247,33 +230,33 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
247
230
|
}
|
|
248
231
|
}
|
|
249
232
|
// Place the item at the best position
|
|
250
|
-
|
|
233
|
+
const maxHeight = Math.max(...this.columnHeights.slice(bestStartColumn, bestStartColumn + span));
|
|
251
234
|
layout.x = (this.boundedSize / this.maxColumns) * bestStartColumn;
|
|
252
235
|
layout.y = maxHeight;
|
|
253
236
|
// Update column heights
|
|
254
|
-
for (
|
|
237
|
+
for (let col = bestStartColumn; col < bestStartColumn + span; col++) {
|
|
255
238
|
this.columnHeights[col] = maxHeight + layout.height;
|
|
256
239
|
}
|
|
257
|
-
}
|
|
240
|
+
}
|
|
258
241
|
/**
|
|
259
242
|
* Updates column heights up to a given index by recalculating item positions.
|
|
260
243
|
* @param index Index to update column heights up to
|
|
261
244
|
*/
|
|
262
|
-
|
|
245
|
+
updateColumnHeightsToIndex(index) {
|
|
263
246
|
// Reset column heights
|
|
264
247
|
this.columnHeights = Array(this.maxColumns).fill(0);
|
|
265
248
|
this.currentColumn = 0;
|
|
266
249
|
// Recalculate column heights up to the given index
|
|
267
|
-
for (
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
250
|
+
for (let i = 0; i < index; i++) {
|
|
251
|
+
const layout = this.layouts[i];
|
|
252
|
+
const itemWidth = layout.width;
|
|
253
|
+
const columnWidth = this.boundedSize / this.maxColumns;
|
|
254
|
+
const span = Math.round(itemWidth / columnWidth);
|
|
272
255
|
// Find which columns this item spans
|
|
273
|
-
|
|
274
|
-
|
|
256
|
+
const startColumn = Math.round(layout.x / columnWidth);
|
|
257
|
+
const endColumn = Math.min(startColumn + span, this.maxColumns);
|
|
275
258
|
// Update column heights
|
|
276
|
-
for (
|
|
259
|
+
for (let col = startColumn; col < endColumn; col++) {
|
|
277
260
|
this.columnHeights[col] = Math.max(this.columnHeights[col], layout.y + layout.height);
|
|
278
261
|
}
|
|
279
262
|
// Update current column for non-optimized layout
|
|
@@ -281,8 +264,6 @@ var RVMasonryLayoutManagerImpl = /** @class */ (function (_super) {
|
|
|
281
264
|
this.currentColumn = (startColumn + span) % this.maxColumns;
|
|
282
265
|
}
|
|
283
266
|
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
}(LayoutManager_1.RVLayoutManager));
|
|
287
|
-
exports.RVMasonryLayoutManagerImpl = RVMasonryLayoutManagerImpl;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
288
269
|
//# sourceMappingURL=MasonryLayoutManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MasonryLayoutManager.js","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/MasonryLayoutManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MasonryLayoutManager.js","sourceRoot":"","sources":["../../../src/recyclerview/layout-managers/MasonryLayoutManager.ts"],"names":[],"mappings":"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"}
|