@itwin/itwinui-react 1.45.0 → 1.47.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 (96) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/cjs/core/Breadcrumbs/Breadcrumbs.d.ts +116 -0
  3. package/cjs/core/Breadcrumbs/Breadcrumbs.js +2 -3
  4. package/cjs/core/ButtonGroup/ButtonGroup.js +1 -1
  5. package/cjs/core/ColorPicker/ColorSwatch.d.ts +1 -1
  6. package/cjs/core/DatePicker/DatePicker.d.ts +24 -4
  7. package/cjs/core/DatePicker/DatePicker.js +116 -19
  8. package/cjs/core/Dialog/Dialog.d.ts +5 -5
  9. package/cjs/core/Dialog/Dialog.js +38 -6
  10. package/cjs/core/Dialog/DialogBackdrop.d.ts +2 -2
  11. package/cjs/core/Dialog/DialogBackdrop.js +2 -2
  12. package/cjs/core/Dialog/DialogContext.d.ts +31 -0
  13. package/cjs/core/Dialog/DialogDragContext.d.ts +8 -0
  14. package/cjs/core/Dialog/DialogDragContext.js +28 -0
  15. package/cjs/core/Dialog/DialogMain.d.ts +2 -2
  16. package/cjs/core/Dialog/DialogMain.js +46 -6
  17. package/cjs/core/Dialog/DialogTitleBar.d.ts +2 -2
  18. package/cjs/core/Dialog/DialogTitleBar.js +12 -2
  19. package/cjs/core/Modal/Modal.js +1 -1
  20. package/cjs/core/Table/Table.d.ts +6 -0
  21. package/cjs/core/Table/Table.js +73 -17
  22. package/cjs/core/Table/actionHandlers/index.d.ts +1 -1
  23. package/cjs/core/Table/actionHandlers/index.js +2 -1
  24. package/cjs/core/Table/actionHandlers/resizeHandler.d.ts +2 -0
  25. package/cjs/core/Table/actionHandlers/selectHandler.d.ts +5 -0
  26. package/cjs/core/Table/actionHandlers/selectHandler.js +35 -2
  27. package/cjs/core/Table/filters/FilterToggle.d.ts +0 -1
  28. package/cjs/core/Table/filters/FilterToggle.js +3 -3
  29. package/cjs/core/Table/hooks/useResizeColumns.d.ts +33 -1
  30. package/cjs/core/Table/hooks/useResizeColumns.js +89 -29
  31. package/cjs/core/index.d.ts +3 -1
  32. package/cjs/core/index.js +6 -3
  33. package/cjs/core/utils/components/Resizer.d.ts +31 -0
  34. package/cjs/core/utils/components/Resizer.js +206 -0
  35. package/cjs/core/utils/components/VirtualScroll.js +26 -24
  36. package/cjs/core/utils/components/index.d.ts +1 -0
  37. package/cjs/core/utils/components/index.js +1 -0
  38. package/cjs/core/utils/functions/index.d.ts +1 -0
  39. package/cjs/core/utils/functions/index.js +1 -0
  40. package/cjs/core/utils/functions/styles.d.ts +6 -0
  41. package/cjs/core/utils/functions/styles.js +21 -0
  42. package/cjs/core/utils/hooks/useContainerWidth.d.ts +1 -1
  43. package/cjs/core/utils/hooks/useDragAndDrop.d.ts +14 -0
  44. package/cjs/core/utils/hooks/useDragAndDrop.js +110 -0
  45. package/cjs/core/utils/hooks/useEventListener.d.ts +1 -1
  46. package/cjs/core/utils/hooks/useOverflow.d.ts +1 -1
  47. package/cjs/core/utils/hooks/useResizeObserver.d.ts +1 -1
  48. package/cjs/types/react-table-config.d.ts +13 -1
  49. package/esm/core/Breadcrumbs/Breadcrumbs.d.ts +116 -0
  50. package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -3
  51. package/esm/core/ButtonGroup/ButtonGroup.js +1 -1
  52. package/esm/core/ColorPicker/ColorSwatch.d.ts +1 -1
  53. package/esm/core/DatePicker/DatePicker.d.ts +24 -4
  54. package/esm/core/DatePicker/DatePicker.js +116 -19
  55. package/esm/core/Dialog/Dialog.d.ts +5 -5
  56. package/esm/core/Dialog/Dialog.js +37 -5
  57. package/esm/core/Dialog/DialogBackdrop.d.ts +2 -2
  58. package/esm/core/Dialog/DialogBackdrop.js +2 -2
  59. package/esm/core/Dialog/DialogContext.d.ts +31 -0
  60. package/esm/core/Dialog/DialogDragContext.d.ts +8 -0
  61. package/esm/core/Dialog/DialogDragContext.js +21 -0
  62. package/esm/core/Dialog/DialogMain.d.ts +2 -2
  63. package/esm/core/Dialog/DialogMain.js +47 -7
  64. package/esm/core/Dialog/DialogTitleBar.d.ts +2 -2
  65. package/esm/core/Dialog/DialogTitleBar.js +12 -2
  66. package/esm/core/Modal/Modal.js +1 -1
  67. package/esm/core/Table/Table.d.ts +6 -0
  68. package/esm/core/Table/Table.js +76 -20
  69. package/esm/core/Table/actionHandlers/index.d.ts +1 -1
  70. package/esm/core/Table/actionHandlers/index.js +1 -1
  71. package/esm/core/Table/actionHandlers/resizeHandler.d.ts +2 -0
  72. package/esm/core/Table/actionHandlers/selectHandler.d.ts +5 -0
  73. package/esm/core/Table/actionHandlers/selectHandler.js +33 -1
  74. package/esm/core/Table/filters/FilterToggle.d.ts +0 -1
  75. package/esm/core/Table/filters/FilterToggle.js +4 -4
  76. package/esm/core/Table/hooks/useResizeColumns.d.ts +33 -1
  77. package/esm/core/Table/hooks/useResizeColumns.js +89 -29
  78. package/esm/core/index.d.ts +3 -1
  79. package/esm/core/index.js +2 -1
  80. package/esm/core/utils/components/Resizer.d.ts +31 -0
  81. package/esm/core/utils/components/Resizer.js +199 -0
  82. package/esm/core/utils/components/VirtualScroll.js +26 -24
  83. package/esm/core/utils/components/index.d.ts +1 -0
  84. package/esm/core/utils/components/index.js +1 -0
  85. package/esm/core/utils/functions/index.d.ts +1 -0
  86. package/esm/core/utils/functions/index.js +1 -0
  87. package/esm/core/utils/functions/styles.d.ts +6 -0
  88. package/esm/core/utils/functions/styles.js +17 -0
  89. package/esm/core/utils/hooks/useContainerWidth.d.ts +1 -1
  90. package/esm/core/utils/hooks/useDragAndDrop.d.ts +14 -0
  91. package/esm/core/utils/hooks/useDragAndDrop.js +103 -0
  92. package/esm/core/utils/hooks/useEventListener.d.ts +1 -1
  93. package/esm/core/utils/hooks/useOverflow.d.ts +1 -1
  94. package/esm/core/utils/hooks/useResizeObserver.d.ts +1 -1
  95. package/esm/types/react-table-config.d.ts +13 -1
  96. package/package.json +1 -1
@@ -4,7 +4,6 @@ import '@itwin/itwinui-css/css/table.css';
4
4
  import { StylingProps } from '../../utils';
5
5
  export declare type FilterToggleProps<T extends Record<string, unknown>> = {
6
6
  column: HeaderGroup<T>;
7
- ownerDocument?: Document;
8
7
  } & StylingProps;
9
8
  /**
10
9
  * Handles showing filter icon and opening filter component.
@@ -41,9 +41,9 @@ var Buttons_1 = require("../../Buttons");
41
41
  * Handles showing filter icon and opening filter component.
42
42
  */
43
43
  var FilterToggle = function (props) {
44
- var column = props.column, _a = props.ownerDocument, ownerDocument = _a === void 0 ? (0, utils_1.getDocument)() : _a, className = props.className, rest = __rest(props, ["column", "ownerDocument", "className"]);
44
+ var column = props.column, className = props.className, rest = __rest(props, ["column", "className"]);
45
45
  (0, utils_1.useTheme)();
46
- var _b = react_1.default.useState(false), isVisible = _b[0], setIsVisible = _b[1];
46
+ var _a = react_1.default.useState(false), isVisible = _a[0], setIsVisible = _a[1];
47
47
  var close = react_1.default.useCallback(function () { return setIsVisible(false); }, []);
48
48
  var setFilter = react_1.default.useCallback(function (filterValue) {
49
49
  column.setFilter(filterValue);
@@ -54,7 +54,7 @@ var FilterToggle = function (props) {
54
54
  close();
55
55
  }, [close, column]);
56
56
  var isColumnFiltered = column.filterValue != null && column.filterValue !== '';
57
- return (react_1.default.createElement(react_1.default.Fragment, null, column.canFilter && column.Filter && (react_1.default.createElement(utils_1.Popover, { content: column.render('Filter', { close: close, setFilter: setFilter, clearFilter: clearFilter }), placement: 'bottom-start', visible: isVisible, onClickOutside: close, appendTo: ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.body },
57
+ return (react_1.default.createElement(react_1.default.Fragment, null, column.canFilter && column.Filter && (react_1.default.createElement(utils_1.Popover, { content: column.render('Filter', { close: close, setFilter: setFilter, clearFilter: clearFilter }), placement: 'bottom-start', visible: isVisible, onClickOutside: close },
58
58
  react_1.default.createElement(Buttons_1.IconButton, __assign({ styleType: 'borderless', isActive: isVisible || isColumnFiltered, className: (0, classnames_1.default)('iui-filter-button', className), onClick: function (e) {
59
59
  setIsVisible(function (v) { return !v; });
60
60
  // Prevents from triggering sort
@@ -1,5 +1,37 @@
1
+ /**
2
+ * Copied from react-table as useResizeColumns and made some changes:
3
+ * - Added TS typings
4
+ * - Added sibling/next column resize when resizing
5
+ * - Favoring min/max widths when resizing
6
+ * - Added owner document support
7
+ * @link https://github.com/tannerlinsley/react-table/blob/master/src/plugin-hooks/useResizeColumns.js
8
+ */
9
+ /**
10
+ * MIT License
11
+ *
12
+ * Copyright (c) 2016 Tanner Linsley
13
+ *
14
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ * of this software and associated documentation files (the "Software"), to deal
16
+ * in the Software without restriction, including without limitation the rights
17
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ * copies of the Software, and to permit persons to whom the Software is
19
+ * furnished to do so, subject to the following conditions:
20
+ *
21
+ * The above copyright notice and this permission notice shall be included in all
22
+ * copies or substantial portions of the Software.
23
+ *
24
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ * SOFTWARE.
31
+ */
32
+ import React from 'react';
1
33
  import { Hooks } from 'react-table';
2
34
  export declare const useResizeColumns: {
3
- <T extends Record<string, unknown>>(ownerDocument: Document | undefined): (hooks: Hooks<T>) => void;
35
+ <T extends Record<string, unknown>>(ownerDocument: React.RefObject<Document | undefined>): (hooks: Hooks<T>) => void;
4
36
  pluginName: string;
5
37
  };
@@ -33,24 +33,19 @@ var isTouchEvent = function (event) {
33
33
  };
34
34
  var defaultGetResizerProps = function (ownerDocument) { return function (props, _a) {
35
35
  var instance = _a.instance, header = _a.header, nextHeader = _a.nextHeader;
36
- if (!ownerDocument) {
37
- return props;
38
- }
39
- var dispatch = instance.dispatch, flatHeaders = instance.flatHeaders;
36
+ var dispatch = instance.dispatch;
40
37
  var onResizeStart = function (e, header) {
38
+ var _a, _b, _c;
41
39
  // lets not respond to multiple touches (e.g. 2 or 3 fingers)
42
40
  if (isTouchEvent(e) && e.touches && e.touches.length > 1) {
43
41
  return;
44
42
  }
45
- // Setting `width` here because it might take several rerenders until actual column width is set.
46
- flatHeaders.forEach(function (h) {
47
- if (!h.width) {
48
- h.width = h.resizeWidth;
49
- }
50
- });
51
- var headerIdWidths = getLeafHeaders(header).map(function (d) { return [d.id, d.width]; });
43
+ var headerIdWidths = getLeafHeaders(header).map(function (d) { return [
44
+ d.id,
45
+ getHeaderWidth(d),
46
+ ]; });
52
47
  var nextHeaderIdWidths = nextHeader
53
- ? getLeafHeaders(nextHeader).map(function (d) { return [d.id, d.width]; })
48
+ ? getLeafHeaders(nextHeader).map(function (d) { return [d.id, getHeaderWidth(d)]; })
54
49
  : [];
55
50
  var clientX = isTouchEvent(e)
56
51
  ? Math.round(e.touches[0].clientX)
@@ -69,8 +64,10 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
69
64
  moveHandler: function (e) { return dispatchMove(e.clientX); },
70
65
  upEvent: 'mouseup',
71
66
  upHandler: function () {
72
- ownerDocument.removeEventListener('mousemove', handlersAndEvents.mouse.moveHandler);
73
- ownerDocument.removeEventListener('mouseup', handlersAndEvents.mouse.upHandler);
67
+ var _a, _b, _c;
68
+ (_a = ownerDocument.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('mousemove', handlersAndEvents.mouse.moveHandler);
69
+ (_b = ownerDocument.current) === null || _b === void 0 ? void 0 : _b.removeEventListener('mouseup', handlersAndEvents.mouse.upHandler);
70
+ (_c = ownerDocument.current) === null || _c === void 0 ? void 0 : _c.removeEventListener('mouseleave', handlersAndEvents.mouse.upHandler);
74
71
  dispatchEnd();
75
72
  },
76
73
  },
@@ -85,8 +82,9 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
85
82
  },
86
83
  upEvent: 'touchend',
87
84
  upHandler: function () {
88
- ownerDocument.removeEventListener(handlersAndEvents.touch.moveEvent, handlersAndEvents.touch.moveHandler);
89
- ownerDocument.removeEventListener(handlersAndEvents.touch.upEvent, handlersAndEvents.touch.moveHandler);
85
+ var _a, _b;
86
+ (_a = ownerDocument.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(handlersAndEvents.touch.moveEvent, handlersAndEvents.touch.moveHandler);
87
+ (_b = ownerDocument.current) === null || _b === void 0 ? void 0 : _b.removeEventListener(handlersAndEvents.touch.upEvent, handlersAndEvents.touch.moveHandler);
90
88
  dispatchEnd();
91
89
  },
92
90
  },
@@ -97,13 +95,16 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
97
95
  var passiveIfSupported = passiveEventSupported()
98
96
  ? { passive: false }
99
97
  : false;
100
- ownerDocument.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported);
101
- ownerDocument.addEventListener(events.upEvent, events.upHandler, passiveIfSupported);
98
+ (_a = ownerDocument.current) === null || _a === void 0 ? void 0 : _a.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported);
99
+ (_b = ownerDocument.current) === null || _b === void 0 ? void 0 : _b.addEventListener(events.upEvent, events.upHandler, passiveIfSupported);
100
+ if (!isTouchEvent(e)) {
101
+ (_c = ownerDocument.current) === null || _c === void 0 ? void 0 : _c.addEventListener('mouseleave', handlersAndEvents.mouse.upHandler, passiveIfSupported);
102
+ }
102
103
  dispatch({
103
104
  type: react_table_1.actions.columnStartResizing,
104
105
  columnId: header.id,
105
- columnWidth: header.width,
106
- nextColumnWidth: nextHeader === null || nextHeader === void 0 ? void 0 : nextHeader.width,
106
+ columnWidth: getHeaderWidth(header),
107
+ nextColumnWidth: getHeaderWidth(nextHeader),
107
108
  headerIdWidths: headerIdWidths,
108
109
  nextHeaderIdWidths: nextHeaderIdWidths,
109
110
  clientX: clientX,
@@ -120,6 +121,8 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
120
121
  e.persist();
121
122
  // Prevents from triggering drag'n'drop
122
123
  e.preventDefault();
124
+ // Prevents from triggering sort
125
+ e.stopPropagation();
123
126
  onResizeStart(e, header);
124
127
  },
125
128
  onTouchStart: function (e) {
@@ -155,13 +158,29 @@ var reducer = function (newState, action, previousState, instance) {
155
158
  if (action.type === react_table_1.actions.columnResizing) {
156
159
  var clientX = action.clientX;
157
160
  var _a = newState.columnResizing, _b = _a.startX, startX = _b === void 0 ? 0 : _b, _c = _a.columnWidth, columnWidth = _c === void 0 ? 1 : _c, _d = _a.nextColumnWidth, nextColumnWidth = _d === void 0 ? 1 : _d, _e = _a.headerIdWidths, headerIdWidths = _e === void 0 ? [] : _e, _f = _a.nextHeaderIdWidths, nextHeaderIdWidths = _f === void 0 ? [] : _f;
161
+ if (!instance) {
162
+ return newState;
163
+ }
158
164
  var deltaX = clientX - startX;
159
165
  var newColumnWidths = getColumnWidths(headerIdWidths, deltaX / columnWidth);
160
- var newNextColumnWidths = getColumnWidths(nextHeaderIdWidths, -deltaX / nextColumnWidth);
161
- if (!isNewColumnWidthsValid(newColumnWidths, instance === null || instance === void 0 ? void 0 : instance.flatHeaders) ||
162
- !isNewColumnWidthsValid(newNextColumnWidths, instance === null || instance === void 0 ? void 0 : instance.flatHeaders)) {
166
+ var isTableWidthDecreasing = calculateTableWidth(newColumnWidths, instance.flatHeaders) <
167
+ instance.tableWidth;
168
+ var newNextColumnWidths = (instance === null || instance === void 0 ? void 0 : instance.columnResizeMode) === 'fit' ||
169
+ ((instance === null || instance === void 0 ? void 0 : instance.columnResizeMode) === 'expand' && isTableWidthDecreasing)
170
+ ? getColumnWidths(nextHeaderIdWidths, -deltaX / nextColumnWidth)
171
+ : {};
172
+ if (!isNewColumnWidthsValid(newColumnWidths, instance.flatHeaders) ||
173
+ !isNewColumnWidthsValid(newNextColumnWidths, instance.flatHeaders) ||
174
+ !isNewTableWidthValid(__assign(__assign({}, newColumnWidths), newNextColumnWidths), instance)) {
163
175
  return newState;
164
176
  }
177
+ // Setting `width` here because it might take several rerenders until actual column width is set.
178
+ // Also setting after the actual resize happened.
179
+ instance === null || instance === void 0 ? void 0 : instance.flatHeaders.forEach(function (h) {
180
+ if (!h.width) {
181
+ h.width = h.resizeWidth;
182
+ }
183
+ });
165
184
  return __assign(__assign({}, newState), { columnResizing: __assign(__assign({}, newState.columnResizing), { columnWidths: __assign(__assign(__assign({}, newState.columnResizing.columnWidths), newColumnWidths), newNextColumnWidths) }) });
166
185
  }
167
186
  if (action.type === react_table_1.actions.columnDoneResizing) {
@@ -201,25 +220,53 @@ var isNewColumnWidthsValid = function (columnWidths, headers) {
201
220
  }
202
221
  return true;
203
222
  };
223
+ var isNewTableWidthValid = function (columnWidths, instance) {
224
+ if (instance.columnResizeMode === 'fit') {
225
+ return true;
226
+ }
227
+ var newTableWidth = 0;
228
+ for (var _i = 0, _a = instance.flatHeaders; _i < _a.length; _i++) {
229
+ var header = _a[_i];
230
+ newTableWidth += columnWidths[header.id]
231
+ ? columnWidths[header.id]
232
+ : getHeaderWidth(header);
233
+ }
234
+ // `tableWidth` is whole number therefore we need to round the `newTableWidth`
235
+ if (Math.round(newTableWidth) < instance.tableWidth) {
236
+ return false;
237
+ }
238
+ return true;
239
+ };
204
240
  var useInstanceBeforeDimensions = function (instance) {
205
- var flatHeaders = instance.flatHeaders, getHooks = instance.getHooks, columnResizing = instance.state.columnResizing;
241
+ var flatHeaders = instance.flatHeaders, getHooks = instance.getHooks, columnResizing = instance.state.columnResizing, columnResizeMode = instance.columnResizeMode;
206
242
  var getInstance = (0, react_table_1.useGetLatest)(instance);
207
243
  flatHeaders.forEach(function (header, index) {
208
244
  var _a;
209
245
  var resizeWidth = columnResizing.columnWidths[header.id];
210
246
  header.width = resizeWidth || header.width || header.originalWidth;
211
247
  header.isResizing = columnResizing.isResizingColumn === header.id;
212
- var headerToResize = header.disableResizing
248
+ var headerToResize = header.disableResizing && columnResizeMode === 'fit'
213
249
  ? getPreviousResizableHeader(header, instance)
214
250
  : header;
215
- var nextResizableHeader = getNextResizableHeader(header, instance);
251
+ // When `columnResizeMode` is `expand` and it is a last column,
252
+ // then try to find some column on the left side to resize
253
+ // when table width is decreasing.
254
+ var nextResizableHeader = columnResizeMode === 'expand' && index === flatHeaders.length - 1
255
+ ? getPreviousResizableHeader(header, instance)
256
+ : getNextResizableHeader(header, instance);
216
257
  header.canResize =
217
258
  header.disableResizing != null ? !header.disableResizing : true;
218
259
  // Show resizer when header is resizable or when next header is resizable
219
260
  // and there is resizable columns on the left side of the resizer.
220
- header.isResizerVisible =
221
- (header.canResize && !!nextResizableHeader) ||
222
- (headerToResize && !!((_a = instance.flatHeaders[index + 1]) === null || _a === void 0 ? void 0 : _a.canResize));
261
+ if (columnResizeMode === 'fit') {
262
+ header.isResizerVisible =
263
+ (header.canResize && !!nextResizableHeader) ||
264
+ (headerToResize && !!((_a = instance.flatHeaders[index + 1]) === null || _a === void 0 ? void 0 : _a.canResize));
265
+ // When resize mode is `expand` show resizer on the current resizable column.
266
+ }
267
+ else {
268
+ header.isResizerVisible = header.canResize && !!headerToResize;
269
+ }
223
270
  header.getResizerProps = (0, react_table_1.makePropGetter)(getHooks().getResizerProps, {
224
271
  instance: getInstance(),
225
272
  header: headerToResize,
@@ -259,6 +306,19 @@ function getLeafHeaders(header) {
259
306
  recurseHeader(header);
260
307
  return leafHeaders;
261
308
  }
309
+ var getHeaderWidth = function (header) {
310
+ return Number(header.width || header.resizeWidth || 0);
311
+ };
312
+ var calculateTableWidth = function (columnWidths, headers) {
313
+ var newTableWidth = 0;
314
+ for (var _i = 0, headers_1 = headers; _i < headers_1.length; _i++) {
315
+ var header = headers_1[_i];
316
+ newTableWidth += columnWidths[header.id]
317
+ ? columnWidths[header.id]
318
+ : getHeaderWidth(header);
319
+ }
320
+ return newTableWidth;
321
+ };
262
322
  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#safely_detecting_option_support
263
323
  var passiveSupported = null;
264
324
  var passiveEventSupported = function () {
@@ -20,6 +20,8 @@ export { ComboBox } from './ComboBox';
20
20
  export type { ComboBoxProps } from './ComboBox';
21
21
  export { DatePicker, generateLocalizedStrings } from './DatePicker';
22
22
  export type { DatePickerProps } from './DatePicker';
23
+ export { Dialog } from './Dialog';
24
+ export type { DialogProps, DialogButtonBarProps, DialogContentProps, DialogMainProps, DialogTitleBarProps, } from './Dialog';
23
25
  export { DropdownMenu } from './DropdownMenu';
24
26
  export type { DropdownMenuProps } from './DropdownMenu';
25
27
  export { ErrorPage } from './ErrorPage';
@@ -72,7 +74,7 @@ export { StatusMessage } from './StatusMessage';
72
74
  export type { StatusMessageProps } from './StatusMessage';
73
75
  export { Surface } from './Surface';
74
76
  export type { SurfaceProps } from './Surface';
75
- export { Table, tableFilters, FilterButtonBar, DefaultCell, EditableCell, TablePaginator, ActionColumn, ExpanderColumn, SelectionColumn, } from './Table';
77
+ export { Table, tableFilters, BaseFilter, FilterButtonBar, DefaultCell, EditableCell, TablePaginator, ActionColumn, ExpanderColumn, SelectionColumn, } from './Table';
76
78
  export type { TableProps, TableFilterProps, TableFilterValue, DateRangeFilterOptions, FilterButtonBarProps, DefaultCellProps, EditableCellProps, TablePaginatorProps, TablePaginatorRendererProps, } from './Table';
77
79
  export { Tag, TagContainer } from './Tag';
78
80
  export type { TagProps, TagContainerProps } from './Tag';
package/cjs/core/index.js CHANGED
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MenuDivider = exports.MenuItem = exports.Menu = exports.LabeledTextarea = exports.LabeledSelect = exports.InputGroup = exports.LabeledInput = exports.Label = exports.Input = exports.InformationPanelContent = exports.InformationPanelBody = exports.InformationPanelHeader = exports.InformationPanelWrapper = exports.InformationPanel = exports.HorizontalTab = exports.HorizontalTabs = exports.Tab = exports.VerticalTabs = exports.HeaderLogo = exports.HeaderButton = exports.HeaderBreadcrumbs = exports.Header = exports.defaultFooterElements = exports.Footer = exports.FileUploadTemplate = exports.FileUpload = exports.Fieldset = exports.ExpandableBlock = exports.ErrorPage = exports.DropdownMenu = exports.generateLocalizedStrings = exports.DatePicker = exports.ComboBox = exports.ColorPalette = exports.ColorInputPanel = exports.ColorBuilder = exports.ColorSwatch = exports.ColorPicker = exports.Checkbox = exports.Carousel = exports.ButtonGroup = exports.SplitButton = exports.IdeasButton = exports.IconButton = exports.DropdownButton = exports.Button = exports.Breadcrumbs = exports.Badge = exports.Backdrop = exports.Alert = void 0;
7
- exports.Kbd = exports.Code = exports.Blockquote = exports.Title = exports.Subheading = exports.Small = exports.Leading = exports.Headline = exports.Body = exports.Anchor = exports.TreeNodeExpander = exports.TreeNode = exports.Tree = exports.Tooltip = exports.ToggleSwitch = exports.ThemeProvider = exports.toaster = exports.TimePicker = exports.Tile = exports.Textarea = exports.TagContainer = exports.Tag = exports.SelectionColumn = exports.ExpanderColumn = exports.ActionColumn = exports.TablePaginator = exports.EditableCell = exports.DefaultCell = exports.FilterButtonBar = exports.tableFilters = exports.Table = exports.Surface = exports.StatusMessage = exports.Slider = exports.SkipToContentLink = exports.SidenavSubmenuHeader = exports.SidenavSubmenu = exports.SidenavButton = exports.SideNavigation = exports.Select = exports.RadioTileGroup = exports.RadioTile = exports.Radio = exports.ProgressRadial = exports.ProgressLinear = exports.ModalContent = exports.ModalButtonBar = exports.Modal = exports.MenuItemSkeleton = exports.MenuExtraContent = void 0;
8
- exports.MiddleTextTruncation = exports.ColorValue = exports.useTheme = exports.getUserColor = exports.Wizard = exports.UserIconGroup = exports.UserIcon = exports.Text = exports.KbdKeys = void 0;
6
+ exports.MenuItem = exports.Menu = exports.LabeledTextarea = exports.LabeledSelect = exports.InputGroup = exports.LabeledInput = exports.Label = exports.Input = exports.InformationPanelContent = exports.InformationPanelBody = exports.InformationPanelHeader = exports.InformationPanelWrapper = exports.InformationPanel = exports.HorizontalTab = exports.HorizontalTabs = exports.Tab = exports.VerticalTabs = exports.HeaderLogo = exports.HeaderButton = exports.HeaderBreadcrumbs = exports.Header = exports.defaultFooterElements = exports.Footer = exports.FileUploadTemplate = exports.FileUpload = exports.Fieldset = exports.ExpandableBlock = exports.ErrorPage = exports.DropdownMenu = exports.Dialog = exports.generateLocalizedStrings = exports.DatePicker = exports.ComboBox = exports.ColorPalette = exports.ColorInputPanel = exports.ColorBuilder = exports.ColorSwatch = exports.ColorPicker = exports.Checkbox = exports.Carousel = exports.ButtonGroup = exports.SplitButton = exports.IdeasButton = exports.IconButton = exports.DropdownButton = exports.Button = exports.Breadcrumbs = exports.Badge = exports.Backdrop = exports.Alert = void 0;
7
+ exports.Blockquote = exports.Title = exports.Subheading = exports.Small = exports.Leading = exports.Headline = exports.Body = exports.Anchor = exports.TreeNodeExpander = exports.TreeNode = exports.Tree = exports.Tooltip = exports.ToggleSwitch = exports.ThemeProvider = exports.toaster = exports.TimePicker = exports.Tile = exports.Textarea = exports.TagContainer = exports.Tag = exports.SelectionColumn = exports.ExpanderColumn = exports.ActionColumn = exports.TablePaginator = exports.EditableCell = exports.DefaultCell = exports.FilterButtonBar = exports.BaseFilter = exports.tableFilters = exports.Table = exports.Surface = exports.StatusMessage = exports.Slider = exports.SkipToContentLink = exports.SidenavSubmenuHeader = exports.SidenavSubmenu = exports.SidenavButton = exports.SideNavigation = exports.Select = exports.RadioTileGroup = exports.RadioTile = exports.Radio = exports.ProgressRadial = exports.ProgressLinear = exports.ModalContent = exports.ModalButtonBar = exports.Modal = exports.MenuItemSkeleton = exports.MenuExtraContent = exports.MenuDivider = void 0;
8
+ exports.MiddleTextTruncation = exports.ColorValue = exports.useTheme = exports.getUserColor = exports.Wizard = exports.UserIconGroup = exports.UserIcon = exports.Text = exports.KbdKeys = exports.Kbd = exports.Code = void 0;
9
9
  /*---------------------------------------------------------------------------------------------
10
10
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
11
11
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -41,6 +41,8 @@ Object.defineProperty(exports, "ComboBox", { enumerable: true, get: function ()
41
41
  var DatePicker_1 = require("./DatePicker");
42
42
  Object.defineProperty(exports, "DatePicker", { enumerable: true, get: function () { return DatePicker_1.DatePicker; } });
43
43
  Object.defineProperty(exports, "generateLocalizedStrings", { enumerable: true, get: function () { return DatePicker_1.generateLocalizedStrings; } });
44
+ var Dialog_1 = require("./Dialog");
45
+ Object.defineProperty(exports, "Dialog", { enumerable: true, get: function () { return Dialog_1.Dialog; } });
44
46
  var DropdownMenu_1 = require("./DropdownMenu");
45
47
  Object.defineProperty(exports, "DropdownMenu", { enumerable: true, get: function () { return DropdownMenu_1.DropdownMenu; } });
46
48
  var ErrorPage_1 = require("./ErrorPage");
@@ -119,6 +121,7 @@ Object.defineProperty(exports, "Surface", { enumerable: true, get: function () {
119
121
  var Table_1 = require("./Table");
120
122
  Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return Table_1.Table; } });
121
123
  Object.defineProperty(exports, "tableFilters", { enumerable: true, get: function () { return Table_1.tableFilters; } });
124
+ Object.defineProperty(exports, "BaseFilter", { enumerable: true, get: function () { return Table_1.BaseFilter; } });
122
125
  Object.defineProperty(exports, "FilterButtonBar", { enumerable: true, get: function () { return Table_1.FilterButtonBar; } });
123
126
  Object.defineProperty(exports, "DefaultCell", { enumerable: true, get: function () { return Table_1.DefaultCell; } });
124
127
  Object.defineProperty(exports, "EditableCell", { enumerable: true, get: function () { return Table_1.EditableCell; } });
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ export declare type ResizerProps = {
3
+ /**
4
+ * Ref of the element that is being resized.
5
+ */
6
+ elementRef: React.RefObject<HTMLElement>;
7
+ /**
8
+ * Ref of the container element in order to avoid resizing past container boundaries.
9
+ * If not passed, viewport will be used.
10
+ */
11
+ containerRef?: React.RefObject<HTMLElement>;
12
+ /**
13
+ * Callback that is being called on resize end.
14
+ * Useful to preserve state if element is being closed.
15
+ */
16
+ onResizeEnd?: (style: React.CSSProperties) => void;
17
+ };
18
+ /**
19
+ * Component that allows to resize parent element.
20
+ * Parent must have `position: relative`.
21
+ * @private
22
+ * @example
23
+ * const ref = React.useRef<HTMLDivElement>(null);
24
+ * return (
25
+ * <div ref={ref} style={{ position: 'relative' }}>
26
+ * <Resizer elementRef={ref} />
27
+ * </div>
28
+ * );
29
+ */
30
+ export declare const Resizer: (props: ResizerProps) => JSX.Element;
31
+ export default Resizer;
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Resizer = void 0;
7
+ /*---------------------------------------------------------------------------------------------
8
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
+ * See LICENSE.md in the project root for license terms and full copyright notice.
10
+ *--------------------------------------------------------------------------------------------*/
11
+ var react_1 = __importDefault(require("react"));
12
+ var functions_1 = require("../functions");
13
+ /**
14
+ * Component that allows to resize parent element.
15
+ * Parent must have `position: relative`.
16
+ * @private
17
+ * @example
18
+ * const ref = React.useRef<HTMLDivElement>(null);
19
+ * return (
20
+ * <div ref={ref} style={{ position: 'relative' }}>
21
+ * <Resizer elementRef={ref} />
22
+ * </div>
23
+ * );
24
+ */
25
+ var Resizer = function (props) {
26
+ var elementRef = props.elementRef, containerRef = props.containerRef, onResizeEnd = props.onResizeEnd;
27
+ var onResizePointerDown = function (event) {
28
+ if (!elementRef.current || event.button !== 0) {
29
+ return;
30
+ }
31
+ var initialPointerX = event.clientX;
32
+ var initialPointerY = event.clientY;
33
+ var _a = (0, functions_1.getTranslateValues)(elementRef.current), initialTranslateX = _a[0], initialTranslateY = _a[1];
34
+ var _b = elementRef.current.getBoundingClientRect(), initialWidth = _b.width, initialHeight = _b.height;
35
+ var width = "".concat(initialWidth, "px");
36
+ var height = "".concat(initialHeight, "px");
37
+ var translateX = initialTranslateX;
38
+ var translateY = initialTranslateY;
39
+ var minWidth = parseFloat(getComputedStyle(elementRef.current).minWidth);
40
+ var minHeight = parseFloat(getComputedStyle(elementRef.current).minHeight);
41
+ var resizer = event.currentTarget.dataset.iuiResizer;
42
+ var originalUserSelect = elementRef.current.ownerDocument.body.style.userSelect;
43
+ elementRef.current.ownerDocument.body.style.userSelect = 'none';
44
+ var onResizePointerMove = function (event) {
45
+ var _a, _b, _c, _d, _e, _f, _g;
46
+ if (!elementRef.current) {
47
+ return;
48
+ }
49
+ var containerRect = (_a = containerRef === null || containerRef === void 0 ? void 0 : containerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
50
+ var clientX = (0, functions_1.getBoundedValue)(event.clientX, (_b = containerRect === null || containerRect === void 0 ? void 0 : containerRect.left) !== null && _b !== void 0 ? _b : 0, (_d = (_c = containerRect === null || containerRect === void 0 ? void 0 : containerRect.right) !== null && _c !== void 0 ? _c : elementRef.current.ownerDocument.documentElement.clientWidth) !== null && _d !== void 0 ? _d : 0);
51
+ var clientY = (0, functions_1.getBoundedValue)(event.clientY, (_e = containerRect === null || containerRect === void 0 ? void 0 : containerRect.top) !== null && _e !== void 0 ? _e : 0, (_g = (_f = containerRect === null || containerRect === void 0 ? void 0 : containerRect.bottom) !== null && _f !== void 0 ? _f : elementRef.current.ownerDocument.documentElement.clientHeight) !== null && _g !== void 0 ? _g : 0);
52
+ var diffX = initialPointerX - clientX;
53
+ var diffY = initialPointerY - clientY;
54
+ switch (resizer) {
55
+ case 'top-left': {
56
+ var newHeight = initialHeight + diffY;
57
+ if (newHeight >= minHeight) {
58
+ height = elementRef.current.style.height = "".concat(newHeight, "px");
59
+ translateY = initialTranslateY - diffY;
60
+ }
61
+ var newWidth = initialWidth + diffX;
62
+ if (newWidth >= minWidth) {
63
+ width = elementRef.current.style.width = "".concat(newWidth, "px");
64
+ translateX = initialTranslateX - diffX;
65
+ }
66
+ elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
67
+ break;
68
+ }
69
+ case 'top': {
70
+ var newHeight = initialHeight + diffY;
71
+ if (newHeight < minHeight) {
72
+ break;
73
+ }
74
+ height = elementRef.current.style.height = "".concat(newHeight, "px");
75
+ translateY = initialTranslateY - diffY;
76
+ elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
77
+ break;
78
+ }
79
+ case 'top-right': {
80
+ var newHeight = initialHeight + diffY;
81
+ if (newHeight >= minHeight) {
82
+ height = elementRef.current.style.height = "".concat(newHeight, "px");
83
+ translateY = initialTranslateY - diffY;
84
+ }
85
+ width = elementRef.current.style.width = "".concat(initialWidth - diffX, "px");
86
+ elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
87
+ break;
88
+ }
89
+ case 'right': {
90
+ width = elementRef.current.style.width = "".concat(initialWidth - diffX, "px");
91
+ break;
92
+ }
93
+ case 'bottom-right': {
94
+ width = elementRef.current.style.width = "".concat(initialWidth - diffX, "px");
95
+ height = elementRef.current.style.height = "".concat(initialHeight - diffY, "px");
96
+ break;
97
+ }
98
+ case 'bottom': {
99
+ height = elementRef.current.style.height = "".concat(initialHeight - diffY, "px");
100
+ break;
101
+ }
102
+ case 'bottom-left': {
103
+ var newWidth = initialWidth + diffX;
104
+ if (newWidth >= minWidth) {
105
+ width = elementRef.current.style.width = "".concat(newWidth, "px");
106
+ translateX = initialTranslateX - diffX;
107
+ }
108
+ height = elementRef.current.style.height = "".concat(initialHeight - diffY, "px");
109
+ elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
110
+ break;
111
+ }
112
+ case 'left': {
113
+ var newWidth = initialWidth + diffX;
114
+ if (newWidth < minWidth) {
115
+ break;
116
+ }
117
+ width = elementRef.current.style.width = "".concat(newWidth, "px");
118
+ translateX = initialTranslateX - diffX;
119
+ elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
120
+ break;
121
+ }
122
+ default:
123
+ break;
124
+ }
125
+ };
126
+ elementRef.current.ownerDocument.addEventListener('pointermove', onResizePointerMove);
127
+ elementRef.current.ownerDocument.addEventListener('pointerup', function () {
128
+ document.removeEventListener('pointermove', onResizePointerMove);
129
+ if (elementRef.current) {
130
+ elementRef.current.ownerDocument.body.style.userSelect = originalUserSelect;
131
+ onResizeEnd === null || onResizeEnd === void 0 ? void 0 : onResizeEnd({
132
+ width: width,
133
+ height: height,
134
+ transform: "translate(".concat(translateX, "px, ").concat(translateY, "px)"),
135
+ });
136
+ }
137
+ }, { once: true });
138
+ };
139
+ return (react_1.default.createElement(react_1.default.Fragment, null,
140
+ react_1.default.createElement("div", { "data-iui-resizer": 'top-left', onPointerDown: onResizePointerDown, style: {
141
+ position: 'absolute',
142
+ top: -4,
143
+ left: -4,
144
+ width: 12,
145
+ height: 12,
146
+ cursor: 'nw-resize',
147
+ } }),
148
+ react_1.default.createElement("div", { "data-iui-resizer": 'top', onPointerDown: onResizePointerDown, style: {
149
+ position: 'absolute',
150
+ top: -4,
151
+ left: 8,
152
+ right: 8,
153
+ height: 8,
154
+ cursor: 'n-resize',
155
+ } }),
156
+ react_1.default.createElement("div", { "data-iui-resizer": 'top-right', onPointerDown: onResizePointerDown, style: {
157
+ position: 'absolute',
158
+ top: -4,
159
+ right: -4,
160
+ width: 12,
161
+ height: 12,
162
+ cursor: 'ne-resize',
163
+ } }),
164
+ react_1.default.createElement("div", { "data-iui-resizer": 'right', onPointerDown: onResizePointerDown, style: {
165
+ position: 'absolute',
166
+ top: 8,
167
+ right: -4,
168
+ bottom: 8,
169
+ width: 8,
170
+ cursor: 'e-resize',
171
+ } }),
172
+ react_1.default.createElement("div", { "data-iui-resizer": 'bottom-right', onPointerDown: onResizePointerDown, style: {
173
+ position: 'absolute',
174
+ bottom: -4,
175
+ right: -4,
176
+ width: 12,
177
+ height: 12,
178
+ cursor: 'se-resize',
179
+ } }),
180
+ react_1.default.createElement("div", { "data-iui-resizer": 'bottom', onPointerDown: onResizePointerDown, style: {
181
+ position: 'absolute',
182
+ bottom: -4,
183
+ left: 8,
184
+ right: 8,
185
+ height: 8,
186
+ cursor: 's-resize',
187
+ } }),
188
+ react_1.default.createElement("div", { "data-iui-resizer": 'bottom-left', onPointerDown: onResizePointerDown, style: {
189
+ position: 'absolute',
190
+ bottom: -4,
191
+ left: -4,
192
+ width: 12,
193
+ height: 12,
194
+ cursor: 'sw-resize',
195
+ } }),
196
+ react_1.default.createElement("div", { "data-iui-resizer": 'left', onPointerDown: onResizePointerDown, style: {
197
+ position: 'absolute',
198
+ top: 8,
199
+ left: -4,
200
+ bottom: 8,
201
+ width: 8,
202
+ cursor: 'w-resize',
203
+ } })));
204
+ };
205
+ exports.Resizer = Resizer;
206
+ exports.default = exports.Resizer;
@@ -136,28 +136,6 @@ var useVirtualization = function (props) {
136
136
  // Used to mark when scroll container has height (updated by resize observer)
137
137
  // because before that calculations are not right
138
138
  var _e = react_1.default.useState(false), isMounted = _e[0], setIsMounted = _e[1];
139
- var onResize = react_1.default.useCallback(function (_a) {
140
- var height = _a.height;
141
- // Initial value returned by resize observer is 0
142
- // So wait for the next one
143
- if (height > 0) {
144
- setIsMounted(true);
145
- }
146
- setScrollContainerHeight(height);
147
- }, []);
148
- var _f = (0, useResizeObserver_1.useResizeObserver)(onResize), resizeRef = _f[0], resizeObserver = _f[1];
149
- // Find scrollable parent
150
- // Needed only on init
151
- react_1.default.useLayoutEffect(function () {
152
- var _a;
153
- var scrollableParent = getScrollableParent(parentRef.current, (_a = parentRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
154
- scrollContainer.current = scrollableParent;
155
- resizeRef(scrollableParent);
156
- }, [resizeRef]);
157
- // Stop watching resize, when virtual scroll is unmounted
158
- react_1.default.useLayoutEffect(function () {
159
- return function () { return resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect(); };
160
- }, [resizeObserver]);
161
139
  var getScrollableContainer = function () {
162
140
  var _a, _b;
163
141
  return (_a = scrollContainer.current) !== null && _a !== void 0 ? _a : (_b = parentRef.current) === null || _b === void 0 ? void 0 : _b.ownerDocument.scrollingElement;
@@ -170,8 +148,7 @@ var useVirtualization = function (props) {
170
148
  }
171
149
  return arr;
172
150
  }, [itemsLength, itemRenderer, bufferSize, startNode, visibleNodeCount]);
173
- // Get child height when children available
174
- react_1.default.useLayoutEffect(function () {
151
+ var updateChildHeight = react_1.default.useCallback(function () {
175
152
  var _a, _b, _c, _d, _e, _f;
176
153
  if (!parentRef.current || !visibleChildren.length) {
177
154
  return;
@@ -186,6 +163,31 @@ var useVirtualization = function (props) {
186
163
  last: Number((_f = (_e = getElementHeightWithMargins(lastChild)) === null || _e === void 0 ? void 0 : _e.toFixed(2)) !== null && _f !== void 0 ? _f : firstChildHeight),
187
164
  };
188
165
  }, [visibleChildren.length]);
166
+ var onResize = react_1.default.useCallback(function (_a) {
167
+ var height = _a.height;
168
+ // Initial value returned by resize observer is 0
169
+ // So wait for the next one
170
+ if (height > 0) {
171
+ setIsMounted(true);
172
+ }
173
+ setScrollContainerHeight(height);
174
+ updateChildHeight();
175
+ }, [updateChildHeight]);
176
+ var _f = (0, useResizeObserver_1.useResizeObserver)(onResize), resizeRef = _f[0], resizeObserver = _f[1];
177
+ // Find scrollable parent
178
+ // Needed only on init
179
+ react_1.default.useLayoutEffect(function () {
180
+ var _a;
181
+ var scrollableParent = getScrollableParent(parentRef.current, (_a = parentRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
182
+ scrollContainer.current = scrollableParent;
183
+ resizeRef(scrollableParent);
184
+ }, [resizeRef]);
185
+ // Stop watching resize, when virtual scroll is unmounted
186
+ react_1.default.useLayoutEffect(function () {
187
+ return function () { return resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect(); };
188
+ }, [resizeObserver]);
189
+ // Get child height when children available
190
+ react_1.default.useLayoutEffect(function () { return updateChildHeight(); }, [updateChildHeight]);
189
191
  var updateVirtualScroll = react_1.default.useCallback(function () {
190
192
  var scrollableContainer = getScrollableContainer();
191
193
  if (!scrollableContainer) {
@@ -1,4 +1,5 @@
1
1
  export * from './Popover';
2
+ export * from './Resizer';
2
3
  export * from './FocusTrap';
3
4
  export * from './InputContainer';
4
5
  export * from './icons';