@itwin/itwinui-react 3.19.7 → 3.20.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 (81) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/DEV-cjs/core/Breadcrumbs/Breadcrumbs.js +1 -1
  3. package/DEV-cjs/core/ComboBox/ComboBox.js +6 -2
  4. package/DEV-cjs/core/Dialog/DialogTitleBarTitle.js +1 -1
  5. package/DEV-cjs/core/DropdownMenu/DropdownMenu.js +1 -1
  6. package/DEV-cjs/core/ExpandableBlock/ExpandableBlock.js +1 -1
  7. package/DEV-cjs/core/InformationPanel/InformationPanelHeader.js +0 -1
  8. package/DEV-cjs/core/Table/SubRowExpander.js +1 -1
  9. package/DEV-cjs/core/Table/Table.js +1 -1
  10. package/DEV-cjs/core/Table/TableCell.js +27 -18
  11. package/DEV-cjs/core/Table/cells/DefaultCell.js +63 -85
  12. package/DEV-cjs/core/Table/columns/expanderColumn.js +1 -1
  13. package/DEV-cjs/core/Tabs/Tabs.js +10 -6
  14. package/DEV-cjs/core/Tile/Tile.js +1 -2
  15. package/DEV-cjs/core/Tree/TreeNodeExpander.js +1 -5
  16. package/DEV-cjs/styles.js +1 -1
  17. package/DEV-esm/core/Breadcrumbs/Breadcrumbs.js +2 -2
  18. package/DEV-esm/core/ComboBox/ComboBox.js +6 -2
  19. package/DEV-esm/core/Dialog/DialogTitleBarTitle.js +1 -1
  20. package/DEV-esm/core/DropdownMenu/DropdownMenu.js +1 -1
  21. package/DEV-esm/core/ExpandableBlock/ExpandableBlock.js +2 -2
  22. package/DEV-esm/core/InformationPanel/InformationPanelHeader.js +0 -1
  23. package/DEV-esm/core/Table/SubRowExpander.js +2 -2
  24. package/DEV-esm/core/Table/Table.js +1 -1
  25. package/DEV-esm/core/Table/TableCell.js +22 -19
  26. package/DEV-esm/core/Table/cells/DefaultCell.js +62 -84
  27. package/DEV-esm/core/Table/columns/expanderColumn.js +2 -2
  28. package/DEV-esm/core/Tabs/Tabs.js +8 -2
  29. package/DEV-esm/core/Tile/Tile.js +1 -2
  30. package/DEV-esm/core/Tree/TreeNodeExpander.js +2 -5
  31. package/DEV-esm/styles.js +1 -1
  32. package/cjs/core/Breadcrumbs/Breadcrumbs.js +1 -1
  33. package/cjs/core/ComboBox/ComboBox.js +6 -2
  34. package/cjs/core/Dialog/Dialog.d.ts +1 -1
  35. package/cjs/core/Dialog/DialogTitleBar.d.ts +1 -1
  36. package/cjs/core/Dialog/DialogTitleBarTitle.d.ts +1 -1
  37. package/cjs/core/Dialog/DialogTitleBarTitle.js +1 -1
  38. package/cjs/core/DropdownMenu/DropdownMenu.d.ts +1 -1
  39. package/cjs/core/DropdownMenu/DropdownMenu.js +1 -1
  40. package/cjs/core/ExpandableBlock/ExpandableBlock.js +1 -1
  41. package/cjs/core/InformationPanel/InformationPanelHeader.d.ts +1 -1
  42. package/cjs/core/InformationPanel/InformationPanelHeader.js +0 -1
  43. package/cjs/core/StatusMessage/StatusMessage.d.ts +1 -1
  44. package/cjs/core/Table/SubRowExpander.js +1 -1
  45. package/cjs/core/Table/Table.js +1 -1
  46. package/cjs/core/Table/TableCell.js +27 -18
  47. package/cjs/core/Table/cells/DefaultCell.d.ts +14 -3
  48. package/cjs/core/Table/cells/DefaultCell.js +63 -85
  49. package/cjs/core/Table/columns/expanderColumn.js +1 -1
  50. package/cjs/core/Tabs/Tabs.js +10 -6
  51. package/cjs/core/Tile/Tile.d.ts +1 -1
  52. package/cjs/core/Tile/Tile.js +1 -2
  53. package/cjs/core/Toast/Toast.d.ts +2 -0
  54. package/cjs/core/Tree/TreeNodeExpander.js +1 -5
  55. package/cjs/styles.js +1 -1
  56. package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -2
  57. package/esm/core/ComboBox/ComboBox.js +6 -2
  58. package/esm/core/Dialog/Dialog.d.ts +1 -1
  59. package/esm/core/Dialog/DialogTitleBar.d.ts +1 -1
  60. package/esm/core/Dialog/DialogTitleBarTitle.d.ts +1 -1
  61. package/esm/core/Dialog/DialogTitleBarTitle.js +1 -1
  62. package/esm/core/DropdownMenu/DropdownMenu.d.ts +1 -1
  63. package/esm/core/DropdownMenu/DropdownMenu.js +1 -1
  64. package/esm/core/ExpandableBlock/ExpandableBlock.js +2 -2
  65. package/esm/core/InformationPanel/InformationPanelHeader.d.ts +1 -1
  66. package/esm/core/InformationPanel/InformationPanelHeader.js +0 -1
  67. package/esm/core/StatusMessage/StatusMessage.d.ts +1 -1
  68. package/esm/core/Table/SubRowExpander.js +2 -2
  69. package/esm/core/Table/Table.js +1 -1
  70. package/esm/core/Table/TableCell.js +22 -19
  71. package/esm/core/Table/cells/DefaultCell.d.ts +14 -3
  72. package/esm/core/Table/cells/DefaultCell.js +62 -84
  73. package/esm/core/Table/columns/expanderColumn.js +2 -2
  74. package/esm/core/Tabs/Tabs.js +8 -2
  75. package/esm/core/Tile/Tile.d.ts +1 -1
  76. package/esm/core/Tile/Tile.js +1 -2
  77. package/esm/core/Toast/Toast.d.ts +2 -0
  78. package/esm/core/Tree/TreeNodeExpander.js +2 -5
  79. package/esm/styles.js +1 -1
  80. package/package.json +5 -5
  81. package/styles.css +12 -10
@@ -1,9 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import { defaultColumn } from 'react-table';
3
3
  import cx from 'classnames';
4
- import { Box, lineClamp, ShadowRoot } from '../../../utils/index.js';
4
+ import { Box } from '../../../utils/index.js';
5
5
  import { TableInstanceContext } from '../utils.js';
6
- export const DefaultCellRendererPropsChildren = React.createContext(void 0);
6
+ export const DefaultCellContext = React.createContext({});
7
7
  export const DefaultCell = (props) => {
8
8
  let instance = React.useContext(TableInstanceContext);
9
9
  let isCustomCell = React.useMemo(
@@ -12,8 +12,9 @@ export const DefaultCell = (props) => {
12
12
  ?.Cell !== defaultColumn.Cell,
13
13
  [instance, props.cellProps.column.id],
14
14
  );
15
+ let defaultCellContext = React.useContext(DefaultCellContext);
15
16
  let isCellRendererChildrenCustom =
16
- React.useContext(DefaultCellRendererPropsChildren) !== props.children;
17
+ defaultCellContext.children !== props.children;
17
18
  let isDefaultTextCell =
18
19
  'string' == typeof props.cellProps.value &&
19
20
  !isCustomCell &&
@@ -32,10 +33,33 @@ export const DefaultCell = (props) => {
32
33
  className,
33
34
  style,
34
35
  status,
35
- clamp = isDefaultTextCell,
36
+ text = isDefaultTextCell ? cellProps.value : void 0,
37
+ clamp = !!text,
36
38
  ...rest
37
39
  } = props;
38
40
  let { key: cellElementKey, ...cellElementPropsRest } = cellElementProps;
41
+ let decorations = {
42
+ start: startIcon
43
+ ? React.createElement(
44
+ Box,
45
+ {
46
+ className: 'iui-table-cell-start-icon',
47
+ key: `${cellElementKey}-start`,
48
+ },
49
+ startIcon,
50
+ )
51
+ : null,
52
+ end: endIcon
53
+ ? React.createElement(
54
+ Box,
55
+ {
56
+ className: 'iui-table-cell-end-icon',
57
+ key: `${cellElementKey}-end`,
58
+ },
59
+ endIcon,
60
+ )
61
+ : null,
62
+ };
39
63
  return React.createElement(
40
64
  Box,
41
65
  {
@@ -50,87 +74,41 @@ export const DefaultCell = (props) => {
50
74
  ...style,
51
75
  },
52
76
  },
53
- React.createElement(
54
- ShadowRoot,
55
- {
56
- key: `${cellElementKey}-shadow-root`,
57
- flush: false,
58
- css: css,
59
- },
60
- React.createElement('slot', {
61
- name: 'start',
62
- }),
63
- React.createElement(
64
- TableCellContent,
65
- {
66
- shouldRenderWrapper: isDefaultTextCell,
67
- },
68
- clamp
69
- ? React.createElement(
70
- 'div',
71
- {
72
- className: lineClamp.className,
73
- },
74
- React.createElement('slot', null),
75
- )
76
- : React.createElement('slot', null),
77
- ),
78
- React.createElement('slot', {
79
- name: 'end',
80
- }),
81
- React.createElement('slot', {
82
- name: 'shadows',
83
- }),
84
- ),
85
- startIcon &&
86
- React.createElement(
87
- Box,
88
- {
89
- className: 'iui-table-cell-start-icon',
90
- slot: 'start',
91
- key: `${cellElementKey}-start`,
92
- },
93
- startIcon,
94
- ),
95
- children,
96
- endIcon &&
97
- React.createElement(
98
- Box,
99
- {
100
- className: 'iui-table-cell-end-icon',
101
- slot: 'end',
102
- key: `${cellElementKey}-end`,
103
- },
104
- endIcon,
105
- ),
77
+ (() => {
78
+ if (text)
79
+ return React.createElement(
80
+ React.Fragment,
81
+ null,
82
+ decorations.start,
83
+ defaultCellContext.expander,
84
+ React.createElement(
85
+ Box,
86
+ {
87
+ className: 'iui-table-cell-default-content',
88
+ onClick: (e) => e.stopPropagation(),
89
+ },
90
+ clamp
91
+ ? React.createElement(
92
+ Box,
93
+ {
94
+ className: 'iui-line-clamp',
95
+ },
96
+ text,
97
+ )
98
+ : text,
99
+ ),
100
+ decorations.end,
101
+ defaultCellContext.shadows,
102
+ );
103
+ return React.createElement(
104
+ React.Fragment,
105
+ null,
106
+ decorations.start,
107
+ children,
108
+ decorations.end,
109
+ );
110
+ })(),
106
111
  );
107
112
  };
108
113
  if ('development' === process.env.NODE_ENV)
109
114
  DefaultCell.displayName = 'DefaultCell';
110
- let TableCellContent = (props) => {
111
- let { children, shouldRenderWrapper } = props;
112
- return shouldRenderWrapper
113
- ? React.createElement(
114
- 'div',
115
- {
116
- className: '_iui-table-cell-default-content',
117
- onClick: (e) => e.stopPropagation(),
118
- },
119
- children,
120
- )
121
- : children;
122
- };
123
- let css = `
124
- ._iui-table-cell-default-content {
125
- position: relative;
126
- isolation: isolate;
127
- }
128
- ._iui-table-cell-default-content::before {
129
- content: '';
130
- display: block;
131
- position: absolute;
132
- inset: -6px;
133
- z-index: -1;
134
- }
135
- ${lineClamp.css}
136
- `;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { SvgChevronRight } from '../../../utils/index.js';
2
+ import { SvgChevronRightSmall } from '../../../utils/index.js';
3
3
  import { IconButton } from '../../Buttons/IconButton.js';
4
4
  import { DefaultCell } from '../cells/index.js';
5
5
  export const EXPANDER_CELL_ID = 'iui-table-expander';
@@ -32,7 +32,7 @@ export const ExpanderColumn = (props = {}) => {
32
32
  disabled: isDisabled?.(props.row.original),
33
33
  'aria-expanded': row.isExpanded,
34
34
  },
35
- React.createElement(SvgChevronRight, null),
35
+ React.createElement(SvgChevronRightSmall, null),
36
36
  );
37
37
  },
38
38
  cellRenderer: (props) =>
@@ -72,7 +72,8 @@ let TabsWrapperPresentation = React.forwardRef((props, forwardedRef) => {
72
72
  let { orientation = 'horizontal', ...rest } = props;
73
73
  return React.createElement(Box, {
74
74
  ...rest,
75
- className: cx('iui-tabs-wrapper', `iui-${orientation}`, props.className),
75
+ className: cx('iui-tabs-wrapper', props.className),
76
+ 'data-iui-orientation': orientation,
76
77
  ref: forwardedRef,
77
78
  });
78
79
  });
@@ -267,6 +268,7 @@ let Tab = React.forwardRef((props, forwardedRef) => {
267
268
  if ('auto' === focusActivationMode && !props.disabled)
268
269
  setActiveValue(value);
269
270
  }),
271
+ 'data-iui-orientation': orientation,
270
272
  },
271
273
  label ? React.createElement(Tabs.TabLabel, null, label) : children,
272
274
  );
@@ -313,17 +315,20 @@ if ('development' === process.env.NODE_ENV)
313
315
  TabDescription.displayName = 'Tabs.TabDescription';
314
316
  let TabsActions = React.forwardRef((props, ref) => {
315
317
  let { wrapperProps, className, children, ...rest } = props;
318
+ let { orientation } = useSafeContext(TabsContext);
316
319
  return React.createElement(
317
320
  Box,
318
321
  {
319
322
  ...wrapperProps,
320
323
  className: cx('iui-tabs-actions-wrapper', wrapperProps?.className),
324
+ 'data-iui-orientation': orientation,
321
325
  },
322
326
  React.createElement(
323
327
  Box,
324
328
  {
325
329
  className: cx('iui-tabs-actions', className),
326
330
  ref: ref,
331
+ 'data-iui-orientation': orientation,
327
332
  ...rest,
328
333
  },
329
334
  children,
@@ -334,7 +339,7 @@ if ('development' === process.env.NODE_ENV)
334
339
  TabsActions.displayName = 'Tabs.Actions';
335
340
  let TabsPanel = React.forwardRef((props, ref) => {
336
341
  let { value, className, children, ...rest } = props;
337
- let { activeValue, idPrefix } = useSafeContext(TabsContext);
342
+ let { activeValue, idPrefix, orientation } = useSafeContext(TabsContext);
338
343
  return React.createElement(
339
344
  Box,
340
345
  {
@@ -345,6 +350,7 @@ let TabsPanel = React.forwardRef((props, ref) => {
345
350
  ref: ref,
346
351
  ...rest,
347
352
  id: `${idPrefix}-panel-${value.replaceAll(' ', '-')}`,
353
+ 'data-iui-orientation': orientation,
348
354
  },
349
355
  children,
350
356
  );
@@ -270,7 +270,7 @@ export declare const Tile: PolymorphicForwardRefComponent<"div", TileLegacyProps
270
270
  * </Tile.Wrapper>
271
271
  */
272
272
  NameIcon: PolymorphicForwardRefComponent<"div", {}>;
273
- NameLabel: PolymorphicForwardRefComponent<"span", {}>;
273
+ NameLabel: PolymorphicForwardRefComponent<"h2", {}>;
274
274
  /**
275
275
  * Polymorphic Tile action component. Recommended to be used in `Tile.NameLabel` subcomponent.
276
276
  * Renders `a` element by default.
@@ -188,7 +188,7 @@ let TileNameIcon = React.forwardRef((props, forwardedRef) => {
188
188
  });
189
189
  if ('development' === process.env.NODE_ENV)
190
190
  TileNameIcon.displayName = 'Tile.NameIcon';
191
- let TileNameLabel = polymorphic.span('iui-tile-name-label');
191
+ let TileNameLabel = polymorphic.h2('iui-tile-name-label');
192
192
  if ('development' === process.env.NODE_ENV)
193
193
  TileNameLabel.displayName = 'Tile.NameLabel';
194
194
  let TileContentArea = polymorphic.div('iui-tile-content');
@@ -221,7 +221,6 @@ let TileMoreOptions = React.forwardRef((props, forwardedRef) => {
221
221
  {
222
222
  onVisibleChange: setIsMenuVisible,
223
223
  menuItems: children,
224
- closeOnItemClick: true,
225
224
  },
226
225
  React.createElement(
227
226
  IconButton,
@@ -40,6 +40,8 @@ export type ToastProps = {
40
40
  /**
41
41
  * Boolean indicating when the close button is visible.
42
42
  * When false, the toast will not have any close button.
43
+ *
44
+ * This prop has no effect when the toast `type` is set to `persisting`.
43
45
  */
44
46
  hasCloseButton?: boolean;
45
47
  /**
@@ -1,12 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import cx from 'classnames';
3
- import { SvgChevronRight, SvgChevronRightSmall } from '../../utils/index.js';
3
+ import { SvgChevronRightSmall } from '../../utils/index.js';
4
4
  import { IconButton } from '../Buttons/IconButton.js';
5
- import { TreeContext } from './TreeContext.js';
6
5
  export const TreeNodeExpander = React.forwardRef((props, ref) => {
7
6
  let { isExpanded, expanderIconProps = {}, ...rest } = props;
8
- let size = React.useContext(TreeContext)?.size ?? 'default';
9
- let ChevronIcon = 'small' === size ? SvgChevronRightSmall : SvgChevronRight;
10
7
  return React.createElement(
11
8
  IconButton,
12
9
  {
@@ -16,7 +13,7 @@ export const TreeNodeExpander = React.forwardRef((props, ref) => {
16
13
  ref: ref,
17
14
  ...rest,
18
15
  },
19
- React.createElement(ChevronIcon, {
16
+ React.createElement(SvgChevronRightSmall, {
20
17
  ...expanderIconProps,
21
18
  className: cx(
22
19
  'iui-tree-node-content-expander-icon',
package/esm/styles.js CHANGED
@@ -1,4 +1,4 @@
1
- const t = '3.19.7';
1
+ const t = '3.20.0';
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.19.7",
3
+ "version": "3.20.0",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -100,8 +100,8 @@
100
100
  "eslint-config-prettier": "^8.8.0",
101
101
  "eslint-plugin-require-extensions": "^0.1.3",
102
102
  "jsdom": "^26.0.0",
103
- "react": "19.1.0",
104
- "react-dom": "19.1.0",
103
+ "react": "^19.2.3",
104
+ "react-dom": "^19.2.3",
105
105
  "typescript": "5",
106
106
  "vite": "~6.4.1",
107
107
  "vitest": "^2.1.9"
@@ -109,10 +109,10 @@
109
109
  "peerDependencies": {
110
110
  "react": ">=17.0.0",
111
111
  "react-dom": ">=17.0.0",
112
- "@stratakit/foundations": ">=0.4.0"
112
+ "@stratakit/mui": ">=0.1.1"
113
113
  },
114
114
  "peerDependenciesMeta": {
115
- "@stratakit/foundations": {
115
+ "@stratakit/mui": {
116
116
  "optional": true
117
117
  }
118
118
  },