rsuite 5.42.0 → 5.44.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 (68) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/Picker/styles/index.less +0 -4
  3. package/Placeholder/styles/index.less +1 -1
  4. package/cjs/AutoComplete/AutoComplete.js +9 -1
  5. package/cjs/Cascader/Cascader.d.ts +2 -2
  6. package/cjs/CheckPicker/CheckPicker.d.ts +1 -1
  7. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +1 -1
  8. package/cjs/CheckTreePicker/CheckTreePicker.js +2 -2
  9. package/cjs/DatePicker/DatePicker.d.ts +3 -1
  10. package/cjs/DatePicker/DatePicker.js +18 -5
  11. package/cjs/DatePicker/PredefinedRanges.d.ts +2 -2
  12. package/cjs/DatePicker/PredefinedRanges.js +8 -8
  13. package/cjs/DatePicker/Toolbar.js +4 -4
  14. package/cjs/DateRangePicker/DateRangePicker.d.ts +3 -1
  15. package/cjs/DateRangePicker/DateRangePicker.js +18 -5
  16. package/cjs/DateRangePicker/types.d.ts +2 -2
  17. package/cjs/InputPicker/InputPicker.d.ts +1 -1
  18. package/cjs/InputPicker/InputPicker.js +1 -1
  19. package/cjs/MultiCascader/MultiCascader.d.ts +2 -2
  20. package/cjs/Picker/PickerToggle.d.ts +2 -0
  21. package/cjs/Picker/PickerToggle.js +10 -4
  22. package/cjs/Picker/utils.js +3 -2
  23. package/cjs/SelectPicker/SelectPicker.d.ts +1 -3
  24. package/cjs/TreePicker/TreePicker.d.ts +1 -1
  25. package/cjs/toaster/useToaster.js +22 -19
  26. package/dist/rsuite-no-reset-rtl.css +795 -714
  27. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  28. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  29. package/dist/rsuite-no-reset.css +795 -714
  30. package/dist/rsuite-no-reset.min.css +1 -1
  31. package/dist/rsuite-no-reset.min.css.map +1 -1
  32. package/dist/rsuite-rtl.css +795 -714
  33. package/dist/rsuite-rtl.min.css +1 -1
  34. package/dist/rsuite-rtl.min.css.map +1 -1
  35. package/dist/rsuite.css +795 -714
  36. package/dist/rsuite.js +28 -17
  37. package/dist/rsuite.js.map +1 -1
  38. package/dist/rsuite.min.css +1 -1
  39. package/dist/rsuite.min.css.map +1 -1
  40. package/dist/rsuite.min.js +1 -1
  41. package/dist/rsuite.min.js.map +1 -1
  42. package/esm/AutoComplete/AutoComplete.js +9 -1
  43. package/esm/Cascader/Cascader.d.ts +2 -2
  44. package/esm/CheckPicker/CheckPicker.d.ts +1 -1
  45. package/esm/CheckTreePicker/CheckTreePicker.d.ts +1 -1
  46. package/esm/CheckTreePicker/CheckTreePicker.js +2 -2
  47. package/esm/DatePicker/DatePicker.d.ts +3 -1
  48. package/esm/DatePicker/DatePicker.js +18 -5
  49. package/esm/DatePicker/PredefinedRanges.d.ts +2 -2
  50. package/esm/DatePicker/PredefinedRanges.js +8 -8
  51. package/esm/DatePicker/Toolbar.js +4 -4
  52. package/esm/DateRangePicker/DateRangePicker.d.ts +3 -1
  53. package/esm/DateRangePicker/DateRangePicker.js +18 -5
  54. package/esm/DateRangePicker/types.d.ts +2 -2
  55. package/esm/InputPicker/InputPicker.d.ts +1 -1
  56. package/esm/InputPicker/InputPicker.js +1 -1
  57. package/esm/MultiCascader/MultiCascader.d.ts +2 -2
  58. package/esm/Picker/PickerToggle.d.ts +2 -0
  59. package/esm/Picker/PickerToggle.js +10 -4
  60. package/esm/Picker/utils.js +3 -2
  61. package/esm/SelectPicker/SelectPicker.d.ts +1 -3
  62. package/esm/TreePicker/TreePicker.d.ts +1 -1
  63. package/esm/toaster/useToaster.js +22 -19
  64. package/package.json +2 -2
  65. package/styles/color-modes/dark.less +256 -206
  66. package/styles/color-modes/high-contrast.less +252 -207
  67. package/styles/color-modes/light.less +262 -206
  68. package/styles/variables.less +4 -2
@@ -10,6 +10,7 @@ import { useClassNames, useControlled, PLACEMENT, mergeRefs, useIsMounted, parti
10
10
  import { animationPropTypes } from '../Animation/utils';
11
11
  import { PickerToggleTrigger, onMenuKeyDown, DropdownMenu, DropdownMenuItem, PickerOverlay, useFocusItemValue, usePublicMethods, pickTriggerPropKeys } from '../Picker';
12
12
  import { transformData, shouldDisplay } from './utils';
13
+ import Plaintext from '../Plaintext';
13
14
  /**
14
15
  * TODO: Remove unnecessary .rs-auto-complete element
15
16
  * TODO: role=combobox and aria-autocomplete on input element
@@ -37,6 +38,7 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
37
38
  menuClassName = props.menuClassName,
38
39
  id = props.id,
39
40
  readOnly = props.readOnly,
41
+ plaintext = props.plaintext,
40
42
  renderMenu = props.renderMenu,
41
43
  renderMenuItem = props.renderMenuItem,
42
44
  onSelect = props.onSelect,
@@ -48,7 +50,7 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
48
50
  onFocus = props.onFocus,
49
51
  onBlur = props.onBlur,
50
52
  onMenuFocus = props.onMenuFocus,
51
- rest = _objectWithoutPropertiesLoose(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "menuAutoWidth", "data", "value", "open", "style", "size", "menuClassName", "id", "readOnly", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
53
+ rest = _objectWithoutPropertiesLoose(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "menuAutoWidth", "data", "value", "open", "style", "size", "menuClassName", "id", "readOnly", "plaintext", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
52
54
  var datalist = transformData(data);
53
55
  var _useControlled = useControlled(valueProp, defaultValue),
54
56
  value = _useControlled[0],
@@ -179,6 +181,12 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (props, ref) {
179
181
  autoWidth: menuAutoWidth
180
182
  }, renderMenu ? renderMenu(menu) : menu);
181
183
  };
184
+ if (plaintext) {
185
+ return /*#__PURE__*/React.createElement(Plaintext, {
186
+ ref: ref,
187
+ localeKey: "unfilled"
188
+ }, typeof value === 'undefined' ? defaultValue : value);
189
+ }
182
190
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
183
191
  ref: triggerRef,
184
192
  placement: placement,
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerHandle } from '../Picker';
3
+ import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
5
  export declare type ValueType = number | string;
6
- export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T | null, PickerLocale, ItemDataType<T>> {
6
+ export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T | null, PickerLocale, ItemDataType<T>>, Pick<PickerToggleProps, 'loading'> {
7
7
  /** Sets the width of the menu */
8
8
  menuWidth?: number;
9
9
  /** Sets the height of the menu */
@@ -4,7 +4,7 @@ import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
5
  import type { MultipleSelectProps } from '../SelectPicker';
6
6
  export declare type ValueType = (number | string)[];
7
- export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerLocale, ItemDataType<T>>, MultipleSelectProps<T>, Pick<PickerToggleProps, 'label' | 'caretAs'> {
7
+ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerLocale, ItemDataType<T>>, MultipleSelectProps<T>, Pick<PickerToggleProps, 'label' | 'caretAs' | 'loading'> {
8
8
  /** Top the selected option in the options */
9
9
  sticky?: boolean;
10
10
  /** A picker that can be counted */
@@ -4,7 +4,7 @@ import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { TreeBaseProps } from '../Tree/Tree';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
6
  export declare type ValueType = (string | number)[];
7
- export interface CheckTreePickerProps<T = ValueType> extends TreeBaseProps<T, ItemDataType>, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
7
+ export interface CheckTreePickerProps<T = ValueType> extends TreeBaseProps<T, ItemDataType>, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs' | 'loading'> {
8
8
  /** Tree node cascade */
9
9
  cascade?: boolean;
10
10
  /** A picker that can be counted */
@@ -482,7 +482,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
482
482
  handleSelect(activeItem, event);
483
483
  }
484
484
  }, [flattenNodes, focusItemValue, handleSelect, uncheckableItemValues, valueKey]);
485
- var onPickerKeydown = useToggleKeyDownEvent({
485
+ var onPickerKeydown = useToggleKeyDownEvent(_extends({
486
486
  toggle: !focusItemValue || !active,
487
487
  triggerRef: triggerRef,
488
488
  targetRef: targetRef,
@@ -505,7 +505,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
505
505
  del: handleClean
506
506
  });
507
507
  }
508
- });
508
+ }, rest));
509
509
  var handleTreeKeydown = useCallback(function (event) {
510
510
  if (!treeViewRef.current) {
511
511
  return;
@@ -4,7 +4,7 @@ import { DatePickerLocale } from '../locales';
4
4
  import { PickerToggleProps } from '../Picker';
5
5
  import { FormControlBaseProps, PickerBaseProps, RsRefForwardingComponent } from '../@types/common';
6
6
  export type { RangeType } from './Toolbar';
7
- export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext'> {
7
+ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext' | 'loading'> {
8
8
  /** Predefined date Ranges */
9
9
  ranges?: RangeType<Date>[];
10
10
  /** Calendar panel default presentation date and time */
@@ -94,6 +94,8 @@ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, Form
94
94
  onNextMonth?: (date: Date) => void;
95
95
  /** Called after clicking the OK button */
96
96
  onOk?: (date: Date, event: React.SyntheticEvent) => void;
97
+ /** Called after clicking the shortcut button */
98
+ onShortcutClick?: (range: RangeType<Date>, event: React.MouseEvent) => void;
97
99
  /** Called when clean */
98
100
  onClean?: (event: React.MouseEvent) => void;
99
101
  /** Custom render value */
@@ -6,6 +6,7 @@ import PropTypes from 'prop-types';
6
6
  import mapValues from 'lodash/mapValues';
7
7
  import pick from 'lodash/pick';
8
8
  import omit from 'lodash/omit';
9
+ import debounce from 'lodash/debounce';
9
10
  import IconCalendar from '@rsuite/icons/legacy/Calendar';
10
11
  import IconClockO from '@rsuite/icons/legacy/ClockO';
11
12
  import CalendarContainer from '../Calendar/CalendarContainer';
@@ -75,7 +76,8 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
75
76
  onSelect = props.onSelect,
76
77
  onToggleMonthDropdown = props.onToggleMonthDropdown,
77
78
  onToggleTimeDropdown = props.onToggleTimeDropdown,
78
- rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "limitStartYear", "locale", "menuClassName", "appearance", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "caretAs", "disabledDate", "disabledHours", "disabledMinutes", "disabledSeconds", "shouldDisableDate", "shouldDisableHour", "shouldDisableMinute", "shouldDisableSecond", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown"]);
79
+ onShortcutClick = props.onShortcutClick,
80
+ rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "limitStartYear", "locale", "menuClassName", "appearance", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "caretAs", "disabledDate", "disabledHours", "disabledMinutes", "disabledSeconds", "shouldDisableDate", "shouldDisableHour", "shouldDisableMinute", "shouldDisableSecond", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown", "onShortcutClick"]);
79
81
  var _useCustom = useCustom('DatePicker', overrideLocale),
80
82
  locale = _useCustom.locale,
81
83
  formatDate = _useCustom.formatDate,
@@ -174,10 +176,12 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
174
176
  /**
175
177
  * The callback triggered after the date in the shortcut area is clicked.
176
178
  */
177
- var handleShortcutPageDate = useCallback(function (value, closeOverlay, event) {
179
+ var handleShortcutPageDate = useCallback(function (range, closeOverlay, event) {
180
+ var value = range.value;
178
181
  updateValue(event, value, closeOverlay);
179
182
  handleDateChange(value, event);
180
- }, [handleDateChange, updateValue]);
183
+ onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, event);
184
+ }, [handleDateChange, onShortcutClick, updateValue]);
181
185
 
182
186
  /**
183
187
  * The callback triggered after clicking the OK button.
@@ -290,6 +294,14 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
290
294
  }
291
295
  setInputState('Initial');
292
296
  }, [inputState, calendarDate, updateValue]);
297
+ var handleInputBackspace = useCallback(function (event) {
298
+ var value = event.target.value;
299
+
300
+ // When the input box is empty, the date is cleared.
301
+ if (value === '') {
302
+ handleClean(event);
303
+ }
304
+ }, [handleClean]);
293
305
  var handleEntered = useCallback(function () {
294
306
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
295
307
  setActive(true);
@@ -380,14 +392,14 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
380
392
  calendarDate: calendarDate,
381
393
  locale: locale,
382
394
  disabledShortcut: disabledToolbarHandle,
383
- onClickShortcut: handleShortcutPageDate
395
+ onShortcutClick: handleShortcutPageDate
384
396
  }), /*#__PURE__*/React.createElement(React.Fragment, null, calendar, /*#__PURE__*/React.createElement(Toolbar, {
385
397
  locale: locale,
386
398
  ranges: bottomRanges,
387
399
  calendarDate: calendarDate,
388
400
  disabledOkBtn: isOKButtonDisabled,
389
401
  disabledShortcut: disabledToolbarHandle,
390
- onClickShortcut: handleShortcutPageDate,
402
+ onShortcutClick: handleShortcutPageDate,
391
403
  onOk: handleOK,
392
404
  hideOkBtn: oneTap
393
405
  }))));
@@ -445,6 +457,7 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
445
457
  onInputChange: handleInputChange,
446
458
  onInputBlur: handleInputPressEnd,
447
459
  onInputPressEnter: handleInputPressEnd,
460
+ onInputBackspace: debounce(handleInputBackspace, 10),
448
461
  onKeyDown: onPickerKeyDown,
449
462
  onClean: createChainedFunction(handleClean, onClean),
450
463
  cleanable: cleanable && !disabled,
@@ -1,13 +1,13 @@
1
1
  import React from 'react';
2
2
  import { StackProps } from '../Stack';
3
- import { RangeType } from './types';
3
+ import { InnerRange, RangeType } from './types';
4
4
  import { CalendarLocale } from '../locales';
5
5
  export interface PredefinedRangesProps<T = any, Shortcut = T> extends StackProps {
6
6
  ranges?: RangeType<Shortcut>[];
7
7
  calendarDate: T;
8
8
  locale: CalendarLocale;
9
9
  disabledShortcut?: (value: T) => boolean;
10
- onClickShortcut?: (value: Shortcut, closeOverlay: boolean, event: React.MouseEvent) => void;
10
+ onShortcutClick?: (range: InnerRange<Shortcut>, closeOverlay: boolean, event: React.MouseEvent) => void;
11
11
  }
12
12
  declare const PredefinedRanges: React.ForwardRefExoticComponent<PredefinedRangesProps<any, any> & React.RefAttributes<HTMLDivElement>>;
13
13
  export default PredefinedRanges;
@@ -9,11 +9,11 @@ import { getDefaultRanges, getRanges } from './utils';
9
9
  var PredefinedRanges = /*#__PURE__*/React.forwardRef(function (props, ref) {
10
10
  var className = props.className,
11
11
  disabledShortcut = props.disabledShortcut,
12
- onClickShortcut = props.onClickShortcut,
12
+ onShortcutClick = props.onShortcutClick,
13
13
  calendarDate = props.calendarDate,
14
14
  rangesProp = props.ranges,
15
15
  locale = props.locale,
16
- rest = _objectWithoutPropertiesLoose(props, ["className", "disabledShortcut", "onClickShortcut", "calendarDate", "ranges", "locale"]);
16
+ rest = _objectWithoutPropertiesLoose(props, ["className", "disabledShortcut", "onShortcutClick", "calendarDate", "ranges", "locale"]);
17
17
  var _useState = useState(getRanges(props)),
18
18
  ranges = _useState[0],
19
19
  setRanges = _useState[1];
@@ -36,17 +36,17 @@ var PredefinedRanges = /*#__PURE__*/React.forwardRef(function (props, ref) {
36
36
  ref: ref,
37
37
  alignItems: "flex-start",
38
38
  spacing: 4
39
- }, rest), ranges.map(function (_ref, index) {
40
- var value = _ref.value,
41
- closeOverlay = _ref.closeOverlay,
42
- label = _ref.label,
43
- rest = _objectWithoutPropertiesLoose(_ref, ["value", "closeOverlay", "label"]);
39
+ }, rest), ranges.map(function (range, index) {
40
+ var value = range.value,
41
+ closeOverlay = range.closeOverlay,
42
+ label = range.label,
43
+ rest = _objectWithoutPropertiesLoose(range, ["value", "closeOverlay", "label"]);
44
44
  var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
45
45
  var handleClickShortcut = function handleClickShortcut(event) {
46
46
  if (disabled) {
47
47
  return;
48
48
  }
49
- onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
49
+ onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, closeOverlay !== false ? true : false, event);
50
50
  };
51
51
  return /*#__PURE__*/React.createElement(Button, _extends({
52
52
  appearance: "link",
@@ -36,11 +36,11 @@ var Toolbar = /*#__PURE__*/React.forwardRef(function (props, ref) {
36
36
  disabledShortcut = props.disabledShortcut,
37
37
  hideOkBtn = props.hideOkBtn,
38
38
  onOk = props.onOk,
39
- onClickShortcut = props.onClickShortcut,
39
+ onShortcutClick = props.onShortcutClick,
40
40
  calendarDate = props.calendarDate,
41
41
  ranges = props.ranges,
42
42
  locale = props.locale,
43
- rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onClickShortcut", "calendarDate", "ranges", "locale"]);
43
+ rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onShortcutClick", "calendarDate", "ranges", "locale"]);
44
44
  var _useClassNames = useClassNames(classPrefix),
45
45
  merge = _useClassNames.merge,
46
46
  prefix = _useClassNames.prefix,
@@ -61,7 +61,7 @@ var Toolbar = /*#__PURE__*/React.forwardRef(function (props, ref) {
61
61
  calendarDate: calendarDate,
62
62
  locale: locale,
63
63
  disabledShortcut: disabledShortcut,
64
- onClickShortcut: onClickShortcut
64
+ onShortcutClick: onShortcutClick
65
65
  }), /*#__PURE__*/React.createElement("div", {
66
66
  className: prefix('right')
67
67
  }, /*#__PURE__*/React.createElement(SubmitButton, {
@@ -77,7 +77,7 @@ Toolbar.propTypes = {
77
77
  className: PropTypes.string,
78
78
  classPrefix: PropTypes.string,
79
79
  calendarDate: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.arrayOf(PropTypes.instanceOf(Date))]).isRequired,
80
- onClickShortcut: PropTypes.func,
80
+ onShortcutClick: PropTypes.func,
81
81
  onOk: PropTypes.func,
82
82
  disabledShortcut: PropTypes.func,
83
83
  disabledOkBtn: PropTypes.func,
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { FormControlBaseProps, PickerBaseProps } from '../@types/common';
3
3
  import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { DisabledDateFunction, RangeType, DateRange } from './types';
5
- export interface DateRangePickerProps extends PickerBaseProps, FormControlBaseProps<DateRange | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext'> {
5
+ export interface DateRangePickerProps extends PickerBaseProps, FormControlBaseProps<DateRange | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext' | 'loading'> {
6
6
  /** Predefined date ranges */
7
7
  ranges?: RangeType[];
8
8
  /** Format date */
@@ -43,6 +43,8 @@ export interface DateRangePickerProps extends PickerBaseProps, FormControlBasePr
43
43
  onSelect?: (date: Date, event?: React.SyntheticEvent) => void;
44
44
  /** Called after clicking the OK button */
45
45
  onOk?: (date: DateRange, event: React.SyntheticEvent) => void;
46
+ /** Called after clicking the shortcut button */
47
+ onShortcutClick?: (range: RangeType, event: React.MouseEvent) => void;
46
48
  /** Called when clean */
47
49
  onClean?: (event: React.MouseEvent) => void;
48
50
  /** Custom render value */
@@ -6,6 +6,7 @@ import isNil from 'lodash/isNil';
6
6
  import omit from 'lodash/omit';
7
7
  import partial from 'lodash/partial';
8
8
  import pick from 'lodash/pick';
9
+ import debounce from 'lodash/debounce';
9
10
  import PropTypes from 'prop-types';
10
11
  import React, { useCallback, useEffect, useRef, useState } from 'react';
11
12
  import { FormattedDate } from '../CustomProvider';
@@ -75,8 +76,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
75
76
  onOk = props.onOk,
76
77
  onOpen = props.onOpen,
77
78
  onSelect = props.onSelect,
79
+ onShortcutClick = props.onShortcutClick,
78
80
  renderTitle = props.renderTitle,
79
- rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "appearance", "editable", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "shouldDisableDate", "format", "hoverRange", "isoWeek", "limitEndYear", "limitStartYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "renderTitle"]);
81
+ rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "appearance", "editable", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "shouldDisableDate", "format", "hoverRange", "isoWeek", "limitEndYear", "limitStartYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "onShortcutClick", "renderTitle"]);
80
82
  var _useClassNames = useClassNames(classPrefix),
81
83
  merge = _useClassNames.merge,
82
84
  prefix = _useClassNames.prefix;
@@ -402,10 +404,11 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
402
404
  /**
403
405
  * Toolbar operation callback function
404
406
  */
405
- var handleShortcutPageDate = useCallback(function (value, closeOverlay, event) {
407
+ var handleShortcutPageDate = useCallback(function (range, closeOverlay, event) {
406
408
  if (closeOverlay === void 0) {
407
409
  closeOverlay = false;
408
410
  }
411
+ var value = range.value;
409
412
  updateCalendarDateRange({
410
413
  dateRange: value
411
414
  });
@@ -414,10 +417,11 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
414
417
  } else {
415
418
  setSelectedDates(value !== null && value !== void 0 ? value : []);
416
419
  }
420
+ onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, event);
417
421
 
418
422
  // End unfinished selections.
419
423
  setSelectedIdle(true);
420
- }, [handleValueUpdate, updateCalendarDateRange]);
424
+ }, [handleValueUpdate, onShortcutClick, updateCalendarDateRange]);
421
425
  var handleOK = useCallback(function (event) {
422
426
  handleValueUpdate(event, selectedDates);
423
427
  onOk === null || onOk === void 0 ? void 0 : onOk(selectedDates, event);
@@ -475,6 +479,14 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
475
479
  }
476
480
  setInputState('Initial');
477
481
  }, [handleValueUpdate, selectedDates, inputState]);
482
+ var handleInputBackspace = useCallback(function (event) {
483
+ var value = event.target.value;
484
+
485
+ // When the input box is empty, the date is cleared.
486
+ if (value === '') {
487
+ handleClean(event);
488
+ }
489
+ }, [handleClean]);
478
490
  var handleEnter = useCallback(function () {
479
491
  var nextCalendarDate;
480
492
  if (value && value.length) {
@@ -605,7 +617,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
605
617
  calendarDate: calendarDate,
606
618
  locale: locale,
607
619
  disabledShortcut: disabledShortcutButton,
608
- onClickShortcut: handleShortcutPageDate
620
+ onShortcutClick: handleShortcutPageDate
609
621
  }), /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
610
622
  className: prefix('daterange-content')
611
623
  }, /*#__PURE__*/React.createElement("div", {
@@ -627,7 +639,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
627
639
  disabledShortcut: disabledShortcutButton,
628
640
  hideOkBtn: oneTap,
629
641
  onOk: handleOK,
630
- onClickShortcut: handleShortcutPageDate,
642
+ onShortcutClick: handleShortcutPageDate,
631
643
  ranges: bottomRanges
632
644
  })))));
633
645
  };
@@ -664,6 +676,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
664
676
  onInputChange: handleInputChange,
665
677
  onInputBlur: handleInputPressEnd,
666
678
  onInputPressEnter: handleInputPressEnd,
679
+ onInputBackspace: debounce(handleInputBackspace, 10),
667
680
  onKeyDown: onPickerKeyDown,
668
681
  onClean: createChainedFunction(handleClean, onClean),
669
682
  cleanable: cleanable && !disabled,
@@ -2,9 +2,9 @@ import React from 'react';
2
2
  import { DATERANGE_DISABLED_TARGET } from '../utils/constants';
3
3
  export declare type ValueType = [Date?, Date?];
4
4
  export declare type DateRange = [Date, Date];
5
- export interface RangeType {
5
+ export interface RangeType<T = DateRange> {
6
6
  label: React.ReactNode;
7
- value: DateRange | ((value?: ValueType) => DateRange);
7
+ value: T | ((value?: T) => T);
8
8
  closeOverlay?: boolean;
9
9
  placement?: 'bottom' | 'left';
10
10
  }
@@ -26,7 +26,7 @@ interface InputItemDataType extends ItemDataType {
26
26
  create?: boolean;
27
27
  }
28
28
  export declare type ValueType = any;
29
- export interface InputPickerProps<T = ValueType> extends FormControlPickerProps<T, InputPickerLocale, InputItemDataType>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs'> {
29
+ export interface InputPickerProps<T = ValueType> extends FormControlPickerProps<T, InputPickerLocale, InputItemDataType>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'loading'> {
30
30
  tabIndex?: number;
31
31
  /** Settings can create new options */
32
32
  creatable?: boolean;
@@ -604,7 +604,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
604
604
  usedClassNamePropKeys = _usePickerClassName[1];
605
605
  var classes = merge(pickerClasses, (_merge = {}, _merge[prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["tag"])))] = multi, _merge[prefix(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["focused"])))] = open, _merge[prefix(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["disabled-options"])))] = disabledOptions, _merge));
606
606
  var searching = !!searchKeyword && open;
607
- var displaySearchInput = searchable && !disabled;
607
+ var displaySearchInput = searchable && !disabled && !rest.loading;
608
608
  var inputProps = multi ? {
609
609
  inputStyle: {
610
610
  maxWidth: maxWidth - 63
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerComponent } from '../Picker';
3
+ import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
5
5
  export declare type ValueType = (number | string)[];
6
- export interface MultiCascaderProps<T = ValueType> extends FormControlPickerProps<T, PickerLocale, ItemDataType> {
6
+ export interface MultiCascaderProps<T = ValueType> extends FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'loading'> {
7
7
  cascade?: boolean;
8
8
  /** A picker that can be counted */
9
9
  countable?: boolean;
@@ -15,6 +15,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
15
15
  readOnly?: boolean;
16
16
  plaintext?: boolean;
17
17
  tabIndex?: number;
18
+ /** Whether to display an loading indicator on toggle button */
18
19
  loading?: boolean;
19
20
  editable?: boolean;
20
21
  name?: string;
@@ -22,6 +23,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
22
23
  inputMask?: (string | RegExp)[];
23
24
  onInputChange?: (value: string, event: React.ChangeEvent) => void;
24
25
  onInputPressEnter?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
26
+ onInputBackspace?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
25
27
  onInputBlur?: (event: React.FocusEvent<HTMLElement>) => void;
26
28
  onInputFocus?: (event: React.FocusEvent<HTMLElement>) => void;
27
29
  placement?: TypeAttributes.Placement;
@@ -44,6 +44,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
44
44
  inputMask = _props$inputMask === void 0 ? defaultInputMask : _props$inputMask,
45
45
  onInputChange = props.onInputChange,
46
46
  onInputPressEnter = props.onInputPressEnter,
47
+ onInputBackspace = props.onInputBackspace,
47
48
  onInputBlur = props.onInputBlur,
48
49
  onInputFocus = props.onInputFocus,
49
50
  onClean = props.onClean,
@@ -56,7 +57,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
56
57
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
57
58
  label = props.label,
58
59
  name = props.name,
59
- rest = _objectWithoutPropertiesLoose(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "loading", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label", "name"]);
60
+ rest = _objectWithoutPropertiesLoose(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"]);
60
61
  var inputRef = useRef(null);
61
62
  var comboboxRef = useRef(null);
62
63
  var _useState = useState(false),
@@ -130,10 +131,15 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
130
131
  onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
131
132
  }, [onInputChange]);
132
133
  var handleInputKeyDown = useCallback(function (event) {
133
- if (editable && event.key === KEY_VALUES.ENTER) {
134
- onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
134
+ if (editable) {
135
+ if (event.key === KEY_VALUES.ENTER) {
136
+ onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
137
+ }
138
+ if (event.key === KEY_VALUES.BACKSPACE) {
139
+ onInputBackspace === null || onInputBackspace === void 0 ? void 0 : onInputBackspace(event);
140
+ }
135
141
  }
136
- }, [onInputPressEnter, editable]);
142
+ }, [editable, onInputPressEnter, onInputBackspace]);
137
143
  var renderInput = useCallback(function (ref, props) {
138
144
  return /*#__PURE__*/React.createElement("input", _extends({
139
145
  ref: mergeRefs(inputRef, ref),
@@ -354,6 +354,7 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
354
354
  active = props.active,
355
355
  readOnly = props.readOnly,
356
356
  disabled = props.disabled,
357
+ loading = props.loading,
357
358
  onExit = props.onExit,
358
359
  onOpen = props.onOpen,
359
360
  onClose = props.onClose,
@@ -380,7 +381,7 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
380
381
  }, [active, handleOpen, handleClose]);
381
382
  var onToggle = useCallback(function (event) {
382
383
  // Keyboard events should not be processed when readOnly and disabled are set.
383
- if (readOnly || disabled) {
384
+ if (readOnly || disabled || loading) {
384
385
  return;
385
386
  }
386
387
  if (event.target === (targetRef === null || targetRef === void 0 ? void 0 : targetRef.current)) {
@@ -426,7 +427,7 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
426
427
 
427
428
  // Native event callback
428
429
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
429
- }, [readOnly, disabled, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
430
+ }, [readOnly, disabled, loading, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
430
431
  return onToggle;
431
432
  };
432
433
  /**
@@ -6,8 +6,6 @@ import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
6
  export interface SelectProps<T> {
7
7
  /** Set group condition key in data */
8
8
  groupBy?: string;
9
- /** Whether to display an loading indicator on toggle button */
10
- loading?: boolean;
11
9
  /** Whether dispaly search input box */
12
10
  searchable?: boolean;
13
11
  /** Whether using virtualized list */
@@ -41,7 +39,7 @@ export interface MultipleSelectProps<T> extends Omit<SelectProps<T>, 'renderValu
41
39
  /** Custom render selected items */
42
40
  renderValue?: (value: T[], item: ItemDataType<T>[], selectedElement: React.ReactNode) => React.ReactNode;
43
41
  }
44
- export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, 'value' | 'defaultValue' | 'onChange'>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'label'> {
42
+ export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, 'value' | 'defaultValue' | 'onChange'>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'label' | 'loading'> {
45
43
  /** Initial value */
46
44
  defaultValue?: T;
47
45
  /** Current value of the component. Creates a controlled component */
@@ -3,7 +3,7 @@ import { PickerLocale } from '../locales';
3
3
  import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { TreeDragProps, TreeBaseProps } from '../Tree/Tree';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
- export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
6
+ export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs' | 'loading'> {
7
7
  /** The height of Dropdown */
8
8
  height?: number;
9
9
  /** Tree node cascade */
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import { useMemo } from 'react';
2
3
  import toaster from './toaster';
3
4
  import { useCustom } from '../utils';
4
5
 
@@ -9,24 +10,26 @@ import { useCustom } from '../utils';
9
10
  var useToaster = function useToaster() {
10
11
  var _useCustom = useCustom(),
11
12
  toasters = _useCustom.toasters;
12
- return {
13
- push: function push(message, options) {
14
- var _toasters$current;
15
- var customToaster = toasters === null || toasters === void 0 ? void 0 : (_toasters$current = toasters.current) === null || _toasters$current === void 0 ? void 0 : _toasters$current.get((options === null || options === void 0 ? void 0 : options.placement) || 'topCenter');
16
- return customToaster ? customToaster.push(message, options) : toaster.push(message, options);
17
- },
18
- remove: function remove(key) {
19
- toasters ? Array.from(toasters.current).forEach(function (_ref) {
20
- var c = _ref[1];
21
- return c === null || c === void 0 ? void 0 : c.remove(key);
22
- }) : toaster.remove(key);
23
- },
24
- clear: function clear() {
25
- toasters ? Array.from(toasters.current).forEach(function (_ref2) {
26
- var c = _ref2[1];
27
- return c === null || c === void 0 ? void 0 : c.clear();
28
- }) : toaster.clear();
29
- }
30
- };
13
+ return useMemo(function () {
14
+ return {
15
+ push: function push(message, options) {
16
+ var _toasters$current;
17
+ var customToaster = toasters === null || toasters === void 0 ? void 0 : (_toasters$current = toasters.current) === null || _toasters$current === void 0 ? void 0 : _toasters$current.get((options === null || options === void 0 ? void 0 : options.placement) || 'topCenter');
18
+ return customToaster ? customToaster.push(message, options) : toaster.push(message, options);
19
+ },
20
+ remove: function remove(key) {
21
+ toasters ? Array.from(toasters.current).forEach(function (_ref) {
22
+ var c = _ref[1];
23
+ return c === null || c === void 0 ? void 0 : c.remove(key);
24
+ }) : toaster.remove(key);
25
+ },
26
+ clear: function clear() {
27
+ toasters ? Array.from(toasters.current).forEach(function (_ref2) {
28
+ var c = _ref2[1];
29
+ return c === null || c === void 0 ? void 0 : c.clear();
30
+ }) : toaster.clear();
31
+ }
32
+ };
33
+ }, [toasters]);
31
34
  };
32
35
  export default useToaster;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.42.0",
3
+ "version": "5.44.0",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -38,7 +38,7 @@
38
38
  "prop-types": "^15.8.1",
39
39
  "react-use-set": "^1.0.0",
40
40
  "react-window": "^1.8.8",
41
- "rsuite-table": "^5.15.0",
41
+ "rsuite-table": "^5.16.0",
42
42
  "schema-typed": "^2.1.3"
43
43
  },
44
44
  "peerDependencies": {