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.
- package/CHANGELOG.md +10 -0
- package/Nav/styles/index.less +7 -1
- package/Navbar/styles/index.less +6 -1
- package/Sidenav/styles/index.less +7 -5
- package/cjs/Cascader/DropdownMenu.js +8 -3
- package/cjs/Disclosure/Disclosure.d.ts +1 -1
- package/cjs/Disclosure/DisclosureContext.d.ts +1 -1
- package/cjs/Dropdown/Dropdown.js +26 -110
- package/cjs/Dropdown/DropdownItem.js +14 -58
- package/cjs/Dropdown/DropdownMenu.js +32 -76
- package/cjs/Dropdown/DropdownToggle.js +4 -17
- package/cjs/Menu/Menu.d.ts +1 -0
- package/cjs/Menu/Menu.js +1 -0
- package/cjs/Menu/MenuItem.d.ts +1 -0
- package/cjs/Menu/MenuItem.js +1 -0
- package/cjs/Menu/Menubar.d.ts +3 -0
- package/cjs/Menu/Menubar.js +4 -0
- package/cjs/Nav/Nav.d.ts +7 -2
- package/cjs/Nav/Nav.js +105 -5
- package/cjs/Nav/NavContext.d.ts +2 -8
- package/cjs/Nav/NavContext.js +1 -7
- package/cjs/Nav/NavDropdown.d.ts +71 -0
- package/cjs/Nav/NavDropdown.js +193 -0
- package/cjs/Nav/NavDropdownItem.d.ts +39 -0
- package/cjs/Nav/NavDropdownItem.js +141 -0
- package/cjs/Nav/NavDropdownMenu.d.ts +26 -0
- package/cjs/Nav/NavDropdownMenu.js +156 -0
- package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
- package/cjs/Nav/NavDropdownToggle.js +74 -0
- package/cjs/Nav/NavItem.d.ts +2 -0
- package/cjs/Nav/NavItem.js +13 -26
- package/cjs/Nav/NavMenu.d.ts +38 -0
- package/cjs/Nav/NavMenu.js +122 -0
- package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
- package/cjs/Navbar/NavbarDropdown.js +147 -0
- package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
- package/cjs/Navbar/NavbarDropdownItem.js +149 -0
- package/cjs/Navbar/NavbarDropdownMenu.d.ts +37 -0
- package/cjs/Navbar/NavbarDropdownMenu.js +155 -0
- package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
- package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
- package/cjs/Navbar/NavbarItem.d.ts +5 -2
- package/cjs/Navbar/NavbarItem.js +10 -4
- package/cjs/Picker/utils.js +22 -15
- package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
- package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
- package/cjs/Sidenav/Sidenav.d.ts +8 -2
- package/cjs/Sidenav/Sidenav.js +1 -2
- package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
- package/cjs/Sidenav/SidenavDropdown.js +144 -73
- package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
- package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
- package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
- package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
- package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
- package/cjs/Sidenav/SidenavDropdownToggle.js +72 -0
- package/cjs/Sidenav/SidenavItem.d.ts +3 -0
- package/cjs/Sidenav/SidenavItem.js +22 -14
- package/cjs/utils/deprecateComponent.js +4 -6
- package/cjs/utils/deprecatePropType.d.ts +1 -5
- package/cjs/utils/deprecatePropType.js +7 -14
- package/cjs/utils/useInternalId.d.ts +1 -1
- package/cjs/utils/useInternalId.js +2 -2
- package/cjs/utils/warnOnce.d.ts +9 -0
- package/cjs/utils/warnOnce.js +22 -0
- package/dist/rsuite-rtl.css +18 -9
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +18 -9
- package/dist/rsuite.js +275 -22
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Cascader/DropdownMenu.js +8 -3
- package/esm/Disclosure/Disclosure.d.ts +1 -1
- package/esm/Disclosure/DisclosureContext.d.ts +1 -1
- package/esm/Dropdown/Dropdown.js +25 -105
- package/esm/Dropdown/DropdownItem.js +13 -55
- package/esm/Dropdown/DropdownMenu.js +31 -76
- package/esm/Dropdown/DropdownToggle.js +4 -14
- package/esm/Menu/Menu.d.ts +1 -0
- package/esm/Menu/Menu.js +1 -0
- package/esm/Menu/MenuItem.d.ts +1 -0
- package/esm/Menu/MenuItem.js +1 -0
- package/esm/Menu/Menubar.d.ts +3 -0
- package/esm/Menu/Menubar.js +4 -0
- package/esm/Nav/Nav.d.ts +7 -2
- package/esm/Nav/Nav.js +96 -5
- package/esm/Nav/NavContext.d.ts +2 -8
- package/esm/Nav/NavContext.js +1 -6
- package/esm/Nav/NavDropdown.d.ts +71 -0
- package/esm/Nav/NavDropdown.js +170 -0
- package/esm/Nav/NavDropdownItem.d.ts +39 -0
- package/esm/Nav/NavDropdownItem.js +123 -0
- package/esm/Nav/NavDropdownMenu.d.ts +26 -0
- package/esm/Nav/NavDropdownMenu.js +138 -0
- package/esm/Nav/NavDropdownToggle.d.ts +21 -0
- package/esm/Nav/NavDropdownToggle.js +57 -0
- package/esm/Nav/NavItem.d.ts +2 -0
- package/esm/Nav/NavItem.js +13 -21
- package/esm/Nav/NavMenu.d.ts +38 -0
- package/esm/Nav/NavMenu.js +98 -0
- package/esm/Navbar/NavbarDropdown.d.ts +57 -0
- package/esm/Navbar/NavbarDropdown.js +124 -0
- package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
- package/esm/Navbar/NavbarDropdownItem.js +128 -0
- package/esm/Navbar/NavbarDropdownMenu.d.ts +37 -0
- package/esm/Navbar/NavbarDropdownMenu.js +135 -0
- package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
- package/esm/Navbar/NavbarDropdownToggle.js +55 -0
- package/esm/Navbar/NavbarItem.d.ts +5 -2
- package/esm/Navbar/NavbarItem.js +11 -4
- package/esm/Picker/utils.js +22 -14
- package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
- package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
- package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
- package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
- package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
- package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
- package/esm/Sidenav/Sidenav.d.ts +8 -2
- package/esm/Sidenav/Sidenav.js +1 -2
- package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
- package/esm/Sidenav/SidenavDropdown.js +145 -75
- package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
- package/esm/Sidenav/SidenavDropdownItem.js +87 -71
- package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
- package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
- package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
- package/esm/Sidenav/SidenavDropdownToggle.js +55 -0
- package/esm/Sidenav/SidenavItem.d.ts +3 -0
- package/esm/Sidenav/SidenavItem.js +23 -15
- package/esm/utils/deprecateComponent.js +3 -4
- package/esm/utils/deprecatePropType.d.ts +1 -5
- package/esm/utils/deprecatePropType.js +3 -13
- package/esm/utils/useInternalId.d.ts +1 -1
- package/esm/utils/useInternalId.js +2 -2
- package/esm/utils/warnOnce.d.ts +9 -0
- package/esm/utils/warnOnce.js +18 -0
- package/package.json +1 -1
- package/styles/variables.less +1 -0
|
@@ -1,109 +1,180 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
import React, { useContext,
|
|
3
|
+
import React, { useContext, useMemo } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
-
import kebabCase from 'lodash/kebabCase';
|
|
6
5
|
import omit from 'lodash/omit';
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
6
|
+
import pick from 'lodash/pick';
|
|
7
|
+
import { mergeRefs, PLACEMENT_8, placementPolyfill, useClassNames } from '../utils';
|
|
9
8
|
import { SidenavContext } from './Sidenav';
|
|
10
9
|
import deprecatePropType from '../utils/deprecatePropType';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
10
|
+
import Menu from '../Menu/Menu';
|
|
11
|
+
import MenuItem from '../Menu/MenuItem';
|
|
12
|
+
import kebabCase from 'lodash/kebabCase';
|
|
13
|
+
import ExpandedSidenavDropdown from './ExpandedSidenavDropdown';
|
|
14
|
+
import NavContext from '../Nav/NavContext';
|
|
15
|
+
import NavDropdownItem from '../Nav/NavDropdownItem';
|
|
16
|
+
import NavDropdownMenu from '../Nav/NavDropdownMenu';
|
|
17
|
+
import SidenavDropdownToggle from './SidenavDropdownToggle';
|
|
18
|
+
import { NavMenuContext } from '../Nav/NavMenu';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @private this component is not supposed to be used directly
|
|
22
|
+
* Instead it's rendered by a <Nav.Menu> within a <Sidenav>
|
|
23
|
+
*
|
|
24
|
+
* <Sidenav>
|
|
25
|
+
* <Nav>
|
|
26
|
+
* <Nav.Menu> -> This submenu will render <SidenavDropdown> component
|
|
27
|
+
* </Nav.Menu>
|
|
28
|
+
* </Nav>
|
|
29
|
+
* </Sidenav>
|
|
30
|
+
*/
|
|
15
31
|
var SidenavDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
32
|
+
var sidenav = useContext(SidenavContext);
|
|
33
|
+
var nav = useContext(NavContext);
|
|
34
|
+
var navMenu = useContext(NavMenuContext);
|
|
35
|
+
|
|
36
|
+
if (!sidenav || !nav || !navMenu) {
|
|
37
|
+
throw new Error('<Sidenav.Dropdown> must be rendered within a <Nav> component within a <Sidenav> component.');
|
|
38
|
+
}
|
|
39
|
+
|
|
16
40
|
var _props$as = props.as,
|
|
17
41
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
18
42
|
title = props.title,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
_props$classPrefix = props.classPrefix,
|
|
26
|
-
classPrefix = _props$classPrefix === void 0 ? 'dropdown' : _props$classPrefix,
|
|
43
|
+
onClose = props.onClose,
|
|
44
|
+
onOpen = props.onOpen,
|
|
45
|
+
onToggle = props.onToggle,
|
|
46
|
+
eventKey = props.eventKey,
|
|
47
|
+
_props$trigger = props.trigger,
|
|
48
|
+
trigger = _props$trigger === void 0 ? 'click' : _props$trigger,
|
|
27
49
|
_props$placement = props.placement,
|
|
28
50
|
placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
|
|
29
|
-
toggleClassName = props.toggleClassName,
|
|
30
|
-
icon = props.icon,
|
|
31
|
-
eventKey = props.eventKey,
|
|
32
51
|
toggleAs = props.toggleAs,
|
|
33
|
-
|
|
52
|
+
toggleClassName = props.toggleClassName,
|
|
53
|
+
_props$classPrefix = props.classPrefix,
|
|
54
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown' : _props$classPrefix,
|
|
55
|
+
className = props.className,
|
|
56
|
+
disabled = props.disabled,
|
|
57
|
+
children = props.children,
|
|
58
|
+
menuStyle = props.menuStyle,
|
|
34
59
|
style = props.style,
|
|
35
|
-
|
|
36
|
-
onClose = props.onClose,
|
|
37
|
-
openProp = props.open,
|
|
38
|
-
onToggle = props.onToggle,
|
|
39
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "title", "children", "className", "menuStyle", "disabled", "renderTitle", "renderToggle", "classPrefix", "placement", "toggleClassName", "icon", "eventKey", "toggleAs", "noCaret", "style", "onOpen", "onClose", "open", "onToggle"]);
|
|
40
|
-
|
|
41
|
-
var sidenavContext = useContext(SidenavContext);
|
|
42
|
-
var dropdownContext = useContext(DropdownContext);
|
|
60
|
+
toggleProps = _objectWithoutPropertiesLoose(props, ["as", "title", "onClose", "onOpen", "onToggle", "eventKey", "trigger", "placement", "toggleAs", "toggleClassName", "classPrefix", "className", "disabled", "children", "menuStyle", "style"]);
|
|
43
61
|
|
|
44
62
|
var _useClassNames = useClassNames(classPrefix),
|
|
45
63
|
merge = _useClassNames.merge,
|
|
46
|
-
withClassPrefix = _useClassNames.withClassPrefix
|
|
64
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
65
|
+
prefix = _useClassNames.prefix;
|
|
47
66
|
|
|
48
|
-
var
|
|
49
|
-
|
|
67
|
+
var _useClassNames2 = useClassNames('dropdown-menu'),
|
|
68
|
+
withMenuClassPrefix = _useClassNames2.withClassPrefix,
|
|
69
|
+
mergeMenuClassName = _useClassNames2.merge;
|
|
50
70
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
71
|
+
var _useClassNames3 = useClassNames('nav-item'),
|
|
72
|
+
withNavItemClassPrefix = _useClassNames3.withClassPrefix,
|
|
73
|
+
mergeNavItemClassNames = _useClassNames3.merge;
|
|
74
|
+
|
|
75
|
+
var items = navMenu[0].items;
|
|
76
|
+
var hasSelectedItems = // has items that is active indicated by <Nav activeKey>
|
|
77
|
+
nav.activeKey && items.some(function (item) {
|
|
78
|
+
return item.eventKey === nav.activeKey;
|
|
79
|
+
}) || // has items that is active indicated by <Nav.Item active>
|
|
80
|
+
items.some(function (item) {
|
|
81
|
+
return item.active;
|
|
82
|
+
});
|
|
83
|
+
var menuButtonTriggers = useMemo(function () {
|
|
84
|
+
if (!trigger) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
var triggerMap = {
|
|
89
|
+
hover: 'mouseover',
|
|
90
|
+
click: 'click',
|
|
91
|
+
contextMenu: 'contextmenu'
|
|
92
|
+
};
|
|
54
93
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
onOpenChange = sidenavContext.onOpenChange;
|
|
58
|
-
var hasSelectedItem = dropdownContext.hasSelectedItem;
|
|
59
|
-
var handleToggleDisclosure = useCallback(function (open, event) {
|
|
60
|
-
if (open) {
|
|
61
|
-
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
62
|
-
} else {
|
|
63
|
-
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
94
|
+
if (!Array.isArray(trigger)) {
|
|
95
|
+
return [triggerMap[trigger]];
|
|
64
96
|
}
|
|
65
97
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
98
|
+
return trigger.map(function (t) {
|
|
99
|
+
return triggerMap[t];
|
|
100
|
+
});
|
|
101
|
+
}, [trigger]); // Render a disclosure when inside expanded <Sidenav>
|
|
102
|
+
|
|
103
|
+
if (sidenav.expanded) {
|
|
104
|
+
return /*#__PURE__*/React.createElement(ExpandedSidenavDropdown, _extends({
|
|
105
|
+
ref: ref
|
|
106
|
+
}, props));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var renderMenuButton = function renderMenuButton(menuButtonProps, buttonRef) {
|
|
110
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
111
|
+
disabled: disabled
|
|
112
|
+
}, function (_ref, menuitemRef) {
|
|
113
|
+
var active = _ref.active,
|
|
114
|
+
menuitemProps = _objectWithoutPropertiesLoose(_ref, ["active"]);
|
|
115
|
+
|
|
116
|
+
return /*#__PURE__*/React.createElement(SidenavDropdownToggle, _extends({
|
|
117
|
+
ref: mergeRefs(buttonRef, menuitemRef),
|
|
118
|
+
as: toggleAs,
|
|
119
|
+
className: mergeNavItemClassNames(toggleClassName, withNavItemClassPrefix({
|
|
120
|
+
focus: active
|
|
121
|
+
}))
|
|
122
|
+
}, menuButtonProps, omit(menuitemProps, ['onClick']), omit(toggleProps, 'data-testid')), title);
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
127
|
+
menuButtonText: title,
|
|
128
|
+
renderMenuButton: renderMenuButton,
|
|
129
|
+
openMenuOn: menuButtonTriggers,
|
|
130
|
+
renderMenuPopup: function renderMenuPopup(_ref2, popupRef) {
|
|
131
|
+
var open = _ref2.open,
|
|
132
|
+
popupProps = _objectWithoutPropertiesLoose(_ref2, ["open"]);
|
|
133
|
+
|
|
134
|
+
var menuClassName = mergeMenuClassName(className, withMenuClassPrefix({})); // When inside a collapsed <Sidenav>, render a header in menu
|
|
135
|
+
|
|
136
|
+
var showHeader = !!sidenav;
|
|
137
|
+
return /*#__PURE__*/React.createElement("ul", _extends({
|
|
138
|
+
ref: popupRef,
|
|
139
|
+
className: menuClassName,
|
|
140
|
+
style: menuStyle,
|
|
141
|
+
hidden: !open
|
|
142
|
+
}, popupProps), showHeader && /*#__PURE__*/React.createElement("div", {
|
|
143
|
+
className: prefix('header')
|
|
144
|
+
}, title), children);
|
|
145
|
+
},
|
|
146
|
+
onToggleMenu: function onToggleMenu(open, event) {
|
|
147
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle(open, eventKey, event);
|
|
148
|
+
sidenav === null || sidenav === void 0 ? void 0 : sidenav.onOpenChange(eventKey, event);
|
|
149
|
+
|
|
150
|
+
if (open) {
|
|
151
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
152
|
+
} else {
|
|
153
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}, function (_ref3, menuContainerRef) {
|
|
74
157
|
var _withClassPrefix;
|
|
75
158
|
|
|
76
|
-
var open =
|
|
77
|
-
|
|
159
|
+
var open = _ref3.open,
|
|
160
|
+
menuContainer = _objectWithoutPropertiesLoose(_ref3, ["open"]);
|
|
161
|
+
|
|
162
|
+
var classes = merge(className, withClassPrefix((_withClassPrefix = {}, _withClassPrefix["placement-" + kebabCase(placementPolyfill(placement))] = !!placement, _withClassPrefix.disabled = disabled, _withClassPrefix.open = open, _withClassPrefix.submenu = true, _withClassPrefix['selected-within'] = hasSelectedItems, _withClassPrefix)));
|
|
78
163
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
79
|
-
ref: mergeRefs(ref,
|
|
80
|
-
style: style,
|
|
164
|
+
ref: mergeRefs(ref, menuContainerRef),
|
|
81
165
|
className: classes
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
}), /*#__PURE__*/React.createElement(Disclosure.Button, null, function (buttonProps, buttonRef) {
|
|
85
|
-
return /*#__PURE__*/React.createElement(DropdownToggle, _extends({
|
|
86
|
-
ref: buttonRef,
|
|
87
|
-
as: toggleAs,
|
|
88
|
-
noCaret: noCaret,
|
|
89
|
-
className: toggleClassName,
|
|
90
|
-
renderToggle: renderToggle,
|
|
91
|
-
icon: icon,
|
|
92
|
-
placement: placement
|
|
93
|
-
}, omit(buttonProps, ['open'])), title);
|
|
94
|
-
}), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref2) {
|
|
95
|
-
var open = _ref2.open;
|
|
96
|
-
return /*#__PURE__*/React.createElement(SidenavDropdownCollapse, {
|
|
97
|
-
open: open,
|
|
98
|
-
style: menuStyle
|
|
99
|
-
}, children);
|
|
166
|
+
}, menuContainer, pick(toggleProps, ['data-testid']), {
|
|
167
|
+
style: style
|
|
100
168
|
}));
|
|
101
169
|
});
|
|
102
170
|
});
|
|
171
|
+
SidenavDropdown.Item = NavDropdownItem;
|
|
172
|
+
SidenavDropdown.Menu = NavDropdownMenu;
|
|
103
173
|
SidenavDropdown.displayName = 'Sidenav.Dropdown';
|
|
104
174
|
SidenavDropdown.propTypes = {
|
|
105
175
|
activeKey: PropTypes.any,
|
|
106
176
|
classPrefix: PropTypes.string,
|
|
177
|
+
trigger: PropTypes.oneOfType([PropTypes.array, PropTypes.oneOf(['click', 'hover', 'contextMenu'])]),
|
|
107
178
|
placement: PropTypes.oneOf(PLACEMENT_8),
|
|
108
179
|
title: PropTypes.node,
|
|
109
180
|
disabled: PropTypes.bool,
|
|
@@ -112,7 +183,6 @@ SidenavDropdown.propTypes = {
|
|
|
112
183
|
className: PropTypes.string,
|
|
113
184
|
toggleClassName: PropTypes.string,
|
|
114
185
|
children: PropTypes.node,
|
|
115
|
-
tabIndex: PropTypes.number,
|
|
116
186
|
open: deprecatePropType(PropTypes.bool),
|
|
117
187
|
eventKey: PropTypes.any,
|
|
118
188
|
as: PropTypes.elementType,
|
|
@@ -122,11 +192,11 @@ SidenavDropdown.propTypes = {
|
|
|
122
192
|
onClose: PropTypes.func,
|
|
123
193
|
onOpen: PropTypes.func,
|
|
124
194
|
onToggle: PropTypes.func,
|
|
195
|
+
onSelect: PropTypes.func,
|
|
125
196
|
onMouseEnter: PropTypes.func,
|
|
126
197
|
onMouseLeave: PropTypes.func,
|
|
127
198
|
onContextMenu: PropTypes.func,
|
|
128
199
|
onClick: PropTypes.func,
|
|
129
|
-
renderTitle: deprecatePropType(PropTypes.func),
|
|
130
200
|
renderToggle: PropTypes.func
|
|
131
201
|
};
|
|
132
202
|
export default SidenavDropdown;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
|
|
2
|
+
import React from 'react';
|
|
3
3
|
import { IconProps } from '@rsuite/icons/lib/Icon';
|
|
4
4
|
export interface SidenavDropdownItemProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
|
|
5
5
|
/** Active the current option */
|
|
@@ -20,14 +20,31 @@ export interface SidenavDropdownItemProps<T = any> extends WithAsProps, Omit<Rea
|
|
|
20
20
|
icon?: React.ReactElement<IconProps>;
|
|
21
21
|
/** The submenu that this menuitem controls (if exists) */
|
|
22
22
|
submenu?: React.ReactElement;
|
|
23
|
-
/**
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The sub-level menu appears from the right side by default, and when `pullLeft` is set, it appears from the left.
|
|
25
|
+
* @deprecated Submenus are now pointing the same direction.
|
|
26
|
+
*/
|
|
27
|
+
pullLeft?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Whether the submenu is opened.
|
|
30
|
+
* @deprecated
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
open?: boolean;
|
|
25
34
|
/** Select the callback function for the current option */
|
|
26
35
|
onSelect?: (eventKey: T, event: React.SyntheticEvent) => void;
|
|
27
36
|
}
|
|
28
37
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
38
|
+
* @private this component is not supposed to be used directly
|
|
39
|
+
* Instead it's rendered by a <Nav.Item> within a <Sidenav>
|
|
40
|
+
*
|
|
41
|
+
* <Sidenav>
|
|
42
|
+
* <Nav>
|
|
43
|
+
* <Nav.Menu>
|
|
44
|
+
* <Nav.Item></Nav.Item> -> This will render <SidenavDropdownItem> component
|
|
45
|
+
* </Nav.Menu>
|
|
46
|
+
* </Nav>
|
|
47
|
+
* </Sidenav>
|
|
31
48
|
*/
|
|
32
49
|
declare const SidenavDropdownItem: RsRefForwardingComponent<'li', SidenavDropdownItemProps>;
|
|
33
50
|
export default SidenavDropdownItem;
|
|
@@ -1,113 +1,132 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
3
|
import React, { useCallback, useContext } from 'react';
|
|
4
|
-
import isNil from 'lodash/isNil';
|
|
5
|
-
import { createChainedFunction, shallowEqual, useClassNames } from '../utils';
|
|
6
|
-
import { SidenavContext } from './Sidenav';
|
|
7
4
|
import PropTypes from 'prop-types';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
5
|
+
import { SidenavContext } from './Sidenav';
|
|
6
|
+
import deprecatePropType from '../utils/deprecatePropType';
|
|
7
|
+
import MenuItem from '../Menu/MenuItem';
|
|
8
|
+
import isNil from 'lodash/isNil';
|
|
9
|
+
import { mergeRefs, shallowEqual, useClassNames } from '../utils';
|
|
10
10
|
import NavContext from '../Nav/NavContext';
|
|
11
|
-
import DropdownContext from '../Dropdown/DropdownContext';
|
|
12
11
|
import { useRenderDropdownItem } from '../Dropdown/useRenderDropdownItem';
|
|
12
|
+
import ExpandedSidenavDropdownItem from './ExpandedSidenavDropdownItem';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* @private this component is not supposed to be used directly
|
|
16
|
+
* Instead it's rendered by a <Nav.Item> within a <Sidenav>
|
|
17
|
+
*
|
|
18
|
+
* <Sidenav>
|
|
19
|
+
* <Nav>
|
|
20
|
+
* <Nav.Menu>
|
|
21
|
+
* <Nav.Item></Nav.Item> -> This will render <SidenavDropdownItem> component
|
|
22
|
+
* </Nav.Menu>
|
|
23
|
+
* </Nav>
|
|
24
|
+
* </Sidenav>
|
|
17
25
|
*/
|
|
18
26
|
var SidenavDropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
activeProp = props.active,
|
|
22
|
-
children = props.children,
|
|
23
|
-
disabled = props.disabled,
|
|
24
|
-
divider = props.divider,
|
|
25
|
-
panel = props.panel,
|
|
26
|
-
className = props.className,
|
|
27
|
-
style = props.style,
|
|
28
|
-
_props$classPrefix = props.classPrefix,
|
|
29
|
-
classPrefix = _props$classPrefix === void 0 ? 'dropdown-item' : _props$classPrefix,
|
|
30
|
-
icon = props.icon,
|
|
31
|
-
eventKey = props.eventKey,
|
|
32
|
-
onClick = props.onClick,
|
|
33
|
-
onSelect = props.onSelect,
|
|
34
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "active", "children", "disabled", "divider", "panel", "className", "style", "classPrefix", "icon", "eventKey", "onClick", "onSelect"]);
|
|
35
|
-
|
|
36
|
-
var sidenavContext = useContext(SidenavContext);
|
|
37
|
-
var dropdown = useContext(DropdownContext);
|
|
27
|
+
var sidenav = useContext(SidenavContext);
|
|
28
|
+
var nav = useContext(NavContext);
|
|
38
29
|
|
|
39
|
-
if (!
|
|
40
|
-
throw new Error('<
|
|
30
|
+
if (!sidenav || !nav) {
|
|
31
|
+
throw new Error('<Sidenav.Dropdown.Item> must be used within a <Nav> within a <Sidenav> component.');
|
|
41
32
|
}
|
|
42
33
|
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
34
|
+
var _props$classPrefix = props.classPrefix,
|
|
35
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown-item' : _props$classPrefix,
|
|
36
|
+
className = props.className,
|
|
37
|
+
activeProp = props.active,
|
|
38
|
+
eventKey = props.eventKey,
|
|
39
|
+
onSelect = props.onSelect,
|
|
40
|
+
icon = props.icon,
|
|
41
|
+
_props$as = props.as,
|
|
42
|
+
Component = _props$as === void 0 ? 'li' : _props$as,
|
|
43
|
+
divider = props.divider,
|
|
44
|
+
panel = props.panel,
|
|
45
|
+
children = props.children,
|
|
46
|
+
disabled = props.disabled,
|
|
47
|
+
restProps = _objectWithoutPropertiesLoose(props, ["classPrefix", "className", "active", "eventKey", "onSelect", "icon", "as", "divider", "panel", "children", "disabled"]);
|
|
46
48
|
|
|
47
49
|
var _useClassNames = useClassNames(classPrefix),
|
|
48
50
|
merge = _useClassNames.merge,
|
|
49
51
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
50
52
|
prefix = _useClassNames.prefix;
|
|
51
53
|
|
|
52
|
-
var
|
|
53
|
-
|
|
54
|
-
'with-icon': icon,
|
|
55
|
-
active: selected,
|
|
56
|
-
disabled: disabled
|
|
57
|
-
}));
|
|
58
|
-
var handleClick = useCallback(function (event) {
|
|
59
|
-
var _dropdown$onSelect;
|
|
54
|
+
var handleSelectItem = useCallback(function (event) {
|
|
55
|
+
var _nav$onSelect;
|
|
60
56
|
|
|
61
|
-
if (disabled) return;
|
|
62
57
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(eventKey, event);
|
|
63
|
-
(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
var menuitemEventHandlers = {
|
|
67
|
-
onClick: createChainedFunction(handleClick, onClick)
|
|
68
|
-
};
|
|
58
|
+
(_nav$onSelect = nav.onSelect) === null || _nav$onSelect === void 0 ? void 0 : _nav$onSelect.call(nav, eventKey, event);
|
|
59
|
+
}, [onSelect, eventKey, nav]);
|
|
60
|
+
var selected = activeProp || !isNil(eventKey) && shallowEqual(nav === null || nav === void 0 ? void 0 : nav.activeKey, eventKey);
|
|
69
61
|
var renderDropdownItem = useRenderDropdownItem(Component);
|
|
70
62
|
|
|
63
|
+
if (sidenav.expanded) {
|
|
64
|
+
return /*#__PURE__*/React.createElement(ExpandedSidenavDropdownItem, _extends({
|
|
65
|
+
ref: ref
|
|
66
|
+
}, props));
|
|
67
|
+
}
|
|
68
|
+
|
|
71
69
|
if (divider) {
|
|
72
70
|
return renderDropdownItem(_extends({
|
|
73
71
|
ref: ref,
|
|
74
72
|
role: 'separator',
|
|
75
|
-
style: style,
|
|
76
73
|
className: merge(prefix('divider'), className)
|
|
77
|
-
},
|
|
74
|
+
}, restProps));
|
|
78
75
|
}
|
|
79
76
|
|
|
80
77
|
if (panel) {
|
|
81
78
|
return renderDropdownItem(_extends({
|
|
82
79
|
ref: ref,
|
|
83
|
-
|
|
84
|
-
style: style,
|
|
85
|
-
className: merge(prefix('panel'), className)
|
|
86
|
-
}, rest, {
|
|
80
|
+
className: merge(prefix('panel'), className),
|
|
87
81
|
children: children
|
|
88
|
-
}));
|
|
82
|
+
}, restProps));
|
|
89
83
|
}
|
|
90
84
|
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
85
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
86
|
+
selected: selected,
|
|
87
|
+
disabled: disabled,
|
|
88
|
+
onActivate: handleSelectItem
|
|
89
|
+
}, function (_ref, menuitemRef) {
|
|
90
|
+
var selected = _ref.selected,
|
|
91
|
+
active = _ref.active,
|
|
92
|
+
menuitem = _objectWithoutPropertiesLoose(_ref, ["selected", "active"]);
|
|
93
|
+
|
|
94
|
+
var classes = merge(className, withClassPrefix({
|
|
95
|
+
'with-icon': icon,
|
|
96
|
+
active: selected,
|
|
97
|
+
disabled: disabled,
|
|
98
|
+
focus: active,
|
|
99
|
+
divider: divider,
|
|
100
|
+
panel: panel
|
|
101
|
+
}));
|
|
102
|
+
var dataAttributes = {
|
|
103
|
+
'data-event-key': eventKey
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
if (!isNil(eventKey) && typeof eventKey !== 'string') {
|
|
107
|
+
dataAttributes['data-event-key-type'] = typeof eventKey;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return renderDropdownItem(_extends({
|
|
111
|
+
ref: mergeRefs(ref, menuitemRef),
|
|
112
|
+
className: classes
|
|
113
|
+
}, menuitem, dataAttributes, restProps, {
|
|
114
|
+
children: /*#__PURE__*/React.createElement(React.Fragment, null, icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
115
|
+
className: prefix('menu-icon')
|
|
116
|
+
}), children)
|
|
117
|
+
}));
|
|
118
|
+
});
|
|
102
119
|
});
|
|
103
120
|
SidenavDropdownItem.displayName = 'Sidenav.Dropdown.Item';
|
|
104
121
|
SidenavDropdownItem.propTypes = {
|
|
105
122
|
as: PropTypes.elementType,
|
|
106
|
-
expanded: PropTypes.bool,
|
|
107
|
-
active: PropTypes.bool,
|
|
108
123
|
divider: PropTypes.bool,
|
|
109
124
|
panel: PropTypes.bool,
|
|
125
|
+
trigger: PropTypes.oneOfType([PropTypes.array, PropTypes.oneOf(['click', 'hover'])]),
|
|
126
|
+
open: deprecatePropType(PropTypes.bool),
|
|
127
|
+
active: PropTypes.bool,
|
|
110
128
|
disabled: PropTypes.bool,
|
|
129
|
+
pullLeft: deprecatePropType(PropTypes.bool),
|
|
111
130
|
submenu: PropTypes.element,
|
|
112
131
|
onSelect: PropTypes.func,
|
|
113
132
|
onClick: PropTypes.func,
|
|
@@ -117,9 +136,6 @@ SidenavDropdownItem.propTypes = {
|
|
|
117
136
|
style: PropTypes.object,
|
|
118
137
|
children: PropTypes.node,
|
|
119
138
|
classPrefix: PropTypes.string,
|
|
120
|
-
tabIndex: PropTypes.number
|
|
121
|
-
title: PropTypes.node,
|
|
122
|
-
onMouseOver: PropTypes.func,
|
|
123
|
-
onMouseOut: PropTypes.func
|
|
139
|
+
tabIndex: PropTypes.number
|
|
124
140
|
};
|
|
125
141
|
export default SidenavDropdownItem;
|
|
@@ -1,26 +1,36 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { StandardProps } from '../@types/common';
|
|
3
3
|
import { IconProps } from '@rsuite/icons/lib/Icon';
|
|
4
|
-
export interface SidenavDropdownMenuProps<T = any> extends
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
export interface SidenavDropdownMenuProps<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
12
|
eventKey?: T;
|
|
13
13
|
/** Set the icon */
|
|
14
14
|
icon?: React.ReactElement<IconProps>;
|
|
15
|
-
|
|
15
|
+
open?: boolean;
|
|
16
|
+
collapsible?: boolean;
|
|
16
17
|
expanded?: boolean;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
active?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
activeKey?: T;
|
|
21
|
+
onToggle?: (open: boolean, eventKey?: T | undefined, event?: React.SyntheticEvent) => void;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
+
* @private this component is not supposed to be used directly
|
|
25
|
+
* Instead it's rendered by a <Nav.Menu> within a <Sidenav>
|
|
26
|
+
*
|
|
27
|
+
* <Sidenav>
|
|
28
|
+
* <Nav>
|
|
29
|
+
* <Nav.Menu>
|
|
30
|
+
* <Nav.Menu></Nav.Menu> -> This submenu will render <SidenavDropdownMenu> component
|
|
31
|
+
* </Nav.Menu>
|
|
32
|
+
* </Nav>
|
|
33
|
+
* </Sidenav>
|
|
24
34
|
*/
|
|
25
|
-
declare const SidenavDropdownMenu:
|
|
35
|
+
declare const SidenavDropdownMenu: React.ForwardRefExoticComponent<SidenavDropdownMenuProps<any> & Omit<React.HTMLAttributes<HTMLUListElement>, "title" | "onSelect"> & React.RefAttributes<HTMLElement>>;
|
|
26
36
|
export default SidenavDropdownMenu;
|