@itwin/itwinui-react 3.15.3 → 3.15.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/DEV-cjs/core/Breadcrumbs/Breadcrumbs.js +85 -65
  3. package/DEV-cjs/core/ButtonGroup/ButtonGroup.js +32 -27
  4. package/DEV-cjs/core/ComboBox/ComboBox.js +9 -6
  5. package/DEV-cjs/core/DatePicker/DatePicker.js +14 -4
  6. package/DEV-cjs/core/Popover/Popover.js +44 -16
  7. package/DEV-cjs/core/Select/SelectTagContainer.js +27 -13
  8. package/DEV-cjs/core/Table/ColumnHeader.js +21 -28
  9. package/DEV-cjs/core/Table/Table.js +17 -10
  10. package/DEV-cjs/core/Table/TablePaginator.js +111 -88
  11. package/DEV-cjs/core/Table/cells/DefaultCell.js +3 -3
  12. package/DEV-cjs/core/Table/utils.js +3 -3
  13. package/DEV-cjs/styles.js +1 -1
  14. package/DEV-cjs/utils/components/MiddleTextTruncation.js +19 -14
  15. package/DEV-cjs/utils/components/OverflowContainer.js +63 -0
  16. package/DEV-cjs/utils/components/index.js +1 -0
  17. package/DEV-cjs/utils/hooks/useOverflow.js +12 -8
  18. package/DEV-esm/core/Breadcrumbs/Breadcrumbs.js +86 -67
  19. package/DEV-esm/core/ButtonGroup/ButtonGroup.js +33 -28
  20. package/DEV-esm/core/ComboBox/ComboBox.js +9 -6
  21. package/DEV-esm/core/DatePicker/DatePicker.js +12 -4
  22. package/DEV-esm/core/Popover/Popover.js +45 -17
  23. package/DEV-esm/core/Select/SelectTagContainer.js +24 -13
  24. package/DEV-esm/core/Table/ColumnHeader.js +28 -29
  25. package/DEV-esm/core/Table/Table.js +18 -11
  26. package/DEV-esm/core/Table/TablePaginator.js +112 -89
  27. package/DEV-esm/core/Table/cells/DefaultCell.js +4 -4
  28. package/DEV-esm/core/Table/utils.js +1 -1
  29. package/DEV-esm/styles.js +1 -1
  30. package/DEV-esm/utils/components/MiddleTextTruncation.js +19 -14
  31. package/DEV-esm/utils/components/OverflowContainer.js +50 -0
  32. package/DEV-esm/utils/components/index.js +1 -0
  33. package/DEV-esm/utils/hooks/useOverflow.js +8 -8
  34. package/cjs/core/Breadcrumbs/Breadcrumbs.js +84 -64
  35. package/cjs/core/ButtonGroup/ButtonGroup.js +32 -27
  36. package/cjs/core/ComboBox/ComboBox.js +9 -6
  37. package/cjs/core/DatePicker/DatePicker.js +14 -4
  38. package/cjs/core/Popover/Popover.d.ts +10 -0
  39. package/cjs/core/Popover/Popover.js +44 -16
  40. package/cjs/core/Select/SelectTagContainer.js +27 -13
  41. package/cjs/core/Table/ColumnHeader.d.ts +8 -12
  42. package/cjs/core/Table/ColumnHeader.js +21 -28
  43. package/cjs/core/Table/Table.js +13 -10
  44. package/cjs/core/Table/TablePaginator.js +111 -88
  45. package/cjs/core/Table/cells/DefaultCell.js +3 -3
  46. package/cjs/core/Table/utils.d.ts +2 -2
  47. package/cjs/core/Table/utils.js +3 -3
  48. package/cjs/styles.js +1 -1
  49. package/cjs/utils/components/MiddleTextTruncation.js +19 -14
  50. package/cjs/utils/components/OverflowContainer.d.ts +37 -0
  51. package/cjs/utils/components/OverflowContainer.js +62 -0
  52. package/cjs/utils/components/index.d.ts +1 -0
  53. package/cjs/utils/components/index.js +1 -0
  54. package/cjs/utils/hooks/useOverflow.d.ts +2 -3
  55. package/cjs/utils/hooks/useOverflow.js +12 -8
  56. package/esm/core/Breadcrumbs/Breadcrumbs.js +85 -66
  57. package/esm/core/ButtonGroup/ButtonGroup.js +33 -28
  58. package/esm/core/ComboBox/ComboBox.js +9 -6
  59. package/esm/core/DatePicker/DatePicker.js +12 -4
  60. package/esm/core/Popover/Popover.d.ts +10 -0
  61. package/esm/core/Popover/Popover.js +45 -17
  62. package/esm/core/Select/SelectTagContainer.js +24 -13
  63. package/esm/core/Table/ColumnHeader.d.ts +8 -12
  64. package/esm/core/Table/ColumnHeader.js +28 -29
  65. package/esm/core/Table/Table.js +14 -11
  66. package/esm/core/Table/TablePaginator.js +112 -89
  67. package/esm/core/Table/cells/DefaultCell.js +4 -4
  68. package/esm/core/Table/utils.d.ts +2 -2
  69. package/esm/core/Table/utils.js +1 -1
  70. package/esm/styles.js +1 -1
  71. package/esm/utils/components/MiddleTextTruncation.js +19 -14
  72. package/esm/utils/components/OverflowContainer.d.ts +37 -0
  73. package/esm/utils/components/OverflowContainer.js +49 -0
  74. package/esm/utils/components/index.d.ts +1 -0
  75. package/esm/utils/components/index.js +1 -0
  76. package/esm/utils/hooks/useOverflow.d.ts +2 -3
  77. package/esm/utils/hooks/useOverflow.js +8 -8
  78. package/package.json +1 -1
  79. package/styles.css +8 -8
@@ -108,14 +108,12 @@ const OverflowGroup = _react.forwardRef((props, forwardedRef) => {
108
108
  () => _react.Children.toArray(childrenProp).filter(Boolean),
109
109
  [childrenProp],
110
110
  );
111
- let [overflowRef, visibleCount] = (0, _index.useOverflow)(
112
- items,
113
- !overflowButton,
114
- orientation,
115
- );
116
111
  return _react.createElement(
117
- BaseGroup,
112
+ _index.OverflowContainer,
118
113
  {
114
+ as: BaseGroup,
115
+ itemsCount: items.length,
116
+ overflowOrientation: orientation,
119
117
  orientation: orientation,
120
118
  ...rest,
121
119
  className: (0, _classnames.default)(
@@ -125,27 +123,34 @@ const OverflowGroup = _react.forwardRef((props, forwardedRef) => {
125
123
  },
126
124
  props.className,
127
125
  ),
128
- ref: (0, _index.useMergedRefs)(forwardedRef, overflowRef),
126
+ ref: forwardedRef,
129
127
  },
130
- (() => {
131
- if (!(visibleCount < items.length)) return items;
132
- let overflowStart =
133
- 'start' === overflowPlacement
134
- ? items.length - visibleCount
135
- : visibleCount - 1;
136
- return _react.createElement(
137
- _react.Fragment,
138
- null,
139
- overflowButton &&
140
- 'start' === overflowPlacement &&
141
- overflowButton(overflowStart),
142
- 'start' === overflowPlacement
143
- ? items.slice(overflowStart + 1)
144
- : items.slice(0, Math.max(0, overflowStart)),
145
- overflowButton &&
146
- 'end' === overflowPlacement &&
147
- overflowButton(overflowStart),
148
- );
149
- })(),
128
+ _react.createElement(OverflowGroupContent, {
129
+ overflowButton: overflowButton,
130
+ overflowPlacement: overflowPlacement,
131
+ items: items,
132
+ }),
150
133
  );
151
134
  });
135
+ const OverflowGroupContent = (props) => {
136
+ let { overflowButton, overflowPlacement, items } = props;
137
+ let { visibleCount } = _index.OverflowContainer.useContext();
138
+ let overflowStart =
139
+ 'start' === overflowPlacement
140
+ ? items.length - visibleCount
141
+ : visibleCount - 1;
142
+ if (!(visibleCount < items.length)) return items;
143
+ return _react.createElement(
144
+ _react.Fragment,
145
+ null,
146
+ overflowButton &&
147
+ 'start' === overflowPlacement &&
148
+ overflowButton(overflowStart),
149
+ 'start' === overflowPlacement
150
+ ? items.slice(overflowStart + 1)
151
+ : items.slice(0, Math.max(0, overflowStart)),
152
+ overflowButton &&
153
+ 'end' === overflowPlacement &&
154
+ overflowButton(overflowStart),
155
+ );
156
+ };
@@ -117,12 +117,14 @@ const ComboBox = _react.forwardRef((props, forwardedRef) => {
117
117
  setFocusedIndex(selectedIndexes ?? -1);
118
118
  } else {
119
119
  setFocusedIndex(-1);
120
- if (!isMultipleEnabled(selectedIndexes, multiple))
121
- setInputValue(
122
- selectedIndexes >= 0
123
- ? optionsRef.current[selectedIndexes]?.label ?? ''
124
- : '',
125
- );
120
+ isMultipleEnabled(selectedIndexes, multiple)
121
+ ? setInputValue('')
122
+ : setInputValue(
123
+ selectedIndexes >= 0
124
+ ? optionsRef.current[selectedIndexes]?.label ?? ''
125
+ : '',
126
+ );
127
+ setIsInputDirty(false);
126
128
  }
127
129
  }, [isOpen, multiple, optionsRef, selectedIndexes]);
128
130
  let previousOptions = _react.useRef(options);
@@ -220,6 +222,7 @@ const ComboBox = _react.forwardRef((props, forwardedRef) => {
220
222
  .filter(Boolean)
221
223
  .join(', '),
222
224
  );
225
+ setInputValue('');
223
226
  } else {
224
227
  setSelectedIndexes(__originalIndex);
225
228
  hide();
@@ -24,6 +24,7 @@ const _react = _interop_require_wildcard._(require('react'));
24
24
  const _index = require('../../utils/index.js');
25
25
  const _IconButton = require('../Buttons/IconButton.js');
26
26
  const _TimePicker = require('../TimePicker/TimePicker.js');
27
+ const _Popover = require('../Popover/Popover.js');
27
28
  const isSameDay = (a, b) =>
28
29
  a &&
29
30
  b &&
@@ -188,6 +189,13 @@ const DatePicker = _react.forwardRef((props, forwardedRef) => {
188
189
  currentDate.getFullYear(),
189
190
  );
190
191
  }, [date, setMonthAndYear, startDate, endDate, enableRangeSelect]);
192
+ let popoverInitialFocusContext = _react.useContext(
193
+ _Popover.PopoverInitialFocusContext,
194
+ );
195
+ _react.useLayoutEffect(() => {
196
+ if (setFocus && popoverInitialFocusContext)
197
+ popoverInitialFocusContext.setInitialFocus(-1);
198
+ }, [popoverInitialFocusContext, setFocus]);
191
199
  let days = _react.useMemo(() => {
192
200
  let offsetToFirst = new Date(
193
201
  displayedYear,
@@ -527,10 +535,12 @@ const DatePicker = _react.forwardRef((props, forwardedRef) => {
527
535
  role: 'option',
528
536
  tabIndex: isSameDay(weekDay, focusedDay) ? 0 : -1,
529
537
  'aria-disabled': isDisabled ? 'true' : void 0,
530
- ref: (element) =>
531
- isSameDay(weekDay, focusedDay) &&
532
- needFocus.current &&
533
- element?.focus(),
538
+ ref: (element) => {
539
+ if (isSameDay(weekDay, focusedDay) && needFocus.current)
540
+ setTimeout(() => {
541
+ element?.focus();
542
+ });
543
+ },
534
544
  ...dayProps,
535
545
  className: (0, _classnames.default)(
536
546
  getDayClass(weekDay),
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { FloatingFocusManager } from '@floating-ui/react';
2
3
  import type { Placement, UseFloatingOptions, UseHoverProps, UseClickProps, UseFocusProps, UseDismissProps } from '@floating-ui/react';
3
4
  import type { PolymorphicForwardRefComponent } from '../../utils/index.js';
4
5
  import type { PortalProps } from '../../utils/components/Portal.js';
@@ -97,8 +98,17 @@ type PopoverInternalProps = {
97
98
  */
98
99
  matchWidth?: boolean;
99
100
  } & Omit<UseFloatingOptions, 'middleware' | 'placement'>;
101
+ type InitialFocus = React.ComponentPropsWithoutRef<typeof FloatingFocusManager>['initialFocus'];
100
102
  /** Stores the current open/closed state of the popover. */
101
103
  export declare const PopoverOpenContext: React.Context<boolean | undefined>;
104
+ /**
105
+ * Stores the initialFocus of the popover.
106
+ *
107
+ * E.g. Popover's descendants can disable the popover's initialFocus to prevent conflicts with its own focus management.
108
+ */
109
+ export declare const PopoverInitialFocusContext: React.Context<{
110
+ setInitialFocus: React.Dispatch<React.SetStateAction<InitialFocus>>;
111
+ } | undefined>;
102
112
  export declare const usePopover: (options: PopoverOptions & PopoverInternalProps) => {
103
113
  placement: Placement;
104
114
  strategy: import("@floating-ui/utils").Strategy;
@@ -13,6 +13,9 @@ _export(exports, {
13
13
  Popover: function () {
14
14
  return Popover;
15
15
  },
16
+ PopoverInitialFocusContext: function () {
17
+ return PopoverInitialFocusContext;
18
+ },
16
19
  PopoverOpenContext: function () {
17
20
  return PopoverOpenContext;
18
21
  },
@@ -27,7 +30,9 @@ const _classnames = _interop_require_default._(require('classnames'));
27
30
  const _react1 = require('@floating-ui/react');
28
31
  const _index = require('../../utils/index.js');
29
32
  const _Portal = require('../../utils/components/Portal.js');
33
+ const _ThemeProvider = require('../ThemeProvider/ThemeProvider.js');
30
34
  const PopoverOpenContext = _react.createContext(void 0);
35
+ const PopoverInitialFocusContext = _react.createContext(void 0);
31
36
  const usePopover = (options) => {
32
37
  let {
33
38
  placement = 'bottom-start',
@@ -228,9 +233,11 @@ const Popover = _react.forwardRef((props, forwardedRef) => {
228
233
  role: 'dialog',
229
234
  middleware,
230
235
  });
236
+ let [popoverElement, setPopoverElement] = _react.useState();
231
237
  let popoverRef = (0, _index.useMergedRefs)(
232
238
  popover.refs.setFloating,
233
239
  forwardedRef,
240
+ setPopoverElement,
234
241
  );
235
242
  let triggerId = `${(0, _index.useId)()}-trigger`;
236
243
  let hasAriaLabel = !!props['aria-labelledby'] || !!props['aria-label'];
@@ -239,6 +246,13 @@ const Popover = _react.forwardRef((props, forwardedRef) => {
239
246
  popover.refs.setPositionReference(positionReference);
240
247
  return () => void popover.refs.setPositionReference(null);
241
248
  }, [popover.refs, positionReference]);
249
+ let [initialFocus, setInitialFocus] = _react.useState();
250
+ let initialFocusContextValue = _react.useMemo(
251
+ () => ({
252
+ setInitialFocus,
253
+ }),
254
+ [],
255
+ );
242
256
  return _react.createElement(
243
257
  _react.Fragment,
244
258
  null,
@@ -255,32 +269,46 @@ const Popover = _react.forwardRef((props, forwardedRef) => {
255
269
  ),
256
270
  popover.open
257
271
  ? _react.createElement(
258
- PopoverPortal,
272
+ PopoverInitialFocusContext.Provider,
259
273
  {
260
- portal: portal,
274
+ value: initialFocusContextValue,
261
275
  },
262
276
  _react.createElement(
263
- _react1.FloatingFocusManager,
277
+ PopoverPortal,
264
278
  {
265
- context: popover.context,
266
- modal: false,
279
+ portal: portal,
267
280
  },
268
281
  _react.createElement(
269
- _index.Box,
282
+ _ThemeProvider.ThemeProvider,
270
283
  {
271
- className: (0, _classnames.default)(
284
+ portalContainer: popoverElement,
285
+ },
286
+ _react.createElement(DisplayContents, null),
287
+ _react.createElement(
288
+ _react1.FloatingFocusManager,
289
+ {
290
+ context: popover.context,
291
+ modal: false,
292
+ initialFocus: initialFocus,
293
+ },
294
+ _react.createElement(
295
+ _index.Box,
272
296
  {
273
- 'iui-popover-surface': applyBackground,
297
+ className: (0, _classnames.default)(
298
+ {
299
+ 'iui-popover-surface': applyBackground,
300
+ },
301
+ className,
302
+ ),
303
+ 'aria-labelledby': hasAriaLabel
304
+ ? void 0
305
+ : popover.refs.domReference.current?.id,
306
+ ...popover.getFloatingProps(rest),
307
+ ref: popoverRef,
274
308
  },
275
- className,
309
+ content,
276
310
  ),
277
- 'aria-labelledby': hasAriaLabel
278
- ? void 0
279
- : popover.refs.domReference.current?.id,
280
- ...popover.getFloatingProps(rest),
281
- ref: popoverRef,
282
- },
283
- content,
311
+ ),
284
312
  ),
285
313
  ),
286
314
  )
@@ -12,30 +12,44 @@ const _interop_require_default = require('@swc/helpers/_/_interop_require_defaul
12
12
  const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
13
13
  const _react = _interop_require_wildcard._(require('react'));
14
14
  const _classnames = _interop_require_default._(require('classnames'));
15
- const _index = require('../../utils/index.js');
16
15
  const _SelectTag = require('./SelectTag.js');
16
+ const _index = require('../../utils/index.js');
17
17
  const SelectTagContainer = _react.forwardRef((props, ref) => {
18
- let { tags, className, ...rest } = props;
19
- let [containerRef, visibleCount] = (0, _index.useOverflow)(tags);
20
- let refs = (0, _index.useMergedRefs)(ref, containerRef);
18
+ let { tags: tagsProp, className, ...rest } = props;
19
+ let tags = _react.useMemo(
20
+ () => _react.Children.toArray(tagsProp),
21
+ [tagsProp],
22
+ );
21
23
  return _react.createElement(
22
- _index.Box,
24
+ _index.OverflowContainer,
23
25
  {
26
+ itemsCount: tags.length,
24
27
  className: (0, _classnames.default)(
25
28
  'iui-select-tag-container',
26
29
  className,
27
30
  ),
28
- ref: refs,
31
+ ref: ref,
29
32
  ...rest,
30
33
  },
34
+ _react.createElement(SelectTagContainerContent, {
35
+ ...props,
36
+ tags: tags,
37
+ }),
38
+ );
39
+ });
40
+ const SelectTagContainerContent = (props) => {
41
+ let { tags } = props;
42
+ let { visibleCount } = _index.OverflowContainer.useContext();
43
+ return _react.createElement(
44
+ _react.Fragment,
45
+ null,
46
+ visibleCount < tags.length ? tags.slice(0, visibleCount - 1) : tags,
31
47
  _react.createElement(
32
- _react.Fragment,
48
+ _index.OverflowContainer.OverflowNode,
33
49
  null,
34
- visibleCount < tags.length ? tags.slice(0, visibleCount - 1) : tags,
35
- visibleCount < tags.length &&
36
- _react.createElement(_SelectTag.SelectTag, {
37
- label: `+${tags.length - visibleCount + 1} item(s)`,
38
- }),
50
+ _react.createElement(_SelectTag.SelectTag, {
51
+ label: `+${tags.length - visibleCount + 1} item(s)`,
52
+ }),
39
53
  ),
40
54
  );
41
- });
55
+ };
@@ -1,19 +1,15 @@
1
- import * as React from 'react';
2
- import type { ColumnInstance, HeaderGroup, TableKeyedProps, TableState } from '../../react-table/react-table.js';
3
- type ColumnHeaderProps<T extends Record<string, unknown> = Record<string, unknown>> = TableKeyedProps & {
4
- columnRefs: React.MutableRefObject<Record<string, HTMLDivElement>>;
5
- column: HeaderGroup<T>;
6
- index: number;
1
+ import { type PolymorphicForwardRefComponent } from '../../utils/index.js';
2
+ import type { HeaderGroup, TableKeyedProps } from '../../react-table/react-table.js';
3
+ type ColumnHeaderProps = TableKeyedProps & {
4
+ column: HeaderGroup<Record<string, unknown>>;
7
5
  areFiltersSet: boolean;
8
- hasAnySubRows: boolean;
9
- headers: HeaderGroup<T>[];
10
- state: TableState<T>;
11
- data: T[];
12
6
  isResizable: boolean;
13
7
  columnResizeMode: 'fit' | 'expand';
14
8
  enableColumnReordering: boolean;
15
9
  density: string | undefined;
16
- visibleColumns: ColumnInstance<T>[];
10
+ columnHasExpanders: boolean;
11
+ isLast: boolean;
12
+ isTableEmpty: boolean;
17
13
  };
18
- export declare const ColumnHeader: <T extends Record<string, unknown> = Record<string, unknown>>(props: ColumnHeaderProps<T>) => JSX.Element;
14
+ export declare const ColumnHeader: PolymorphicForwardRefComponent<"div", ColumnHeaderProps>;
19
15
  export {};
@@ -12,39 +12,32 @@ const _interop_require_default = require('@swc/helpers/_/_interop_require_defaul
12
12
  const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
13
13
  const _react = _interop_require_wildcard._(require('react'));
14
14
  const _index = require('../../utils/index.js');
15
- const _index1 = require('./columns/index.js');
16
15
  const _FilterToggle = require('./filters/FilterToggle.js');
17
16
  const _utils = require('./utils.js');
18
17
  const _classnames = _interop_require_default._(require('classnames'));
19
- const ColumnHeader = (props) => {
18
+ const ColumnHeader = _react.forwardRef((props, forwardedRef) => {
20
19
  let {
21
- columnRefs,
22
20
  column,
23
- index,
24
21
  areFiltersSet,
25
- hasAnySubRows,
26
- headers,
27
- state,
28
- data,
29
22
  isResizable,
30
23
  columnResizeMode,
31
24
  enableColumnReordering,
32
25
  density,
33
- visibleColumns,
26
+ columnHasExpanders,
27
+ isLast,
28
+ isTableEmpty,
34
29
  ...rest
35
30
  } = props;
36
31
  let isHeaderDirectClick = _react.useRef(false);
32
+ let instance = _react.useContext(_utils.TableInstanceContext);
37
33
  let COLUMN_MIN_WIDTHS = {
38
34
  default: 72,
39
35
  withExpander: 108,
40
36
  };
41
37
  let showFilterButton = (column) =>
42
- (0 !== data.length || areFiltersSet) && column.canFilter && !!column.Filter;
43
- let showSortButton = (column) => 0 !== data.length && column.canSort;
38
+ (!isTableEmpty || areFiltersSet) && column.canFilter && !!column.Filter;
39
+ let showSortButton = (column) => !isTableEmpty && column.canSort;
44
40
  let { onClick, ...restSortProps } = column.getSortByToggleProps();
45
- let columnHasExpanders =
46
- hasAnySubRows &&
47
- index === headers.findIndex((c) => c.id !== _index1.SELECTION_CELL_ID);
48
41
  if ([void 0, 0].includes(column.minWidth)) {
49
42
  column.minWidth = columnHasExpanders
50
43
  ? COLUMN_MIN_WIDTHS.withExpander
@@ -64,12 +57,12 @@ const ColumnHeader = (props) => {
64
57
  column.columnClassName,
65
58
  ),
66
59
  style: {
67
- ...(0, _utils.getCellStyle)(column, !!state.isTableResizing),
60
+ ...(0, _utils.getCellStyle)(column, !!instance?.state.isTableResizing),
68
61
  ...(columnHasExpanders &&
69
62
  (0, _utils.getSubRowStyle)({
70
63
  density,
71
64
  })),
72
- ...(0, _utils.getStickyStyle)(column, visibleColumns),
65
+ ...(0, _utils.getStickyStyle)(column, instance?.visibleColumns ?? []),
73
66
  flexWrap: 'wrap',
74
67
  columnGap: 'var(--iui-size-xs)',
75
68
  },
@@ -81,14 +74,14 @@ const ColumnHeader = (props) => {
81
74
  ...rest,
82
75
  key: columnProps.key,
83
76
  title: void 0,
84
- ref: _react.useCallback(
85
- (el) => {
86
- if (el) {
87
- columnRefs.current[column.id] = el;
88
- column.resizeWidth = el.getBoundingClientRect().width;
89
- }
90
- },
91
- [column, columnRefs],
77
+ ref: (0, _index.useMergedRefs)(
78
+ _react.useCallback(
79
+ (el) => {
80
+ if (el) column.resizeWidth = el.getBoundingClientRect().width;
81
+ },
82
+ [column],
83
+ ),
84
+ forwardedRef,
92
85
  ),
93
86
  onMouseDown: () => {
94
87
  isHeaderDirectClick.current = true;
@@ -159,7 +152,7 @@ const ColumnHeader = (props) => {
159
152
  ),
160
153
  isResizable &&
161
154
  column.isResizerVisible &&
162
- (index !== headers.length - 1 || 'expand' === columnResizeMode) &&
155
+ (!isLast || 'expand' === columnResizeMode) &&
163
156
  _react.createElement(
164
157
  _index.Box,
165
158
  {
@@ -178,17 +171,17 @@ const ColumnHeader = (props) => {
178
171
  slot: 'resizers',
179
172
  }),
180
173
  'left' === column.sticky &&
181
- state.sticky.isScrolledToRight &&
174
+ instance?.state.sticky.isScrolledToRight &&
182
175
  _react.createElement(_index.Box, {
183
176
  className: 'iui-table-cell-shadow-right',
184
177
  slot: 'shadows',
185
178
  }),
186
179
  'right' === column.sticky &&
187
- state.sticky.isScrolledToLeft &&
180
+ instance?.state.sticky.isScrolledToLeft &&
188
181
  _react.createElement(_index.Box, {
189
182
  className: 'iui-table-cell-shadow-left',
190
183
  slot: 'shadows',
191
184
  }),
192
185
  ),
193
186
  );
194
- };
187
+ });
@@ -289,7 +289,6 @@ const Table = (props) => {
289
289
  gotoPage,
290
290
  setPageSize,
291
291
  flatHeaders,
292
- visibleColumns,
293
292
  setGlobalFilter,
294
293
  } = instance;
295
294
  let headerGroups = _headerGroups;
@@ -533,9 +532,9 @@ const Table = (props) => {
533
532
  updateStickyState();
534
533
  }, []);
535
534
  return _react.createElement(
536
- _utils.TableColumnsContext.Provider,
535
+ _utils.TableInstanceContext.Provider,
537
536
  {
538
- value: instance.columns,
537
+ value: instance,
539
538
  },
540
539
  _react.createElement(
541
540
  _index.Box,
@@ -597,19 +596,23 @@ const Table = (props) => {
597
596
  return _react.createElement(_ColumnHeader.ColumnHeader, {
598
597
  ...dragAndDropProps,
599
598
  key: dragAndDropProps.key || column.id || index,
600
- columnRefs: columnRefs,
601
599
  column: column,
602
- index: index,
603
600
  areFiltersSet: areFiltersSet,
604
- hasAnySubRows: hasAnySubRows,
605
- headers: headerGroup.headers,
606
- state: state,
607
- data: data,
601
+ columnHasExpanders:
602
+ hasAnySubRows &&
603
+ index ===
604
+ headerGroup.headers.findIndex(
605
+ (c) => c.id !== _index3.SELECTION_CELL_ID,
606
+ ),
607
+ isLast: index === headerGroup.headers.length - 1,
608
+ isTableEmpty: 0 === data.length,
608
609
  isResizable: isResizable,
609
610
  columnResizeMode: columnResizeMode,
610
611
  enableColumnReordering: enableColumnReordering,
611
612
  density: density,
612
- visibleColumns: visibleColumns,
613
+ ref: (el) => {
614
+ if (el) columnRefs.current[column.id] = el;
615
+ },
613
616
  });
614
617
  }),
615
618
  ),