@itwin/itwinui-react 3.15.5 → 3.16.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 (135) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/DEV-cjs/core/Breadcrumbs/Breadcrumbs.js +2 -2
  3. package/DEV-cjs/core/Checkbox/Checkbox.js +4 -6
  4. package/DEV-cjs/core/ComboBox/ComboBox.js +10 -6
  5. package/DEV-cjs/core/DatePicker/DatePicker.js +9 -1
  6. package/DEV-cjs/core/Dialog/Dialog.js +1 -1
  7. package/DEV-cjs/core/Panels/Panels.js +319 -0
  8. package/DEV-cjs/core/Panels/helpers.js +62 -0
  9. package/DEV-cjs/core/Radio/Radio.js +4 -6
  10. package/DEV-cjs/core/RadioTiles/RadioTileGroup.js +9 -2
  11. package/DEV-cjs/core/Select/SelectTag.js +9 -11
  12. package/DEV-cjs/core/Select/SelectTagContainer.js +2 -2
  13. package/DEV-cjs/core/Stepper/Stepper.js +1 -0
  14. package/DEV-cjs/core/Stepper/StepperStep.js +2 -1
  15. package/DEV-cjs/core/Table/Table.js +3 -4
  16. package/DEV-cjs/core/Table/TablePaginator.js +15 -3
  17. package/DEV-cjs/core/Table/actionHandlers/selectHandler.js +10 -7
  18. package/DEV-cjs/core/Table/columns/selectionColumn.js +6 -1
  19. package/DEV-cjs/core/Tree/Tree.js +1 -0
  20. package/DEV-cjs/index.js +4 -0
  21. package/DEV-cjs/styles.js +1 -1
  22. package/DEV-cjs/utils/components/MiddleTextTruncation.js +22 -4
  23. package/DEV-cjs/utils/components/OverflowContainer.js +170 -27
  24. package/DEV-cjs/utils/hooks/index.js +1 -1
  25. package/DEV-cjs/utils/hooks/useInstance.js +38 -0
  26. package/DEV-esm/core/Breadcrumbs/Breadcrumbs.js +2 -2
  27. package/DEV-esm/core/Checkbox/Checkbox.js +5 -10
  28. package/DEV-esm/core/ComboBox/ComboBox.js +10 -6
  29. package/DEV-esm/core/DatePicker/DatePicker.js +11 -1
  30. package/DEV-esm/core/Dialog/Dialog.js +1 -1
  31. package/DEV-esm/core/Panels/Panels.js +301 -0
  32. package/DEV-esm/core/Panels/helpers.js +42 -0
  33. package/DEV-esm/core/Radio/Radio.js +4 -9
  34. package/DEV-esm/core/RadioTiles/RadioTileGroup.js +8 -2
  35. package/DEV-esm/core/Select/SelectTag.js +9 -11
  36. package/DEV-esm/core/Select/SelectTagContainer.js +2 -2
  37. package/DEV-esm/core/Stepper/Stepper.js +1 -0
  38. package/DEV-esm/core/Stepper/StepperStep.js +2 -1
  39. package/DEV-esm/core/Table/Table.js +1 -5
  40. package/DEV-esm/core/Table/TablePaginator.js +16 -3
  41. package/DEV-esm/core/Table/actionHandlers/selectHandler.js +10 -7
  42. package/DEV-esm/core/Table/columns/selectionColumn.js +6 -1
  43. package/DEV-esm/core/Tree/Tree.js +1 -0
  44. package/DEV-esm/index.js +1 -0
  45. package/DEV-esm/styles.js +1 -1
  46. package/DEV-esm/utils/components/MiddleTextTruncation.js +22 -4
  47. package/DEV-esm/utils/components/OverflowContainer.js +143 -4
  48. package/DEV-esm/utils/hooks/index.js +1 -1
  49. package/DEV-esm/utils/hooks/useInstance.js +18 -0
  50. package/cjs/core/Breadcrumbs/Breadcrumbs.js +2 -2
  51. package/cjs/core/Checkbox/Checkbox.js +4 -6
  52. package/cjs/core/ComboBox/ComboBox.d.ts +13 -0
  53. package/cjs/core/ComboBox/ComboBox.js +10 -6
  54. package/cjs/core/DatePicker/DatePicker.d.ts +2 -2
  55. package/cjs/core/DatePicker/DatePicker.js +2 -1
  56. package/cjs/core/Dialog/Dialog.js +1 -1
  57. package/cjs/core/Dialog/DialogContext.d.ts +6 -2
  58. package/cjs/core/Panels/Panels.d.ts +174 -0
  59. package/cjs/core/Panels/Panels.js +312 -0
  60. package/cjs/core/Panels/helpers.d.ts +23 -0
  61. package/cjs/core/Panels/helpers.js +61 -0
  62. package/cjs/core/Radio/Radio.js +4 -6
  63. package/cjs/core/RadioTiles/RadioTileGroup.d.ts +3 -1
  64. package/cjs/core/RadioTiles/RadioTileGroup.js +9 -2
  65. package/cjs/core/Select/SelectTag.d.ts +3 -1
  66. package/cjs/core/Select/SelectTag.js +9 -11
  67. package/cjs/core/Select/SelectTagContainer.js +2 -2
  68. package/cjs/core/Stepper/Stepper.d.ts +4 -0
  69. package/cjs/core/Stepper/Stepper.js +1 -0
  70. package/cjs/core/Stepper/StepperStep.d.ts +4 -0
  71. package/cjs/core/Stepper/StepperStep.js +2 -1
  72. package/cjs/core/Table/Table.d.ts +1 -0
  73. package/cjs/core/Table/Table.js +3 -4
  74. package/cjs/core/Table/TablePaginator.js +15 -3
  75. package/cjs/core/Table/actionHandlers/selectHandler.js +10 -7
  76. package/cjs/core/Table/columns/selectionColumn.js +6 -1
  77. package/cjs/core/Tree/Tree.js +1 -0
  78. package/cjs/index.d.ts +1 -0
  79. package/cjs/index.js +4 -0
  80. package/cjs/styles.js +1 -1
  81. package/cjs/utils/components/MiddleTextTruncation.d.ts +5 -7
  82. package/cjs/utils/components/MiddleTextTruncation.js +22 -4
  83. package/cjs/utils/components/OverflowContainer.d.ts +1 -0
  84. package/cjs/utils/components/OverflowContainer.js +170 -27
  85. package/cjs/utils/hooks/index.d.ts +1 -1
  86. package/cjs/utils/hooks/index.js +1 -1
  87. package/cjs/utils/hooks/useInstance.d.ts +22 -0
  88. package/cjs/utils/hooks/useInstance.js +38 -0
  89. package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -2
  90. package/esm/core/Checkbox/Checkbox.js +5 -10
  91. package/esm/core/ComboBox/ComboBox.d.ts +13 -0
  92. package/esm/core/ComboBox/ComboBox.js +10 -6
  93. package/esm/core/DatePicker/DatePicker.d.ts +2 -2
  94. package/esm/core/DatePicker/DatePicker.js +4 -1
  95. package/esm/core/Dialog/Dialog.js +1 -1
  96. package/esm/core/Dialog/DialogContext.d.ts +6 -2
  97. package/esm/core/Panels/Panels.d.ts +174 -0
  98. package/esm/core/Panels/Panels.js +294 -0
  99. package/esm/core/Panels/helpers.d.ts +23 -0
  100. package/esm/core/Panels/helpers.js +41 -0
  101. package/esm/core/Radio/Radio.js +4 -9
  102. package/esm/core/RadioTiles/RadioTileGroup.d.ts +3 -1
  103. package/esm/core/RadioTiles/RadioTileGroup.js +8 -2
  104. package/esm/core/Select/SelectTag.d.ts +3 -1
  105. package/esm/core/Select/SelectTag.js +9 -11
  106. package/esm/core/Select/SelectTagContainer.js +2 -2
  107. package/esm/core/Stepper/Stepper.d.ts +4 -0
  108. package/esm/core/Stepper/Stepper.js +1 -0
  109. package/esm/core/Stepper/StepperStep.d.ts +4 -0
  110. package/esm/core/Stepper/StepperStep.js +2 -1
  111. package/esm/core/Table/Table.d.ts +1 -0
  112. package/esm/core/Table/Table.js +1 -5
  113. package/esm/core/Table/TablePaginator.js +16 -3
  114. package/esm/core/Table/actionHandlers/selectHandler.js +10 -7
  115. package/esm/core/Table/columns/selectionColumn.js +6 -1
  116. package/esm/core/Tree/Tree.js +1 -0
  117. package/esm/index.d.ts +1 -0
  118. package/esm/index.js +1 -0
  119. package/esm/styles.js +1 -1
  120. package/esm/utils/components/MiddleTextTruncation.d.ts +5 -7
  121. package/esm/utils/components/MiddleTextTruncation.js +22 -4
  122. package/esm/utils/components/OverflowContainer.d.ts +1 -0
  123. package/esm/utils/components/OverflowContainer.js +143 -4
  124. package/esm/utils/hooks/index.d.ts +1 -1
  125. package/esm/utils/hooks/index.js +1 -1
  126. package/esm/utils/hooks/useInstance.d.ts +22 -0
  127. package/esm/utils/hooks/useInstance.js +18 -0
  128. package/package.json +2 -2
  129. package/styles.css +8 -8
  130. package/DEV-cjs/utils/hooks/useOverflow.js +0 -76
  131. package/DEV-esm/utils/hooks/useOverflow.js +0 -63
  132. package/cjs/utils/hooks/useOverflow.d.ts +0 -23
  133. package/cjs/utils/hooks/useOverflow.js +0 -76
  134. package/esm/utils/hooks/useOverflow.d.ts +0 -23
  135. package/esm/utils/hooks/useOverflow.js +0 -63
@@ -1,76 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', {
3
- value: true,
4
- });
5
- Object.defineProperty(exports, 'useOverflow', {
6
- enumerable: true,
7
- get: function () {
8
- return useOverflow;
9
- },
10
- });
11
- const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
12
- const _react = _interop_require_wildcard._(require('react'));
13
- const _useMergedRefs = require('./useMergedRefs.js');
14
- const _useResizeObserver = require('./useResizeObserver.js');
15
- const _useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.js');
16
- const STARTING_MAX_ITEMS_COUNT = 20;
17
- const useOverflow = (
18
- itemsCount,
19
- disabled = false,
20
- orientation = 'horizontal',
21
- ) => {
22
- let containerRef = _react.useRef(null);
23
- let [visibleCount, setVisibleCount] = _react.useState(() =>
24
- disabled ? itemsCount : Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT),
25
- );
26
- let needsFullRerender = _react.useRef(true);
27
- let [containerSize, setContainerSize] = _react.useState(0);
28
- let previousContainerSize = _react.useRef(0);
29
- let updateContainerSize = _react.useCallback(
30
- ({ width, height }) =>
31
- setContainerSize('horizontal' === orientation ? width : height),
32
- [orientation],
33
- );
34
- let [resizeRef, observer] = (0, _useResizeObserver.useResizeObserver)(
35
- updateContainerSize,
36
- );
37
- let resizeObserverRef = _react.useRef(observer);
38
- (0, _useIsomorphicLayoutEffect.useLayoutEffect)(() => {
39
- if (disabled) setVisibleCount(itemsCount);
40
- else {
41
- setVisibleCount(Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT));
42
- needsFullRerender.current = true;
43
- }
44
- }, [containerSize, disabled, itemsCount]);
45
- let mergedRefs = (0, _useMergedRefs.useMergedRefs)(containerRef, resizeRef);
46
- (0, _useIsomorphicLayoutEffect.useLayoutEffect)(() => {
47
- if (!containerRef.current || disabled) {
48
- resizeObserverRef.current?.disconnect();
49
- return;
50
- }
51
- let dimension = 'horizontal' === orientation ? 'Width' : 'Height';
52
- let availableSize = containerRef.current[`offset${dimension}`];
53
- let requiredSize = containerRef.current[`scroll${dimension}`];
54
- if (availableSize < requiredSize) {
55
- let avgItemSize = requiredSize / visibleCount;
56
- let visibleItems = Math.floor(availableSize / avgItemSize);
57
- setVisibleCount(visibleItems > 0 ? visibleItems : 1);
58
- } else if (needsFullRerender.current) {
59
- let childrenSize = Array.from(containerRef.current.children).reduce(
60
- (sum, child) => sum + child[`offset${dimension}`],
61
- 0,
62
- );
63
- let currentVisibleCount =
64
- visibleCount || Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT);
65
- let avgItemSize = childrenSize / currentVisibleCount;
66
- let visibleItems = Math.floor(availableSize / avgItemSize);
67
- if (!isNaN(visibleItems))
68
- setVisibleCount(Math.min(itemsCount, 2 * visibleItems));
69
- }
70
- needsFullRerender.current = false;
71
- }, [containerSize, visibleCount, disabled, itemsCount, orientation]);
72
- (0, _useIsomorphicLayoutEffect.useLayoutEffect)(() => {
73
- previousContainerSize.current = containerSize;
74
- }, [containerSize]);
75
- return [mergedRefs, visibleCount];
76
- };
@@ -1,63 +0,0 @@
1
- import * as React from 'react';
2
- import { useMergedRefs } from './useMergedRefs.js';
3
- import { useResizeObserver } from './useResizeObserver.js';
4
- import { useLayoutEffect } from './useIsomorphicLayoutEffect.js';
5
- let STARTING_MAX_ITEMS_COUNT = 20;
6
- export const useOverflow = (
7
- itemsCount,
8
- disabled = false,
9
- orientation = 'horizontal',
10
- ) => {
11
- let containerRef = React.useRef(null);
12
- let [visibleCount, setVisibleCount] = React.useState(() =>
13
- disabled ? itemsCount : Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT),
14
- );
15
- let needsFullRerender = React.useRef(true);
16
- let [containerSize, setContainerSize] = React.useState(0);
17
- let previousContainerSize = React.useRef(0);
18
- let updateContainerSize = React.useCallback(
19
- ({ width, height }) =>
20
- setContainerSize('horizontal' === orientation ? width : height),
21
- [orientation],
22
- );
23
- let [resizeRef, observer] = useResizeObserver(updateContainerSize);
24
- let resizeObserverRef = React.useRef(observer);
25
- useLayoutEffect(() => {
26
- if (disabled) setVisibleCount(itemsCount);
27
- else {
28
- setVisibleCount(Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT));
29
- needsFullRerender.current = true;
30
- }
31
- }, [containerSize, disabled, itemsCount]);
32
- let mergedRefs = useMergedRefs(containerRef, resizeRef);
33
- useLayoutEffect(() => {
34
- if (!containerRef.current || disabled) {
35
- resizeObserverRef.current?.disconnect();
36
- return;
37
- }
38
- let dimension = 'horizontal' === orientation ? 'Width' : 'Height';
39
- let availableSize = containerRef.current[`offset${dimension}`];
40
- let requiredSize = containerRef.current[`scroll${dimension}`];
41
- if (availableSize < requiredSize) {
42
- let avgItemSize = requiredSize / visibleCount;
43
- let visibleItems = Math.floor(availableSize / avgItemSize);
44
- setVisibleCount(visibleItems > 0 ? visibleItems : 1);
45
- } else if (needsFullRerender.current) {
46
- let childrenSize = Array.from(containerRef.current.children).reduce(
47
- (sum, child) => sum + child[`offset${dimension}`],
48
- 0,
49
- );
50
- let currentVisibleCount =
51
- visibleCount || Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT);
52
- let avgItemSize = childrenSize / currentVisibleCount;
53
- let visibleItems = Math.floor(availableSize / avgItemSize);
54
- if (!isNaN(visibleItems))
55
- setVisibleCount(Math.min(itemsCount, 2 * visibleItems));
56
- }
57
- needsFullRerender.current = false;
58
- }, [containerSize, visibleCount, disabled, itemsCount, orientation]);
59
- useLayoutEffect(() => {
60
- previousContainerSize.current = containerSize;
61
- }, [containerSize]);
62
- return [mergedRefs, visibleCount];
63
- };
@@ -1,23 +0,0 @@
1
- /**
2
- * Hook that observes the size of an element and returns the number of items
3
- * that should be visible based on the size of the container element.
4
- *
5
- * The returned number should be used to render the element with fewer items.
6
- *
7
- * @private
8
- * @param itemsCount Number of items that this element contains.
9
- * @param disabled Set to true to disconnect the observer.
10
- * @param dimension 'horizontal' (default) or 'vertical'
11
- * @returns [callback ref to set on container, stateful count of visible items]
12
- *
13
- * @example
14
- * const items = Array(10).fill().map((_, i) => <span>Item {i}</span>);
15
- * const [ref, visibleCount] = useOverflow(items);
16
- * ...
17
- * return (
18
- * <div ref={ref}>
19
- * {items.slice(0, visibleCount)}
20
- * </div>
21
- * );
22
- */
23
- export declare const useOverflow: <T extends HTMLElement>(itemsCount: number, disabled?: boolean, orientation?: "horizontal" | "vertical") => readonly [(instance: T | null | undefined) => void, number];
@@ -1,76 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', {
3
- value: true,
4
- });
5
- Object.defineProperty(exports, 'useOverflow', {
6
- enumerable: true,
7
- get: function () {
8
- return useOverflow;
9
- },
10
- });
11
- const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
12
- const _react = _interop_require_wildcard._(require('react'));
13
- const _useMergedRefs = require('./useMergedRefs.js');
14
- const _useResizeObserver = require('./useResizeObserver.js');
15
- const _useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.js');
16
- const STARTING_MAX_ITEMS_COUNT = 20;
17
- const useOverflow = (
18
- itemsCount,
19
- disabled = false,
20
- orientation = 'horizontal',
21
- ) => {
22
- let containerRef = _react.useRef(null);
23
- let [visibleCount, setVisibleCount] = _react.useState(() =>
24
- disabled ? itemsCount : Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT),
25
- );
26
- let needsFullRerender = _react.useRef(true);
27
- let [containerSize, setContainerSize] = _react.useState(0);
28
- let previousContainerSize = _react.useRef(0);
29
- let updateContainerSize = _react.useCallback(
30
- ({ width, height }) =>
31
- setContainerSize('horizontal' === orientation ? width : height),
32
- [orientation],
33
- );
34
- let [resizeRef, observer] = (0, _useResizeObserver.useResizeObserver)(
35
- updateContainerSize,
36
- );
37
- let resizeObserverRef = _react.useRef(observer);
38
- (0, _useIsomorphicLayoutEffect.useLayoutEffect)(() => {
39
- if (disabled) setVisibleCount(itemsCount);
40
- else {
41
- setVisibleCount(Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT));
42
- needsFullRerender.current = true;
43
- }
44
- }, [containerSize, disabled, itemsCount]);
45
- let mergedRefs = (0, _useMergedRefs.useMergedRefs)(containerRef, resizeRef);
46
- (0, _useIsomorphicLayoutEffect.useLayoutEffect)(() => {
47
- if (!containerRef.current || disabled) {
48
- resizeObserverRef.current?.disconnect();
49
- return;
50
- }
51
- let dimension = 'horizontal' === orientation ? 'Width' : 'Height';
52
- let availableSize = containerRef.current[`offset${dimension}`];
53
- let requiredSize = containerRef.current[`scroll${dimension}`];
54
- if (availableSize < requiredSize) {
55
- let avgItemSize = requiredSize / visibleCount;
56
- let visibleItems = Math.floor(availableSize / avgItemSize);
57
- setVisibleCount(visibleItems > 0 ? visibleItems : 1);
58
- } else if (needsFullRerender.current) {
59
- let childrenSize = Array.from(containerRef.current.children).reduce(
60
- (sum, child) => sum + child[`offset${dimension}`],
61
- 0,
62
- );
63
- let currentVisibleCount =
64
- visibleCount || Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT);
65
- let avgItemSize = childrenSize / currentVisibleCount;
66
- let visibleItems = Math.floor(availableSize / avgItemSize);
67
- if (!isNaN(visibleItems))
68
- setVisibleCount(Math.min(itemsCount, 2 * visibleItems));
69
- }
70
- needsFullRerender.current = false;
71
- }, [containerSize, visibleCount, disabled, itemsCount, orientation]);
72
- (0, _useIsomorphicLayoutEffect.useLayoutEffect)(() => {
73
- previousContainerSize.current = containerSize;
74
- }, [containerSize]);
75
- return [mergedRefs, visibleCount];
76
- };
@@ -1,23 +0,0 @@
1
- /**
2
- * Hook that observes the size of an element and returns the number of items
3
- * that should be visible based on the size of the container element.
4
- *
5
- * The returned number should be used to render the element with fewer items.
6
- *
7
- * @private
8
- * @param itemsCount Number of items that this element contains.
9
- * @param disabled Set to true to disconnect the observer.
10
- * @param dimension 'horizontal' (default) or 'vertical'
11
- * @returns [callback ref to set on container, stateful count of visible items]
12
- *
13
- * @example
14
- * const items = Array(10).fill().map((_, i) => <span>Item {i}</span>);
15
- * const [ref, visibleCount] = useOverflow(items);
16
- * ...
17
- * return (
18
- * <div ref={ref}>
19
- * {items.slice(0, visibleCount)}
20
- * </div>
21
- * );
22
- */
23
- export declare const useOverflow: <T extends HTMLElement>(itemsCount: number, disabled?: boolean, orientation?: "horizontal" | "vertical") => readonly [(instance: T | null | undefined) => void, number];
@@ -1,63 +0,0 @@
1
- import * as React from 'react';
2
- import { useMergedRefs } from './useMergedRefs.js';
3
- import { useResizeObserver } from './useResizeObserver.js';
4
- import { useLayoutEffect } from './useIsomorphicLayoutEffect.js';
5
- let STARTING_MAX_ITEMS_COUNT = 20;
6
- export const useOverflow = (
7
- itemsCount,
8
- disabled = false,
9
- orientation = 'horizontal',
10
- ) => {
11
- let containerRef = React.useRef(null);
12
- let [visibleCount, setVisibleCount] = React.useState(() =>
13
- disabled ? itemsCount : Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT),
14
- );
15
- let needsFullRerender = React.useRef(true);
16
- let [containerSize, setContainerSize] = React.useState(0);
17
- let previousContainerSize = React.useRef(0);
18
- let updateContainerSize = React.useCallback(
19
- ({ width, height }) =>
20
- setContainerSize('horizontal' === orientation ? width : height),
21
- [orientation],
22
- );
23
- let [resizeRef, observer] = useResizeObserver(updateContainerSize);
24
- let resizeObserverRef = React.useRef(observer);
25
- useLayoutEffect(() => {
26
- if (disabled) setVisibleCount(itemsCount);
27
- else {
28
- setVisibleCount(Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT));
29
- needsFullRerender.current = true;
30
- }
31
- }, [containerSize, disabled, itemsCount]);
32
- let mergedRefs = useMergedRefs(containerRef, resizeRef);
33
- useLayoutEffect(() => {
34
- if (!containerRef.current || disabled) {
35
- resizeObserverRef.current?.disconnect();
36
- return;
37
- }
38
- let dimension = 'horizontal' === orientation ? 'Width' : 'Height';
39
- let availableSize = containerRef.current[`offset${dimension}`];
40
- let requiredSize = containerRef.current[`scroll${dimension}`];
41
- if (availableSize < requiredSize) {
42
- let avgItemSize = requiredSize / visibleCount;
43
- let visibleItems = Math.floor(availableSize / avgItemSize);
44
- setVisibleCount(visibleItems > 0 ? visibleItems : 1);
45
- } else if (needsFullRerender.current) {
46
- let childrenSize = Array.from(containerRef.current.children).reduce(
47
- (sum, child) => sum + child[`offset${dimension}`],
48
- 0,
49
- );
50
- let currentVisibleCount =
51
- visibleCount || Math.min(itemsCount, STARTING_MAX_ITEMS_COUNT);
52
- let avgItemSize = childrenSize / currentVisibleCount;
53
- let visibleItems = Math.floor(availableSize / avgItemSize);
54
- if (!isNaN(visibleItems))
55
- setVisibleCount(Math.min(itemsCount, 2 * visibleItems));
56
- }
57
- needsFullRerender.current = false;
58
- }, [containerSize, visibleCount, disabled, itemsCount, orientation]);
59
- useLayoutEffect(() => {
60
- previousContainerSize.current = containerSize;
61
- }, [containerSize]);
62
- return [mergedRefs, visibleCount];
63
- };