rsuite 5.9.0 → 5.12.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 (40) hide show
  1. package/ButtonToolbar/styles/index.less +1 -1
  2. package/CHANGELOG.md +24 -0
  3. package/README.md +4 -0
  4. package/cjs/DateRangePicker/DateRangePicker.d.ts +2 -0
  5. package/cjs/DateRangePicker/DateRangePicker.js +4 -2
  6. package/cjs/Form/Form.d.ts +1 -1
  7. package/cjs/Form/Form.js +35 -11
  8. package/cjs/Form/FormContext.d.ts +18 -11
  9. package/cjs/Form/useSchemaModel.d.ts +9 -0
  10. package/cjs/Form/useSchemaModel.js +46 -0
  11. package/cjs/FormControl/FormControl.d.ts +5 -0
  12. package/cjs/FormControl/FormControl.js +19 -2
  13. package/cjs/FormControl/useRegisterModel.d.ts +4 -0
  14. package/cjs/FormControl/useRegisterModel.js +20 -0
  15. package/cjs/Menu/Menubar.js +10 -3
  16. package/cjs/utils/dom.d.ts +1 -1
  17. package/dist/rsuite-rtl.css +1 -1
  18. package/dist/rsuite-rtl.min.css +1 -1
  19. package/dist/rsuite-rtl.min.css.map +1 -1
  20. package/dist/rsuite.css +1 -1
  21. package/dist/rsuite.js +26 -4
  22. package/dist/rsuite.js.map +1 -1
  23. package/dist/rsuite.min.css +1 -1
  24. package/dist/rsuite.min.css.map +1 -1
  25. package/dist/rsuite.min.js +1 -1
  26. package/dist/rsuite.min.js.map +1 -1
  27. package/esm/DateRangePicker/DateRangePicker.d.ts +2 -0
  28. package/esm/DateRangePicker/DateRangePicker.js +4 -2
  29. package/esm/Form/Form.d.ts +1 -1
  30. package/esm/Form/Form.js +33 -11
  31. package/esm/Form/FormContext.d.ts +18 -11
  32. package/esm/Form/useSchemaModel.d.ts +9 -0
  33. package/esm/Form/useSchemaModel.js +39 -0
  34. package/esm/FormControl/FormControl.d.ts +5 -0
  35. package/esm/FormControl/FormControl.js +20 -6
  36. package/esm/FormControl/useRegisterModel.d.ts +4 -0
  37. package/esm/FormControl/useRegisterModel.js +14 -0
  38. package/esm/Menu/Menubar.js +9 -3
  39. package/esm/utils/dom.d.ts +1 -1
  40. package/package.json +1 -1
@@ -10,6 +10,6 @@
10
10
  line-height: 0;
11
11
 
12
12
  > :not(:first-child):not(.rs-btn-block) {
13
- margin-left: 5px;
13
+ margin-left: 10px;
14
14
  }
15
15
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,27 @@
1
+ # [5.12.0](https://github.com/rsuite/rsuite/compare/v5.11.0...v5.12.0) (2022-05-12)
2
+
3
+ ### Features
4
+
5
+ - **Form.Control:** add `rule` prop ([#2482](https://github.com/rsuite/rsuite/issues/2482)) ([d1917df](https://github.com/rsuite/rsuite/commit/d1917dfcb9474236f756551fa8908edc85e37197))
6
+
7
+ # [5.11.0](https://github.com/rsuite/rsuite/compare/v5.10.0...v5.11.0) (2022-05-05)
8
+
9
+ ### Bug Fixes
10
+
11
+ - **ButtonToolbar:** change item gap to 10px ([#2475](https://github.com/rsuite/rsuite/issues/2475)) ([d97810a](https://github.com/rsuite/rsuite/commit/d97810ab4cd401b27be929569ce85bff0f498498))
12
+ - **Dropdown.Menu:** fix expected highlight item when focus moving in ([#2477](https://github.com/rsuite/rsuite/issues/2477)) ([b9fdea5](https://github.com/rsuite/rsuite/commit/b9fdea5d57ce76ddc80f5e9776feab02e4ebfacd))
13
+ - **Menubar:** fix unhandled nullish value ([#2478](https://github.com/rsuite/rsuite/issues/2478)) ([10d515d](https://github.com/rsuite/rsuite/commit/10d515d06dd08f2b93e5d7dbd3be7b1114185cab))
14
+
15
+ ### Features
16
+
17
+ - **DateRangePicker:** expose calendars renderTitle ([#2480](https://github.com/rsuite/rsuite/issues/2480)) ([4461e09](https://github.com/rsuite/rsuite/commit/4461e09ec3917f379b5df213db16cedade6f39e1))
18
+
19
+ # [5.10.0](https://github.com/rsuite/rsuite/compare/v5.9.0...v5.10.0) (2022-04-28)
20
+
21
+ ### Features
22
+
23
+ - **FormControl:** support `shouldResetWithUnmount` on `<FormControl>` ([#2468](https://github.com/rsuite/rsuite/issues/2468)) ([69dee5e](https://github.com/rsuite/rsuite/commit/69dee5ece1c20bdc1e1f42429e93150afb7995d8))
24
+
1
25
  # [5.9.0](https://github.com/rsuite/rsuite/compare/v5.8.1...v5.9.0) (2022-04-21)
2
26
 
3
27
  ### Features
package/README.md CHANGED
@@ -99,6 +99,10 @@ You can go through [full documentation][rsuite-doc-guide] or start with followin
99
99
  - [Use in Vite][demo-vite]
100
100
  </details>
101
101
 
102
+ <a href="https://vercel.com?utm_source=rsuite&utm_campaign=oss" target="_blank">
103
+ <img src="https://www.datocms-assets.com/31049/1618983297-powered-by-vercel.svg" alt="Vercel banner" />
104
+ </a>
105
+
102
106
  ## Previous major versions
103
107
 
104
108
  The previous major version 4.x will no longer receive new features,
@@ -35,6 +35,8 @@ export interface DateRangePickerProps extends PickerBaseProps, FormControlBasePr
35
35
  onClean?: (event: React.MouseEvent) => void;
36
36
  /** Custom render value */
37
37
  renderValue?: (value: DateRange, format: string) => React.ReactNode;
38
+ /** Custom render for calendar title */
39
+ renderTitle?: (date: Date) => React.ReactNode;
38
40
  }
39
41
  export interface DateRangePicker extends PickerComponent<DateRangePickerProps> {
40
42
  /** Allow the maximum number of days specified, other dates are disabled */
@@ -93,7 +93,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
93
93
  onOk = props.onOk,
94
94
  onOpen = props.onOpen,
95
95
  onSelect = props.onSelect,
96
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "appearance", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect"]);
96
+ renderTitle = props.renderTitle,
97
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "appearance", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "renderTitle"]);
97
98
 
98
99
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
99
100
  merge = _useClassNames.merge,
@@ -561,7 +562,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
561
562
  onChangeCalendarTime: handleChangeCalendarTime,
562
563
  onMouseMove: handleMouseMove,
563
564
  onSelect: handleSelectDate,
564
- onToggleMeridian: handleToggleMeridian
565
+ onToggleMeridian: handleToggleMeridian,
566
+ renderTitle: renderTitle
565
567
  };
566
568
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
567
569
  className: classes,
@@ -33,7 +33,7 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
33
33
  /** The error message comes from context */
34
34
  errorFromContext?: boolean;
35
35
  /** Callback fired when data changing */
36
- onChange?: (formValue: T, event: React.SyntheticEvent) => void;
36
+ onChange?: (formValue: T, event?: React.SyntheticEvent) => void;
37
37
  /** Callback fired when error checking */
38
38
  onError?: (formError: E) => void;
39
39
  /** Callback fired when data cheking */
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
  }, []);
@@ -218,6 +230,16 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
218
230
  resetErrors: resetErrors
219
231
  };
220
232
  });
233
+ var removeFieldError = (0, _react.useCallback)(function (name) {
234
+ var formError = (0, _omit.default)(getFormError(), [name]);
235
+ setFormError(formError);
236
+ onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
237
+ }, [getFormError, onCheck]);
238
+ var removeFieldValue = (0, _react.useCallback)(function (name) {
239
+ var formValue = (0, _omit.default)(getFormValue(), [name]);
240
+ setFormValue(formValue);
241
+ onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
242
+ }, [getFormValue, onChange]);
221
243
  var handleSubmit = (0, _react.useCallback)(function (event) {
222
244
  if (disabled || readOnly || plaintext) {
223
245
  return;
@@ -237,10 +259,8 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
237
259
  onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
238
260
  }, [onError, onCheck, getFormError]);
239
261
  var handleFieldSuccess = (0, _react.useCallback)(function (name) {
240
- var formError = (0, _omit.default)(getFormError(), [name]);
241
- setFormError(formError);
242
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
243
- }, [onCheck, getFormError]);
262
+ removeFieldError(name);
263
+ }, [removeFieldError]);
244
264
  var handleFieldChange = (0, _react.useCallback)(function (name, value, event) {
245
265
  var _extends5;
246
266
 
@@ -252,7 +272,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
252
272
  var rootRef = (0, _react.useRef)(null);
253
273
  var formContextValue = (0, _react.useMemo)(function () {
254
274
  return {
255
- model: model,
275
+ getCombinedModel: getCombinedModel,
256
276
  checkTrigger: checkTrigger,
257
277
  formDefaultValue: formDefaultValue,
258
278
  errorFromContext: errorFromContext,
@@ -260,11 +280,15 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
260
280
  plaintext: plaintext,
261
281
  disabled: disabled,
262
282
  formError: getFormError(),
283
+ removeFieldValue: removeFieldValue,
284
+ removeFieldError: removeFieldError,
285
+ pushFieldRule: pushFieldRule,
286
+ removeFieldRule: removeFieldRule,
263
287
  onFieldChange: handleFieldChange,
264
288
  onFieldError: handleFieldError,
265
289
  onFieldSuccess: handleFieldSuccess
266
290
  };
267
- }, [model, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, getFormError, handleFieldChange, handleFieldError, handleFieldSuccess]);
291
+ }, [getCombinedModel, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, getFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
268
292
  return /*#__PURE__*/_react.default.createElement("form", (0, _extends6.default)({}, rest, {
269
293
  ref: rootRef,
270
294
  onSubmit: handleSubmit,
@@ -1,24 +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
- onFieldChange?: (name: string, value: any, event: React.SyntheticEvent) => void;
16
- onFieldError?: (name: string, errorMessage: string) => void;
17
- onFieldSuccess?: (name: string) => void;
18
- }
19
- export declare const FormContext: React.Context<FormContextValue<Record<string, any>, any, {
20
- [x: string]: any;
21
- }>>;
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>>;
22
29
  export declare const FormValueContext: React.Context<Record<string, any> | undefined>;
23
30
  export declare const FormPlaintextContext: React.Context<boolean>;
24
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
  */
@@ -28,6 +29,10 @@ export interface FormControlProps<P = any, ValueType = any> extends WithAsProps,
28
29
  disabled?: boolean;
29
30
  /** Asynchronous check value */
30
31
  checkAsync?: boolean;
32
+ /** Remove field value and error message when component is unmounted */
33
+ shouldResetWithUnmount?: boolean;
34
+ /** Validation rule */
35
+ rule?: CheckType<unknown, any>;
31
36
  }
32
37
  interface FormControlComponent extends React.FC<FormControlProps> {
33
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) {
@@ -40,10 +42,14 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
40
42
  _useContext$formDefau = _useContext.formDefaultValue,
41
43
  formDefaultValue = _useContext$formDefau === void 0 ? {} : _useContext$formDefau,
42
44
  formError = _useContext.formError,
45
+ removeFieldValue = _useContext.removeFieldValue,
46
+ removeFieldError = _useContext.removeFieldError,
47
+ pushFieldRule = _useContext.pushFieldRule,
48
+ removeFieldRule = _useContext.removeFieldRule,
43
49
  onFieldChange = _useContext.onFieldChange,
44
50
  onFieldError = _useContext.onFieldError,
45
51
  onFieldSuccess = _useContext.onFieldSuccess,
46
- model = _useContext.model,
52
+ getCombinedModel = _useContext.getCombinedModel,
47
53
  contextCheckTrigger = _useContext.checkTrigger;
48
54
 
49
55
  var _props$as = props.as,
@@ -69,7 +75,10 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
69
75
  onChange = props.onChange,
70
76
  onBlur = props.onBlur,
71
77
  defaultValue = props.defaultValue,
72
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "accepter", "classPrefix", "className", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue"]);
78
+ _props$shouldResetWit = props.shouldResetWithUnmount,
79
+ shouldResetWithUnmount = _props$shouldResetWit === void 0 ? false : _props$shouldResetWit,
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"]);
73
82
 
74
83
  var _useContext2 = (0, _react.useContext)(_FormGroup.FormGroupContext),
75
84
  controlId = _useContext2.controlId;
@@ -78,6 +87,13 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
78
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 ");
79
88
  }
80
89
 
90
+ (0, _useRegisterModel.default)(name, pushFieldRule, removeFieldRule, rule);
91
+ (0, _utils.useWillUnmount)(function () {
92
+ if (shouldResetWithUnmount) {
93
+ removeFieldValue === null || removeFieldValue === void 0 ? void 0 : removeFieldValue(name);
94
+ removeFieldError === null || removeFieldError === void 0 ? void 0 : removeFieldError(name);
95
+ }
96
+ });
81
97
  var trigger = checkTrigger || contextCheckTrigger;
82
98
  var formValue = (0, _react.useContext)(_FormContext.FormValueContext);
83
99
  var val = (0, _isUndefined.default)(value) ? formValue === null || formValue === void 0 ? void 0 : formValue[name] : value;
@@ -117,6 +133,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
117
133
  };
118
134
 
119
135
  var nextFormValue = (0, _extends3.default)({}, formValue, (_extends2 = {}, _extends2[name] = value, _extends2));
136
+ var model = getCombinedModel();
120
137
 
121
138
  if (checkAsync) {
122
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;
@@ -19,8 +19,12 @@ var _events = require("../utils/events");
19
19
 
20
20
  var _useMenu = _interopRequireDefault(require("./useMenu"));
21
21
 
22
+ var _dom = require("../utils/dom");
23
+
22
24
  // Headless ARIA `menubar`
23
25
  function Menubar(_ref) {
26
+ var _items$activeItemInde3;
27
+
24
28
  var _ref$vertical = _ref.vertical,
25
29
  vertical = _ref$vertical === void 0 ? false : _ref$vertical,
26
30
  children = _ref.children,
@@ -35,7 +39,8 @@ function Menubar(_ref) {
35
39
  var menubarElementRef = (0, _react.useRef)(null);
36
40
  var onFocus = (0, _react.useCallback)(function (event) {
37
41
  // Focus moves inside Menubar
38
- if ((0, _events.isFocusEntering)(event)) {
42
+ if ((0, _events.isFocusEntering)(event) && // Skip if focus is moving to a focusable element within this menu
43
+ !(event.target !== event.currentTarget && (0, _dom.isFocusableElement)(event.target))) {
39
44
  if (activeItemIndex === null) {
40
45
  dispatch({
41
46
  type: _MenuContext.MenuActionTypes.MoveFocus,
@@ -58,7 +63,9 @@ function Menubar(_ref) {
58
63
  rtl = _useCustom.rtl;
59
64
 
60
65
  var onKeyDown = (0, _react.useCallback)(function (event) {
61
- var activeItemElement = (0, _isNil.default)(activeItemIndex) ? null : items[activeItemIndex].element;
66
+ var _items$activeItemInde, _items$activeItemInde2;
67
+
68
+ var activeItemElement = (0, _isNil.default)(activeItemIndex) ? null : (_items$activeItemInde = (_items$activeItemInde2 = items[activeItemIndex]) === null || _items$activeItemInde2 === void 0 ? void 0 : _items$activeItemInde2.element) !== null && _items$activeItemInde !== void 0 ? _items$activeItemInde : null;
62
69
 
63
70
  switch (true) {
64
71
  case !vertical && !rtl && event.key === _utils.KEY_VALUES.RIGHT:
@@ -138,7 +145,7 @@ function Menubar(_ref) {
138
145
  onBlur: onBlur,
139
146
  onKeyDown: onKeyDown,
140
147
  onClick: onClick,
141
- 'aria-activedescendant': (0, _isNil.default)(activeItemIndex) ? undefined : items[activeItemIndex].element.id,
148
+ 'aria-activedescendant': (0, _isNil.default)(activeItemIndex) ? undefined : (_items$activeItemInde3 = items[activeItemIndex]) === null || _items$activeItemInde3 === void 0 ? void 0 : _items$activeItemInde3.element.id,
142
149
  'aria-orientation': vertical ? 'vertical' : undefined // implicitly set 'horizontal'
143
150
 
144
151
  }, menubarElementRef));
@@ -1 +1 @@
1
- export declare function isFocusableElement(element: HTMLElement): boolean;
1
+ export declare function isFocusableElement(element: Element): boolean;
@@ -2782,7 +2782,7 @@ tbody.rs-anim-collapse.rs-anim-in {
2782
2782
  line-height: 0;
2783
2783
  }
2784
2784
  .rs-btn-toolbar > :not(:first-child):not(.rs-btn-block) {
2785
- margin-right: 5px;
2785
+ margin-right: 10px;
2786
2786
  }
2787
2787
  .rs-picker-subtle .picker-subtle-toggle {
2788
2788
  position: relative;