@itwin/itwinui-react 1.38.1 → 1.39.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 (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/cjs/core/Carousel/Carousel.js +21 -12
  3. package/cjs/core/Carousel/CarouselContext.d.ts +4 -2
  4. package/cjs/core/Carousel/CarouselDotsList.js +1 -0
  5. package/cjs/core/Carousel/CarouselNavigation.js +8 -10
  6. package/cjs/core/Carousel/CarouselSlide.js +3 -7
  7. package/cjs/core/Carousel/CarouselSlider.js +23 -28
  8. package/cjs/core/ColorPicker/ColorPickerContext.d.ts +2 -2
  9. package/cjs/core/ComboBox/ComboBox.js +9 -7
  10. package/cjs/core/ComboBox/ComboBoxDropdown.d.ts +5 -6
  11. package/cjs/core/ComboBox/ComboBoxInput.js +27 -9
  12. package/cjs/core/ComboBox/ComboBoxMenu.js +10 -2
  13. package/cjs/core/ComboBox/helpers.d.ts +1 -1
  14. package/cjs/core/DatePicker/DatePicker.d.ts +1 -1
  15. package/cjs/core/Table/Table.js +32 -22
  16. package/cjs/core/Table/TablePaginator.js +1 -1
  17. package/cjs/core/Table/filters/tableFilters.d.ts +3 -3
  18. package/cjs/core/Table/hooks/useExpanderCell.js +11 -1
  19. package/cjs/core/Toast/Toaster.js +97 -18
  20. package/cjs/core/utils/components/Popover.d.ts +1 -18
  21. package/cjs/core/utils/components/WithCSSTransition.d.ts +1 -2
  22. package/cjs/core/utils/components/icons.d.ts +4 -4
  23. package/cjs/core/utils/hooks/useOverflow.js +4 -2
  24. package/cjs/core/utils/hooks/useTheme.d.ts +1 -1
  25. package/esm/core/Carousel/Carousel.js +21 -12
  26. package/esm/core/Carousel/CarouselContext.d.ts +4 -2
  27. package/esm/core/Carousel/CarouselDotsList.js +1 -0
  28. package/esm/core/Carousel/CarouselNavigation.js +8 -10
  29. package/esm/core/Carousel/CarouselSlide.js +3 -7
  30. package/esm/core/Carousel/CarouselSlider.js +24 -29
  31. package/esm/core/ColorPicker/ColorPickerContext.d.ts +2 -2
  32. package/esm/core/ComboBox/ComboBox.js +9 -7
  33. package/esm/core/ComboBox/ComboBoxDropdown.d.ts +5 -6
  34. package/esm/core/ComboBox/ComboBoxInput.js +27 -9
  35. package/esm/core/ComboBox/ComboBoxMenu.js +10 -2
  36. package/esm/core/ComboBox/helpers.d.ts +1 -1
  37. package/esm/core/DatePicker/DatePicker.d.ts +1 -1
  38. package/esm/core/Table/Table.js +32 -22
  39. package/esm/core/Table/TablePaginator.js +1 -1
  40. package/esm/core/Table/filters/tableFilters.d.ts +3 -3
  41. package/esm/core/Table/hooks/useExpanderCell.js +8 -1
  42. package/esm/core/Toast/Toaster.js +75 -19
  43. package/esm/core/utils/components/Popover.d.ts +1 -18
  44. package/esm/core/utils/components/WithCSSTransition.d.ts +1 -2
  45. package/esm/core/utils/components/icons.d.ts +4 -4
  46. package/esm/core/utils/hooks/useOverflow.js +4 -2
  47. package/esm/core/utils/hooks/useTheme.d.ts +1 -1
  48. package/package.json +24 -39
@@ -37,16 +37,24 @@ var VirtualizedComboBoxMenu = React.forwardRef(function (_a, forwardedRef) {
37
37
  var menuRef = useSafeContext(ComboBoxRefsContext).menuRef;
38
38
  var virtualItemRenderer = React.useCallback(function (index) {
39
39
  return filteredOptions.length > 0
40
- ? getMenuItem(filteredOptions[index])
40
+ ? getMenuItem(filteredOptions[index], index)
41
41
  : children;
42
42
  }, // Here is expected empty state content
43
43
  [filteredOptions, getMenuItem, children]);
44
+ var focusedVisibleIndex = React.useMemo(function () {
45
+ var _a, _b;
46
+ var currentElement = (_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.querySelector("[data-iui-index=\"".concat(focusedIndex, "\"]"));
47
+ if (!currentElement) {
48
+ return focusedIndex;
49
+ }
50
+ return Number((_b = currentElement.getAttribute('data-iui-filtered-index')) !== null && _b !== void 0 ? _b : focusedIndex);
51
+ }, [focusedIndex, menuRef]);
44
52
  var _f = useVirtualization({
45
53
  // 'Fool' VirtualScroll by passing length 1
46
54
  // whenever there is no elements, to show empty state message
47
55
  itemsLength: filteredOptions.length || 1,
48
56
  itemRenderer: virtualItemRenderer,
49
- scrollToIndex: focusedIndex,
57
+ scrollToIndex: focusedVisibleIndex,
50
58
  }), outerProps = _f.outerProps, innerProps = _f.innerProps, visibleChildren = _f.visibleChildren;
51
59
  var overflowY = ((_d = (_c = (_b = getWindow()) === null || _b === void 0 ? void 0 : _b.CSS) === null || _c === void 0 ? void 0 : _c.supports) === null || _d === void 0 ? void 0 : _d.call(_c, 'overflow-x: overlay'))
52
60
  ? { overflowY: 'overlay' }
@@ -24,7 +24,7 @@ declare type ComboBoxStateContextProps<T = unknown> = {
24
24
  minWidth: number;
25
25
  enableVirtualization: boolean;
26
26
  filteredOptions: SelectOption<T>[];
27
- getMenuItem: (option: SelectOption<T>) => JSX.Element;
27
+ getMenuItem: (option: SelectOption<T>, filteredIndex?: number) => JSX.Element;
28
28
  focusedIndex?: number;
29
29
  };
30
30
  export declare const ComboBoxStateContext: React.Context<ComboBoxStateContextProps<unknown> | undefined>;
@@ -5,7 +5,7 @@ import { TimePickerProps } from '../TimePicker';
5
5
  * Generate localized months and days strings using `Intl.DateTimeFormat` for passed locale to use in DatePicker component.
6
6
  * If locale is not passed, browser locale will be used.
7
7
  */
8
- export declare const generateLocalizedStrings: (locale?: string | undefined) => {
8
+ export declare const generateLocalizedStrings: (locale?: string) => {
9
9
  months: string[];
10
10
  shortDays: string[];
11
11
  days: string[];
@@ -181,6 +181,12 @@ export var Table = function (props) {
181
181
  return result;
182
182
  }, {});
183
183
  var areFiltersSet = allColumns.some(function (column) { return column.filterValue != null && column.filterValue !== ''; });
184
+ var showFilterButton = function (column) {
185
+ return (data.length !== 0 || areFiltersSet) && column.canFilter;
186
+ };
187
+ var showSortButton = function (column) {
188
+ return data.length !== 0 && column.canSort;
189
+ };
184
190
  var onRowClickHandler = React.useCallback(function (event, row) {
185
191
  var isDisabled = isRowDisabled === null || isRowDisabled === void 0 ? void 0 : isRowDisabled(row.original);
186
192
  if (!isDisabled) {
@@ -291,28 +297,32 @@ export var Table = function (props) {
291
297
  className: cx('iui-table', (_a = {}, _a["iui-".concat(density)] = density !== 'default', _a), className),
292
298
  style: style,
293
299
  }), ariaDataAttributes),
294
- React.createElement("div", { className: 'iui-table-header', ref: headerRef }, headerGroups.slice(1).map(function (headerGroup) {
295
- var headerGroupProps = headerGroup.getHeaderGroupProps({
296
- className: 'iui-row',
297
- });
298
- return (React.createElement("div", __assign({}, headerGroupProps, { key: headerGroupProps.key }), headerGroup.headers.map(function (column, index) {
299
- var columnProps = column.getHeaderProps(__assign(__assign({}, column.getSortByToggleProps()), { className: cx('iui-cell', { 'iui-actionable': column.canSort }, { 'iui-sorted': column.isSorted }, column.columnClassName), style: __assign(__assign({}, getCellStyle(column, !!state.isTableResizing)), { flexWrap: 'unset' }) }));
300
- return (React.createElement("div", __assign({}, columnProps, column.getDragAndDropProps(), { key: columnProps.key, title: undefined, ref: function (el) {
301
- if (el && isResizable) {
302
- columnRefs.current[column.id] = el;
303
- column.resizeWidth = el.getBoundingClientRect().width;
304
- }
305
- } }),
306
- column.render('Header'),
307
- (data.length !== 0 || areFiltersSet) && (React.createElement(FilterToggle, { column: column, ownerDocument: ownerDocument })),
308
- data.length !== 0 && column.canSort && (React.createElement("div", { className: 'iui-cell-end-icon' }, column.isSorted && column.isSortedDesc ? (React.createElement(SvgSortDown, { className: 'iui-icon iui-sort', "aria-hidden": true })) : (React.createElement(SvgSortUp, { className: 'iui-icon iui-sort', "aria-hidden": true })))),
309
- isResizable &&
310
- column.isResizerVisible &&
311
- index !== headerGroup.headers.length - 1 && (React.createElement("div", __assign({}, column.getResizerProps(), { className: 'iui-resizer' }),
312
- React.createElement("div", { className: 'iui-resizer-bar' }))),
313
- enableColumnReordering && !column.disableReordering && (React.createElement("div", { className: 'iui-reorder-bar' }))));
314
- })));
315
- })),
300
+ React.createElement("div", { className: 'iui-table-header-wrapper', ref: headerRef },
301
+ React.createElement("div", { className: 'iui-table-header' }, headerGroups.slice(1).map(function (headerGroup) {
302
+ var headerGroupProps = headerGroup.getHeaderGroupProps({
303
+ className: 'iui-row',
304
+ });
305
+ return (React.createElement("div", __assign({}, headerGroupProps, { key: headerGroupProps.key }), headerGroup.headers.map(function (column, index) {
306
+ var columnProps = column.getHeaderProps(__assign(__assign({}, column.getSortByToggleProps()), { className: cx('iui-cell', { 'iui-actionable': column.canSort }, { 'iui-sorted': column.isSorted }, column.columnClassName), style: getCellStyle(column, !!state.isTableResizing) }));
307
+ return (React.createElement("div", __assign({}, columnProps, column.getDragAndDropProps(), { key: columnProps.key, title: undefined, ref: function (el) {
308
+ if (el && isResizable) {
309
+ columnRefs.current[column.id] = el;
310
+ column.resizeWidth = el.getBoundingClientRect().width;
311
+ }
312
+ } }),
313
+ column.render('Header'),
314
+ (showFilterButton(column) ||
315
+ showSortButton(column)) && (React.createElement("div", { className: 'iui-table-header-actions-container' },
316
+ showFilterButton(column) && (React.createElement(FilterToggle, { column: column, ownerDocument: ownerDocument })),
317
+ showSortButton(column) && (React.createElement("div", { className: 'iui-cell-end-icon' }, column.isSorted && column.isSortedDesc ? (React.createElement(SvgSortDown, { className: 'iui-icon iui-sort', "aria-hidden": true })) : (React.createElement(SvgSortUp, { className: 'iui-icon iui-sort', "aria-hidden": true })))))),
318
+ isResizable &&
319
+ column.isResizerVisible &&
320
+ index !== headerGroup.headers.length - 1 && (React.createElement("div", __assign({}, column.getResizerProps(), { className: 'iui-resizer' }),
321
+ React.createElement("div", { className: 'iui-resizer-bar' }))),
322
+ enableColumnReordering &&
323
+ !column.disableReordering && (React.createElement("div", { className: 'iui-reorder-bar' }))));
324
+ })));
325
+ }))),
316
326
  React.createElement("div", __assign({}, getTableBodyProps({
317
327
  className: cx('iui-table-body', {
318
328
  'iui-zebra-striping': styleType === 'zebra-rows',
@@ -143,7 +143,7 @@ export var TablePaginator = function (props) {
143
143
  }
144
144
  var hasNoRows = totalPagesCount === 0;
145
145
  var showPagesList = totalPagesCount > 1 || isLoading;
146
- var showPageSizeList = pageSizeList && onPageSizeChange && !!totalRowsCount;
146
+ var showPageSizeList = pageSizeList && !!onPageSizeChange && !!totalRowsCount;
147
147
  var ellipsis = (React.createElement("span", { className: cx('iui-paginator-ellipsis', {
148
148
  'iui-paginator-ellipsis-small': size === 'small',
149
149
  }) }, "\u2026"));
@@ -28,7 +28,7 @@ export declare const tableFilters: {
28
28
  * Basic filter with a single input field.
29
29
  * @param translatedLabels Translated filter labels.
30
30
  */
31
- TextFilter: (translatedLabels?: FilterButtonBarTranslation | undefined) => <T extends Record<string, unknown>>(props: TableFilterProps<T>) => JSX.Element;
31
+ TextFilter: (translatedLabels?: FilterButtonBarTranslation) => <T extends Record<string, unknown>>(props: TableFilterProps<T>) => JSX.Element;
32
32
  /**
33
33
  * Date range filter.
34
34
  *
@@ -39,7 +39,7 @@ export declare const tableFilters: {
39
39
  * If your data is different type e.g. `string`, you can use `accessor` property in column description:
40
40
  * `accessor: (rowData) => new Date(rowData.date)`.
41
41
  */
42
- DateRangeFilter: (options?: DateRangeFilterOptions | undefined) => <T_1 extends Record<string, unknown>>(props: TableFilterProps<T_1>) => JSX.Element;
42
+ DateRangeFilter: (options?: DateRangeFilterOptions) => <T_1 extends Record<string, unknown>>(props: TableFilterProps<T_1>) => JSX.Element;
43
43
  /**
44
44
  * Number range filter.
45
45
  *
@@ -48,5 +48,5 @@ export declare const tableFilters: {
48
48
  * `accessor: (rowData) => Number(rowData.numberProp)`.
49
49
  * @param translatedLabels Translated filter labels.
50
50
  */
51
- NumberRangeFilter: (translatedLabels?: (NumberRangeTranslation & FilterButtonBarTranslation) | undefined) => <T_2 extends Record<string, unknown>>(props: NumberRangeFilterProps<T_2>) => JSX.Element;
51
+ NumberRangeFilter: (translatedLabels?: NumberRangeTranslation & FilterButtonBarTranslation) => <T_2 extends Record<string, unknown>>(props: NumberRangeFilterProps<T_2>) => JSX.Element;
52
52
  };
@@ -18,6 +18,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
18
  }
19
19
  return to.concat(ar || Array.prototype.slice.call(from));
20
20
  };
21
+ /*---------------------------------------------------------------------------------------------
22
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
23
+ * See LICENSE.md in the project root for license terms and full copyright notice.
24
+ *--------------------------------------------------------------------------------------------*/
25
+ import React from 'react';
21
26
  import { ExpanderColumn, EXPANDER_CELL_ID } from '../columns';
22
27
  export var useExpanderCell = function (subComponent, expanderCell, isRowDisabled) { return function (hooks) {
23
28
  if (!subComponent) {
@@ -33,7 +38,9 @@ export var useExpanderCell = function (subComponent, expanderCell, isRowDisabled
33
38
  isDisabled: isRowDisabled,
34
39
  });
35
40
  return __spreadArray([
36
- __assign(__assign({}, expanderColumn), { Cell: expanderCell !== null && expanderCell !== void 0 ? expanderCell : expanderColumn.Cell })
41
+ __assign(__assign({}, expanderColumn), { Cell: expanderCell
42
+ ? function (cellProps) { return React.createElement(React.Fragment, null, expanderCell(cellProps)); }
43
+ : expanderColumn.Cell })
37
44
  ], columns, true);
38
45
  });
39
46
  }; };
@@ -9,6 +9,42 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
12
48
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
49
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
50
  if (ar || !(i in from)) {
@@ -23,8 +59,8 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
23
59
  * See LICENSE.md in the project root for license terms and full copyright notice.
24
60
  *--------------------------------------------------------------------------------------------*/
25
61
  import React from 'react';
26
- import ReactDOM from 'react-dom';
27
- import { getContainer } from '../utils';
62
+ import * as ReactDOM from 'react-dom';
63
+ import { getContainer, getDocument } from '../utils';
28
64
  import { ToastWrapper } from './ToastWrapper';
29
65
  var TOASTS_CONTAINER_ID = 'iui-toasts-container';
30
66
  var Toaster = /** @class */ (function () {
@@ -40,21 +76,41 @@ var Toaster = /** @class */ (function () {
40
76
  this.isInitialized = false;
41
77
  // Create container on demand.
42
78
  // Cannot do it in constructor, because SSG/SSR apps would fail.
43
- this.asyncInit = new Promise(function (resolve) {
44
- if (_this.isInitialized) {
45
- resolve();
46
- return;
47
- }
48
- var container = getContainer(TOASTS_CONTAINER_ID);
49
- if (!container) {
50
- // should never happen
51
- resolve();
52
- return;
53
- }
54
- _this.isInitialized = true;
55
- ReactDOM.render(React.createElement(ToastWrapper, { ref: _this.toastsRef }), container);
56
- resolve();
57
- });
79
+ this.asyncInit = function () { return __awaiter(_this, void 0, void 0, function () {
80
+ var container, toastWrapper, _ReactDOM, _ReactDOMInternals, root;
81
+ var _a, _b;
82
+ return __generator(this, function (_c) {
83
+ if (this.isInitialized) {
84
+ return [2 /*return*/];
85
+ }
86
+ container = (_a = getContainer(TOASTS_CONTAINER_ID)) !== null && _a !== void 0 ? _a : (_b = getDocument()) === null || _b === void 0 ? void 0 : _b.body;
87
+ if (!container) {
88
+ return [2 /*return*/];
89
+ }
90
+ this.isInitialized = true;
91
+ toastWrapper = React.createElement(ToastWrapper, { ref: this.toastsRef });
92
+ _ReactDOM = ReactDOM;
93
+ // v18 mode
94
+ if (_ReactDOM.createRoot) {
95
+ _ReactDOMInternals = _ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
96
+ // suppress warning about importing createRoot from react-dom/client
97
+ if (_ReactDOMInternals) {
98
+ _ReactDOMInternals.usingClientEntryPoint = true;
99
+ }
100
+ root = _ReactDOM.createRoot(container);
101
+ root.render(toastWrapper);
102
+ // revert suppression, not to influence users app
103
+ if (_ReactDOMInternals) {
104
+ _ReactDOMInternals.usingClientEntryPoint = false;
105
+ }
106
+ }
107
+ else {
108
+ // v17 and before
109
+ ReactDOM.render(toastWrapper, container);
110
+ }
111
+ return [2 /*return*/];
112
+ });
113
+ }); };
58
114
  }
59
115
  /**
60
116
  * Set global Toaster settings for toasts order and placement.
@@ -68,7 +124,7 @@ var Toaster = /** @class */ (function () {
68
124
  ? 'ascending'
69
125
  : 'descending');
70
126
  this.settings = newSettings;
71
- this.asyncInit.then(function () {
127
+ this.asyncInit().then(function () {
72
128
  var _a, _b;
73
129
  (_a = _this.toastsRef.current) === null || _a === void 0 ? void 0 : _a.setPlacement((_b = _this.settings.placement) !== null && _b !== void 0 ? _b : 'top');
74
130
  });
@@ -105,7 +161,7 @@ var Toaster = /** @class */ (function () {
105
161
  };
106
162
  Toaster.prototype.updateView = function () {
107
163
  var _this = this;
108
- this.asyncInit.then(function () {
164
+ this.asyncInit().then(function () {
109
165
  var _a;
110
166
  (_a = _this.toastsRef.current) === null || _a === void 0 ? void 0 : _a.setToasts(_this.toasts);
111
167
  });
@@ -26,24 +26,7 @@ export declare type PopoverProps = {
26
26
  * with pre-configured props and plugins (e.g. lazy mounting, focus, etc).
27
27
  * @private
28
28
  */
29
- export declare const Popover: React.ForwardRefExoticComponent<Pick<{
30
- /**
31
- * Controlled flag for whether the popover is visible.
32
- */
33
- visible?: boolean | undefined;
34
- /**
35
- * Determines the events that cause the popover to show.
36
- * Should not be used when `visible` is set.
37
- * @see [tippy.js trigger prop](https://atomiks.github.io/tippyjs/v6/all-props/#trigger)
38
- */
39
- trigger?: string | undefined;
40
- /**
41
- * Placement of the popover content.
42
- * @default 'bottom-start'
43
- * @see [tippy.js placement prop](https://atomiks.github.io/tippyjs/v6/all-props/#placement).
44
- */
45
- placement?: import("@popperjs/core").Placement | undefined;
46
- } & Omit<TippyProps, "placement" | "trigger" | "visible">, "disabled" | "children" | "placement" | "trigger" | "visible" | "content" | "render" | "animateFill" | "appendTo" | "aria" | "delay" | "duration" | "followCursor" | "getReferenceClientRect" | "hideOnClick" | "ignoreAttributes" | "inlinePositioning" | "interactive" | "interactiveBorder" | "interactiveDebounce" | "moveTransition" | "offset" | "plugins" | "popperOptions" | "showOnCreate" | "sticky" | "touch" | "triggerTarget" | "onAfterUpdate" | "onBeforeUpdate" | "onCreate" | "onDestroy" | "onHidden" | "onHide" | "onMount" | "onShow" | "onShown" | "onTrigger" | "onUntrigger" | "onClickOutside" | "allowHTML" | "animation" | "arrow" | "inertia" | "maxWidth" | "role" | "theme" | "zIndex" | "className" | "singleton" | "reference"> & React.RefAttributes<unknown>>;
29
+ export declare const Popover: React.ForwardRefExoticComponent<Pick<PopoverProps, "disabled" | "children" | "placement" | "trigger" | "visible" | "content" | "render" | "animateFill" | "appendTo" | "aria" | "delay" | "duration" | "followCursor" | "getReferenceClientRect" | "hideOnClick" | "ignoreAttributes" | "inlinePositioning" | "interactive" | "interactiveBorder" | "interactiveDebounce" | "moveTransition" | "offset" | "plugins" | "popperOptions" | "showOnCreate" | "sticky" | "touch" | "triggerTarget" | "onAfterUpdate" | "onBeforeUpdate" | "onCreate" | "onDestroy" | "onHidden" | "onHide" | "onMount" | "onShow" | "onShown" | "onTrigger" | "onUntrigger" | "onClickOutside" | "allowHTML" | "animation" | "arrow" | "inertia" | "maxWidth" | "role" | "theme" | "zIndex" | "className" | "singleton" | "reference"> & React.RefAttributes<unknown>>;
47
30
  /**
48
31
  * Plugin to hide Popover when either Esc key is pressed,
49
32
  * or when the content inside is not tabbable and Tab key is pressed.
@@ -1,7 +1,6 @@
1
1
  /// <reference types="react" />
2
- import { CSSTransition } from 'react-transition-group';
3
2
  import { CSSTransitionProps } from 'react-transition-group/CSSTransition';
4
- export declare const WithCSSTransition: (props: Partial<CSSTransition.CSSTransitionProps> & {
3
+ export declare const WithCSSTransition: (props: Partial<CSSTransitionProps<undefined>> & {
5
4
  children: JSX.Element;
6
5
  dimension?: "width" | "height" | undefined;
7
6
  }) => JSX.Element;
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  import { CommonProps } from '../props';
3
3
  export declare const StatusIconMap: {
4
- negative: (args?: CommonProps | undefined) => JSX.Element;
5
- positive: (args?: CommonProps | undefined) => JSX.Element;
6
- warning: (args?: CommonProps | undefined) => JSX.Element;
7
- informational: (args?: CommonProps | undefined) => JSX.Element;
4
+ negative: (args?: CommonProps) => JSX.Element;
5
+ positive: (args?: CommonProps) => JSX.Element;
6
+ warning: (args?: CommonProps) => JSX.Element;
7
+ informational: (args?: CommonProps) => JSX.Element;
8
8
  };
@@ -72,8 +72,10 @@ export var useOverflow = function (items, disabled, orientation) {
72
72
  var childrenSize = Array.from(containerRef.current.children).reduce(function (sum, child) { return sum + child["offset".concat(dimension)]; }, 0);
73
73
  var avgItemSize = childrenSize / visibleCount;
74
74
  var visibleItems = Math.floor(availableSize / avgItemSize);
75
- // Doubling the visible items to overflow the container. Just to be safe.
76
- setVisibleCount(Math.min(items.length, visibleItems * 2));
75
+ if (!isNaN(visibleItems)) {
76
+ // Doubling the visible items to overflow the container. Just to be safe.
77
+ setVisibleCount(Math.min(items.length, visibleItems * 2));
78
+ }
77
79
  }
78
80
  needsFullRerender.current = false;
79
81
  }, [containerSize, visibleCount, disabled, items.length, orientation]);
@@ -19,4 +19,4 @@ export declare type ThemeType = 'light' | 'dark' | 'os';
19
19
  * @param theme Light, dark, or based on OS setting.
20
20
  * @param themeOptions Options that override default theming behavior.
21
21
  */
22
- export declare const useTheme: (theme?: ThemeType | undefined, themeOptions?: ThemeOptions | undefined) => void;
22
+ export declare const useTheme: (theme?: ThemeType, themeOptions?: ThemeOptions) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/itwinui-react",
3
- "version": "1.38.1",
3
+ "version": "1.39.0",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "main": "cjs/index.js",
@@ -40,68 +40,53 @@
40
40
  "lint": "eslint \"**/*.{js,ts,tsx}\" --max-warnings=0",
41
41
  "lint:fix": "yarn lint --fix && node ../configs/copyrightLinter.js --fix \"*/**/*.{js,ts,tsx}\"",
42
42
  "copy-files": "cpy \"../../{README,LICENSE}.md\" .",
43
- "storybook": "start-storybook -p 6006",
44
- "dev": "yarn storybook",
45
- "build-storybook": "yarn copy-files && build-storybook"
43
+ "dev": "yarn build:watch"
46
44
  },
47
45
  "dependencies": {
48
- "@itwin/itwinui-css": "^0.58.0",
49
- "@itwin/itwinui-icons-react": "^1.5.0",
50
- "@itwin/itwinui-illustrations-react": "^1.0.1",
46
+ "@itwin/itwinui-css": "^0.59.1",
47
+ "@itwin/itwinui-icons-react": "^1.10.1",
48
+ "@itwin/itwinui-illustrations-react": "^1.3.1",
51
49
  "@tippyjs/react": "^4.2.5",
52
50
  "@types/react-table": "^7.0.18",
53
51
  "classnames": "^2.2.6",
54
52
  "react-table": "^7.1.0",
55
- "react-transition-group": "^4.1.1"
53
+ "react-transition-group": "^4.4.2"
56
54
  },
57
55
  "devDependencies": {
58
56
  "@babel/core": "^7.12.10",
59
- "@storybook/addon-a11y": "^6.4.19",
60
- "@storybook/addon-essentials": "~6.4.19",
61
- "@storybook/addon-storysource": "~6.4.19",
62
- "@storybook/addons": "~6.4.19",
63
- "@storybook/api": "~6.4.19",
64
- "@storybook/builder-webpack5": "~6.4.19",
65
- "@storybook/components": "~6.4.19",
66
- "@storybook/core-events": "~6.4.19",
67
- "@storybook/manager-webpack5": "~6.4.19",
68
- "@storybook/preset-typescript": "^3.0.0",
69
- "@storybook/react": "~6.4.19",
70
- "@storybook/theming": "~6.4.19",
71
- "@testing-library/jest-dom": "^5.14.1",
72
- "@testing-library/react": "^12.0.0",
73
- "@testing-library/react-hooks": "^7.0.1",
74
- "@testing-library/user-event": "^13.5.0",
57
+ "@testing-library/jest-dom": "^5.16.4",
58
+ "@testing-library/react": "^13.2.0",
59
+ "@testing-library/user-event": "^14.1.1",
75
60
  "@types/classnames": "^2.2.7",
76
61
  "@types/jest": "^27.0.0",
77
62
  "@types/node": "^10.12.2",
78
- "@types/react": "^17.0.3",
79
- "@types/react-dom": "^17.0.3",
80
- "@types/react-transition-group": "^2.9.2",
63
+ "@types/react": "^18.0.6",
64
+ "@types/react-dom": "^18.0.2",
65
+ "@types/react-transition-group": "^4.4.4",
81
66
  "@typescript-eslint/eslint-plugin": "^5.17.0",
82
67
  "@typescript-eslint/parser": "^5.17.0",
83
68
  "babel-loader": "^8.2.2",
84
69
  "concurrently": "^5.3.0",
85
70
  "configs": "*",
86
- "creevey": "^0.8.0-beta.0",
71
+ "eslint": "^8.12.0",
72
+ "eslint-config-prettier": "^8.5.0",
87
73
  "inquirer": "^6.2.2",
88
- "jest": "^27.0.6",
89
- "jest-cli": "^27.0.6",
90
- "jest-junit": "^12.0.0",
74
+ "jest": "^28.1.0",
75
+ "jest-cli": "^28.1.0",
76
+ "jest-environment-jsdom": "^28.1.0",
77
+ "jest-junit": "^13.2.0",
91
78
  "markdown-to-jsx": "6.11.4",
92
- "react": "^17.0.2",
93
- "react-dom": "^17.0.2",
94
- "storybook-dark-mode": "^1.0.9",
79
+ "react": "^18.0.0",
80
+ "react-dom": "^18.0.0",
95
81
  "tippy.js": "^6.3.1",
96
- "ts-jest": "^27.0.4",
82
+ "ts-jest": "^28.0.2",
97
83
  "ts-loader": "^9.2.8",
98
84
  "ts-node": "^8.0.2",
99
- "typescript": "^4.4.3",
100
- "webpack": "5"
85
+ "typescript": "^4.4.3"
101
86
  },
102
87
  "peerDependencies": {
103
- "react": "^16.8.6 || ^17.0.0",
104
- "react-dom": "^16.8.6 || ^17.0.0"
88
+ "react": ">=16.8.6 < 19.0.0",
89
+ "react-dom": ">=16.8.6 < 19.0.0"
105
90
  },
106
91
  "lint-staged": {
107
92
  "*.{tsx,ts,jsx,js}": [