rsuite 5.38.0 → 5.40.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 (60) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/Nav/styles/index.less +10 -11
  3. package/SelectPicker/styles/index.less +8 -4
  4. package/cjs/CheckTreePicker/CheckTreePicker.js +1 -1
  5. package/cjs/CheckTreePicker/utils.d.ts +1 -1
  6. package/cjs/CheckTreePicker/utils.js +2 -2
  7. package/cjs/SelectPicker/Listbox.d.ts +34 -0
  8. package/cjs/SelectPicker/Listbox.js +263 -0
  9. package/cjs/SelectPicker/ListboxOption.d.ts +11 -0
  10. package/cjs/SelectPicker/ListboxOption.js +50 -0
  11. package/cjs/SelectPicker/ListboxOptionGroup.d.ts +9 -0
  12. package/cjs/SelectPicker/ListboxOptionGroup.js +69 -0
  13. package/cjs/SelectPicker/SelectPicker.js +33 -36
  14. package/cjs/Windowing/List.d.ts +2 -2
  15. package/cjs/locales/index.d.ts +1 -0
  16. package/cjs/locales/index.js +6 -2
  17. package/cjs/locales/ne_NP.d.ts +117 -0
  18. package/cjs/locales/ne_NP.js +89 -0
  19. package/cjs/utils/getDataGroupBy.d.ts +23 -0
  20. package/cjs/utils/getDataGroupBy.js +33 -0
  21. package/cjs/utils/treeUtils.d.ts +1 -1
  22. package/cjs/utils/treeUtils.js +8 -8
  23. package/dist/rsuite-no-reset-rtl.css +22 -11
  24. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  25. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  26. package/dist/rsuite-no-reset.css +22 -11
  27. package/dist/rsuite-no-reset.min.css +1 -1
  28. package/dist/rsuite-no-reset.min.css.map +1 -1
  29. package/dist/rsuite-rtl.css +22 -11
  30. package/dist/rsuite-rtl.min.css +1 -1
  31. package/dist/rsuite-rtl.min.css.map +1 -1
  32. package/dist/rsuite.css +22 -11
  33. package/dist/rsuite.js +53 -20
  34. package/dist/rsuite.js.map +1 -1
  35. package/dist/rsuite.min.css +1 -1
  36. package/dist/rsuite.min.css.map +1 -1
  37. package/dist/rsuite.min.js +1 -1
  38. package/dist/rsuite.min.js.map +1 -1
  39. package/esm/CheckTreePicker/CheckTreePicker.js +1 -1
  40. package/esm/CheckTreePicker/utils.d.ts +1 -1
  41. package/esm/CheckTreePicker/utils.js +2 -2
  42. package/esm/SelectPicker/Listbox.d.ts +34 -0
  43. package/esm/SelectPicker/Listbox.js +240 -0
  44. package/esm/SelectPicker/ListboxOption.d.ts +11 -0
  45. package/esm/SelectPicker/ListboxOption.js +37 -0
  46. package/esm/SelectPicker/ListboxOptionGroup.d.ts +9 -0
  47. package/esm/SelectPicker/ListboxOptionGroup.js +53 -0
  48. package/esm/SelectPicker/SelectPicker.js +33 -36
  49. package/esm/Windowing/List.d.ts +2 -2
  50. package/esm/locales/index.d.ts +1 -0
  51. package/esm/locales/index.js +2 -1
  52. package/esm/locales/ne_NP.d.ts +117 -0
  53. package/esm/locales/ne_NP.js +79 -0
  54. package/esm/utils/getDataGroupBy.d.ts +23 -0
  55. package/esm/utils/getDataGroupBy.js +32 -0
  56. package/esm/utils/treeUtils.d.ts +1 -1
  57. package/esm/utils/treeUtils.js +8 -8
  58. package/locales/ne_NP/package.json +7 -0
  59. package/package.json +2 -2
  60. package/styles/mixins/listbox.less +2 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ # [5.40.0](https://github.com/rsuite/rsuite/compare/v5.39.0...v5.40.0) (2023-09-10)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **CheckTree:** searchKeyword is not updated as expected ([#3354](https://github.com/rsuite/rsuite/issues/3354)) ([b642da3](https://github.com/rsuite/rsuite/commit/b642da31c158481eeea8d46e9e3088edfb83acd1)), closes [#3196](https://github.com/rsuite/rsuite/issues/3196)
6
+
7
+ # [5.39.0](https://github.com/rsuite/rsuite/compare/v5.38.0...v5.39.0) (2023-09-04)
8
+
9
+ ### Bug Fixes
10
+
11
+ - **Nav.Item:** fix vertical mis-alignment of icon ([#3344](https://github.com/rsuite/rsuite/issues/3344)) ([283c013](https://github.com/rsuite/rsuite/commit/283c013b656e19f12ec9b628af83fb1798bc5086))
12
+
13
+ ### Features
14
+
15
+ - **i18n:** Create ne_NP.ts for Nepali Locale Support. ([#3351](https://github.com/rsuite/rsuite/issues/3351)) ([4b16982](https://github.com/rsuite/rsuite/commit/4b16982b5ac5cec06d9eb707b1ba37ae616cf19f))
16
+
17
+ ### Reverts
18
+
19
+ - Revert "ci: run ci check on \*.x branches" ([0a98b0c](https://github.com/rsuite/rsuite/commit/0a98b0c765270923f321f1d859ccebbf7adeed37))
20
+
1
21
  # [5.38.0](https://github.com/rsuite/rsuite/compare/v5.37.4...v5.38.0) (2023-08-18)
2
22
 
3
23
  ### Bug Fixes
@@ -98,6 +98,12 @@
98
98
  .rs-nav-horizontal {
99
99
  white-space: nowrap;
100
100
 
101
+ > .rs-nav-item {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ vertical-align: top;
105
+ }
106
+
101
107
  // Waterline
102
108
  .rs-nav-bar {
103
109
  position: absolute;
@@ -112,19 +118,12 @@
112
118
  }
113
119
  }
114
120
 
115
- .rs-nav-item,
116
- .rs-dropdown {
117
- .rs-nav-horizontal > & {
118
- display: inline-block;
119
- vertical-align: top;
120
- }
121
-
122
- .rs-nav-vertical > & {
123
- display: block;
121
+ .rs-nav-vertical {
122
+ > .rs-nav-item {
123
+ display: flex;
124
+ align-items: center;
124
125
  }
125
- }
126
126
 
127
- .rs-nav-vertical {
128
127
  > .rs-dropdown {
129
128
  width: 100%;
130
129
 
@@ -11,10 +11,6 @@
11
11
  .picker-menu-group-common(picker);
12
12
  .picker-menu-group-title(picker);
13
13
  .picker-menu-group-closed(picker);
14
-
15
- .rs-picker-menu-group ~ [role='option'] > .rs-picker-select-menu-item {
16
- padding-left: 26px;
17
- }
18
14
  }
19
15
 
20
16
  // Menu item (the option)
@@ -45,3 +41,11 @@
45
41
  padding-left: @picker-group-children-padding-left;
46
42
  }
47
43
  }
44
+
45
+ .rs-picker-menu-group .rs-picker-select-menu-item {
46
+ padding-left: @picker-group-children-padding-left;
47
+ }
48
+
49
+ .rs-picker-menu-group.folded [role='option'] {
50
+ display: none;
51
+ }
@@ -239,7 +239,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
239
239
  });
240
240
  }
241
241
 
242
- return (0, _utils2.getFormattedTree)(filteredData, flattenNodes, {
242
+ return (0, _utils2.getFormattedTree)(flattenNodes, filteredData, {
243
243
  childrenKey: childrenKey,
244
244
  cascade: cascade
245
245
  }).map(function (node) {
@@ -37,7 +37,7 @@ export declare function isEveryFirstLevelNodeUncheckable(nodes: TreeNodesType, u
37
37
  * @param {*} node
38
38
  */
39
39
  export declare function isNodeUncheckable(node: any, props: Required<Pick<CheckTreePickerProps, 'uncheckableItemValues' | 'valueKey'>>): boolean;
40
- export declare function getFormattedTree(data: any[], nodes: TreeNodesType, props: Required<Pick<CheckTreePickerProps, 'childrenKey' | 'cascade'>>): any[];
40
+ export declare function getFormattedTree(nodes: TreeNodesType, data: any[], props: Required<Pick<CheckTreePickerProps, 'childrenKey' | 'cascade'>>): any[];
41
41
  export declare function getDisabledState(nodes: TreeNodesType, node: TreeNodeType, props: Required<Pick<CheckTreePickerProps, 'disabledItemValues' | 'valueKey'>>): boolean;
42
42
  export declare function getCheckTreePickerDefaultValue(value: any[], uncheckableItemValues: any[]): any[];
43
43
  export declare function getSelectedItems(nodes: TreeNodesType, values: ValueType): TreeNodeType[];
@@ -130,7 +130,7 @@ function isNodeUncheckable(node, props) {
130
130
  });
131
131
  }
132
132
 
133
- function getFormattedTree(data, nodes, props) {
133
+ function getFormattedTree(nodes, data, props) {
134
134
  var childrenKey = props.childrenKey,
135
135
  cascade = props.cascade;
136
136
  return data.map(function (node) {
@@ -153,7 +153,7 @@ function getFormattedTree(data, nodes, props) {
153
153
  formatted.checkState = checkState;
154
154
 
155
155
  if (((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) > 0) {
156
- formatted[childrenKey] = getFormattedTree(formatted[childrenKey], nodes, props);
156
+ formatted[childrenKey] = getFormattedTree(nodes, formatted[childrenKey], props);
157
157
  }
158
158
  }
159
159
 
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { ListProps, ListHandle } from '../Windowing';
3
+ import { CompareFn, Group } from '../utils/getDataGroupBy';
4
+ import { StandardProps } from '../@types/common';
5
+ interface ListboxProps<T, K> extends StandardProps, Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
6
+ classPrefix: string;
7
+ options: readonly T[];
8
+ getOptionKey?: (option: T) => K;
9
+ sort?: <B extends boolean>(isGroup: B) => B extends true ? CompareFn<Group<T>> : CompareFn<T>;
10
+ groupBy?: string;
11
+ disabledOptionKeys?: readonly K[];
12
+ selectedOptionKey?: K;
13
+ activeOptionKey?: K;
14
+ maxHeight?: number;
15
+ labelKey?: string;
16
+ className?: string;
17
+ style?: React.CSSProperties;
18
+ optionClassPrefix?: string;
19
+ rowHeight?: number;
20
+ rowGroupHeight?: number;
21
+ virtualized?: boolean;
22
+ listProps?: Partial<ListProps>;
23
+ listRef?: React.Ref<ListHandle>;
24
+ /** Custom selected option */
25
+ renderMenuItem?: (itemLabel: React.ReactNode, item: any) => React.ReactNode;
26
+ renderMenuGroup?: (title: React.ReactNode, item: any) => React.ReactNode;
27
+ onSelect?: (value: K, item: T, event: React.MouseEvent) => void;
28
+ onGroupTitleClick?: (event: React.MouseEvent) => void;
29
+ }
30
+ declare type ListboxComponent = <T, K>(p: ListboxProps<T, K> & {
31
+ ref?: React.ForwardedRef<HTMLDivElement>;
32
+ }) => JSX.Element;
33
+ declare const Listbox: ListboxComponent;
34
+ export default Listbox;
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ exports.__esModule = true;
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
17
+
18
+ var _getPosition = _interopRequireDefault(require("dom-lib/getPosition"));
19
+
20
+ var _scrollTop = _interopRequireDefault(require("dom-lib/scrollTop"));
21
+
22
+ var _getHeight = _interopRequireDefault(require("dom-lib/getHeight"));
23
+
24
+ var _Windowing = require("../Windowing");
25
+
26
+ var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
27
+
28
+ var _utils = require("../utils");
29
+
30
+ var _ListboxOptionGroup = _interopRequireDefault(require("./ListboxOptionGroup"));
31
+
32
+ var _getDataGroupBy = require("../utils/getDataGroupBy");
33
+
34
+ var _ListboxOption = _interopRequireDefault(require("./ListboxOption"));
35
+
36
+ var Listbox = /*#__PURE__*/_react.default.forwardRef(function Listbox(props, ref) {
37
+ var _props$options = props.options,
38
+ options = _props$options === void 0 ? [] : _props$options,
39
+ getOptionKey = props.getOptionKey,
40
+ groupBy = props.groupBy,
41
+ sort = props.sort,
42
+ _props$maxHeight = props.maxHeight,
43
+ maxHeight = _props$maxHeight === void 0 ? 320 : _props$maxHeight,
44
+ selectedOptionKey = props.selectedOptionKey,
45
+ _props$disabledOption = props.disabledOptionKeys,
46
+ disabledOptionKeys = _props$disabledOption === void 0 ? [] : _props$disabledOption,
47
+ _props$classPrefix = props.classPrefix,
48
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
49
+ _props$labelKey = props.labelKey,
50
+ labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
51
+ virtualized = props.virtualized,
52
+ listProps = props.listProps,
53
+ virtualizedListRef = props.listRef,
54
+ className = props.className,
55
+ style = props.style,
56
+ activeOptionKey = props.activeOptionKey,
57
+ optionClassPrefix = props.optionClassPrefix,
58
+ _props$rowHeight = props.rowHeight,
59
+ rowHeight = _props$rowHeight === void 0 ? 36 : _props$rowHeight,
60
+ _props$rowGroupHeight = props.rowGroupHeight,
61
+ rowGroupHeight = _props$rowGroupHeight === void 0 ? 48 : _props$rowGroupHeight,
62
+ renderMenuGroup = props.renderMenuGroup,
63
+ renderMenuItem = props.renderMenuItem,
64
+ onGroupTitleClick = props.onGroupTitleClick,
65
+ onSelect = props.onSelect,
66
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["options", "getOptionKey", "groupBy", "sort", "maxHeight", "selectedOptionKey", "disabledOptionKeys", "classPrefix", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "activeOptionKey", "optionClassPrefix", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
67
+ var group = typeof groupBy !== 'undefined';
68
+
69
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
70
+ withClassPrefix = _useClassNames.withClassPrefix,
71
+ prefix = _useClassNames.prefix,
72
+ merge = _useClassNames.merge;
73
+
74
+ var classes = merge(className, withClassPrefix('items', {
75
+ grouped: group
76
+ }));
77
+ var menuBodyContainerRef = (0, _react.useRef)(null);
78
+ var listRef = (0, _react.useRef)(null);
79
+
80
+ var _useState = (0, _react.useState)([]),
81
+ foldedGroupKeys = _useState[0],
82
+ setFoldedGroupKeys = _useState[1];
83
+
84
+ var handleGroupTitleClick = (0, _react.useCallback)(function (key, event) {
85
+ var _listRef$current;
86
+
87
+ var nextGroupKeys = foldedGroupKeys.filter(function (item) {
88
+ return item !== key;
89
+ });
90
+
91
+ if (nextGroupKeys.length === foldedGroupKeys.length) {
92
+ nextGroupKeys.push(key);
93
+ }
94
+
95
+ setFoldedGroupKeys(nextGroupKeys);
96
+ onGroupTitleClick === null || onGroupTitleClick === void 0 ? void 0 : onGroupTitleClick(event); // See example https://codesandbox.io/s/grouped-list-with-sticky-headers-shgok?fontsize=14&file=/index.js:1314-1381
97
+
98
+ (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.resetAfterIndex(0); // use group index to reduce calculation
99
+ }, [onGroupTitleClick, foldedGroupKeys]);
100
+ (0, _react.useEffect)(function () {
101
+ var container = menuBodyContainerRef.current;
102
+
103
+ if (!container) {
104
+ return;
105
+ }
106
+
107
+ var activeItem = container.querySelector("." + prefix('item-focus'));
108
+
109
+ if (!activeItem) {
110
+ activeItem = container.querySelector("." + prefix('item-active'));
111
+ }
112
+
113
+ if (!activeItem) {
114
+ return;
115
+ }
116
+
117
+ var position = (0, _getPosition.default)(activeItem, container);
118
+ var sTop = (0, _scrollTop.default)(container);
119
+ var sHeight = (0, _getHeight.default)(container);
120
+
121
+ if (sTop > position.top) {
122
+ (0, _scrollTop.default)(container, Math.max(0, position.top - 20));
123
+ } else if (position.top > sTop + sHeight) {
124
+ (0, _scrollTop.default)(container, Math.max(0, position.top - sHeight + 32));
125
+ }
126
+ }, [activeOptionKey, menuBodyContainerRef, prefix]);
127
+ (0, _utils.useMount)(function scrollToSelectedOption() {
128
+ if (virtualized && selectedOptionKey) {
129
+ if (typeof groupBy === 'undefined') {
130
+ var _listRef$current2;
131
+
132
+ var selectedOptionIndex = options.findIndex(function (option) {
133
+ return (getOptionKey === null || getOptionKey === void 0 ? void 0 : getOptionKey(option)) === selectedOptionKey;
134
+ });
135
+ (_listRef$current2 = listRef.current) === null || _listRef$current2 === void 0 ? void 0 : _listRef$current2.scrollToItem(selectedOptionIndex);
136
+ } else {
137
+ var _listRef$current3;
138
+
139
+ var groups = (0, _getDataGroupBy.groupOptions)(options, groupBy, sort === null || sort === void 0 ? void 0 : sort(false), sort === null || sort === void 0 ? void 0 : sort(true));
140
+ var selectedGroupIndex = groups.findIndex(function (group) {
141
+ return group.key === selectedOptionKey;
142
+ }); // TODO-Doma
143
+ // This only scrolls the list to the group, not to the selected item within the group
144
+ // .scrollToItem does not support specifying an px offset
145
+ // Find a way to scroll to the selected item within the group
146
+
147
+ (_listRef$current3 = listRef.current) === null || _listRef$current3 === void 0 ? void 0 : _listRef$current3.scrollToItem(selectedGroupIndex);
148
+ }
149
+ }
150
+ });
151
+ var renderOption = (0, _react.useCallback)(function (option) {
152
+ var _getOptionKey;
153
+
154
+ var optionKey = (_getOptionKey = getOptionKey === null || getOptionKey === void 0 ? void 0 : getOptionKey(option)) !== null && _getOptionKey !== void 0 ? _getOptionKey : JSON.stringify(option);
155
+ var label = option[labelKey];
156
+ var disabled = disabledOptionKeys === null || disabledOptionKeys === void 0 ? void 0 : disabledOptionKeys.some(function (disabledValue) {
157
+ return (0, _shallowEqual.default)(disabledValue, optionKey);
158
+ });
159
+ var selected = (0, _shallowEqual.default)(selectedOptionKey, optionKey);
160
+ var focus = !(0, _isUndefined.default)(activeOptionKey) && (0, _shallowEqual.default)(activeOptionKey, optionKey);
161
+ return /*#__PURE__*/_react.default.createElement(_ListboxOption.default, {
162
+ key: optionKey,
163
+ disabled: disabled,
164
+ selected: selected,
165
+ active: focus,
166
+ "data-key": optionKey,
167
+ classPrefix: optionClassPrefix,
168
+ onClick: function onClick(event) {
169
+ if (!disabled) {
170
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(optionKey, option, event);
171
+ }
172
+ }
173
+ }, renderMenuItem ? renderMenuItem(label, option) : label);
174
+ }, [getOptionKey, labelKey, disabledOptionKeys, selectedOptionKey, activeOptionKey, optionClassPrefix, renderMenuItem, onSelect]);
175
+ var renderOptions = (0, _react.useCallback)(function (options) {
176
+ return options.map(function (option) {
177
+ return renderOption(option);
178
+ });
179
+ }, [renderOption]);
180
+ var renderOptionGroup = (0, _react.useCallback)(function (group) {
181
+ var groupKey = group.key;
182
+ var expanded = !foldedGroupKeys.includes(groupKey);
183
+ return /*#__PURE__*/_react.default.createElement(_ListboxOptionGroup.default, {
184
+ key: groupKey,
185
+ title: renderMenuGroup ? renderMenuGroup(groupKey, group) : groupKey,
186
+ classPrefix: 'picker-menu-group',
187
+ expanded: expanded,
188
+ onClickTitle: function onClickTitle(e) {
189
+ return handleGroupTitleClick(group.key, e);
190
+ }
191
+ }, renderOptions(group.options));
192
+ }, [foldedGroupKeys, handleGroupTitleClick, renderMenuGroup, renderOptions]);
193
+ var renderOptionGroups = (0, _react.useCallback)(function (groupKey) {
194
+ var groups = (0, _getDataGroupBy.groupOptions)(options, groupKey, sort === null || sort === void 0 ? void 0 : sort(false), sort === null || sort === void 0 ? void 0 : sort(true));
195
+ return groups.map(function (group) {
196
+ return renderOptionGroup(group);
197
+ });
198
+ }, [options, renderOptionGroup, sort]);
199
+ var renderVirtualizedOptions = (0, _react.useCallback)(function () {
200
+ return /*#__PURE__*/_react.default.createElement(_Windowing.AutoSizer, {
201
+ defaultHeight: maxHeight,
202
+ style: {
203
+ width: 'auto',
204
+ height: 'auto'
205
+ }
206
+ }, function (_ref) {
207
+ var height = _ref.height;
208
+ return /*#__PURE__*/_react.default.createElement(_Windowing.List, (0, _extends2.default)({
209
+ ref: (0, _utils.mergeRefs)(listRef, virtualizedListRef),
210
+ height: height || maxHeight,
211
+ itemCount: options.length,
212
+ itemSize: rowHeight
213
+ }, listProps), function (_ref2) {
214
+ var index = _ref2.index;
215
+ return renderOption(options[index]);
216
+ });
217
+ });
218
+ }, [listProps, maxHeight, options, renderOption, rowHeight, virtualizedListRef]); // Example of rendering option groups in VariableSizeList
219
+ // https://github.com/bvaughn/react-window/issues/358
220
+
221
+ var renderVirtualizedOptionGroups = (0, _react.useCallback)(function (groupKey) {
222
+ var groups = (0, _getDataGroupBy.groupOptions)(options, groupKey, sort === null || sort === void 0 ? void 0 : sort(false), sort === null || sort === void 0 ? void 0 : sort(true));
223
+ return /*#__PURE__*/_react.default.createElement(_Windowing.AutoSizer, {
224
+ defaultHeight: maxHeight,
225
+ style: {
226
+ width: 'auto',
227
+ height: 'auto'
228
+ }
229
+ }, function (_ref3) {
230
+ var height = _ref3.height;
231
+ return /*#__PURE__*/_react.default.createElement(_Windowing.List, (0, _extends2.default)({
232
+ ref: (0, _utils.mergeRefs)(listRef, virtualizedListRef),
233
+ height: height || maxHeight,
234
+ itemCount: groups.length,
235
+ itemSize: function itemSize(index) {
236
+ var item = groups[index];
237
+ var expanded = !foldedGroupKeys.includes(item.key);
238
+
239
+ if (expanded) {
240
+ return item.options.length * rowHeight + rowGroupHeight;
241
+ }
242
+
243
+ return rowGroupHeight;
244
+ }
245
+ }, listProps), function (_ref4) {
246
+ var index = _ref4.index;
247
+ return renderOptionGroup(groups[index]);
248
+ });
249
+ });
250
+ }, [foldedGroupKeys, listProps, maxHeight, options, renderOptionGroup, rowGroupHeight, rowHeight, sort, virtualizedListRef]);
251
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
252
+ role: "listbox"
253
+ }, rest, {
254
+ className: classes,
255
+ ref: (0, _utils.mergeRefs)(menuBodyContainerRef, ref),
256
+ style: (0, _extends2.default)({}, style, {
257
+ maxHeight: maxHeight
258
+ })
259
+ }), typeof groupBy === 'undefined' ? virtualized ? renderVirtualizedOptions() : renderOptions(options) : virtualized ? renderVirtualizedOptionGroups(groupBy) : renderOptionGroups(groupBy));
260
+ });
261
+
262
+ var _default = Listbox;
263
+ exports.default = _default;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { StandardProps } from '../@types/common';
3
+ interface ListboxOptionProps extends StandardProps, React.HTMLAttributes<HTMLDivElement> {
4
+ selected?: boolean;
5
+ disabled?: boolean;
6
+ active?: boolean;
7
+ title?: string;
8
+ onKeyDown?: (event: React.KeyboardEvent) => void;
9
+ }
10
+ declare const ListboxOption: React.ForwardRefExoticComponent<ListboxOptionProps & React.RefAttributes<HTMLDivElement>>;
11
+ export default ListboxOption;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _utils = require("../utils");
15
+
16
+ var ListboxOption = /*#__PURE__*/_react.default.forwardRef(function ListboxOption(props, ref) {
17
+ var selected = props.selected,
18
+ _props$classPrefix = props.classPrefix,
19
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu-item' : _props$classPrefix,
20
+ children = props.children,
21
+ className = props.className,
22
+ disabled = props.disabled,
23
+ active = props.active,
24
+ onKeyDown = props.onKeyDown,
25
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["selected", "classPrefix", "children", "className", "disabled", "active", "onKeyDown"]);
26
+
27
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
28
+ withClassPrefix = _useClassNames.withClassPrefix;
29
+
30
+ var classes = withClassPrefix({
31
+ active: selected,
32
+ focus: active,
33
+ disabled: disabled
34
+ });
35
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
36
+ ref: ref,
37
+ role: "option",
38
+ "aria-selected": selected || undefined,
39
+ "aria-disabled": disabled
40
+ }, rest, {
41
+ className: className,
42
+ onKeyDown: disabled ? undefined : onKeyDown
43
+ }), /*#__PURE__*/_react.default.createElement("span", {
44
+ className: classes
45
+ }, children));
46
+ });
47
+
48
+ ListboxOption.displayName = 'Listbox.Option';
49
+ var _default = ListboxOption;
50
+ exports.default = _default;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { StandardProps } from '../@types/common';
3
+ interface ListboxOptionGroupProps extends StandardProps, Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
4
+ title?: React.ReactNode;
5
+ expanded?: boolean;
6
+ onClickTitle?: React.MouseEventHandler;
7
+ }
8
+ declare const ListboxOptionGroup: React.ForwardRefExoticComponent<ListboxOptionGroupProps & React.RefAttributes<HTMLDivElement>>;
9
+ export default ListboxOptionGroup;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
11
+
12
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ var _classnames = _interopRequireDefault(require("classnames"));
17
+
18
+ var _utils = require("../utils");
19
+
20
+ var _ArrowDown = _interopRequireDefault(require("@rsuite/icons/legacy/ArrowDown"));
21
+
22
+ var _useUniqueId = _interopRequireDefault(require("../utils/useUniqueId"));
23
+
24
+ var _templateObject, _templateObject2;
25
+
26
+ var ListboxOptionGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
27
+ var _props$classPrefix = props.classPrefix,
28
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu-group' : _props$classPrefix,
29
+ title = props.title,
30
+ children = props.children,
31
+ className = props.className,
32
+ _props$expanded = props.expanded,
33
+ expanded = _props$expanded === void 0 ? true : _props$expanded,
34
+ onClickTitle = props.onClickTitle,
35
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["classPrefix", "title", "children", "className", "expanded", "onClickTitle"]);
36
+
37
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
38
+ withClassPrefix = _useClassNames.withClassPrefix,
39
+ prefix = _useClassNames.prefix,
40
+ merge = _useClassNames.merge;
41
+
42
+ var classes = merge(className, withClassPrefix());
43
+ var groupId = (0, _useUniqueId.default)('listbox-group-');
44
+ var labelId = groupId + '-label';
45
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
46
+ role: "group",
47
+ id: groupId,
48
+ "aria-expanded": expanded,
49
+ "aria-labelledby": labelId
50
+ }, rest, {
51
+ ref: ref,
52
+ className: (0, _classnames.default)(classes, {
53
+ folded: !expanded
54
+ })
55
+ }), /*#__PURE__*/_react.default.createElement("div", {
56
+ className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["title"]))),
57
+ tabIndex: -1,
58
+ onClick: onClickTitle
59
+ }, /*#__PURE__*/_react.default.createElement("span", {
60
+ id: labelId
61
+ }, title), /*#__PURE__*/_react.default.createElement(_ArrowDown.default, {
62
+ "aria-hidden": true,
63
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["caret"])))
64
+ })), children);
65
+ });
66
+
67
+ ListboxOptionGroup.displayName = 'Listbox.OptionGroup';
68
+ var _default = ListboxOptionGroup;
69
+ exports.default = _default;
@@ -19,8 +19,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
19
19
 
20
20
  var _pick = _interopRequireDefault(require("lodash/pick"));
21
21
 
22
- var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
23
-
24
22
  var _isNil = _interopRequireDefault(require("lodash/isNil"));
25
23
 
26
24
  var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
@@ -29,10 +27,10 @@ var _omit = _interopRequireDefault(require("lodash/omit"));
29
27
 
30
28
  var _utils = require("../utils");
31
29
 
32
- var _getDataGroupBy = require("../utils/getDataGroupBy");
33
-
34
30
  var _Picker = require("../Picker");
35
31
 
32
+ var _Listbox = _interopRequireDefault(require("./Listbox"));
33
+
36
34
  var _templateObject;
37
35
 
38
36
  var emptyArray = [];
@@ -252,40 +250,39 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
252
250
  left: left,
253
251
  top: top
254
252
  });
255
- var items = filteredData; // Create a tree structure data when set `groupBy`
256
253
 
257
- if (groupBy) {
258
- items = (0, _getDataGroupBy.getDataGroupBy)(items, groupBy, sort);
259
- } else if (typeof sort === 'function') {
260
- items = items.sort(sort(false));
261
- }
254
+ var menu = function () {
255
+ if (!filteredData.length) {
256
+ return /*#__PURE__*/_react.default.createElement("div", {
257
+ className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["none"])))
258
+ }, locale === null || locale === void 0 ? void 0 : locale.noResultsText);
259
+ }
260
+
261
+ return /*#__PURE__*/_react.default.createElement(_Listbox.default, {
262
+ options: filteredData,
263
+ getOptionKey: function getOptionKey(option) {
264
+ return option[valueKey];
265
+ },
266
+ id: id ? id + "-listbox" : undefined,
267
+ listProps: listProps,
268
+ listRef: listRef,
269
+ disabledOptionKeys: disabledItemValues,
270
+ labelKey: labelKey,
271
+ renderMenuGroup: renderMenuGroup,
272
+ renderMenuItem: renderMenuItem,
273
+ maxHeight: menuMaxHeight,
274
+ classPrefix: 'picker-select-menu',
275
+ optionClassPrefix: 'picker-select-menu-item',
276
+ selectedOptionKey: value,
277
+ activeOptionKey: focusItemValue,
278
+ groupBy: groupBy,
279
+ sort: sort,
280
+ onSelect: handleItemSelect,
281
+ onGroupTitleClick: onGroupTitleClick,
282
+ virtualized: virtualized
283
+ });
284
+ }();
262
285
 
263
- var menu = items.length ? /*#__PURE__*/_react.default.createElement(_Picker.DropdownMenu, {
264
- id: id ? id + "-listbox" : undefined,
265
- listProps: listProps,
266
- listRef: listRef,
267
- disabledItemValues: disabledItemValues,
268
- valueKey: valueKey,
269
- labelKey: labelKey,
270
- renderMenuGroup: renderMenuGroup,
271
- renderMenuItem: renderMenuItem,
272
- maxHeight: menuMaxHeight,
273
- classPrefix: 'picker-select-menu',
274
- dropdownMenuItemClassPrefix: 'picker-select-menu-item',
275
- dropdownMenuItemAs: _Picker.DropdownMenuItem,
276
- activeItemValues: [value],
277
- focusItemValue: focusItemValue,
278
- data: items // FIXME-Doma
279
- // `group` is redundant so long as `groupBy` exists
280
- ,
281
- group: !(0, _isUndefined.default)(groupBy),
282
- groupBy: groupBy,
283
- onSelect: handleItemSelect,
284
- onGroupTitleClick: onGroupTitleClick,
285
- virtualized: virtualized
286
- }) : /*#__PURE__*/_react.default.createElement("div", {
287
- className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["none"])))
288
- }, locale === null || locale === void 0 ? void 0 : locale.noResultsText);
289
286
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
290
287
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
291
288
  autoWidth: menuAutoWidth,