@itwin/itwinui-react 3.13.2 → 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.
@@ -11,9 +11,24 @@ 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 virtualizer = (0, _reactvirtual.useVirtualizer)({
31
+ let _virtualizer = (0, _reactvirtual.useVirtualizer)({
17
32
  indexAttribute: 'data-iui-index',
18
33
  overscan: 10,
19
34
  ...rest,
@@ -21,19 +36,26 @@ const useVirtualScroll = (params) => {
21
36
  let scrollToIndex = _react.default.useCallback(
22
37
  (index, options) => {
23
38
  setTimeout(() => {
24
- virtualizer.scrollToIndex(index, {
39
+ _virtualizer.scrollToIndex(index, {
25
40
  align: 'auto',
26
41
  ...options,
27
42
  });
28
43
  });
29
44
  },
30
- [virtualizer],
45
+ [_virtualizer],
31
46
  );
32
- return _react.default.useMemo(
47
+ let virtualizer = _react.default.useMemo(
33
48
  () => ({
34
- ...virtualizer,
49
+ ..._virtualizer,
35
50
  scrollToIndex,
36
51
  }),
37
- [virtualizer, scrollToIndex],
52
+ [_virtualizer, scrollToIndex],
53
+ );
54
+ return _react.default.useMemo(
55
+ () => ({
56
+ virtualizer,
57
+ css,
58
+ }),
59
+ [virtualizer],
38
60
  );
39
61
  };
@@ -31,7 +31,7 @@ let VirtualizedComboBoxMenu = (props) => {
31
31
  currentElement.getAttribute('data-iui-filtered-index') ?? focusedIndex,
32
32
  );
33
33
  }, [focusedIndex, menuRef]);
34
- let virtualizer = useVirtualScroll({
34
+ let { virtualizer, css: virtualizerCss } = useVirtualScroll({
35
35
  count: filteredOptions.length || 1,
36
36
  getScrollElement: () => menuRef.current,
37
37
  estimateSize: () => (mostlySubLabeled ? 48 : 36),
@@ -49,10 +49,8 @@ let VirtualizedComboBoxMenu = (props) => {
49
49
  return React.cloneElement(menuItem, {
50
50
  key: virtualItem.key,
51
51
  ref: virtualizer.measureElement,
52
+ 'data-iui-virtualizer': 'item',
52
53
  style: {
53
- position: 'absolute',
54
- top: 0,
55
- left: 0,
56
54
  width: '100%',
57
55
  transform: `translateY(${virtualItem.start}px)`,
58
56
  },
@@ -65,16 +63,17 @@ let VirtualizedComboBoxMenu = (props) => {
65
63
  null,
66
64
  React.createElement(
67
65
  ShadowRoot,
68
- null,
66
+ {
67
+ css: virtualizerCss,
68
+ },
69
69
  React.createElement(
70
70
  Box,
71
71
  {
72
72
  as: 'div',
73
+ 'data-iui-virtualizer': 'root',
73
74
  ...rest,
74
75
  style: {
75
76
  minBlockSize: virtualizer.getTotalSize(),
76
- minInlineSize: '100%',
77
- contain: 'strict',
78
77
  ...props.style,
79
78
  },
80
79
  },
@@ -447,7 +447,7 @@ export const Table = (props) => {
447
447
  });
448
448
  }
449
449
  });
450
- let virtualizer = useVirtualScroll({
450
+ let { virtualizer, css: virtualizerCss } = useVirtualScroll({
451
451
  count: page.length,
452
452
  getScrollElement: () => tableRef.current,
453
453
  estimateSize: () => rowHeight,
@@ -772,15 +772,16 @@ export const Table = (props) => {
772
772
  },
773
773
  React.createElement(
774
774
  ShadowRoot,
775
- null,
775
+ {
776
+ css: virtualizerCss,
777
+ },
776
778
  enableVirtualization && 0 !== data.length
777
779
  ? React.createElement(
778
780
  'div',
779
781
  {
782
+ 'data-iui-virtualizer': 'root',
780
783
  style: {
781
784
  minBlockSize: virtualizer.getTotalSize(),
782
- minInlineSize: '100%',
783
- contain: 'strict',
784
785
  },
785
786
  },
786
787
  React.createElement('slot', null),
@@ -50,27 +50,29 @@ export const TableRow = (props) => {
50
50
  minWidth: '100%',
51
51
  ...(null != virtualItem
52
52
  ? {
53
- position: 'absolute',
54
- top: 0,
55
- left: 0,
56
53
  transform: `translateY(${virtualItem.start}px)`,
57
54
  }
58
55
  : {}),
59
56
  },
60
57
  }),
61
58
  ...restUserRowProps,
62
- className: cx(
63
- 'iui-table-row',
64
- {
65
- 'iui-table-row-expanded': row.isExpanded && subComponent,
66
- 'iui-loading': isLoading,
67
- },
68
- userRowProps?.className,
69
- ),
70
- 'aria-selected': row.isSelected || void 0,
71
- 'aria-disabled': isDisabled || void 0,
72
- 'data-iui-status': status,
73
- 'data-iui-index': virtualItem?.index,
59
+ ...{
60
+ className: cx(
61
+ 'iui-table-row',
62
+ {
63
+ 'iui-table-row-expanded': row.isExpanded && subComponent,
64
+ 'iui-loading': isLoading,
65
+ },
66
+ userRowProps?.className,
67
+ ),
68
+ 'aria-selected': row.isSelected || void 0,
69
+ 'aria-disabled': isDisabled || void 0,
70
+ 'data-iui-status': status,
71
+ 'data-iui-index': virtualItem?.index,
72
+ ...(null != virtualItem && {
73
+ 'data-iui-virtualizer': 'item',
74
+ }),
75
+ },
74
76
  };
75
77
  let refs = useMergedRefs(
76
78
  intersectionRef,
@@ -117,11 +117,9 @@ export const Tree = (props) => {
117
117
  ...children.props,
118
118
  key: virtualItem.key,
119
119
  'data-iui-index': virtualItem.index,
120
+ 'data-iui-virtualizer': 'item',
120
121
  ref: virtualizer.measureElement,
121
122
  style: {
122
- position: 'absolute',
123
- top: 0,
124
- left: 0,
125
123
  width: '100%',
126
124
  transform: `translateY(${virtualItem.start}px)`,
127
125
  },
@@ -194,7 +192,7 @@ let VirtualizedTree = React.forwardRef(
194
192
  (index) => flatNodesList[index].nodeProps.nodeId,
195
193
  [flatNodesList],
196
194
  );
197
- let virtualizer = useVirtualScroll({
195
+ let { virtualizer, css: virtualizerCss } = useVirtualScroll({
198
196
  count: flatNodesList.length,
199
197
  getScrollElement: () => parentRef.current,
200
198
  estimateSize: () => 39,
@@ -211,13 +209,15 @@ let VirtualizedTree = React.forwardRef(
211
209
  },
212
210
  React.createElement(
213
211
  ShadowRoot,
214
- null,
212
+ {
213
+ css: virtualizerCss,
214
+ },
215
215
  React.createElement(
216
216
  'div',
217
217
  {
218
+ 'data-iui-virtualizer': 'root',
218
219
  style: {
219
220
  minBlockSize: virtualizer.getTotalSize(),
220
- contain: 'strict',
221
221
  },
222
222
  },
223
223
  React.createElement('slot', null),
package/esm/styles.js CHANGED
@@ -1,4 +1,4 @@
1
- const t = '3.13.2';
1
+ const t = '3.13.3';
2
2
  const u = new Proxy(
3
3
  {},
4
4
  {
@@ -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
- * count: item.length,
10
- * getScrollElement: () => parentRef.current,
11
- * estimateSize: () => 30,
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]) => Virtualizer<Element, Element>;
31
+ export declare const useVirtualScroll: (params: Parameters<typeof useVirtualizer>[0]) => {
32
+ virtualizer: Virtualizer<Element, Element>;
33
+ css: string;
34
+ };
@@ -1,8 +1,23 @@
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 virtualizer = useVirtualizer({
20
+ let _virtualizer = useVirtualizer({
6
21
  indexAttribute: 'data-iui-index',
7
22
  overscan: 10,
8
23
  ...rest,
@@ -10,19 +25,26 @@ export const useVirtualScroll = (params) => {
10
25
  let scrollToIndex = React.useCallback(
11
26
  (index, options) => {
12
27
  setTimeout(() => {
13
- virtualizer.scrollToIndex(index, {
28
+ _virtualizer.scrollToIndex(index, {
14
29
  align: 'auto',
15
30
  ...options,
16
31
  });
17
32
  });
18
33
  },
19
- [virtualizer],
34
+ [_virtualizer],
20
35
  );
21
- return React.useMemo(
36
+ let virtualizer = React.useMemo(
22
37
  () => ({
23
- ...virtualizer,
38
+ ..._virtualizer,
24
39
  scrollToIndex,
25
40
  }),
26
- [virtualizer, scrollToIndex],
41
+ [_virtualizer, scrollToIndex],
42
+ );
43
+ return React.useMemo(
44
+ () => ({
45
+ virtualizer,
46
+ css,
47
+ }),
48
+ [virtualizer],
27
49
  );
28
50
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/itwinui-react",
3
- "version": "3.13.2",
3
+ "version": "3.13.3",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "type": "module",