rsuite 5.2.0 → 5.2.4

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 (80) hide show
  1. package/Button/styles/index.less +6 -0
  2. package/CHANGELOG.md +42 -0
  3. package/PanelGroup/styles/index.less +12 -12
  4. package/README.md +3 -44
  5. package/Sidenav/styles/index.less +4 -0
  6. package/Table/styles/index.less +0 -4
  7. package/cjs/Carousel/Carousel.d.ts +1 -1
  8. package/cjs/CheckTreePicker/CheckTreePicker.js +6 -3
  9. package/cjs/CheckTreePicker/utils.d.ts +1 -1
  10. package/cjs/CheckTreePicker/utils.js +7 -6
  11. package/cjs/CheckboxGroup/CheckboxGroup.js +2 -2
  12. package/cjs/DateRangePicker/Calendar.d.ts +2 -1
  13. package/cjs/DateRangePicker/Calendar.js +26 -5
  14. package/cjs/DateRangePicker/DateRangePicker.d.ts +2 -0
  15. package/cjs/DateRangePicker/DateRangePicker.js +25 -3
  16. package/cjs/Dropdown/DropdownItem.js +16 -19
  17. package/cjs/Dropdown/useRenderDropdownItem.d.ts +2 -0
  18. package/cjs/Dropdown/useRenderDropdownItem.js +26 -0
  19. package/cjs/InputPicker/InputPicker.js +1 -1
  20. package/cjs/MaskedInput/MaskedInput.d.ts +5 -42
  21. package/cjs/MaskedInput/MaskedInput.js +9 -63
  22. package/cjs/MaskedInput/TextMask.d.ts +43 -0
  23. package/cjs/MaskedInput/TextMask.js +80 -0
  24. package/cjs/Menu/Menu.js +46 -34
  25. package/cjs/Menu/MenuItem.js +16 -12
  26. package/cjs/Modal/utils.js +9 -10
  27. package/cjs/Overlay/Position.js +7 -4
  28. package/cjs/Picker/PickerToggle.js +7 -5
  29. package/cjs/Picker/VirtualizedList.d.ts +29 -2
  30. package/cjs/Picker/utils.d.ts +6 -14
  31. package/cjs/Picker/utils.js +54 -33
  32. package/cjs/RadioGroup/RadioGroup.js +2 -2
  33. package/cjs/Rate/Rate.js +3 -1
  34. package/cjs/Sidenav/SidenavDropdownItem.js +17 -10
  35. package/cjs/TreePicker/TreePicker.js +6 -3
  36. package/cjs/utils/useElementResize.d.ts +1 -1
  37. package/cjs/utils/useElementResize.js +11 -6
  38. package/dist/rsuite-rtl.css +48 -6
  39. package/dist/rsuite-rtl.min.css +1 -1
  40. package/dist/rsuite-rtl.min.css.map +1 -1
  41. package/dist/rsuite.css +48 -6
  42. package/dist/rsuite.js +349 -359
  43. package/dist/rsuite.js.map +1 -1
  44. package/dist/rsuite.min.css +1 -1
  45. package/dist/rsuite.min.css.map +1 -1
  46. package/dist/rsuite.min.js +1 -1
  47. package/dist/rsuite.min.js.LICENSE.txt +9 -0
  48. package/dist/rsuite.min.js.map +1 -1
  49. package/esm/Carousel/Carousel.d.ts +1 -1
  50. package/esm/CheckTreePicker/CheckTreePicker.js +6 -3
  51. package/esm/CheckTreePicker/utils.d.ts +1 -1
  52. package/esm/CheckTreePicker/utils.js +7 -6
  53. package/esm/CheckboxGroup/CheckboxGroup.js +2 -2
  54. package/esm/DateRangePicker/Calendar.d.ts +2 -1
  55. package/esm/DateRangePicker/Calendar.js +27 -5
  56. package/esm/DateRangePicker/DateRangePicker.d.ts +2 -0
  57. package/esm/DateRangePicker/DateRangePicker.js +23 -3
  58. package/esm/Dropdown/DropdownItem.js +15 -19
  59. package/esm/Dropdown/useRenderDropdownItem.d.ts +2 -0
  60. package/esm/Dropdown/useRenderDropdownItem.js +18 -0
  61. package/esm/InputPicker/InputPicker.js +1 -1
  62. package/esm/MaskedInput/MaskedInput.d.ts +5 -42
  63. package/esm/MaskedInput/MaskedInput.js +9 -63
  64. package/esm/MaskedInput/TextMask.d.ts +43 -0
  65. package/esm/MaskedInput/TextMask.js +67 -0
  66. package/esm/Menu/Menu.js +46 -36
  67. package/esm/Menu/MenuItem.js +16 -12
  68. package/esm/Modal/utils.js +8 -7
  69. package/esm/Overlay/Position.js +6 -3
  70. package/esm/Picker/PickerToggle.js +7 -5
  71. package/esm/Picker/VirtualizedList.d.ts +29 -2
  72. package/esm/Picker/utils.d.ts +6 -14
  73. package/esm/Picker/utils.js +54 -33
  74. package/esm/RadioGroup/RadioGroup.js +2 -2
  75. package/esm/Rate/Rate.js +2 -1
  76. package/esm/Sidenav/SidenavDropdownItem.js +16 -10
  77. package/esm/TreePicker/TreePicker.js +6 -3
  78. package/esm/utils/useElementResize.d.ts +1 -1
  79. package/esm/utils/useElementResize.js +12 -5
  80. package/package.json +3 -3
package/esm/Menu/Menu.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import React, { useCallback, useContext, useRef } from 'react';
2
+ import React, { useCallback, useContext, useRef, useMemo } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import MenuContext, { MenuActionTypes, MoveFocusTo } from './MenuContext';
5
5
  import { KEY_VALUES, useCustom } from '../utils';
@@ -40,7 +40,10 @@ function Menu(props) {
40
40
  rtl = _useCustom.rtl;
41
41
 
42
42
  var activeItem = (_items$activeItemInde = items[activeItemIndex]) === null || _items$activeItemInde === void 0 ? void 0 : _items$activeItemInde.element;
43
- var menuFocus = useFocus(menuElementRef);
43
+
44
+ var _useFocus = useFocus(menuElementRef),
45
+ grabFocus = _useFocus.grab;
46
+
44
47
  var openMenu = useCallback(function (event) {
45
48
  dispatch({
46
49
  type: MenuActionTypes.OpenMenu
@@ -54,8 +57,8 @@ function Menu(props) {
54
57
  }
55
58
 
56
59
  onToggleMenu === null || onToggleMenu === void 0 ? void 0 : onToggleMenu(true, event);
57
- menuFocus.grab();
58
- }, [dispatch, onToggleMenu, menuFocus]);
60
+ grabFocus();
61
+ }, [dispatch, onToggleMenu, grabFocus]);
59
62
  var closeMenu = useCallback(function (event, returnFocusToButton) {
60
63
  if (returnFocusToButton === void 0) {
61
64
  returnFocusToButton = true;
@@ -150,41 +153,48 @@ function Menu(props) {
150
153
  if (disabled) return;
151
154
  openMenu(event);
152
155
  }, [open, disabled, openMenu]);
153
- var buttonEventHandlers = {
154
- onKeyDown: handleButtonKeydown
155
- };
156
- /**
157
- * Bind event of trigger,
158
- * not used in in the expanded state of '<Sidenav>'
159
- */
160
-
161
- if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('click')) {
162
- buttonEventHandlers.onClick = handleButtonClick;
163
- }
156
+ var buttonEventHandlers = useMemo(function () {
157
+ var buttonEventHandlers = {
158
+ onKeyDown: handleButtonKeydown
159
+ };
160
+ /**
161
+ * Bind event of trigger,
162
+ * not used in in the expanded state of '<Sidenav>'
163
+ */
164
+
165
+ if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('click')) {
166
+ buttonEventHandlers.onClick = handleButtonClick;
167
+ }
164
168
 
165
- if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('contextmenu')) {
166
- buttonEventHandlers.onContextMenu = handleButtonContextMenu;
167
- }
169
+ if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('contextmenu')) {
170
+ buttonEventHandlers.onContextMenu = handleButtonContextMenu;
171
+ }
168
172
 
173
+ return buttonEventHandlers;
174
+ }, [openMenuOn, handleButtonKeydown, handleButtonClick, handleButtonContextMenu]);
169
175
  var buttonId = useUniqueId('menubutton-');
170
- var menuId = useUniqueId('menu-'); // Ref: https://www.w3.org/TR/wai-aria-practices-1.2/#wai-aria-roles-states-and-properties-14
171
-
172
- var buttonAriaAttributes = {
173
- role: 'button',
174
- 'aria-haspopup': 'menu',
175
- 'aria-expanded': open || undefined,
176
- // it's recommend to remove aria-expanded when menu is hidden
177
- 'aria-controls': menuId
178
- };
179
-
180
- var buttonProps = _extends({
181
- id: buttonId
182
- }, buttonAriaAttributes, buttonEventHandlers, {
183
- // render props
184
- open: open
185
- });
186
-
187
- var customMenuButton = renderMenuButton === null || renderMenuButton === void 0 ? void 0 : renderMenuButton(buttonProps, buttonElementRef);
176
+ var menuId = useUniqueId('menu-');
177
+ var buttonAriaAttributes = useMemo(function () {
178
+ // Ref: https://www.w3.org/TR/wai-aria-practices-1.2/#wai-aria-roles-states-and-properties-14
179
+ return {
180
+ role: 'button',
181
+ 'aria-haspopup': 'menu',
182
+ 'aria-expanded': open || undefined,
183
+ // it's recommend to remove aria-expanded when menu is hidden
184
+ 'aria-controls': menuId
185
+ };
186
+ }, [open, menuId]);
187
+ var buttonProps = useMemo(function () {
188
+ return _extends({
189
+ id: buttonId
190
+ }, buttonAriaAttributes, buttonEventHandlers, {
191
+ // render props
192
+ open: open
193
+ });
194
+ }, [buttonId, buttonAriaAttributes, buttonEventHandlers, open]);
195
+ var customMenuButton = useMemo(function () {
196
+ return renderMenuButton === null || renderMenuButton === void 0 ? void 0 : renderMenuButton(buttonProps, buttonElementRef);
197
+ }, [renderMenuButton, buttonProps, buttonElementRef]);
188
198
  var buttonElement = customMenuButton !== null && customMenuButton !== void 0 ? customMenuButton : /*#__PURE__*/React.createElement("button", _extends({
189
199
  ref: buttonElementRef
190
200
  }, buttonProps), menuButtonText);
@@ -32,20 +32,24 @@ function MenuItem(props) {
32
32
  }, [disabled, onActivate]); // Gain/release focus on mousedown in `menubar`
33
33
 
34
34
  var handleMouseDown = useCallback(function () {
35
- dispatch({
36
- type: MenuActionTypes.MoveFocus,
37
- to: MoveFocusTo.Specific,
38
- id: menuitemRef.current.id
39
- });
40
- }, [dispatch]); // Gain/release focus on mouseenter/mouseleave in `menu`
35
+ if (!hasFocus) {
36
+ dispatch({
37
+ type: MenuActionTypes.MoveFocus,
38
+ to: MoveFocusTo.Specific,
39
+ id: menuitemRef.current.id
40
+ });
41
+ }
42
+ }, [hasFocus, dispatch]); // Gain/release focus on mouseenter/mouseleave in `menu`
41
43
 
42
44
  var handleMouseMove = useCallback(function () {
43
- dispatch({
44
- type: MenuActionTypes.MoveFocus,
45
- to: MoveFocusTo.Specific,
46
- id: menuitemRef.current.id
47
- });
48
- }, [dispatch]);
45
+ if (!hasFocus) {
46
+ dispatch({
47
+ type: MenuActionTypes.MoveFocus,
48
+ to: MoveFocusTo.Specific,
49
+ id: menuitemRef.current.id
50
+ });
51
+ }
52
+ }, [hasFocus, dispatch]);
49
53
  var handleMouseLeave = useCallback(function () {
50
54
  dispatch({
51
55
  type: MenuActionTypes.MoveFocus,
@@ -1,7 +1,7 @@
1
1
  import { useState, useRef, useCallback, useEffect } from 'react';
2
- import bindElementResize, { unbind as unbindElementResize } from 'element-resize-event';
3
2
  import getHeight from 'dom-lib/getHeight';
4
3
  import on from 'dom-lib/on';
4
+ import { ResizeObserver } from '@juggle/resize-observer';
5
5
  export var useBodyStyles = function useBodyStyles(ref, options) {
6
6
  var _useState = useState({}),
7
7
  bodyStyles = _useState[0],
@@ -12,6 +12,7 @@ export var useBodyStyles = function useBodyStyles(ref, options) {
12
12
  prefix = options.prefix;
13
13
  var windowResizeListener = useRef();
14
14
  var contentElement = useRef();
15
+ var contentElementResizeObserver = useRef();
15
16
  var updateBodyStyles = useCallback(function (_event, entering) {
16
17
  var dialog = ref.current;
17
18
  var scrollHeight = dialog ? dialog.scrollHeight : 0;
@@ -40,13 +41,10 @@ export var useBodyStyles = function useBodyStyles(ref, options) {
40
41
  setBodyStyles(styles);
41
42
  }, [prefix, ref]);
42
43
  var onDestroyEvents = useCallback(function () {
43
- var _windowResizeListener, _windowResizeListener2;
44
+ var _windowResizeListener, _windowResizeListener2, _contentElementResize;
44
45
 
45
46
  (_windowResizeListener = windowResizeListener.current) === null || _windowResizeListener === void 0 ? void 0 : (_windowResizeListener2 = _windowResizeListener.off) === null || _windowResizeListener2 === void 0 ? void 0 : _windowResizeListener2.call(_windowResizeListener);
46
-
47
- if (contentElement.current) {
48
- unbindElementResize(contentElement.current);
49
- }
47
+ (_contentElementResize = contentElementResizeObserver.current) === null || _contentElementResize === void 0 ? void 0 : _contentElementResize.disconnect();
50
48
  }, []);
51
49
  var onChangeBodyStyles = useCallback(function (entering) {
52
50
  if (overflow && !drawer) {
@@ -55,7 +53,10 @@ export var useBodyStyles = function useBodyStyles(ref, options) {
55
53
  updateBodyStyles(null, entering);
56
54
  contentElement.current = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector("." + prefix('content'));
57
55
  windowResizeListener.current = on(window, 'resize', updateBodyStyles);
58
- bindElementResize(contentElement.current, updateBodyStyles);
56
+ contentElementResizeObserver.current = new ResizeObserver(function () {
57
+ return updateBodyStyles();
58
+ });
59
+ contentElementResizeObserver.current.observe(contentElement.current);
59
60
  }
60
61
  }, [drawer, overflow, prefix, ref, updateBodyStyles]);
61
62
  useEffect(function () {
@@ -1,5 +1,4 @@
1
1
  import React, { useState, useEffect, useRef, useMemo, useCallback, useImperativeHandle } from 'react';
2
- import bindElementResize from 'element-resize-event';
3
2
  import PropTypes from 'prop-types';
4
3
  import classNames from 'classnames';
5
4
  import getContainer from 'dom-lib/getContainer';
@@ -8,6 +7,7 @@ import removeClass from 'dom-lib/removeClass';
8
7
  import on from 'dom-lib/on';
9
8
  import addClass from 'dom-lib/addClass';
10
9
  import addStyle from 'dom-lib/addStyle';
10
+ import { ResizeObserver } from '@juggle/resize-observer';
11
11
  import isElement from '../DOMHelper/isElement';
12
12
  import positionUtils from './positionUtils';
13
13
  import { getDOMNode } from '../utils';
@@ -23,6 +23,7 @@ var usePosition = function usePosition(props, ref) {
23
23
  triggerTarget = props.triggerTarget;
24
24
  var containerRef = useRef();
25
25
  var lastTargetRef = useRef();
26
+ var overlayResizeObserver = useRef();
26
27
  var defaultPosition = {
27
28
  positionLeft: 0,
28
29
  positionTop: 0,
@@ -109,17 +110,19 @@ var usePosition = function usePosition(props, ref) {
109
110
 
110
111
  if (overlay) {
111
112
  // Update the position when the size of the overlay changes
112
- bindElementResize(overlay, function () {
113
+ overlayResizeObserver.current = new ResizeObserver(function () {
113
114
  return updatePosition(true, true);
114
115
  });
116
+ overlayResizeObserver.current.observe(overlay);
115
117
  }
116
118
 
117
119
  return function () {
118
- var _containerScrollListe;
120
+ var _containerScrollListe, _overlayResizeObserve;
119
121
 
120
122
  lastTargetRef.current = null;
121
123
  (_containerScrollListe = containerScrollListener) === null || _containerScrollListe === void 0 ? void 0 : _containerScrollListe.off();
122
124
  resizeListener === null || resizeListener === void 0 ? void 0 : resizeListener.off();
125
+ (_overlayResizeObserve = overlayResizeObserver.current) === null || _overlayResizeObserve === void 0 ? void 0 : _overlayResizeObserve.disconnect();
123
126
  };
124
127
  }, [preventOverflow, ref, updatePosition]);
125
128
  useUpdateEffect(function () {
@@ -12,7 +12,7 @@ import CloseButton from '../CloseButton';
12
12
  import { useClassNames, KEY_VALUES, mergeRefs } from '../utils';
13
13
  import Plaintext from '../Plaintext';
14
14
  import useToggleCaret from '../utils/useToggleCaret';
15
- import MaskedInput from '../MaskedInput';
15
+ import TextMask from '../MaskedInput/TextMask';
16
16
  import deprecatePropType from '../utils/deprecatePropType';
17
17
  var defaultInputMask = [];
18
18
  var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
@@ -83,15 +83,17 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
83
83
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
84
84
 
85
85
  if (input) {
86
- inputRef.current.focus();
86
+ var _inputRef$current;
87
+
88
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
87
89
  }
88
90
  }, [input, onFocus]);
89
91
  var handleBlur = useCallback(function (event) {
90
92
  if (document.activeElement !== inputRef.current) {
91
- var _inputRef$current;
93
+ var _inputRef$current2;
92
94
 
93
95
  setActive(false);
94
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.blur();
96
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.blur();
95
97
  }
96
98
 
97
99
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
@@ -146,7 +148,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
146
148
  onFocus: !disabled ? handleFocus : null // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
147
149
  ,
148
150
  onBlur: !disabled ? debounce(handleBlur, 200) : null
149
- }), /*#__PURE__*/React.createElement(MaskedInput, {
151
+ }), /*#__PURE__*/React.createElement(TextMask, {
150
152
  mask: inputMask,
151
153
  value: Array.isArray(inputValue) ? inputValue.toString() : inputValue,
152
154
  onBlur: handleInputBlur,
@@ -1,9 +1,36 @@
1
1
  import React from 'react';
2
2
  import { ListProps, ListRowProps } from 'react-virtualized/dist/commonjs/List';
3
3
  import { AutoSizerProps } from 'react-virtualized/dist/commonjs/AutoSizer';
4
+ import type { Alignment } from 'react-virtualized';
4
5
  export interface ListInstance {
5
- child: Element;
6
- scrollToRow?: (index: number) => void;
6
+ /**
7
+ * Forcefully re-render the inner Grid component.
8
+ */
9
+ forceUpdateGrid(): void;
10
+ /**
11
+ * Gets offset for a given row and alignment.
12
+ */
13
+ getOffsetForRow(params: {
14
+ alignment?: Alignment;
15
+ index?: number;
16
+ }): number;
17
+ /**
18
+ * Pre-measure all rows in a List.
19
+ */
20
+ measureAllRows(): void;
21
+ /**
22
+ * Recompute row heights and offsets after the specified index (defaults to 0).
23
+ */
24
+ recomputeRowHeights(index?: number): void;
25
+ /**
26
+ * Scroll to the specified offset. Useful for animating position changes.
27
+ */
28
+ scrollToPosition(scrollTop?: number): void;
29
+ /**
30
+ * Ensure row is visible. This method can be used to safely scroll back to a cell
31
+ * that a user has scrolled away from even if it was previously scrolled to.
32
+ */
33
+ scrollToRow(index?: number): void;
7
34
  }
8
35
  export type { ListProps, AutoSizerProps, ListRowProps };
9
36
  export declare const List: React.ComponentType<ListProps>;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { OverlayTriggerInstance } from './PickerToggleTrigger';
3
3
  import { TypeAttributes, ItemDataType } from '../@types/common';
4
+ import { ListInstance } from './VirtualizedList';
4
5
  interface NodeKeys {
5
6
  valueKey: string;
6
7
  childrenKey: string;
@@ -103,25 +104,16 @@ export declare function useSearch(props: SearchProps): {
103
104
  checkShouldDisplay: (item: ItemDataType, keyword?: string) => boolean;
104
105
  handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
105
106
  };
106
- interface Refs {
107
+ interface PickerDependentParameters {
107
108
  triggerRef?: React.RefObject<OverlayTriggerInstance>;
108
- rootRef?: React.RefObject<HTMLElement>;
109
+ rootRef?: React.RefObject<any>;
109
110
  overlayRef?: React.RefObject<HTMLElement>;
110
111
  targetRef?: React.RefObject<HTMLElement>;
112
+ listRef?: React.RefObject<ListInstance>;
113
+ inline?: boolean;
111
114
  }
112
115
  /**
113
116
  * A hook of the exposed method of Picker
114
- *
115
- * {
116
- * root: Element;
117
- * overlay: Element;
118
- * target?: Element;
119
- * updatePosition:() => void;
120
- * open:() => void;
121
- * close:() => void;
122
- * }
123
- * @param ref
124
- * @param params
125
117
  */
126
- export declare function usePublicMethods(ref: any, { triggerRef, overlayRef, targetRef, rootRef }: Refs, disabled?: boolean): void;
118
+ export declare function usePublicMethods(ref: any, parmas: PickerDependentParameters): void;
127
119
  export {};
@@ -376,9 +376,15 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
376
376
 
377
377
 
378
378
  if (event.key.length === 1 && /\w/.test(event.key)) {
379
- var _searchInputRef$curre;
379
+ var _event$target;
380
380
 
381
- searchInputRef === null || searchInputRef === void 0 ? void 0 : (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
381
+ // Exclude Input
382
+ // eg: <SelectPicker renderExtraFooter={() => <Input />} />
383
+ if (((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.tagName) !== 'INPUT') {
384
+ var _searchInputRef$curre;
385
+
386
+ (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
387
+ }
382
388
  }
383
389
  }
384
390
 
@@ -455,23 +461,14 @@ export function useSearch(props) {
455
461
 
456
462
  /**
457
463
  * A hook of the exposed method of Picker
458
- *
459
- * {
460
- * root: Element;
461
- * overlay: Element;
462
- * target?: Element;
463
- * updatePosition:() => void;
464
- * open:() => void;
465
- * close:() => void;
466
- * }
467
- * @param ref
468
- * @param params
469
464
  */
470
- export function usePublicMethods(ref, _ref, disabled) {
471
- var triggerRef = _ref.triggerRef,
472
- overlayRef = _ref.overlayRef,
473
- targetRef = _ref.targetRef,
474
- rootRef = _ref.rootRef;
465
+ export function usePublicMethods(ref, parmas) {
466
+ var triggerRef = parmas.triggerRef,
467
+ overlayRef = parmas.overlayRef,
468
+ targetRef = parmas.targetRef,
469
+ rootRef = parmas.rootRef,
470
+ listRef = parmas.listRef,
471
+ inline = parmas.inline;
475
472
  var handleOpen = useCallback(function () {
476
473
  var _triggerRef$current3;
477
474
 
@@ -487,10 +484,9 @@ export function usePublicMethods(ref, _ref, disabled) {
487
484
 
488
485
  (_triggerRef$current5 = triggerRef.current) === null || _triggerRef$current5 === void 0 ? void 0 : _triggerRef$current5.updatePosition();
489
486
  }, [triggerRef]);
490
-
491
- if (!disabled) {
492
- // eslint-disable-next-line react-hooks/rules-of-hooks
493
- useImperativeHandle(ref, function () {
487
+ useImperativeHandle(ref, function () {
488
+ // Tree and CheckTree
489
+ if (inline) {
494
490
  return {
495
491
  get root() {
496
492
  var _triggerRef$current6;
@@ -498,18 +494,43 @@ export function usePublicMethods(ref, _ref, disabled) {
498
494
  return rootRef !== null && rootRef !== void 0 && rootRef.current ? rootRef === null || rootRef === void 0 ? void 0 : rootRef.current : (_triggerRef$current6 = triggerRef.current) === null || _triggerRef$current6 === void 0 ? void 0 : _triggerRef$current6.root;
499
495
  },
500
496
 
501
- get overlay() {
502
- return overlayRef.current;
503
- },
497
+ get list() {
498
+ if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
499
+ throw new Error('The list is not found, please set `virtualized` for the component.');
500
+ }
504
501
 
505
- get target() {
506
- return targetRef === null || targetRef === void 0 ? void 0 : targetRef.current;
507
- },
502
+ return listRef === null || listRef === void 0 ? void 0 : listRef.current;
503
+ }
508
504
 
509
- updatePosition: handleUpdatePosition,
510
- open: handleOpen,
511
- close: handleClose
512
505
  };
513
- });
514
- }
506
+ }
507
+
508
+ return {
509
+ get root() {
510
+ var _triggerRef$current7;
511
+
512
+ return rootRef !== null && rootRef !== void 0 && rootRef.current ? rootRef === null || rootRef === void 0 ? void 0 : rootRef.current : (_triggerRef$current7 = triggerRef.current) === null || _triggerRef$current7 === void 0 ? void 0 : _triggerRef$current7.root;
513
+ },
514
+
515
+ get overlay() {
516
+ return overlayRef.current;
517
+ },
518
+
519
+ get target() {
520
+ return targetRef === null || targetRef === void 0 ? void 0 : targetRef.current;
521
+ },
522
+
523
+ get list() {
524
+ if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
525
+ throw new Error("\n The list is not found.\n 1.Please set virtualized for the component.\n 2.Please confirm whether the picker is open.\n ");
526
+ }
527
+
528
+ return listRef === null || listRef === void 0 ? void 0 : listRef.current;
529
+ },
530
+
531
+ updatePosition: handleUpdatePosition,
532
+ open: handleOpen,
533
+ close: handleClose
534
+ };
535
+ });
515
536
  }
@@ -55,10 +55,10 @@ var RadioGroup = /*#__PURE__*/React.forwardRef(function (props, ref) {
55
55
  }, [disabled, handleChange, inline, isControlled, name, plaintext, readOnly, value]);
56
56
  return /*#__PURE__*/React.createElement(RadioContext.Provider, {
57
57
  value: contextValue
58
- }, plaintext ? /*#__PURE__*/React.createElement(Plaintext, {
58
+ }, plaintext ? /*#__PURE__*/React.createElement(Plaintext, _extends({
59
59
  ref: ref,
60
60
  localeKey: "notSelected"
61
- }, value ? children : null) : /*#__PURE__*/React.createElement(Component, _extends({
61
+ }, rest), value ? children : null) : /*#__PURE__*/React.createElement(Component, _extends({
62
62
  role: "radiogroup"
63
63
  }, rest, {
64
64
  ref: ref,
package/esm/Rate/Rate.js CHANGED
@@ -2,6 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  import React, { useCallback, useEffect, useState } from 'react';
4
4
  import PropTypes from 'prop-types';
5
+ import isNil from 'lodash/isNil';
5
6
  import Star from '@rsuite/icons/legacy/Star';
6
7
  import { useClassNames, useControlled, shallowEqualArray, SIZE, KEY_VALUES } from '../utils';
7
8
  import { transformValueToCharacterMap, transformCharacterMapToValue } from './utils';
@@ -120,7 +121,7 @@ var Rate = /*#__PURE__*/React.forwardRef(function (props, ref) {
120
121
  return /*#__PURE__*/React.createElement(Plaintext, {
121
122
  localeKey: "notSelected",
122
123
  className: className
123
- }, value + "(" + max + ")");
124
+ }, !isNil(value) ? value + "(" + max + ")" : null);
124
125
  }
125
126
 
126
127
  return /*#__PURE__*/React.createElement(Component, _extends({
@@ -9,6 +9,7 @@ import Ripple from '../Ripple';
9
9
  import SafeAnchor from '../SafeAnchor';
10
10
  import NavContext from '../Nav/NavContext';
11
11
  import DropdownContext from '../Dropdown/DropdownContext';
12
+ import { useRenderDropdownItem } from '../Dropdown/useRenderDropdownItem';
12
13
 
13
14
  /**
14
15
  * Tree View Node
@@ -59,34 +60,39 @@ var SidenavDropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
59
60
  var menuitemEventHandlers = {
60
61
  onClick: createChainedFunction(handleClick, onClick)
61
62
  };
63
+ var renderDropdownItem = useRenderDropdownItem(Component);
62
64
 
63
65
  if (divider) {
64
- return /*#__PURE__*/React.createElement(Component, _extends({
66
+ return renderDropdownItem(_extends({
65
67
  ref: ref,
66
- role: "separator",
68
+ role: 'separator',
67
69
  style: style,
68
70
  className: merge(prefix('divider'), className)
69
71
  }, rest));
70
72
  }
71
73
 
72
74
  if (panel) {
73
- return /*#__PURE__*/React.createElement(Component, _extends({
75
+ return renderDropdownItem(_extends({
74
76
  ref: ref,
75
- role: "none presentation",
77
+ role: 'none presentation',
76
78
  style: style,
77
79
  className: merge(prefix('panel'), className)
78
- }, rest), children);
80
+ }, rest, {
81
+ children: children
82
+ }));
79
83
  }
80
84
 
81
- return /*#__PURE__*/React.createElement(SafeAnchor, _extends({
85
+ return renderDropdownItem(_extends({
82
86
  ref: ref
83
87
  }, rest, {
84
88
  style: style,
85
89
  className: classes,
86
- "aria-current": selected || undefined
87
- }, menuitemEventHandlers), icon && /*#__PURE__*/React.cloneElement(icon, {
88
- className: prefix('menu-icon')
89
- }), children, /*#__PURE__*/React.createElement(Ripple, null));
90
+ 'aria-current': selected || undefined
91
+ }, menuitemEventHandlers, {
92
+ children: /*#__PURE__*/React.createElement(React.Fragment, null, icon && /*#__PURE__*/React.cloneElement(icon, {
93
+ className: prefix('menu-icon')
94
+ }), children, /*#__PURE__*/React.createElement(Ripple, null))
95
+ }), SafeAnchor);
90
96
  });
91
97
  SidenavDropdownItem.displayName = 'Sidenav.Dropdown.Item';
92
98
  SidenavDropdownItem.propTypes = {
@@ -412,10 +412,13 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
412
412
  (_targetRef$current2 = targetRef.current) === null || _targetRef$current2 === void 0 ? void 0 : _targetRef$current2.focus();
413
413
  }, [activeNode, setSearchKeyword, valueKey]);
414
414
  usePublicMethods(ref, {
415
+ rootRef: inline ? treeViewRef : null,
415
416
  triggerRef: triggerRef,
416
417
  overlayRef: overlayRef,
417
- targetRef: targetRef
418
- }, inline);
418
+ targetRef: targetRef,
419
+ listRef: listRef,
420
+ inline: inline
421
+ });
419
422
  var handleFocusItem = useCallback(function (key) {
420
423
  var focusableItems = getFocusableItems(filteredData, {
421
424
  disabledItemValues: disabledItemValues,
@@ -627,7 +630,7 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
627
630
  return /*#__PURE__*/React.createElement("div", {
628
631
  role: "tree",
629
632
  id: id ? id + "-listbox" : undefined,
630
- ref: inline ? mergeRefs(treeViewRef, ref) : treeViewRef,
633
+ ref: treeViewRef,
631
634
  className: classes,
632
635
  style: styles,
633
636
  onKeyDown: inline ? handleTreeKeyDown : undefined
@@ -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: EventTarget | (() => EventTarget), listener: EventListenerOrEventListenerObject): void;
8
+ export default function useElementResize(eventTarget: Element | (() => Element), listener: ResizeObserverCallback): void;
@@ -1,5 +1,5 @@
1
- import { useEffect } from 'react';
2
- import bindElementResize, { unbind } from 'element-resize-event';
1
+ import { useEffect, useRef } from 'react';
2
+ import { ResizeObserver } from '@juggle/resize-observer';
3
3
  /**
4
4
  * Attach the event handler directly to the specified DOM element,
5
5
  * and it will be triggered when the size of the DOM element is changed.
@@ -9,11 +9,18 @@ import bindElementResize, { unbind } from 'element-resize-event';
9
9
  */
10
10
 
11
11
  export default function useElementResize(eventTarget, listener) {
12
+ var resizeObserver = useRef();
12
13
  useEffect(function () {
13
- var target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
14
- bindElementResize(target, listener);
14
+ if (!resizeObserver.current) {
15
+ var target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
16
+ resizeObserver.current = new ResizeObserver(listener);
17
+ resizeObserver.current.observe(target);
18
+ }
19
+
15
20
  return function () {
16
- return unbind(target);
21
+ var _resizeObserver$curre;
22
+
23
+ (_resizeObserver$curre = resizeObserver.current) === null || _resizeObserver$curre === void 0 ? void 0 : _resizeObserver$curre.disconnect();
17
24
  };
18
25
  }, [eventTarget, listener]);
19
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.2.0",
3
+ "version": "5.2.4",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -25,6 +25,7 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@babel/runtime": "^7.8.4",
28
+ "@juggle/resize-observer": "^3.3.1",
28
29
  "@rsuite/icons": "^1.0.2",
29
30
  "@types/chai": "^4.2.18",
30
31
  "@types/lodash": "^4.14.134",
@@ -33,11 +34,10 @@
33
34
  "classnames": "^2.3.1",
34
35
  "date-fns": "^2.13.0",
35
36
  "dom-lib": "^3.0.0",
36
- "element-resize-event": "^3.0.6",
37
37
  "lodash": "^4.17.11",
38
38
  "prop-types": "^15.7.2",
39
39
  "react-virtualized": "^9.22.3",
40
- "rsuite-table": "^5.0.3",
40
+ "rsuite-table": "^5.2.2",
41
41
  "schema-typed": "^2.0.2"
42
42
  },
43
43
  "peerDependencies": {