rsuite 5.12.0 → 5.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/Nav/styles/index.less +7 -1
  3. package/Navbar/styles/index.less +6 -1
  4. package/Sidenav/styles/index.less +7 -5
  5. package/cjs/Cascader/DropdownMenu.js +8 -3
  6. package/cjs/Disclosure/Disclosure.d.ts +1 -1
  7. package/cjs/Disclosure/DisclosureContext.d.ts +1 -1
  8. package/cjs/Dropdown/Dropdown.js +26 -110
  9. package/cjs/Dropdown/DropdownItem.js +14 -58
  10. package/cjs/Dropdown/DropdownMenu.js +32 -76
  11. package/cjs/Dropdown/DropdownToggle.js +4 -17
  12. package/cjs/Menu/Menu.d.ts +1 -0
  13. package/cjs/Menu/Menu.js +1 -0
  14. package/cjs/Menu/MenuItem.d.ts +1 -0
  15. package/cjs/Menu/MenuItem.js +1 -0
  16. package/cjs/Menu/Menubar.d.ts +3 -0
  17. package/cjs/Menu/Menubar.js +4 -0
  18. package/cjs/Nav/Nav.d.ts +7 -2
  19. package/cjs/Nav/Nav.js +105 -5
  20. package/cjs/Nav/NavContext.d.ts +2 -8
  21. package/cjs/Nav/NavContext.js +1 -7
  22. package/cjs/Nav/NavDropdown.d.ts +71 -0
  23. package/cjs/Nav/NavDropdown.js +193 -0
  24. package/cjs/Nav/NavDropdownItem.d.ts +39 -0
  25. package/cjs/Nav/NavDropdownItem.js +141 -0
  26. package/cjs/Nav/NavDropdownMenu.d.ts +26 -0
  27. package/cjs/Nav/NavDropdownMenu.js +156 -0
  28. package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
  29. package/cjs/Nav/NavDropdownToggle.js +74 -0
  30. package/cjs/Nav/NavItem.d.ts +2 -0
  31. package/cjs/Nav/NavItem.js +13 -26
  32. package/cjs/Nav/NavMenu.d.ts +38 -0
  33. package/cjs/Nav/NavMenu.js +122 -0
  34. package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
  35. package/cjs/Navbar/NavbarDropdown.js +147 -0
  36. package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
  37. package/cjs/Navbar/NavbarDropdownItem.js +149 -0
  38. package/cjs/Navbar/NavbarDropdownMenu.d.ts +37 -0
  39. package/cjs/Navbar/NavbarDropdownMenu.js +155 -0
  40. package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
  41. package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
  42. package/cjs/Navbar/NavbarItem.d.ts +5 -2
  43. package/cjs/Navbar/NavbarItem.js +10 -4
  44. package/cjs/Picker/utils.js +22 -15
  45. package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  46. package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
  47. package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  48. package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
  49. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  50. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
  51. package/cjs/Sidenav/Sidenav.d.ts +8 -2
  52. package/cjs/Sidenav/Sidenav.js +1 -2
  53. package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
  54. package/cjs/Sidenav/SidenavDropdown.js +144 -73
  55. package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
  56. package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
  57. package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  58. package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
  59. package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  60. package/cjs/Sidenav/SidenavDropdownToggle.js +72 -0
  61. package/cjs/Sidenav/SidenavItem.d.ts +3 -0
  62. package/cjs/Sidenav/SidenavItem.js +22 -14
  63. package/cjs/utils/deprecateComponent.js +4 -6
  64. package/cjs/utils/deprecatePropType.d.ts +1 -5
  65. package/cjs/utils/deprecatePropType.js +7 -14
  66. package/cjs/utils/useInternalId.d.ts +1 -1
  67. package/cjs/utils/useInternalId.js +2 -2
  68. package/cjs/utils/warnOnce.d.ts +9 -0
  69. package/cjs/utils/warnOnce.js +22 -0
  70. package/dist/rsuite-rtl.css +18 -9
  71. package/dist/rsuite-rtl.min.css +1 -1
  72. package/dist/rsuite-rtl.min.css.map +1 -1
  73. package/dist/rsuite.css +18 -9
  74. package/dist/rsuite.js +275 -22
  75. package/dist/rsuite.js.map +1 -1
  76. package/dist/rsuite.min.css +1 -1
  77. package/dist/rsuite.min.css.map +1 -1
  78. package/dist/rsuite.min.js +1 -1
  79. package/dist/rsuite.min.js.map +1 -1
  80. package/esm/Cascader/DropdownMenu.js +8 -3
  81. package/esm/Disclosure/Disclosure.d.ts +1 -1
  82. package/esm/Disclosure/DisclosureContext.d.ts +1 -1
  83. package/esm/Dropdown/Dropdown.js +25 -105
  84. package/esm/Dropdown/DropdownItem.js +13 -55
  85. package/esm/Dropdown/DropdownMenu.js +31 -76
  86. package/esm/Dropdown/DropdownToggle.js +4 -14
  87. package/esm/Menu/Menu.d.ts +1 -0
  88. package/esm/Menu/Menu.js +1 -0
  89. package/esm/Menu/MenuItem.d.ts +1 -0
  90. package/esm/Menu/MenuItem.js +1 -0
  91. package/esm/Menu/Menubar.d.ts +3 -0
  92. package/esm/Menu/Menubar.js +4 -0
  93. package/esm/Nav/Nav.d.ts +7 -2
  94. package/esm/Nav/Nav.js +96 -5
  95. package/esm/Nav/NavContext.d.ts +2 -8
  96. package/esm/Nav/NavContext.js +1 -6
  97. package/esm/Nav/NavDropdown.d.ts +71 -0
  98. package/esm/Nav/NavDropdown.js +170 -0
  99. package/esm/Nav/NavDropdownItem.d.ts +39 -0
  100. package/esm/Nav/NavDropdownItem.js +123 -0
  101. package/esm/Nav/NavDropdownMenu.d.ts +26 -0
  102. package/esm/Nav/NavDropdownMenu.js +138 -0
  103. package/esm/Nav/NavDropdownToggle.d.ts +21 -0
  104. package/esm/Nav/NavDropdownToggle.js +57 -0
  105. package/esm/Nav/NavItem.d.ts +2 -0
  106. package/esm/Nav/NavItem.js +13 -21
  107. package/esm/Nav/NavMenu.d.ts +38 -0
  108. package/esm/Nav/NavMenu.js +98 -0
  109. package/esm/Navbar/NavbarDropdown.d.ts +57 -0
  110. package/esm/Navbar/NavbarDropdown.js +124 -0
  111. package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
  112. package/esm/Navbar/NavbarDropdownItem.js +128 -0
  113. package/esm/Navbar/NavbarDropdownMenu.d.ts +37 -0
  114. package/esm/Navbar/NavbarDropdownMenu.js +135 -0
  115. package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
  116. package/esm/Navbar/NavbarDropdownToggle.js +55 -0
  117. package/esm/Navbar/NavbarItem.d.ts +5 -2
  118. package/esm/Navbar/NavbarItem.js +11 -4
  119. package/esm/Picker/utils.js +22 -14
  120. package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  121. package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
  122. package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  123. package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
  124. package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  125. package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
  126. package/esm/Sidenav/Sidenav.d.ts +8 -2
  127. package/esm/Sidenav/Sidenav.js +1 -2
  128. package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
  129. package/esm/Sidenav/SidenavDropdown.js +145 -75
  130. package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
  131. package/esm/Sidenav/SidenavDropdownItem.js +87 -71
  132. package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  133. package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
  134. package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  135. package/esm/Sidenav/SidenavDropdownToggle.js +55 -0
  136. package/esm/Sidenav/SidenavItem.d.ts +3 -0
  137. package/esm/Sidenav/SidenavItem.js +23 -15
  138. package/esm/utils/deprecateComponent.js +3 -4
  139. package/esm/utils/deprecatePropType.d.ts +1 -5
  140. package/esm/utils/deprecatePropType.js +3 -13
  141. package/esm/utils/useInternalId.d.ts +1 -1
  142. package/esm/utils/useInternalId.js +2 -2
  143. package/esm/utils/warnOnce.d.ts +9 -0
  144. package/esm/utils/warnOnce.js +18 -0
  145. package/package.json +1 -1
  146. package/styles/variables.less +1 -0
@@ -100,11 +100,13 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
100
100
  return /*#__PURE__*/React.createElement(DropdownMenuItem, {
101
101
  classPrefix: "picker-cascader-menu-item",
102
102
  as: 'li',
103
+ role: "treeitem",
103
104
  key: layer + "-" + onlyKey,
104
105
  disabled: disabled,
105
106
  active: !isUndefined(activeItemValue) && shallowEqual(activeItemValue, value),
106
107
  focus: focus,
107
108
  value: value,
109
+ "aria-owns": node.children ? 'treeitem-' + value + '-children' : undefined,
108
110
  className: children ? prefix('has-children') : undefined,
109
111
  onSelect: function onSelect(_value, event) {
110
112
  return handleSelect(layer, node, event);
@@ -120,12 +122,13 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
120
122
  };
121
123
  var cascadeNodes = cascadeData.map(function (children, layer) {
122
124
  var onlyKey = layer + "_" + children.length;
125
+ var parentNode = cascadePaths[layer - 1];
123
126
  var menu = /*#__PURE__*/React.createElement("ul", {
124
- role: "listbox"
127
+ role: layer === 0 ? 'none presentation' : 'group',
128
+ id: parentNode ? 'treeitem-' + parentNode[valueKey] + '-children' : undefined
125
129
  }, children.map(function (item, index) {
126
130
  return renderCascadeNode(item, index, layer, cascadePaths[layer] && shallowEqual(cascadePaths[layer][valueKey], item[valueKey]));
127
131
  }));
128
- var parentNode = cascadePaths[layer - 1];
129
132
  return /*#__PURE__*/React.createElement("div", {
130
133
  key: onlyKey,
131
134
  className: prefix('column'),
@@ -137,7 +140,9 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
137
140
  }
138
141
  }, renderMenu ? renderMenu(children, menu, parentNode, layer) : menu);
139
142
  });
140
- return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
143
+ return /*#__PURE__*/React.createElement(Component, _extends({
144
+ role: "tree"
145
+ }, rest, {
141
146
  ref: mergeRefs(rootRef, ref),
142
147
  className: classes
143
148
  }), /*#__PURE__*/React.createElement("div", {
@@ -15,7 +15,7 @@ export interface DisclosureProps {
15
15
  /** Callback when disclosure button is being activated to update the open state */
16
16
  onToggle?: (open: boolean, event: React.SyntheticEvent) => void;
17
17
  /** What mouse events should disclosure reacts to */
18
- trigger?: DisclosureTrigger[];
18
+ trigger?: readonly DisclosureTrigger[];
19
19
  }
20
20
  export interface DisclosureComponent extends React.FC<DisclosureProps> {
21
21
  Button: typeof DisclosureButton;
@@ -17,7 +17,7 @@ export declare type DisclosureContextProps = [
17
17
  DisclosureState,
18
18
  Dispatch<DisclosureAction>,
19
19
  {
20
- trigger: DisclosureTrigger[];
20
+ trigger: readonly DisclosureTrigger[];
21
21
  onToggle?: (open: boolean, event: React.SyntheticEvent) => void;
22
22
  }
23
23
  ];
@@ -1,25 +1,21 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useCallback, useContext, useMemo, useReducer } from 'react';
3
+ import React, { useContext, useMemo, useReducer } from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import omit from 'lodash/omit';
6
6
  import pick from 'lodash/pick';
7
7
  import DropdownMenu from './DropdownMenu';
8
8
  import { mergeRefs, PLACEMENT_8, placementPolyfill, useClassNames } from '../utils';
9
- import { SidenavContext } from '../Sidenav/Sidenav';
10
9
  import deprecatePropType from '../utils/deprecatePropType';
11
10
  import DropdownItem from './DropdownItem';
12
11
  import DropdownContext from './DropdownContext';
13
12
  import Menu from '../Menu/Menu';
14
13
  import DropdownToggle from './DropdownToggle';
15
- import MenuContext from '../Menu/MenuContext';
16
- import MenuItem from '../Menu/MenuItem';
17
14
  import kebabCase from 'lodash/kebabCase';
18
- import { NavbarContext } from '../Navbar';
19
- import Disclosure from '../Disclosure/Disclosure';
20
- import SidenavDropdown from '../Sidenav/SidenavDropdown';
21
15
  import NavContext from '../Nav/NavContext';
22
16
  import { initialState, reducer } from './DropdownState';
17
+ import warnOnce from '../utils/warnOnce';
18
+ import Nav from '../Nav';
23
19
 
24
20
  /**
25
21
  * The <Dropdown> API
@@ -28,7 +24,7 @@ import { initialState, reducer } from './DropdownState';
28
24
  */
29
25
  var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
30
26
  var activeKey = props.activeKey,
31
- onSelectProp = props.onSelect,
27
+ onSelect = props.onSelect,
32
28
  rest = _objectWithoutPropertiesLoose(props, ["activeKey", "onSelect"]);
33
29
 
34
30
  var _rest$as = rest.as,
@@ -37,7 +33,6 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
37
33
  onClose = rest.onClose,
38
34
  onOpen = rest.onOpen,
39
35
  onToggle = rest.onToggle,
40
- eventKey = rest.eventKey,
41
36
  _rest$trigger = rest.trigger,
42
37
  trigger = _rest$trigger === void 0 ? 'click' : _rest$trigger,
43
38
  _rest$placement = rest.placement,
@@ -53,30 +48,18 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
53
48
  children = rest.children,
54
49
  menuStyle = rest.menuStyle,
55
50
  style = rest.style,
56
- toggleProps = _objectWithoutPropertiesLoose(rest, ["as", "title", "onClose", "onOpen", "onToggle", "eventKey", "trigger", "placement", "toggleAs", "toggleClassName", "open", "defaultOpen", "classPrefix", "className", "disabled", "children", "menuStyle", "style"]);
51
+ toggleProps = _objectWithoutPropertiesLoose(rest, ["as", "title", "onClose", "onOpen", "onToggle", "trigger", "placement", "toggleAs", "toggleClassName", "open", "defaultOpen", "classPrefix", "className", "disabled", "children", "menuStyle", "style"]);
57
52
 
58
- var _useContext = useContext(NavContext),
59
- onSelectFromNav = _useContext.onSelect;
60
-
61
- var emitSelect = useCallback(function (eventKey, event) {
62
- onSelectProp === null || onSelectProp === void 0 ? void 0 : onSelectProp(eventKey, event); // If <Dropdown> is inside <Nav>, also trigger `onSelect` on <Nav>
63
-
64
- onSelectFromNav === null || onSelectFromNav === void 0 ? void 0 : onSelectFromNav(eventKey, event);
65
- }, [onSelectProp, onSelectFromNav]);
53
+ var nav = useContext(NavContext);
66
54
 
67
55
  var _useClassNames = useClassNames(classPrefix),
68
56
  merge = _useClassNames.merge,
69
- withClassPrefix = _useClassNames.withClassPrefix,
70
- prefix = _useClassNames.prefix;
57
+ withClassPrefix = _useClassNames.withClassPrefix;
71
58
 
72
59
  var _useClassNames2 = useClassNames('dropdown-menu'),
73
60
  withMenuClassPrefix = _useClassNames2.withClassPrefix,
74
61
  mergeMenuClassName = _useClassNames2.merge;
75
62
 
76
- var _useClassNames3 = useClassNames('nav-item'),
77
- withNavItemClassPrefix = _useClassNames3.withClassPrefix,
78
- mergeNavItemClassNames = _useClassNames3.merge;
79
-
80
63
  var menuButtonTriggers = useMemo(function () {
81
64
  if (!trigger) {
82
65
  return undefined;
@@ -96,9 +79,6 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
96
79
  return triggerMap[t];
97
80
  });
98
81
  }, [trigger]);
99
- var parentMenu = useContext(MenuContext);
100
- var sidenav = useContext(SidenavContext);
101
- var navbar = useContext(NavbarContext);
102
82
 
103
83
  var _useReducer = useReducer(reducer, initialState),
104
84
  items = _useReducer[0].items,
@@ -112,54 +92,18 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
112
92
  var dropdownContextValue = useMemo(function () {
113
93
  return {
114
94
  activeKey: activeKey,
115
- onSelect: emitSelect,
95
+ onSelect: onSelect,
116
96
  hasSelectedItem: hasSelectedItem,
117
97
  dispatch: dispatch
118
98
  };
119
- }, [activeKey, emitSelect, hasSelectedItem, dispatch]); // Render a disclosure when inside expanded <Sidenav>
99
+ }, [activeKey, onSelect, hasSelectedItem, dispatch]); // Deprecate <Dropdown> within <Nav> usage
100
+ // in favor of <Nav.Menu> API
120
101
 
121
- if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
122
- return /*#__PURE__*/React.createElement(DropdownContext.Provider, {
123
- value: dropdownContextValue
124
- }, /*#__PURE__*/React.createElement(SidenavDropdown, _extends({
102
+ if (nav) {
103
+ warnOnce('Usage of <Dropdown> within <Nav> is deprecated. Replace with <Nav.Menu>');
104
+ return /*#__PURE__*/React.createElement(Nav.Menu, _extends({
125
105
  ref: ref
126
- }, rest)));
127
- } // Renders a disclosure when used inside <Navbar>
128
-
129
-
130
- if (navbar) {
131
- return /*#__PURE__*/React.createElement(DropdownContext.Provider, {
132
- value: dropdownContextValue
133
- }, /*#__PURE__*/React.createElement(Disclosure, {
134
- hideOnClickOutside: true
135
- }, function (_ref, containerRef) {
136
- var _withClassPrefix;
137
-
138
- var open = _ref.open;
139
- var classes = merge(className, withClassPrefix((_withClassPrefix = {}, _withClassPrefix["placement-" + kebabCase(placementPolyfill(placement))] = !!placement, _withClassPrefix.disabled = disabled, _withClassPrefix.open = open, _withClassPrefix)));
140
- return /*#__PURE__*/React.createElement(Component, {
141
- ref: mergeRefs(ref, containerRef),
142
- className: classes,
143
- style: style
144
- }, /*#__PURE__*/React.createElement(Disclosure.Button, null, function (buttonProps, buttonRef) {
145
- return /*#__PURE__*/React.createElement(DropdownToggle, _extends({
146
- ref: buttonRef,
147
- as: toggleAs,
148
- className: toggleClassName,
149
- placement: placement,
150
- disabled: disabled
151
- }, omit(buttonProps, ['open']), toggleProps), title);
152
- }), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref2, elementRef) {
153
- var open = _ref2.open;
154
- var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
155
- return /*#__PURE__*/React.createElement("ul", {
156
- ref: elementRef,
157
- className: menuClassName,
158
- style: menuStyle,
159
- hidden: !open
160
- }, children);
161
- }));
162
- }));
106
+ }, props));
163
107
  }
164
108
 
165
109
  var renderMenuButton = function renderMenuButton(menuButtonProps, menuButtonRef) {
@@ -172,25 +116,6 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
172
116
  }, omit(menuButtonProps, ['open']), omit(toggleProps, ['data-testid'])), title);
173
117
  };
174
118
 
175
- if (parentMenu) {
176
- renderMenuButton = function renderMenuButton(menuButtonProps, buttonRef) {
177
- return /*#__PURE__*/React.createElement(MenuItem, {
178
- disabled: disabled
179
- }, function (_ref3, menuitemRef) {
180
- var active = _ref3.active,
181
- menuitemProps = _objectWithoutPropertiesLoose(_ref3, ["active"]);
182
-
183
- return /*#__PURE__*/React.createElement(DropdownToggle, _extends({
184
- ref: mergeRefs(buttonRef, menuitemRef),
185
- as: toggleAs,
186
- className: mergeNavItemClassNames(toggleClassName, withNavItemClassPrefix({
187
- focus: active
188
- }))
189
- }, menuButtonProps, omit(menuitemProps, ['onClick']), omit(toggleProps, 'data-testid')), title);
190
- });
191
- };
192
- }
193
-
194
119
  return /*#__PURE__*/React.createElement(DropdownContext.Provider, {
195
120
  value: dropdownContextValue
196
121
  }, /*#__PURE__*/React.createElement(Menu, {
@@ -199,25 +124,20 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
199
124
  menuButtonText: title,
200
125
  renderMenuButton: renderMenuButton,
201
126
  openMenuOn: menuButtonTriggers,
202
- renderMenuPopup: function renderMenuPopup(_ref4, popupRef) {
203
- var open = _ref4.open,
204
- popupProps = _objectWithoutPropertiesLoose(_ref4, ["open"]);
205
-
206
- var menuClassName = mergeMenuClassName(className, withMenuClassPrefix({})); // When inside a collapsed <Sidenav>, render a header in menu
127
+ renderMenuPopup: function renderMenuPopup(_ref, popupRef) {
128
+ var open = _ref.open,
129
+ popupProps = _objectWithoutPropertiesLoose(_ref, ["open"]);
207
130
 
208
- var showHeader = !!sidenav;
131
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix({}));
209
132
  return /*#__PURE__*/React.createElement("ul", _extends({
210
133
  ref: popupRef,
211
134
  className: menuClassName,
212
135
  style: menuStyle,
213
136
  hidden: !open
214
- }, popupProps), showHeader && /*#__PURE__*/React.createElement("div", {
215
- className: prefix('header')
216
- }, title), children);
137
+ }, popupProps), children);
217
138
  },
218
- onToggleMenu: function onToggleMenu(open, event) {
139
+ onToggleMenu: function onToggleMenu(open) {
219
140
  onToggle === null || onToggle === void 0 ? void 0 : onToggle(open);
220
- sidenav === null || sidenav === void 0 ? void 0 : sidenav.onOpenChange(eventKey, event);
221
141
 
222
142
  if (open) {
223
143
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
@@ -225,13 +145,13 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
225
145
  onClose === null || onClose === void 0 ? void 0 : onClose();
226
146
  }
227
147
  }
228
- }, function (_ref5, menuContainerRef) {
229
- var _withClassPrefix2;
148
+ }, function (_ref2, menuContainerRef) {
149
+ var _withClassPrefix;
230
150
 
231
- var open = _ref5.open,
232
- menuContainer = _objectWithoutPropertiesLoose(_ref5, ["open"]);
151
+ var open = _ref2.open,
152
+ menuContainer = _objectWithoutPropertiesLoose(_ref2, ["open"]);
233
153
 
234
- var classes = merge(className, withClassPrefix((_withClassPrefix2 = {}, _withClassPrefix2["placement-" + kebabCase(placementPolyfill(placement))] = !!placement, _withClassPrefix2.disabled = disabled, _withClassPrefix2.open = open, _withClassPrefix2.submenu = !!parentMenu, _withClassPrefix2['selected-within'] = hasSelectedItem, _withClassPrefix2)));
154
+ var classes = merge(className, withClassPrefix((_withClassPrefix = {}, _withClassPrefix["placement-" + kebabCase(placementPolyfill(placement))] = !!placement, _withClassPrefix.disabled = disabled, _withClassPrefix.open = open, _withClassPrefix['selected-within'] = hasSelectedItem, _withClassPrefix)));
235
155
  return /*#__PURE__*/React.createElement(Component, _extends({
236
156
  ref: mergeRefs(ref, menuContainerRef),
237
157
  className: classes
@@ -2,19 +2,17 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  import React, { useCallback, useContext, useEffect } from 'react';
4
4
  import PropTypes from 'prop-types';
5
- import { SidenavContext } from '../Sidenav/Sidenav';
6
5
  import deprecatePropType from '../utils/deprecatePropType';
7
6
  import MenuItem from '../Menu/MenuItem';
8
7
  import DropdownContext from './DropdownContext';
9
8
  import isNil from 'lodash/isNil';
10
- import { createChainedFunction, mergeRefs, shallowEqual, useClassNames } from '../utils';
11
- import { NavbarContext } from '../Navbar/Navbar';
12
- import SidenavDropdownItem from '../Sidenav/SidenavDropdownItem';
13
- import DisclosureContext, { DisclosureActionTypes } from '../Disclosure/DisclosureContext';
9
+ import { mergeRefs, shallowEqual, useClassNames } from '../utils';
14
10
  import NavContext from '../Nav/NavContext';
15
11
  import useInternalId from '../utils/useInternalId';
16
12
  import { DropdownActionType } from './DropdownState';
17
13
  import { useRenderDropdownItem } from './useRenderDropdownItem';
14
+ import warnOnce from '../utils/warnOnce';
15
+ import Nav from '../Nav';
18
16
 
19
17
  /**
20
18
  * The <Dropdown.Item> API
@@ -52,21 +50,7 @@ var DropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
52
50
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(eventKey, event);
53
51
  dropdown === null || dropdown === void 0 ? void 0 : (_dropdown$onSelect = dropdown.onSelect) === null || _dropdown$onSelect === void 0 ? void 0 : _dropdown$onSelect.call(dropdown, eventKey, event);
54
52
  }, [onSelect, eventKey, dropdown]);
55
- var sidenav = useContext(SidenavContext);
56
- var navbar = useContext(NavbarContext);
57
- var disclosure = useContext(DisclosureContext);
58
-
59
- var _ref = disclosure !== null && disclosure !== void 0 ? disclosure : [],
60
- dispatchDisclosure = _ref[1];
61
-
62
- var handleClickNavbarDropdownItem = useCallback(function (event) {
63
- dispatchDisclosure === null || dispatchDisclosure === void 0 ? void 0 : dispatchDisclosure({
64
- type: DisclosureActionTypes.Hide,
65
- cascade: true
66
- });
67
- handleSelectItem === null || handleSelectItem === void 0 ? void 0 : handleSelectItem(event);
68
- }, [dispatchDisclosure, handleSelectItem]);
69
- var selected = activeProp || !isNil(eventKey) && (shallowEqual(dropdown === null || dropdown === void 0 ? void 0 : dropdown.activeKey, eventKey) || shallowEqual(nav === null || nav === void 0 ? void 0 : nav.activeKey, eventKey));
53
+ var selected = activeProp || !isNil(eventKey) && shallowEqual(dropdown === null || dropdown === void 0 ? void 0 : dropdown.activeKey, eventKey);
70
54
  var dispatch = dropdown === null || dropdown === void 0 ? void 0 : dropdown.dispatch;
71
55
  useEffect(function () {
72
56
  if (dispatch) {
@@ -89,10 +73,12 @@ var DropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
89
73
  };
90
74
  }
91
75
  }, [internalId, selected, dispatch]);
92
- var renderDropdownItem = useRenderDropdownItem(Component);
76
+ var renderDropdownItem = useRenderDropdownItem(Component); // If using <Dropdown.Item> within <Nav>
77
+ // Suggest <Nav.Item>
93
78
 
94
- if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
95
- return /*#__PURE__*/React.createElement(SidenavDropdownItem, _extends({
79
+ if (nav) {
80
+ warnOnce('Usage of <Dropdown.Item> within <Nav> is deprecated. Replace with <Nav.Item> within <Nav.Menu>.');
81
+ return /*#__PURE__*/React.createElement(Nav.Item, _extends({
96
82
  ref: ref
97
83
  }, props));
98
84
  }
@@ -113,42 +99,14 @@ var DropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
113
99
  }, restProps));
114
100
  }
115
101
 
116
- if (navbar) {
117
- var classes = merge(className, withClassPrefix({
118
- 'with-icon': icon,
119
- disabled: disabled,
120
- divider: divider,
121
- panel: panel,
122
- active: selected
123
- }));
124
- var dataAttributes = {
125
- 'data-event-key': eventKey
126
- };
127
-
128
- if (!isNil(eventKey) && typeof eventKey !== 'string') {
129
- dataAttributes['data-event-key-type'] = typeof eventKey;
130
- }
131
-
132
- return renderDropdownItem(_extends({
133
- ref: ref,
134
- className: classes,
135
- 'aria-current': selected || undefined
136
- }, dataAttributes, restProps, {
137
- onClick: createChainedFunction(handleClickNavbarDropdownItem, restProps.onClick),
138
- children: /*#__PURE__*/React.createElement(React.Fragment, null, icon && /*#__PURE__*/React.cloneElement(icon, {
139
- className: prefix('menu-icon')
140
- }), children)
141
- }));
142
- }
143
-
144
102
  return /*#__PURE__*/React.createElement(MenuItem, {
145
103
  selected: selected,
146
104
  disabled: disabled,
147
105
  onActivate: handleSelectItem
148
- }, function (_ref2, menuitemRef) {
149
- var selected = _ref2.selected,
150
- active = _ref2.active,
151
- menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
106
+ }, function (_ref, menuitemRef) {
107
+ var selected = _ref.selected,
108
+ active = _ref.active,
109
+ menuitem = _objectWithoutPropertiesLoose(_ref, ["selected", "active"]);
152
110
 
153
111
  var classes = merge(className, withClassPrefix({
154
112
  'with-icon': icon,
@@ -2,7 +2,7 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
4
 
5
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
5
+ var _templateObject, _templateObject2;
6
6
 
7
7
  import React, { useCallback, useContext, useMemo } from 'react';
8
8
  import omit from 'lodash/omit';
@@ -10,15 +10,14 @@ import Menu from '../Menu/Menu';
10
10
  import MenuItem from '../Menu/MenuItem';
11
11
  import { mergeRefs, useClassNames } from '../utils';
12
12
  import PropTypes from 'prop-types';
13
- import { SidenavContext } from '../Sidenav/Sidenav';
14
13
  import AngleLeft from '@rsuite/icons/legacy/AngleLeft';
15
14
  import AngleRight from '@rsuite/icons/legacy/AngleRight';
16
15
  import useCustom from '../utils/useCustom';
17
16
  import DropdownContext from './DropdownContext';
18
- import { NavbarContext } from '../Navbar';
19
17
  import Menubar from '../Menu/Menubar';
20
- import SidenavDropdownMenu from '../Sidenav/SidenavDropdownMenu';
21
- import Disclosure from '../Disclosure';
18
+ import Nav from '../Nav';
19
+ import NavContext from '../Nav/NavContext';
20
+ import warnOnce from '../utils/warnOnce';
22
21
 
23
22
  /**
24
23
  * The <Dropdown.Menu> API
@@ -49,9 +48,8 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
49
48
  children = props.children,
50
49
  rest = _objectWithoutPropertiesLoose(props, ["onToggle", "eventKey", "title", "activeKey", "onSelect", "classPrefix", "children"]);
51
50
 
51
+ var nav = useContext(NavContext);
52
52
  var dropdown = useContext(DropdownContext);
53
- var sidenav = useContext(SidenavContext);
54
- var withinNavbar = Boolean(useContext(NavbarContext));
55
53
 
56
54
  var _useCustom = useCustom('DropdownMenu'),
57
55
  rtl = _useCustom.rtl;
@@ -79,9 +77,18 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
79
77
  activeKey: activeKey,
80
78
  onSelect: onSelect
81
79
  };
82
- }, [activeKey, onSelect]); // <Dropdown.Menu> is used outside of <Dropdown>
80
+ }, [activeKey, onSelect]); // If rendered within a <Nav>
81
+ // Suggest <Nav.Menu>
82
+
83
+ if (nav) {
84
+ warnOnce('Usage of <Dropdown.Menu> within <Nav> is deprecated. Replace with <Nav.Menu>');
85
+ return /*#__PURE__*/React.createElement(Nav.Menu, _extends({
86
+ ref: ref
87
+ }, props));
88
+ } // <Dropdown.Menu> is used outside of <Dropdown>
83
89
  // renders a vertical `menubar`
84
90
 
91
+
85
92
  if (!dropdown) {
86
93
  var classes = merge(props.className, withClassPrefix());
87
94
  return /*#__PURE__*/React.createElement(DropdownContext.Provider, {
@@ -94,10 +101,6 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
94
101
  className: classes
95
102
  }, menubar, rest), children);
96
103
  }));
97
- }
98
-
99
- if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
100
- return /*#__PURE__*/React.createElement(SidenavDropdownMenu, omit(props, 'classPrefix'));
101
104
  } // Parent menu exists. This is a submenu.
102
105
  // Should render a `menuitem` that controls this submenu.
103
106
 
@@ -108,69 +111,21 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
108
111
  disabled = _omit.disabled,
109
112
  menuProps = _objectWithoutPropertiesLoose(_omit, ["icon", "className", "disabled"]);
110
113
 
111
- var Icon = rtl ? AngleLeft : AngleRight; // Renders a disclosure when used within <Navbar>
112
-
113
- if (withinNavbar) {
114
- return /*#__PURE__*/React.createElement(Disclosure, {
115
- hideOnClickOutside: true,
116
- trigger: ['click', 'mouseover']
117
- }, function (_ref, containerRef) {
118
- var open = _ref.open,
119
- props = _objectWithoutPropertiesLoose(_ref, ["open"]);
120
-
121
- var classes = mergeItemClassNames(className, withItemClassPrefix({
122
- disabled: disabled,
123
- open: open,
124
- submenu: true
125
- }));
126
- return /*#__PURE__*/React.createElement("li", _extends({
127
- ref: mergeRefs(ref, containerRef),
128
- className: classes
129
- }, props), /*#__PURE__*/React.createElement(Disclosure.Button, null, function (_ref2, buttonRef) {
130
- var open = _ref2.open,
131
- buttonProps = _objectWithoutPropertiesLoose(_ref2, ["open"]);
132
-
133
- var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))), withItemClassPrefix({
134
- 'with-icon': icon,
135
- open: open,
136
- disabled: disabled
137
- }));
138
- return /*#__PURE__*/React.createElement("div", _extends({
139
- ref: mergeRefs(buttonRef, buttonRef),
140
- className: classes,
141
- "data-event-key": eventKey,
142
- "data-event-key-type": typeof eventKey
143
- }, buttonProps), icon && /*#__PURE__*/React.cloneElement(icon, {
144
- className: prefix('menu-icon')
145
- }), title, /*#__PURE__*/React.createElement(Icon, {
146
- className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
147
- }));
148
- }), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref3, elementRef) {
149
- var open = _ref3.open;
150
- var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
151
- return /*#__PURE__*/React.createElement("ul", _extends({
152
- ref: elementRef,
153
- className: menuClassName,
154
- hidden: !open
155
- }, menuProps), children);
156
- }));
157
- });
158
- }
159
-
114
+ var Icon = rtl ? AngleLeft : AngleRight;
160
115
  return /*#__PURE__*/React.createElement(Menu, {
161
116
  openMenuOn: ['mouseover', 'click'],
162
- renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
163
- var open = _ref4.open,
164
- menuButtonProps = _objectWithoutPropertiesLoose(_ref4, ["open"]);
117
+ renderMenuButton: function renderMenuButton(_ref, buttonRef) {
118
+ var open = _ref.open,
119
+ menuButtonProps = _objectWithoutPropertiesLoose(_ref, ["open"]);
165
120
 
166
121
  return /*#__PURE__*/React.createElement(MenuItem, {
167
122
  disabled: disabled
168
- }, function (_ref5, menuitemRef) {
169
- var selected = _ref5.selected,
170
- active = _ref5.active,
171
- menuitem = _objectWithoutPropertiesLoose(_ref5, ["selected", "active"]);
123
+ }, function (_ref2, menuitemRef) {
124
+ var selected = _ref2.selected,
125
+ active = _ref2.active,
126
+ menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
172
127
 
173
- var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["toggle"]))), withItemClassPrefix({
128
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))), withItemClassPrefix({
174
129
  'with-icon': icon,
175
130
  open: open,
176
131
  active: selected,
@@ -185,13 +140,13 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
185
140
  }, menuitem, omit(menuButtonProps, ['role'])), icon && /*#__PURE__*/React.cloneElement(icon, {
186
141
  className: prefix('menu-icon')
187
142
  }), title, /*#__PURE__*/React.createElement(Icon, {
188
- className: prefix(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["toggle-icon"])))
143
+ className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
189
144
  }));
190
145
  });
191
146
  },
192
- renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
193
- var open = _ref6.open,
194
- popupProps = _objectWithoutPropertiesLoose(_ref6, ["open"]);
147
+ renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
148
+ var open = _ref3.open,
149
+ popupProps = _objectWithoutPropertiesLoose(_ref3, ["open"]);
195
150
 
196
151
  var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
197
152
  return /*#__PURE__*/React.createElement("ul", _extends({
@@ -201,9 +156,9 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
201
156
  }, popupProps, menuProps), children);
202
157
  },
203
158
  onToggleMenu: handleToggleSubmenu
204
- }, function (_ref7, menuContainerRef) {
205
- var open = _ref7.open,
206
- menuContainer = _objectWithoutPropertiesLoose(_ref7, ["open"]);
159
+ }, function (_ref4, menuContainerRef) {
160
+ var open = _ref4.open,
161
+ menuContainer = _objectWithoutPropertiesLoose(_ref4, ["open"]);
207
162
 
208
163
  var classes = mergeItemClassNames(className, withItemClassPrefix({
209
164
  disabled: disabled,
@@ -1,12 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useContext } from 'react';
3
+ import React from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import Button from '../Button';
6
6
  import { useClassNames } from '../utils';
7
7
  import useToggleCaret from '../utils/useToggleCaret';
8
- import { SidenavContext } from '../Sidenav/Sidenav';
9
- import NavContext from '../Nav/NavContext';
10
8
  var DropdownToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
11
9
  var _props$as = props.as,
12
10
  Component = _props$as === void 0 ? Button : _props$as,
@@ -21,11 +19,6 @@ var DropdownToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
21
19
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
22
20
  rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "renderToggle", "children", "icon", "noCaret", "placement"]);
23
21
 
24
- var sidenav = useContext(SidenavContext);
25
-
26
- var _useContext = useContext(NavContext),
27
- withinNav = _useContext.withinNav;
28
-
29
22
  var _useClassNames = useClassNames(classPrefix),
30
23
  prefix = _useClassNames.prefix,
31
24
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -33,13 +26,10 @@ var DropdownToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
33
26
 
34
27
  var classes = merge(className, withClassPrefix({
35
28
  'no-caret': noCaret
36
- }));
37
- var inSidenav = !!sidenav; // Caret icon is down by default, when Dropdown is used in Sidenav.
29
+ })); // Caret icon is down by default, when Dropdown is used in Sidenav.
38
30
 
39
- var Caret = useToggleCaret(inSidenav ? 'bottomStart' : placement);
40
- var toggle = /*#__PURE__*/React.createElement(Component, _extends({
41
- appearance: withinNav ? 'subtle' : undefined
42
- }, rest, {
31
+ var Caret = useToggleCaret(placement);
32
+ var toggle = /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
43
33
  ref: ref,
44
34
  className: classes
45
35
  }), icon && /*#__PURE__*/React.cloneElement(icon, {
@@ -33,6 +33,7 @@ export interface MenuHandle {
33
33
  }
34
34
  /**
35
35
  * Headless ARIA `menu`
36
+ * @private
36
37
  */
37
38
  declare function Menu({ disabled, children, openMenuOn, defaultOpen, open: openProp, menuButtonText, renderMenuButton, renderMenuPopup, onToggleMenu }: MenuProps & React.HTMLAttributes<HTMLUListElement>): React.ReactElement<React.HTMLAttributes<HTMLDivElement>, string | React.JSXElementConstructor<any>>;
38
39
  declare namespace Menu {
package/esm/Menu/Menu.js CHANGED
@@ -13,6 +13,7 @@ import { isFocusableElement } from '../utils/dom';
13
13
  var defaultOpenMenuOn = ['click'];
14
14
  /**
15
15
  * Headless ARIA `menu`
16
+ * @private
16
17
  */
17
18
 
18
19
  function Menu(_ref) {
@@ -16,6 +16,7 @@ export interface MenuitemRenderProps {
16
16
  }
17
17
  /**
18
18
  * Headless ARIA `menuitem`
19
+ * @private
19
20
  */
20
21
  declare function MenuItem(props: MenuItemProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
21
22
  declare namespace MenuItem {
@@ -6,6 +6,7 @@ import MenuContext, { MenuActionTypes, MoveFocusTo } from './MenuContext';
6
6
 
7
7
  /**
8
8
  * Headless ARIA `menuitem`
9
+ * @private
9
10
  */
10
11
  function MenuItem(props) {
11
12
  var children = props.children,