@itwin/itwinui-react 1.27.0 → 1.28.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.28.0](https://www.github.com/iTwin/iTwinUI-react/compare/v1.27.0...v1.28.0) (2021-12-21)
4
+
5
+ ### What's new
6
+
7
+ * **ButtonGroup:** Add support for input+button combo ([#492](https://www.github.com/iTwin/iTwinUI-react/issues/492), [#481](https://github.com/iTwin/iTwinUI-react/pull/481)) ([b8b15fd](https://www.github.com/iTwin/iTwinUI-react/commit/b8b15fd4a6f67fac03063a6fdeec1ea6216899c4))
8
+ * **Table:** Added zebra stripes to rows ([#478](https://www.github.com/iTwin/iTwinUI-react/issues/478)) ([76d3eda](https://www.github.com/iTwin/iTwinUI-react/commit/76d3eda5d14aab2b02187c58fab70e93878c73cc))
9
+ * **Table:** Proper support for horizontal scroll ([#495](https://www.github.com/iTwin/iTwinUI-react/issues/495)) ([079c2c0](https://www.github.com/iTwin/iTwinUI-react/commit/079c2c020be46f14ff41d407e81eee1487adfcab))
10
+
11
+ ### Fixes
12
+
13
+ * **Table:** Prevents from triggering sort when filtering ([#487](https://www.github.com/iTwin/iTwinUI-react/issues/487)) ([d1e6165](https://www.github.com/iTwin/iTwinUI-react/commit/d1e61655bddffc37fa3f91b95766145f18392844))
14
+
3
15
  ## [1.27.0](https://www.github.com/iTwin/iTwinUI-react/compare/v1.26.1...v1.27.0) (2021-12-14)
4
16
 
5
17
  ### What's new
@@ -64,14 +64,12 @@ require("@itwin/itwinui-css/css/button.css");
64
64
  */
65
65
  exports.ButtonGroup = react_1.default.forwardRef(function (props, ref) {
66
66
  var children = props.children, className = props.className, style = props.style, overflowButton = props.overflowButton, rest = __rest(props, ["children", "className", "style", "overflowButton"]);
67
- var items = react_1.default.useMemo(function () { return react_1.default.Children.toArray(children); }, [
68
- children,
69
- ]);
67
+ var items = react_1.default.useMemo(function () { var _a; return (_a = react_1.default.Children.map(children, function (child) { return react_1.default.createElement("div", null, child); })) !== null && _a !== void 0 ? _a : []; }, [children]);
70
68
  (0, utils_1.useTheme)();
71
69
  var _a = (0, utils_1.useOverflow)(items, !overflowButton), overflowRef = _a[0], visibleCount = _a[1];
72
70
  var refs = (0, utils_1.useMergedRefs)(overflowRef, ref);
73
71
  return (react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-button-group', className), style: __assign(__assign({}, (!!overflowButton && { width: '100%' })), style), ref: refs }, rest), !!overflowButton && visibleCount < items.length ? (react_1.default.createElement(react_1.default.Fragment, null,
74
72
  items.slice(0, visibleCount - 1),
75
- overflowButton(visibleCount))) : (children)));
73
+ overflowButton(visibleCount))) : (items)));
76
74
  });
77
75
  exports.default = exports.ButtonGroup;
@@ -63,9 +63,11 @@ var SplitButton = function (props) {
63
63
  return (react_1.default.createElement("span", { className: (0, classnames_1.default)(className, 'iui-button-split-menu', {
64
64
  'iui-disabled': props.disabled,
65
65
  }), style: style, title: title, ref: ref },
66
- react_1.default.createElement(Button_1.Button, __assign({ styleType: styleType, size: size, onClick: onClick }, rest), children),
67
- react_1.default.createElement(DropdownMenu_1.DropdownMenu, { placement: menuPlacement, menuItems: menuItems, style: { minWidth: menuWidth }, onShow: react_1.default.useCallback(function () { return setIsMenuOpen(true); }, []), onHide: react_1.default.useCallback(function () { return setIsMenuOpen(false); }, []) },
68
- react_1.default.createElement(IconButton_1.IconButton, { styleType: styleType, size: size, disabled: props.disabled }, isMenuOpen ? react_1.default.createElement(CaretUpSmall_1.default, null) : react_1.default.createElement(CaretDownSmall_1.default, null)))));
66
+ react_1.default.createElement("div", null,
67
+ react_1.default.createElement(Button_1.Button, __assign({ styleType: styleType, size: size, onClick: onClick }, rest), children)),
68
+ react_1.default.createElement("div", null,
69
+ react_1.default.createElement(DropdownMenu_1.DropdownMenu, { placement: menuPlacement, menuItems: menuItems, style: { minWidth: menuWidth }, onShow: react_1.default.useCallback(function () { return setIsMenuOpen(true); }, []), onHide: react_1.default.useCallback(function () { return setIsMenuOpen(false); }, []) },
70
+ react_1.default.createElement(IconButton_1.IconButton, { styleType: styleType, size: size, disabled: props.disabled }, isMenuOpen ? react_1.default.createElement(CaretUpSmall_1.default, null) : react_1.default.createElement(CaretDownSmall_1.default, null))))));
69
71
  };
70
72
  exports.SplitButton = SplitButton;
71
73
  exports.default = exports.SplitButton;
@@ -155,6 +155,11 @@ export declare type TableProps<T extends Record<string, unknown> = Record<string
155
155
  * @default false
156
156
  */
157
157
  isResizable?: boolean;
158
+ /**
159
+ * Style of the table.
160
+ * @default 'default'
161
+ */
162
+ styleType?: 'default' | 'zebra-rows';
158
163
  } & Omit<CommonProps, 'title'>;
159
164
  /**
160
165
  * Table based on [react-table](https://react-table.tanstack.com/docs/api/overview).
@@ -93,9 +93,9 @@ var tableResizeEndAction = 'tableResizeEnd';
93
93
  */
94
94
  var Table = function (props) {
95
95
  var _a;
96
- var data = props.data, columns = props.columns, _b = props.isLoading, isLoading = _b === void 0 ? false : _b, emptyTableContent = props.emptyTableContent, className = props.className, style = props.style, id = props.id, _c = props.isSelectable, isSelectable = _c === void 0 ? false : _c, onSelect = props.onSelect, onRowClick = props.onRowClick, _d = props.isSortable, isSortable = _d === void 0 ? false : _d, onSort = props.onSort, stateReducer = props.stateReducer, onBottomReached = props.onBottomReached, onRowInViewport = props.onRowInViewport, _e = props.intersectionMargin, intersectionMargin = _e === void 0 ? 300 : _e, subComponent = props.subComponent, onExpand = props.onExpand, onFilter = props.onFilter, emptyFilteredTableContent = props.emptyFilteredTableContent, filterFunctions = props.filterTypes, expanderCell = props.expanderCell, isRowDisabled = props.isRowDisabled, rowProps = props.rowProps, _f = props.density, density = _f === void 0 ? 'default' : _f, _g = props.selectSubRows, selectSubRows = _g === void 0 ? true : _g, getSubRows = props.getSubRows, _h = props.selectRowOnClick, selectRowOnClick = _h === void 0 ? true : _h, paginatorRenderer = props.paginatorRenderer, _j = props.pageSize, pageSize = _j === void 0 ? 25 : _j, _k = props.isResizable, isResizable = _k === void 0 ? false : _k, rest = __rest(props, ["data", "columns", "isLoading", "emptyTableContent", "className", "style", "id", "isSelectable", "onSelect", "onRowClick", "isSortable", "onSort", "stateReducer", "onBottomReached", "onRowInViewport", "intersectionMargin", "subComponent", "onExpand", "onFilter", "emptyFilteredTableContent", "filterTypes", "expanderCell", "isRowDisabled", "rowProps", "density", "selectSubRows", "getSubRows", "selectRowOnClick", "paginatorRenderer", "pageSize", "isResizable"]);
96
+ var data = props.data, columns = props.columns, _b = props.isLoading, isLoading = _b === void 0 ? false : _b, emptyTableContent = props.emptyTableContent, className = props.className, style = props.style, id = props.id, _c = props.isSelectable, isSelectable = _c === void 0 ? false : _c, onSelect = props.onSelect, onRowClick = props.onRowClick, _d = props.isSortable, isSortable = _d === void 0 ? false : _d, onSort = props.onSort, stateReducer = props.stateReducer, onBottomReached = props.onBottomReached, onRowInViewport = props.onRowInViewport, _e = props.intersectionMargin, intersectionMargin = _e === void 0 ? 300 : _e, subComponent = props.subComponent, onExpand = props.onExpand, onFilter = props.onFilter, emptyFilteredTableContent = props.emptyFilteredTableContent, filterFunctions = props.filterTypes, expanderCell = props.expanderCell, isRowDisabled = props.isRowDisabled, rowProps = props.rowProps, _f = props.density, density = _f === void 0 ? 'default' : _f, _g = props.selectSubRows, selectSubRows = _g === void 0 ? true : _g, getSubRows = props.getSubRows, _h = props.selectRowOnClick, selectRowOnClick = _h === void 0 ? true : _h, paginatorRenderer = props.paginatorRenderer, _j = props.pageSize, pageSize = _j === void 0 ? 25 : _j, _k = props.isResizable, isResizable = _k === void 0 ? false : _k, _l = props.styleType, styleType = _l === void 0 ? 'default' : _l, rest = __rest(props, ["data", "columns", "isLoading", "emptyTableContent", "className", "style", "id", "isSelectable", "onSelect", "onRowClick", "isSortable", "onSort", "stateReducer", "onBottomReached", "onRowInViewport", "intersectionMargin", "subComponent", "onExpand", "onFilter", "emptyFilteredTableContent", "filterTypes", "expanderCell", "isRowDisabled", "rowProps", "density", "selectSubRows", "getSubRows", "selectRowOnClick", "paginatorRenderer", "pageSize", "isResizable", "styleType"]);
97
97
  (0, utils_1.useTheme)();
98
- var _l = react_1.default.useState(), ownerDocument = _l[0], setOwnerDocument = _l[1];
98
+ var _m = react_1.default.useState(), ownerDocument = _m[0], setOwnerDocument = _m[1];
99
99
  var defaultColumn = react_1.default.useMemo(function () { return ({
100
100
  maxWidth: 0,
101
101
  minWidth: 0,
@@ -231,6 +231,8 @@ var Table = function (props) {
231
231
  dispatch({ type: tableResizeEndAction, columnWidths: newColumnWidths_1 });
232
232
  }
233
233
  });
234
+ var headerRef = react_1.default.useRef(null);
235
+ var bodyRef = react_1.default.useRef(null);
234
236
  return (react_1.default.createElement(react_1.default.Fragment, null,
235
237
  react_1.default.createElement("div", __assign({ ref: function (element) {
236
238
  setOwnerDocument(element === null || element === void 0 ? void 0 : element.ownerDocument);
@@ -241,7 +243,7 @@ var Table = function (props) {
241
243
  className: (0, classnames_1.default)('iui-table', (_a = {}, _a["iui-" + density] = density !== 'default', _a), className),
242
244
  style: style,
243
245
  }), ariaDataAttributes),
244
- react_1.default.createElement("div", { className: 'iui-table-header' }, headerGroups.slice(1).map(function (headerGroup) {
246
+ react_1.default.createElement("div", { className: 'iui-table-header', ref: headerRef }, headerGroups.slice(1).map(function (headerGroup) {
245
247
  var headerGroupProps = headerGroup.getHeaderGroupProps({
246
248
  className: 'iui-row',
247
249
  });
@@ -264,8 +266,14 @@ var Table = function (props) {
264
266
  })));
265
267
  })),
266
268
  react_1.default.createElement("div", __assign({}, getTableBodyProps({
267
- className: 'iui-table-body',
268
- })),
269
+ className: (0, classnames_1.default)('iui-table-body', {
270
+ 'iui-zebra-striping': styleType === 'zebra-rows',
271
+ }),
272
+ }), { ref: bodyRef, onScroll: function () {
273
+ if (headerRef.current && bodyRef.current) {
274
+ headerRef.current.scrollLeft = bodyRef.current.scrollLeft;
275
+ }
276
+ } }),
269
277
  data.length !== 0 &&
270
278
  page.map(function (row) {
271
279
  prepareRow(row);
@@ -40,7 +40,7 @@ var TableRow = function (props) {
40
40
  rootMargin: intersectionMargin + "px",
41
41
  });
42
42
  var userRowProps = rowProps === null || rowProps === void 0 ? void 0 : rowProps(row);
43
- var mergedProps = __assign(__assign(__assign({}, row.getRowProps({ style: { flex: "0 0 auto" } })), userRowProps), {
43
+ var mergedProps = __assign(__assign(__assign({}, row.getRowProps({ style: { flex: "0 0 auto", minWidth: '100%' } })), userRowProps), {
44
44
  className: (0, classnames_1.default)('iui-row', {
45
45
  'iui-selected': row.isSelected,
46
46
  'iui-row-expanded': row.isExpanded && subComponent,
@@ -29,7 +29,9 @@ var utils_1 = require("../../utils");
29
29
  var BaseFilter = function (props) {
30
30
  var children = props.children, className = props.className, style = props.style, id = props.id;
31
31
  (0, utils_1.useTheme)();
32
- return (react_1.default.createElement("div", { className: (0, classnames_1.default)('iui-column-filter', className), style: style, onClick: function (e) {
32
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)('iui-column-filter', className), style: style,
33
+ // Prevents from triggering sort
34
+ onMouseDown: function (e) {
33
35
  e.stopPropagation();
34
36
  }, id: id }, children));
35
37
  };
@@ -54,9 +54,10 @@ var FilterToggle = function (props) {
54
54
  close();
55
55
  }, [close, column]);
56
56
  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
- react_1.default.createElement(Buttons_1.IconButton, __assign({ styleType: 'borderless', isActive: isVisible || column.filterValue, className: (0, classnames_1.default)('iui-filter-button', className), onClick: function (e) {
58
- e.stopPropagation();
57
+ react_1.default.createElement(Buttons_1.IconButton, __assign({ styleType: 'borderless', isActive: isVisible || column.filterValue, className: (0, classnames_1.default)('iui-filter-button', className), onClick: function () {
59
58
  setIsVisible(function (v) { return !v; });
60
- } }, rest), column.filterValue ? react_1.default.createElement(Filter_1.default, null) : react_1.default.createElement(FilterHollow_1.default, null))))));
59
+ },
60
+ // Prevents from triggering sort
61
+ onMouseDown: function (e) { return e.stopPropagation(); } }, rest), column.filterValue ? react_1.default.createElement(Filter_1.default, null) : react_1.default.createElement(FilterHollow_1.default, null))))));
61
62
  };
62
63
  exports.FilterToggle = FilterToggle;
@@ -114,11 +114,13 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
114
114
  {
115
115
  onMouseDown: function (e) {
116
116
  e.persist();
117
+ // Prevents from triggering sort
117
118
  e.stopPropagation();
118
119
  onResizeStart(e, header);
119
120
  },
120
121
  onTouchStart: function (e) {
121
122
  e.persist();
123
+ // Prevents from triggering sort
122
124
  e.stopPropagation();
123
125
  onResizeStart(e, header);
124
126
  },
@@ -58,14 +58,12 @@ import '@itwin/itwinui-css/css/button.css';
58
58
  */
59
59
  export var ButtonGroup = React.forwardRef(function (props, ref) {
60
60
  var children = props.children, className = props.className, style = props.style, overflowButton = props.overflowButton, rest = __rest(props, ["children", "className", "style", "overflowButton"]);
61
- var items = React.useMemo(function () { return React.Children.toArray(children); }, [
62
- children,
63
- ]);
61
+ var items = React.useMemo(function () { var _a; return (_a = React.Children.map(children, function (child) { return React.createElement("div", null, child); })) !== null && _a !== void 0 ? _a : []; }, [children]);
64
62
  useTheme();
65
63
  var _a = useOverflow(items, !overflowButton), overflowRef = _a[0], visibleCount = _a[1];
66
64
  var refs = useMergedRefs(overflowRef, ref);
67
65
  return (React.createElement("div", __assign({ className: cx('iui-button-group', className), style: __assign(__assign({}, (!!overflowButton && { width: '100%' })), style), ref: refs }, rest), !!overflowButton && visibleCount < items.length ? (React.createElement(React.Fragment, null,
68
66
  items.slice(0, visibleCount - 1),
69
- overflowButton(visibleCount))) : (children)));
67
+ overflowButton(visibleCount))) : (items)));
70
68
  });
71
69
  export default ButtonGroup;
@@ -57,8 +57,10 @@ export var SplitButton = function (props) {
57
57
  return (React.createElement("span", { className: cx(className, 'iui-button-split-menu', {
58
58
  'iui-disabled': props.disabled,
59
59
  }), style: style, title: title, ref: ref },
60
- React.createElement(Button, __assign({ styleType: styleType, size: size, onClick: onClick }, rest), children),
61
- React.createElement(DropdownMenu, { placement: menuPlacement, menuItems: menuItems, style: { minWidth: menuWidth }, onShow: React.useCallback(function () { return setIsMenuOpen(true); }, []), onHide: React.useCallback(function () { return setIsMenuOpen(false); }, []) },
62
- React.createElement(IconButton, { styleType: styleType, size: size, disabled: props.disabled }, isMenuOpen ? React.createElement(SvgCaretUpSmall, null) : React.createElement(SvgCaretDownSmall, null)))));
60
+ React.createElement("div", null,
61
+ React.createElement(Button, __assign({ styleType: styleType, size: size, onClick: onClick }, rest), children)),
62
+ React.createElement("div", null,
63
+ React.createElement(DropdownMenu, { placement: menuPlacement, menuItems: menuItems, style: { minWidth: menuWidth }, onShow: React.useCallback(function () { return setIsMenuOpen(true); }, []), onHide: React.useCallback(function () { return setIsMenuOpen(false); }, []) },
64
+ React.createElement(IconButton, { styleType: styleType, size: size, disabled: props.disabled }, isMenuOpen ? React.createElement(SvgCaretUpSmall, null) : React.createElement(SvgCaretDownSmall, null))))));
63
65
  };
64
66
  export default SplitButton;
@@ -155,6 +155,11 @@ export declare type TableProps<T extends Record<string, unknown> = Record<string
155
155
  * @default false
156
156
  */
157
157
  isResizable?: boolean;
158
+ /**
159
+ * Style of the table.
160
+ * @default 'default'
161
+ */
162
+ styleType?: 'default' | 'zebra-rows';
158
163
  } & Omit<CommonProps, 'title'>;
159
164
  /**
160
165
  * Table based on [react-table](https://react-table.tanstack.com/docs/api/overview).
@@ -87,9 +87,9 @@ var tableResizeEndAction = 'tableResizeEnd';
87
87
  */
88
88
  export var Table = function (props) {
89
89
  var _a;
90
- var data = props.data, columns = props.columns, _b = props.isLoading, isLoading = _b === void 0 ? false : _b, emptyTableContent = props.emptyTableContent, className = props.className, style = props.style, id = props.id, _c = props.isSelectable, isSelectable = _c === void 0 ? false : _c, onSelect = props.onSelect, onRowClick = props.onRowClick, _d = props.isSortable, isSortable = _d === void 0 ? false : _d, onSort = props.onSort, stateReducer = props.stateReducer, onBottomReached = props.onBottomReached, onRowInViewport = props.onRowInViewport, _e = props.intersectionMargin, intersectionMargin = _e === void 0 ? 300 : _e, subComponent = props.subComponent, onExpand = props.onExpand, onFilter = props.onFilter, emptyFilteredTableContent = props.emptyFilteredTableContent, filterFunctions = props.filterTypes, expanderCell = props.expanderCell, isRowDisabled = props.isRowDisabled, rowProps = props.rowProps, _f = props.density, density = _f === void 0 ? 'default' : _f, _g = props.selectSubRows, selectSubRows = _g === void 0 ? true : _g, getSubRows = props.getSubRows, _h = props.selectRowOnClick, selectRowOnClick = _h === void 0 ? true : _h, paginatorRenderer = props.paginatorRenderer, _j = props.pageSize, pageSize = _j === void 0 ? 25 : _j, _k = props.isResizable, isResizable = _k === void 0 ? false : _k, rest = __rest(props, ["data", "columns", "isLoading", "emptyTableContent", "className", "style", "id", "isSelectable", "onSelect", "onRowClick", "isSortable", "onSort", "stateReducer", "onBottomReached", "onRowInViewport", "intersectionMargin", "subComponent", "onExpand", "onFilter", "emptyFilteredTableContent", "filterTypes", "expanderCell", "isRowDisabled", "rowProps", "density", "selectSubRows", "getSubRows", "selectRowOnClick", "paginatorRenderer", "pageSize", "isResizable"]);
90
+ var data = props.data, columns = props.columns, _b = props.isLoading, isLoading = _b === void 0 ? false : _b, emptyTableContent = props.emptyTableContent, className = props.className, style = props.style, id = props.id, _c = props.isSelectable, isSelectable = _c === void 0 ? false : _c, onSelect = props.onSelect, onRowClick = props.onRowClick, _d = props.isSortable, isSortable = _d === void 0 ? false : _d, onSort = props.onSort, stateReducer = props.stateReducer, onBottomReached = props.onBottomReached, onRowInViewport = props.onRowInViewport, _e = props.intersectionMargin, intersectionMargin = _e === void 0 ? 300 : _e, subComponent = props.subComponent, onExpand = props.onExpand, onFilter = props.onFilter, emptyFilteredTableContent = props.emptyFilteredTableContent, filterFunctions = props.filterTypes, expanderCell = props.expanderCell, isRowDisabled = props.isRowDisabled, rowProps = props.rowProps, _f = props.density, density = _f === void 0 ? 'default' : _f, _g = props.selectSubRows, selectSubRows = _g === void 0 ? true : _g, getSubRows = props.getSubRows, _h = props.selectRowOnClick, selectRowOnClick = _h === void 0 ? true : _h, paginatorRenderer = props.paginatorRenderer, _j = props.pageSize, pageSize = _j === void 0 ? 25 : _j, _k = props.isResizable, isResizable = _k === void 0 ? false : _k, _l = props.styleType, styleType = _l === void 0 ? 'default' : _l, rest = __rest(props, ["data", "columns", "isLoading", "emptyTableContent", "className", "style", "id", "isSelectable", "onSelect", "onRowClick", "isSortable", "onSort", "stateReducer", "onBottomReached", "onRowInViewport", "intersectionMargin", "subComponent", "onExpand", "onFilter", "emptyFilteredTableContent", "filterTypes", "expanderCell", "isRowDisabled", "rowProps", "density", "selectSubRows", "getSubRows", "selectRowOnClick", "paginatorRenderer", "pageSize", "isResizable", "styleType"]);
91
91
  useTheme();
92
- var _l = React.useState(), ownerDocument = _l[0], setOwnerDocument = _l[1];
92
+ var _m = React.useState(), ownerDocument = _m[0], setOwnerDocument = _m[1];
93
93
  var defaultColumn = React.useMemo(function () { return ({
94
94
  maxWidth: 0,
95
95
  minWidth: 0,
@@ -225,6 +225,8 @@ export var Table = function (props) {
225
225
  dispatch({ type: tableResizeEndAction, columnWidths: newColumnWidths_1 });
226
226
  }
227
227
  });
228
+ var headerRef = React.useRef(null);
229
+ var bodyRef = React.useRef(null);
228
230
  return (React.createElement(React.Fragment, null,
229
231
  React.createElement("div", __assign({ ref: function (element) {
230
232
  setOwnerDocument(element === null || element === void 0 ? void 0 : element.ownerDocument);
@@ -235,7 +237,7 @@ export var Table = function (props) {
235
237
  className: cx('iui-table', (_a = {}, _a["iui-" + density] = density !== 'default', _a), className),
236
238
  style: style,
237
239
  }), ariaDataAttributes),
238
- React.createElement("div", { className: 'iui-table-header' }, headerGroups.slice(1).map(function (headerGroup) {
240
+ React.createElement("div", { className: 'iui-table-header', ref: headerRef }, headerGroups.slice(1).map(function (headerGroup) {
239
241
  var headerGroupProps = headerGroup.getHeaderGroupProps({
240
242
  className: 'iui-row',
241
243
  });
@@ -258,8 +260,14 @@ export var Table = function (props) {
258
260
  })));
259
261
  })),
260
262
  React.createElement("div", __assign({}, getTableBodyProps({
261
- className: 'iui-table-body',
262
- })),
263
+ className: cx('iui-table-body', {
264
+ 'iui-zebra-striping': styleType === 'zebra-rows',
265
+ }),
266
+ }), { ref: bodyRef, onScroll: function () {
267
+ if (headerRef.current && bodyRef.current) {
268
+ headerRef.current.scrollLeft = bodyRef.current.scrollLeft;
269
+ }
270
+ } }),
263
271
  data.length !== 0 &&
264
272
  page.map(function (row) {
265
273
  prepareRow(row);
@@ -34,7 +34,7 @@ export var TableRow = function (props) {
34
34
  rootMargin: intersectionMargin + "px",
35
35
  });
36
36
  var userRowProps = rowProps === null || rowProps === void 0 ? void 0 : rowProps(row);
37
- var mergedProps = __assign(__assign(__assign({}, row.getRowProps({ style: { flex: "0 0 auto" } })), userRowProps), {
37
+ var mergedProps = __assign(__assign(__assign({}, row.getRowProps({ style: { flex: "0 0 auto", minWidth: '100%' } })), userRowProps), {
38
38
  className: cx('iui-row', {
39
39
  'iui-selected': row.isSelected,
40
40
  'iui-row-expanded': row.isExpanded && subComponent,
@@ -23,7 +23,9 @@ import { useTheme } from '../../utils';
23
23
  export var BaseFilter = function (props) {
24
24
  var children = props.children, className = props.className, style = props.style, id = props.id;
25
25
  useTheme();
26
- return (React.createElement("div", { className: cx('iui-column-filter', className), style: style, onClick: function (e) {
26
+ return (React.createElement("div", { className: cx('iui-column-filter', className), style: style,
27
+ // Prevents from triggering sort
28
+ onMouseDown: function (e) {
27
29
  e.stopPropagation();
28
30
  }, id: id }, children));
29
31
  };
@@ -48,8 +48,9 @@ export var FilterToggle = function (props) {
48
48
  close();
49
49
  }, [close, column]);
50
50
  return (React.createElement(React.Fragment, null, column.canFilter && column.Filter && (React.createElement(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 },
51
- React.createElement(IconButton, __assign({ styleType: 'borderless', isActive: isVisible || column.filterValue, className: cx('iui-filter-button', className), onClick: function (e) {
52
- e.stopPropagation();
51
+ React.createElement(IconButton, __assign({ styleType: 'borderless', isActive: isVisible || column.filterValue, className: cx('iui-filter-button', className), onClick: function () {
53
52
  setIsVisible(function (v) { return !v; });
54
- } }, rest), column.filterValue ? React.createElement(SvgFilter, null) : React.createElement(SvgFilterHollow, null))))));
53
+ },
54
+ // Prevents from triggering sort
55
+ onMouseDown: function (e) { return e.stopPropagation(); } }, rest), column.filterValue ? React.createElement(SvgFilter, null) : React.createElement(SvgFilterHollow, null))))));
55
56
  };
@@ -110,11 +110,13 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
110
110
  {
111
111
  onMouseDown: function (e) {
112
112
  e.persist();
113
+ // Prevents from triggering sort
113
114
  e.stopPropagation();
114
115
  onResizeStart(e, header);
115
116
  },
116
117
  onTouchStart: function (e) {
117
118
  e.persist();
119
+ // Prevents from triggering sort
118
120
  e.stopPropagation();
119
121
  onResizeStart(e, header);
120
122
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/itwinui-react",
3
- "version": "1.27.0",
3
+ "version": "1.28.0",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "main": "cjs/index.js",
@@ -40,7 +40,7 @@
40
40
  "build-storybook": "build-storybook"
41
41
  },
42
42
  "dependencies": {
43
- "@itwin/itwinui-css": "^0.41.1",
43
+ "@itwin/itwinui-css": "^0.43.0",
44
44
  "@itwin/itwinui-icons-react": "^1.1.1",
45
45
  "@itwin/itwinui-illustrations-react": "^1.0.1",
46
46
  "@tippyjs/react": "^4.2.5",
@@ -63,6 +63,7 @@
63
63
  "@testing-library/jest-dom": "^5.14.1",
64
64
  "@testing-library/react": "^12.0.0",
65
65
  "@testing-library/react-hooks": "^7.0.1",
66
+ "@testing-library/user-event": "^13.5.0",
66
67
  "@types/classnames": "^2.2.7",
67
68
  "@types/jest": "^27.0.0",
68
69
  "@types/node": "^10.12.2",