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
@@ -120,15 +120,12 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
120
120
  var _useState2 = (0, _react.useState)(),
121
121
  selectedPaths = _useState2[0],
122
122
  setSelectedPaths = _useState2[1];
123
- var triggerRef = (0, _react.useRef)(null);
124
- var overlayRef = (0, _react.useRef)(null);
125
- var targetRef = (0, _react.useRef)(null);
126
- var searchInputRef = (0, _react.useRef)(null);
127
- (0, _Picker.usePublicMethods)(ref, {
128
- triggerRef: triggerRef,
129
- overlayRef: overlayRef,
130
- targetRef: targetRef
131
- });
123
+ var _usePickerRef = (0, _Picker.usePickerRef)(ref),
124
+ trigger = _usePickerRef.trigger,
125
+ root = _usePickerRef.root,
126
+ target = _usePickerRef.target,
127
+ overlay = _usePickerRef.overlay,
128
+ searchInput = _usePickerRef.searchInput;
132
129
  var _useCustom = (0, _utils3.useCustom)('Picker', overrideLocale),
133
130
  locale = _useCustom.locale,
134
131
  rtl = _useCustom.rtl;
@@ -145,7 +142,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
145
142
  valueKey: valueKey,
146
143
  defaultLayer: selectedPaths !== null && selectedPaths !== void 0 && selectedPaths.length ? selectedPaths.length - 1 : 0,
147
144
  target: function target() {
148
- return overlayRef.current;
145
+ return overlay.current;
149
146
  },
150
147
  callback: (0, _react.useCallback)(function (value) {
151
148
  var _getColumnsAndPaths = (0, _utils2.getColumnsAndPaths)(data, flattenData.find(function (item) {
@@ -179,16 +176,16 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
179
176
  var _useState3 = (0, _react.useState)(''),
180
177
  searchKeyword = _useState3[0],
181
178
  setSearchKeyword = _useState3[1];
182
- var handleEntered = (0, _react.useCallback)(function () {
179
+ var handleEntered = (0, _utils3.useEventCallback)(function () {
183
180
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
184
181
  setActive(true);
185
- }, [onOpen]);
186
- var handleExited = (0, _react.useCallback)(function () {
182
+ });
183
+ var handleExited = (0, _utils3.useEventCallback)(function () {
187
184
  setActive(false);
188
185
  setSearchKeyword('');
189
- }, []);
190
- var handleSelect = (0, _react.useCallback)(function (node, cascadePaths, event) {
191
- var _node$childrenKey, _node$childrenKey2, _triggerRef$current, _triggerRef$current$u;
186
+ });
187
+ var handleSelect = (0, _utils3.useEventCallback)(function (node, cascadePaths, event) {
188
+ var _node$childrenKey, _node$childrenKey2, _trigger$current, _trigger$current$upda;
192
189
  setSelectedPaths(cascadePaths);
193
190
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
194
191
  var columnIndex = cascadePaths.length;
@@ -201,7 +198,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
201
198
  children.then(function (data) {
202
199
  node.loading = false;
203
200
  node[childrenKey] = data;
204
- if (targetRef.current || inline) {
201
+ if (target.current || inline) {
205
202
  addFlattenData(data, node);
206
203
  addColumn(data, columnIndex);
207
204
  }
@@ -218,9 +215,9 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
218
215
  // Removes subsequent columns of the current column when the clicked node is a leaf node.
219
216
  removeColumnByIndex(columnIndex);
220
217
  }
221
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$u = _triggerRef$current.updatePosition) === null || _triggerRef$current$u === void 0 ? void 0 : _triggerRef$current$u.call(_triggerRef$current);
222
- }, [onSelect, getChildren, childrenKey, inline, addFlattenData, addColumn, removeColumnByIndex]);
223
- var handleCheck = (0, _react.useCallback)(function (node, event, checked) {
218
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$upda = _trigger$current.updatePosition) === null || _trigger$current$upda === void 0 ? void 0 : _trigger$current$upda.call(_trigger$current);
219
+ });
220
+ var handleCheck = (0, _utils3.useEventCallback)(function (node, event, checked) {
224
221
  var nodeValue = node[valueKey];
225
222
  var nextValue = [];
226
223
  if (cascade) {
@@ -238,38 +235,38 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
238
235
  setValue(nextValue);
239
236
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
240
237
  onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
241
- }, [cascade, onChange, onCheck, setValue, splitValue, value, valueKey]);
242
- var handleClean = (0, _react.useCallback)(function (event) {
243
- if (disabled || !targetRef.current) {
238
+ });
239
+ var handleClean = (0, _utils3.useEventCallback)(function (event) {
240
+ if (disabled || !target.current) {
244
241
  return;
245
242
  }
246
243
  setSelectedPaths([]);
247
244
  setValue([]);
248
245
  setColumnData([data]);
249
246
  onChange === null || onChange === void 0 ? void 0 : onChange([], event);
250
- }, [data, disabled, onChange, setColumnData, setValue]);
251
- var handleMenuPressEnter = (0, _react.useCallback)(function (event) {
252
- var _overlayRef$current;
247
+ });
248
+ var handleMenuPressEnter = (0, _utils3.useEventCallback)(function (event) {
249
+ var _overlay$current;
253
250
  var focusItem = (0, _treeUtils.findNodeOfTree)(data, function (item) {
254
251
  return item[valueKey] === focusItemValue;
255
252
  });
256
- var checkbox = (_overlayRef$current = overlayRef.current) === null || _overlayRef$current === void 0 ? void 0 : _overlayRef$current.querySelector("[data-key=\"" + focusItemValue + "\"] [type=\"checkbox\"]");
253
+ var checkbox = (_overlay$current = overlay.current) === null || _overlay$current === void 0 ? void 0 : _overlay$current.querySelector("[data-key=\"" + focusItemValue + "\"] [type=\"checkbox\"]");
257
254
  if (checkbox) {
258
255
  handleCheck(focusItem, event, (checkbox === null || checkbox === void 0 ? void 0 : checkbox.getAttribute('aria-checked')) !== 'true');
259
256
  }
260
- }, [data, focusItemValue, handleCheck, valueKey]);
257
+ });
261
258
  var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends3.default)({
262
259
  toggle: !focusItemValue || !active,
263
- triggerRef: triggerRef,
264
- targetRef: targetRef,
265
- overlayRef: overlayRef,
266
- searchInputRef: searchInputRef,
260
+ trigger: trigger,
261
+ target: target,
262
+ overlay: overlay,
263
+ searchInput: searchInput,
267
264
  active: active,
268
265
  onExit: handleClean,
269
266
  onMenuKeyDown: onFocusItem,
270
267
  onMenuPressEnter: handleMenuPressEnter
271
268
  }, rest));
272
- var handleSearch = (0, _react.useCallback)(function (value, event) {
269
+ var handleSearch = (0, _utils3.useEventCallback)(function (value, event) {
273
270
  setSearchKeyword(value);
274
271
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
275
272
  if (value) {
@@ -278,8 +275,8 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
278
275
  setLayer(selectedPaths.length - 1);
279
276
  }
280
277
  setKeys([]);
281
- }, [onSearch, selectedPaths, setKeys, setLayer]);
282
- var getSearchResult = (0, _react.useCallback)(function () {
278
+ });
279
+ var getSearchResult = function getSearchResult() {
283
280
  var items = [];
284
281
  var result = flattenData.filter(function (item) {
285
282
  if (uncheckableItemValues.some(function (value) {
@@ -301,7 +298,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
301
298
  }
302
299
  }
303
300
  return items;
304
- }, [flattenData, labelKey, searchKeyword, uncheckableItemValues, valueKey]);
301
+ };
305
302
  var renderSearchRow = function renderSearchRow(item, key) {
306
303
  var _extends2;
307
304
  var nodes = (0, _treeUtils.getNodeParents)(item);
@@ -386,16 +383,16 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
386
383
  inline: inline
387
384
  }));
388
385
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
389
- ref: (0, _utils3.mergeRefs)(overlayRef, speakerRef),
386
+ ref: (0, _utils3.mergeRefs)(overlay, speakerRef),
390
387
  className: classes,
391
388
  style: styles,
392
- target: triggerRef,
389
+ target: trigger,
393
390
  onKeyDown: onPickerKeyDown
394
391
  }, searchable && /*#__PURE__*/_react.default.createElement(_Picker.SearchBar, {
395
392
  placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
396
393
  onChange: handleSearch,
397
394
  value: searchKeyword,
398
- inputRef: searchInputRef
395
+ inputRef: searchInput
399
396
  }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/_react.default.createElement(_DropdownMenu.default, {
400
397
  id: id ? id + "-listbox" : undefined,
401
398
  cascade: cascade,
@@ -451,7 +448,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
451
448
  }
452
449
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
453
450
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
454
- ref: triggerRef,
451
+ ref: trigger,
455
452
  placement: placement,
456
453
  onEnter: (0, _utils3.createChainedFunction)(handleEntered, onEnter),
457
454
  onExited: (0, _utils3.createChainedFunction)(handleExited, onExited),
@@ -459,13 +456,14 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
459
456
  speaker: renderDropdownMenu
460
457
  }, /*#__PURE__*/_react.default.createElement(Component, {
461
458
  className: classes,
462
- style: style
459
+ style: style,
460
+ ref: root
463
461
  }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends3.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys)), {
464
462
  id: id,
465
463
  as: toggleAs,
466
464
  appearance: appearance,
467
465
  disabled: disabled,
468
- ref: targetRef,
466
+ ref: target,
469
467
  onClean: (0, _utils3.createChainedFunction)(handleClean, onClean),
470
468
  onKeyDown: onPickerKeyDown,
471
469
  cleanable: cleanable && !disabled,
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  interface PickerIndicatorProps {
3
3
  loading?: boolean;
4
4
  caretAs?: React.ElementType | null;
5
- onClose?: () => void;
5
+ onClose?: (event: React.MouseEvent<HTMLElement>) => void;
6
6
  showCleanButton?: boolean;
7
7
  as?: React.ElementType;
8
8
  }
@@ -39,7 +39,8 @@ var PickerIndicator = function PickerIndicator(_ref) {
39
39
  });
40
40
  }
41
41
  return caretAs && /*#__PURE__*/_react.default.createElement(_icons.Icon, {
42
- as: caretAs
42
+ as: caretAs,
43
+ className: prefix('caret-icon')
43
44
  });
44
45
  };
45
46
  return /*#__PURE__*/_react.default.createElement(Component, null, addon());
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  interface PickerLabelProps {
3
- id: string;
3
+ id?: string;
4
4
  className?: string;
5
5
  children?: React.ReactNode;
6
6
  as?: React.ElementType;
@@ -4,38 +4,33 @@ import { RsRefForwardingComponent, TypeAttributes } from '../@types/common';
4
4
  import { IconProps } from '@rsuite/icons/lib/Icon';
5
5
  declare type ValueType = string | number;
6
6
  export interface PickerToggleProps extends ToggleButtonProps {
7
- value?: ValueType | ValueType[];
8
- inputValue?: ValueType | ValueType[];
9
- id?: string;
7
+ active?: boolean;
10
8
  hasValue?: boolean;
11
9
  cleanable?: boolean;
12
10
  caret?: boolean;
13
- active?: boolean;
14
- disabled?: boolean;
15
- readOnly?: boolean;
16
- plaintext?: boolean;
17
- tabIndex?: number;
18
- /** Whether to display an loading indicator on toggle button */
19
- loading?: boolean;
20
- editable?: boolean;
21
- name?: string;
22
- inputPlaceholder?: string;
23
- inputMask?: (string | RegExp)[];
24
- onInputChange?: (value: string, event: React.ChangeEvent) => void;
25
- onInputPressEnter?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
26
- onInputBackspace?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
27
- onInputBlur?: (event: React.FocusEvent<HTMLElement>) => void;
28
- onInputFocus?: (event: React.FocusEvent<HTMLElement>) => void;
29
- placement?: TypeAttributes.Placement;
30
11
  /**
31
12
  * Custom caret component
32
13
  * @deprecated Use `caretAs` instead
33
14
  */
34
15
  caretComponent?: React.FC<IconProps>;
35
- /** Custom caret component */
16
+ /**
17
+ * Custom caret component
18
+ */
36
19
  caretAs?: React.ElementType;
37
- onClean?: (event: React.MouseEvent) => void;
20
+ disabled?: boolean;
21
+ placement?: TypeAttributes.Placement;
22
+ readOnly?: boolean;
23
+ plaintext?: boolean;
24
+ tabIndex?: number;
25
+ /**
26
+ * Whether to display an loading indicator on toggle button
27
+ */
28
+ loading?: boolean;
38
29
  label?: React.ReactNode;
30
+ name?: string;
31
+ id?: string;
32
+ inputValue?: ValueType | ValueType[];
33
+ onClean?: (event: React.MouseEvent) => void;
39
34
  }
40
35
  declare const PickerToggle: RsRefForwardingComponent<typeof ToggleButton, PickerToggleProps>;
41
36
  export default PickerToggle;
@@ -5,25 +5,20 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
  exports.__esModule = true;
7
7
  exports.default = void 0;
8
- var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
9
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
- var _debounce = _interopRequireDefault(require("lodash/debounce"));
14
12
  var _ToggleButton = _interopRequireDefault(require("./ToggleButton"));
15
- var _CloseButton = _interopRequireDefault(require("../CloseButton"));
16
13
  var _utils = require("../utils");
17
14
  var _Plaintext = _interopRequireDefault(require("../Plaintext"));
18
15
  var _useToggleCaret = _interopRequireDefault(require("../utils/useToggleCaret"));
19
- var _TextMask = _interopRequireDefault(require("../MaskedInput/TextMask"));
20
- var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
21
- var _Loader = _interopRequireDefault(require("../Loader"));
22
16
  var _Stack = _interopRequireDefault(require("../Stack"));
23
- var _templateObject, _templateObject2;
24
- var defaultInputMask = [];
17
+ var _PickerIndicator = _interopRequireDefault(require("./PickerIndicator"));
18
+ var _PickerLabel = _interopRequireDefault(require("./PickerLabel"));
19
+ var _templateObject;
25
20
  var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
26
- var activeProp = props.active,
21
+ var active = props.active,
27
22
  _props$as = props.as,
28
23
  Component = _props$as === void 0 ? _ToggleButton.default : _props$as,
29
24
  _props$classPrefix = props.classPrefix,
@@ -36,26 +31,14 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
36
31
  readOnly = props.readOnly,
37
32
  plaintext = props.plaintext,
38
33
  hasValue = props.hasValue,
39
- editable = props.editable,
40
34
  _props$loading = props.loading,
41
35
  loading = _props$loading === void 0 ? false : _props$loading,
42
- cleanableProp = props.cleanable,
36
+ cleanable = props.cleanable,
43
37
  _props$tabIndex = props.tabIndex,
44
- tabIndexProp = _props$tabIndex === void 0 ? editable ? -1 : 0 : _props$tabIndex,
38
+ tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
45
39
  id = props.id,
46
- value = props.value,
47
- inputPlaceholder = props.inputPlaceholder,
48
40
  inputValueProp = props.inputValue,
49
- _props$inputMask = props.inputMask,
50
- inputMask = _props$inputMask === void 0 ? defaultInputMask : _props$inputMask,
51
- onInputChange = props.onInputChange,
52
- onInputPressEnter = props.onInputPressEnter,
53
- onInputBackspace = props.onInputBackspace,
54
- onInputBlur = props.onInputBlur,
55
- onInputFocus = props.onInputFocus,
56
41
  onClean = props.onClean,
57
- onFocus = props.onFocus,
58
- onBlur = props.onBlur,
59
42
  _props$placement = props.placement,
60
43
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
61
44
  caretComponent = props.caretComponent,
@@ -63,102 +46,29 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
63
46
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
64
47
  label = props.label,
65
48
  name = props.name,
66
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "loading", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBackspace", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label", "name"]);
67
- var _useCustom = (0, _utils.useCustom)(),
68
- locale = _useCustom.locale;
69
- var inputRef = (0, _react.useRef)(null);
70
- var comboboxRef = (0, _react.useRef)(null);
71
- var _useState = (0, _react.useState)(false),
72
- activeState = _useState[0],
73
- setActive = _useState[1];
49
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "loading", "cleanable", "tabIndex", "id", "inputValue", "onClean", "placement", "caretComponent", "caretAs", "label", "name"]);
50
+ var combobox = (0, _react.useRef)(null);
74
51
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
75
52
  withClassPrefix = _useClassNames.withClassPrefix,
76
53
  merge = _useClassNames.merge,
77
54
  prefix = _useClassNames.prefix;
78
- var getInputValue = (0, _react.useCallback)(function () {
79
- return typeof inputValueProp === 'undefined' ? Array.isArray(value) ? value.join(',') : value : inputValueProp;
80
- }, [inputValueProp, value]);
81
- var _useState2 = (0, _react.useState)(getInputValue),
82
- inputValue = _useState2[0],
83
- setInputValue = _useState2[1];
84
- (0, _react.useEffect)(function () {
85
- if (comboboxRef.current) {
86
- var _value = getInputValue();
87
- setInputValue(_value);
55
+ var inputValue = (0, _react.useMemo)(function () {
56
+ if (typeof inputValueProp === 'number' || typeof inputValueProp === 'string') {
57
+ return inputValueProp;
58
+ } else if (Array.isArray(inputValueProp)) {
59
+ return inputValueProp.join(',');
88
60
  }
89
- }, [getInputValue]);
61
+ return '';
62
+ }, [inputValueProp]);
90
63
  var classes = merge(className, withClassPrefix({
91
- active: activeProp || activeState
64
+ active: active
92
65
  }));
93
- var handleFocus = (0, _react.useCallback)(function (event) {
94
- if (!loading) {
95
- setActive(true);
96
- }
97
- if (editable) {
98
- // Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
99
- if (event.target === inputRef.current) {
100
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
101
- }
102
-
103
- // Force the input to be focused and editable.
104
- if (document.activeElement === comboboxRef.current) {
105
- var _inputRef$current;
106
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
107
- }
108
- } else {
109
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
110
- }
111
- }, [editable, loading, onFocus]);
112
- var handleBlur = (0, _react.useCallback)(function (event) {
113
- if (inputRef.current && !editable) {
114
- setActive(false);
115
- }
116
-
117
- // When activeElement is an input, it remains active.
118
- if (editable && inputRef.current && document.activeElement !== inputRef.current) {
119
- setActive(false);
120
- }
121
- onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
122
- }, [editable, onBlur]);
123
- var handleInputBlur = function handleInputBlur(event) {
124
- setInputValue(getInputValue());
125
- onInputBlur === null || onInputBlur === void 0 ? void 0 : onInputBlur(event);
126
- };
127
- var handleClean = (0, _react.useCallback)(function (event) {
128
- var _inputRef$current2, _comboboxRef$current;
66
+ var handleClean = (0, _utils.useEventCallback)(function (event) {
67
+ var _combobox$current;
129
68
  event.stopPropagation();
130
69
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
131
-
132
- // When the value is cleared, the current component is still in focus.
133
- editable ? (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus() : (_comboboxRef$current = comboboxRef.current) === null || _comboboxRef$current === void 0 ? void 0 : _comboboxRef$current.focus();
134
- }, [editable, onClean]);
135
- var handleInputChange = (0, _react.useCallback)(function (event) {
136
- var _event$target;
137
- var value = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value;
138
- setInputValue(value);
139
- onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
140
- }, [onInputChange]);
141
- var handleInputKeyDown = (0, _react.useCallback)(function (event) {
142
- if (editable) {
143
- if (event.key === _utils.KEY_VALUES.ENTER) {
144
- onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
145
- }
146
- if (event.key === _utils.KEY_VALUES.BACKSPACE) {
147
- onInputBackspace === null || onInputBackspace === void 0 ? void 0 : onInputBackspace(event);
148
- }
149
- }
150
- }, [editable, onInputPressEnter, onInputBackspace]);
151
- var renderInput = (0, _react.useCallback)(function (ref, props) {
152
- return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
153
- type: "text",
154
- autoComplete: "off",
155
- ref: (0, _utils.mergeRefs)(inputRef, ref),
156
- name: name,
157
- style: {
158
- pointerEvents: editable ? undefined : 'none'
159
- }
160
- }, props));
161
- }, [editable, name]);
70
+ (_combobox$current = combobox.current) === null || _combobox$current === void 0 ? void 0 : _combobox$current.focus();
71
+ });
162
72
  var ToggleCaret = (0, _useToggleCaret.default)(placement);
163
73
  var Caret = caretAs !== null && caretAs !== void 0 ? caretAs : ToggleCaret;
164
74
  if (plaintext) {
@@ -167,89 +77,54 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
167
77
  localeKey: "notSelected"
168
78
  }, hasValue ? children : null);
169
79
  }
170
- var showCleanButton = cleanableProp && hasValue && !readOnly;
171
-
172
- // When the component is read-only or disabled, the input is not interactive.
173
- var inputFocused = readOnly || disabled ? false : editable && activeState;
174
- var tabIndex = disabled ? undefined : tabIndexProp;
80
+ var showCleanButton = cleanable && hasValue && !readOnly;
175
81
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
176
82
  role: "combobox",
177
83
  "aria-haspopup": "listbox",
178
- "aria-expanded": activeProp,
84
+ "aria-expanded": active,
179
85
  "aria-disabled": disabled,
180
86
  "aria-owns": id ? id + "-listbox" : undefined
181
87
  }, rest, {
182
- ref: (0, _utils.mergeRefs)(comboboxRef, ref),
88
+ ref: (0, _utils.mergeRefs)(combobox, ref),
183
89
  disabled: disabled,
184
- tabIndex: tabIndex,
185
- className: classes,
186
- onFocus: !disabled ? handleFocus : null
187
- // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
188
- ,
189
- onBlur: !disabled ? (0, _debounce.default)(handleBlur, 200) : null
190
- }), /*#__PURE__*/_react.default.createElement(_Stack.default, null, label && /*#__PURE__*/_react.default.createElement(_Stack.default.Item, null, /*#__PURE__*/_react.default.createElement("span", {
191
- className: prefix('label')
90
+ tabIndex: disabled ? undefined : tabIndex,
91
+ className: classes
92
+ }), /*#__PURE__*/_react.default.createElement(_Stack.default, null, label && /*#__PURE__*/_react.default.createElement(_Stack.default.Item, null, /*#__PURE__*/_react.default.createElement(_PickerLabel.default, {
93
+ as: "span",
94
+ className: prefix('label'),
95
+ id: id ? id + "-label" : undefined
192
96
  }, label)), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
193
97
  grow: 1,
194
98
  style: {
195
99
  overflow: 'hidden'
196
100
  }
197
- }, loading ? /*#__PURE__*/_react.default.createElement(_Loader.default, {
198
- style: {
199
- display: 'block',
200
- padding: '1px 0'
201
- },
202
- "data-testid": "spinner"
203
- }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_TextMask.default, {
204
- keepCharPositions: true,
205
- mask: inputMask,
206
- value: Array.isArray(inputValue) ? inputValue.toString() : inputValue,
207
- onBlur: handleInputBlur,
208
- onFocus: onInputFocus,
209
- onChange: handleInputChange,
210
- onKeyDown: handleInputKeyDown,
211
- id: id,
212
- "aria-hidden": !inputFocused,
213
- readOnly: !inputFocused,
214
- disabled: disabled,
101
+ }, /*#__PURE__*/_react.default.createElement("input", {
102
+ readOnly: true,
103
+ "aria-hidden": true,
215
104
  "aria-controls": id ? id + "-listbox" : undefined,
216
- tabIndex: editable ? 0 : -1,
217
- className: prefix('textbox', {
218
- 'read-only': !inputFocused
219
- }),
220
- placeholder: inputPlaceholder,
221
- render: renderInput,
222
- "data-testid": "picker-toggle-input"
105
+ "aria-labelledby": label ? id + "-label" : undefined,
106
+ tabIndex: -1,
107
+ "data-testid": "picker-toggle-input",
108
+ name: name,
109
+ value: inputValue,
110
+ id: id,
111
+ className: prefix('textbox', 'read-only'),
112
+ style: {
113
+ pointerEvents: 'none'
114
+ }
223
115
  }), children ? /*#__PURE__*/_react.default.createElement("span", {
224
116
  className: prefix(hasValue ? 'value' : 'placeholder'),
225
117
  "aria-placeholder": typeof children === 'string' ? children : undefined
226
- }, children) : null)), showCleanButton && /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
227
- className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["clean"]))),
228
- tabIndex: -1,
229
- locale: {
230
- closeLabel: locale === null || locale === void 0 ? void 0 : locale.clear
231
- },
232
- onClick: handleClean
233
- }), caret && !showCleanButton && /*#__PURE__*/_react.default.createElement(Caret, {
234
- className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["caret"])))
235
- })));
118
+ }, children) : null), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
119
+ className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["indicator"])))
120
+ }, /*#__PURE__*/_react.default.createElement(_PickerIndicator.default, {
121
+ as: _react.default.Fragment,
122
+ loading: loading,
123
+ caretAs: caret ? Caret : null,
124
+ onClose: handleClean,
125
+ showCleanButton: showCleanButton
126
+ }))));
236
127
  });
237
128
  PickerToggle.displayName = 'PickerToggle';
238
- PickerToggle.propTypes = {
239
- classPrefix: _propTypes.default.string,
240
- hasValue: _propTypes.default.bool,
241
- cleanable: _propTypes.default.bool,
242
- className: _propTypes.default.string,
243
- children: _propTypes.default.node,
244
- caret: _propTypes.default.bool,
245
- as: _propTypes.default.elementType,
246
- onClean: _propTypes.default.func,
247
- active: _propTypes.default.bool,
248
- readOnly: _propTypes.default.bool,
249
- disabled: _propTypes.default.bool,
250
- plaintext: _propTypes.default.bool,
251
- caretComponent: (0, _deprecatePropType.default)(_propTypes.default.elementType, 'Use `caretAs` instead.'),
252
- caretAs: _propTypes.default.elementType
253
- };
254
129
  var _default = PickerToggle;
255
130
  exports.default = _default;
@@ -7,9 +7,12 @@ export { default as DropdownMenuGroup } from './DropdownMenuGroup';
7
7
  export { default as DropdownMenuItem } from './DropdownMenuItem';
8
8
  export { default as PickerOverlay } from './PickerOverlay';
9
9
  export { default as PickerToggle } from './PickerToggle';
10
+ export { default as PickerLabel } from './PickerLabel';
11
+ export { default as PickerIndicator } from './PickerIndicator';
10
12
  export { default as PickerToggleTrigger } from './PickerToggleTrigger';
11
13
  export { default as SearchBar } from './SearchBar';
12
14
  export { default as SelectedElement } from './SelectedElement';
15
+ export { default as usePickerRef } from './usePickerRef';
13
16
  export { pickTriggerPropKeys, omitTriggerPropKeys };
14
17
  export type { OverlayTriggerHandle, PositionChildProps, PickerHandle, PickerComponent, PickerToggleProps };
15
18
  export * from './utils';
@@ -11,13 +11,16 @@ var _exportNames = {
11
11
  DropdownMenuItem: true,
12
12
  PickerOverlay: true,
13
13
  PickerToggle: true,
14
+ PickerLabel: true,
15
+ PickerIndicator: true,
14
16
  PickerToggleTrigger: true,
15
17
  SearchBar: true,
16
18
  SelectedElement: true,
19
+ usePickerRef: true,
17
20
  pickTriggerPropKeys: true,
18
21
  omitTriggerPropKeys: true
19
22
  };
20
- exports.SelectedElement = exports.SearchBar = exports.PickerToggleTrigger = exports.PickerToggle = exports.PickerOverlay = exports.DropdownMenuItem = exports.DropdownMenuGroup = exports.DropdownMenuCheckItem = exports.DropdownMenu = void 0;
23
+ exports.usePickerRef = exports.SelectedElement = exports.SearchBar = exports.PickerToggleTrigger = exports.PickerIndicator = exports.PickerLabel = exports.PickerToggle = exports.PickerOverlay = exports.DropdownMenuItem = exports.DropdownMenuGroup = exports.DropdownMenuCheckItem = exports.DropdownMenu = void 0;
21
24
  var _PickerToggleTrigger = _interopRequireWildcard(require("./PickerToggleTrigger"));
22
25
  exports.pickTriggerPropKeys = _PickerToggleTrigger.pickTriggerPropKeys;
23
26
  exports.omitTriggerPropKeys = _PickerToggleTrigger.omitTriggerPropKeys;
@@ -34,10 +37,16 @@ var _PickerOverlay = _interopRequireDefault(require("./PickerOverlay"));
34
37
  exports.PickerOverlay = _PickerOverlay.default;
35
38
  var _PickerToggle = _interopRequireDefault(require("./PickerToggle"));
36
39
  exports.PickerToggle = _PickerToggle.default;
40
+ var _PickerLabel = _interopRequireDefault(require("./PickerLabel"));
41
+ exports.PickerLabel = _PickerLabel.default;
42
+ var _PickerIndicator = _interopRequireDefault(require("./PickerIndicator"));
43
+ exports.PickerIndicator = _PickerIndicator.default;
37
44
  var _SearchBar = _interopRequireDefault(require("./SearchBar"));
38
45
  exports.SearchBar = _SearchBar.default;
39
46
  var _SelectedElement = _interopRequireDefault(require("./SelectedElement"));
40
47
  exports.SelectedElement = _SelectedElement.default;
48
+ var _usePickerRef = _interopRequireDefault(require("./usePickerRef"));
49
+ exports.usePickerRef = _usePickerRef.default;
41
50
  var _utils = require("./utils");
42
51
  Object.keys(_utils).forEach(function (key) {
43
52
  if (key === "default" || key === "__esModule") return;
@@ -9,9 +9,11 @@ export interface PickerDependentParameters {
9
9
  */
10
10
  declare function usePickerRef(ref: any, parmas?: PickerDependentParameters): {
11
11
  trigger: import("react").RefObject<OverlayTriggerHandle>;
12
- root: import("react").RefObject<HTMLElement>;
12
+ root: import("react").MutableRefObject<any>;
13
13
  overlay: import("react").RefObject<HTMLElement>;
14
14
  target: import("react").RefObject<HTMLElement>;
15
15
  list: import("react").RefObject<ListHandle>;
16
+ searchInput: import("react").RefObject<HTMLInputElement>;
17
+ treeView: import("react").RefObject<HTMLDivElement>;
16
18
  };
17
19
  export default usePickerRef;