@itwin/itwinui-react 3.18.1 → 3.18.2

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.
@@ -620,7 +620,6 @@ const Table = (props) => {
620
620
  },
621
621
  }),
622
622
  role: role,
623
- 'aria-labelledby': captionId,
624
623
  onScroll: () => updateStickyState(),
625
624
  'data-iui-size': 'default' === density ? void 0 : density,
626
625
  ...outerAriaRestAttributes,
@@ -635,10 +634,15 @@ const Table = (props) => {
635
634
  role: 'table',
636
635
  ...innerAriaRestAttributes,
637
636
  ...tableProps,
637
+ 'aria-labelledby': captionId,
638
638
  },
639
- _react.createElement('slot', {
640
- name: 'caption',
641
- }),
639
+ _react.createElement(
640
+ _VisuallyHidden.VisuallyHidden,
641
+ {
642
+ id: captionId,
643
+ },
644
+ caption,
645
+ ),
642
646
  _react.createElement('slot', {
643
647
  name: 'iui-table-header-wrapper',
644
648
  }),
@@ -651,14 +655,6 @@ const Table = (props) => {
651
655
  }),
652
656
  _react.createElement('slot', null),
653
657
  ),
654
- _react.createElement(
655
- _VisuallyHidden.VisuallyHidden,
656
- {
657
- slot: 'caption',
658
- id: captionId,
659
- },
660
- caption,
661
- ),
662
658
  headerGroups.map((headerGroup) => {
663
659
  headerGroup.headers = headerGroup.headers.filter(
664
660
  (header) =>
@@ -19,6 +19,7 @@ const _SubRowExpander = require('./SubRowExpander.js');
19
19
  const _index = require('./columns/index.js');
20
20
  const _index1 = require('./cells/index.js');
21
21
  const _index2 = require('../../utils/index.js');
22
+ const _DefaultCell = require('./cells/DefaultCell.js');
22
23
  const TableCell = (props) => {
23
24
  let {
24
25
  cell,
@@ -54,63 +55,97 @@ const TableCell = (props) => {
54
55
  ...(0, _utils.getStickyStyle)(cell.column, tableInstance.visibleColumns),
55
56
  },
56
57
  });
57
- let cellProps = {
58
- ...tableInstance,
59
- ...{
58
+ let cellProps = _react.useMemo(
59
+ () => ({
60
+ ...tableInstance,
61
+ ...{
62
+ cell,
63
+ row: cell.row,
64
+ value: cell.value,
65
+ column: cell.column,
66
+ },
67
+ }),
68
+ [cell, tableInstance],
69
+ );
70
+ let cellContent = _react.useMemo(
71
+ () =>
72
+ _react.createElement(
73
+ _react.Fragment,
74
+ null,
75
+ tableHasSubRows &&
76
+ hasSubRowExpander &&
77
+ cell.row.canExpand &&
78
+ _react.createElement(_SubRowExpander.SubRowExpander, {
79
+ cell: cell,
80
+ isDisabled: isDisabled,
81
+ cellProps: cellProps,
82
+ expanderCell: expanderCell,
83
+ density: density,
84
+ slot: 'start',
85
+ }),
86
+ cell.render('Cell'),
87
+ ),
88
+ [
60
89
  cell,
61
- row: cell.row,
62
- value: cell.value,
63
- column: cell.column,
64
- },
65
- };
66
- let cellContent = _react.createElement(
67
- _react.Fragment,
68
- null,
69
- tableHasSubRows &&
70
- hasSubRowExpander &&
71
- cell.row.canExpand &&
72
- _react.createElement(_SubRowExpander.SubRowExpander, {
73
- cell: cell,
74
- isDisabled: isDisabled,
75
- cellProps: cellProps,
76
- expanderCell: expanderCell,
77
- density: density,
78
- slot: 'start',
79
- }),
80
- cell.render('Cell'),
90
+ cellProps,
91
+ density,
92
+ expanderCell,
93
+ hasSubRowExpander,
94
+ isDisabled,
95
+ tableHasSubRows,
96
+ ],
81
97
  );
82
- let cellRendererProps = {
83
- cellElementProps,
84
- cellProps,
85
- children: _react.createElement(
86
- _react.Fragment,
87
- null,
98
+ let defaultCellRendererChildren = _react.useMemo(
99
+ () =>
100
+ _react.createElement(
101
+ _react.Fragment,
102
+ null,
103
+ cellContent,
104
+ 'left' === cell.column.sticky &&
105
+ tableInstance.state.sticky.isScrolledToRight &&
106
+ _react.createElement(_index2.Box, {
107
+ className: 'iui-table-cell-shadow-right',
108
+ slot: 'shadows',
109
+ }),
110
+ 'right' === cell.column.sticky &&
111
+ tableInstance.state.sticky.isScrolledToLeft &&
112
+ _react.createElement(_index2.Box, {
113
+ className: 'iui-table-cell-shadow-left',
114
+ slot: 'shadows',
115
+ }),
116
+ ),
117
+ [
118
+ cell.column.sticky,
88
119
  cellContent,
89
- 'left' === cell.column.sticky &&
90
- tableInstance.state.sticky.isScrolledToRight &&
91
- _react.createElement(_index2.Box, {
92
- className: 'iui-table-cell-shadow-right',
93
- slot: 'shadows',
94
- }),
95
- 'right' === cell.column.sticky &&
96
- tableInstance.state.sticky.isScrolledToLeft &&
97
- _react.createElement(_index2.Box, {
98
- className: 'iui-table-cell-shadow-left',
99
- slot: 'shadows',
100
- }),
101
- ),
102
- };
120
+ tableInstance.state.sticky.isScrolledToLeft,
121
+ tableInstance.state.sticky.isScrolledToRight,
122
+ ],
123
+ );
124
+ let cellRendererProps = _react.useMemo(
125
+ () => ({
126
+ cellElementProps,
127
+ cellProps,
128
+ children: defaultCellRendererChildren,
129
+ }),
130
+ [cellElementProps, cellProps, defaultCellRendererChildren],
131
+ );
103
132
  return _react.createElement(
104
133
  _react.Fragment,
105
134
  null,
106
- cell.column.cellRenderer
107
- ? cell.column.cellRenderer({
108
- ...cellRendererProps,
109
- isDisabled: () => isDisabled,
110
- })
111
- : _react.createElement(_index1.DefaultCell, {
112
- ...cellRendererProps,
113
- isDisabled: () => isDisabled,
114
- }),
135
+ _react.createElement(
136
+ _DefaultCell.DefaultCellRendererPropsChildren.Provider,
137
+ {
138
+ value: defaultCellRendererChildren,
139
+ },
140
+ cell.column.cellRenderer
141
+ ? cell.column.cellRenderer({
142
+ ...cellRendererProps,
143
+ isDisabled: () => isDisabled,
144
+ })
145
+ : _react.createElement(_index1.DefaultCell, {
146
+ ...cellRendererProps,
147
+ isDisabled: () => isDisabled,
148
+ }),
149
+ ),
115
150
  );
116
151
  };
@@ -21,6 +21,7 @@ export type DefaultCellProps<T extends Record<string, unknown>> = {
21
21
  */
22
22
  clamp?: boolean;
23
23
  } & CellRendererProps<T> & React.ComponentPropsWithoutRef<'div'>;
24
+ export declare const DefaultCellRendererPropsChildren: React.Context<React.ReactNode>;
24
25
  /**
25
26
  * Default cell.
26
27
  * It should be passed to `cellRenderer`.
@@ -2,11 +2,20 @@
2
2
  Object.defineProperty(exports, '__esModule', {
3
3
  value: true,
4
4
  });
5
- Object.defineProperty(exports, 'DefaultCell', {
6
- enumerable: true,
7
- get: function () {
5
+ function _export(target, all) {
6
+ for (var name in all)
7
+ Object.defineProperty(target, name, {
8
+ enumerable: true,
9
+ get: all[name],
10
+ });
11
+ }
12
+ _export(exports, {
13
+ DefaultCell: function () {
8
14
  return DefaultCell;
9
15
  },
16
+ DefaultCellRendererPropsChildren: function () {
17
+ return DefaultCellRendererPropsChildren;
18
+ },
10
19
  });
11
20
  const _interop_require_default = require('@swc/helpers/_/_interop_require_default');
12
21
  const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
@@ -17,6 +26,7 @@ const _classnames = /*#__PURE__*/ _interop_require_default._(
17
26
  );
18
27
  const _index = require('../../../utils/index.js');
19
28
  const _utils = require('../utils.js');
29
+ const DefaultCellRendererPropsChildren = _react.createContext(void 0);
20
30
  const DefaultCell = (props) => {
21
31
  let instance = _react.useContext(_utils.TableInstanceContext);
22
32
  let isCustomCell = _react.useMemo(
@@ -25,6 +35,8 @@ const DefaultCell = (props) => {
25
35
  ?.Cell !== _reacttable.defaultColumn.Cell,
26
36
  [instance, props.cellProps.column.id],
27
37
  );
38
+ let isCellRendererChildrenCustom =
39
+ _react.useContext(DefaultCellRendererPropsChildren) !== props.children;
28
40
  let {
29
41
  cellElementProps: {
30
42
  className: cellElementClassName,
@@ -39,7 +51,9 @@ const DefaultCell = (props) => {
39
51
  className,
40
52
  style,
41
53
  status,
42
- clamp = 'string' == typeof cellProps.value && !isCustomCell,
54
+ clamp = 'string' == typeof cellProps.value &&
55
+ !isCustomCell &&
56
+ !isCellRendererChildrenCustom,
43
57
  ...rest
44
58
  } = props;
45
59
  let { key: cellElementKey, ...cellElementPropsRest } = cellElementProps;
@@ -68,10 +82,9 @@ const DefaultCell = (props) => {
68
82
  name: 'start',
69
83
  }),
70
84
  _react.createElement(
71
- 'div',
85
+ TableCellContent,
72
86
  {
73
- className: '_iui-table-cell-main-content',
74
- onClick: (e) => e.stopPropagation(),
87
+ shouldRenderWrapper: isCellRendererChildrenCustom,
75
88
  },
76
89
  clamp
77
90
  ? _react.createElement(
@@ -113,12 +126,25 @@ const DefaultCell = (props) => {
113
126
  };
114
127
  if ('development' === process.env.NODE_ENV)
115
128
  DefaultCell.displayName = 'DefaultCell';
129
+ const TableCellContent = (props) => {
130
+ let { children, shouldRenderWrapper } = props;
131
+ return shouldRenderWrapper
132
+ ? children
133
+ : _react.createElement(
134
+ 'div',
135
+ {
136
+ className: '_iui-table-cell-default-content',
137
+ onClick: (e) => e.stopPropagation(),
138
+ },
139
+ children,
140
+ );
141
+ };
116
142
  const css = `
117
- ._iui-table-cell-main-content {
143
+ ._iui-table-cell-default-content {
118
144
  position: relative;
119
145
  isolation: isolate;
120
146
  }
121
- ._iui-table-cell-main-content::before {
147
+ ._iui-table-cell-default-content::before {
122
148
  content: '';
123
149
  display: block;
124
150
  position: absolute;
package/cjs/styles.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3
- const e = '3.18.1';
3
+ const e = '3.18.2';
4
4
  const u = new Proxy(
5
5
  {},
6
6
  {
@@ -86,7 +86,6 @@ export const usePopover = (options) => {
86
86
  open,
87
87
  onOpenChange,
88
88
  strategy: 'fixed',
89
- transform: false,
90
89
  whileElementsMounted: React.useMemo(
91
90
  () =>
92
91
  open ? (...args) => autoUpdate(...args, autoUpdateOptions) : void 0,
@@ -238,6 +237,7 @@ export const Popover = React.forwardRef((props, forwardedRef) => {
238
237
  closeOnOutsideClick,
239
238
  role: 'dialog',
240
239
  middleware,
240
+ transform: false,
241
241
  });
242
242
  let [popoverElement, setPopoverElement] = React.useState(null);
243
243
  let popoverRef = useMergedRefs(
@@ -304,6 +304,7 @@ export const Popover = React.forwardRef((props, forwardedRef) => {
304
304
  Box,
305
305
  {
306
306
  className: cx(
307
+ 'iui-popover',
307
308
  {
308
309
  'iui-popover-surface': applyBackground,
309
310
  },
@@ -626,7 +626,6 @@ export const Table = (props) => {
626
626
  },
627
627
  }),
628
628
  role: role,
629
- 'aria-labelledby': captionId,
630
629
  onScroll: () => updateStickyState(),
631
630
  'data-iui-size': 'default' === density ? void 0 : density,
632
631
  ...outerAriaRestAttributes,
@@ -641,10 +640,15 @@ export const Table = (props) => {
641
640
  role: 'table',
642
641
  ...innerAriaRestAttributes,
643
642
  ...tableProps,
643
+ 'aria-labelledby': captionId,
644
644
  },
645
- React.createElement('slot', {
646
- name: 'caption',
647
- }),
645
+ React.createElement(
646
+ VisuallyHidden,
647
+ {
648
+ id: captionId,
649
+ },
650
+ caption,
651
+ ),
648
652
  React.createElement('slot', {
649
653
  name: 'iui-table-header-wrapper',
650
654
  }),
@@ -657,14 +661,6 @@ export const Table = (props) => {
657
661
  }),
658
662
  React.createElement('slot', null),
659
663
  ),
660
- React.createElement(
661
- VisuallyHidden,
662
- {
663
- slot: 'caption',
664
- id: captionId,
665
- },
666
- caption,
667
- ),
668
664
  headerGroups.map((headerGroup) => {
669
665
  headerGroup.headers = headerGroup.headers.filter(
670
666
  (header) =>
@@ -5,6 +5,7 @@ import { SubRowExpander } from './SubRowExpander.js';
5
5
  import { SELECTION_CELL_ID } from './columns/index.js';
6
6
  import { DefaultCell } from './cells/index.js';
7
7
  import { Box } from '../../utils/index.js';
8
+ import { DefaultCellRendererPropsChildren } from './cells/DefaultCell.js';
8
9
  export const TableCell = (props) => {
9
10
  let {
10
11
  cell,
@@ -33,63 +34,97 @@ export const TableCell = (props) => {
33
34
  ...getStickyStyle(cell.column, tableInstance.visibleColumns),
34
35
  },
35
36
  });
36
- let cellProps = {
37
- ...tableInstance,
38
- ...{
37
+ let cellProps = React.useMemo(
38
+ () => ({
39
+ ...tableInstance,
40
+ ...{
41
+ cell,
42
+ row: cell.row,
43
+ value: cell.value,
44
+ column: cell.column,
45
+ },
46
+ }),
47
+ [cell, tableInstance],
48
+ );
49
+ let cellContent = React.useMemo(
50
+ () =>
51
+ React.createElement(
52
+ React.Fragment,
53
+ null,
54
+ tableHasSubRows &&
55
+ hasSubRowExpander &&
56
+ cell.row.canExpand &&
57
+ React.createElement(SubRowExpander, {
58
+ cell: cell,
59
+ isDisabled: isDisabled,
60
+ cellProps: cellProps,
61
+ expanderCell: expanderCell,
62
+ density: density,
63
+ slot: 'start',
64
+ }),
65
+ cell.render('Cell'),
66
+ ),
67
+ [
39
68
  cell,
40
- row: cell.row,
41
- value: cell.value,
42
- column: cell.column,
43
- },
44
- };
45
- let cellContent = React.createElement(
46
- React.Fragment,
47
- null,
48
- tableHasSubRows &&
49
- hasSubRowExpander &&
50
- cell.row.canExpand &&
51
- React.createElement(SubRowExpander, {
52
- cell: cell,
53
- isDisabled: isDisabled,
54
- cellProps: cellProps,
55
- expanderCell: expanderCell,
56
- density: density,
57
- slot: 'start',
58
- }),
59
- cell.render('Cell'),
69
+ cellProps,
70
+ density,
71
+ expanderCell,
72
+ hasSubRowExpander,
73
+ isDisabled,
74
+ tableHasSubRows,
75
+ ],
60
76
  );
61
- let cellRendererProps = {
62
- cellElementProps,
63
- cellProps,
64
- children: React.createElement(
65
- React.Fragment,
66
- null,
77
+ let defaultCellRendererChildren = React.useMemo(
78
+ () =>
79
+ React.createElement(
80
+ React.Fragment,
81
+ null,
82
+ cellContent,
83
+ 'left' === cell.column.sticky &&
84
+ tableInstance.state.sticky.isScrolledToRight &&
85
+ React.createElement(Box, {
86
+ className: 'iui-table-cell-shadow-right',
87
+ slot: 'shadows',
88
+ }),
89
+ 'right' === cell.column.sticky &&
90
+ tableInstance.state.sticky.isScrolledToLeft &&
91
+ React.createElement(Box, {
92
+ className: 'iui-table-cell-shadow-left',
93
+ slot: 'shadows',
94
+ }),
95
+ ),
96
+ [
97
+ cell.column.sticky,
67
98
  cellContent,
68
- 'left' === cell.column.sticky &&
69
- tableInstance.state.sticky.isScrolledToRight &&
70
- React.createElement(Box, {
71
- className: 'iui-table-cell-shadow-right',
72
- slot: 'shadows',
73
- }),
74
- 'right' === cell.column.sticky &&
75
- tableInstance.state.sticky.isScrolledToLeft &&
76
- React.createElement(Box, {
77
- className: 'iui-table-cell-shadow-left',
78
- slot: 'shadows',
79
- }),
80
- ),
81
- };
99
+ tableInstance.state.sticky.isScrolledToLeft,
100
+ tableInstance.state.sticky.isScrolledToRight,
101
+ ],
102
+ );
103
+ let cellRendererProps = React.useMemo(
104
+ () => ({
105
+ cellElementProps,
106
+ cellProps,
107
+ children: defaultCellRendererChildren,
108
+ }),
109
+ [cellElementProps, cellProps, defaultCellRendererChildren],
110
+ );
82
111
  return React.createElement(
83
112
  React.Fragment,
84
113
  null,
85
- cell.column.cellRenderer
86
- ? cell.column.cellRenderer({
87
- ...cellRendererProps,
88
- isDisabled: () => isDisabled,
89
- })
90
- : React.createElement(DefaultCell, {
91
- ...cellRendererProps,
92
- isDisabled: () => isDisabled,
93
- }),
114
+ React.createElement(
115
+ DefaultCellRendererPropsChildren.Provider,
116
+ {
117
+ value: defaultCellRendererChildren,
118
+ },
119
+ cell.column.cellRenderer
120
+ ? cell.column.cellRenderer({
121
+ ...cellRendererProps,
122
+ isDisabled: () => isDisabled,
123
+ })
124
+ : React.createElement(DefaultCell, {
125
+ ...cellRendererProps,
126
+ isDisabled: () => isDisabled,
127
+ }),
128
+ ),
94
129
  );
95
130
  };
@@ -21,6 +21,7 @@ export type DefaultCellProps<T extends Record<string, unknown>> = {
21
21
  */
22
22
  clamp?: boolean;
23
23
  } & CellRendererProps<T> & React.ComponentPropsWithoutRef<'div'>;
24
+ export declare const DefaultCellRendererPropsChildren: React.Context<React.ReactNode>;
24
25
  /**
25
26
  * Default cell.
26
27
  * It should be passed to `cellRenderer`.
@@ -3,6 +3,7 @@ import { defaultColumn } from 'react-table';
3
3
  import cx from 'classnames';
4
4
  import { Box, LineClamp, ShadowRoot } from '../../../utils/index.js';
5
5
  import { TableInstanceContext } from '../utils.js';
6
+ export const DefaultCellRendererPropsChildren = React.createContext(void 0);
6
7
  export const DefaultCell = (props) => {
7
8
  let instance = React.useContext(TableInstanceContext);
8
9
  let isCustomCell = React.useMemo(
@@ -11,6 +12,8 @@ export const DefaultCell = (props) => {
11
12
  ?.Cell !== defaultColumn.Cell,
12
13
  [instance, props.cellProps.column.id],
13
14
  );
15
+ let isCellRendererChildrenCustom =
16
+ React.useContext(DefaultCellRendererPropsChildren) !== props.children;
14
17
  let {
15
18
  cellElementProps: {
16
19
  className: cellElementClassName,
@@ -25,7 +28,9 @@ export const DefaultCell = (props) => {
25
28
  className,
26
29
  style,
27
30
  status,
28
- clamp = 'string' == typeof cellProps.value && !isCustomCell,
31
+ clamp = 'string' == typeof cellProps.value &&
32
+ !isCustomCell &&
33
+ !isCellRendererChildrenCustom,
29
34
  ...rest
30
35
  } = props;
31
36
  let { key: cellElementKey, ...cellElementPropsRest } = cellElementProps;
@@ -54,10 +59,9 @@ export const DefaultCell = (props) => {
54
59
  name: 'start',
55
60
  }),
56
61
  React.createElement(
57
- 'div',
62
+ TableCellContent,
58
63
  {
59
- className: '_iui-table-cell-main-content',
60
- onClick: (e) => e.stopPropagation(),
64
+ shouldRenderWrapper: isCellRendererChildrenCustom,
61
65
  },
62
66
  clamp
63
67
  ? React.createElement(
@@ -99,12 +103,25 @@ export const DefaultCell = (props) => {
99
103
  };
100
104
  if ('development' === process.env.NODE_ENV)
101
105
  DefaultCell.displayName = 'DefaultCell';
106
+ let TableCellContent = (props) => {
107
+ let { children, shouldRenderWrapper } = props;
108
+ return shouldRenderWrapper
109
+ ? children
110
+ : React.createElement(
111
+ 'div',
112
+ {
113
+ className: '_iui-table-cell-default-content',
114
+ onClick: (e) => e.stopPropagation(),
115
+ },
116
+ children,
117
+ );
118
+ };
102
119
  let css = `
103
- ._iui-table-cell-main-content {
120
+ ._iui-table-cell-default-content {
104
121
  position: relative;
105
122
  isolation: isolate;
106
123
  }
107
- ._iui-table-cell-main-content::before {
124
+ ._iui-table-cell-default-content::before {
108
125
  content: '';
109
126
  display: block;
110
127
  position: absolute;
package/esm/styles.js CHANGED
@@ -1,4 +1,4 @@
1
- const t = '3.18.1';
1
+ const t = '3.18.2';
2
2
  const u = new Proxy(
3
3
  {},
4
4
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/itwinui-react",
3
- "version": "3.18.1",
3
+ "version": "3.18.2",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -103,7 +103,7 @@
103
103
  "react": "19.1.0",
104
104
  "react-dom": "19.1.0",
105
105
  "typescript": "5",
106
- "vite": "~6.2.5",
106
+ "vite": "~6.3.4",
107
107
  "vitest": "^2.1.9"
108
108
  },
109
109
  "peerDependencies": {