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
@@ -25,9 +25,11 @@ var _ModalFooter = _interopRequireDefault(require("./ModalFooter"));
25
25
  var _utils2 = require("./utils");
26
26
  var _useUniqueId = _interopRequireDefault(require("../utils/useUniqueId"));
27
27
  var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
28
+ var _DrawerContext = _interopRequireDefault(require("../Drawer/DrawerContext"));
28
29
  var _templateObject, _templateObject2;
29
30
  var modalSizes = ['xs', 'sm', 'md', 'lg', 'full'];
30
31
  var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
32
+ var _prefix;
31
33
  var className = props.className,
32
34
  children = props.children,
33
35
  _props$classPrefix = props.classPrefix,
@@ -50,8 +52,6 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
50
52
  animationTimeout = _props$animationTimeo === void 0 ? 300 : _props$animationTimeo,
51
53
  _props$overflow = props.overflow,
52
54
  overflow = _props$overflow === void 0 ? true : _props$overflow,
53
- _props$drawer = props.drawer,
54
- drawer = _props$drawer === void 0 ? false : _props$drawer,
55
55
  onClose = props.onClose,
56
56
  onEntered = props.onEntered,
57
57
  onEntering = props.onEntering,
@@ -61,7 +61,7 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
61
61
  idProp = props.id,
62
62
  ariaLabelledby = props['aria-labelledby'],
63
63
  ariaDescribedby = props['aria-describedby'],
64
- rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
64
+ rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
65
65
  var inClass = {
66
66
  in: open && !animation
67
67
  };
@@ -71,17 +71,21 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
71
71
  var _useState = (0, _react.useState)(false),
72
72
  shake = _useState[0],
73
73
  setShake = _useState[1];
74
- var classes = merge(className, prefix(size, {
74
+ var classes = merge(className, prefix((_prefix = {
75
75
  full: full
76
- }));
76
+ }, _prefix[size] = modalSizes.includes(size), _prefix)));
77
77
  var dialogRef = (0, _react.useRef)(null);
78
78
  var transitionEndListener = (0, _react.useRef)();
79
79
 
80
- // The style of the Modal body will be updated with the size of the window or container.
80
+ // Render Modal as Drawer
81
+ var _ref = (0, _react.useContext)(_DrawerContext.default) || {},
82
+ _ref$isDrawer = _ref.isDrawer,
83
+ 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.
81
84
  var _useBodyStyles = (0, _utils2.useBodyStyles)(dialogRef, {
82
85
  overflow: overflow,
83
- drawer: drawer,
84
- prefix: prefix
86
+ drawer: isDrawer,
87
+ prefix: prefix,
88
+ size: size
85
89
  }),
86
90
  bodyStyles = _useBodyStyles[0],
87
91
  onChangeBodyStyles = _useBodyStyles[1],
@@ -93,10 +97,9 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
93
97
  onModalClose: onClose,
94
98
  getBodyStyles: function getBodyStyles() {
95
99
  return bodyStyles;
96
- },
97
- isDrawer: drawer
100
+ }
98
101
  };
99
- }, [dialogId, onClose, bodyStyles, drawer]);
102
+ }, [dialogId, onClose, bodyStyles]);
100
103
  var handleExited = (0, _react.useCallback)(function (node) {
101
104
  var _transitionEndListene;
102
105
  onExited === null || onExited === void 0 ? void 0 : onExited(node);
@@ -150,6 +153,12 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
150
153
  var _transitionEndListene2;
151
154
  (_transitionEndListene2 = transitionEndListener.current) === null || _transitionEndListene2 === void 0 ? void 0 : _transitionEndListene2.off();
152
155
  });
156
+ var sizeKey = 'width';
157
+ if (isDrawer) {
158
+ var _ref2 = animationProps || {},
159
+ placement = _ref2.placement; // The width or height of the drawer depends on the placement.
160
+ sizeKey = placement === 'top' || placement === 'bottom' ? 'height' : 'width';
161
+ }
153
162
  return /*#__PURE__*/_react.default.createElement(_ModalContext.ModalContext.Provider, {
154
163
  value: modalContextValue
155
164
  }, /*#__PURE__*/_react.default.createElement(_Modal.default, (0, _extends2.default)({}, rest, {
@@ -173,13 +182,15 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
173
182
  onClick: backdrop ? handleBackdropClick : undefined,
174
183
  onMouseDown: handleMouseDown
175
184
  }), function (transitionProps, transitionRef) {
185
+ var _ref3;
176
186
  var transitionClassName = transitionProps.className,
177
187
  transitionRest = (0, _objectWithoutPropertiesLoose2.default)(transitionProps, ["className"]);
178
188
  return /*#__PURE__*/_react.default.createElement(Dialog, (0, _extends2.default)({
179
189
  role: role,
180
190
  id: dialogId,
181
191
  "aria-labelledby": ariaLabelledby !== null && ariaLabelledby !== void 0 ? ariaLabelledby : dialogId + "-title",
182
- "aria-describedby": ariaDescribedby
192
+ "aria-describedby": ariaDescribedby,
193
+ style: (_ref3 = {}, _ref3[sizeKey] = modalSizes.includes(size) ? undefined : size, _ref3)
183
194
  }, transitionRest, (0, _pick.default)(rest, Object.keys(_ModalDialog.modalDialogPropTypes)), {
184
195
  ref: (0, _utils.mergeRefs)(dialogRef, transitionRef),
185
196
  classPrefix: classPrefix,
@@ -202,7 +213,7 @@ Modal.propTypes = (0, _extends2.default)({}, _Modal.modalPropTypes, {
202
213
  animationTimeout: _propTypes.default.number,
203
214
  classPrefix: _propTypes.default.string,
204
215
  dialogClassName: _propTypes.default.string,
205
- size: _propTypes.default.oneOf(modalSizes),
216
+ size: _propTypes.default.oneOfType([_propTypes.default.oneOf(modalSizes), _propTypes.default.number, _propTypes.default.string]),
206
217
  dialogStyle: _propTypes.default.object,
207
218
  dialogAs: _propTypes.default.elementType,
208
219
  full: (0, _deprecatePropType.default)(_propTypes.default.bool, 'Use size="full" instead.'),
@@ -13,8 +13,9 @@ var _utils = require("../utils");
13
13
  var _ModalContext = require("./ModalContext");
14
14
  var _IconButton = _interopRequireDefault(require("../IconButton"));
15
15
  var _Close = _interopRequireDefault(require("@rsuite/icons/Close"));
16
+ var _DrawerContext = _interopRequireDefault(require("../Drawer/DrawerContext"));
16
17
  var ModalBody = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
17
- var _context$getBodyStyle;
18
+ var _context$getBodyStyle, _useContext;
18
19
  var _props$as = props.as,
19
20
  Component = _props$as === void 0 ? 'div' : _props$as,
20
21
  _props$classPrefix = props.classPrefix,
@@ -30,17 +31,22 @@ var ModalBody = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
30
31
  var classes = merge(className, withClassPrefix());
31
32
  var context = (0, _react.useContext)(_ModalContext.ModalContext);
32
33
  var bodyStyles = context === null || context === void 0 ? void 0 : (_context$getBodyStyle = context.getBodyStyles) === null || _context$getBodyStyle === void 0 ? void 0 : _context$getBodyStyle.call(context);
34
+ var closeButton = (_useContext = (0, _react.useContext)(_DrawerContext.default)) === null || _useContext === void 0 ? void 0 : _useContext.closeButton;
35
+ var buttonElement = null;
36
+ if (closeButton) {
37
+ buttonElement = typeof closeButton === 'boolean' ? /*#__PURE__*/_react.default.createElement(_IconButton.default, {
38
+ icon: /*#__PURE__*/_react.default.createElement(_Close.default, null),
39
+ appearance: "subtle",
40
+ size: "sm",
41
+ className: prefix('close'),
42
+ onClick: context === null || context === void 0 ? void 0 : context.onModalClose
43
+ }) : closeButton;
44
+ }
33
45
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
34
46
  ref: ref,
35
47
  style: (0, _extends2.default)({}, bodyStyles, style),
36
48
  className: classes
37
- }), (context === null || context === void 0 ? void 0 : context.isDrawer) && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
38
- icon: /*#__PURE__*/_react.default.createElement(_Close.default, null),
39
- appearance: "subtle",
40
- size: "sm",
41
- className: prefix('close'),
42
- onClick: context === null || context === void 0 ? void 0 : context.onModalClose
43
- }), children);
49
+ }), buttonElement, children);
44
50
  });
45
51
  ModalBody.displayName = 'ModalBody';
46
52
  ModalBody.propTypes = {
@@ -5,8 +5,6 @@ export interface ModalContextProps {
5
5
  /** Pass the close event callback to the header close button. */
6
6
  onModalClose?: (event: React.MouseEvent<Element, MouseEvent>) => void;
7
7
  /** Pass the latest style to body. */
8
- getBodyStyles?: () => React.CSSProperties;
9
- /** Whether this Modal is a Drawer */
10
- isDrawer: boolean;
8
+ getBodyStyles?: () => React.CSSProperties | null;
11
9
  }
12
10
  export declare const ModalContext: React.Context<ModalContextProps | null>;
@@ -14,7 +14,9 @@ var _ModalContext = require("./ModalContext");
14
14
  var _CloseButton = _interopRequireDefault(require("../CloseButton"));
15
15
  var _Close = _interopRequireDefault(require("@rsuite/icons/Close"));
16
16
  var _IconButton = _interopRequireDefault(require("../IconButton"));
17
+ var _DrawerContext = _interopRequireDefault(require("../Drawer/DrawerContext"));
17
18
  var ModalHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
19
+ var _useContext, _useContext2;
18
20
  var _props$as = props.as,
19
21
  Component = _props$as === void 0 ? 'div' : _props$as,
20
22
  _props$classPrefix = props.classPrefix,
@@ -30,16 +32,17 @@ var ModalHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
30
32
  withClassPrefix = _useClassNames.withClassPrefix,
31
33
  prefix = _useClassNames.prefix;
32
34
  var classes = merge(className, withClassPrefix());
33
- var context = (0, _react.useContext)(_ModalContext.ModalContext);
34
- var buttonElement = !(context !== null && context !== void 0 && context.isDrawer) ? /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
35
- className: prefix('close'),
36
- onClick: (0, _utils.createChainedFunction)(onClose, context === null || context === void 0 ? void 0 : context.onModalClose)
37
- }) : /*#__PURE__*/_react.default.createElement(_IconButton.default, {
35
+ var onModalClose = (_useContext = (0, _react.useContext)(_ModalContext.ModalContext)) === null || _useContext === void 0 ? void 0 : _useContext.onModalClose;
36
+ var isDrawer = (_useContext2 = (0, _react.useContext)(_DrawerContext.default)) === null || _useContext2 === void 0 ? void 0 : _useContext2.isDrawer;
37
+ var buttonElement = isDrawer ? /*#__PURE__*/_react.default.createElement(_IconButton.default, {
38
38
  icon: /*#__PURE__*/_react.default.createElement(_Close.default, null),
39
39
  appearance: "subtle",
40
40
  size: "sm",
41
41
  className: prefix('close'),
42
- onClick: (0, _utils.createChainedFunction)(onClose, context === null || context === void 0 ? void 0 : context.onModalClose)
42
+ onClick: (0, _utils.createChainedFunction)(onClose, onModalClose)
43
+ }) : /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
44
+ className: prefix('close'),
45
+ onClick: (0, _utils.createChainedFunction)(onClose, onModalClose)
43
46
  });
44
47
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
45
48
  ref: ref,
@@ -5,4 +5,5 @@ export type { ModalDialogProps } from './ModalDialog';
5
5
  export type { ModalFooterProps } from './ModalFooter';
6
6
  export type { ModalHeaderProps } from './ModalHeader';
7
7
  export type { ModalTitleProps } from './ModalTitle';
8
+ export type { ModalSize } from './utils';
8
9
  export default Modal;
@@ -1,6 +1,9 @@
1
1
  /// <reference types="react" />
2
+ import { TypeAttributes } from '../@types/common';
3
+ export declare type ModalSize = TypeAttributes.Size | 'full' | number | string;
2
4
  export declare const useBodyStyles: (ref: React.RefObject<HTMLElement>, options: {
3
5
  overflow: boolean;
4
6
  drawer: boolean;
7
+ size?: ModalSize | undefined;
5
8
  prefix: (...classes: any) => string;
6
- }) => [import("react").CSSProperties, (entering?: boolean) => void, () => void];
9
+ }) => [import("react").CSSProperties | null, (entering?: boolean) => void, () => void];
@@ -14,7 +14,8 @@ var useBodyStyles = function useBodyStyles(ref, options) {
14
14
  setBodyStyles = _useState[1];
15
15
  var overflow = options.overflow,
16
16
  drawer = options.drawer,
17
- prefix = options.prefix;
17
+ prefix = options.prefix,
18
+ size = options.size;
18
19
  var windowResizeListener = (0, _react.useRef)();
19
20
  var contentElement = (0, _react.useRef)(null);
20
21
  var contentElementResizeObserver = (0, _react.useRef)();
@@ -51,7 +52,11 @@ var useBodyStyles = function useBodyStyles(ref, options) {
51
52
  contentElementResizeObserver.current = null;
52
53
  }, []);
53
54
  var onChangeBodyStyles = (0, _react.useCallback)(function (entering) {
54
- if (overflow && !drawer && ref.current) {
55
+ if (drawer || size === 'full') {
56
+ setBodyStyles(null);
57
+ return;
58
+ }
59
+ if (overflow && ref.current) {
55
60
  updateBodyStyles(undefined, entering);
56
61
  contentElement.current = ref.current.querySelector("." + prefix('content'));
57
62
  if (!windowResizeListener.current) {
@@ -64,11 +69,11 @@ var useBodyStyles = function useBodyStyles(ref, options) {
64
69
  contentElementResizeObserver.current.observe(contentElement.current);
65
70
  }
66
71
  }
67
- }, [drawer, overflow, prefix, ref, updateBodyStyles]);
72
+ }, [drawer, overflow, prefix, ref, size, updateBodyStyles]);
68
73
  (0, _react.useEffect)(function () {
69
74
  return onDestroyEvents;
70
75
  // eslint-disable-next-line react-hooks/exhaustive-deps
71
76
  }, []);
72
- return [overflow ? bodyStyles : {}, onChangeBodyStyles, onDestroyEvents];
77
+ return [overflow ? bodyStyles : null, onChangeBodyStyles, onDestroyEvents];
73
78
  };
74
79
  exports.useBodyStyles = useBodyStyles;
@@ -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;
@@ -50,6 +50,7 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
50
50
  inputMask = _props$inputMask === void 0 ? defaultInputMask : _props$inputMask,
51
51
  onInputChange = props.onInputChange,
52
52
  onInputPressEnter = props.onInputPressEnter,
53
+ onInputBackspace = props.onInputBackspace,
53
54
  onInputBlur = props.onInputBlur,
54
55
  onInputFocus = props.onInputFocus,
55
56
  onClean = props.onClean,
@@ -62,7 +63,7 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
62
63
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
63
64
  label = props.label,
64
65
  name = props.name,
65
- 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", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label", "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"]);
66
67
  var inputRef = (0, _react.useRef)(null);
67
68
  var comboboxRef = (0, _react.useRef)(null);
68
69
  var _useState = (0, _react.useState)(false),
@@ -136,10 +137,15 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
136
137
  onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
137
138
  }, [onInputChange]);
138
139
  var handleInputKeyDown = (0, _react.useCallback)(function (event) {
139
- if (editable && event.key === _utils.KEY_VALUES.ENTER) {
140
- onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
140
+ if (editable) {
141
+ if (event.key === _utils.KEY_VALUES.ENTER) {
142
+ onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
143
+ }
144
+ if (event.key === _utils.KEY_VALUES.BACKSPACE) {
145
+ onInputBackspace === null || onInputBackspace === void 0 ? void 0 : onInputBackspace(event);
146
+ }
141
147
  }
142
- }, [onInputPressEnter, editable]);
148
+ }, [editable, onInputPressEnter, onInputBackspace]);
143
149
  var renderInput = (0, _react.useCallback)(function (ref, props) {
144
150
  return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
145
151
  ref: (0, _utils.mergeRefs)(inputRef, ref),
@@ -367,6 +367,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
367
367
  active = props.active,
368
368
  readOnly = props.readOnly,
369
369
  disabled = props.disabled,
370
+ loading = props.loading,
370
371
  onExit = props.onExit,
371
372
  onOpen = props.onOpen,
372
373
  onClose = props.onClose,
@@ -393,7 +394,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
393
394
  }, [active, handleOpen, handleClose]);
394
395
  var onToggle = (0, _react.useCallback)(function (event) {
395
396
  // Keyboard events should not be processed when readOnly and disabled are set.
396
- if (readOnly || disabled) {
397
+ if (readOnly || disabled || loading) {
397
398
  return;
398
399
  }
399
400
  if (event.target === (targetRef === null || targetRef === void 0 ? void 0 : targetRef.current)) {
@@ -439,7 +440,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
439
440
 
440
441
  // Native event callback
441
442
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
442
- }, [readOnly, disabled, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
443
+ }, [readOnly, disabled, loading, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
443
444
  return onToggle;
444
445
  };
445
446
  exports.useToggleKeyDownEvent = useToggleKeyDownEvent;
@@ -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 */
@@ -4,6 +4,7 @@
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  exports.__esModule = true;
6
6
  exports.default = void 0;
7
+ var _react = require("react");
7
8
  var _toaster = _interopRequireDefault(require("./toaster"));
8
9
  var _utils = require("../utils");
9
10
  /**
@@ -13,25 +14,27 @@ var _utils = require("../utils");
13
14
  var useToaster = function useToaster() {
14
15
  var _useCustom = (0, _utils.useCustom)(),
15
16
  toasters = _useCustom.toasters;
16
- return {
17
- push: function push(message, options) {
18
- var _toasters$current;
19
- 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');
20
- return customToaster ? customToaster.push(message, options) : _toaster.default.push(message, options);
21
- },
22
- remove: function remove(key) {
23
- toasters ? Array.from(toasters.current).forEach(function (_ref) {
24
- var c = _ref[1];
25
- return c === null || c === void 0 ? void 0 : c.remove(key);
26
- }) : _toaster.default.remove(key);
27
- },
28
- clear: function clear() {
29
- toasters ? Array.from(toasters.current).forEach(function (_ref2) {
30
- var c = _ref2[1];
31
- return c === null || c === void 0 ? void 0 : c.clear();
32
- }) : _toaster.default.clear();
33
- }
34
- };
17
+ return (0, _react.useMemo)(function () {
18
+ return {
19
+ push: function push(message, options) {
20
+ var _toasters$current;
21
+ 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');
22
+ return customToaster ? customToaster.push(message, options) : _toaster.default.push(message, options);
23
+ },
24
+ remove: function remove(key) {
25
+ toasters ? Array.from(toasters.current).forEach(function (_ref) {
26
+ var c = _ref[1];
27
+ return c === null || c === void 0 ? void 0 : c.remove(key);
28
+ }) : _toaster.default.remove(key);
29
+ },
30
+ clear: function clear() {
31
+ toasters ? Array.from(toasters.current).forEach(function (_ref2) {
32
+ var c = _ref2[1];
33
+ return c === null || c === void 0 ? void 0 : c.clear();
34
+ }) : _toaster.default.clear();
35
+ }
36
+ };
37
+ }, [toasters]);
35
38
  };
36
39
  var _default = useToaster;
37
40
  exports.default = _default;
@@ -4721,7 +4721,7 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4721
4721
  }
4722
4722
  .rs-drawer-full.rs-drawer-top,
4723
4723
  .rs-drawer-full.rs-drawer-bottom {
4724
- height: calc(100% - 60px);
4724
+ height: 100%;
4725
4725
  }
4726
4726
  .rs-drawer-full.rs-drawer-top .rs-drawer-content,
4727
4727
  .rs-drawer-full.rs-drawer-bottom .rs-drawer-content {
@@ -4729,7 +4729,7 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4729
4729
  }
4730
4730
  .rs-drawer-full.rs-drawer-left,
4731
4731
  .rs-drawer-full.rs-drawer-right {
4732
- width: calc(100% - 60px);
4732
+ width: 100%;
4733
4733
  }
4734
4734
  .rs-drawer-right {
4735
4735
  left: 0;
@@ -9473,8 +9473,37 @@ textarea.rs-picker-search-input {
9473
9473
  max-width: calc(100% - 10px);
9474
9474
  }
9475
9475
  .rs-modal-full {
9476
- width: calc(100% - 120px);
9477
- max-width: calc(100% - 10px);
9476
+ margin: 0;
9477
+ height: 100%;
9478
+ }
9479
+ .rs-modal-full .rs-modal-content {
9480
+ position: absolute;
9481
+ height: 100%;
9482
+ width: 100%;
9483
+ border-radius: 0;
9484
+ display: -webkit-box;
9485
+ display: -ms-flexbox;
9486
+ display: flex;
9487
+ -webkit-box-orient: vertical;
9488
+ -webkit-box-direction: normal;
9489
+ -ms-flex-direction: column;
9490
+ flex-direction: column;
9491
+ }
9492
+ .rs-modal-full .rs-modal-content .rs-modal-header {
9493
+ -webkit-box-flex: 0;
9494
+ -ms-flex: 0 0 auto;
9495
+ flex: 0 0 auto;
9496
+ }
9497
+ .rs-modal-full .rs-modal-content .rs-modal-body {
9498
+ -webkit-box-flex: 1;
9499
+ -ms-flex: 1 1 auto;
9500
+ flex: 1 1 auto;
9501
+ overflow: auto;
9502
+ }
9503
+ .rs-modal-full .rs-modal-content .rs-modal-footer {
9504
+ -webkit-box-flex: 0;
9505
+ -ms-flex: 0 0 auto;
9506
+ flex: 0 0 auto;
9478
9507
  }
9479
9508
  .rs-modal-shake .rs-modal-dialog {
9480
9509
  -webkit-animation: 0.3s linear shakeHead;
@@ -10797,9 +10826,6 @@ textarea.rs-picker-search-input {
10797
10826
  vertical-align: middle;
10798
10827
  max-width: 100%;
10799
10828
  }
10800
- .rs-picker-toggle {
10801
- min-width: 75px;
10802
- }
10803
10829
  .rs-picker-toggle.rs-btn .rs-ripple-pond {
10804
10830
  display: none !important;
10805
10831
  }