rsuite 5.4.2 → 5.5.1

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 (101) hide show
  1. package/Button/styles/index.less +1 -5
  2. package/CHANGELOG.md +47 -0
  3. package/Carousel/styles/index.less +1 -0
  4. package/CheckTreePicker/styles/index.less +51 -50
  5. package/Drawer/styles/index.less +3 -0
  6. package/Dropdown/styles/index.less +3 -19
  7. package/Dropdown/styles/mixin.less +0 -2
  8. package/Modal/styles/mixin.less +1 -0
  9. package/Navbar/styles/index.less +8 -3
  10. package/Picker/styles/mixin.less +3 -2
  11. package/README.md +1 -1
  12. package/Sidenav/styles/index.less +59 -58
  13. package/TreePicker/styles/index.less +3 -3
  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/DateRangePicker/Calendar.js +2 -16
  27. package/cjs/Dropdown/Dropdown.d.ts +5 -0
  28. package/cjs/Dropdown/DropdownMenu.js +5 -11
  29. package/cjs/Dropdown/test/Dropdown.test.d.ts +1 -0
  30. package/cjs/Dropdown/test/Dropdown.test.js +30 -0
  31. package/cjs/InputNumber/InputNumber.d.ts +1 -1
  32. package/cjs/InputNumber/InputNumber.js +36 -6
  33. package/cjs/InputNumber/test/InputNumber.test.d.ts +1 -0
  34. package/cjs/InputNumber/test/InputNumber.test.js +14 -0
  35. package/cjs/Modal/utils.js +16 -8
  36. package/cjs/MultiCascader/MultiCascader.js +7 -3
  37. package/cjs/Nav/NavItem.js +3 -1
  38. package/cjs/Picker/DropdownMenu.js +5 -0
  39. package/cjs/Picker/PickerToggle.js +2 -4
  40. package/cjs/RangeSlider/RangeSlider.d.ts +12 -2
  41. package/cjs/RangeSlider/RangeSlider.js +35 -12
  42. package/cjs/SelectPicker/SelectPicker.d.ts +5 -2
  43. package/cjs/SelectPicker/test/SelectPicker.test.js +8 -0
  44. package/cjs/Uploader/UploadFileItem.d.ts +1 -1
  45. package/cjs/Uploader/UploadFileItem.js +1 -1
  46. package/cjs/Uploader/Uploader.js +3 -0
  47. package/cjs/utils/propTypeChecker.d.ts +2 -6
  48. package/cjs/utils/propTypeChecker.js +7 -59
  49. package/cjs/utils/treeUtils.js +4 -3
  50. package/cjs/utils/useClickOutside.js +6 -2
  51. package/dist/rsuite-rtl.css +399 -252
  52. package/dist/rsuite-rtl.min.css +1 -1
  53. package/dist/rsuite-rtl.min.css.map +1 -1
  54. package/dist/rsuite.css +399 -252
  55. package/dist/rsuite.js +27 -27
  56. package/dist/rsuite.min.css +1 -1
  57. package/dist/rsuite.min.css.map +1 -1
  58. package/dist/rsuite.min.js +1 -1
  59. package/dist/rsuite.min.js.map +1 -1
  60. package/esm/Calendar/useCalendarDate.d.ts +1 -1
  61. package/esm/Calendar/useCalendarDate.js +1 -1
  62. package/esm/Carousel/Carousel.js +9 -3
  63. package/esm/Cascader/Cascader.js +13 -2
  64. package/esm/CheckPicker/CheckPicker.d.ts +5 -2
  65. package/esm/CheckPicker/test/CheckPicker.test.js +7 -0
  66. package/esm/CheckTreePicker/CheckTreePicker.js +1 -1
  67. package/esm/CheckTreePicker/utils.js +1 -1
  68. package/esm/CustomProvider/CustomProvider.d.ts +14 -14
  69. package/esm/CustomProvider/CustomProvider.js +2 -2
  70. package/esm/DatePicker/DatePicker.d.ts +1 -1
  71. package/esm/DatePicker/DatePicker.js +2 -3
  72. package/esm/DateRangePicker/Calendar.js +2 -16
  73. package/esm/Dropdown/Dropdown.d.ts +5 -0
  74. package/esm/Dropdown/DropdownMenu.js +5 -11
  75. package/esm/Dropdown/test/Dropdown.test.d.ts +1 -0
  76. package/esm/Dropdown/test/Dropdown.test.js +22 -0
  77. package/esm/InputNumber/InputNumber.d.ts +1 -1
  78. package/esm/InputNumber/InputNumber.js +38 -7
  79. package/esm/InputNumber/test/InputNumber.test.d.ts +1 -0
  80. package/esm/InputNumber/test/InputNumber.test.js +7 -0
  81. package/esm/Modal/utils.js +16 -8
  82. package/esm/MultiCascader/MultiCascader.js +7 -3
  83. package/esm/Nav/NavItem.js +3 -1
  84. package/esm/Picker/DropdownMenu.js +5 -0
  85. package/esm/Picker/PickerToggle.js +2 -4
  86. package/esm/RangeSlider/RangeSlider.d.ts +12 -2
  87. package/esm/RangeSlider/RangeSlider.js +35 -12
  88. package/esm/SelectPicker/SelectPicker.d.ts +5 -2
  89. package/esm/SelectPicker/test/SelectPicker.test.js +7 -0
  90. package/esm/Uploader/UploadFileItem.d.ts +1 -1
  91. package/esm/Uploader/UploadFileItem.js +1 -1
  92. package/esm/Uploader/Uploader.js +4 -1
  93. package/esm/utils/propTypeChecker.d.ts +2 -6
  94. package/esm/utils/propTypeChecker.js +7 -59
  95. package/esm/utils/treeUtils.js +6 -3
  96. package/esm/utils/useClickOutside.js +6 -2
  97. package/package.json +2 -2
  98. package/styles/color-modes/dark.less +1 -0
  99. package/styles/color-modes/high-contrast.less +1 -0
  100. package/styles/color-modes/light.less +1 -0
  101. package/styles/mixins/utilities.less +17 -5
@@ -72,10 +72,10 @@ declare const CustomContext: React.Context<CustomProviderProps<{
72
72
  saturday: string;
73
73
  ok: string;
74
74
  today: string;
75
- yesterday: string; /** Language configuration */
75
+ yesterday: string;
76
76
  hours: string;
77
77
  minutes: string;
78
- seconds: string;
78
+ seconds: string; /** Support right-to-left */
79
79
  formattedMonthPattern: string;
80
80
  formattedDayPattern: string;
81
81
  dateLocale: any;
@@ -90,10 +90,10 @@ declare const CustomContext: React.Context<CustomProviderProps<{
90
90
  saturday: string;
91
91
  ok: string;
92
92
  today: string;
93
- yesterday: string; /** Language configuration */
93
+ yesterday: string;
94
94
  hours: string;
95
95
  minutes: string;
96
- seconds: string;
96
+ seconds: string; /** Support right-to-left */
97
97
  formattedMonthPattern: string;
98
98
  formattedDayPattern: string;
99
99
  dateLocale: any;
@@ -109,10 +109,10 @@ declare const CustomContext: React.Context<CustomProviderProps<{
109
109
  saturday: string;
110
110
  ok: string;
111
111
  today: string;
112
- yesterday: string; /** Language configuration */
112
+ yesterday: string;
113
113
  hours: string;
114
114
  minutes: string;
115
- seconds: string;
115
+ seconds: string; /** Support right-to-left */
116
116
  formattedMonthPattern: string;
117
117
  formattedDayPattern: string;
118
118
  dateLocale: any;
@@ -120,7 +120,7 @@ declare const CustomContext: React.Context<CustomProviderProps<{
120
120
  Picker?: {
121
121
  noResultsText: string;
122
122
  placeholder: string;
123
- searchPlaceholder: string; /** Supported themes */
123
+ searchPlaceholder: string;
124
124
  checkAll: string;
125
125
  } | undefined;
126
126
  InputPicker?: {
@@ -176,10 +176,10 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
176
176
  saturday: string;
177
177
  ok: string;
178
178
  today: string;
179
- yesterday: string; /** Language configuration */
179
+ yesterday: string;
180
180
  hours: string;
181
181
  minutes: string;
182
- seconds: string;
182
+ seconds: string; /** Support right-to-left */
183
183
  formattedMonthPattern: string;
184
184
  formattedDayPattern: string;
185
185
  dateLocale: any;
@@ -194,10 +194,10 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
194
194
  saturday: string;
195
195
  ok: string;
196
196
  today: string;
197
- yesterday: string; /** Language configuration */
197
+ yesterday: string;
198
198
  hours: string;
199
199
  minutes: string;
200
- seconds: string;
200
+ seconds: string; /** Support right-to-left */
201
201
  formattedMonthPattern: string;
202
202
  formattedDayPattern: string;
203
203
  dateLocale: any;
@@ -213,10 +213,10 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
213
213
  saturday: string;
214
214
  ok: string;
215
215
  today: string;
216
- yesterday: string; /** Language configuration */
216
+ yesterday: string;
217
217
  hours: string;
218
218
  minutes: string;
219
- seconds: string;
219
+ seconds: string; /** Support right-to-left */
220
220
  formattedMonthPattern: string;
221
221
  formattedDayPattern: string;
222
222
  dateLocale: any;
@@ -224,7 +224,7 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
224
224
  Picker?: {
225
225
  noResultsText: string;
226
226
  placeholder: string;
227
- searchPlaceholder: string; /** Supported themes */
227
+ searchPlaceholder: string;
228
228
  checkAll: string;
229
229
  } | undefined;
230
230
  InputPicker?: {
@@ -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],
@@ -1,5 +1,6 @@
1
- import React from 'react';
1
+ import React, { Ref } from 'react';
2
2
  import { PickerLocale } from '../locales';
3
+ import { PickerInstance } from '../Picker';
3
4
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
4
5
  import { ListProps } from 'react-virtualized/dist/commonjs/List';
5
6
  export interface SelectProps<T> {
@@ -42,7 +43,9 @@ export interface MultipleSelectProps<T> extends Omit<SelectProps<T>, 'renderValu
42
43
  export interface SelectPickerProps<T> extends FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, SelectProps<T> {
43
44
  }
44
45
  export interface SelectPickerComponent {
45
- <T>(props: SelectPickerProps<T>): JSX.Element | null;
46
+ <T>(props: SelectPickerProps<T> & {
47
+ ref?: Ref<PickerInstance>;
48
+ }): JSX.Element | null;
46
49
  displayName?: string;
47
50
  propTypes?: React.WeakValidationMap<SelectPickerProps<any>>;
48
51
  }
@@ -59,4 +59,12 @@ _react.default.createElement(_SelectPicker.default, {
59
59
  onChange: function onChange(newValue) {
60
60
  (0, _tsExpect.expectType)(newValue);
61
61
  }
62
+ });
63
+
64
+ var pickerRef = /*#__PURE__*/_react.default.createRef();
65
+
66
+ /*#__PURE__*/
67
+ _react.default.createElement(_SelectPicker.default, {
68
+ ref: pickerRef,
69
+ data: []
62
70
  });