@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,91 @@
1
+ // @flow
2
+
3
+ /**
4
+ * Gets the dimensions of the element, accounting for API differences between
5
+ * `window` and other DOM elements.
6
+ */
7
+
8
+ type Dimensions = {
9
+ height: number,
10
+ width: number,
11
+ };
12
+
13
+ // TODO Move this into WindowScroller and import from there
14
+ type WindowScrollerProps = {
15
+ serverHeight: number,
16
+ serverWidth: number,
17
+ };
18
+
19
+ const isWindow = element => element === window;
20
+
21
+ const getBoundingBox = element => element.getBoundingClientRect();
22
+
23
+ export function getDimensions(
24
+ scrollElement: ?Element,
25
+ props: WindowScrollerProps,
26
+ ): Dimensions {
27
+ if (!scrollElement) {
28
+ return {
29
+ height: props.serverHeight,
30
+ width: props.serverWidth,
31
+ };
32
+ } else if (isWindow(scrollElement)) {
33
+ const {innerHeight, innerWidth} = window;
34
+ return {
35
+ height: typeof innerHeight === 'number' ? innerHeight : 0,
36
+ width: typeof innerWidth === 'number' ? innerWidth : 0,
37
+ };
38
+ } else {
39
+ return getBoundingBox(scrollElement);
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Gets the vertical and horizontal position of an element within its scroll container.
45
+ * Elements that have been “scrolled past” return negative values.
46
+ * Handles edge-case where a user is navigating back (history) from an already-scrolled page.
47
+ * In this case the body’s top or left position will be a negative number and this element’s top or left will be increased (by that amount).
48
+ */
49
+ export function getPositionOffset(element: Element, container: Element) {
50
+ if (isWindow(container) && document.documentElement) {
51
+ const containerElement = document.documentElement;
52
+ const elementRect = getBoundingBox(element);
53
+ const containerRect = getBoundingBox(containerElement);
54
+ return {
55
+ top: elementRect.top - containerRect.top,
56
+ left: elementRect.left - containerRect.left,
57
+ };
58
+ } else {
59
+ const scrollOffset = getScrollOffset(container);
60
+ const elementRect = getBoundingBox(element);
61
+ const containerRect = getBoundingBox(container);
62
+ return {
63
+ top: elementRect.top + scrollOffset.top - containerRect.top,
64
+ left: elementRect.left + scrollOffset.left - containerRect.left,
65
+ };
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Gets the vertical and horizontal scroll amount of the element, accounting for IE compatibility
71
+ * and API differences between `window` and other DOM elements.
72
+ */
73
+ export function getScrollOffset(element: Element) {
74
+ if (isWindow(element) && document.documentElement) {
75
+ return {
76
+ top:
77
+ 'scrollY' in window
78
+ ? window.scrollY
79
+ : document.documentElement.scrollTop,
80
+ left:
81
+ 'scrollX' in window
82
+ ? window.scrollX
83
+ : document.documentElement.scrollLeft,
84
+ };
85
+ } else {
86
+ return {
87
+ top: element.scrollTop,
88
+ left: element.scrollLeft,
89
+ };
90
+ }
91
+ }
@@ -0,0 +1,64 @@
1
+ 'no babel-plugin-flow-react-proptypes';
2
+
3
+ import { requestAnimationTimeout, cancelAnimationTimeout } from '../../utils/requestAnimationTimeout';
4
+ /*:: import type WindowScroller from '../WindowScroller.js';*/
5
+ var mountedInstances = [];
6
+ var originalBodyPointerEvents = null;
7
+ var disablePointerEventsTimeoutId = null;
8
+ function enablePointerEventsIfDisabled() {
9
+ if (disablePointerEventsTimeoutId) {
10
+ disablePointerEventsTimeoutId = null;
11
+ if (document.body && originalBodyPointerEvents != null) {
12
+ document.body.style.pointerEvents = originalBodyPointerEvents;
13
+ }
14
+ originalBodyPointerEvents = null;
15
+ }
16
+ }
17
+ function enablePointerEventsAfterDelayCallback() {
18
+ enablePointerEventsIfDisabled();
19
+ mountedInstances.forEach(function (instance) {
20
+ return instance.__resetIsScrolling();
21
+ });
22
+ }
23
+ function enablePointerEventsAfterDelay() {
24
+ if (disablePointerEventsTimeoutId) {
25
+ cancelAnimationTimeout(disablePointerEventsTimeoutId);
26
+ }
27
+ var maximumTimeout = 0;
28
+ mountedInstances.forEach(function (instance) {
29
+ maximumTimeout = Math.max(maximumTimeout, instance.props.scrollingResetTimeInterval);
30
+ });
31
+ disablePointerEventsTimeoutId = requestAnimationTimeout(enablePointerEventsAfterDelayCallback, maximumTimeout);
32
+ }
33
+ function onScrollWindow(event /*: Event*/) {
34
+ if (event.currentTarget === window && originalBodyPointerEvents == null && document.body) {
35
+ originalBodyPointerEvents = document.body.style.pointerEvents;
36
+ document.body.style.pointerEvents = 'none';
37
+ }
38
+ enablePointerEventsAfterDelay();
39
+ mountedInstances.forEach(function (instance) {
40
+ if (instance.props.scrollElement === event.currentTarget) {
41
+ instance.__handleWindowScrollEvent();
42
+ }
43
+ });
44
+ }
45
+ export function registerScrollListener(component /*: WindowScroller*/, element /*: Element*/) {
46
+ if (!mountedInstances.some(function (instance) {
47
+ return instance.props.scrollElement === element;
48
+ })) {
49
+ element.addEventListener('scroll', onScrollWindow);
50
+ }
51
+ mountedInstances.push(component);
52
+ }
53
+ export function unregisterScrollListener(component /*: WindowScroller*/, element /*: Element*/) {
54
+ mountedInstances = mountedInstances.filter(function (instance) {
55
+ return instance !== component;
56
+ });
57
+ if (!mountedInstances.length) {
58
+ element.removeEventListener('scroll', onScrollWindow);
59
+ if (disablePointerEventsTimeoutId) {
60
+ cancelAnimationTimeout(disablePointerEventsTimeoutId);
61
+ enablePointerEventsIfDisabled();
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,94 @@
1
+ // @flow
2
+ 'no babel-plugin-flow-react-proptypes';
3
+
4
+ import {
5
+ requestAnimationTimeout,
6
+ cancelAnimationTimeout,
7
+ } from '../../utils/requestAnimationTimeout';
8
+ import type WindowScroller from '../WindowScroller.js';
9
+
10
+ let mountedInstances = [];
11
+ let originalBodyPointerEvents = null;
12
+ let disablePointerEventsTimeoutId = null;
13
+
14
+ function enablePointerEventsIfDisabled() {
15
+ if (disablePointerEventsTimeoutId) {
16
+ disablePointerEventsTimeoutId = null;
17
+
18
+ if (document.body && originalBodyPointerEvents != null) {
19
+ document.body.style.pointerEvents = originalBodyPointerEvents;
20
+ }
21
+
22
+ originalBodyPointerEvents = null;
23
+ }
24
+ }
25
+
26
+ function enablePointerEventsAfterDelayCallback() {
27
+ enablePointerEventsIfDisabled();
28
+ mountedInstances.forEach(instance => instance.__resetIsScrolling());
29
+ }
30
+
31
+ function enablePointerEventsAfterDelay() {
32
+ if (disablePointerEventsTimeoutId) {
33
+ cancelAnimationTimeout(disablePointerEventsTimeoutId);
34
+ }
35
+
36
+ var maximumTimeout = 0;
37
+ mountedInstances.forEach(instance => {
38
+ maximumTimeout = Math.max(
39
+ maximumTimeout,
40
+ instance.props.scrollingResetTimeInterval,
41
+ );
42
+ });
43
+
44
+ disablePointerEventsTimeoutId = requestAnimationTimeout(
45
+ enablePointerEventsAfterDelayCallback,
46
+ maximumTimeout,
47
+ );
48
+ }
49
+
50
+ function onScrollWindow(event: Event) {
51
+ if (
52
+ event.currentTarget === window &&
53
+ originalBodyPointerEvents == null &&
54
+ document.body
55
+ ) {
56
+ originalBodyPointerEvents = document.body.style.pointerEvents;
57
+
58
+ document.body.style.pointerEvents = 'none';
59
+ }
60
+ enablePointerEventsAfterDelay();
61
+ mountedInstances.forEach(instance => {
62
+ if (instance.props.scrollElement === event.currentTarget) {
63
+ instance.__handleWindowScrollEvent();
64
+ }
65
+ });
66
+ }
67
+
68
+ export function registerScrollListener(
69
+ component: WindowScroller,
70
+ element: Element,
71
+ ) {
72
+ if (
73
+ !mountedInstances.some(instance => instance.props.scrollElement === element)
74
+ ) {
75
+ element.addEventListener('scroll', onScrollWindow);
76
+ }
77
+ mountedInstances.push(component);
78
+ }
79
+
80
+ export function unregisterScrollListener(
81
+ component: WindowScroller,
82
+ element: Element,
83
+ ) {
84
+ mountedInstances = mountedInstances.filter(
85
+ instance => instance !== component,
86
+ );
87
+ if (!mountedInstances.length) {
88
+ element.removeEventListener('scroll', onScrollWindow);
89
+ if (disablePointerEventsTimeoutId) {
90
+ cancelAnimationTimeout(disablePointerEventsTimeoutId);
91
+ enablePointerEventsIfDisabled();
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,13 @@
1
+ export { ArrowKeyStepper } from './ArrowKeyStepper';
2
+ export { AutoSizer } from './AutoSizer';
3
+ export { CellMeasurer, CellMeasurerCache } from './CellMeasurer';
4
+ export { Collection } from './Collection';
5
+ export { ColumnSizer } from './ColumnSizer';
6
+ export { accessibilityOverscanIndicesGetter, defaultCellRangeRenderer, defaultOverscanIndicesGetter, Grid } from './Grid';
7
+ export { InfiniteLoader } from './InfiniteLoader';
8
+ export { List } from './List';
9
+ export { createCellPositioner as createMasonryCellPositioner, Masonry } from './Masonry';
10
+ export { MultiGrid } from './MultiGrid';
11
+ export { ScrollSync } from './ScrollSync';
12
+ export { createMultiSort as createTableMultiSort, defaultCellDataGetter as defaultTableCellDataGetter, defaultCellRenderer as defaultTableCellRenderer, defaultHeaderRenderer as defaultTableHeaderRenderer, defaultHeaderRowRenderer as defaultTableHeaderRowRenderer, defaultRowRenderer as defaultTableRowRenderer, Table, Column, SortDirection, SortIndicator } from './Table';
13
+ export { WindowScroller } from './WindowScroller';
@@ -0,0 +1,5 @@
1
+ jest.mock('dom-helpers/scrollbarSize', function () {
2
+ return function getScrollbarSize() {
3
+ return 20;
4
+ };
5
+ });
@@ -0,0 +1,30 @@
1
+ import initCellMetadata from './initCellMetadata';
2
+
3
+ // Default cell sizes and offsets for use in below tests
4
+ export function getCellMetadata() {
5
+ var cellSizes = [10,
6
+ // 0: 0..0 (min)
7
+ 20,
8
+ // 1: 0..10
9
+ 15,
10
+ // 2: 0..30
11
+ 10,
12
+ // 3: 5..45
13
+ 15,
14
+ // 4: 20..55
15
+ 30,
16
+ // 5: 50..70
17
+ 20,
18
+ // 6: 70..100
19
+ 10,
20
+ // 7: 80..110
21
+ 30 // 8: 110..110 (max)
22
+ ];
23
+ return initCellMetadata({
24
+ cellCount: cellSizes.length,
25
+ size: function size(_ref) {
26
+ var index = _ref.index;
27
+ return cellSizes[index];
28
+ }
29
+ });
30
+ }
@@ -0,0 +1,23 @@
1
+ /*:: type Callback = (timestamp: number) => void;*/
2
+ /*:: type CancelAnimationFrame = (requestId: number) => void;*/
3
+ /*:: type RequestAnimationFrame = (callback: Callback) => number;*/
4
+ // Properly handle server-side rendering.
5
+ var win;
6
+ if (typeof window !== 'undefined') {
7
+ win = window;
8
+ } else if (typeof self !== 'undefined') {
9
+ win = self;
10
+ } else {
11
+ win = {};
12
+ }
13
+
14
+ // requestAnimationFrame() shim by Paul Irish
15
+ // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
16
+ var request = win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || function (callback /*: Callback*/) /*: RequestAnimationFrame*/{
17
+ return (win /*: any*/).setTimeout(callback, 1000 / 60);
18
+ };
19
+ var cancel = win.cancelAnimationFrame || win.webkitCancelAnimationFrame || win.mozCancelAnimationFrame || win.oCancelAnimationFrame || win.msCancelAnimationFrame || function (id /*: number*/) {
20
+ (win /*: any*/).clearTimeout(id);
21
+ };
22
+ export var raf /*: RequestAnimationFrame*/ = (request /*: any*/);
23
+ export var caf /*: CancelAnimationFrame*/ = (cancel /*: any*/);
@@ -0,0 +1,216 @@
1
+ import createCallbackMemoizer from './createCallbackMemoizer';
2
+ describe('createCallbackMemoizer', function () {
3
+ function OnRowsRendered() {
4
+ var _numCalls = 0;
5
+ var _overscanStartIndex;
6
+ var _overscanStopIndex;
7
+ var _startIndex;
8
+ var _stopIndex;
9
+ return {
10
+ numCalls: function numCalls() {
11
+ return _numCalls;
12
+ },
13
+ overscanStartIndex: function overscanStartIndex() {
14
+ return _overscanStartIndex;
15
+ },
16
+ overscanStopIndex: function overscanStopIndex() {
17
+ return _overscanStopIndex;
18
+ },
19
+ startIndex: function startIndex() {
20
+ return _startIndex;
21
+ },
22
+ stopIndex: function stopIndex() {
23
+ return _stopIndex;
24
+ },
25
+ update: function update(params) {
26
+ _overscanStartIndex = params.overscanStartIndex;
27
+ _overscanStopIndex = params.overscanStopIndex;
28
+ _startIndex = params.startIndex;
29
+ _stopIndex = params.stopIndex;
30
+ _numCalls++;
31
+ }
32
+ };
33
+ }
34
+ it('should not call onRowsRendered if startIndex or stopIndex are invalid', function () {
35
+ var util = new OnRowsRendered();
36
+ var helper = createCallbackMemoizer();
37
+ helper({
38
+ callback: util.update,
39
+ indices: {
40
+ startIndex: 0,
41
+ stopIndex: undefined
42
+ }
43
+ });
44
+ expect(util.numCalls()).toEqual(0);
45
+ helper({
46
+ callback: util.update,
47
+ indices: {
48
+ startIndex: undefined,
49
+ stopIndex: 0
50
+ }
51
+ });
52
+ expect(util.numCalls()).toEqual(0);
53
+ });
54
+ it('should call onRowsRendered if startIndex and stopIndex are valid', function () {
55
+ var util = new OnRowsRendered();
56
+ var helper = createCallbackMemoizer();
57
+ helper({
58
+ callback: util.update,
59
+ indices: {
60
+ startIndex: 0,
61
+ stopIndex: 1
62
+ }
63
+ });
64
+ expect(util.numCalls()).toEqual(1);
65
+ expect(util.startIndex()).toEqual(0);
66
+ expect(util.stopIndex()).toEqual(1);
67
+ });
68
+ it('should call onRowsRendered if startIndex and stopIndex are invalid but :requireAllKeys is false', function () {
69
+ var util = new OnRowsRendered();
70
+ var helper = createCallbackMemoizer(false);
71
+ helper({
72
+ callback: util.update,
73
+ indices: {
74
+ startIndex: undefined,
75
+ stopIndex: 1
76
+ }
77
+ });
78
+ expect(util.numCalls()).toEqual(1);
79
+ expect(util.startIndex()).toEqual(undefined);
80
+ expect(util.stopIndex()).toEqual(1);
81
+ });
82
+ it('should not call onRowsRendered if startIndex or stopIndex have not changed', function () {
83
+ var util = new OnRowsRendered();
84
+ var helper = createCallbackMemoizer();
85
+ helper({
86
+ callback: util.update,
87
+ indices: {
88
+ startIndex: 0,
89
+ stopIndex: 1
90
+ }
91
+ });
92
+ expect(util.numCalls()).toEqual(1);
93
+ expect(util.startIndex()).toEqual(0);
94
+ expect(util.stopIndex()).toEqual(1);
95
+ helper({
96
+ callback: util.update,
97
+ indices: {
98
+ startIndex: 0,
99
+ stopIndex: 1
100
+ }
101
+ });
102
+ expect(util.numCalls()).toEqual(1);
103
+ });
104
+ it('should not call onRowsRendered if startIndex or stopIndex have changed', function () {
105
+ var util = new OnRowsRendered();
106
+ var helper = createCallbackMemoizer();
107
+ helper({
108
+ callback: util.update,
109
+ indices: {
110
+ startIndex: 0,
111
+ stopIndex: 1
112
+ }
113
+ });
114
+ expect(util.numCalls()).toEqual(1);
115
+ expect(util.startIndex()).toEqual(0);
116
+ expect(util.stopIndex()).toEqual(1);
117
+ helper({
118
+ callback: util.update,
119
+ indices: {
120
+ startIndex: 1,
121
+ stopIndex: 1
122
+ }
123
+ });
124
+ expect(util.numCalls()).toEqual(2);
125
+ expect(util.startIndex()).toEqual(1);
126
+ expect(util.stopIndex()).toEqual(1);
127
+ helper({
128
+ callback: util.update,
129
+ indices: {
130
+ startIndex: 1,
131
+ stopIndex: 2
132
+ }
133
+ });
134
+ expect(util.numCalls()).toEqual(3);
135
+ expect(util.startIndex()).toEqual(1);
136
+ expect(util.stopIndex()).toEqual(2);
137
+ });
138
+ it('should call onRowsRendered if :overscanCellsCount changes', function () {
139
+ var util = new OnRowsRendered();
140
+ var helper = createCallbackMemoizer();
141
+ helper({
142
+ callback: util.update,
143
+ indices: {
144
+ overscanStartIndex: 0,
145
+ overscanStopIndex: 2,
146
+ startIndex: 0,
147
+ stopIndex: 1
148
+ }
149
+ });
150
+ expect(util.numCalls()).toEqual(1);
151
+ expect(util.startIndex()).toEqual(0);
152
+ expect(util.stopIndex()).toEqual(1);
153
+ expect(util.overscanStartIndex()).toEqual(0);
154
+ expect(util.overscanStopIndex()).toEqual(2);
155
+ helper({
156
+ callback: util.update,
157
+ indices: {
158
+ overscanStartIndex: 0,
159
+ overscanStopIndex: 3,
160
+ startIndex: 0,
161
+ stopIndex: 1
162
+ }
163
+ });
164
+ expect(util.numCalls()).toEqual(2);
165
+ expect(util.startIndex()).toEqual(0);
166
+ expect(util.stopIndex()).toEqual(1);
167
+ expect(util.overscanStartIndex()).toEqual(0);
168
+ expect(util.overscanStopIndex()).toEqual(3);
169
+ });
170
+ it('should support an array of indices', function () {
171
+ var numCalls = 0;
172
+ var indices;
173
+ var callback = function callback(params) {
174
+ indices = params;
175
+ numCalls++;
176
+ };
177
+ var helper = createCallbackMemoizer();
178
+ helper({
179
+ callback: callback,
180
+ indices: [0, 1, 2]
181
+ });
182
+ expect(numCalls).toEqual(1);
183
+ expect(indices).toEqual([0, 1, 2]);
184
+ helper({
185
+ callback: callback,
186
+ indices: [0, 1]
187
+ });
188
+ expect(numCalls).toEqual(2);
189
+ expect(indices).toEqual([0, 1]);
190
+ });
191
+ it('should support an attribute containing an array of indices', function () {
192
+ var numCalls = 0;
193
+ var indices;
194
+ var callback = function callback(params) {
195
+ indices = params.indices;
196
+ numCalls++;
197
+ };
198
+ var helper = createCallbackMemoizer();
199
+ helper({
200
+ callback: callback,
201
+ indices: {
202
+ indices: [0, 1, 2]
203
+ }
204
+ });
205
+ expect(numCalls).toEqual(1);
206
+ expect(indices).toEqual([0, 1, 2]);
207
+ helper({
208
+ callback: callback,
209
+ indices: {
210
+ indices: [0, 1]
211
+ }
212
+ });
213
+ expect(numCalls).toEqual(2);
214
+ expect(indices).toEqual([0, 1]);
215
+ });
216
+ });
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Helper utility that updates the specified callback whenever any of the specified indices have changed.
3
+ */
4
+ export default function createCallbackMemoizer() {
5
+ var requireAllKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
6
+ var cachedIndices = {};
7
+ return function (_ref) {
8
+ var callback = _ref.callback,
9
+ indices = _ref.indices;
10
+ var keys = Object.keys(indices);
11
+ var allInitialized = !requireAllKeys || keys.every(function (key) {
12
+ var value = indices[key];
13
+ return Array.isArray(value) ? value.length > 0 : value >= 0;
14
+ });
15
+ var indexChanged = keys.length !== Object.keys(cachedIndices).length || keys.some(function (key) {
16
+ var cachedValue = cachedIndices[key];
17
+ var value = indices[key];
18
+ return Array.isArray(value) ? cachedValue.join(',') !== value.join(',') : cachedValue !== value;
19
+ });
20
+ cachedIndices = indices;
21
+ if (allInitialized && indexChanged) {
22
+ callback(indices);
23
+ }
24
+ };
25
+ }
@@ -0,0 +1,65 @@
1
+ import getUpdatedOffsetForIndex from './getUpdatedOffsetForIndex';
2
+ import { getCellMetadata } from './TestHelper';
3
+ describe('getUpdatedOffsetForIndex', function () {
4
+ function testHelper(targetIndex, currentOffset) {
5
+ var cellMetadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getCellMetadata();
6
+ return getUpdatedOffsetForIndex({
7
+ cellOffset: cellMetadata[targetIndex].offset,
8
+ cellSize: cellMetadata[targetIndex].size,
9
+ containerSize: 50,
10
+ currentOffset: currentOffset
11
+ });
12
+ }
13
+ it('should scroll to the beginning', function () {
14
+ expect(testHelper(0, 100)).toEqual(0);
15
+ });
16
+ it('should scroll forward to the middle', function () {
17
+ expect(testHelper(4, 0)).toEqual(20);
18
+ });
19
+ it('should scroll backward to the middle', function () {
20
+ expect(testHelper(2, 100)).toEqual(30);
21
+ });
22
+ it('should not scroll if an item is already visible', function () {
23
+ expect(testHelper(2, 20)).toEqual(20);
24
+ });
25
+ it('should scroll to the end', function () {
26
+ expect(testHelper(8, 0)).toEqual(110);
27
+ });
28
+ it('should honor specified :align values', function () {
29
+ expect(getUpdatedOffsetForIndex({
30
+ align: 'auto',
31
+ cellOffset: 50,
32
+ cellSize: 10,
33
+ containerSize: 50,
34
+ currentOffset: 0
35
+ })).toEqual(10);
36
+ expect(getUpdatedOffsetForIndex({
37
+ align: 'start',
38
+ cellOffset: 50,
39
+ cellSize: 10,
40
+ containerSize: 50,
41
+ currentOffset: 0
42
+ })).toEqual(50);
43
+ expect(getUpdatedOffsetForIndex({
44
+ align: 'auto',
45
+ cellOffset: 50,
46
+ cellSize: 10,
47
+ containerSize: 50,
48
+ currentOffset: 100
49
+ })).toEqual(50);
50
+ expect(getUpdatedOffsetForIndex({
51
+ align: 'end',
52
+ cellOffset: 50,
53
+ cellSize: 10,
54
+ containerSize: 50,
55
+ currentOffset: 100
56
+ })).toEqual(10);
57
+ expect(getUpdatedOffsetForIndex({
58
+ align: 'center',
59
+ cellOffset: 50,
60
+ cellSize: 10,
61
+ containerSize: 50,
62
+ currentOffset: 100
63
+ })).toEqual(30);
64
+ });
65
+ });
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Determines a new offset that ensures a certain cell is visible, given the current offset.
3
+ * If the cell is already visible then the current offset will be returned.
4
+ * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.
5
+ *
6
+ * @param align Desired alignment within container; one of "auto" (default), "start", or "end"
7
+ * @param cellOffset Offset (x or y) position for cell
8
+ * @param cellSize Size (width or height) of cell
9
+ * @param containerSize Total size (width or height) of the container
10
+ * @param currentOffset Container's current (x or y) offset
11
+ * @return Offset to use to ensure the specified cell is visible
12
+ */
13
+ export default function getUpdatedOffsetForIndex(_ref) {
14
+ var _ref$align = _ref.align,
15
+ align = _ref$align === void 0 ? 'auto' : _ref$align,
16
+ cellOffset = _ref.cellOffset,
17
+ cellSize = _ref.cellSize,
18
+ containerSize = _ref.containerSize,
19
+ currentOffset = _ref.currentOffset;
20
+ var maxOffset = cellOffset;
21
+ var minOffset = maxOffset - containerSize + cellSize;
22
+ switch (align) {
23
+ case 'start':
24
+ return maxOffset;
25
+ case 'end':
26
+ return minOffset;
27
+ case 'center':
28
+ return maxOffset - (containerSize - cellSize) / 2;
29
+ default:
30
+ return Math.max(minOffset, Math.min(maxOffset, currentOffset));
31
+ }
32
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Initializes metadata for an axis and its cells.
3
+ * This data is used to determine which cells are visible given a container size and scroll position.
4
+ *
5
+ * @param cellCount Total number of cells.
6
+ * @param size Either a fixed size or a function that returns the size for a given given an index.
7
+ * @return Object mapping cell index to cell metadata (size, offset)
8
+ */
9
+ export default function initCellMetadata(_ref) {
10
+ var cellCount = _ref.cellCount,
11
+ size = _ref.size;
12
+ var sizeGetter = typeof size === 'function' ? size : function () {
13
+ return size;
14
+ };
15
+ var cellMetadata = [];
16
+ var offset = 0;
17
+ for (var i = 0; i < cellCount; i++) {
18
+ var _size = sizeGetter({
19
+ index: i
20
+ });
21
+ if (_size == null || isNaN(_size)) {
22
+ throw Error("Invalid size returned for cell ".concat(i, " of value ").concat(_size));
23
+ }
24
+ cellMetadata[i] = {
25
+ size: _size,
26
+ offset: offset
27
+ };
28
+ offset += _size;
29
+ }
30
+ return cellMetadata;
31
+ }