rsuite 5.11.0 → 5.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/Nav/styles/index.less +7 -1
- package/Navbar/styles/index.less +6 -1
- package/Sidenav/styles/index.less +47 -9
- 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/Form/Form.js +21 -7
- package/cjs/Form/FormContext.d.ts +18 -13
- package/cjs/Form/useSchemaModel.d.ts +9 -0
- package/cjs/Form/useSchemaModel.js +46 -0
- package/cjs/FormControl/FormControl.d.ts +3 -0
- package/cjs/FormControl/FormControl.js +9 -2
- package/cjs/FormControl/useRegisterModel.d.ts +4 -0
- package/cjs/FormControl/useRegisterModel.js +20 -0
- 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/Overlay/OverlayTrigger.d.ts +4 -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/Sidenav/SidenavToggle.d.ts +5 -1
- package/cjs/Sidenav/SidenavToggle.js +25 -9
- package/cjs/Whisper/Whisper.d.ts +3 -5
- package/cjs/Whisper/test/Whisper.test.d.ts +1 -0
- package/cjs/Whisper/test/Whisper.test.js +23 -0
- package/cjs/index.d.ts +1 -1
- 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/treeUtils.js +8 -10
- 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 +81 -15
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +81 -15
- package/dist/rsuite.js +303 -28
- 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/Form/Form.js +19 -7
- package/esm/Form/FormContext.d.ts +18 -13
- package/esm/Form/useSchemaModel.d.ts +9 -0
- package/esm/Form/useSchemaModel.js +39 -0
- package/esm/FormControl/FormControl.d.ts +3 -0
- package/esm/FormControl/FormControl.js +9 -6
- package/esm/FormControl/useRegisterModel.d.ts +4 -0
- package/esm/FormControl/useRegisterModel.js +14 -0
- 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/Overlay/OverlayTrigger.d.ts +4 -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/Sidenav/SidenavToggle.d.ts +5 -1
- package/esm/Sidenav/SidenavToggle.js +22 -9
- package/esm/Whisper/Whisper.d.ts +3 -5
- package/esm/Whisper/test/Whisper.test.d.ts +1 -0
- package/esm/Whisper/test/Whisper.test.js +16 -0
- package/esm/index.d.ts +1 -1
- 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/treeUtils.js +8 -10
- 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/color-modes/dark.less +3 -0
- package/styles/color-modes/high-contrast.less +3 -0
- package/styles/color-modes/light.less +3 -0
- package/styles/variables.less +3 -0
|
@@ -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;
|
|
@@ -1,121 +1,157 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
1
|
import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
4
|
|
|
5
5
|
var _templateObject, _templateObject2;
|
|
6
6
|
|
|
7
7
|
import React, { useCallback, useContext } from 'react';
|
|
8
|
-
import isNil from 'lodash/isNil';
|
|
9
8
|
import omit from 'lodash/omit';
|
|
10
|
-
import
|
|
9
|
+
import Menu from '../Menu/Menu';
|
|
10
|
+
import MenuItem from '../Menu/MenuItem';
|
|
11
|
+
import { mergeRefs, useClassNames } from '../utils';
|
|
12
|
+
import PropTypes from 'prop-types';
|
|
11
13
|
import { SidenavContext } from './Sidenav';
|
|
14
|
+
import ArrowLeftLine from '@rsuite/icons/ArrowLeftLine';
|
|
15
|
+
import ArrowRightLine from '@rsuite/icons/ArrowRightLine';
|
|
12
16
|
import useCustom from '../utils/useCustom';
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import PropTypes from 'prop-types';
|
|
16
|
-
import SidenavDropdownCollapse from './SidenavDropdownCollapse';
|
|
17
|
-
import Ripple from '../Ripple';
|
|
18
|
-
import Disclosure from '../Disclosure/Disclosure';
|
|
17
|
+
import ExpandedSidenavDropdownMenu from './ExpandedSidenavDropdownMenu';
|
|
18
|
+
import NavContext from '../Nav/NavContext';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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>
|
|
27
|
+
* <Nav.Menu></Nav.Menu> -> This submenu will render <SidenavDropdownMenu> component
|
|
28
|
+
* </Nav.Menu>
|
|
29
|
+
* </Nav>
|
|
30
|
+
* </Sidenav>
|
|
23
31
|
*/
|
|
24
32
|
var SidenavDropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
tabIndex = props.tabIndex,
|
|
34
|
-
icon = props.icon,
|
|
35
|
-
title = props.title,
|
|
33
|
+
var sidenav = useContext(SidenavContext);
|
|
34
|
+
var nav = useContext(NavContext);
|
|
35
|
+
|
|
36
|
+
if (!sidenav || !nav) {
|
|
37
|
+
throw new Error('<Sidenav.Dropdown.Menu> must be rendered within a <Nav> within a <Sidenav> component.');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var onToggle = props.onToggle,
|
|
36
41
|
eventKey = props.eventKey,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
title = props.title,
|
|
43
|
+
_props$classPrefix = props.classPrefix,
|
|
44
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
|
|
45
|
+
children = props.children,
|
|
46
|
+
rest = _objectWithoutPropertiesLoose(props, ["onToggle", "eventKey", "title", "classPrefix", "children"]);
|
|
40
47
|
|
|
41
48
|
var _useCustom = useCustom('DropdownMenu'),
|
|
42
49
|
rtl = _useCustom.rtl;
|
|
43
50
|
|
|
51
|
+
var handleToggleSubmenu = useCallback(function (open, event) {
|
|
52
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle(open, eventKey, event);
|
|
53
|
+
}, [eventKey, onToggle]);
|
|
54
|
+
|
|
44
55
|
var _useClassNames = useClassNames(classPrefix),
|
|
45
|
-
merge = _useClassNames.merge,
|
|
46
|
-
withClassPrefix = _useClassNames.withClassPrefix,
|
|
47
56
|
prefix = _useClassNames.prefix;
|
|
48
57
|
|
|
49
|
-
var
|
|
58
|
+
var _useClassNames2 = useClassNames('dropdown-menu'),
|
|
59
|
+
withMenuClassPrefix = _useClassNames2.withClassPrefix,
|
|
60
|
+
mergeMenuClassName = _useClassNames2.merge;
|
|
50
61
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
62
|
+
var _useClassNames3 = useClassNames('dropdown-item'),
|
|
63
|
+
mergeItemClassNames = _useClassNames3.merge,
|
|
64
|
+
withItemClassPrefix = _useClassNames3.withClassPrefix,
|
|
65
|
+
prefixItemClassName = _useClassNames3.prefix;
|
|
54
66
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
onOpenChange = sidenavContext.onOpenChange,
|
|
58
|
-
onSidenavSelect = sidenavContext.onSelect;
|
|
59
|
-
var handleClick = useCallback(function (event) {
|
|
60
|
-
if (disabled) return;
|
|
61
|
-
onSelect === null || onSelect === void 0 ? void 0 : onSelect(eventKey, event);
|
|
62
|
-
onSidenavSelect === null || onSidenavSelect === void 0 ? void 0 : onSidenavSelect(eventKey, event);
|
|
63
|
-
}, [disabled, onSelect, onSidenavSelect, eventKey]);
|
|
64
|
-
var menuitemEventHandlers = {
|
|
65
|
-
onClick: createChainedFunction(handleClick, onClick)
|
|
66
|
-
};
|
|
67
|
-
var Icon = rtl ? AngleLeft : AngleRight;
|
|
68
|
-
return /*#__PURE__*/React.createElement(Disclosure, {
|
|
69
|
-
open: !isNil(eventKey) && openKeys.includes(eventKey),
|
|
70
|
-
onToggle: function onToggle(_, event) {
|
|
71
|
-
return onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(eventKey, event);
|
|
72
|
-
}
|
|
73
|
-
}, function (_ref) {
|
|
74
|
-
var open = _ref.open;
|
|
75
|
-
var classes = merge(className, prefix('submenu'), prefix("pull-" + (rtl ? 'left' : 'right')), prefix(open ? 'expand' : 'collapse'), withClassPrefix({
|
|
76
|
-
'with-icon': icon,
|
|
77
|
-
// open,
|
|
78
|
-
disabled: disabled
|
|
79
|
-
}));
|
|
80
|
-
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
67
|
+
if (sidenav.expanded) {
|
|
68
|
+
return /*#__PURE__*/React.createElement(ExpandedSidenavDropdownMenu, _extends({
|
|
81
69
|
ref: ref
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
70
|
+
}, omit(props, 'classPrefix')));
|
|
71
|
+
} // Parent menu exists. This is a submenu.
|
|
72
|
+
// Should render a `menuitem` that controls this submenu.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
var _omit = omit(rest, ['trigger']),
|
|
76
|
+
icon = _omit.icon,
|
|
77
|
+
className = _omit.className,
|
|
78
|
+
disabled = _omit.disabled,
|
|
79
|
+
menuProps = _objectWithoutPropertiesLoose(_omit, ["icon", "className", "disabled"]);
|
|
80
|
+
|
|
81
|
+
var Icon = rtl ? ArrowLeftLine : ArrowRightLine;
|
|
82
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
83
|
+
openMenuOn: ['mouseover', 'click'],
|
|
84
|
+
renderMenuButton: function renderMenuButton(_ref, buttonRef) {
|
|
85
|
+
var open = _ref.open,
|
|
86
|
+
menuButtonProps = _objectWithoutPropertiesLoose(_ref, ["open"]);
|
|
87
|
+
|
|
88
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
89
|
+
disabled: disabled
|
|
90
|
+
}, function (_ref2, menuitemRef) {
|
|
91
|
+
var selected = _ref2.selected,
|
|
92
|
+
active = _ref2.active,
|
|
93
|
+
menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
|
|
94
|
+
|
|
95
|
+
var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))), withItemClassPrefix({
|
|
96
|
+
'with-icon': icon,
|
|
97
|
+
open: open,
|
|
98
|
+
active: selected,
|
|
99
|
+
disabled: disabled,
|
|
100
|
+
focus: active
|
|
101
|
+
}));
|
|
102
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
103
|
+
ref: mergeRefs(buttonRef, menuitemRef),
|
|
104
|
+
className: classes,
|
|
105
|
+
"data-event-key": eventKey,
|
|
106
|
+
"data-event-key-type": typeof eventKey
|
|
107
|
+
}, menuitem, omit(menuButtonProps, ['role'])), icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
108
|
+
className: prefix('menu-icon')
|
|
109
|
+
}), title, /*#__PURE__*/React.createElement(Icon, {
|
|
110
|
+
className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
|
|
111
|
+
}));
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
|
|
115
|
+
var open = _ref3.open,
|
|
116
|
+
popupProps = _objectWithoutPropertiesLoose(_ref3, ["open"]);
|
|
117
|
+
|
|
118
|
+
var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
|
|
119
|
+
return /*#__PURE__*/React.createElement("ul", _extends({
|
|
120
|
+
ref: popupRef,
|
|
121
|
+
className: menuClassName,
|
|
122
|
+
hidden: !open
|
|
123
|
+
}, popupProps, menuProps), children);
|
|
124
|
+
},
|
|
125
|
+
onToggleMenu: handleToggleSubmenu
|
|
126
|
+
}, function (_ref4, menuContainerRef) {
|
|
127
|
+
var open = _ref4.open,
|
|
128
|
+
menuContainer = _objectWithoutPropertiesLoose(_ref4, ["open"]);
|
|
129
|
+
|
|
130
|
+
var classes = mergeItemClassNames(className, withItemClassPrefix({
|
|
131
|
+
disabled: disabled,
|
|
132
|
+
open: open,
|
|
133
|
+
submenu: true
|
|
100
134
|
}));
|
|
135
|
+
return /*#__PURE__*/React.createElement("li", _extends({
|
|
136
|
+
ref: mergeRefs(ref, menuContainerRef),
|
|
137
|
+
className: classes
|
|
138
|
+
}, menuContainer));
|
|
101
139
|
});
|
|
102
140
|
});
|
|
103
141
|
SidenavDropdownMenu.displayName = 'Sidenav.Dropdown.Menu';
|
|
104
142
|
SidenavDropdownMenu.propTypes = {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
disabled: PropTypes.bool,
|
|
108
|
-
onSelect: PropTypes.func,
|
|
109
|
-
onClick: PropTypes.func,
|
|
110
|
-
icon: PropTypes.node,
|
|
111
|
-
eventKey: PropTypes.any,
|
|
143
|
+
active: PropTypes.bool,
|
|
144
|
+
activeKey: PropTypes.any,
|
|
112
145
|
className: PropTypes.string,
|
|
113
|
-
style: PropTypes.object,
|
|
114
146
|
children: PropTypes.node,
|
|
147
|
+
icon: PropTypes.any,
|
|
115
148
|
classPrefix: PropTypes.string,
|
|
116
|
-
|
|
149
|
+
pullLeft: PropTypes.bool,
|
|
117
150
|
title: PropTypes.node,
|
|
118
|
-
|
|
119
|
-
|
|
151
|
+
open: PropTypes.bool,
|
|
152
|
+
eventKey: PropTypes.any,
|
|
153
|
+
expanded: PropTypes.bool,
|
|
154
|
+
collapsible: PropTypes.bool,
|
|
155
|
+
onToggle: PropTypes.func
|
|
120
156
|
};
|
|
121
157
|
export default SidenavDropdownMenu;
|
|
@@ -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 SidenavDropdownToggleProps 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 SidenavDropdownToggle: RsRefForwardingComponent<typeof Button, SidenavDropdownToggleProps>;
|
|
19
|
+
export default SidenavDropdownToggle;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import ArrowDownLineIcon from '@rsuite/icons/ArrowDownLine';
|
|
6
|
+
import { useClassNames } from '../utils';
|
|
7
|
+
import SidenavItem from './SidenavItem';
|
|
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
|
+
var SidenavDropdownToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
19
|
+
var _props$as = props.as,
|
|
20
|
+
Component = _props$as === void 0 ? SidenavItem : _props$as,
|
|
21
|
+
className = props.className,
|
|
22
|
+
_props$classPrefix = props.classPrefix,
|
|
23
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown-toggle' : _props$classPrefix,
|
|
24
|
+
renderToggle = props.renderToggle,
|
|
25
|
+
children = props.children,
|
|
26
|
+
noCaret = props.noCaret,
|
|
27
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "renderToggle", "children", "noCaret"]);
|
|
28
|
+
|
|
29
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
30
|
+
prefix = _useClassNames.prefix,
|
|
31
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
32
|
+
merge = _useClassNames.merge;
|
|
33
|
+
|
|
34
|
+
var classes = merge(className, withClassPrefix({
|
|
35
|
+
'no-caret': noCaret
|
|
36
|
+
}));
|
|
37
|
+
var toggle = /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
|
|
38
|
+
ref: ref,
|
|
39
|
+
className: classes
|
|
40
|
+
}), children, !noCaret && /*#__PURE__*/React.createElement(ArrowDownLineIcon, {
|
|
41
|
+
className: prefix('caret')
|
|
42
|
+
}));
|
|
43
|
+
return renderToggle ? renderToggle(rest, ref) : toggle;
|
|
44
|
+
});
|
|
45
|
+
SidenavDropdownToggle.displayName = 'Sidenav.Dropdown.Toggle';
|
|
46
|
+
SidenavDropdownToggle.propTypes = {
|
|
47
|
+
className: PropTypes.string,
|
|
48
|
+
children: PropTypes.node,
|
|
49
|
+
classPrefix: PropTypes.string,
|
|
50
|
+
noCaret: PropTypes.bool,
|
|
51
|
+
as: PropTypes.elementType,
|
|
52
|
+
renderToggle: PropTypes.func,
|
|
53
|
+
placement: PropTypes.oneOf(['bottomStart', 'bottomEnd', 'topStart', 'topEnd', 'leftStart', 'rightStart', 'leftEnd', 'rightEnd'])
|
|
54
|
+
};
|
|
55
|
+
export default SidenavDropdownToggle;
|
|
@@ -15,5 +15,8 @@ export interface SidenavItemProps<T = any> extends WithAsProps, Omit<React.HTMLA
|
|
|
15
15
|
divider?: boolean;
|
|
16
16
|
panel?: boolean;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
18
21
|
declare const SidenavItem: RsRefForwardingComponent<'li', SidenavItemProps>;
|
|
19
22
|
export default SidenavItem;
|