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
@@ -5,25 +5,21 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
  exports.__esModule = true;
7
7
  exports.default = void 0;
8
- var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
9
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
- var _debounce = _interopRequireDefault(require("lodash/debounce"));
14
12
  var _ToggleButton = _interopRequireDefault(require("./ToggleButton"));
15
- var _CloseButton = _interopRequireDefault(require("../CloseButton"));
16
13
  var _utils = require("../utils");
17
14
  var _Plaintext = _interopRequireDefault(require("../Plaintext"));
18
15
  var _useToggleCaret = _interopRequireDefault(require("../utils/useToggleCaret"));
19
- var _TextMask = _interopRequireDefault(require("../MaskedInput/TextMask"));
20
- var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
21
- var _Loader = _interopRequireDefault(require("../Loader"));
22
16
  var _Stack = _interopRequireDefault(require("../Stack"));
23
- var _templateObject, _templateObject2;
24
- var defaultInputMask = [];
17
+ var _PickerIndicator = _interopRequireDefault(require("./PickerIndicator"));
18
+ var _PickerLabel = _interopRequireDefault(require("./PickerLabel"));
19
+ var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
20
+ var _templateObject;
25
21
  var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
26
- var activeProp = props.active,
22
+ var active = props.active,
27
23
  _props$as = props.as,
28
24
  Component = _props$as === void 0 ? _ToggleButton.default : _props$as,
29
25
  _props$classPrefix = props.classPrefix,
@@ -36,26 +32,14 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
36
32
  readOnly = props.readOnly,
37
33
  plaintext = props.plaintext,
38
34
  hasValue = props.hasValue,
39
- editable = props.editable,
40
35
  _props$loading = props.loading,
41
36
  loading = _props$loading === void 0 ? false : _props$loading,
42
- cleanableProp = props.cleanable,
37
+ cleanable = props.cleanable,
43
38
  _props$tabIndex = props.tabIndex,
44
- tabIndexProp = _props$tabIndex === void 0 ? editable ? -1 : 0 : _props$tabIndex,
45
- id = props.id,
46
- value = props.value,
47
- inputPlaceholder = props.inputPlaceholder,
39
+ tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
48
40
  inputValueProp = props.inputValue,
49
- _props$inputMask = props.inputMask,
50
- inputMask = _props$inputMask === void 0 ? defaultInputMask : _props$inputMask,
51
- onInputChange = props.onInputChange,
52
- onInputPressEnter = props.onInputPressEnter,
53
- onInputBackspace = props.onInputBackspace,
54
- onInputBlur = props.onInputBlur,
55
- onInputFocus = props.onInputFocus,
41
+ focusItemValue = props.focusItemValue,
56
42
  onClean = props.onClean,
57
- onFocus = props.onFocus,
58
- onBlur = props.onBlur,
59
43
  _props$placement = props.placement,
60
44
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
61
45
  caretComponent = props.caretComponent,
@@ -63,102 +47,33 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
63
47
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
64
48
  label = props.label,
65
49
  name = props.name,
66
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "loading", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBackspace", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label", "name"]);
67
- var _useCustom = (0, _utils.useCustom)(),
68
- locale = _useCustom.locale;
69
- var inputRef = (0, _react.useRef)(null);
70
- var comboboxRef = (0, _react.useRef)(null);
71
- var _useState = (0, _react.useState)(false),
72
- activeState = _useState[0],
73
- setActive = _useState[1];
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"]);
51
+ var combobox = (0, _react.useRef)(null);
74
52
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
75
53
  withClassPrefix = _useClassNames.withClassPrefix,
76
54
  merge = _useClassNames.merge,
77
55
  prefix = _useClassNames.prefix;
78
- var getInputValue = (0, _react.useCallback)(function () {
79
- return typeof inputValueProp === 'undefined' ? Array.isArray(value) ? value.join(',') : value : inputValueProp;
80
- }, [inputValueProp, value]);
81
- var _useState2 = (0, _react.useState)(getInputValue),
82
- inputValue = _useState2[0],
83
- setInputValue = _useState2[1];
84
- (0, _react.useEffect)(function () {
85
- if (comboboxRef.current) {
86
- var _value = getInputValue();
87
- setInputValue(_value);
56
+ var _useCombobox = (0, _useCombobox2.default)(),
57
+ id = _useCombobox.id,
58
+ labelId = _useCombobox.labelId,
59
+ popupType = _useCombobox.popupType;
60
+ var inputValue = (0, _react.useMemo)(function () {
61
+ if (typeof inputValueProp === 'number' || typeof inputValueProp === 'string') {
62
+ return inputValueProp;
63
+ } else if (Array.isArray(inputValueProp)) {
64
+ return inputValueProp.join(',');
88
65
  }
89
- }, [getInputValue]);
66
+ return '';
67
+ }, [inputValueProp]);
90
68
  var classes = merge(className, withClassPrefix({
91
- active: activeProp || activeState
69
+ active: active
92
70
  }));
93
- var handleFocus = (0, _react.useCallback)(function (event) {
94
- if (!loading) {
95
- setActive(true);
96
- }
97
- if (editable) {
98
- // Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
99
- if (event.target === inputRef.current) {
100
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
101
- }
102
-
103
- // Force the input to be focused and editable.
104
- if (document.activeElement === comboboxRef.current) {
105
- var _inputRef$current;
106
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
107
- }
108
- } else {
109
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
110
- }
111
- }, [editable, loading, onFocus]);
112
- var handleBlur = (0, _react.useCallback)(function (event) {
113
- if (inputRef.current && !editable) {
114
- setActive(false);
115
- }
116
-
117
- // When activeElement is an input, it remains active.
118
- if (editable && inputRef.current && document.activeElement !== inputRef.current) {
119
- setActive(false);
120
- }
121
- onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
122
- }, [editable, onBlur]);
123
- var handleInputBlur = function handleInputBlur(event) {
124
- setInputValue(getInputValue());
125
- onInputBlur === null || onInputBlur === void 0 ? void 0 : onInputBlur(event);
126
- };
127
- var handleClean = (0, _react.useCallback)(function (event) {
128
- var _inputRef$current2, _comboboxRef$current;
71
+ var handleClean = (0, _utils.useEventCallback)(function (event) {
72
+ var _combobox$current;
129
73
  event.stopPropagation();
130
74
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
131
-
132
- // When the value is cleared, the current component is still in focus.
133
- editable ? (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus() : (_comboboxRef$current = comboboxRef.current) === null || _comboboxRef$current === void 0 ? void 0 : _comboboxRef$current.focus();
134
- }, [editable, onClean]);
135
- var handleInputChange = (0, _react.useCallback)(function (event) {
136
- var _event$target;
137
- var value = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value;
138
- setInputValue(value);
139
- onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
140
- }, [onInputChange]);
141
- var handleInputKeyDown = (0, _react.useCallback)(function (event) {
142
- if (editable) {
143
- if (event.key === _utils.KEY_VALUES.ENTER) {
144
- onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
145
- }
146
- if (event.key === _utils.KEY_VALUES.BACKSPACE) {
147
- onInputBackspace === null || onInputBackspace === void 0 ? void 0 : onInputBackspace(event);
148
- }
149
- }
150
- }, [editable, onInputPressEnter, onInputBackspace]);
151
- var renderInput = (0, _react.useCallback)(function (ref, props) {
152
- return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
153
- type: "text",
154
- autoComplete: "off",
155
- ref: (0, _utils.mergeRefs)(inputRef, ref),
156
- name: name,
157
- style: {
158
- pointerEvents: editable ? undefined : 'none'
159
- }
160
- }, props));
161
- }, [editable, name]);
75
+ (_combobox$current = combobox.current) === null || _combobox$current === void 0 ? void 0 : _combobox$current.focus();
76
+ });
162
77
  var ToggleCaret = (0, _useToggleCaret.default)(placement);
163
78
  var Caret = caretAs !== null && caretAs !== void 0 ? caretAs : ToggleCaret;
164
79
  if (plaintext) {
@@ -167,89 +82,56 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
167
82
  localeKey: "notSelected"
168
83
  }, hasValue ? children : null);
169
84
  }
170
- var showCleanButton = cleanableProp && hasValue && !readOnly;
171
-
172
- // When the component is read-only or disabled, the input is not interactive.
173
- var inputFocused = readOnly || disabled ? false : editable && activeState;
174
- var tabIndex = disabled ? undefined : tabIndexProp;
85
+ var showCleanButton = cleanable && hasValue && !readOnly;
175
86
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
176
87
  role: "combobox",
177
- "aria-haspopup": "listbox",
178
- "aria-expanded": activeProp,
88
+ id: id,
89
+ "aria-haspopup": popupType,
90
+ "aria-expanded": active,
179
91
  "aria-disabled": disabled,
180
- "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
181
96
  }, rest, {
182
- ref: (0, _utils.mergeRefs)(comboboxRef, ref),
97
+ ref: (0, _utils.mergeRefs)(combobox, ref),
183
98
  disabled: disabled,
184
- tabIndex: tabIndex,
185
- className: classes,
186
- onFocus: !disabled ? handleFocus : null
187
- // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
188
- ,
189
- onBlur: !disabled ? (0, _debounce.default)(handleBlur, 200) : null
190
- }), /*#__PURE__*/_react.default.createElement(_Stack.default, null, label && /*#__PURE__*/_react.default.createElement(_Stack.default.Item, null, /*#__PURE__*/_react.default.createElement("span", {
191
- className: prefix('label')
99
+ tabIndex: disabled ? undefined : tabIndex,
100
+ className: classes
101
+ }), /*#__PURE__*/_react.default.createElement(_Stack.default, null, label && /*#__PURE__*/_react.default.createElement(_Stack.default.Item, null, /*#__PURE__*/_react.default.createElement(_PickerLabel.default, {
102
+ as: "span",
103
+ className: prefix('label'),
104
+ id: labelId
192
105
  }, label)), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
193
106
  grow: 1,
194
107
  style: {
195
108
  overflow: 'hidden'
196
109
  }
197
- }, loading ? /*#__PURE__*/_react.default.createElement(_Loader.default, {
110
+ }, /*#__PURE__*/_react.default.createElement("input", {
111
+ readOnly: true,
112
+ "aria-hidden": true,
113
+ tabIndex: -1,
114
+ "data-testid": "picker-toggle-input",
115
+ name: name,
116
+ value: inputValue,
117
+ className: prefix('textbox', 'read-only'),
198
118
  style: {
199
- display: 'block',
200
- padding: '1px 0'
201
- },
202
- "data-testid": "spinner"
203
- }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_TextMask.default, {
204
- keepCharPositions: true,
205
- mask: inputMask,
206
- value: Array.isArray(inputValue) ? inputValue.toString() : inputValue,
207
- onBlur: handleInputBlur,
208
- onFocus: onInputFocus,
209
- onChange: handleInputChange,
210
- onKeyDown: handleInputKeyDown,
211
- id: id,
212
- "aria-hidden": !inputFocused,
213
- readOnly: !inputFocused,
214
- disabled: disabled,
215
- "aria-controls": id ? id + "-listbox" : undefined,
216
- tabIndex: editable ? 0 : -1,
217
- className: prefix('textbox', {
218
- 'read-only': !inputFocused
219
- }),
220
- placeholder: inputPlaceholder,
221
- render: renderInput,
222
- "data-testid": "picker-toggle-input"
119
+ pointerEvents: 'none'
120
+ }
223
121
  }), children ? /*#__PURE__*/_react.default.createElement("span", {
224
122
  className: prefix(hasValue ? 'value' : 'placeholder'),
225
- "aria-placeholder": typeof children === 'string' ? children : undefined
226
- }, children) : null)), showCleanButton && /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
227
- className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["clean"]))),
228
- tabIndex: -1,
229
- locale: {
230
- closeLabel: locale === null || locale === void 0 ? void 0 : locale.clear
231
- },
232
- onClick: handleClean
233
- }), caret && !showCleanButton && /*#__PURE__*/_react.default.createElement(Caret, {
234
- className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["caret"])))
235
- })));
123
+ id: id + "-describe",
124
+ "data-testid": "picker-describe"
125
+ }, children) : null), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
126
+ className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["indicator"])))
127
+ }, /*#__PURE__*/_react.default.createElement(_PickerIndicator.default, {
128
+ as: _react.default.Fragment,
129
+ loading: loading,
130
+ caretAs: caret ? Caret : null,
131
+ onClose: handleClean,
132
+ showCleanButton: showCleanButton
133
+ }))));
236
134
  });
237
135
  PickerToggle.displayName = 'PickerToggle';
238
- PickerToggle.propTypes = {
239
- classPrefix: _propTypes.default.string,
240
- hasValue: _propTypes.default.bool,
241
- cleanable: _propTypes.default.bool,
242
- className: _propTypes.default.string,
243
- children: _propTypes.default.node,
244
- caret: _propTypes.default.bool,
245
- as: _propTypes.default.elementType,
246
- onClean: _propTypes.default.func,
247
- active: _propTypes.default.bool,
248
- readOnly: _propTypes.default.bool,
249
- disabled: _propTypes.default.bool,
250
- plaintext: _propTypes.default.bool,
251
- caretComponent: (0, _deprecatePropType.default)(_propTypes.default.elementType, 'Use `caretAs` instead.'),
252
- caretAs: _propTypes.default.elementType
253
- };
254
136
  var _default = PickerToggle;
255
137
  exports.default = _default;
@@ -4,6 +4,14 @@ import { PositionChildProps } from '../Overlay/Position';
4
4
  import { TypeAttributes, AnimationEventProps } from '../@types/common';
5
5
  export type { OverlayTriggerHandle, PositionChildProps };
6
6
  export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onEntering' | 'onExiting'>, Pick<OverlayTriggerProps, 'speaker' | 'onClose'> {
7
+ id?: string;
8
+ /**
9
+ * Identifies the combobox has having a popout, and indicates the type.
10
+ *
11
+ * @see MDN https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup
12
+ */
13
+ popupType?: 'listbox' | 'tree' | 'grid' | 'dialog' | 'menu';
14
+ multiple?: boolean;
7
15
  placement?: TypeAttributes.Placement;
8
16
  pickerProps: any;
9
17
  open?: boolean;
@@ -12,5 +20,12 @@ export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onE
12
20
  }
13
21
  export declare const omitTriggerPropKeys: string[];
14
22
  export declare const pickTriggerPropKeys: string[];
23
+ export interface ComboboxContextProps {
24
+ id?: string;
25
+ multiple?: boolean;
26
+ hasLabel?: boolean;
27
+ popupType?: 'listbox' | 'tree' | 'grid' | 'dialog' | 'menu';
28
+ }
29
+ export declare const ComboboxContextContext: React.Context<ComboboxContextProps>;
15
30
  declare const PickerToggleTrigger: React.ForwardRefExoticComponent<PickerToggleTriggerProps & React.RefAttributes<any>>;
16
31
  export default PickerToggleTrigger;
@@ -3,7 +3,7 @@
3
3
 
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  exports.__esModule = true;
6
- exports.default = exports.pickTriggerPropKeys = exports.omitTriggerPropKeys = void 0;
6
+ exports.default = exports.ComboboxContextContext = exports.pickTriggerPropKeys = exports.omitTriggerPropKeys = void 0;
7
7
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
9
  var _react = _interopRequireDefault(require("react"));
@@ -12,25 +12,41 @@ var _OverlayTrigger = _interopRequireDefault(require("../Overlay/OverlayTrigger"
12
12
  var _utils = require("../utils");
13
13
  var omitTriggerPropKeys = ['onEntered', 'onExited', 'onEnter', 'onEntering', 'onExit', 'onExiting', 'open', 'defaultOpen', 'container', 'containerPadding', 'preventOverflow'];
14
14
  exports.omitTriggerPropKeys = omitTriggerPropKeys;
15
- var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly', 'loading']);
15
+ var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly', 'loading', 'label']);
16
16
  exports.pickTriggerPropKeys = pickTriggerPropKeys;
17
+ var ComboboxContextContext = /*#__PURE__*/_react.default.createContext({
18
+ popupType: 'listbox'
19
+ });
20
+ exports.ComboboxContextContext = ComboboxContextContext;
17
21
  var PickerToggleTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
18
22
  var pickerProps = props.pickerProps,
19
23
  speaker = props.speaker,
20
24
  placement = props.placement,
21
25
  _props$trigger = props.trigger,
22
26
  trigger = _props$trigger === void 0 ? 'click' : _props$trigger,
23
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["pickerProps", "speaker", "placement", "trigger"]);
27
+ id = props.id,
28
+ multiple = props.multiple,
29
+ _props$popupType = props.popupType,
30
+ popupType = _props$popupType === void 0 ? 'listbox' : _props$popupType,
31
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["pickerProps", "speaker", "placement", "trigger", "id", "multiple", "popupType"]);
24
32
  var pickerTriggerProps = (0, _pick.default)(pickerProps, pickTriggerPropKeys);
33
+ var pickerId = (0, _utils.useUniqueId)('rs-', id);
25
34
  var _useCustom = (0, _utils.useCustom)(),
26
35
  rtl = _useCustom.rtl;
27
- return /*#__PURE__*/_react.default.createElement(_OverlayTrigger.default, (0, _extends2.default)({}, pickerTriggerProps, rest, {
36
+ return /*#__PURE__*/_react.default.createElement(ComboboxContextContext.Provider, {
37
+ value: {
38
+ id: pickerId,
39
+ hasLabel: typeof pickerTriggerProps.label !== 'undefined',
40
+ multiple: multiple,
41
+ popupType: popupType
42
+ }
43
+ }, /*#__PURE__*/_react.default.createElement(_OverlayTrigger.default, (0, _extends2.default)({}, pickerTriggerProps, rest, {
28
44
  disabled: pickerTriggerProps.disabled || pickerTriggerProps.loading,
29
45
  ref: ref,
30
46
  trigger: trigger,
31
47
  placement: (0, _utils.placementPolyfill)(placement, rtl),
32
48
  speaker: speaker
33
- }));
49
+ })));
34
50
  });
35
51
  PickerToggleTrigger.displayName = 'PickerToggleTrigger';
36
52
  var _default = PickerToggleTrigger;
@@ -1,14 +1,12 @@
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 _get = _interopRequireDefault(require("lodash/get"));
9
+ var _react = _interopRequireDefault(require("react"));
12
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
11
  var _Search = _interopRequireDefault(require("@rsuite/icons/legacy/Search"));
14
12
  var _utils = require("../utils");
@@ -29,15 +27,15 @@ var SearchBar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
27
  merge = _useClassNames.merge,
30
28
  prefix = _useClassNames.prefix;
31
29
  var classes = merge(className, withClassPrefix());
32
- var handleChange = (0, _react.useCallback)(function (event) {
33
- onChange === null || onChange === void 0 ? void 0 : onChange((0, _get.default)(event, 'target.value'), event);
34
- }, [onChange]);
35
- return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
36
- role: "searchbox"
37
- }, rest, {
30
+ var handleChange = (0, _utils.useEventCallback)(function (event) {
31
+ var _event$target;
32
+ onChange === null || onChange === void 0 ? void 0 : onChange((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value, event);
33
+ });
34
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
38
35
  ref: ref,
39
36
  className: classes
40
37
  }), /*#__PURE__*/_react.default.createElement("input", {
38
+ role: "searchbox",
41
39
  className: prefix('input'),
42
40
  value: value,
43
41
  onChange: handleChange,
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface TreeViewProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ treeRootClassName: string;
4
+ multiselectable?: boolean;
5
+ }
6
+ declare const TreeView: React.ForwardRefExoticComponent<TreeViewProps & React.RefAttributes<HTMLDivElement>>;
7
+ export default TreeView;
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
11
+ var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
12
+ var children = props.children,
13
+ treeRootClassName = props.treeRootClassName,
14
+ multiselectable = props.multiselectable,
15
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["children", "treeRootClassName", "multiselectable"]);
16
+ var _useCombobox = (0, _useCombobox2.default)(),
17
+ id = _useCombobox.id,
18
+ labelId = _useCombobox.labelId,
19
+ popupType = _useCombobox.popupType;
20
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
21
+ role: "tree",
22
+ id: id + "-" + popupType,
23
+ "aria-multiselectable": multiselectable,
24
+ "aria-labelledby": labelId,
25
+ ref: ref
26
+ }, rest), /*#__PURE__*/_react.default.createElement("div", {
27
+ className: treeRootClassName
28
+ }, children));
29
+ });
30
+ var _default = TreeView;
31
+ exports.default = _default;
@@ -0,0 +1,6 @@
1
+ export { default as usePickerRef } from './usePickerRef';
2
+ export { default as useCombobox } from './useCombobox';
3
+ export { default as useFocusItemValue } from './useFocusItemValue';
4
+ export { default as useToggleKeyDownEvent } from './useToggleKeyDownEvent';
5
+ export { default as useSearch } from './useSearch';
6
+ export { default as usePickerClassName } from './usePickerClassName';
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.usePickerClassName = exports.useSearch = exports.useToggleKeyDownEvent = exports.useFocusItemValue = exports.useCombobox = exports.usePickerRef = void 0;
7
+ var _usePickerRef = _interopRequireDefault(require("./usePickerRef"));
8
+ exports.usePickerRef = _usePickerRef.default;
9
+ var _useCombobox = _interopRequireDefault(require("./useCombobox"));
10
+ exports.useCombobox = _useCombobox.default;
11
+ var _useFocusItemValue = _interopRequireDefault(require("./useFocusItemValue"));
12
+ exports.useFocusItemValue = _useFocusItemValue.default;
13
+ var _useToggleKeyDownEvent = _interopRequireDefault(require("./useToggleKeyDownEvent"));
14
+ exports.useToggleKeyDownEvent = _useToggleKeyDownEvent.default;
15
+ var _useSearch = _interopRequireDefault(require("./useSearch"));
16
+ exports.useSearch = _useSearch.default;
17
+ var _usePickerClassName = _interopRequireDefault(require("./usePickerClassName"));
18
+ exports.usePickerClassName = _usePickerClassName.default;
@@ -0,0 +1,7 @@
1
+ declare function useCombobox(): {
2
+ id: string | undefined;
3
+ popupType: "dialog" | "menu" | "grid" | "listbox" | "tree" | undefined;
4
+ multiple: boolean | undefined;
5
+ labelId: string | undefined;
6
+ };
7
+ export default useCombobox;
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _react = require("react");
7
+ var _PickerToggleTrigger = require("../PickerToggleTrigger");
8
+ function useCombobox() {
9
+ var _useContext = (0, _react.useContext)(_PickerToggleTrigger.ComboboxContextContext),
10
+ id = _useContext.id,
11
+ hasLabel = _useContext.hasLabel,
12
+ popupType = _useContext.popupType,
13
+ multiple = _useContext.multiple;
14
+ return {
15
+ id: id,
16
+ popupType: popupType,
17
+ multiple: multiple,
18
+ labelId: hasLabel ? id + "-label" : undefined
19
+ };
20
+ }
21
+ var _default = useCombobox;
22
+ exports.default = _default;
@@ -0,0 +1,30 @@
1
+ /// <reference types="react" />
2
+ interface FocusItemValueProps<T = unknown> {
3
+ target: HTMLElement | null | (() => HTMLElement | null);
4
+ data?: T[];
5
+ /**
6
+ * When the down arrow key is pressed, whether to automatically focus on the option
7
+ */
8
+ focusToOption?: boolean;
9
+ valueKey?: string;
10
+ focusableQueryKey?: string;
11
+ defaultLayer?: number;
12
+ rtl?: boolean;
13
+ callback?: (value: any, event: React.KeyboardEvent) => void;
14
+ getParent?: (node: T) => T | undefined;
15
+ }
16
+ /**
17
+ * A hook that manages the focus state of the option.
18
+ * @param defaultFocusItemValue
19
+ * @param props
20
+ */
21
+ declare const useFocusItemValue: <T, D>(defaultFocusItemValue: T | null | undefined, props: FocusItemValueProps<D>) => {
22
+ focusItemValue: T | null | undefined;
23
+ setFocusItemValue: import("react").Dispatch<import("react").SetStateAction<T | null | undefined>>;
24
+ layer: number;
25
+ setLayer: import("react").Dispatch<import("react").SetStateAction<number>>;
26
+ keys: any[];
27
+ setKeys: import("react").Dispatch<import("react").SetStateAction<any[]>>;
28
+ onKeyDown: (...args: any[]) => any;
29
+ };
30
+ export default useFocusItemValue;