rsuite 5.59.2 → 5.60.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 (73) hide show
  1. package/Animation/styles/fade.less +1 -1
  2. package/Animation/styles/index.css +1 -1
  3. package/CHANGELOG.md +16 -0
  4. package/TagInput/styles/index.css +24 -24
  5. package/TagPicker/styles/index.css +24 -24
  6. package/TagPicker/styles/index.less +11 -10
  7. package/cjs/Form/Form.d.ts +13 -9
  8. package/cjs/Form/Form.js +55 -11
  9. package/cjs/Form/FormContext.d.ts +2 -2
  10. package/cjs/Form/hooks/useFormRef.d.ts +9 -7
  11. package/cjs/Form/hooks/useFormRef.js +5 -32
  12. package/cjs/Form/hooks/useFormValidate.d.ts +6 -4
  13. package/cjs/Form/hooks/useFormValidate.js +18 -12
  14. package/cjs/Form/hooks/useFormValue.d.ts +8 -1
  15. package/cjs/Form/hooks/useFormValue.js +7 -1
  16. package/cjs/InputPicker/InputAutosize.js +2 -2
  17. package/cjs/InputPicker/InputPicker.d.ts +5 -7
  18. package/cjs/InputPicker/InputPicker.js +119 -151
  19. package/cjs/InputPicker/InputPickerContext.d.ts +11 -3
  20. package/cjs/InputPicker/InputPickerContext.js +7 -1
  21. package/cjs/InputPicker/hooks/useData.d.ts +17 -0
  22. package/cjs/InputPicker/hooks/useData.js +44 -0
  23. package/cjs/InputPicker/hooks/useInput.d.ts +21 -0
  24. package/cjs/InputPicker/hooks/useInput.js +46 -0
  25. package/cjs/InputPicker/hooks/useMaxWidth.d.ts +4 -0
  26. package/cjs/InputPicker/hooks/useMaxWidth.js +25 -0
  27. package/cjs/InputPicker/index.d.ts +2 -1
  28. package/cjs/InputPicker/utils.d.ts +1 -0
  29. package/cjs/InputPicker/utils.js +17 -0
  30. package/cjs/TagInput/index.js +2 -2
  31. package/cjs/TagPicker/index.js +2 -2
  32. package/dist/rsuite-no-reset-rtl.css +25 -25
  33. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  34. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  35. package/dist/rsuite-no-reset.css +25 -25
  36. package/dist/rsuite-no-reset.min.css +1 -1
  37. package/dist/rsuite-no-reset.min.css.map +1 -1
  38. package/dist/rsuite-rtl.css +25 -25
  39. package/dist/rsuite-rtl.min.css +1 -1
  40. package/dist/rsuite-rtl.min.css.map +1 -1
  41. package/dist/rsuite.css +25 -25
  42. package/dist/rsuite.js +53 -9
  43. package/dist/rsuite.js.map +1 -1
  44. package/dist/rsuite.min.css +1 -1
  45. package/dist/rsuite.min.css.map +1 -1
  46. package/dist/rsuite.min.js +1 -1
  47. package/dist/rsuite.min.js.map +1 -1
  48. package/esm/Form/Form.d.ts +13 -9
  49. package/esm/Form/Form.js +55 -11
  50. package/esm/Form/FormContext.d.ts +2 -2
  51. package/esm/Form/hooks/useFormRef.d.ts +9 -7
  52. package/esm/Form/hooks/useFormRef.js +5 -32
  53. package/esm/Form/hooks/useFormValidate.d.ts +6 -4
  54. package/esm/Form/hooks/useFormValidate.js +18 -12
  55. package/esm/Form/hooks/useFormValue.d.ts +8 -1
  56. package/esm/Form/hooks/useFormValue.js +7 -1
  57. package/esm/InputPicker/InputAutosize.js +2 -2
  58. package/esm/InputPicker/InputPicker.d.ts +5 -7
  59. package/esm/InputPicker/InputPicker.js +111 -143
  60. package/esm/InputPicker/InputPickerContext.d.ts +11 -3
  61. package/esm/InputPicker/InputPickerContext.js +4 -0
  62. package/esm/InputPicker/hooks/useData.d.ts +17 -0
  63. package/esm/InputPicker/hooks/useData.js +38 -0
  64. package/esm/InputPicker/hooks/useInput.d.ts +21 -0
  65. package/esm/InputPicker/hooks/useInput.js +40 -0
  66. package/esm/InputPicker/hooks/useMaxWidth.d.ts +4 -0
  67. package/esm/InputPicker/hooks/useMaxWidth.js +19 -0
  68. package/esm/InputPicker/index.d.ts +2 -1
  69. package/esm/InputPicker/utils.d.ts +1 -0
  70. package/esm/InputPicker/utils.js +12 -0
  71. package/esm/TagInput/index.js +2 -2
  72. package/esm/TagPicker/index.js +2 -2
  73. package/package.json +1 -1
@@ -6,7 +6,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
6
6
  exports.__esModule = true;
7
7
  exports.default = void 0;
8
8
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -18,7 +18,6 @@ var _clone = _interopRequireDefault(require("lodash/clone"));
18
18
  var _isArray = _interopRequireDefault(require("lodash/isArray"));
19
19
  var _omit = _interopRequireDefault(require("lodash/omit"));
20
20
  var _pick = _interopRequireDefault(require("lodash/pick"));
21
- var _getWidth = _interopRequireDefault(require("dom-lib/getWidth"));
22
21
  var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
23
22
  var _treeUtils = require("../utils/treeUtils");
24
23
  var _Plaintext = _interopRequireDefault(require("../internals/Plaintext"));
@@ -27,22 +26,13 @@ var _propTypes2 = require("../internals/propTypes");
27
26
  var _getDataGroupBy = require("../utils/getDataGroupBy");
28
27
  var _Picker = require("../internals/Picker");
29
28
  var _Tag = _interopRequireDefault(require("../Tag"));
30
- var _InputAutosize = _interopRequireDefault(require("./InputAutosize"));
31
29
  var _TextBox = _interopRequireDefault(require("./TextBox"));
32
- var _InputPickerContext = _interopRequireDefault(require("./InputPickerContext"));
30
+ var _InputPickerContext = require("./InputPickerContext");
33
31
  var _Stack = _interopRequireDefault(require("../Stack"));
32
+ var _useInput2 = _interopRequireDefault(require("./hooks/useInput"));
33
+ var _useData2 = _interopRequireDefault(require("./hooks/useData"));
34
+ var _utils2 = require("./utils");
34
35
  var _templateObject, _templateObject2, _templateObject3, _templateObject4;
35
- var convertSize = function convertSize(size) {
36
- switch (size) {
37
- case 'lg':
38
- return 'lg';
39
- case 'sm':
40
- case 'xs':
41
- return 'sm';
42
- default:
43
- return 'md';
44
- }
45
- };
46
36
  /**
47
37
  * Single item selector with text box input.
48
38
  *
@@ -73,10 +63,13 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
73
63
  overrideLocale = props.locale,
74
64
  toggleAs = props.toggleAs,
75
65
  style = props.style,
66
+ size = props.size,
76
67
  _props$searchable = props.searchable,
77
68
  searchable = _props$searchable === void 0 ? true : _props$searchable,
78
69
  controlledOpen = props.open,
79
70
  placeholder = props.placeholder,
71
+ _props$placement = props.placement,
72
+ placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
80
73
  groupBy = props.groupBy,
81
74
  menuClassName = props.menuClassName,
82
75
  menuStyle = props.menuStyle,
@@ -113,21 +106,17 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
113
106
  onBlur = props.onBlur,
114
107
  onFocus = props.onFocus,
115
108
  searchBy = props.searchBy,
116
- size = props.size,
117
- _props$placement = props.placement,
118
- placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
119
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "appearance", "cleanable", "cacheData", "classPrefix", "data", "disabled", "readOnly", "plaintext", "defaultValue", "defaultOpen", "disabledItemValues", "locale", "toggleAs", "style", "searchable", "open", "placeholder", "groupBy", "menuClassName", "menuStyle", "menuAutoWidth", "menuMaxHeight", "creatable", "shouldDisplayCreateOption", "value", "valueKey", "virtualized", "labelKey", "listProps", "id", "tabIndex", "sort", "renderMenu", "renderExtraFooter", "renderValue", "renderMenuItem", "renderMenuGroup", "onEnter", "onEntered", "onExit", "onExited", "onChange", "onClean", "onCreate", "onSearch", "onSelect", "onBlur", "onFocus", "searchBy", "size", "placement"]);
120
- var _useContext = (0, _react.useContext)(_InputPickerContext.default),
121
- multi = _useContext.multi,
122
- tagProps = _useContext.tagProps,
123
- trigger = _useContext.trigger,
124
- disabledOptions = _useContext.disabledOptions,
125
- onTagRemove = _useContext.onTagRemove,
126
- renderCheckbox = _useContext.renderCheckbox;
109
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "appearance", "cleanable", "cacheData", "classPrefix", "data", "disabled", "readOnly", "plaintext", "defaultValue", "defaultOpen", "disabledItemValues", "locale", "toggleAs", "style", "size", "searchable", "open", "placeholder", "placement", "groupBy", "menuClassName", "menuStyle", "menuAutoWidth", "menuMaxHeight", "creatable", "shouldDisplayCreateOption", "value", "valueKey", "virtualized", "labelKey", "listProps", "id", "tabIndex", "sort", "renderMenu", "renderExtraFooter", "renderValue", "renderMenuItem", "renderMenuGroup", "onEnter", "onEntered", "onExit", "onExited", "onChange", "onClean", "onCreate", "onSearch", "onSelect", "onBlur", "onFocus", "searchBy"]);
110
+ var _useTagContext = (0, _InputPickerContext.useTagContext)(),
111
+ multi = _useTagContext.multi,
112
+ tagProps = _useTagContext.tagProps,
113
+ trigger = _useTagContext.trigger,
114
+ disabledOptions = _useTagContext.disabledOptions,
115
+ onTagRemove = _useTagContext.onTagRemove,
116
+ renderCheckbox = _useTagContext.renderCheckbox;
127
117
  if (groupBy === valueKey || groupBy === labelKey) {
128
118
  throw Error('`groupBy` can not be equal to `valueKey` and `labelKey`');
129
119
  }
130
- var inputRef = (0, _react.useRef)();
131
120
  var _usePickerRef = (0, _Picker.usePickerRef)(ref),
132
121
  triggerRef = _usePickerRef.trigger,
133
122
  root = _usePickerRef.root,
@@ -139,29 +128,34 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
139
128
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
140
129
  prefix = _useClassNames.prefix,
141
130
  merge = _useClassNames.merge;
142
- var _useState = (0, _react.useState)(controlledData),
143
- uncontrolledData = _useState[0],
144
- setData = _useState[1];
145
- var _useState2 = (0, _react.useState)(100),
146
- maxWidth = _useState2[0],
147
- setMaxWidth = _useState2[1];
148
- var _useState3 = (0, _react.useState)([]),
149
- newData = _useState3[0],
150
- setNewData = _useState3[1];
151
- var _useState4 = (0, _react.useState)(defaultOpen),
152
- uncontrolledOpen = _useState4[0],
153
- setOpen = _useState4[1];
154
- var open = (0, _isUndefined.default)(controlledOpen) ? uncontrolledOpen : controlledOpen;
155
- var getAllData = (0, _react.useCallback)(function () {
156
- return [].concat(uncontrolledData, newData);
157
- }, [uncontrolledData, newData]);
158
- var getAllDataAndCache = (0, _react.useCallback)(function () {
159
- return [].concat(getAllData(), cacheData);
160
- }, [getAllData, cacheData]);
161
- var _useControlled = (0, _utils.useControlled)(valueProp, multi ? defaultValue || [] : defaultValue),
162
- value = _useControlled[0],
163
- setValue = _useControlled[1],
164
- isControlled = _useControlled[2];
131
+ var _useControlled = (0, _utils.useControlled)(controlledOpen, defaultOpen),
132
+ open = _useControlled[0],
133
+ setOpen = _useControlled[1];
134
+ var _useInput = (0, _useInput2.default)({
135
+ multi: multi,
136
+ triggerRef: triggerRef
137
+ }),
138
+ inputRef = _useInput.inputRef,
139
+ inputProps = _useInput.inputProps,
140
+ focus = _useInput.focus,
141
+ blur = _useInput.blur;
142
+ var handleDataChange = function handleDataChange(data) {
143
+ var _data$;
144
+ setFocusItemValue(data === null || data === void 0 ? void 0 : (_data$ = data[0]) === null || _data$ === void 0 ? void 0 : _data$[valueKey]);
145
+ };
146
+ var _useData = (0, _useData2.default)({
147
+ controlledData: controlledData,
148
+ cacheData: cacheData,
149
+ onChange: handleDataChange
150
+ }),
151
+ data = _useData.data,
152
+ dataWithCache = _useData.dataWithCache,
153
+ newData = _useData.newData,
154
+ setNewData = _useData.setNewData;
155
+ var _useControlled2 = (0, _utils.useControlled)(valueProp, multi ? defaultValue || [] : defaultValue),
156
+ value = _useControlled2[0],
157
+ setValue = _useControlled2[1],
158
+ isControlled = _useControlled2[2];
165
159
  var cloneValue = function cloneValue() {
166
160
  return multi ? (0, _clone.default)(value) || [] : value;
167
161
  };
@@ -172,62 +166,53 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
172
166
  // The focus is on the trigger button after closing
173
167
  (_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);
174
168
  });
169
+ var focusItemValueOptions = {
170
+ data: dataWithCache,
171
+ valueKey: valueKey,
172
+ target: function target() {
173
+ return overlay.current;
174
+ }
175
+ };
175
176
 
176
177
  // Used to hover the focuse item when trigger `onKeydown`
177
- var _useFocusItemValue = (0, _Picker.useFocusItemValue)(multi ? value === null || value === void 0 ? void 0 : value[0] : value, {
178
- data: getAllDataAndCache(),
179
- valueKey: valueKey,
180
- target: function target() {
181
- return overlay.current;
182
- }
183
- }),
178
+ var _useFocusItemValue = (0, _Picker.useFocusItemValue)(multi ? value === null || value === void 0 ? void 0 : value[0] : value, focusItemValueOptions),
184
179
  focusItemValue = _useFocusItemValue.focusItemValue,
185
180
  setFocusItemValue = _useFocusItemValue.setFocusItemValue,
186
181
  onKeyDown = _useFocusItemValue.onKeyDown;
187
- var handleSearchCallback = (0, _utils.useEventCallback)(function (searchKeyword, filteredData, event) {
188
- var _filteredData$;
189
- // The first option after filtering is the focus.
190
- setFocusItemValue(disabledOptions ? searchKeyword : (filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]) || searchKeyword);
182
+ var onSearchCallback = (0, _utils.useEventCallback)(function (searchKeyword, filteredData, event) {
183
+ if (!disabledOptions) {
184
+ var _filteredData$;
185
+ // The first option after filtering is the focus.
186
+ var firstItemValue = filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey];
187
+
188
+ // If there is no value in the option and new options are supported, the search keyword is the first option
189
+ if (!firstItemValue && creatable) {
190
+ firstItemValue = searchKeyword;
191
+ }
192
+ setFocusItemValue(firstItemValue);
193
+ }
191
194
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
192
195
  });
196
+ var searchOptions = {
197
+ labelKey: labelKey,
198
+ searchBy: searchBy,
199
+ callback: onSearchCallback
200
+ };
193
201
 
194
202
  // Use search keywords to filter options.
195
- var _useSearch = (0, _Picker.useSearch)(getAllData(), {
196
- labelKey: labelKey,
197
- searchBy: searchBy,
198
- callback: handleSearchCallback
199
- }),
203
+ var _useSearch = (0, _Picker.useSearch)(data, searchOptions),
200
204
  searchKeyword = _useSearch.searchKeyword,
201
205
  resetSearch = _useSearch.resetSearch,
202
206
  checkShouldDisplay = _useSearch.checkShouldDisplay,
203
- handleSearch = _useSearch.handleSearch; // Update the state when the data in props changes
207
+ handleSearch = _useSearch.handleSearch; // Update the position of the menu when the search keyword and value change
204
208
  (0, _react.useEffect)(function () {
205
- if (controlledData && !(0, _shallowEqual.default)(controlledData, uncontrolledData)) {
206
- var _controlledData$;
207
- setData(controlledData);
208
- setNewData([]);
209
- setFocusItemValue(controlledData === null || controlledData === void 0 ? void 0 : (_controlledData$ = controlledData[0]) === null || _controlledData$ === void 0 ? void 0 : _controlledData$[valueKey]);
210
- }
211
- }, [setFocusItemValue, controlledData, uncontrolledData, valueKey]);
212
- (0, _react.useEffect)(function () {
213
- var _triggerRef$current2;
214
- // In multiple selection, you need to set a maximum width for the input.
215
- if ((_triggerRef$current2 = triggerRef.current) !== null && _triggerRef$current2 !== void 0 && _triggerRef$current2.root) {
216
- setMaxWidth((0, _getWidth.default)(triggerRef.current.root));
217
- }
218
- // eslint-disable-next-line react-hooks/exhaustive-deps
219
- }, []);
220
-
221
- // Update the position of the menu when the search keyword and value change
222
- (0, _react.useEffect)(function () {
223
- var _triggerRef$current3, _triggerRef$current3$;
224
- (_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);
209
+ var _triggerRef$current2, _triggerRef$current2$;
210
+ (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.updatePosition) === null || _triggerRef$current2$ === void 0 ? void 0 : _triggerRef$current2$.call(_triggerRef$current2);
225
211
  // eslint-disable-next-line react-hooks/exhaustive-deps
226
212
  }, [searchKeyword, value]);
227
213
  var getDataItem = function getDataItem(value) {
228
214
  // Find active `MenuItem` by `value`
229
- var allData = getAllDataAndCache();
230
- var activeItem = allData.find(function (item) {
215
+ var activeItem = dataWithCache.find(function (item) {
231
216
  return (0, _shallowEqual.default)(item[valueKey], value);
232
217
  });
233
218
  var itemNode = placeholder;
@@ -240,33 +225,20 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
240
225
  itemNode: itemNode
241
226
  };
242
227
  };
243
- var getInput = function getInput() {
244
- var _inputRef$current;
245
- return multi ? (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.input : inputRef.current;
246
- };
247
- var focusInput = function focusInput() {
248
- var _getInput;
249
- return (_getInput = getInput()) === null || _getInput === void 0 ? void 0 : _getInput.focus();
250
- };
251
- var blurInput = function blurInput() {
252
- var _getInput2;
253
- return (_getInput2 = getInput()) === null || _getInput2 === void 0 ? void 0 : _getInput2.blur();
254
- };
255
228
 
256
229
  /**
257
230
  * Convert the string of the newly created option into an object.
258
231
  */
259
232
  var createOption = function createOption(value) {
260
- var _ref2;
233
+ var _option;
234
+ var option = (_option = {
235
+ create: true
236
+ }, _option[valueKey] = value, _option[labelKey] = value, _option);
261
237
  if (groupBy) {
262
- var _ref;
263
- return _ref = {
264
- create: true
265
- }, _ref[groupBy] = locale === null || locale === void 0 ? void 0 : locale.newItem, _ref[valueKey] = value, _ref[labelKey] = value, _ref;
238
+ var _extends2;
239
+ return (0, _extends3.default)((_extends2 = {}, _extends2[groupBy] = locale === null || locale === void 0 ? void 0 : locale.newItem, _extends2), option);
266
240
  }
267
- return _ref2 = {
268
- create: true
269
- }, _ref2[valueKey] = value, _ref2[labelKey] = value, _ref2;
241
+ return option;
270
242
  };
271
243
  var handleChange = (0, _utils.useEventCallback)(function (value, event) {
272
244
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
@@ -326,7 +298,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
326
298
  setFocusItemValue(nextItemValue);
327
299
  handleSelect(val, item, event);
328
300
  handleChange(val, event);
329
- focusInput();
301
+ focus();
330
302
  });
331
303
  var handleTagKeyPress = (0, _utils.useEventCallback)(function (event) {
332
304
  // When composing, ignore the keypress event.
@@ -334,31 +306,36 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
334
306
  return;
335
307
  }
336
308
  var val = cloneValue();
337
- var data = getAllData();
338
- if (!focusItemValue || !data) {
309
+ var newItemValue = focusItemValue || '';
310
+
311
+ // In TagInput
312
+ if (multi && disabledOptions) {
313
+ newItemValue = searchKeyword;
314
+ }
315
+ if (!newItemValue || !data) {
339
316
  return;
340
317
  }
341
318
 
342
319
  // If the value is disabled in this option, it is returned.
343
320
  if (disabledItemValues !== null && disabledItemValues !== void 0 && disabledItemValues.some(function (item) {
344
- return item === focusItemValue;
321
+ return item === newItemValue;
345
322
  })) {
346
323
  return;
347
324
  }
348
325
  if (!val.some(function (v) {
349
- return (0, _shallowEqual.default)(v, focusItemValue);
326
+ return (0, _shallowEqual.default)(v, newItemValue);
350
327
  })) {
351
- val.push(focusItemValue);
328
+ val.push(newItemValue);
352
329
  } else if (!disabledOptions) {
353
330
  (0, _remove.default)(val, function (itemVal) {
354
- return (0, _shallowEqual.default)(itemVal, focusItemValue);
331
+ return (0, _shallowEqual.default)(itemVal, newItemValue);
355
332
  });
356
333
  }
357
334
  var focusItem = data.find(function (item) {
358
- return (0, _shallowEqual.default)(item === null || item === void 0 ? void 0 : item[valueKey], focusItemValue);
335
+ return (0, _shallowEqual.default)(item === null || item === void 0 ? void 0 : item[valueKey], newItemValue);
359
336
  });
360
337
  if (!focusItem) {
361
- focusItem = createOption(focusItemValue);
338
+ focusItem = createOption(newItemValue);
362
339
  }
363
340
  setValue(val);
364
341
  resetSearch();
@@ -378,8 +355,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
378
355
  }
379
356
 
380
357
  // Find active `MenuItem` by `value`
381
- var allData = getAllData();
382
- var focusItem = allData.find(function (item) {
358
+ var focusItem = data.find(function (item) {
383
359
  return (0, _shallowEqual.default)(item[valueKey], focusItemValue);
384
360
  });
385
361
 
@@ -403,7 +379,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
403
379
  var removeLastItem = (0, _utils.useEventCallback)(function (event) {
404
380
  var target = event === null || event === void 0 ? void 0 : event.target;
405
381
  if ((target === null || target === void 0 ? void 0 : target.tagName) !== 'INPUT') {
406
- focusInput();
382
+ focus();
407
383
  return;
408
384
  }
409
385
  if ((target === null || target === void 0 ? void 0 : target.tagName) === 'INPUT' && target !== null && target !== void 0 && target.value) {
@@ -457,7 +433,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
457
433
  } else {
458
434
  events.onMenuPressEnter = handleMenuItemKeyPress;
459
435
  }
460
- var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
436
+ var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends3.default)({
461
437
  trigger: triggerRef,
462
438
  target: target,
463
439
  overlay: overlay
@@ -466,19 +442,20 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
466
442
  setFocusItemValue(multi ? value === null || value === void 0 ? void 0 : value[0] : value);
467
443
  resetSearch();
468
444
  });
469
- var handleFocus = (0, _utils.useEventCallback)(function () {
445
+ var handleFocus = (0, _utils.useEventCallback)(function (event) {
470
446
  if (!readOnly) {
471
- var _triggerRef$current4;
447
+ var _triggerRef$current3;
472
448
  setOpen(true);
473
- (_triggerRef$current4 = triggerRef.current) === null || _triggerRef$current4 === void 0 ? void 0 : _triggerRef$current4.open();
449
+ (_triggerRef$current3 = triggerRef.current) === null || _triggerRef$current3 === void 0 ? void 0 : _triggerRef$current3.open();
474
450
  }
451
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
475
452
  });
476
453
  var handleEnter = (0, _utils.useEventCallback)(function () {
477
- focusInput();
454
+ focus();
478
455
  setOpen(true);
479
456
  });
480
457
  var handleExit = (0, _utils.useEventCallback)(function () {
481
- blurInput();
458
+ blur();
482
459
  setOpen(false);
483
460
  });
484
461
  var renderListItem = function renderListItem(label, item) {
@@ -522,11 +499,11 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
522
499
  if (!isValid) {
523
500
  return null;
524
501
  }
525
- return /*#__PURE__*/_react.default.createElement(_Tag.default, (0, _extends2.default)({
502
+ return /*#__PURE__*/_react.default.createElement(_Tag.default, (0, _extends3.default)({
526
503
  role: "option"
527
504
  }, tagRest, {
528
505
  key: tag,
529
- size: convertSize(size),
506
+ size: (0, _utils2.convertSize)(size),
530
507
  closable: !disabled && closable && !readOnly && !plaintext,
531
508
  title: typeof itemNode === 'string' ? itemNode : undefined,
532
509
  onClose: (0, _utils.createChainedFunction)(handleRemoveItemByTag.bind(null, tag), onClose)
@@ -545,11 +522,11 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
545
522
  className = positionProps.className;
546
523
  var menuClassPrefix = multi ? 'picker-check-menu' : 'picker-select-menu';
547
524
  var classes = merge(className, menuClassName, prefix(multi ? 'check-menu' : 'select-menu'));
548
- var styles = (0, _extends2.default)({}, menuStyle, {
525
+ var styles = (0, _extends3.default)({}, menuStyle, {
549
526
  left: left,
550
527
  top: top
551
528
  });
552
- var items = (0, _treeUtils.filterNodesOfTree)(getAllData(), checkShouldDisplay);
529
+ var items = (0, _treeUtils.filterNodesOfTree)(data, checkShouldDisplay);
553
530
  if (creatable && (typeof shouldDisplayCreateOption === 'function' ? shouldDisplayCreateOption(searchKeyword, items) : searchKeyword && !items.find(function (item) {
554
531
  return item[valueKey] === searchKeyword;
555
532
  }))) {
@@ -588,8 +565,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
588
565
  ,
589
566
  group: !(0, _isUndefined.default)(groupBy),
590
567
  groupBy: groupBy,
591
- onSelect: multi ? handleCheckTag : handleSelectItem // fixme don't use any
592
- ,
568
+ onSelect: multi ? handleCheckTag : handleSelectItem,
593
569
  renderMenuGroup: renderMenuGroup,
594
570
  renderMenuItem: renderListItem,
595
571
  virtualized: virtualized
@@ -618,7 +594,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
618
594
  var hasSingleValue = !(0, _isNil.default)(value) && (0, _isFunction.default)(renderValue) && !(0, _isNil.default)(itemNode);
619
595
  var hasMultiValue = (0, _isArray.default)(value) && value.length > 0 && (0, _isFunction.default)(renderValue) && !(0, _isNil.default)(tagElements);
620
596
  var hasValue = multi ? !!(tagElements !== null && tagElements !== void 0 && tagElements.length) || hasMultiValue : isValid || hasSingleValue;
621
- var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends2.default)({}, props, {
597
+ var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends3.default)({}, props, {
622
598
  classPrefix: classPrefix,
623
599
  appearance: appearance,
624
600
  hasValue: hasValue,
@@ -630,14 +606,6 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
630
606
  var classes = merge(pickerClasses, (_merge = {}, _merge[prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["tag"])))] = multi, _merge[prefix((multi ? 'tag' : 'input') + "-" + size)] = size, _merge[prefix(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["focused"])))] = open, _merge[prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["disabled-options"])))] = disabledOptions, _merge));
631
607
  var searching = !!searchKeyword && open;
632
608
  var editable = searchable && !disabled && !rest.loading;
633
- var inputProps = multi ? {
634
- inputStyle: {
635
- maxWidth: maxWidth - 63
636
- },
637
- as: _InputAutosize.default
638
- } : {
639
- as: 'input'
640
- };
641
609
  if (plaintext) {
642
610
  var plaintextProps = {};
643
611
 
@@ -648,7 +616,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
648
616
  plaintextProps.wrap = true;
649
617
  plaintextProps.childrenRenderMode = 'clone';
650
618
  }
651
- return /*#__PURE__*/_react.default.createElement(_Plaintext.default, (0, _extends2.default)({
619
+ return /*#__PURE__*/_react.default.createElement(_Plaintext.default, (0, _extends3.default)({
652
620
  localeKey: "notSelected",
653
621
  ref: target
654
622
  }, plaintextProps), itemNode || (tagElements !== null && tagElements !== void 0 && tagElements.length ? tagElements : null) || placeholder);
@@ -669,10 +637,10 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
669
637
  }, /*#__PURE__*/_react.default.createElement(Component, {
670
638
  className: classes,
671
639
  style: style,
672
- onClick: focusInput,
640
+ onClick: focus,
673
641
  onKeyDown: onPickerKeyDown,
674
642
  ref: root
675
- }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys)), {
643
+ }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends3.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys)), {
676
644
  appearance: appearance,
677
645
  readOnly: readOnly,
678
646
  plaintext: plaintext,
@@ -691,21 +659,21 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
691
659
  size: size
692
660
  }), searching || multi && hasValue ? null : itemNode || placeholderNode), /*#__PURE__*/_react.default.createElement(_TextBox.default, {
693
661
  showTagList: hasValue && multi,
662
+ inputRef: inputRef,
663
+ inputValue: open ? searchKeyword : '',
664
+ inputProps: inputProps,
694
665
  tags: tagElements,
695
666
  editable: editable,
696
667
  readOnly: readOnly,
697
668
  disabled: disabled,
698
669
  multiple: multi,
699
670
  onBlur: onBlur,
700
- onFocus: (0, _utils.createChainedFunction)(handleFocus, onFocus),
701
- inputRef: inputRef,
702
- onChange: handleSearch,
703
- inputValue: open ? searchKeyword : '',
704
- inputProps: inputProps
671
+ onFocus: handleFocus,
672
+ onChange: handleSearch
705
673
  })));
706
674
  });
707
675
  InputPicker.displayName = 'InputPicker';
708
- InputPicker.propTypes = (0, _extends2.default)({}, _Picker.listPickerPropTypes, {
676
+ InputPicker.propTypes = (0, _extends3.default)({}, _Picker.listPickerPropTypes, {
709
677
  locale: _propTypes.default.any,
710
678
  appearance: (0, _propTypes2.oneOf)(['default', 'subtle']),
711
679
  cacheData: _propTypes.default.array,
@@ -9,18 +9,26 @@ export interface TagOnlyProps {
9
9
  * Set the trigger for creating tags. only valid when creatable
10
10
  */
11
11
  trigger: TriggerType | TriggerType[];
12
- /** Callback fired when a tag is removed. */
12
+ /**
13
+ * Callback fired when a tag is removed.
14
+ */
13
15
  onTagRemove?: (tag: string, event: React.MouseEvent) => void;
14
16
  }
15
17
  export interface InputPickerContextProps extends TagOnlyProps {
16
- /** Multiple selections are allowed */
18
+ /**
19
+ * Multiple selections are allowed
20
+ */
17
21
  multi?: boolean;
18
22
  /**
19
23
  * No overlay provides options
20
24
  */
21
25
  disabledOptions?: boolean;
22
- /** Custom render checkbox on menu item */
26
+ /**
27
+ * Custom render checkbox on menu item
28
+ */
23
29
  renderCheckbox?: (checkboxProps: CheckboxProps) => React.ReactNode;
24
30
  }
25
31
  declare const InputPickerContext: React.Context<InputPickerContextProps>;
32
+ export declare function useTagContext(): InputPickerContextProps;
33
+ export declare const TagProvider: React.Provider<InputPickerContextProps>;
26
34
  export default InputPickerContext;
@@ -3,11 +3,17 @@
3
3
 
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  exports.__esModule = true;
6
- exports.default = void 0;
6
+ exports.useTagContext = useTagContext;
7
+ exports.default = exports.TagProvider = void 0;
7
8
  var _react = _interopRequireDefault(require("react"));
8
9
  var InputPickerContext = /*#__PURE__*/_react.default.createContext({
9
10
  tagProps: {},
10
11
  trigger: 'Enter'
11
12
  });
13
+ function useTagContext() {
14
+ return _react.default.useContext(InputPickerContext);
15
+ }
16
+ var TagProvider = InputPickerContext.Provider;
17
+ exports.TagProvider = TagProvider;
12
18
  var _default = InputPickerContext;
13
19
  exports.default = _default;
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import type { ItemDataType } from '../../@types/common';
3
+ export interface InputItemDataType<T = number | string> extends ItemDataType<T> {
4
+ create?: boolean;
5
+ }
6
+ interface UseDataProps {
7
+ controlledData?: InputItemDataType[];
8
+ cacheData?: InputItemDataType[];
9
+ onChange?: (data: ItemDataType[]) => void;
10
+ }
11
+ declare function useData(props: UseDataProps): {
12
+ data: ItemDataType<string | number>[];
13
+ dataWithCache: ItemDataType<string | number>[];
14
+ newData: InputItemDataType<string | number>[];
15
+ setNewData: import("react").Dispatch<import("react").SetStateAction<InputItemDataType<string | number>[]>>;
16
+ };
17
+ export default useData;
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _shallowEqual = _interopRequireDefault(require("../../utils/shallowEqual"));
9
+ function useData(props) {
10
+ var _props$controlledData = props.controlledData,
11
+ controlledData = _props$controlledData === void 0 ? [] : _props$controlledData,
12
+ _props$cacheData = props.cacheData,
13
+ cacheData = _props$cacheData === void 0 ? [] : _props$cacheData,
14
+ onChange = props.onChange;
15
+ var _useState = (0, _react.useState)(controlledData),
16
+ uncontrolledData = _useState[0],
17
+ setData = _useState[1];
18
+ var _useState2 = (0, _react.useState)([]),
19
+ newData = _useState2[0],
20
+ setNewData = _useState2[1];
21
+ var data = (0, _react.useMemo)(function () {
22
+ return [].concat(uncontrolledData, newData);
23
+ }, [newData, uncontrolledData]);
24
+ var dataWithCache = (0, _react.useMemo)(function () {
25
+ return [].concat(data, cacheData);
26
+ }, [data, cacheData]);
27
+
28
+ // Update the state when the data in props changes
29
+ (0, _react.useEffect)(function () {
30
+ if (controlledData && !(0, _shallowEqual.default)(controlledData, uncontrolledData)) {
31
+ setData(controlledData);
32
+ setNewData([]);
33
+ onChange === null || onChange === void 0 ? void 0 : onChange(controlledData);
34
+ }
35
+ }, [controlledData, uncontrolledData, onChange]);
36
+ return {
37
+ data: data,
38
+ dataWithCache: dataWithCache,
39
+ newData: newData,
40
+ setNewData: setNewData
41
+ };
42
+ }
43
+ var _default = useData;
44
+ exports.default = _default;
@@ -0,0 +1,21 @@
1
+ /// <reference types="react" />
2
+ import type { OverlayTriggerHandle } from '../../internals/Picker/PickerToggleTrigger';
3
+ interface InputProps {
4
+ multi?: boolean;
5
+ triggerRef: React.RefObject<OverlayTriggerHandle>;
6
+ }
7
+ declare function useInput(props: InputProps): {
8
+ inputProps: {
9
+ inputStyle: {
10
+ maxWidth: number;
11
+ };
12
+ as: import("react").ForwardRefExoticComponent<import("../InputAutosize").InputAutosizeProps & import("react").RefAttributes<import("../InputAutosize").InputInstance>>;
13
+ } | {
14
+ as: string;
15
+ inputStyle?: undefined;
16
+ };
17
+ inputRef: import("react").MutableRefObject<any>;
18
+ focus: () => void;
19
+ blur: () => void;
20
+ };
21
+ export default useInput;