@itwin/itwinui-react 3.13.1 → 3.13.3
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 +13 -0
- package/DEV-cjs/core/ComboBox/ComboBoxMenu.js +6 -7
- package/DEV-cjs/core/Table/Table.js +5 -11
- package/DEV-cjs/core/Table/TableRowMemoized.js +13 -11
- package/DEV-cjs/core/Tree/Tree.js +7 -7
- 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 +5 -11
- package/DEV-esm/core/Table/TableRowMemoized.js +13 -11
- package/DEV-esm/core/Tree/Tree.js +7 -7
- 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 +4 -10
- package/cjs/core/Table/TableRowMemoized.js +17 -15
- package/cjs/core/Tree/Tree.js +6 -6
- 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 +4 -10
- package/esm/core/Table/TableRowMemoized.js +17 -15
- package/esm/core/Tree/Tree.js +6 -6
- 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,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.13.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2163](https://github.com/iTwin/iTwinUI/pull/2163): Fixed an issue in virtualized `Table` where horizontal scroll was broken.
|
|
8
|
+
|
|
9
|
+
## 3.13.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#2143](https://github.com/iTwin/iTwinUI/pull/2143): Added `border-radius` to the `Table` component so that the border radius is correctly applied to the `Table`'s corners.
|
|
14
|
+
- [#2161](https://github.com/iTwin/iTwinUI/pull/2161): Fixed issue where `emptyTableContent` would not appear on virutalized `Table` components.
|
|
15
|
+
|
|
3
16
|
## 3.13.1
|
|
4
17
|
|
|
5
18
|
### 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,7 @@ const Table = (props)=>{
|
|
|
290
290
|
});
|
|
291
291
|
}
|
|
292
292
|
});
|
|
293
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
293
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
294
294
|
count: page.length,
|
|
295
295
|
getScrollElement: ()=>tableRef.current,
|
|
296
296
|
estimateSize: ()=>rowHeight,
|
|
@@ -501,17 +501,11 @@ const Table = (props)=>{
|
|
|
501
501
|
tabIndex: -1,
|
|
502
502
|
"aria-multiselectable": isSelectable && 'multi' === selectionMode || void 0
|
|
503
503
|
}, _react.createElement(_index.ShadowRoot, {
|
|
504
|
-
css:
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
border-radius: inherit;
|
|
508
|
-
}
|
|
509
|
-
`
|
|
510
|
-
}, enableVirtualization ? _react.createElement("div", {
|
|
504
|
+
css: virtualizerCss
|
|
505
|
+
}, enableVirtualization && 0 !== data.length ? _react.createElement("div", {
|
|
506
|
+
"data-iui-virtualizer": "root",
|
|
511
507
|
style: {
|
|
512
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
513
|
-
minInlineSize: '100%',
|
|
514
|
-
contain: 'strict'
|
|
508
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
515
509
|
}
|
|
516
510
|
}, _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, {
|
|
517
511
|
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,11 +105,9 @@ 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
|
-
position: 'absolute',
|
|
111
|
-
top: 0,
|
|
112
|
-
left: 0,
|
|
113
111
|
width: '100%',
|
|
114
112
|
transform: `translateY(${virtualItem.start}px)`
|
|
115
113
|
}
|
|
@@ -174,7 +172,7 @@ const VirtualizedTree = _react.forwardRef(({ flatNodesList, itemRenderer, scroll
|
|
|
174
172
|
let getItemKey = _react.useCallback((index)=>flatNodesList[index].nodeProps.nodeId, [
|
|
175
173
|
flatNodesList
|
|
176
174
|
]);
|
|
177
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
175
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
178
176
|
count: flatNodesList.length,
|
|
179
177
|
getScrollElement: ()=>parentRef.current,
|
|
180
178
|
estimateSize: ()=>39,
|
|
@@ -189,10 +187,12 @@ const VirtualizedTree = _react.forwardRef(({ flatNodesList, itemRenderer, scroll
|
|
|
189
187
|
return _react.createElement(TreeElement, {
|
|
190
188
|
...rest,
|
|
191
189
|
ref: (0, _index.useMergedRefs)(ref, parentRef)
|
|
192
|
-
}, _react.createElement(_index.ShadowRoot,
|
|
190
|
+
}, _react.createElement(_index.ShadowRoot, {
|
|
191
|
+
css: virtualizerCss
|
|
192
|
+
}, _react.createElement("div", {
|
|
193
|
+
"data-iui-virtualizer": "root",
|
|
193
194
|
style: {
|
|
194
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
195
|
-
contain: 'strict'
|
|
195
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
196
196
|
}
|
|
197
197
|
}, _react.createElement("slot", null))), _react.createElement(_react.Fragment, null, virtualizer.getVirtualItems().map((virtualItem)=>itemRenderer(virtualItem.index, virtualItem, virtualizer))));
|
|
198
198
|
});
|
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.3";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,7 @@ export const Table = (props)=>{
|
|
|
270
270
|
});
|
|
271
271
|
}
|
|
272
272
|
});
|
|
273
|
-
let virtualizer = useVirtualScroll({
|
|
273
|
+
let { virtualizer, css: virtualizerCss } = useVirtualScroll({
|
|
274
274
|
count: page.length,
|
|
275
275
|
getScrollElement: ()=>tableRef.current,
|
|
276
276
|
estimateSize: ()=>rowHeight,
|
|
@@ -481,17 +481,11 @@ export const Table = (props)=>{
|
|
|
481
481
|
tabIndex: -1,
|
|
482
482
|
"aria-multiselectable": isSelectable && 'multi' === selectionMode || void 0
|
|
483
483
|
}, React.createElement(ShadowRoot, {
|
|
484
|
-
css:
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
border-radius: inherit;
|
|
488
|
-
}
|
|
489
|
-
`
|
|
490
|
-
}, enableVirtualization ? React.createElement("div", {
|
|
484
|
+
css: virtualizerCss
|
|
485
|
+
}, enableVirtualization && 0 !== data.length ? React.createElement("div", {
|
|
486
|
+
"data-iui-virtualizer": "root",
|
|
491
487
|
style: {
|
|
492
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
493
|
-
minInlineSize: '100%',
|
|
494
|
-
contain: 'strict'
|
|
488
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
495
489
|
}
|
|
496
490
|
}, 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, {
|
|
497
491
|
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,11 +94,9 @@ 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
|
-
position: 'absolute',
|
|
100
|
-
top: 0,
|
|
101
|
-
left: 0,
|
|
102
100
|
width: '100%',
|
|
103
101
|
transform: `translateY(${virtualItem.start}px)`
|
|
104
102
|
}
|
|
@@ -163,7 +161,7 @@ let VirtualizedTree = React.forwardRef(({ flatNodesList, itemRenderer, scrollToI
|
|
|
163
161
|
let getItemKey = React.useCallback((index)=>flatNodesList[index].nodeProps.nodeId, [
|
|
164
162
|
flatNodesList
|
|
165
163
|
]);
|
|
166
|
-
let virtualizer = useVirtualScroll({
|
|
164
|
+
let { virtualizer, css: virtualizerCss } = useVirtualScroll({
|
|
167
165
|
count: flatNodesList.length,
|
|
168
166
|
getScrollElement: ()=>parentRef.current,
|
|
169
167
|
estimateSize: ()=>39,
|
|
@@ -178,10 +176,12 @@ let VirtualizedTree = React.forwardRef(({ flatNodesList, itemRenderer, scrollToI
|
|
|
178
176
|
return React.createElement(TreeElement, {
|
|
179
177
|
...rest,
|
|
180
178
|
ref: useMergedRefs(ref, parentRef)
|
|
181
|
-
}, React.createElement(ShadowRoot,
|
|
179
|
+
}, React.createElement(ShadowRoot, {
|
|
180
|
+
css: virtualizerCss
|
|
181
|
+
}, React.createElement("div", {
|
|
182
|
+
"data-iui-virtualizer": "root",
|
|
182
183
|
style: {
|
|
183
|
-
minBlockSize: virtualizer.getTotalSize()
|
|
184
|
-
contain: 'strict'
|
|
184
|
+
minBlockSize: virtualizer.getTotalSize()
|
|
185
185
|
}
|
|
186
186
|
}, React.createElement("slot", null))), React.createElement(React.Fragment, null, virtualizer.getVirtualItems().map((virtualItem)=>itemRenderer(virtualItem.index, virtualItem, virtualizer))));
|
|
187
187
|
});
|
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,7 @@ const Table = (props) => {
|
|
|
429
429
|
});
|
|
430
430
|
}
|
|
431
431
|
});
|
|
432
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
432
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
433
433
|
count: page.length,
|
|
434
434
|
getScrollElement: () => tableRef.current,
|
|
435
435
|
estimateSize: () => rowHeight,
|
|
@@ -761,21 +761,15 @@ const Table = (props) => {
|
|
|
761
761
|
_react.createElement(
|
|
762
762
|
_index.ShadowRoot,
|
|
763
763
|
{
|
|
764
|
-
css:
|
|
765
|
-
div,
|
|
766
|
-
slot {
|
|
767
|
-
border-radius: inherit;
|
|
768
|
-
}
|
|
769
|
-
`,
|
|
764
|
+
css: virtualizerCss,
|
|
770
765
|
},
|
|
771
|
-
enableVirtualization
|
|
766
|
+
enableVirtualization && 0 !== data.length
|
|
772
767
|
? _react.createElement(
|
|
773
768
|
'div',
|
|
774
769
|
{
|
|
770
|
+
'data-iui-virtualizer': 'root',
|
|
775
771
|
style: {
|
|
776
772
|
minBlockSize: virtualizer.getTotalSize(),
|
|
777
|
-
minInlineSize: '100%',
|
|
778
|
-
contain: 'strict',
|
|
779
773
|
},
|
|
780
774
|
},
|
|
781
775
|
_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,11 +122,9 @@ 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
|
-
position: 'absolute',
|
|
128
|
-
top: 0,
|
|
129
|
-
left: 0,
|
|
130
128
|
width: '100%',
|
|
131
129
|
transform: `translateY(${virtualItem.start}px)`,
|
|
132
130
|
},
|
|
@@ -200,7 +198,7 @@ const VirtualizedTree = _react.forwardRef(
|
|
|
200
198
|
(index) => flatNodesList[index].nodeProps.nodeId,
|
|
201
199
|
[flatNodesList],
|
|
202
200
|
);
|
|
203
|
-
let virtualizer = (0, _index.useVirtualScroll)({
|
|
201
|
+
let { virtualizer, css: virtualizerCss } = (0, _index.useVirtualScroll)({
|
|
204
202
|
count: flatNodesList.length,
|
|
205
203
|
getScrollElement: () => parentRef.current,
|
|
206
204
|
estimateSize: () => 39,
|
|
@@ -217,13 +215,15 @@ const VirtualizedTree = _react.forwardRef(
|
|
|
217
215
|
},
|
|
218
216
|
_react.createElement(
|
|
219
217
|
_index.ShadowRoot,
|
|
220
|
-
|
|
218
|
+
{
|
|
219
|
+
css: virtualizerCss,
|
|
220
|
+
},
|
|
221
221
|
_react.createElement(
|
|
222
222
|
'div',
|
|
223
223
|
{
|
|
224
|
+
'data-iui-virtualizer': 'root',
|
|
224
225
|
style: {
|
|
225
226
|
minBlockSize: virtualizer.getTotalSize(),
|
|
226
|
-
contain: 'strict',
|
|
227
227
|
},
|
|
228
228
|
},
|
|
229
229
|
_react.createElement('slot', null),
|
package/cjs/styles.js
CHANGED
|
@@ -5,10 +5,30 @@ import type { Virtualizer } from '@tanstack/react-virtual';
|
|
|
5
5
|
* `data-iui-index` and adds wraps the `scrollToIndex` function in a `setTimeout` so it can be used in `useLayoutEffect`.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
|
-
* const virtualizer = useVirtualScroll({
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* const { virtualizer, css } = useVirtualScroll({
|
|
9
|
+
* count: item.length,
|
|
10
|
+
* getScrollElement: () => parentRef.current,
|
|
11
|
+
* estimateSize: () => 30,
|
|
12
12
|
* });
|
|
13
|
+
*
|
|
14
|
+
* <Parent ref={parentRef}>
|
|
15
|
+
* <ShadowRoot css={css}>
|
|
16
|
+
* <div data-iui-virtualizer="root" style={{ height: virtualizer.getTotalSize() }}>
|
|
17
|
+
* <slot />
|
|
18
|
+
* </div>
|
|
19
|
+
* </ShadowRoot>
|
|
20
|
+
*
|
|
21
|
+
* {virtualizer.getVirtualItems().map((item) => (
|
|
22
|
+
* <Item
|
|
23
|
+
* data-iui-virtualizer="item"
|
|
24
|
+
* data-iui-index={item.index}
|
|
25
|
+
* style={{ transform: `translateY(${item.start}px)`}}
|
|
26
|
+
* ref={virtualizer.measureElement}
|
|
27
|
+
* />
|
|
28
|
+
* ))}
|
|
29
|
+
* </Parent>
|
|
13
30
|
*/
|
|
14
|
-
export declare const useVirtualScroll: (params: Parameters<typeof useVirtualizer>[0]) =>
|
|
31
|
+
export declare const useVirtualScroll: (params: Parameters<typeof useVirtualizer>[0]) => {
|
|
32
|
+
virtualizer: Virtualizer<Element, Element>;
|
|
33
|
+
css: string;
|
|
34
|
+
};
|