rsuite 5.11.0 → 5.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/Nav/styles/index.less +7 -1
- package/Navbar/styles/index.less +6 -1
- package/Sidenav/styles/index.less +47 -9
- package/cjs/Cascader/DropdownMenu.js +8 -3
- package/cjs/Disclosure/Disclosure.d.ts +1 -1
- package/cjs/Disclosure/DisclosureContext.d.ts +1 -1
- package/cjs/Dropdown/Dropdown.js +26 -110
- package/cjs/Dropdown/DropdownItem.js +14 -58
- package/cjs/Dropdown/DropdownMenu.js +32 -76
- package/cjs/Dropdown/DropdownToggle.js +4 -17
- package/cjs/Form/Form.js +21 -7
- package/cjs/Form/FormContext.d.ts +18 -13
- package/cjs/Form/useSchemaModel.d.ts +9 -0
- package/cjs/Form/useSchemaModel.js +46 -0
- package/cjs/FormControl/FormControl.d.ts +3 -0
- package/cjs/FormControl/FormControl.js +9 -2
- package/cjs/FormControl/useRegisterModel.d.ts +4 -0
- package/cjs/FormControl/useRegisterModel.js +20 -0
- package/cjs/Menu/Menu.d.ts +1 -0
- package/cjs/Menu/Menu.js +1 -0
- package/cjs/Menu/MenuItem.d.ts +1 -0
- package/cjs/Menu/MenuItem.js +1 -0
- package/cjs/Menu/Menubar.d.ts +3 -0
- package/cjs/Menu/Menubar.js +4 -0
- package/cjs/Nav/Nav.d.ts +7 -2
- package/cjs/Nav/Nav.js +105 -5
- package/cjs/Nav/NavContext.d.ts +2 -8
- package/cjs/Nav/NavContext.js +1 -7
- package/cjs/Nav/NavDropdown.d.ts +71 -0
- package/cjs/Nav/NavDropdown.js +193 -0
- package/cjs/Nav/NavDropdownItem.d.ts +39 -0
- package/cjs/Nav/NavDropdownItem.js +141 -0
- package/cjs/Nav/NavDropdownMenu.d.ts +26 -0
- package/cjs/Nav/NavDropdownMenu.js +156 -0
- package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
- package/cjs/Nav/NavDropdownToggle.js +74 -0
- package/cjs/Nav/NavItem.d.ts +2 -0
- package/cjs/Nav/NavItem.js +13 -26
- package/cjs/Nav/NavMenu.d.ts +38 -0
- package/cjs/Nav/NavMenu.js +122 -0
- package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
- package/cjs/Navbar/NavbarDropdown.js +147 -0
- package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
- package/cjs/Navbar/NavbarDropdownItem.js +149 -0
- package/cjs/Navbar/NavbarDropdownMenu.d.ts +37 -0
- package/cjs/Navbar/NavbarDropdownMenu.js +155 -0
- package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
- package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
- package/cjs/Navbar/NavbarItem.d.ts +5 -2
- package/cjs/Navbar/NavbarItem.js +10 -4
- package/cjs/Overlay/OverlayTrigger.d.ts +4 -4
- package/cjs/Picker/utils.js +22 -15
- package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
- package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
- package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
- package/cjs/Sidenav/Sidenav.d.ts +8 -2
- package/cjs/Sidenav/Sidenav.js +1 -2
- package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
- package/cjs/Sidenav/SidenavDropdown.js +144 -73
- package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
- package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
- package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
- package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
- package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
- package/cjs/Sidenav/SidenavDropdownToggle.js +72 -0
- package/cjs/Sidenav/SidenavItem.d.ts +3 -0
- package/cjs/Sidenav/SidenavItem.js +22 -14
- package/cjs/Sidenav/SidenavToggle.d.ts +5 -1
- package/cjs/Sidenav/SidenavToggle.js +25 -9
- package/cjs/Whisper/Whisper.d.ts +3 -5
- package/cjs/Whisper/test/Whisper.test.d.ts +1 -0
- package/cjs/Whisper/test/Whisper.test.js +23 -0
- package/cjs/index.d.ts +1 -1
- package/cjs/utils/deprecateComponent.js +4 -6
- package/cjs/utils/deprecatePropType.d.ts +1 -5
- package/cjs/utils/deprecatePropType.js +7 -14
- package/cjs/utils/treeUtils.js +8 -10
- package/cjs/utils/useInternalId.d.ts +1 -1
- package/cjs/utils/useInternalId.js +2 -2
- package/cjs/utils/warnOnce.d.ts +9 -0
- package/cjs/utils/warnOnce.js +22 -0
- package/dist/rsuite-rtl.css +81 -15
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +81 -15
- package/dist/rsuite.js +303 -28
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Cascader/DropdownMenu.js +8 -3
- package/esm/Disclosure/Disclosure.d.ts +1 -1
- package/esm/Disclosure/DisclosureContext.d.ts +1 -1
- package/esm/Dropdown/Dropdown.js +25 -105
- package/esm/Dropdown/DropdownItem.js +13 -55
- package/esm/Dropdown/DropdownMenu.js +31 -76
- package/esm/Dropdown/DropdownToggle.js +4 -14
- package/esm/Form/Form.js +19 -7
- package/esm/Form/FormContext.d.ts +18 -13
- package/esm/Form/useSchemaModel.d.ts +9 -0
- package/esm/Form/useSchemaModel.js +39 -0
- package/esm/FormControl/FormControl.d.ts +3 -0
- package/esm/FormControl/FormControl.js +9 -6
- package/esm/FormControl/useRegisterModel.d.ts +4 -0
- package/esm/FormControl/useRegisterModel.js +14 -0
- package/esm/Menu/Menu.d.ts +1 -0
- package/esm/Menu/Menu.js +1 -0
- package/esm/Menu/MenuItem.d.ts +1 -0
- package/esm/Menu/MenuItem.js +1 -0
- package/esm/Menu/Menubar.d.ts +3 -0
- package/esm/Menu/Menubar.js +4 -0
- package/esm/Nav/Nav.d.ts +7 -2
- package/esm/Nav/Nav.js +96 -5
- package/esm/Nav/NavContext.d.ts +2 -8
- package/esm/Nav/NavContext.js +1 -6
- package/esm/Nav/NavDropdown.d.ts +71 -0
- package/esm/Nav/NavDropdown.js +170 -0
- package/esm/Nav/NavDropdownItem.d.ts +39 -0
- package/esm/Nav/NavDropdownItem.js +123 -0
- package/esm/Nav/NavDropdownMenu.d.ts +26 -0
- package/esm/Nav/NavDropdownMenu.js +138 -0
- package/esm/Nav/NavDropdownToggle.d.ts +21 -0
- package/esm/Nav/NavDropdownToggle.js +57 -0
- package/esm/Nav/NavItem.d.ts +2 -0
- package/esm/Nav/NavItem.js +13 -21
- package/esm/Nav/NavMenu.d.ts +38 -0
- package/esm/Nav/NavMenu.js +98 -0
- package/esm/Navbar/NavbarDropdown.d.ts +57 -0
- package/esm/Navbar/NavbarDropdown.js +124 -0
- package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
- package/esm/Navbar/NavbarDropdownItem.js +128 -0
- package/esm/Navbar/NavbarDropdownMenu.d.ts +37 -0
- package/esm/Navbar/NavbarDropdownMenu.js +135 -0
- package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
- package/esm/Navbar/NavbarDropdownToggle.js +55 -0
- package/esm/Navbar/NavbarItem.d.ts +5 -2
- package/esm/Navbar/NavbarItem.js +11 -4
- package/esm/Overlay/OverlayTrigger.d.ts +4 -4
- package/esm/Picker/utils.js +22 -14
- package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
- package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
- package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
- package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
- package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
- package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
- package/esm/Sidenav/Sidenav.d.ts +8 -2
- package/esm/Sidenav/Sidenav.js +1 -2
- package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
- package/esm/Sidenav/SidenavDropdown.js +145 -75
- package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
- package/esm/Sidenav/SidenavDropdownItem.js +87 -71
- package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
- package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
- package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
- package/esm/Sidenav/SidenavDropdownToggle.js +55 -0
- package/esm/Sidenav/SidenavItem.d.ts +3 -0
- package/esm/Sidenav/SidenavItem.js +23 -15
- package/esm/Sidenav/SidenavToggle.d.ts +5 -1
- package/esm/Sidenav/SidenavToggle.js +22 -9
- package/esm/Whisper/Whisper.d.ts +3 -5
- package/esm/Whisper/test/Whisper.test.d.ts +1 -0
- package/esm/Whisper/test/Whisper.test.js +16 -0
- package/esm/index.d.ts +1 -1
- package/esm/utils/deprecateComponent.js +3 -4
- package/esm/utils/deprecatePropType.d.ts +1 -5
- package/esm/utils/deprecatePropType.js +3 -13
- package/esm/utils/treeUtils.js +8 -10
- package/esm/utils/useInternalId.d.ts +1 -1
- package/esm/utils/useInternalId.js +2 -2
- package/esm/utils/warnOnce.d.ts +9 -0
- package/esm/utils/warnOnce.js +18 -0
- package/package.json +1 -1
- package/styles/color-modes/dark.less +3 -0
- package/styles/color-modes/high-contrast.less +3 -0
- package/styles/color-modes/light.less +3 -0
- package/styles/variables.less +3 -0
package/esm/Form/Form.js
CHANGED
|
@@ -12,6 +12,7 @@ import FormErrorMessage from '../FormErrorMessage';
|
|
|
12
12
|
import FormGroup from '../FormGroup';
|
|
13
13
|
import FormHelpText from '../FormHelpText';
|
|
14
14
|
import { useFormClassNames } from './useFormClassNames';
|
|
15
|
+
import useSchemaModel from './useSchemaModel';
|
|
15
16
|
var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
16
17
|
var _props$checkTrigger = props.checkTrigger,
|
|
17
18
|
checkTrigger = _props$checkTrigger === void 0 ? 'change' : _props$checkTrigger,
|
|
@@ -27,7 +28,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
27
28
|
_props$layout = props.layout,
|
|
28
29
|
layout = _props$layout === void 0 ? 'vertical' : _props$layout,
|
|
29
30
|
_props$model = props.model,
|
|
30
|
-
|
|
31
|
+
formModel = _props$model === void 0 ? SchemaModel({}) : _props$model,
|
|
31
32
|
readOnly = props.readOnly,
|
|
32
33
|
plaintext = props.plaintext,
|
|
33
34
|
className = props.className,
|
|
@@ -39,6 +40,11 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
39
40
|
onChange = props.onChange,
|
|
40
41
|
rest = _objectWithoutPropertiesLoose(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
|
|
41
42
|
|
|
43
|
+
var _useSchemaModel = useSchemaModel(formModel),
|
|
44
|
+
getCombinedModel = _useSchemaModel.getCombinedModel,
|
|
45
|
+
pushFieldRule = _useSchemaModel.pushFieldRule,
|
|
46
|
+
removeFieldRule = _useSchemaModel.removeFieldRule;
|
|
47
|
+
|
|
42
48
|
var classes = useFormClassNames({
|
|
43
49
|
classPrefix: classPrefix,
|
|
44
50
|
className: className,
|
|
@@ -73,6 +79,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
73
79
|
var formValue = getFormValue() || {};
|
|
74
80
|
var formError = {};
|
|
75
81
|
var errorCount = 0;
|
|
82
|
+
var model = getCombinedModel();
|
|
76
83
|
Object.keys(model.spec).forEach(function (key) {
|
|
77
84
|
var checkResult = model.checkForField(key, formValue);
|
|
78
85
|
|
|
@@ -91,7 +98,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
91
98
|
}
|
|
92
99
|
|
|
93
100
|
return true;
|
|
94
|
-
}, [
|
|
101
|
+
}, [getFormValue, getCombinedModel, onCheck, onError]);
|
|
95
102
|
/**
|
|
96
103
|
* Check the data field
|
|
97
104
|
* @param fieldName
|
|
@@ -102,6 +109,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
102
109
|
var _extends2;
|
|
103
110
|
|
|
104
111
|
var formValue = getFormValue() || {};
|
|
112
|
+
var model = getCombinedModel();
|
|
105
113
|
var checkResult = model.checkForField(fieldName, formValue);
|
|
106
114
|
|
|
107
115
|
var formError = _extends({}, getFormError(), (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
|
|
@@ -115,7 +123,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
115
123
|
}
|
|
116
124
|
|
|
117
125
|
return !checkResult.hasError;
|
|
118
|
-
}, [
|
|
126
|
+
}, [getFormValue, getCombinedModel, getFormError, onCheck, onError]);
|
|
119
127
|
/**
|
|
120
128
|
* Check form data asynchronously and return a Promise
|
|
121
129
|
*/
|
|
@@ -124,6 +132,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
124
132
|
var formValue = getFormValue() || {};
|
|
125
133
|
var promises = [];
|
|
126
134
|
var keys = [];
|
|
135
|
+
var model = getCombinedModel();
|
|
127
136
|
Object.keys(model.spec).forEach(function (key) {
|
|
128
137
|
keys.push(key);
|
|
129
138
|
promises.push(model.checkForFieldAsync(key, formValue));
|
|
@@ -151,7 +160,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
151
160
|
formError: formError
|
|
152
161
|
};
|
|
153
162
|
});
|
|
154
|
-
}, [
|
|
163
|
+
}, [getFormValue, getCombinedModel, onCheck, onError]);
|
|
155
164
|
/**
|
|
156
165
|
* Asynchronously check form fields and return Promise
|
|
157
166
|
* @param fieldName
|
|
@@ -159,6 +168,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
159
168
|
|
|
160
169
|
var checkForFieldAsync = useCallback(function (fieldName) {
|
|
161
170
|
var formValue = getFormValue() || {};
|
|
171
|
+
var model = getCombinedModel();
|
|
162
172
|
return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
|
|
163
173
|
var _extends3;
|
|
164
174
|
|
|
@@ -173,7 +183,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
173
183
|
|
|
174
184
|
return checkResult;
|
|
175
185
|
});
|
|
176
|
-
}, [
|
|
186
|
+
}, [getFormValue, getCombinedModel, getFormError, onCheck, onError]);
|
|
177
187
|
var cleanErrors = useCallback(function () {
|
|
178
188
|
setFormError({});
|
|
179
189
|
}, []);
|
|
@@ -244,7 +254,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
244
254
|
var rootRef = useRef(null);
|
|
245
255
|
var formContextValue = useMemo(function () {
|
|
246
256
|
return {
|
|
247
|
-
|
|
257
|
+
getCombinedModel: getCombinedModel,
|
|
248
258
|
checkTrigger: checkTrigger,
|
|
249
259
|
formDefaultValue: formDefaultValue,
|
|
250
260
|
errorFromContext: errorFromContext,
|
|
@@ -254,11 +264,13 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
254
264
|
formError: getFormError(),
|
|
255
265
|
removeFieldValue: removeFieldValue,
|
|
256
266
|
removeFieldError: removeFieldError,
|
|
267
|
+
pushFieldRule: pushFieldRule,
|
|
268
|
+
removeFieldRule: removeFieldRule,
|
|
257
269
|
onFieldChange: handleFieldChange,
|
|
258
270
|
onFieldError: handleFieldError,
|
|
259
271
|
onFieldSuccess: handleFieldSuccess
|
|
260
272
|
};
|
|
261
|
-
}, [
|
|
273
|
+
}, [getCombinedModel, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, getFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
262
274
|
return /*#__PURE__*/React.createElement("form", _extends({}, rest, {
|
|
263
275
|
ref: rootRef,
|
|
264
276
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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,39 @@
|
|
|
1
|
+
import { SchemaModel } from 'schema-typed';
|
|
2
|
+
import { useRef, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
function useSchemaModel(formModel) {
|
|
5
|
+
var subRulesRef = useRef([]);
|
|
6
|
+
var pushFieldRule = useCallback(function (name, fieldRule) {
|
|
7
|
+
subRulesRef.current.push({
|
|
8
|
+
name: name,
|
|
9
|
+
fieldRule: fieldRule
|
|
10
|
+
});
|
|
11
|
+
}, []);
|
|
12
|
+
var removeFieldRule = useCallback(function (name) {
|
|
13
|
+
var index = subRulesRef.current.findIndex(function (v) {
|
|
14
|
+
return v.name === name;
|
|
15
|
+
});
|
|
16
|
+
subRulesRef.current.splice(index, 1);
|
|
17
|
+
}, []);
|
|
18
|
+
var getCombinedModel = useCallback(function () {
|
|
19
|
+
var realSubRules = subRulesRef.current.filter(function (v) {
|
|
20
|
+
return Boolean(v.fieldRule.current);
|
|
21
|
+
});
|
|
22
|
+
return SchemaModel.combine(formModel, SchemaModel(realSubRules.map(function (_ref) {
|
|
23
|
+
var _ref2;
|
|
24
|
+
|
|
25
|
+
var name = _ref.name,
|
|
26
|
+
fieldRule = _ref.fieldRule;
|
|
27
|
+
return _ref2 = {}, _ref2[name] = fieldRule.current, _ref2;
|
|
28
|
+
}).reduce(function (a, b) {
|
|
29
|
+
return Object.assign(a, b);
|
|
30
|
+
}, {})));
|
|
31
|
+
}, [formModel]);
|
|
32
|
+
return {
|
|
33
|
+
getCombinedModel: getCombinedModel,
|
|
34
|
+
pushFieldRule: pushFieldRule,
|
|
35
|
+
removeFieldRule: removeFieldRule
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default useSchemaModel;
|
|
@@ -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 & {
|
|
@@ -13,10 +13,7 @@ import { useClassNames } from '../utils';
|
|
|
13
13
|
import FormContext, { FormValueContext } from '../Form/FormContext';
|
|
14
14
|
import { FormGroupContext } from '../FormGroup/FormGroup';
|
|
15
15
|
import { useWillUnmount } from '../utils';
|
|
16
|
-
|
|
17
|
-
* Props that FormControl passes to its accepter
|
|
18
|
-
*/
|
|
19
|
-
|
|
16
|
+
import useRegisterModel from './useRegisterModel';
|
|
20
17
|
var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
21
18
|
var _useContext = useContext(FormContext),
|
|
22
19
|
readOnlyContext = _useContext.readOnly,
|
|
@@ -28,10 +25,12 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
28
25
|
formError = _useContext.formError,
|
|
29
26
|
removeFieldValue = _useContext.removeFieldValue,
|
|
30
27
|
removeFieldError = _useContext.removeFieldError,
|
|
28
|
+
pushFieldRule = _useContext.pushFieldRule,
|
|
29
|
+
removeFieldRule = _useContext.removeFieldRule,
|
|
31
30
|
onFieldChange = _useContext.onFieldChange,
|
|
32
31
|
onFieldError = _useContext.onFieldError,
|
|
33
32
|
onFieldSuccess = _useContext.onFieldSuccess,
|
|
34
|
-
|
|
33
|
+
getCombinedModel = _useContext.getCombinedModel,
|
|
35
34
|
contextCheckTrigger = _useContext.checkTrigger;
|
|
36
35
|
|
|
37
36
|
var _props$as = props.as,
|
|
@@ -59,7 +58,8 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
59
58
|
defaultValue = props.defaultValue,
|
|
60
59
|
_props$shouldResetWit = props.shouldResetWithUnmount,
|
|
61
60
|
shouldResetWithUnmount = _props$shouldResetWit === void 0 ? false : _props$shouldResetWit,
|
|
62
|
-
|
|
61
|
+
rule = props.rule,
|
|
62
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "accepter", "classPrefix", "className", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount", "rule"]);
|
|
63
63
|
|
|
64
64
|
var _useContext2 = useContext(FormGroupContext),
|
|
65
65
|
controlId = _useContext2.controlId;
|
|
@@ -68,6 +68,7 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
68
68
|
throw new Error("\n <FormControl> must be inside a component decorated with <Form>.\n And need to update React to 16.6.0 +.\n ");
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
useRegisterModel(name, pushFieldRule, removeFieldRule, rule);
|
|
71
72
|
useWillUnmount(function () {
|
|
72
73
|
if (shouldResetWithUnmount) {
|
|
73
74
|
removeFieldValue === null || removeFieldValue === void 0 ? void 0 : removeFieldValue(name);
|
|
@@ -114,6 +115,8 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
114
115
|
|
|
115
116
|
var nextFormValue = _extends({}, formValue, (_extends2 = {}, _extends2[name] = value, _extends2));
|
|
116
117
|
|
|
118
|
+
var model = getCombinedModel();
|
|
119
|
+
|
|
117
120
|
if (checkAsync) {
|
|
118
121
|
return model === null || model === void 0 ? void 0 : model.checkForFieldAsync(name, nextFormValue).then(function (checkResult) {
|
|
119
122
|
return callbackEvents(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,14 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function useRegisterModel(name, pushFieldRule, removeFieldRule, rule) {
|
|
4
|
+
var refRule = useRef(rule);
|
|
5
|
+
refRule.current = rule;
|
|
6
|
+
useEffect(function () {
|
|
7
|
+
pushFieldRule(name, refRule);
|
|
8
|
+
return function () {
|
|
9
|
+
removeFieldRule(name);
|
|
10
|
+
};
|
|
11
|
+
}, [name, pushFieldRule, removeFieldRule]);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default useRegisterModel;
|
package/esm/Menu/Menu.d.ts
CHANGED
|
@@ -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
package/esm/Menu/MenuItem.d.ts
CHANGED
package/esm/Menu/MenuItem.js
CHANGED
package/esm/Menu/Menubar.d.ts
CHANGED
|
@@ -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;
|
package/esm/Menu/Menubar.js
CHANGED
|
@@ -6,6 +6,10 @@ import { KEY_VALUES, useCustom } from '../utils';
|
|
|
6
6
|
import { isFocusEntering, isFocusLeaving } from '../utils/events';
|
|
7
7
|
import useMenu from './useMenu';
|
|
8
8
|
import { isFocusableElement } from '../utils/dom';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @private
|
|
12
|
+
*/
|
|
9
13
|
export default function Menubar(_ref) {
|
|
10
14
|
var _items$activeItemInde3;
|
|
11
15
|
|
package/esm/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
|
-
|
|
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;
|
package/esm/Nav/Nav.js
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
import React, { useContext, useMemo } from 'react';
|
|
3
|
+
import React, { useContext, useEffect, useMemo } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import NavItem from './NavItem';
|
|
6
|
-
import Dropdown from '../Dropdown';
|
|
7
6
|
import { useClassNames } from '../utils';
|
|
8
7
|
import { NavbarContext } from '../Navbar/Navbar';
|
|
9
8
|
import { SidenavContext } from '../Sidenav/Sidenav';
|
|
10
9
|
import NavContext from './NavContext';
|
|
11
10
|
import useEnsuredRef from '../utils/useEnsuredRef';
|
|
12
11
|
import Menubar from '../Menu/Menubar';
|
|
12
|
+
import NavDropdown from './NavDropdown';
|
|
13
|
+
import NavMenu, { NavMenuActionType, NavMenuContext } from './NavMenu';
|
|
14
|
+
import deprecateComponent from '../utils/deprecateComponent';
|
|
15
|
+
import NavDropdownItem from './NavDropdownItem';
|
|
16
|
+
import NavDropdownMenu from './NavDropdownMenu';
|
|
17
|
+
import NavbarDropdownItem from '../Navbar/NavbarDropdownItem';
|
|
18
|
+
import SidenavDropdownItem from '../Sidenav/SidenavDropdownItem';
|
|
19
|
+
import NavbarItem from '../Navbar/NavbarItem';
|
|
20
|
+
import SidenavItem from '../Sidenav/SidenavItem';
|
|
21
|
+
import useInternalId from '../utils/useInternalId';
|
|
13
22
|
var Nav = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
14
23
|
var _props$as = props.as,
|
|
15
24
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
@@ -57,7 +66,6 @@ var Nav = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
57
66
|
var activeKey = activeKeyProp !== null && activeKeyProp !== void 0 ? activeKeyProp : activeKeyFromSidenav;
|
|
58
67
|
var contextValue = useMemo(function () {
|
|
59
68
|
return {
|
|
60
|
-
withinNav: true,
|
|
61
69
|
activeKey: activeKey,
|
|
62
70
|
onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
|
|
63
71
|
};
|
|
@@ -97,8 +105,91 @@ var Nav = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
97
105
|
className: prefix('bar')
|
|
98
106
|
})));
|
|
99
107
|
});
|
|
100
|
-
Nav.Dropdown
|
|
101
|
-
|
|
108
|
+
var DeprecatedNavDropdown = deprecateComponent(NavDropdown, '<Nav.Dropdown> is deprecated, use <Nav.Menu> instead.');
|
|
109
|
+
DeprecatedNavDropdown.Menu = deprecateComponent(NavDropdownMenu, '<Nav.Dropdown.Menu> is deprecated, use <Nav.Menu> instead');
|
|
110
|
+
DeprecatedNavDropdown.Item = deprecateComponent(NavDropdownItem, '<Nav.Dropdown.Item> is deprecated, use <Nav.Item> instead');
|
|
111
|
+
Nav.Dropdown = DeprecatedNavDropdown;
|
|
112
|
+
/**
|
|
113
|
+
* The <Nav.Item> API
|
|
114
|
+
* When used as direct child of <Nav>, render the NavItem
|
|
115
|
+
* When used within a <Nav.Menu>, render the NavDropdownItem
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
Nav.Item = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
119
|
+
var nav = useContext(NavContext);
|
|
120
|
+
|
|
121
|
+
if (!nav) {
|
|
122
|
+
throw new Error('<Nav.Item> must be rendered within a <Nav> component.');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
var parentNavMenu = useContext(NavMenuContext);
|
|
126
|
+
var navbar = useContext(NavbarContext);
|
|
127
|
+
var sidenav = useContext(SidenavContext);
|
|
128
|
+
|
|
129
|
+
var _ref2 = parentNavMenu !== null && parentNavMenu !== void 0 ? parentNavMenu : [],
|
|
130
|
+
dispatch = _ref2[1];
|
|
131
|
+
|
|
132
|
+
var _id = useInternalId('Nav.Item');
|
|
133
|
+
|
|
134
|
+
useEffect(function () {
|
|
135
|
+
if (dispatch) {
|
|
136
|
+
var _props$active;
|
|
137
|
+
|
|
138
|
+
dispatch({
|
|
139
|
+
type: NavMenuActionType.RegisterItem,
|
|
140
|
+
payload: {
|
|
141
|
+
_id: _id,
|
|
142
|
+
eventKey: props.eventKey,
|
|
143
|
+
active: (_props$active = props.active) !== null && _props$active !== void 0 ? _props$active : false
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return function () {
|
|
147
|
+
dispatch({
|
|
148
|
+
type: NavMenuActionType.UnregisterItem,
|
|
149
|
+
payload: {
|
|
150
|
+
_id: _id
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}, [dispatch, _id, props.eventKey, props.active]);
|
|
156
|
+
|
|
157
|
+
if (parentNavMenu) {
|
|
158
|
+
if (navbar) {
|
|
159
|
+
return /*#__PURE__*/React.createElement(NavbarDropdownItem, _extends({
|
|
160
|
+
ref: ref
|
|
161
|
+
}, props));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (sidenav) {
|
|
165
|
+
return /*#__PURE__*/React.createElement(SidenavDropdownItem, _extends({
|
|
166
|
+
ref: ref
|
|
167
|
+
}, props));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return /*#__PURE__*/React.createElement(NavDropdownItem, _extends({
|
|
171
|
+
ref: ref
|
|
172
|
+
}, props));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (navbar) {
|
|
176
|
+
return /*#__PURE__*/React.createElement(NavbarItem, _extends({
|
|
177
|
+
ref: ref
|
|
178
|
+
}, props));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (sidenav) {
|
|
182
|
+
return /*#__PURE__*/React.createElement(SidenavItem, _extends({
|
|
183
|
+
ref: ref
|
|
184
|
+
}, props));
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return /*#__PURE__*/React.createElement(NavItem, _extends({
|
|
188
|
+
ref: ref
|
|
189
|
+
}, props));
|
|
190
|
+
});
|
|
191
|
+
Nav.Item.displayName = 'Nav.Item';
|
|
192
|
+
Nav.Menu = NavMenu;
|
|
102
193
|
Nav.displayName = 'Nav';
|
|
103
194
|
Nav.propTypes = {
|
|
104
195
|
classPrefix: PropTypes.string,
|
package/esm/Nav/NavContext.d.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export interface NavContextProps {
|
|
3
|
-
|
|
4
|
-
* Whether component is rendered within a <Nav>
|
|
5
|
-
*
|
|
6
|
-
* FIXME: Bad design. Should use NavContextProps | null to determin whether within a <Nav>
|
|
7
|
-
*/
|
|
8
|
-
withinNav: boolean;
|
|
9
|
-
activeKey: string | null;
|
|
3
|
+
activeKey: string | undefined;
|
|
10
4
|
onSelect?: (eventKey: string | undefined, event: React.SyntheticEvent) => void;
|
|
11
5
|
}
|
|
12
|
-
declare const NavContext: React.Context<NavContextProps>;
|
|
6
|
+
declare const NavContext: React.Context<NavContextProps | null>;
|
|
13
7
|
export default NavContext;
|
package/esm/Nav/NavContext.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
var NavContext = /*#__PURE__*/React.createContext({
|
|
4
|
-
withinNav: false,
|
|
5
|
-
activeKey: null,
|
|
6
|
-
onSelect: noop
|
|
7
|
-
});
|
|
2
|
+
var NavContext = /*#__PURE__*/React.createContext(null);
|
|
8
3
|
export default NavContext;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
|
|
3
|
+
import Button from '../Button';
|
|
4
|
+
import NavDropdownItem from './NavDropdownItem';
|
|
5
|
+
import NavDropdownMenu from './NavDropdownMenu';
|
|
6
|
+
import { NavDropdownToggleProps } from './NavDropdownToggle';
|
|
7
|
+
export declare type NavDropdownTrigger = 'click' | 'hover' | 'contextMenu';
|
|
8
|
+
export interface NavDropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect' | 'title'> {
|
|
9
|
+
/** Define the title as a submenu */
|
|
10
|
+
title?: React.ReactNode;
|
|
11
|
+
/** Set the icon */
|
|
12
|
+
icon?: NavDropdownToggleProps['icon'];
|
|
13
|
+
/** Triggering events */
|
|
14
|
+
trigger?: NavDropdownTrigger | readonly NavDropdownTrigger[];
|
|
15
|
+
/** The placement of Menu */
|
|
16
|
+
placement?: TypeAttributes.Placement8;
|
|
17
|
+
/** Whether or not component is disabled */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** The style of the menu */
|
|
20
|
+
menuStyle?: React.CSSProperties;
|
|
21
|
+
/** A css class to apply to the Toggle DOM node */
|
|
22
|
+
toggleClassName?: string;
|
|
23
|
+
/** The value of the current option */
|
|
24
|
+
eventKey?: T;
|
|
25
|
+
/** You can use a custom element type for this toggle component */
|
|
26
|
+
toggleAs?: React.ElementType;
|
|
27
|
+
/** No caret variation */
|
|
28
|
+
noCaret?: NavDropdownToggleProps['noCaret'];
|
|
29
|
+
/**
|
|
30
|
+
* Open the menu and control it
|
|
31
|
+
* @deprecated
|
|
32
|
+
*/
|
|
33
|
+
open?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated
|
|
36
|
+
*/
|
|
37
|
+
renderTitle?: (children: React.ReactNode) => React.ReactNode;
|
|
38
|
+
/** Custom Toggle */
|
|
39
|
+
renderToggle?: (props: WithAsProps, ref: React.Ref<any>) => any;
|
|
40
|
+
/** The callback function that the menu closes */
|
|
41
|
+
onClose?: () => void;
|
|
42
|
+
/** Menu Pop-up callback function */
|
|
43
|
+
onOpen?: () => void;
|
|
44
|
+
/** Callback function for menu state switching */
|
|
45
|
+
onToggle?: (open: boolean, eventKey?: T | undefined, event?: React.SyntheticEvent) => void;
|
|
46
|
+
}
|
|
47
|
+
export interface NavDropdownComponent 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
|
+
/**
|
|
53
|
+
* @deprecated Use <Nav.Item> instead.
|
|
54
|
+
*/
|
|
55
|
+
Item: typeof NavDropdownItem;
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated Use <Nav.Menu> instead.
|
|
58
|
+
*/
|
|
59
|
+
Menu: typeof NavDropdownMenu;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @private this component is not supposed to be used directly
|
|
63
|
+
* Instead it's rendered by a <Nav.Menu> call
|
|
64
|
+
*
|
|
65
|
+
* <Nav>
|
|
66
|
+
* <Nav.Menu> -> This will render <NavDropdown> component
|
|
67
|
+
* </Nav.Menu>
|
|
68
|
+
* </Nav>
|
|
69
|
+
*/
|
|
70
|
+
declare const NavDropdown: NavDropdownComponent;
|
|
71
|
+
export default NavDropdown;
|