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
package/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ # [5.51.0](https://github.com/rsuite/rsuite/compare/v5.50.0...v5.51.0) (2024-01-19)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **InputGroup:** fix style conflict caused by zIndex set in InputGoup ([#3552](https://github.com/rsuite/rsuite/issues/3552)) ([f874edf](https://github.com/rsuite/rsuite/commit/f874edfdbf0dbc9a53e4fe26fb9cf39108f1a00c))
6
+
7
+ ### Features
8
+
9
+ - **Form:** add support for `nestedField` prop on Form ([#3568](https://github.com/rsuite/rsuite/issues/3568)) ([47fce55](https://github.com/rsuite/rsuite/commit/47fce559b159f128fd2f89ffc36c0e9bcfd3f25b))
10
+ - improve accessibility of all pickers ([#3558](https://github.com/rsuite/rsuite/issues/3558)) ([8ad3cfd](https://github.com/rsuite/rsuite/commit/8ad3cfd4f1a2de16b52fec2bed5e4a9ea509f824))
11
+
1
12
  # [5.50.0](https://github.com/rsuite/rsuite/compare/v5.49.0...v5.50.0) (2024-01-12)
2
13
 
3
14
  ### Bug Fixes
@@ -69,7 +69,7 @@
69
69
  .rs-check-item {
70
70
  display: inline-block;
71
71
 
72
- .rs-picker-menu & {
72
+ .rs-picker-popup & {
73
73
  display: block;
74
74
  }
75
75
  }
@@ -135,7 +135,7 @@
135
135
 
136
136
  // node children
137
137
  .rs-check-tree-node-children {
138
- > .rs-check-tree-children {
138
+ > .rs-check-tree-group {
139
139
  position: relative;
140
140
  display: none;
141
141
 
@@ -154,7 +154,7 @@
154
154
  border-left: 1px solid rgba(0, 0, 0, 0.1);
155
155
  }
156
156
 
157
- .rs-picker-menu {
157
+ .rs-picker-popup {
158
158
  display: flex;
159
159
  flex-direction: column;
160
160
 
@@ -55,7 +55,7 @@
55
55
  }
56
56
 
57
57
  // Calendar in DatePicker popup
58
- .rs-picker-menu {
58
+ .rs-picker-popup {
59
59
  @calendar-width: 264px; // This is a fixed value per design.
60
60
 
61
61
  @calendar-padding-x: 15px;
@@ -114,10 +114,9 @@
114
114
  @height: ~'input-height-@{size-name}';
115
115
  @useable-height: (@@height - 2px);
116
116
  @vertical: ~'padding-@{size-name}-vertical';
117
- @add-on-padding: ~'input-group-padding-for-add-on-@{size-name}';
118
117
 
119
118
  &.rs-input-group-inside > .rs-input {
120
- padding-right: @@add-on-padding;
119
+ padding-right: 0;
121
120
  }
122
121
 
123
122
  &.rs-input-group {
@@ -102,11 +102,6 @@
102
102
  // Ensure that the input is always above the *appended* addon button for
103
103
  // proper border colors.
104
104
  position: relative;
105
- z-index: @zindex-input;
106
-
107
- &:focus {
108
- z-index: (@zindex-input+1);
109
- }
110
105
  }
111
106
 
112
107
  input.rs-input ~ .rs-input-group-addon,
@@ -136,7 +131,6 @@
136
131
 
137
132
  .rs-input-group-btn,
138
133
  .rs-input-group-addon {
139
- z-index: @zindex-input-group-icon;
140
134
  flex: 0 0 auto;
141
135
  width: auto;
142
136
  }
@@ -380,13 +374,6 @@
380
374
  + .rs-btn {
381
375
  margin-left: -1px;
382
376
  }
383
-
384
- // Bring the "active" button to the front
385
- &:hover,
386
- &:focus,
387
- &:active {
388
- z-index: 2;
389
- }
390
377
  }
391
378
 
392
379
  // Negative margin to only have a 1px border between the two
@@ -401,7 +388,6 @@
401
388
  &:last-child {
402
389
  > .rs-btn,
403
390
  > .rs-btn-group {
404
- z-index: 2;
405
391
  margin-left: -1px;
406
392
  }
407
393
  }
@@ -33,7 +33,7 @@
33
33
  .input-picker-input-sizes();
34
34
  }
35
35
 
36
- .rs-picker-tag-wrapper {
36
+ .rs-picker-textbox {
37
37
  margin-right: @dropdown-toggle-padding-right;
38
38
  min-height: 34px;
39
39
 
@@ -287,10 +287,10 @@
287
287
  }
288
288
 
289
289
  // Picker Menu
290
- .rs-picker-menu {
290
+ .rs-picker-popup {
291
291
  position: absolute;
292
292
  text-align: left;
293
- z-index: @zindex-picker-menu;
293
+ z-index: @zindex-picker-popup;
294
294
  border-radius: @border-radius;
295
295
  background-color: var(--rs-bg-overlay);
296
296
  box-shadow: var(--rs-shadow-overlay);
@@ -223,14 +223,14 @@
223
223
  }
224
224
 
225
225
  .tag-picker-search-input-size(@padding-vertical; @padding-horizontal; @font-size; @line-height;) {
226
- .rs-picker-input:not(.rs-picker-tag) & ~ .rs-picker-tag-wrapper .rs-picker-search-input {
226
+ .rs-picker-input:not(.rs-picker-tag) & ~ .rs-picker-textbox .rs-picker-search-input {
227
227
  padding: (@padding-vertical - 1px) @padding-horizontal;
228
228
  font-size: @font-size;
229
229
  line-height: @line-height;
230
230
  }
231
231
 
232
232
  // FIXME Bad design. Should not set search input styles in a mixin that is used in picker buttons.
233
- .rs-picker-tag & ~ .rs-picker-tag-wrapper {
233
+ .rs-picker-tag & ~ .rs-picker-textbox {
234
234
  padding-bottom: @padding-vertical - 3px;
235
235
 
236
236
  .rs-tag {
@@ -281,7 +281,7 @@
281
281
  );
282
282
  /* stylelint-enable */
283
283
 
284
- .rs-picker-input.rs-picker-tag & ~ .rs-picker-tag-wrapper {
284
+ .rs-picker-input.rs-picker-tag & ~ .rs-picker-textbox {
285
285
  padding-bottom: @padding-y-xs - 1px;
286
286
 
287
287
  .rs-tag {
@@ -4,7 +4,7 @@
4
4
  .rs-picker-toggle {
5
5
  padding-right: @dropdown-toggle-padding-right !important;
6
6
  }
7
- .rs-picker-tag-wrapper {
7
+ .rs-picker-textbox {
8
8
  margin-right: @dropdown-toggle-padding-right !important;
9
9
  }
10
10
  .rs-picker-clean {
@@ -52,7 +52,7 @@
52
52
  }
53
53
  }
54
54
 
55
- .rs-picker-tag-wrapper {
55
+ .rs-picker-textbox {
56
56
  position: relative;
57
57
  // make sure tag in front of toggle
58
58
  z-index: @zindex-picker-toggle + 1;
@@ -60,6 +60,10 @@
60
60
  }
61
61
  }
62
62
 
63
+ .rs-picker-tag-list {
64
+ display: contents;
65
+ }
66
+
63
67
  .rs-plaintext .rs-tag {
64
68
  margin-left: 6px;
65
69
  margin-bottom: 6px;
@@ -192,7 +192,7 @@
192
192
 
193
193
  // node children
194
194
  .rs-tree-node-children {
195
- > .rs-tree-children {
195
+ > .rs-tree-group {
196
196
  position: relative;
197
197
  display: none;
198
198
 
@@ -211,7 +211,7 @@
211
211
  border-left: 1px solid rgba(0, 0, 0, 0.1);
212
212
  }
213
213
 
214
- .rs-picker-menu {
214
+ .rs-picker-popup {
215
215
  &.rs-tree-menu {
216
216
  padding-top: @picker-menu-padding;
217
217
 
@@ -77,6 +77,14 @@ export interface PickerBaseProps<LocaleType = any> extends WithAsProps, Animatio
77
77
  onOpen?: () => void;
78
78
  /** Called when Modal is closed */
79
79
  onClose?: () => void;
80
+ /**
81
+ * Called when the component is focused.
82
+ */
83
+ onFocus?: React.FocusEventHandler<any>;
84
+ /**
85
+ * Called when the component is blurred.
86
+ */
87
+ onBlur?: React.FocusEventHandler<any>;
80
88
  /** Custom render extra footer */
81
89
  renderExtraFooter?: () => React.ReactNode;
82
90
  }
@@ -11,12 +11,12 @@ var _react = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _pick = _interopRequireDefault(require("lodash/pick"));
13
13
  var _omit = _interopRequireDefault(require("lodash/omit"));
14
- var _Input = _interopRequireDefault(require("../Input"));
15
14
  var _utils = require("../utils");
16
15
  var _utils2 = require("../Animation/utils");
17
16
  var _Picker = require("../Picker");
18
17
  var _utils3 = require("./utils");
19
18
  var _Plaintext = _interopRequireDefault(require("../Plaintext"));
19
+ var _Combobox = _interopRequireDefault(require("./Combobox"));
20
20
  /**
21
21
  * Autocomplete function of input field.
22
22
  * @see https://rsuitejs.com/components/auto-complete
@@ -78,6 +78,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
78
78
  // Used to hover the focuse item when trigger `onKeydown`
79
79
  var _useFocusItemValue = (0, _Picker.useFocusItemValue)(value, {
80
80
  data: datalist,
81
+ focusToOption: false,
81
82
  callback: onMenuFocus,
82
83
  target: function target() {
83
84
  return overlay.current;
@@ -160,7 +161,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
160
161
  var _partitionHTMLProps = (0, _utils.partitionHTMLProps)((0, _omit.default)(rest, _Picker.pickTriggerPropKeys)),
161
162
  htmlInputProps = _partitionHTMLProps[0],
162
163
  restProps = _partitionHTMLProps[1];
163
- var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
164
+ var renderPopup = function renderPopup(positionProps, speakerRef) {
164
165
  var left = positionProps.left,
165
166
  top = positionProps.top,
166
167
  className = positionProps.className;
@@ -168,18 +169,17 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
168
169
  left: left,
169
170
  top: top
170
171
  };
171
- var menu = /*#__PURE__*/_react.default.createElement(_Picker.DropdownMenu, {
172
- id: id ? id + "-listbox" : undefined,
172
+ var menu = /*#__PURE__*/_react.default.createElement(_Picker.Listbox, {
173
173
  classPrefix: "auto-complete-menu",
174
- dropdownMenuItemClassPrefix: "auto-complete-item",
175
- dropdownMenuItemAs: _Picker.DropdownMenuItem,
174
+ listItemClassPrefix: "auto-complete-item",
175
+ listItemAs: _Picker.ListItem,
176
176
  focusItemValue: focusItemValue,
177
177
  onSelect: handleItemSelect,
178
178
  renderMenuItem: renderMenuItem,
179
179
  data: items,
180
180
  className: menuClassName
181
181
  });
182
- return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
182
+ return /*#__PURE__*/_react.default.createElement(_Picker.PickerPopup, {
183
183
  ref: (0, _utils.mergeRefs)(overlay, speakerRef),
184
184
  style: styles,
185
185
  className: className,
@@ -194,23 +194,26 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
194
194
  localeKey: "unfilled"
195
195
  }, typeof value === 'undefined' ? defaultValue : value);
196
196
  }
197
+ var expanded = open || focus && hasItems;
197
198
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
199
+ id: id,
198
200
  ref: trigger,
199
201
  placement: placement,
200
202
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
201
203
  trigger: ['click', 'focus'],
202
- open: open || focus && hasItems,
203
- speaker: renderDropdownMenu
204
+ open: expanded,
205
+ speaker: renderPopup
204
206
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
205
207
  className: classes,
206
208
  style: style,
207
209
  ref: root
208
- }, restProps), /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({}, htmlInputProps, {
209
- id: id,
210
+ }, restProps), /*#__PURE__*/_react.default.createElement(_Combobox.default, (0, _extends2.default)({}, htmlInputProps, {
210
211
  disabled: disabled,
211
212
  value: value,
212
213
  size: size,
213
214
  readOnly: readOnly,
215
+ expanded: expanded,
216
+ focusItemValue: focusItemValue,
214
217
  onBlur: handleInputBlur,
215
218
  onFocus: handleInputFocus,
216
219
  onChange: handleChange,
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { type InputProps } from '../Input';
3
+ interface ComboboxProps extends InputProps {
4
+ expanded?: boolean;
5
+ focusItemValue?: string | null;
6
+ }
7
+ declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLInputElement>>;
8
+ export default Combobox;
@@ -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 _Picker = require("../Picker");
11
+ var _Input = _interopRequireDefault(require("../Input"));
12
+ var Combobox = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
13
+ var _useCombobox = (0, _Picker.useCombobox)(),
14
+ id = _useCombobox.id,
15
+ popupType = _useCombobox.popupType;
16
+ var expanded = props.expanded,
17
+ focusItemValue = props.focusItemValue,
18
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["expanded", "focusItemValue"]);
19
+ return /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({
20
+ role: "combobox",
21
+ "aria-autocomplete": "list",
22
+ "aria-haspopup": popupType,
23
+ "aria-expanded": expanded,
24
+ "aria-activedescendant": focusItemValue ? id + "-opt-" + focusItemValue : undefined,
25
+ autoComplete: "off",
26
+ id: id,
27
+ ref: ref
28
+ }, rest));
29
+ });
30
+ var _default = Combobox;
31
+ exports.default = _default;
@@ -68,42 +68,42 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
68
68
  var calendarDate = (0, _react.useMemo)(function () {
69
69
  return (0, _dateUtils.isValid)(calendarDateProp) ? calendarDateProp : new Date();
70
70
  }, [calendarDateProp]);
71
- var isDisabledDate = (0, _react.useCallback)(function (date) {
71
+ var isDisabledDate = (0, _utils.useEventCallback)(function (date) {
72
72
  var _disabledDate;
73
73
  return (_disabledDate = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date)) !== null && _disabledDate !== void 0 ? _disabledDate : false;
74
- }, [disabledDate]);
74
+ });
75
75
  var isTimeDisabled = function isTimeDisabled(date) {
76
76
  return (0, _dateUtils.disabledTime)(props, date);
77
77
  };
78
- var handleMoveForward = (0, _react.useCallback)(function () {
78
+ var handleMoveForward = (0, _utils.useEventCallback)(function () {
79
79
  onMoveForward === null || onMoveForward === void 0 ? void 0 : onMoveForward((0, _dateUtils.addMonths)(calendarDate, 1));
80
- }, [onMoveForward, calendarDate]);
81
- var handleMoveBackward = (0, _react.useCallback)(function () {
80
+ });
81
+ var handleMoveBackward = (0, _utils.useEventCallback)(function () {
82
82
  onMoveBackward === null || onMoveBackward === void 0 ? void 0 : onMoveBackward((0, _dateUtils.addMonths)(calendarDate, -1));
83
- }, [onMoveBackward, calendarDate]);
83
+ });
84
84
 
85
85
  // It is displayed as the month to be selected.
86
- var toggleMonthView = (0, _react.useCallback)(function () {
86
+ var toggleMonthView = (0, _utils.useEventCallback)(function () {
87
87
  if (calendarState === _useCalendarState2.CalendarState.MONTH) {
88
88
  reset();
89
89
  } else {
90
90
  openMonth();
91
91
  }
92
92
  onToggleMonthDropdown === null || onToggleMonthDropdown === void 0 ? void 0 : onToggleMonthDropdown(calendarState !== _useCalendarState2.CalendarState.MONTH);
93
- }, [calendarState, onToggleMonthDropdown, openMonth, reset]);
93
+ });
94
94
 
95
95
  // It is displayed as a time to be selected.
96
- var toggleTimeView = (0, _react.useCallback)(function () {
96
+ var toggleTimeView = (0, _utils.useEventCallback)(function () {
97
97
  if (calendarState === _useCalendarState2.CalendarState.TIME) {
98
98
  reset();
99
99
  } else {
100
100
  openTime();
101
101
  }
102
102
  onToggleTimeDropdown === null || onToggleTimeDropdown === void 0 ? void 0 : onToggleTimeDropdown(calendarState !== _useCalendarState2.CalendarState.TIME);
103
- }, [calendarState, onToggleTimeDropdown, openTime, reset]);
104
- var handleCloseDropdown = (0, _react.useCallback)(function () {
103
+ });
104
+ var handleCloseDropdown = (0, _utils.useEventCallback)(function () {
105
105
  return reset();
106
- }, [reset]);
106
+ });
107
107
  var renderDate = (0, _dateUtils.shouldRenderDate)(format);
108
108
  var renderTime = (0, _dateUtils.shouldRenderTime)(format);
109
109
  var renderMonth = (0, _dateUtils.shouldRenderMonth)(format);
@@ -111,40 +111,38 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
111
111
  var onlyShowMonth = renderMonth && !renderDate && !renderTime;
112
112
  var showTime = calendarState === _useCalendarState2.CalendarState.TIME || onlyShowTime;
113
113
  var showMonth = calendarState === _useCalendarState2.CalendarState.MONTH || onlyShowMonth;
114
- var inSameThisMonthDate = (0, _react.useCallback)(function (date) {
114
+ var inSameThisMonthDate = (0, _utils.useEventCallback)(function (date) {
115
115
  return (0, _dateUtils.isSameMonth)(calendarDate, date);
116
- }, [calendarDate]);
116
+ });
117
117
  var calendarClasses = merge(className, withClassPrefix({
118
118
  'time-view': showTime,
119
119
  'month-view': showMonth,
120
120
  'show-week-numbers': showWeekNumbers
121
121
  }));
122
122
  var timeDropdownProps = (0, _pick.default)(rest, _dateUtils.calendarOnlyProps);
123
- var handleChangeMonth = (0, _react.useCallback)(function (date, event) {
123
+ var handleChangeMonth = (0, _utils.useEventCallback)(function (date, event) {
124
124
  reset();
125
125
  onChangeMonth === null || onChangeMonth === void 0 ? void 0 : onChangeMonth(date, event);
126
- }, [onChangeMonth, reset]);
127
- var contextValue = (0, _react.useMemo)(function () {
128
- return {
129
- date: calendarDate,
130
- dateRange: dateRange,
131
- disabledDate: isDisabledDate,
132
- format: format,
133
- hoverRangeValue: hoverRangeValue,
134
- inSameMonth: inSameThisMonthDate,
135
- isoWeek: isoWeek,
136
- targetId: targetId,
137
- locale: locale,
138
- onChangeMonth: handleChangeMonth,
139
- onChangeTime: onChangeTime,
140
- onMouseMove: onMouseMove,
141
- onSelect: onSelect,
142
- cellClassName: cellClassName,
143
- renderCell: renderCell,
144
- showWeekNumbers: showWeekNumbers,
145
- inline: inline
146
- };
147
- }, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, targetId, locale, onChangeTime, onMouseMove, onSelect, cellClassName, renderCell, showWeekNumbers]);
126
+ });
127
+ var contextValue = {
128
+ date: calendarDate,
129
+ dateRange: dateRange,
130
+ disabledDate: isDisabledDate,
131
+ format: format,
132
+ hoverRangeValue: hoverRangeValue,
133
+ inSameMonth: inSameThisMonthDate,
134
+ isoWeek: isoWeek,
135
+ targetId: targetId,
136
+ locale: locale,
137
+ onChangeMonth: handleChangeMonth,
138
+ onChangeTime: onChangeTime,
139
+ onMouseMove: onMouseMove,
140
+ onSelect: onSelect,
141
+ cellClassName: cellClassName,
142
+ renderCell: renderCell,
143
+ showWeekNumbers: showWeekNumbers,
144
+ inline: inline
145
+ };
148
146
  return /*#__PURE__*/_react.default.createElement(_CalendarContext.CalendarProvider, {
149
147
  value: contextValue
150
148
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
@@ -15,7 +15,7 @@ var _pick = _interopRequireDefault(require("lodash/pick"));
15
15
  var _isNil = _interopRequireDefault(require("lodash/isNil"));
16
16
  var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
17
17
  var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
18
- var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
18
+ var _TreeView = _interopRequireDefault(require("./TreeView"));
19
19
  var _treeUtils = require("../utils/treeUtils");
20
20
  var _utils = require("./utils");
21
21
  var _utils2 = require("../utils");
@@ -355,12 +355,12 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
355
355
  }, node[labelKey]);
356
356
  });
357
357
  return /*#__PURE__*/_react.default.createElement("div", {
358
+ role: "treeitem",
358
359
  key: key,
359
360
  "aria-disabled": disabled,
360
361
  "data-key": item[valueKey],
361
362
  className: itemClasses,
362
363
  tabIndex: -1,
363
- role: "option",
364
364
  onClick: function onClick(event) {
365
365
  if (!disabled) {
366
366
  handleSearchRowSelect(item, nodes, event);
@@ -376,12 +376,12 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
376
376
  return /*#__PURE__*/_react.default.createElement("div", {
377
377
  className: prefix('cascader-search-panel'),
378
378
  "data-layer": 0,
379
- role: "listbox"
379
+ role: "tree"
380
380
  }, items.length ? items.map(renderSearchRow) : /*#__PURE__*/_react.default.createElement("div", {
381
381
  className: prefix('none')
382
382
  }, locale.noResultsText));
383
383
  };
384
- var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
384
+ var renderTreeView = function renderTreeView(positionProps, speakerRef) {
385
385
  var _ref2 = positionProps || {},
386
386
  left = _ref2.left,
387
387
  top = _ref2.top,
@@ -393,7 +393,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
393
393
  var classes = merge(className, menuClassName, prefix('cascader-menu', {
394
394
  inline: inline
395
395
  }));
396
- return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
396
+ return /*#__PURE__*/_react.default.createElement(_Picker.PickerPopup, {
397
397
  ref: (0, _utils2.mergeRefs)(overlay, speakerRef),
398
398
  className: classes,
399
399
  style: styles,
@@ -404,8 +404,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
404
404
  onChange: handleSearch,
405
405
  value: searchKeyword,
406
406
  inputRef: searchInput
407
- }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/_react.default.createElement(_DropdownMenu.default, {
408
- id: id ? id + "-listbox" : undefined,
407
+ }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/_react.default.createElement(_TreeView.default, {
409
408
  menuWidth: menuWidth,
410
409
  menuHeight: menuHeight,
411
410
  disabledItemValues: disabledItemValues,
@@ -458,21 +457,22 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
458
457
  usedClassNamePropKeys = _usePickerClassName[1]; // TODO: bad api design
459
458
  // consider an isolated Menu component
460
459
  if (inline) {
461
- return renderDropdownMenu();
460
+ return renderTreeView();
462
461
  }
463
462
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
463
+ id: id,
464
+ popupType: "tree",
464
465
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
465
466
  ref: trigger,
466
467
  placement: placement,
467
468
  onEntered: (0, _utils2.createChainedFunction)(handleEntered, onEnter),
468
469
  onExited: (0, _utils2.createChainedFunction)(handleExited, onExited),
469
- speaker: renderDropdownMenu
470
+ speaker: renderTreeView
470
471
  }, /*#__PURE__*/_react.default.createElement(Component, {
471
472
  className: classes,
472
473
  style: style,
473
474
  ref: root
474
475
  }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends3.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys)), {
475
- id: id,
476
476
  ref: target,
477
477
  as: toggleAs,
478
478
  appearance: appearance,
@@ -483,7 +483,8 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
483
483
  hasValue: hasValue,
484
484
  active: active,
485
485
  placement: placement,
486
- inputValue: value !== null && value !== void 0 ? value : ''
486
+ inputValue: value !== null && value !== void 0 ? value : '',
487
+ focusItemValue: focusItemValue
487
488
  }), selectedElement || (locale === null || locale === void 0 ? void 0 : locale.placeholder))));
488
489
  });
489
490
  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;