@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,323 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecyclerViewManager = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var GridLayoutManager_1 = require("./layout-managers/GridLayoutManager");
6
+ var LinearLayoutManager_1 = require("./layout-managers/LinearLayoutManager");
7
+ var MasonryLayoutManager_1 = require("./layout-managers/MasonryLayoutManager");
8
+ var RecycleKeyManager_1 = require("./RecycleKeyManager");
9
+ var EngagedIndicesTracker_1 = require("./helpers/EngagedIndicesTracker");
10
+ var ViewabilityManager_1 = tslib_1.__importDefault(require("../viewability/ViewabilityManager"));
11
+ // Abstracts layout manager, key manager and viewability manager and generates render stack (progressively on load)
12
+ var RecyclerViewManager = /** @class */ (function () {
13
+ function RecyclerViewManager(props) {
14
+ var _this = this;
15
+ this.initialDrawBatchSize = 1;
16
+ // Map of index to key
17
+ this.renderStack = new Map();
18
+ this.isFirstLayoutComplete = false;
19
+ this.hasRenderedProgressively = false;
20
+ this.disableRecycling = false;
21
+ this.firstItemOffset = 0;
22
+ // updates render stack based on the engaged indices which are sorted. Recycles unused keys.
23
+ // TODO: Call getKey anyway if stableIds are present
24
+ this.updateRenderStack = function (engagedIndices) {
25
+ var e_1, _a, e_2, _b, e_3, _c;
26
+ var _d, _e;
27
+ //console.log("updateRenderStack", engagedIndices);
28
+ var newRenderStack = new Map();
29
+ try {
30
+ for (var _f = tslib_1.__values(_this.renderStack), _g = _f.next(); !_g.done; _g = _f.next()) {
31
+ var _h = tslib_1.__read(_g.value, 2), index = _h[0], key = _h[1];
32
+ if (!engagedIndices.includes(index)) {
33
+ _this.recycleKeyManager.recycleKey(key);
34
+ }
35
+ }
36
+ }
37
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
38
+ finally {
39
+ try {
40
+ if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
41
+ }
42
+ finally { if (e_1) throw e_1.error; }
43
+ }
44
+ if (_this.disableRecycling) {
45
+ _this.recycleKeyManager.clearPool();
46
+ }
47
+ try {
48
+ for (var engagedIndices_1 = tslib_1.__values(engagedIndices), engagedIndices_1_1 = engagedIndices_1.next(); !engagedIndices_1_1.done; engagedIndices_1_1 = engagedIndices_1.next()) {
49
+ var index = engagedIndices_1_1.value;
50
+ var newKey = _this.recycleKeyManager.getKey(_this.getItemType(index), _this.getStableId(index), _this.renderStack.get(index));
51
+ newRenderStack.set(index, newKey);
52
+ }
53
+ }
54
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
55
+ finally {
56
+ try {
57
+ if (engagedIndices_1_1 && !engagedIndices_1_1.done && (_b = engagedIndices_1.return)) _b.call(engagedIndices_1);
58
+ }
59
+ finally { if (e_2) throw e_2.error; }
60
+ }
61
+ try {
62
+ // DANGER
63
+ for (var _j = tslib_1.__values(_this.renderStack), _k = _j.next(); !_k.done; _k = _j.next()) {
64
+ var _l = tslib_1.__read(_k.value, 2), index = _l[0], key = _l[1];
65
+ if (_this.recycleKeyManager.hasKeyInPool(key) &&
66
+ !newRenderStack.has(index) &&
67
+ index < ((_e = (_d = _this.props.data) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0)) {
68
+ newRenderStack.set(index, key);
69
+ }
70
+ }
71
+ }
72
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
73
+ finally {
74
+ try {
75
+ if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
76
+ }
77
+ finally { if (e_3) throw e_3.error; }
78
+ }
79
+ _this.renderStack = newRenderStack;
80
+ };
81
+ this.props = props;
82
+ this.engagedIndicesTracker = new EngagedIndicesTracker_1.RVEngagedIndicesTrackerImpl();
83
+ this.recycleKeyManager = new RecycleKeyManager_1.RecycleKeyManagerImpl();
84
+ this.itemViewabilityManager = new ViewabilityManager_1.default(this);
85
+ }
86
+ RecyclerViewManager.prototype.updateProps = function (props) {
87
+ var _a, _b;
88
+ this.props = props;
89
+ this.engagedIndicesTracker.drawDistance =
90
+ (_a = props.drawDistance) !== null && _a !== void 0 ? _a : this.engagedIndicesTracker.drawDistance;
91
+ if (this.props.drawDistance === 0) {
92
+ this.initialDrawBatchSize = 1;
93
+ }
94
+ else {
95
+ this.initialDrawBatchSize = ((_b = props.numColumns) !== null && _b !== void 0 ? _b : 1) * 2;
96
+ }
97
+ };
98
+ /**
99
+ * Updates the scroll offset and returns the engaged indices if any
100
+ * @param offset
101
+ * @param velocity
102
+ */
103
+ RecyclerViewManager.prototype.updateScrollOffset = function (offset, velocity) {
104
+ if (this.layoutManager) {
105
+ var engagedIndices = this.engagedIndicesTracker.updateScrollOffset(offset - this.firstItemOffset, velocity, this.layoutManager);
106
+ if (engagedIndices) {
107
+ this.updateRenderStack(engagedIndices);
108
+ return engagedIndices;
109
+ }
110
+ }
111
+ return undefined;
112
+ };
113
+ RecyclerViewManager.prototype.getIsFirstLayoutComplete = function () {
114
+ return this.isFirstLayoutComplete;
115
+ };
116
+ RecyclerViewManager.prototype.getLayout = function (index) {
117
+ if (!this.layoutManager) {
118
+ throw new Error("LayoutManager is not initialized, layout info is unavailable");
119
+ }
120
+ return this.layoutManager.getLayout(index);
121
+ };
122
+ // Doesn't include header / foot etc
123
+ RecyclerViewManager.prototype.getChildContainerDimensions = function () {
124
+ if (!this.layoutManager) {
125
+ throw new Error("LayoutManager is not initialized, child container layout is unavailable");
126
+ }
127
+ return this.layoutManager.getLayoutSize();
128
+ };
129
+ RecyclerViewManager.prototype.getRenderStack = function () {
130
+ return this.renderStack;
131
+ };
132
+ RecyclerViewManager.prototype.getWindowSize = function () {
133
+ if (!this.layoutManager) {
134
+ throw new Error("LayoutManager is not initialized, window size is unavailable");
135
+ }
136
+ return this.layoutManager.getWindowsSize();
137
+ };
138
+ // Includes first item offset correction
139
+ RecyclerViewManager.prototype.getLastScrollOffset = function () {
140
+ return this.engagedIndicesTracker.scrollOffset;
141
+ };
142
+ // Doesn't include first item offset correction
143
+ RecyclerViewManager.prototype.getAbsoluteLastScrollOffset = function () {
144
+ return this.engagedIndicesTracker.scrollOffset + this.firstItemOffset;
145
+ };
146
+ RecyclerViewManager.prototype.updateLayoutParams = function (windowSize, firstItemOffset) {
147
+ var _this = this;
148
+ var _a, _b, _c, _d, _e;
149
+ this.firstItemOffset = firstItemOffset;
150
+ var LayoutManagerClass = this.getLayoutManagerClass();
151
+ if (this.layoutManager &&
152
+ Boolean((_a = this.layoutManager) === null || _a === void 0 ? void 0 : _a.isHorizontal()) !==
153
+ Boolean(this.props.horizontal)) {
154
+ throw new Error("Horizontal prop cannot be toggled, you can use a key on FlashList to recreate it.");
155
+ }
156
+ if (!(this.layoutManager instanceof LayoutManagerClass)) {
157
+ //console.log("-----> new LayoutManagerClass");
158
+ this.layoutManager = new LayoutManagerClass({
159
+ windowSize: windowSize,
160
+ maxColumns: (_b = this.props.numColumns) !== null && _b !== void 0 ? _b : 1,
161
+ horizontal: !!this.props.horizontal,
162
+ optimizeItemArrangement: (_c = this.props.optimizeItemArrangement) !== null && _c !== void 0 ? _c : true,
163
+ overrideItemLayout: function (index, layout) {
164
+ var _a, _b, _c;
165
+ (_b = (_a = _this.props) === null || _a === void 0 ? void 0 : _a.overrideItemLayout) === null || _b === void 0 ? void 0 : _b.call(_a, layout, _this.props.data[index], index, (_c = _this.props.numColumns) !== null && _c !== void 0 ? _c : 1, _this.props.extraData);
166
+ },
167
+ }, this.layoutManager);
168
+ }
169
+ else {
170
+ this.layoutManager.updateLayoutParams({
171
+ windowSize: windowSize,
172
+ maxColumns: (_d = this.props.numColumns) !== null && _d !== void 0 ? _d : 1,
173
+ horizontal: !!this.props.horizontal,
174
+ optimizeItemArrangement: (_e = this.props.optimizeItemArrangement) !== null && _e !== void 0 ? _e : true,
175
+ });
176
+ }
177
+ };
178
+ RecyclerViewManager.prototype.hasLayout = function () {
179
+ return this.layoutManager !== undefined;
180
+ };
181
+ RecyclerViewManager.prototype.getVisibleIndices = function () {
182
+ if (!this.layoutManager) {
183
+ throw new Error("LayoutManager is not initialized, visible indices are not unavailable");
184
+ }
185
+ return this.engagedIndicesTracker.computeVisibleIndices(this.layoutManager);
186
+ };
187
+ RecyclerViewManager.prototype.getEngagedIndices = function () {
188
+ return this.engagedIndicesTracker.getEngagedIndices();
189
+ };
190
+ RecyclerViewManager.prototype.modifyChildrenLayout = function (layoutInfo, dataLength) {
191
+ var _a, _b;
192
+ (_a = this.layoutManager) === null || _a === void 0 ? void 0 : _a.modifyLayout(layoutInfo, dataLength);
193
+ if (dataLength === 0) {
194
+ return false;
195
+ }
196
+ if ((_b = this.layoutManager) === null || _b === void 0 ? void 0 : _b.requiresRepaint) {
197
+ // console.log("requiresRepaint triggered");
198
+ this.layoutManager.requiresRepaint = false;
199
+ return true;
200
+ }
201
+ if (this.hasRenderedProgressively) {
202
+ return this.recomputeEngagedIndices() !== undefined; //TODO: Move to an effect as this can block paint for more than necessary
203
+ }
204
+ else {
205
+ this.renderProgressively();
206
+ }
207
+ return !this.hasRenderedProgressively;
208
+ };
209
+ RecyclerViewManager.prototype.computeItemViewability = function () {
210
+ // Using higher buffer for masonry to avoid missing items
211
+ this.itemViewabilityManager.shouldListenToVisibleIndices &&
212
+ this.itemViewabilityManager.updateViewableItems(this.props.masonry
213
+ ? this.engagedIndicesTracker.getEngagedIndices().toArray()
214
+ : this.getVisibleIndices().toArray());
215
+ };
216
+ RecyclerViewManager.prototype.recordInteraction = function () {
217
+ this.itemViewabilityManager.recordInteraction();
218
+ };
219
+ RecyclerViewManager.prototype.recomputeViewableItems = function () {
220
+ this.itemViewabilityManager.recomputeViewableItems();
221
+ };
222
+ RecyclerViewManager.prototype.processDataUpdate = function () {
223
+ var _a, _b;
224
+ if (this.hasLayout()) {
225
+ this.modifyChildrenLayout([], (_b = (_a = this.props.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);
226
+ if (!this.recomputeEngagedIndices()) {
227
+ // recomputeEngagedIndices will update the render stack if there are any changes in the engaged indices.
228
+ // It's important to update render stack so that elements are assgined right keys incase items were deleted.
229
+ this.updateRenderStack(this.engagedIndicesTracker.getEngagedIndices());
230
+ }
231
+ }
232
+ };
233
+ RecyclerViewManager.prototype.recomputeEngagedIndices = function () {
234
+ return this.updateScrollOffset(this.getAbsoluteLastScrollOffset());
235
+ };
236
+ RecyclerViewManager.prototype.dispose = function () {
237
+ this.itemViewabilityManager.dispose();
238
+ };
239
+ RecyclerViewManager.prototype.getInitialScrollIndex = function () {
240
+ var _a, _b;
241
+ return ((_a = this.props.initialScrollIndex) !== null && _a !== void 0 ? _a : (((_b = this.props.maintainVisibleContentPosition) === null || _b === void 0 ? void 0 : _b.startRenderingFromBottom)
242
+ ? this.getDataLength() - 1
243
+ : undefined));
244
+ };
245
+ RecyclerViewManager.prototype.getDataLength = function () {
246
+ var _a, _b;
247
+ return (_b = (_a = this.props.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
248
+ };
249
+ RecyclerViewManager.prototype.getLayoutManagerClass = function () {
250
+ var _a, _b;
251
+ // throw errors for incompatible props
252
+ if (this.props.masonry && this.props.horizontal) {
253
+ throw new Error("Masonry and horizontal props are incompatible");
254
+ }
255
+ if (((_a = this.props.numColumns) !== null && _a !== void 0 ? _a : 1) > 1 && this.props.horizontal) {
256
+ throw new Error("numColumns and horizontal props are incompatible");
257
+ }
258
+ return this.props.masonry
259
+ ? MasonryLayoutManager_1.RVMasonryLayoutManagerImpl
260
+ : ((_b = this.props.numColumns) !== null && _b !== void 0 ? _b : 1) > 1 && !this.props.horizontal
261
+ ? GridLayoutManager_1.RVGridLayoutManagerImpl
262
+ : LinearLayoutManager_1.RVLinearLayoutManagerImpl;
263
+ };
264
+ RecyclerViewManager.prototype.applyInitialScrollAdjustment = function () {
265
+ var _a;
266
+ if (!this.layoutManager || this.getDataLength() === 0) {
267
+ return;
268
+ }
269
+ var initialScrollIndex = this.getInitialScrollIndex();
270
+ var initialItemLayout = (_a = this.layoutManager) === null || _a === void 0 ? void 0 : _a.getLayout(initialScrollIndex !== null && initialScrollIndex !== void 0 ? initialScrollIndex : 0);
271
+ var initialItemOffset = this.props.horizontal
272
+ ? initialItemLayout === null || initialItemLayout === void 0 ? void 0 : initialItemLayout.x
273
+ : initialItemLayout === null || initialItemLayout === void 0 ? void 0 : initialItemLayout.y;
274
+ if (initialScrollIndex !== undefined) {
275
+ // console.log(
276
+ // "initialItemOffset",
277
+ // initialScrollIndex,
278
+ // initialItemOffset,
279
+ // this.firstItemOffset
280
+ // );
281
+ this.layoutManager.recomputeLayouts(0, initialScrollIndex);
282
+ this.engagedIndicesTracker.scrollOffset =
283
+ initialItemOffset !== null && initialItemOffset !== void 0 ? initialItemOffset : 0 + this.firstItemOffset;
284
+ }
285
+ else {
286
+ //console.log("initialItemOffset", initialItemOffset, this.firstItemOffset);
287
+ this.engagedIndicesTracker.scrollOffset =
288
+ (initialItemOffset !== null && initialItemOffset !== void 0 ? initialItemOffset : 0) - this.firstItemOffset;
289
+ }
290
+ };
291
+ RecyclerViewManager.prototype.renderProgressively = function () {
292
+ var layoutManager = this.layoutManager;
293
+ if (layoutManager) {
294
+ this.applyInitialScrollAdjustment();
295
+ var visibleIndices = this.getVisibleIndices();
296
+ //console.log("---------> visibleIndices", visibleIndices);
297
+ this.hasRenderedProgressively = visibleIndices.every(function (index) {
298
+ return layoutManager.getLayout(index).isHeightMeasured &&
299
+ layoutManager.getLayout(index).isWidthMeasured;
300
+ });
301
+ if (this.hasRenderedProgressively) {
302
+ this.isFirstLayoutComplete = true;
303
+ }
304
+ // If everything is measured then render stack will be in sync. The buffer items will get rendered in the next update
305
+ // triggered by the useOnLoad hook.
306
+ !this.hasRenderedProgressively &&
307
+ this.updateRenderStack(
308
+ // pick first n indices from visible ones and n is size of renderStack
309
+ visibleIndices.slice(0, Math.min(visibleIndices.length, this.renderStack.size + this.initialDrawBatchSize)));
310
+ }
311
+ };
312
+ RecyclerViewManager.prototype.getItemType = function (index) {
313
+ var _a, _b, _c;
314
+ return ((_c = (_b = (_a = this.props).getItemType) === null || _b === void 0 ? void 0 : _b.call(_a, this.props.data[index], index)) !== null && _c !== void 0 ? _c : "default").toString();
315
+ };
316
+ RecyclerViewManager.prototype.getStableId = function (index) {
317
+ var _a, _b, _c;
318
+ return ((_c = (_b = (_a = this.props).keyExtractor) === null || _b === void 0 ? void 0 : _b.call(_a, this.props.data[index], index)) !== null && _c !== void 0 ? _c : index.toString());
319
+ };
320
+ return RecyclerViewManager;
321
+ }());
322
+ exports.RecyclerViewManager = RecyclerViewManager;
323
+ //# sourceMappingURL=RecyclerViewManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerViewManager.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { FlashListProps } from "../FlashListProps";
2
+ import { ScrollViewProps } from "react-native";
3
+ export interface RecyclerViewProps<TItem> extends Omit<FlashListProps<TItem>, "contentContainerStyle"> {
4
+ /**
5
+ * Style for the RecyclerView's parent container.
6
+ */
7
+ contentContainerStyle?: ScrollViewProps["contentContainerStyle"];
8
+ }
9
+ //# sourceMappingURL=RecyclerViewProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerViewProps.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,iBAAiB,CAAC,KAAK,CACtC,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAC5D;;OAEG;IACH,qBAAqB,CAAC,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;CAClE"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=RecyclerViewProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerViewProps.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerViewProps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * ViewHolder is a core component in FlashList that manages individual item rendering and layout.
3
+ * It handles the rendering of list items, separators, and manages layout updates for each item.
4
+ * The component is memoized to prevent unnecessary re-renders and includes layout comparison logic.
5
+ */
6
+ import React, { RefObject } from "react";
7
+ import { FlashListProps, RenderTarget } from "../FlashListProps";
8
+ import { RVDimension, RVLayout } from "./layout-managers/LayoutManager";
9
+ import { CompatView } from "./components/CompatView";
10
+ /**
11
+ * Props interface for the ViewHolder component
12
+ * @template TItem - The type of item being rendered in the list
13
+ */
14
+ export interface ViewHolderProps<TItem> {
15
+ /** Index of the item in the data array */
16
+ index: number;
17
+ /** Layout information for positioning and sizing the item */
18
+ layout: RVLayout;
19
+ /** Map to store refs for each ViewHolder instance, keyed by index */
20
+ refHolder: Map<number, RefObject<CompatView | null>>;
21
+ /** Additional data passed to renderItem that can trigger re-renders */
22
+ extraData: any;
23
+ /** Specifies the rendering target (e.g., "Cell", "StickyHeader") */
24
+ target: RenderTarget;
25
+ /** The actual item data to be rendered */
26
+ item: TItem;
27
+ /** The next item in the list, used for rendering separators */
28
+ trailingItem: TItem | undefined;
29
+ /** Function to render the item content */
30
+ renderItem: FlashListProps<TItem>["renderItem"];
31
+ /** Optional custom component to wrap each item */
32
+ CellRendererComponent?: FlashListProps<TItem>["CellRendererComponent"];
33
+ /** Optional component to render between items */
34
+ ItemSeparatorComponent?: FlashListProps<TItem>["ItemSeparatorComponent"];
35
+ /** Whether the list is horizontal or vertical */
36
+ horizontal?: FlashListProps<TItem>["horizontal"];
37
+ /** Callback when the item's size changes */
38
+ onSizeChanged?: (index: number, size: RVDimension) => void;
39
+ }
40
+ /**
41
+ * Memoized ViewHolder component that prevents unnecessary re-renders by comparing props
42
+ * @template TItem - The type of item being rendered in the list
43
+ */
44
+ export declare const ViewHolder: React.MemoExoticComponent<(<TItem>(props: ViewHolderProps<TItem>) => React.JSX.Element)>;
45
+ //# sourceMappingURL=ViewHolder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewHolder.d.ts","sourceRoot":"","sources":["../../src/recyclerview/ViewHolder.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,EACZ,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,QAAQ,CAAC;IACjB,qEAAqE;IACrE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;IACrD,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC;IACf,oEAAoE;IACpE,MAAM,EAAE,YAAY,CAAC;IACrB,0CAA0C;IAC1C,IAAI,EAAE,KAAK,CAAC;IACZ,+DAA+D;IAC/D,YAAY,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,0CAA0C;IAC1C,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACvE,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACzE,iDAAiD;IACjD,UAAU,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5D;AA8ED;;;GAGG;AACH,eAAO,MAAM,UAAU,0FAmBtB,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * ViewHolder is a core component in FlashList that manages individual item rendering and layout.
4
+ * It handles the rendering of list items, separators, and manages layout updates for each item.
5
+ * The component is memoized to prevent unnecessary re-renders and includes layout comparison logic.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ViewHolder = void 0;
9
+ var tslib_1 = require("tslib");
10
+ var react_1 = tslib_1.__importStar(require("react"));
11
+ var CompatView_1 = require("./components/CompatView");
12
+ /**
13
+ * Internal ViewHolder component that handles the actual rendering of list items
14
+ * @template TItem - The type of item being rendered in the list
15
+ */
16
+ var ViewHolderInternal = function (props) {
17
+ // create ref for View
18
+ var viewRef = (0, react_1.useRef)(null);
19
+ var index = props.index, refHolder = props.refHolder, layout = props.layout, onSizeChanged = props.onSizeChanged, renderItem = props.renderItem, extraData = props.extraData, item = props.item, target = props.target, CellRendererComponent = props.CellRendererComponent, ItemSeparatorComponent = props.ItemSeparatorComponent, trailingItem = props.trailingItem, horizontal = props.horizontal;
20
+ (0, react_1.useLayoutEffect)(function () {
21
+ refHolder.set(index, viewRef);
22
+ return function () {
23
+ if (refHolder.get(index) === viewRef) {
24
+ refHolder.delete(index);
25
+ }
26
+ };
27
+ }, [index, refHolder]);
28
+ var onLayout = (0, react_1.useCallback)(function (event) {
29
+ onSizeChanged === null || onSizeChanged === void 0 ? void 0 : onSizeChanged(index, event.nativeEvent.layout);
30
+ }, [index, onSizeChanged]);
31
+ var separator = (0, react_1.useMemo)(function () {
32
+ return ItemSeparatorComponent ? (react_1.default.createElement(ItemSeparatorComponent, { leadingItem: item, trailingItem: trailingItem })) : null;
33
+ }, [ItemSeparatorComponent, item, trailingItem]);
34
+ //console.log("ViewHolder re-render", index);
35
+ var children = (0, react_1.useMemo)(function () {
36
+ var _a;
37
+ return (_a = renderItem === null || renderItem === void 0 ? void 0 : renderItem({ item: item, index: index, extraData: extraData, target: target })) !== null && _a !== void 0 ? _a : null;
38
+ }, [item, index, extraData, target, renderItem]);
39
+ var style = {
40
+ flexDirection: horizontal ? "row" : "column",
41
+ position: target === "StickyHeader" ? "relative" : "absolute",
42
+ width: layout.enforcedWidth ? layout.width : undefined,
43
+ height: layout.enforcedHeight ? layout.height : undefined,
44
+ minHeight: layout.minHeight,
45
+ minWidth: layout.minWidth,
46
+ maxHeight: layout.maxHeight,
47
+ maxWidth: layout.maxWidth,
48
+ left: layout.x,
49
+ top: layout.y,
50
+ zIndex: 0,
51
+ };
52
+ //TODO: Fix this type issue
53
+ var CompatContainer = (CellRendererComponent !== null && CellRendererComponent !== void 0 ? CellRendererComponent : CompatView_1.CompatView);
54
+ return (react_1.default.createElement(CompatContainer, { ref: viewRef, onLayout: onLayout, style: style },
55
+ children,
56
+ separator));
57
+ };
58
+ /**
59
+ * Memoized ViewHolder component that prevents unnecessary re-renders by comparing props
60
+ * @template TItem - The type of item being rendered in the list
61
+ */
62
+ exports.ViewHolder = react_1.default.memo(ViewHolderInternal, function (prevProps, nextProps) {
63
+ // compare all props and spread layout
64
+ return (prevProps.index === nextProps.index &&
65
+ areLayoutsEqual(prevProps.layout, nextProps.layout) &&
66
+ prevProps.refHolder === nextProps.refHolder &&
67
+ prevProps.onSizeChanged === nextProps.onSizeChanged &&
68
+ prevProps.extraData === nextProps.extraData &&
69
+ prevProps.target === nextProps.target &&
70
+ prevProps.item === nextProps.item &&
71
+ prevProps.renderItem === nextProps.renderItem &&
72
+ prevProps.CellRendererComponent === nextProps.CellRendererComponent &&
73
+ prevProps.ItemSeparatorComponent === nextProps.ItemSeparatorComponent &&
74
+ prevProps.trailingItem === nextProps.trailingItem &&
75
+ prevProps.horizontal === nextProps.horizontal);
76
+ });
77
+ /**
78
+ * Compares two RVLayout objects to determine if they are equal
79
+ * Used in the memo comparison function to prevent unnecessary re-renders
80
+ * @param prevLayout - Previous layout object
81
+ * @param nextLayout - Next layout object
82
+ * @returns boolean indicating if layouts are equal
83
+ */
84
+ function areLayoutsEqual(prevLayout, nextLayout) {
85
+ return (prevLayout.x === nextLayout.x &&
86
+ prevLayout.y === nextLayout.y &&
87
+ prevLayout.width === nextLayout.width &&
88
+ prevLayout.height === nextLayout.height &&
89
+ prevLayout.enforcedWidth === nextLayout.enforcedWidth &&
90
+ prevLayout.enforcedHeight === nextLayout.enforcedHeight &&
91
+ prevLayout.minWidth === nextLayout.minWidth &&
92
+ prevLayout.minHeight === nextLayout.minHeight &&
93
+ prevLayout.maxWidth === nextLayout.maxWidth &&
94
+ prevLayout.maxHeight === nextLayout.maxHeight);
95
+ }
96
+ //# sourceMappingURL=ViewHolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewHolder.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolder.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * ViewHolderCollection is a container component that manages multiple ViewHolder instances.
3
+ * It handles the rendering of a collection of list items, manages layout updates,
4
+ * and coordinates with the RecyclerView context for layout changes.
5
+ */
6
+ import React from "react";
7
+ import { ViewHolderProps } from "./ViewHolder";
8
+ import { RVDimension, RVLayout } from "./layout-managers/LayoutManager";
9
+ import { FlashListProps } from "../FlashListProps";
10
+ /**
11
+ * Props interface for the ViewHolderCollection component
12
+ * @template TItem - The type of items in the data array
13
+ */
14
+ export interface ViewHolderCollectionProps<TItem> {
15
+ /** The data array to be rendered */
16
+ data: FlashListProps<TItem>["data"];
17
+ /** Map of indices to React keys for each rendered item */
18
+ renderStack: Map<number, string>;
19
+ /** Function to get layout information for a specific index */
20
+ getLayout: (index: number) => RVLayout;
21
+ /** Ref to control layout updates from parent components */
22
+ viewHolderCollectionRef: React.Ref<ViewHolderCollectionRef>;
23
+ /** Map to store refs for each ViewHolder instance */
24
+ refHolder: ViewHolderProps<TItem>["refHolder"];
25
+ /** Callback when any item's size changes */
26
+ onSizeChanged: ViewHolderProps<TItem>["onSizeChanged"];
27
+ /** Function to render each item */
28
+ renderItem: FlashListProps<TItem>["renderItem"];
29
+ /** Additional data passed to renderItem that can trigger re-renders */
30
+ extraData: any;
31
+ /** Function to get the container's layout dimensions */
32
+ getChildContainerLayout: () => RVDimension | undefined;
33
+ /** Callback after layout effects are committed */
34
+ onCommitLayoutEffect?: () => void;
35
+ /** Callback after effects are committed */
36
+ onCommitEffect?: () => void;
37
+ /** Optional custom component to wrap each item */
38
+ CellRendererComponent?: FlashListProps<TItem>["CellRendererComponent"];
39
+ /** Optional component to render between items */
40
+ ItemSeparatorComponent?: FlashListProps<TItem>["ItemSeparatorComponent"];
41
+ /** Whether the list is horizontal or vertical */
42
+ horizontal: FlashListProps<TItem>["horizontal"];
43
+ }
44
+ /**
45
+ * Ref interface for ViewHolderCollection that exposes methods to control layout updates
46
+ */
47
+ export interface ViewHolderCollectionRef {
48
+ /** Forces a layout update by triggering a re-render */
49
+ commitLayout: () => void;
50
+ }
51
+ /**
52
+ * ViewHolderCollection component that manages the rendering of multiple ViewHolder instances
53
+ * and handles layout updates for the entire collection
54
+ * @template TItem - The type of items in the data array
55
+ */
56
+ export declare const ViewHolderCollection: <TItem>(props: ViewHolderCollectionProps<TItem>) => React.JSX.Element;
57
+ //# sourceMappingURL=ViewHolderCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewHolderCollection.d.ts","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;GAGG;AACH,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC9C,oCAAoC;IACpC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,0DAA0D;IAC1D,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,8DAA8D;IAC9D,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;IACvC,2DAA2D;IAC3D,uBAAuB,EAAE,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC5D,qDAAqD;IACrD,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;IACvD,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC;IACf,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IACvD,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACvE,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACzE,iDAAiD;IACjD,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,uEAsGhC,CAAC"}