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,193 @@
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 _omit = _interopRequireDefault(require("lodash/omit"));
19
+
20
+ var _pick = _interopRequireDefault(require("lodash/pick"));
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
25
+
26
+ var _DropdownState = require("../Dropdown/DropdownState");
27
+
28
+ var _Menu = _interopRequireDefault(require("../Menu/Menu"));
29
+
30
+ var _kebabCase = _interopRequireDefault(require("lodash/kebabCase"));
31
+
32
+ var _NavContext = _interopRequireDefault(require("./NavContext"));
33
+
34
+ var _NavDropdownItem = _interopRequireDefault(require("./NavDropdownItem"));
35
+
36
+ var _NavDropdownMenu = _interopRequireDefault(require("./NavDropdownMenu"));
37
+
38
+ var _NavDropdownToggle = _interopRequireDefault(require("./NavDropdownToggle"));
39
+
40
+ /**
41
+ * @private this component is not supposed to be used directly
42
+ * Instead it's rendered by a <Nav.Menu> call
43
+ *
44
+ * <Nav>
45
+ * <Nav.Menu> -> This will render <NavDropdown> component
46
+ * </Nav.Menu>
47
+ * </Nav>
48
+ */
49
+ var NavDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
50
+ var nav = (0, _react.useContext)(_NavContext.default);
51
+
52
+ if (!nav) {
53
+ throw new Error('<Nav.Dropdown> must be rendered within a <Nav> component.');
54
+ }
55
+
56
+ var _props$as = props.as,
57
+ Component = _props$as === void 0 ? 'div' : _props$as,
58
+ title = props.title,
59
+ onClose = props.onClose,
60
+ onOpen = props.onOpen,
61
+ onToggle = props.onToggle,
62
+ eventKey = props.eventKey,
63
+ _props$trigger = props.trigger,
64
+ trigger = _props$trigger === void 0 ? 'click' : _props$trigger,
65
+ _props$placement = props.placement,
66
+ placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
67
+ toggleAs = props.toggleAs,
68
+ toggleClassName = props.toggleClassName,
69
+ _props$classPrefix = props.classPrefix,
70
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown' : _props$classPrefix,
71
+ className = props.className,
72
+ disabled = props.disabled,
73
+ children = props.children,
74
+ menuStyle = props.menuStyle,
75
+ style = props.style,
76
+ toggleProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "title", "onClose", "onOpen", "onToggle", "eventKey", "trigger", "placement", "toggleAs", "toggleClassName", "classPrefix", "className", "disabled", "children", "menuStyle", "style"]);
77
+
78
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
79
+ merge = _useClassNames.merge,
80
+ withClassPrefix = _useClassNames.withClassPrefix;
81
+
82
+ var _useClassNames2 = (0, _utils.useClassNames)('dropdown-menu'),
83
+ withMenuClassPrefix = _useClassNames2.withClassPrefix,
84
+ mergeMenuClassName = _useClassNames2.merge;
85
+
86
+ var menuButtonTriggers = (0, _react.useMemo)(function () {
87
+ if (!trigger) {
88
+ return undefined;
89
+ }
90
+
91
+ var triggerMap = {
92
+ hover: 'mouseover',
93
+ click: 'click',
94
+ contextMenu: 'contextmenu'
95
+ };
96
+
97
+ if (!Array.isArray(trigger)) {
98
+ return [triggerMap[trigger]];
99
+ }
100
+
101
+ return trigger.map(function (t) {
102
+ return triggerMap[t];
103
+ });
104
+ }, [trigger]);
105
+
106
+ var _useReducer = (0, _react.useReducer)(_DropdownState.reducer, _DropdownState.initialState),
107
+ items = _useReducer[0].items;
108
+
109
+ var hasSelectedItem = (0, _react.useMemo)(function () {
110
+ return items.some(function (item) {
111
+ return item.props.selected;
112
+ });
113
+ }, [items]);
114
+
115
+ var renderMenuButton = function renderMenuButton(menuButtonProps, menuButtonRef) {
116
+ return /*#__PURE__*/_react.default.createElement(_NavDropdownToggle.default, (0, _extends2.default)({
117
+ ref: menuButtonRef,
118
+ as: toggleAs,
119
+ className: toggleClassName,
120
+ placement: placement,
121
+ disabled: disabled
122
+ }, (0, _omit.default)(menuButtonProps, ['open']), (0, _omit.default)(toggleProps, ['data-testid'])), title);
123
+ };
124
+
125
+ return /*#__PURE__*/_react.default.createElement(_Menu.default, {
126
+ renderMenuButton: renderMenuButton,
127
+ openMenuOn: menuButtonTriggers,
128
+ renderMenuPopup: function renderMenuPopup(_ref, popupRef) {
129
+ var open = _ref.open,
130
+ popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
131
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
132
+ return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
133
+ ref: popupRef,
134
+ className: menuClassName,
135
+ style: menuStyle,
136
+ hidden: !open
137
+ }, popupProps), children);
138
+ },
139
+ onToggleMenu: function onToggleMenu(open, event) {
140
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(open, eventKey, event);
141
+
142
+ if (open) {
143
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
144
+ } else {
145
+ onClose === null || onClose === void 0 ? void 0 : onClose();
146
+ }
147
+ }
148
+ }, function (_ref2, menuContainerRef) {
149
+ var _withClassPrefix;
150
+
151
+ var open = _ref2.open,
152
+ menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
153
+ var classes = merge(className, withClassPrefix((_withClassPrefix = {}, _withClassPrefix["placement-" + (0, _kebabCase.default)((0, _utils.placementPolyfill)(placement))] = !!placement, _withClassPrefix.disabled = disabled, _withClassPrefix.open = open, _withClassPrefix['selected-within'] = hasSelectedItem, _withClassPrefix)));
154
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
155
+ ref: (0, _utils.mergeRefs)(ref, menuContainerRef),
156
+ className: classes
157
+ }, menuContainer, (0, _pick.default)(toggleProps, ['data-testid']), {
158
+ style: style
159
+ }));
160
+ });
161
+ });
162
+
163
+ NavDropdown.Item = _NavDropdownItem.default;
164
+ NavDropdown.Menu = _NavDropdownMenu.default;
165
+ NavDropdown.displayName = 'Nav.Dropdown';
166
+ NavDropdown.propTypes = {
167
+ classPrefix: _propTypes.default.string,
168
+ trigger: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.oneOf(['click', 'hover', 'contextMenu'])]),
169
+ placement: _propTypes.default.oneOf(_utils.PLACEMENT_8),
170
+ title: _propTypes.default.node,
171
+ disabled: _propTypes.default.bool,
172
+ icon: _propTypes.default.node,
173
+ menuStyle: _propTypes.default.object,
174
+ className: _propTypes.default.string,
175
+ toggleClassName: _propTypes.default.string,
176
+ children: _propTypes.default.node,
177
+ open: (0, _deprecatePropType.default)(_propTypes.default.bool),
178
+ eventKey: _propTypes.default.any,
179
+ as: _propTypes.default.elementType,
180
+ toggleAs: _propTypes.default.elementType,
181
+ noCaret: _propTypes.default.bool,
182
+ style: _propTypes.default.object,
183
+ onClose: _propTypes.default.func,
184
+ onOpen: _propTypes.default.func,
185
+ onToggle: _propTypes.default.func,
186
+ onMouseEnter: _propTypes.default.func,
187
+ onMouseLeave: _propTypes.default.func,
188
+ onContextMenu: _propTypes.default.func,
189
+ onClick: _propTypes.default.func,
190
+ renderToggle: _propTypes.default.func
191
+ };
192
+ var _default = NavDropdown;
193
+ exports.default = _default;
@@ -0,0 +1,39 @@
1
+ import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
2
+ import React from 'react';
3
+ import { IconProps } from '@rsuite/icons/lib/Icon';
4
+ export interface NavDropdownItemProps<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
+ /**
22
+ * The sub-level menu appears from the right side by default, and when `pullLeft` is set, it appears from the left.
23
+ * @deprecated Submenus are now pointing the same direction.
24
+ */
25
+ pullLeft?: boolean;
26
+ /**
27
+ * Whether the submenu is opened.
28
+ * @deprecated
29
+ * @internal
30
+ */
31
+ open?: boolean;
32
+ /** Select the callback function for the current option */
33
+ onSelect?: (eventKey: T, event: React.SyntheticEvent) => void;
34
+ }
35
+ /**
36
+ * @private
37
+ */
38
+ declare const NavDropdownItem: RsRefForwardingComponent<'li', NavDropdownItemProps>;
39
+ export default NavDropdownItem;
@@ -0,0 +1,141 @@
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 _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
19
+
20
+ var _MenuItem = _interopRequireDefault(require("../Menu/MenuItem"));
21
+
22
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
23
+
24
+ var _utils = require("../utils");
25
+
26
+ var _NavContext = _interopRequireDefault(require("./NavContext"));
27
+
28
+ var _useRenderDropdownItem = require("../Dropdown/useRenderDropdownItem");
29
+
30
+ /**
31
+ * @private
32
+ */
33
+ var NavDropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
34
+ var nav = (0, _react.useContext)(_NavContext.default);
35
+
36
+ if (!nav) {
37
+ throw new Error('<Nav.Dropdown.Item> should be used within a <Nav> component.');
38
+ }
39
+
40
+ var _props$classPrefix = props.classPrefix,
41
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-item' : _props$classPrefix,
42
+ className = props.className,
43
+ activeProp = props.active,
44
+ eventKey = props.eventKey,
45
+ onSelect = props.onSelect,
46
+ icon = props.icon,
47
+ _props$as = props.as,
48
+ Component = _props$as === void 0 ? 'li' : _props$as,
49
+ divider = props.divider,
50
+ panel = props.panel,
51
+ children = props.children,
52
+ disabled = props.disabled,
53
+ restProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["classPrefix", "className", "active", "eventKey", "onSelect", "icon", "as", "divider", "panel", "children", "disabled"]);
54
+ var activeKey = nav.activeKey,
55
+ onSelectFromNav = nav.onSelect;
56
+
57
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
58
+ merge = _useClassNames.merge,
59
+ withClassPrefix = _useClassNames.withClassPrefix,
60
+ prefix = _useClassNames.prefix;
61
+
62
+ var selected = activeProp || !(0, _isNil.default)(eventKey) && (0, _utils.shallowEqual)(activeKey, eventKey);
63
+ var handleSelectItem = (0, _react.useCallback)(function (event) {
64
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(eventKey, event);
65
+ onSelectFromNav === null || onSelectFromNav === void 0 ? void 0 : onSelectFromNav(eventKey, event);
66
+ }, [onSelect, eventKey, onSelectFromNav]);
67
+ var renderDropdownItem = (0, _useRenderDropdownItem.useRenderDropdownItem)(Component);
68
+
69
+ if (divider) {
70
+ return renderDropdownItem((0, _extends2.default)({
71
+ ref: ref,
72
+ role: 'separator',
73
+ className: merge(prefix('divider'), className)
74
+ }, restProps));
75
+ }
76
+
77
+ if (panel) {
78
+ return renderDropdownItem((0, _extends2.default)({
79
+ ref: ref,
80
+ className: merge(prefix('panel'), className),
81
+ children: children
82
+ }, restProps));
83
+ }
84
+
85
+ return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
86
+ selected: selected,
87
+ disabled: disabled,
88
+ onActivate: handleSelectItem
89
+ }, function (_ref, menuitemRef) {
90
+ var selected = _ref.selected,
91
+ active = _ref.active,
92
+ menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["selected", "active"]);
93
+ var classes = merge(className, withClassPrefix({
94
+ 'with-icon': icon,
95
+ active: selected,
96
+ disabled: disabled,
97
+ focus: active,
98
+ divider: divider,
99
+ panel: panel
100
+ }));
101
+ var dataAttributes = {
102
+ 'data-event-key': eventKey
103
+ };
104
+
105
+ if (!(0, _isNil.default)(eventKey) && typeof eventKey !== 'string') {
106
+ dataAttributes['data-event-key-type'] = typeof eventKey;
107
+ }
108
+
109
+ return renderDropdownItem((0, _extends2.default)({
110
+ ref: (0, _utils.mergeRefs)(ref, menuitemRef),
111
+ className: classes
112
+ }, menuitem, dataAttributes, restProps, {
113
+ children: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, icon && /*#__PURE__*/_react.default.cloneElement(icon, {
114
+ className: prefix('menu-icon')
115
+ }), children)
116
+ }));
117
+ });
118
+ });
119
+
120
+ NavDropdownItem.displayName = 'Nav.Dropdown.Item';
121
+ NavDropdownItem.propTypes = {
122
+ as: _propTypes.default.elementType,
123
+ divider: _propTypes.default.bool,
124
+ panel: _propTypes.default.bool,
125
+ trigger: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.oneOf(['click', 'hover'])]),
126
+ open: (0, _deprecatePropType.default)(_propTypes.default.bool),
127
+ active: _propTypes.default.bool,
128
+ disabled: _propTypes.default.bool,
129
+ pullLeft: (0, _deprecatePropType.default)(_propTypes.default.bool),
130
+ onSelect: _propTypes.default.func,
131
+ onClick: _propTypes.default.func,
132
+ icon: _propTypes.default.node,
133
+ eventKey: _propTypes.default.any,
134
+ className: _propTypes.default.string,
135
+ style: _propTypes.default.object,
136
+ children: _propTypes.default.node,
137
+ classPrefix: _propTypes.default.string,
138
+ tabIndex: _propTypes.default.number
139
+ };
140
+ var _default = NavDropdownItem;
141
+ exports.default = _default;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { StandardProps } from '../@types/common';
3
+ import { IconProps } from '@rsuite/icons/lib/Icon';
4
+ export interface NavDropdownMenuProps<T = any> extends StandardProps {
5
+ /** Define the title as a submenu */
6
+ title?: React.ReactNode;
7
+ /** The submenu expands from the left and defaults to the right */
8
+ pullLeft?: boolean;
9
+ /**
10
+ * Only used for setting the default expand state when it's a submenu.
11
+ */
12
+ eventKey?: T;
13
+ /** Set the icon */
14
+ icon?: React.ReactElement<IconProps>;
15
+ open?: boolean;
16
+ collapsible?: boolean;
17
+ expanded?: boolean;
18
+ active?: boolean;
19
+ disabled?: boolean;
20
+ onToggle?: (open: boolean, eventKey?: T | undefined, event?: React.SyntheticEvent) => void;
21
+ }
22
+ /**
23
+ * @private
24
+ */
25
+ declare const NavDropdownMenu: React.ForwardRefExoticComponent<NavDropdownMenuProps<any> & Omit<React.HTMLAttributes<HTMLUListElement>, "title" | "onSelect"> & React.RefAttributes<HTMLElement>>;
26
+ export default NavDropdownMenu;
@@ -0,0 +1,156 @@
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 _Menu = _interopRequireDefault(require("../Menu/Menu"));
21
+
22
+ var _MenuItem = _interopRequireDefault(require("../Menu/MenuItem"));
23
+
24
+ var _utils = require("../utils");
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _AngleLeft = _interopRequireDefault(require("@rsuite/icons/legacy/AngleLeft"));
29
+
30
+ var _AngleRight = _interopRequireDefault(require("@rsuite/icons/legacy/AngleRight"));
31
+
32
+ var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
33
+
34
+ var _NavContext = _interopRequireDefault(require("./NavContext"));
35
+
36
+ var _templateObject, _templateObject2;
37
+
38
+ /**
39
+ * @private
40
+ */
41
+ var NavDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
42
+ var nav = (0, _react.useContext)(_NavContext.default);
43
+
44
+ if (!nav) {
45
+ throw new Error('<Nav.Dropdown.Menu> should be used within a <Nav> component.');
46
+ }
47
+
48
+ var onToggle = props.onToggle,
49
+ eventKey = props.eventKey,
50
+ title = props.title,
51
+ _props$classPrefix = props.classPrefix,
52
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
53
+ children = props.children,
54
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children"]);
55
+
56
+ var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
57
+ rtl = _useCustom.rtl;
58
+
59
+ var handleToggleSubmenu = (0, _react.useCallback)(function (open, event) {
60
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(open, eventKey, event);
61
+ }, [eventKey, onToggle]);
62
+
63
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
64
+ prefix = _useClassNames.prefix;
65
+
66
+ var _useClassNames2 = (0, _utils.useClassNames)('dropdown-menu'),
67
+ withMenuClassPrefix = _useClassNames2.withClassPrefix,
68
+ mergeMenuClassName = _useClassNames2.merge;
69
+
70
+ var _useClassNames3 = (0, _utils.useClassNames)('dropdown-item'),
71
+ mergeItemClassNames = _useClassNames3.merge,
72
+ withItemClassPrefix = _useClassNames3.withClassPrefix,
73
+ prefixItemClassName = _useClassNames3.prefix; // Parent menu exists. This is a submenu.
74
+ // Should render a `menuitem` that controls this submenu.
75
+
76
+
77
+ var _omit = (0, _omit2.default)(rest, ['trigger']),
78
+ icon = _omit.icon,
79
+ className = _omit.className,
80
+ disabled = _omit.disabled,
81
+ menuProps = (0, _objectWithoutPropertiesLoose2.default)(_omit, ["icon", "className", "disabled"]);
82
+
83
+ var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
84
+ return /*#__PURE__*/_react.default.createElement(_Menu.default, {
85
+ openMenuOn: ['mouseover', 'click'],
86
+ renderMenuButton: function renderMenuButton(_ref, buttonRef) {
87
+ var open = _ref.open,
88
+ menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
89
+ return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
90
+ disabled: disabled
91
+ }, function (_ref2, menuitemRef) {
92
+ var selected = _ref2.selected,
93
+ active = _ref2.active,
94
+ menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["selected", "active"]);
95
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
96
+ 'with-icon': icon,
97
+ open: open,
98
+ active: selected,
99
+ disabled: disabled,
100
+ focus: active
101
+ }));
102
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
103
+ ref: (0, _utils.mergeRefs)(buttonRef, menuitemRef),
104
+ className: classes,
105
+ "data-event-key": eventKey,
106
+ "data-event-key-type": typeof eventKey
107
+ }, menuitem, (0, _omit2.default)(menuButtonProps, ['role'])), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
108
+ className: prefix('menu-icon')
109
+ }), title, /*#__PURE__*/_react.default.createElement(Icon, {
110
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
111
+ }));
112
+ });
113
+ },
114
+ renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
115
+ var open = _ref3.open,
116
+ popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["open"]);
117
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
118
+ return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
119
+ ref: popupRef,
120
+ className: menuClassName,
121
+ hidden: !open
122
+ }, popupProps, menuProps), children);
123
+ },
124
+ onToggleMenu: handleToggleSubmenu
125
+ }, function (_ref4, menuContainerRef) {
126
+ var open = _ref4.open,
127
+ menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
128
+ var classes = mergeItemClassNames(className, withItemClassPrefix({
129
+ disabled: disabled,
130
+ open: open,
131
+ submenu: true
132
+ }));
133
+ return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
134
+ ref: (0, _utils.mergeRefs)(ref, menuContainerRef),
135
+ className: classes
136
+ }, menuContainer));
137
+ });
138
+ });
139
+
140
+ NavDropdownMenu.displayName = 'Nav.Dropdown.Menu';
141
+ NavDropdownMenu.propTypes = {
142
+ active: _propTypes.default.bool,
143
+ className: _propTypes.default.string,
144
+ children: _propTypes.default.node,
145
+ icon: _propTypes.default.any,
146
+ classPrefix: _propTypes.default.string,
147
+ pullLeft: _propTypes.default.bool,
148
+ title: _propTypes.default.node,
149
+ open: _propTypes.default.bool,
150
+ eventKey: _propTypes.default.any,
151
+ expanded: _propTypes.default.bool,
152
+ collapsible: _propTypes.default.bool,
153
+ onToggle: _propTypes.default.func
154
+ };
155
+ var _default = NavDropdownMenu;
156
+ exports.default = _default;
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import Button from '../Button';
3
+ import { WithAsProps, RsRefForwardingComponent, TypeAttributes } from '../@types/common';
4
+ import { NavItemProps } from './NavItem';
5
+ export interface NavDropdownToggleProps extends WithAsProps {
6
+ icon?: NavItemProps['icon'];
7
+ noCaret?: boolean;
8
+ renderToggle?: (props: WithAsProps, ref: React.Ref<any>) => any;
9
+ placement?: TypeAttributes.Placement8;
10
+ }
11
+ /**
12
+ * @private this component is not supposed to be used directly
13
+ * Instead it's rendered by a <Nav.Menu> call
14
+ *
15
+ * <Nav>
16
+ * <Nav.Menu> -> This will render <NavDropdown> component that renders a <NavDropdownToggle>
17
+ * </Nav.Menu>
18
+ * </Nav>
19
+ */
20
+ declare const NavDropdownToggle: RsRefForwardingComponent<typeof Button, NavDropdownToggleProps>;
21
+ export default NavDropdownToggle;
@@ -0,0 +1,74 @@
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 _NavItem = _interopRequireDefault(require("./NavItem"));
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 NavDropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
32
+ var _props$as = props.as,
33
+ Component = _props$as === void 0 ? _NavItem.default : _props$as,
34
+ className = props.className,
35
+ _props$classPrefix = props.classPrefix,
36
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-toggle' : _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
+ withClassPrefix = _useClassNames.withClassPrefix,
44
+ merge = _useClassNames.merge;
45
+
46
+ var _useClassNames2 = (0, _utils.useClassNames)('nav-item'),
47
+ prefixNavItem = _useClassNames2.prefix;
48
+
49
+ var classes = merge(className, withClassPrefix({
50
+ 'no-caret': noCaret
51
+ }));
52
+
53
+ var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
54
+ ref: ref,
55
+ className: classes
56
+ }), children, !noCaret && /*#__PURE__*/_react.default.createElement(_ArrowDownLine.default, {
57
+ className: prefixNavItem('caret')
58
+ }));
59
+
60
+ return renderToggle ? renderToggle(rest, ref) : toggle;
61
+ });
62
+
63
+ NavDropdownToggle.displayName = 'Nav.Dropdown.Toggle';
64
+ NavDropdownToggle.propTypes = {
65
+ className: _propTypes.default.string,
66
+ children: _propTypes.default.node,
67
+ classPrefix: _propTypes.default.string,
68
+ noCaret: _propTypes.default.bool,
69
+ as: _propTypes.default.elementType,
70
+ renderToggle: _propTypes.default.func,
71
+ placement: _propTypes.default.oneOf(['bottomStart', 'bottomEnd', 'topStart', 'topEnd', 'leftStart', 'rightStart', 'leftEnd', 'rightEnd'])
72
+ };
73
+ var _default = NavDropdownToggle;
74
+ exports.default = _default;
@@ -21,6 +21,8 @@ export interface NavItemProps<T = string> extends WithAsProps, Omit<React.HTMLAt
21
21
  }
22
22
  /**
23
23
  * The <Nav.Item> API
24
+ * When used as direct child of <Nav>, render the NavItem
25
+ * When used within a <Nav.Menu>, render the NavDropdownItem
24
26
  */
25
27
  declare const NavItem: RsRefForwardingComponent<'a', NavItemProps>;
26
28
  export default NavItem;