rsuite 5.44.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 (47) hide show
  1. package/Button/styles/index.less +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/Drawer/styles/index.less +1 -1
  4. package/Modal/styles/index.less +24 -2
  5. package/cjs/Drawer/Drawer.d.ts +2 -0
  6. package/cjs/Drawer/Drawer.js +16 -5
  7. package/cjs/Drawer/DrawerContext.d.ts +9 -0
  8. package/cjs/Drawer/DrawerContext.js +10 -0
  9. package/cjs/FormControl/FormControl.js +1 -1
  10. package/cjs/Modal/Modal.d.ts +2 -4
  11. package/cjs/Modal/Modal.js +24 -13
  12. package/cjs/Modal/ModalBody.js +14 -8
  13. package/cjs/Modal/ModalContext.d.ts +1 -3
  14. package/cjs/Modal/ModalHeader.js +9 -6
  15. package/cjs/Modal/index.d.ts +1 -0
  16. package/cjs/Modal/utils.d.ts +4 -1
  17. package/cjs/Modal/utils.js +9 -4
  18. package/dist/rsuite-no-reset-rtl.css +33 -4
  19. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  20. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  21. package/dist/rsuite-no-reset.css +33 -4
  22. package/dist/rsuite-no-reset.min.css +1 -1
  23. package/dist/rsuite-no-reset.min.css.map +1 -1
  24. package/dist/rsuite-rtl.css +33 -4
  25. package/dist/rsuite-rtl.min.css +1 -1
  26. package/dist/rsuite-rtl.min.css.map +1 -1
  27. package/dist/rsuite.css +33 -4
  28. package/dist/rsuite.js +18 -7
  29. package/dist/rsuite.js.map +1 -1
  30. package/dist/rsuite.min.css +1 -1
  31. package/dist/rsuite.min.css.map +1 -1
  32. package/dist/rsuite.min.js +1 -1
  33. package/dist/rsuite.min.js.map +1 -1
  34. package/esm/Drawer/Drawer.d.ts +2 -0
  35. package/esm/Drawer/Drawer.js +15 -5
  36. package/esm/Drawer/DrawerContext.d.ts +9 -0
  37. package/esm/Drawer/DrawerContext.js +4 -0
  38. package/esm/FormControl/FormControl.js +1 -1
  39. package/esm/Modal/Modal.d.ts +2 -4
  40. package/esm/Modal/Modal.js +25 -14
  41. package/esm/Modal/ModalBody.js +14 -8
  42. package/esm/Modal/ModalContext.d.ts +1 -3
  43. package/esm/Modal/ModalHeader.js +9 -6
  44. package/esm/Modal/index.d.ts +1 -0
  45. package/esm/Modal/utils.d.ts +4 -1
  46. package/esm/Modal/utils.js +9 -4
  47. package/package.json +2 -2
@@ -24,7 +24,7 @@
24
24
  text-decoration: none;
25
25
  color: var(--rs-btn-default-text);
26
26
  background-color: var(--rs-btn-default-bg);
27
- border-radius: @border-radius;
27
+ border-radius: @btn-border-radius;
28
28
 
29
29
  .high-contrast-mode({
30
30
  transition: none;
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [5.45.0](https://github.com/rsuite/rsuite/compare/v5.44.0...v5.45.0) (2023-11-17)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **Button:** fix button radius using wrong less variable ([#3451](https://github.com/rsuite/rsuite/issues/3451)) ([037a2b3](https://github.com/rsuite/rsuite/commit/037a2b3fb2696a55390018958a3d84cd0dc38958))
6
+ - formControll will pass undefined as value when value is null defaultValue is undefined ([#3456](https://github.com/rsuite/rsuite/issues/3456)) ([cde5a88](https://github.com/rsuite/rsuite/commit/cde5a889036f1873115b8be2ac31a31b8ff28bd3))
7
+
8
+ ### Features
9
+
10
+ - **Drawer:** add support for closeButton ([#3450](https://github.com/rsuite/rsuite/issues/3450)) ([90f25d0](https://github.com/rsuite/rsuite/commit/90f25d09e131e606c9ebd6dca41c0047e02f7908))
11
+ - **Modal,Drawer:** size prop supports number and string values ([#3103](https://github.com/rsuite/rsuite/issues/3103)) ([39741b7](https://github.com/rsuite/rsuite/commit/39741b755460e29cb8cfefb32bf4056b14cbf985))
12
+
1
13
  # [5.44.0](https://github.com/rsuite/rsuite/compare/5.43.0...5.44.0) (2023-11-10)
2
14
 
3
15
  ### Bug Fixes
@@ -73,7 +73,7 @@
73
73
 
74
74
  // Full page
75
75
  &-full {
76
- @max-width: ~'calc(100% - @{drawer-full-size-margin})';
76
+ @max-width: 100%;
77
77
  @max-height: @max-width;
78
78
 
79
79
  &.rs-drawer-top,
@@ -72,8 +72,30 @@
72
72
  }
73
73
 
74
74
  &-full {
75
- @modal-full-size-margin-value: @modal-full-size-margin* 2;
76
- .content-width(~'calc(100% - @{modal-full-size-margin-value})');
75
+ margin: 0;
76
+ height: 100%;
77
+
78
+ .rs-modal-content {
79
+ position: absolute;
80
+ height: 100%;
81
+ width: 100%;
82
+ border-radius: 0;
83
+ display: flex;
84
+ flex-direction: column;
85
+
86
+ .rs-modal-header {
87
+ flex: 0 0 auto;
88
+ }
89
+
90
+ .rs-modal-body {
91
+ flex: 1 1 auto;
92
+ overflow: auto;
93
+ }
94
+
95
+ .rs-modal-footer {
96
+ flex: 0 0 auto;
97
+ }
98
+ }
77
99
  }
78
100
  }
79
101
 
@@ -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,17 +1,19 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
6
  exports.__esModule = true;
6
7
  exports.default = void 0;
7
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _react = _interopRequireDefault(require("react"));
10
+ var _react = _interopRequireWildcard(require("react"));
10
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
12
  var _Slide = _interopRequireDefault(require("../Animation/Slide"));
12
13
  var _Modal = _interopRequireDefault(require("../Modal"));
13
14
  var _utils = require("../utils");
14
15
  var _deprecateComponent = _interopRequireDefault(require("../utils/deprecateComponent"));
16
+ var _DrawerContext = _interopRequireDefault(require("./DrawerContext"));
15
17
  var DrawerBody = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
16
18
  return /*#__PURE__*/_react.default.createElement(_Modal.default.Body, (0, _extends2.default)({
17
19
  classPrefix: "drawer-body"
@@ -55,7 +57,9 @@ var Drawer = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
55
57
  classPrefix = _props$classPrefix === void 0 ? 'drawer' : _props$classPrefix,
56
58
  _props$animation = props.animation,
57
59
  animation = _props$animation === void 0 ? _Slide.default : _props$animation,
58
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "placement", "classPrefix", "animation"]);
60
+ _props$closeButton = props.closeButton,
61
+ closeButton = _props$closeButton === void 0 ? true : _props$closeButton,
62
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "placement", "classPrefix", "animation", "closeButton"]);
59
63
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
60
64
  merge = _useClassNames.merge,
61
65
  prefix = _useClassNames.prefix;
@@ -63,14 +67,21 @@ var Drawer = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
63
67
  var animationProps = {
64
68
  placement: placement
65
69
  };
66
- return /*#__PURE__*/_react.default.createElement(_Modal.default, (0, _extends2.default)({}, rest, {
70
+ var contextValue = (0, _react.useMemo)(function () {
71
+ return {
72
+ closeButton: closeButton,
73
+ isDrawer: true
74
+ };
75
+ }, [closeButton]);
76
+ return /*#__PURE__*/_react.default.createElement(_DrawerContext.default.Provider, {
77
+ value: contextValue
78
+ }, /*#__PURE__*/_react.default.createElement(_Modal.default, (0, _extends2.default)({}, rest, {
67
79
  ref: ref,
68
- drawer: true,
69
80
  classPrefix: classPrefix,
70
81
  className: classes,
71
82
  animation: animation,
72
83
  animationProps: animationProps
73
- }));
84
+ })));
74
85
  });
75
86
  DrawerBody.displayName = 'DrawerBody';
76
87
  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,10 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var DrawerContext = /*#__PURE__*/_react.default.createContext(null);
9
+ var _default = DrawerContext;
10
+ exports.default = _default;
@@ -134,7 +134,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
134
134
  if (AccepterComponent === _Toggle.default) {
135
135
  valueKey = 'checked';
136
136
  }
137
- var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = val !== null && val !== void 0 ? val : defaultValue, _accepterProps);
137
+ var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = val === undefined ? defaultValue : val, _accepterProps);
138
138
  return /*#__PURE__*/_react.default.createElement(Component, {
139
139
  className: classes,
140
140
  ref: ref
@@ -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;
@@ -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;
@@ -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;