rsuite 5.49.0 → 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 (115) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/Cascader/styles/index.less +4 -4
  3. package/DateRangePicker/styles/index.less +15 -5
  4. package/Dropdown/styles/index.less +5 -4
  5. package/Dropdown/styles/mixin.less +0 -11
  6. package/Picker/styles/index.less +31 -24
  7. package/Picker/styles/mixin.less +17 -13
  8. package/README.md +4 -4
  9. package/TagInput/styles/index.less +1 -1
  10. package/cjs/AutoComplete/AutoComplete.js +25 -26
  11. package/cjs/Calendar/Calendar.d.ts +5 -1
  12. package/cjs/Calendar/CalendarContainer.d.ts +5 -1
  13. package/cjs/Cascader/Cascader.js +46 -48
  14. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  15. package/cjs/CheckPicker/CheckPicker.js +33 -36
  16. package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
  17. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  18. package/cjs/DatePicker/DatePicker.js +2 -4
  19. package/cjs/DatePicker/Toolbar.js +2 -1
  20. package/cjs/DateRangeInput/DateRangeInput.js +2 -2
  21. package/cjs/DateRangePicker/Calendar.js +24 -23
  22. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  23. package/cjs/DateRangePicker/DateRangePicker.js +239 -201
  24. package/cjs/DateRangePicker/types.d.ts +11 -3
  25. package/cjs/DateRangePicker/utils.d.ts +2 -1
  26. package/cjs/DateRangePicker/utils.js +7 -5
  27. package/cjs/FormControl/FormControl.d.ts +11 -1
  28. package/cjs/FormControl/FormControl.js +6 -5
  29. package/cjs/InputPicker/InputPicker.js +62 -63
  30. package/cjs/MultiCascader/MultiCascader.js +40 -42
  31. package/cjs/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  32. package/cjs/{DatePicker → Picker}/PickerIndicator.js +2 -1
  33. package/cjs/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  34. package/cjs/Picker/PickerToggle.d.ts +17 -22
  35. package/cjs/Picker/PickerToggle.js +52 -177
  36. package/cjs/Picker/index.d.ts +3 -0
  37. package/cjs/Picker/index.js +10 -1
  38. package/cjs/Picker/usePickerRef.d.ts +3 -1
  39. package/cjs/Picker/usePickerRef.js +13 -7
  40. package/cjs/Picker/utils.d.ts +5 -9
  41. package/cjs/Picker/utils.js +22 -89
  42. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  43. package/cjs/SelectPicker/SelectPicker.js +39 -42
  44. package/cjs/TreePicker/TreePicker.js +72 -75
  45. package/cjs/utils/constants.d.ts +2 -1
  46. package/cjs/utils/constants.js +1 -0
  47. package/cjs/utils/dateUtils.d.ts +0 -1
  48. package/cjs/utils/dateUtils.js +0 -6
  49. package/cjs/utils/getStringLength.d.ts +2 -0
  50. package/cjs/utils/getStringLength.js +18 -0
  51. package/cjs/utils/index.d.ts +1 -0
  52. package/cjs/utils/index.js +4 -1
  53. package/dist/rsuite-no-reset-rtl.css +92 -69
  54. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  55. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  56. package/dist/rsuite-no-reset.css +92 -69
  57. package/dist/rsuite-no-reset.min.css +1 -1
  58. package/dist/rsuite-no-reset.min.css.map +1 -1
  59. package/dist/rsuite-rtl.css +92 -69
  60. package/dist/rsuite-rtl.min.css +1 -1
  61. package/dist/rsuite-rtl.min.css.map +1 -1
  62. package/dist/rsuite.css +92 -69
  63. package/dist/rsuite.js +67 -46
  64. package/dist/rsuite.js.map +1 -1
  65. package/dist/rsuite.min.css +1 -1
  66. package/dist/rsuite.min.css.map +1 -1
  67. package/dist/rsuite.min.js +1 -1
  68. package/dist/rsuite.min.js.map +1 -1
  69. package/esm/AutoComplete/AutoComplete.js +28 -29
  70. package/esm/Calendar/Calendar.d.ts +5 -1
  71. package/esm/Calendar/CalendarContainer.d.ts +5 -1
  72. package/esm/Cascader/Cascader.js +49 -51
  73. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  74. package/esm/CheckPicker/CheckPicker.js +36 -39
  75. package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
  76. package/esm/DatePicker/DatePicker.d.ts +5 -1
  77. package/esm/DatePicker/DatePicker.js +1 -3
  78. package/esm/DatePicker/Toolbar.js +2 -1
  79. package/esm/DateRangeInput/DateRangeInput.js +2 -2
  80. package/esm/DateRangePicker/Calendar.js +25 -23
  81. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  82. package/esm/DateRangePicker/DateRangePicker.js +241 -203
  83. package/esm/DateRangePicker/types.d.ts +11 -3
  84. package/esm/DateRangePicker/utils.d.ts +2 -1
  85. package/esm/DateRangePicker/utils.js +7 -5
  86. package/esm/FormControl/FormControl.d.ts +11 -1
  87. package/esm/FormControl/FormControl.js +4 -3
  88. package/esm/InputPicker/InputPicker.js +64 -65
  89. package/esm/MultiCascader/MultiCascader.js +43 -45
  90. package/esm/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  91. package/esm/{DatePicker → Picker}/PickerIndicator.js +2 -1
  92. package/esm/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  93. package/esm/Picker/PickerToggle.d.ts +17 -22
  94. package/esm/Picker/PickerToggle.js +54 -179
  95. package/esm/Picker/index.d.ts +3 -0
  96. package/esm/Picker/index.js +3 -0
  97. package/esm/Picker/usePickerRef.d.ts +3 -1
  98. package/esm/Picker/usePickerRef.js +13 -8
  99. package/esm/Picker/utils.d.ts +5 -9
  100. package/esm/Picker/utils.js +24 -90
  101. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  102. package/esm/SelectPicker/SelectPicker.js +42 -45
  103. package/esm/TreePicker/TreePicker.js +75 -78
  104. package/esm/utils/constants.d.ts +2 -1
  105. package/esm/utils/constants.js +1 -0
  106. package/esm/utils/dateUtils.d.ts +0 -1
  107. package/esm/utils/dateUtils.js +0 -5
  108. package/esm/utils/getStringLength.d.ts +2 -0
  109. package/esm/utils/getStringLength.js +13 -0
  110. package/esm/utils/index.d.ts +1 -0
  111. package/esm/utils/index.js +1 -0
  112. package/package.json +1 -1
  113. package/styles/mixins/combobox.less +10 -0
  114. /package/cjs/{DatePicker → Picker}/PickerLabel.js +0 -0
  115. /package/esm/{DatePicker → Picker}/PickerLabel.js +0 -0
@@ -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, { 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
8
  import Input from '../Input';
9
- import { useClassNames, useControlled, PLACEMENT, mergeRefs, useIsMounted, partitionHTMLProps } from '../utils';
9
+ import { useClassNames, useControlled, useIsMounted, useEventCallback, PLACEMENT, mergeRefs, partitionHTMLProps } from '../utils';
10
10
  import { animationPropTypes } from '../Animation/utils';
11
- import { PickerToggleTrigger, onMenuKeyDown, DropdownMenu, DropdownMenuItem, PickerOverlay, useFocusItemValue, usePublicMethods, pickTriggerPropKeys } from '../Picker';
11
+ import { PickerToggleTrigger, onMenuKeyDown, DropdownMenu, DropdownMenuItem, PickerOverlay, useFocusItemValue, usePickerRef, pickTriggerPropKeys } from '../Picker';
12
12
  import { transformData, shouldDisplay } from './utils';
13
13
  import Plaintext from '../Plaintext';
14
14
  /**
@@ -63,7 +63,10 @@ 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`
@@ -71,14 +74,14 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
71
74
  data: datalist,
72
75
  callback: onMenuFocus,
73
76
  target: function target() {
74
- return overlayRef.current;
77
+ return overlay.current;
75
78
  }
76
79
  }),
77
80
  focusItemValue = _useFocusItemValue.focusItemValue,
78
81
  setFocusItemValue = _useFocusItemValue.setFocusItemValue,
79
82
  handleKeyDown = _useFocusItemValue.onKeyDown;
80
83
  var handleKeyDownEvent = function handleKeyDownEvent(event) {
81
- if (!overlayRef.current) {
84
+ if (!overlay.current) {
82
85
  return;
83
86
  }
84
87
  onMenuKeyDown(event, {
@@ -103,29 +106,29 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
103
106
  }
104
107
  handleClose();
105
108
  };
106
- var handleSelect = useCallback(function (item, event) {
109
+ var handleSelect = useEventCallback(function (item, event) {
107
110
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(item.value, item, event);
108
- }, [onSelect]);
109
- var handleChangeValue = useCallback(function (value, event) {
111
+ });
112
+ var handleChangeValue = useEventCallback(function (value, event) {
110
113
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
111
- }, [onChange]);
114
+ });
112
115
  var handleChange = function handleChange(value, event) {
113
116
  setFocusItemValue('');
114
117
  setValue(value);
115
118
  setFocus(true);
116
119
  handleChangeValue(value, event);
117
120
  };
118
- var handleClose = useCallback(function () {
121
+ var handleClose = useEventCallback(function () {
119
122
  if (isMounted()) {
120
123
  setFocus(false);
121
124
  onClose === null || onClose === void 0 ? void 0 : onClose();
122
125
  }
123
- }, [isMounted, onClose]);
124
- var handleOpen = useCallback(function () {
126
+ });
127
+ var handleOpen = useEventCallback(function () {
125
128
  setFocus(true);
126
129
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
127
- }, [onOpen]);
128
- var handleItemSelect = useCallback(function (nextItemValue, item, event) {
130
+ });
131
+ var handleItemSelect = useEventCallback(function (nextItemValue, item, event) {
129
132
  setValue(nextItemValue);
130
133
  setFocusItemValue(nextItemValue);
131
134
  handleSelect(item, event);
@@ -133,29 +136,24 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
133
136
  handleChangeValue(nextItemValue, event);
134
137
  }
135
138
  handleClose();
136
- }, [value, setValue, handleSelect, handleChangeValue, handleClose, setFocusItemValue]);
137
- var handleInputFocus = useCallback(function (event) {
139
+ });
140
+ var handleInputFocus = useEventCallback(function (event) {
138
141
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
139
142
  handleOpen();
140
- }, [onFocus, handleOpen]);
141
- var handleInputBlur = useCallback(function (event) {
143
+ });
144
+ var handleInputBlur = useEventCallback(function (event) {
142
145
  setTimeout(handleClose, 300);
143
146
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
144
- }, [onBlur, handleClose]);
147
+ });
145
148
  var _useClassNames = useClassNames(classPrefix),
146
149
  withClassPrefix = _useClassNames.withClassPrefix,
147
150
  merge = _useClassNames.merge;
148
151
  var classes = merge(className, withClassPrefix({
149
152
  disabled: disabled
150
153
  }));
151
- var triggerRef = useRef(null);
152
154
  var _partitionHTMLProps = partitionHTMLProps(omit(rest, pickTriggerPropKeys)),
153
155
  htmlInputProps = _partitionHTMLProps[0],
154
156
  restProps = _partitionHTMLProps[1];
155
- usePublicMethods(ref, {
156
- triggerRef: triggerRef,
157
- overlayRef: overlayRef
158
- });
159
157
  var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
160
158
  var left = positionProps.left,
161
159
  top = positionProps.top,
@@ -176,11 +174,11 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
176
174
  className: menuClassName
177
175
  });
178
176
  return /*#__PURE__*/React.createElement(PickerOverlay, {
179
- ref: mergeRefs(overlayRef, speakerRef),
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
  };
@@ -191,7 +189,7 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
191
189
  }, typeof value === 'undefined' ? defaultValue : value);
192
190
  }
193
191
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
194
- ref: triggerRef,
192
+ ref: trigger,
195
193
  placement: placement,
196
194
  pickerProps: pick(props, pickTriggerPropKeys),
197
195
  trigger: ['click', 'focus'],
@@ -199,7 +197,8 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
199
197
  speaker: renderDropdownMenu
200
198
  }, /*#__PURE__*/React.createElement(Component, _extends({
201
199
  className: classes,
202
- style: style
200
+ style: style,
201
+ ref: root
203
202
  }, restProps), /*#__PURE__*/React.createElement(Input, _extends({}, htmlInputProps, {
204
203
  id: id,
205
204
  disabled: disabled,
@@ -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,7 +1,7 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import React, { useRef, useState, useCallback, useMemo } from 'react';
4
+ import React, { useState, useCallback, useMemo } from 'react';
5
5
  import { useSet } from 'react-use-set';
6
6
  import PropTypes from 'prop-types';
7
7
  import omit from 'lodash/omit';
@@ -12,8 +12,8 @@ import shallowEqual from '../utils/shallowEqual';
12
12
  import DropdownMenu from './DropdownMenu';
13
13
  import { getParentMap, getPathTowardsItem, findNodeOfTree, flattenTree } from '../utils/treeUtils';
14
14
  import { usePaths } from './utils';
15
- import { getSafeRegExpString, createChainedFunction, mergeRefs, useControlled, useCustom, useClassNames, useIsMounted } from '../utils';
16
- import { PickerToggle, PickerOverlay, SearchBar, PickerToggleTrigger, usePickerClassName, usePublicMethods, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
15
+ import { getSafeRegExpString, createChainedFunction, mergeRefs, useControlled, useCustom, useClassNames, useIsMounted, useEventCallback } from '../utils';
16
+ import { PickerToggle, PickerOverlay, SearchBar, PickerToggleTrigger, usePickerClassName, usePickerRef, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
17
17
  import { useMap } from '../utils/useMap';
18
18
  var emptyArray = [];
19
19
 
@@ -76,10 +76,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
76
76
  var _useState = useState(false),
77
77
  active = _useState[0],
78
78
  setActive = _useState[1];
79
- var triggerRef = useRef(null);
80
- var overlayRef = useRef(null);
81
- var targetRef = useRef(null);
82
- var searchInputRef = useRef(null);
79
+ var _usePickerRef = usePickerRef(ref),
80
+ trigger = _usePickerRef.trigger,
81
+ root = _usePickerRef.root,
82
+ target = _usePickerRef.target,
83
+ overlay = _usePickerRef.overlay,
84
+ searchInput = _usePickerRef.searchInput;
83
85
  var _ref = useControlled(valueProp, defaultValue),
84
86
  value = _ref[0],
85
87
  setValue = _ref[1];
@@ -120,11 +122,6 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
120
122
  columnsToDisplay = _usePaths.columnsToDisplay,
121
123
  pathTowardsActiveItem = _usePaths.pathTowardsActiveItem,
122
124
  pathTowardsSelectedItem = _usePaths.pathTowardsSelectedItem;
123
- usePublicMethods(ref, {
124
- triggerRef: triggerRef,
125
- overlayRef: overlayRef,
126
- targetRef: targetRef
127
- });
128
125
  var _useCustom = useCustom('Picker', overrideLocale),
129
126
  locale = _useCustom.locale,
130
127
  rtl = _useCustom.rtl;
@@ -139,7 +136,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
136
  var _useState3 = useState(''),
140
137
  searchKeyword = _useState3[0],
141
138
  setSearchKeyword = _useState3[1];
142
- var someKeyword = useCallback(function (item, keyword) {
139
+ var someKeyword = function someKeyword(item, keyword) {
143
140
  if (item[labelKey].match(new RegExp(getSafeRegExpString(keyword || searchKeyword), 'i'))) {
144
141
  return true;
145
142
  }
@@ -148,8 +145,8 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
148
145
  return true;
149
146
  }
150
147
  return false;
151
- }, [labelKey, parentMap, searchKeyword]);
152
- var getSearchResult = useCallback(function (keyword) {
148
+ };
149
+ var getSearchResult = function getSearchResult(keyword) {
153
150
  var items = [];
154
151
  var result = flattenedData.filter(function (item) {
155
152
  if (!parentSelectable && item[childrenKey]) {
@@ -166,7 +163,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
166
163
  }
167
164
  }
168
165
  return items;
169
- }, [childrenKey, flattenedData, someKeyword, parentSelectable]);
166
+ };
170
167
 
171
168
  // Used to hover the focuse item when trigger `onKeydown`
172
169
  var _useFocusItemValue = useFocusItemValue(value, {
@@ -175,7 +172,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
175
172
  valueKey: valueKey,
176
173
  defaultLayer: pathTowardsSelectedItem !== null && pathTowardsSelectedItem !== void 0 && pathTowardsSelectedItem.length ? pathTowardsSelectedItem.length - 1 : 0,
177
174
  target: function target() {
178
- return overlayRef.current;
175
+ return overlay.current;
179
176
  },
180
177
  getParent: function getParent(item) {
181
178
  return parentMap.get(item);
@@ -191,7 +188,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
191
188
  setLayer = _useFocusItemValue.setLayer,
192
189
  setKeys = _useFocusItemValue.setKeys,
193
190
  onFocusItem = _useFocusItemValue.onKeyDown;
194
- var handleSearch = useCallback(function (value, event) {
191
+ var handleSearch = useEventCallback(function (value, event) {
195
192
  var items = getSearchResult(value);
196
193
  setSearchKeyword(value);
197
194
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
@@ -204,37 +201,37 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
204
201
  setLayer(0);
205
202
  setKeys([]);
206
203
  }
207
- }, [getSearchResult, onSearch, setFocusItemValue, setKeys, setLayer, valueKey]);
208
- var handleEntered = useCallback(function () {
209
- if (!targetRef.current) {
204
+ });
205
+ var handleEntered = useEventCallback(function () {
206
+ if (!target.current) {
210
207
  return;
211
208
  }
212
209
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
213
210
  setActive(true);
214
- }, [onOpen]);
215
- var handleExited = useCallback(function () {
216
- if (!targetRef.current) {
211
+ });
212
+ var handleExited = useEventCallback(function () {
213
+ if (!target.current) {
217
214
  return;
218
215
  }
219
216
  onClose === null || onClose === void 0 ? void 0 : onClose();
220
217
  setActive(false);
221
218
  setSearchKeyword('');
222
- }, [onClose]);
223
- var handleClose = useCallback(function () {
224
- var _triggerRef$current, _targetRef$current, _targetRef$current$fo;
225
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.close();
219
+ });
220
+ var handleClose = useEventCallback(function () {
221
+ var _trigger$current, _target$current, _target$current$focus;
222
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : _trigger$current.close();
226
223
 
227
224
  // The focus is on the trigger button after closing
228
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : (_targetRef$current$fo = _targetRef$current.focus) === null || _targetRef$current$fo === void 0 ? void 0 : _targetRef$current$fo.call(_targetRef$current);
229
- }, []);
230
- var handleClean = useCallback(function (event) {
231
- if (disabled || !targetRef.current) {
225
+ (_target$current = target.current) === null || _target$current === void 0 ? void 0 : (_target$current$focus = _target$current.focus) === null || _target$current$focus === void 0 ? void 0 : _target$current$focus.call(_target$current);
226
+ });
227
+ var handleClean = useEventCallback(function (event) {
228
+ if (disabled || !target.current) {
232
229
  return;
233
230
  }
234
231
  setValue(null);
235
232
  onChange === null || onChange === void 0 ? void 0 : onChange(null, event);
236
- }, [disabled, onChange, setValue]);
237
- var handleMenuPressEnter = useCallback(function (event) {
233
+ });
234
+ var handleMenuPressEnter = useEventCallback(function (event) {
238
235
  var focusItem = findNodeOfTree(data, function (item) {
239
236
  return item[valueKey] === focusItemValue;
240
237
  });
@@ -250,20 +247,20 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
250
247
  }
251
248
  handleClose();
252
249
  }
253
- }, [childrenKey, data, focusItemValue, handleClose, onChange, pathTowardsActiveItem, setLayer, setValue, value, valueKey, onSelect]);
250
+ });
254
251
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
255
252
  toggle: !focusItemValue || !active,
256
- triggerRef: triggerRef,
257
- targetRef: targetRef,
258
- overlayRef: overlayRef,
259
- searchInputRef: searchInputRef,
253
+ trigger: trigger,
254
+ target: target,
255
+ overlay: overlay,
256
+ searchInput: searchInput,
260
257
  active: active,
261
258
  onExit: handleClean,
262
259
  onMenuKeyDown: onFocusItem,
263
260
  onMenuPressEnter: handleMenuPressEnter
264
261
  }, rest));
265
- var handleSelect = function handleSelect(node, cascadePaths, isLeafNode, event) {
266
- var _node$childrenKey, _triggerRef$current2;
262
+ var handleSelect = useEventCallback(function (node, cascadePaths, isLeafNode, event) {
263
+ var _node$childrenKey, _trigger$current2;
267
264
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
268
265
  setActiveItem(node);
269
266
  var nextValue = node[valueKey];
@@ -301,20 +298,20 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
301
298
  }
302
299
 
303
300
  // Update menu position
304
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : _triggerRef$current2.updatePosition();
305
- };
301
+ (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : _trigger$current2.updatePosition();
302
+ });
306
303
 
307
304
  /**
308
305
  * The search structure option is processed after being selected.
309
306
  */
310
- var handleSearchRowSelect = function handleSearchRowSelect(node, nodes, event) {
307
+ var handleSearchRowSelect = useEventCallback(function (node, nodes, event) {
311
308
  var nextValue = node[valueKey];
312
309
  handleClose();
313
310
  setSearchKeyword('');
314
311
  setValue(nextValue);
315
312
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, nodes, event);
316
313
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
317
- };
314
+ });
318
315
  var renderSearchRow = function renderSearchRow(item, key) {
319
316
  var regx = new RegExp(getSafeRegExpString(searchKeyword), 'ig');
320
317
  var nodes = getPathTowardsItem(item, function (item) {
@@ -391,16 +388,16 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
391
388
  inline: inline
392
389
  }));
393
390
  return /*#__PURE__*/React.createElement(PickerOverlay, {
394
- ref: mergeRefs(overlayRef, speakerRef),
391
+ ref: mergeRefs(overlay, speakerRef),
395
392
  className: classes,
396
393
  style: styles,
397
- target: triggerRef,
394
+ target: trigger,
398
395
  onKeyDown: onPickerKeyDown
399
396
  }, searchable && /*#__PURE__*/React.createElement(SearchBar, {
400
397
  placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
401
398
  onChange: handleSearch,
402
399
  value: searchKeyword,
403
- inputRef: searchInputRef
400
+ inputRef: searchInput
404
401
  }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/React.createElement(DropdownMenu, {
405
402
  id: id ? id + "-listbox" : undefined,
406
403
  menuWidth: menuWidth,
@@ -459,17 +456,18 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
459
456
  }
460
457
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
461
458
  pickerProps: pick(props, pickTriggerPropKeys),
462
- ref: triggerRef,
459
+ ref: trigger,
463
460
  placement: placement,
464
461
  onEntered: createChainedFunction(handleEntered, onEnter),
465
462
  onExited: createChainedFunction(handleExited, onExited),
466
463
  speaker: renderDropdownMenu
467
464
  }, /*#__PURE__*/React.createElement(Component, {
468
465
  className: classes,
469
- style: style
466
+ style: style,
467
+ ref: root
470
468
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
471
469
  id: id,
472
- ref: targetRef,
470
+ ref: target,
473
471
  as: toggleAs,
474
472
  appearance: appearance,
475
473
  disabled: disabled,
@@ -1,4 +1,4 @@
1
- import React, { Ref } from 'react';
1
+ import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
3
  import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
@@ -12,7 +12,7 @@ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerL
12
12
  }
13
13
  export interface CheckPickerComponent {
14
14
  <T>(props: CheckPickerProps<T> & {
15
- ref?: Ref<PickerHandle>;
15
+ ref?: React.Ref<PickerHandle>;
16
16
  }): JSX.Element | null;
17
17
  displayName?: string;
18
18
  propTypes?: React.WeakValidationMap<CheckPickerProps<any>>;
@@ -3,7 +3,7 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
5
  var _templateObject;
6
- import React, { useRef, useState, useCallback } from 'react';
6
+ import React, { useState } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import clone from 'lodash/clone';
9
9
  import isUndefined from 'lodash/isUndefined';
@@ -13,9 +13,9 @@ import omit from 'lodash/omit';
13
13
  import pick from 'lodash/pick';
14
14
  import isNil from 'lodash/isNil';
15
15
  import { filterNodesOfTree } from '../utils/treeUtils';
16
- import { createChainedFunction, useClassNames, shallowEqual, useCustom, useControlled, mergeRefs } from '../utils';
16
+ import { createChainedFunction, useClassNames, shallowEqual, useCustom, useControlled, useEventCallback, mergeRefs } from '../utils';
17
17
  import { getDataGroupBy } from '../utils/getDataGroupBy';
18
- import { DropdownMenu, DropdownMenuCheckItem as DropdownMenuItem, PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, useFocusItemValue, usePickerClassName, useSearch, usePublicMethods, useToggleKeyDownEvent, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
18
+ import { DropdownMenu, DropdownMenuCheckItem as DropdownMenuItem, PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, useFocusItemValue, usePickerClassName, useSearch, useToggleKeyDownEvent, usePickerRef, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
19
19
  var emptyArray = [];
20
20
  /**
21
21
  * A component for selecting checkable items in a dropdown list.
@@ -80,11 +80,13 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
80
80
  onClose = props.onClose,
81
81
  onOpen = props.onOpen,
82
82
  rest = _objectWithoutPropertiesLoose(props, ["as", "appearance", "classPrefix", "countable", "data", "disabledItemValues", "valueKey", "labelKey", "searchable", "virtualized", "cleanable", "placement", "menuAutoWidth", "menuMaxHeight", "menuClassName", "menuStyle", "locale", "placeholder", "disabled", "toggleAs", "style", "sticky", "value", "defaultValue", "groupBy", "listProps", "id", "sort", "searchBy", "renderMenuItem", "renderMenuGroup", "renderValue", "renderExtraFooter", "renderMenu", "onGroupTitleClick", "onSearch", "onEnter", "onEntered", "onExited", "onClean", "onChange", "onSelect", "onClose", "onOpen"]);
83
- var triggerRef = useRef(null);
84
- var targetRef = useRef(null);
85
- var overlayRef = useRef(null);
86
- var searchInputRef = useRef(null);
87
- var listRef = useRef(null);
83
+ var _usePickerRef = usePickerRef(ref),
84
+ trigger = _usePickerRef.trigger,
85
+ root = _usePickerRef.root,
86
+ target = _usePickerRef.target,
87
+ overlay = _usePickerRef.overlay,
88
+ list = _usePickerRef.list,
89
+ searchInput = _usePickerRef.searchInput;
88
90
  var _useCustom = useCustom('Picker', overrideLocale),
89
91
  locale = _useCustom.locale;
90
92
  var _useControlled = useControlled(valueProp, defaultValue || []),
@@ -94,18 +96,18 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
94
96
  data: data,
95
97
  valueKey: valueKey,
96
98
  target: function target() {
97
- return overlayRef.current;
99
+ return overlay.current;
98
100
  }
99
101
  }),
100
102
  focusItemValue = _useFocusItemValue.focusItemValue,
101
103
  setFocusItemValue = _useFocusItemValue.setFocusItemValue,
102
104
  onFocusItem = _useFocusItemValue.onKeyDown;
103
- var handleSearchCallback = useCallback(function (searchKeyword, filteredData, event) {
105
+ var handleSearchCallback = useEventCallback(function (searchKeyword, filteredData, event) {
104
106
  var _filteredData$;
105
107
  // The first option after filtering is the focus.
106
108
  setFocusItemValue(filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]);
107
109
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
108
- }, [setFocusItemValue, onSearch, valueKey]);
110
+ });
109
111
 
110
112
  // Use search keywords to filter options.
111
113
  var _useSearch = useSearch(data, {
@@ -139,17 +141,17 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
141
  }
140
142
  setStickyItems(nextStickyItems);
141
143
  };
142
- var handleChangeValue = useCallback(function (value, event) {
144
+ var handleChangeValue = useEventCallback(function (value, event) {
143
145
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
144
- }, [onChange]);
145
- var handleClean = useCallback(function (event) {
146
+ });
147
+ var handleClean = useEventCallback(function (event) {
146
148
  if (disabled || !cleanable) {
147
149
  return;
148
150
  }
149
151
  setValue([]);
150
152
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
151
153
  handleChangeValue([], event);
152
- }, [disabled, cleanable, setValue, onClean, handleChangeValue]);
154
+ });
153
155
  var handleMenuPressEnter = function handleMenuPressEnter(event) {
154
156
  var nextValue = clone(value);
155
157
  if (!focusItemValue) {
@@ -173,10 +175,10 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
173
175
  };
174
176
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
175
177
  toggle: !focusItemValue || !active,
176
- triggerRef: triggerRef,
177
- targetRef: targetRef,
178
- overlayRef: overlayRef,
179
- searchInputRef: searchInputRef,
178
+ trigger: trigger,
179
+ target: target,
180
+ overlay: overlay,
181
+ searchInput: searchInput,
180
182
  active: active,
181
183
  onExit: handleClean,
182
184
  onMenuKeyDown: onFocusItem,
@@ -186,10 +188,10 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
186
188
  setFocusItemValue(null);
187
189
  }
188
190
  }, rest));
189
- var handleSelect = useCallback(function (nextItemValue, item, event) {
191
+ var handleSelect = useEventCallback(function (nextItemValue, item, event) {
190
192
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(nextItemValue, item, event);
191
- }, [onSelect]);
192
- var handleItemSelect = useCallback(function (nextItemValue, item, event, checked) {
193
+ });
194
+ var handleItemSelect = useEventCallback(function (nextItemValue, item, event, checked) {
193
195
  var nextValue = clone(value);
194
196
  if (checked) {
195
197
  nextValue.push(nextItemValue);
@@ -202,22 +204,16 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
202
204
  setFocusItemValue(nextItemValue);
203
205
  handleSelect(nextValue, item, event);
204
206
  handleChangeValue(nextValue, event);
205
- }, [value, setValue, handleSelect, handleChangeValue, setFocusItemValue]);
206
- var handleEntered = useCallback(function () {
207
+ });
208
+ var handleEntered = useEventCallback(function () {
207
209
  setActive(true);
208
210
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
209
- }, [onOpen]);
210
- var handleExited = useCallback(function () {
211
+ });
212
+ var handleExited = useEventCallback(function () {
211
213
  resetSearch();
212
214
  setFocusItemValue(null);
213
215
  setActive(false);
214
216
  onClose === null || onClose === void 0 ? void 0 : onClose();
215
- }, [onClose, setFocusItemValue, resetSearch]);
216
- usePublicMethods(ref, {
217
- triggerRef: triggerRef,
218
- overlayRef: overlayRef,
219
- targetRef: targetRef,
220
- listRef: listRef
221
217
  });
222
218
  var selectedItems = data.filter(function (item) {
223
219
  return value === null || value === void 0 ? void 0 : value.some(function (val) {
@@ -281,7 +277,7 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
281
277
  var menu = items.length || filteredStickyItems.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
282
278
  id: id ? id + "-listbox" : undefined,
283
279
  listProps: listProps,
284
- listRef: listRef,
280
+ listRef: list,
285
281
  disabledItemValues: disabledItemValues,
286
282
  valueKey: valueKey,
287
283
  labelKey: labelKey,
@@ -304,17 +300,17 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
304
300
  className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["none"])))
305
301
  }, locale === null || locale === void 0 ? void 0 : locale.noResultsText);
306
302
  return /*#__PURE__*/React.createElement(PickerOverlay, {
307
- ref: mergeRefs(overlayRef, speakerRef),
303
+ ref: mergeRefs(overlay, speakerRef),
308
304
  autoWidth: menuAutoWidth,
309
305
  className: classes,
310
306
  style: styles,
311
307
  onKeyDown: onPickerKeyDown,
312
- target: triggerRef
308
+ target: trigger
313
309
  }, searchable && /*#__PURE__*/React.createElement(SearchBar, {
314
310
  placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
315
311
  onChange: handleSearch,
316
312
  value: searchKeyword,
317
- inputRef: searchInputRef
313
+ inputRef: searchInput
318
314
  }), renderMenu ? renderMenu(menu) : menu, renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
319
315
  };
320
316
  var _usePickerClassName = usePickerClassName(_extends({}, props, {
@@ -329,7 +325,7 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
329
325
  usedClassNamePropKeys = _usePickerClassName[1];
330
326
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
331
327
  pickerProps: pick(props, pickTriggerPropKeys),
332
- ref: triggerRef,
328
+ ref: trigger,
333
329
  placement: placement,
334
330
  onEnter: createChainedFunction(initStickyItems, onEnter),
335
331
  onEntered: createChainedFunction(handleEntered, onEntered),
@@ -337,10 +333,11 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
337
333
  speaker: renderDropdownMenu
338
334
  }, /*#__PURE__*/React.createElement(Component, {
339
335
  className: classes,
340
- style: style
336
+ style: style,
337
+ ref: root
341
338
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
342
339
  id: id,
343
- ref: targetRef,
340
+ ref: target,
344
341
  appearance: appearance,
345
342
  disabled: disabled,
346
343
  onClean: handleClean,