rsuite 5.4.1 → 5.5.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 (129) hide show
  1. package/Button/styles/index.less +1 -5
  2. package/CHANGELOG.md +42 -0
  3. package/CheckTreePicker/styles/index.less +48 -47
  4. package/Drawer/styles/index.less +3 -0
  5. package/Dropdown/styles/index.less +3 -19
  6. package/Dropdown/styles/mixin.less +0 -2
  7. package/Modal/styles/index.less +23 -22
  8. package/Navbar/styles/index.less +20 -8
  9. package/Picker/styles/mixin.less +3 -2
  10. package/README.md +1 -1
  11. package/Sidenav/styles/index.less +58 -57
  12. package/TreePicker/styles/index.less +3 -3
  13. package/cjs/Affix/Affix.js +3 -1
  14. package/cjs/Calendar/useCalendarDate.d.ts +1 -1
  15. package/cjs/Calendar/useCalendarDate.js +1 -1
  16. package/cjs/Carousel/Carousel.js +7 -1
  17. package/cjs/Cascader/Cascader.js +13 -2
  18. package/cjs/CheckPicker/CheckPicker.d.ts +5 -2
  19. package/cjs/CheckPicker/test/CheckPicker.test.js +8 -0
  20. package/cjs/CheckTreePicker/CheckTreePicker.js +1 -1
  21. package/cjs/CheckTreePicker/utils.js +1 -1
  22. package/cjs/CustomProvider/CustomProvider.d.ts +14 -14
  23. package/cjs/CustomProvider/CustomProvider.js +4 -3
  24. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  25. package/cjs/DatePicker/DatePicker.js +2 -4
  26. package/cjs/Disclosure/Disclosure.d.ts +8 -5
  27. package/cjs/Disclosure/Disclosure.js +49 -9
  28. package/cjs/Disclosure/DisclosureButton.d.ts +2 -2
  29. package/cjs/Disclosure/DisclosureContext.d.ts +6 -1
  30. package/cjs/Dropdown/Dropdown.d.ts +5 -0
  31. package/cjs/Dropdown/Dropdown.js +1 -1
  32. package/cjs/Dropdown/DropdownItem.js +9 -10
  33. package/cjs/Dropdown/DropdownMenu.js +69 -20
  34. package/cjs/Dropdown/test/Dropdown.test.d.ts +1 -0
  35. package/cjs/Dropdown/test/Dropdown.test.js +30 -0
  36. package/cjs/InputNumber/InputNumber.d.ts +1 -1
  37. package/cjs/InputNumber/InputNumber.js +36 -6
  38. package/cjs/InputNumber/test/InputNumber.test.d.ts +1 -0
  39. package/cjs/InputNumber/test/InputNumber.test.js +14 -0
  40. package/cjs/Modal/Modal.js +34 -22
  41. package/cjs/Modal/utils.js +16 -8
  42. package/cjs/MultiCascader/MultiCascader.js +7 -3
  43. package/cjs/Nav/NavItem.js +3 -1
  44. package/cjs/Navbar/index.d.ts +1 -0
  45. package/cjs/Navbar/index.js +4 -3
  46. package/cjs/Overlay/Modal.js +10 -27
  47. package/cjs/Picker/DropdownMenu.js +5 -0
  48. package/cjs/Picker/PickerToggle.js +2 -4
  49. package/cjs/RangeSlider/RangeSlider.d.ts +12 -2
  50. package/cjs/RangeSlider/RangeSlider.js +35 -12
  51. package/cjs/SelectPicker/SelectPicker.d.ts +5 -2
  52. package/cjs/SelectPicker/test/SelectPicker.test.js +8 -0
  53. package/cjs/Uploader/UploadFileItem.d.ts +1 -1
  54. package/cjs/Uploader/UploadFileItem.js +1 -1
  55. package/cjs/Uploader/Uploader.js +3 -0
  56. package/cjs/utils/index.d.ts +1 -0
  57. package/cjs/utils/index.js +7 -2
  58. package/cjs/utils/propTypeChecker.d.ts +2 -6
  59. package/cjs/utils/propTypeChecker.js +7 -59
  60. package/cjs/utils/treeUtils.js +4 -3
  61. package/cjs/utils/useClickOutside.js +6 -2
  62. package/cjs/utils/useMount.d.ts +2 -0
  63. package/cjs/utils/useMount.js +19 -0
  64. package/dist/rsuite-rtl.css +416 -264
  65. package/dist/rsuite-rtl.min.css +1 -1
  66. package/dist/rsuite-rtl.min.css.map +1 -1
  67. package/dist/rsuite.css +416 -264
  68. package/dist/rsuite.js +55 -33
  69. package/dist/rsuite.js.map +1 -1
  70. package/dist/rsuite.min.css +1 -1
  71. package/dist/rsuite.min.css.map +1 -1
  72. package/dist/rsuite.min.js +1 -1
  73. package/dist/rsuite.min.js.map +1 -1
  74. package/esm/Affix/Affix.js +4 -2
  75. package/esm/Calendar/useCalendarDate.d.ts +1 -1
  76. package/esm/Calendar/useCalendarDate.js +1 -1
  77. package/esm/Carousel/Carousel.js +9 -3
  78. package/esm/Cascader/Cascader.js +13 -2
  79. package/esm/CheckPicker/CheckPicker.d.ts +5 -2
  80. package/esm/CheckPicker/test/CheckPicker.test.js +7 -0
  81. package/esm/CheckTreePicker/CheckTreePicker.js +1 -1
  82. package/esm/CheckTreePicker/utils.js +1 -1
  83. package/esm/CustomProvider/CustomProvider.d.ts +14 -14
  84. package/esm/CustomProvider/CustomProvider.js +2 -2
  85. package/esm/DatePicker/DatePicker.d.ts +1 -1
  86. package/esm/DatePicker/DatePicker.js +2 -3
  87. package/esm/Disclosure/Disclosure.d.ts +8 -5
  88. package/esm/Disclosure/Disclosure.js +50 -11
  89. package/esm/Disclosure/DisclosureButton.d.ts +2 -2
  90. package/esm/Disclosure/DisclosureContext.d.ts +6 -1
  91. package/esm/Dropdown/Dropdown.d.ts +5 -0
  92. package/esm/Dropdown/Dropdown.js +1 -1
  93. package/esm/Dropdown/DropdownItem.js +9 -9
  94. package/esm/Dropdown/DropdownMenu.js +69 -20
  95. package/esm/Dropdown/test/Dropdown.test.d.ts +1 -0
  96. package/esm/Dropdown/test/Dropdown.test.js +22 -0
  97. package/esm/InputNumber/InputNumber.d.ts +1 -1
  98. package/esm/InputNumber/InputNumber.js +38 -7
  99. package/esm/InputNumber/test/InputNumber.test.d.ts +1 -0
  100. package/esm/InputNumber/test/InputNumber.test.js +7 -0
  101. package/esm/Modal/Modal.js +36 -24
  102. package/esm/Modal/utils.js +16 -8
  103. package/esm/MultiCascader/MultiCascader.js +7 -3
  104. package/esm/Nav/NavItem.js +3 -1
  105. package/esm/Navbar/index.d.ts +1 -0
  106. package/esm/Navbar/index.js +1 -0
  107. package/esm/Overlay/Modal.js +10 -27
  108. package/esm/Picker/DropdownMenu.js +5 -0
  109. package/esm/Picker/PickerToggle.js +2 -4
  110. package/esm/RangeSlider/RangeSlider.d.ts +12 -2
  111. package/esm/RangeSlider/RangeSlider.js +35 -12
  112. package/esm/SelectPicker/SelectPicker.d.ts +5 -2
  113. package/esm/SelectPicker/test/SelectPicker.test.js +7 -0
  114. package/esm/Uploader/UploadFileItem.d.ts +1 -1
  115. package/esm/Uploader/UploadFileItem.js +1 -1
  116. package/esm/Uploader/Uploader.js +4 -1
  117. package/esm/utils/index.d.ts +1 -0
  118. package/esm/utils/index.js +2 -1
  119. package/esm/utils/propTypeChecker.d.ts +2 -6
  120. package/esm/utils/propTypeChecker.js +7 -59
  121. package/esm/utils/treeUtils.js +6 -3
  122. package/esm/utils/useClickOutside.js +6 -2
  123. package/esm/utils/useMount.d.ts +2 -0
  124. package/esm/utils/useMount.js +13 -0
  125. package/package.json +2 -2
  126. package/styles/color-modes/dark.less +1 -0
  127. package/styles/color-modes/high-contrast.less +1 -0
  128. package/styles/color-modes/light.less +1 -0
  129. package/styles/mixins/utilities.less +17 -5
@@ -2,7 +2,7 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
4
 
5
- var _templateObject, _templateObject2;
5
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
6
6
 
7
7
  import React, { useCallback, useContext, useMemo } from 'react';
8
8
  import omit from 'lodash/omit';
@@ -15,8 +15,10 @@ import AngleLeft from '@rsuite/icons/legacy/AngleLeft';
15
15
  import AngleRight from '@rsuite/icons/legacy/AngleRight';
16
16
  import useCustom from '../utils/useCustom';
17
17
  import DropdownContext from './DropdownContext';
18
+ import { NavbarContext } from '../Navbar';
18
19
  import Menubar from '../Menu/Menubar';
19
20
  import SidenavDropdownMenu from '../Sidenav/SidenavDropdownMenu';
21
+ import Disclosure from '../Disclosure';
20
22
 
21
23
  /**
22
24
  * The <Dropdown.Menu> API
@@ -49,6 +51,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
49
51
 
50
52
  var dropdown = useContext(DropdownContext);
51
53
  var sidenav = useContext(SidenavContext);
54
+ var withinNavbar = Boolean(useContext(NavbarContext));
52
55
 
53
56
  var _useCustom = useCustom('DropdownMenu'),
54
57
  rtl = _useCustom.rtl;
@@ -113,22 +116,69 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
113
116
  disabled = _omit.disabled,
114
117
  menuProps = _objectWithoutPropertiesLoose(_omit, ["icon", "className", "disabled"]);
115
118
 
116
- var Icon = rtl ? AngleLeft : AngleRight;
119
+ var Icon = rtl ? AngleLeft : AngleRight; // Renders a disclosure when used within <Navbar>
120
+
121
+ if (withinNavbar) {
122
+ return /*#__PURE__*/React.createElement(Disclosure, {
123
+ hideOnClickOutside: true,
124
+ trigger: ['click', 'mouseover']
125
+ }, function (_ref, containerRef) {
126
+ var open = _ref.open,
127
+ props = _objectWithoutPropertiesLoose(_ref, ["open"]);
128
+
129
+ var classes = mergeItemClassNames(className, withItemClassPrefix({
130
+ disabled: disabled,
131
+ open: open,
132
+ submenu: true
133
+ }));
134
+ return /*#__PURE__*/React.createElement("li", _extends({
135
+ ref: mergeRefs(ref, containerRef),
136
+ className: classes
137
+ }, props), /*#__PURE__*/React.createElement(Disclosure.Button, null, function (_ref2, buttonRef) {
138
+ var open = _ref2.open,
139
+ buttonProps = _objectWithoutPropertiesLoose(_ref2, ["open"]);
140
+
141
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))), withItemClassPrefix({
142
+ 'with-icon': icon,
143
+ open: open,
144
+ disabled: disabled
145
+ }));
146
+ return /*#__PURE__*/React.createElement("div", _extends({
147
+ ref: mergeRefs(buttonRef, buttonRef),
148
+ className: classes,
149
+ "data-event-key": eventKey,
150
+ "data-event-key-type": typeof eventKey
151
+ }, buttonProps), icon && /*#__PURE__*/React.cloneElement(icon, {
152
+ className: prefix('menu-icon')
153
+ }), title, /*#__PURE__*/React.createElement(Icon, {
154
+ className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
155
+ }));
156
+ }), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref3, elementRef) {
157
+ var open = _ref3.open;
158
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
159
+ return /*#__PURE__*/React.createElement("ul", _extends({
160
+ ref: elementRef,
161
+ className: menuClassName,
162
+ hidden: !open
163
+ }, menuProps), children);
164
+ }));
165
+ });
166
+ }
167
+
117
168
  return /*#__PURE__*/React.createElement(Menu, {
118
169
  openMenuOn: ['mouseover', 'click'],
119
- renderMenuButton: function renderMenuButton(_ref, buttonRef) {
120
- var open = _ref.open,
121
- menuButtonProps = _objectWithoutPropertiesLoose(_ref, ["open"]);
170
+ renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
171
+ var open = _ref4.open,
172
+ menuButtonProps = _objectWithoutPropertiesLoose(_ref4, ["open"]);
122
173
 
123
174
  return /*#__PURE__*/React.createElement(MenuItem, {
124
175
  disabled: disabled
125
- }, function (_ref2, menuitemRef) {
126
- var selected = _ref2.selected,
127
- active = _ref2.active,
128
- menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
176
+ }, function (_ref5, menuitemRef) {
177
+ var selected = _ref5.selected,
178
+ active = _ref5.active,
179
+ menuitem = _objectWithoutPropertiesLoose(_ref5, ["selected", "active"]);
129
180
 
130
- var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))), // prefixItemClassName`submenu`,
131
- withItemClassPrefix({
181
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["toggle"]))), withItemClassPrefix({
132
182
  'with-icon': icon,
133
183
  open: open,
134
184
  active: selected,
@@ -143,13 +193,13 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
143
193
  }, menuitem, omit(menuButtonProps, ['role'])), icon && /*#__PURE__*/React.cloneElement(icon, {
144
194
  className: prefix('menu-icon')
145
195
  }), title, /*#__PURE__*/React.createElement(Icon, {
146
- className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
196
+ className: prefix(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["toggle-icon"])))
147
197
  }));
148
198
  });
149
199
  },
150
- renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
151
- var open = _ref3.open,
152
- popupProps = _objectWithoutPropertiesLoose(_ref3, ["open"]);
200
+ renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
201
+ var open = _ref6.open,
202
+ popupProps = _objectWithoutPropertiesLoose(_ref6, ["open"]);
153
203
 
154
204
  var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
155
205
  return /*#__PURE__*/React.createElement("ul", _extends({
@@ -159,15 +209,14 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
159
209
  }, popupProps, menuProps), children);
160
210
  },
161
211
  onToggleMenu: handleToggleSubmenu
162
- }, function (_ref4, menuContainerRef) {
163
- var open = _ref4.open,
164
- menuContainer = _objectWithoutPropertiesLoose(_ref4, ["open"]);
212
+ }, function (_ref7, menuContainerRef) {
213
+ var open = _ref7.open,
214
+ menuContainer = _objectWithoutPropertiesLoose(_ref7, ["open"]);
165
215
 
166
216
  var classes = mergeItemClassNames(className, withItemClassPrefix({
167
217
  disabled: disabled,
168
218
  open: open,
169
- submenu: true // focus: hasFocus
170
-
219
+ submenu: true
171
220
  }));
172
221
  return /*#__PURE__*/React.createElement("li", _extends({
173
222
  ref: mergeRefs(ref, menuContainerRef),
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import Dropdown from '../Dropdown';
3
+ var ref = /*#__PURE__*/React.createRef(); // Infer `toggleAs` props (defaults to Button)
4
+
5
+ /*#__PURE__*/
6
+ React.createElement(Dropdown, {
7
+ ref: ref,
8
+ appearance: "subtle",
9
+ size: "sm"
10
+ });
11
+ /* eslint-disable @typescript-eslint/no-unused-vars */
12
+
13
+ var CustomToggle = function CustomToggle(_props) {
14
+ return null;
15
+ };
16
+
17
+ /*#__PURE__*/
18
+ React.createElement(Dropdown, {
19
+ ref: ref,
20
+ toggleAs: CustomToggle,
21
+ myProp: "myValue"
22
+ });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, TypeAttributes, FormControlBaseProps } from '../@types/common';
3
- export interface InputNumberProps<T = number | string> extends WithAsProps, FormControlBaseProps<T> {
3
+ export interface InputNumberProps<T = number | string> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'size' | 'prefix'>, WithAsProps, FormControlBaseProps<T> {
4
4
  /** Button can have different appearances */
5
5
  buttonAppearance?: TypeAttributes.Appearance;
6
6
  /** An input can show that it is disabled */
@@ -10,7 +10,7 @@ import InputGroup from '../InputGroup/InputGroup';
10
10
  import InputGroupAddon from '../InputGroup/InputGroupAddon';
11
11
  import Input from '../Input';
12
12
  import Button from '../Button';
13
- import { partitionHTMLProps, createChainedFunction, useClassNames, useControlled } from '../utils';
13
+ import { partitionHTMLProps, createChainedFunction, useClassNames, useControlled, KEY_VALUES } from '../utils';
14
14
 
15
15
  /**
16
16
  * Check if the value is a number.
@@ -93,16 +93,17 @@ var InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {
93
93
  step = _props$step === void 0 ? 1 : _props$step,
94
94
  _props$buttonAppearan = props.buttonAppearance,
95
95
  buttonAppearance = _props$buttonAppearan === void 0 ? 'subtle' : _props$buttonAppearan,
96
- _props$min = props.min,
97
- min = _props$min === void 0 ? -Infinity : _props$min,
98
- _props$max = props.max,
99
- max = _props$max === void 0 ? Infinity : _props$max,
96
+ minProp = props.min,
97
+ maxProp = props.max,
100
98
  _props$scrollable = props.scrollable,
101
99
  scrollable = _props$scrollable === void 0 ? true : _props$scrollable,
102
100
  onChange = props.onChange,
103
101
  onWheel = props.onWheel,
104
102
  restProps = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "disabled", "readOnly", "plaintext", "value", "defaultValue", "size", "prefix", "postfix", "step", "buttonAppearance", "min", "max", "scrollable", "onChange", "onWheel"]);
105
103
 
104
+ var min = minProp !== null && minProp !== void 0 ? minProp : -Infinity;
105
+ var max = maxProp !== null && maxProp !== void 0 ? maxProp : Infinity;
106
+
106
107
  var _useControlled = useControlled(valueProp, defaultValue),
107
108
  value = _useControlled[0],
108
109
  setValue = _useControlled[1];
@@ -166,6 +167,35 @@ var InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {
166
167
  var bit = decimals(val, step);
167
168
  handleChangeValue(getSafeValue((val - step).toFixed(bit)), event);
168
169
  }, [getSafeValue, handleChangeValue, step, value]);
170
+ var handleKeyDown = useCallback(function (event) {
171
+ switch (event.key) {
172
+ case KEY_VALUES.UP:
173
+ event.preventDefault();
174
+ handlePlus(event);
175
+ break;
176
+
177
+ case KEY_VALUES.DOWN:
178
+ event.preventDefault();
179
+ handleMinus(event);
180
+ break;
181
+
182
+ case KEY_VALUES.HOME:
183
+ if (typeof minProp !== 'undefined') {
184
+ event.preventDefault();
185
+ handleChangeValue(getSafeValue(minProp), event);
186
+ }
187
+
188
+ break;
189
+
190
+ case KEY_VALUES.END:
191
+ if (typeof maxProp !== 'undefined') {
192
+ event.preventDefault();
193
+ handleChangeValue(getSafeValue(maxProp), event);
194
+ }
195
+
196
+ break;
197
+ }
198
+ }, [handlePlus, handleMinus, minProp, maxProp, handleChangeValue, getSafeValue]);
169
199
  var handleWheel = useCallback(function (event) {
170
200
  if (!disabled && !readOnly && event.target === document.activeElement) {
171
201
  event.preventDefault();
@@ -211,7 +241,7 @@ var InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {
211
241
  };
212
242
  }, [handleWheel, scrollable]);
213
243
  var input = /*#__PURE__*/React.createElement(Input, _extends({}, htmlInputProps, {
214
- type: "text",
244
+ type: "number",
215
245
  autoComplete: "off",
216
246
  step: step,
217
247
  inputRef: inputRef,
@@ -221,7 +251,8 @@ var InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {
221
251
  disabled: disabled,
222
252
  readOnly: readOnly,
223
253
  plaintext: plaintext,
224
- ref: plaintext ? ref : undefined
254
+ ref: plaintext ? ref : undefined,
255
+ onKeyDown: handleKeyDown
225
256
  }));
226
257
 
227
258
  if (plaintext) {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import InputNumber from '../InputNumber'; // Inherits <input type="number" /> attributes
3
+
4
+ /*#__PURE__*/
5
+ React.createElement(InputNumber, {
6
+ placeholder: "Enter number"
7
+ });
@@ -4,14 +4,14 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
4
4
 
5
5
  var _templateObject, _templateObject2;
6
6
 
7
- import React, { useRef, useMemo, useState, useEffect, useCallback } from 'react';
7
+ import React, { useRef, useMemo, useState, useCallback } from 'react';
8
8
  import PropTypes from 'prop-types';
9
9
  import pick from 'lodash/pick';
10
10
  import on from 'dom-lib/on';
11
11
  import getAnimationEnd from 'dom-lib/getAnimationEnd';
12
12
  import BaseModal, { modalPropTypes } from '../Overlay/Modal';
13
13
  import Bounce from '../Animation/Bounce';
14
- import { useClassNames, mergeRefs, SIZE } from '../utils';
14
+ import { useClassNames, mergeRefs, SIZE, useWillUnmount } from '../utils';
15
15
  import ModalDialog, { modalDialogPropTypes } from './ModalDialog';
16
16
  import { ModalContext } from './ModalContext';
17
17
  import ModalBody from './ModalBody';
@@ -64,6 +64,10 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
64
64
  merge = _useClassNames.merge,
65
65
  prefix = _useClassNames.prefix;
66
66
 
67
+ var _useState = useState(false),
68
+ shake = _useState[0],
69
+ setShake = _useState[1];
70
+
67
71
  var classes = merge(className, prefix(size, {
68
72
  full: full
69
73
  }));
@@ -90,24 +94,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
90
94
  isDrawer: drawer
91
95
  };
92
96
  }, [dialogId, onClose, bodyStyles, drawer]);
93
-
94
- var _useState = useState(false),
95
- shake = _useState[0],
96
- setShake = _useState[1];
97
-
98
- var handleBackdropClick = useCallback(function () {
99
- // When the value of `backdrop` is `static`, a jitter animation will be added to the dialog when clicked.
100
- if (backdrop === 'static') {
101
- setShake(true);
102
-
103
- if (!transitionEndListener.current && dialogRef.current) {
104
- //fix: https://github.com/rsuite/rsuite/blob/a93d13c14fb20cc58204babe3331d3c3da3fe1fd/src/Modal/styles/index.less#L59
105
- transitionEndListener.current = on(dialogRef.current, getAnimationEnd(), function () {
106
- setShake(false);
107
- });
108
- }
109
- }
110
- }, [backdrop]);
111
97
  var handleExited = useCallback(function (node) {
112
98
  var _transitionEndListene;
113
99
 
@@ -124,11 +110,37 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
124
110
  onEntering === null || onEntering === void 0 ? void 0 : onEntering(node);
125
111
  onChangeBodyStyles(true);
126
112
  }, [onChangeBodyStyles, onEntering]);
127
- useEffect(function () {
113
+ var handleBackdropClick = useCallback(function (e) {
114
+ if (e.target !== e.currentTarget) {
115
+ return;
116
+ } // When the value of `backdrop` is `static`, a jitter animation will be added to the dialog when clicked.
117
+
118
+
119
+ if (backdrop === 'static') {
120
+ setShake(true);
121
+
122
+ if (!transitionEndListener.current && dialogRef.current) {
123
+ //fix: https://github.com/rsuite/rsuite/blob/a93d13c14fb20cc58204babe3331d3c3da3fe1fd/src/Modal/styles/index.less#L59
124
+ transitionEndListener.current = on(dialogRef.current, getAnimationEnd(), function () {
125
+ setShake(false);
126
+ });
127
+ }
128
+
129
+ return;
130
+ }
131
+
132
+ onClose === null || onClose === void 0 ? void 0 : onClose(e);
133
+ }, [backdrop, onClose]);
134
+ var handleClick = useCallback(function (e) {
135
+ if (dialogRef.current && e.target !== dialogRef.current) {
136
+ handleBackdropClick(e);
137
+ }
138
+ }, [handleBackdropClick]);
139
+ useWillUnmount(function () {
128
140
  var _transitionEndListene2;
129
141
 
130
142
  (_transitionEndListene2 = transitionEndListener.current) === null || _transitionEndListene2 === void 0 ? void 0 : _transitionEndListene2.off();
131
- }, []);
143
+ });
132
144
  return /*#__PURE__*/React.createElement(ModalContext.Provider, {
133
145
  value: modalContextValue
134
146
  }, /*#__PURE__*/React.createElement(BaseModal, _extends({}, rest, {
@@ -136,7 +148,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
136
148
  backdrop: backdrop,
137
149
  open: open,
138
150
  onClose: onClose,
139
- onBackdropClick: handleBackdropClick,
140
151
  className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["wrapper"]))),
141
152
  onEntered: handleEntered,
142
153
  onEntering: handleEntering,
@@ -149,7 +160,8 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
149
160
  transition: animation ? animation : undefined,
150
161
  animationProps: animationProps,
151
162
  dialogTransitionTimeout: animationTimeout,
152
- backdropTransitionTimeout: 150
163
+ backdropTransitionTimeout: 150,
164
+ onClick: backdrop ? handleClick : undefined
153
165
  }), function (transitionProps, transitionRef) {
154
166
  var transitionClassName = transitionProps.className,
155
167
  transitionRest = _objectWithoutPropertiesLoose(transitionProps, ["className"]);
@@ -45,20 +45,28 @@ export var useBodyStyles = function useBodyStyles(ref, options) {
45
45
 
46
46
  (_windowResizeListener = windowResizeListener.current) === null || _windowResizeListener === void 0 ? void 0 : (_windowResizeListener2 = _windowResizeListener.off) === null || _windowResizeListener2 === void 0 ? void 0 : _windowResizeListener2.call(_windowResizeListener);
47
47
  (_contentElementResize = contentElementResizeObserver.current) === null || _contentElementResize === void 0 ? void 0 : _contentElementResize.disconnect();
48
+ windowResizeListener.current = null;
49
+ contentElementResizeObserver.current = null;
48
50
  }, []);
49
51
  var onChangeBodyStyles = useCallback(function (entering) {
50
- if (overflow && !drawer) {
52
+ if (overflow && !drawer && ref.current) {
51
53
  updateBodyStyles(undefined, entering);
52
54
  contentElement.current = ref.current.querySelector("." + prefix('content'));
53
- windowResizeListener.current = on(window, 'resize', updateBodyStyles);
54
- contentElementResizeObserver.current = new ResizeObserver(function () {
55
- return updateBodyStyles();
56
- });
57
- contentElementResizeObserver.current.observe(contentElement.current);
55
+
56
+ if (!windowResizeListener.current) {
57
+ windowResizeListener.current = on(window, 'resize', updateBodyStyles);
58
+ }
59
+
60
+ if (contentElement.current && !contentElementResizeObserver.current) {
61
+ contentElementResizeObserver.current = new ResizeObserver(function () {
62
+ return updateBodyStyles();
63
+ });
64
+ contentElementResizeObserver.current.observe(contentElement.current);
65
+ }
58
66
  }
59
67
  }, [drawer, overflow, prefix, ref, updateBodyStyles]);
60
68
  useEffect(function () {
61
- onDestroyEvents();
62
- }, [onDestroyEvents]);
69
+ return onDestroyEvents; // eslint-disable-next-line react-hooks/exhaustive-deps
70
+ }, []);
63
71
  return [overflow ? bodyStyles : {}, onChangeBodyStyles, onDestroyEvents];
64
72
  };
@@ -196,8 +196,11 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
196
196
  children.then(function (data) {
197
197
  node.loading = false;
198
198
  node[childrenKey] = data;
199
- addFlattenData(data, node);
200
- addColumn(data, cascadePaths.length);
199
+
200
+ if (targetRef.current) {
201
+ addFlattenData(data, node);
202
+ addColumn(data, cascadePaths.length);
203
+ }
201
204
  });
202
205
  } else {
203
206
  node.loading = false;
@@ -234,7 +237,7 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
234
237
  onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
235
238
  }, [cascade, onChange, onCheck, setValue, splitValue, value, valueKey]);
236
239
  var handleClean = useCallback(function (event) {
237
- if (disabled) {
240
+ if (disabled || !targetRef.current) {
238
241
  return;
239
242
  }
240
243
 
@@ -456,6 +459,7 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
456
459
  var _usePickerClassName = usePickerClassName(_extends({}, props, {
457
460
  classPrefix: classPrefix,
458
461
  hasValue: hasValue,
462
+ countable: countable,
459
463
  name: 'cascader',
460
464
  appearance: appearance,
461
465
  cleanable: cleanable
@@ -83,7 +83,9 @@ var NavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
83
83
  }
84
84
 
85
85
  if (navbar) {
86
- return /*#__PURE__*/React.createElement(NavbarItem, props);
86
+ return /*#__PURE__*/React.createElement(NavbarItem, _extends({
87
+ ref: ref
88
+ }, props));
87
89
  }
88
90
 
89
91
  return /*#__PURE__*/React.createElement(Component, _extends({
@@ -3,4 +3,5 @@ export type { NavbarProps } from './Navbar';
3
3
  export type { NavbarBodyProps } from './NavbarBody';
4
4
  export type { NavbarHeaderProps } from './NavbarHeader';
5
5
  export type { NavbarBrandProps } from './NavbarBrand';
6
+ export { NavbarContext } from './Navbar';
6
7
  export default Navbar;
@@ -1,2 +1,3 @@
1
1
  import Navbar from './Navbar';
2
+ export { NavbarContext } from './Navbar';
2
3
  export default Navbar;
@@ -72,7 +72,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
72
72
  open = props.open,
73
73
  _props$autoFocus = props.autoFocus,
74
74
  autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,
75
- onBackdropClick = props.onBackdropClick,
76
75
  onEsc = props.onEsc,
77
76
  onExit = props.onExit,
78
77
  onExiting = props.onExiting,
@@ -82,7 +81,7 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
82
81
  onEntered = props.onEntered,
83
82
  onClose = props.onClose,
84
83
  onOpen = props.onOpen,
85
- rest = _objectWithoutPropertiesLoose(props, ["as", "children", "transition", "dialogTransitionTimeout", "style", "className", "container", "animationProps", "containerClassName", "keyboard", "enforceFocus", "backdrop", "backdropTransitionTimeout", "backdropStyle", "backdropClassName", "open", "autoFocus", "onBackdropClick", "onEsc", "onExit", "onExiting", "onExited", "onEnter", "onEntering", "onEntered", "onClose", "onOpen"]);
84
+ rest = _objectWithoutPropertiesLoose(props, ["as", "children", "transition", "dialogTransitionTimeout", "style", "className", "container", "animationProps", "containerClassName", "keyboard", "enforceFocus", "backdrop", "backdropTransitionTimeout", "backdropStyle", "backdropClassName", "open", "autoFocus", "onEsc", "onExit", "onExiting", "onExited", "onEnter", "onEntering", "onEntered", "onClose", "onOpen"]);
86
85
 
87
86
  var _useState = useState(!open),
88
87
  exited = _useState[0],
@@ -139,17 +138,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
138
 
140
139
  handleFocusDialog();
141
140
  });
142
- var handleBackdropClick = useEventCallback(function (event) {
143
- if (event.target !== event.currentTarget) {
144
- return;
145
- }
146
-
147
- onBackdropClick === null || onBackdropClick === void 0 ? void 0 : onBackdropClick(event);
148
-
149
- if (backdrop === true) {
150
- onClose === null || onClose === void 0 ? void 0 : onClose(event);
151
- }
152
- });
153
141
  var documentKeyDownListener = useRef();
154
142
  var documentFocusListener = useRef();
155
143
  var handleOpen = useEventCallback(function () {
@@ -215,11 +203,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
215
203
  }
216
204
 
217
205
  var renderBackdrop = function renderBackdrop() {
218
- var backdropPorps = {
219
- style: backdropStyle,
220
- onClick: handleBackdropClick
221
- };
222
-
223
206
  if (Transition) {
224
207
  return /*#__PURE__*/React.createElement(Fade, {
225
208
  transitionAppear: true,
@@ -231,18 +214,19 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
231
214
 
232
215
  return /*#__PURE__*/React.createElement("div", _extends({
233
216
  "aria-hidden": true
234
- }, rest, backdropPorps, {
217
+ }, rest, {
218
+ style: backdropStyle,
235
219
  ref: mergeRefs(modal.setBackdropRef, ref),
236
220
  className: classNames(backdropClassName, className)
237
221
  }));
238
222
  });
239
223
  }
240
224
 
241
- return /*#__PURE__*/React.createElement("div", _extends({
242
- "aria-hidden": true
243
- }, backdropPorps, {
225
+ return /*#__PURE__*/React.createElement("div", {
226
+ "aria-hidden": true,
227
+ style: backdropStyle,
244
228
  className: backdropClassName
245
- }));
229
+ });
246
230
  };
247
231
 
248
232
  var dialogElement = Transition ? /*#__PURE__*/React.createElement(Transition, _extends({}, animationProps, {
@@ -259,12 +243,12 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
259
243
  }), children) : children;
260
244
  return /*#__PURE__*/React.createElement(OverlayContext.Provider, {
261
245
  value: contextValue
262
- }, /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
246
+ }, /*#__PURE__*/React.createElement(Portal, null, backdrop && renderBackdrop(), /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
263
247
  ref: mergeRefs(modal.setDialogRef, ref),
264
248
  style: style,
265
249
  className: className,
266
250
  tabIndex: -1
267
- }), backdrop && renderBackdrop(), dialogElement)));
251
+ }), dialogElement)));
268
252
  });
269
253
  export var modalPropTypes = {
270
254
  as: PropTypes.elementType,
@@ -289,7 +273,6 @@ Modal.propTypes = _extends({}, animationPropTypes, modalPropTypes, {
289
273
  dialogTransitionTimeout: PropTypes.number,
290
274
  backdropTransitionTimeout: PropTypes.number,
291
275
  transition: PropTypes.any,
292
- onEsc: PropTypes.func,
293
- onBackdropClick: PropTypes.func
276
+ onEsc: PropTypes.func
294
277
  });
295
278
  export default Modal;
@@ -99,6 +99,11 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
99
99
 
100
100
  useEffect(function () {
101
101
  var container = menuBodyContainerRef.current;
102
+
103
+ if (!container) {
104
+ return;
105
+ }
106
+
102
107
  var activeItem = container.querySelector("." + prefix('item-focus'));
103
108
 
104
109
  if (!activeItem) {
@@ -90,11 +90,9 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
90
90
  }
91
91
  }, [input, onFocus]);
92
92
  var handleBlur = useCallback(function (event) {
93
- if (document.activeElement !== inputRef.current) {
94
- var _inputRef$current2;
95
-
93
+ if (inputRef.current && document.activeElement !== inputRef.current) {
96
94
  setActive(false);
97
- (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.blur();
95
+ inputRef.current.blur();
98
96
  }
99
97
 
100
98
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
@@ -1,6 +1,16 @@
1
1
  import React from 'react';
2
2
  import { SliderProps } from '../Slider';
3
3
  export declare type Range = [number, number];
4
- export declare type RangeSliderProps = SliderProps<Range>;
5
- declare const RangeSlider: React.ForwardRefExoticComponent<RangeSliderProps & React.RefAttributes<unknown>>;
4
+ export declare type RangeSliderProps = SliderProps<Range> & {
5
+ /**
6
+ * Add constraint to validate before onChange is dispatched
7
+ */
8
+ constraint?: (range: Range) => boolean;
9
+ };
10
+ declare const RangeSlider: React.ForwardRefExoticComponent<SliderProps<Range> & {
11
+ /**
12
+ * Add constraint to validate before onChange is dispatched
13
+ */
14
+ constraint?: ((range: Range) => boolean) | undefined;
15
+ } & React.RefAttributes<unknown>>;
6
16
  export default RangeSlider;