rsuite 5.43.0 → 5.45.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 (90) hide show
  1. package/Button/styles/index.less +1 -1
  2. package/CHANGELOG.md +24 -0
  3. package/Drawer/styles/index.less +1 -1
  4. package/Modal/styles/index.less +24 -2
  5. package/Picker/styles/index.less +0 -4
  6. package/cjs/Cascader/Cascader.d.ts +2 -2
  7. package/cjs/CheckPicker/CheckPicker.d.ts +1 -1
  8. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +1 -1
  9. package/cjs/CheckTreePicker/CheckTreePicker.js +2 -2
  10. package/cjs/DatePicker/DatePicker.d.ts +3 -1
  11. package/cjs/DatePicker/DatePicker.js +18 -5
  12. package/cjs/DatePicker/PredefinedRanges.d.ts +2 -2
  13. package/cjs/DatePicker/PredefinedRanges.js +8 -8
  14. package/cjs/DatePicker/Toolbar.js +4 -4
  15. package/cjs/DateRangePicker/DateRangePicker.d.ts +3 -1
  16. package/cjs/DateRangePicker/DateRangePicker.js +18 -5
  17. package/cjs/DateRangePicker/types.d.ts +2 -2
  18. package/cjs/Drawer/Drawer.d.ts +2 -0
  19. package/cjs/Drawer/Drawer.js +16 -5
  20. package/cjs/Drawer/DrawerContext.d.ts +9 -0
  21. package/cjs/Drawer/DrawerContext.js +10 -0
  22. package/cjs/FormControl/FormControl.js +1 -1
  23. package/cjs/InputPicker/InputPicker.d.ts +1 -1
  24. package/cjs/InputPicker/InputPicker.js +1 -1
  25. package/cjs/Modal/Modal.d.ts +2 -4
  26. package/cjs/Modal/Modal.js +24 -13
  27. package/cjs/Modal/ModalBody.js +14 -8
  28. package/cjs/Modal/ModalContext.d.ts +1 -3
  29. package/cjs/Modal/ModalHeader.js +9 -6
  30. package/cjs/Modal/index.d.ts +1 -0
  31. package/cjs/Modal/utils.d.ts +4 -1
  32. package/cjs/Modal/utils.js +9 -4
  33. package/cjs/MultiCascader/MultiCascader.d.ts +2 -2
  34. package/cjs/Picker/PickerToggle.d.ts +2 -0
  35. package/cjs/Picker/PickerToggle.js +10 -4
  36. package/cjs/Picker/utils.js +3 -2
  37. package/cjs/SelectPicker/SelectPicker.d.ts +1 -3
  38. package/cjs/TreePicker/TreePicker.d.ts +1 -1
  39. package/cjs/toaster/useToaster.js +22 -19
  40. package/dist/rsuite-no-reset-rtl.css +33 -7
  41. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  42. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  43. package/dist/rsuite-no-reset.css +33 -7
  44. package/dist/rsuite-no-reset.min.css +1 -1
  45. package/dist/rsuite-no-reset.min.css.map +1 -1
  46. package/dist/rsuite-rtl.css +33 -7
  47. package/dist/rsuite-rtl.min.css +1 -1
  48. package/dist/rsuite-rtl.min.css.map +1 -1
  49. package/dist/rsuite.css +33 -7
  50. package/dist/rsuite.js +45 -23
  51. package/dist/rsuite.js.map +1 -1
  52. package/dist/rsuite.min.css +1 -1
  53. package/dist/rsuite.min.css.map +1 -1
  54. package/dist/rsuite.min.js +1 -1
  55. package/dist/rsuite.min.js.map +1 -1
  56. package/esm/Cascader/Cascader.d.ts +2 -2
  57. package/esm/CheckPicker/CheckPicker.d.ts +1 -1
  58. package/esm/CheckTreePicker/CheckTreePicker.d.ts +1 -1
  59. package/esm/CheckTreePicker/CheckTreePicker.js +2 -2
  60. package/esm/DatePicker/DatePicker.d.ts +3 -1
  61. package/esm/DatePicker/DatePicker.js +18 -5
  62. package/esm/DatePicker/PredefinedRanges.d.ts +2 -2
  63. package/esm/DatePicker/PredefinedRanges.js +8 -8
  64. package/esm/DatePicker/Toolbar.js +4 -4
  65. package/esm/DateRangePicker/DateRangePicker.d.ts +3 -1
  66. package/esm/DateRangePicker/DateRangePicker.js +18 -5
  67. package/esm/DateRangePicker/types.d.ts +2 -2
  68. package/esm/Drawer/Drawer.d.ts +2 -0
  69. package/esm/Drawer/Drawer.js +15 -5
  70. package/esm/Drawer/DrawerContext.d.ts +9 -0
  71. package/esm/Drawer/DrawerContext.js +4 -0
  72. package/esm/FormControl/FormControl.js +1 -1
  73. package/esm/InputPicker/InputPicker.d.ts +1 -1
  74. package/esm/InputPicker/InputPicker.js +1 -1
  75. package/esm/Modal/Modal.d.ts +2 -4
  76. package/esm/Modal/Modal.js +25 -14
  77. package/esm/Modal/ModalBody.js +14 -8
  78. package/esm/Modal/ModalContext.d.ts +1 -3
  79. package/esm/Modal/ModalHeader.js +9 -6
  80. package/esm/Modal/index.d.ts +1 -0
  81. package/esm/Modal/utils.d.ts +4 -1
  82. package/esm/Modal/utils.js +9 -4
  83. package/esm/MultiCascader/MultiCascader.d.ts +2 -2
  84. package/esm/Picker/PickerToggle.d.ts +2 -0
  85. package/esm/Picker/PickerToggle.js +10 -4
  86. package/esm/Picker/utils.js +3 -2
  87. package/esm/SelectPicker/SelectPicker.d.ts +1 -3
  88. package/esm/TreePicker/TreePicker.d.ts +1 -1
  89. package/esm/toaster/useToaster.js +22 -19
  90. package/package.json +2 -2
@@ -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
  }
@@ -4,6 +4,8 @@ import { TypeAttributes, RsRefForwardingComponent } from '../@types/common';
4
4
  export interface DrawerProps extends ModalProps {
5
5
  /** The placement of Drawer */
6
6
  placement?: TypeAttributes.Placement4;
7
+ /** Custom close button */
8
+ closeButton?: React.ReactNode | boolean;
7
9
  }
8
10
  declare const DrawerBody: RsRefForwardingComponent<'div', ModalBodyProps>;
9
11
  declare const DrawerHeader: RsRefForwardingComponent<'div', ModalHeaderProps>;
@@ -1,12 +1,13 @@
1
1
  'use client';
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
- import React from 'react';
4
+ import React, { useMemo } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import Slide from '../Animation/Slide';
7
7
  import Modal from '../Modal';
8
8
  import { useClassNames } from '../utils';
9
9
  import deprecateComponent from '../utils/deprecateComponent';
10
+ import DrawerContext from './DrawerContext';
10
11
  var DrawerBody = /*#__PURE__*/React.forwardRef(function (props, ref) {
11
12
  return /*#__PURE__*/React.createElement(Modal.Body, _extends({
12
13
  classPrefix: "drawer-body"
@@ -50,7 +51,9 @@ var Drawer = /*#__PURE__*/React.forwardRef(function (props, ref) {
50
51
  classPrefix = _props$classPrefix === void 0 ? 'drawer' : _props$classPrefix,
51
52
  _props$animation = props.animation,
52
53
  animation = _props$animation === void 0 ? Slide : _props$animation,
53
- rest = _objectWithoutPropertiesLoose(props, ["className", "placement", "classPrefix", "animation"]);
54
+ _props$closeButton = props.closeButton,
55
+ closeButton = _props$closeButton === void 0 ? true : _props$closeButton,
56
+ rest = _objectWithoutPropertiesLoose(props, ["className", "placement", "classPrefix", "animation", "closeButton"]);
54
57
  var _useClassNames = useClassNames(classPrefix),
55
58
  merge = _useClassNames.merge,
56
59
  prefix = _useClassNames.prefix;
@@ -58,14 +61,21 @@ var Drawer = /*#__PURE__*/React.forwardRef(function (props, ref) {
58
61
  var animationProps = {
59
62
  placement: placement
60
63
  };
61
- return /*#__PURE__*/React.createElement(Modal, _extends({}, rest, {
64
+ var contextValue = useMemo(function () {
65
+ return {
66
+ closeButton: closeButton,
67
+ isDrawer: true
68
+ };
69
+ }, [closeButton]);
70
+ return /*#__PURE__*/React.createElement(DrawerContext.Provider, {
71
+ value: contextValue
72
+ }, /*#__PURE__*/React.createElement(Modal, _extends({}, rest, {
62
73
  ref: ref,
63
- drawer: true,
64
74
  classPrefix: classPrefix,
65
75
  className: classes,
66
76
  animation: animation,
67
77
  animationProps: animationProps
68
- }));
78
+ })));
69
79
  });
70
80
  DrawerBody.displayName = 'DrawerBody';
71
81
  DrawerHeader.displayName = 'DrawerHeader';
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export interface DrawerContextProps {
3
+ /** Custom close button */
4
+ closeButton?: React.ReactNode | boolean;
5
+ /** Render Modal as Drawer */
6
+ isDrawer: boolean;
7
+ }
8
+ declare const DrawerContext: React.Context<DrawerContextProps | null>;
9
+ export default DrawerContext;
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+ import React from 'react';
3
+ var DrawerContext = /*#__PURE__*/React.createContext(null);
4
+ export default DrawerContext;
@@ -130,7 +130,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
130
130
  if (AccepterComponent === Toggle) {
131
131
  valueKey = 'checked';
132
132
  }
133
- var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = val !== null && val !== void 0 ? val : defaultValue, _accepterProps);
133
+ var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = val === undefined ? defaultValue : val, _accepterProps);
134
134
  return /*#__PURE__*/React.createElement(Component, {
135
135
  className: classes,
136
136
  ref: ref
@@ -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
@@ -5,8 +5,8 @@ import ModalBody from './ModalBody';
5
5
  import ModalHeader from './ModalHeader';
6
6
  import ModalTitle from './ModalTitle';
7
7
  import ModalFooter from './ModalFooter';
8
- import { TypeAttributes, RsRefForwardingComponent } from '../@types/common';
9
- export declare type ModalSize = TypeAttributes.Size | 'full';
8
+ import { ModalSize } from './utils';
9
+ import { RsRefForwardingComponent } from '../@types/common';
10
10
  export interface ModalProps extends BaseModalProps, Pick<React.HTMLAttributes<HTMLElement>, 'role' | 'id' | 'aria-labelledby' | 'aria-describedby'> {
11
11
  /** A modal can have different sizes */
12
12
  size?: ModalSize;
@@ -27,8 +27,6 @@ export interface ModalProps extends BaseModalProps, Pick<React.HTMLAttributes<HT
27
27
  dialogAs?: React.ElementType;
28
28
  /** Automatically sets the height when the body content is too long. */
29
29
  overflow?: boolean;
30
- /** Render Modal as Drawer */
31
- drawer?: boolean;
32
30
  }
33
31
  interface ModalComponent extends RsRefForwardingComponent<'div', ModalProps> {
34
32
  Body: typeof ModalBody;
@@ -3,7 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
5
  var _templateObject, _templateObject2;
6
- import React, { useRef, useMemo, useState, useCallback } from 'react';
6
+ import React, { useRef, useMemo, useState, useCallback, useContext } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import pick from 'lodash/pick';
9
9
  import on from 'dom-lib/on';
@@ -20,8 +20,10 @@ import ModalFooter from './ModalFooter';
20
20
  import { useBodyStyles } from './utils';
21
21
  import useUniqueId from '../utils/useUniqueId';
22
22
  import deprecatePropType from '../utils/deprecatePropType';
23
+ import DrawerContext from '../Drawer/DrawerContext';
23
24
  var modalSizes = ['xs', 'sm', 'md', 'lg', 'full'];
24
25
  var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
26
+ var _prefix;
25
27
  var className = props.className,
26
28
  children = props.children,
27
29
  _props$classPrefix = props.classPrefix,
@@ -44,8 +46,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
44
46
  animationTimeout = _props$animationTimeo === void 0 ? 300 : _props$animationTimeo,
45
47
  _props$overflow = props.overflow,
46
48
  overflow = _props$overflow === void 0 ? true : _props$overflow,
47
- _props$drawer = props.drawer,
48
- drawer = _props$drawer === void 0 ? false : _props$drawer,
49
49
  onClose = props.onClose,
50
50
  onEntered = props.onEntered,
51
51
  onEntering = props.onEntering,
@@ -55,7 +55,7 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
55
55
  idProp = props.id,
56
56
  ariaLabelledby = props['aria-labelledby'],
57
57
  ariaDescribedby = props['aria-describedby'],
58
- rest = _objectWithoutPropertiesLoose(props, ["className", "children", "classPrefix", "dialogClassName", "backdropClassName", "backdrop", "dialogStyle", "animation", "open", "size", "full", "dialogAs", "animationProps", "animationTimeout", "overflow", "drawer", "onClose", "onEntered", "onEntering", "onExited", "role", "id", "aria-labelledby", "aria-describedby"]);
58
+ rest = _objectWithoutPropertiesLoose(props, ["className", "children", "classPrefix", "dialogClassName", "backdropClassName", "backdrop", "dialogStyle", "animation", "open", "size", "full", "dialogAs", "animationProps", "animationTimeout", "overflow", "onClose", "onEntered", "onEntering", "onExited", "role", "id", "aria-labelledby", "aria-describedby"]);
59
59
  var inClass = {
60
60
  in: open && !animation
61
61
  };
@@ -65,17 +65,21 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
65
65
  var _useState = useState(false),
66
66
  shake = _useState[0],
67
67
  setShake = _useState[1];
68
- var classes = merge(className, prefix(size, {
68
+ var classes = merge(className, prefix((_prefix = {
69
69
  full: full
70
- }));
70
+ }, _prefix[size] = modalSizes.includes(size), _prefix)));
71
71
  var dialogRef = useRef(null);
72
72
  var transitionEndListener = useRef();
73
73
 
74
- // The style of the Modal body will be updated with the size of the window or container.
74
+ // Render Modal as Drawer
75
+ var _ref = useContext(DrawerContext) || {},
76
+ _ref$isDrawer = _ref.isDrawer,
77
+ isDrawer = _ref$isDrawer === void 0 ? false : _ref$isDrawer; // The style of the Modal body will be updated with the size of the window or container.
75
78
  var _useBodyStyles = useBodyStyles(dialogRef, {
76
79
  overflow: overflow,
77
- drawer: drawer,
78
- prefix: prefix
80
+ drawer: isDrawer,
81
+ prefix: prefix,
82
+ size: size
79
83
  }),
80
84
  bodyStyles = _useBodyStyles[0],
81
85
  onChangeBodyStyles = _useBodyStyles[1],
@@ -87,10 +91,9 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
87
91
  onModalClose: onClose,
88
92
  getBodyStyles: function getBodyStyles() {
89
93
  return bodyStyles;
90
- },
91
- isDrawer: drawer
94
+ }
92
95
  };
93
- }, [dialogId, onClose, bodyStyles, drawer]);
96
+ }, [dialogId, onClose, bodyStyles]);
94
97
  var handleExited = useCallback(function (node) {
95
98
  var _transitionEndListene;
96
99
  onExited === null || onExited === void 0 ? void 0 : onExited(node);
@@ -144,6 +147,12 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
144
147
  var _transitionEndListene2;
145
148
  (_transitionEndListene2 = transitionEndListener.current) === null || _transitionEndListene2 === void 0 ? void 0 : _transitionEndListene2.off();
146
149
  });
150
+ var sizeKey = 'width';
151
+ if (isDrawer) {
152
+ var _ref2 = animationProps || {},
153
+ placement = _ref2.placement; // The width or height of the drawer depends on the placement.
154
+ sizeKey = placement === 'top' || placement === 'bottom' ? 'height' : 'width';
155
+ }
147
156
  return /*#__PURE__*/React.createElement(ModalContext.Provider, {
148
157
  value: modalContextValue
149
158
  }, /*#__PURE__*/React.createElement(BaseModal, _extends({}, rest, {
@@ -167,13 +176,15 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
167
176
  onClick: backdrop ? handleBackdropClick : undefined,
168
177
  onMouseDown: handleMouseDown
169
178
  }), function (transitionProps, transitionRef) {
179
+ var _ref3;
170
180
  var transitionClassName = transitionProps.className,
171
181
  transitionRest = _objectWithoutPropertiesLoose(transitionProps, ["className"]);
172
182
  return /*#__PURE__*/React.createElement(Dialog, _extends({
173
183
  role: role,
174
184
  id: dialogId,
175
185
  "aria-labelledby": ariaLabelledby !== null && ariaLabelledby !== void 0 ? ariaLabelledby : dialogId + "-title",
176
- "aria-describedby": ariaDescribedby
186
+ "aria-describedby": ariaDescribedby,
187
+ style: (_ref3 = {}, _ref3[sizeKey] = modalSizes.includes(size) ? undefined : size, _ref3)
177
188
  }, transitionRest, pick(rest, Object.keys(modalDialogPropTypes)), {
178
189
  ref: mergeRefs(dialogRef, transitionRef),
179
190
  classPrefix: classPrefix,
@@ -196,7 +207,7 @@ Modal.propTypes = _extends({}, modalPropTypes, {
196
207
  animationTimeout: PropTypes.number,
197
208
  classPrefix: PropTypes.string,
198
209
  dialogClassName: PropTypes.string,
199
- size: PropTypes.oneOf(modalSizes),
210
+ size: PropTypes.oneOfType([PropTypes.oneOf(modalSizes), PropTypes.number, PropTypes.string]),
200
211
  dialogStyle: PropTypes.object,
201
212
  dialogAs: PropTypes.elementType,
202
213
  full: deprecatePropType(PropTypes.bool, 'Use size="full" instead.'),