@itwin/itwinui-react 1.37.1 → 1.38.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 (82) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/cjs/core/Breadcrumbs/Breadcrumbs.js +3 -5
  3. package/cjs/core/ColorPicker/ColorSwatch.d.ts +1 -1
  4. package/cjs/core/ComboBox/ComboBox.d.ts +4 -2
  5. package/cjs/core/ComboBox/ComboBox.js +129 -246
  6. package/cjs/core/ComboBox/ComboBoxDropdown.d.ts +8 -0
  7. package/cjs/core/ComboBox/ComboBoxDropdown.js +55 -0
  8. package/cjs/core/ComboBox/ComboBoxEndIcon.d.ts +5 -0
  9. package/cjs/core/ComboBox/ComboBoxEndIcon.js +54 -0
  10. package/cjs/core/ComboBox/ComboBoxInput.d.ts +5 -0
  11. package/cjs/core/ComboBox/ComboBoxInput.js +134 -0
  12. package/cjs/core/ComboBox/ComboBoxInputContainer.d.ts +8 -0
  13. package/cjs/core/ComboBox/ComboBoxInputContainer.js +45 -0
  14. package/cjs/core/ComboBox/ComboBoxMenu.d.ts +3 -0
  15. package/cjs/core/ComboBox/ComboBoxMenu.js +45 -0
  16. package/cjs/core/ComboBox/ComboBoxMenuItem.d.ts +21 -0
  17. package/cjs/core/ComboBox/ComboBoxMenuItem.js +65 -0
  18. package/cjs/core/ComboBox/helpers.d.ts +27 -0
  19. package/cjs/core/ComboBox/helpers.js +50 -0
  20. package/cjs/core/Modal/Modal.d.ts +1 -1
  21. package/cjs/core/Modal/Modal.js +6 -6
  22. package/cjs/core/Modal/ModalButtonBar.d.ts +1 -1
  23. package/cjs/core/Modal/ModalButtonBar.js +2 -2
  24. package/cjs/core/Modal/ModalContent.d.ts +1 -1
  25. package/cjs/core/Modal/ModalContent.js +2 -2
  26. package/cjs/core/RadioTiles/RadioTile.d.ts +1 -1
  27. package/cjs/core/RadioTiles/RadioTile.js +7 -9
  28. package/cjs/core/Slider/Thumb.js +15 -1
  29. package/cjs/core/Slider/Track.js +23 -12
  30. package/cjs/core/Table/Table.js +19 -7
  31. package/cjs/core/Table/cells/EditableCell.js +2 -1
  32. package/cjs/core/Table/filters/FilterToggle.js +3 -2
  33. package/cjs/core/Toast/ToastWrapper.d.ts +7 -5
  34. package/cjs/core/Toast/ToastWrapper.js +8 -4
  35. package/cjs/core/Toast/Toaster.d.ts +3 -0
  36. package/cjs/core/Toast/Toaster.js +66 -5
  37. package/cjs/core/utils/components/Popover.d.ts +1 -1
  38. package/cjs/core/utils/hooks/index.d.ts +1 -0
  39. package/cjs/core/utils/hooks/index.js +1 -0
  40. package/cjs/core/utils/hooks/useSafeContext.d.ts +6 -0
  41. package/cjs/core/utils/hooks/useSafeContext.js +23 -0
  42. package/esm/core/Breadcrumbs/Breadcrumbs.js +3 -5
  43. package/esm/core/ColorPicker/ColorSwatch.d.ts +1 -1
  44. package/esm/core/ComboBox/ComboBox.d.ts +4 -2
  45. package/esm/core/ComboBox/ComboBox.js +131 -248
  46. package/esm/core/ComboBox/ComboBoxDropdown.d.ts +8 -0
  47. package/esm/core/ComboBox/ComboBoxDropdown.js +49 -0
  48. package/esm/core/ComboBox/ComboBoxEndIcon.d.ts +5 -0
  49. package/esm/core/ComboBox/ComboBoxEndIcon.js +48 -0
  50. package/esm/core/ComboBox/ComboBoxInput.d.ts +5 -0
  51. package/esm/core/ComboBox/ComboBoxInput.js +128 -0
  52. package/esm/core/ComboBox/ComboBoxInputContainer.d.ts +8 -0
  53. package/esm/core/ComboBox/ComboBoxInputContainer.js +38 -0
  54. package/esm/core/ComboBox/ComboBoxMenu.d.ts +3 -0
  55. package/esm/core/ComboBox/ComboBoxMenu.js +39 -0
  56. package/esm/core/ComboBox/ComboBoxMenuItem.d.ts +21 -0
  57. package/esm/core/ComboBox/ComboBoxMenuItem.js +59 -0
  58. package/esm/core/ComboBox/helpers.d.ts +27 -0
  59. package/esm/core/ComboBox/helpers.js +43 -0
  60. package/esm/core/Modal/Modal.d.ts +1 -1
  61. package/esm/core/Modal/Modal.js +6 -6
  62. package/esm/core/Modal/ModalButtonBar.d.ts +1 -1
  63. package/esm/core/Modal/ModalButtonBar.js +2 -2
  64. package/esm/core/Modal/ModalContent.d.ts +1 -1
  65. package/esm/core/Modal/ModalContent.js +2 -2
  66. package/esm/core/RadioTiles/RadioTile.d.ts +1 -1
  67. package/esm/core/RadioTiles/RadioTile.js +7 -9
  68. package/esm/core/Slider/Thumb.js +15 -1
  69. package/esm/core/Slider/Track.js +23 -12
  70. package/esm/core/Table/Table.js +19 -7
  71. package/esm/core/Table/cells/EditableCell.js +2 -1
  72. package/esm/core/Table/filters/FilterToggle.js +3 -2
  73. package/esm/core/Toast/ToastWrapper.d.ts +7 -5
  74. package/esm/core/Toast/ToastWrapper.js +8 -3
  75. package/esm/core/Toast/Toaster.d.ts +3 -0
  76. package/esm/core/Toast/Toaster.js +66 -5
  77. package/esm/core/utils/components/Popover.d.ts +1 -1
  78. package/esm/core/utils/hooks/index.d.ts +1 -0
  79. package/esm/core/utils/hooks/index.js +1 -0
  80. package/esm/core/utils/hooks/useSafeContext.d.ts +6 -0
  81. package/esm/core/utils/hooks/useSafeContext.js +16 -0
  82. package/package.json +6 -34
@@ -0,0 +1,54 @@
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
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ComboBoxEndIcon = void 0;
29
+ /*---------------------------------------------------------------------------------------------
30
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
+ * See LICENSE.md in the project root for license terms and full copyright notice.
32
+ *--------------------------------------------------------------------------------------------*/
33
+ var classnames_1 = __importDefault(require("classnames"));
34
+ var react_1 = __importDefault(require("react"));
35
+ var utils_1 = require("../utils");
36
+ var helpers_1 = require("./helpers");
37
+ var CaretDownSmall_1 = __importDefault(require("@itwin/itwinui-icons-react/cjs/icons/CaretDownSmall"));
38
+ exports.ComboBoxEndIcon = react_1.default.forwardRef(function (props, forwardedRef) {
39
+ var className = props.className, children = props.children, onClickProp = props.onClick, disabled = props.disabled, isOpen = props.isOpen, rest = __rest(props, ["className", "children", "onClick", "disabled", "isOpen"]);
40
+ var dispatch = (0, utils_1.useSafeContext)(helpers_1.ComboBoxActionContext);
41
+ var toggleButtonRef = (0, utils_1.useSafeContext)(helpers_1.ComboBoxRefsContext).toggleButtonRef;
42
+ var refs = (0, utils_1.useMergedRefs)(toggleButtonRef, forwardedRef);
43
+ return (react_1.default.createElement("span", __assign({ ref: refs, className: (0, classnames_1.default)('iui-end-icon', {
44
+ 'iui-actionable': !disabled,
45
+ 'iui-disabled': disabled,
46
+ 'iui-open': isOpen,
47
+ }, className), onClick: function (e) {
48
+ onClickProp === null || onClickProp === void 0 ? void 0 : onClickProp(e);
49
+ if (!e.isDefaultPrevented()) {
50
+ dispatch([isOpen ? 'close' : 'open']);
51
+ }
52
+ } }, rest), children !== null && children !== void 0 ? children : react_1.default.createElement(CaretDownSmall_1.default, { "aria-hidden": true })));
53
+ });
54
+ exports.ComboBoxEndIcon.displayName = 'ComboBoxEndIcon';
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare const ComboBoxInput: React.ForwardRefExoticComponent<{
3
+ setFocus?: boolean | undefined;
4
+ size?: "small" | "large" | undefined;
5
+ } & Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,134 @@
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
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ComboBoxInput = void 0;
29
+ /*---------------------------------------------------------------------------------------------
30
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
+ * See LICENSE.md in the project root for license terms and full copyright notice.
32
+ *--------------------------------------------------------------------------------------------*/
33
+ var react_1 = __importDefault(require("react"));
34
+ var Input_1 = require("../Input");
35
+ var utils_1 = require("../utils");
36
+ var helpers_1 = require("./helpers");
37
+ exports.ComboBoxInput = react_1.default.forwardRef(function (props, forwardedRef) {
38
+ var onKeyDownProp = props.onKeyDown, onFocusProp = props.onFocus, rest = __rest(props, ["onKeyDown", "onFocus"]);
39
+ var _a = (0, utils_1.useSafeContext)(helpers_1.ComboBoxStateContext), isOpen = _a.isOpen, id = _a.id, focusedIndex = _a.focusedIndex;
40
+ var dispatch = (0, utils_1.useSafeContext)(helpers_1.ComboBoxActionContext);
41
+ var _b = (0, utils_1.useSafeContext)(helpers_1.ComboBoxRefsContext), inputRef = _b.inputRef, menuRef = _b.menuRef, optionsExtraInfoRef = _b.optionsExtraInfoRef;
42
+ var refs = (0, utils_1.useMergedRefs)(inputRef, forwardedRef);
43
+ var focusedIndexRef = react_1.default.useRef(focusedIndex !== null && focusedIndex !== void 0 ? focusedIndex : -1);
44
+ react_1.default.useEffect(function () {
45
+ focusedIndexRef.current = focusedIndex !== null && focusedIndex !== void 0 ? focusedIndex : -1;
46
+ }, [focusedIndex]);
47
+ var getIdFromIndex = function (index) {
48
+ var _a, _b, _c;
49
+ return ((_c = (_b = (_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.querySelector("[data-iui-index=\"".concat(index, "\"]"))) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : '');
50
+ };
51
+ var handleKeyDown = react_1.default.useCallback(function (event) {
52
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
53
+ onKeyDownProp === null || onKeyDownProp === void 0 ? void 0 : onKeyDownProp(event);
54
+ var length = (_a = Object.keys(optionsExtraInfoRef.current).length) !== null && _a !== void 0 ? _a : 0;
55
+ switch (event.key) {
56
+ case 'ArrowDown': {
57
+ event.preventDefault();
58
+ if (!isOpen) {
59
+ return dispatch(['open']);
60
+ }
61
+ if (length === 0) {
62
+ return;
63
+ }
64
+ if (focusedIndexRef.current === -1) {
65
+ return dispatch([
66
+ 'focus',
67
+ (_c = (_b = Object.values(optionsExtraInfoRef.current)) === null || _b === void 0 ? void 0 : _b[0].__originalIndex) !== null && _c !== void 0 ? _c : -1,
68
+ ]);
69
+ }
70
+ var nextIndex = focusedIndexRef.current;
71
+ do {
72
+ var currentElement = (_d = menuRef.current) === null || _d === void 0 ? void 0 : _d.querySelector("[data-iui-index=\"".concat(nextIndex, "\"]"));
73
+ var nextElement = (_e = currentElement === null || currentElement === void 0 ? void 0 : currentElement.nextElementSibling) !== null && _e !== void 0 ? _e : (_f = menuRef.current) === null || _f === void 0 ? void 0 : _f.querySelector('[data-iui-index]');
74
+ nextIndex = Number(nextElement === null || nextElement === void 0 ? void 0 : nextElement.getAttribute('data-iui-index'));
75
+ if ((nextElement === null || nextElement === void 0 ? void 0 : nextElement.ariaDisabled) !== 'true') {
76
+ return dispatch(['focus', nextIndex]);
77
+ }
78
+ } while (nextIndex !== focusedIndexRef.current);
79
+ break;
80
+ }
81
+ case 'ArrowUp': {
82
+ event.preventDefault();
83
+ if (!isOpen) {
84
+ return dispatch(['open']);
85
+ }
86
+ if (length === 0) {
87
+ return;
88
+ }
89
+ if (focusedIndexRef.current === -1) {
90
+ return dispatch([
91
+ 'focus',
92
+ (_h = (_g = Object.values(optionsExtraInfoRef.current)) === null || _g === void 0 ? void 0 : _g[length - 1].__originalIndex) !== null && _h !== void 0 ? _h : -1,
93
+ ]);
94
+ }
95
+ var prevIndex = focusedIndexRef.current;
96
+ do {
97
+ var currentElement = (_j = menuRef.current) === null || _j === void 0 ? void 0 : _j.querySelector("[data-iui-index=\"".concat(prevIndex, "\"]"));
98
+ var prevElement = (_k = currentElement === null || currentElement === void 0 ? void 0 : currentElement.previousElementSibling) !== null && _k !== void 0 ? _k : (_l = menuRef.current) === null || _l === void 0 ? void 0 : _l.querySelector('[data-iui-index]:last-of-type');
99
+ prevIndex = Number(prevElement === null || prevElement === void 0 ? void 0 : prevElement.getAttribute('data-iui-index'));
100
+ if ((prevElement === null || prevElement === void 0 ? void 0 : prevElement.ariaDisabled) !== 'true') {
101
+ return dispatch(['focus', prevIndex]);
102
+ }
103
+ } while (prevIndex !== focusedIndexRef.current);
104
+ break;
105
+ }
106
+ case 'Enter': {
107
+ event.preventDefault();
108
+ if (isOpen) {
109
+ dispatch(['select', focusedIndexRef.current]);
110
+ }
111
+ else {
112
+ dispatch(['open']);
113
+ }
114
+ break;
115
+ }
116
+ case 'Escape': {
117
+ event.preventDefault();
118
+ dispatch(['close']);
119
+ break;
120
+ }
121
+ case 'Tab':
122
+ dispatch(['close']);
123
+ break;
124
+ }
125
+ }, [dispatch, isOpen, menuRef, onKeyDownProp, optionsExtraInfoRef]);
126
+ var handleFocus = react_1.default.useCallback(function (event) {
127
+ dispatch(['open']);
128
+ onFocusProp === null || onFocusProp === void 0 ? void 0 : onFocusProp(event);
129
+ }, [dispatch, onFocusProp]);
130
+ return (react_1.default.createElement(Input_1.Input, __assign({ ref: refs, onKeyDown: handleKeyDown, onFocus: handleFocus, "aria-activedescendant": isOpen && focusedIndex != undefined && focusedIndex > -1
131
+ ? getIdFromIndex(focusedIndex)
132
+ : undefined, role: 'combobox', "aria-controls": isOpen ? "".concat(id, "-list") : undefined, "aria-autocomplete": 'list', spellCheck: false, autoCapitalize: 'none', autoCorrect: 'off' }, rest)));
133
+ });
134
+ exports.ComboBoxInput.displayName = 'ComboBoxInput';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { InputContainerProps } from '../utils';
3
+ declare type ComboBoxInputContainerProps = React.ComponentPropsWithoutRef<'div'> & Pick<InputContainerProps, 'status' | 'message' | 'disabled'>;
4
+ export declare const ComboBoxInputContainer: {
5
+ (props: ComboBoxInputContainerProps): JSX.Element;
6
+ displayName: string;
7
+ };
8
+ export {};
@@ -0,0 +1,45 @@
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
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ComboBoxInputContainer = void 0;
29
+ /*---------------------------------------------------------------------------------------------
30
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
+ * See LICENSE.md in the project root for license terms and full copyright notice.
32
+ *--------------------------------------------------------------------------------------------*/
33
+ var react_1 = __importDefault(require("react"));
34
+ var StatusMessage_1 = require("../StatusMessage");
35
+ var utils_1 = require("../utils");
36
+ var helpers_1 = require("./helpers");
37
+ var ComboBoxInputContainer = function (props) {
38
+ var className = props.className, status = props.status, message = props.message, children = props.children, rest = __rest(props, ["className", "status", "message", "children"]);
39
+ var id = (0, utils_1.useSafeContext)(helpers_1.ComboBoxStateContext).id;
40
+ return (react_1.default.createElement(utils_1.InputContainer, __assign({ className: className, status: status, statusMessage: typeof message === 'string' ? (react_1.default.createElement(StatusMessage_1.StatusMessage, { status: status }, message)) : (react_1.default.isValidElement(message) &&
41
+ react_1.default.cloneElement(message, { status: status })) }, rest, { id: id }),
42
+ react_1.default.createElement("div", { className: 'iui-input-with-icon' }, children)));
43
+ };
44
+ exports.ComboBoxInputContainer = ComboBoxInputContainer;
45
+ exports.ComboBoxInputContainer.displayName = 'ComboBoxInputContainer';
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { MenuProps } from '../Menu';
3
+ export declare const ComboBoxMenu: React.ForwardRefExoticComponent<Omit<MenuProps, "onClick"> & Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "key" | keyof React.HTMLAttributes<HTMLUListElement>> & React.RefAttributes<HTMLUListElement>>;
@@ -0,0 +1,45 @@
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
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ComboBoxMenu = void 0;
29
+ /*---------------------------------------------------------------------------------------------
30
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
+ * See LICENSE.md in the project root for license terms and full copyright notice.
32
+ *--------------------------------------------------------------------------------------------*/
33
+ var classnames_1 = __importDefault(require("classnames"));
34
+ var react_1 = __importDefault(require("react"));
35
+ var Menu_1 = require("../Menu");
36
+ var utils_1 = require("../utils");
37
+ var helpers_1 = require("./helpers");
38
+ exports.ComboBoxMenu = react_1.default.forwardRef(function (props, forwardedRef) {
39
+ var className = props.className, style = props.style, rest = __rest(props, ["className", "style"]);
40
+ var _a = (0, utils_1.useSafeContext)(helpers_1.ComboBoxStateContext), minWidth = _a.minWidth, id = _a.id;
41
+ var menuRef = (0, utils_1.useSafeContext)(helpers_1.ComboBoxRefsContext).menuRef;
42
+ var refs = (0, utils_1.useMergedRefs)(menuRef, forwardedRef);
43
+ return (react_1.default.createElement(Menu_1.Menu, __assign({ id: "".concat(id, "-list"), style: react_1.default.useMemo(function () { return (__assign({ minWidth: minWidth, maxWidth: "min(".concat(minWidth * 2, "px, 90vw)"), maxHeight: 300 }, style)); }, [minWidth, style]), setFocus: false, role: 'listbox', ref: refs, className: (0, classnames_1.default)('iui-scroll', className) }, rest)));
44
+ });
45
+ exports.ComboBoxMenu.displayName = 'ComboBoxMenu';
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export declare const ComboBoxMenuItem: React.MemoExoticComponent<React.ForwardRefExoticComponent<{
3
+ isSelected?: boolean | undefined;
4
+ disabled?: boolean | undefined;
5
+ value?: unknown;
6
+ onClick?: ((value?: unknown) => void) | undefined;
7
+ size?: "default" | "large" | undefined;
8
+ sublabel?: React.ReactNode;
9
+ icon?: JSX.Element | undefined;
10
+ badge?: JSX.Element | undefined;
11
+ role?: string | undefined;
12
+ subMenuItems?: JSX.Element[] | undefined;
13
+ children?: React.ReactNode;
14
+ } & {
15
+ title?: string | undefined;
16
+ id?: string | undefined;
17
+ } & {
18
+ style?: React.CSSProperties | undefined;
19
+ } & import("../utils").ClassNameProps & {
20
+ index: number;
21
+ } & React.RefAttributes<HTMLLIElement>>>;
@@ -0,0 +1,65 @@
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
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ComboBoxMenuItem = void 0;
29
+ /*---------------------------------------------------------------------------------------------
30
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
+ * See LICENSE.md in the project root for license terms and full copyright notice.
32
+ *--------------------------------------------------------------------------------------------*/
33
+ var classnames_1 = __importDefault(require("classnames"));
34
+ var react_1 = __importDefault(require("react"));
35
+ var utils_1 = require("../utils");
36
+ var helpers_1 = require("./helpers");
37
+ exports.ComboBoxMenuItem = react_1.default.memo(react_1.default.forwardRef(function (props, forwardedRef) {
38
+ var children = props.children, isSelected = props.isSelected, disabled = props.disabled, value = props.value, onClick = props.onClick, sublabel = props.sublabel, _a = props.size, size = _a === void 0 ? !!sublabel ? 'large' : 'default' : _a, icon = props.icon, badge = props.badge, className = props.className, _b = props.role, role = _b === void 0 ? 'menuitem' : _b, index = props.index, rest = __rest(props, ["children", "isSelected", "disabled", "value", "onClick", "sublabel", "size", "icon", "badge", "className", "role", "index"]);
39
+ var focusedIndex = (0, utils_1.useSafeContext)(helpers_1.ComboBoxStateContext).focusedIndex;
40
+ var focusRef = function (el) {
41
+ // will need to check for virtualization here too
42
+ if (focusedIndex === index) {
43
+ el === null || el === void 0 ? void 0 : el.scrollIntoView({ block: 'nearest' });
44
+ }
45
+ };
46
+ var refs = (0, utils_1.useMergedRefs)(forwardedRef, focusRef);
47
+ return (react_1.default.createElement("li", __assign({ className: (0, classnames_1.default)('iui-menu-item', {
48
+ 'iui-large': size === 'large',
49
+ 'iui-active': isSelected,
50
+ 'iui-disabled': disabled,
51
+ 'iui-focused': focusedIndex === index,
52
+ }, className), ref: refs, onClick: function () { return !disabled && (onClick === null || onClick === void 0 ? void 0 : onClick(value)); }, role: role, tabIndex: disabled || role === 'presentation' ? undefined : -1, "aria-selected": isSelected, "aria-disabled": disabled, "data-iui-index": index }, rest),
53
+ icon &&
54
+ react_1.default.cloneElement(icon, {
55
+ className: (0, classnames_1.default)(icon.props.className, 'iui-icon'),
56
+ }),
57
+ react_1.default.createElement("span", { className: 'iui-content' },
58
+ react_1.default.createElement("div", { className: 'iui-menu-label' }, children),
59
+ sublabel && react_1.default.createElement("div", { className: 'iui-menu-description' }, sublabel)),
60
+ badge &&
61
+ react_1.default.cloneElement(badge, {
62
+ className: (0, classnames_1.default)(badge.props.className, 'iui-icon'),
63
+ })));
64
+ }));
65
+ exports.ComboBoxMenuItem.displayName = 'ComboBoxMenuItem';
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ declare type ComboBoxAction = 'open' | 'close' | 'select' | 'focus';
3
+ export declare const comboBoxReducer: (state: {
4
+ isOpen: boolean;
5
+ selectedIndex: number;
6
+ focusedIndex: number;
7
+ }, [type, value]: [ComboBoxAction] | [ComboBoxAction, number | undefined]) => {
8
+ isOpen: boolean;
9
+ selectedIndex: number;
10
+ focusedIndex: number;
11
+ };
12
+ export declare const ComboBoxRefsContext: React.Context<{
13
+ inputRef: React.RefObject<HTMLInputElement>;
14
+ menuRef: React.RefObject<HTMLUListElement>;
15
+ toggleButtonRef: React.RefObject<HTMLSpanElement>;
16
+ optionsExtraInfoRef: React.MutableRefObject<Record<string, {
17
+ __originalIndex: number;
18
+ }>>;
19
+ } | undefined>;
20
+ export declare const ComboBoxStateContext: React.Context<{
21
+ isOpen: boolean;
22
+ id: string;
23
+ minWidth: number;
24
+ focusedIndex?: number | undefined;
25
+ } | undefined>;
26
+ export declare const ComboBoxActionContext: React.Context<((x: [ComboBoxAction] | [ComboBoxAction, number]) => void) | undefined>;
27
+ export {};
@@ -0,0 +1,50 @@
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
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ComboBoxActionContext = exports.ComboBoxStateContext = exports.ComboBoxRefsContext = exports.comboBoxReducer = void 0;
18
+ /*---------------------------------------------------------------------------------------------
19
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
20
+ * See LICENSE.md in the project root for license terms and full copyright notice.
21
+ *--------------------------------------------------------------------------------------------*/
22
+ var react_1 = __importDefault(require("react"));
23
+ var comboBoxReducer = function (state, _a) {
24
+ var _b;
25
+ var type = _a[0], value = _a[1];
26
+ switch (type) {
27
+ case 'open': {
28
+ return __assign(__assign({}, state), { isOpen: true });
29
+ }
30
+ case 'close': {
31
+ return __assign(__assign({}, state), { isOpen: false });
32
+ }
33
+ case 'select': {
34
+ return __assign(__assign({}, state), { isOpen: false, selectedIndex: value !== null && value !== void 0 ? value : state.selectedIndex, focusedIndex: value !== null && value !== void 0 ? value : state.focusedIndex });
35
+ }
36
+ case 'focus': {
37
+ return __assign(__assign({}, state), { focusedIndex: (_b = value !== null && value !== void 0 ? value : state.selectedIndex) !== null && _b !== void 0 ? _b : -1 });
38
+ }
39
+ default: {
40
+ return state;
41
+ }
42
+ }
43
+ };
44
+ exports.comboBoxReducer = comboBoxReducer;
45
+ exports.ComboBoxRefsContext = react_1.default.createContext(undefined);
46
+ exports.ComboBoxRefsContext.displayName = 'ComboBoxRefsContext';
47
+ exports.ComboBoxStateContext = react_1.default.createContext(undefined);
48
+ exports.ComboBoxStateContext.displayName = 'ComboBoxStateContext';
49
+ exports.ComboBoxActionContext = react_1.default.createContext(undefined);
50
+ exports.ComboBoxActionContext.displayName = 'ComboBoxActionContext';
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/modal.css';
3
+ import '@itwin/itwinui-css/css/dialog.css';
4
4
  export declare type ModalProps = {
5
5
  /**
6
6
  * Flag whether modal should be shown.
@@ -35,7 +35,7 @@ var react_dom_1 = __importDefault(require("react-dom"));
35
35
  var classnames_1 = __importDefault(require("classnames"));
36
36
  var Close_1 = __importDefault(require("@itwin/itwinui-icons-react/cjs/icons/Close"));
37
37
  var utils_1 = require("../utils");
38
- require("@itwin/itwinui-css/css/modal.css");
38
+ require("@itwin/itwinui-css/css/dialog.css");
39
39
  var IconButton_1 = require("../Buttons/IconButton");
40
40
  var react_transition_group_1 = require("react-transition-group");
41
41
  /**
@@ -118,12 +118,12 @@ var Modal = function (props) {
118
118
  onClose(event);
119
119
  }
120
120
  };
121
- return !!container ? (react_dom_1.default.createPortal(react_1.default.createElement(react_transition_group_1.CSSTransition, { in: isOpen, classNames: 'iui-modal-animation', timeout: { exit: 600 }, unmountOnExit: true },
121
+ return !!container ? (react_dom_1.default.createPortal(react_1.default.createElement(react_transition_group_1.CSSTransition, { in: isOpen, classNames: 'iui-dialog-animation', timeout: { exit: 600 }, unmountOnExit: true },
122
122
  react_1.default.createElement(utils_1.FocusTrap, null,
123
- react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-modal', { 'iui-modal-full-page': styleType === 'fullPage' }, { 'iui-modal-visible': isOpen }, className), tabIndex: -1, onKeyDown: handleKeyDown, ref: overlayRef, onMouseDown: handleMouseDown }, rest),
124
- react_1.default.createElement("div", { className: 'iui-modal-dialog', id: id, style: style, role: 'dialog', "aria-modal": 'true' },
125
- react_1.default.createElement("div", { className: 'iui-title-bar' },
126
- react_1.default.createElement("div", { className: 'iui-title' }, title),
123
+ react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-dialog-backdrop', { 'iui-dialog-default': styleType === 'default' }, { 'iui-dialog-full-page': styleType === 'fullPage' }, { 'iui-dialog-visible': isOpen }, className), tabIndex: -1, onKeyDown: handleKeyDown, ref: overlayRef, onMouseDown: handleMouseDown }, rest),
124
+ react_1.default.createElement("div", { className: 'iui-dialog', id: id, style: style, role: 'dialog', "aria-modal": 'true' },
125
+ react_1.default.createElement("div", { className: 'iui-dialog-title-bar' },
126
+ react_1.default.createElement("div", { className: 'iui-dialog-title' }, title),
127
127
  isDismissible && (react_1.default.createElement(IconButton_1.IconButton, { size: 'small', styleType: 'borderless', onClick: onClose, "aria-label": 'Close' },
128
128
  react_1.default.createElement(Close_1.default, null)))),
129
129
  children)))), container)) : (react_1.default.createElement(react_1.default.Fragment, null));
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/modal.css';
3
+ import '@itwin/itwinui-css/css/dialog.css';
4
4
  export declare type ModalButtonBarProps = {
5
5
  /**
6
6
  * Buttons in the modal bar.
@@ -33,14 +33,14 @@ exports.ModalButtonBar = void 0;
33
33
  var react_1 = __importDefault(require("react"));
34
34
  var classnames_1 = __importDefault(require("classnames"));
35
35
  var utils_1 = require("../utils");
36
- require("@itwin/itwinui-css/css/modal.css");
36
+ require("@itwin/itwinui-css/css/dialog.css");
37
37
  /**
38
38
  * Container for Buttons in modal.
39
39
  */
40
40
  var ModalButtonBar = function (props) {
41
41
  var children = props.children, className = props.className, rest = __rest(props, ["children", "className"]);
42
42
  (0, utils_1.useTheme)();
43
- return (react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-button-bar', className) }, rest), children));
43
+ return (react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-dialog-button-bar', className) }, rest), children));
44
44
  };
45
45
  exports.ModalButtonBar = ModalButtonBar;
46
46
  exports.default = exports.ModalButtonBar;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/modal.css';
3
+ import '@itwin/itwinui-css/css/dialog.css';
4
4
  export declare type ModalContentProps = {
5
5
  /**
6
6
  * Main content in the `Modal`.
@@ -33,14 +33,14 @@ exports.ModalContent = void 0;
33
33
  var react_1 = __importDefault(require("react"));
34
34
  var classnames_1 = __importDefault(require("classnames"));
35
35
  var utils_1 = require("../utils");
36
- require("@itwin/itwinui-css/css/modal.css");
36
+ require("@itwin/itwinui-css/css/dialog.css");
37
37
  /**
38
38
  * Container for content in `Modal`.
39
39
  */
40
40
  var ModalContent = function (props) {
41
41
  var children = props.children, className = props.className, rest = __rest(props, ["children", "className"]);
42
42
  (0, utils_1.useTheme)();
43
- return (react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-modal-content', className) }, rest), children));
43
+ return (react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)('iui-dialog-content', className) }, rest), children));
44
44
  };
45
45
  exports.ModalContent = ModalContent;
46
46
  exports.default = exports.ModalContent;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import '@itwin/itwinui-css/css/inputs.css';
2
+ import '@itwin/itwinui-css/css/radio-tile.css';
3
3
  export declare type RadioTileProps = {
4
4
  /**
5
5
  * Icon to be used.
@@ -30,11 +30,10 @@ exports.RadioTile = void 0;
30
30
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
31
  * See LICENSE.md in the project root for license terms and full copyright notice.
32
32
  *--------------------------------------------------------------------------------------------*/
33
- var Checkmark_1 = __importDefault(require("@itwin/itwinui-icons-react/cjs/icons/Checkmark"));
34
33
  var classnames_1 = __importDefault(require("classnames"));
35
34
  var react_1 = __importDefault(require("react"));
36
35
  var utils_1 = require("../utils");
37
- require("@itwin/itwinui-css/css/inputs.css");
36
+ require("@itwin/itwinui-css/css/radio-tile.css");
38
37
  /**
39
38
  * RadioTile component to be used in RadioTileGroup component
40
39
  * @example
@@ -50,15 +49,14 @@ exports.RadioTile = react_1.default.forwardRef(function (props, ref) {
50
49
  inputElementRef.current.focus();
51
50
  }
52
51
  }, [setFocus]);
53
- return (react_1.default.createElement("label", { className: className, style: style },
54
- react_1.default.createElement("input", __assign({ type: 'radio', ref: refs }, rest)),
55
- react_1.default.createElement("div", { className: 'iui-radio-tile' },
56
- react_1.default.createElement(Checkmark_1.default, { className: 'iui-checkmark', "aria-hidden": true }),
52
+ return (react_1.default.createElement("label", { className: (0, classnames_1.default)('iui-radio-tile', className), style: style },
53
+ react_1.default.createElement("input", __assign({ className: 'iui-radio-tile-input', type: 'radio', ref: refs }, rest)),
54
+ react_1.default.createElement("div", { className: 'iui-radio-tile-content' },
57
55
  icon &&
58
56
  react_1.default.cloneElement(icon, {
59
- className: (0, classnames_1.default)('iui-icon', icon.props.className),
57
+ className: (0, classnames_1.default)('iui-radio-tile-icon', icon.props.className),
60
58
  }),
61
- label && react_1.default.createElement("div", { className: 'iui-label' }, label),
62
- description && react_1.default.createElement("div", { className: 'iui-description' }, description))));
59
+ label && react_1.default.createElement("div", { className: 'iui-radio-tile-label' }, label),
60
+ description && (react_1.default.createElement("div", { className: 'iui-radio-tile-sublabel' }, description)))));
63
61
  });
64
62
  exports.default = exports.RadioTile;
@@ -70,7 +70,21 @@ var Thumb = function (props) {
70
70
  }, [disabled, index, onThumbActivated]);
71
71
  var _a = react_1.default.useState(false), hasFocus = _a[0], setHasFocus = _a[1];
72
72
  var _b = react_1.default.useState(false), isHovered = _b[0], setIsHovered = _b[1];
73
- var leftPercent = (100.0 * (value - sliderMin)) / (sliderMax - sliderMin);
73
+ var adjustedValue = react_1.default.useMemo(function () {
74
+ if (value < sliderMin) {
75
+ return sliderMin;
76
+ }
77
+ if (value > sliderMax) {
78
+ return sliderMax;
79
+ }
80
+ return value;
81
+ }, [sliderMax, sliderMin, value]);
82
+ var leftPercent = react_1.default.useMemo(function () {
83
+ if (sliderMax === sliderMin) {
84
+ return 0;
85
+ }
86
+ return (100.0 * (adjustedValue - sliderMin)) / (sliderMax - sliderMin);
87
+ }, [adjustedValue, sliderMax, sliderMin]);
74
88
  var _c = thumbProps || {}, style = _c.style, className = _c.className, rest = __rest(_c, ["style", "className"]);
75
89
  return (react_1.default.createElement(Tooltip_1.Tooltip, __assign({ visible: isActive || hasFocus || isHovered, placement: 'top' }, tooltipProps),
76
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); } }))));