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,7 +1,7 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import React, { useRef, useState, useCallback, useMemo } from 'react';
4
+ import React, { useState, useCallback, useMemo } from 'react';
5
5
  import { useSet } from 'react-use-set';
6
6
  import PropTypes from 'prop-types';
7
7
  import omit from 'lodash/omit';
@@ -9,11 +9,11 @@ import pick from 'lodash/pick';
9
9
  import isNil from 'lodash/isNil';
10
10
  import isFunction from 'lodash/isFunction';
11
11
  import shallowEqual from '../utils/shallowEqual';
12
- import DropdownMenu from './DropdownMenu';
12
+ import TreeView from './TreeView';
13
13
  import { getParentMap, getPathTowardsItem, findNodeOfTree, flattenTree } from '../utils/treeUtils';
14
14
  import { usePaths } from './utils';
15
- import { getSafeRegExpString, createChainedFunction, mergeRefs, useControlled, useCustom, useClassNames, useIsMounted } from '../utils';
16
- import { PickerToggle, PickerOverlay, SearchBar, PickerToggleTrigger, usePickerClassName, usePublicMethods, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
15
+ import { getSafeRegExpString, createChainedFunction, mergeRefs, useControlled, useCustom, useClassNames, useIsMounted, useEventCallback } from '../utils';
16
+ import { PickerToggle, PickerPopup, SearchBar, PickerToggleTrigger, usePickerClassName, usePickerRef, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
17
17
  import { useMap } from '../utils/useMap';
18
18
  var emptyArray = [];
19
19
 
@@ -76,10 +76,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
76
76
  var _useState = useState(false),
77
77
  active = _useState[0],
78
78
  setActive = _useState[1];
79
- var triggerRef = useRef(null);
80
- var overlayRef = useRef(null);
81
- var targetRef = useRef(null);
82
- var searchInputRef = useRef(null);
79
+ var _usePickerRef = usePickerRef(ref),
80
+ trigger = _usePickerRef.trigger,
81
+ root = _usePickerRef.root,
82
+ target = _usePickerRef.target,
83
+ overlay = _usePickerRef.overlay,
84
+ searchInput = _usePickerRef.searchInput;
83
85
  var _ref = useControlled(valueProp, defaultValue),
84
86
  value = _ref[0],
85
87
  setValue = _ref[1];
@@ -120,11 +122,6 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
120
122
  columnsToDisplay = _usePaths.columnsToDisplay,
121
123
  pathTowardsActiveItem = _usePaths.pathTowardsActiveItem,
122
124
  pathTowardsSelectedItem = _usePaths.pathTowardsSelectedItem;
123
- usePublicMethods(ref, {
124
- triggerRef: triggerRef,
125
- overlayRef: overlayRef,
126
- targetRef: targetRef
127
- });
128
125
  var _useCustom = useCustom('Picker', overrideLocale),
129
126
  locale = _useCustom.locale,
130
127
  rtl = _useCustom.rtl;
@@ -139,7 +136,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
136
  var _useState3 = useState(''),
140
137
  searchKeyword = _useState3[0],
141
138
  setSearchKeyword = _useState3[1];
142
- var someKeyword = useCallback(function (item, keyword) {
139
+ var someKeyword = function someKeyword(item, keyword) {
143
140
  if (item[labelKey].match(new RegExp(getSafeRegExpString(keyword || searchKeyword), 'i'))) {
144
141
  return true;
145
142
  }
@@ -148,8 +145,8 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
148
145
  return true;
149
146
  }
150
147
  return false;
151
- }, [labelKey, parentMap, searchKeyword]);
152
- var getSearchResult = useCallback(function (keyword) {
148
+ };
149
+ var getSearchResult = function getSearchResult(keyword) {
153
150
  var items = [];
154
151
  var result = flattenedData.filter(function (item) {
155
152
  if (!parentSelectable && item[childrenKey]) {
@@ -166,7 +163,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
166
163
  }
167
164
  }
168
165
  return items;
169
- }, [childrenKey, flattenedData, someKeyword, parentSelectable]);
166
+ };
170
167
 
171
168
  // Used to hover the focuse item when trigger `onKeydown`
172
169
  var _useFocusItemValue = useFocusItemValue(value, {
@@ -175,7 +172,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
175
172
  valueKey: valueKey,
176
173
  defaultLayer: pathTowardsSelectedItem !== null && pathTowardsSelectedItem !== void 0 && pathTowardsSelectedItem.length ? pathTowardsSelectedItem.length - 1 : 0,
177
174
  target: function target() {
178
- return overlayRef.current;
175
+ return overlay.current;
179
176
  },
180
177
  getParent: function getParent(item) {
181
178
  return parentMap.get(item);
@@ -191,7 +188,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
191
188
  setLayer = _useFocusItemValue.setLayer,
192
189
  setKeys = _useFocusItemValue.setKeys,
193
190
  onFocusItem = _useFocusItemValue.onKeyDown;
194
- var handleSearch = useCallback(function (value, event) {
191
+ var handleSearch = useEventCallback(function (value, event) {
195
192
  var items = getSearchResult(value);
196
193
  setSearchKeyword(value);
197
194
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
@@ -204,37 +201,37 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
204
201
  setLayer(0);
205
202
  setKeys([]);
206
203
  }
207
- }, [getSearchResult, onSearch, setFocusItemValue, setKeys, setLayer, valueKey]);
208
- var handleEntered = useCallback(function () {
209
- if (!targetRef.current) {
204
+ });
205
+ var handleEntered = useEventCallback(function () {
206
+ if (!target.current) {
210
207
  return;
211
208
  }
212
209
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
213
210
  setActive(true);
214
- }, [onOpen]);
215
- var handleExited = useCallback(function () {
216
- if (!targetRef.current) {
211
+ });
212
+ var handleExited = useEventCallback(function () {
213
+ if (!target.current) {
217
214
  return;
218
215
  }
219
216
  onClose === null || onClose === void 0 ? void 0 : onClose();
220
217
  setActive(false);
221
218
  setSearchKeyword('');
222
- }, [onClose]);
223
- var handleClose = useCallback(function () {
224
- var _triggerRef$current, _targetRef$current, _targetRef$current$fo;
225
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.close();
219
+ });
220
+ var handleClose = useEventCallback(function () {
221
+ var _trigger$current, _target$current, _target$current$focus;
222
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : _trigger$current.close();
226
223
 
227
224
  // The focus is on the trigger button after closing
228
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : (_targetRef$current$fo = _targetRef$current.focus) === null || _targetRef$current$fo === void 0 ? void 0 : _targetRef$current$fo.call(_targetRef$current);
229
- }, []);
230
- var handleClean = useCallback(function (event) {
231
- if (disabled || !targetRef.current) {
225
+ (_target$current = target.current) === null || _target$current === void 0 ? void 0 : (_target$current$focus = _target$current.focus) === null || _target$current$focus === void 0 ? void 0 : _target$current$focus.call(_target$current);
226
+ });
227
+ var handleClean = useEventCallback(function (event) {
228
+ if (disabled || !target.current) {
232
229
  return;
233
230
  }
234
231
  setValue(null);
235
232
  onChange === null || onChange === void 0 ? void 0 : onChange(null, event);
236
- }, [disabled, onChange, setValue]);
237
- var handleMenuPressEnter = useCallback(function (event) {
233
+ });
234
+ var handleMenuPressEnter = useEventCallback(function (event) {
238
235
  var focusItem = findNodeOfTree(data, function (item) {
239
236
  return item[valueKey] === focusItemValue;
240
237
  });
@@ -250,20 +247,20 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
250
247
  }
251
248
  handleClose();
252
249
  }
253
- }, [childrenKey, data, focusItemValue, handleClose, onChange, pathTowardsActiveItem, setLayer, setValue, value, valueKey, onSelect]);
250
+ });
254
251
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
255
252
  toggle: !focusItemValue || !active,
256
- triggerRef: triggerRef,
257
- targetRef: targetRef,
258
- overlayRef: overlayRef,
259
- searchInputRef: searchInputRef,
253
+ trigger: trigger,
254
+ target: target,
255
+ overlay: overlay,
256
+ searchInput: searchInput,
260
257
  active: active,
261
258
  onExit: handleClean,
262
259
  onMenuKeyDown: onFocusItem,
263
260
  onMenuPressEnter: handleMenuPressEnter
264
261
  }, rest));
265
- var handleSelect = function handleSelect(node, cascadePaths, isLeafNode, event) {
266
- var _node$childrenKey, _triggerRef$current2;
262
+ var handleSelect = useEventCallback(function (node, cascadePaths, isLeafNode, event) {
263
+ var _node$childrenKey, _trigger$current2;
267
264
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
268
265
  setActiveItem(node);
269
266
  var nextValue = node[valueKey];
@@ -301,20 +298,20 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
301
298
  }
302
299
 
303
300
  // Update menu position
304
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : _triggerRef$current2.updatePosition();
305
- };
301
+ (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : _trigger$current2.updatePosition();
302
+ });
306
303
 
307
304
  /**
308
305
  * The search structure option is processed after being selected.
309
306
  */
310
- var handleSearchRowSelect = function handleSearchRowSelect(node, nodes, event) {
307
+ var handleSearchRowSelect = useEventCallback(function (node, nodes, event) {
311
308
  var nextValue = node[valueKey];
312
309
  handleClose();
313
310
  setSearchKeyword('');
314
311
  setValue(nextValue);
315
312
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, nodes, event);
316
313
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
317
- };
314
+ });
318
315
  var renderSearchRow = function renderSearchRow(item, key) {
319
316
  var regx = new RegExp(getSafeRegExpString(searchKeyword), 'ig');
320
317
  var nodes = getPathTowardsItem(item, function (item) {
@@ -352,12 +349,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
352
349
  }, node[labelKey]);
353
350
  });
354
351
  return /*#__PURE__*/React.createElement("div", {
352
+ role: "treeitem",
355
353
  key: key,
356
354
  "aria-disabled": disabled,
357
355
  "data-key": item[valueKey],
358
356
  className: itemClasses,
359
357
  tabIndex: -1,
360
- role: "option",
361
358
  onClick: function onClick(event) {
362
359
  if (!disabled) {
363
360
  handleSearchRowSelect(item, nodes, event);
@@ -373,12 +370,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
373
370
  return /*#__PURE__*/React.createElement("div", {
374
371
  className: prefix('cascader-search-panel'),
375
372
  "data-layer": 0,
376
- role: "listbox"
373
+ role: "tree"
377
374
  }, items.length ? items.map(renderSearchRow) : /*#__PURE__*/React.createElement("div", {
378
375
  className: prefix('none')
379
376
  }, locale.noResultsText));
380
377
  };
381
- var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
378
+ var renderTreeView = function renderTreeView(positionProps, speakerRef) {
382
379
  var _ref2 = positionProps || {},
383
380
  left = _ref2.left,
384
381
  top = _ref2.top,
@@ -390,19 +387,18 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
390
387
  var classes = merge(className, menuClassName, prefix('cascader-menu', {
391
388
  inline: inline
392
389
  }));
393
- return /*#__PURE__*/React.createElement(PickerOverlay, {
394
- ref: mergeRefs(overlayRef, speakerRef),
390
+ return /*#__PURE__*/React.createElement(PickerPopup, {
391
+ ref: mergeRefs(overlay, speakerRef),
395
392
  className: classes,
396
393
  style: styles,
397
- target: triggerRef,
394
+ target: trigger,
398
395
  onKeyDown: onPickerKeyDown
399
396
  }, searchable && /*#__PURE__*/React.createElement(SearchBar, {
400
397
  placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
401
398
  onChange: handleSearch,
402
399
  value: searchKeyword,
403
- inputRef: searchInputRef
404
- }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/React.createElement(DropdownMenu, {
405
- id: id ? id + "-listbox" : undefined,
400
+ inputRef: searchInput
401
+ }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/React.createElement(TreeView, {
406
402
  menuWidth: menuWidth,
407
403
  menuHeight: menuHeight,
408
404
  disabledItemValues: disabledItemValues,
@@ -455,21 +451,23 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
455
451
  usedClassNamePropKeys = _usePickerClassName[1]; // TODO: bad api design
456
452
  // consider an isolated Menu component
457
453
  if (inline) {
458
- return renderDropdownMenu();
454
+ return renderTreeView();
459
455
  }
460
456
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
457
+ id: id,
458
+ popupType: "tree",
461
459
  pickerProps: pick(props, pickTriggerPropKeys),
462
- ref: triggerRef,
460
+ ref: trigger,
463
461
  placement: placement,
464
462
  onEntered: createChainedFunction(handleEntered, onEnter),
465
463
  onExited: createChainedFunction(handleExited, onExited),
466
- speaker: renderDropdownMenu
464
+ speaker: renderTreeView
467
465
  }, /*#__PURE__*/React.createElement(Component, {
468
466
  className: classes,
469
- style: style
467
+ style: style,
468
+ ref: root
470
469
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
471
- id: id,
472
- ref: targetRef,
470
+ ref: target,
473
471
  as: toggleAs,
474
472
  appearance: appearance,
475
473
  disabled: disabled,
@@ -479,7 +477,8 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
479
477
  hasValue: hasValue,
480
478
  active: active,
481
479
  placement: placement,
482
- inputValue: value !== null && value !== void 0 ? value : ''
480
+ inputValue: value !== null && value !== void 0 ? value : '',
481
+ focusItemValue: focusItemValue
483
482
  }), selectedElement || (locale === null || locale === void 0 ? void 0 : locale.placeholder))));
484
483
  });
485
484
  Cascader.displayName = 'Cascader';
@@ -1,11 +1,10 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import { ItemDataType, WithAsProps, RsRefForwardingComponent } from '../@types/common';
4
3
  import { ValueType } from './Cascader';
5
4
  declare type SetLike<T = unknown> = {
6
5
  has(value: T): boolean;
7
6
  };
8
- export interface DropdownMenuProps extends Omit<WithAsProps, 'classPrefix'> {
7
+ export interface TreeViewProps extends Omit<WithAsProps, 'classPrefix'> {
9
8
  classPrefix: string;
10
9
  disabledItemValues: ValueType[];
11
10
  activeItemValue?: ValueType | null;
@@ -21,21 +20,5 @@ export interface DropdownMenuProps extends Omit<WithAsProps, 'classPrefix'> {
21
20
  renderMenu?: (items: readonly ItemDataType[], menu: React.ReactNode, parentNode?: ItemDataType, layer?: number) => React.ReactNode;
22
21
  onSelect?: (node: ItemDataType, cascadePaths: ItemDataType[], isLeafNode: boolean, event: React.MouseEvent) => void;
23
22
  }
24
- declare const DropdownMenu: RsRefForwardingComponent<'div', DropdownMenuProps>;
25
- export declare const dropdownMenuPropTypes: {
26
- classPrefix: PropTypes.Requireable<string>;
27
- disabledItemValues: PropTypes.Requireable<any[]>;
28
- activeItemValue: PropTypes.Requireable<any>;
29
- childrenKey: PropTypes.Requireable<string>;
30
- valueKey: PropTypes.Requireable<string>;
31
- labelKey: PropTypes.Requireable<string>;
32
- menuWidth: PropTypes.Requireable<number>;
33
- menuHeight: PropTypes.Requireable<string | number>;
34
- className: PropTypes.Requireable<string>;
35
- renderMenuItem: PropTypes.Requireable<(...args: any[]) => any>;
36
- renderMenu: PropTypes.Requireable<(...args: any[]) => any>;
37
- onSelect: PropTypes.Requireable<(...args: any[]) => any>;
38
- cascadeData: PropTypes.Requireable<any[]>;
39
- cascadePaths: PropTypes.Requireable<any[]>;
40
- };
41
- export default DropdownMenu;
23
+ declare const TreeView: RsRefForwardingComponent<'div', TreeViewProps>;
24
+ export default TreeView;
@@ -1,19 +1,18 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import React, { useCallback, useEffect, useRef } from 'react';
5
- import PropTypes from 'prop-types';
4
+ import React, { useEffect, useRef } from 'react';
6
5
  import SpinnerIcon from '@rsuite/icons/legacy/Spinner';
7
6
  import isUndefined from 'lodash/isUndefined';
8
7
  import isNil from 'lodash/isNil';
9
- import { shallowEqual, useClassNames, mergeRefs, useCustom } from '../utils';
10
- import { DropdownMenuItem } from '../Picker';
8
+ import { shallowEqual, useClassNames, mergeRefs, useCustom, useEventCallback } from '../utils';
9
+ import { ListItem, useCombobox } from '../Picker';
11
10
  import AngleLeftIcon from '@rsuite/icons/legacy/AngleLeft';
12
11
  import AngleRightIcon from '@rsuite/icons/legacy/AngleRight';
13
12
  import getPosition from 'dom-lib/getPosition';
14
13
  import scrollTop from 'dom-lib/scrollTop';
15
14
  var emptyArray = [];
16
- var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
15
+ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
17
16
  var _props$as = props.as,
18
17
  Component = _props$as === void 0 ? 'div' : _props$as,
19
18
  activeItemValue = props.activeItemValue,
@@ -36,17 +35,22 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
36
35
  loadingItemsSet = props.loadingItemsSet,
37
36
  _props$labelKey = props.labelKey,
38
37
  labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
38
+ style = props.style,
39
39
  renderMenu = props.renderMenu,
40
40
  renderMenuItem = props.renderMenuItem,
41
41
  onSelect = props.onSelect,
42
- rest = _objectWithoutPropertiesLoose(props, ["as", "activeItemValue", "classPrefix", "className", "childrenKey", "disabledItemValues", "menuWidth", "menuHeight", "valueKey", "cascadeData", "cascadePaths", "loadingItemsSet", "labelKey", "renderMenu", "renderMenuItem", "onSelect"]);
42
+ rest = _objectWithoutPropertiesLoose(props, ["as", "activeItemValue", "classPrefix", "className", "childrenKey", "disabledItemValues", "menuWidth", "menuHeight", "valueKey", "cascadeData", "cascadePaths", "loadingItemsSet", "labelKey", "style", "renderMenu", "renderMenuItem", "onSelect"]);
43
43
  var _useClassNames = useClassNames(classPrefix),
44
44
  merge = _useClassNames.merge,
45
45
  prefix = _useClassNames.prefix;
46
46
  var classes = merge(className, prefix('items'));
47
47
  var rootRef = useRef();
48
- var _useCustom = useCustom('DropdownMenu'),
48
+ var _useCustom = useCustom(),
49
49
  rtl = _useCustom.rtl;
50
+ var _useCombobox = useCombobox(),
51
+ id = _useCombobox.id,
52
+ labelId = _useCombobox.labelId,
53
+ popupType = _useCombobox.popupType;
50
54
  useEffect(function () {
51
55
  var _rootRef$current;
52
56
  var columns = ((_rootRef$current = rootRef.current) === null || _rootRef$current === void 0 ? void 0 : _rootRef$current.querySelectorAll('[data-type="column"]')) || [];
@@ -65,7 +69,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
65
69
  }
66
70
  });
67
71
  }, [prefix]);
68
- var getCascadePaths = useCallback(function (layer, node) {
72
+ var getCascadePaths = function getCascadePaths(layer, node) {
69
73
  var paths = [];
70
74
  for (var i = 0; i < cascadeData.length && i < layer; i += 1) {
71
75
  if (i < layer - 1 && cascadePaths) {
@@ -74,14 +78,19 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
74
78
  }
75
79
  paths.push(node);
76
80
  return paths;
77
- }, [cascadeData, cascadePaths]);
78
- var handleSelect = function handleSelect(layer, node, event) {
81
+ };
82
+ var handleSelect = useEventCallback(function (layer, node, event) {
79
83
  var isLeafNode = isNil(node[childrenKey]);
80
84
  var cascadePaths = getCascadePaths(layer + 1, node);
81
85
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, isLeafNode, event);
82
- };
83
- var renderCascadeNode = function renderCascadeNode(node, index, layer, focus) {
86
+ });
87
+ var renderCascadeNode = function renderCascadeNode(nodeProps) {
84
88
  var _loadingItemsSet$has;
89
+ var node = nodeProps.node,
90
+ index = nodeProps.index,
91
+ layer = nodeProps.layer,
92
+ focus = nodeProps.focus,
93
+ size = nodeProps.size;
85
94
  var children = node[childrenKey];
86
95
  var value = node[valueKey];
87
96
  var label = node[labelKey];
@@ -93,16 +102,19 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
93
102
  // Use `value` in keys when If `value` is string or number
94
103
  var onlyKey = typeof value === 'number' || typeof value === 'string' ? value : index;
95
104
  var Icon = loading ? SpinnerIcon : rtl ? AngleLeftIcon : AngleRightIcon;
96
- return /*#__PURE__*/React.createElement(DropdownMenuItem, {
97
- classPrefix: "picker-cascader-menu-item",
105
+ return /*#__PURE__*/React.createElement(ListItem, {
98
106
  as: 'li',
99
107
  role: "treeitem",
108
+ "aria-level": layer + 1,
109
+ "aria-setsize": size,
110
+ "aria-posinset": index + 1,
111
+ "aria-label": typeof label === 'string' ? label : undefined,
112
+ classPrefix: "picker-cascader-menu-item",
100
113
  key: layer + "-" + onlyKey,
101
114
  disabled: disabled,
102
115
  active: !isUndefined(activeItemValue) && shallowEqual(activeItemValue, value),
103
116
  focus: focus,
104
117
  value: value,
105
- "aria-owns": node.children ? 'treeitem-' + value + '-children' : undefined,
106
118
  className: children ? prefix('has-children') : undefined,
107
119
  onSelect: function onSelect(_value, event) {
108
120
  return handleSelect(layer, node, event);
@@ -112,54 +124,43 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
112
124
  spin: loading
113
125
  }) : null);
114
126
  };
115
- var styles = {
116
- width: cascadeData.length * menuWidth
117
- };
118
127
  var cascadeNodes = cascadeData.map(function (children, layer) {
119
128
  var onlyKey = layer + "_" + children.length;
120
129
  var parentNode = cascadePaths[layer - 1];
121
- var menu = /*#__PURE__*/React.createElement("ul", {
122
- role: layer === 0 ? 'none presentation' : 'group',
123
- id: parentNode ? 'treeitem-' + parentNode[valueKey] + '-children' : undefined
124
- }, children.map(function (item, index) {
125
- return renderCascadeNode(item, index, layer, cascadePaths[layer] && shallowEqual(cascadePaths[layer][valueKey], item[valueKey]));
130
+ var menu = /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (item, index) {
131
+ var focus = cascadePaths[layer] && shallowEqual(cascadePaths[layer][valueKey], item[valueKey]);
132
+ return renderCascadeNode({
133
+ node: item,
134
+ index: index,
135
+ layer: layer,
136
+ focus: focus,
137
+ size: children.length
138
+ });
126
139
  }));
127
- return /*#__PURE__*/React.createElement("div", {
128
- key: onlyKey,
129
- className: prefix('column'),
140
+ return /*#__PURE__*/React.createElement("ul", {
141
+ role: "group",
130
142
  "data-layer": layer,
131
143
  "data-type": 'column',
144
+ key: onlyKey,
145
+ className: prefix('column'),
132
146
  style: {
133
147
  height: menuHeight,
134
148
  width: menuWidth
135
149
  }
136
150
  }, renderMenu ? renderMenu(children, menu, parentNode, layer) : menu);
137
151
  });
152
+ var styles = _extends({}, style, {
153
+ width: cascadeData.length * menuWidth
154
+ });
138
155
  return /*#__PURE__*/React.createElement(Component, _extends({
139
- role: "tree"
156
+ role: "tree",
157
+ id: id + "-" + popupType,
158
+ "aria-labelledby": labelId
140
159
  }, rest, {
141
160
  ref: mergeRefs(rootRef, ref),
142
- className: classes
143
- }), /*#__PURE__*/React.createElement("div", {
161
+ className: classes,
144
162
  style: styles
145
- }, cascadeNodes));
163
+ }), cascadeNodes);
146
164
  });
147
- export var dropdownMenuPropTypes = {
148
- classPrefix: PropTypes.string,
149
- disabledItemValues: PropTypes.array,
150
- activeItemValue: PropTypes.any,
151
- childrenKey: PropTypes.string,
152
- valueKey: PropTypes.string,
153
- labelKey: PropTypes.string,
154
- menuWidth: PropTypes.number,
155
- menuHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
156
- className: PropTypes.string,
157
- renderMenuItem: PropTypes.func,
158
- renderMenu: PropTypes.func,
159
- onSelect: PropTypes.func,
160
- cascadeData: PropTypes.array,
161
- cascadePaths: PropTypes.array
162
- };
163
- DropdownMenu.displayName = 'DropdownMenu';
164
- DropdownMenu.propTypes = dropdownMenuPropTypes;
165
- export default DropdownMenu;
165
+ TreeView.displayName = 'TreeView';
166
+ export default TreeView;
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { ItemDataType, WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
+ import { ValueType } from './Cascader';
4
+ declare type SetLike<T = unknown> = {
5
+ has(value: T): boolean;
6
+ };
7
+ export interface TreeViewProps extends Omit<WithAsProps, 'classPrefix'> {
8
+ classPrefix: string;
9
+ disabledItemValues: ValueType[];
10
+ activeItemValue?: ValueType | null;
11
+ childrenKey: string;
12
+ cascadeData: (readonly ItemDataType[])[];
13
+ loadingItemsSet?: SetLike<ItemDataType>;
14
+ cascadePaths: ItemDataType[];
15
+ valueKey: string;
16
+ labelKey: string;
17
+ menuWidth?: number;
18
+ menuHeight?: number | string;
19
+ renderMenuItem?: (itemLabel: React.ReactNode, item: ItemDataType) => React.ReactNode;
20
+ renderMenu?: (items: readonly ItemDataType[], menu: React.ReactNode, parentNode?: ItemDataType, layer?: number) => React.ReactNode;
21
+ onSelect?: (node: ItemDataType, cascadePaths: ItemDataType[], isLeafNode: boolean, event: React.MouseEvent) => void;
22
+ }
23
+ declare const TreeView: RsRefForwardingComponent<'div', TreeViewProps>;
24
+ export default TreeView;