@itwin/itwinui-react 3.14.1 → 3.15.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 (113) hide show
  1. package/CHANGELOG.md +76 -2
  2. package/DEV-cjs/core/Carousel/CarouselDotsList.js +11 -4
  3. package/DEV-cjs/core/Carousel/CarouselSlider.js +3 -3
  4. package/DEV-cjs/core/ColorPicker/ColorBuilder.js +72 -24
  5. package/DEV-cjs/core/ColorPicker/ColorInputPanel.js +35 -7
  6. package/DEV-cjs/core/ColorPicker/ColorPalette.js +21 -3
  7. package/DEV-cjs/core/ComboBox/ComboBox.js +2 -1
  8. package/DEV-cjs/core/ComboBox/ComboBoxMenu.js +2 -2
  9. package/DEV-cjs/core/DropdownMenu/DropdownMenu.js +20 -19
  10. package/DEV-cjs/core/Footer/Footer.js +7 -7
  11. package/DEV-cjs/core/Overlay/Overlay.js +0 -18
  12. package/DEV-cjs/core/Popover/Popover.js +17 -10
  13. package/DEV-cjs/core/Select/Select.js +4 -2
  14. package/DEV-cjs/core/Table/Table.js +51 -26
  15. package/DEV-cjs/core/Table/TableExpandableContentMemoized.js +47 -0
  16. package/DEV-cjs/core/Table/TableRowMemoized.js +0 -18
  17. package/DEV-cjs/core/Table/cells/DefaultCell.js +5 -5
  18. package/DEV-cjs/core/Table/hooks/useColumnDragAndDrop.js +12 -14
  19. package/DEV-cjs/core/ThemeProvider/ThemeProvider.js +19 -1
  20. package/DEV-cjs/core/Toast/Toast.js +6 -7
  21. package/DEV-cjs/styles.js +1 -1
  22. package/DEV-cjs/utils/components/ShadowRoot.js +22 -8
  23. package/DEV-cjs/utils/hooks/useWarningLogger.js +5 -3
  24. package/DEV-esm/core/Carousel/CarouselDotsList.js +10 -5
  25. package/DEV-esm/core/Carousel/CarouselSlider.js +2 -3
  26. package/DEV-esm/core/ColorPicker/ColorBuilder.js +56 -22
  27. package/DEV-esm/core/ColorPicker/ColorInputPanel.js +37 -8
  28. package/DEV-esm/core/ColorPicker/ColorPalette.js +18 -3
  29. package/DEV-esm/core/ComboBox/ComboBox.js +2 -1
  30. package/DEV-esm/core/ComboBox/ComboBoxMenu.js +2 -2
  31. package/DEV-esm/core/DropdownMenu/DropdownMenu.js +20 -19
  32. package/DEV-esm/core/Footer/Footer.js +7 -7
  33. package/DEV-esm/core/Overlay/Overlay.js +1 -19
  34. package/DEV-esm/core/Popover/Popover.js +18 -10
  35. package/DEV-esm/core/Select/Select.js +4 -2
  36. package/DEV-esm/core/Table/Table.js +51 -26
  37. package/DEV-esm/core/Table/TableExpandableContentMemoized.js +33 -0
  38. package/DEV-esm/core/Table/TableRowMemoized.js +1 -21
  39. package/DEV-esm/core/Table/cells/DefaultCell.js +5 -5
  40. package/DEV-esm/core/Table/hooks/useColumnDragAndDrop.js +12 -6
  41. package/DEV-esm/core/ThemeProvider/ThemeProvider.js +19 -1
  42. package/DEV-esm/core/Toast/Toast.js +5 -5
  43. package/DEV-esm/styles.js +1 -1
  44. package/DEV-esm/utils/components/ShadowRoot.js +22 -8
  45. package/DEV-esm/utils/hooks/useWarningLogger.js +4 -3
  46. package/cjs/core/Buttons/SplitButton.d.ts +5 -0
  47. package/cjs/core/Carousel/CarouselDotsList.js +11 -4
  48. package/cjs/core/Carousel/CarouselSlider.js +3 -3
  49. package/cjs/core/ColorPicker/ColorBuilder.d.ts +22 -1
  50. package/cjs/core/ColorPicker/ColorBuilder.js +72 -24
  51. package/cjs/core/ColorPicker/ColorInputPanel.d.ts +18 -0
  52. package/cjs/core/ColorPicker/ColorInputPanel.js +35 -7
  53. package/cjs/core/ColorPicker/ColorPalette.d.ts +8 -0
  54. package/cjs/core/ColorPicker/ColorPalette.js +21 -3
  55. package/cjs/core/ComboBox/ComboBox.d.ts +3 -2
  56. package/cjs/core/ComboBox/ComboBox.js +2 -1
  57. package/cjs/core/ComboBox/ComboBoxMenu.js +2 -2
  58. package/cjs/core/DropdownMenu/DropdownMenu.d.ts +11 -0
  59. package/cjs/core/DropdownMenu/DropdownMenu.js +20 -19
  60. package/cjs/core/Footer/Footer.d.ts +5 -5
  61. package/cjs/core/Footer/Footer.js +7 -7
  62. package/cjs/core/Overlay/Overlay.js +0 -18
  63. package/cjs/core/Popover/Popover.d.ts +4 -1
  64. package/cjs/core/Popover/Popover.js +17 -10
  65. package/cjs/core/Select/Select.d.ts +14 -2
  66. package/cjs/core/Select/Select.js +4 -2
  67. package/cjs/core/Table/Table.js +51 -26
  68. package/cjs/core/Table/TableExpandableContentMemoized.d.ts +10 -0
  69. package/cjs/core/Table/TableExpandableContentMemoized.js +47 -0
  70. package/cjs/core/Table/TableRowMemoized.js +0 -18
  71. package/cjs/core/Table/cells/DefaultCell.js +5 -5
  72. package/cjs/core/Table/hooks/useColumnDragAndDrop.js +12 -14
  73. package/cjs/core/Table/utils.d.ts +2 -2
  74. package/cjs/core/ThemeProvider/ThemeProvider.js +19 -1
  75. package/cjs/core/Toast/Toast.js +6 -7
  76. package/cjs/styles.js +1 -1
  77. package/cjs/utils/components/ShadowRoot.js +22 -8
  78. package/cjs/utils/hooks/useWarningLogger.js +1 -0
  79. package/esm/core/Buttons/SplitButton.d.ts +5 -0
  80. package/esm/core/Carousel/CarouselDotsList.js +10 -5
  81. package/esm/core/Carousel/CarouselSlider.js +2 -3
  82. package/esm/core/ColorPicker/ColorBuilder.d.ts +22 -1
  83. package/esm/core/ColorPicker/ColorBuilder.js +56 -22
  84. package/esm/core/ColorPicker/ColorInputPanel.d.ts +18 -0
  85. package/esm/core/ColorPicker/ColorInputPanel.js +37 -8
  86. package/esm/core/ColorPicker/ColorPalette.d.ts +8 -0
  87. package/esm/core/ColorPicker/ColorPalette.js +18 -3
  88. package/esm/core/ComboBox/ComboBox.d.ts +3 -2
  89. package/esm/core/ComboBox/ComboBox.js +2 -1
  90. package/esm/core/ComboBox/ComboBoxMenu.js +2 -2
  91. package/esm/core/DropdownMenu/DropdownMenu.d.ts +11 -0
  92. package/esm/core/DropdownMenu/DropdownMenu.js +20 -19
  93. package/esm/core/Footer/Footer.d.ts +5 -5
  94. package/esm/core/Footer/Footer.js +7 -7
  95. package/esm/core/Overlay/Overlay.js +1 -19
  96. package/esm/core/Popover/Popover.d.ts +4 -1
  97. package/esm/core/Popover/Popover.js +18 -10
  98. package/esm/core/Select/Select.d.ts +14 -2
  99. package/esm/core/Select/Select.js +4 -2
  100. package/esm/core/Table/Table.js +51 -26
  101. package/esm/core/Table/TableExpandableContentMemoized.d.ts +10 -0
  102. package/esm/core/Table/TableExpandableContentMemoized.js +33 -0
  103. package/esm/core/Table/TableRowMemoized.js +1 -21
  104. package/esm/core/Table/cells/DefaultCell.js +5 -5
  105. package/esm/core/Table/hooks/useColumnDragAndDrop.js +12 -6
  106. package/esm/core/Table/utils.d.ts +2 -2
  107. package/esm/core/ThemeProvider/ThemeProvider.js +19 -1
  108. package/esm/core/Toast/Toast.js +5 -5
  109. package/esm/styles.js +1 -1
  110. package/esm/utils/components/ShadowRoot.js +22 -8
  111. package/esm/utils/hooks/useWarningLogger.js +1 -0
  112. package/package.json +8 -6
  113. package/styles.css +8 -8
@@ -16,6 +16,17 @@ export type DropdownMenuProps = {
16
16
  * Child element to wrap dropdown with.
17
17
  */
18
18
  children: React.ReactNode;
19
+ /**
20
+ * Middleware options.
21
+ *
22
+ * By default, `hide` is enabled. If the menu gets hidden even when it shouldn't (e.g. some custom styles interfering
23
+ * with the trigger's hide detection) consider disabling the `hide` middleware.
24
+ *
25
+ * @see https://floating-ui.com/docs/middleware
26
+ */
27
+ middleware?: {
28
+ hide?: boolean;
29
+ };
19
30
  } & Pick<Parameters<typeof usePopover>[0], 'visible' | 'onVisibleChange' | 'placement' | 'matchWidth'> & Pick<PortalProps, 'portal'>;
20
31
  /**
21
32
  * Dropdown menu component.
@@ -33,6 +33,7 @@ const DropdownMenuContent = _react.forwardRef((props, forwardedRef) => {
33
33
  matchWidth = false,
34
34
  onVisibleChange,
35
35
  portal = true,
36
+ middleware,
36
37
  ...rest
37
38
  } = props;
38
39
  let [visible, setVisible] = (0, _index.useControlledState)(
@@ -46,28 +47,28 @@ const DropdownMenuContent = _react.forwardRef((props, forwardedRef) => {
46
47
  return menuItems;
47
48
  }, [menuItems, setVisible]);
48
49
  return _react.createElement(
49
- _react.Fragment,
50
- null,
51
- _react.createElement(
52
- _Menu.Menu,
53
- {
54
- trigger: children,
55
- onKeyDown: (0, _index.mergeEventHandlers)(props.onKeyDown, (e) => {
56
- if (e.defaultPrevented) return;
57
- if ('Tab' === e.key) setVisible(false);
58
- }),
59
- role: role,
60
- ref: forwardedRef,
61
- portal: portal,
62
- popoverProps: {
50
+ _Menu.Menu,
51
+ {
52
+ trigger: children,
53
+ onKeyDown: (0, _index.mergeEventHandlers)(props.onKeyDown, (e) => {
54
+ if (e.defaultPrevented) return;
55
+ if ('Tab' === e.key) setVisible(false);
56
+ }),
57
+ role: role,
58
+ ref: forwardedRef,
59
+ portal: portal,
60
+ popoverProps: _react.useMemo(
61
+ () => ({
63
62
  placement,
64
63
  matchWidth,
65
64
  visible,
66
65
  onVisibleChange: setVisible,
67
- },
68
- ...rest,
69
- },
70
- menuContent,
71
- ),
66
+ middleware,
67
+ }),
68
+ [matchWidth, middleware, placement, setVisible, visible],
69
+ ),
70
+ ...rest,
71
+ },
72
+ menuContent,
72
73
  );
73
74
  });
@@ -1,11 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import type { CommonProps } from '../../utils/index.js';
3
3
  export type TitleTranslations = {
4
- termsOfService: string;
5
- privacy: string;
6
- termsOfUse: string;
7
- cookies: string;
8
- legalNotices: string;
4
+ termsOfService?: string;
5
+ privacy?: string;
6
+ termsOfUse?: string;
7
+ cookies?: string;
8
+ legalNotices?: string;
9
9
  };
10
10
  type FooterProps = {
11
11
  /**
@@ -26,7 +26,7 @@ const _FooterItem = require('./FooterItem.js');
26
26
  const _FooterSeparator = require('./FooterSeparator.js');
27
27
  const _FooterList = require('./FooterList.js');
28
28
  const _Anchor = require('../Typography/Anchor.js');
29
- const footerTranslations = {
29
+ const defaultTranslatedTitles = {
30
30
  cookies: 'Cookies',
31
31
  legalNotices: 'Legal notices',
32
32
  privacy: 'Privacy',
@@ -40,27 +40,27 @@ const defaultFooterElements = [
40
40
  },
41
41
  {
42
42
  key: 'termsOfService',
43
- title: footerTranslations.termsOfService,
43
+ title: defaultTranslatedTitles.termsOfService,
44
44
  url: 'https://connect-agreementportal.bentley.com/AgreementApp/Home/Eula/view/readonly/BentleyConnect',
45
45
  },
46
46
  {
47
47
  key: 'privacy',
48
- title: footerTranslations.privacy,
48
+ title: defaultTranslatedTitles.privacy,
49
49
  url: 'https://www.bentley.com/en/privacy-policy',
50
50
  },
51
51
  {
52
52
  key: 'termsOfUse',
53
- title: footerTranslations.termsOfUse,
53
+ title: defaultTranslatedTitles.termsOfUse,
54
54
  url: 'https://www.bentley.com/en/terms-of-use-and-select-online-agreement',
55
55
  },
56
56
  {
57
57
  key: 'cookies',
58
- title: footerTranslations.cookies,
58
+ title: defaultTranslatedTitles.cookies,
59
59
  url: 'https://www.bentley.com/en/cookie-policy',
60
60
  },
61
61
  {
62
62
  key: 'legalNotices',
63
- title: footerTranslations.legalNotices,
63
+ title: defaultTranslatedTitles.legalNotices,
64
64
  url: 'https://connect.bentley.com/Legal',
65
65
  },
66
66
  ];
@@ -69,7 +69,7 @@ const Footer = Object.assign(
69
69
  let { children, customElements, translatedTitles, className, ...rest } =
70
70
  props;
71
71
  let titles = {
72
- ...footerTranslations,
72
+ ...defaultTranslatedTitles,
73
73
  ...translatedTitles,
74
74
  };
75
75
  let translatedElements = defaultFooterElements.map((element) => {
@@ -25,7 +25,6 @@ const OverlayComponent = _react.forwardRef((props, forwardedRef) => {
25
25
  });
26
26
  const OverlayHiddenContent = _react.forwardRef((props, ref) => {
27
27
  let { children, ...rest } = props;
28
- useInertPolyfill();
29
28
  return _react.createElement(
30
29
  _index.Box,
31
30
  {
@@ -43,20 +42,3 @@ const Overlay = Object.assign(OverlayComponent, {
43
42
  HiddenContent: OverlayHiddenContent,
44
43
  Overlay: OverlayOverlay,
45
44
  });
46
- const useInertPolyfill = () => {
47
- let loaded = _react.useRef(false);
48
- let modulePath =
49
- 'https://cdn.jsdelivr.net/npm/wicg-inert@3.1.2/dist/inert.min.js';
50
- _react.useEffect(() => {
51
- (async () => {
52
- if (
53
- !HTMLElement.prototype.hasOwnProperty('inert') &&
54
- !loaded.current &&
55
- !_index.isUnitTest
56
- ) {
57
- await new Function('url', 'return import(url)')(modulePath);
58
- loaded.current = true;
59
- }
60
- })();
61
- }, []);
62
- };
@@ -26,7 +26,10 @@ type PopoverOptions = {
26
26
  /**
27
27
  * Middleware options.
28
28
  *
29
- * By default, `flip`, `shift` and `size` are enabled.
29
+ * By default, `flip`, `shift`, `size`, and `hide` are enabled.
30
+ *
31
+ * If the floating content gets hidden even when it shouldn't (e.g. some custom styles interfering with the trigger's
32
+ * hide detection) consider disabling the `hide` middleware.
30
33
  *
31
34
  * @see https://floating-ui.com/docs/middleware
32
35
  */
@@ -42,21 +42,22 @@ const usePopover = (options) => {
42
42
  } = options;
43
43
  let mergedInteractions = _react.useMemo(
44
44
  () => ({
45
- click: true,
46
- dismiss: true,
47
- hover: false,
48
- focus: false,
49
45
  ...interactionsProp,
46
+ click: interactionsProp?.click ?? true,
47
+ dismiss: interactionsProp?.dismiss ?? true,
48
+ hover: interactionsProp?.hover ?? false,
49
+ focus: interactionsProp?.focus ?? false,
50
50
  }),
51
51
  [interactionsProp],
52
52
  );
53
53
  let tree = (0, _react1.useFloatingTree)();
54
54
  let middleware = _react.useMemo(
55
55
  () => ({
56
- flip: true,
57
- shift: true,
58
- size: true,
59
56
  ...options.middleware,
57
+ flip: options.middleware?.flip ?? true,
58
+ shift: options.middleware?.shift ?? true,
59
+ size: options.middleware?.size ?? true,
60
+ hide: options.middleware?.hide || !_index.isUnitTest,
60
61
  }),
61
62
  [options.middleware],
62
63
  );
@@ -164,17 +165,23 @@ const usePopover = (options) => {
164
165
  maxInlineSize: `min(${2 * referenceWidth}px, 90vw)`,
165
166
  }
166
167
  : {}),
168
+ ...(middleware.hide &&
169
+ floating.middlewareData.hide?.referenceHidden && {
170
+ visibility: 'hidden',
171
+ }),
167
172
  ...userProps?.style,
168
173
  },
169
174
  }),
170
175
  [
171
- floating.floatingStyles,
172
176
  interactions,
173
- matchWidth,
174
- referenceWidth,
177
+ floating.floatingStyles,
178
+ floating.middlewareData.hide?.referenceHidden,
175
179
  middleware.size,
180
+ middleware.hide,
176
181
  availableHeight,
177
182
  maxHeight,
183
+ matchWidth,
184
+ referenceWidth,
178
185
  ],
179
186
  );
180
187
  let getReferenceProps = _react.useCallback(
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import type { CommonProps } from '../../utils/index.js';
2
+ import type { CommonProps, PortalProps } from '../../utils/index.js';
3
3
  import { usePopover } from '../Popover/Popover.js';
4
4
  /**
5
5
  * Select component to select value from options.
@@ -182,7 +182,19 @@ export type CustomSelectProps<T> = SelectCommonProps & {
182
182
  /**
183
183
  * Props to customize Popover behavior.
184
184
  */
185
- popoverProps?: Pick<Parameters<typeof usePopover>[0], 'visible' | 'onVisibleChange' | 'placement' | 'matchWidth' | 'closeOnOutsideClick'>;
185
+ popoverProps?: Pick<Parameters<typeof usePopover>[0], 'visible' | 'onVisibleChange' | 'placement' | 'matchWidth' | 'closeOnOutsideClick'> & {
186
+ /**
187
+ * Middleware options.
188
+ *
189
+ * By default, `hide` is enabled. If the floating options get hidden even when they shouldn't (e.g. some custom
190
+ * styles interfering with the trigger's hide detection) consider disabling the `hide` middleware.
191
+ *
192
+ * @see https://floating-ui.com/docs/middleware
193
+ */
194
+ middleware?: {
195
+ hide?: boolean;
196
+ };
197
+ } & Pick<PortalProps, 'portal'>;
186
198
  /**
187
199
  * Props to pass to the select button (trigger) element.
188
200
  */
@@ -116,7 +116,7 @@ const CustomSelect = _react.forwardRef((props, forwardedRef) => {
116
116
  multiple = false,
117
117
  triggerProps,
118
118
  status,
119
- popoverProps,
119
+ popoverProps: { portal = true, ...popoverProps } = {},
120
120
  styleType,
121
121
  ...rest
122
122
  } = props;
@@ -313,7 +313,9 @@ const CustomSelect = _react.forwardRef((props, forwardedRef) => {
313
313
  popover.open &&
314
314
  _react.createElement(
315
315
  _index.Portal,
316
- null,
316
+ {
317
+ portal: portal,
318
+ },
317
319
  _react.createElement(
318
320
  SelectListbox,
319
321
  {
@@ -31,6 +31,7 @@ const _index1 = require('./hooks/index.js');
31
31
  const _index2 = require('./actionHandlers/index.js');
32
32
  const _index3 = require('./columns/index.js');
33
33
  const _ColumnHeader = require('./ColumnHeader.js');
34
+ const _TableExpandableContentMemoized = require('./TableExpandableContentMemoized.js');
34
35
  const singleRowSelectedAction = 'singleRowSelected';
35
36
  const shiftRowSelectedAction = 'shiftRowSelected';
36
37
  const tableResizeStartAction = 'tableResizeStart';
@@ -224,6 +225,17 @@ const Table = (props) => {
224
225
  ),
225
226
  [data, getSubRows],
226
227
  );
228
+ let [rowHasParent] = _react.useState(() => new WeakSet());
229
+ let getSubRowsWithSubComponents = _react.useCallback(
230
+ (originalRow) => {
231
+ if (!rowHasParent.has(originalRow)) {
232
+ rowHasParent.add(originalRow);
233
+ return [originalRow];
234
+ }
235
+ return originalRow.subRows || [];
236
+ },
237
+ [rowHasParent],
238
+ );
227
239
  let instance = (0, _reacttable.useTable)(
228
240
  {
229
241
  manualPagination: !paginatorRenderer,
@@ -236,7 +248,7 @@ const Table = (props) => {
236
248
  filterTypes,
237
249
  selectSubRows,
238
250
  data,
239
- getSubRows,
251
+ getSubRows: subComponent ? getSubRowsWithSubComponents : getSubRows,
240
252
  initialState: {
241
253
  pageSize,
242
254
  ...props.initialState,
@@ -433,39 +445,54 @@ const Table = (props) => {
433
445
  (0, _index.useLayoutEffect)(() => {
434
446
  if (scrollToIndex)
435
447
  virtualizer.scrollToIndex(scrollToIndex, {
436
- align: 'center',
448
+ align: 'start',
437
449
  });
438
450
  }, [virtualizer, scrollToIndex]);
439
451
  let getPreparedRow = _react.useCallback(
440
452
  (index, virtualItem, virtualizer) => {
441
453
  let row = page[index];
442
454
  prepareRow(row);
443
- return _react.createElement(_TableRowMemoized.TableRowMemoized, {
444
- row: row,
445
- rowProps: rowProps,
446
- isLast: index === page.length - 1,
447
- onRowInViewport: onRowInViewportRef,
448
- onBottomReached: onBottomReachedRef,
449
- intersectionMargin: intersectionMargin,
450
- state: state,
451
- key: row.getRowProps().key,
452
- onClick: onRowClickHandler,
453
- subComponent: subComponent,
454
- isDisabled: !!isRowDisabled?.(row.original),
455
- tableHasSubRows: hasAnySubRows,
456
- tableInstance: instance,
457
- expanderCell: expanderCell,
458
- scrollContainerRef: tableRef.current,
459
- tableRowRef: enableVirtualization ? void 0 : tableRowRef(row),
460
- density: density,
461
- virtualItem: virtualItem,
462
- virtualizer: virtualizer,
463
- });
455
+ if (row.subRows.length > 0 || !subComponent)
456
+ return _react.createElement(_TableRowMemoized.TableRowMemoized, {
457
+ row: row,
458
+ rowProps: rowProps,
459
+ isLast: index === page.length - 1,
460
+ onRowInViewport: onRowInViewportRef,
461
+ onBottomReached: onBottomReachedRef,
462
+ intersectionMargin: intersectionMargin,
463
+ state: state,
464
+ key: row.getRowProps().key,
465
+ onClick: onRowClickHandler,
466
+ subComponent: subComponent,
467
+ isDisabled: !!isRowDisabled?.(row.original),
468
+ tableHasSubRows: hasAnySubRows,
469
+ tableInstance: instance,
470
+ expanderCell: expanderCell,
471
+ scrollContainerRef: tableRef.current,
472
+ tableRowRef: enableVirtualization ? void 0 : tableRowRef(row),
473
+ density: density,
474
+ virtualItem: virtualItem,
475
+ virtualizer: virtualizer,
476
+ });
477
+ return _react.createElement(
478
+ _TableExpandableContentMemoized.TableExpandableContentMemoized,
479
+ {
480
+ key: row.getRowProps().key,
481
+ virtualItem: virtualItem,
482
+ ref: enableVirtualization
483
+ ? virtualizer?.measureElement
484
+ : tableRowRef(row),
485
+ isDisabled: !!isRowDisabled?.(row.original),
486
+ },
487
+ subComponent(row),
488
+ );
464
489
  },
465
490
  [
466
491
  page,
467
492
  prepareRow,
468
493
  rowProps,
494
+ onRowInViewportRef,
495
+ onBottomReachedRef,
469
496
  intersectionMargin,
470
497
  state,
471
498
  onRowClickHandler,
@@ -477,8 +504,6 @@ const Table = (props) => {
477
504
  enableVirtualization,
478
505
  tableRowRef,
479
506
  density,
480
- onBottomReachedRef,
481
- onRowInViewportRef,
482
507
  ],
483
508
  );
484
509
  let updateStickyState = () => {
@@ -510,7 +535,7 @@ const Table = (props) => {
510
535
  return _react.createElement(
511
536
  _utils.TableColumnsContext.Provider,
512
537
  {
513
- value: columns,
538
+ value: instance.columns,
514
539
  },
515
540
  _react.createElement(
516
541
  _index.Box,
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import type { PolymorphicForwardRefComponent } from '../../utils/index.js';
3
+ import type { VirtualItem } from '@tanstack/react-virtual';
4
+ type TableExpandableContentProps = {
5
+ children: React.ReactNode;
6
+ virtualItem?: VirtualItem<Element>;
7
+ isDisabled?: boolean;
8
+ };
9
+ export declare const TableExpandableContentMemoized: React.MemoExoticComponent<PolymorphicForwardRefComponent<"div", TableExpandableContentProps>>;
10
+ export {};
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', {
3
+ value: true,
4
+ });
5
+ Object.defineProperty(exports, 'TableExpandableContentMemoized', {
6
+ enumerable: true,
7
+ get: function () {
8
+ return TableExpandableContentMemoized;
9
+ },
10
+ });
11
+ const _interop_require_default = require('@swc/helpers/_/_interop_require_default');
12
+ const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
13
+ const _classnames = _interop_require_default._(require('classnames'));
14
+ const _react = _interop_require_wildcard._(require('react'));
15
+ const _index = require('../../utils/index.js');
16
+ const TableExpandableContent = _react.forwardRef((props, ref) => {
17
+ let { children, className, style, isDisabled, virtualItem, ...rest } = props;
18
+ return _react.createElement(
19
+ _index.Box,
20
+ {
21
+ className: (0, _classnames.default)(
22
+ 'iui-table-row',
23
+ 'iui-table-expanded-content',
24
+ className,
25
+ ),
26
+ style: {
27
+ flex: '0 0 auto',
28
+ minWidth: '100%',
29
+ ...(null != virtualItem
30
+ ? {
31
+ transform: `translateY(${virtualItem.start}px)`,
32
+ }
33
+ : {}),
34
+ ...style,
35
+ },
36
+ 'aria-disabled': isDisabled,
37
+ 'data-iui-index': virtualItem?.index,
38
+ ...(null != virtualItem && {
39
+ 'data-iui-virtualizer': 'item',
40
+ }),
41
+ ref: ref,
42
+ ...rest,
43
+ },
44
+ children,
45
+ );
46
+ });
47
+ const TableExpandableContentMemoized = _react.memo(TableExpandableContent);
@@ -122,24 +122,6 @@ const TableRow = (props) => {
122
122
  }),
123
123
  ),
124
124
  ),
125
- subComponent &&
126
- _react.createElement(
127
- _index.WithCSSTransition,
128
- {
129
- in: row.isExpanded,
130
- },
131
- _react.createElement(
132
- _index.Box,
133
- {
134
- className: (0, _classnames.default)(
135
- 'iui-table-row',
136
- 'iui-table-expanded-content',
137
- ),
138
- 'aria-disabled': isDisabled,
139
- },
140
- subComponent(row),
141
- ),
142
- ),
143
125
  );
144
126
  };
145
127
  const hasAnySelectedSubRow = (row, selectedRowIds) => {
@@ -11,17 +11,17 @@ Object.defineProperty(exports, 'DefaultCell', {
11
11
  const _interop_require_default = require('@swc/helpers/_/_interop_require_default');
12
12
  const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
13
13
  const _react = _interop_require_wildcard._(require('react'));
14
+ const _reacttable = require('react-table');
14
15
  const _classnames = _interop_require_default._(require('classnames'));
15
16
  const _index = require('../../../utils/index.js');
16
17
  const _utils = require('../utils.js');
17
18
  const DefaultCell = (props) => {
18
- let columnsProp = _react.useContext(_utils.TableColumnsContext);
19
+ let instanceColumns = _react.useContext(_utils.TableColumnsContext);
19
20
  let isCustomCell = _react.useMemo(
20
21
  () =>
21
- columnsProp
22
- .find(({ id }) => props.cellProps.column.id === id)
23
- ?.hasOwnProperty('Cell'),
24
- [props.cellProps.column.id, columnsProp],
22
+ instanceColumns.find(({ id }) => props.cellProps.column.id === id)
23
+ ?.Cell !== _reacttable.defaultColumn.Cell,
24
+ [instanceColumns, props.cellProps.column.id],
25
25
  );
26
26
  let {
27
27
  cellElementProps: {
@@ -10,6 +10,8 @@ Object.defineProperty(exports, 'useColumnDragAndDrop', {
10
10
  });
11
11
  const _reacttable = require('react-table');
12
12
  const _styles = require('../../../styles.js');
13
+ const leftClassName = _styles.styles['iui-table-reorder-column-left'];
14
+ const rightClassName = _styles.styles['iui-table-reorder-column-right'];
13
15
  const REORDER_ACTIONS = {
14
16
  columnDragStart: 'columnDragStart',
15
17
  columnDragEnd: 'columnDragEnd',
@@ -31,20 +33,16 @@ const defaultGetDragAndDropProps =
31
33
  };
32
34
  let setOnDragColumnStyle = (event, position) => {
33
35
  let columnElement = event.currentTarget;
34
- columnElement.classList.remove(
35
- _styles.styles['iui-table-reorder-column-right'],
36
- );
37
- columnElement.classList.remove(
38
- _styles.styles['iui-table-reorder-column-left'],
39
- );
40
- if ('left' === position)
41
- columnElement.classList.add(
42
- _styles.styles['iui-table-reorder-column-left'],
43
- );
44
- else if ('right' === position)
45
- columnElement.classList.add(
46
- _styles.styles['iui-table-reorder-column-right'],
47
- );
36
+ if ('left' === position) {
37
+ columnElement.classList.remove(rightClassName);
38
+ columnElement.classList.add(leftClassName);
39
+ } else if ('right' === position) {
40
+ columnElement.classList.remove(leftClassName);
41
+ columnElement.classList.add(rightClassName);
42
+ } else {
43
+ columnElement.classList.remove(leftClassName);
44
+ columnElement.classList.remove(rightClassName);
45
+ }
48
46
  };
49
47
  let reorderColumns = (tableColumns, srcIndex, dstIndex) => {
50
48
  let newTableColumns = [...tableColumns];
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import type { ColumnInstance, Column } from '../../react-table/react-table.js';
2
+ import type { ColumnInstance } from '../../react-table/react-table.js';
3
3
  export declare const getCellStyle: <T extends Record<string, unknown>>(column: ColumnInstance<T>, isTableResizing: boolean) => React.CSSProperties | undefined;
4
4
  export declare const getStickyStyle: <T extends Record<string, unknown>>(column: ColumnInstance<T>, columnList: ColumnInstance<T>[]) => React.CSSProperties;
5
5
  export declare const getSubRowStyle: ({ density, depth }: {
@@ -8,4 +8,4 @@ export declare const getSubRowStyle: ({ density, depth }: {
8
8
  }) => {
9
9
  paddingInlineStart: number;
10
10
  };
11
- export declare const TableColumnsContext: React.Context<Column<Record<string, unknown>>[]>;
11
+ export declare const TableColumnsContext: React.Context<ColumnInstance<{}>[]>;
@@ -30,6 +30,7 @@ const ThemeProvider = _react.forwardRef((props, forwardedRef) => {
30
30
  includeCss = 'inherit' === themeProp,
31
31
  ...rest
32
32
  } = props;
33
+ useInertPolyfill();
33
34
  let [rootElement, setRootElement] = _react.useState(null);
34
35
  let parent = useParentThemeAndContext(rootElement);
35
36
  let theme = 'inherit' === themeProp ? parent.theme || 'light' : themeProp;
@@ -246,7 +247,7 @@ const FallbackStyles = ({ root }) => {
246
247
  } catch (error) {
247
248
  console.log('Error loading styles.css locally', error);
248
249
  let css = await (0, _index.importCss)(
249
- 'https://cdn.jsdelivr.net/npm/@itwin/itwinui-react@3/styles.css',
250
+ `https://cdn.jsdelivr.net/npm/@itwin/itwinui-react@${_meta.meta.version}/styles.css`,
250
251
  );
251
252
  document.adoptedStyleSheets = [
252
253
  ...document.adoptedStyleSheets,
@@ -267,3 +268,20 @@ const useIuiDebugRef = () => {
267
268
  var version, version1;
268
269
  _globalThis1.__iui.versions.add(JSON.stringify(_meta.meta));
269
270
  };
271
+ const useInertPolyfill = () => {
272
+ let loaded = _react.useRef(false);
273
+ let modulePath =
274
+ 'https://cdn.jsdelivr.net/npm/wicg-inert@3.1.2/dist/inert.min.js';
275
+ _react.useEffect(() => {
276
+ (async () => {
277
+ if (
278
+ !HTMLElement.prototype.hasOwnProperty('inert') &&
279
+ !loaded.current &&
280
+ !_index.isUnitTest
281
+ ) {
282
+ await new Function('url', 'return import(url)')(modulePath);
283
+ loaded.current = true;
284
+ }
285
+ })();
286
+ }, []);
287
+ };
@@ -25,10 +25,6 @@ const _classnames = _interop_require_default._(require('classnames'));
25
25
  const _index = require('../../utils/index.js');
26
26
  const _IconButton = require('../Buttons/IconButton.js');
27
27
  const _Toaster = require('./Toaster.js');
28
- const isMotionOk = () =>
29
- (0, _index.getWindow)()?.matchMedia?.(
30
- '(prefers-reduced-motion: no-preference)',
31
- )?.matches;
32
28
  const Toast = (props) => {
33
29
  let {
34
30
  content,
@@ -52,6 +48,9 @@ const Toast = (props) => {
52
48
  let [height, setHeight] = _react.useState(0);
53
49
  let thisElement = _react.useRef(null);
54
50
  let [margin, setMargin] = _react.useState(0);
51
+ let motionOk = (0, _index.useMediaQuery)(
52
+ '(prefers-reduced-motion: no-preference)',
53
+ );
55
54
  let marginStyle = () => {
56
55
  if ('top' === placementPosition)
57
56
  return {
@@ -116,16 +115,16 @@ const Toast = (props) => {
116
115
  appear: true,
117
116
  unmountOnExit: true,
118
117
  onEnter: (node) => {
119
- if (isMotionOk()) {
118
+ if (motionOk) {
120
119
  node.style.transform = 'translateY(15%)';
121
120
  node.style.transitionTimingFunction = 'ease';
122
121
  }
123
122
  },
124
123
  onEntered: (node) => {
125
- if (isMotionOk()) node.style.transform = 'translateY(0)';
124
+ if (motionOk) node.style.transform = 'translateY(0)';
126
125
  },
127
126
  onExiting: (node) => {
128
- if (isMotionOk()) {
127
+ if (motionOk) {
129
128
  let { translateX, translateY } = calculateOutAnimation(node);
130
129
  node.style.transform = animateOutTo
131
130
  ? `scale(0.9) translate(${translateX}px,${translateY}px)`