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
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
import React, { useContext, useCallback } from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import kebabCase from 'lodash/kebabCase';
|
|
6
|
+
import omit from 'lodash/omit';
|
|
7
|
+
import { useClassNames, placementPolyfill, PLACEMENT_8, mergeRefs } from '../utils';
|
|
8
|
+
import { SidenavContext } from './Sidenav';
|
|
9
|
+
import deprecatePropType from '../utils/deprecatePropType';
|
|
10
|
+
import SidenavDropdownCollapse from './SidenavDropdownCollapse';
|
|
11
|
+
import Disclosure from '../Disclosure/Disclosure';
|
|
12
|
+
import useInternalId from '../utils/useInternalId';
|
|
13
|
+
import SidenavDropdownToggle from './SidenavDropdownToggle';
|
|
14
|
+
import { NavMenuContext } from '../Nav/NavMenu';
|
|
15
|
+
import NavContext from '../Nav/NavContext';
|
|
16
|
+
var ExpandedSidenavDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
17
|
+
var sidenav = useContext(SidenavContext);
|
|
18
|
+
var nav = useContext(NavContext);
|
|
19
|
+
var navMenu = useContext(NavMenuContext);
|
|
20
|
+
|
|
21
|
+
if (!sidenav || !nav || !navMenu) {
|
|
22
|
+
throw new Error('<SidenavDropdown> component is not supposed to be used standalone. Use <Nav.Menu> inside <Sidenav> instead.');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var _props$as = props.as,
|
|
26
|
+
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
27
|
+
title = props.title,
|
|
28
|
+
children = props.children,
|
|
29
|
+
className = props.className,
|
|
30
|
+
menuStyle = props.menuStyle,
|
|
31
|
+
disabled = props.disabled,
|
|
32
|
+
renderTitle = props.renderTitle,
|
|
33
|
+
renderToggle = props.renderToggle,
|
|
34
|
+
_props$classPrefix = props.classPrefix,
|
|
35
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown' : _props$classPrefix,
|
|
36
|
+
_props$placement = props.placement,
|
|
37
|
+
placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
|
|
38
|
+
toggleClassName = props.toggleClassName,
|
|
39
|
+
icon = props.icon,
|
|
40
|
+
eventKey = props.eventKey,
|
|
41
|
+
toggleAs = props.toggleAs,
|
|
42
|
+
noCaret = props.noCaret,
|
|
43
|
+
style = props.style,
|
|
44
|
+
onOpen = props.onOpen,
|
|
45
|
+
onClose = props.onClose,
|
|
46
|
+
openProp = props.open,
|
|
47
|
+
onToggle = props.onToggle,
|
|
48
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "title", "children", "className", "menuStyle", "disabled", "renderTitle", "renderToggle", "classPrefix", "placement", "toggleClassName", "icon", "eventKey", "toggleAs", "noCaret", "style", "onOpen", "onClose", "open", "onToggle"]);
|
|
49
|
+
|
|
50
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
51
|
+
merge = _useClassNames.merge,
|
|
52
|
+
withClassPrefix = _useClassNames.withClassPrefix;
|
|
53
|
+
|
|
54
|
+
var internalId = useInternalId('SidenavDropdown');
|
|
55
|
+
var uniqueKey = eventKey !== null && eventKey !== void 0 ? eventKey : internalId;
|
|
56
|
+
var _sidenav$openKeys = sidenav.openKeys,
|
|
57
|
+
openKeys = _sidenav$openKeys === void 0 ? [] : _sidenav$openKeys,
|
|
58
|
+
onOpenChange = sidenav.onOpenChange;
|
|
59
|
+
var items = navMenu[0].items;
|
|
60
|
+
var hasSelectedItems = // has items that is active indicated by <Nav activeKey>
|
|
61
|
+
nav.activeKey && items.some(function (item) {
|
|
62
|
+
return item.eventKey === nav.activeKey;
|
|
63
|
+
}) || // has items that is active indicated by <Nav.Item active>
|
|
64
|
+
items.some(function (item) {
|
|
65
|
+
return item.active;
|
|
66
|
+
});
|
|
67
|
+
var handleToggleDisclosure = useCallback(function (open, event) {
|
|
68
|
+
if (open) {
|
|
69
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
70
|
+
} else {
|
|
71
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle(open);
|
|
75
|
+
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(uniqueKey, event);
|
|
76
|
+
}, [onClose, onOpen, onToggle, uniqueKey, onOpenChange]);
|
|
77
|
+
var open = openProp !== null && openProp !== void 0 ? openProp : openKeys.includes(uniqueKey);
|
|
78
|
+
return /*#__PURE__*/React.createElement(Disclosure, {
|
|
79
|
+
open: open,
|
|
80
|
+
onToggle: handleToggleDisclosure
|
|
81
|
+
}, function (_ref, containerRef) {
|
|
82
|
+
var _withClassPrefix;
|
|
83
|
+
|
|
84
|
+
var open = _ref.open;
|
|
85
|
+
var classes = merge(className, withClassPrefix((_withClassPrefix = {}, _withClassPrefix["placement-" + kebabCase(placementPolyfill(placement))] = placement, _withClassPrefix[open ? 'expand' : 'collapse'] = true, _withClassPrefix.disabled = disabled, _withClassPrefix['selected-within'] = hasSelectedItems, _withClassPrefix['no-caret'] = noCaret, _withClassPrefix)));
|
|
86
|
+
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
87
|
+
ref: mergeRefs(ref, containerRef),
|
|
88
|
+
style: style,
|
|
89
|
+
className: classes
|
|
90
|
+
}, rest, {
|
|
91
|
+
"data-event-key": eventKey
|
|
92
|
+
}), /*#__PURE__*/React.createElement(Disclosure.Button, null, function (buttonProps, buttonRef) {
|
|
93
|
+
return /*#__PURE__*/React.createElement(SidenavDropdownToggle, _extends({
|
|
94
|
+
ref: buttonRef,
|
|
95
|
+
as: toggleAs,
|
|
96
|
+
noCaret: noCaret,
|
|
97
|
+
className: toggleClassName,
|
|
98
|
+
renderToggle: renderToggle,
|
|
99
|
+
icon: icon,
|
|
100
|
+
placement: placement
|
|
101
|
+
}, omit(buttonProps, ['open'])), title);
|
|
102
|
+
}), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref2) {
|
|
103
|
+
var open = _ref2.open;
|
|
104
|
+
return /*#__PURE__*/React.createElement(SidenavDropdownCollapse, {
|
|
105
|
+
open: open,
|
|
106
|
+
style: menuStyle
|
|
107
|
+
}, children);
|
|
108
|
+
}));
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
ExpandedSidenavDropdown.displayName = 'Sidenav.Dropdown';
|
|
112
|
+
ExpandedSidenavDropdown.propTypes = {
|
|
113
|
+
activeKey: PropTypes.any,
|
|
114
|
+
classPrefix: PropTypes.string,
|
|
115
|
+
placement: PropTypes.oneOf(PLACEMENT_8),
|
|
116
|
+
title: PropTypes.node,
|
|
117
|
+
disabled: PropTypes.bool,
|
|
118
|
+
icon: PropTypes.node,
|
|
119
|
+
menuStyle: PropTypes.object,
|
|
120
|
+
className: PropTypes.string,
|
|
121
|
+
toggleClassName: PropTypes.string,
|
|
122
|
+
children: PropTypes.node,
|
|
123
|
+
tabIndex: PropTypes.number,
|
|
124
|
+
open: deprecatePropType(PropTypes.bool),
|
|
125
|
+
eventKey: PropTypes.any,
|
|
126
|
+
as: PropTypes.elementType,
|
|
127
|
+
toggleAs: PropTypes.elementType,
|
|
128
|
+
noCaret: PropTypes.bool,
|
|
129
|
+
style: PropTypes.object,
|
|
130
|
+
onClose: PropTypes.func,
|
|
131
|
+
onOpen: PropTypes.func,
|
|
132
|
+
onToggle: PropTypes.func,
|
|
133
|
+
onMouseEnter: PropTypes.func,
|
|
134
|
+
onMouseLeave: PropTypes.func,
|
|
135
|
+
onContextMenu: PropTypes.func,
|
|
136
|
+
onClick: PropTypes.func,
|
|
137
|
+
renderTitle: deprecatePropType(PropTypes.func),
|
|
138
|
+
renderToggle: PropTypes.func
|
|
139
|
+
};
|
|
140
|
+
export default ExpandedSidenavDropdown;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
|
|
3
|
+
import { IconProps } from '@rsuite/icons/lib/Icon';
|
|
4
|
+
export interface SidenavDropdownItemProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
|
|
5
|
+
/** Active the current option */
|
|
6
|
+
active?: boolean;
|
|
7
|
+
/** Primary content */
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
/** You can use a custom element for this component */
|
|
10
|
+
as?: React.ElementType;
|
|
11
|
+
/** Whether to display the divider */
|
|
12
|
+
divider?: boolean;
|
|
13
|
+
/** Disable the current option */
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
/** The value of the current option */
|
|
16
|
+
eventKey?: T;
|
|
17
|
+
/** Displays a custom panel */
|
|
18
|
+
panel?: boolean;
|
|
19
|
+
/** Set the icon */
|
|
20
|
+
icon?: React.ReactElement<IconProps>;
|
|
21
|
+
/** Whether the submenu is expanded, used in Sidenav. */
|
|
22
|
+
expanded?: boolean;
|
|
23
|
+
/** Select the callback function for the current option */
|
|
24
|
+
onSelect?: (eventKey: T, event: React.SyntheticEvent) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Tree View Node
|
|
28
|
+
* @see https://www.w3.org/TR/wai-aria-practices-1.2/#TreeView
|
|
29
|
+
*/
|
|
30
|
+
declare const ExpandedSidenavDropdownItem: RsRefForwardingComponent<'li', SidenavDropdownItemProps>;
|
|
31
|
+
export default ExpandedSidenavDropdownItem;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
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
|
+
import PropTypes from 'prop-types';
|
|
8
|
+
import Ripple from '../Ripple';
|
|
9
|
+
import SafeAnchor from '../SafeAnchor';
|
|
10
|
+
import NavContext from '../Nav/NavContext';
|
|
11
|
+
import { useRenderDropdownItem } from '../Dropdown/useRenderDropdownItem';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Tree View Node
|
|
15
|
+
* @see https://www.w3.org/TR/wai-aria-practices-1.2/#TreeView
|
|
16
|
+
*/
|
|
17
|
+
var ExpandedSidenavDropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
18
|
+
var sidenav = useContext(SidenavContext);
|
|
19
|
+
var nav = useContext(NavContext);
|
|
20
|
+
|
|
21
|
+
if (!sidenav || !nav) {
|
|
22
|
+
throw new Error('<SidenavDropdownItem> component is not supposed to be used standalone. Use <Nav.Item> within <Sidenav> instead.');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var _props$as = props.as,
|
|
26
|
+
Component = _props$as === void 0 ? 'li' : _props$as,
|
|
27
|
+
activeProp = props.active,
|
|
28
|
+
children = props.children,
|
|
29
|
+
disabled = props.disabled,
|
|
30
|
+
divider = props.divider,
|
|
31
|
+
panel = props.panel,
|
|
32
|
+
className = props.className,
|
|
33
|
+
style = props.style,
|
|
34
|
+
_props$classPrefix = props.classPrefix,
|
|
35
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown-item' : _props$classPrefix,
|
|
36
|
+
icon = props.icon,
|
|
37
|
+
eventKey = props.eventKey,
|
|
38
|
+
onClick = props.onClick,
|
|
39
|
+
onSelect = props.onSelect,
|
|
40
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "active", "children", "disabled", "divider", "panel", "className", "style", "classPrefix", "icon", "eventKey", "onClick", "onSelect"]);
|
|
41
|
+
|
|
42
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
43
|
+
merge = _useClassNames.merge,
|
|
44
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
45
|
+
prefix = _useClassNames.prefix;
|
|
46
|
+
|
|
47
|
+
var selected = activeProp !== null && activeProp !== void 0 ? activeProp : !isNil(eventKey) && (shallowEqual(eventKey, sidenav.activeKey) || shallowEqual(nav.activeKey, eventKey));
|
|
48
|
+
var classes = merge(className, withClassPrefix({
|
|
49
|
+
'with-icon': icon,
|
|
50
|
+
active: selected,
|
|
51
|
+
disabled: disabled
|
|
52
|
+
}));
|
|
53
|
+
var handleClick = useCallback(function (event) {
|
|
54
|
+
var _nav$onSelect, _sidenav$onSelect;
|
|
55
|
+
|
|
56
|
+
if (disabled) return;
|
|
57
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(eventKey, event);
|
|
58
|
+
(_nav$onSelect = nav.onSelect) === null || _nav$onSelect === void 0 ? void 0 : _nav$onSelect.call(nav, eventKey, event);
|
|
59
|
+
(_sidenav$onSelect = sidenav.onSelect) === null || _sidenav$onSelect === void 0 ? void 0 : _sidenav$onSelect.call(sidenav, eventKey, event);
|
|
60
|
+
}, [disabled, onSelect, sidenav, eventKey, nav]);
|
|
61
|
+
var menuitemEventHandlers = {
|
|
62
|
+
onClick: createChainedFunction(handleClick, onClick)
|
|
63
|
+
};
|
|
64
|
+
var renderDropdownItem = useRenderDropdownItem(Component);
|
|
65
|
+
|
|
66
|
+
if (divider) {
|
|
67
|
+
return renderDropdownItem(_extends({
|
|
68
|
+
ref: ref,
|
|
69
|
+
role: 'separator',
|
|
70
|
+
style: style,
|
|
71
|
+
className: merge(prefix('divider'), className)
|
|
72
|
+
}, rest));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (panel) {
|
|
76
|
+
return renderDropdownItem(_extends({
|
|
77
|
+
ref: ref,
|
|
78
|
+
role: 'none presentation',
|
|
79
|
+
style: style,
|
|
80
|
+
className: merge(prefix('panel'), className)
|
|
81
|
+
}, rest, {
|
|
82
|
+
children: children
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return renderDropdownItem(_extends({
|
|
87
|
+
ref: ref
|
|
88
|
+
}, rest, {
|
|
89
|
+
style: style,
|
|
90
|
+
className: classes,
|
|
91
|
+
'aria-current': selected || undefined
|
|
92
|
+
}, menuitemEventHandlers, {
|
|
93
|
+
children: /*#__PURE__*/React.createElement(React.Fragment, null, icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
94
|
+
className: prefix('menu-icon')
|
|
95
|
+
}), children, /*#__PURE__*/React.createElement(Ripple, null))
|
|
96
|
+
}), SafeAnchor);
|
|
97
|
+
});
|
|
98
|
+
ExpandedSidenavDropdownItem.displayName = 'Sidenav.Dropdown.Item';
|
|
99
|
+
ExpandedSidenavDropdownItem.propTypes = {
|
|
100
|
+
as: PropTypes.elementType,
|
|
101
|
+
expanded: PropTypes.bool,
|
|
102
|
+
active: PropTypes.bool,
|
|
103
|
+
divider: PropTypes.bool,
|
|
104
|
+
panel: PropTypes.bool,
|
|
105
|
+
disabled: PropTypes.bool,
|
|
106
|
+
submenu: PropTypes.element,
|
|
107
|
+
onSelect: PropTypes.func,
|
|
108
|
+
onClick: PropTypes.func,
|
|
109
|
+
icon: PropTypes.node,
|
|
110
|
+
eventKey: PropTypes.any,
|
|
111
|
+
className: PropTypes.string,
|
|
112
|
+
style: PropTypes.object,
|
|
113
|
+
children: PropTypes.node,
|
|
114
|
+
classPrefix: PropTypes.string,
|
|
115
|
+
tabIndex: PropTypes.number,
|
|
116
|
+
title: PropTypes.node,
|
|
117
|
+
onMouseOver: PropTypes.func,
|
|
118
|
+
onMouseOut: PropTypes.func
|
|
119
|
+
};
|
|
120
|
+
export default ExpandedSidenavDropdownItem;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
|
|
3
|
+
import { IconProps } from '@rsuite/icons/lib/Icon';
|
|
4
|
+
export interface SidenavDropdownMenuProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLLIElement>, 'title' | 'onSelect'> {
|
|
5
|
+
/** Primary content */
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
/** You can use a custom element for this component */
|
|
8
|
+
as?: React.ElementType;
|
|
9
|
+
/** Disable the current option */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
/** The value of the current option */
|
|
12
|
+
eventKey?: T;
|
|
13
|
+
/** Set the icon */
|
|
14
|
+
icon?: React.ReactElement<IconProps>;
|
|
15
|
+
/** Whether the submenu is expanded, used in Sidenav. */
|
|
16
|
+
expanded?: boolean;
|
|
17
|
+
/** Select the callback function for the current option */
|
|
18
|
+
onSelect?: (eventKey: T, event: React.SyntheticEvent) => void;
|
|
19
|
+
title?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Tree View Node
|
|
23
|
+
* @see https://www.w3.org/TR/wai-aria-practices-1.2/#TreeView
|
|
24
|
+
*/
|
|
25
|
+
declare const ExpandedSidenavDropdownMenu: RsRefForwardingComponent<'li', SidenavDropdownMenuProps>;
|
|
26
|
+
export default ExpandedSidenavDropdownMenu;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
|
|
3
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
+
|
|
5
|
+
var _templateObject, _templateObject2;
|
|
6
|
+
|
|
7
|
+
import React, { useCallback, useContext } from 'react';
|
|
8
|
+
import isNil from 'lodash/isNil';
|
|
9
|
+
import omit from 'lodash/omit';
|
|
10
|
+
import { createChainedFunction, useClassNames } from '../utils';
|
|
11
|
+
import { SidenavContext } from './Sidenav';
|
|
12
|
+
import useCustom from '../utils/useCustom';
|
|
13
|
+
import ArrowLeftLine from '@rsuite/icons/ArrowLeftLine';
|
|
14
|
+
import ArrowRightLine from '@rsuite/icons/ArrowRightLine';
|
|
15
|
+
import PropTypes from 'prop-types';
|
|
16
|
+
import SidenavDropdownCollapse from './SidenavDropdownCollapse';
|
|
17
|
+
import Ripple from '../Ripple';
|
|
18
|
+
import Disclosure from '../Disclosure/Disclosure';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Tree View Node
|
|
22
|
+
* @see https://www.w3.org/TR/wai-aria-practices-1.2/#TreeView
|
|
23
|
+
*/
|
|
24
|
+
var ExpandedSidenavDropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
25
|
+
var sidenavContext = useContext(SidenavContext);
|
|
26
|
+
|
|
27
|
+
if (!sidenavContext) {
|
|
28
|
+
throw new Error('<SidenavDropdownMenu> component is not supposed to be used standalone. Use <Nav.Menu> inside <Sidenav> instead.');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var _props$as = props.as,
|
|
32
|
+
Component = _props$as === void 0 ? 'li' : _props$as,
|
|
33
|
+
children = props.children,
|
|
34
|
+
disabled = props.disabled,
|
|
35
|
+
className = props.className,
|
|
36
|
+
style = props.style,
|
|
37
|
+
_props$classPrefix = props.classPrefix,
|
|
38
|
+
classPrefix = _props$classPrefix === void 0 ? 'dropdown-item' : _props$classPrefix,
|
|
39
|
+
tabIndex = props.tabIndex,
|
|
40
|
+
icon = props.icon,
|
|
41
|
+
title = props.title,
|
|
42
|
+
eventKey = props.eventKey,
|
|
43
|
+
onClick = props.onClick,
|
|
44
|
+
onSelect = props.onSelect,
|
|
45
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "children", "disabled", "className", "style", "classPrefix", "tabIndex", "icon", "title", "eventKey", "onClick", "onSelect"]);
|
|
46
|
+
|
|
47
|
+
var _useCustom = useCustom('DropdownMenu'),
|
|
48
|
+
rtl = _useCustom.rtl;
|
|
49
|
+
|
|
50
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
51
|
+
merge = _useClassNames.merge,
|
|
52
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
53
|
+
prefix = _useClassNames.prefix;
|
|
54
|
+
|
|
55
|
+
var _sidenavContext$openK = sidenavContext.openKeys,
|
|
56
|
+
openKeys = _sidenavContext$openK === void 0 ? [] : _sidenavContext$openK,
|
|
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 ? ArrowLeftLine : ArrowRightLine;
|
|
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({
|
|
81
|
+
ref: ref
|
|
82
|
+
}, rest, {
|
|
83
|
+
tabIndex: disabled ? -1 : tabIndex,
|
|
84
|
+
style: style,
|
|
85
|
+
className: classes
|
|
86
|
+
}, menuitemEventHandlers), /*#__PURE__*/React.createElement(Disclosure.Button, null, function (buttonProps) {
|
|
87
|
+
return /*#__PURE__*/React.createElement("button", _extends({
|
|
88
|
+
className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))),
|
|
89
|
+
onClick: handleClick
|
|
90
|
+
}, omit(buttonProps, ['open'])), icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
91
|
+
className: prefix('menu-icon')
|
|
92
|
+
}), title, /*#__PURE__*/React.createElement(Icon, {
|
|
93
|
+
className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
|
|
94
|
+
}), /*#__PURE__*/React.createElement(Ripple, null));
|
|
95
|
+
}), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref2) {
|
|
96
|
+
var open = _ref2.open;
|
|
97
|
+
return /*#__PURE__*/React.createElement(SidenavDropdownCollapse, {
|
|
98
|
+
open: open
|
|
99
|
+
}, children);
|
|
100
|
+
}));
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
ExpandedSidenavDropdownMenu.displayName = 'Sidenav.Dropdown.Menu';
|
|
104
|
+
ExpandedSidenavDropdownMenu.propTypes = {
|
|
105
|
+
as: PropTypes.elementType,
|
|
106
|
+
expanded: PropTypes.bool,
|
|
107
|
+
disabled: PropTypes.bool,
|
|
108
|
+
onSelect: PropTypes.func,
|
|
109
|
+
onClick: PropTypes.func,
|
|
110
|
+
icon: PropTypes.node,
|
|
111
|
+
eventKey: PropTypes.any,
|
|
112
|
+
className: PropTypes.string,
|
|
113
|
+
style: PropTypes.object,
|
|
114
|
+
children: PropTypes.node,
|
|
115
|
+
classPrefix: PropTypes.string,
|
|
116
|
+
tabIndex: PropTypes.number,
|
|
117
|
+
title: PropTypes.node,
|
|
118
|
+
onMouseOver: PropTypes.func,
|
|
119
|
+
onMouseOut: PropTypes.func
|
|
120
|
+
};
|
|
121
|
+
export default ExpandedSidenavDropdownMenu;
|
package/esm/Sidenav/Sidenav.d.ts
CHANGED
|
@@ -21,17 +21,23 @@ export interface SidenavProps<T = string> extends WithAsProps {
|
|
|
21
21
|
onOpenChange?: (openKeys: T[], event: React.SyntheticEvent) => void;
|
|
22
22
|
/**
|
|
23
23
|
* Select the callback function for the menu
|
|
24
|
-
* @deprecated Use <
|
|
24
|
+
* @deprecated Use <Nav onSelect> instead
|
|
25
25
|
*/
|
|
26
26
|
onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
|
|
27
27
|
}
|
|
28
28
|
export declare const SidenavContext: React.Context<SidenavContextType<string> | null>;
|
|
29
29
|
export interface SidenavContextType<T = string> {
|
|
30
30
|
openKeys: T[];
|
|
31
|
-
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Use activeKey from NavContext instead
|
|
33
|
+
*/
|
|
34
|
+
activeKey: T | undefined;
|
|
32
35
|
sidenav: boolean;
|
|
33
36
|
expanded: boolean;
|
|
34
37
|
onOpenChange: (eventKey: T, event: React.SyntheticEvent) => void;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated Use onSelect from NavContext instead
|
|
40
|
+
*/
|
|
35
41
|
onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
|
|
36
42
|
}
|
|
37
43
|
export interface SidenavComponent extends RsRefForwardingComponent<'div', SidenavProps> {
|
package/esm/Sidenav/Sidenav.js
CHANGED
|
@@ -22,8 +22,7 @@ var Sidenav = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
22
22
|
appearance = _props$appearance === void 0 ? 'default' : _props$appearance,
|
|
23
23
|
_props$expanded = props.expanded,
|
|
24
24
|
expanded = _props$expanded === void 0 ? true : _props$expanded,
|
|
25
|
-
|
|
26
|
-
activeKey = _props$activeKey === void 0 ? null : _props$activeKey,
|
|
25
|
+
activeKey = props.activeKey,
|
|
27
26
|
_props$defaultOpenKey = props.defaultOpenKeys,
|
|
28
27
|
defaultOpenKeys = _props$defaultOpenKey === void 0 ? emptyArray : _props$defaultOpenKey,
|
|
29
28
|
openKeysProp = props.openKeys,
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
|
|
3
3
|
import { IconProps } from '@rsuite/icons/lib/Icon';
|
|
4
|
-
|
|
4
|
+
import Button from '../Button';
|
|
5
|
+
import NavDropdownItem from '../Nav/NavDropdownItem';
|
|
6
|
+
import NavDropdownMenu from '../Nav/NavDropdownMenu';
|
|
7
|
+
export declare type SidenavDropdownTrigger = 'click' | 'hover' | 'contextMenu';
|
|
8
|
+
export interface NavDropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect' | 'title'> {
|
|
5
9
|
/** Define the title as a submenu */
|
|
6
10
|
title?: React.ReactNode;
|
|
7
11
|
/** Set the icon */
|
|
8
12
|
icon?: React.ReactElement<IconProps>;
|
|
9
|
-
/**
|
|
10
|
-
|
|
13
|
+
/** Triggering events */
|
|
14
|
+
trigger?: SidenavDropdownTrigger | readonly SidenavDropdownTrigger[];
|
|
11
15
|
/** The placement of Menu */
|
|
12
16
|
placement?: TypeAttributes.Placement8;
|
|
13
17
|
/** Whether or not component is disabled */
|
|
@@ -28,10 +32,9 @@ export interface SidenavDropdownProps<T = any> extends WithAsProps, Omit<React.H
|
|
|
28
32
|
*/
|
|
29
33
|
open?: boolean;
|
|
30
34
|
/**
|
|
31
|
-
*
|
|
32
|
-
* @deprecated Use `renderToggle` instead.
|
|
35
|
+
* @deprecated
|
|
33
36
|
*/
|
|
34
|
-
renderTitle?: (children
|
|
37
|
+
renderTitle?: (children: React.ReactNode) => React.ReactNode;
|
|
35
38
|
/** Custom Toggle */
|
|
36
39
|
renderToggle?: (props: WithAsProps, ref: React.Ref<any>) => any;
|
|
37
40
|
/** The callback function that the menu closes */
|
|
@@ -39,7 +42,26 @@ export interface SidenavDropdownProps<T = any> extends WithAsProps, Omit<React.H
|
|
|
39
42
|
/** Menu Pop-up callback function */
|
|
40
43
|
onOpen?: () => void;
|
|
41
44
|
/** Callback function for menu state switching */
|
|
42
|
-
onToggle?: (open?:
|
|
45
|
+
onToggle?: (open: boolean, eventKey?: T | undefined, event?: React.SyntheticEvent) => void;
|
|
46
|
+
}
|
|
47
|
+
export interface SidenavDropdownComponent extends RsRefForwardingComponent<'div', NavDropdownProps> {
|
|
48
|
+
<ToggleAs extends React.ElementType = typeof Button>(props: NavDropdownProps & {
|
|
49
|
+
ref?: React.Ref<any>;
|
|
50
|
+
toggleAs?: ToggleAs;
|
|
51
|
+
} & React.ComponentProps<ToggleAs>, context: any): JSX.Element | null;
|
|
52
|
+
Item: typeof NavDropdownItem;
|
|
53
|
+
Menu: typeof NavDropdownMenu;
|
|
43
54
|
}
|
|
44
|
-
|
|
55
|
+
/**
|
|
56
|
+
* @private this component is not supposed to be used directly
|
|
57
|
+
* Instead it's rendered by a <Nav.Menu> within a <Sidenav>
|
|
58
|
+
*
|
|
59
|
+
* <Sidenav>
|
|
60
|
+
* <Nav>
|
|
61
|
+
* <Nav.Menu> -> This submenu will render <SidenavDropdown> component
|
|
62
|
+
* </Nav.Menu>
|
|
63
|
+
* </Nav>
|
|
64
|
+
* </Sidenav>
|
|
65
|
+
*/
|
|
66
|
+
declare const SidenavDropdown: SidenavDropdownComponent;
|
|
45
67
|
export default SidenavDropdown;
|