@itwin/itwinui-react 1.42.0 → 1.44.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 (128) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/cjs/core/Backdrop/Backdrop.d.ts +10 -0
  3. package/cjs/core/Backdrop/Backdrop.js +41 -0
  4. package/cjs/core/Backdrop/index.d.ts +2 -0
  5. package/cjs/core/Backdrop/index.js +9 -0
  6. package/cjs/core/Breadcrumbs/Breadcrumbs.js +18 -18
  7. package/cjs/core/ButtonGroup/ButtonGroup.js +11 -4
  8. package/cjs/core/Dialog/Dialog.d.ts +41 -0
  9. package/cjs/core/Dialog/Dialog.js +59 -0
  10. package/cjs/core/Dialog/DialogBackdrop.d.ts +12 -0
  11. package/cjs/core/Dialog/DialogBackdrop.js +61 -0
  12. package/cjs/core/Dialog/DialogButtonBar.d.ts +18 -0
  13. package/cjs/core/Dialog/DialogButtonBar.js +50 -0
  14. package/cjs/core/Dialog/DialogContent.d.ts +17 -0
  15. package/cjs/core/Dialog/DialogContent.js +49 -0
  16. package/cjs/core/Dialog/DialogContext.d.ts +39 -0
  17. package/cjs/core/Dialog/DialogContext.js +16 -0
  18. package/cjs/core/Dialog/DialogMain.d.ts +36 -0
  19. package/cjs/core/Dialog/DialogMain.js +120 -0
  20. package/cjs/core/Dialog/DialogTitleBar.d.ts +34 -0
  21. package/cjs/core/Dialog/DialogTitleBar.js +69 -0
  22. package/cjs/core/Dialog/DialogTitleBarTitle.d.ts +15 -0
  23. package/cjs/core/Dialog/DialogTitleBarTitle.js +47 -0
  24. package/cjs/core/Dialog/index.d.ts +8 -0
  25. package/cjs/core/Dialog/index.js +10 -0
  26. package/cjs/core/Footer/Footer.d.ts +16 -2
  27. package/cjs/core/Footer/Footer.js +57 -45
  28. package/cjs/core/Footer/FooterItem.d.ts +8 -0
  29. package/cjs/core/Footer/FooterItem.js +46 -0
  30. package/cjs/core/Footer/FooterList.d.ts +8 -0
  31. package/cjs/core/Footer/FooterList.js +46 -0
  32. package/cjs/core/Footer/FooterSeparator.d.ts +8 -0
  33. package/cjs/core/Footer/FooterSeparator.js +46 -0
  34. package/cjs/core/Footer/index.d.ts +1 -1
  35. package/cjs/core/Footer/index.js +2 -1
  36. package/cjs/core/Menu/Menu.js +0 -3
  37. package/cjs/core/Modal/Modal.d.ts +4 -14
  38. package/cjs/core/Modal/Modal.js +9 -74
  39. package/cjs/core/Modal/ModalButtonBar.d.ts +1 -2
  40. package/cjs/core/Modal/ModalButtonBar.js +2 -39
  41. package/cjs/core/Modal/ModalContent.d.ts +1 -2
  42. package/cjs/core/Modal/ModalContent.js +2 -39
  43. package/cjs/core/Select/Select.d.ts +23 -8
  44. package/cjs/core/Select/Select.js +82 -25
  45. package/cjs/core/Select/SelectTag.d.ts +15 -0
  46. package/cjs/core/Select/SelectTag.js +48 -0
  47. package/cjs/core/Select/index.d.ts +1 -1
  48. package/cjs/core/Slider/Slider.d.ts +10 -0
  49. package/cjs/core/Slider/Slider.js +20 -14
  50. package/cjs/core/Slider/Thumb.d.ts +2 -1
  51. package/cjs/core/Slider/Thumb.js +5 -3
  52. package/cjs/core/Slider/Track.d.ts +2 -1
  53. package/cjs/core/Slider/Track.js +23 -4
  54. package/cjs/core/Table/Table.d.ts +2 -1
  55. package/cjs/core/Table/Table.js +8 -2
  56. package/cjs/core/Table/columns/actionColumn.d.ts +8 -3
  57. package/cjs/core/Table/columns/actionColumn.js +33 -2
  58. package/cjs/core/Table/hooks/useScrollToRow.d.ts +1 -1
  59. package/cjs/core/Table/hooks/useScrollToRow.js +3 -3
  60. package/cjs/core/index.d.ts +4 -2
  61. package/cjs/core/index.js +6 -3
  62. package/cjs/core/utils/components/FocusTrap.js +1 -1
  63. package/cjs/core/utils/components/MiddleTextTruncation.js +1 -1
  64. package/cjs/core/utils/hooks/useOverflow.js +4 -1
  65. package/esm/core/Backdrop/Backdrop.d.ts +10 -0
  66. package/esm/core/Backdrop/Backdrop.js +35 -0
  67. package/esm/core/Backdrop/index.d.ts +2 -0
  68. package/esm/core/Backdrop/index.js +5 -0
  69. package/esm/core/Breadcrumbs/Breadcrumbs.js +18 -18
  70. package/esm/core/ButtonGroup/ButtonGroup.js +11 -4
  71. package/esm/core/Dialog/Dialog.d.ts +41 -0
  72. package/esm/core/Dialog/Dialog.js +53 -0
  73. package/esm/core/Dialog/DialogBackdrop.d.ts +12 -0
  74. package/esm/core/Dialog/DialogBackdrop.js +55 -0
  75. package/esm/core/Dialog/DialogButtonBar.d.ts +18 -0
  76. package/esm/core/Dialog/DialogButtonBar.js +44 -0
  77. package/esm/core/Dialog/DialogContent.d.ts +17 -0
  78. package/esm/core/Dialog/DialogContent.js +43 -0
  79. package/esm/core/Dialog/DialogContext.d.ts +39 -0
  80. package/esm/core/Dialog/DialogContext.js +9 -0
  81. package/esm/core/Dialog/DialogMain.d.ts +36 -0
  82. package/esm/core/Dialog/DialogMain.js +114 -0
  83. package/esm/core/Dialog/DialogTitleBar.d.ts +34 -0
  84. package/esm/core/Dialog/DialogTitleBar.js +63 -0
  85. package/esm/core/Dialog/DialogTitleBarTitle.d.ts +15 -0
  86. package/esm/core/Dialog/DialogTitleBarTitle.js +41 -0
  87. package/esm/core/Dialog/index.d.ts +8 -0
  88. package/esm/core/Dialog/index.js +6 -0
  89. package/esm/core/Footer/Footer.d.ts +16 -2
  90. package/esm/core/Footer/Footer.js +56 -43
  91. package/esm/core/Footer/FooterItem.d.ts +8 -0
  92. package/esm/core/Footer/FooterItem.js +39 -0
  93. package/esm/core/Footer/FooterList.d.ts +8 -0
  94. package/esm/core/Footer/FooterList.js +39 -0
  95. package/esm/core/Footer/FooterSeparator.d.ts +8 -0
  96. package/esm/core/Footer/FooterSeparator.js +39 -0
  97. package/esm/core/Footer/index.d.ts +1 -1
  98. package/esm/core/Footer/index.js +1 -1
  99. package/esm/core/Menu/Menu.js +0 -3
  100. package/esm/core/Modal/Modal.d.ts +4 -14
  101. package/esm/core/Modal/Modal.js +10 -75
  102. package/esm/core/Modal/ModalButtonBar.d.ts +1 -2
  103. package/esm/core/Modal/ModalButtonBar.js +2 -35
  104. package/esm/core/Modal/ModalContent.d.ts +1 -2
  105. package/esm/core/Modal/ModalContent.js +2 -35
  106. package/esm/core/Select/Select.d.ts +23 -8
  107. package/esm/core/Select/Select.js +83 -26
  108. package/esm/core/Select/SelectTag.d.ts +15 -0
  109. package/esm/core/Select/SelectTag.js +41 -0
  110. package/esm/core/Select/index.d.ts +1 -1
  111. package/esm/core/Slider/Slider.d.ts +10 -0
  112. package/esm/core/Slider/Slider.js +20 -14
  113. package/esm/core/Slider/Thumb.d.ts +2 -1
  114. package/esm/core/Slider/Thumb.js +5 -3
  115. package/esm/core/Slider/Track.d.ts +2 -1
  116. package/esm/core/Slider/Track.js +23 -4
  117. package/esm/core/Table/Table.d.ts +2 -1
  118. package/esm/core/Table/Table.js +8 -2
  119. package/esm/core/Table/columns/actionColumn.d.ts +8 -3
  120. package/esm/core/Table/columns/actionColumn.js +33 -2
  121. package/esm/core/Table/hooks/useScrollToRow.d.ts +1 -1
  122. package/esm/core/Table/hooks/useScrollToRow.js +3 -3
  123. package/esm/core/index.d.ts +4 -2
  124. package/esm/core/index.js +2 -1
  125. package/esm/core/utils/components/FocusTrap.js +1 -1
  126. package/esm/core/utils/components/MiddleTextTruncation.js +1 -1
  127. package/esm/core/utils/hooks/useOverflow.js +4 -1
  128. package/package.json +6 -5
@@ -45,9 +45,13 @@ var utils_1 = require("../utils");
45
45
  require("@itwin/itwinui-css/css/slider.css");
46
46
  var Track_1 = require("./Track");
47
47
  var Thumb_1 = require("./Thumb");
48
- var getPercentageOfRectangle = function (rect, pointer) {
49
- var position = (0, utils_1.getBoundedValue)(pointer, rect.left, rect.right);
50
- return (position - rect.left) / rect.width;
48
+ var getPercentageOfRectangle = function (rect, pointerX, pointerY, orientation) {
49
+ if (orientation === 'horizontal') {
50
+ var position_1 = (0, utils_1.getBoundedValue)(pointerX, rect.left, rect.right);
51
+ return (position_1 - rect.left) / rect.width;
52
+ }
53
+ var position = (0, utils_1.getBoundedValue)(pointerY, rect.top, rect.bottom);
54
+ return (rect.bottom - position) / rect.height;
51
55
  };
52
56
  var getClosestValueIndex = function (values, pointerValue) {
53
57
  if (1 === values.length) {
@@ -94,20 +98,20 @@ var focusThumb = function (sliderContainer, activeIndex) {
94
98
  */
95
99
  exports.Slider = react_1.default.forwardRef(function (props, ref) {
96
100
  var _a, _b;
97
- var _c = props.min, min = _c === void 0 ? 0 : _c, _d = props.max, max = _d === void 0 ? 100 : _d, values = props.values, _e = props.step, step = _e === void 0 ? 1 : _e, _f = props.setFocus, setFocus = _f === void 0 ? false : _f, tooltipProps = props.tooltipProps, _g = props.disabled, disabled = _g === void 0 ? false : _g, tickLabels = props.tickLabels, minLabel = props.minLabel, maxLabel = props.maxLabel, _h = props.trackDisplayMode, trackDisplayMode = _h === void 0 ? 'auto' : _h, _j = props.thumbMode, thumbMode = _j === void 0 ? 'inhibit-crossing' : _j, onChange = props.onChange, onUpdate = props.onUpdate, thumbProps = props.thumbProps, className = props.className, railContainerProps = props.railContainerProps, rest = __rest(props, ["min", "max", "values", "step", "setFocus", "tooltipProps", "disabled", "tickLabels", "minLabel", "maxLabel", "trackDisplayMode", "thumbMode", "onChange", "onUpdate", "thumbProps", "className", "railContainerProps"]);
98
- var _k = react_1.default.useState(values), currentValues = _k[0], setCurrentValues = _k[1];
101
+ var _c = props.min, min = _c === void 0 ? 0 : _c, _d = props.max, max = _d === void 0 ? 100 : _d, values = props.values, _e = props.step, step = _e === void 0 ? 1 : _e, _f = props.setFocus, setFocus = _f === void 0 ? false : _f, tooltipProps = props.tooltipProps, _g = props.disabled, disabled = _g === void 0 ? false : _g, tickLabels = props.tickLabels, minLabel = props.minLabel, maxLabel = props.maxLabel, _h = props.trackDisplayMode, trackDisplayMode = _h === void 0 ? 'auto' : _h, _j = props.thumbMode, thumbMode = _j === void 0 ? 'inhibit-crossing' : _j, onChange = props.onChange, onUpdate = props.onUpdate, thumbProps = props.thumbProps, className = props.className, railContainerProps = props.railContainerProps, _k = props.orientation, orientation = _k === void 0 ? 'horizontal' : _k, rest = __rest(props, ["min", "max", "values", "step", "setFocus", "tooltipProps", "disabled", "tickLabels", "minLabel", "maxLabel", "trackDisplayMode", "thumbMode", "onChange", "onUpdate", "thumbProps", "className", "railContainerProps", "orientation"]);
102
+ var _l = react_1.default.useState(values), currentValues = _l[0], setCurrentValues = _l[1];
99
103
  react_1.default.useEffect(function () {
100
104
  setCurrentValues(values);
101
105
  }, [values]);
102
- var _l = react_1.default.useState(function () { return minLabel !== null && minLabel !== void 0 ? minLabel : min.toString(); }), minValueLabel = _l[0], setMinValueLabel = _l[1];
106
+ var _m = react_1.default.useState(function () { return minLabel !== null && minLabel !== void 0 ? minLabel : min.toString(); }), minValueLabel = _m[0], setMinValueLabel = _m[1];
103
107
  react_1.default.useEffect(function () {
104
108
  setMinValueLabel(minLabel !== null && minLabel !== void 0 ? minLabel : min.toString());
105
109
  }, [minLabel, min]);
106
- var _m = react_1.default.useState(function () { return maxLabel !== null && maxLabel !== void 0 ? maxLabel : max.toString(); }), maxValueLabel = _m[0], setMaxValueLabel = _m[1];
110
+ var _o = react_1.default.useState(function () { return maxLabel !== null && maxLabel !== void 0 ? maxLabel : max.toString(); }), maxValueLabel = _o[0], setMaxValueLabel = _o[1];
107
111
  react_1.default.useEffect(function () {
108
112
  setMaxValueLabel(maxLabel !== null && maxLabel !== void 0 ? maxLabel : max.toString());
109
113
  }, [maxLabel, max]);
110
- var _o = react_1.default.useState(function () { return getDefaultTrackDisplay(trackDisplayMode, currentValues); }), trackDisplay = _o[0], setTrackDisplay = _o[1];
114
+ var _p = react_1.default.useState(function () { return getDefaultTrackDisplay(trackDisplayMode, currentValues); }), trackDisplay = _p[0], setTrackDisplay = _p[1];
111
115
  react_1.default.useEffect(function () {
112
116
  setTrackDisplay(getDefaultTrackDisplay(trackDisplayMode, currentValues));
113
117
  }, [trackDisplayMode, currentValues]);
@@ -133,10 +137,10 @@ exports.Slider = react_1.default.forwardRef(function (props, ref) {
133
137
  }
134
138
  return [min, max];
135
139
  }, [max, min, step, thumbMode, currentValues]);
136
- var _p = react_1.default.useState(undefined), activeThumbIndex = _p[0], setActiveThumbIndex = _p[1];
140
+ var _q = react_1.default.useState(undefined), activeThumbIndex = _q[0], setActiveThumbIndex = _q[1];
137
141
  var updateThumbValue = react_1.default.useCallback(function (event, callbackType) {
138
142
  if (containerRef.current && undefined !== activeThumbIndex) {
139
- var percent = getPercentageOfRectangle(containerRef.current.getBoundingClientRect(), event.clientX);
143
+ var percent = getPercentageOfRectangle(containerRef.current.getBoundingClientRect(), event.clientX, event.clientY, orientation);
140
144
  var pointerValue = min + (max - min) * percent;
141
145
  pointerValue = roundValueToClosestStep(pointerValue, step, min);
142
146
  var _a = getAllowableThumbRange(activeThumbIndex), minVal = _a[0], maxVal = _a[1];
@@ -162,6 +166,7 @@ exports.Slider = react_1.default.forwardRef(function (props, ref) {
162
166
  currentValues,
163
167
  onUpdate,
164
168
  onChange,
169
+ orientation,
165
170
  ]);
166
171
  var handlePointerMove = react_1.default.useCallback(function (event) {
167
172
  if (activeThumbIndex === undefined) {
@@ -195,7 +200,7 @@ exports.Slider = react_1.default.forwardRef(function (props, ref) {
195
200
  }, [activeThumbIndex, updateThumbValue]);
196
201
  var handlePointerDownOnSlider = react_1.default.useCallback(function (event) {
197
202
  if (containerRef.current) {
198
- var percent = getPercentageOfRectangle(containerRef.current.getBoundingClientRect(), event.clientX);
203
+ var percent = getPercentageOfRectangle(containerRef.current.getBoundingClientRect(), event.clientX, event.clientY, orientation);
199
204
  var pointerValue = min + (max - min) * percent;
200
205
  pointerValue = roundValueToClosestStep(pointerValue, step, min);
201
206
  var closestValueIndex = getClosestValueIndex(currentValues, pointerValue);
@@ -221,6 +226,7 @@ exports.Slider = react_1.default.forwardRef(function (props, ref) {
221
226
  getAllowableThumbRange,
222
227
  onChange,
223
228
  onUpdate,
229
+ orientation,
224
230
  ]);
225
231
  (0, utils_1.useEventListener)('pointermove', handlePointerMove, (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
226
232
  (0, utils_1.useEventListener)('pointerup', handlePointerUp, (_b = containerRef.current) === null || _b === void 0 ? void 0 : _b.ownerDocument);
@@ -241,7 +247,7 @@ exports.Slider = react_1.default.forwardRef(function (props, ref) {
241
247
  ? outProps.content
242
248
  : formatNumberValue(val, step, getNumDecimalPlaces) });
243
249
  }, [getNumDecimalPlaces, step, tooltipProps]);
244
- return (react_1.default.createElement("div", __assign({ ref: ref, className: (0, classnames_1.default)('iui-slider-component-container', { 'iui-disabled': disabled }, className) }, rest),
250
+ return (react_1.default.createElement("div", __assign({ ref: ref, className: (0, classnames_1.default)('iui-slider-component-container', "iui-slider-".concat(orientation), { 'iui-disabled': disabled }, className) }, rest),
245
251
  minValueLabel && (react_1.default.createElement("span", { className: 'iui-slider-min' }, minValueLabel)),
246
252
  react_1.default.createElement("div", __assign({ ref: containerRef, className: (0, classnames_1.default)('iui-slider-container', {
247
253
  'iui-grabbing': undefined !== activeThumbIndex,
@@ -251,9 +257,9 @@ exports.Slider = react_1.default.forwardRef(function (props, ref) {
251
257
  var _a;
252
258
  var _b = getAllowableThumbRange(index), minVal = _b[0], maxVal = _b[1];
253
259
  var thisThumbProps = thumbProps === null || thumbProps === void 0 ? void 0 : thumbProps(index);
254
- return (react_1.default.createElement(Thumb_1.Thumb, { key: (_a = thisThumbProps === null || thisThumbProps === void 0 ? void 0 : thisThumbProps.id) !== null && _a !== void 0 ? _a : index, index: index, disabled: disabled, isActive: activeThumbIndex === index, onThumbActivated: onThumbActivated, onThumbValueChanged: onThumbValueChanged, minVal: minVal, maxVal: maxVal, value: thumbValue, tooltipProps: generateTooltipProps(index, thumbValue), thumbProps: thisThumbProps, step: step, sliderMin: min, sliderMax: max }));
260
+ return (react_1.default.createElement(Thumb_1.Thumb, { key: (_a = thisThumbProps === null || thisThumbProps === void 0 ? void 0 : thisThumbProps.id) !== null && _a !== void 0 ? _a : index, index: index, disabled: disabled, isActive: activeThumbIndex === index, onThumbActivated: onThumbActivated, onThumbValueChanged: onThumbValueChanged, minVal: minVal, maxVal: maxVal, value: thumbValue, tooltipProps: generateTooltipProps(index, thumbValue), thumbProps: thisThumbProps, step: step, sliderMin: min, sliderMax: max, orientation: orientation }));
255
261
  }),
256
- react_1.default.createElement(Track_1.Track, { trackDisplayMode: trackDisplay, sliderMin: min, sliderMax: max, values: currentValues }),
262
+ react_1.default.createElement(Track_1.Track, { trackDisplayMode: trackDisplay, sliderMin: min, sliderMax: max, values: currentValues, orientation: orientation }),
257
263
  tickMarkArea),
258
264
  maxValueLabel && (react_1.default.createElement("span", { className: 'iui-slider-max' }, maxValueLabel))));
259
265
  });
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { TooltipProps } from '../Tooltip';
3
+ import { SliderProps } from './Slider';
3
4
  export declare type ThumbProps = {
4
5
  /**
5
6
  * Thumb value.
@@ -53,7 +54,7 @@ export declare type ThumbProps = {
53
54
  * Additional props for Thumb.
54
55
  */
55
56
  thumbProps?: React.HTMLAttributes<HTMLDivElement>;
56
- };
57
+ } & Pick<SliderProps, 'orientation'>;
57
58
  /**
58
59
  * Thumb is a local component used to show and modify the values maintained by the Slider.
59
60
  * Only one Thumb can be active at a time. A Thumb is made active when the user selects
@@ -39,7 +39,7 @@ var Tooltip_1 = require("../Tooltip");
39
39
  * it with pointer. Whenever a Thumb is active, focused, or hovered its tooltip is shown.
40
40
  */
41
41
  var Thumb = function (props) {
42
- var value = props.value, index = props.index, minVal = props.minVal, maxVal = props.maxVal, step = props.step, sliderMin = props.sliderMin, sliderMax = props.sliderMax, isActive = props.isActive, onThumbActivated = props.onThumbActivated, onThumbValueChanged = props.onThumbValueChanged, tooltipProps = props.tooltipProps, thumbProps = props.thumbProps, disabled = props.disabled;
42
+ var value = props.value, index = props.index, minVal = props.minVal, maxVal = props.maxVal, step = props.step, sliderMin = props.sliderMin, sliderMax = props.sliderMax, isActive = props.isActive, onThumbActivated = props.onThumbActivated, onThumbValueChanged = props.onThumbValueChanged, tooltipProps = props.tooltipProps, thumbProps = props.thumbProps, disabled = props.disabled, orientation = props.orientation;
43
43
  var thumbRef = react_1.default.useRef(null);
44
44
  var handleOnKeyDown = react_1.default.useCallback(function (event) {
45
45
  if (disabled || event.altKey) {
@@ -79,7 +79,7 @@ var Thumb = function (props) {
79
79
  }
80
80
  return value;
81
81
  }, [sliderMax, sliderMin, value]);
82
- var leftPercent = react_1.default.useMemo(function () {
82
+ var lowPercent = react_1.default.useMemo(function () {
83
83
  if (sliderMax === sliderMin) {
84
84
  return 0;
85
85
  }
@@ -87,6 +87,8 @@ var Thumb = function (props) {
87
87
  }, [adjustedValue, sliderMax, sliderMin]);
88
88
  var _c = thumbProps || {}, style = _c.style, className = _c.className, rest = __rest(_c, ["style", "className"]);
89
89
  return (react_1.default.createElement(Tooltip_1.Tooltip, __assign({ visible: isActive || hasFocus || isHovered, placement: 'top' }, tooltipProps),
90
- react_1.default.createElement("div", __assign({}, rest, { "data-index": index, ref: thumbRef, style: __assign(__assign({}, style), { left: "".concat(leftPercent, "%") }), className: (0, classnames_1.default)('iui-slider-thumb', { 'iui-active': isActive }, className), role: 'slider', tabIndex: disabled ? undefined : 0, "aria-valuemin": minVal, "aria-valuenow": value, "aria-valuemax": maxVal, "aria-disabled": disabled, onPointerDown: handlePointerDownOnThumb, onKeyDown: handleOnKeyDown, onFocus: function () { return setHasFocus(true); }, onBlur: function () { return setHasFocus(false); }, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } }))));
90
+ react_1.default.createElement("div", __assign({}, rest, { "data-index": index, ref: thumbRef, style: __assign(__assign({}, style), (orientation === 'horizontal'
91
+ ? { left: "".concat(lowPercent, "%") }
92
+ : { bottom: "".concat(lowPercent, "%") })), className: (0, classnames_1.default)('iui-slider-thumb', { 'iui-active': isActive }, className), role: 'slider', tabIndex: disabled ? undefined : 0, "aria-valuemin": minVal, "aria-valuenow": value, "aria-valuemax": maxVal, "aria-disabled": disabled, onPointerDown: handlePointerDownOnThumb, onKeyDown: handleOnKeyDown, onFocus: function () { return setHasFocus(true); }, onBlur: function () { return setHasFocus(false); }, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } }))));
91
93
  };
92
94
  exports.Thumb = Thumb;
@@ -1,10 +1,11 @@
1
1
  /// <reference types="react" />
2
- import { TrackDisplayMode } from './Slider';
2
+ import { SliderProps, TrackDisplayMode } from './Slider';
3
3
  export declare type TrackProps = {
4
4
  trackDisplayMode: TrackDisplayMode;
5
5
  sliderMin: number;
6
6
  sliderMax: number;
7
7
  values: number[];
8
+ orientation: SliderProps['orientation'];
8
9
  };
9
10
  /**
10
11
  * Track displays color segments above Rail. Which, if any, segments that are
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
14
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
15
  if (ar || !(i in from)) {
@@ -50,7 +61,7 @@ function generateSegments(values, min, max) {
50
61
  * colorized is based on `trackDisplayMode`.
51
62
  */
52
63
  var Track = function (props) {
53
- var trackDisplayMode = props.trackDisplayMode, sliderMin = props.sliderMin, sliderMax = props.sliderMax, values = props.values;
64
+ var trackDisplayMode = props.trackDisplayMode, sliderMin = props.sliderMin, sliderMax = props.sliderMax, values = props.values, orientation = props.orientation;
54
65
  var _a = react_1.default.useState(function () {
55
66
  return generateSegments(values, sliderMin, sliderMax);
56
67
  }), segments = _a[0], setSegments = _a[1];
@@ -59,14 +70,22 @@ var Track = function (props) {
59
70
  }, [values, sliderMin, sliderMax]);
60
71
  return (react_1.default.createElement(react_1.default.Fragment, null, 'none' !== trackDisplayMode &&
61
72
  segments.map(function (segment, index) {
62
- var leftPercent = segment.left >= sliderMin && sliderMax !== sliderMin
73
+ var lowPercent = segment.left >= sliderMin && sliderMax !== sliderMin
63
74
  ? (100.0 * (segment.left - sliderMin)) / (sliderMax - sliderMin)
64
75
  : 0;
65
- var rightPercent = segment.right >= sliderMin && sliderMax !== sliderMin
76
+ var highPercent = segment.right >= sliderMin && sliderMax !== sliderMin
66
77
  ? 100.0 -
67
78
  (100.0 * (segment.right - sliderMin)) / (sliderMax - sliderMin)
68
79
  : 100;
69
- return (react_1.default.createElement(react_1.default.Fragment, { key: index }, shouldDisplaySegment(index, trackDisplayMode) ? (react_1.default.createElement("div", { className: 'iui-slider-track', style: { left: "".concat(leftPercent, "%"), right: "".concat(rightPercent, "%") } })) : null));
80
+ return (react_1.default.createElement(react_1.default.Fragment, { key: index }, shouldDisplaySegment(index, trackDisplayMode) ? (react_1.default.createElement("div", { className: 'iui-slider-track', style: __assign({}, (orientation === 'horizontal'
81
+ ? {
82
+ left: "".concat(lowPercent, "%"),
83
+ right: "".concat(highPercent, "%"),
84
+ }
85
+ : {
86
+ top: "".concat(highPercent, "%"),
87
+ bottom: "".concat(lowPercent, "%"),
88
+ })) })) : null));
70
89
  })));
71
90
  };
72
91
  exports.Track = Track;
@@ -185,7 +185,8 @@ export declare type TableProps<T extends Record<string, unknown> = Record<string
185
185
  /**
186
186
  * Function that returns index of the row that you want to scroll to.
187
187
  *
188
- * It doesn't work with paginated tables and with lazy-loading.
188
+ * When using with lazy-loading table, you need to take care that row is already loaded.
189
+ * It doesn't work with paginated tables.
189
190
  * @beta
190
191
  * @example
191
192
  * <Table
@@ -333,7 +333,12 @@ var Table = function (props) {
333
333
  className: (0, classnames_1.default)('iui-table', (_a = {}, _a["iui-".concat(density)] = density !== 'default', _a), className),
334
334
  style: __assign({ minWidth: 0 }, style),
335
335
  }), ariaDataAttributes),
336
- react_1.default.createElement("div", { className: 'iui-table-header-wrapper', ref: headerRef },
336
+ react_1.default.createElement("div", { className: 'iui-table-header-wrapper', ref: headerRef, onScroll: function () {
337
+ if (headerRef.current && bodyRef.current) {
338
+ bodyRef.current.scrollLeft = headerRef.current.scrollLeft;
339
+ updateStickyState();
340
+ }
341
+ } },
337
342
  react_1.default.createElement("div", { className: 'iui-table-header' }, headerGroups.slice(1).map(function (headerGroup) {
338
343
  var headerGroupProps = headerGroup.getHeaderGroupProps({
339
344
  className: 'iui-row',
@@ -354,7 +359,8 @@ var Table = function (props) {
354
359
  (showFilterButton(column) ||
355
360
  showSortButton(column)) && (react_1.default.createElement("div", { className: 'iui-table-header-actions-container' },
356
361
  showFilterButton(column) && (react_1.default.createElement(filters_1.FilterToggle, { column: column, ownerDocument: ownerDocument })),
357
- showSortButton(column) && (react_1.default.createElement("div", { className: 'iui-cell-end-icon' }, column.isSorted && column.isSortedDesc ? (react_1.default.createElement(SortDown_1.default, { className: 'iui-icon iui-sort', "aria-hidden": true })) : (react_1.default.createElement(SortUp_1.default, { className: 'iui-icon iui-sort', "aria-hidden": true })))))),
362
+ showSortButton(column) && (react_1.default.createElement("div", { className: 'iui-cell-end-icon' }, column.isSortedDesc ||
363
+ (!column.isSorted && column.sortDescFirst) ? (react_1.default.createElement(SortDown_1.default, { className: 'iui-icon iui-sort', "aria-hidden": true })) : (react_1.default.createElement(SortUp_1.default, { className: 'iui-icon iui-sort', "aria-hidden": true })))))),
358
364
  isResizable &&
359
365
  column.isResizerVisible &&
360
366
  index !== headerGroup.headers.length - 1 && (react_1.default.createElement("div", __assign({}, column.getResizerProps(), { className: 'iui-resizer' }),
@@ -1,5 +1,11 @@
1
1
  /// <reference types="react" />
2
2
  import { HeaderProps } from 'react-table';
3
+ import { DropdownMenuProps } from '../../DropdownMenu';
4
+ declare type ActionColumnProps = {
5
+ columnManager?: boolean | {
6
+ dropdownMenuProps: Omit<DropdownMenuProps, 'menuItems' | 'children'>;
7
+ };
8
+ };
3
9
  /**
4
10
  * Action column that adds column manager to the Table header.
5
11
  * It is recommended to add this column to the end of the Table
@@ -19,9 +25,7 @@ import { HeaderProps } from 'react-table';
19
25
  * ),
20
26
  * },
21
27
  */
22
- export declare const ActionColumn: <T extends Record<string, unknown>>({ columnManager, }?: {
23
- columnManager?: boolean | undefined;
24
- }) => {
28
+ export declare const ActionColumn: <T extends Record<string, unknown>>({ columnManager, }?: ActionColumnProps) => {
25
29
  id: string;
26
30
  disableResizing: boolean;
27
31
  disableGroupBy: boolean;
@@ -33,3 +37,4 @@ export declare const ActionColumn: <T extends Record<string, unknown>>({ columnM
33
37
  disableReordering: boolean;
34
38
  Header: ({ allColumns, dispatch, state }: HeaderProps<T>) => JSX.Element | null;
35
39
  };
40
+ export {};
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
15
  };
@@ -17,6 +28,7 @@ var Menu_1 = require("../../Menu");
17
28
  var Table_1 = require("../Table");
18
29
  var selectionColumn_1 = require("./selectionColumn");
19
30
  var expanderColumn_1 = require("./expanderColumn");
31
+ var classnames_1 = __importDefault(require("classnames"));
20
32
  var ACTION_CELL_ID = 'iui-table-action';
21
33
  /**
22
34
  * Action column that adds column manager to the Table header.
@@ -52,6 +64,7 @@ var ActionColumn = function (_a) {
52
64
  Header: function (_a) {
53
65
  var allColumns = _a.allColumns, dispatch = _a.dispatch, state = _a.state;
54
66
  var _b = react_1.default.useState(false), isOpen = _b[0], setIsOpen = _b[1];
67
+ var buttonRef = react_1.default.useRef(null);
55
68
  if (!columnManager) {
56
69
  return null;
57
70
  }
@@ -77,13 +90,31 @@ var ActionColumn = function (_a) {
77
90
  }
78
91
  // Triggers an update to resize the widths of all visible columns
79
92
  dispatch({ type: Table_1.tableResizeStartAction });
93
+ // If some columns were resized and some columns visibility was enabled, then horizontal scrollbar appears
94
+ // and table is scrolled to the very left which means our visibility dropdown menu is not visible.
95
+ // So for better UX we need to scroll to that dropdown menu.
96
+ queueMicrotask(function () {
97
+ var _a;
98
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView();
99
+ });
80
100
  };
81
101
  return (react_1.default.createElement(Menu_1.MenuItem, { key: column.id, icon: react_1.default.createElement(Checkbox_1.Checkbox, { checked: checked, disabled: column.disableToggleVisibility, onClick: function (e) { return e.stopPropagation(); }, onChange: onClick, "aria-labelledby": "iui-column-".concat(column.id) }), onClick: onClick, disabled: column.disableToggleVisibility },
82
102
  react_1.default.createElement("div", { id: "iui-column-".concat(column.id) }, column.render('Header'))));
83
103
  });
84
104
  };
85
- return (react_1.default.createElement(DropdownMenu_1.DropdownMenu, { menuItems: headerCheckBoxes, onHide: function () { return setIsOpen(false); }, onShow: function () { return setIsOpen(true); } },
86
- react_1.default.createElement(IconButton_1.IconButton, { styleType: 'borderless', isActive: isOpen },
105
+ var dropdownMenuProps = typeof columnManager !== 'boolean'
106
+ ? columnManager.dropdownMenuProps
107
+ : {};
108
+ return (react_1.default.createElement(DropdownMenu_1.DropdownMenu, __assign({}, dropdownMenuProps, { menuItems: headerCheckBoxes, onHide: function (i) {
109
+ var _a;
110
+ setIsOpen(false);
111
+ (_a = dropdownMenuProps.onHide) === null || _a === void 0 ? void 0 : _a.call(dropdownMenuProps, i);
112
+ }, onShow: function (i) {
113
+ var _a;
114
+ setIsOpen(true);
115
+ (_a = dropdownMenuProps.onShow) === null || _a === void 0 ? void 0 : _a.call(dropdownMenuProps, i);
116
+ }, style: __assign({ maxHeight: '315px' }, dropdownMenuProps.style), className: (0, classnames_1.default)('iui-scroll', dropdownMenuProps.className) }),
117
+ react_1.default.createElement(IconButton_1.IconButton, { styleType: 'borderless', isActive: isOpen, ref: buttonRef },
87
118
  react_1.default.createElement(ColumnManager_1.default, null))));
88
119
  },
89
120
  };
@@ -7,5 +7,5 @@ declare type ScrollToRow<T extends Record<string, unknown>> = {
7
7
  declare type ScrollToRowProps<T extends Record<string, unknown>> = TableProps<T> & {
8
8
  page: Row<T>[];
9
9
  };
10
- export declare function useScrollToRow<T extends Record<string, unknown>>({ data, enableVirtualization, page, paginatorRenderer, scrollToRow, onBottomReached, }: ScrollToRowProps<T>): ScrollToRow<T>;
10
+ export declare function useScrollToRow<T extends Record<string, unknown>>({ data, enableVirtualization, page, paginatorRenderer, scrollToRow, }: ScrollToRowProps<T>): ScrollToRow<T>;
11
11
  export {};
@@ -10,7 +10,7 @@ exports.useScrollToRow = void 0;
10
10
  *--------------------------------------------------------------------------------------------*/
11
11
  var react_1 = __importDefault(require("react"));
12
12
  function useScrollToRow(_a) {
13
- var data = _a.data, enableVirtualization = _a.enableVirtualization, page = _a.page, paginatorRenderer = _a.paginatorRenderer, scrollToRow = _a.scrollToRow, onBottomReached = _a.onBottomReached;
13
+ var data = _a.data, enableVirtualization = _a.enableVirtualization, page = _a.page, paginatorRenderer = _a.paginatorRenderer, scrollToRow = _a.scrollToRow;
14
14
  var rowRefs = react_1.default.useRef({});
15
15
  // Refs prevents from having `page` and `data` as dependencies
16
16
  // therefore we avoid unnecessary scroll to row.
@@ -21,12 +21,12 @@ function useScrollToRow(_a) {
21
21
  // For virtualized tables, all we need to do is pass the index of the item
22
22
  // to the VirtualScroll component
23
23
  var scrollToIndex = react_1.default.useMemo(function () {
24
- if (!scrollToRow || paginatorRenderer || onBottomReached) {
24
+ if (!scrollToRow || paginatorRenderer) {
25
25
  return undefined;
26
26
  }
27
27
  var index = scrollToRow(pageRef.current, dataRef.current);
28
28
  return index < 0 ? undefined : index;
29
- }, [onBottomReached, paginatorRenderer, scrollToRow]);
29
+ }, [paginatorRenderer, scrollToRow]);
30
30
  // For non-virtualized tables, we need to add a ref to each row
31
31
  // and scroll to the element
32
32
  react_1.default.useEffect(function () {
@@ -1,5 +1,7 @@
1
1
  export { Alert } from './Alert';
2
2
  export type { AlertProps } from './Alert';
3
+ export { Backdrop } from './Backdrop';
4
+ export type { BackdropProps } from './Backdrop';
3
5
  export { Badge } from './Badge';
4
6
  export type { BadgeProps } from './Badge';
5
7
  export { Breadcrumbs } from './Breadcrumbs';
@@ -28,7 +30,7 @@ export { Fieldset } from './Fieldset';
28
30
  export type { FieldsetProps } from './Fieldset';
29
31
  export { FileUpload, FileUploadTemplate } from './FileUpload';
30
32
  export type { FileUploadProps, FileUploadTemplateProps } from './FileUpload';
31
- export { Footer } from './Footer';
33
+ export { Footer, defaultFooterElements } from './Footer';
32
34
  export type { FooterProps, FooterElement, TitleTranslations } from './Footer';
33
35
  export { Header, HeaderBreadcrumbs, HeaderButton, HeaderLogo } from './Header';
34
36
  export type { HeaderProps, HeaderBreadcrumbsProps, HeaderButtonProps, HeaderLogoProps, } from './Header';
@@ -59,7 +61,7 @@ export type { RadioProps } from './Radio';
59
61
  export { RadioTile, RadioTileGroup } from './RadioTiles';
60
62
  export type { RadioTileGroupProps, RadioTileProps } from './RadioTiles';
61
63
  export { Select } from './Select';
62
- export type { SelectProps, SelectOption, ItemRendererProps } from './Select';
64
+ export type { SelectProps, SelectOption, ItemRendererProps, SelectValueChangeEvent, } from './Select';
63
65
  export { SideNavigation, SidenavButton, SidenavSubmenu, SidenavSubmenuHeader, } from './SideNavigation';
64
66
  export type { SideNavigationProps, SidenavButtonProps, SidenavSubmenuProps, SidenavSubmenuHeaderProps, } from './SideNavigation';
65
67
  export { SkipToContentLink } from './SkipToContentLink';
package/cjs/core/index.js CHANGED
@@ -3,15 +3,17 @@ 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.MenuItemSkeleton = exports.MenuExtraContent = 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.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.Alert = void 0;
7
- exports.Text = exports.KbdKeys = 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 = void 0;
8
- exports.MiddleTextTruncation = exports.ColorValue = exports.useTheme = exports.getUserColor = exports.Wizard = exports.UserIconGroup = exports.UserIcon = void 0;
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;
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.
12
12
  *--------------------------------------------------------------------------------------------*/
13
13
  var Alert_1 = require("./Alert");
14
14
  Object.defineProperty(exports, "Alert", { enumerable: true, get: function () { return Alert_1.Alert; } });
15
+ var Backdrop_1 = require("./Backdrop");
16
+ Object.defineProperty(exports, "Backdrop", { enumerable: true, get: function () { return Backdrop_1.Backdrop; } });
15
17
  var Badge_1 = require("./Badge");
16
18
  Object.defineProperty(exports, "Badge", { enumerable: true, get: function () { return Badge_1.Badge; } });
17
19
  var Breadcrumbs_1 = require("./Breadcrumbs");
@@ -52,6 +54,7 @@ Object.defineProperty(exports, "FileUpload", { enumerable: true, get: function (
52
54
  Object.defineProperty(exports, "FileUploadTemplate", { enumerable: true, get: function () { return FileUpload_1.FileUploadTemplate; } });
53
55
  var Footer_1 = require("./Footer");
54
56
  Object.defineProperty(exports, "Footer", { enumerable: true, get: function () { return Footer_1.Footer; } });
57
+ Object.defineProperty(exports, "defaultFooterElements", { enumerable: true, get: function () { return Footer_1.defaultFooterElements; } });
55
58
  var Header_1 = require("./Header");
56
59
  Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return Header_1.Header; } });
57
60
  Object.defineProperty(exports, "HeaderBreadcrumbs", { enumerable: true, get: function () { return Header_1.HeaderBreadcrumbs; } });
@@ -42,7 +42,7 @@ var FocusTrap = function (props) {
42
42
  lastElement === null || lastElement === void 0 ? void 0 : lastElement.focus();
43
43
  }
44
44
  };
45
- return (react_1.default.createElement("div", null,
45
+ return (react_1.default.createElement(react_1.default.Fragment, null,
46
46
  react_1.default.createElement("div", { tabIndex: 0, onFocus: onFirstFocus, "aria-hidden": true }),
47
47
  react_1.default.cloneElement(children, {
48
48
  ref: (0, useMergedRefs_1.mergeRefs)(children.ref, childRef),
@@ -44,7 +44,7 @@ var MiddleTextTruncation = function (props) {
44
44
  var _b = (0, useOverflow_1.useOverflow)(text), ref = _b[0], visibleCount = _b[1];
45
45
  var truncatedText = react_1.default.useMemo(function () {
46
46
  if (visibleCount < text.length) {
47
- return "".concat(text.substr(0, visibleCount - endCharsCount - ELLIPSIS_CHAR.length)).concat(ELLIPSIS_CHAR).concat(text.substr(text.length - endCharsCount));
47
+ return "".concat(text.substring(0, visibleCount - endCharsCount - ELLIPSIS_CHAR.length)).concat(ELLIPSIS_CHAR).concat(text.substring(text.length - endCharsCount));
48
48
  }
49
49
  else {
50
50
  return text;
@@ -76,7 +76,10 @@ var useOverflow = function (items, disabled, orientation) {
76
76
  }
77
77
  else if (needsFullRerender.current) {
78
78
  var childrenSize = Array.from(containerRef.current.children).reduce(function (sum, child) { return sum + child["offset".concat(dimension)]; }, 0);
79
- var avgItemSize = childrenSize / visibleCount;
79
+ // Previous `useEffect` might have updated visible count, but we still have old one
80
+ // If it is 0, lets try to update it with items length.
81
+ var currentVisibleCount = visibleCount || Math.min(items.length, STARTING_MAX_ITEMS_COUNT);
82
+ var avgItemSize = childrenSize / currentVisibleCount;
80
83
  var visibleItems = Math.floor(availableSize / avgItemSize);
81
84
  if (!isNaN(visibleItems)) {
82
85
  // Doubling the visible items to overflow the container. Just to be safe.
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import '@itwin/itwinui-css/css/backdrop.css';
3
+ export declare type BackdropProps = {
4
+ /**
5
+ * Flag whether backdrop should be shown.
6
+ * @default true
7
+ */
8
+ isVisible?: boolean;
9
+ } & React.ComponentPropsWithRef<'div'>;
10
+ export declare const Backdrop: React.ForwardRefExoticComponent<Pick<BackdropProps, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "isVisible"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,35 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ /*---------------------------------------------------------------------------------------------
24
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
25
+ * See LICENSE.md in the project root for license terms and full copyright notice.
26
+ *--------------------------------------------------------------------------------------------*/
27
+ import React from 'react';
28
+ import cx from 'classnames';
29
+ import { useTheme } from '../utils';
30
+ import '@itwin/itwinui-css/css/backdrop.css';
31
+ export var Backdrop = React.forwardRef(function (props, ref) {
32
+ var _a = props.isVisible, isVisible = _a === void 0 ? true : _a, className = props.className, rest = __rest(props, ["isVisible", "className"]);
33
+ useTheme();
34
+ return (React.createElement("div", __assign({ className: cx('iui-backdrop', { 'iui-backdrop-visible': isVisible }, className), ref: ref }, rest)));
35
+ });
@@ -0,0 +1,2 @@
1
+ export { Backdrop } from './Backdrop';
2
+ export type { BackdropProps } from './Backdrop';
@@ -0,0 +1,5 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ export { Backdrop } from './Backdrop';
@@ -56,28 +56,15 @@ export var Breadcrumbs = React.forwardRef(function (props, ref) {
56
56
  useTheme();
57
57
  var _b = useOverflow(items), overflowRef = _b[0], visibleCount = _b[1];
58
58
  var refs = useMergedRefs(overflowRef, ref);
59
- var Separator = function () { return (React.createElement("li", { className: 'iui-breadcrumbs-separator', "aria-hidden": true }, separator !== null && separator !== void 0 ? separator : React.createElement(SvgChevronRight, null))); };
60
- var ListItem = function (_a) {
61
- var _b;
62
- var index = _a.index;
63
- var item = items[index];
64
- return (React.createElement("li", { className: 'iui-breadcrumbs-item iui-breadcrumbs-item-overrides' }, React.isValidElement(item)
65
- ? React.cloneElement(item, {
66
- 'aria-current': ((_b = item.props['aria-current']) !== null && _b !== void 0 ? _b : currentIndex === index)
67
- ? 'location'
68
- : undefined,
69
- })
70
- : item));
71
- };
72
59
  return (React.createElement("nav", __assign({ className: cx('iui-breadcrumbs', className), ref: refs, "aria-label": 'Breadcrumb' }, rest),
73
60
  React.createElement("ol", { className: 'iui-breadcrumbs-list' },
74
61
  visibleCount > 1 && (React.createElement(React.Fragment, null,
75
- React.createElement(ListItem, { index: 0 }),
76
- React.createElement(Separator, null))),
62
+ React.createElement(ListItem, { item: items[0], isActive: currentIndex === 0 }),
63
+ React.createElement(Separator, { separator: separator }))),
77
64
  items.length - visibleCount > 0 && (React.createElement(React.Fragment, null,
78
65
  React.createElement("li", { className: 'iui-breadcrumbs-item iui-breadcrumbs-item-overrides' },
79
66
  React.createElement("span", { className: 'iui-breadcrumbs-text' }, "\u2026")),
80
- React.createElement(Separator, null))),
67
+ React.createElement(Separator, { separator: separator }))),
81
68
  items
82
69
  .slice(visibleCount > 1
83
70
  ? items.length - visibleCount + 1
@@ -87,8 +74,21 @@ export var Breadcrumbs = React.forwardRef(function (props, ref) {
87
74
  ? 1 + (items.length - visibleCount) + _index
88
75
  : items.length - 1;
89
76
  return (React.createElement(React.Fragment, { key: index },
90
- React.createElement(ListItem, { index: index }),
91
- index < items.length - 1 && React.createElement(Separator, null)));
77
+ React.createElement(ListItem, { item: items[index], isActive: currentIndex === index }),
78
+ index < items.length - 1 && (React.createElement(Separator, { separator: separator }))));
92
79
  }))));
93
80
  });
81
+ var ListItem = function (_a) {
82
+ var _b;
83
+ var item = _a.item, isActive = _a.isActive;
84
+ return (React.createElement("li", { className: 'iui-breadcrumbs-item iui-breadcrumbs-item-overrides' }, React.isValidElement(item)
85
+ ? React.cloneElement(item, {
86
+ 'aria-current': ((_b = item.props['aria-current']) !== null && _b !== void 0 ? _b : isActive) ? 'location' : undefined,
87
+ })
88
+ : item));
89
+ };
90
+ var Separator = function (_a) {
91
+ var separator = _a.separator;
92
+ return (React.createElement("li", { className: 'iui-breadcrumbs-separator', "aria-hidden": true }, separator !== null && separator !== void 0 ? separator : React.createElement(SvgChevronRight, null)));
93
+ };
94
94
  export default Breadcrumbs;
@@ -66,9 +66,16 @@ export var ButtonGroup = React.forwardRef(function (props, ref) {
66
66
  'iui-button-group': orientation === 'horizontal',
67
67
  'iui-button-group-vertical': orientation === 'vertical',
68
68
  'iui-button-group-overflow-x': !!overflowButton && orientation === 'horizontal',
69
- }, className), "aria-orientation": orientation, ref: refs }, rest), !!overflowButton && visibleCount < items.length ? (React.createElement(React.Fragment, null,
70
- overflowButton && overflowPlacement === 'start' && (React.createElement("div", null, overflowButton(visibleCount))),
71
- items.slice(0, visibleCount - 1),
72
- overflowButton && overflowPlacement === 'end' && (React.createElement("div", null, overflowButton(visibleCount))))) : (items)));
69
+ }, className), "aria-orientation": orientation, ref: refs }, rest),
70
+ React.createElement(React.Fragment, null,
71
+ visibleCount < items.length &&
72
+ overflowButton &&
73
+ overflowPlacement === 'start' && (React.createElement("div", null, overflowButton(visibleCount))),
74
+ visibleCount < items.length
75
+ ? items.slice(0, visibleCount - 1)
76
+ : items,
77
+ visibleCount < items.length &&
78
+ overflowButton &&
79
+ overflowPlacement === 'end' && (React.createElement("div", null, overflowButton(visibleCount))))));
73
80
  });
74
81
  export default ButtonGroup;