rsuite 5.59.3-alpha.1 → 5.60.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 (84) hide show
  1. package/Animation/styles/fade.less +1 -1
  2. package/Animation/styles/index.css +1 -1
  3. package/CHANGELOG.md +27 -0
  4. package/DateRangePicker/styles/index.css +2 -3
  5. package/DateRangePicker/styles/index.less +6 -5
  6. package/TagInput/styles/index.css +24 -24
  7. package/TagPicker/styles/index.css +24 -24
  8. package/TagPicker/styles/index.less +11 -10
  9. package/Toggle/styles/index.css +2 -1
  10. package/Toggle/styles/index.less +2 -1
  11. package/cjs/DateRangePicker/DateRangePicker.js +17 -9
  12. package/cjs/DateRangePicker/utils.d.ts +2 -2
  13. package/cjs/DateRangePicker/utils.js +2 -2
  14. package/cjs/Form/Form.d.ts +13 -9
  15. package/cjs/Form/Form.js +55 -11
  16. package/cjs/Form/FormContext.d.ts +2 -2
  17. package/cjs/Form/hooks/useFormRef.d.ts +9 -7
  18. package/cjs/Form/hooks/useFormRef.js +5 -32
  19. package/cjs/Form/hooks/useFormValidate.d.ts +6 -4
  20. package/cjs/Form/hooks/useFormValidate.js +18 -12
  21. package/cjs/Form/hooks/useFormValue.d.ts +8 -1
  22. package/cjs/Form/hooks/useFormValue.js +7 -1
  23. package/cjs/InputPicker/InputAutosize.js +2 -2
  24. package/cjs/InputPicker/InputPicker.d.ts +5 -7
  25. package/cjs/InputPicker/InputPicker.js +119 -151
  26. package/cjs/InputPicker/InputPickerContext.d.ts +11 -3
  27. package/cjs/InputPicker/InputPickerContext.js +7 -1
  28. package/cjs/InputPicker/hooks/useData.d.ts +17 -0
  29. package/cjs/InputPicker/hooks/useData.js +44 -0
  30. package/cjs/InputPicker/hooks/useInput.d.ts +21 -0
  31. package/cjs/InputPicker/hooks/useInput.js +46 -0
  32. package/cjs/InputPicker/hooks/useMaxWidth.d.ts +4 -0
  33. package/cjs/InputPicker/hooks/useMaxWidth.js +25 -0
  34. package/cjs/InputPicker/index.d.ts +2 -1
  35. package/cjs/InputPicker/utils.d.ts +1 -0
  36. package/cjs/InputPicker/utils.js +17 -0
  37. package/cjs/TagInput/index.js +2 -2
  38. package/cjs/TagPicker/index.js +2 -2
  39. package/dist/rsuite-no-reset-rtl.css +29 -29
  40. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  41. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  42. package/dist/rsuite-no-reset.css +29 -29
  43. package/dist/rsuite-no-reset.min.css +1 -1
  44. package/dist/rsuite-no-reset.min.css.map +1 -1
  45. package/dist/rsuite-rtl.css +29 -29
  46. package/dist/rsuite-rtl.min.css +1 -1
  47. package/dist/rsuite-rtl.min.css.map +1 -1
  48. package/dist/rsuite.css +29 -29
  49. package/dist/rsuite.js +55 -11
  50. package/dist/rsuite.js.map +1 -1
  51. package/dist/rsuite.min.css +1 -1
  52. package/dist/rsuite.min.css.map +1 -1
  53. package/dist/rsuite.min.js +1 -1
  54. package/dist/rsuite.min.js.map +1 -1
  55. package/esm/DateRangePicker/DateRangePicker.js +17 -9
  56. package/esm/DateRangePicker/utils.d.ts +2 -2
  57. package/esm/DateRangePicker/utils.js +2 -2
  58. package/esm/Form/Form.d.ts +13 -9
  59. package/esm/Form/Form.js +55 -11
  60. package/esm/Form/FormContext.d.ts +2 -2
  61. package/esm/Form/hooks/useFormRef.d.ts +9 -7
  62. package/esm/Form/hooks/useFormRef.js +5 -32
  63. package/esm/Form/hooks/useFormValidate.d.ts +6 -4
  64. package/esm/Form/hooks/useFormValidate.js +18 -12
  65. package/esm/Form/hooks/useFormValue.d.ts +8 -1
  66. package/esm/Form/hooks/useFormValue.js +7 -1
  67. package/esm/InputPicker/InputAutosize.js +2 -2
  68. package/esm/InputPicker/InputPicker.d.ts +5 -7
  69. package/esm/InputPicker/InputPicker.js +111 -143
  70. package/esm/InputPicker/InputPickerContext.d.ts +11 -3
  71. package/esm/InputPicker/InputPickerContext.js +4 -0
  72. package/esm/InputPicker/hooks/useData.d.ts +17 -0
  73. package/esm/InputPicker/hooks/useData.js +38 -0
  74. package/esm/InputPicker/hooks/useInput.d.ts +21 -0
  75. package/esm/InputPicker/hooks/useInput.js +40 -0
  76. package/esm/InputPicker/hooks/useMaxWidth.d.ts +4 -0
  77. package/esm/InputPicker/hooks/useMaxWidth.js +19 -0
  78. package/esm/InputPicker/index.d.ts +2 -1
  79. package/esm/InputPicker/utils.d.ts +1 -0
  80. package/esm/InputPicker/utils.js +12 -0
  81. package/esm/TagInput/index.js +2 -2
  82. package/esm/TagPicker/index.js +2 -2
  83. package/package.json +1 -1
  84. package/styles/variables.less +0 -1
@@ -5,6 +5,6 @@
5
5
 
6
6
  &.rs-anim-in {
7
7
  opacity: 1;
8
- pointer-events: unset;
8
+ pointer-events: auto;
9
9
  }
10
10
  }
@@ -343,7 +343,7 @@ tbody.rs-anim-collapse.rs-anim-in {
343
343
  }
344
344
  .rs-anim-fade.rs-anim-in {
345
345
  opacity: 1;
346
- pointer-events: unset;
346
+ pointer-events: auto;
347
347
  }
348
348
 
349
349
  /*# sourceMappingURL=index.css.map */
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## [5.60.1](https://github.com/rsuite/rsuite/compare/v5.60.0...v5.60.1) (2024-05-03)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **DateRangePicker:** fix not auto switching to the end calendar when only one calendar is displayed ([#3781](https://github.com/rsuite/rsuite/issues/3781)) ([5322f9c](https://github.com/rsuite/rsuite/commit/5322f9cc747750b865e8184dcab36609e906b274))
7
+ * **DateRangePicker:** fix not updating time on calendar when typing to change time ([#3777](https://github.com/rsuite/rsuite/issues/3777)) ([d1a7350](https://github.com/rsuite/rsuite/commit/d1a73502908026ceb20b5f2f49709b4dd03f334a))
8
+ * **toggle:** block pointer events when disabled ([#3774](https://github.com/rsuite/rsuite/issues/3774)) ([d833a0a](https://github.com/rsuite/rsuite/commit/d833a0ab1c759b568bba6d87d697687e3ca7cbed))
9
+ * **Toggle:** fix the height problem of the switch element ([#3780](https://github.com/rsuite/rsuite/issues/3780)) ([ff1570c](https://github.com/rsuite/rsuite/commit/ff1570c7d8776f2a120f1c048237725597157143))
10
+
11
+
12
+
13
+ # [5.60.0](https://github.com/rsuite/rsuite/compare/v5.59.2...v5.60.0) (2024-04-26)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * **Fade:** fix Picker not working in Drawer without backdrop ([#3759](https://github.com/rsuite/rsuite/issues/3759)) ([930a321](https://github.com/rsuite/rsuite/commit/930a3212b58202f4d0bf05a8bb191195944d589c))
19
+ * **TagPicker:** fix misalignment of large size tag with textbox ([#3755](https://github.com/rsuite/rsuite/issues/3755)) ([2bcd793](https://github.com/rsuite/rsuite/commit/2bcd793cd7cf1b181643125fe92f4ffb0e18f771))
20
+ * **TagPicker:** fix text flicker when entering ([#3758](https://github.com/rsuite/rsuite/issues/3758)) ([f7058d1](https://github.com/rsuite/rsuite/commit/f7058d1e9234e43c9f8d7884636a09d83f40fcb9))
21
+
22
+
23
+ ### Features
24
+
25
+ * **Form:** add support for onSubmit and onReset ([#3750](https://github.com/rsuite/rsuite/issues/3750)) ([d9b747e](https://github.com/rsuite/rsuite/commit/d9b747e97f3aaaa1d0b047ab81150d2a01764ed1))
26
+
27
+
1
28
  ## [5.59.2](https://github.com/rsuite/rsuite/compare/v5.59.1...v5.59.2) (2024-04-19)
2
29
 
3
30
 
@@ -4017,9 +4017,6 @@ textarea.rs-input-group-inside.rs-input-group-xs > .rs-input-group-btn {
4017
4017
  .rs-picker-popup .rs-calendar-month-dropdown-list {
4018
4018
  width: 185px;
4019
4019
  }
4020
- .rs-picker-popup .rs-picker-daterange-panel-show-one-calendar .rs-picker-toolbar {
4021
- max-width: 255px;
4022
- }
4023
4020
  .rs-picker-popup .rs-picker-daterange-panel-show-one-calendar .rs-picker-toolbar-ranges {
4024
4021
  width: 190px;
4025
4022
  }
@@ -4058,6 +4055,8 @@ textarea.rs-input-group-inside.rs-input-group-xs > .rs-input-group-btn {
4058
4055
  bottom: -1px;
4059
4056
  border-bottom: 2px solid #3498ff;
4060
4057
  left: 0;
4058
+ -webkit-transition: left 0.3s;
4059
+ transition: left 0.3s;
4061
4060
  }
4062
4061
  .rs-picker-daterange-header.rs-picker-tab-active-end::after {
4063
4062
  left: 50%;
@@ -62,11 +62,11 @@
62
62
  }
63
63
  }
64
64
 
65
- .rs-picker-daterange-panel-show-one-calendar .rs-picker-toolbar {
66
- max-width: @date-range-picker-calendar-default-width;
67
-
68
- &-ranges {
69
- width: 190px;
65
+ .rs-picker-daterange-panel-show-one-calendar {
66
+ .rs-picker-toolbar {
67
+ &-ranges {
68
+ width: 190px;
69
+ }
70
70
  }
71
71
  }
72
72
 
@@ -105,6 +105,7 @@
105
105
  bottom: -1px;
106
106
  border-bottom: 2px solid #3498ff;
107
107
  left: 0;
108
+ transition: left 0.3s;
108
109
  }
109
110
  }
110
111
 
@@ -3610,30 +3610,6 @@ textarea.rs-picker-search-input {
3610
3610
  .rs-plaintext .rs-tag {
3611
3611
  margin: 0;
3612
3612
  }
3613
- .rs-picker-tag-lg .rs-picker-textbox {
3614
- padding-bottom: 6px;
3615
- }
3616
- .rs-picker-tag-lg .rs-picker-textbox .rs-picker-search-input {
3617
- padding-left: 16px;
3618
- margin-top: 6px;
3619
- font-size: 16px;
3620
- }
3621
- .rs-picker-tag-lg .rs-picker-textbox input {
3622
- height: 20px;
3623
- }
3624
- .rs-picker-tag-lg .rs-picker-toggle {
3625
- padding-top: 8px;
3626
- padding-bottom: 8px;
3627
- -webkit-box-shadow: none;
3628
- box-shadow: none;
3629
- }
3630
- .rs-picker-tag-lg .rs-picker-textbox {
3631
- min-height: 40px;
3632
- }
3633
- .rs-picker-tag-lg .rs-picker-tag-list .rs-tag-lg {
3634
- margin-top: 6px;
3635
- margin-left: 6px;
3636
- }
3637
3613
  .rs-picker-tag .rs-picker-textbox,
3638
3614
  .rs-picker-tag-md .rs-picker-textbox {
3639
3615
  padding-bottom: 5px;
@@ -3660,6 +3636,30 @@ textarea.rs-picker-search-input {
3660
3636
  margin-top: 5px;
3661
3637
  margin-left: 5px;
3662
3638
  }
3639
+ .rs-picker-tag-lg .rs-picker-textbox {
3640
+ padding-bottom: 7px;
3641
+ }
3642
+ .rs-picker-tag-lg .rs-picker-textbox .rs-picker-search-input {
3643
+ padding-left: 16px;
3644
+ margin-top: 7px;
3645
+ font-size: 16px;
3646
+ }
3647
+ .rs-picker-tag-lg .rs-picker-textbox input {
3648
+ height: 20px;
3649
+ }
3650
+ .rs-picker-tag-lg .rs-picker-toggle {
3651
+ padding-top: 9px;
3652
+ padding-bottom: 9px;
3653
+ -webkit-box-shadow: none;
3654
+ box-shadow: none;
3655
+ }
3656
+ .rs-picker-tag-lg .rs-picker-textbox {
3657
+ min-height: 40px;
3658
+ }
3659
+ .rs-picker-tag-lg .rs-picker-tag-list .rs-tag-lg {
3660
+ margin-top: 6px;
3661
+ margin-left: 6px;
3662
+ }
3663
3663
  .rs-picker-tag-sm .rs-picker-textbox {
3664
3664
  padding-bottom: 2px;
3665
3665
  }
@@ -3610,30 +3610,6 @@ textarea.rs-picker-search-input {
3610
3610
  .rs-plaintext .rs-tag {
3611
3611
  margin: 0;
3612
3612
  }
3613
- .rs-picker-tag-lg .rs-picker-textbox {
3614
- padding-bottom: 6px;
3615
- }
3616
- .rs-picker-tag-lg .rs-picker-textbox .rs-picker-search-input {
3617
- padding-left: 16px;
3618
- margin-top: 6px;
3619
- font-size: 16px;
3620
- }
3621
- .rs-picker-tag-lg .rs-picker-textbox input {
3622
- height: 20px;
3623
- }
3624
- .rs-picker-tag-lg .rs-picker-toggle {
3625
- padding-top: 8px;
3626
- padding-bottom: 8px;
3627
- -webkit-box-shadow: none;
3628
- box-shadow: none;
3629
- }
3630
- .rs-picker-tag-lg .rs-picker-textbox {
3631
- min-height: 40px;
3632
- }
3633
- .rs-picker-tag-lg .rs-picker-tag-list .rs-tag-lg {
3634
- margin-top: 6px;
3635
- margin-left: 6px;
3636
- }
3637
3613
  .rs-picker-tag .rs-picker-textbox,
3638
3614
  .rs-picker-tag-md .rs-picker-textbox {
3639
3615
  padding-bottom: 5px;
@@ -3660,6 +3636,30 @@ textarea.rs-picker-search-input {
3660
3636
  margin-top: 5px;
3661
3637
  margin-left: 5px;
3662
3638
  }
3639
+ .rs-picker-tag-lg .rs-picker-textbox {
3640
+ padding-bottom: 7px;
3641
+ }
3642
+ .rs-picker-tag-lg .rs-picker-textbox .rs-picker-search-input {
3643
+ padding-left: 16px;
3644
+ margin-top: 7px;
3645
+ font-size: 16px;
3646
+ }
3647
+ .rs-picker-tag-lg .rs-picker-textbox input {
3648
+ height: 20px;
3649
+ }
3650
+ .rs-picker-tag-lg .rs-picker-toggle {
3651
+ padding-top: 9px;
3652
+ padding-bottom: 9px;
3653
+ -webkit-box-shadow: none;
3654
+ box-shadow: none;
3655
+ }
3656
+ .rs-picker-tag-lg .rs-picker-textbox {
3657
+ min-height: 40px;
3658
+ }
3659
+ .rs-picker-tag-lg .rs-picker-tag-list .rs-tag-lg {
3660
+ margin-top: 6px;
3661
+ margin-left: 6px;
3662
+ }
3663
3663
  .rs-picker-tag-sm .rs-picker-textbox {
3664
3664
  padding-bottom: 2px;
3665
3665
  }
@@ -67,16 +67,6 @@
67
67
 
68
68
  // Tag Picker Size
69
69
  // --------------------------------------------------
70
- .rs-picker-tag-lg {
71
- .rs-tag-picker-size(@padding-y-lg - 1; @padding-x-lg; @font-size-large; @line-height-large);
72
- .rs-picker-textbox {
73
- min-height: 40px;
74
- }
75
- .rs-picker-tag-list .rs-tag-lg {
76
- margin-top: 6px;
77
- margin-left: 6px;
78
- }
79
- }
80
70
 
81
71
  // Default size
82
72
  .rs-picker-tag,
@@ -88,6 +78,17 @@
88
78
  }
89
79
  }
90
80
 
81
+ .rs-picker-tag-lg {
82
+ .rs-tag-picker-size(@padding-y-lg; @padding-x-lg; @font-size-large; @line-height-large);
83
+ .rs-picker-textbox {
84
+ min-height: 40px;
85
+ }
86
+ .rs-picker-tag-list .rs-tag-lg {
87
+ margin-top: 6px;
88
+ margin-left: 6px;
89
+ }
90
+ }
91
+
91
92
  .rs-picker-tag-sm {
92
93
  .rs-tag-picker-size(@padding-y-sm; @padding-x-sm; @font-size-base; @line-height-base);
93
94
  .rs-picker-textbox {
@@ -114,6 +114,7 @@
114
114
  }
115
115
  .rs-toggle {
116
116
  position: relative;
117
+ display: inline-block;
117
118
  }
118
119
  .rs-toggle .rs-toggle-loader {
119
120
  width: 18px;
@@ -239,7 +240,7 @@
239
240
  -webkit-box-shadow: inset 0 0 0 1px var(--rs-toggle-disabled-thumb);
240
241
  box-shadow: inset 0 0 0 1px #fff;
241
242
  box-shadow: inset 0 0 0 1px var(--rs-toggle-disabled-thumb);
242
- cursor: not-allowed;
243
+ pointer-events: none;
243
244
  }
244
245
  .rs-toggle-checked .rs-toggle-presentation {
245
246
  background-color: #3498ff;
@@ -10,6 +10,7 @@
10
10
  // todo: Consider renaming as .rs-toggle
11
11
  .rs-toggle {
12
12
  position: relative;
13
+ display: inline-block;
13
14
 
14
15
  // Default size is middle.
15
16
  .toggle(md);
@@ -70,7 +71,7 @@
70
71
  background-color: var(--rs-toggle-disabled-bg);
71
72
  color: var(--rs-toggle-disabled-thumb);
72
73
  box-shadow: inset 0 0 0 1px var(--rs-toggle-disabled-thumb);
73
- cursor: not-allowed;
74
+ pointer-events: none;
74
75
  }
75
76
 
76
77
  // checked state
@@ -108,7 +108,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
108
108
  prefix = _useClassNames.prefix;
109
109
  var _useCustom = (0, _utils.useCustom)('DateRangePicker', overrideLocale),
110
110
  locale = _useCustom.locale,
111
- formatDate = _useCustom.formatDate;
111
+ formatDate = _useCustom.formatDate; // Default gap between two calendars, if `showOneCalendar` is set, the gap is 0
112
+ var calendarGap = showOneCalendar ? 0 : 1;
112
113
  var rangeFormatStr = "" + formatStr + character + formatStr;
113
114
  var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue !== null && defaultValue !== void 0 ? defaultValue : null),
114
115
  value = _useControlled[0],
@@ -135,7 +136,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
135
136
  var _useState2 = (0, _react.useState)((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
136
137
  selectedDates = _useState2[0],
137
138
  setSelectedDates = _useState2[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
138
- var _useState3 = (0, _react.useState)(null),
139
+ var _useState3 = (0, _react.useState)(value),
139
140
  hoverDateRange = _useState3[0],
140
141
  setHoverDateRange = _useState3[1]; // The displayed calendar panel is rendered based on this value.
141
142
  var _useState4 = (0, _react.useState)((0, _utils2.getSafeCalendarDate)({
@@ -171,14 +172,14 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
171
172
  var nextValue = dateRange;
172
173
 
173
174
  // The time should remain the same when the dates in the date range are changed.
174
- if ((0, _dateUtils.shouldRenderTime)(formatStr) && dateRange !== null && dateRange !== void 0 && dateRange.length && eventName !== 'changeTime' && eventName !== 'shortcutSelection') {
175
+ if ((0, _dateUtils.shouldRenderTime)(formatStr) && dateRange !== null && dateRange !== void 0 && dateRange.length && (eventName === 'changeDate' || eventName === 'changeMonth')) {
175
176
  var _startDate = (0, _dateUtils.copyTime)({
176
177
  from: getCalendarDatetime('start'),
177
178
  to: dateRange[0]
178
179
  });
179
180
  var _endDate = (0, _dateUtils.copyTime)({
180
181
  from: getCalendarDatetime('end'),
181
- to: dateRange.length === 1 ? (0, _dateUtils.addMonths)(_startDate, 1) : dateRange[1]
182
+ to: dateRange.length === 1 ? (0, _dateUtils.addMonths)(_startDate, calendarGap) : dateRange[1]
182
183
  });
183
184
  nextValue = [_startDate, _endDate];
184
185
  } else if (dateRange === null && typeof defaultCalendarValue !== 'undefined') {
@@ -188,7 +189,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
188
189
  var nextCalendarDate = (0, _utils2.getSafeCalendarDate)({
189
190
  value: nextValue,
190
191
  calendarKey: calendarKey,
191
- allowAameMonth: onlyShowMonth
192
+ // When only the month is displayed and only one calendar is displayed,
193
+ // there is no need to add a month and two calendar panels are allowed to display the same month
194
+ allowSameMonth: onlyShowMonth || showOneCalendar
192
195
  });
193
196
  setCalendarDate(nextCalendarDate);
194
197
  if (onlyShowMonth && eventName === 'changeMonth') {
@@ -337,6 +340,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
337
340
  } else {
338
341
  setHoverDateRange([nextSelectDates[0], nextSelectDates[0]]);
339
342
  }
343
+ if (isSelectedIdle) {
344
+ setActiveCalendarKey('end');
345
+ } else {
346
+ setActiveCalendarKey('start');
347
+ }
340
348
  setSelectedDates(nextSelectDates);
341
349
  setCalendarDateRange({
342
350
  dateRange: nextSelectDates,
@@ -408,7 +416,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
408
416
  if (value && value.length) {
409
417
  var _startDate3 = value[0],
410
418
  endData = value[1];
411
- nextCalendarDate = [_startDate3, (0, _dateUtils.isSameMonth)(_startDate3, endData) ? (0, _dateUtils.addMonths)(endData, 1) : endData];
419
+ nextCalendarDate = [_startDate3, (0, _dateUtils.isSameMonth)(_startDate3, endData) ? (0, _dateUtils.addMonths)(endData, calendarGap) : endData];
412
420
  } else {
413
421
  // Reset the date on the calendar to the default date
414
422
  nextCalendarDate = (0, _utils2.getSafeCalendarDate)({
@@ -737,11 +745,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
737
745
  format: formatStr,
738
746
  placeholder: placeholder ? placeholder : rangeFormatStr,
739
747
  disabled: disabled,
740
- onChange: handleInputChange,
741
748
  readOnly: readOnly || !editable || loading,
742
749
  plaintext: plaintext,
743
- onKeyDown: handleInputKeyDown,
744
- htmlSize: getInputHtmlSize()
750
+ htmlSize: getInputHtmlSize(),
751
+ onChange: handleInputChange,
752
+ onKeyDown: handleInputKeyDown
745
753
  })), /*#__PURE__*/_react.default.createElement(_Picker.PickerIndicator, {
746
754
  loading: loading,
747
755
  caretAs: caretAs,
@@ -1,8 +1,8 @@
1
1
  import { DateRange } from './types';
2
- export declare function getSafeCalendarDate({ value, calendarKey, allowAameMonth }: {
2
+ export declare function getSafeCalendarDate({ value, calendarKey, allowSameMonth }: {
3
3
  value: [] | [Date] | [Date, Date] | null;
4
4
  calendarKey?: 'start' | 'end';
5
- allowAameMonth?: boolean;
5
+ allowSameMonth?: boolean;
6
6
  }): DateRange;
7
7
  export declare const isSameRange: (source: DateRange | null, dest: DateRange | null, format: string) => boolean;
8
8
  export declare const getMonthHoverRange: (date: Date) => DateRange;
@@ -10,10 +10,10 @@ function getSafeCalendarDate(_ref) {
10
10
  var value = _ref.value,
11
11
  _ref$calendarKey = _ref.calendarKey,
12
12
  calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey,
13
- allowAameMonth = _ref.allowAameMonth;
13
+ allowSameMonth = _ref.allowSameMonth;
14
14
  // Update calendarDate if the value is not null
15
15
  value = (_value = value) !== null && _value !== void 0 ? _value : [];
16
- var gap = allowAameMonth ? 0 : 1;
16
+ var gap = allowSameMonth ? 0 : 1;
17
17
  if (value[0] && value[1]) {
18
18
  var diffMonth = (0, _dateUtils.differenceInCalendarMonths)(value[1], value[0]);
19
19
  if (calendarKey === 'start') {
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { FormHTMLAttributes } from 'react';
2
2
  import { Schema } from 'schema-typed';
3
3
  import FormControl from '../FormControl';
4
4
  import FormControlLabel from '../FormControlLabel';
@@ -7,9 +7,9 @@ import FormGroup from '../FormGroup';
7
7
  import FormHelpText from '../FormHelpText';
8
8
  import { WithAsProps, TypeAttributes, RsRefForwardingComponent } from '../@types/common';
9
9
  import { FormInstance } from './hooks/useFormRef';
10
- export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
11
- [P in keyof T]?: errorMsgType;
12
- }> extends WithAsProps, Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onChange' | 'onSubmit' | 'onError'> {
10
+ export interface FormProps<V = Record<string, any>, M = any, E = {
11
+ [P in keyof V]?: M;
12
+ }> extends WithAsProps, Omit<FormHTMLAttributes<HTMLFormElement>, 'onChange' | 'onSubmit' | 'onError' | 'onReset'> {
13
13
  /**
14
14
  * Set the left and right columns of the layout of the elements within the form。
15
15
  *
@@ -23,11 +23,11 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
23
23
  /**
24
24
  * Current value of the input. Creates a controlled component
25
25
  */
26
- formValue?: T | null;
26
+ formValue?: V | null;
27
27
  /**
28
28
  * Initial value
29
29
  */
30
- formDefaultValue?: T | null;
30
+ formDefaultValue?: V | null;
31
31
  /**
32
32
  * Error message of form
33
33
  */
@@ -77,7 +77,7 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
77
77
  /**
78
78
  * Callback fired when data changing
79
79
  */
80
- onChange?: (formValue: T, event?: React.SyntheticEvent) => void;
80
+ onChange?: (formValue: V, event?: React.SyntheticEvent) => void;
81
81
  /**
82
82
  * Callback fired when error checking
83
83
  */
@@ -87,9 +87,13 @@ export interface FormProps<T = Record<string, any>, errorMsgType = any, E = {
87
87
  */
88
88
  onCheck?: (formError: E) => void;
89
89
  /**
90
- * Callback fired when form submit
90
+ * Callback fired when form submit,only when the form data is validated will trigger
91
91
  */
92
- onSubmit?: (checkPassed: boolean, event: React.FormEvent<HTMLFormElement>) => void;
92
+ onSubmit?: (formValue: V | null, event?: React.FormEvent<HTMLFormElement>) => void;
93
+ /**
94
+ * Callback fired when form reset
95
+ */
96
+ onReset?: (formValue: V | null, event?: React.FormEvent<HTMLFormElement>) => void;
93
97
  }
94
98
  export interface FormComponent extends RsRefForwardingComponent<'form', FormProps & {
95
99
  ref?: React.Ref<FormInstance>;
package/cjs/Form/Form.js CHANGED
@@ -21,6 +21,7 @@ var _useSchemaModel2 = _interopRequireDefault(require("./hooks/useSchemaModel"))
21
21
  var _useFormValidate2 = _interopRequireDefault(require("./hooks/useFormValidate"));
22
22
  var _useFormValue2 = _interopRequireDefault(require("./hooks/useFormValue"));
23
23
  var _useFormClassNames = _interopRequireDefault(require("./hooks/useFormClassNames"));
24
+ var _useFormRef = _interopRequireDefault(require("./hooks/useFormRef"));
24
25
  var defaultSchema = (0, _schemaTyped.SchemaModel)({});
25
26
 
26
27
  /**
@@ -51,10 +52,11 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
51
52
  children = props.children,
52
53
  disabled = props.disabled,
53
54
  onSubmit = props.onSubmit,
55
+ onReset = props.onReset,
54
56
  onCheck = props.onCheck,
55
57
  onError = props.onError,
56
58
  onChange = props.onChange,
57
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "nestedField", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onCheck", "onError", "onChange"]);
59
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["checkTrigger", "classPrefix", "errorFromContext", "formDefaultValue", "formValue", "formError", "fluid", "nestedField", "layout", "model", "readOnly", "plaintext", "className", "children", "disabled", "onSubmit", "onReset", "onCheck", "onError", "onChange"]);
58
60
  var _useSchemaModel = (0, _useSchemaModel2.default)(formModel),
59
61
  getCombinedModel = _useSchemaModel.getCombinedModel,
60
62
  pushFieldRule = _useSchemaModel.pushFieldRule,
@@ -65,9 +67,9 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
65
67
  }),
66
68
  formValue = _useFormValue.formValue,
67
69
  onRemoveValue = _useFormValue.onRemoveValue,
68
- setFieldValue = _useFormValue.setFieldValue;
70
+ setFieldValue = _useFormValue.setFieldValue,
71
+ resetFormValue = _useFormValue.resetFormValue;
69
72
  var formValidateProps = {
70
- ref: ref,
71
73
  formValue: formValue,
72
74
  getCombinedModel: getCombinedModel,
73
75
  onCheck: onCheck,
@@ -79,7 +81,12 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
79
81
  setFieldError = _useFormValidate.setFieldError,
80
82
  onRemoveError = _useFormValidate.onRemoveError,
81
83
  check = _useFormValidate.check,
82
- formRef = _useFormValidate.formRef;
84
+ checkAsync = _useFormValidate.checkAsync,
85
+ checkForField = _useFormValidate.checkForField,
86
+ checkForFieldAsync = _useFormValidate.checkForFieldAsync,
87
+ cleanErrors = _useFormValidate.cleanErrors,
88
+ resetErrors = _useFormValidate.resetErrors,
89
+ cleanErrorForField = _useFormValidate.cleanErrorForField;
83
90
  var classes = (0, _useFormClassNames.default)({
84
91
  classPrefix: classPrefix,
85
92
  className: className,
@@ -89,22 +96,58 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
89
96
  plaintext: plaintext,
90
97
  disabled: disabled
91
98
  });
92
- var removeFieldValue = (0, _utils.useEventCallback)(function (name) {
93
- var formValue = onRemoveValue(name);
94
- onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
99
+ var submit = (0, _utils.useEventCallback)(function (event) {
100
+ // Check the form before submitting
101
+ if (check()) {
102
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formValue, event);
103
+ }
95
104
  });
96
- var removeFieldError = (0, _utils.useEventCallback)(function (name) {
97
- onRemoveError(name);
105
+ var reset = (0, _utils.useEventCallback)(function (event) {
106
+ resetErrors();
107
+ onReset === null || onReset === void 0 ? void 0 : onReset(resetFormValue(), event);
98
108
  });
99
109
  var handleSubmit = (0, _utils.useEventCallback)(function (event) {
100
110
  var _event$preventDefault, _event$stopPropagatio;
101
111
  event === null || event === void 0 ? void 0 : (_event$preventDefault = event.preventDefault) === null || _event$preventDefault === void 0 ? void 0 : _event$preventDefault.call(event);
102
112
  event === null || event === void 0 ? void 0 : (_event$stopPropagatio = event.stopPropagation) === null || _event$stopPropagatio === void 0 ? void 0 : _event$stopPropagatio.call(event);
113
+
114
+ // Prevent submission when the form is disabled, readOnly, or plaintext
103
115
  if (disabled || readOnly || plaintext) {
104
116
  return;
105
117
  }
106
- var checkResult = check();
107
- onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(checkResult, event);
118
+ submit();
119
+ });
120
+ var handleReset = (0, _utils.useEventCallback)(function (event) {
121
+ var _event$preventDefault2, _event$stopPropagatio2;
122
+ event === null || event === void 0 ? void 0 : (_event$preventDefault2 = event.preventDefault) === null || _event$preventDefault2 === void 0 ? void 0 : _event$preventDefault2.call(event);
123
+ event === null || event === void 0 ? void 0 : (_event$stopPropagatio2 = event.stopPropagation) === null || _event$stopPropagatio2 === void 0 ? void 0 : _event$stopPropagatio2.call(event);
124
+
125
+ // Prevent reset when the form is disabled, readOnly, or plaintext
126
+ if (disabled || readOnly || plaintext) {
127
+ return;
128
+ }
129
+ reset(event);
130
+ });
131
+ var imperativeMethods = {
132
+ check: check,
133
+ checkForField: checkForField,
134
+ checkAsync: checkAsync,
135
+ checkForFieldAsync: checkForFieldAsync,
136
+ cleanErrors: cleanErrors,
137
+ cleanErrorForField: cleanErrorForField,
138
+ reset: reset,
139
+ resetErrors: resetErrors,
140
+ submit: submit
141
+ };
142
+ var formRef = (0, _useFormRef.default)(ref, {
143
+ imperativeMethods: imperativeMethods
144
+ });
145
+ var removeFieldValue = (0, _utils.useEventCallback)(function (name) {
146
+ var formValue = onRemoveValue(name);
147
+ onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
148
+ });
149
+ var removeFieldError = (0, _utils.useEventCallback)(function (name) {
150
+ onRemoveError(name);
108
151
  });
109
152
  var onFieldError = (0, _utils.useEventCallback)(function (name, checkResult) {
110
153
  setFieldError(name, checkResult);
@@ -136,6 +179,7 @@ var Form = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
136
179
  return /*#__PURE__*/_react.default.createElement("form", (0, _extends2.default)({}, rest, {
137
180
  ref: formRef,
138
181
  onSubmit: handleSubmit,
182
+ onReset: handleReset,
139
183
  className: classes
140
184
  }), /*#__PURE__*/_react.default.createElement(_FormContext.FormProvider, {
141
185
  value: formContextValue
@@ -3,8 +3,8 @@ import { TypeAttributes } from '../@types/common';
3
3
  import type { Schema, CheckResult } from 'schema-typed';
4
4
  import type { FieldRuleType } from './hooks/useSchemaModel';
5
5
  declare type RecordAny = Record<string, any>;
6
- interface TrulyFormContextValue<T = RecordAny, errorMsgType = any, E = {
7
- [P in keyof T]?: errorMsgType;
6
+ interface TrulyFormContextValue<T = RecordAny, M = any, E = {
7
+ [P in keyof T]?: M;
8
8
  }> {
9
9
  formError: E;
10
10
  nestedField: boolean;
@@ -31,6 +31,14 @@ export interface FormImperativeMethods<T = Record<string, any>, M = string, E =
31
31
  * All error messages are reset, and an initial value can be set
32
32
  */
33
33
  resetErrors: (formError?: E) => void;
34
+ /**
35
+ * Reset form data to initial value and clear all error messages
36
+ */
37
+ reset: () => void;
38
+ /**
39
+ * Submit form data and verify
40
+ */
41
+ submit: () => void;
34
42
  }
35
43
  export interface FormInstance<T = Record<string, any>, M = string, E = {
36
44
  [P in keyof T]?: M;
@@ -43,13 +51,7 @@ export interface FormInstance<T = Record<string, any>, M = string, E = {
43
51
  interface FormRefProps<T = Record<string, any>, M = string, E = {
44
52
  [P in keyof T]?: M;
45
53
  }> {
46
- formError: E;
47
- nestedField?: boolean;
48
- setFormError: (formError: E) => void;
49
- check: (callback?: (formError: E) => void) => boolean;
50
- checkForField: (fieldName: keyof T, callback?: (checkResult: CheckResult<M>) => void) => boolean;
51
- checkAsync: () => Promise<any>;
52
- checkForFieldAsync: (fieldName: keyof T) => Promise<CheckResult>;
54
+ imperativeMethods: FormImperativeMethods<T, M, E>;
53
55
  }
54
56
  export default function useFormRef(ref: React.Ref<FormInstance>, props: FormRefProps): import("react").RefObject<HTMLFormElement>;
55
57
  export {};
@@ -4,42 +4,15 @@
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  exports.__esModule = true;
6
6
  exports.default = useFormRef;
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
8
  var _react = require("react");
8
- var _omit = _interopRequireDefault(require("lodash/omit"));
9
- var _useEventCallback = _interopRequireDefault(require("../../utils/useEventCallback"));
10
- var _utils = require("../../FormControl/utils");
11
9
  function useFormRef(ref, props) {
12
10
  var rootRef = (0, _react.useRef)(null);
13
- var formError = props.formError,
14
- setFormError = props.setFormError,
15
- nestedField = props.nestedField,
16
- check = props.check,
17
- checkForField = props.checkForField,
18
- checkAsync = props.checkAsync,
19
- checkForFieldAsync = props.checkForFieldAsync;
20
- var cleanErrors = (0, _useEventCallback.default)(function () {
21
- setFormError({});
22
- });
23
- var resetErrors = (0, _useEventCallback.default)(function (formError) {
24
- if (formError === void 0) {
25
- formError = {};
26
- }
27
- setFormError(formError);
28
- });
29
- var cleanErrorForField = (0, _useEventCallback.default)(function (fieldName) {
30
- setFormError((0, _omit.default)(formError, [nestedField ? (0, _utils.nameToPath)(fieldName) : fieldName]));
31
- });
11
+ var imperativeMethods = props.imperativeMethods;
32
12
  (0, _react.useImperativeHandle)(ref, function () {
33
- return {
34
- root: rootRef.current,
35
- check: check,
36
- checkForField: checkForField,
37
- checkAsync: checkAsync,
38
- checkForFieldAsync: checkForFieldAsync,
39
- cleanErrors: cleanErrors,
40
- cleanErrorForField: cleanErrorForField,
41
- resetErrors: resetErrors
42
- };
13
+ return (0, _extends2.default)({
14
+ root: rootRef.current
15
+ }, imperativeMethods);
43
16
  });
44
17
  return rootRef;
45
18
  }