rsuite 5.4.3 → 5.5.2

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 (85) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/Carousel/styles/index.less +1 -0
  3. package/CheckTreePicker/styles/index.less +51 -50
  4. package/Dropdown/styles/index.less +2 -19
  5. package/Modal/styles/mixin.less +1 -0
  6. package/Picker/styles/mixin.less +3 -2
  7. package/README.md +1 -1
  8. package/Sidenav/styles/index.less +54 -59
  9. package/TreePicker/styles/index.less +3 -3
  10. package/cjs/Calendar/useCalendarDate.d.ts +1 -1
  11. package/cjs/Calendar/useCalendarDate.js +1 -1
  12. package/cjs/Carousel/Carousel.js +7 -1
  13. package/cjs/Cascader/Cascader.js +15 -4
  14. package/cjs/CheckTreePicker/CheckTreePicker.js +1 -1
  15. package/cjs/CheckTreePicker/utils.js +1 -1
  16. package/cjs/CustomProvider/CustomProvider.d.ts +14 -14
  17. package/cjs/CustomProvider/CustomProvider.js +4 -3
  18. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  19. package/cjs/DatePicker/DatePicker.js +2 -4
  20. package/cjs/DateRangePicker/Calendar.js +2 -16
  21. package/cjs/Dropdown/Dropdown.d.ts +5 -0
  22. package/cjs/Dropdown/DropdownMenu.js +5 -11
  23. package/cjs/Dropdown/test/Dropdown.test.d.ts +1 -0
  24. package/cjs/Dropdown/test/Dropdown.test.js +30 -0
  25. package/cjs/InputNumber/InputNumber.d.ts +1 -1
  26. package/cjs/InputNumber/InputNumber.js +36 -6
  27. package/cjs/InputNumber/test/InputNumber.test.d.ts +1 -0
  28. package/cjs/InputNumber/test/InputNumber.test.js +14 -0
  29. package/cjs/Modal/utils.js +16 -8
  30. package/cjs/MultiCascader/MultiCascader.js +7 -3
  31. package/cjs/Nav/NavItem.js +3 -1
  32. package/cjs/Picker/DropdownMenu.js +5 -0
  33. package/cjs/Picker/PickerToggle.js +2 -4
  34. package/cjs/RangeSlider/RangeSlider.d.ts +12 -2
  35. package/cjs/RangeSlider/RangeSlider.js +35 -12
  36. package/cjs/Uploader/UploadFileItem.d.ts +1 -1
  37. package/cjs/Uploader/UploadFileItem.js +1 -1
  38. package/cjs/Uploader/Uploader.js +3 -0
  39. package/cjs/utils/propTypeChecker.d.ts +2 -6
  40. package/cjs/utils/propTypeChecker.js +7 -59
  41. package/cjs/utils/treeUtils.js +4 -3
  42. package/cjs/utils/useClickOutside.js +6 -2
  43. package/dist/rsuite-rtl.css +115 -127
  44. package/dist/rsuite-rtl.min.css +1 -1
  45. package/dist/rsuite-rtl.min.css.map +1 -1
  46. package/dist/rsuite.css +115 -127
  47. package/dist/rsuite.js +24 -24
  48. package/dist/rsuite.min.css +1 -1
  49. package/dist/rsuite.min.css.map +1 -1
  50. package/dist/rsuite.min.js +1 -1
  51. package/dist/rsuite.min.js.map +1 -1
  52. package/esm/Calendar/useCalendarDate.d.ts +1 -1
  53. package/esm/Calendar/useCalendarDate.js +1 -1
  54. package/esm/Carousel/Carousel.js +9 -3
  55. package/esm/Cascader/Cascader.js +15 -4
  56. package/esm/CheckTreePicker/CheckTreePicker.js +1 -1
  57. package/esm/CheckTreePicker/utils.js +1 -1
  58. package/esm/CustomProvider/CustomProvider.d.ts +14 -14
  59. package/esm/CustomProvider/CustomProvider.js +2 -2
  60. package/esm/DatePicker/DatePicker.d.ts +1 -1
  61. package/esm/DatePicker/DatePicker.js +2 -3
  62. package/esm/DateRangePicker/Calendar.js +2 -16
  63. package/esm/Dropdown/Dropdown.d.ts +5 -0
  64. package/esm/Dropdown/DropdownMenu.js +5 -11
  65. package/esm/Dropdown/test/Dropdown.test.d.ts +1 -0
  66. package/esm/Dropdown/test/Dropdown.test.js +22 -0
  67. package/esm/InputNumber/InputNumber.d.ts +1 -1
  68. package/esm/InputNumber/InputNumber.js +38 -7
  69. package/esm/InputNumber/test/InputNumber.test.d.ts +1 -0
  70. package/esm/InputNumber/test/InputNumber.test.js +7 -0
  71. package/esm/Modal/utils.js +16 -8
  72. package/esm/MultiCascader/MultiCascader.js +7 -3
  73. package/esm/Nav/NavItem.js +3 -1
  74. package/esm/Picker/DropdownMenu.js +5 -0
  75. package/esm/Picker/PickerToggle.js +2 -4
  76. package/esm/RangeSlider/RangeSlider.d.ts +12 -2
  77. package/esm/RangeSlider/RangeSlider.js +35 -12
  78. package/esm/Uploader/UploadFileItem.d.ts +1 -1
  79. package/esm/Uploader/UploadFileItem.js +1 -1
  80. package/esm/Uploader/Uploader.js +4 -1
  81. package/esm/utils/propTypeChecker.d.ts +2 -6
  82. package/esm/utils/propTypeChecker.js +7 -59
  83. package/esm/utils/treeUtils.js +6 -3
  84. package/esm/utils/useClickOutside.js +6 -2
  85. package/package.json +2 -2
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
6
 
5
7
  exports.__esModule = true;
@@ -9,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
11
 
10
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
13
 
12
- var _react = _interopRequireDefault(require("react"));
14
+ var _react = _interopRequireWildcard(require("react"));
13
15
 
14
16
  var _prefix = require("../utils/prefix");
15
17
 
@@ -37,7 +39,7 @@ var CustomProvider = function CustomProvider(props) {
37
39
  }, rest);
38
40
  }, [classPrefix, theme, rest]);
39
41
 
40
- _react.default.useEffect(function () {
42
+ (0, _react.useEffect)(function () {
41
43
  if (_DOMHelper.canUseDOM && theme) {
42
44
  (0, _DOMHelper.addClass)(document.body, (0, _prefix.prefix)(classPrefix, "theme-" + theme)); // Remove the className that will cause style conflicts
43
45
 
@@ -48,7 +50,6 @@ var CustomProvider = function CustomProvider(props) {
48
50
  });
49
51
  }
50
52
  }, [classPrefix, theme]);
51
-
52
53
  return /*#__PURE__*/_react.default.createElement(Provider, {
53
54
  value: value
54
55
  }, children);
@@ -3,7 +3,7 @@ import { RangeType } from './Toolbar';
3
3
  import { DatePickerLocale } from '../locales';
4
4
  import { FormControlBaseProps, PickerBaseProps, RsRefForwardingComponent } from '../@types/common';
5
5
  export type { RangeType } from './Toolbar';
6
- export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date> {
6
+ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null> {
7
7
  /** Configure shortcut options */
8
8
  ranges?: RangeType<Date>[];
9
9
  /** Calendar panel default presentation date and time */
@@ -15,8 +15,6 @@ var _react = _interopRequireWildcard(require("react"));
15
15
 
16
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
- var _isNil = _interopRequireDefault(require("lodash/isNil"));
19
-
20
18
  var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
21
19
 
22
20
  var _pick = _interopRequireDefault(require("lodash/pick"));
@@ -194,11 +192,11 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
194
192
  closeOverlay = true;
195
193
  }
196
194
 
197
- var nextValue = !(0, _isNil.default)(nextPageDate) ? nextPageDate : calendarDate;
195
+ var nextValue = typeof nextPageDate !== 'undefined' ? nextPageDate : calendarDate;
198
196
  setCalendarDate(nextValue || new Date());
199
197
  setValue(nextValue);
200
198
 
201
- if (nextValue !== value || !_utils.DateUtils.isSameDay(nextValue, value)) {
199
+ if (nextValue !== value) {
202
200
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
203
201
  } // `closeOverlay` default value is `true`
204
202
 
@@ -114,22 +114,8 @@ var Calendar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
114
114
  return !after;
115
115
  }, [calendarDate, index, showOneCalendar]);
116
116
  var disabledMonth = (0, _react.useCallback)(function (date) {
117
- var after;
118
-
119
- if (disabledDate !== null && disabledDate !== void 0 && disabledDate(date, value, _utils.DATERANGE_DISABLED_TARGET.CALENDAR)) {
120
- return true;
121
- }
122
-
123
- if (showOneCalendar) return false;
124
-
125
- if (index === 1) {
126
- after = (0, _dateUtils.isAfter)(date, calendarDate[0]);
127
- return !after;
128
- }
129
-
130
- after = (0, _dateUtils.isAfter)(calendarDate[1], date);
131
- return !after;
132
- }, [calendarDate, disabledDate, index, showOneCalendar, value]);
117
+ return disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date, value, _utils.DATERANGE_DISABLED_TARGET.CALENDAR);
118
+ }, [disabledDate, value]);
133
119
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
134
120
  format: format,
135
121
  calendarState: calendarState,
@@ -3,6 +3,7 @@ import DropdownMenu from './DropdownMenu';
3
3
  import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
4
4
  import { IconProps } from '@rsuite/icons/lib/Icon';
5
5
  import DropdownItem from './DropdownItem';
6
+ import Button from '../Button';
6
7
  export declare type DropdownTrigger = 'click' | 'hover' | 'contextMenu';
7
8
  export interface DropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect' | 'title'> {
8
9
  /** Define the title as a submenu */
@@ -48,6 +49,10 @@ export interface DropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttr
48
49
  onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
49
50
  }
50
51
  export interface DropdownComponent extends RsRefForwardingComponent<'div', DropdownProps> {
52
+ <ToggleAs extends React.ElementType = typeof Button>(props: DropdownProps & {
53
+ ref?: React.Ref<any>;
54
+ toggleAs?: ToggleAs;
55
+ } & React.ComponentProps<ToggleAs>, context: any): JSX.Element | null;
51
56
  Item: typeof DropdownItem;
52
57
  Menu: typeof DropdownMenu;
53
58
  }
@@ -152,8 +152,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
152
152
  var classes = mergeItemClassNames(className, withItemClassPrefix({
153
153
  disabled: disabled,
154
154
  open: open,
155
- submenu: true // focus: hasFocus
156
-
155
+ submenu: true
157
156
  }));
158
157
  return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
159
158
  ref: (0, _utils.mergeRefs)(ref, containerRef),
@@ -161,13 +160,10 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
161
160
  }, props), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (_ref2, buttonRef) {
162
161
  var open = _ref2.open,
163
162
  buttonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
164
- var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), // prefixItemClassName`submenu`,
165
- withItemClassPrefix({
163
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
166
164
  'with-icon': icon,
167
165
  open: open,
168
- // active: selected,
169
- disabled: disabled // focus: active
170
-
166
+ disabled: disabled
171
167
  }));
172
168
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
173
169
  ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
@@ -202,8 +198,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
202
198
  var selected = _ref5.selected,
203
199
  active = _ref5.active,
204
200
  menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref5, ["selected", "active"]);
205
- var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), // prefixItemClassName`submenu`,
206
- withItemClassPrefix({
201
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
207
202
  'with-icon': icon,
208
203
  open: open,
209
204
  active: selected,
@@ -239,8 +234,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
239
234
  var classes = mergeItemClassNames(className, withItemClassPrefix({
240
235
  disabled: disabled,
241
236
  open: open,
242
- submenu: true // focus: hasFocus
243
-
237
+ submenu: true
244
238
  }));
245
239
  return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
246
240
  ref: (0, _utils.mergeRefs)(ref, menuContainerRef),
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _Dropdown = _interopRequireDefault(require("../Dropdown"));
8
+
9
+ var ref = /*#__PURE__*/_react.default.createRef(); // Infer `toggleAs` props (defaults to Button)
10
+
11
+
12
+ /*#__PURE__*/
13
+ _react.default.createElement(_Dropdown.default, {
14
+ ref: ref,
15
+ appearance: "subtle",
16
+ size: "sm"
17
+ });
18
+ /* eslint-disable @typescript-eslint/no-unused-vars */
19
+
20
+
21
+ var CustomToggle = function CustomToggle(_props) {
22
+ return null;
23
+ };
24
+
25
+ /*#__PURE__*/
26
+ _react.default.createElement(_Dropdown.default, {
27
+ ref: ref,
28
+ toggleAs: CustomToggle,
29
+ myProp: "myValue"
30
+ });
@@ -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 */
@@ -114,15 +114,15 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
114
114
  step = _props$step === void 0 ? 1 : _props$step,
115
115
  _props$buttonAppearan = props.buttonAppearance,
116
116
  buttonAppearance = _props$buttonAppearan === void 0 ? 'subtle' : _props$buttonAppearan,
117
- _props$min = props.min,
118
- min = _props$min === void 0 ? -Infinity : _props$min,
119
- _props$max = props.max,
120
- max = _props$max === void 0 ? Infinity : _props$max,
117
+ minProp = props.min,
118
+ maxProp = props.max,
121
119
  _props$scrollable = props.scrollable,
122
120
  scrollable = _props$scrollable === void 0 ? true : _props$scrollable,
123
121
  onChange = props.onChange,
124
122
  onWheel = props.onWheel,
125
123
  restProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "disabled", "readOnly", "plaintext", "value", "defaultValue", "size", "prefix", "postfix", "step", "buttonAppearance", "min", "max", "scrollable", "onChange", "onWheel"]);
124
+ var min = minProp !== null && minProp !== void 0 ? minProp : -Infinity;
125
+ var max = maxProp !== null && maxProp !== void 0 ? maxProp : Infinity;
126
126
 
127
127
  var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
128
128
  value = _useControlled[0],
@@ -187,6 +187,35 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
187
187
  var bit = decimals(val, step);
188
188
  handleChangeValue(getSafeValue((val - step).toFixed(bit)), event);
189
189
  }, [getSafeValue, handleChangeValue, step, value]);
190
+ var handleKeyDown = (0, _react.useCallback)(function (event) {
191
+ switch (event.key) {
192
+ case _utils.KEY_VALUES.UP:
193
+ event.preventDefault();
194
+ handlePlus(event);
195
+ break;
196
+
197
+ case _utils.KEY_VALUES.DOWN:
198
+ event.preventDefault();
199
+ handleMinus(event);
200
+ break;
201
+
202
+ case _utils.KEY_VALUES.HOME:
203
+ if (typeof minProp !== 'undefined') {
204
+ event.preventDefault();
205
+ handleChangeValue(getSafeValue(minProp), event);
206
+ }
207
+
208
+ break;
209
+
210
+ case _utils.KEY_VALUES.END:
211
+ if (typeof maxProp !== 'undefined') {
212
+ event.preventDefault();
213
+ handleChangeValue(getSafeValue(maxProp), event);
214
+ }
215
+
216
+ break;
217
+ }
218
+ }, [handlePlus, handleMinus, minProp, maxProp, handleChangeValue, getSafeValue]);
190
219
  var handleWheel = (0, _react.useCallback)(function (event) {
191
220
  if (!disabled && !readOnly && event.target === document.activeElement) {
192
221
  event.preventDefault();
@@ -233,7 +262,7 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
233
262
  }, [handleWheel, scrollable]);
234
263
 
235
264
  var input = /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({}, htmlInputProps, {
236
- type: "text",
265
+ type: "number",
237
266
  autoComplete: "off",
238
267
  step: step,
239
268
  inputRef: inputRef,
@@ -243,7 +272,8 @@ var InputNumber = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
243
272
  disabled: disabled,
244
273
  readOnly: readOnly,
245
274
  plaintext: plaintext,
246
- ref: plaintext ? ref : undefined
275
+ ref: plaintext ? ref : undefined,
276
+ onKeyDown: handleKeyDown
247
277
  }));
248
278
 
249
279
  if (plaintext) {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _InputNumber = _interopRequireDefault(require("../InputNumber"));
8
+
9
+ // Inherits <input type="number" /> attributes
10
+
11
+ /*#__PURE__*/
12
+ _react.default.createElement(_InputNumber.default, {
13
+ placeholder: "Enter number"
14
+ });
@@ -56,21 +56,29 @@ var useBodyStyles = function useBodyStyles(ref, options) {
56
56
 
57
57
  (_windowResizeListener = windowResizeListener.current) === null || _windowResizeListener === void 0 ? void 0 : (_windowResizeListener2 = _windowResizeListener.off) === null || _windowResizeListener2 === void 0 ? void 0 : _windowResizeListener2.call(_windowResizeListener);
58
58
  (_contentElementResize = contentElementResizeObserver.current) === null || _contentElementResize === void 0 ? void 0 : _contentElementResize.disconnect();
59
+ windowResizeListener.current = null;
60
+ contentElementResizeObserver.current = null;
59
61
  }, []);
60
62
  var onChangeBodyStyles = (0, _react.useCallback)(function (entering) {
61
- if (overflow && !drawer) {
63
+ if (overflow && !drawer && ref.current) {
62
64
  updateBodyStyles(undefined, entering);
63
65
  contentElement.current = ref.current.querySelector("." + prefix('content'));
64
- windowResizeListener.current = (0, _on.default)(window, 'resize', updateBodyStyles);
65
- contentElementResizeObserver.current = new _resizeObserver.ResizeObserver(function () {
66
- return updateBodyStyles();
67
- });
68
- contentElementResizeObserver.current.observe(contentElement.current);
66
+
67
+ if (!windowResizeListener.current) {
68
+ windowResizeListener.current = (0, _on.default)(window, 'resize', updateBodyStyles);
69
+ }
70
+
71
+ if (contentElement.current && !contentElementResizeObserver.current) {
72
+ contentElementResizeObserver.current = new _resizeObserver.ResizeObserver(function () {
73
+ return updateBodyStyles();
74
+ });
75
+ contentElementResizeObserver.current.observe(contentElement.current);
76
+ }
69
77
  }
70
78
  }, [drawer, overflow, prefix, ref, updateBodyStyles]);
71
79
  (0, _react.useEffect)(function () {
72
- onDestroyEvents();
73
- }, [onDestroyEvents]);
80
+ return onDestroyEvents; // eslint-disable-next-line react-hooks/exhaustive-deps
81
+ }, []);
74
82
  return [overflow ? bodyStyles : {}, onChangeBodyStyles, onDestroyEvents];
75
83
  };
76
84
 
@@ -220,8 +220,11 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
220
220
  children.then(function (data) {
221
221
  node.loading = false;
222
222
  node[childrenKey] = data;
223
- addFlattenData(data, node);
224
- addColumn(data, cascadePaths.length);
223
+
224
+ if (targetRef.current) {
225
+ addFlattenData(data, node);
226
+ addColumn(data, cascadePaths.length);
227
+ }
225
228
  });
226
229
  } else {
227
230
  node.loading = false;
@@ -258,7 +261,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
258
261
  onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
259
262
  }, [cascade, onChange, onCheck, setValue, splitValue, value, valueKey]);
260
263
  var handleClean = (0, _react.useCallback)(function (event) {
261
- if (disabled) {
264
+ if (disabled || !targetRef.current) {
262
265
  return;
263
266
  }
264
267
 
@@ -479,6 +482,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
479
482
  var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends3.default)({}, props, {
480
483
  classPrefix: classPrefix,
481
484
  hasValue: hasValue,
485
+ countable: countable,
482
486
  name: 'cascader',
483
487
  appearance: appearance,
484
488
  cleanable: cleanable
@@ -104,7 +104,9 @@ var NavItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
104
104
  }
105
105
 
106
106
  if (navbar) {
107
- return /*#__PURE__*/_react.default.createElement(_NavbarItem.default, props);
107
+ return /*#__PURE__*/_react.default.createElement(_NavbarItem.default, (0, _extends2.default)({
108
+ ref: ref
109
+ }, props));
108
110
  }
109
111
 
110
112
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
@@ -122,6 +122,11 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
122
122
 
123
123
  (0, _react.useEffect)(function () {
124
124
  var container = menuBodyContainerRef.current;
125
+
126
+ if (!container) {
127
+ return;
128
+ }
129
+
125
130
  var activeItem = container.querySelector("." + prefix('item-focus'));
126
131
 
127
132
  if (!activeItem) {
@@ -111,11 +111,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
111
111
  }
112
112
  }, [input, onFocus]);
113
113
  var handleBlur = (0, _react.useCallback)(function (event) {
114
- if (document.activeElement !== inputRef.current) {
115
- var _inputRef$current2;
116
-
114
+ if (inputRef.current && document.activeElement !== inputRef.current) {
117
115
  setActive(false);
118
- (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.blur();
116
+ inputRef.current.blur();
119
117
  }
120
118
 
121
119
  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;
@@ -45,6 +45,7 @@ var RangeSlider = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
45
45
  Component = _props$as === void 0 ? 'div' : _props$as,
46
46
  barClassName = props.barClassName,
47
47
  className = props.className,
48
+ constraint = props.constraint,
48
49
  _props$defaultValue = props.defaultValue,
49
50
  defaultValue = _props$defaultValue === void 0 ? defaultDefaultValue : _props$defaultValue,
50
51
  graduated = props.graduated,
@@ -71,7 +72,7 @@ var RangeSlider = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
71
72
  renderMark = props.renderMark,
72
73
  onChange = props.onChange,
73
74
  onChangeCommitted = props.onChangeCommitted,
74
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["aria-label", "aria-labelledby", "aria-valuetext", "as", "barClassName", "className", "defaultValue", "graduated", "progress", "vertical", "disabled", "classPrefix", "min", "max", "step", "value", "handleClassName", "handleStyle", "handleTitle", "tooltip", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted"]);
75
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["aria-label", "aria-labelledby", "aria-valuetext", "as", "barClassName", "className", "constraint", "defaultValue", "graduated", "progress", "vertical", "disabled", "classPrefix", "min", "max", "step", "value", "handleClassName", "handleStyle", "handleTitle", "tooltip", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted"]);
75
76
  var barRef = (0, _react.useRef)(null); // Define the parameter position of the handle
76
77
 
77
78
  var handleIndexs = (0, _react.useRef)([0, 1]);
@@ -180,14 +181,27 @@ var RangeSlider = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
180
181
 
181
182
  return nextValue;
182
183
  }, [getRangeValue, getValidValue]);
184
+ /**
185
+ * Whether a range is valid against given constraint (if any)
186
+ * Should check before every `setValue` calls
187
+ */
188
+
189
+ var isRangeMatchingConstraint = (0, _react.useCallback)(function (range) {
190
+ // If no constraint is defined, any range is valid
191
+ if (!constraint) return true;
192
+ return constraint(range);
193
+ }, [constraint]);
183
194
  /**
184
195
  * Callback function that is fired when the mousemove is triggered
185
196
  */
186
197
 
187
198
  var handleDragMove = (0, _utils.useEventCallback)(function (event, dataset) {
188
199
  var nextValue = getNextValue(event, dataset);
189
- setValue(nextValue);
190
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
200
+
201
+ if (isRangeMatchingConstraint(nextValue)) {
202
+ setValue(nextValue);
203
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
204
+ }
191
205
  });
192
206
  /**
193
207
  * Callback function that is fired when the mouseup is triggered
@@ -195,9 +209,12 @@ var RangeSlider = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
195
209
 
196
210
  var handleChangeCommitted = (0, _react.useCallback)(function (event, dataset) {
197
211
  var nextValue = getNextValue(event, dataset);
198
- setValue(nextValue);
199
- onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
200
- }, [getNextValue, onChangeCommitted, setValue]);
212
+
213
+ if (isRangeMatchingConstraint(nextValue)) {
214
+ setValue(nextValue);
215
+ onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
216
+ }
217
+ }, [getNextValue, onChangeCommitted, isRangeMatchingConstraint, setValue]);
201
218
  var handleKeyDown = (0, _react.useCallback)(function (event) {
202
219
  var _event$target;
203
220
 
@@ -240,9 +257,12 @@ var RangeSlider = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
240
257
 
241
258
 
242
259
  event.preventDefault();
243
- setValue(nextValue);
244
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
245
- }, [max, min, onChange, rtl, setValue, step, value]);
260
+
261
+ if (isRangeMatchingConstraint(nextValue)) {
262
+ setValue(nextValue);
263
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
264
+ }
265
+ }, [max, min, onChange, rtl, isRangeMatchingConstraint, setValue, step, value]);
246
266
  var handleClick = (0, _react.useCallback)(function (event) {
247
267
  if (disabled) {
248
268
  return;
@@ -259,9 +279,12 @@ var RangeSlider = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
259
279
  }
260
280
 
261
281
  var nextValue = getValidValue([start, end].sort());
262
- setValue(nextValue);
263
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
264
- }, [disabled, getValidValue, getValueByPosition, onChange, setValue, value]);
282
+
283
+ if (isRangeMatchingConstraint(nextValue)) {
284
+ setValue(nextValue);
285
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
286
+ }
287
+ }, [disabled, getValidValue, getValueByPosition, isRangeMatchingConstraint, onChange, setValue, value]);
265
288
  var handleProps = (0, _react.useMemo)(function () {
266
289
  return [{
267
290
  value: value[0],
@@ -4,7 +4,7 @@ import { UploaderLocale } from '../locales';
4
4
  import { WithAsProps } from '../@types/common';
5
5
  export interface UploadFileItemProps extends WithAsProps {
6
6
  file: FileType;
7
- listType: 'text' | 'picture-text' | 'picture';
7
+ listType?: 'text' | 'picture-text' | 'picture';
8
8
  disabled?: boolean;
9
9
  className?: string;
10
10
  maxPreviewFileSize?: number;
@@ -297,7 +297,7 @@ UploadFileItem.displayName = 'UploadFileItem';
297
297
  UploadFileItem.propTypes = {
298
298
  locale: _propTypes.default.any,
299
299
  file: _propTypes.default.object.isRequired,
300
- listType: _propTypes.default.oneOf(['text', 'picture-text', 'picture']).isRequired,
300
+ listType: _propTypes.default.oneOf(['text', 'picture-text', 'picture']),
301
301
  disabled: _propTypes.default.bool,
302
302
  className: _propTypes.default.string,
303
303
  maxPreviewFileSize: _propTypes.default.number,
@@ -100,6 +100,9 @@ var useFileList = function useFileList(defaultFileList) {
100
100
  (_fileListUpdateCallba = fileListUpdateCallback.current) === null || _fileListUpdateCallba === void 0 ? void 0 : _fileListUpdateCallba.call(fileListUpdateCallback, fileList);
101
101
  fileListUpdateCallback.current = null;
102
102
  }, [fileList]);
103
+ (0, _utils.useWillUnmount)(function () {
104
+ fileListUpdateCallback.current = null;
105
+ });
103
106
  var dispatchCallback = (0, _react.useCallback)(function (action, callback) {
104
107
  dispatch(action);
105
108
  fileListUpdateCallback.current = callback;
@@ -1,7 +1,3 @@
1
- import PropTypes, { Requireable, Validator } from 'prop-types';
2
- declare type ExtractValue<T extends ReadonlyArray<Validator<any>>> = {
3
- [K in keyof T]: T[K] extends Validator<infer V> ? V : never;
4
- };
5
- export declare function tupleType<T extends readonly Validator<any>[]>(...types: T): Requireable<ExtractValue<T>>;
1
+ import PropTypes from 'prop-types';
2
+ export declare function tupleType<T>(...typeCheckers: any[]): PropTypes.Requireable<T>;
6
3
  export declare const refType: PropTypes.Requireable<any>;
7
- export {};
@@ -8,71 +8,19 @@ exports.refType = void 0;
8
8
 
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
 
11
- var ANONYMOUS = '';
12
-
13
- function createChainableTypeChecker(validate) {
14
- function checkType(isRequired, props, propName, componentName, location, propFullName) {
15
- componentName = componentName || ANONYMOUS;
16
- propFullName = propFullName || propName;
17
-
18
- if (props[propName] == null) {
19
- if (isRequired) {
20
- if (props[propName] === null) {
21
- return new Error('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
22
- }
23
-
24
- return new Error('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
25
- }
26
-
27
- return null;
28
- } else {
29
- return validate(props, propName, componentName, location, propFullName);
30
- }
31
- }
32
-
33
- var chainedCheckType = Object.assign(checkType.bind(null, false), {
34
- isRequired: checkType.bind(null, true)
35
- });
36
- return chainedCheckType;
37
- }
38
-
39
11
  function tupleType() {
40
- for (var _len = arguments.length, types = new Array(_len), _key = 0; _key < _len; _key++) {
41
- types[_key] = arguments[_key];
12
+ for (var _len = arguments.length, typeCheckers = new Array(_len), _key = 0; _key < _len; _key++) {
13
+ typeCheckers[_key] = arguments[_key];
42
14
  }
43
15
 
44
- return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
45
- var value = props[propName];
46
-
47
- if (!location) {
48
- location = 'prop';
49
- }
50
-
51
- if (!propFullName) {
52
- propFullName = propName;
53
- }
54
-
55
- if (!Array.isArray(value)) {
56
- return new Error("Invalid " + location + " `" + propFullName + "` supplied to `" + componentName + "`, expected " + types.length + "-element array");
57
- }
58
-
59
- if (value.length === 0) {
60
- return null;
61
- }
62
-
63
- if (value.length !== types.length) {
64
- return new Error("Invalid " + location + " `" + propFullName + "` supplied to `" + componentName + "`, expected " + types.length + "-element array, got array of length " + value.length);
65
- }
66
-
67
- for (var i = 0; i < value.length; ++i) {
68
- var error = types[i](value, String(i), componentName, 'element', propFullName + "[" + i + "]");
16
+ return _propTypes.default.arrayOf(function (value, index) {
17
+ var _typeCheckers$index;
69
18
 
70
- if (error) {
71
- return error;
72
- }
19
+ for (var _len2 = arguments.length, rest = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
20
+ rest[_key2 - 2] = arguments[_key2];
73
21
  }
74
22
 
75
- return null;
23
+ return (_typeCheckers$index = typeCheckers[index]).call.apply(_typeCheckers$index, [_propTypes.default, value, index].concat(rest));
76
24
  });
77
25
  }
78
26