@depup/react-virtualized 9.22.6-depup.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.
Files changed (254) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +34 -0
  3. package/changes.json +22 -0
  4. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.example.js +184 -0
  5. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.jest.js +338 -0
  6. package/dist/commonjs/ArrowKeyStepper/ArrowKeyStepper.js +204 -0
  7. package/dist/commonjs/ArrowKeyStepper/index.js +19 -0
  8. package/dist/commonjs/ArrowKeyStepper/types.js +5 -0
  9. package/dist/commonjs/AutoSizer/AutoSizer.example.js +104 -0
  10. package/dist/commonjs/AutoSizer/AutoSizer.jest.js +341 -0
  11. package/dist/commonjs/AutoSizer/AutoSizer.js +199 -0
  12. package/dist/commonjs/AutoSizer/AutoSizer.ssr.js +25 -0
  13. package/dist/commonjs/AutoSizer/index.js +19 -0
  14. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +100 -0
  15. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +99 -0
  16. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +107 -0
  17. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +102 -0
  18. package/dist/commonjs/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +107 -0
  19. package/dist/commonjs/CellMeasurer/CellMeasurer.example.js +129 -0
  20. package/dist/commonjs/CellMeasurer/CellMeasurer.jest.js +345 -0
  21. package/dist/commonjs/CellMeasurer/CellMeasurer.js +195 -0
  22. package/dist/commonjs/CellMeasurer/CellMeasurerCache.jest.js +298 -0
  23. package/dist/commonjs/CellMeasurer/CellMeasurerCache.js +202 -0
  24. package/dist/commonjs/CellMeasurer/index.js +22 -0
  25. package/dist/commonjs/CellMeasurer/types.js +14 -0
  26. package/dist/commonjs/Collection/Collection.example.js +231 -0
  27. package/dist/commonjs/Collection/Collection.jest.js +829 -0
  28. package/dist/commonjs/Collection/Collection.js +266 -0
  29. package/dist/commonjs/Collection/CollectionView.js +553 -0
  30. package/dist/commonjs/Collection/Section.jest.js +63 -0
  31. package/dist/commonjs/Collection/Section.js +57 -0
  32. package/dist/commonjs/Collection/SectionManager.jest.js +121 -0
  33. package/dist/commonjs/Collection/SectionManager.js +134 -0
  34. package/dist/commonjs/Collection/TestData.js +77 -0
  35. package/dist/commonjs/Collection/index.js +15 -0
  36. package/dist/commonjs/Collection/types.js +22 -0
  37. package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.jest.js +34 -0
  38. package/dist/commonjs/Collection/utils/calculateSizeAndPositionData.js +38 -0
  39. package/dist/commonjs/ColumnSizer/ColumnSizer.example.js +159 -0
  40. package/dist/commonjs/ColumnSizer/ColumnSizer.jest.js +129 -0
  41. package/dist/commonjs/ColumnSizer/ColumnSizer.js +103 -0
  42. package/dist/commonjs/ColumnSizer/index.js +15 -0
  43. package/dist/commonjs/Grid/Grid.example.js +330 -0
  44. package/dist/commonjs/Grid/Grid.jest.js +2561 -0
  45. package/dist/commonjs/Grid/Grid.js +1432 -0
  46. package/dist/commonjs/Grid/Grid.ssr.js +62 -0
  47. package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.jest.js +92 -0
  48. package/dist/commonjs/Grid/accessibilityOverscanIndicesGetter.js +40 -0
  49. package/dist/commonjs/Grid/defaultCellRangeRenderer.js +139 -0
  50. package/dist/commonjs/Grid/defaultOverscanIndicesGetter.jest.js +92 -0
  51. package/dist/commonjs/Grid/defaultOverscanIndicesGetter.js +36 -0
  52. package/dist/commonjs/Grid/index.js +40 -0
  53. package/dist/commonjs/Grid/types.js +8 -0
  54. package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.jest.js +375 -0
  55. package/dist/commonjs/Grid/utils/CellSizeAndPositionManager.js +296 -0
  56. package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +201 -0
  57. package/dist/commonjs/Grid/utils/ScalingCellSizeAndPositionManager.js +204 -0
  58. package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +84 -0
  59. package/dist/commonjs/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +59 -0
  60. package/dist/commonjs/Grid/utils/maxElementSize.js +22 -0
  61. package/dist/commonjs/Grid/utils/updateScrollIndexHelper.jest.js +180 -0
  62. package/dist/commonjs/Grid/utils/updateScrollIndexHelper.js +85 -0
  63. package/dist/commonjs/InfiniteLoader/InfiniteLoader.example.js +179 -0
  64. package/dist/commonjs/InfiniteLoader/InfiniteLoader.jest.js +571 -0
  65. package/dist/commonjs/InfiniteLoader/InfiniteLoader.js +274 -0
  66. package/dist/commonjs/InfiniteLoader/index.js +15 -0
  67. package/dist/commonjs/List/List.example.js +236 -0
  68. package/dist/commonjs/List/List.jest.js +517 -0
  69. package/dist/commonjs/List/List.js +318 -0
  70. package/dist/commonjs/List/index.js +19 -0
  71. package/dist/commonjs/List/types.js +6 -0
  72. package/dist/commonjs/Masonry/Masonry.example.js +287 -0
  73. package/dist/commonjs/Masonry/Masonry.jest.js +450 -0
  74. package/dist/commonjs/Masonry/Masonry.js +431 -0
  75. package/dist/commonjs/Masonry/PositionCache.js +88 -0
  76. package/dist/commonjs/Masonry/createCellPositioner.js +59 -0
  77. package/dist/commonjs/Masonry/index.js +22 -0
  78. package/dist/commonjs/MultiGrid/CellMeasurerCacheDecorator.js +106 -0
  79. package/dist/commonjs/MultiGrid/MultiGrid.example.js +131 -0
  80. package/dist/commonjs/MultiGrid/MultiGrid.jest.js +584 -0
  81. package/dist/commonjs/MultiGrid/MultiGrid.js +743 -0
  82. package/dist/commonjs/MultiGrid/index.js +15 -0
  83. package/dist/commonjs/ScrollSync/ScrollSync.example.js +257 -0
  84. package/dist/commonjs/ScrollSync/ScrollSync.jest.js +66 -0
  85. package/dist/commonjs/ScrollSync/ScrollSync.js +88 -0
  86. package/dist/commonjs/ScrollSync/index.js +15 -0
  87. package/dist/commonjs/Table/Column.jest.js +90 -0
  88. package/dist/commonjs/Table/Column.js +93 -0
  89. package/dist/commonjs/Table/SortDirection.js +19 -0
  90. package/dist/commonjs/Table/SortIndicator.js +40 -0
  91. package/dist/commonjs/Table/Table.example.js +325 -0
  92. package/dist/commonjs/Table/Table.jest.js +1257 -0
  93. package/dist/commonjs/Table/Table.js +742 -0
  94. package/dist/commonjs/Table/createMultiSort.jest.js +165 -0
  95. package/dist/commonjs/Table/createMultiSort.js +99 -0
  96. package/dist/commonjs/Table/defaultCellDataGetter.js +21 -0
  97. package/dist/commonjs/Table/defaultCellRenderer.js +19 -0
  98. package/dist/commonjs/Table/defaultHeaderRenderer.js +35 -0
  99. package/dist/commonjs/Table/defaultHeaderRowRenderer.js +21 -0
  100. package/dist/commonjs/Table/defaultRowRenderer.js +87 -0
  101. package/dist/commonjs/Table/index.js +78 -0
  102. package/dist/commonjs/Table/types.js +39 -0
  103. package/dist/commonjs/WindowScroller/WindowScroller.e2e.js +298 -0
  104. package/dist/commonjs/WindowScroller/WindowScroller.example.js +167 -0
  105. package/dist/commonjs/WindowScroller/WindowScroller.header-resize.e2e.js +359 -0
  106. package/dist/commonjs/WindowScroller/WindowScroller.jest.js +536 -0
  107. package/dist/commonjs/WindowScroller/WindowScroller.js +268 -0
  108. package/dist/commonjs/WindowScroller/WindowScroller.ssr.js +25 -0
  109. package/dist/commonjs/WindowScroller/index.js +23 -0
  110. package/dist/commonjs/WindowScroller/utils/dimensions.js +89 -0
  111. package/dist/commonjs/WindowScroller/utils/onScroll.js +70 -0
  112. package/dist/commonjs/index.js +180 -0
  113. package/dist/commonjs/jest-setup.js +7 -0
  114. package/dist/commonjs/utils/TestHelper.js +36 -0
  115. package/dist/commonjs/utils/animationFrame.js +29 -0
  116. package/dist/commonjs/utils/createCallbackMemoizer.jest.js +219 -0
  117. package/dist/commonjs/utils/createCallbackMemoizer.js +31 -0
  118. package/dist/commonjs/utils/getUpdatedOffsetForIndex.jest.js +68 -0
  119. package/dist/commonjs/utils/getUpdatedOffsetForIndex.js +38 -0
  120. package/dist/commonjs/utils/initCellMetadata.js +37 -0
  121. package/dist/commonjs/utils/requestAnimationTimeout.js +38 -0
  122. package/dist/commonjs/vendor/binarySearchBounds.js +200 -0
  123. package/dist/commonjs/vendor/detectElementResize.js +192 -0
  124. package/dist/commonjs/vendor/intervalTree.js +361 -0
  125. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.example.js +176 -0
  126. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.jest.js +332 -0
  127. package/dist/es/ArrowKeyStepper/ArrowKeyStepper.js +197 -0
  128. package/dist/es/ArrowKeyStepper/index.js +3 -0
  129. package/dist/es/ArrowKeyStepper/types.js +4 -0
  130. package/dist/es/AutoSizer/AutoSizer.example.js +96 -0
  131. package/dist/es/AutoSizer/AutoSizer.jest.js +335 -0
  132. package/dist/es/AutoSizer/AutoSizer.js +190 -0
  133. package/dist/es/AutoSizer/AutoSizer.js.flow +200 -0
  134. package/dist/es/AutoSizer/AutoSizer.ssr.js +19 -0
  135. package/dist/es/AutoSizer/index.js +2 -0
  136. package/dist/es/AutoSizer/index.js.flow +4 -0
  137. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightGrid.example.js +91 -0
  138. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightList.example.js +90 -0
  139. package/dist/es/CellMeasurer/CellMeasurer.DynamicHeightTableColumn.example.js +98 -0
  140. package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthGrid.example.js +93 -0
  141. package/dist/es/CellMeasurer/CellMeasurer.DynamicWidthMultiGrid.example.js +98 -0
  142. package/dist/es/CellMeasurer/CellMeasurer.example.js +120 -0
  143. package/dist/es/CellMeasurer/CellMeasurer.jest.js +340 -0
  144. package/dist/es/CellMeasurer/CellMeasurer.js +187 -0
  145. package/dist/es/CellMeasurer/CellMeasurerCache.jest.js +293 -0
  146. package/dist/es/CellMeasurer/CellMeasurerCache.js +196 -0
  147. package/dist/es/CellMeasurer/index.js +4 -0
  148. package/dist/es/CellMeasurer/types.js +13 -0
  149. package/dist/es/Collection/Collection.example.js +223 -0
  150. package/dist/es/Collection/Collection.jest.js +824 -0
  151. package/dist/es/Collection/Collection.js +257 -0
  152. package/dist/es/Collection/CollectionView.js +544 -0
  153. package/dist/es/Collection/Section.jest.js +60 -0
  154. package/dist/es/Collection/Section.js +51 -0
  155. package/dist/es/Collection/SectionManager.jest.js +118 -0
  156. package/dist/es/Collection/SectionManager.js +128 -0
  157. package/dist/es/Collection/TestData.js +71 -0
  158. package/dist/es/Collection/index.js +3 -0
  159. package/dist/es/Collection/types.js +21 -0
  160. package/dist/es/Collection/utils/calculateSizeAndPositionData.jest.js +31 -0
  161. package/dist/es/Collection/utils/calculateSizeAndPositionData.js +31 -0
  162. package/dist/es/ColumnSizer/ColumnSizer.example.js +150 -0
  163. package/dist/es/ColumnSizer/ColumnSizer.jest.js +123 -0
  164. package/dist/es/ColumnSizer/ColumnSizer.js +95 -0
  165. package/dist/es/ColumnSizer/index.js +3 -0
  166. package/dist/es/Grid/Grid.example.js +321 -0
  167. package/dist/es/Grid/Grid.jest.js +2555 -0
  168. package/dist/es/Grid/Grid.js +1425 -0
  169. package/dist/es/Grid/Grid.ssr.js +57 -0
  170. package/dist/es/Grid/accessibilityOverscanIndicesGetter.jest.js +87 -0
  171. package/dist/es/Grid/accessibilityOverscanIndicesGetter.js +33 -0
  172. package/dist/es/Grid/defaultCellRangeRenderer.js +134 -0
  173. package/dist/es/Grid/defaultOverscanIndicesGetter.jest.js +87 -0
  174. package/dist/es/Grid/defaultOverscanIndicesGetter.js +29 -0
  175. package/dist/es/Grid/index.js +15 -0
  176. package/dist/es/Grid/types.js +96 -0
  177. package/dist/es/Grid/utils/CellSizeAndPositionManager.jest.js +372 -0
  178. package/dist/es/Grid/utils/CellSizeAndPositionManager.js +290 -0
  179. package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.jest.js +198 -0
  180. package/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js +198 -0
  181. package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.jest.js +81 -0
  182. package/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js +53 -0
  183. package/dist/es/Grid/utils/maxElementSize.js +16 -0
  184. package/dist/es/Grid/utils/updateScrollIndexHelper.jest.js +174 -0
  185. package/dist/es/Grid/utils/updateScrollIndexHelper.js +79 -0
  186. package/dist/es/InfiniteLoader/InfiniteLoader.example.js +170 -0
  187. package/dist/es/InfiniteLoader/InfiniteLoader.jest.js +565 -0
  188. package/dist/es/InfiniteLoader/InfiniteLoader.js +263 -0
  189. package/dist/es/InfiniteLoader/index.js +3 -0
  190. package/dist/es/List/List.example.js +227 -0
  191. package/dist/es/List/List.jest.js +511 -0
  192. package/dist/es/List/List.js +312 -0
  193. package/dist/es/List/index.js +3 -0
  194. package/dist/es/List/types.js +21 -0
  195. package/dist/es/Masonry/Masonry.example.js +278 -0
  196. package/dist/es/Masonry/Masonry.jest.js +444 -0
  197. package/dist/es/Masonry/Masonry.js +421 -0
  198. package/dist/es/Masonry/PositionCache.js +82 -0
  199. package/dist/es/Masonry/createCellPositioner.js +53 -0
  200. package/dist/es/Masonry/index.js +4 -0
  201. package/dist/es/MultiGrid/CellMeasurerCacheDecorator.js +100 -0
  202. package/dist/es/MultiGrid/MultiGrid.example.js +122 -0
  203. package/dist/es/MultiGrid/MultiGrid.jest.js +579 -0
  204. package/dist/es/MultiGrid/MultiGrid.js +733 -0
  205. package/dist/es/MultiGrid/index.js +3 -0
  206. package/dist/es/ScrollSync/ScrollSync.example.js +248 -0
  207. package/dist/es/ScrollSync/ScrollSync.jest.js +60 -0
  208. package/dist/es/ScrollSync/ScrollSync.js +80 -0
  209. package/dist/es/ScrollSync/index.js +3 -0
  210. package/dist/es/Table/Column.jest.js +84 -0
  211. package/dist/es/Table/Column.js +85 -0
  212. package/dist/es/Table/SortDirection.js +13 -0
  213. package/dist/es/Table/SortIndicator.js +31 -0
  214. package/dist/es/Table/Table.example.js +316 -0
  215. package/dist/es/Table/Table.jest.js +1251 -0
  216. package/dist/es/Table/Table.js +735 -0
  217. package/dist/es/Table/createMultiSort.jest.js +162 -0
  218. package/dist/es/Table/createMultiSort.js +93 -0
  219. package/dist/es/Table/defaultCellDataGetter.js +15 -0
  220. package/dist/es/Table/defaultCellRenderer.js +13 -0
  221. package/dist/es/Table/defaultHeaderRenderer.js +25 -0
  222. package/dist/es/Table/defaultHeaderRowRenderer.js +12 -0
  223. package/dist/es/Table/defaultRowRenderer.js +77 -0
  224. package/dist/es/Table/index.js +12 -0
  225. package/dist/es/Table/types.js +38 -0
  226. package/dist/es/WindowScroller/WindowScroller.e2e.js +295 -0
  227. package/dist/es/WindowScroller/WindowScroller.example.js +158 -0
  228. package/dist/es/WindowScroller/WindowScroller.header-resize.e2e.js +356 -0
  229. package/dist/es/WindowScroller/WindowScroller.jest.js +530 -0
  230. package/dist/es/WindowScroller/WindowScroller.js +259 -0
  231. package/dist/es/WindowScroller/WindowScroller.js.flow +277 -0
  232. package/dist/es/WindowScroller/WindowScroller.ssr.js +19 -0
  233. package/dist/es/WindowScroller/index.js +3 -0
  234. package/dist/es/WindowScroller/index.js.flow +6 -0
  235. package/dist/es/WindowScroller/utils/dimensions.js +81 -0
  236. package/dist/es/WindowScroller/utils/dimensions.js.flow +91 -0
  237. package/dist/es/WindowScroller/utils/onScroll.js +64 -0
  238. package/dist/es/WindowScroller/utils/onScroll.js.flow +94 -0
  239. package/dist/es/index.js +13 -0
  240. package/dist/es/jest-setup.js +5 -0
  241. package/dist/es/utils/TestHelper.js +30 -0
  242. package/dist/es/utils/animationFrame.js +23 -0
  243. package/dist/es/utils/createCallbackMemoizer.jest.js +216 -0
  244. package/dist/es/utils/createCallbackMemoizer.js +25 -0
  245. package/dist/es/utils/getUpdatedOffsetForIndex.jest.js +65 -0
  246. package/dist/es/utils/getUpdatedOffsetForIndex.js +32 -0
  247. package/dist/es/utils/initCellMetadata.js +31 -0
  248. package/dist/es/utils/requestAnimationTimeout.js +32 -0
  249. package/dist/es/vendor/binarySearchBounds.js +194 -0
  250. package/dist/es/vendor/detectElementResize.js +186 -0
  251. package/dist/es/vendor/intervalTree.js +354 -0
  252. package/dist/umd/react-virtualized.js +4638 -0
  253. package/package.json +188 -0
  254. package/styles.css +80 -0
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _ScalingCellSizeAndPositionManager = _interopRequireDefault(require("./ScalingCellSizeAndPositionManager"));
5
+ describe('ScalingCellSizeAndPositionManager', function () {
6
+ function init() {
7
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
8
+ _ref$cellCount = _ref.cellCount,
9
+ cellCount = _ref$cellCount === void 0 ? 10 : _ref$cellCount,
10
+ _ref$cellSize = _ref.cellSize,
11
+ cellSize = _ref$cellSize === void 0 ? 10 : _ref$cellSize,
12
+ _ref$estimatedCellSiz = _ref.estimatedCellSize,
13
+ estimatedCellSize = _ref$estimatedCellSiz === void 0 ? 10 : _ref$estimatedCellSiz,
14
+ _ref$maxScrollSize = _ref.maxScrollSize,
15
+ maxScrollSize = _ref$maxScrollSize === void 0 ? 50 : _ref$maxScrollSize;
16
+ var cellSizeAndPositionManager = new _ScalingCellSizeAndPositionManager["default"]({
17
+ cellCount: cellCount,
18
+ cellSizeGetter: function cellSizeGetter() {
19
+ return cellSize;
20
+ },
21
+ estimatedCellSize: estimatedCellSize,
22
+ maxScrollSize: maxScrollSize
23
+ });
24
+ return cellSizeAndPositionManager;
25
+ }
26
+ describe('_getOffsetPercentage', function () {
27
+ it('should return the correct offset fraction', function () {
28
+ var expectations = [{
29
+ offset: 0,
30
+ expectedOffsetPercentage: 0
31
+ }, {
32
+ offset: 35,
33
+ expectedOffsetPercentage: 0.5
34
+ }, {
35
+ offset: 70,
36
+ expectedOffsetPercentage: 1
37
+ }];
38
+ var instance = init();
39
+ expectations.forEach(function (expectation) {
40
+ expect(instance._getOffsetPercentage({
41
+ containerSize: 30,
42
+ offset: expectation.offset,
43
+ totalSize: 100
44
+ })).toBe(expectation.expectedOffsetPercentage);
45
+ });
46
+ });
47
+ });
48
+ describe('getOffsetAdjustment', function () {
49
+ it('should always return 0 as the adjustment for unscaled lists', function () {
50
+ var maxScrollSizes = [100, 150];
51
+ maxScrollSizes.forEach(function (maxScrollSize) {
52
+ var instance = init({
53
+ cellCount: 10,
54
+ maxScrollSize: maxScrollSize
55
+ });
56
+ var offsets = [0, 35, 70];
57
+ offsets.forEach(function (offset) {
58
+ expect(instance.getOffsetAdjustment({
59
+ containerSize: 30,
60
+ offset: offset
61
+ })).toBe(0);
62
+ });
63
+ });
64
+ });
65
+ it('should properly scale an offset at the beginning, middle, and end of the list', function () {
66
+ var offsetsAndExpectedAdjustements = [{
67
+ offset: 0,
68
+ expectedAdjustment: -0
69
+ }, {
70
+ offset: 10,
71
+ expectedAdjustment: -25
72
+ }, {
73
+ offset: 20,
74
+ expectedAdjustment: -50
75
+ }];
76
+ var instance = init();
77
+ offsetsAndExpectedAdjustements.forEach(function (offsetAndExpectedAdjustement) {
78
+ expect(instance.getOffsetAdjustment({
79
+ containerSize: 30,
80
+ offset: offsetAndExpectedAdjustement.offset
81
+ })).toBe(offsetAndExpectedAdjustement.expectedAdjustment);
82
+ });
83
+ });
84
+ });
85
+ describe('getTotalSize', function () {
86
+ it('should return :totalSize if it is not greater than :maxScrollSize', function () {
87
+ var maxScrollSizes = [500, 750];
88
+ maxScrollSizes.forEach(function (maxScrollSize) {
89
+ var instance = init({
90
+ cellCount: 50,
91
+ maxScrollSize: maxScrollSize
92
+ });
93
+ expect(instance.getTotalSize()).toEqual(500);
94
+ });
95
+ });
96
+ it('should return :maxScrollSize if :totalSize is greater', function () {
97
+ var instance = init({
98
+ cellCount: 100,
99
+ maxScrollSize: 100
100
+ });
101
+ expect(instance.getTotalSize()).toEqual(100);
102
+ });
103
+ });
104
+ describe('getUpdatedOffsetForIndex', function () {
105
+ it('should scroll to a cell before the current range', function () {
106
+ var data = [{
107
+ targetIndex: 0,
108
+ expectedOffset: 0
109
+ }, {
110
+ targetIndex: 1,
111
+ expectedOffset: 3
112
+ },
113
+ // (unsafe: 10)
114
+ {
115
+ targetIndex: 2,
116
+ expectedOffset: 6
117
+ } // (unsafe: 20)
118
+ ];
119
+ var instance = init();
120
+ data.forEach(function (datum) {
121
+ expect(instance.getUpdatedOffsetForIndex({
122
+ containerSize: 30,
123
+ currentOffset: 10,
124
+ // (unsafe: 35)
125
+ targetIndex: datum.targetIndex
126
+ })).toBe(datum.expectedOffset);
127
+ });
128
+ });
129
+ it('should scroll to a cell after the current range', function () {
130
+ var data = [{
131
+ targetIndex: 7,
132
+ expectedOffset: 14
133
+ },
134
+ // (unsafe: 50)
135
+ {
136
+ targetIndex: 9,
137
+ expectedOffset: 20
138
+ } // (unsafe: 70)
139
+ ];
140
+ var instance = init();
141
+ data.forEach(function (datum) {
142
+ expect(instance.getUpdatedOffsetForIndex({
143
+ containerSize: 30,
144
+ currentOffset: 0,
145
+ targetIndex: datum.targetIndex
146
+ })).toBe(datum.expectedOffset);
147
+ });
148
+ });
149
+ it('should not scroll to a cell already visible within the current range', function () {
150
+ var instance = init();
151
+ expect(instance.getUpdatedOffsetForIndex({
152
+ containerSize: 30,
153
+ currentOffset: 10,
154
+ // (unsafe: 35)
155
+ targetIndex: 4
156
+ })).toBe(10);
157
+ });
158
+ });
159
+ describe('getVisibleCellRange', function () {
160
+ it('should correct identify the first set of cells', function () {
161
+ var instance = init();
162
+ expect(instance.getVisibleCellRange({
163
+ containerSize: 30,
164
+ offset: 0
165
+ })).toEqual({
166
+ start: 0,
167
+ stop: 2
168
+ });
169
+ });
170
+ it('should correct identify cells in the middle', function () {
171
+ var instance = init();
172
+ expect(instance.getVisibleCellRange({
173
+ containerSize: 30,
174
+ offset: 2.85 // (unsafe: 10)
175
+ })).toEqual({
176
+ start: 1,
177
+ stop: 3
178
+ });
179
+ });
180
+ it('should correct identify partially visible cells', function () {
181
+ var instance = init();
182
+ expect(instance.getVisibleCellRange({
183
+ containerSize: 30,
184
+ offset: 10 // (unsafe: 35)
185
+ })).toEqual({
186
+ start: 3,
187
+ stop: 6
188
+ });
189
+ });
190
+ it('should correct identify the last set of cells', function () {
191
+ var instance = init();
192
+ expect(instance.getVisibleCellRange({
193
+ containerSize: 30,
194
+ offset: 20
195
+ })).toEqual({
196
+ start: 7,
197
+ stop: 9
198
+ });
199
+ });
200
+ });
201
+ });
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _CellSizeAndPositionManager = _interopRequireDefault(require("./CellSizeAndPositionManager"));
13
+ var _maxElementSize = require("./maxElementSize.js");
14
+ var _excluded = ["maxScrollSize"];
15
+ /*:: import type {Alignment, CellSizeGetter, VisibleCellRange} from '../types';*/
16
+ /*:: type ContainerSizeAndOffset = {
17
+ containerSize: number,
18
+ offset: number,
19
+ };*/
20
+ /*:: type Params = {
21
+ maxScrollSize?: number,
22
+ cellCount: number,
23
+ cellSizeGetter: CellSizeGetter,
24
+ estimatedCellSize: number,
25
+ };*/
26
+ /**
27
+ * Browsers have scroll offset limitations (eg Chrome stops scrolling at ~33.5M pixels where as Edge tops out at ~1.5M pixels).
28
+ * After a certain position, the browser won't allow the user to scroll further (even via JavaScript scroll offset adjustments).
29
+ * This util picks a lower ceiling for max size and artificially adjusts positions within to make it transparent for users.
30
+ */
31
+ /**
32
+ * Extends CellSizeAndPositionManager and adds scaling behavior for lists that are too large to fit within a browser's native limits.
33
+ */
34
+ var ScalingCellSizeAndPositionManager = exports["default"] = /*#__PURE__*/function () {
35
+ function ScalingCellSizeAndPositionManager(_ref /*:: */) {
36
+ var _ref$maxScrollSize = _ref /*:: */.maxScrollSize,
37
+ maxScrollSize = _ref$maxScrollSize === void 0 ? (0, _maxElementSize.getMaxElementSize)() : _ref$maxScrollSize,
38
+ params = (0, _objectWithoutProperties2["default"])(_ref /*:: */, _excluded);
39
+ (0, _classCallCheck2["default"])(this, ScalingCellSizeAndPositionManager);
40
+ (0, _defineProperty2["default"])(this, "_cellSizeAndPositionManager", void 0);
41
+ (0, _defineProperty2["default"])(this, "_maxScrollSize", void 0);
42
+ // Favor composition over inheritance to simplify IE10 support
43
+ this._cellSizeAndPositionManager = new _CellSizeAndPositionManager["default"](params);
44
+ this._maxScrollSize = maxScrollSize;
45
+ }
46
+ return (0, _createClass2["default"])(ScalingCellSizeAndPositionManager, [{
47
+ key: "areOffsetsAdjusted",
48
+ value: function areOffsetsAdjusted() /*: boolean*/{
49
+ return this._cellSizeAndPositionManager.getTotalSize() > this._maxScrollSize;
50
+ }
51
+ }, {
52
+ key: "configure",
53
+ value: function configure(params
54
+ /*: {
55
+ cellCount: number,
56
+ estimatedCellSize: number,
57
+ cellSizeGetter: CellSizeGetter,
58
+ }*/
59
+ ) {
60
+ this._cellSizeAndPositionManager.configure(params);
61
+ }
62
+ }, {
63
+ key: "getCellCount",
64
+ value: function getCellCount() /*: number*/{
65
+ return this._cellSizeAndPositionManager.getCellCount();
66
+ }
67
+ }, {
68
+ key: "getEstimatedCellSize",
69
+ value: function getEstimatedCellSize() /*: number*/{
70
+ return this._cellSizeAndPositionManager.getEstimatedCellSize();
71
+ }
72
+ }, {
73
+ key: "getLastMeasuredIndex",
74
+ value: function getLastMeasuredIndex() /*: number*/{
75
+ return this._cellSizeAndPositionManager.getLastMeasuredIndex();
76
+ }
77
+
78
+ /**
79
+ * Number of pixels a cell at the given position (offset) should be shifted in order to fit within the scaled container.
80
+ * The offset passed to this function is scaled (safe) as well.
81
+ */
82
+ }, {
83
+ key: "getOffsetAdjustment",
84
+ value: function getOffsetAdjustment(_ref2 /*:: */) /*: number*/{
85
+ var containerSize = _ref2 /*:: */.containerSize,
86
+ offset = _ref2 /*:: */.offset;
87
+ var totalSize = this._cellSizeAndPositionManager.getTotalSize();
88
+ var safeTotalSize = this.getTotalSize();
89
+ var offsetPercentage = this._getOffsetPercentage({
90
+ containerSize: containerSize,
91
+ offset: offset,
92
+ totalSize: safeTotalSize
93
+ });
94
+ return Math.round(offsetPercentage * (safeTotalSize - totalSize));
95
+ }
96
+ }, {
97
+ key: "getSizeAndPositionOfCell",
98
+ value: function getSizeAndPositionOfCell(index /*: number*/) {
99
+ return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);
100
+ }
101
+ }, {
102
+ key: "getSizeAndPositionOfLastMeasuredCell",
103
+ value: function getSizeAndPositionOfLastMeasuredCell() {
104
+ return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();
105
+ }
106
+
107
+ /** See CellSizeAndPositionManager#getTotalSize */
108
+ }, {
109
+ key: "getTotalSize",
110
+ value: function getTotalSize() /*: number*/{
111
+ return Math.min(this._maxScrollSize, this._cellSizeAndPositionManager.getTotalSize());
112
+ }
113
+
114
+ /** See CellSizeAndPositionManager#getUpdatedOffsetForIndex */
115
+ }, {
116
+ key: "getUpdatedOffsetForIndex",
117
+ value: function getUpdatedOffsetForIndex(_ref3 /*:: */) {
118
+ var _ref3$align = _ref3 /*:: */.align,
119
+ align = _ref3$align === void 0 ? 'auto' : _ref3$align,
120
+ containerSize = _ref3 /*:: */.containerSize,
121
+ currentOffset = _ref3 /*:: */.currentOffset,
122
+ targetIndex = _ref3 /*:: */.targetIndex;
123
+ currentOffset = this._safeOffsetToOffset({
124
+ containerSize: containerSize,
125
+ offset: currentOffset
126
+ });
127
+ var offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({
128
+ align: align,
129
+ containerSize: containerSize,
130
+ currentOffset: currentOffset,
131
+ targetIndex: targetIndex
132
+ });
133
+ return this._offsetToSafeOffset({
134
+ containerSize: containerSize,
135
+ offset: offset
136
+ });
137
+ }
138
+
139
+ /** See CellSizeAndPositionManager#getVisibleCellRange */
140
+ }, {
141
+ key: "getVisibleCellRange",
142
+ value: function getVisibleCellRange(_ref4 /*:: */) /*: VisibleCellRange*/{
143
+ var containerSize = _ref4 /*:: */.containerSize,
144
+ offset = _ref4 /*:: */.offset;
145
+ offset = this._safeOffsetToOffset({
146
+ containerSize: containerSize,
147
+ offset: offset
148
+ });
149
+ return this._cellSizeAndPositionManager.getVisibleCellRange({
150
+ containerSize: containerSize,
151
+ offset: offset
152
+ });
153
+ }
154
+ }, {
155
+ key: "resetCell",
156
+ value: function resetCell(index /*: number*/) /*: void*/{
157
+ this._cellSizeAndPositionManager.resetCell(index);
158
+ }
159
+ }, {
160
+ key: "_getOffsetPercentage",
161
+ value: function _getOffsetPercentage(_ref5 /*:: */) {
162
+ var containerSize = _ref5 /*:: */.containerSize,
163
+ offset = _ref5 /*:: */.offset,
164
+ totalSize = _ref5 /*:: */.totalSize;
165
+ return totalSize <= containerSize ? 0 : offset / (totalSize - containerSize);
166
+ }
167
+ }, {
168
+ key: "_offsetToSafeOffset",
169
+ value: function _offsetToSafeOffset(_ref6 /*:: */) /*: number*/{
170
+ var containerSize = _ref6 /*:: */.containerSize,
171
+ offset = _ref6 /*:: */.offset;
172
+ var totalSize = this._cellSizeAndPositionManager.getTotalSize();
173
+ var safeTotalSize = this.getTotalSize();
174
+ if (totalSize === safeTotalSize) {
175
+ return offset;
176
+ } else {
177
+ var offsetPercentage = this._getOffsetPercentage({
178
+ containerSize: containerSize,
179
+ offset: offset,
180
+ totalSize: totalSize
181
+ });
182
+ return Math.round(offsetPercentage * (safeTotalSize - containerSize));
183
+ }
184
+ }
185
+ }, {
186
+ key: "_safeOffsetToOffset",
187
+ value: function _safeOffsetToOffset(_ref7 /*:: */) /*: number*/{
188
+ var containerSize = _ref7 /*:: */.containerSize,
189
+ offset = _ref7 /*:: */.offset;
190
+ var totalSize = this._cellSizeAndPositionManager.getTotalSize();
191
+ var safeTotalSize = this.getTotalSize();
192
+ if (totalSize === safeTotalSize) {
193
+ return offset;
194
+ } else {
195
+ var offsetPercentage = this._getOffsetPercentage({
196
+ containerSize: containerSize,
197
+ offset: offset,
198
+ totalSize: safeTotalSize
199
+ });
200
+ return Math.round(offsetPercentage * (totalSize - containerSize));
201
+ }
202
+ }
203
+ }]);
204
+ }();
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _calculateSizeAndPositionDataAndUpdateScrollOffset = _interopRequireDefault(require("./calculateSizeAndPositionDataAndUpdateScrollOffset"));
5
+ describe('calculateSizeAndPositionDataAndUpdateScrollOffset', function () {
6
+ function helper() {
7
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
8
+ _ref$cellCount = _ref.cellCount,
9
+ cellCount = _ref$cellCount === void 0 ? 100 : _ref$cellCount,
10
+ _ref$cellSize = _ref.cellSize,
11
+ cellSize = _ref$cellSize === void 0 ? 10 : _ref$cellSize,
12
+ _ref$computeMetadataC = _ref.computeMetadataCallbackProps,
13
+ computeMetadataCallbackProps = _ref$computeMetadataC === void 0 ? {} : _ref$computeMetadataC,
14
+ _ref$nextCellsCount = _ref.nextCellsCount,
15
+ nextCellsCount = _ref$nextCellsCount === void 0 ? 100 : _ref$nextCellsCount,
16
+ _ref$nextCellSize = _ref.nextCellSize,
17
+ nextCellSize = _ref$nextCellSize === void 0 ? 10 : _ref$nextCellSize,
18
+ nextScrollToIndex = _ref.nextScrollToIndex,
19
+ scrollToIndex = _ref.scrollToIndex;
20
+ var computeMetadataCallbackCalls = [];
21
+ var updateScrollOffsetForScrollToIndexCalls = [];
22
+ (0, _calculateSizeAndPositionDataAndUpdateScrollOffset["default"])({
23
+ cellCount: cellCount,
24
+ cellSize: cellSize,
25
+ computeMetadataCallback: function computeMetadataCallback(params) {
26
+ return computeMetadataCallbackCalls.push(params);
27
+ },
28
+ computeMetadataCallbackProps: computeMetadataCallbackProps,
29
+ nextCellsCount: nextCellsCount,
30
+ nextCellSize: nextCellSize,
31
+ nextScrollToIndex: nextScrollToIndex,
32
+ scrollToIndex: scrollToIndex,
33
+ updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex(params) {
34
+ return updateScrollOffsetForScrollToIndexCalls.push(params);
35
+ }
36
+ });
37
+ return {
38
+ computeMetadataCallbackCalls: computeMetadataCallbackCalls,
39
+ updateScrollOffsetForScrollToIndexCalls: updateScrollOffsetForScrollToIndexCalls
40
+ };
41
+ }
42
+ it('should call :computeMetadataCallback if :cellCount has changed', function () {
43
+ var _helper = helper({
44
+ cellCount: 100,
45
+ nextCellsCount: 200
46
+ }),
47
+ computeMetadataCallbackCalls = _helper.computeMetadataCallbackCalls;
48
+ expect(computeMetadataCallbackCalls.length).toEqual(1);
49
+ });
50
+ it('should call :computeMetadataCallback if numeric :cellSize has changed', function () {
51
+ var _helper2 = helper({
52
+ cellSize: 10,
53
+ nextCellSize: 20
54
+ }),
55
+ computeMetadataCallbackCalls = _helper2.computeMetadataCallbackCalls;
56
+ expect(computeMetadataCallbackCalls.length).toEqual(1);
57
+ });
58
+ it('should not call :computeMetadataCallback if :cellSize callback has changed', function () {
59
+ var _helper3 = helper({
60
+ cellSize: function cellSize() {},
61
+ nextCellSize: function nextCellSize() {}
62
+ }),
63
+ computeMetadataCallbackCalls = _helper3.computeMetadataCallbackCalls;
64
+ expect(computeMetadataCallbackCalls.length).toEqual(0);
65
+ });
66
+ it('should not call :updateScrollOffsetForScrollToIndex if :scrollToIndex is not specified', function () {
67
+ var _helper4 = helper(),
68
+ updateScrollOffsetForScrollToIndexCalls = _helper4.updateScrollOffsetForScrollToIndexCalls;
69
+ expect(updateScrollOffsetForScrollToIndexCalls.length).toEqual(0);
70
+ });
71
+ it('should not call :updateScrollOffsetForScrollToIndex if :scrollToIndex has also changed', function () {
72
+ var _helper5 = helper({
73
+ scrollToIndex: 10,
74
+ nextScrollToIndex: 20
75
+ }),
76
+ updateScrollOffsetForScrollToIndexCalls = _helper5.updateScrollOffsetForScrollToIndexCalls;
77
+ expect(updateScrollOffsetForScrollToIndexCalls.length).toEqual(0);
78
+ });
79
+ it('should not call :computeMetadataCallback if the above conditions are not true', function () {
80
+ var _helper6 = helper(),
81
+ computeMetadataCallbackCalls = _helper6.computeMetadataCallbackCalls;
82
+ expect(computeMetadataCallbackCalls.length).toEqual(0);
83
+ });
84
+ });
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = calculateSizeAndPositionDataAndUpdateScrollOffset;
7
+ /**
8
+ * Helper method that determines when to recalculate row or column metadata.
9
+ */
10
+ /*:: type Params<T> = {
11
+ // Number of rows or columns in the current axis
12
+ cellCount: number,
13
+
14
+ // Width or height of cells for the current axis
15
+ cellSize: ?number,
16
+
17
+ // Method to invoke if cell metadata should be recalculated
18
+ computeMetadataCallback: (props: T) => void,
19
+
20
+ // Parameters to pass to :computeMetadataCallback
21
+ computeMetadataCallbackProps: T,
22
+
23
+ // Newly updated number of rows or columns in the current axis
24
+ nextCellsCount: number,
25
+
26
+ // Newly updated width or height of cells for the current axis
27
+ nextCellSize: ?number,
28
+
29
+ // Newly updated scroll-to-index
30
+ nextScrollToIndex: number,
31
+
32
+ // Scroll-to-index
33
+ scrollToIndex: number,
34
+
35
+ // Callback to invoke if the scroll position should be recalculated
36
+ updateScrollOffsetForScrollToIndex: () => void,
37
+ };*/
38
+ function calculateSizeAndPositionDataAndUpdateScrollOffset(_ref /*:: */) {
39
+ var cellCount = _ref /*:: */.cellCount,
40
+ cellSize = _ref /*:: */.cellSize,
41
+ computeMetadataCallback = _ref /*:: */.computeMetadataCallback,
42
+ computeMetadataCallbackProps = _ref /*:: */.computeMetadataCallbackProps,
43
+ nextCellsCount = _ref /*:: */.nextCellsCount,
44
+ nextCellSize = _ref /*:: */.nextCellSize,
45
+ nextScrollToIndex = _ref /*:: */.nextScrollToIndex,
46
+ scrollToIndex = _ref /*:: */.scrollToIndex,
47
+ updateScrollOffsetForScrollToIndex = _ref /*:: */.updateScrollOffsetForScrollToIndex;
48
+ // Don't compare cell sizes if they are functions because inline functions would cause infinite loops.
49
+ // In that event users should use the manual recompute methods to inform of changes.
50
+ if (cellCount !== nextCellsCount || (typeof cellSize === 'number' || typeof nextCellSize === 'number') && cellSize !== nextCellSize) {
51
+ computeMetadataCallback(computeMetadataCallbackProps);
52
+
53
+ // Updated cell metadata may have hidden the previous scrolled-to item.
54
+ // In this case we should also update the scrollTop to ensure it stays visible.
55
+ if (scrollToIndex >= 0 && scrollToIndex === nextScrollToIndex) {
56
+ updateScrollOffsetForScrollToIndex();
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMaxElementSize = void 0;
7
+ var DEFAULT_MAX_ELEMENT_SIZE = 1500000;
8
+ var CHROME_MAX_ELEMENT_SIZE = 1.67771e7;
9
+ var isBrowser = function isBrowser() {
10
+ return typeof window !== 'undefined';
11
+ };
12
+ var isChrome = function isChrome() {
13
+ return !!window.chrome;
14
+ };
15
+ var getMaxElementSize = exports.getMaxElementSize = function getMaxElementSize() /*: number*/{
16
+ if (isBrowser()) {
17
+ if (isChrome()) {
18
+ return CHROME_MAX_ELEMENT_SIZE;
19
+ }
20
+ }
21
+ return DEFAULT_MAX_ELEMENT_SIZE;
22
+ };