rsuite 5.12.0 → 5.13.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 (146) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/Nav/styles/index.less +7 -1
  3. package/Navbar/styles/index.less +6 -1
  4. package/Sidenav/styles/index.less +7 -5
  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/Menu/Menu.d.ts +1 -0
  13. package/cjs/Menu/Menu.js +1 -0
  14. package/cjs/Menu/MenuItem.d.ts +1 -0
  15. package/cjs/Menu/MenuItem.js +1 -0
  16. package/cjs/Menu/Menubar.d.ts +3 -0
  17. package/cjs/Menu/Menubar.js +4 -0
  18. package/cjs/Nav/Nav.d.ts +7 -2
  19. package/cjs/Nav/Nav.js +105 -5
  20. package/cjs/Nav/NavContext.d.ts +2 -8
  21. package/cjs/Nav/NavContext.js +1 -7
  22. package/cjs/Nav/NavDropdown.d.ts +71 -0
  23. package/cjs/Nav/NavDropdown.js +193 -0
  24. package/cjs/Nav/NavDropdownItem.d.ts +39 -0
  25. package/cjs/Nav/NavDropdownItem.js +141 -0
  26. package/cjs/Nav/NavDropdownMenu.d.ts +26 -0
  27. package/cjs/Nav/NavDropdownMenu.js +156 -0
  28. package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
  29. package/cjs/Nav/NavDropdownToggle.js +74 -0
  30. package/cjs/Nav/NavItem.d.ts +2 -0
  31. package/cjs/Nav/NavItem.js +13 -26
  32. package/cjs/Nav/NavMenu.d.ts +38 -0
  33. package/cjs/Nav/NavMenu.js +122 -0
  34. package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
  35. package/cjs/Navbar/NavbarDropdown.js +147 -0
  36. package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
  37. package/cjs/Navbar/NavbarDropdownItem.js +149 -0
  38. package/cjs/Navbar/NavbarDropdownMenu.d.ts +37 -0
  39. package/cjs/Navbar/NavbarDropdownMenu.js +155 -0
  40. package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
  41. package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
  42. package/cjs/Navbar/NavbarItem.d.ts +5 -2
  43. package/cjs/Navbar/NavbarItem.js +10 -4
  44. package/cjs/Picker/utils.js +22 -15
  45. package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  46. package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
  47. package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  48. package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
  49. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  50. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
  51. package/cjs/Sidenav/Sidenav.d.ts +8 -2
  52. package/cjs/Sidenav/Sidenav.js +1 -2
  53. package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
  54. package/cjs/Sidenav/SidenavDropdown.js +144 -73
  55. package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
  56. package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
  57. package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  58. package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
  59. package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  60. package/cjs/Sidenav/SidenavDropdownToggle.js +72 -0
  61. package/cjs/Sidenav/SidenavItem.d.ts +3 -0
  62. package/cjs/Sidenav/SidenavItem.js +22 -14
  63. package/cjs/utils/deprecateComponent.js +4 -6
  64. package/cjs/utils/deprecatePropType.d.ts +1 -5
  65. package/cjs/utils/deprecatePropType.js +7 -14
  66. package/cjs/utils/useInternalId.d.ts +1 -1
  67. package/cjs/utils/useInternalId.js +2 -2
  68. package/cjs/utils/warnOnce.d.ts +9 -0
  69. package/cjs/utils/warnOnce.js +22 -0
  70. package/dist/rsuite-rtl.css +18 -9
  71. package/dist/rsuite-rtl.min.css +1 -1
  72. package/dist/rsuite-rtl.min.css.map +1 -1
  73. package/dist/rsuite.css +18 -9
  74. package/dist/rsuite.js +275 -22
  75. package/dist/rsuite.js.map +1 -1
  76. package/dist/rsuite.min.css +1 -1
  77. package/dist/rsuite.min.css.map +1 -1
  78. package/dist/rsuite.min.js +1 -1
  79. package/dist/rsuite.min.js.map +1 -1
  80. package/esm/Cascader/DropdownMenu.js +8 -3
  81. package/esm/Disclosure/Disclosure.d.ts +1 -1
  82. package/esm/Disclosure/DisclosureContext.d.ts +1 -1
  83. package/esm/Dropdown/Dropdown.js +25 -105
  84. package/esm/Dropdown/DropdownItem.js +13 -55
  85. package/esm/Dropdown/DropdownMenu.js +31 -76
  86. package/esm/Dropdown/DropdownToggle.js +4 -14
  87. package/esm/Menu/Menu.d.ts +1 -0
  88. package/esm/Menu/Menu.js +1 -0
  89. package/esm/Menu/MenuItem.d.ts +1 -0
  90. package/esm/Menu/MenuItem.js +1 -0
  91. package/esm/Menu/Menubar.d.ts +3 -0
  92. package/esm/Menu/Menubar.js +4 -0
  93. package/esm/Nav/Nav.d.ts +7 -2
  94. package/esm/Nav/Nav.js +96 -5
  95. package/esm/Nav/NavContext.d.ts +2 -8
  96. package/esm/Nav/NavContext.js +1 -6
  97. package/esm/Nav/NavDropdown.d.ts +71 -0
  98. package/esm/Nav/NavDropdown.js +170 -0
  99. package/esm/Nav/NavDropdownItem.d.ts +39 -0
  100. package/esm/Nav/NavDropdownItem.js +123 -0
  101. package/esm/Nav/NavDropdownMenu.d.ts +26 -0
  102. package/esm/Nav/NavDropdownMenu.js +138 -0
  103. package/esm/Nav/NavDropdownToggle.d.ts +21 -0
  104. package/esm/Nav/NavDropdownToggle.js +57 -0
  105. package/esm/Nav/NavItem.d.ts +2 -0
  106. package/esm/Nav/NavItem.js +13 -21
  107. package/esm/Nav/NavMenu.d.ts +38 -0
  108. package/esm/Nav/NavMenu.js +98 -0
  109. package/esm/Navbar/NavbarDropdown.d.ts +57 -0
  110. package/esm/Navbar/NavbarDropdown.js +124 -0
  111. package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
  112. package/esm/Navbar/NavbarDropdownItem.js +128 -0
  113. package/esm/Navbar/NavbarDropdownMenu.d.ts +37 -0
  114. package/esm/Navbar/NavbarDropdownMenu.js +135 -0
  115. package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
  116. package/esm/Navbar/NavbarDropdownToggle.js +55 -0
  117. package/esm/Navbar/NavbarItem.d.ts +5 -2
  118. package/esm/Navbar/NavbarItem.js +11 -4
  119. package/esm/Picker/utils.js +22 -14
  120. package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  121. package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
  122. package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  123. package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
  124. package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  125. package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
  126. package/esm/Sidenav/Sidenav.d.ts +8 -2
  127. package/esm/Sidenav/Sidenav.js +1 -2
  128. package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
  129. package/esm/Sidenav/SidenavDropdown.js +145 -75
  130. package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
  131. package/esm/Sidenav/SidenavDropdownItem.js +87 -71
  132. package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  133. package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
  134. package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  135. package/esm/Sidenav/SidenavDropdownToggle.js +55 -0
  136. package/esm/Sidenav/SidenavItem.d.ts +3 -0
  137. package/esm/Sidenav/SidenavItem.js +23 -15
  138. package/esm/utils/deprecateComponent.js +3 -4
  139. package/esm/utils/deprecatePropType.d.ts +1 -5
  140. package/esm/utils/deprecatePropType.js +3 -13
  141. package/esm/utils/useInternalId.d.ts +1 -1
  142. package/esm/utils/useInternalId.js +2 -2
  143. package/esm/utils/warnOnce.d.ts +9 -0
  144. package/esm/utils/warnOnce.js +18 -0
  145. package/package.json +1 -1
  146. package/styles/variables.less +1 -0
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
+ exports.__esModule = true;
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
13
+
14
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
19
+
20
+ var _utils = require("../utils");
21
+
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
24
+ var _AngleLeft = _interopRequireDefault(require("@rsuite/icons/legacy/AngleLeft"));
25
+
26
+ var _AngleRight = _interopRequireDefault(require("@rsuite/icons/legacy/AngleRight"));
27
+
28
+ var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
29
+
30
+ var _ = require(".");
31
+
32
+ var _Disclosure = _interopRequireDefault(require("../Disclosure"));
33
+
34
+ var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
35
+
36
+ var _templateObject, _templateObject2;
37
+
38
+ /**
39
+ * @private this component is not supposed to be used directly
40
+ * Instead it's rendered by a <Nav.Menu> within a <Navbar>
41
+ *
42
+ * <Navbar>
43
+ * <Nav>
44
+ * <Nav.Menu>
45
+ * <Nav.Menu title="menu"> -> This submenu will render <NavbarDropdownMenu> component
46
+ * </Nav.Menu>
47
+ * </Nav.Menu>
48
+ * </Nav>
49
+ * </Navbar>
50
+ */
51
+ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
52
+ var navbar = (0, _react.useContext)(_.NavbarContext);
53
+ var nav = (0, _react.useContext)(_NavContext.default);
54
+
55
+ if (!navbar || !nav) {
56
+ throw new Error('<Navbar.Dropdown.Menu> must be rendered within a <Nav> within a <Navbar> component.');
57
+ }
58
+
59
+ var _onToggle = props.onToggle,
60
+ eventKey = props.eventKey,
61
+ title = props.title,
62
+ _props$classPrefix = props.classPrefix,
63
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
64
+ children = props.children,
65
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children"]);
66
+
67
+ var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
68
+ rtl = _useCustom.rtl;
69
+
70
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
71
+ prefix = _useClassNames.prefix;
72
+
73
+ var _useClassNames2 = (0, _utils.useClassNames)('dropdown-menu'),
74
+ withMenuClassPrefix = _useClassNames2.withClassPrefix,
75
+ mergeMenuClassName = _useClassNames2.merge;
76
+
77
+ var _useClassNames3 = (0, _utils.useClassNames)('dropdown-item'),
78
+ mergeItemClassNames = _useClassNames3.merge,
79
+ withItemClassPrefix = _useClassNames3.withClassPrefix,
80
+ prefixItemClassName = _useClassNames3.prefix; // Parent menu exists. This is a submenu.
81
+ // Should render a `menuitem` that controls this submenu.
82
+
83
+
84
+ var _omit = (0, _omit2.default)(rest, ['trigger']),
85
+ icon = _omit.icon,
86
+ className = _omit.className,
87
+ disabled = _omit.disabled,
88
+ menuProps = (0, _objectWithoutPropertiesLoose2.default)(_omit, ["icon", "className", "disabled"]);
89
+
90
+ var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
91
+ return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
92
+ hideOnClickOutside: true,
93
+ trigger: ['click', 'mouseover'],
94
+ onToggle: function onToggle(open, event) {
95
+ return _onToggle === null || _onToggle === void 0 ? void 0 : _onToggle(open, undefined, event);
96
+ }
97
+ }, function (_ref, containerRef) {
98
+ var open = _ref.open,
99
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
100
+ var classes = mergeItemClassNames(className, withItemClassPrefix({
101
+ disabled: disabled,
102
+ open: open,
103
+ submenu: true
104
+ }));
105
+ return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
106
+ ref: (0, _utils.mergeRefs)(ref, containerRef),
107
+ className: classes
108
+ }, props), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (_ref2, buttonRef) {
109
+ var open = _ref2.open,
110
+ buttonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
111
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
112
+ 'with-icon': icon,
113
+ open: open,
114
+ disabled: disabled
115
+ }));
116
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
117
+ ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
118
+ className: classes,
119
+ "data-event-key": eventKey,
120
+ "data-event-key-type": typeof eventKey
121
+ }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
122
+ className: prefix('menu-icon')
123
+ }), title, /*#__PURE__*/_react.default.createElement(Icon, {
124
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
125
+ }));
126
+ }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Content, null, function (_ref3, elementRef) {
127
+ var open = _ref3.open;
128
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
129
+ return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
130
+ ref: elementRef,
131
+ className: menuClassName,
132
+ hidden: !open
133
+ }, menuProps), children);
134
+ }));
135
+ });
136
+ });
137
+
138
+ NavbarDropdownMenu.displayName = 'Nav.Dropdown.Menu';
139
+ NavbarDropdownMenu.propTypes = {
140
+ active: _propTypes.default.bool,
141
+ activeKey: _propTypes.default.any,
142
+ className: _propTypes.default.string,
143
+ children: _propTypes.default.node,
144
+ icon: _propTypes.default.any,
145
+ classPrefix: _propTypes.default.string,
146
+ pullLeft: _propTypes.default.bool,
147
+ title: _propTypes.default.node,
148
+ open: _propTypes.default.bool,
149
+ eventKey: _propTypes.default.any,
150
+ expanded: _propTypes.default.bool,
151
+ collapsible: _propTypes.default.bool,
152
+ onToggle: _propTypes.default.func
153
+ };
154
+ var _default = NavbarDropdownMenu;
155
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import Button from '../Button';
3
+ import { WithAsProps, RsRefForwardingComponent, TypeAttributes } from '../@types/common';
4
+ export interface NavbarDropdownToggleProps extends WithAsProps {
5
+ noCaret?: boolean;
6
+ renderToggle?: (props: WithAsProps, ref: React.Ref<any>) => any;
7
+ placement?: TypeAttributes.Placement8;
8
+ }
9
+ /**
10
+ * @private this component is not supposed to be used directly
11
+ * Instead it's rendered by a <Nav.Menu> call
12
+ *
13
+ * <Nav>
14
+ * <Nav.Menu> -> This will render <NavDropdown> component that renders a <NavDropdownToggle>
15
+ * </Nav.Menu>
16
+ * </Nav>
17
+ */
18
+ declare const NavbarDropdownToggle: RsRefForwardingComponent<typeof Button, NavbarDropdownToggleProps>;
19
+ export default NavbarDropdownToggle;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _ArrowDownLine = _interopRequireDefault(require("@rsuite/icons/ArrowDownLine"));
17
+
18
+ var _utils = require("../utils");
19
+
20
+ var _NavbarItem = _interopRequireDefault(require("./NavbarItem"));
21
+
22
+ /**
23
+ * @private this component is not supposed to be used directly
24
+ * Instead it's rendered by a <Nav.Menu> call
25
+ *
26
+ * <Nav>
27
+ * <Nav.Menu> -> This will render <NavDropdown> component that renders a <NavDropdownToggle>
28
+ * </Nav.Menu>
29
+ * </Nav>
30
+ */
31
+ var NavbarDropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
32
+ var _props$as = props.as,
33
+ Component = _props$as === void 0 ? _NavbarItem.default : _props$as,
34
+ className = props.className,
35
+ _props$classPrefix = props.classPrefix,
36
+ classPrefix = _props$classPrefix === void 0 ? 'navbar-item' : _props$classPrefix,
37
+ renderToggle = props.renderToggle,
38
+ children = props.children,
39
+ noCaret = props.noCaret,
40
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "renderToggle", "children", "noCaret"]);
41
+
42
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
43
+ prefix = _useClassNames.prefix,
44
+ withClassPrefix = _useClassNames.withClassPrefix,
45
+ merge = _useClassNames.merge;
46
+
47
+ var classes = merge(className, withClassPrefix({
48
+ 'no-caret': noCaret
49
+ }));
50
+
51
+ var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
52
+ ref: ref,
53
+ className: classes
54
+ }), children, !noCaret && /*#__PURE__*/_react.default.createElement(_ArrowDownLine.default, {
55
+ className: prefix('caret')
56
+ }));
57
+
58
+ return renderToggle ? renderToggle(rest, ref) : toggle;
59
+ });
60
+
61
+ NavbarDropdownToggle.displayName = 'Navbar.Dropdown.Toggle';
62
+ NavbarDropdownToggle.propTypes = {
63
+ className: _propTypes.default.string,
64
+ children: _propTypes.default.node,
65
+ classPrefix: _propTypes.default.string,
66
+ noCaret: _propTypes.default.bool,
67
+ as: _propTypes.default.elementType,
68
+ renderToggle: _propTypes.default.func,
69
+ placement: _propTypes.default.oneOf(['bottomStart', 'bottomEnd', 'topStart', 'topEnd', 'leftStart', 'rightStart', 'leftEnd', 'rightEnd'])
70
+ };
71
+ var _default = NavbarDropdownToggle;
72
+ exports.default = _default;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from '@rsuite/icons/lib/Icon';
3
3
  import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
4
- export interface NavItemProps<T = string> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
4
+ export interface NavbarItemProps<T = string> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
5
5
  /** Activation status */
6
6
  active?: boolean;
7
7
  /** Disabled status */
@@ -15,5 +15,8 @@ export interface NavItemProps<T = string> extends WithAsProps, Omit<React.HTMLAt
15
15
  /** Select the callback function that the event triggers. */
16
16
  onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
17
17
  }
18
- declare const NavbarItem: RsRefForwardingComponent<'a', NavItemProps>;
18
+ /**
19
+ * @private
20
+ */
21
+ declare const NavbarItem: RsRefForwardingComponent<'a', NavbarItemProps>;
19
22
  export default NavbarItem;
@@ -25,6 +25,9 @@ var _utils = require("../utils");
25
25
 
26
26
  var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
27
27
 
28
+ /**
29
+ * @private
30
+ */
28
31
  var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
32
  var _props$as = props.as,
30
33
  Component = _props$as === void 0 ? _SafeAnchor.default : _props$as,
@@ -41,9 +44,9 @@ var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
41
44
  onSelectProp = props.onSelect,
42
45
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "active", "disabled", "eventKey", "className", "classPrefix", "style", "children", "icon", "onClick", "onSelect"]);
43
46
 
44
- var _useContext = (0, _react.useContext)(_NavContext.default),
45
- activeKey = _useContext.activeKey,
46
- onSelectFromNav = _useContext.onSelect;
47
+ var _ref = (0, _react.useContext)(_NavContext.default),
48
+ activeKey = _ref.activeKey,
49
+ onSelectFromNav = _ref.onSelect;
47
50
 
48
51
  var active = activeProp !== null && activeProp !== void 0 ? activeProp : !(0, _isNil.default)(eventKey) && (0, _utils.shallowEqual)(eventKey, activeKey);
49
52
  var emitSelect = (0, _react.useCallback)(function (event) {
@@ -52,6 +55,7 @@ var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
52
55
  }, [eventKey, onSelectProp, onSelectFromNav]);
53
56
 
54
57
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
58
+ prefix = _useClassNames.prefix,
55
59
  withClassPrefix = _useClassNames.withClassPrefix,
56
60
  merge = _useClassNames.merge;
57
61
 
@@ -72,7 +76,9 @@ var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
72
76
  className: classes,
73
77
  onClick: handleClick,
74
78
  style: style
75
- }), icon, children, /*#__PURE__*/_react.default.createElement(_Ripple.default, null));
79
+ }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
80
+ className: prefix('icon')
81
+ }), children, /*#__PURE__*/_react.default.createElement(_Ripple.default, null));
76
82
  });
77
83
 
78
84
  NavbarItem.displayName = 'Navbar.Item';
@@ -21,8 +21,6 @@ var _kebabCase = _interopRequireDefault(require("lodash/kebabCase"));
21
21
 
22
22
  var _trim = _interopRequireDefault(require("lodash/trim"));
23
23
 
24
- var _isNil = _interopRequireDefault(require("lodash/isNil"));
25
-
26
24
  var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
27
25
 
28
26
  var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
@@ -202,20 +200,29 @@ var useFocusItemValue = function useFocusItemValue(defaultFocusItemValue, props)
202
200
  return [];
203
201
  }
204
202
 
205
- var menu = (0, _isFunction.default)(target) ? target() : target;
206
203
  var currentKeys = keys;
207
204
 
208
- if (currentKeys.length === 0 && !(0, _isNil.default)(menu)) {
209
- currentKeys = Array.from(menu.querySelectorAll(focusableQueryKey)).map(function (item) {
210
- var _item$dataset;
205
+ if (layer < 1) {
206
+ var popup = (0, _isFunction.default)(target) ? target() : target;
207
+ var rootMenu = popup === null || popup === void 0 ? void 0 : popup.querySelector('[data-layer="0"]');
211
208
 
212
- return (_item$dataset = item.dataset) === null || _item$dataset === void 0 ? void 0 : _item$dataset.key;
213
- });
214
- setKeys(currentKeys);
215
- }
209
+ if (rootMenu) {
210
+ var _rootMenu$querySelect;
216
211
 
217
- if (currentKeys.length === 0) {
218
- return [];
212
+ currentKeys = Array.from((_rootMenu$querySelect = rootMenu.querySelectorAll(focusableQueryKey)) !== null && _rootMenu$querySelect !== void 0 ? _rootMenu$querySelect : []).map(function (item) {
213
+ var _item$dataset;
214
+
215
+ return (_item$dataset = item.dataset) === null || _item$dataset === void 0 ? void 0 : _item$dataset.key;
216
+ });
217
+ } else {
218
+ var _popup$querySelectorA;
219
+
220
+ currentKeys = Array.from((_popup$querySelectorA = popup === null || popup === void 0 ? void 0 : popup.querySelectorAll(focusableQueryKey)) !== null && _popup$querySelectorA !== void 0 ? _popup$querySelectorA : []).map(function (item) {
221
+ var _item$dataset2;
222
+
223
+ return (_item$dataset2 = item.dataset) === null || _item$dataset2 === void 0 ? void 0 : _item$dataset2.key;
224
+ });
225
+ }
219
226
  } // 1. It is necessary to traverse the `keys` instead of `data` here to preserve the order of the array.
220
227
  // 2. The values ​​in `keys` are all string, so the corresponding value of `data` should also be converted to string
221
228
 
@@ -225,7 +232,7 @@ var useFocusItemValue = function useFocusItemValue(defaultFocusItemValue, props)
225
232
  return "" + i[valueKey] === key;
226
233
  });
227
234
  });
228
- }, [data, focusableQueryKey, keys, target, valueKey]);
235
+ }, [data, focusableQueryKey, keys, target, valueKey, layer]);
229
236
  /**
230
237
  * Get the index of the focus item.
231
238
  */
@@ -274,9 +281,9 @@ var useFocusItemValue = function useFocusItemValue(defaultFocusItemValue, props)
274
281
  var _Array$from;
275
282
 
276
283
  return (_Array$from = Array.from(subMenu.querySelectorAll(focusableQueryKey))) === null || _Array$from === void 0 ? void 0 : _Array$from.map(function (item) {
277
- var _item$dataset2;
284
+ var _item$dataset3;
278
285
 
279
- return (_item$dataset2 = item.dataset) === null || _item$dataset2 === void 0 ? void 0 : _item$dataset2.key;
286
+ return (_item$dataset3 = item.dataset) === null || _item$dataset3 === void 0 ? void 0 : _item$dataset3.key;
280
287
  });
281
288
  }
282
289
 
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
+ import { IconProps } from '@rsuite/icons/lib/Icon';
4
+ export interface SidenavDropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
5
+ /** Define the title as a submenu */
6
+ title?: React.ReactNode;
7
+ /** Set the icon */
8
+ icon?: React.ReactElement<IconProps>;
9
+ /** The placement of Menu */
10
+ placement?: TypeAttributes.Placement8;
11
+ /** Whether or not component is disabled */
12
+ disabled?: boolean;
13
+ /** The style of the menu */
14
+ menuStyle?: React.CSSProperties;
15
+ /** A css class to apply to the Toggle DOM node */
16
+ toggleClassName?: string;
17
+ /** The value of the current option */
18
+ eventKey?: T;
19
+ /** You can use a custom element type for this toggle component */
20
+ toggleAs?: React.ElementType;
21
+ /** No caret variation */
22
+ noCaret?: boolean;
23
+ /**
24
+ * Open the menu and control it
25
+ * @deprecated
26
+ */
27
+ open?: boolean;
28
+ /**
29
+ * Custom title
30
+ * @deprecated Use `renderToggle` instead.
31
+ */
32
+ renderTitle?: (children?: React.ReactNode) => React.ReactNode;
33
+ /** Custom Toggle */
34
+ renderToggle?: (props: WithAsProps, ref: React.Ref<any>) => any;
35
+ /** The callback function that the menu closes */
36
+ onClose?: () => void;
37
+ /** Menu Pop-up callback function */
38
+ onOpen?: () => void;
39
+ /** Callback function for menu state switching */
40
+ onToggle?: (open: boolean) => void;
41
+ }
42
+ declare const ExpandedSidenavDropdown: RsRefForwardingComponent<'li', SidenavDropdownProps>;
43
+ export default ExpandedSidenavDropdown;
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ exports.__esModule = true;
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _kebabCase = _interopRequireDefault(require("lodash/kebabCase"));
19
+
20
+ var _omit = _interopRequireDefault(require("lodash/omit"));
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var _Sidenav = require("./Sidenav");
25
+
26
+ var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
27
+
28
+ var _SidenavDropdownCollapse = _interopRequireDefault(require("./SidenavDropdownCollapse"));
29
+
30
+ var _Disclosure = _interopRequireDefault(require("../Disclosure/Disclosure"));
31
+
32
+ var _useInternalId = _interopRequireDefault(require("../utils/useInternalId"));
33
+
34
+ var _SidenavDropdownToggle = _interopRequireDefault(require("./SidenavDropdownToggle"));
35
+
36
+ var _NavMenu = require("../Nav/NavMenu");
37
+
38
+ var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
39
+
40
+ var ExpandedSidenavDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
41
+ var sidenav = (0, _react.useContext)(_Sidenav.SidenavContext);
42
+ var nav = (0, _react.useContext)(_NavContext.default);
43
+ var navMenu = (0, _react.useContext)(_NavMenu.NavMenuContext);
44
+
45
+ if (!sidenav || !nav || !navMenu) {
46
+ throw new Error('<SidenavDropdown> component is not supposed to be used standalone. Use <Nav.Menu> inside <Sidenav> instead.');
47
+ }
48
+
49
+ var _props$as = props.as,
50
+ Component = _props$as === void 0 ? 'div' : _props$as,
51
+ title = props.title,
52
+ children = props.children,
53
+ className = props.className,
54
+ menuStyle = props.menuStyle,
55
+ disabled = props.disabled,
56
+ renderTitle = props.renderTitle,
57
+ renderToggle = props.renderToggle,
58
+ _props$classPrefix = props.classPrefix,
59
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown' : _props$classPrefix,
60
+ _props$placement = props.placement,
61
+ placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
62
+ toggleClassName = props.toggleClassName,
63
+ icon = props.icon,
64
+ eventKey = props.eventKey,
65
+ toggleAs = props.toggleAs,
66
+ noCaret = props.noCaret,
67
+ style = props.style,
68
+ onOpen = props.onOpen,
69
+ onClose = props.onClose,
70
+ openProp = props.open,
71
+ onToggle = props.onToggle,
72
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "title", "children", "className", "menuStyle", "disabled", "renderTitle", "renderToggle", "classPrefix", "placement", "toggleClassName", "icon", "eventKey", "toggleAs", "noCaret", "style", "onOpen", "onClose", "open", "onToggle"]);
73
+
74
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
75
+ merge = _useClassNames.merge,
76
+ withClassPrefix = _useClassNames.withClassPrefix;
77
+
78
+ var internalId = (0, _useInternalId.default)('SidenavDropdown');
79
+ var uniqueKey = eventKey !== null && eventKey !== void 0 ? eventKey : internalId;
80
+ var _sidenav$openKeys = sidenav.openKeys,
81
+ openKeys = _sidenav$openKeys === void 0 ? [] : _sidenav$openKeys,
82
+ onOpenChange = sidenav.onOpenChange;
83
+ var items = navMenu[0].items;
84
+ var hasSelectedItems = // has items that is active indicated by <Nav activeKey>
85
+ nav.activeKey && items.some(function (item) {
86
+ return item.eventKey === nav.activeKey;
87
+ }) || // has items that is active indicated by <Nav.Item active>
88
+ items.some(function (item) {
89
+ return item.active;
90
+ });
91
+ var handleToggleDisclosure = (0, _react.useCallback)(function (open, event) {
92
+ if (open) {
93
+ onClose === null || onClose === void 0 ? void 0 : onClose();
94
+ } else {
95
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
96
+ }
97
+
98
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(open);
99
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(uniqueKey, event);
100
+ }, [onClose, onOpen, onToggle, uniqueKey, onOpenChange]);
101
+ var open = openProp !== null && openProp !== void 0 ? openProp : openKeys.includes(uniqueKey);
102
+ return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
103
+ open: open,
104
+ onToggle: handleToggleDisclosure
105
+ }, function (_ref, containerRef) {
106
+ var _withClassPrefix;
107
+
108
+ var open = _ref.open;
109
+ var classes = merge(className, withClassPrefix((_withClassPrefix = {}, _withClassPrefix["placement-" + (0, _kebabCase.default)((0, _utils.placementPolyfill)(placement))] = placement, _withClassPrefix[open ? 'expand' : 'collapse'] = true, _withClassPrefix.disabled = disabled, _withClassPrefix['selected-within'] = hasSelectedItems, _withClassPrefix['no-caret'] = noCaret, _withClassPrefix)));
110
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
111
+ ref: (0, _utils.mergeRefs)(ref, containerRef),
112
+ style: style,
113
+ className: classes
114
+ }, rest, {
115
+ "data-event-key": eventKey
116
+ }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (buttonProps, buttonRef) {
117
+ return /*#__PURE__*/_react.default.createElement(_SidenavDropdownToggle.default, (0, _extends2.default)({
118
+ ref: buttonRef,
119
+ as: toggleAs,
120
+ noCaret: noCaret,
121
+ className: toggleClassName,
122
+ renderToggle: renderToggle,
123
+ icon: icon,
124
+ placement: placement
125
+ }, (0, _omit.default)(buttonProps, ['open'])), title);
126
+ }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Content, null, function (_ref2) {
127
+ var open = _ref2.open;
128
+ return /*#__PURE__*/_react.default.createElement(_SidenavDropdownCollapse.default, {
129
+ open: open,
130
+ style: menuStyle
131
+ }, children);
132
+ }));
133
+ });
134
+ });
135
+
136
+ ExpandedSidenavDropdown.displayName = 'Sidenav.Dropdown';
137
+ ExpandedSidenavDropdown.propTypes = {
138
+ activeKey: _propTypes.default.any,
139
+ classPrefix: _propTypes.default.string,
140
+ placement: _propTypes.default.oneOf(_utils.PLACEMENT_8),
141
+ title: _propTypes.default.node,
142
+ disabled: _propTypes.default.bool,
143
+ icon: _propTypes.default.node,
144
+ menuStyle: _propTypes.default.object,
145
+ className: _propTypes.default.string,
146
+ toggleClassName: _propTypes.default.string,
147
+ children: _propTypes.default.node,
148
+ tabIndex: _propTypes.default.number,
149
+ open: (0, _deprecatePropType.default)(_propTypes.default.bool),
150
+ eventKey: _propTypes.default.any,
151
+ as: _propTypes.default.elementType,
152
+ toggleAs: _propTypes.default.elementType,
153
+ noCaret: _propTypes.default.bool,
154
+ style: _propTypes.default.object,
155
+ onClose: _propTypes.default.func,
156
+ onOpen: _propTypes.default.func,
157
+ onToggle: _propTypes.default.func,
158
+ onMouseEnter: _propTypes.default.func,
159
+ onMouseLeave: _propTypes.default.func,
160
+ onContextMenu: _propTypes.default.func,
161
+ onClick: _propTypes.default.func,
162
+ renderTitle: (0, _deprecatePropType.default)(_propTypes.default.func),
163
+ renderToggle: _propTypes.default.func
164
+ };
165
+ var _default = ExpandedSidenavDropdown;
166
+ exports.default = _default;
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
3
+ import { IconProps } from '@rsuite/icons/lib/Icon';
4
+ export interface SidenavDropdownItemProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
5
+ /** Active the current option */
6
+ active?: boolean;
7
+ /** Primary content */
8
+ children?: React.ReactNode;
9
+ /** You can use a custom element for this component */
10
+ as?: React.ElementType;
11
+ /** Whether to display the divider */
12
+ divider?: boolean;
13
+ /** Disable the current option */
14
+ disabled?: boolean;
15
+ /** The value of the current option */
16
+ eventKey?: T;
17
+ /** Displays a custom panel */
18
+ panel?: boolean;
19
+ /** Set the icon */
20
+ icon?: React.ReactElement<IconProps>;
21
+ /** Whether the submenu is expanded, used in Sidenav. */
22
+ expanded?: boolean;
23
+ /** Select the callback function for the current option */
24
+ onSelect?: (eventKey: T, event: React.SyntheticEvent) => void;
25
+ }
26
+ /**
27
+ * Tree View Node
28
+ * @see https://www.w3.org/TR/wai-aria-practices-1.2/#TreeView
29
+ */
30
+ declare const ExpandedSidenavDropdownItem: RsRefForwardingComponent<'li', SidenavDropdownItemProps>;
31
+ export default ExpandedSidenavDropdownItem;