rsuite 5.49.0 → 5.51.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 (233) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/Cascader/styles/index.less +4 -4
  3. package/CheckTreePicker/styles/index.less +3 -3
  4. package/DatePicker/styles/index.less +1 -1
  5. package/DateRangePicker/styles/index.less +15 -5
  6. package/Dropdown/styles/index.less +5 -4
  7. package/Dropdown/styles/mixin.less +0 -11
  8. package/Form/styles/mixin.less +1 -2
  9. package/InputGroup/styles/index.less +0 -14
  10. package/InputPicker/styles/index.less +1 -1
  11. package/Picker/styles/index.less +33 -26
  12. package/Picker/styles/mixin.less +20 -16
  13. package/README.md +4 -4
  14. package/TagInput/styles/index.less +2 -2
  15. package/TagPicker/styles/index.less +5 -1
  16. package/TreePicker/styles/index.less +2 -2
  17. package/cjs/@types/common.d.ts +8 -0
  18. package/cjs/AutoComplete/AutoComplete.js +39 -37
  19. package/cjs/AutoComplete/Combobox.d.ts +8 -0
  20. package/cjs/AutoComplete/Combobox.js +31 -0
  21. package/cjs/Calendar/Calendar.d.ts +5 -1
  22. package/cjs/Calendar/CalendarContainer.d.ts +5 -1
  23. package/cjs/Calendar/CalendarContainer.js +35 -37
  24. package/cjs/Cascader/Cascader.js +58 -59
  25. package/cjs/Cascader/DropdownMenu.d.ts +3 -20
  26. package/cjs/Cascader/DropdownMenu.js +48 -48
  27. package/cjs/Cascader/TreeView.d.ts +24 -0
  28. package/cjs/Cascader/TreeView.js +174 -0
  29. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  30. package/cjs/CheckPicker/CheckPicker.js +42 -44
  31. package/cjs/CheckTreePicker/CheckTreeNode.d.ts +2 -2
  32. package/cjs/CheckTreePicker/CheckTreeNode.js +31 -59
  33. package/cjs/CheckTreePicker/CheckTreePicker.js +81 -84
  34. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  35. package/cjs/DatePicker/DatePicker.js +7 -10
  36. package/cjs/DatePicker/Toolbar.js +2 -1
  37. package/cjs/DateRangeInput/DateRangeInput.js +2 -2
  38. package/cjs/DateRangePicker/Calendar.js +24 -23
  39. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  40. package/cjs/DateRangePicker/DateRangePicker.js +239 -202
  41. package/cjs/DateRangePicker/types.d.ts +11 -3
  42. package/cjs/DateRangePicker/utils.d.ts +2 -1
  43. package/cjs/DateRangePicker/utils.js +7 -5
  44. package/cjs/Form/Form.d.ts +14 -0
  45. package/cjs/Form/Form.js +39 -30
  46. package/cjs/Form/FormContext.d.ts +1 -0
  47. package/cjs/FormControl/FormControl.d.ts +11 -1
  48. package/cjs/FormControl/FormControl.js +40 -17
  49. package/cjs/FormGroup/FormGroup.js +2 -1
  50. package/cjs/InputPicker/InputPicker.js +108 -92
  51. package/cjs/InputPicker/InputSearch.js +3 -15
  52. package/cjs/InputPicker/TagList.d.ts +3 -0
  53. package/cjs/InputPicker/TagList.js +29 -0
  54. package/cjs/InputPicker/TextBox.d.ts +18 -0
  55. package/cjs/InputPicker/TextBox.js +48 -0
  56. package/cjs/MultiCascader/MultiCascader.js +53 -52
  57. package/cjs/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
  58. package/cjs/MultiCascader/{DropdownMenu.js → TreeView.js} +77 -74
  59. package/{esm/Picker/DropdownMenuCheckItem.d.ts → cjs/Picker/ListCheckItem.d.ts} +3 -3
  60. package/cjs/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +14 -30
  61. package/cjs/Picker/{DropdownMenuItem.d.ts → ListItem.d.ts} +4 -4
  62. package/cjs/Picker/{DropdownMenuItem.js → ListItem.js} +15 -24
  63. package/cjs/Picker/ListItemGroup.d.ts +6 -0
  64. package/cjs/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
  65. package/cjs/Picker/Listbox.d.ts +35 -0
  66. package/cjs/Picker/{DropdownMenu.js → Listbox.js} +49 -64
  67. package/cjs/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  68. package/cjs/{DatePicker → Picker}/PickerIndicator.js +2 -1
  69. package/cjs/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  70. package/cjs/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
  71. package/cjs/Picker/{PickerOverlay.js → PickerPopup.js} +9 -7
  72. package/cjs/Picker/PickerToggle.d.ts +17 -22
  73. package/cjs/Picker/PickerToggle.js +63 -181
  74. package/cjs/Picker/PickerToggleTrigger.d.ts +15 -0
  75. package/cjs/Picker/PickerToggleTrigger.js +21 -5
  76. package/cjs/Picker/SearchBar.js +7 -9
  77. package/cjs/Picker/TreeView.d.ts +7 -0
  78. package/cjs/Picker/TreeView.js +31 -0
  79. package/cjs/Picker/hooks/index.d.ts +6 -0
  80. package/cjs/Picker/hooks/index.js +18 -0
  81. package/cjs/Picker/hooks/useCombobox.d.ts +7 -0
  82. package/cjs/Picker/hooks/useCombobox.js +22 -0
  83. package/cjs/Picker/hooks/useFocusItemValue.d.ts +30 -0
  84. package/cjs/Picker/hooks/useFocusItemValue.js +246 -0
  85. package/cjs/Picker/hooks/usePickerClassName.d.ts +21 -0
  86. package/cjs/Picker/hooks/usePickerClassName.js +39 -0
  87. package/cjs/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +5 -3
  88. package/cjs/Picker/{usePickerRef.js → hooks/usePickerRef.js} +13 -7
  89. package/cjs/Picker/hooks/useSearch.d.ts +18 -0
  90. package/cjs/Picker/hooks/useSearch.js +57 -0
  91. package/cjs/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
  92. package/cjs/Picker/hooks/useToggleKeyDownEvent.js +101 -0
  93. package/cjs/Picker/index.d.ts +9 -5
  94. package/cjs/Picker/index.js +32 -16
  95. package/cjs/Picker/propTypes.d.ts +0 -6
  96. package/cjs/Picker/propTypes.js +0 -5
  97. package/cjs/Picker/utils.d.ts +2 -100
  98. package/cjs/Picker/utils.js +1 -473
  99. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  100. package/cjs/SelectPicker/SelectPicker.js +47 -50
  101. package/cjs/TagInput/index.js +4 -0
  102. package/cjs/TreePicker/TreeNode.d.ts +2 -2
  103. package/cjs/TreePicker/TreeNode.js +22 -56
  104. package/cjs/TreePicker/TreePicker.js +91 -95
  105. package/cjs/utils/constants.d.ts +2 -1
  106. package/cjs/utils/constants.js +1 -0
  107. package/cjs/utils/dateUtils.d.ts +0 -1
  108. package/cjs/utils/dateUtils.js +0 -6
  109. package/cjs/utils/getStringLength.d.ts +2 -0
  110. package/cjs/utils/getStringLength.js +18 -0
  111. package/cjs/utils/index.d.ts +1 -0
  112. package/cjs/utils/index.js +4 -1
  113. package/dist/rsuite-no-reset-rtl.css +201 -186
  114. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  115. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  116. package/dist/rsuite-no-reset.css +201 -186
  117. package/dist/rsuite-no-reset.min.css +1 -1
  118. package/dist/rsuite-no-reset.min.css.map +1 -1
  119. package/dist/rsuite-rtl.css +201 -186
  120. package/dist/rsuite-rtl.min.css +1 -1
  121. package/dist/rsuite-rtl.min.css.map +1 -1
  122. package/dist/rsuite.css +201 -186
  123. package/dist/rsuite.js +235 -104
  124. package/dist/rsuite.js.map +1 -1
  125. package/dist/rsuite.min.css +1 -1
  126. package/dist/rsuite.min.css.map +1 -1
  127. package/dist/rsuite.min.js +1 -1
  128. package/dist/rsuite.min.js.map +1 -1
  129. package/esm/@types/common.d.ts +8 -0
  130. package/esm/AutoComplete/AutoComplete.js +42 -40
  131. package/esm/AutoComplete/Combobox.d.ts +8 -0
  132. package/esm/AutoComplete/Combobox.js +25 -0
  133. package/esm/Calendar/Calendar.d.ts +5 -1
  134. package/esm/Calendar/CalendarContainer.d.ts +5 -1
  135. package/esm/Calendar/CalendarContainer.js +37 -39
  136. package/esm/Cascader/Cascader.js +61 -62
  137. package/esm/Cascader/DropdownMenu.d.ts +3 -20
  138. package/esm/Cascader/DropdownMenu.js +50 -49
  139. package/esm/Cascader/TreeView.d.ts +24 -0
  140. package/esm/Cascader/TreeView.js +167 -0
  141. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  142. package/esm/CheckPicker/CheckPicker.js +45 -47
  143. package/esm/CheckTreePicker/CheckTreeNode.d.ts +2 -2
  144. package/esm/CheckTreePicker/CheckTreeNode.js +33 -61
  145. package/esm/CheckTreePicker/CheckTreePicker.js +84 -87
  146. package/esm/DatePicker/DatePicker.d.ts +5 -1
  147. package/esm/DatePicker/DatePicker.js +5 -8
  148. package/esm/DatePicker/Toolbar.js +2 -1
  149. package/esm/DateRangeInput/DateRangeInput.js +2 -2
  150. package/esm/DateRangePicker/Calendar.js +25 -23
  151. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  152. package/esm/DateRangePicker/DateRangePicker.js +241 -204
  153. package/esm/DateRangePicker/types.d.ts +11 -3
  154. package/esm/DateRangePicker/utils.d.ts +2 -1
  155. package/esm/DateRangePicker/utils.js +7 -5
  156. package/esm/Form/Form.d.ts +14 -0
  157. package/esm/Form/Form.js +41 -32
  158. package/esm/Form/FormContext.d.ts +1 -0
  159. package/esm/FormControl/FormControl.d.ts +11 -1
  160. package/esm/FormControl/FormControl.js +41 -18
  161. package/esm/FormGroup/FormGroup.js +3 -2
  162. package/esm/InputPicker/InputPicker.js +110 -94
  163. package/esm/InputPicker/InputSearch.js +4 -15
  164. package/esm/InputPicker/TagList.d.ts +3 -0
  165. package/esm/InputPicker/TagList.js +23 -0
  166. package/esm/InputPicker/TextBox.d.ts +18 -0
  167. package/esm/InputPicker/TextBox.js +42 -0
  168. package/esm/MultiCascader/MultiCascader.js +56 -55
  169. package/esm/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
  170. package/esm/MultiCascader/{DropdownMenu.js → TreeView.js} +79 -75
  171. package/{cjs/Picker/DropdownMenuCheckItem.d.ts → esm/Picker/ListCheckItem.d.ts} +3 -3
  172. package/esm/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +15 -30
  173. package/esm/Picker/{DropdownMenuItem.d.ts → ListItem.d.ts} +4 -4
  174. package/esm/Picker/{DropdownMenuItem.js → ListItem.js} +16 -24
  175. package/esm/Picker/ListItemGroup.d.ts +6 -0
  176. package/esm/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
  177. package/esm/Picker/Listbox.d.ts +35 -0
  178. package/esm/Picker/{DropdownMenu.js → Listbox.js} +50 -64
  179. package/esm/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  180. package/esm/{DatePicker → Picker}/PickerIndicator.js +2 -1
  181. package/esm/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  182. package/esm/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
  183. package/esm/Picker/{PickerOverlay.js → PickerPopup.js} +10 -8
  184. package/esm/Picker/PickerToggle.d.ts +17 -22
  185. package/esm/Picker/PickerToggle.js +65 -183
  186. package/esm/Picker/PickerToggleTrigger.d.ts +15 -0
  187. package/esm/Picker/PickerToggleTrigger.js +20 -5
  188. package/esm/Picker/SearchBar.js +8 -9
  189. package/esm/Picker/TreeView.d.ts +7 -0
  190. package/esm/Picker/TreeView.js +25 -0
  191. package/esm/Picker/hooks/index.d.ts +6 -0
  192. package/esm/Picker/hooks/index.js +7 -0
  193. package/esm/Picker/hooks/useCombobox.d.ts +7 -0
  194. package/esm/Picker/hooks/useCombobox.js +17 -0
  195. package/esm/Picker/hooks/useFocusItemValue.d.ts +30 -0
  196. package/esm/Picker/hooks/useFocusItemValue.js +240 -0
  197. package/esm/Picker/hooks/usePickerClassName.d.ts +21 -0
  198. package/esm/Picker/hooks/usePickerClassName.js +33 -0
  199. package/esm/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +5 -3
  200. package/esm/Picker/{usePickerRef.js → hooks/usePickerRef.js} +13 -8
  201. package/esm/Picker/hooks/useSearch.d.ts +18 -0
  202. package/esm/Picker/hooks/useSearch.js +51 -0
  203. package/esm/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
  204. package/esm/Picker/hooks/useToggleKeyDownEvent.js +96 -0
  205. package/esm/Picker/index.d.ts +9 -5
  206. package/esm/Picker/index.js +9 -5
  207. package/esm/Picker/propTypes.d.ts +0 -6
  208. package/esm/Picker/propTypes.js +0 -5
  209. package/esm/Picker/utils.d.ts +2 -100
  210. package/esm/Picker/utils.js +2 -467
  211. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  212. package/esm/SelectPicker/SelectPicker.js +50 -53
  213. package/esm/TagInput/index.js +4 -0
  214. package/esm/TreePicker/TreeNode.d.ts +2 -2
  215. package/esm/TreePicker/TreeNode.js +24 -58
  216. package/esm/TreePicker/TreePicker.js +94 -98
  217. package/esm/utils/constants.d.ts +2 -1
  218. package/esm/utils/constants.js +1 -0
  219. package/esm/utils/dateUtils.d.ts +0 -1
  220. package/esm/utils/dateUtils.js +0 -5
  221. package/esm/utils/getStringLength.d.ts +2 -0
  222. package/esm/utils/getStringLength.js +13 -0
  223. package/esm/utils/index.d.ts +1 -0
  224. package/esm/utils/index.js +1 -0
  225. package/package.json +1 -1
  226. package/styles/mixins/combobox.less +10 -0
  227. package/styles/variables.less +1 -3
  228. package/cjs/Picker/DropdownMenu.d.ts +0 -59
  229. package/cjs/Picker/DropdownMenuGroup.d.ts +0 -6
  230. package/esm/Picker/DropdownMenu.d.ts +0 -59
  231. package/esm/Picker/DropdownMenuGroup.d.ts +0 -6
  232. /package/cjs/{DatePicker → Picker}/PickerLabel.js +0 -0
  233. /package/esm/{DatePicker → Picker}/PickerLabel.js +0 -0
@@ -1,21 +1,22 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
5
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
5
  exports.__esModule = true;
7
6
  exports.default = void 0;
8
7
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
- var _react = _interopRequireWildcard(require("react"));
11
- var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _react = _interopRequireDefault(require("react"));
12
10
  var _utils = require("../utils");
13
- var DropdownMenuItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
11
+ var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
12
+ var ListItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
14
13
  var _props$as = props.as,
15
14
  Component = _props$as === void 0 ? 'div' : _props$as,
16
- active = props.active,
15
+ _props$role = props.role,
16
+ role = _props$role === void 0 ? 'option' : _props$role,
17
17
  _props$classPrefix = props.classPrefix,
18
18
  classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu-item' : _props$classPrefix,
19
+ active = props.active,
19
20
  children = props.children,
20
21
  className = props.className,
21
22
  disabled = props.disabled,
@@ -24,13 +25,15 @@ var DropdownMenuItem = /*#__PURE__*/_react.default.forwardRef(function (props, r
24
25
  onKeyDown = props.onKeyDown,
25
26
  onSelect = props.onSelect,
26
27
  renderItem = props.renderItem,
27
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "active", "classPrefix", "children", "className", "disabled", "focus", "value", "onKeyDown", "onSelect", "renderItem"]);
28
- var handleClick = (0, _react.useCallback)(function (event) {
28
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "role", "classPrefix", "active", "children", "className", "disabled", "focus", "value", "onKeyDown", "onSelect", "renderItem"]);
29
+ var _useCombobox = (0, _useCombobox2.default)(),
30
+ id = _useCombobox.id;
31
+ var handleClick = (0, _utils.useEventCallback)(function (event) {
29
32
  event.preventDefault();
30
33
  if (!disabled) {
31
34
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, event);
32
35
  }
33
- }, [onSelect, disabled, value]);
36
+ });
34
37
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
35
38
  withClassPrefix = _useClassNames.withClassPrefix;
36
39
  var classes = withClassPrefix({
@@ -39,9 +42,10 @@ var DropdownMenuItem = /*#__PURE__*/_react.default.forwardRef(function (props, r
39
42
  disabled: disabled
40
43
  });
41
44
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
42
- role: "option",
45
+ role: role,
43
46
  "aria-selected": active,
44
47
  "aria-disabled": disabled,
48
+ id: id ? id + "-opt-" + value : undefined,
45
49
  "data-key": value
46
50
  }, rest, {
47
51
  ref: ref,
@@ -53,19 +57,6 @@ var DropdownMenuItem = /*#__PURE__*/_react.default.forwardRef(function (props, r
53
57
  className: classes
54
58
  }, renderItem ? renderItem(value) : children));
55
59
  });
56
- DropdownMenuItem.displayName = 'DropdownMenuItem';
57
- DropdownMenuItem.propTypes = {
58
- classPrefix: _propTypes.default.string,
59
- active: _propTypes.default.bool,
60
- disabled: _propTypes.default.bool,
61
- value: _propTypes.default.any,
62
- onSelect: _propTypes.default.func,
63
- onKeyDown: _propTypes.default.func,
64
- focus: _propTypes.default.bool,
65
- title: _propTypes.default.string,
66
- className: _propTypes.default.string,
67
- children: _propTypes.default.node,
68
- as: _propTypes.default.elementType
69
- };
70
- var _default = DropdownMenuItem;
60
+ ListItem.displayName = 'ListItem';
61
+ var _default = ListItem;
71
62
  exports.default = _default;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { WithAsProps } from '../@types/common';
3
+ export interface ListItemGroupProps extends WithAsProps, React.HTMLAttributes<HTMLDivElement> {
4
+ }
5
+ declare const ListItemGroup: React.ForwardRefExoticComponent<ListItemGroupProps & React.RefAttributes<HTMLDivElement>>;
6
+ export default ListItemGroup;
@@ -8,11 +8,10 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
8
8
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var _react = _interopRequireDefault(require("react"));
11
- var _propTypes = _interopRequireDefault(require("prop-types"));
12
11
  var _utils = require("../utils");
13
12
  var _ArrowDown = _interopRequireDefault(require("@rsuite/icons/legacy/ArrowDown"));
14
13
  var _templateObject, _templateObject2;
15
- var DropdownMenuGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
14
+ var ListItemGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
16
15
  var _props$as = props.as,
17
16
  Component = _props$as === void 0 ? 'div' : _props$as,
18
17
  _props$classPrefix = props.classPrefix,
@@ -38,11 +37,6 @@ var DropdownMenuGroup = /*#__PURE__*/_react.default.forwardRef(function (props,
38
37
  className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["caret"])))
39
38
  })));
40
39
  });
41
- DropdownMenuGroup.displayName = 'DropdownMenuGroup';
42
- DropdownMenuGroup.propTypes = {
43
- classPrefix: _propTypes.default.string,
44
- className: _propTypes.default.string,
45
- children: _propTypes.default.node
46
- };
47
- var _default = DropdownMenuGroup;
40
+ ListItemGroup.displayName = 'ListItemGroup';
41
+ var _default = ListItemGroup;
48
42
  exports.default = _default;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { ListProps, ListHandle } from '../Windowing';
3
+ import { StandardProps, ItemDataType } from '../@types/common';
4
+ export interface ListboxProps<Multiple = false> extends StandardProps, Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
5
+ classPrefix: string;
6
+ data?: ItemDataType[];
7
+ group?: boolean;
8
+ groupBy?: string;
9
+ disabledItemValues?: any[];
10
+ activeItemValues?: any[];
11
+ focusItemValue?: any;
12
+ maxHeight?: number;
13
+ valueKey?: string;
14
+ labelKey?: string;
15
+ className?: string;
16
+ style?: React.CSSProperties;
17
+ listItemAs: React.ElementType | string;
18
+ listItemClassPrefix?: string;
19
+ listItemProps?: any;
20
+ rowHeight?: number;
21
+ rowGroupHeight?: number;
22
+ virtualized?: boolean;
23
+ listProps?: Partial<ListProps>;
24
+ listRef?: React.Ref<ListHandle>;
25
+ /** Custom selected option */
26
+ renderMenuItem?: (itemLabel: React.ReactNode, item: any) => React.ReactNode;
27
+ renderMenuGroup?: (title: React.ReactNode, item: any) => React.ReactNode;
28
+ onSelect?: Multiple extends true ? (value: any, item: any, event: React.MouseEvent, checked: boolean) => void : Multiple extends false ? (value: any, item: any, event: React.MouseEvent) => void : any;
29
+ onGroupTitleClick?: (event: React.MouseEvent) => void;
30
+ }
31
+ export declare type ListboxComponent = React.ForwardRefExoticComponent<ListboxProps> & {
32
+ <Multiple = false>(props: ListboxProps<Multiple>): React.ReactElement | null;
33
+ };
34
+ declare const Listbox: ListboxComponent;
35
+ export default Listbox;
@@ -4,12 +4,10 @@
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
  exports.__esModule = true;
7
- exports.default = exports.dropdownMenuPropTypes = void 0;
7
+ exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
- var _get2 = _interopRequireDefault(require("lodash/get"));
11
10
  var _react = _interopRequireWildcard(require("react"));
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
11
  var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
14
12
  var _isString = _interopRequireDefault(require("lodash/isString"));
15
13
  var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
@@ -18,14 +16,16 @@ var _pickBy = _interopRequireDefault(require("lodash/pickBy"));
18
16
  var _getPosition = _interopRequireDefault(require("dom-lib/getPosition"));
19
17
  var _scrollTop = _interopRequireDefault(require("dom-lib/scrollTop"));
20
18
  var _getHeight = _interopRequireDefault(require("dom-lib/getHeight"));
19
+ var _get = _interopRequireDefault(require("lodash/get"));
21
20
  var _classnames = _interopRequireDefault(require("classnames"));
22
21
  var _Windowing = require("../Windowing");
23
22
  var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
24
23
  var _utils = require("../utils");
25
- var _DropdownMenuGroup = _interopRequireDefault(require("./DropdownMenuGroup"));
24
+ var _ListItemGroup = _interopRequireDefault(require("./ListItemGroup"));
26
25
  var _getDataGroupBy = require("../utils/getDataGroupBy");
26
+ var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
27
27
  var _this = void 0;
28
- var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
28
+ var Listbox = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
29
  var _props$data = props.data,
30
30
  data = _props$data === void 0 ? [] : _props$data,
31
31
  group = props.group,
@@ -48,9 +48,9 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
48
48
  className = props.className,
49
49
  style = props.style,
50
50
  focusItemValue = props.focusItemValue,
51
- dropdownMenuItemClassPrefix = props.dropdownMenuItemClassPrefix,
52
- DropdownMenuItem = props.dropdownMenuItemAs,
53
- dropdownMenuItemProps = props.dropdownMenuItemProps,
51
+ listItemClassPrefix = props.listItemClassPrefix,
52
+ ListItem = props.listItemAs,
53
+ listItemProps = props.listItemProps,
54
54
  _props$rowHeight = props.rowHeight,
55
55
  rowHeight = _props$rowHeight === void 0 ? 36 : _props$rowHeight,
56
56
  _props$rowGroupHeight = props.rowGroupHeight,
@@ -59,7 +59,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
59
59
  renderMenuItem = props.renderMenuItem,
60
60
  onGroupTitleClick = props.onGroupTitleClick,
61
61
  onSelect = props.onSelect,
62
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["data", "group", "groupBy", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "dropdownMenuItemProps", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
62
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["data", "group", "groupBy", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "focusItemValue", "listItemClassPrefix", "listItemAs", "listItemProps", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
63
63
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
64
64
  withClassPrefix = _useClassNames.withClassPrefix,
65
65
  prefix = _useClassNames.prefix,
@@ -67,12 +67,17 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
67
67
  var classes = merge(className, withClassPrefix('items', {
68
68
  grouped: group
69
69
  }));
70
+ var _useCombobox = (0, _useCombobox2.default)(),
71
+ id = _useCombobox.id,
72
+ labelId = _useCombobox.labelId,
73
+ popupType = _useCombobox.popupType,
74
+ multiple = _useCombobox.multiple;
70
75
  var menuBodyContainerRef = (0, _react.useRef)(null);
71
76
  var listRef = (0, _react.useRef)(null);
72
77
  var _useState = (0, _react.useState)([]),
73
78
  foldedGroupKeys = _useState[0],
74
79
  setFoldedGroupKeys = _useState[1];
75
- var handleGroupTitleClick = (0, _react.useCallback)(function (key, event) {
80
+ var handleGroupTitleClick = (0, _utils.useEventCallback)(function (key, event) {
76
81
  var nextGroupKeys = foldedGroupKeys.filter(function (item) {
77
82
  return item !== key;
78
83
  });
@@ -81,10 +86,10 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
81
86
  }
82
87
  setFoldedGroupKeys(nextGroupKeys);
83
88
  onGroupTitleClick === null || onGroupTitleClick === void 0 ? void 0 : onGroupTitleClick(event);
84
- }, [onGroupTitleClick, foldedGroupKeys]);
85
- var handleSelect = (0, _react.useCallback)(function (item, value, event, checked) {
89
+ });
90
+ var handleSelect = (0, _utils.useEventCallback)(function (item, value, event, checked) {
86
91
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, item, event, checked);
87
- }, [onSelect]);
92
+ });
88
93
  var getRowHeight = function getRowHeight(list, index) {
89
94
  var item = list[index];
90
95
  if (group && item[_getDataGroupBy.KEY_GROUP] && index !== 0) {
@@ -113,6 +118,24 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
113
118
  (0, _scrollTop.default)(container, Math.max(0, position.top - sHeight + 32));
114
119
  }
115
120
  }, [focusItemValue, menuBodyContainerRef, prefix]);
121
+ var filteredItems = group ? data.filter(function (item) {
122
+ var _item$parent;
123
+ // Display group title items
124
+ if (item[_getDataGroupBy.KEY_GROUP]) return true;
125
+
126
+ // Display items under the unfolded group
127
+ // FIXME-Doma
128
+ // `groupBy` is bound to be string when `group` is true
129
+ // because `group` is actually redundant as a prop
130
+ // It could simply be derived from `groupBy` value
131
+ var groupValue = (0, _get.default)(item, groupBy, '') || ( // FIXME-Doma
132
+ // Usage of `item.parent` is strongly discouraged
133
+ // It's only here for legacy support
134
+ // Remove once `item.parent` is completely removed across related components
135
+ (_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[_getDataGroupBy.KEY_GROUP_TITLE]);
136
+ return !foldedGroupKeys.includes(groupValue);
137
+ }) : data;
138
+ var rowCount = filteredItems.length;
116
139
  var renderItem = function renderItem(_ref) {
117
140
  var _ref$index = _ref.index,
118
141
  index = _ref$index === void 0 ? 0 : _ref$index,
@@ -130,13 +153,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
130
153
  var itemKey = (0, _isString.default)(value) || (0, _isNumber.default)(value) ? value : index;
131
154
 
132
155
  /**
133
- * Render <DropdownMenuGroup>
156
+ * Render <ListboxGroup>
134
157
  * when if `group` is enabled
135
158
  */
136
159
  if (group && item[_getDataGroupBy.KEY_GROUP]) {
137
160
  var groupValue = item[_getDataGroupBy.KEY_GROUP_TITLE];
138
161
  // TODO: grouped options should be owned by group
139
- return /*#__PURE__*/_react.default.createElement(_DropdownMenuGroup.default, {
162
+ return /*#__PURE__*/_react.default.createElement(_ListItemGroup.default, {
140
163
  style: style,
141
164
  classPrefix: 'picker-menu-group',
142
165
  className: (0, _classnames.default)({
@@ -157,37 +180,21 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
157
180
  return (0, _shallowEqual.default)(v, value);
158
181
  });
159
182
  var focus = !(0, _isUndefined.default)(focusItemValue) && (0, _shallowEqual.default)(focusItemValue, value);
160
- return /*#__PURE__*/_react.default.createElement(DropdownMenuItem, (0, _extends2.default)({
183
+ return /*#__PURE__*/_react.default.createElement(ListItem, (0, _extends2.default)({
184
+ "aria-posinset": index + 1,
185
+ "aria-setsize": rowCount,
161
186
  style: style,
162
187
  key: itemKey,
163
188
  disabled: disabled,
164
189
  active: active,
165
190
  focus: focus,
166
191
  value: value,
167
- classPrefix: dropdownMenuItemClassPrefix,
192
+ classPrefix: listItemClassPrefix,
168
193
  onSelect: handleSelect.bind(null, item)
169
- }, (0, _pickBy.default)(dropdownMenuItemProps, function (v) {
194
+ }, (0, _pickBy.default)(listItemProps, function (v) {
170
195
  return v !== undefined;
171
196
  })), renderMenuItem ? renderMenuItem(label, item) : label);
172
197
  };
173
- var filteredItems = group ? data.filter(function (item) {
174
- var _item$parent;
175
- // Display group title items
176
- if (item[_getDataGroupBy.KEY_GROUP]) return true;
177
-
178
- // Display items under the unfolded group
179
- // FIXME-Doma
180
- // `groupBy` is bound to be string when `group` is true
181
- // because `group` is actually redundant as a prop
182
- // It could simply be derived from `groupBy` value
183
- var groupValue = (0, _get2.default)(item, groupBy, '') || ( // FIXME-Doma
184
- // Usage of `item.parent` is strongly discouraged
185
- // It's only here for legacy support
186
- // Remove once `item.parent` is completely removed across related components
187
- (_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[_getDataGroupBy.KEY_GROUP_TITLE]);
188
- return !foldedGroupKeys.includes(groupValue);
189
- }) : data;
190
- var rowCount = filteredItems.length;
191
198
  (0, _utils.useMount)(function () {
192
199
  var _listRef$current, _listRef$current$scro;
193
200
  var itemIndex = (0, _findIndex.default)(filteredItems, function (item) {
@@ -196,7 +203,10 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
196
203
  (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : (_listRef$current$scro = _listRef$current.scrollToItem) === null || _listRef$current$scro === void 0 ? void 0 : _listRef$current$scro.call(_listRef$current, itemIndex);
197
204
  });
198
205
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
199
- role: "listbox"
206
+ role: "listbox",
207
+ id: id + "-" + popupType,
208
+ "aria-labelledby": labelId,
209
+ "aria-multiselectable": multiple
200
210
  }, rest, {
201
211
  className: classes,
202
212
  ref: (0, _utils.mergeRefs)(menuBodyContainerRef, ref),
@@ -226,31 +236,6 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
226
236
  });
227
237
  }));
228
238
  });
229
- var dropdownMenuPropTypes = {
230
- classPrefix: _propTypes.default.string.isRequired,
231
- className: _propTypes.default.string,
232
- dropdownMenuItemAs: _propTypes.default.elementType.isRequired,
233
- dropdownMenuItemClassPrefix: _propTypes.default.string,
234
- data: _propTypes.default.array,
235
- group: _propTypes.default.bool,
236
- disabledItemValues: _propTypes.default.array,
237
- activeItemValues: _propTypes.default.array,
238
- focusItemValue: _propTypes.default.any,
239
- maxHeight: _propTypes.default.number,
240
- valueKey: _propTypes.default.string,
241
- labelKey: _propTypes.default.string,
242
- style: _propTypes.default.object,
243
- renderMenuItem: _propTypes.default.func,
244
- renderMenuGroup: _propTypes.default.func,
245
- onSelect: _propTypes.default.func,
246
- onGroupTitleClick: _propTypes.default.func,
247
- virtualized: _propTypes.default.bool,
248
- listProps: _propTypes.default.any,
249
- rowHeight: _propTypes.default.number,
250
- rowGroupHeight: _propTypes.default.number
251
- };
252
- exports.dropdownMenuPropTypes = dropdownMenuPropTypes;
253
- DropdownMenu.displayName = 'DropdownMenu';
254
- DropdownMenu.propTypes = dropdownMenuPropTypes;
255
- var _default = DropdownMenu;
239
+ Listbox.displayName = 'Listbox';
240
+ var _default = Listbox;
256
241
  exports.default = _default;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  interface PickerIndicatorProps {
3
3
  loading?: boolean;
4
4
  caretAs?: React.ElementType | null;
5
- onClose?: () => void;
5
+ onClose?: (event: React.MouseEvent<HTMLElement>) => void;
6
6
  showCleanButton?: boolean;
7
7
  as?: React.ElementType;
8
8
  }
@@ -39,7 +39,8 @@ var PickerIndicator = function PickerIndicator(_ref) {
39
39
  });
40
40
  }
41
41
  return caretAs && /*#__PURE__*/_react.default.createElement(_icons.Icon, {
42
- as: caretAs
42
+ as: caretAs,
43
+ className: prefix('caret-icon')
43
44
  });
44
45
  };
45
46
  return /*#__PURE__*/_react.default.createElement(Component, null, addon());
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  interface PickerLabelProps {
3
- id: string;
3
+ id?: string;
4
4
  className?: string;
5
5
  children?: React.ReactNode;
6
6
  as?: React.ElementType;
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
3
  import { OverlayTriggerHandle } from '../Picker';
4
- export interface PickerOverlayProps extends WithAsProps {
4
+ export interface PickerPopupProps extends WithAsProps {
5
5
  placement?: string;
6
6
  autoWidth?: boolean;
7
7
  children?: React.ReactNode;
8
8
  target?: React.RefObject<OverlayTriggerHandle>;
9
9
  onKeyDown?: (event: React.KeyboardEvent) => void;
10
10
  }
11
- declare const PickerOverlay: RsRefForwardingComponent<'div', PickerOverlayProps>;
12
- export default PickerOverlay;
11
+ declare const PickerPopup: RsRefForwardingComponent<'div', PickerPopupProps>;
12
+ export default PickerPopup;
@@ -14,11 +14,11 @@ var _getWidth = _interopRequireDefault(require("dom-lib/getWidth"));
14
14
  var _utils = require("../utils");
15
15
  var omitProps = ['placement', 'arrowOffsetLeft', 'arrowOffsetTop', 'positionLeft', 'positionTop', 'getPositionInstance', 'getToggleInstance', 'autoWidth'];
16
16
  var resizePlacement = ['topStart', 'topEnd', 'leftEnd', 'rightEnd', 'auto', 'autoVerticalStart', 'autoVerticalEnd', 'autoHorizontalEnd'];
17
- var PickerOverlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
17
+ var PickerPopup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
18
18
  var _props$as = props.as,
19
19
  Component = _props$as === void 0 ? 'div' : _props$as,
20
20
  _props$classPrefix = props.classPrefix,
21
- classPrefix = _props$classPrefix === void 0 ? 'picker-menu' : _props$classPrefix,
21
+ classPrefix = _props$classPrefix === void 0 ? 'picker-popup' : _props$classPrefix,
22
22
  autoWidth = props.autoWidth,
23
23
  className = props.className,
24
24
  _props$placement = props.placement,
@@ -26,12 +26,12 @@ var PickerOverlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
26
26
  target = props.target,
27
27
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "autoWidth", "className", "placement", "target"]);
28
28
  var overlayRef = (0, _react.useRef)(null);
29
- var handleResize = (0, _react.useCallback)(function () {
29
+ var handleResize = (0, _utils.useEventCallback)(function () {
30
30
  var instance = target === null || target === void 0 ? void 0 : target.current;
31
31
  if (instance && resizePlacement.includes(placement)) {
32
32
  instance.updatePosition();
33
33
  }
34
- }, [target, placement]);
34
+ });
35
35
  (0, _utils.useElementResize)((0, _react.useCallback)(function () {
36
36
  return overlayRef.current;
37
37
  }, []), handleResize);
@@ -50,11 +50,13 @@ var PickerOverlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
50
50
  withClassPrefix = _useClassNames.withClassPrefix,
51
51
  merge = _useClassNames.merge;
52
52
  var classes = merge(className, withClassPrefix());
53
- return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, (0, _omit.default)(rest, omitProps), {
53
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
54
+ "data-testid": "picker-popup"
55
+ }, (0, _omit.default)(rest, omitProps), {
54
56
  ref: (0, _utils.mergeRefs)(overlayRef, ref),
55
57
  className: classes
56
58
  }));
57
59
  });
58
- PickerOverlay.displayName = 'PickerOverlay';
59
- var _default = PickerOverlay;
60
+ PickerPopup.displayName = 'PickerPopup';
61
+ var _default = PickerPopup;
60
62
  exports.default = _default;
@@ -4,38 +4,33 @@ import { RsRefForwardingComponent, TypeAttributes } from '../@types/common';
4
4
  import { IconProps } from '@rsuite/icons/lib/Icon';
5
5
  declare type ValueType = string | number;
6
6
  export interface PickerToggleProps extends ToggleButtonProps {
7
- value?: ValueType | ValueType[];
8
- inputValue?: ValueType | ValueType[];
9
- id?: string;
7
+ active?: boolean;
10
8
  hasValue?: boolean;
11
9
  cleanable?: boolean;
12
10
  caret?: boolean;
13
- active?: boolean;
14
- disabled?: boolean;
15
- readOnly?: boolean;
16
- plaintext?: boolean;
17
- tabIndex?: number;
18
- /** Whether to display an loading indicator on toggle button */
19
- loading?: boolean;
20
- editable?: boolean;
21
- name?: string;
22
- inputPlaceholder?: string;
23
- inputMask?: (string | RegExp)[];
24
- onInputChange?: (value: string, event: React.ChangeEvent) => void;
25
- onInputPressEnter?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
26
- onInputBackspace?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
27
- onInputBlur?: (event: React.FocusEvent<HTMLElement>) => void;
28
- onInputFocus?: (event: React.FocusEvent<HTMLElement>) => void;
29
- placement?: TypeAttributes.Placement;
30
11
  /**
31
12
  * Custom caret component
32
13
  * @deprecated Use `caretAs` instead
33
14
  */
34
15
  caretComponent?: React.FC<IconProps>;
35
- /** Custom caret component */
16
+ /**
17
+ * Custom caret component
18
+ */
36
19
  caretAs?: React.ElementType;
37
- onClean?: (event: React.MouseEvent) => void;
20
+ disabled?: boolean;
21
+ placement?: TypeAttributes.Placement;
22
+ readOnly?: boolean;
23
+ plaintext?: boolean;
24
+ tabIndex?: number;
25
+ /**
26
+ * Whether to display an loading indicator on toggle button
27
+ */
28
+ loading?: boolean;
38
29
  label?: React.ReactNode;
30
+ name?: string;
31
+ inputValue?: ValueType | ValueType[];
32
+ focusItemValue?: ValueType | null;
33
+ onClean?: (event: React.MouseEvent) => void;
39
34
  }
40
35
  declare const PickerToggle: RsRefForwardingComponent<typeof ToggleButton, PickerToggleProps>;
41
36
  export default PickerToggle;