rsuite 5.48.1 → 5.50.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 (203) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Cascader/styles/index.less +5 -4
  3. package/DatePicker/styles/index.less +18 -11
  4. package/DateRangeInput/package.json +7 -0
  5. package/DateRangePicker/styles/index.less +20 -0
  6. package/Dropdown/styles/index.less +5 -4
  7. package/Dropdown/styles/mixin.less +0 -11
  8. package/InputGroup/styles/index.less +1 -0
  9. package/Picker/styles/index.less +51 -24
  10. package/Picker/styles/mixin.less +17 -13
  11. package/README.md +34 -24
  12. package/Sidenav/styles/index.less +2 -0
  13. package/TagInput/styles/index.less +1 -1
  14. package/cjs/AutoComplete/AutoComplete.js +25 -26
  15. package/cjs/Calendar/Calendar.d.ts +5 -1
  16. package/cjs/Calendar/CalendarContainer.d.ts +7 -1
  17. package/cjs/Calendar/CalendarContainer.js +11 -4
  18. package/cjs/Calendar/CalendarHeader.js +2 -0
  19. package/cjs/Calendar/MonthDropdown.js +7 -2
  20. package/cjs/Calendar/MonthDropdownItem.js +2 -2
  21. package/cjs/Calendar/Table.js +6 -1
  22. package/cjs/Calendar/TimeDropdown.js +17 -10
  23. package/cjs/Calendar/types.d.ts +1 -0
  24. package/cjs/Cascader/Cascader.js +46 -48
  25. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  26. package/cjs/CheckPicker/CheckPicker.js +33 -36
  27. package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
  28. package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
  29. package/cjs/CustomProvider/CustomProvider.js +2 -2
  30. package/cjs/DateInput/DateField.d.ts +9 -31
  31. package/cjs/DateInput/DateField.js +61 -12
  32. package/cjs/DateInput/DateInput.d.ts +7 -2
  33. package/cjs/DateInput/DateInput.js +74 -92
  34. package/cjs/DateInput/index.d.ts +4 -0
  35. package/cjs/DateInput/index.js +19 -1
  36. package/cjs/DateInput/useDateInputState.d.ts +7 -31
  37. package/cjs/DateInput/useDateInputState.js +39 -15
  38. package/cjs/DateInput/useIsFocused.d.ts +7 -0
  39. package/cjs/DateInput/useIsFocused.js +28 -0
  40. package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
  41. package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
  42. package/cjs/DateInput/utils.d.ts +23 -1
  43. package/cjs/DateInput/utils.js +155 -51
  44. package/cjs/DatePicker/DatePicker.d.ts +25 -8
  45. package/cjs/DatePicker/DatePicker.js +208 -241
  46. package/cjs/DatePicker/Toolbar.js +5 -22
  47. package/cjs/DatePicker/utils.d.ts +5 -1
  48. package/cjs/DatePicker/utils.js +17 -1
  49. package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
  50. package/cjs/DateRangeInput/DateRangeInput.js +244 -0
  51. package/cjs/DateRangeInput/index.d.ts +3 -0
  52. package/cjs/DateRangeInput/index.js +9 -0
  53. package/cjs/DateRangeInput/utils.d.ts +61 -0
  54. package/cjs/DateRangeInput/utils.js +146 -0
  55. package/cjs/DateRangePicker/Calendar.js +24 -23
  56. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  57. package/cjs/DateRangePicker/DateRangePicker.js +251 -203
  58. package/cjs/DateRangePicker/types.d.ts +11 -3
  59. package/cjs/DateRangePicker/utils.d.ts +2 -1
  60. package/cjs/DateRangePicker/utils.js +7 -5
  61. package/cjs/FormControl/FormControl.d.ts +11 -1
  62. package/cjs/FormControl/FormControl.js +6 -5
  63. package/cjs/Input/Input.d.ts +11 -0
  64. package/cjs/Input/Input.js +11 -8
  65. package/cjs/InputPicker/InputPicker.js +62 -63
  66. package/cjs/MultiCascader/MultiCascader.js +40 -42
  67. package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
  68. package/cjs/Overlay/OverlayTrigger.js +5 -0
  69. package/cjs/Picker/PickerIndicator.d.ts +10 -0
  70. package/cjs/Picker/PickerIndicator.js +49 -0
  71. package/cjs/Picker/PickerLabel.d.ts +9 -0
  72. package/cjs/Picker/PickerLabel.js +23 -0
  73. package/cjs/Picker/PickerToggle.d.ts +17 -22
  74. package/cjs/Picker/PickerToggle.js +52 -177
  75. package/cjs/Picker/index.d.ts +3 -0
  76. package/cjs/Picker/index.js +10 -1
  77. package/cjs/Picker/usePickerRef.d.ts +19 -0
  78. package/cjs/Picker/usePickerRef.js +88 -0
  79. package/cjs/Picker/utils.d.ts +5 -9
  80. package/cjs/Picker/utils.js +22 -89
  81. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  82. package/cjs/SelectPicker/SelectPicker.js +39 -42
  83. package/cjs/TreePicker/TreePicker.js +72 -75
  84. package/cjs/index.d.ts +2 -0
  85. package/cjs/index.js +3 -1
  86. package/cjs/locales/index.d.ts +2 -2
  87. package/cjs/utils/constants.d.ts +2 -1
  88. package/cjs/utils/constants.js +1 -0
  89. package/cjs/utils/dateUtils.d.ts +0 -1
  90. package/cjs/utils/dateUtils.js +0 -6
  91. package/cjs/utils/getStringLength.d.ts +2 -0
  92. package/cjs/utils/getStringLength.js +18 -0
  93. package/cjs/utils/index.d.ts +3 -0
  94. package/cjs/utils/index.js +11 -2
  95. package/cjs/utils/useCustom.js +1 -1
  96. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  97. package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
  98. package/dist/rsuite-no-reset-rtl.css +140 -207
  99. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  100. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  101. package/dist/rsuite-no-reset.css +140 -207
  102. package/dist/rsuite-no-reset.min.css +1 -1
  103. package/dist/rsuite-no-reset.min.css.map +1 -1
  104. package/dist/rsuite-rtl.css +140 -75
  105. package/dist/rsuite-rtl.min.css +1 -1
  106. package/dist/rsuite-rtl.min.css.map +1 -1
  107. package/dist/rsuite.css +140 -75
  108. package/dist/rsuite.js +4833 -258
  109. package/dist/rsuite.js.map +1 -1
  110. package/dist/rsuite.min.css +1 -1
  111. package/dist/rsuite.min.css.map +1 -1
  112. package/dist/rsuite.min.js +1 -1
  113. package/dist/rsuite.min.js.map +1 -1
  114. package/esm/AutoComplete/AutoComplete.js +28 -29
  115. package/esm/Calendar/Calendar.d.ts +5 -1
  116. package/esm/Calendar/CalendarContainer.d.ts +7 -1
  117. package/esm/Calendar/CalendarContainer.js +12 -5
  118. package/esm/Calendar/CalendarHeader.js +2 -0
  119. package/esm/Calendar/MonthDropdown.js +7 -2
  120. package/esm/Calendar/MonthDropdownItem.js +2 -2
  121. package/esm/Calendar/Table.js +6 -1
  122. package/esm/Calendar/TimeDropdown.js +17 -10
  123. package/esm/Calendar/types.d.ts +1 -0
  124. package/esm/Cascader/Cascader.js +49 -51
  125. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  126. package/esm/CheckPicker/CheckPicker.js +36 -39
  127. package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
  128. package/esm/CustomProvider/CustomProvider.d.ts +13 -0
  129. package/esm/CustomProvider/CustomProvider.js +3 -3
  130. package/esm/DateInput/DateField.d.ts +9 -31
  131. package/esm/DateInput/DateField.js +61 -12
  132. package/esm/DateInput/DateInput.d.ts +7 -2
  133. package/esm/DateInput/DateInput.js +77 -95
  134. package/esm/DateInput/index.d.ts +4 -0
  135. package/esm/DateInput/index.js +4 -0
  136. package/esm/DateInput/useDateInputState.d.ts +7 -31
  137. package/esm/DateInput/useDateInputState.js +41 -18
  138. package/esm/DateInput/useIsFocused.d.ts +7 -0
  139. package/esm/DateInput/useIsFocused.js +22 -0
  140. package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
  141. package/esm/DateInput/useKeyboardInputEvent.js +38 -0
  142. package/esm/DateInput/utils.d.ts +23 -1
  143. package/esm/DateInput/utils.js +150 -51
  144. package/esm/DatePicker/DatePicker.d.ts +25 -8
  145. package/esm/DatePicker/DatePicker.js +211 -244
  146. package/esm/DatePicker/Toolbar.js +5 -22
  147. package/esm/DatePicker/utils.d.ts +5 -1
  148. package/esm/DatePicker/utils.js +16 -1
  149. package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
  150. package/esm/DateRangeInput/DateRangeInput.js +237 -0
  151. package/esm/DateRangeInput/index.d.ts +3 -0
  152. package/esm/DateRangeInput/index.js +3 -0
  153. package/esm/DateRangeInput/utils.d.ts +61 -0
  154. package/esm/DateRangeInput/utils.js +137 -0
  155. package/esm/DateRangePicker/Calendar.js +25 -23
  156. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  157. package/esm/DateRangePicker/DateRangePicker.js +253 -205
  158. package/esm/DateRangePicker/types.d.ts +11 -3
  159. package/esm/DateRangePicker/utils.d.ts +2 -1
  160. package/esm/DateRangePicker/utils.js +7 -5
  161. package/esm/FormControl/FormControl.d.ts +11 -1
  162. package/esm/FormControl/FormControl.js +4 -3
  163. package/esm/Input/Input.d.ts +11 -0
  164. package/esm/Input/Input.js +12 -9
  165. package/esm/InputPicker/InputPicker.js +64 -65
  166. package/esm/MultiCascader/MultiCascader.js +43 -45
  167. package/esm/Overlay/OverlayTrigger.d.ts +3 -0
  168. package/esm/Overlay/OverlayTrigger.js +5 -0
  169. package/esm/Picker/PickerIndicator.d.ts +10 -0
  170. package/esm/Picker/PickerIndicator.js +43 -0
  171. package/esm/Picker/PickerLabel.d.ts +9 -0
  172. package/esm/Picker/PickerLabel.js +17 -0
  173. package/esm/Picker/PickerToggle.d.ts +17 -22
  174. package/esm/Picker/PickerToggle.js +54 -179
  175. package/esm/Picker/index.d.ts +3 -0
  176. package/esm/Picker/index.js +3 -0
  177. package/esm/Picker/usePickerRef.d.ts +19 -0
  178. package/esm/Picker/usePickerRef.js +82 -0
  179. package/esm/Picker/utils.d.ts +5 -9
  180. package/esm/Picker/utils.js +24 -90
  181. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  182. package/esm/SelectPicker/SelectPicker.js +42 -45
  183. package/esm/TreePicker/TreePicker.js +75 -78
  184. package/esm/index.d.ts +2 -0
  185. package/esm/index.js +1 -0
  186. package/esm/locales/index.d.ts +2 -2
  187. package/esm/utils/constants.d.ts +2 -1
  188. package/esm/utils/constants.js +1 -0
  189. package/esm/utils/dateUtils.d.ts +0 -1
  190. package/esm/utils/dateUtils.js +0 -5
  191. package/esm/utils/getStringLength.d.ts +2 -0
  192. package/esm/utils/getStringLength.js +13 -0
  193. package/esm/utils/index.d.ts +3 -0
  194. package/esm/utils/index.js +4 -1
  195. package/esm/utils/useCustom.js +2 -2
  196. package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  197. package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
  198. package/package.json +1 -1
  199. package/styles/color-modes/dark.less +1 -0
  200. package/styles/color-modes/high-contrast.less +1 -0
  201. package/styles/color-modes/light.less +1 -0
  202. package/styles/mixins/combobox.less +10 -0
  203. package/styles/normalize.less +230 -231
@@ -9,12 +9,20 @@ export interface RangeType<T = DateRange> {
9
9
  placement?: 'bottom' | 'left';
10
10
  }
11
11
  export declare type DisabledDateFunction = (
12
- /** Date used to determine if disabling is required. */
12
+ /**
13
+ * Date used to determine if disabling is required.
14
+ */
13
15
  date: Date,
14
- /** Date selected. */
16
+ /**
17
+ * Date selected.
18
+ */
15
19
  selectDate?: ValueType,
16
20
  /**
17
21
  * Whether to choose to finish now.
18
22
  * If `false`, only the start date is selected, waiting for the selection end date.
19
23
  */
20
- selectedDone?: boolean, target?: DATERANGE_DISABLED_TARGET) => boolean;
24
+ selectedDone?: boolean,
25
+ /**
26
+ * Call the target of the `shouldDisableDate` function.
27
+ */
28
+ target?: DATERANGE_DISABLED_TARGET) => boolean;
@@ -1,7 +1,8 @@
1
1
  import { DateRange } from './types';
2
- export declare function getSafeCalendarDate({ value, calendarKey }: {
2
+ export declare function getSafeCalendarDate({ value, calendarKey, allowAameMonth }: {
3
3
  value: [] | [Date] | [Date, Date] | null;
4
4
  calendarKey?: 'start' | 'end';
5
+ allowAameMonth?: boolean;
5
6
  }): DateRange;
6
7
  export declare const isSameRange: (source: DateRange | null, dest: DateRange | null, format: string) => boolean;
7
8
  export declare const getMonthHoverRange: (date: Date) => DateRange;
@@ -4,29 +4,31 @@ export function getSafeCalendarDate(_ref) {
4
4
  var _value;
5
5
  var value = _ref.value,
6
6
  _ref$calendarKey = _ref.calendarKey,
7
- calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey;
7
+ calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey,
8
+ allowAameMonth = _ref.allowAameMonth;
8
9
  // Update calendarDate if the value is not null
9
10
  value = (_value = value) !== null && _value !== void 0 ? _value : [];
11
+ var gap = allowAameMonth ? 0 : 1;
10
12
  if (value[0] && value[1]) {
11
13
  var diffMonth = differenceInCalendarMonths(value[1], value[0]);
12
14
  if (calendarKey === 'start') {
13
15
  return [value[0], diffMonth <= 0 ? copyTime({
14
16
  from: value[1],
15
- to: addMonths(value[0], 1)
17
+ to: addMonths(value[0], gap)
16
18
  }) : value[1]];
17
19
  } else if (calendarKey === 'end') {
18
20
  return [diffMonth <= 0 ? copyTime({
19
21
  from: value[0],
20
- to: addMonths(value[1], -1)
22
+ to: addMonths(value[1], -gap)
21
23
  }) : value[0], value[1]];
22
24
  }
23
25
 
24
26
  // If only the start date
25
27
  } else if (value[0]) {
26
- return [value[0], addMonths(value[0], 1)];
28
+ return [value[0], addMonths(value[0], gap)];
27
29
  }
28
30
  var todayDate = new Date();
29
- return [todayDate, addMonths(todayDate, 1)];
31
+ return [todayDate, addMonths(todayDate, gap)];
30
32
  }
31
33
  export var isSameRange = function isSameRange(source, dest, format) {
32
34
  // If both are null, reguard as same
@@ -9,7 +9,17 @@ export declare type FormControlAccepterProps<ValueType = any> = FormControlBaseP
9
9
  export interface FormControlProps<P = any, ValueType = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLFormElement>, 'value' | 'onChange'> {
10
10
  /** Proxied components */
11
11
  accepter?: React.ElementType<P & FormControlBaseProps<ValueType>>;
12
- /** The name of form-control */
12
+ /**
13
+ * The name of form-control, support nested path. such as `address.city`.
14
+ * The path will be used to get and set form values.
15
+ *
16
+ * @example
17
+ * ```js
18
+ * <Form formValue={{ address: { city: 'Shanghai' } }}>
19
+ * <FormControl name="address.city" />
20
+ * </Form>
21
+ * ```
22
+ **/
13
23
  name: string;
14
24
  /** Value */
15
25
  value?: ValueType;
@@ -6,6 +6,8 @@ var _templateObject;
6
6
  import React, { useContext } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import isUndefined from 'lodash/isUndefined';
9
+ import get from 'lodash/get';
10
+ import set from 'lodash/set';
9
11
  import Input from '../Input';
10
12
  import FormErrorMessage from '../FormErrorMessage';
11
13
  import { useClassNames } from '../utils';
@@ -80,7 +82,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
80
82
  });
81
83
  var trigger = checkTrigger || contextCheckTrigger;
82
84
  var formValue = useContext(FormValueContext);
83
- var val = isUndefined(value) ? formValue === null || formValue === void 0 ? void 0 : formValue[name] : value;
85
+ var val = isUndefined(value) ? get(formValue, name) : value;
84
86
  var _useClassNames = useClassNames(classPrefix),
85
87
  withClassPrefix = _useClassNames.withClassPrefix,
86
88
  prefix = _useClassNames.prefix;
@@ -95,7 +97,6 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
95
97
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
96
98
  };
97
99
  var handleFieldCheck = function handleFieldCheck(value, isCheckTrigger) {
98
- var _extends2;
99
100
  var callbackEvents = function callbackEvents(checkResult) {
100
101
  // The relevant event is triggered only when the inspection is allowed.
101
102
  if (isCheckTrigger) {
@@ -107,7 +108,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
107
108
  }
108
109
  return checkResult;
109
110
  };
110
- var nextFormValue = _extends({}, formValue, (_extends2 = {}, _extends2[name] = value, _extends2));
111
+ var nextFormValue = set(formValue || {}, name, value);
111
112
  var model = getCombinedModel();
112
113
  if (checkAsync) {
113
114
  return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(name, nextFormValue).then(function (checkResult) {
@@ -13,12 +13,23 @@ export interface InputProps extends WithAsProps, Omit<React.InputHTMLAttributes<
13
13
  size?: TypeAttributes.Size;
14
14
  /** Ref of input element */
15
15
  inputRef?: React.Ref<any>;
16
+ /**
17
+ * The htmlSize attribute defines the width of the <input> element.
18
+ *
19
+ * @see MDN https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/size
20
+ * @version 5.49.0
21
+ */
22
+ htmlSize?: number;
23
+ /**
24
+ * The callback function in which value is changed.
25
+ */
16
26
  onChange?: PrependParameters<React.ChangeEventHandler<HTMLInputElement>, [value: string]>;
17
27
  /** Called on press enter */
18
28
  onPressEnter?: React.KeyboardEventHandler<HTMLInputElement>;
19
29
  }
20
30
  /**
21
31
  * The `<Input>` component is used to get user input in a text field.
32
+ *
22
33
  * @see https://rsuitejs.com/components/input
23
34
  */
24
35
  declare const Input: RsRefForwardingComponent<'input', InputProps>;
@@ -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, { useCallback, useContext } from 'react';
4
+ import React, { useContext } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { FormGroupContext } from '../FormGroup/FormGroup';
7
7
  import { InputGroupContext } from '../InputGroup/InputGroup';
@@ -9,6 +9,7 @@ import Plaintext from '../Plaintext';
9
9
  import { createChainedFunction, TypeChecker, mergeRefs, useClassNames, KEY_VALUES } from '../utils';
10
10
  /**
11
11
  * The `<Input>` component is used to get user input in a text field.
12
+ *
12
13
  * @see https://rsuitejs.com/components/input
13
14
  */
14
15
  var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
@@ -25,6 +26,7 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
25
26
  inputRef = props.inputRef,
26
27
  id = props.id,
27
28
  size = props.size,
29
+ htmlSize = props.htmlSize,
28
30
  plaintext = props.plaintext,
29
31
  readOnly = props.readOnly,
30
32
  onPressEnter = props.onPressEnter,
@@ -32,17 +34,17 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
32
34
  onBlur = props.onBlur,
33
35
  onKeyDown = props.onKeyDown,
34
36
  onChange = props.onChange,
35
- rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "as", "type", "disabled", "value", "defaultValue", "inputRef", "id", "size", "plaintext", "readOnly", "onPressEnter", "onFocus", "onBlur", "onKeyDown", "onChange"]);
36
- var handleKeyDown = useCallback(function (event) {
37
+ rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "as", "type", "disabled", "value", "defaultValue", "inputRef", "id", "size", "htmlSize", "plaintext", "readOnly", "onPressEnter", "onFocus", "onBlur", "onKeyDown", "onChange"]);
38
+ var handleKeyDown = function handleKeyDown(event) {
37
39
  if (event.key === KEY_VALUES.ENTER) {
38
40
  onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(event);
39
41
  }
40
42
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
41
- }, [onPressEnter, onKeyDown]);
42
- var handleChange = useCallback(function (event) {
43
+ };
44
+ var handleChange = function handleChange(event) {
43
45
  var _event$target;
44
46
  onChange === null || onChange === void 0 ? void 0 : onChange((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value, event);
45
- }, [onChange]);
47
+ };
46
48
  var _useClassNames = useClassNames(classPrefix),
47
49
  withClassPrefix = _useClassNames.withClassPrefix,
48
50
  merge = _useClassNames.merge;
@@ -60,9 +62,9 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
60
62
  localeKey: "unfilled"
61
63
  }, typeof value === 'undefined' ? defaultValue : value);
62
64
  }
63
- var operable = !disabled && !readOnly;
65
+ var inputable = !disabled && !readOnly;
64
66
  var eventProps = {};
65
- if (operable) {
67
+ if (inputable) {
66
68
  eventProps.onChange = handleChange;
67
69
  eventProps.onKeyDown = handleKeyDown;
68
70
  eventProps.onFocus = createChainedFunction(onFocus, inputGroupContext === null || inputGroupContext === void 0 ? void 0 : inputGroupContext.onFocus);
@@ -76,7 +78,8 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
76
78
  value: value,
77
79
  defaultValue: defaultValue,
78
80
  disabled: disabled,
79
- readOnly: readOnly
81
+ readOnly: readOnly,
82
+ size: htmlSize
80
83
  }));
81
84
  });
82
85
  Input.displayName = 'Input';
@@ -17,9 +17,9 @@ import getWidth from 'dom-lib/getWidth';
17
17
  import shallowEqual from '../utils/shallowEqual';
18
18
  import { filterNodesOfTree } from '../utils/treeUtils';
19
19
  import Plaintext from '../Plaintext';
20
- import { createChainedFunction, tplTransform, useClassNames, useCustom, useControlled, mergeRefs, isOneOf, KEY_VALUES } from '../utils';
20
+ import { createChainedFunction, tplTransform, useClassNames, useCustom, useControlled, useEventCallback, mergeRefs, isOneOf, KEY_VALUES } from '../utils';
21
21
  import { getDataGroupBy } from '../utils/getDataGroupBy';
22
- import { DropdownMenu, DropdownMenuItem, DropdownMenuCheckItem, PickerToggle, PickerOverlay, PickerToggleTrigger, useFocusItemValue, usePickerClassName, useSearch, usePublicMethods, useToggleKeyDownEvent, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
22
+ import { DropdownMenu, DropdownMenuItem, DropdownMenuCheckItem, PickerToggle, PickerOverlay, PickerToggleTrigger, useFocusItemValue, usePickerClassName, useSearch, usePickerRef, useToggleKeyDownEvent, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
23
23
  import Tag from '../Tag';
24
24
  import InputAutosize from './InputAutosize';
25
25
  import InputSearch from './InputSearch';
@@ -109,11 +109,13 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
109
109
  if (groupBy === valueKey || groupBy === labelKey) {
110
110
  throw Error('`groupBy` can not be equal to `valueKey` and `labelKey`');
111
111
  }
112
- var overlayRef = useRef(null);
113
- var targetRef = useRef(null);
114
- var triggerRef = useRef(null);
115
112
  var inputRef = useRef();
116
- var listRef = useRef(null);
113
+ var _usePickerRef = usePickerRef(ref),
114
+ triggerRef = _usePickerRef.trigger,
115
+ root = _usePickerRef.root,
116
+ target = _usePickerRef.target,
117
+ overlay = _usePickerRef.overlay,
118
+ list = _usePickerRef.list;
117
119
  var _useCustom = useCustom(['Picker', 'InputPicker'], overrideLocale),
118
120
  locale = _useCustom.locale;
119
121
  var _useClassNames = useClassNames(classPrefix),
@@ -142,34 +144,34 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
142
144
  value = _useControlled[0],
143
145
  setValue = _useControlled[1],
144
146
  isControlled = _useControlled[2];
145
- var cloneValue = useCallback(function () {
147
+ var cloneValue = function cloneValue() {
146
148
  return multi ? clone(value) || [] : value;
147
- }, [multi, value]);
148
- var handleClose = useCallback(function () {
149
- var _triggerRef$current, _targetRef$current, _targetRef$current$fo;
149
+ };
150
+ var handleClose = useEventCallback(function () {
151
+ var _triggerRef$current, _target$current, _target$current$focus;
150
152
  triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.close();
151
153
 
152
154
  // The focus is on the trigger button after closing
153
- (_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);
154
- }, []);
155
+ (_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);
156
+ });
155
157
 
156
158
  // Used to hover the focuse item when trigger `onKeydown`
157
159
  var _useFocusItemValue = useFocusItemValue(multi ? value === null || value === void 0 ? void 0 : value[0] : value, {
158
160
  data: getAllDataAndCache(),
159
161
  valueKey: valueKey,
160
162
  target: function target() {
161
- return overlayRef.current;
163
+ return overlay.current;
162
164
  }
163
165
  }),
164
166
  focusItemValue = _useFocusItemValue.focusItemValue,
165
167
  setFocusItemValue = _useFocusItemValue.setFocusItemValue,
166
168
  onKeyDown = _useFocusItemValue.onKeyDown;
167
- var handleSearchCallback = useCallback(function (searchKeyword, filteredData, event) {
169
+ var handleSearchCallback = useEventCallback(function (searchKeyword, filteredData, event) {
168
170
  var _filteredData$;
169
171
  // The first option after filtering is the focus.
170
172
  setFocusItemValue(disabledOptions ? searchKeyword : (filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]) || searchKeyword);
171
173
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
172
- }, [disabledOptions, setFocusItemValue, valueKey, onSearch]);
174
+ });
173
175
 
174
176
  // Use search keywords to filter options.
175
177
  var _useSearch = useSearch(getAllData(), {
@@ -195,12 +197,14 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
195
197
  if ((_triggerRef$current2 = triggerRef.current) !== null && _triggerRef$current2 !== void 0 && _triggerRef$current2.root) {
196
198
  setMaxWidth(getWidth(triggerRef.current.root));
197
199
  }
200
+ // eslint-disable-next-line react-hooks/exhaustive-deps
198
201
  }, []);
199
202
 
200
203
  // Update the position of the menu when the search keyword and value change
201
204
  useEffect(function () {
202
205
  var _triggerRef$current3, _triggerRef$current3$;
203
206
  (_triggerRef$current3 = triggerRef.current) === null || _triggerRef$current3 === void 0 ? void 0 : (_triggerRef$current3$ = _triggerRef$current3.updatePosition) === null || _triggerRef$current3$ === void 0 ? void 0 : _triggerRef$current3$.call(_triggerRef$current3);
207
+ // eslint-disable-next-line react-hooks/exhaustive-deps
204
208
  }, [searchKeyword, value]);
205
209
  var getDateItem = function getDateItem(value) {
206
210
  // Find active `MenuItem` by `value`
@@ -218,23 +222,23 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
218
222
  itemNode: itemNode
219
223
  };
220
224
  };
221
- var getInput = useCallback(function () {
225
+ var getInput = function getInput() {
222
226
  var _inputRef$current;
223
227
  return multi ? (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.input : inputRef.current;
224
- }, [inputRef, multi]);
225
- var focusInput = useCallback(function () {
228
+ };
229
+ var focusInput = function focusInput() {
226
230
  var _getInput;
227
231
  return (_getInput = getInput()) === null || _getInput === void 0 ? void 0 : _getInput.focus();
228
- }, [getInput]);
229
- var blurInput = useCallback(function () {
232
+ };
233
+ var blurInput = function blurInput() {
230
234
  var _getInput2;
231
235
  return (_getInput2 = getInput()) === null || _getInput2 === void 0 ? void 0 : _getInput2.blur();
232
- }, [getInput]);
236
+ };
233
237
 
234
238
  /**
235
239
  * Convert the string of the newly created option into an object.
236
240
  */
237
- var createOption = useCallback(function (value) {
241
+ var createOption = function createOption(value) {
238
242
  var _ref2;
239
243
  if (groupBy) {
240
244
  var _ref;
@@ -245,11 +249,11 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
245
249
  return _ref2 = {
246
250
  create: true
247
251
  }, _ref2[valueKey] = value, _ref2[labelKey] = value, _ref2;
248
- }, [groupBy, valueKey, labelKey, locale]);
249
- var handleChange = useCallback(function (value, event) {
252
+ };
253
+ var handleChange = useEventCallback(function (value, event) {
250
254
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
251
- }, [onChange]);
252
- var handleRemoveItemByTag = useCallback(function (tag, event) {
255
+ });
256
+ var handleRemoveItemByTag = useEventCallback(function (tag, event) {
253
257
  event.stopPropagation();
254
258
  var val = cloneValue();
255
259
  remove(val, function (itemVal) {
@@ -258,15 +262,15 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
258
262
  setValue(val);
259
263
  handleChange(val, event);
260
264
  onTagRemove === null || onTagRemove === void 0 ? void 0 : onTagRemove(tag, event);
261
- }, [cloneValue, setValue, handleChange, onTagRemove]);
262
- var handleSelect = useCallback(function (value, item, event) {
265
+ });
266
+ var handleSelect = useEventCallback(function (value, item, event) {
263
267
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, item, event);
264
268
  if (creatable && item.create) {
265
269
  delete item.create;
266
270
  onCreate === null || onCreate === void 0 ? void 0 : onCreate(value, item, event);
267
271
  setNewData(newData.concat(item));
268
272
  }
269
- }, [creatable, newData, onSelect, onCreate]);
273
+ });
270
274
 
271
275
  /**
272
276
  * Callback triggered by single selection
@@ -274,14 +278,14 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
274
278
  * @param item
275
279
  * @param event
276
280
  */
277
- var handleSelectItem = function handleSelectItem(value, item, event) {
281
+ var handleSelectItem = useEventCallback(function (value, item, event) {
278
282
  setValue(value);
279
283
  setFocusItemValue(value);
280
284
  resetSearch();
281
285
  handleSelect(value, item, event);
282
286
  handleChange(value, event);
283
287
  handleClose();
284
- };
288
+ });
285
289
 
286
290
  /**
287
291
  * Callback triggered by multiple selection
@@ -290,7 +294,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
290
294
  * @param event
291
295
  * @param checked
292
296
  */
293
- var handleCheckTag = function handleCheckTag(nextItemValue, item, event, checked) {
297
+ var handleCheckTag = useEventCallback(function (nextItemValue, item, event, checked) {
294
298
  var val = cloneValue();
295
299
  if (checked) {
296
300
  val.push(nextItemValue);
@@ -305,8 +309,8 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
305
309
  handleSelect(val, item, event);
306
310
  handleChange(val, event);
307
311
  focusInput();
308
- };
309
- var handleTagKeyPress = useCallback(function (event) {
312
+ });
313
+ var handleTagKeyPress = useEventCallback(function (event) {
310
314
  // When composing, ignore the keypress event.
311
315
  if (event.nativeEvent.isComposing) {
312
316
  return;
@@ -342,8 +346,8 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
342
346
  resetSearch();
343
347
  handleSelect(val, focusItem, event);
344
348
  handleChange(val, event);
345
- }, [cloneValue, getAllData, focusItemValue, disabledItemValues, disabledOptions, setValue, resetSearch, handleSelect, handleChange, valueKey, createOption]);
346
- var handleMenuItemKeyPress = useCallback(function (event) {
349
+ });
350
+ var handleMenuItemKeyPress = useEventCallback(function (event) {
347
351
  if (!focusItemValue || !controlledData) {
348
352
  return;
349
353
  }
@@ -372,19 +376,13 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
372
376
  }
373
377
  handleChange(focusItemValue, event);
374
378
  handleClose();
375
- }, [setValue, disabledItemValues, controlledData, focusItemValue, valueKey, searchKeyword, handleClose, resetSearch, createOption, getAllData, handleChange, handleSelect]);
376
- usePublicMethods(ref, {
377
- triggerRef: triggerRef,
378
- overlayRef: overlayRef,
379
- targetRef: targetRef,
380
- listRef: listRef
381
379
  });
382
380
 
383
381
  /**
384
382
  * Remove the last item, after pressing the back key on the keyboard.
385
383
  * @param event
386
384
  */
387
- var removeLastItem = useCallback(function (event) {
385
+ var removeLastItem = useEventCallback(function (event) {
388
386
  var target = event === null || event === void 0 ? void 0 : event.target;
389
387
  if ((target === null || target === void 0 ? void 0 : target.tagName) !== 'INPUT') {
390
388
  focusInput();
@@ -397,8 +395,8 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
397
395
  val.pop();
398
396
  setValue(val);
399
397
  handleChange(val, event);
400
- }, [setValue, focusInput, handleChange, cloneValue]);
401
- var handleClean = useCallback(function (event) {
398
+ });
399
+ var handleClean = useEventCallback(function (event) {
402
400
  if (disabled || searchKeyword !== '') {
403
401
  return;
404
402
  }
@@ -411,14 +409,14 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
411
409
  handleChange(null, event);
412
410
  }
413
411
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
414
- }, [disabled, searchKeyword, setValue, setFocusItemValue, resetSearch, multi, onClean, handleChange]);
412
+ });
415
413
  var events = {
416
414
  onMenuPressBackspace: multi ? removeLastItem : handleClean,
417
415
  onMenuKeyDown: onKeyDown,
418
416
  onMenuPressEnter: undefined,
419
417
  onKeyDown: undefined
420
418
  };
421
- var handleKeyPress = useCallback(function (event) {
419
+ var handleKeyPress = useEventCallback(function (event) {
422
420
  // When typing a space, create a tag.
423
421
  if (isOneOf('Space', trigger) && event.key === KEY_VALUES.SPACE) {
424
422
  handleTagKeyPress(event);
@@ -430,7 +428,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
430
428
  handleTagKeyPress(event);
431
429
  event.preventDefault();
432
430
  }
433
- }, [handleTagKeyPress, trigger]);
431
+ });
434
432
  if (multi) {
435
433
  if (isOneOf('Enter', trigger)) {
436
434
  events.onMenuPressEnter = handleTagKeyPress;
@@ -442,30 +440,30 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
442
440
  events.onMenuPressEnter = handleMenuItemKeyPress;
443
441
  }
444
442
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
445
- triggerRef: triggerRef,
446
- targetRef: targetRef,
447
- overlayRef: overlayRef
443
+ trigger: triggerRef,
444
+ target: target,
445
+ overlay: overlay
448
446
  }, events, rest));
449
- var handleExited = useCallback(function () {
447
+ var handleExited = useEventCallback(function () {
450
448
  setFocusItemValue(multi ? value === null || value === void 0 ? void 0 : value[0] : value);
451
449
  resetSearch();
452
450
  onClose === null || onClose === void 0 ? void 0 : onClose();
453
- }, [setFocusItemValue, resetSearch, onClose, value, multi]);
454
- var handleFocus = useCallback(function () {
451
+ });
452
+ var handleFocus = useEventCallback(function () {
455
453
  if (!readOnly) {
456
454
  var _triggerRef$current4;
457
455
  setOpen(true);
458
456
  (_triggerRef$current4 = triggerRef.current) === null || _triggerRef$current4 === void 0 ? void 0 : _triggerRef$current4.open();
459
457
  }
460
- }, [readOnly]);
461
- var handleEnter = useCallback(function () {
458
+ });
459
+ var handleEnter = useEventCallback(function () {
462
460
  focusInput();
463
461
  setOpen(true);
464
- }, [focusInput]);
465
- var handleExit = useCallback(function () {
462
+ });
463
+ var handleExit = useEventCallback(function () {
466
464
  blurInput();
467
465
  setOpen(false);
468
- }, [blurInput]);
466
+ });
469
467
  var renderDropdownMenuItem = function renderDropdownMenuItem(label, item) {
470
468
  // 'Create option "{0}"' => Create option "xxxxx"
471
469
  var newLabel = item.create ? /*#__PURE__*/React.createElement("span", null, tplTransform(locale.createOption, label)) : label;
@@ -547,13 +545,13 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
547
545
  }
548
546
  if (disabledOptions) {
549
547
  return /*#__PURE__*/React.createElement(PickerOverlay, {
550
- ref: mergeRefs(overlayRef, speakerRef)
548
+ ref: mergeRefs(overlay, speakerRef)
551
549
  });
552
550
  }
553
551
  var menu = items.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
554
552
  id: id ? id + "-listbox" : undefined,
555
553
  listProps: listProps,
556
- listRef: listRef,
554
+ listRef: list,
557
555
  disabledItemValues: disabledItemValues,
558
556
  valueKey: valueKey,
559
557
  labelKey: labelKey,
@@ -581,7 +579,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
581
579
  className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["none"])))
582
580
  }, locale === null || locale === void 0 ? void 0 : locale.noResultsText);
583
581
  return /*#__PURE__*/React.createElement(PickerOverlay, {
584
- ref: mergeRefs(overlayRef, speakerRef),
582
+ ref: mergeRefs(overlay, speakerRef),
585
583
  autoWidth: menuAutoWidth,
586
584
  className: classes,
587
585
  style: styles,
@@ -634,7 +632,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
634
632
  }
635
633
  return /*#__PURE__*/React.createElement(Plaintext, _extends({
636
634
  localeKey: "notSelected",
637
- ref: targetRef
635
+ ref: target
638
636
  }, plaintextProps), itemNode || (tagElements !== null && tagElements !== void 0 && tagElements.length ? tagElements : null) || placeholder);
639
637
  }
640
638
  var placeholderNode = placeholder || (disabledOptions ? null : locale === null || locale === void 0 ? void 0 : locale.placeholder);
@@ -652,13 +650,14 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
652
650
  className: classes,
653
651
  style: style,
654
652
  onClick: focusInput,
655
- onKeyDown: onPickerKeyDown
653
+ onKeyDown: onPickerKeyDown,
654
+ ref: root
656
655
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
657
656
  id: id,
658
657
  appearance: appearance,
659
658
  readOnly: readOnly,
660
659
  plaintext: plaintext,
661
- ref: targetRef,
660
+ ref: target,
662
661
  as: toggleAs,
663
662
  tabIndex: tabIndex,
664
663
  onClean: handleClean,