rsuite 5.50.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 (177) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/CheckTreePicker/styles/index.less +3 -3
  3. package/DatePicker/styles/index.less +1 -1
  4. package/Form/styles/mixin.less +1 -2
  5. package/InputGroup/styles/index.less +0 -14
  6. package/InputPicker/styles/index.less +1 -1
  7. package/Picker/styles/index.less +2 -2
  8. package/Picker/styles/mixin.less +3 -3
  9. package/TagInput/styles/index.less +1 -1
  10. package/TagPicker/styles/index.less +5 -1
  11. package/TreePicker/styles/index.less +2 -2
  12. package/cjs/@types/common.d.ts +8 -0
  13. package/cjs/AutoComplete/AutoComplete.js +14 -11
  14. package/cjs/AutoComplete/Combobox.d.ts +8 -0
  15. package/cjs/AutoComplete/Combobox.js +31 -0
  16. package/cjs/Calendar/CalendarContainer.js +35 -37
  17. package/cjs/Cascader/Cascader.js +12 -11
  18. package/cjs/Cascader/DropdownMenu.d.ts +3 -20
  19. package/cjs/Cascader/DropdownMenu.js +48 -48
  20. package/cjs/Cascader/TreeView.d.ts +24 -0
  21. package/cjs/Cascader/TreeView.js +174 -0
  22. package/cjs/CheckPicker/CheckPicker.js +9 -8
  23. package/cjs/CheckTreePicker/CheckTreeNode.d.ts +2 -2
  24. package/cjs/CheckTreePicker/CheckTreeNode.js +31 -59
  25. package/cjs/CheckTreePicker/CheckTreePicker.js +20 -20
  26. package/cjs/DatePicker/DatePicker.js +5 -6
  27. package/cjs/DateRangePicker/DateRangePicker.js +3 -4
  28. package/cjs/Form/Form.d.ts +14 -0
  29. package/cjs/Form/Form.js +39 -30
  30. package/cjs/Form/FormContext.d.ts +1 -0
  31. package/cjs/FormControl/FormControl.js +40 -18
  32. package/cjs/FormGroup/FormGroup.js +2 -1
  33. package/cjs/InputPicker/InputPicker.js +46 -29
  34. package/cjs/InputPicker/InputSearch.js +3 -15
  35. package/cjs/InputPicker/TagList.d.ts +3 -0
  36. package/cjs/InputPicker/TagList.js +29 -0
  37. package/cjs/InputPicker/TextBox.d.ts +18 -0
  38. package/cjs/InputPicker/TextBox.js +48 -0
  39. package/cjs/MultiCascader/MultiCascader.js +13 -10
  40. package/cjs/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
  41. package/cjs/MultiCascader/{DropdownMenu.js → TreeView.js} +77 -74
  42. package/{esm/Picker/DropdownMenuCheckItem.d.ts → cjs/Picker/ListCheckItem.d.ts} +3 -3
  43. package/cjs/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +14 -30
  44. package/{esm/Picker/DropdownMenuItem.d.ts → cjs/Picker/ListItem.d.ts} +4 -4
  45. package/cjs/Picker/{DropdownMenuItem.js → ListItem.js} +15 -24
  46. package/cjs/Picker/ListItemGroup.d.ts +6 -0
  47. package/cjs/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
  48. package/cjs/Picker/Listbox.d.ts +35 -0
  49. package/cjs/Picker/{DropdownMenu.js → Listbox.js} +49 -64
  50. package/cjs/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
  51. package/cjs/Picker/{PickerOverlay.js → PickerPopup.js} +9 -7
  52. package/cjs/Picker/PickerToggle.d.ts +1 -1
  53. package/cjs/Picker/PickerToggle.js +16 -9
  54. package/cjs/Picker/PickerToggleTrigger.d.ts +15 -0
  55. package/cjs/Picker/PickerToggleTrigger.js +21 -5
  56. package/cjs/Picker/SearchBar.js +7 -9
  57. package/cjs/Picker/TreeView.d.ts +7 -0
  58. package/cjs/Picker/TreeView.js +31 -0
  59. package/cjs/Picker/hooks/index.d.ts +6 -0
  60. package/cjs/Picker/hooks/index.js +18 -0
  61. package/cjs/Picker/hooks/useCombobox.d.ts +7 -0
  62. package/cjs/Picker/hooks/useCombobox.js +22 -0
  63. package/cjs/Picker/hooks/useFocusItemValue.d.ts +30 -0
  64. package/cjs/Picker/hooks/useFocusItemValue.js +246 -0
  65. package/cjs/Picker/hooks/usePickerClassName.d.ts +21 -0
  66. package/cjs/Picker/hooks/usePickerClassName.js +39 -0
  67. package/cjs/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +2 -2
  68. package/cjs/Picker/{usePickerRef.js → hooks/usePickerRef.js} +1 -1
  69. package/cjs/Picker/hooks/useSearch.d.ts +18 -0
  70. package/cjs/Picker/hooks/useSearch.js +57 -0
  71. package/cjs/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
  72. package/cjs/Picker/hooks/useToggleKeyDownEvent.js +101 -0
  73. package/cjs/Picker/index.d.ts +7 -6
  74. package/cjs/Picker/index.js +26 -19
  75. package/cjs/Picker/propTypes.d.ts +0 -6
  76. package/cjs/Picker/propTypes.js +0 -5
  77. package/cjs/Picker/utils.d.ts +2 -96
  78. package/cjs/Picker/utils.js +1 -406
  79. package/cjs/SelectPicker/SelectPicker.js +8 -8
  80. package/cjs/TagInput/index.js +4 -0
  81. package/cjs/TreePicker/TreeNode.d.ts +2 -2
  82. package/cjs/TreePicker/TreeNode.js +22 -56
  83. package/cjs/TreePicker/TreePicker.js +19 -20
  84. package/dist/rsuite-no-reset-rtl.css +109 -117
  85. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  86. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  87. package/dist/rsuite-no-reset.css +109 -117
  88. package/dist/rsuite-no-reset.min.css +1 -1
  89. package/dist/rsuite-no-reset.min.css.map +1 -1
  90. package/dist/rsuite-rtl.css +109 -117
  91. package/dist/rsuite-rtl.min.css +1 -1
  92. package/dist/rsuite-rtl.min.css.map +1 -1
  93. package/dist/rsuite.css +109 -117
  94. package/dist/rsuite.js +184 -74
  95. package/dist/rsuite.js.map +1 -1
  96. package/dist/rsuite.min.css +1 -1
  97. package/dist/rsuite.min.css.map +1 -1
  98. package/dist/rsuite.min.js +1 -1
  99. package/dist/rsuite.min.js.map +1 -1
  100. package/esm/@types/common.d.ts +8 -0
  101. package/esm/AutoComplete/AutoComplete.js +15 -12
  102. package/esm/AutoComplete/Combobox.d.ts +8 -0
  103. package/esm/AutoComplete/Combobox.js +25 -0
  104. package/esm/Calendar/CalendarContainer.js +37 -39
  105. package/esm/Cascader/Cascader.js +13 -12
  106. package/esm/Cascader/DropdownMenu.d.ts +3 -20
  107. package/esm/Cascader/DropdownMenu.js +50 -49
  108. package/esm/Cascader/TreeView.d.ts +24 -0
  109. package/esm/Cascader/TreeView.js +167 -0
  110. package/esm/CheckPicker/CheckPicker.js +10 -9
  111. package/esm/CheckTreePicker/CheckTreeNode.d.ts +2 -2
  112. package/esm/CheckTreePicker/CheckTreeNode.js +33 -61
  113. package/esm/CheckTreePicker/CheckTreePicker.js +21 -21
  114. package/esm/DatePicker/DatePicker.js +5 -6
  115. package/esm/DateRangePicker/DateRangePicker.js +3 -4
  116. package/esm/Form/Form.d.ts +14 -0
  117. package/esm/Form/Form.js +41 -32
  118. package/esm/Form/FormContext.d.ts +1 -0
  119. package/esm/FormControl/FormControl.js +39 -17
  120. package/esm/FormGroup/FormGroup.js +3 -2
  121. package/esm/InputPicker/InputPicker.js +47 -30
  122. package/esm/InputPicker/InputSearch.js +4 -15
  123. package/esm/InputPicker/TagList.d.ts +3 -0
  124. package/esm/InputPicker/TagList.js +23 -0
  125. package/esm/InputPicker/TextBox.d.ts +18 -0
  126. package/esm/InputPicker/TextBox.js +42 -0
  127. package/esm/MultiCascader/MultiCascader.js +14 -11
  128. package/esm/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
  129. package/esm/MultiCascader/{DropdownMenu.js → TreeView.js} +79 -75
  130. package/{cjs/Picker/DropdownMenuCheckItem.d.ts → esm/Picker/ListCheckItem.d.ts} +3 -3
  131. package/esm/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +15 -30
  132. package/{cjs/Picker/DropdownMenuItem.d.ts → esm/Picker/ListItem.d.ts} +4 -4
  133. package/esm/Picker/{DropdownMenuItem.js → ListItem.js} +16 -24
  134. package/esm/Picker/ListItemGroup.d.ts +6 -0
  135. package/esm/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
  136. package/esm/Picker/Listbox.d.ts +35 -0
  137. package/esm/Picker/{DropdownMenu.js → Listbox.js} +50 -64
  138. package/esm/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
  139. package/esm/Picker/{PickerOverlay.js → PickerPopup.js} +10 -8
  140. package/esm/Picker/PickerToggle.d.ts +1 -1
  141. package/esm/Picker/PickerToggle.js +16 -9
  142. package/esm/Picker/PickerToggleTrigger.d.ts +15 -0
  143. package/esm/Picker/PickerToggleTrigger.js +20 -5
  144. package/esm/Picker/SearchBar.js +8 -9
  145. package/esm/Picker/TreeView.d.ts +7 -0
  146. package/esm/Picker/TreeView.js +25 -0
  147. package/esm/Picker/hooks/index.d.ts +6 -0
  148. package/esm/Picker/hooks/index.js +7 -0
  149. package/esm/Picker/hooks/useCombobox.d.ts +7 -0
  150. package/esm/Picker/hooks/useCombobox.js +17 -0
  151. package/esm/Picker/hooks/useFocusItemValue.d.ts +30 -0
  152. package/esm/Picker/hooks/useFocusItemValue.js +240 -0
  153. package/esm/Picker/hooks/usePickerClassName.d.ts +21 -0
  154. package/esm/Picker/hooks/usePickerClassName.js +33 -0
  155. package/esm/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +2 -2
  156. package/esm/Picker/{usePickerRef.js → hooks/usePickerRef.js} +1 -1
  157. package/esm/Picker/hooks/useSearch.d.ts +18 -0
  158. package/esm/Picker/hooks/useSearch.js +51 -0
  159. package/esm/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
  160. package/esm/Picker/hooks/useToggleKeyDownEvent.js +96 -0
  161. package/esm/Picker/index.d.ts +7 -6
  162. package/esm/Picker/index.js +7 -6
  163. package/esm/Picker/propTypes.d.ts +0 -6
  164. package/esm/Picker/propTypes.js +0 -5
  165. package/esm/Picker/utils.d.ts +2 -96
  166. package/esm/Picker/utils.js +2 -401
  167. package/esm/SelectPicker/SelectPicker.js +9 -9
  168. package/esm/TagInput/index.js +4 -0
  169. package/esm/TreePicker/TreeNode.d.ts +2 -2
  170. package/esm/TreePicker/TreeNode.js +24 -58
  171. package/esm/TreePicker/TreePicker.js +20 -21
  172. package/package.json +1 -1
  173. package/styles/variables.less +1 -3
  174. package/cjs/Picker/DropdownMenu.d.ts +0 -59
  175. package/cjs/Picker/DropdownMenuGroup.d.ts +0 -6
  176. package/esm/Picker/DropdownMenu.d.ts +0 -59
  177. package/esm/Picker/DropdownMenuGroup.d.ts +0 -6
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { CheckboxProps } from '../Checkbox';
3
3
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
4
- export interface DropdownMenuCheckItemProps extends WithAsProps {
4
+ export interface ListCheckItemProps extends WithAsProps {
5
5
  active?: boolean;
6
6
  checkboxAs?: React.ElementType | string;
7
7
  classPrefix?: string;
@@ -19,5 +19,5 @@ export interface DropdownMenuCheckItemProps extends WithAsProps {
19
19
  onKeyDown?: (event: React.KeyboardEvent) => void;
20
20
  renderMenuItemCheckbox?: (checkboxProps: CheckboxProps) => React.ReactNode;
21
21
  }
22
- declare const DropdownMenuCheckItem: RsRefForwardingComponent<'div', DropdownMenuCheckItemProps>;
23
- export default DropdownMenuCheckItem;
22
+ declare const ListCheckItem: RsRefForwardingComponent<'div', ListCheckItemProps>;
23
+ export default ListCheckItem;
@@ -1,17 +1,16 @@
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
11
  var _Checkbox = _interopRequireDefault(require("../Checkbox"));
14
- var DropdownMenuCheckItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
12
+ var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
13
+ var ListCheckItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
15
14
  var _props$active = props.active,
16
15
  active = _props$active === void 0 ? false : _props$active,
17
16
  _props$as = props.as,
@@ -34,19 +33,21 @@ var DropdownMenuCheckItem = /*#__PURE__*/_react.default.forwardRef(function (pro
34
33
  onSelectItem = props.onSelectItem,
35
34
  renderMenuItemCheckbox = props.renderMenuItemCheckbox,
36
35
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "checkboxAs", "classPrefix", "checkable", "disabled", "value", "focus", "children", "className", "indeterminate", "onKeyDown", "onSelect", "onCheck", "onSelectItem", "renderMenuItemCheckbox"]);
37
- var handleChange = (0, _react.useCallback)(function (value, checked, event) {
36
+ var handleChange = (0, _utils.useEventCallback)(function (value, checked, event) {
38
37
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, event, checked);
39
- }, [onSelect]);
40
- var handleCheck = (0, _react.useCallback)(function (event) {
38
+ });
39
+ var handleCheck = (0, _utils.useEventCallback)(function (event) {
41
40
  if (!disabled) {
42
41
  onCheck === null || onCheck === void 0 ? void 0 : onCheck(value, event, !active);
43
42
  }
44
- }, [value, disabled, onCheck, active]);
45
- var handleSelectItem = (0, _react.useCallback)(function (event) {
43
+ });
44
+ var handleSelectItem = (0, _utils.useEventCallback)(function (event) {
46
45
  if (!disabled) {
47
46
  onSelectItem === null || onSelectItem === void 0 ? void 0 : onSelectItem(value, event, !active);
48
47
  }
49
- }, [value, disabled, onSelectItem, active]);
48
+ });
49
+ var _useCombobox = (0, _useCombobox2.default)(),
50
+ id = _useCombobox.id;
50
51
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
51
52
  withClassPrefix = _useClassNames.withClassPrefix;
52
53
  var checkboxItemClasses = withClassPrefix({
@@ -69,6 +70,7 @@ var DropdownMenuCheckItem = /*#__PURE__*/_react.default.forwardRef(function (pro
69
70
  role: "option",
70
71
  "aria-selected": active,
71
72
  "aria-disabled": disabled,
73
+ id: id ? id + "-opt-" + value : undefined,
72
74
  "data-key": value
73
75
  }, rest, {
74
76
  ref: ref,
@@ -78,24 +80,6 @@ var DropdownMenuCheckItem = /*#__PURE__*/_react.default.forwardRef(function (pro
78
80
  role: "checkbox"
79
81
  }, checkboxProps)));
80
82
  });
81
- DropdownMenuCheckItem.displayName = 'DropdownMenuCheckItem';
82
- DropdownMenuCheckItem.propTypes = {
83
- classPrefix: _propTypes.default.string,
84
- active: _propTypes.default.bool,
85
- disabled: _propTypes.default.bool,
86
- checkable: _propTypes.default.bool,
87
- indeterminate: _propTypes.default.bool,
88
- value: _propTypes.default.any,
89
- onSelect: _propTypes.default.func,
90
- onCheck: _propTypes.default.func,
91
- onSelectItem: _propTypes.default.func,
92
- onKeyDown: _propTypes.default.func,
93
- focus: _propTypes.default.bool,
94
- title: _propTypes.default.string,
95
- className: _propTypes.default.string,
96
- children: _propTypes.default.node,
97
- as: _propTypes.default.elementType,
98
- checkboxAs: _propTypes.default.elementType
99
- };
100
- var _default = DropdownMenuCheckItem;
83
+ ListCheckItem.displayName = 'ListCheckItem';
84
+ var _default = ListCheckItem;
101
85
  exports.default = _default;
@@ -1,14 +1,14 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
- export interface DropdownMenuItemProps extends WithAsProps {
3
+ export interface ListItemProps extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
4
4
  active?: boolean;
5
5
  disabled?: boolean;
6
- value?: any;
6
+ value?: string | number;
7
7
  focus?: boolean;
8
8
  title?: string;
9
9
  onSelect?: (value: any, event: React.MouseEvent) => void;
10
10
  onKeyDown?: (event: React.KeyboardEvent) => void;
11
11
  renderItem?: (value: any) => React.ReactNode;
12
12
  }
13
- declare const DropdownMenuItem: RsRefForwardingComponent<'div', DropdownMenuItemProps>;
14
- export default DropdownMenuItem;
13
+ declare const ListItem: RsRefForwardingComponent<'div', ListItemProps>;
14
+ export default ListItem;
@@ -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;
@@ -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;
@@ -28,8 +28,8 @@ export interface PickerToggleProps extends ToggleButtonProps {
28
28
  loading?: boolean;
29
29
  label?: React.ReactNode;
30
30
  name?: string;
31
- id?: string;
32
31
  inputValue?: ValueType | ValueType[];
32
+ focusItemValue?: ValueType | null;
33
33
  onClean?: (event: React.MouseEvent) => void;
34
34
  }
35
35
  declare const PickerToggle: RsRefForwardingComponent<typeof ToggleButton, PickerToggleProps>;
@@ -16,6 +16,7 @@ var _useToggleCaret = _interopRequireDefault(require("../utils/useToggleCaret"))
16
16
  var _Stack = _interopRequireDefault(require("../Stack"));
17
17
  var _PickerIndicator = _interopRequireDefault(require("./PickerIndicator"));
18
18
  var _PickerLabel = _interopRequireDefault(require("./PickerLabel"));
19
+ var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
19
20
  var _templateObject;
20
21
  var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
21
22
  var active = props.active,
@@ -36,8 +37,8 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
36
37
  cleanable = props.cleanable,
37
38
  _props$tabIndex = props.tabIndex,
38
39
  tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
39
- id = props.id,
40
40
  inputValueProp = props.inputValue,
41
+ focusItemValue = props.focusItemValue,
41
42
  onClean = props.onClean,
42
43
  _props$placement = props.placement,
43
44
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
@@ -46,12 +47,16 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
46
47
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
47
48
  label = props.label,
48
49
  name = props.name,
49
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "loading", "cleanable", "tabIndex", "id", "inputValue", "onClean", "placement", "caretComponent", "caretAs", "label", "name"]);
50
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "loading", "cleanable", "tabIndex", "inputValue", "focusItemValue", "onClean", "placement", "caretComponent", "caretAs", "label", "name"]);
50
51
  var combobox = (0, _react.useRef)(null);
51
52
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
52
53
  withClassPrefix = _useClassNames.withClassPrefix,
53
54
  merge = _useClassNames.merge,
54
55
  prefix = _useClassNames.prefix;
56
+ var _useCombobox = (0, _useCombobox2.default)(),
57
+ id = _useCombobox.id,
58
+ labelId = _useCombobox.labelId,
59
+ popupType = _useCombobox.popupType;
55
60
  var inputValue = (0, _react.useMemo)(function () {
56
61
  if (typeof inputValueProp === 'number' || typeof inputValueProp === 'string') {
57
62
  return inputValueProp;
@@ -80,10 +85,14 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
80
85
  var showCleanButton = cleanable && hasValue && !readOnly;
81
86
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
82
87
  role: "combobox",
83
- "aria-haspopup": "listbox",
88
+ id: id,
89
+ "aria-haspopup": popupType,
84
90
  "aria-expanded": active,
85
91
  "aria-disabled": disabled,
86
- "aria-owns": id ? id + "-listbox" : undefined
92
+ "aria-controls": id + "-" + popupType,
93
+ "aria-labelledby": labelId,
94
+ "aria-describedby": id + "-describe",
95
+ "aria-activedescendant": active && focusItemValue ? id + "-opt-" + focusItemValue : undefined
87
96
  }, rest, {
88
97
  ref: (0, _utils.mergeRefs)(combobox, ref),
89
98
  disabled: disabled,
@@ -92,7 +101,7 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
92
101
  }), /*#__PURE__*/_react.default.createElement(_Stack.default, null, label && /*#__PURE__*/_react.default.createElement(_Stack.default.Item, null, /*#__PURE__*/_react.default.createElement(_PickerLabel.default, {
93
102
  as: "span",
94
103
  className: prefix('label'),
95
- id: id ? id + "-label" : undefined
104
+ id: labelId
96
105
  }, label)), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
97
106
  grow: 1,
98
107
  style: {
@@ -101,20 +110,18 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
101
110
  }, /*#__PURE__*/_react.default.createElement("input", {
102
111
  readOnly: true,
103
112
  "aria-hidden": true,
104
- "aria-controls": id ? id + "-listbox" : undefined,
105
- "aria-labelledby": label ? id + "-label" : undefined,
106
113
  tabIndex: -1,
107
114
  "data-testid": "picker-toggle-input",
108
115
  name: name,
109
116
  value: inputValue,
110
- id: id,
111
117
  className: prefix('textbox', 'read-only'),
112
118
  style: {
113
119
  pointerEvents: 'none'
114
120
  }
115
121
  }), children ? /*#__PURE__*/_react.default.createElement("span", {
116
122
  className: prefix(hasValue ? 'value' : 'placeholder'),
117
- "aria-placeholder": typeof children === 'string' ? children : undefined
123
+ id: id + "-describe",
124
+ "data-testid": "picker-describe"
118
125
  }, children) : null), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
119
126
  className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["indicator"])))
120
127
  }, /*#__PURE__*/_react.default.createElement(_PickerIndicator.default, {