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.
Files changed (181) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/Nav/styles/index.less +7 -1
  3. package/Navbar/styles/index.less +6 -1
  4. package/Sidenav/styles/index.less +47 -9
  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/Form/Form.js +21 -7
  13. package/cjs/Form/FormContext.d.ts +18 -13
  14. package/cjs/Form/useSchemaModel.d.ts +9 -0
  15. package/cjs/Form/useSchemaModel.js +46 -0
  16. package/cjs/FormControl/FormControl.d.ts +3 -0
  17. package/cjs/FormControl/FormControl.js +9 -2
  18. package/cjs/FormControl/useRegisterModel.d.ts +4 -0
  19. package/cjs/FormControl/useRegisterModel.js +20 -0
  20. package/cjs/Menu/Menu.d.ts +1 -0
  21. package/cjs/Menu/Menu.js +1 -0
  22. package/cjs/Menu/MenuItem.d.ts +1 -0
  23. package/cjs/Menu/MenuItem.js +1 -0
  24. package/cjs/Menu/Menubar.d.ts +3 -0
  25. package/cjs/Menu/Menubar.js +4 -0
  26. package/cjs/Nav/Nav.d.ts +7 -2
  27. package/cjs/Nav/Nav.js +105 -5
  28. package/cjs/Nav/NavContext.d.ts +2 -8
  29. package/cjs/Nav/NavContext.js +1 -7
  30. package/cjs/Nav/NavDropdown.d.ts +71 -0
  31. package/cjs/Nav/NavDropdown.js +193 -0
  32. package/cjs/Nav/NavDropdownItem.d.ts +39 -0
  33. package/cjs/Nav/NavDropdownItem.js +141 -0
  34. package/cjs/Nav/NavDropdownMenu.d.ts +26 -0
  35. package/cjs/Nav/NavDropdownMenu.js +156 -0
  36. package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
  37. package/cjs/Nav/NavDropdownToggle.js +74 -0
  38. package/cjs/Nav/NavItem.d.ts +2 -0
  39. package/cjs/Nav/NavItem.js +13 -26
  40. package/cjs/Nav/NavMenu.d.ts +38 -0
  41. package/cjs/Nav/NavMenu.js +122 -0
  42. package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
  43. package/cjs/Navbar/NavbarDropdown.js +147 -0
  44. package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
  45. package/cjs/Navbar/NavbarDropdownItem.js +149 -0
  46. package/cjs/Navbar/NavbarDropdownMenu.d.ts +37 -0
  47. package/cjs/Navbar/NavbarDropdownMenu.js +155 -0
  48. package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
  49. package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
  50. package/cjs/Navbar/NavbarItem.d.ts +5 -2
  51. package/cjs/Navbar/NavbarItem.js +10 -4
  52. package/cjs/Overlay/OverlayTrigger.d.ts +4 -4
  53. package/cjs/Picker/utils.js +22 -15
  54. package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  55. package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
  56. package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  57. package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
  58. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  59. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
  60. package/cjs/Sidenav/Sidenav.d.ts +8 -2
  61. package/cjs/Sidenav/Sidenav.js +1 -2
  62. package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
  63. package/cjs/Sidenav/SidenavDropdown.js +144 -73
  64. package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
  65. package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
  66. package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  67. package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
  68. package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  69. package/cjs/Sidenav/SidenavDropdownToggle.js +72 -0
  70. package/cjs/Sidenav/SidenavItem.d.ts +3 -0
  71. package/cjs/Sidenav/SidenavItem.js +22 -14
  72. package/cjs/Sidenav/SidenavToggle.d.ts +5 -1
  73. package/cjs/Sidenav/SidenavToggle.js +25 -9
  74. package/cjs/Whisper/Whisper.d.ts +3 -5
  75. package/cjs/Whisper/test/Whisper.test.d.ts +1 -0
  76. package/cjs/Whisper/test/Whisper.test.js +23 -0
  77. package/cjs/index.d.ts +1 -1
  78. package/cjs/utils/deprecateComponent.js +4 -6
  79. package/cjs/utils/deprecatePropType.d.ts +1 -5
  80. package/cjs/utils/deprecatePropType.js +7 -14
  81. package/cjs/utils/treeUtils.js +8 -10
  82. package/cjs/utils/useInternalId.d.ts +1 -1
  83. package/cjs/utils/useInternalId.js +2 -2
  84. package/cjs/utils/warnOnce.d.ts +9 -0
  85. package/cjs/utils/warnOnce.js +22 -0
  86. package/dist/rsuite-rtl.css +81 -15
  87. package/dist/rsuite-rtl.min.css +1 -1
  88. package/dist/rsuite-rtl.min.css.map +1 -1
  89. package/dist/rsuite.css +81 -15
  90. package/dist/rsuite.js +303 -28
  91. package/dist/rsuite.js.map +1 -1
  92. package/dist/rsuite.min.css +1 -1
  93. package/dist/rsuite.min.css.map +1 -1
  94. package/dist/rsuite.min.js +1 -1
  95. package/dist/rsuite.min.js.map +1 -1
  96. package/esm/Cascader/DropdownMenu.js +8 -3
  97. package/esm/Disclosure/Disclosure.d.ts +1 -1
  98. package/esm/Disclosure/DisclosureContext.d.ts +1 -1
  99. package/esm/Dropdown/Dropdown.js +25 -105
  100. package/esm/Dropdown/DropdownItem.js +13 -55
  101. package/esm/Dropdown/DropdownMenu.js +31 -76
  102. package/esm/Dropdown/DropdownToggle.js +4 -14
  103. package/esm/Form/Form.js +19 -7
  104. package/esm/Form/FormContext.d.ts +18 -13
  105. package/esm/Form/useSchemaModel.d.ts +9 -0
  106. package/esm/Form/useSchemaModel.js +39 -0
  107. package/esm/FormControl/FormControl.d.ts +3 -0
  108. package/esm/FormControl/FormControl.js +9 -6
  109. package/esm/FormControl/useRegisterModel.d.ts +4 -0
  110. package/esm/FormControl/useRegisterModel.js +14 -0
  111. package/esm/Menu/Menu.d.ts +1 -0
  112. package/esm/Menu/Menu.js +1 -0
  113. package/esm/Menu/MenuItem.d.ts +1 -0
  114. package/esm/Menu/MenuItem.js +1 -0
  115. package/esm/Menu/Menubar.d.ts +3 -0
  116. package/esm/Menu/Menubar.js +4 -0
  117. package/esm/Nav/Nav.d.ts +7 -2
  118. package/esm/Nav/Nav.js +96 -5
  119. package/esm/Nav/NavContext.d.ts +2 -8
  120. package/esm/Nav/NavContext.js +1 -6
  121. package/esm/Nav/NavDropdown.d.ts +71 -0
  122. package/esm/Nav/NavDropdown.js +170 -0
  123. package/esm/Nav/NavDropdownItem.d.ts +39 -0
  124. package/esm/Nav/NavDropdownItem.js +123 -0
  125. package/esm/Nav/NavDropdownMenu.d.ts +26 -0
  126. package/esm/Nav/NavDropdownMenu.js +138 -0
  127. package/esm/Nav/NavDropdownToggle.d.ts +21 -0
  128. package/esm/Nav/NavDropdownToggle.js +57 -0
  129. package/esm/Nav/NavItem.d.ts +2 -0
  130. package/esm/Nav/NavItem.js +13 -21
  131. package/esm/Nav/NavMenu.d.ts +38 -0
  132. package/esm/Nav/NavMenu.js +98 -0
  133. package/esm/Navbar/NavbarDropdown.d.ts +57 -0
  134. package/esm/Navbar/NavbarDropdown.js +124 -0
  135. package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
  136. package/esm/Navbar/NavbarDropdownItem.js +128 -0
  137. package/esm/Navbar/NavbarDropdownMenu.d.ts +37 -0
  138. package/esm/Navbar/NavbarDropdownMenu.js +135 -0
  139. package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
  140. package/esm/Navbar/NavbarDropdownToggle.js +55 -0
  141. package/esm/Navbar/NavbarItem.d.ts +5 -2
  142. package/esm/Navbar/NavbarItem.js +11 -4
  143. package/esm/Overlay/OverlayTrigger.d.ts +4 -4
  144. package/esm/Picker/utils.js +22 -14
  145. package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  146. package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
  147. package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  148. package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
  149. package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  150. package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
  151. package/esm/Sidenav/Sidenav.d.ts +8 -2
  152. package/esm/Sidenav/Sidenav.js +1 -2
  153. package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
  154. package/esm/Sidenav/SidenavDropdown.js +145 -75
  155. package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
  156. package/esm/Sidenav/SidenavDropdownItem.js +87 -71
  157. package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  158. package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
  159. package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  160. package/esm/Sidenav/SidenavDropdownToggle.js +55 -0
  161. package/esm/Sidenav/SidenavItem.d.ts +3 -0
  162. package/esm/Sidenav/SidenavItem.js +23 -15
  163. package/esm/Sidenav/SidenavToggle.d.ts +5 -1
  164. package/esm/Sidenav/SidenavToggle.js +22 -9
  165. package/esm/Whisper/Whisper.d.ts +3 -5
  166. package/esm/Whisper/test/Whisper.test.d.ts +1 -0
  167. package/esm/Whisper/test/Whisper.test.js +16 -0
  168. package/esm/index.d.ts +1 -1
  169. package/esm/utils/deprecateComponent.js +3 -4
  170. package/esm/utils/deprecatePropType.d.ts +1 -5
  171. package/esm/utils/deprecatePropType.js +3 -13
  172. package/esm/utils/treeUtils.js +8 -10
  173. package/esm/utils/useInternalId.d.ts +1 -1
  174. package/esm/utils/useInternalId.js +2 -2
  175. package/esm/utils/warnOnce.d.ts +9 -0
  176. package/esm/utils/warnOnce.js +18 -0
  177. package/package.json +1 -1
  178. package/styles/color-modes/dark.less +3 -0
  179. package/styles/color-modes/high-contrast.less +3 -0
  180. package/styles/color-modes/light.less +3 -0
  181. package/styles/variables.less +3 -0
@@ -25,8 +25,6 @@ var _utils = require("../utils");
25
25
 
26
26
  var _propTypes = _interopRequireDefault(require("prop-types"));
27
27
 
28
- var _Sidenav = require("../Sidenav/Sidenav");
29
-
30
28
  var _AngleLeft = _interopRequireDefault(require("@rsuite/icons/legacy/AngleLeft"));
31
29
 
32
30
  var _AngleRight = _interopRequireDefault(require("@rsuite/icons/legacy/AngleRight"));
@@ -35,15 +33,15 @@ var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
35
33
 
36
34
  var _DropdownContext = _interopRequireDefault(require("./DropdownContext"));
37
35
 
38
- var _Navbar = require("../Navbar");
39
-
40
36
  var _Menubar = _interopRequireDefault(require("../Menu/Menubar"));
41
37
 
42
- var _SidenavDropdownMenu = _interopRequireDefault(require("../Sidenav/SidenavDropdownMenu"));
38
+ var _Nav = _interopRequireDefault(require("../Nav"));
39
+
40
+ var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
43
41
 
44
- var _Disclosure = _interopRequireDefault(require("../Disclosure"));
42
+ var _warnOnce = _interopRequireDefault(require("../utils/warnOnce"));
45
43
 
46
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
44
+ var _templateObject, _templateObject2;
47
45
 
48
46
  /**
49
47
  * The <Dropdown.Menu> API
@@ -73,9 +71,8 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
73
71
  classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
74
72
  children = props.children,
75
73
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "activeKey", "onSelect", "classPrefix", "children"]);
74
+ var nav = (0, _react.useContext)(_NavContext.default);
76
75
  var dropdown = (0, _react.useContext)(_DropdownContext.default);
77
- var sidenav = (0, _react.useContext)(_Sidenav.SidenavContext);
78
- var withinNavbar = Boolean((0, _react.useContext)(_Navbar.NavbarContext));
79
76
 
80
77
  var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
81
78
  rtl = _useCustom.rtl;
@@ -103,9 +100,18 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
103
100
  activeKey: activeKey,
104
101
  onSelect: onSelect
105
102
  };
106
- }, [activeKey, onSelect]); // <Dropdown.Menu> is used outside of <Dropdown>
103
+ }, [activeKey, onSelect]); // If rendered within a <Nav>
104
+ // Suggest <Nav.Menu>
105
+
106
+ if (nav) {
107
+ (0, _warnOnce.default)('Usage of <Dropdown.Menu> within <Nav> is deprecated. Replace with <Nav.Menu>');
108
+ return /*#__PURE__*/_react.default.createElement(_Nav.default.Menu, (0, _extends2.default)({
109
+ ref: ref
110
+ }, props));
111
+ } // <Dropdown.Menu> is used outside of <Dropdown>
107
112
  // renders a vertical `menubar`
108
113
 
114
+
109
115
  if (!dropdown) {
110
116
  var classes = merge(props.className, withClassPrefix());
111
117
  return /*#__PURE__*/_react.default.createElement(_DropdownContext.default.Provider, {
@@ -118,10 +124,6 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
118
124
  className: classes
119
125
  }, menubar, rest), children);
120
126
  }));
121
- }
122
-
123
- if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
124
- return /*#__PURE__*/_react.default.createElement(_SidenavDropdownMenu.default, (0, _omit2.default)(props, 'classPrefix'));
125
127
  } // Parent menu exists. This is a submenu.
126
128
  // Should render a `menuitem` that controls this submenu.
127
129
 
@@ -132,65 +134,19 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
132
134
  disabled = _omit.disabled,
133
135
  menuProps = (0, _objectWithoutPropertiesLoose2.default)(_omit, ["icon", "className", "disabled"]);
134
136
 
135
- var Icon = rtl ? _AngleLeft.default : _AngleRight.default; // Renders a disclosure when used within <Navbar>
136
-
137
- if (withinNavbar) {
138
- return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
139
- hideOnClickOutside: true,
140
- trigger: ['click', 'mouseover']
141
- }, function (_ref, containerRef) {
142
- var open = _ref.open,
143
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
144
- var classes = mergeItemClassNames(className, withItemClassPrefix({
145
- disabled: disabled,
146
- open: open,
147
- submenu: true
148
- }));
149
- return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
150
- ref: (0, _utils.mergeRefs)(ref, containerRef),
151
- className: classes
152
- }, props), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (_ref2, buttonRef) {
153
- var open = _ref2.open,
154
- buttonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
155
- var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
156
- 'with-icon': icon,
157
- open: open,
158
- disabled: disabled
159
- }));
160
- return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
161
- ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
162
- className: classes,
163
- "data-event-key": eventKey,
164
- "data-event-key-type": typeof eventKey
165
- }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
166
- className: prefix('menu-icon')
167
- }), title, /*#__PURE__*/_react.default.createElement(Icon, {
168
- className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
169
- }));
170
- }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Content, null, function (_ref3, elementRef) {
171
- var open = _ref3.open;
172
- var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
173
- return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
174
- ref: elementRef,
175
- className: menuClassName,
176
- hidden: !open
177
- }, menuProps), children);
178
- }));
179
- });
180
- }
181
-
137
+ var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
182
138
  return /*#__PURE__*/_react.default.createElement(_Menu.default, {
183
139
  openMenuOn: ['mouseover', 'click'],
184
- renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
185
- var open = _ref4.open,
186
- menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
140
+ renderMenuButton: function renderMenuButton(_ref, buttonRef) {
141
+ var open = _ref.open,
142
+ menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
187
143
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
188
144
  disabled: disabled
189
- }, function (_ref5, menuitemRef) {
190
- var selected = _ref5.selected,
191
- active = _ref5.active,
192
- menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref5, ["selected", "active"]);
193
- var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
145
+ }, function (_ref2, menuitemRef) {
146
+ var selected = _ref2.selected,
147
+ active = _ref2.active,
148
+ menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["selected", "active"]);
149
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
194
150
  'with-icon': icon,
195
151
  open: open,
196
152
  active: selected,
@@ -205,13 +161,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
205
161
  }, menuitem, (0, _omit2.default)(menuButtonProps, ['role'])), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
206
162
  className: prefix('menu-icon')
207
163
  }), title, /*#__PURE__*/_react.default.createElement(Icon, {
208
- className: prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
164
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
209
165
  }));
210
166
  });
211
167
  },
212
- renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
213
- var open = _ref6.open,
214
- popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref6, ["open"]);
168
+ renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
169
+ var open = _ref3.open,
170
+ popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["open"]);
215
171
  var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
216
172
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
217
173
  ref: popupRef,
@@ -220,9 +176,9 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
220
176
  }, popupProps, menuProps), children);
221
177
  },
222
178
  onToggleMenu: handleToggleSubmenu
223
- }, function (_ref7, menuContainerRef) {
224
- var open = _ref7.open,
225
- menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref7, ["open"]);
179
+ }, function (_ref4, menuContainerRef) {
180
+ var open = _ref4.open,
181
+ menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
226
182
  var classes = mergeItemClassNames(className, withItemClassPrefix({
227
183
  disabled: disabled,
228
184
  open: open,
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  exports.__esModule = true;
@@ -11,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
9
 
12
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
11
 
14
- var _react = _interopRequireWildcard(require("react"));
12
+ var _react = _interopRequireDefault(require("react"));
15
13
 
16
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
15
 
@@ -21,10 +19,6 @@ var _utils = require("../utils");
21
19
 
22
20
  var _useToggleCaret = _interopRequireDefault(require("../utils/useToggleCaret"));
23
21
 
24
- var _Sidenav = require("../Sidenav/Sidenav");
25
-
26
- var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
27
-
28
22
  var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
23
  var _props$as = props.as,
30
24
  Component = _props$as === void 0 ? _Button.default : _props$as,
@@ -38,10 +32,6 @@ var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref
38
32
  _props$placement = props.placement,
39
33
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
40
34
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "renderToggle", "children", "icon", "noCaret", "placement"]);
41
- var sidenav = (0, _react.useContext)(_Sidenav.SidenavContext);
42
-
43
- var _useContext = (0, _react.useContext)(_NavContext.default),
44
- withinNav = _useContext.withinNav;
45
35
 
46
36
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
47
37
  prefix = _useClassNames.prefix,
@@ -50,14 +40,11 @@ var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref
50
40
 
51
41
  var classes = merge(className, withClassPrefix({
52
42
  'no-caret': noCaret
53
- }));
54
- var inSidenav = !!sidenav; // Caret icon is down by default, when Dropdown is used in Sidenav.
43
+ })); // Caret icon is down by default, when Dropdown is used in Sidenav.
55
44
 
56
- var Caret = (0, _useToggleCaret.default)(inSidenav ? 'bottomStart' : placement);
45
+ var Caret = (0, _useToggleCaret.default)(placement);
57
46
 
58
- var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
59
- appearance: withinNav ? 'subtle' : undefined
60
- }, rest, {
47
+ var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
61
48
  ref: ref,
62
49
  className: classes
63
50
  }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
package/cjs/Form/Form.js CHANGED
@@ -35,6 +35,8 @@ var _FormHelpText = _interopRequireDefault(require("../FormHelpText"));
35
35
 
36
36
  var _useFormClassNames = require("./useFormClassNames");
37
37
 
38
+ var _useSchemaModel2 = _interopRequireDefault(require("./useSchemaModel"));
39
+
38
40
  var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
39
41
  var _props$checkTrigger = props.checkTrigger,
40
42
  checkTrigger = _props$checkTrigger === void 0 ? 'change' : _props$checkTrigger,
@@ -50,7 +52,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
50
52
  _props$layout = props.layout,
51
53
  layout = _props$layout === void 0 ? 'vertical' : _props$layout,
52
54
  _props$model = props.model,
53
- model = _props$model === void 0 ? (0, _schemaTyped.SchemaModel)({}) : _props$model,
55
+ formModel = _props$model === void 0 ? (0, _schemaTyped.SchemaModel)({}) : _props$model,
54
56
  readOnly = props.readOnly,
55
57
  plaintext = props.plaintext,
56
58
  className = props.className,
@@ -61,6 +63,12 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
61
63
  onError = props.onError,
62
64
  onChange = props.onChange,
63
65
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
66
+
67
+ var _useSchemaModel = (0, _useSchemaModel2.default)(formModel),
68
+ getCombinedModel = _useSchemaModel.getCombinedModel,
69
+ pushFieldRule = _useSchemaModel.pushFieldRule,
70
+ removeFieldRule = _useSchemaModel.removeFieldRule;
71
+
64
72
  var classes = (0, _useFormClassNames.useFormClassNames)({
65
73
  classPrefix: classPrefix,
66
74
  className: className,
@@ -95,6 +103,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
95
103
  var formValue = getFormValue() || {};
96
104
  var formError = {};
97
105
  var errorCount = 0;
106
+ var model = getCombinedModel();
98
107
  Object.keys(model.spec).forEach(function (key) {
99
108
  var checkResult = model.checkForField(key, formValue);
100
109
 
@@ -113,7 +122,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
113
122
  }
114
123
 
115
124
  return true;
116
- }, [onCheck, onError, model, getFormValue]);
125
+ }, [getFormValue, getCombinedModel, onCheck, onError]);
117
126
  /**
118
127
  * Check the data field
119
128
  * @param fieldName
@@ -124,6 +133,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
124
133
  var _extends2;
125
134
 
126
135
  var formValue = getFormValue() || {};
136
+ var model = getCombinedModel();
127
137
  var checkResult = model.checkForField(fieldName, formValue);
128
138
  var formError = (0, _extends6.default)({}, getFormError(), (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
129
139
  setFormError(formError);
@@ -135,7 +145,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
135
145
  }
136
146
 
137
147
  return !checkResult.hasError;
138
- }, [model, getFormValue, getFormError, onCheck, onError]);
148
+ }, [getFormValue, getCombinedModel, getFormError, onCheck, onError]);
139
149
  /**
140
150
  * Check form data asynchronously and return a Promise
141
151
  */
@@ -144,6 +154,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
144
154
  var formValue = getFormValue() || {};
145
155
  var promises = [];
146
156
  var keys = [];
157
+ var model = getCombinedModel();
147
158
  Object.keys(model.spec).forEach(function (key) {
148
159
  keys.push(key);
149
160
  promises.push(model.checkForFieldAsync(key, formValue));
@@ -171,7 +182,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
171
182
  formError: formError
172
183
  };
173
184
  });
174
- }, [model, getFormValue, onCheck, onError]);
185
+ }, [getFormValue, getCombinedModel, onCheck, onError]);
175
186
  /**
176
187
  * Asynchronously check form fields and return Promise
177
188
  * @param fieldName
@@ -179,6 +190,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
179
190
 
180
191
  var checkForFieldAsync = (0, _react.useCallback)(function (fieldName) {
181
192
  var formValue = getFormValue() || {};
193
+ var model = getCombinedModel();
182
194
  return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
183
195
  var _extends3;
184
196
 
@@ -192,7 +204,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
192
204
 
193
205
  return checkResult;
194
206
  });
195
- }, [model, getFormValue, getFormError, onCheck, onError]);
207
+ }, [getFormValue, getCombinedModel, getFormError, onCheck, onError]);
196
208
  var cleanErrors = (0, _react.useCallback)(function () {
197
209
  setFormError({});
198
210
  }, []);
@@ -260,7 +272,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
260
272
  var rootRef = (0, _react.useRef)(null);
261
273
  var formContextValue = (0, _react.useMemo)(function () {
262
274
  return {
263
- model: model,
275
+ getCombinedModel: getCombinedModel,
264
276
  checkTrigger: checkTrigger,
265
277
  formDefaultValue: formDefaultValue,
266
278
  errorFromContext: errorFromContext,
@@ -270,11 +282,13 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
270
282
  formError: getFormError(),
271
283
  removeFieldValue: removeFieldValue,
272
284
  removeFieldError: removeFieldError,
285
+ pushFieldRule: pushFieldRule,
286
+ removeFieldRule: removeFieldRule,
273
287
  onFieldChange: handleFieldChange,
274
288
  onFieldError: handleFieldError,
275
289
  onFieldSuccess: handleFieldSuccess
276
290
  };
277
- }, [model, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, getFormError, removeFieldValue, removeFieldError, handleFieldChange, handleFieldError, handleFieldSuccess]);
291
+ }, [getCombinedModel, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, getFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
278
292
  return /*#__PURE__*/_react.default.createElement("form", (0, _extends6.default)({}, rest, {
279
293
  ref: rootRef,
280
294
  onSubmit: handleSubmit,
@@ -1,26 +1,31 @@
1
1
  import React from 'react';
2
- import { Schema } from 'schema-typed';
3
2
  import { TypeAttributes } from '../@types/common';
4
- export interface FormContextValue<T = Record<string, any>, errorMsgType = any, E = {
3
+ import type { Schema } from 'schema-typed';
4
+ import type { FieldRuleType } from './useSchemaModel';
5
+ interface TrulyFormContextValue<T = Record<string, any>, errorMsgType = any, E = {
5
6
  [P in keyof T]?: errorMsgType;
6
7
  }> {
7
- model?: Schema;
8
+ getCombinedModel: () => Schema;
9
+ formError: E;
10
+ removeFieldValue: (name: string) => void;
11
+ removeFieldError: (name: string) => void;
12
+ pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
13
+ removeFieldRule: (name: string) => void;
14
+ onFieldChange: (name: string, value: any, event: React.SyntheticEvent) => void;
15
+ onFieldError: (name: string, errorMessage: string) => void;
16
+ onFieldSuccess: (name: string) => void;
17
+ }
18
+ declare type ExternalPropsContextValue<T> = {
8
19
  checkTrigger?: TypeAttributes.CheckTrigger;
9
20
  formDefaultValue?: T;
10
21
  errorFromContext?: boolean;
11
22
  readOnly?: boolean;
12
23
  plaintext?: boolean;
13
24
  disabled?: boolean;
14
- formError?: E;
15
- removeFieldValue?: (name: string) => void;
16
- removeFieldError?: (name: string) => void;
17
- onFieldChange?: (name: string, value: any, event: React.SyntheticEvent) => void;
18
- onFieldError?: (name: string, errorMessage: string) => void;
19
- onFieldSuccess?: (name: string) => void;
20
- }
21
- export declare const FormContext: React.Context<FormContextValue<Record<string, any>, any, {
22
- [x: string]: any;
23
- }>>;
25
+ };
26
+ declare type InitialContextType = Partial<Record<keyof TrulyFormContextValue, undefined>>;
27
+ export declare type FormContextValue<T = Record<string, any>, errorMsgType = any> = (TrulyFormContextValue<T, errorMsgType> | InitialContextType) & ExternalPropsContextValue<T>;
28
+ export declare const FormContext: React.Context<FormContextValue<Record<string, any>, any>>;
24
29
  export declare const FormValueContext: React.Context<Record<string, any> | undefined>;
25
30
  export declare const FormPlaintextContext: React.Context<boolean>;
26
31
  export default FormContext;
@@ -0,0 +1,9 @@
1
+ import type { MutableRefObject } from 'react';
2
+ import type { CheckType, Schema } from 'schema-typed';
3
+ export declare type FieldRuleType = MutableRefObject<CheckType<unknown, any> | undefined>;
4
+ declare function useSchemaModel(formModel: Schema): {
5
+ getCombinedModel: () => Schema<any, string>;
6
+ pushFieldRule: (name: string, fieldRule: FieldRuleType) => void;
7
+ removeFieldRule: (name: string) => void;
8
+ };
9
+ export default useSchemaModel;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+
6
+ var _schemaTyped = require("schema-typed");
7
+
8
+ var _react = require("react");
9
+
10
+ function useSchemaModel(formModel) {
11
+ var subRulesRef = (0, _react.useRef)([]);
12
+ var pushFieldRule = (0, _react.useCallback)(function (name, fieldRule) {
13
+ subRulesRef.current.push({
14
+ name: name,
15
+ fieldRule: fieldRule
16
+ });
17
+ }, []);
18
+ var removeFieldRule = (0, _react.useCallback)(function (name) {
19
+ var index = subRulesRef.current.findIndex(function (v) {
20
+ return v.name === name;
21
+ });
22
+ subRulesRef.current.splice(index, 1);
23
+ }, []);
24
+ var getCombinedModel = (0, _react.useCallback)(function () {
25
+ var realSubRules = subRulesRef.current.filter(function (v) {
26
+ return Boolean(v.fieldRule.current);
27
+ });
28
+ return _schemaTyped.SchemaModel.combine(formModel, (0, _schemaTyped.SchemaModel)(realSubRules.map(function (_ref) {
29
+ var _ref2;
30
+
31
+ var name = _ref.name,
32
+ fieldRule = _ref.fieldRule;
33
+ return _ref2 = {}, _ref2[name] = fieldRule.current, _ref2;
34
+ }).reduce(function (a, b) {
35
+ return Object.assign(a, b);
36
+ }, {})));
37
+ }, [formModel]);
38
+ return {
39
+ getCombinedModel: getCombinedModel,
40
+ pushFieldRule: pushFieldRule,
41
+ removeFieldRule: removeFieldRule
42
+ };
43
+ }
44
+
45
+ var _default = useSchemaModel;
46
+ exports.default = _default;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import Input from '../Input';
3
3
  import { TypeAttributes, FormControlBaseProps, WithAsProps } from '../@types/common';
4
+ import type { CheckType } from 'schema-typed';
4
5
  /**
5
6
  * Props that FormControl passes to its accepter
6
7
  */
@@ -30,6 +31,8 @@ export interface FormControlProps<P = any, ValueType = any> extends WithAsProps,
30
31
  checkAsync?: boolean;
31
32
  /** Remove field value and error message when component is unmounted */
32
33
  shouldResetWithUnmount?: boolean;
34
+ /** Validation rule */
35
+ rule?: CheckType<unknown, any>;
33
36
  }
34
37
  interface FormControlComponent extends React.FC<FormControlProps> {
35
38
  <Accepter extends React.ElementType = typeof Input>(props: FormControlProps & {
@@ -29,6 +29,8 @@ var _FormContext = _interopRequireWildcard(require("../Form/FormContext"));
29
29
 
30
30
  var _FormGroup = require("../FormGroup/FormGroup");
31
31
 
32
+ var _useRegisterModel = _interopRequireDefault(require("./useRegisterModel"));
33
+
32
34
  var _templateObject;
33
35
 
34
36
  var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
@@ -42,10 +44,12 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
42
44
  formError = _useContext.formError,
43
45
  removeFieldValue = _useContext.removeFieldValue,
44
46
  removeFieldError = _useContext.removeFieldError,
47
+ pushFieldRule = _useContext.pushFieldRule,
48
+ removeFieldRule = _useContext.removeFieldRule,
45
49
  onFieldChange = _useContext.onFieldChange,
46
50
  onFieldError = _useContext.onFieldError,
47
51
  onFieldSuccess = _useContext.onFieldSuccess,
48
- model = _useContext.model,
52
+ getCombinedModel = _useContext.getCombinedModel,
49
53
  contextCheckTrigger = _useContext.checkTrigger;
50
54
 
51
55
  var _props$as = props.as,
@@ -73,7 +77,8 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
73
77
  defaultValue = props.defaultValue,
74
78
  _props$shouldResetWit = props.shouldResetWithUnmount,
75
79
  shouldResetWithUnmount = _props$shouldResetWit === void 0 ? false : _props$shouldResetWit,
76
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "accepter", "classPrefix", "className", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount"]);
80
+ rule = props.rule,
81
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "accepter", "classPrefix", "className", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount", "rule"]);
77
82
 
78
83
  var _useContext2 = (0, _react.useContext)(_FormGroup.FormGroupContext),
79
84
  controlId = _useContext2.controlId;
@@ -82,6 +87,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
82
87
  throw new Error("\n <FormControl> must be inside a component decorated with <Form>.\n And need to update React to 16.6.0 +.\n ");
83
88
  }
84
89
 
90
+ (0, _useRegisterModel.default)(name, pushFieldRule, removeFieldRule, rule);
85
91
  (0, _utils.useWillUnmount)(function () {
86
92
  if (shouldResetWithUnmount) {
87
93
  removeFieldValue === null || removeFieldValue === void 0 ? void 0 : removeFieldValue(name);
@@ -127,6 +133,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
127
133
  };
128
134
 
129
135
  var nextFormValue = (0, _extends3.default)({}, formValue, (_extends2 = {}, _extends2[name] = value, _extends2));
136
+ var model = getCombinedModel();
130
137
 
131
138
  if (checkAsync) {
132
139
  return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(name, nextFormValue).then(function (checkResult) {
@@ -0,0 +1,4 @@
1
+ import type { FieldRuleType } from '../Form/useSchemaModel';
2
+ import type { CheckType } from 'schema-typed';
3
+ declare function useRegisterModel(name: string, pushFieldRule: (n: string, r: FieldRuleType) => void, removeFieldRule: (n: string) => void, rule?: CheckType<unknown, any>): void;
4
+ export default useRegisterModel;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+
6
+ var _react = require("react");
7
+
8
+ function useRegisterModel(name, pushFieldRule, removeFieldRule, rule) {
9
+ var refRule = (0, _react.useRef)(rule);
10
+ refRule.current = rule;
11
+ (0, _react.useEffect)(function () {
12
+ pushFieldRule(name, refRule);
13
+ return function () {
14
+ removeFieldRule(name);
15
+ };
16
+ }, [name, pushFieldRule, removeFieldRule]);
17
+ }
18
+
19
+ var _default = useRegisterModel;
20
+ exports.default = _default;
@@ -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/cjs/Menu/Menu.js CHANGED
@@ -34,6 +34,7 @@ var _dom = require("../utils/dom");
34
34
  var defaultOpenMenuOn = ['click'];
35
35
  /**
36
36
  * Headless ARIA `menu`
37
+ * @private
37
38
  */
38
39
 
39
40
  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 {
@@ -19,6 +19,7 @@ var _MenuContext = _interopRequireWildcard(require("./MenuContext"));
19
19
 
20
20
  /**
21
21
  * Headless ARIA `menuitem`
22
+ * @private
22
23
  */
23
24
  function MenuItem(props) {
24
25
  var children = props.children,
@@ -7,4 +7,7 @@ export interface MenubarProps {
7
7
  /** Callback triggered when an item is being activated */
8
8
  onActivateItem?: (event: React.SyntheticEvent) => void;
9
9
  }
10
+ /**
11
+ * @private
12
+ */
10
13
  export default function Menubar({ vertical, children, onActivateItem }: MenubarProps): JSX.Element;
@@ -22,6 +22,10 @@ var _useMenu = _interopRequireDefault(require("./useMenu"));
22
22
  var _dom = require("../utils/dom");
23
23
 
24
24
  // Headless ARIA `menubar`
25
+
26
+ /**
27
+ * @private
28
+ */
25
29
  function Menubar(_ref) {
26
30
  var _items$activeItemInde3;
27
31
 
package/cjs/Nav/Nav.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import NavItem from './NavItem';
3
- import Dropdown from '../Dropdown';
4
3
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
4
+ import NavDropdown from './NavDropdown';
5
+ import NavMenu from './NavMenu';
5
6
  export interface NavProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
6
7
  /** sets appearance */
7
8
  appearance?: 'default' | 'subtle' | 'tabs';
@@ -19,8 +20,12 @@ export interface NavProps<T = any> extends WithAsProps, Omit<React.HTMLAttribute
19
20
  onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
20
21
  }
21
22
  interface NavComponent extends RsRefForwardingComponent<'div', NavProps> {
22
- Dropdown: typeof Dropdown;
23
+ /**
24
+ * @deprecated Use <Nav.Menu> instead.
25
+ */
26
+ Dropdown: typeof NavDropdown;
23
27
  Item: typeof NavItem;
28
+ Menu: typeof NavMenu;
24
29
  }
25
30
  declare const Nav: NavComponent;
26
31
  export default Nav;