@itwin/itwinui-react 3.13.2 → 3.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEV-cjs/core/ComboBox/ComboBoxMenu.js +6 -7
- package/DEV-cjs/core/Table/Table.js +11 -6
- package/DEV-cjs/core/Table/TableRowMemoized.js +13 -11
- package/DEV-cjs/core/Tree/Tree.js +9 -8
- package/DEV-cjs/styles.js +1 -1
- package/DEV-cjs/utils/hooks/useVirtualScroll.js +27 -6
- package/DEV-esm/core/ComboBox/ComboBoxMenu.js +6 -7
- package/DEV-esm/core/Table/Table.js +11 -6
- package/DEV-esm/core/Table/TableRowMemoized.js +13 -11
- package/DEV-esm/core/Tree/Tree.js +9 -8
- package/DEV-esm/styles.js +1 -1
- package/DEV-esm/utils/hooks/useVirtualScroll.js +27 -6
- package/cjs/core/ComboBox/ComboBoxMenu.js +6 -7
- package/cjs/core/Table/Table.js +13 -5
- package/cjs/core/Table/TableRowMemoized.js +17 -15
- package/cjs/core/Tree/Tree.js +8 -7
- package/cjs/styles.js +1 -1
- package/cjs/utils/hooks/useVirtualScroll.d.ts +25 -5
- package/cjs/utils/hooks/useVirtualScroll.js +28 -6
- package/esm/core/ComboBox/ComboBoxMenu.js +6 -7
- package/esm/core/Table/Table.js +13 -5
- package/esm/core/Table/TableRowMemoized.js +17 -15
- package/esm/core/Tree/Tree.js +8 -7
- package/esm/styles.js +1 -1
- package/esm/utils/hooks/useVirtualScroll.d.ts +25 -5
- package/esm/utils/hooks/useVirtualScroll.js +28 -6
- package/package.json +1 -1
- package/styles.css +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.13.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2138](https://github.com/iTwin/iTwinUI/pull/2138): Fixed an issue in `Table` column resizing where passing in a `width` value that was less than the column's default `minWidth` would cause an undesirable shift when the column was resized.
|
|
8
|
+
- [#2170](https://github.com/iTwin/iTwinUI/pull/2170): Fixed an issue in virtualized `Tree` where the `style` prop passed to `TreeNode` was not respected.
|
|
9
|
+
- [#2170](https://github.com/iTwin/iTwinUI/pull/2170): Fixed an issue in virtualized `Tree` where horizontal scroll was impossible to achieve.
|
|
10
|
+
- [#2174](https://github.com/iTwin/iTwinUI/pull/2174): Fixed an issue in `Table` where the virtualizer was being initialized when the `enableVirtualization` prop wasn't set to `true`.
|
|
11
|
+
|
|
12
|
+
## 3.13.3
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- [#2163](https://github.com/iTwin/iTwinUI/pull/2163): Fixed an issue in virtualized `Table` where horizontal scroll was broken.
|
|
17
|
+
|
|
3
18
|
## 3.13.2
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -34,7 +34,7 @@ const VirtualizedComboBoxMenu = (props)=>{
|
|
|
34
34
|
focusedIndex,
|
|
35
35
|
menuRef
|
|
36
36
|
]);
|
|
37
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
37
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
38
38
|
count: filteredOptions.length || 1,
|
|
39
39
|
getScrollElement: ()=>menuRef.current,
|
|
40
40
|
estimateSize: ()=>mostlySubLabeled ? 48 : 36,
|
|
@@ -51,10 +51,8 @@ const VirtualizedComboBoxMenu = (props)=>{
|
|
|
51
51
|
return _react.cloneElement(menuItem, {
|
|
52
52
|
key: virtualItem.key,
|
|
53
53
|
ref: virtualizer.measureElement,
|
|
54
|
+
'data-iui-virtualizer': 'item',
|
|
54
55
|
style: {
|
|
55
|
-
position: 'absolute',
|
|
56
|
-
top: 0,
|
|
57
|
-
left: 0,
|
|
58
56
|
width: '100%',
|
|
59
57
|
transform: `translateY(${virtualItem.start}px)`
|
|
60
58
|
}
|
|
@@ -65,13 +63,14 @@ const VirtualizedComboBoxMenu = (props)=>{
|
|
|
65
63
|
children,
|
|
66
64
|
virtualizer.measureElement
|
|
67
65
|
]);
|
|
68
|
-
return _react.createElement(_react.Fragment, null, _react.createElement(_index.ShadowRoot,
|
|
66
|
+
return _react.createElement(_react.Fragment, null, _react.createElement(_index.ShadowRoot, {
|
|
67
|
+
css: virtualizerCss
|
|
68
|
+
}, _react.createElement(_index.Box, {
|
|
69
69
|
as: "div",
|
|
70
|
+
"data-iui-virtualizer": "root",
|
|
70
71
|
...rest,
|
|
71
72
|
style: {
|
|
72
73
|
minBlockSize: virtualizer.getTotalSize(),
|
|
73
|
-
minInlineSize: '100%',
|
|
74
|
-
contain: 'strict',
|
|
75
74
|
...props.style
|
|
76
75
|
}
|
|
77
76
|
}, _react.createElement("slot", null))), _react.createElement(_react.Fragment, null, virtualizer.getVirtualItems().map((virtualItem)=>virtualItemRenderer(virtualItem))));
|
|
@@ -290,7 +290,8 @@ const Table = (props)=>{
|
|
|
290
290
|
});
|
|
291
291
|
}
|
|
292
292
|
});
|
|
293
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
293
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
294
|
+
enabled: enableVirtualization,
|
|
294
295
|
count: page.length,
|
|
295
296
|
getScrollElement: ()=>tableRef.current,
|
|
296
297
|
estimateSize: ()=>rowHeight,
|
|
@@ -411,7 +412,10 @@ const Table = (props)=>{
|
|
|
411
412
|
if ([
|
|
412
413
|
void 0,
|
|
413
414
|
0
|
|
414
|
-
].includes(column.minWidth))
|
|
415
|
+
].includes(column.minWidth)) {
|
|
416
|
+
column.minWidth = columnHasExpanders ? COLUMN_MIN_WIDTHS.withExpander : COLUMN_MIN_WIDTHS.default;
|
|
417
|
+
if ('number' == typeof column.width && column.minWidth > column.width) column.minWidth = column.width;
|
|
418
|
+
}
|
|
415
419
|
let columnProps = column.getHeaderProps({
|
|
416
420
|
...restSortProps,
|
|
417
421
|
className: (0, _classnames.default)('iui-table-cell', {
|
|
@@ -500,11 +504,12 @@ const Table = (props)=>{
|
|
|
500
504
|
}),
|
|
501
505
|
tabIndex: -1,
|
|
502
506
|
"aria-multiselectable": isSelectable && 'multi' === selectionMode || void 0
|
|
503
|
-
}, _react.createElement(_index.ShadowRoot,
|
|
507
|
+
}, _react.createElement(_index.ShadowRoot, {
|
|
508
|
+
css: virtualizerCss
|
|
509
|
+
}, enableVirtualization && 0 !== data.length ? _react.createElement("div", {
|
|
510
|
+
"data-iui-virtualizer": "root",
|
|
504
511
|
style: {
|
|
505
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
506
|
-
minInlineSize: '100%',
|
|
507
|
-
contain: 'strict'
|
|
512
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
508
513
|
}
|
|
509
514
|
}, _react.createElement("slot", null)) : _react.createElement("slot", null)), 0 !== data.length && _react.createElement(_react.Fragment, null, enableVirtualization ? virtualizer.getVirtualItems().map((virtualItem)=>getPreparedRow(virtualItem.index, virtualItem, virtualizer)) : page.map((_, index)=>getPreparedRow(index))), isLoading && 0 === data.length && _react.createElement(_index.Box, {
|
|
510
515
|
as: "div",
|
|
@@ -51,22 +51,24 @@ const TableRow = (props)=>{
|
|
|
51
51
|
flex: "0 0 auto",
|
|
52
52
|
minWidth: '100%',
|
|
53
53
|
...null != virtualItem ? {
|
|
54
|
-
position: 'absolute',
|
|
55
|
-
top: 0,
|
|
56
|
-
left: 0,
|
|
57
54
|
transform: `translateY(${virtualItem.start}px)`
|
|
58
55
|
} : {}
|
|
59
56
|
}
|
|
60
57
|
}),
|
|
61
58
|
...restUserRowProps,
|
|
62
|
-
|
|
63
|
-
'iui-table-row
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
...{
|
|
60
|
+
className: (0, _classnames.default)('iui-table-row', {
|
|
61
|
+
'iui-table-row-expanded': row.isExpanded && subComponent,
|
|
62
|
+
'iui-loading': isLoading
|
|
63
|
+
}, userRowProps?.className),
|
|
64
|
+
'aria-selected': row.isSelected || void 0,
|
|
65
|
+
'aria-disabled': isDisabled || void 0,
|
|
66
|
+
'data-iui-status': status,
|
|
67
|
+
'data-iui-index': virtualItem?.index,
|
|
68
|
+
...null != virtualItem && {
|
|
69
|
+
'data-iui-virtualizer': 'item'
|
|
70
|
+
}
|
|
71
|
+
}
|
|
70
72
|
};
|
|
71
73
|
let refs = (0, _index.useMergedRefs)(intersectionRef, mergedProps.ref, tableRowRef, virtualizer?.measureElement);
|
|
72
74
|
return _react.createElement(_react.Fragment, null, _react.createElement(_index.Box, {
|
|
@@ -105,12 +105,11 @@ const Tree = (props)=>{
|
|
|
105
105
|
...children.props,
|
|
106
106
|
key: virtualItem.key,
|
|
107
107
|
'data-iui-index': virtualItem.index,
|
|
108
|
+
'data-iui-virtualizer': 'item',
|
|
108
109
|
ref: virtualizer.measureElement,
|
|
109
110
|
style: {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
left: 0,
|
|
113
|
-
width: '100%',
|
|
111
|
+
...children.props.style,
|
|
112
|
+
'--_iui-width': '100%',
|
|
114
113
|
transform: `translateY(${virtualItem.start}px)`
|
|
115
114
|
}
|
|
116
115
|
})) : nodeRenderer(node.nodeProps));
|
|
@@ -174,7 +173,7 @@ const VirtualizedTree = _react.forwardRef(({ flatNodesList, itemRenderer, scroll
|
|
|
174
173
|
let getItemKey = _react.useCallback((index)=>flatNodesList[index].nodeProps.nodeId, [
|
|
175
174
|
flatNodesList
|
|
176
175
|
]);
|
|
177
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
176
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
178
177
|
count: flatNodesList.length,
|
|
179
178
|
getScrollElement: ()=>parentRef.current,
|
|
180
179
|
estimateSize: ()=>39,
|
|
@@ -189,10 +188,12 @@ const VirtualizedTree = _react.forwardRef(({ flatNodesList, itemRenderer, scroll
|
|
|
189
188
|
return _react.createElement(TreeElement, {
|
|
190
189
|
...rest,
|
|
191
190
|
ref: (0, _index.useMergedRefs)(ref, parentRef)
|
|
192
|
-
}, _react.createElement(_index.ShadowRoot,
|
|
191
|
+
}, _react.createElement(_index.ShadowRoot, {
|
|
192
|
+
css: virtualizerCss
|
|
193
|
+
}, _react.createElement("div", {
|
|
194
|
+
"data-iui-virtualizer": "root",
|
|
193
195
|
style: {
|
|
194
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
195
|
-
contain: 'strict'
|
|
196
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
196
197
|
}
|
|
197
198
|
}, _react.createElement("slot", null))), _react.createElement(_react.Fragment, null, virtualizer.getVirtualItems().map((virtualItem)=>itemRenderer(virtualItem.index, virtualItem, virtualizer))));
|
|
198
199
|
});
|
package/DEV-cjs/styles.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="3.13.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="3.13.4";const u=new Proxy({},{get(t,i){if(typeof i=="string"&&i.startsWith("iui-"))return i.replace("iui-",`_iui${e.replace(/\./g,"")}-`)},has(t,i){return typeof i=="string"&&i.startsWith("iui-")}});exports.styles=u;exports.version=e;
|
|
@@ -11,28 +11,49 @@ Object.defineProperty(exports, "useVirtualScroll", {
|
|
|
11
11
|
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
|
|
12
12
|
const _reactvirtual = require("@tanstack/react-virtual");
|
|
13
13
|
const _react = _interop_require_default._(require("react"));
|
|
14
|
+
const css = `
|
|
15
|
+
:host {
|
|
16
|
+
contain: layout;
|
|
17
|
+
background-color: var(--iui-color-background);
|
|
18
|
+
}
|
|
19
|
+
[data-iui-virtualizer='root'] {
|
|
20
|
+
min-inline-size: 100%;
|
|
21
|
+
position: relative;
|
|
22
|
+
}
|
|
23
|
+
::slotted([data-iui-virtualizer='item']) {
|
|
24
|
+
position: absolute !important;
|
|
25
|
+
top: 0 !important;
|
|
26
|
+
left: 0 !important;
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
14
29
|
const useVirtualScroll = (params)=>{
|
|
15
30
|
let { ...rest } = params;
|
|
16
|
-
let
|
|
31
|
+
let _virtualizer = (0, _reactvirtual.useVirtualizer)({
|
|
17
32
|
indexAttribute: 'data-iui-index',
|
|
18
33
|
overscan: 10,
|
|
19
34
|
...rest
|
|
20
35
|
});
|
|
21
36
|
let scrollToIndex = _react.default.useCallback((index, options)=>{
|
|
22
37
|
setTimeout(()=>{
|
|
23
|
-
|
|
38
|
+
_virtualizer.scrollToIndex(index, {
|
|
24
39
|
align: 'auto',
|
|
25
40
|
...options
|
|
26
41
|
});
|
|
27
42
|
});
|
|
28
43
|
}, [
|
|
29
|
-
|
|
44
|
+
_virtualizer
|
|
30
45
|
]);
|
|
31
|
-
|
|
32
|
-
...
|
|
46
|
+
let virtualizer = _react.default.useMemo(()=>({
|
|
47
|
+
..._virtualizer,
|
|
33
48
|
scrollToIndex
|
|
34
49
|
}), [
|
|
35
|
-
|
|
50
|
+
_virtualizer,
|
|
36
51
|
scrollToIndex
|
|
37
52
|
]);
|
|
53
|
+
return _react.default.useMemo(()=>({
|
|
54
|
+
virtualizer,
|
|
55
|
+
css
|
|
56
|
+
}), [
|
|
57
|
+
virtualizer
|
|
58
|
+
]);
|
|
38
59
|
};
|
|
@@ -22,7 +22,7 @@ let VirtualizedComboBoxMenu = (props)=>{
|
|
|
22
22
|
focusedIndex,
|
|
23
23
|
menuRef
|
|
24
24
|
]);
|
|
25
|
-
let virtualizer = useVirtualScroll({
|
|
25
|
+
let { virtualizer, css: virtualizerCss } = useVirtualScroll({
|
|
26
26
|
count: filteredOptions.length || 1,
|
|
27
27
|
getScrollElement: ()=>menuRef.current,
|
|
28
28
|
estimateSize: ()=>mostlySubLabeled ? 48 : 36,
|
|
@@ -39,10 +39,8 @@ let VirtualizedComboBoxMenu = (props)=>{
|
|
|
39
39
|
return React.cloneElement(menuItem, {
|
|
40
40
|
key: virtualItem.key,
|
|
41
41
|
ref: virtualizer.measureElement,
|
|
42
|
+
'data-iui-virtualizer': 'item',
|
|
42
43
|
style: {
|
|
43
|
-
position: 'absolute',
|
|
44
|
-
top: 0,
|
|
45
|
-
left: 0,
|
|
46
44
|
width: '100%',
|
|
47
45
|
transform: `translateY(${virtualItem.start}px)`
|
|
48
46
|
}
|
|
@@ -53,13 +51,14 @@ let VirtualizedComboBoxMenu = (props)=>{
|
|
|
53
51
|
children,
|
|
54
52
|
virtualizer.measureElement
|
|
55
53
|
]);
|
|
56
|
-
return React.createElement(React.Fragment, null, React.createElement(ShadowRoot,
|
|
54
|
+
return React.createElement(React.Fragment, null, React.createElement(ShadowRoot, {
|
|
55
|
+
css: virtualizerCss
|
|
56
|
+
}, React.createElement(Box, {
|
|
57
57
|
as: "div",
|
|
58
|
+
"data-iui-virtualizer": "root",
|
|
58
59
|
...rest,
|
|
59
60
|
style: {
|
|
60
61
|
minBlockSize: virtualizer.getTotalSize(),
|
|
61
|
-
minInlineSize: '100%',
|
|
62
|
-
contain: 'strict',
|
|
63
62
|
...props.style
|
|
64
63
|
}
|
|
65
64
|
}, React.createElement("slot", null))), React.createElement(React.Fragment, null, virtualizer.getVirtualItems().map((virtualItem)=>virtualItemRenderer(virtualItem))));
|
|
@@ -270,7 +270,8 @@ export const Table = (props)=>{
|
|
|
270
270
|
});
|
|
271
271
|
}
|
|
272
272
|
});
|
|
273
|
-
let virtualizer = useVirtualScroll({
|
|
273
|
+
let { virtualizer, css: virtualizerCss } = useVirtualScroll({
|
|
274
|
+
enabled: enableVirtualization,
|
|
274
275
|
count: page.length,
|
|
275
276
|
getScrollElement: ()=>tableRef.current,
|
|
276
277
|
estimateSize: ()=>rowHeight,
|
|
@@ -391,7 +392,10 @@ export const Table = (props)=>{
|
|
|
391
392
|
if ([
|
|
392
393
|
void 0,
|
|
393
394
|
0
|
|
394
|
-
].includes(column.minWidth))
|
|
395
|
+
].includes(column.minWidth)) {
|
|
396
|
+
column.minWidth = columnHasExpanders ? COLUMN_MIN_WIDTHS.withExpander : COLUMN_MIN_WIDTHS.default;
|
|
397
|
+
if ('number' == typeof column.width && column.minWidth > column.width) column.minWidth = column.width;
|
|
398
|
+
}
|
|
395
399
|
let columnProps = column.getHeaderProps({
|
|
396
400
|
...restSortProps,
|
|
397
401
|
className: cx('iui-table-cell', {
|
|
@@ -480,11 +484,12 @@ export const Table = (props)=>{
|
|
|
480
484
|
}),
|
|
481
485
|
tabIndex: -1,
|
|
482
486
|
"aria-multiselectable": isSelectable && 'multi' === selectionMode || void 0
|
|
483
|
-
}, React.createElement(ShadowRoot,
|
|
487
|
+
}, React.createElement(ShadowRoot, {
|
|
488
|
+
css: virtualizerCss
|
|
489
|
+
}, enableVirtualization && 0 !== data.length ? React.createElement("div", {
|
|
490
|
+
"data-iui-virtualizer": "root",
|
|
484
491
|
style: {
|
|
485
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
486
|
-
minInlineSize: '100%',
|
|
487
|
-
contain: 'strict'
|
|
492
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
488
493
|
}
|
|
489
494
|
}, React.createElement("slot", null)) : React.createElement("slot", null)), 0 !== data.length && React.createElement(React.Fragment, null, enableVirtualization ? virtualizer.getVirtualItems().map((virtualItem)=>getPreparedRow(virtualItem.index, virtualItem, virtualizer)) : page.map((_, index)=>getPreparedRow(index))), isLoading && 0 === data.length && React.createElement(Box, {
|
|
490
495
|
as: "div",
|
|
@@ -31,22 +31,24 @@ export const TableRow = (props)=>{
|
|
|
31
31
|
flex: "0 0 auto",
|
|
32
32
|
minWidth: '100%',
|
|
33
33
|
...null != virtualItem ? {
|
|
34
|
-
position: 'absolute',
|
|
35
|
-
top: 0,
|
|
36
|
-
left: 0,
|
|
37
34
|
transform: `translateY(${virtualItem.start}px)`
|
|
38
35
|
} : {}
|
|
39
36
|
}
|
|
40
37
|
}),
|
|
41
38
|
...restUserRowProps,
|
|
42
|
-
|
|
43
|
-
'iui-table-row
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
...{
|
|
40
|
+
className: cx('iui-table-row', {
|
|
41
|
+
'iui-table-row-expanded': row.isExpanded && subComponent,
|
|
42
|
+
'iui-loading': isLoading
|
|
43
|
+
}, userRowProps?.className),
|
|
44
|
+
'aria-selected': row.isSelected || void 0,
|
|
45
|
+
'aria-disabled': isDisabled || void 0,
|
|
46
|
+
'data-iui-status': status,
|
|
47
|
+
'data-iui-index': virtualItem?.index,
|
|
48
|
+
...null != virtualItem && {
|
|
49
|
+
'data-iui-virtualizer': 'item'
|
|
50
|
+
}
|
|
51
|
+
}
|
|
50
52
|
};
|
|
51
53
|
let refs = useMergedRefs(intersectionRef, mergedProps.ref, tableRowRef, virtualizer?.measureElement);
|
|
52
54
|
return React.createElement(React.Fragment, null, React.createElement(Box, {
|
|
@@ -94,12 +94,11 @@ export const Tree = (props)=>{
|
|
|
94
94
|
...children.props,
|
|
95
95
|
key: virtualItem.key,
|
|
96
96
|
'data-iui-index': virtualItem.index,
|
|
97
|
+
'data-iui-virtualizer': 'item',
|
|
97
98
|
ref: virtualizer.measureElement,
|
|
98
99
|
style: {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
left: 0,
|
|
102
|
-
width: '100%',
|
|
100
|
+
...children.props.style,
|
|
101
|
+
'--_iui-width': '100%',
|
|
103
102
|
transform: `translateY(${virtualItem.start}px)`
|
|
104
103
|
}
|
|
105
104
|
})) : nodeRenderer(node.nodeProps));
|
|
@@ -163,7 +162,7 @@ let VirtualizedTree = React.forwardRef(({ flatNodesList, itemRenderer, scrollToI
|
|
|
163
162
|
let getItemKey = React.useCallback((index)=>flatNodesList[index].nodeProps.nodeId, [
|
|
164
163
|
flatNodesList
|
|
165
164
|
]);
|
|
166
|
-
let virtualizer = useVirtualScroll({
|
|
165
|
+
let { virtualizer, css: virtualizerCss } = useVirtualScroll({
|
|
167
166
|
count: flatNodesList.length,
|
|
168
167
|
getScrollElement: ()=>parentRef.current,
|
|
169
168
|
estimateSize: ()=>39,
|
|
@@ -178,10 +177,12 @@ let VirtualizedTree = React.forwardRef(({ flatNodesList, itemRenderer, scrollToI
|
|
|
178
177
|
return React.createElement(TreeElement, {
|
|
179
178
|
...rest,
|
|
180
179
|
ref: useMergedRefs(ref, parentRef)
|
|
181
|
-
}, React.createElement(ShadowRoot,
|
|
180
|
+
}, React.createElement(ShadowRoot, {
|
|
181
|
+
css: virtualizerCss
|
|
182
|
+
}, React.createElement("div", {
|
|
183
|
+
"data-iui-virtualizer": "root",
|
|
182
184
|
style: {
|
|
183
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
184
|
-
contain: 'strict'
|
|
185
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
185
186
|
}
|
|
186
187
|
}, React.createElement("slot", null))), React.createElement(React.Fragment, null, virtualizer.getVirtualItems().map((virtualItem)=>itemRenderer(virtualItem.index, virtualItem, virtualizer))));
|
|
187
188
|
});
|
package/DEV-esm/styles.js
CHANGED
|
@@ -1,27 +1,48 @@
|
|
|
1
1
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
2
2
|
import React from 'react';
|
|
3
|
+
let css = `
|
|
4
|
+
:host {
|
|
5
|
+
contain: layout;
|
|
6
|
+
background-color: var(--iui-color-background);
|
|
7
|
+
}
|
|
8
|
+
[data-iui-virtualizer='root'] {
|
|
9
|
+
min-inline-size: 100%;
|
|
10
|
+
position: relative;
|
|
11
|
+
}
|
|
12
|
+
::slotted([data-iui-virtualizer='item']) {
|
|
13
|
+
position: absolute !important;
|
|
14
|
+
top: 0 !important;
|
|
15
|
+
left: 0 !important;
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
3
18
|
export const useVirtualScroll = (params)=>{
|
|
4
19
|
let { ...rest } = params;
|
|
5
|
-
let
|
|
20
|
+
let _virtualizer = useVirtualizer({
|
|
6
21
|
indexAttribute: 'data-iui-index',
|
|
7
22
|
overscan: 10,
|
|
8
23
|
...rest
|
|
9
24
|
});
|
|
10
25
|
let scrollToIndex = React.useCallback((index, options)=>{
|
|
11
26
|
setTimeout(()=>{
|
|
12
|
-
|
|
27
|
+
_virtualizer.scrollToIndex(index, {
|
|
13
28
|
align: 'auto',
|
|
14
29
|
...options
|
|
15
30
|
});
|
|
16
31
|
});
|
|
17
32
|
}, [
|
|
18
|
-
|
|
33
|
+
_virtualizer
|
|
19
34
|
]);
|
|
20
|
-
|
|
21
|
-
...
|
|
35
|
+
let virtualizer = React.useMemo(()=>({
|
|
36
|
+
..._virtualizer,
|
|
22
37
|
scrollToIndex
|
|
23
38
|
}), [
|
|
24
|
-
|
|
39
|
+
_virtualizer,
|
|
25
40
|
scrollToIndex
|
|
26
41
|
]);
|
|
42
|
+
return React.useMemo(()=>({
|
|
43
|
+
virtualizer,
|
|
44
|
+
css
|
|
45
|
+
}), [
|
|
46
|
+
virtualizer
|
|
47
|
+
]);
|
|
27
48
|
};
|
|
@@ -35,7 +35,7 @@ const VirtualizedComboBoxMenu = (props) => {
|
|
|
35
35
|
currentElement.getAttribute('data-iui-filtered-index') ?? focusedIndex,
|
|
36
36
|
);
|
|
37
37
|
}, [focusedIndex, menuRef]);
|
|
38
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
38
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
39
39
|
count: filteredOptions.length || 1,
|
|
40
40
|
getScrollElement: () => menuRef.current,
|
|
41
41
|
estimateSize: () => (mostlySubLabeled ? 48 : 36),
|
|
@@ -53,10 +53,8 @@ const VirtualizedComboBoxMenu = (props) => {
|
|
|
53
53
|
return _react.cloneElement(menuItem, {
|
|
54
54
|
key: virtualItem.key,
|
|
55
55
|
ref: virtualizer.measureElement,
|
|
56
|
+
'data-iui-virtualizer': 'item',
|
|
56
57
|
style: {
|
|
57
|
-
position: 'absolute',
|
|
58
|
-
top: 0,
|
|
59
|
-
left: 0,
|
|
60
58
|
width: '100%',
|
|
61
59
|
transform: `translateY(${virtualItem.start}px)`,
|
|
62
60
|
},
|
|
@@ -69,16 +67,17 @@ const VirtualizedComboBoxMenu = (props) => {
|
|
|
69
67
|
null,
|
|
70
68
|
_react.createElement(
|
|
71
69
|
_index.ShadowRoot,
|
|
72
|
-
|
|
70
|
+
{
|
|
71
|
+
css: virtualizerCss,
|
|
72
|
+
},
|
|
73
73
|
_react.createElement(
|
|
74
74
|
_index.Box,
|
|
75
75
|
{
|
|
76
76
|
as: 'div',
|
|
77
|
+
'data-iui-virtualizer': 'root',
|
|
77
78
|
...rest,
|
|
78
79
|
style: {
|
|
79
80
|
minBlockSize: virtualizer.getTotalSize(),
|
|
80
|
-
minInlineSize: '100%',
|
|
81
|
-
contain: 'strict',
|
|
82
81
|
...props.style,
|
|
83
82
|
},
|
|
84
83
|
},
|
package/cjs/core/Table/Table.js
CHANGED
|
@@ -429,7 +429,8 @@ const Table = (props) => {
|
|
|
429
429
|
});
|
|
430
430
|
}
|
|
431
431
|
});
|
|
432
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
432
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
433
|
+
enabled: enableVirtualization,
|
|
433
434
|
count: page.length,
|
|
434
435
|
getScrollElement: () => tableRef.current,
|
|
435
436
|
estimateSize: () => rowHeight,
|
|
@@ -589,10 +590,16 @@ const Table = (props) => {
|
|
|
589
590
|
headerGroup.headers.findIndex(
|
|
590
591
|
(c) => c.id !== _index4.SELECTION_CELL_ID,
|
|
591
592
|
);
|
|
592
|
-
if ([void 0, 0].includes(column.minWidth))
|
|
593
|
+
if ([void 0, 0].includes(column.minWidth)) {
|
|
593
594
|
column.minWidth = columnHasExpanders
|
|
594
595
|
? COLUMN_MIN_WIDTHS.withExpander
|
|
595
596
|
: COLUMN_MIN_WIDTHS.default;
|
|
597
|
+
if (
|
|
598
|
+
'number' == typeof column.width &&
|
|
599
|
+
column.minWidth > column.width
|
|
600
|
+
)
|
|
601
|
+
column.minWidth = column.width;
|
|
602
|
+
}
|
|
596
603
|
let columnProps = column.getHeaderProps({
|
|
597
604
|
...restSortProps,
|
|
598
605
|
className: (0, _classnames.default)(
|
|
@@ -760,15 +767,16 @@ const Table = (props) => {
|
|
|
760
767
|
},
|
|
761
768
|
_react.createElement(
|
|
762
769
|
_index.ShadowRoot,
|
|
763
|
-
|
|
770
|
+
{
|
|
771
|
+
css: virtualizerCss,
|
|
772
|
+
},
|
|
764
773
|
enableVirtualization && 0 !== data.length
|
|
765
774
|
? _react.createElement(
|
|
766
775
|
'div',
|
|
767
776
|
{
|
|
777
|
+
'data-iui-virtualizer': 'root',
|
|
768
778
|
style: {
|
|
769
779
|
minBlockSize: virtualizer.getTotalSize(),
|
|
770
|
-
minInlineSize: '100%',
|
|
771
|
-
contain: 'strict',
|
|
772
780
|
},
|
|
773
781
|
},
|
|
774
782
|
_react.createElement('slot', null),
|
|
@@ -66,27 +66,29 @@ const TableRow = (props) => {
|
|
|
66
66
|
minWidth: '100%',
|
|
67
67
|
...(null != virtualItem
|
|
68
68
|
? {
|
|
69
|
-
position: 'absolute',
|
|
70
|
-
top: 0,
|
|
71
|
-
left: 0,
|
|
72
69
|
transform: `translateY(${virtualItem.start}px)`,
|
|
73
70
|
}
|
|
74
71
|
: {}),
|
|
75
72
|
},
|
|
76
73
|
}),
|
|
77
74
|
...restUserRowProps,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
75
|
+
...{
|
|
76
|
+
className: (0, _classnames.default)(
|
|
77
|
+
'iui-table-row',
|
|
78
|
+
{
|
|
79
|
+
'iui-table-row-expanded': row.isExpanded && subComponent,
|
|
80
|
+
'iui-loading': isLoading,
|
|
81
|
+
},
|
|
82
|
+
userRowProps?.className,
|
|
83
|
+
),
|
|
84
|
+
'aria-selected': row.isSelected || void 0,
|
|
85
|
+
'aria-disabled': isDisabled || void 0,
|
|
86
|
+
'data-iui-status': status,
|
|
87
|
+
'data-iui-index': virtualItem?.index,
|
|
88
|
+
...(null != virtualItem && {
|
|
89
|
+
'data-iui-virtualizer': 'item',
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
90
92
|
};
|
|
91
93
|
let refs = (0, _index.useMergedRefs)(
|
|
92
94
|
intersectionRef,
|
package/cjs/core/Tree/Tree.js
CHANGED
|
@@ -122,12 +122,11 @@ const Tree = (props) => {
|
|
|
122
122
|
...children.props,
|
|
123
123
|
key: virtualItem.key,
|
|
124
124
|
'data-iui-index': virtualItem.index,
|
|
125
|
+
'data-iui-virtualizer': 'item',
|
|
125
126
|
ref: virtualizer.measureElement,
|
|
126
127
|
style: {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
left: 0,
|
|
130
|
-
width: '100%',
|
|
128
|
+
...children.props.style,
|
|
129
|
+
'--_iui-width': '100%',
|
|
131
130
|
transform: `translateY(${virtualItem.start}px)`,
|
|
132
131
|
},
|
|
133
132
|
}),
|
|
@@ -200,7 +199,7 @@ const VirtualizedTree = _react.forwardRef(
|
|
|
200
199
|
(index) => flatNodesList[index].nodeProps.nodeId,
|
|
201
200
|
[flatNodesList],
|
|
202
201
|
);
|
|
203
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
202
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
204
203
|
count: flatNodesList.length,
|
|
205
204
|
getScrollElement: () => parentRef.current,
|
|
206
205
|
estimateSize: () => 39,
|
|
@@ -217,13 +216,15 @@ const VirtualizedTree = _react.forwardRef(
|
|
|
217
216
|
},
|
|
218
217
|
_react.createElement(
|
|
219
218
|
_index.ShadowRoot,
|
|
220
|
-
|
|
219
|
+
{
|
|
220
|
+
css: virtualizerCss,
|
|
221
|
+
},
|
|
221
222
|
_react.createElement(
|
|
222
223
|
'div',
|
|
223
224
|
{
|
|
225
|
+
'data-iui-virtualizer': 'root',
|
|
224
226
|
style: {
|
|
225
227
|
minBlockSize: virtualizer.getTotalSize(),
|
|
226
|
-
contain: 'strict',
|
|
227
228
|
},
|
|
228
229
|
},
|
|
229
230
|
_react.createElement('slot', null),
|