@plesk/ui-library 3.40.7 → 3.40.9

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 (113) hide show
  1. package/cjs/components/Action/Action.js +1 -1
  2. package/cjs/components/Badge/Badge.js +1 -1
  3. package/cjs/components/Button/Button.js +1 -1
  4. package/cjs/components/Card/Card.js +3 -3
  5. package/cjs/components/CardList/CardListToolbar.js +1 -1
  6. package/cjs/components/CodeEditor/CodeEditor.js +1 -1
  7. package/cjs/components/ComboBox/ComboBox.js +1 -1
  8. package/cjs/components/ComboBoxDropdown/ComboBoxDropdown.js +2 -2
  9. package/cjs/components/Cuttable/Cuttable.js +59 -88
  10. package/cjs/components/Cuttable/useContentOverflow.js +35 -0
  11. package/cjs/components/Dialog/Dialog.js +2 -2
  12. package/cjs/components/Drawer/Drawer.js +1 -1
  13. package/cjs/components/Dropdown/Dropdown.js +1 -1
  14. package/cjs/components/Form/Form.js +1 -1
  15. package/cjs/components/Icon/utils.js +1 -1
  16. package/cjs/components/Item/Item.js +1 -1
  17. package/cjs/components/ItemList/ItemList.js +3 -3
  18. package/cjs/components/Layer/Layer.js +2 -2
  19. package/cjs/components/List/List.js +4 -4
  20. package/cjs/components/List/ListActions.js +2 -2
  21. package/cjs/components/LocaleProvider/LocaleProvider.js +1 -1
  22. package/cjs/components/Media/Media.js +1 -1
  23. package/cjs/components/Menu/Menu.js +1 -1
  24. package/cjs/components/Overlay/Overlay.js +1 -1
  25. package/cjs/components/Progress/Progress.js +1 -1
  26. package/cjs/components/SegmentedControl/ButtonGroupControl.js +65 -0
  27. package/cjs/components/SegmentedControl/DropdownControl.js +46 -0
  28. package/cjs/components/SegmentedControl/SegmentedControl.js +70 -265
  29. package/cjs/components/SegmentedControl/getSelectedValues.js +18 -0
  30. package/cjs/components/SegmentedControl/useResponsive.js +29 -0
  31. package/cjs/components/SegmentedControl/useSelected.js +55 -0
  32. package/cjs/components/Select/Select.js +2 -2
  33. package/cjs/components/Squeezer/Squeezer.js +10 -88
  34. package/cjs/components/Tabs/Tabs.js +1 -1
  35. package/cjs/components/Toaster/Toaster.js +1 -1
  36. package/cjs/components/Toolbar/RegistryContext.js +13 -8
  37. package/cjs/components/Toolbar/ToolbarMenu.js +2 -2
  38. package/cjs/components/Tour/Tour.js +1 -1
  39. package/cjs/components/Translate/isLikeText.js +1 -1
  40. package/cjs/hooks/index.js +7 -0
  41. package/cjs/hooks/useSqueeze.js +2 -1
  42. package/cjs/index.js +1 -1
  43. package/dist/plesk-ui-library-rtl.css +1 -1
  44. package/dist/plesk-ui-library-rtl.css.map +1 -1
  45. package/dist/plesk-ui-library.css +1 -1
  46. package/dist/plesk-ui-library.css.map +1 -1
  47. package/dist/plesk-ui-library.js +519 -500
  48. package/dist/plesk-ui-library.js.map +1 -1
  49. package/dist/plesk-ui-library.min.js +4 -4
  50. package/dist/plesk-ui-library.min.js.map +1 -1
  51. package/esm/components/Action/Action.js +1 -1
  52. package/esm/components/Badge/Badge.js +1 -1
  53. package/esm/components/Button/Button.js +1 -1
  54. package/esm/components/Card/Card.js +3 -3
  55. package/esm/components/CardList/CardListToolbar.js +1 -1
  56. package/esm/components/CodeEditor/CodeEditor.js +1 -1
  57. package/esm/components/ComboBox/ComboBox.js +1 -1
  58. package/esm/components/ComboBoxDropdown/ComboBoxDropdown.js +2 -2
  59. package/esm/components/Cuttable/Cuttable.js +60 -89
  60. package/esm/components/Cuttable/useContentOverflow.js +28 -0
  61. package/esm/components/Dialog/Dialog.js +2 -2
  62. package/esm/components/Drawer/Drawer.js +1 -1
  63. package/esm/components/Dropdown/Dropdown.js +1 -1
  64. package/esm/components/Form/Form.js +1 -1
  65. package/esm/components/Icon/utils.js +1 -1
  66. package/esm/components/Item/Item.js +1 -1
  67. package/esm/components/ItemList/ItemList.js +3 -3
  68. package/esm/components/Layer/Layer.js +2 -2
  69. package/esm/components/List/List.js +4 -4
  70. package/esm/components/List/ListActions.js +2 -2
  71. package/esm/components/LocaleProvider/LocaleProvider.js +1 -1
  72. package/esm/components/Media/Media.js +1 -1
  73. package/esm/components/Menu/Menu.js +1 -1
  74. package/esm/components/Overlay/Overlay.js +1 -1
  75. package/esm/components/Progress/Progress.js +1 -1
  76. package/esm/components/SegmentedControl/ButtonGroupControl.js +58 -0
  77. package/esm/components/SegmentedControl/DropdownControl.js +37 -0
  78. package/esm/components/SegmentedControl/SegmentedControl.js +71 -264
  79. package/esm/components/SegmentedControl/getSelectedValues.js +11 -0
  80. package/esm/components/SegmentedControl/useResponsive.js +21 -0
  81. package/esm/components/SegmentedControl/useSelected.js +48 -0
  82. package/esm/components/Select/Select.js +2 -2
  83. package/esm/components/Squeezer/Squeezer.js +11 -88
  84. package/esm/components/Tabs/Tabs.js +1 -1
  85. package/esm/components/Toaster/Toaster.js +1 -1
  86. package/esm/components/Toolbar/RegistryContext.js +13 -8
  87. package/esm/components/Toolbar/ToolbarMenu.js +2 -2
  88. package/esm/components/Tour/Tour.js +1 -1
  89. package/esm/components/Translate/isLikeText.js +1 -1
  90. package/esm/hooks/index.js +1 -0
  91. package/esm/hooks/useSqueeze.js +2 -1
  92. package/esm/index.js +1 -1
  93. package/package.json +19 -19
  94. package/styleguide/build/bundle.56f21860.js +2 -0
  95. package/styleguide/index.html +2 -2
  96. package/types/src/components/Cuttable/Cuttable.d.ts +3 -25
  97. package/types/src/components/Cuttable/useContentOverflow.d.ts +8 -0
  98. package/types/src/components/List/List.d.ts +1 -0
  99. package/types/src/components/SegmentedControl/ButtonGroupControl.d.ts +12 -0
  100. package/types/src/components/SegmentedControl/DropdownControl.d.ts +8 -0
  101. package/types/src/components/SegmentedControl/SegmentedControl.d.ts +6 -50
  102. package/types/src/components/SegmentedControl/getSelectedValues.d.ts +1 -0
  103. package/types/src/components/SegmentedControl/index.d.ts +1 -1
  104. package/types/src/components/SegmentedControl/types.d.ts +11 -0
  105. package/types/src/components/SegmentedControl/useResponsive.d.ts +6 -0
  106. package/types/src/components/SegmentedControl/useSelected.d.ts +17 -0
  107. package/types/src/components/Squeezer/Squeezer.d.ts +5 -21
  108. package/types/src/components/Toolbar/RegistryContext.d.ts +2 -2
  109. package/types/src/components/index.d.ts +1 -1
  110. package/types/src/hooks/index.d.ts +2 -0
  111. package/types/src/hooks/useSqueeze.d.ts +1 -4
  112. package/styleguide/build/bundle.52d1d9a1.js +0 -2
  113. /package/styleguide/build/{bundle.52d1d9a1.js.LICENSE.txt → bundle.56f21860.js.LICENSE.txt} +0 -0
@@ -5,291 +5,96 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.SEGMENTED_CONTROL_BASE_CLASS_NAME = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
8
  var _classnames = _interopRequireDefault(require("classnames"));
10
9
  var _react = require("react");
11
10
  var _constants = require("../../constants");
12
- var _Button = _interopRequireDefault(require("../Button"));
13
- var _ButtonGroup = _interopRequireDefault(require("../ButtonGroup"));
14
- var _Dropdown = _interopRequireDefault(require("../Dropdown"));
15
- var _Menu = _interopRequireWildcard(require("../Menu"));
16
11
  var _ResponsiveContext = _interopRequireDefault(require("../ResponsiveContext"));
17
12
  var _Squeezer = _interopRequireDefault(require("../Squeezer"));
13
+ var _DropdownControl = _interopRequireDefault(require("./DropdownControl"));
14
+ var _ButtonGroupControl = _interopRequireDefault(require("./ButtonGroupControl"));
15
+ var _useResponsive = require("./useResponsive");
16
+ var _useSelected = require("./useSelected");
18
17
  var _jsxRuntime = require("react/jsx-runtime");
19
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
18
  // Copyright 1999-2023. Plesk International GmbH. All rights reserved.
22
19
 
23
- const alphaSort = (a, b) => a > b ? 1 : -1;
24
20
  const SEGMENTED_CONTROL_BASE_CLASS_NAME = exports.SEGMENTED_CONTROL_BASE_CLASS_NAME = `${_constants.CLS_PREFIX}segmented-control`;
25
21
 
26
22
  /**
27
- * `Segmented Control` is a group of several [Buttons](#!/Button)
23
+ * `Segmented Control` is a group of several [Buttons](#!/Button)
28
24
  * each of which functions as a mutually exclusive option.
29
25
  * @since 0.0.68
30
26
  */
31
- class SegmentedControl extends _react.Component {
32
- constructor() {
33
- super(...arguments);
34
- (0, _defineProperty2.default)(this, "state", {
35
- selected: this.props.selected,
36
- monoWidth: 0
37
- });
38
- (0, _defineProperty2.default)(this, "context", void 0);
39
- (0, _defineProperty2.default)(this, "isCompact", false);
40
- (0, _defineProperty2.default)(this, "rootRef", /*#__PURE__*/(0, _react.createRef)());
41
- (0, _defineProperty2.default)(this, "adjustMonospaced", () => {
42
- const {
43
- baseClassName,
44
- monospaced
45
- } = this.props;
46
- if (monospaced) {
47
- let monoWidth = 0;
48
- this.rootRef.current?.querySelectorAll(`.${baseClassName}__button`).forEach(el => {
49
- monoWidth = Math.max(monoWidth, el.getBoundingClientRect().width);
50
- });
51
- if (monoWidth !== this.state.monoWidth) {
52
- this.setState({
53
- monoWidth
54
- });
55
- }
56
- }
57
- });
58
- (0, _defineProperty2.default)(this, "handleChange", value => () => {
59
- const {
60
- multiple,
61
- onChange
62
- } = this.props;
63
- const {
64
- selected
65
- } = this.state;
66
- let prevSelected = selected;
67
- let newSelected;
68
- if (multiple) {
69
- const isSelectedArray = Array.isArray(selected);
70
- newSelected = isSelectedArray ? [...selected] : [];
71
- if (!isSelectedArray || selected.indexOf(value) === -1) {
72
- newSelected.push(value);
73
- } else {
74
- newSelected.splice(selected.indexOf(value), 1);
75
- }
76
- newSelected.sort(alphaSort);
77
- if (isSelectedArray) {
78
- prevSelected = [...selected].sort(alphaSort);
79
- }
80
- } else {
81
- newSelected = value;
82
- }
83
- if (JSON.stringify(prevSelected) !== JSON.stringify(newSelected)) {
84
- this.setState({
85
- selected: newSelected
86
- });
87
- onChange?.(newSelected);
88
- }
89
- });
90
- (0, _defineProperty2.default)(this, "compact", () => {
91
- if (this.isCompact) {
92
- return false;
93
- }
94
- this.isCompact = true;
95
- this.forceUpdate();
96
- return true;
97
- });
98
- (0, _defineProperty2.default)(this, "uncompact", () => {
99
- if (!this.isCompact) {
100
- return false;
101
- }
102
- this.isCompact = false;
103
- this.forceUpdate();
104
- return true;
105
- });
106
- }
107
- static getDerivedStateFromProps(props, state) {
108
- const {
109
- selected,
110
- multiple
111
- } = props;
112
- const {
113
- prevSelected
114
- } = state;
115
- const nextState = {
116
- selected: state.selected
117
- };
118
- if (selected !== prevSelected) {
119
- nextState.selected = selected;
120
- }
121
- if (multiple && nextState.selected && !(nextState.selected instanceof Array)) {
122
- nextState.selected = [nextState.selected];
123
- }
124
- nextState.prevSelected = selected;
125
- return nextState;
126
- }
127
- componentDidMount() {
128
- this.adjustMonospaced();
129
- }
130
- componentDidUpdate() {
131
- this.adjustMonospaced();
132
- }
133
- isResponsive() {
134
- return this.context === undefined ? this.isCompact : this.context;
135
- }
136
- renderControl() {
137
- const {
138
- buttons,
139
- multiple
140
- } = this.props;
141
- const hasIcons = buttons.some(_ref => {
27
+ const SegmentedControl = _ref => {
28
+ let {
29
+ label,
30
+ labelPlacement = 'top',
31
+ buttons,
32
+ monospaced = false,
33
+ multiple = false,
34
+ selected: externalSelected,
35
+ onChange,
36
+ inline = false,
37
+ ghost = false,
38
+ className,
39
+ baseClassName = SEGMENTED_CONTROL_BASE_CLASS_NAME,
40
+ ...props
41
+ } = _ref;
42
+ const rootRef = (0, _react.useRef)(null);
43
+ const {
44
+ isResponsive,
45
+ isInResponsiveContext,
46
+ ...squeezerProps
47
+ } = (0, _useResponsive.useResponsive)();
48
+ const {
49
+ selectedValues,
50
+ handleChange
51
+ } = (0, _useSelected.useSelected)({
52
+ multiple,
53
+ externalSelected,
54
+ onChange
55
+ });
56
+ const renderControl = () => {
57
+ const hasIcons = buttons.some(_ref2 => {
142
58
  let {
143
59
  icon
144
- } = _ref;
60
+ } = _ref2;
145
61
  return !!icon;
146
62
  });
147
- if (!hasIcons && !multiple && this.isResponsive()) {
148
- return this.renderDropdown();
63
+ if (!hasIcons && !multiple && isResponsive) {
64
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DropdownControl.default, {
65
+ buttons: buttons,
66
+ selected: selectedValues[0],
67
+ onClick: handleChange
68
+ });
149
69
  }
150
- return this.renderButtonGroup();
151
- }
152
- renderDropdown() {
153
- const {
154
- buttons,
155
- onChange
156
- } = this.props;
157
- const {
158
- selected
159
- } = this.state;
160
- const {
161
- title = ''
162
- } = buttons.find(button => button.value === selected) || {};
163
- const menu = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Menu.default, {
164
- children: buttons.map(_ref2 => {
165
- let {
166
- title,
167
- value,
168
- ...buttonProps
169
- } = _ref2;
170
- const menuItemProps = {};
171
- if (onChange !== null) {
172
- menuItemProps.onClick = this.handleChange(value);
173
- }
174
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Menu.MenuItem, {
175
- ...buttonProps,
176
- ...menuItemProps,
177
- children: title
178
- }, `${value}`);
179
- })
180
- });
181
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default, {
182
- menu: menu,
183
- children: title
184
- });
185
- }
186
- renderButtonGroup() {
187
- const {
188
- buttons,
189
- monospaced,
190
- multiple,
191
- onChange,
192
- ghost,
193
- baseClassName
194
- } = this.props;
195
- const {
196
- selected,
197
- monoWidth
198
- } = this.state;
199
- const isCollapsed = this.state.compact;
200
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonGroup.default, {
201
- className: `${baseClassName}__button-group`,
202
- children: buttons.map(_ref3 => {
203
- let {
204
- value,
205
- title,
206
- ...buttonProps
207
- } = _ref3;
208
- // uncontrolled
209
- const handler = {};
210
- if (onChange !== null) {
211
- handler.onClick = this.handleChange(value);
212
- }
213
- let buttonSelected = false;
214
- if (multiple && selected && selected instanceof Array && selected.indexOf(value) !== -1) {
215
- buttonSelected = true;
216
- } else if (!multiple && selected === value) {
217
- buttonSelected = true;
218
- }
219
- buttonProps.className = (0, _classnames.default)(buttonProps.className, `${baseClassName}__button`);
220
- if (!isCollapsed && monospaced && monoWidth) {
221
- buttonProps.style = {
222
- width: monoWidth,
223
- ...buttonProps.style
224
- };
225
- }
226
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
227
- selected: buttonSelected,
228
- ghost: ghost,
229
- ...handler,
230
- ...buttonProps,
231
- children: title
232
- }, `${value}`);
233
- })
234
- });
235
- }
236
- render() {
237
- const {
238
- label,
239
- labelPlacement,
240
- buttons,
241
- monospaced,
242
- multiple,
243
- selected: selectedProp,
244
- onChange,
245
- inline,
246
- ghost,
247
- className,
248
- baseClassName,
249
- ...props
250
- } = this.props;
251
- const isCollapsed = this.isResponsive();
252
70
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ResponsiveContext.default.Provider, {
253
- value: isCollapsed,
254
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Squeezer.default, {
255
- compact: this.compact,
256
- uncompact: this.uncompact,
257
- innerRef: el => {
258
- // @ts-ignore
259
- this.rootRef.current = el;
260
- },
261
- children: _ref4 => {
262
- let {
263
- ref
264
- } = _ref4;
265
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
266
- ref: ref,
267
- className: (0, _classnames.default)(baseClassName, {
268
- [`${baseClassName}--inline`]: inline,
269
- [`${baseClassName}--collapsed`]: isCollapsed,
270
- [`${baseClassName}--vertical`]: label && labelPlacement === 'top'
271
- }, className),
272
- ...props,
273
- children: [label && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
274
- className: `${baseClassName}__label`,
275
- children: label
276
- }), this.renderControl()]
277
- });
278
- }
71
+ value: isResponsive,
72
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonGroupControl.default, {
73
+ buttons: buttons,
74
+ selectedValues: selectedValues,
75
+ onClick: handleChange,
76
+ ghost: ghost,
77
+ isResponsive: isResponsive,
78
+ monospaced: monospaced,
79
+ baseClassName: baseClassName
279
80
  })
280
81
  });
281
- }
282
- }
283
- (0, _defineProperty2.default)(SegmentedControl, "defaultProps", {
284
- label: null,
285
- labelPlacement: 'top',
286
- monospaced: false,
287
- multiple: false,
288
- onChange: null,
289
- inline: false,
290
- ghost: false,
291
- className: null,
292
- baseClassName: SEGMENTED_CONTROL_BASE_CLASS_NAME
293
- });
294
- (0, _defineProperty2.default)(SegmentedControl, "contextType", _ResponsiveContext.default);
82
+ };
83
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
84
+ ref: rootRef,
85
+ className: (0, _classnames.default)(baseClassName, {
86
+ [`${baseClassName}--inline`]: inline,
87
+ [`${baseClassName}--collapsed`]: isResponsive,
88
+ [`${baseClassName}--vertical`]: label && labelPlacement === 'top'
89
+ }, className),
90
+ ...props,
91
+ children: [label && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
92
+ className: `${baseClassName}__label`,
93
+ children: label
94
+ }), renderControl(), !isInResponsiveContext && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Squeezer.default, {
95
+ ref: rootRef,
96
+ ...squeezerProps
97
+ })]
98
+ });
99
+ };
295
100
  var _default = exports.default = SegmentedControl;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSelectedValues = void 0;
7
+ // Copyright 1999-2023. Plesk International GmbH. All rights reserved.
8
+
9
+ const getSelectedValues = selected => {
10
+ if (selected === undefined) {
11
+ return [];
12
+ }
13
+ if (Array.isArray(selected)) {
14
+ return selected;
15
+ }
16
+ return [selected];
17
+ };
18
+ exports.getSelectedValues = getSelectedValues;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useResponsive = void 0;
8
+ var _react = require("react");
9
+ var _ResponsiveContext = _interopRequireDefault(require("../ResponsiveContext"));
10
+ // Copyright 1999-2023. Plesk International GmbH. All rights reserved.
11
+
12
+ const useResponsive = () => {
13
+ const isResponsive = (0, _react.useContext)(_ResponsiveContext.default);
14
+ const isInResponsiveContext = typeof isResponsive === 'boolean';
15
+ const [isResponsiveInternal, setIsResponsiveInternal] = (0, _react.useState)(false);
16
+ return {
17
+ isResponsive: isInResponsiveContext ? isResponsive : isResponsiveInternal,
18
+ isInResponsiveContext,
19
+ compact: () => {
20
+ setIsResponsiveInternal(true);
21
+ return false;
22
+ },
23
+ expand: () => {
24
+ setIsResponsiveInternal(false);
25
+ return false;
26
+ }
27
+ };
28
+ };
29
+ exports.useResponsive = useResponsive;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSelected = void 0;
7
+ var _react = require("react");
8
+ var _getSelectedValues = require("./getSelectedValues");
9
+ // Copyright 1999-2023. Plesk International GmbH. All rights reserved.
10
+
11
+ const alphaSort = (a, b) => a > b ? 1 : -1;
12
+ const useSelected = _ref => {
13
+ let {
14
+ multiple,
15
+ externalSelected,
16
+ onChange
17
+ } = _ref;
18
+ const getExternal = () => multiple ? (0, _getSelectedValues.getSelectedValues)(externalSelected) : externalSelected;
19
+ const [selected, setSelected] = (0, _react.useState)(getExternal());
20
+ const [prevExternalSelected, setPrevExternalSelected] = (0, _react.useState)(externalSelected);
21
+ if (prevExternalSelected !== externalSelected) {
22
+ setPrevExternalSelected(externalSelected);
23
+ if (selected !== externalSelected) {
24
+ setSelected(getExternal());
25
+ }
26
+ }
27
+ const handleChange = value => {
28
+ let prevSelected = selected;
29
+ let newSelected;
30
+ if (multiple) {
31
+ const isSelectedArray = Array.isArray(selected);
32
+ newSelected = isSelectedArray ? [...selected] : [];
33
+ if (!isSelectedArray || selected.indexOf(value) === -1) {
34
+ newSelected.push(value);
35
+ } else {
36
+ newSelected.splice(selected.indexOf(value), 1);
37
+ }
38
+ newSelected.sort(alphaSort);
39
+ if (isSelectedArray) {
40
+ prevSelected = [...selected].sort(alphaSort);
41
+ }
42
+ } else {
43
+ newSelected = value;
44
+ }
45
+ if (JSON.stringify(prevSelected) !== JSON.stringify(newSelected)) {
46
+ setSelected(newSelected);
47
+ onChange?.(newSelected);
48
+ }
49
+ };
50
+ return {
51
+ selectedValues: (0, _getSelectedValues.getSelectedValues)(selected),
52
+ handleChange
53
+ };
54
+ };
55
+ exports.useSelected = useSelected;
@@ -25,7 +25,7 @@ const collect = function (children) {
25
25
  let group = arguments.length > 2 ? arguments[2] : undefined;
26
26
  const groups = [];
27
27
  _react.Children.forEach(children, child => {
28
- if ( /*#__PURE__*/(0, _react.isValidElement)(child) && (child.type === _SelectOptionGroup.default || child.type === 'optgroup')) {
28
+ if (/*#__PURE__*/(0, _react.isValidElement)(child) && (child.type === _SelectOptionGroup.default || child.type === 'optgroup')) {
29
29
  const {
30
30
  label,
31
31
  children,
@@ -38,7 +38,7 @@ const collect = function (children) {
38
38
  };
39
39
  groups.push(group);
40
40
  collect(children, options, group);
41
- } else if ( /*#__PURE__*/(0, _react.isValidElement)(child) && (child.type === _SelectOption.default || child.type === 'option')) {
41
+ } else if (/*#__PURE__*/(0, _react.isValidElement)(child) && (child.type === _SelectOption.default || child.type === 'option')) {
42
42
  // eslint-disable-next-line prefer-const
43
43
  let {
44
44
  value,
@@ -1,98 +1,20 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.default = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
7
  var _react = require("react");
10
- var _reactMeasure = _interopRequireDefault(require("react-measure"));
11
- var _utils = require("../utils");
12
- var _jsxRuntime = require("react/jsx-runtime");
8
+ var _hooks = require("../../hooks");
13
9
  // Copyright 1999-2023. Plesk International GmbH. All rights reserved.
14
10
 
15
- class Squeezer extends _react.Component {
16
- constructor() {
17
- super(...arguments);
18
- (0, _defineProperty2.default)(this, "rootRef", /*#__PURE__*/(0, _react.createRef)());
19
- (0, _defineProperty2.default)(this, "measuring", false);
20
- (0, _defineProperty2.default)(this, "measurements", []);
21
- (0, _defineProperty2.default)(this, "minWidth", 0);
22
- (0, _defineProperty2.default)(this, "handleResize", () => {
23
- this.measure();
24
- });
25
- }
26
- addMeasurement(width) {
27
- this.measurements.push(width);
28
- if (this.measurements.length > 2) {
29
- this.measurements.shift();
30
- }
31
- }
32
- measure() {
33
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
34
- const {
35
- compact,
36
- uncompact
37
- } = this.props;
38
- if (this.measuring && !force) {
39
- return;
40
- }
41
- this.measuring = true;
42
- const root = this.rootRef.current;
43
- const width = Math.ceil(root.getBoundingClientRect().width);
44
- const scrollWidth = Math.ceil(root.scrollWidth);
45
- let checkForce = false;
46
- if (width < scrollWidth) {
47
- if (compact()) {
48
- this.minWidth = scrollWidth;
49
- checkForce = true;
50
- }
51
- } else if (width > this.minWidth) {
52
- if (uncompact()) {
53
- this.minWidth = width;
54
- checkForce = true;
55
- }
56
- }
57
- this.addMeasurement(width);
58
- this.check(checkForce);
59
- }
60
- check() {
61
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
62
- if (!force && this.measurements.length === 2 && this.measurements[0] === this.measurements[1]) {
63
- this.measuring = false;
64
- } else {
65
- this.setState({}, () => {
66
- this.measure(true);
67
- });
68
- }
69
- }
70
- render() {
71
- const {
72
- children,
73
- innerRef,
74
- innerMeasure
75
- } = this.props;
76
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactMeasure.default, {
77
- onResize: this.handleResize,
78
- innerRef: el => {
79
- if (el) {
80
- this.rootRef.current = el;
81
- (0, _utils.safeInvoke)(innerRef, el);
82
- (0, _utils.safeInvoke)(innerMeasure, () => {
83
- this.measure(true);
84
- });
85
- }
86
- },
87
- children: _ref => {
88
- let {
89
- measureRef
90
- } = _ref;
91
- return children({
92
- ref: measureRef
93
- });
94
- }
95
- });
96
- }
97
- }
11
+ /** Render-less useSqueeze wrapper */
12
+ const Squeezer = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
13
+ (0, _hooks.useSqueeze)({
14
+ ref: ref,
15
+ ...props
16
+ });
17
+ return null;
18
+ });
19
+ Squeezer.displayName = 'Squeezer';
98
20
  var _default = exports.default = Squeezer;
@@ -299,7 +299,7 @@ class Tabs extends _react.Component {
299
299
  children: label
300
300
  });
301
301
  }
302
- if ( /*#__PURE__*/(0, _react.isValidElement)(label)) {
302
+ if (/*#__PURE__*/(0, _react.isValidElement)(label)) {
303
303
  return /*#__PURE__*/(0, _react.cloneElement)(label, {
304
304
  className: (0, _classnames.default)(`${baseClassName}__${tabMode}-label`, label.props.className)
305
305
  });
@@ -202,7 +202,7 @@ _Toaster = Toaster;
202
202
  let container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body;
203
203
  const containerElement = document.createElement('div');
204
204
  container.appendChild(containerElement);
205
- return (0, _reactDom.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toaster, {
205
+ return (0, _reactDom.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Toaster, {
206
206
  ...props
207
207
  }), containerElement);
208
208
  });
@@ -37,7 +37,7 @@ class Registry {
37
37
  expand() {
38
38
  let changed = false;
39
39
  for (const item of this.items) {
40
- if (this.checkItemIsCompactOrHasCompactItems(item)) {
40
+ if (item.isExpandable) {
41
41
  item.expand();
42
42
  changed = true;
43
43
  break;
@@ -53,18 +53,20 @@ class Registry {
53
53
  return isCompact;
54
54
  });
55
55
  }
56
- get hasCompactItems() {
57
- return this.items.some(this.checkItemIsCompactOrHasCompactItems);
58
- }
59
- checkItemIsCompactOrHasCompactItems(item) {
60
- return item.isCompact || 'hasCompactItems' in item && item.hasCompactItems;
56
+ get isExpandable() {
57
+ return this.items.some(_ref2 => {
58
+ let {
59
+ isExpandable
60
+ } = _ref2;
61
+ return isExpandable;
62
+ });
61
63
  }
62
64
  }
63
65
  class RegistryItem {
64
- constructor(_ref2) {
66
+ constructor(_ref3) {
65
67
  let {
66
68
  onCompactStateChange
67
- } = _ref2;
69
+ } = _ref3;
68
70
  (0, _defineProperty2.default)(this, "_isCompact", false);
69
71
  (0, _defineProperty2.default)(this, "onCompactStateChange", void 0);
70
72
  this.onCompactStateChange = onCompactStateChange;
@@ -80,6 +82,9 @@ class RegistryItem {
80
82
  get isCompact() {
81
83
  return this._isCompact;
82
84
  }
85
+ get isExpandable() {
86
+ return this._isCompact;
87
+ }
83
88
  }
84
89
  const useRegistry = () => {
85
90
  const parentRegistry = useRegistryContext();
@@ -62,7 +62,7 @@ const toMenuItem = (child, isLast, onItemClick) => {
62
62
  case _Dropdown.default:
63
63
  {
64
64
  let onMenuItemClick;
65
- if ( /*#__PURE__*/(0, _react.isValidElement)(child.props.menu)) {
65
+ if (/*#__PURE__*/(0, _react.isValidElement)(child.props.menu)) {
66
66
  ({
67
67
  onItemClick: onMenuItemClick
68
68
  } = child.props.menu.props);
@@ -74,7 +74,7 @@ const toMenuItem = (child, isLast, onItemClick) => {
74
74
  case _List.ListOperation:
75
75
  {
76
76
  const menuItem = toMenuItem(child.props.children, true, onItemClick);
77
- if ( /*#__PURE__*/(0, _react.isValidElement)(menuItem)) {
77
+ if (/*#__PURE__*/(0, _react.isValidElement)(menuItem)) {
78
78
  return /*#__PURE__*/(0, _react.cloneElement)(child, {
79
79
  children: /*#__PURE__*/(0, _react.cloneElement)(menuItem, {
80
80
  onClick: e => {