rsuite 5.11.0 → 5.13.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 (181) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/Nav/styles/index.less +7 -1
  3. package/Navbar/styles/index.less +6 -1
  4. package/Sidenav/styles/index.less +47 -9
  5. package/cjs/Cascader/DropdownMenu.js +8 -3
  6. package/cjs/Disclosure/Disclosure.d.ts +1 -1
  7. package/cjs/Disclosure/DisclosureContext.d.ts +1 -1
  8. package/cjs/Dropdown/Dropdown.js +26 -110
  9. package/cjs/Dropdown/DropdownItem.js +14 -58
  10. package/cjs/Dropdown/DropdownMenu.js +32 -76
  11. package/cjs/Dropdown/DropdownToggle.js +4 -17
  12. package/cjs/Form/Form.js +21 -7
  13. package/cjs/Form/FormContext.d.ts +18 -13
  14. package/cjs/Form/useSchemaModel.d.ts +9 -0
  15. package/cjs/Form/useSchemaModel.js +46 -0
  16. package/cjs/FormControl/FormControl.d.ts +3 -0
  17. package/cjs/FormControl/FormControl.js +9 -2
  18. package/cjs/FormControl/useRegisterModel.d.ts +4 -0
  19. package/cjs/FormControl/useRegisterModel.js +20 -0
  20. package/cjs/Menu/Menu.d.ts +1 -0
  21. package/cjs/Menu/Menu.js +1 -0
  22. package/cjs/Menu/MenuItem.d.ts +1 -0
  23. package/cjs/Menu/MenuItem.js +1 -0
  24. package/cjs/Menu/Menubar.d.ts +3 -0
  25. package/cjs/Menu/Menubar.js +4 -0
  26. package/cjs/Nav/Nav.d.ts +7 -2
  27. package/cjs/Nav/Nav.js +105 -5
  28. package/cjs/Nav/NavContext.d.ts +2 -8
  29. package/cjs/Nav/NavContext.js +1 -7
  30. package/cjs/Nav/NavDropdown.d.ts +71 -0
  31. package/cjs/Nav/NavDropdown.js +193 -0
  32. package/cjs/Nav/NavDropdownItem.d.ts +39 -0
  33. package/cjs/Nav/NavDropdownItem.js +141 -0
  34. package/cjs/Nav/NavDropdownMenu.d.ts +26 -0
  35. package/cjs/Nav/NavDropdownMenu.js +156 -0
  36. package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
  37. package/cjs/Nav/NavDropdownToggle.js +74 -0
  38. package/cjs/Nav/NavItem.d.ts +2 -0
  39. package/cjs/Nav/NavItem.js +13 -26
  40. package/cjs/Nav/NavMenu.d.ts +38 -0
  41. package/cjs/Nav/NavMenu.js +122 -0
  42. package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
  43. package/cjs/Navbar/NavbarDropdown.js +147 -0
  44. package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
  45. package/cjs/Navbar/NavbarDropdownItem.js +149 -0
  46. package/cjs/Navbar/NavbarDropdownMenu.d.ts +37 -0
  47. package/cjs/Navbar/NavbarDropdownMenu.js +155 -0
  48. package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
  49. package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
  50. package/cjs/Navbar/NavbarItem.d.ts +5 -2
  51. package/cjs/Navbar/NavbarItem.js +10 -4
  52. package/cjs/Overlay/OverlayTrigger.d.ts +4 -4
  53. package/cjs/Picker/utils.js +22 -15
  54. package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  55. package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
  56. package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  57. package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
  58. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  59. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
  60. package/cjs/Sidenav/Sidenav.d.ts +8 -2
  61. package/cjs/Sidenav/Sidenav.js +1 -2
  62. package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
  63. package/cjs/Sidenav/SidenavDropdown.js +144 -73
  64. package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
  65. package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
  66. package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  67. package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
  68. package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  69. package/cjs/Sidenav/SidenavDropdownToggle.js +72 -0
  70. package/cjs/Sidenav/SidenavItem.d.ts +3 -0
  71. package/cjs/Sidenav/SidenavItem.js +22 -14
  72. package/cjs/Sidenav/SidenavToggle.d.ts +5 -1
  73. package/cjs/Sidenav/SidenavToggle.js +25 -9
  74. package/cjs/Whisper/Whisper.d.ts +3 -5
  75. package/cjs/Whisper/test/Whisper.test.d.ts +1 -0
  76. package/cjs/Whisper/test/Whisper.test.js +23 -0
  77. package/cjs/index.d.ts +1 -1
  78. package/cjs/utils/deprecateComponent.js +4 -6
  79. package/cjs/utils/deprecatePropType.d.ts +1 -5
  80. package/cjs/utils/deprecatePropType.js +7 -14
  81. package/cjs/utils/treeUtils.js +8 -10
  82. package/cjs/utils/useInternalId.d.ts +1 -1
  83. package/cjs/utils/useInternalId.js +2 -2
  84. package/cjs/utils/warnOnce.d.ts +9 -0
  85. package/cjs/utils/warnOnce.js +22 -0
  86. package/dist/rsuite-rtl.css +81 -15
  87. package/dist/rsuite-rtl.min.css +1 -1
  88. package/dist/rsuite-rtl.min.css.map +1 -1
  89. package/dist/rsuite.css +81 -15
  90. package/dist/rsuite.js +303 -28
  91. package/dist/rsuite.js.map +1 -1
  92. package/dist/rsuite.min.css +1 -1
  93. package/dist/rsuite.min.css.map +1 -1
  94. package/dist/rsuite.min.js +1 -1
  95. package/dist/rsuite.min.js.map +1 -1
  96. package/esm/Cascader/DropdownMenu.js +8 -3
  97. package/esm/Disclosure/Disclosure.d.ts +1 -1
  98. package/esm/Disclosure/DisclosureContext.d.ts +1 -1
  99. package/esm/Dropdown/Dropdown.js +25 -105
  100. package/esm/Dropdown/DropdownItem.js +13 -55
  101. package/esm/Dropdown/DropdownMenu.js +31 -76
  102. package/esm/Dropdown/DropdownToggle.js +4 -14
  103. package/esm/Form/Form.js +19 -7
  104. package/esm/Form/FormContext.d.ts +18 -13
  105. package/esm/Form/useSchemaModel.d.ts +9 -0
  106. package/esm/Form/useSchemaModel.js +39 -0
  107. package/esm/FormControl/FormControl.d.ts +3 -0
  108. package/esm/FormControl/FormControl.js +9 -6
  109. package/esm/FormControl/useRegisterModel.d.ts +4 -0
  110. package/esm/FormControl/useRegisterModel.js +14 -0
  111. package/esm/Menu/Menu.d.ts +1 -0
  112. package/esm/Menu/Menu.js +1 -0
  113. package/esm/Menu/MenuItem.d.ts +1 -0
  114. package/esm/Menu/MenuItem.js +1 -0
  115. package/esm/Menu/Menubar.d.ts +3 -0
  116. package/esm/Menu/Menubar.js +4 -0
  117. package/esm/Nav/Nav.d.ts +7 -2
  118. package/esm/Nav/Nav.js +96 -5
  119. package/esm/Nav/NavContext.d.ts +2 -8
  120. package/esm/Nav/NavContext.js +1 -6
  121. package/esm/Nav/NavDropdown.d.ts +71 -0
  122. package/esm/Nav/NavDropdown.js +170 -0
  123. package/esm/Nav/NavDropdownItem.d.ts +39 -0
  124. package/esm/Nav/NavDropdownItem.js +123 -0
  125. package/esm/Nav/NavDropdownMenu.d.ts +26 -0
  126. package/esm/Nav/NavDropdownMenu.js +138 -0
  127. package/esm/Nav/NavDropdownToggle.d.ts +21 -0
  128. package/esm/Nav/NavDropdownToggle.js +57 -0
  129. package/esm/Nav/NavItem.d.ts +2 -0
  130. package/esm/Nav/NavItem.js +13 -21
  131. package/esm/Nav/NavMenu.d.ts +38 -0
  132. package/esm/Nav/NavMenu.js +98 -0
  133. package/esm/Navbar/NavbarDropdown.d.ts +57 -0
  134. package/esm/Navbar/NavbarDropdown.js +124 -0
  135. package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
  136. package/esm/Navbar/NavbarDropdownItem.js +128 -0
  137. package/esm/Navbar/NavbarDropdownMenu.d.ts +37 -0
  138. package/esm/Navbar/NavbarDropdownMenu.js +135 -0
  139. package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
  140. package/esm/Navbar/NavbarDropdownToggle.js +55 -0
  141. package/esm/Navbar/NavbarItem.d.ts +5 -2
  142. package/esm/Navbar/NavbarItem.js +11 -4
  143. package/esm/Overlay/OverlayTrigger.d.ts +4 -4
  144. package/esm/Picker/utils.js +22 -14
  145. package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  146. package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
  147. package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  148. package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
  149. package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  150. package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
  151. package/esm/Sidenav/Sidenav.d.ts +8 -2
  152. package/esm/Sidenav/Sidenav.js +1 -2
  153. package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
  154. package/esm/Sidenav/SidenavDropdown.js +145 -75
  155. package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
  156. package/esm/Sidenav/SidenavDropdownItem.js +87 -71
  157. package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  158. package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
  159. package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  160. package/esm/Sidenav/SidenavDropdownToggle.js +55 -0
  161. package/esm/Sidenav/SidenavItem.d.ts +3 -0
  162. package/esm/Sidenav/SidenavItem.js +23 -15
  163. package/esm/Sidenav/SidenavToggle.d.ts +5 -1
  164. package/esm/Sidenav/SidenavToggle.js +22 -9
  165. package/esm/Whisper/Whisper.d.ts +3 -5
  166. package/esm/Whisper/test/Whisper.test.d.ts +1 -0
  167. package/esm/Whisper/test/Whisper.test.js +16 -0
  168. package/esm/index.d.ts +1 -1
  169. package/esm/utils/deprecateComponent.js +3 -4
  170. package/esm/utils/deprecatePropType.d.ts +1 -5
  171. package/esm/utils/deprecatePropType.js +3 -13
  172. package/esm/utils/treeUtils.js +8 -10
  173. package/esm/utils/useInternalId.d.ts +1 -1
  174. package/esm/utils/useInternalId.js +2 -2
  175. package/esm/utils/warnOnce.d.ts +9 -0
  176. package/esm/utils/warnOnce.js +18 -0
  177. package/package.json +1 -1
  178. package/styles/color-modes/dark.less +3 -0
  179. package/styles/color-modes/high-contrast.less +3 -0
  180. package/styles/color-modes/light.less +3 -0
  181. package/styles/variables.less +3 -0
@@ -10,7 +10,17 @@ import NavContext from '../Nav/NavContext';
10
10
  import MenuItem from '../Menu/MenuItem';
11
11
  import omit from 'lodash/omit';
12
12
  import { SidenavContext } from './Sidenav';
13
+
14
+ /**
15
+ * @private
16
+ */
13
17
  var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
18
+ var sidenav = useContext(SidenavContext);
19
+
20
+ if (!sidenav) {
21
+ throw new Error('<SidenavItem> component is not supposed to be used standalone. Use <Nav.Item> inside <Sidenav> instead.');
22
+ }
23
+
14
24
  var _props$as = props.as,
15
25
  Component = _props$as === void 0 ? SafeAnchor : _props$as,
16
26
  activeProp = props.active,
@@ -28,15 +38,9 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
28
38
  panel = props.panel,
29
39
  rest = _objectWithoutPropertiesLoose(props, ["as", "active", "children", "className", "disabled", "classPrefix", "icon", "eventKey", "style", "onClick", "onSelect", "divider", "panel"]);
30
40
 
31
- var sidenav = useContext(SidenavContext);
32
-
33
- if (!sidenav) {
34
- throw new Error('<SidenavItem> component is not supposed to be used standalone. Use <Nav.Item> inside <Sidenav> instead.');
35
- }
36
-
37
- var _useContext = useContext(NavContext),
38
- activeKey = _useContext.activeKey,
39
- onSelectFromNav = _useContext.onSelect;
41
+ var _ref = useContext(NavContext),
42
+ activeKey = _ref.activeKey,
43
+ onSelectFromNav = _ref.onSelect;
40
44
 
41
45
  var _useClassNames = useClassNames(classPrefix),
42
46
  merge = _useClassNames.merge,
@@ -56,10 +60,10 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
56
60
  selected: selected,
57
61
  disabled: disabled,
58
62
  onActivate: handleClick
59
- }, function (_ref, menuitemRef) {
60
- var selected = _ref.selected,
61
- active = _ref.active,
62
- menuitem = _objectWithoutPropertiesLoose(_ref, ["selected", "active"]);
63
+ }, function (_ref2, menuitemRef) {
64
+ var selected = _ref2.selected,
65
+ active = _ref2.active,
66
+ menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
63
67
 
64
68
  var classes = merge(className, withClassPrefix({
65
69
  focus: active,
@@ -74,7 +78,9 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
74
78
  disabled: Component === SafeAnchor ? disabled : undefined,
75
79
  className: classes,
76
80
  "data-event-key": eventKey
77
- }, omit(rest, ['divider', 'panel']), triggerProps, menuitem), icon, _children, /*#__PURE__*/React.createElement(Ripple, null));
81
+ }, omit(rest, ['divider', 'panel']), triggerProps, menuitem), icon && /*#__PURE__*/React.cloneElement(icon, {
82
+ className: prefix('icon')
83
+ }), _children, /*#__PURE__*/React.createElement(Ripple, null));
78
84
  },
79
85
  message: _children,
80
86
  placement: 'right'
@@ -110,7 +116,9 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
110
116
  style: style,
111
117
  "aria-selected": selected || undefined,
112
118
  "data-event-key": eventKey
113
- }, rest), icon, _children, /*#__PURE__*/React.createElement(Ripple, null));
119
+ }, rest), icon && /*#__PURE__*/React.cloneElement(icon, {
120
+ className: prefix('icon')
121
+ }), _children, /*#__PURE__*/React.createElement(Ripple, null));
114
122
  });
115
123
  SidenavItem.displayName = 'Sidenav.Item';
116
124
  SidenavItem.propTypes = {
@@ -1,7 +1,11 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
3
  export interface SidenavToggleProps extends WithAsProps {
4
- /** Expand then nav */
4
+ /**
5
+ * Expand then nav
6
+ *
7
+ * @deprecated Use <Sidenav expanded> instead.
8
+ */
5
9
  expanded?: boolean;
6
10
  /** Callback function for menu state switching */
7
11
  onToggle?: (expanded: boolean, event: React.MouseEvent) => void;
@@ -1,29 +1,41 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React from 'react';
3
+ import React, { useContext } from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import IconButton from '../IconButton';
6
6
  import { useClassNames } from '../utils';
7
7
  import AngleLeft from '@rsuite/icons/legacy/AngleLeft';
8
8
  import AngleRight from '@rsuite/icons/legacy/AngleRight';
9
+ import deprecatePropType from '../utils/deprecatePropType';
10
+ import { SidenavContext } from './Sidenav';
9
11
  var SidenavToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
12
+ var sidenav = useContext(SidenavContext);
13
+
14
+ if (!sidenav) {
15
+ throw new Error('<Sidenav.Toggle> must be rendered within a <Sidenav>');
16
+ }
17
+
10
18
  var _props$as = props.as,
11
19
  Component = _props$as === void 0 ? 'div' : _props$as,
12
- expanded = props.expanded,
20
+ DEPRECATED_expanded = props.expanded,
13
21
  className = props.className,
14
22
  _props$classPrefix = props.classPrefix,
15
23
  classPrefix = _props$classPrefix === void 0 ? 'sidenav-toggle' : _props$classPrefix,
16
24
  onToggle = props.onToggle,
17
- rest = _objectWithoutPropertiesLoose(props, ["as", "expanded", "className", "classPrefix", "onToggle"]);
25
+ rest = _objectWithoutPropertiesLoose(props, ["as", "expanded", "className", "classPrefix", "onToggle"]); // if `expanded` prop is provided, it takes priority
26
+
27
+
28
+ var expanded = DEPRECATED_expanded !== null && DEPRECATED_expanded !== void 0 ? DEPRECATED_expanded : sidenav.expanded;
18
29
 
19
30
  var _useClassNames = useClassNames(classPrefix),
20
31
  merge = _useClassNames.merge,
21
- withClassPrefix = _useClassNames.withClassPrefix;
32
+ withClassPrefix = _useClassNames.withClassPrefix,
33
+ prefix = _useClassNames.prefix;
22
34
 
23
35
  var classes = merge(className, withClassPrefix({
24
36
  collapsed: !expanded
25
37
  }));
26
- var Icon = expanded ? AngleRight : AngleLeft;
38
+ var Icon = expanded ? AngleLeft : AngleRight;
27
39
 
28
40
  var handleToggle = function handleToggle(event) {
29
41
  onToggle === null || onToggle === void 0 ? void 0 : onToggle(!expanded, event);
@@ -33,16 +45,17 @@ var SidenavToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
33
45
  ref: ref,
34
46
  className: classes
35
47
  }), /*#__PURE__*/React.createElement(IconButton, {
36
- appearance: "default",
37
48
  icon: /*#__PURE__*/React.createElement(Icon, null),
38
- onClick: handleToggle
49
+ className: prefix('button'),
50
+ onClick: handleToggle,
51
+ "aria-label": expanded ? 'Collapse' : 'Expand'
39
52
  }));
40
53
  });
41
- SidenavToggle.displayName = 'SidenavToggle';
54
+ SidenavToggle.displayName = 'Sidenav.Toggle';
42
55
  SidenavToggle.propTypes = {
43
56
  classPrefix: PropTypes.string,
44
57
  className: PropTypes.string,
45
- expanded: PropTypes.bool,
58
+ expanded: deprecatePropType(PropTypes.bool, 'Use <Sidenav expanded> instead.'),
46
59
  onToggle: PropTypes.func
47
60
  };
48
61
  export default SidenavToggle;
@@ -1,9 +1,7 @@
1
1
  import React from 'react';
2
+ import { OverlayTriggerInstance } from '../Overlay/OverlayTrigger';
2
3
  import { OverlayTriggerProps } from '../Overlay/OverlayTrigger';
3
4
  export declare type WhisperProps = OverlayTriggerProps;
4
- export interface WhisperInstance extends React.Component<WhisperProps> {
5
- open: (delay?: number) => void;
6
- close: (delay?: number) => void;
7
- }
8
- declare const Whisper: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<unknown>>;
5
+ export declare type WhisperInstance = OverlayTriggerInstance;
6
+ declare const Whisper: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerInstance>>;
9
7
  export default Whisper;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ var _whisperRef$current, _whisperRef$current2, _whisperRef$current3, _whisperRef$current4, _whisperRef$current5;
2
+
3
+ import React from 'react';
4
+ import Whisper from '../Whisper';
5
+ var whisperRef = /*#__PURE__*/React.createRef();
6
+
7
+ /*#__PURE__*/
8
+ React.createElement(Whisper, {
9
+ ref: whisperRef,
10
+ speaker: /*#__PURE__*/React.createElement("div", null)
11
+ }, /*#__PURE__*/React.createElement("div", null));
12
+ (_whisperRef$current = whisperRef.current) === null || _whisperRef$current === void 0 ? void 0 : _whisperRef$current.open();
13
+ (_whisperRef$current2 = whisperRef.current) === null || _whisperRef$current2 === void 0 ? void 0 : _whisperRef$current2.open(300);
14
+ (_whisperRef$current3 = whisperRef.current) === null || _whisperRef$current3 === void 0 ? void 0 : _whisperRef$current3.close();
15
+ (_whisperRef$current4 = whisperRef.current) === null || _whisperRef$current4 === void 0 ? void 0 : _whisperRef$current4.close(300);
16
+ (_whisperRef$current5 = whisperRef.current) === null || _whisperRef$current5 === void 0 ? void 0 : _whisperRef$current5.updatePosition();
package/esm/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { ButtonToolbarProps } from './ButtonToolbar';
7
7
  export { default as ButtonGroup } from './ButtonGroup';
8
8
  export type { ButtonGroupProps } from './ButtonGroup';
9
9
  export { default as Whisper } from './Whisper';
10
- export type { WhisperProps } from './Whisper';
10
+ export type { WhisperProps, WhisperInstance } from './Whisper';
11
11
  export { default as Tooltip } from './Tooltip';
12
12
  export type { TooltipProps } from './Tooltip';
13
13
  export { default as Popover } from './Popover';
@@ -1,5 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import React, { useEffect } from 'react';
2
+ import React from 'react';
3
+ import warnOnce from './warnOnce';
3
4
  /**
4
5
  * HOC for display a deprecation message from a deprecated component
5
6
  * fixme: Only display deprecation message in non-production environment
@@ -10,9 +11,7 @@ export default function deprecateComponent(Component, message) {
10
11
 
11
12
  var componentDisplayName = (_Component$displayNam = Component.displayName) !== null && _Component$displayNam !== void 0 ? _Component$displayNam : Component.name;
12
13
  var Deprecated = /*#__PURE__*/React.forwardRef(function (props, ref) {
13
- useEffect(function () {
14
- console.warn(message);
15
- }, []);
14
+ warnOnce(message);
16
15
  return /*#__PURE__*/React.createElement(Component, _extends({
17
16
  ref: ref
18
17
  }, props));
@@ -1,6 +1,2 @@
1
1
  import * as PropTypes from 'prop-types';
2
- declare function deprecatePropType<T extends PropTypes.Validator<any>>(propType: T, explanation?: string): typeof propType;
3
- declare namespace deprecatePropType {
4
- var _resetWarned: () => void;
5
- }
6
- export default deprecatePropType;
2
+ export default function deprecatePropType<T extends PropTypes.Validator<any>>(propType: T, explanation?: string): typeof propType;
@@ -1,15 +1,11 @@
1
1
  // Ref: https://github.com/thefrontside/deprecated-prop-type/blob/master/deprecated.js
2
- var warned = {};
2
+ import warnOnce from './warnOnce';
3
3
  export default function deprecatePropType(propType, explanation) {
4
4
  return function validate(props, propName, componentName) {
5
5
  // Note ...rest here
6
6
  if (props[propName] != null) {
7
7
  var message = "\"" + propName + "\" property of \"" + componentName + "\" has been deprecated.\n" + explanation;
8
-
9
- if (!warned[message]) {
10
- console.warn(message);
11
- warned[message] = true;
12
- }
8
+ warnOnce(message);
13
9
  }
14
10
 
15
11
  for (var _len = arguments.length, rest = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
@@ -18,10 +14,4 @@ export default function deprecatePropType(propType, explanation) {
18
14
 
19
15
  return propType.apply(void 0, [props, propName, componentName].concat(rest)); // and here
20
16
  };
21
- }
22
-
23
- function _resetWarned() {
24
- warned = {};
25
- }
26
-
27
- deprecatePropType._resetWarned = _resetWarned;
17
+ }
@@ -686,11 +686,7 @@ export function useFlattenTreeData(_ref8) {
686
686
  var forceUpdate = useCallback(function () {
687
687
  dispatch(Object.create(null));
688
688
  }, [dispatch]);
689
-
690
- var _useRef = useRef({}),
691
- _useRef$current = _useRef.current,
692
- flattenNodes = _useRef$current === void 0 ? {} : _useRef$current;
693
-
689
+ var flattenNodes = useRef({});
694
690
  var flattenTreeData = useCallback(function (treeData, ref, parent, layer) {
695
691
  if (layer === void 0) {
696
692
  layer = 1;
@@ -705,20 +701,20 @@ export function useFlattenTreeData(_ref8) {
705
701
 
706
702
  var refKey = ref + "-" + index;
707
703
  node.refKey = refKey;
708
- flattenNodes[refKey] = _extends((_extends2 = {
704
+ flattenNodes.current[refKey] = _extends((_extends2 = {
709
705
  layer: layer
710
706
  }, _extends2[labelKey] = node[labelKey], _extends2[valueKey] = node[valueKey], _extends2.uncheckable = uncheckableItemValues.some(function (value) {
711
707
  return shallowEqual(node[valueKey], value);
712
708
  }), _extends2), node);
713
709
 
714
710
  if (parent) {
715
- flattenNodes[refKey].parent = _omit(parent, 'parent', 'children');
711
+ flattenNodes.current[refKey].parent = _omit(parent, 'parent', 'children');
716
712
  }
717
713
 
718
714
  flattenTreeData(node[childrenKey], refKey, node, layer + 1);
719
715
  });
720
- callback === null || callback === void 0 ? void 0 : callback(flattenNodes);
721
- }, [childrenKey, valueKey, labelKey, callback, uncheckableItemValues, flattenNodes]);
716
+ callback === null || callback === void 0 ? void 0 : callback(flattenNodes.current);
717
+ }, [childrenKey, valueKey, labelKey, callback, uncheckableItemValues]);
722
718
  var serializeListOnlyParent = useCallback(function (nodes, key) {
723
719
  var list = [];
724
720
  Object.keys(nodes).forEach(function (refKey) {
@@ -819,12 +815,14 @@ export function useFlattenTreeData(_ref8) {
819
815
  };
820
816
 
821
817
  useEffect(function () {
818
+ // when data is changed, should clear the flattenNodes, avoid duplicate keys
819
+ flattenNodes.current = {};
822
820
  flattenTreeData(data, '0');
823
821
  }, [data]); // eslint-disable-line react-hooks/exhaustive-deps
824
822
 
825
823
  return {
826
824
  forceUpdate: forceUpdate,
827
- flattenNodes: flattenNodes,
825
+ flattenNodes: flattenNodes.current,
828
826
  flattenTreeData: flattenTreeData,
829
827
  serializeListOnlyParent: serializeListOnlyParent,
830
828
  unSerializeList: unSerializeList,
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Used for generating unique ID for DOM elements
3
3
  */
4
- export default function useInternalId(prefix?: string): string;
4
+ export default function useInternalId(namespace?: string): string;
@@ -4,11 +4,11 @@ import uniqueId from 'lodash/uniqueId';
4
4
  * Used for generating unique ID for DOM elements
5
5
  */
6
6
 
7
- export default function useInternalId(prefix) {
7
+ export default function useInternalId(namespace) {
8
8
  var idRef = useRef();
9
9
 
10
10
  if (!idRef.current) {
11
- idRef.current = uniqueId("internal://" + prefix);
11
+ idRef.current = uniqueId("internal://" + namespace);
12
12
  }
13
13
 
14
14
  useDebugValue(idRef.current);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Logs a warning message
3
+ * but dont warn a same message twice
4
+ */
5
+ declare function warnOnce(message: string): void;
6
+ declare namespace warnOnce {
7
+ var _resetWarned: () => void;
8
+ }
9
+ export default warnOnce;
@@ -0,0 +1,18 @@
1
+ var warned = {};
2
+ /**
3
+ * Logs a warning message
4
+ * but dont warn a same message twice
5
+ */
6
+
7
+ export default function warnOnce(message) {
8
+ if (!warned[message]) {
9
+ console.warn(message);
10
+ warned[message] = true;
11
+ }
12
+ }
13
+
14
+ warnOnce._resetWarned = function () {
15
+ for (var _message in warned) {
16
+ delete warned[_message];
17
+ }
18
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.11.0",
3
+ "version": "5.13.1",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -167,15 +167,18 @@
167
167
  --rs-sidenav-default-selected-text: @H500;
168
168
  --rs-sidenav-default-hover-bg: @B700;
169
169
  --rs-sidenav-default-hover-text: @B050;
170
+ --rs-sidenav-default-footer-border: @B600;
170
171
  --rs-sidenav-inverse-bg: @H700;
171
172
  --rs-sidenav-inverse-text: #fff;
172
173
  --rs-sidenav-inverse-selected-bg: @H400;
173
174
  --rs-sidenav-inverse-hover-bg: @H600;
175
+ --rs-sidenav-inverse-footer-border: @H600;
174
176
  --rs-sidenav-subtle-bg: transparent;
175
177
  --rs-sidenav-subtle-text: @B200;
176
178
  --rs-sidenav-subtle-selected-text: @H500;
177
179
  --rs-sidenav-subtle-hover-bg: @B700;
178
180
  --rs-sidenav-subtle-hover-text: @B050;
181
+ --rs-sidenav-subtle-footer-border: @B600;
179
182
 
180
183
  // Input
181
184
  --rs-input-bg: @B800;
@@ -175,16 +175,19 @@
175
175
  --rs-sidenav-default-selected-text: @H500;
176
176
  --rs-sidenav-default-hover-bg: transparent;
177
177
  --rs-sidenav-default-hover-text: @H500;
178
+ --rs-sidenav-default-footer-border: @B050;
178
179
  --rs-sidenav-inverse-bg: @B800;
179
180
  --rs-sidenav-inverse-text: @B050;
180
181
  --rs-sidenav-inverse-selected-bg: transparent;
181
182
  --rs-sidenav-inverse-selected-text: @H500;
182
183
  --rs-sidenav-inverse-hover-bg: transparent;
184
+ --rs-sidenav-inverse-footer-border: @B050;
183
185
  --rs-sidenav-subtle-bg: @B800;
184
186
  --rs-sidenav-subtle-text: @B050;
185
187
  --rs-sidenav-subtle-selected-text: @H500;
186
188
  --rs-sidenav-subtle-hover-bg: transparent;
187
189
  --rs-sidenav-subtle-hover-text: @H500;
190
+ --rs-sidenav-subtle-footer-border: @B050;
188
191
 
189
192
  // Input
190
193
  --rs-input-bg: @B800;
@@ -174,15 +174,18 @@
174
174
  --rs-sidenav-default-selected-text: @H700;
175
175
  --rs-sidenav-default-hover-bg: @B200;
176
176
  --rs-sidenav-default-hover-text: @B800;
177
+ --rs-sidenav-default-footer-border: @B200;
177
178
  --rs-sidenav-inverse-bg: @H500;
178
179
  --rs-sidenav-inverse-text: #fff;
179
180
  --rs-sidenav-inverse-selected-bg: @H700;
180
181
  --rs-sidenav-inverse-hover-bg: @H600;
182
+ --rs-sidenav-inverse-footer-border: @H600;
181
183
  --rs-sidenav-subtle-bg: #fff;
182
184
  --rs-sidenav-subtle-text: @B600;
183
185
  --rs-sidenav-subtle-selected-text: @H700;
184
186
  --rs-sidenav-subtle-hover-bg: @B050;
185
187
  --rs-sidenav-subtle-hover-text: @B800;
188
+ --rs-sidenav-subtle-footer-border: @B200;
186
189
 
187
190
  // Input
188
191
  --rs-input-bg: @B000;
@@ -394,14 +394,17 @@
394
394
 
395
395
  // Sidenav
396
396
 
397
+ @sidenav-item-caret-size: 16px;
397
398
  @sidenav-padding-vertical: 15px;
398
399
  @sidenav-children-padding-vertical: 11px;
399
400
  @sidenav-padding-horizontal: 20px;
400
401
  @sidenav-collapse-in-width: 100%;
401
402
  @sidenav-default-width: 56px;
403
+ @sidenav-compact-width: @sidenav-default-width; // TODO Replace sidenav-default-width
402
404
  @sidenav-item-height: (@sidenav-padding-vertical * 2 + @line-height-computed);
403
405
  @sidenav-menu-max-height: (@sidenav-item-height * 40);
404
406
  @sidenav-menu-animation-time: 1.5s;
407
+ @sidenav-footer-height: @sidenav-item-height; // Footer is same height as a sidenav item
405
408
  @sidenav-level1-item-font-size: @font-size-large;
406
409
  @sidenav-level1-item-line-height: unit((@line-height-computed / @font-size-large));
407
410
  @sidenav-icon-spacing: 20px;