rsuite 5.4.4 → 5.6.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 (91) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/Carousel/styles/index.less +1 -0
  3. package/CheckTreePicker/styles/index.less +51 -50
  4. package/Modal/styles/mixin.less +1 -0
  5. package/Picker/styles/mixin.less +3 -2
  6. package/README.md +1 -1
  7. package/Sidenav/styles/index.less +54 -59
  8. package/TreePicker/styles/index.less +3 -3
  9. package/cjs/Affix/Affix.js +1 -0
  10. package/cjs/Calendar/TimeDropdown.js +7 -4
  11. package/cjs/Carousel/Carousel.d.ts +5 -1
  12. package/cjs/Carousel/Carousel.js +22 -16
  13. package/cjs/Cascader/Cascader.js +2 -2
  14. package/cjs/Cascader/DropdownMenu.js +1 -1
  15. package/cjs/CheckTreePicker/CheckTreePicker.js +17 -12
  16. package/cjs/CheckTreePicker/utils.d.ts +3 -3
  17. package/cjs/CheckTreePicker/utils.js +2 -2
  18. package/cjs/DOMHelper/index.d.ts +4 -4
  19. package/cjs/DatePicker/DatePicker.js +15 -9
  20. package/cjs/DateRangePicker/Calendar.js +2 -16
  21. package/cjs/DateRangePicker/DateRangePicker.js +1 -1
  22. package/cjs/Dropdown/Dropdown.d.ts +5 -0
  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/InputPicker/InputAutosize.js +3 -1
  30. package/cjs/InputPicker/InputPicker.js +6 -2
  31. package/cjs/List/ListItem.js +13 -11
  32. package/cjs/Menu/MenuItem.js +14 -11
  33. package/cjs/MultiCascader/MultiCascader.js +1 -0
  34. package/cjs/Picker/PickerOverlay.js +4 -1
  35. package/cjs/RangeSlider/RangeSlider.d.ts +12 -2
  36. package/cjs/RangeSlider/RangeSlider.js +35 -12
  37. package/cjs/Ripple/Ripple.js +17 -9
  38. package/cjs/TreePicker/TreePicker.js +15 -11
  39. package/cjs/Uploader/UploadTrigger.js +3 -1
  40. package/cjs/Uploader/Uploader.js +3 -1
  41. package/cjs/utils/treeUtils.d.ts +3 -3
  42. package/cjs/utils/treeUtils.js +4 -3
  43. package/cjs/utils/useElementResize.d.ts +1 -1
  44. package/cjs/utils/useElementResize.js +5 -2
  45. package/dist/rsuite-rtl.css +114 -123
  46. package/dist/rsuite-rtl.min.css +1 -1
  47. package/dist/rsuite-rtl.min.css.map +1 -1
  48. package/dist/rsuite.css +114 -123
  49. package/dist/rsuite.js +372 -53
  50. package/dist/rsuite.js.map +1 -1
  51. package/dist/rsuite.min.css +1 -1
  52. package/dist/rsuite.min.css.map +1 -1
  53. package/dist/rsuite.min.js +1 -1
  54. package/dist/rsuite.min.js.map +1 -1
  55. package/esm/Affix/Affix.js +1 -0
  56. package/esm/Calendar/TimeDropdown.js +7 -4
  57. package/esm/Carousel/Carousel.d.ts +5 -1
  58. package/esm/Carousel/Carousel.js +23 -17
  59. package/esm/Cascader/Cascader.js +2 -2
  60. package/esm/Cascader/DropdownMenu.js +1 -1
  61. package/esm/CheckTreePicker/CheckTreePicker.js +17 -12
  62. package/esm/CheckTreePicker/utils.d.ts +3 -3
  63. package/esm/CheckTreePicker/utils.js +2 -2
  64. package/esm/DOMHelper/index.d.ts +4 -4
  65. package/esm/DatePicker/DatePicker.js +15 -9
  66. package/esm/DateRangePicker/Calendar.js +2 -16
  67. package/esm/DateRangePicker/DateRangePicker.js +1 -1
  68. package/esm/Dropdown/Dropdown.d.ts +5 -0
  69. package/esm/Dropdown/test/Dropdown.test.d.ts +1 -0
  70. package/esm/Dropdown/test/Dropdown.test.js +22 -0
  71. package/esm/InputNumber/InputNumber.d.ts +1 -1
  72. package/esm/InputNumber/InputNumber.js +38 -7
  73. package/esm/InputNumber/test/InputNumber.test.d.ts +1 -0
  74. package/esm/InputNumber/test/InputNumber.test.js +7 -0
  75. package/esm/InputPicker/InputAutosize.js +3 -1
  76. package/esm/InputPicker/InputPicker.js +6 -2
  77. package/esm/List/ListItem.js +13 -11
  78. package/esm/Menu/MenuItem.js +14 -11
  79. package/esm/MultiCascader/MultiCascader.js +1 -0
  80. package/esm/Picker/PickerOverlay.js +4 -1
  81. package/esm/RangeSlider/RangeSlider.d.ts +12 -2
  82. package/esm/RangeSlider/RangeSlider.js +35 -12
  83. package/esm/Ripple/Ripple.js +17 -9
  84. package/esm/TreePicker/TreePicker.js +15 -11
  85. package/esm/Uploader/UploadTrigger.js +3 -1
  86. package/esm/Uploader/Uploader.js +3 -1
  87. package/esm/utils/treeUtils.d.ts +3 -3
  88. package/esm/utils/treeUtils.js +6 -3
  89. package/esm/utils/useElementResize.d.ts +1 -1
  90. package/esm/utils/useElementResize.js +5 -2
  91. package/package.json +3 -3
@@ -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;
@@ -21,6 +21,7 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
21
21
  Component = _props$as === void 0 ? 'div' : _props$as,
22
22
  barClassName = props.barClassName,
23
23
  className = props.className,
24
+ constraint = props.constraint,
24
25
  _props$defaultValue = props.defaultValue,
25
26
  defaultValue = _props$defaultValue === void 0 ? defaultDefaultValue : _props$defaultValue,
26
27
  graduated = props.graduated,
@@ -47,7 +48,7 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
47
48
  renderMark = props.renderMark,
48
49
  onChange = props.onChange,
49
50
  onChangeCommitted = props.onChangeCommitted,
50
- rest = _objectWithoutPropertiesLoose(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"]);
51
+ rest = _objectWithoutPropertiesLoose(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"]);
51
52
 
52
53
  var barRef = useRef(null); // Define the parameter position of the handle
53
54
 
@@ -157,14 +158,27 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
157
158
 
158
159
  return nextValue;
159
160
  }, [getRangeValue, getValidValue]);
161
+ /**
162
+ * Whether a range is valid against given constraint (if any)
163
+ * Should check before every `setValue` calls
164
+ */
165
+
166
+ var isRangeMatchingConstraint = useCallback(function (range) {
167
+ // If no constraint is defined, any range is valid
168
+ if (!constraint) return true;
169
+ return constraint(range);
170
+ }, [constraint]);
160
171
  /**
161
172
  * Callback function that is fired when the mousemove is triggered
162
173
  */
163
174
 
164
175
  var handleDragMove = useEventCallback(function (event, dataset) {
165
176
  var nextValue = getNextValue(event, dataset);
166
- setValue(nextValue);
167
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
177
+
178
+ if (isRangeMatchingConstraint(nextValue)) {
179
+ setValue(nextValue);
180
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
181
+ }
168
182
  });
169
183
  /**
170
184
  * Callback function that is fired when the mouseup is triggered
@@ -172,9 +186,12 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
172
186
 
173
187
  var handleChangeCommitted = useCallback(function (event, dataset) {
174
188
  var nextValue = getNextValue(event, dataset);
175
- setValue(nextValue);
176
- onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
177
- }, [getNextValue, onChangeCommitted, setValue]);
189
+
190
+ if (isRangeMatchingConstraint(nextValue)) {
191
+ setValue(nextValue);
192
+ onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
193
+ }
194
+ }, [getNextValue, onChangeCommitted, isRangeMatchingConstraint, setValue]);
178
195
  var handleKeyDown = useCallback(function (event) {
179
196
  var _event$target;
180
197
 
@@ -217,9 +234,12 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
217
234
 
218
235
 
219
236
  event.preventDefault();
220
- setValue(nextValue);
221
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
222
- }, [max, min, onChange, rtl, setValue, step, value]);
237
+
238
+ if (isRangeMatchingConstraint(nextValue)) {
239
+ setValue(nextValue);
240
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
241
+ }
242
+ }, [max, min, onChange, rtl, isRangeMatchingConstraint, setValue, step, value]);
223
243
  var handleClick = useCallback(function (event) {
224
244
  if (disabled) {
225
245
  return;
@@ -236,9 +256,12 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
236
256
  }
237
257
 
238
258
  var nextValue = getValidValue([start, end].sort());
239
- setValue(nextValue);
240
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
241
- }, [disabled, getValidValue, getValueByPosition, onChange, setValue, value]);
259
+
260
+ if (isRangeMatchingConstraint(nextValue)) {
261
+ setValue(nextValue);
262
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
263
+ }
264
+ }, [disabled, getValidValue, getValueByPosition, isRangeMatchingConstraint, onChange, setValue, value]);
242
265
  var handleProps = useMemo(function () {
243
266
  return [{
244
267
  value: value[0],
@@ -52,17 +52,25 @@ var Ripple = /*#__PURE__*/React.forwardRef(function (props, ref) {
52
52
  };
53
53
 
54
54
  var handleMouseDown = useCallback(function (event) {
55
- var position = getPosition(triggerRef.current, event);
56
- setRippling(true);
57
- setPosition(position);
58
- onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(position, event);
55
+ if (triggerRef.current) {
56
+ var _position = getPosition(triggerRef.current, event);
57
+
58
+ setRippling(true);
59
+ setPosition(_position);
60
+ onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(_position, event);
61
+ }
59
62
  }, [onMouseDown]);
60
63
  useEffect(function () {
61
- var parentNode = triggerRef.current.parentNode;
62
- var mousedownListener = on(parentNode, 'mousedown', handleMouseDown);
63
- return function () {
64
- mousedownListener === null || mousedownListener === void 0 ? void 0 : mousedownListener.off();
65
- };
64
+ var _triggerRef$current;
65
+
66
+ var parentNode = (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.parentNode;
67
+
68
+ if (parentNode) {
69
+ var mousedownListener = on(parentNode, 'mousedown', handleMouseDown);
70
+ return function () {
71
+ mousedownListener === null || mousedownListener === void 0 ? void 0 : mousedownListener.off();
72
+ };
73
+ }
66
74
  }, [handleMouseDown]);
67
75
  return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
68
76
  className: classes,
@@ -58,11 +58,13 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
58
58
  _props$childrenKey = props.childrenKey,
59
59
  childrenKey = _props$childrenKey === void 0 ? 'children' : _props$childrenKey,
60
60
  draggable = props.draggable,
61
- defaultExpandAll = props.defaultExpandAll,
61
+ _props$defaultExpandA = props.defaultExpandAll,
62
+ defaultExpandAll = _props$defaultExpandA === void 0 ? false : _props$defaultExpandA,
62
63
  _props$disabledItemVa = props.disabledItemValues,
63
64
  disabledItemValues = _props$disabledItemVa === void 0 ? emptyArray : _props$disabledItemVa,
64
65
  controlledExpandItemValues = props.expandItemValues,
65
- defaultExpandItemValues = props.defaultExpandItemValues,
66
+ _props$defaultExpandI = props.defaultExpandItemValues,
67
+ defaultExpandItemValues = _props$defaultExpandI === void 0 ? emptyArray : _props$defaultExpandI,
66
68
  id = props.id,
67
69
  listProps = props.listProps,
68
70
  getChildren = props.getChildren,
@@ -198,15 +200,17 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
198
200
  });
199
201
  }, [searchKeywordState, expandItemValues, filteredData, flattenNodes, formatVirtualizedTreeData, virtualized]);
200
202
  var focusActiveNode = useCallback(function () {
201
- focusToActiveTreeNode({
202
- list: listRef.current,
203
- valueKey: valueKey,
204
- selector: "." + treePrefix('node-active'),
205
- activeNode: activeNode,
206
- virtualized: virtualized,
207
- container: treeViewRef.current,
208
- formattedNodes: getFormattedNodes()
209
- });
203
+ if (listRef.current) {
204
+ focusToActiveTreeNode({
205
+ list: listRef.current,
206
+ valueKey: valueKey,
207
+ selector: "." + treePrefix('node-active'),
208
+ activeNode: activeNode,
209
+ virtualized: virtualized,
210
+ container: treeViewRef.current,
211
+ formattedNodes: getFormattedNodes()
212
+ });
213
+ }
210
214
  }, [treePrefix, activeNode, getFormattedNodes, valueKey, virtualized]);
211
215
  useEffect(function () {
212
216
  setFilteredData(data, searchKeywordState);
@@ -56,7 +56,9 @@ var UploadTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
56
56
  (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.click();
57
57
  }, []);
58
58
  var handleClearInput = useCallback(function () {
59
- inputRef.current.value = '';
59
+ if (inputRef.current) {
60
+ inputRef.current.value = '';
61
+ }
60
62
  }, []);
61
63
  var handleDragEnter = useCallback(function (event) {
62
64
  if (draggable) {
@@ -188,7 +188,9 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
188
188
  */
189
189
 
190
190
  var cleanInputValue = useCallback(function () {
191
- trigger.current.clearInput();
191
+ var _trigger$current;
192
+
193
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : _trigger$current.clearInput();
192
194
  }, []);
193
195
  /**
194
196
  * Callback for successful file upload.
@@ -38,7 +38,7 @@ export declare function hasVisibleChildren(node: TreeNodeType, childrenKey: stri
38
38
  * @param b
39
39
  */
40
40
  export declare function compareArray(a: any[], b: any[]): boolean;
41
- export declare function getDefaultExpandItemValues(data: ItemDataType[], props: Pick<TreePickerProps, 'defaultExpandAll' | 'valueKey' | 'childrenKey' | 'defaultExpandItemValues'>): any[];
41
+ export declare function getDefaultExpandItemValues(data: ItemDataType[], props: Required<Pick<TreePickerProps, 'defaultExpandAll' | 'valueKey' | 'childrenKey' | 'defaultExpandItemValues'>>): any[];
42
42
  /**
43
43
  * 获取 expandItemValues 的 value
44
44
  * @param props
@@ -70,7 +70,7 @@ export declare function filterNodesOfTree(data: any, check: any): TreeNodeType[]
70
70
  * @param isSearching - component is in Searching
71
71
  * @returns
72
72
  */
73
- export declare const getFocusableItems: (filteredData: ItemDataType[], props: PartialTreeProps, isSearching?: boolean | undefined) => TreeNodeType[];
73
+ export declare const getFocusableItems: (filteredData: ItemDataType[], props: Required<Pick<PartialTreeProps, 'disabledItemValues' | 'valueKey' | 'childrenKey' | 'expandItemValues'>>, isSearching?: boolean | undefined) => TreeNodeType[];
74
74
  /**
75
75
  * return all focusable Item and active Element index
76
76
  * @param focusItemValue
@@ -235,7 +235,7 @@ export interface FocusToTreeNodeProps {
235
235
  valueKey: string;
236
236
  activeNode: any;
237
237
  virtualized: boolean;
238
- container: HTMLDivElement;
238
+ container: HTMLElement | null;
239
239
  list: ListInstance;
240
240
  formattedNodes: TreeNodeType[];
241
241
  }
@@ -258,6 +258,9 @@ export function createUpdateTreeDataFunction(params, _ref2) {
258
258
  var dragNode = params.dragNode,
259
259
  dropNode = params.dropNode,
260
260
  dropNodePosition = params.dropNodePosition;
261
+
262
+ var cloneDragNode = _extends({}, dragNode);
263
+
261
264
  removeDragNode(data, params, {
262
265
  valueKey: valueKey,
263
266
  childrenKey: childrenKey
@@ -272,16 +275,16 @@ export function createUpdateTreeDataFunction(params, _ref2) {
272
275
  if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER) {
273
276
  _item2[childrenKey] = _isNil(_item2[childrenKey]) ? [] : _item2[childrenKey];
274
277
 
275
- _item2[childrenKey].push(dragNode);
278
+ _item2[childrenKey].push(cloneDragNode);
276
279
 
277
280
  break;
278
281
  } else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_TOP) {
279
282
  // drag to top of node
280
- items.splice(_index2, 0, dragNode);
283
+ items.splice(_index2, 0, cloneDragNode);
281
284
  break;
282
285
  } else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM) {
283
286
  // drag to bottom of node
284
- items.splice(_index2 + 1, 0, dragNode);
287
+ items.splice(_index2 + 1, 0, cloneDragNode);
285
288
  break;
286
289
  }
287
290
  }
@@ -5,4 +5,4 @@
5
5
  * @param eventTarget The target to listen for events on
6
6
  * @param listener An event handler
7
7
  */
8
- export default function useElementResize(eventTarget: Element | (() => Element), listener: ResizeObserverCallback): void;
8
+ export default function useElementResize(eventTarget: Element | null | (() => Element | null), listener: ResizeObserverCallback): void;
@@ -13,8 +13,11 @@ export default function useElementResize(eventTarget, listener) {
13
13
  useEffect(function () {
14
14
  if (!resizeObserver.current) {
15
15
  var target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
16
- resizeObserver.current = new ResizeObserver(listener);
17
- resizeObserver.current.observe(target);
16
+
17
+ if (target) {
18
+ resizeObserver.current = new ResizeObserver(listener);
19
+ resizeObserver.current.observe(target);
20
+ }
18
21
  }
19
22
 
20
23
  return function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.4.4",
3
+ "version": "5.6.0",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -33,11 +33,11 @@
33
33
  "@types/react-virtualized": "^9.21.11",
34
34
  "classnames": "^2.3.1",
35
35
  "date-fns": "^2.13.0",
36
- "dom-lib": "^3.0.0",
36
+ "dom-lib": "^3.1.2",
37
37
  "lodash": "^4.17.11",
38
38
  "prop-types": "^15.7.2",
39
39
  "react-virtualized": "^9.22.3",
40
- "rsuite-table": "^5.3.1",
40
+ "rsuite-table": "^5.3.3",
41
41
  "schema-typed": "^2.0.2"
42
42
  },
43
43
  "peerDependencies": {