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
@@ -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
  }
@@ -1,16 +1,16 @@
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, { useState, useRef, useCallback } from 'react';
4
+ import React, { useState } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import pick from 'lodash/pick';
7
7
  import omit from 'lodash/omit';
8
- import Input from '../Input';
9
- import { useClassNames, useControlled, PLACEMENT, mergeRefs, useIsMounted, partitionHTMLProps } from '../utils';
8
+ import { useClassNames, useControlled, useIsMounted, useEventCallback, PLACEMENT, mergeRefs, partitionHTMLProps } from '../utils';
10
9
  import { animationPropTypes } from '../Animation/utils';
11
- import { PickerToggleTrigger, onMenuKeyDown, DropdownMenu, DropdownMenuItem, PickerOverlay, useFocusItemValue, usePublicMethods, pickTriggerPropKeys } from '../Picker';
10
+ import { PickerToggleTrigger, onMenuKeyDown, Listbox, ListItem, PickerPopup, useFocusItemValue, usePickerRef, pickTriggerPropKeys } from '../Picker';
12
11
  import { transformData, shouldDisplay } from './utils';
13
12
  import Plaintext from '../Plaintext';
13
+ import Combobox from './Combobox';
14
14
  /**
15
15
  * Autocomplete function of input field.
16
16
  * @see https://rsuitejs.com/components/auto-complete
@@ -63,22 +63,26 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
63
63
  setFocus = _useState[1];
64
64
  var items = (datalist === null || datalist === void 0 ? void 0 : datalist.filter(shouldDisplay(filterBy, value))) || [];
65
65
  var hasItems = items.length > 0;
66
- var overlayRef = useRef(null);
66
+ var _usePickerRef = usePickerRef(ref),
67
+ trigger = _usePickerRef.trigger,
68
+ overlay = _usePickerRef.overlay,
69
+ root = _usePickerRef.root;
67
70
  var isMounted = useIsMounted();
68
71
 
69
72
  // Used to hover the focuse item when trigger `onKeydown`
70
73
  var _useFocusItemValue = useFocusItemValue(value, {
71
74
  data: datalist,
75
+ focusToOption: false,
72
76
  callback: onMenuFocus,
73
77
  target: function target() {
74
- return overlayRef.current;
78
+ return overlay.current;
75
79
  }
76
80
  }),
77
81
  focusItemValue = _useFocusItemValue.focusItemValue,
78
82
  setFocusItemValue = _useFocusItemValue.setFocusItemValue,
79
83
  handleKeyDown = _useFocusItemValue.onKeyDown;
80
84
  var handleKeyDownEvent = function handleKeyDownEvent(event) {
81
- if (!overlayRef.current) {
85
+ if (!overlay.current) {
82
86
  return;
83
87
  }
84
88
  onMenuKeyDown(event, {
@@ -103,29 +107,29 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
103
107
  }
104
108
  handleClose();
105
109
  };
106
- var handleSelect = useCallback(function (item, event) {
110
+ var handleSelect = useEventCallback(function (item, event) {
107
111
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(item.value, item, event);
108
- }, [onSelect]);
109
- var handleChangeValue = useCallback(function (value, event) {
112
+ });
113
+ var handleChangeValue = useEventCallback(function (value, event) {
110
114
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
111
- }, [onChange]);
115
+ });
112
116
  var handleChange = function handleChange(value, event) {
113
117
  setFocusItemValue('');
114
118
  setValue(value);
115
119
  setFocus(true);
116
120
  handleChangeValue(value, event);
117
121
  };
118
- var handleClose = useCallback(function () {
122
+ var handleClose = useEventCallback(function () {
119
123
  if (isMounted()) {
120
124
  setFocus(false);
121
125
  onClose === null || onClose === void 0 ? void 0 : onClose();
122
126
  }
123
- }, [isMounted, onClose]);
124
- var handleOpen = useCallback(function () {
127
+ });
128
+ var handleOpen = useEventCallback(function () {
125
129
  setFocus(true);
126
130
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
127
- }, [onOpen]);
128
- var handleItemSelect = useCallback(function (nextItemValue, item, event) {
131
+ });
132
+ var handleItemSelect = useEventCallback(function (nextItemValue, item, event) {
129
133
  setValue(nextItemValue);
130
134
  setFocusItemValue(nextItemValue);
131
135
  handleSelect(item, event);
@@ -133,30 +137,25 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
133
137
  handleChangeValue(nextItemValue, event);
134
138
  }
135
139
  handleClose();
136
- }, [value, setValue, handleSelect, handleChangeValue, handleClose, setFocusItemValue]);
137
- var handleInputFocus = useCallback(function (event) {
140
+ });
141
+ var handleInputFocus = useEventCallback(function (event) {
138
142
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
139
143
  handleOpen();
140
- }, [onFocus, handleOpen]);
141
- var handleInputBlur = useCallback(function (event) {
144
+ });
145
+ var handleInputBlur = useEventCallback(function (event) {
142
146
  setTimeout(handleClose, 300);
143
147
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
144
- }, [onBlur, handleClose]);
148
+ });
145
149
  var _useClassNames = useClassNames(classPrefix),
146
150
  withClassPrefix = _useClassNames.withClassPrefix,
147
151
  merge = _useClassNames.merge;
148
152
  var classes = merge(className, withClassPrefix({
149
153
  disabled: disabled
150
154
  }));
151
- var triggerRef = useRef(null);
152
155
  var _partitionHTMLProps = partitionHTMLProps(omit(rest, pickTriggerPropKeys)),
153
156
  htmlInputProps = _partitionHTMLProps[0],
154
157
  restProps = _partitionHTMLProps[1];
155
- usePublicMethods(ref, {
156
- triggerRef: triggerRef,
157
- overlayRef: overlayRef
158
- });
159
- var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
158
+ var renderPopup = function renderPopup(positionProps, speakerRef) {
160
159
  var left = positionProps.left,
161
160
  top = positionProps.top,
162
161
  className = positionProps.className;
@@ -164,23 +163,22 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
164
163
  left: left,
165
164
  top: top
166
165
  };
167
- var menu = /*#__PURE__*/React.createElement(DropdownMenu, {
168
- id: id ? id + "-listbox" : undefined,
166
+ var menu = /*#__PURE__*/React.createElement(Listbox, {
169
167
  classPrefix: "auto-complete-menu",
170
- dropdownMenuItemClassPrefix: "auto-complete-item",
171
- dropdownMenuItemAs: DropdownMenuItem,
168
+ listItemClassPrefix: "auto-complete-item",
169
+ listItemAs: ListItem,
172
170
  focusItemValue: focusItemValue,
173
171
  onSelect: handleItemSelect,
174
172
  renderMenuItem: renderMenuItem,
175
173
  data: items,
176
174
  className: menuClassName
177
175
  });
178
- return /*#__PURE__*/React.createElement(PickerOverlay, {
179
- ref: mergeRefs(overlayRef, speakerRef),
176
+ return /*#__PURE__*/React.createElement(PickerPopup, {
177
+ ref: mergeRefs(overlay, speakerRef),
180
178
  style: styles,
181
179
  className: className,
182
180
  onKeyDown: handleKeyDownEvent,
183
- target: triggerRef,
181
+ target: trigger,
184
182
  autoWidth: menuAutoWidth
185
183
  }, renderMenu ? renderMenu(menu) : menu);
186
184
  };
@@ -190,22 +188,26 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
190
188
  localeKey: "unfilled"
191
189
  }, typeof value === 'undefined' ? defaultValue : value);
192
190
  }
191
+ var expanded = open || focus && hasItems;
193
192
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
194
- ref: triggerRef,
193
+ id: id,
194
+ ref: trigger,
195
195
  placement: placement,
196
196
  pickerProps: pick(props, pickTriggerPropKeys),
197
197
  trigger: ['click', 'focus'],
198
- open: open || focus && hasItems,
199
- speaker: renderDropdownMenu
198
+ open: expanded,
199
+ speaker: renderPopup
200
200
  }, /*#__PURE__*/React.createElement(Component, _extends({
201
201
  className: classes,
202
- style: style
203
- }, restProps), /*#__PURE__*/React.createElement(Input, _extends({}, htmlInputProps, {
204
- id: id,
202
+ style: style,
203
+ ref: root
204
+ }, restProps), /*#__PURE__*/React.createElement(Combobox, _extends({}, htmlInputProps, {
205
205
  disabled: disabled,
206
206
  value: value,
207
207
  size: size,
208
208
  readOnly: readOnly,
209
+ expanded: expanded,
210
+ focusItemValue: focusItemValue,
209
211
  onBlur: handleInputBlur,
210
212
  onFocus: handleInputFocus,
211
213
  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,25 @@
1
+ 'use client';
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
+ import React from 'react';
5
+ import { useCombobox } from '../Picker';
6
+ import Input from '../Input';
7
+ var Combobox = /*#__PURE__*/React.forwardRef(function (props, ref) {
8
+ var _useCombobox = useCombobox(),
9
+ id = _useCombobox.id,
10
+ popupType = _useCombobox.popupType;
11
+ var expanded = props.expanded,
12
+ focusItemValue = props.focusItemValue,
13
+ rest = _objectWithoutPropertiesLoose(props, ["expanded", "focusItemValue"]);
14
+ return /*#__PURE__*/React.createElement(Input, _extends({
15
+ role: "combobox",
16
+ "aria-autocomplete": "list",
17
+ "aria-haspopup": popupType,
18
+ "aria-expanded": expanded,
19
+ "aria-activedescendant": focusItemValue ? id + "-opt-" + focusItemValue : undefined,
20
+ autoComplete: "off",
21
+ id: id,
22
+ ref: ref
23
+ }, rest));
24
+ });
25
+ export default Combobox;
@@ -7,7 +7,11 @@ export interface CalendarProps extends WithAsProps {
7
7
  value?: Date;
8
8
  /** Default value */
9
9
  defaultValue?: Date;
10
- /** ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day */
10
+ /**
11
+ * ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day
12
+ *
13
+ * @see https://en.wikipedia.org/wiki/ISO_week_date
14
+ */
11
15
  isoWeek?: boolean;
12
16
  /** Display a compact calendar */
13
17
  compact?: boolean;
@@ -32,7 +32,11 @@ export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivE
32
32
  hideSeconds?: (second: number, date: Date) => boolean;
33
33
  /** The value that mouse hover on in range selection */
34
34
  hoverRangeValue?: [Date, Date];
35
- /** ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day */
35
+ /**
36
+ * ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day
37
+ *
38
+ * @see https://en.wikipedia.org/wiki/ISO_week_date
39
+ */
36
40
  isoWeek?: boolean;
37
41
  /** Limit showing how many years in the future */
38
42
  limitEndYear?: number;
@@ -1,14 +1,14 @@
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, useMemo } from 'react';
4
+ import React, { useMemo } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import pick from 'lodash/pick';
7
7
  import MonthDropdown from './MonthDropdown';
8
8
  import TimeDropdown from './TimeDropdown';
9
9
  import CalendarBody from './CalendarBody';
10
10
  import CalendarHeader from './CalendarHeader';
11
- import { useClassNames } from '../utils';
11
+ import { useClassNames, useEventCallback } from '../utils';
12
12
  import { disabledTime, addMonths, shouldRenderDate, shouldRenderTime, shouldRenderMonth, isSameMonth, calendarOnlyProps, omitHideDisabledProps, isValid } from '../utils/dateUtils';
13
13
  import { CalendarProvider } from './CalendarContext';
14
14
  import useCalendarState, { CalendarState } from './useCalendarState';
@@ -62,42 +62,42 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
62
62
  var calendarDate = useMemo(function () {
63
63
  return isValid(calendarDateProp) ? calendarDateProp : new Date();
64
64
  }, [calendarDateProp]);
65
- var isDisabledDate = useCallback(function (date) {
65
+ var isDisabledDate = useEventCallback(function (date) {
66
66
  var _disabledDate;
67
67
  return (_disabledDate = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date)) !== null && _disabledDate !== void 0 ? _disabledDate : false;
68
- }, [disabledDate]);
68
+ });
69
69
  var isTimeDisabled = function isTimeDisabled(date) {
70
70
  return disabledTime(props, date);
71
71
  };
72
- var handleMoveForward = useCallback(function () {
72
+ var handleMoveForward = useEventCallback(function () {
73
73
  onMoveForward === null || onMoveForward === void 0 ? void 0 : onMoveForward(addMonths(calendarDate, 1));
74
- }, [onMoveForward, calendarDate]);
75
- var handleMoveBackward = useCallback(function () {
74
+ });
75
+ var handleMoveBackward = useEventCallback(function () {
76
76
  onMoveBackward === null || onMoveBackward === void 0 ? void 0 : onMoveBackward(addMonths(calendarDate, -1));
77
- }, [onMoveBackward, calendarDate]);
77
+ });
78
78
 
79
79
  // It is displayed as the month to be selected.
80
- var toggleMonthView = useCallback(function () {
80
+ var toggleMonthView = useEventCallback(function () {
81
81
  if (calendarState === CalendarState.MONTH) {
82
82
  reset();
83
83
  } else {
84
84
  openMonth();
85
85
  }
86
86
  onToggleMonthDropdown === null || onToggleMonthDropdown === void 0 ? void 0 : onToggleMonthDropdown(calendarState !== CalendarState.MONTH);
87
- }, [calendarState, onToggleMonthDropdown, openMonth, reset]);
87
+ });
88
88
 
89
89
  // It is displayed as a time to be selected.
90
- var toggleTimeView = useCallback(function () {
90
+ var toggleTimeView = useEventCallback(function () {
91
91
  if (calendarState === CalendarState.TIME) {
92
92
  reset();
93
93
  } else {
94
94
  openTime();
95
95
  }
96
96
  onToggleTimeDropdown === null || onToggleTimeDropdown === void 0 ? void 0 : onToggleTimeDropdown(calendarState !== CalendarState.TIME);
97
- }, [calendarState, onToggleTimeDropdown, openTime, reset]);
98
- var handleCloseDropdown = useCallback(function () {
97
+ });
98
+ var handleCloseDropdown = useEventCallback(function () {
99
99
  return reset();
100
- }, [reset]);
100
+ });
101
101
  var renderDate = shouldRenderDate(format);
102
102
  var renderTime = shouldRenderTime(format);
103
103
  var renderMonth = shouldRenderMonth(format);
@@ -105,40 +105,38 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
105
105
  var onlyShowMonth = renderMonth && !renderDate && !renderTime;
106
106
  var showTime = calendarState === CalendarState.TIME || onlyShowTime;
107
107
  var showMonth = calendarState === CalendarState.MONTH || onlyShowMonth;
108
- var inSameThisMonthDate = useCallback(function (date) {
108
+ var inSameThisMonthDate = useEventCallback(function (date) {
109
109
  return isSameMonth(calendarDate, date);
110
- }, [calendarDate]);
110
+ });
111
111
  var calendarClasses = merge(className, withClassPrefix({
112
112
  'time-view': showTime,
113
113
  'month-view': showMonth,
114
114
  'show-week-numbers': showWeekNumbers
115
115
  }));
116
116
  var timeDropdownProps = pick(rest, calendarOnlyProps);
117
- var handleChangeMonth = useCallback(function (date, event) {
117
+ var handleChangeMonth = useEventCallback(function (date, event) {
118
118
  reset();
119
119
  onChangeMonth === null || onChangeMonth === void 0 ? void 0 : onChangeMonth(date, event);
120
- }, [onChangeMonth, reset]);
121
- var contextValue = useMemo(function () {
122
- return {
123
- date: calendarDate,
124
- dateRange: dateRange,
125
- disabledDate: isDisabledDate,
126
- format: format,
127
- hoverRangeValue: hoverRangeValue,
128
- inSameMonth: inSameThisMonthDate,
129
- isoWeek: isoWeek,
130
- targetId: targetId,
131
- locale: locale,
132
- onChangeMonth: handleChangeMonth,
133
- onChangeTime: onChangeTime,
134
- onMouseMove: onMouseMove,
135
- onSelect: onSelect,
136
- cellClassName: cellClassName,
137
- renderCell: renderCell,
138
- showWeekNumbers: showWeekNumbers,
139
- inline: inline
140
- };
141
- }, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, targetId, locale, onChangeTime, onMouseMove, onSelect, cellClassName, renderCell, showWeekNumbers]);
120
+ });
121
+ var contextValue = {
122
+ date: calendarDate,
123
+ dateRange: dateRange,
124
+ disabledDate: isDisabledDate,
125
+ format: format,
126
+ hoverRangeValue: hoverRangeValue,
127
+ inSameMonth: inSameThisMonthDate,
128
+ isoWeek: isoWeek,
129
+ targetId: targetId,
130
+ locale: locale,
131
+ onChangeMonth: handleChangeMonth,
132
+ onChangeTime: onChangeTime,
133
+ onMouseMove: onMouseMove,
134
+ onSelect: onSelect,
135
+ cellClassName: cellClassName,
136
+ renderCell: renderCell,
137
+ showWeekNumbers: showWeekNumbers,
138
+ inline: inline
139
+ };
142
140
  return /*#__PURE__*/React.createElement(CalendarProvider, {
143
141
  value: contextValue
144
142
  }, /*#__PURE__*/React.createElement(Component, _extends({