rsuite 5.48.1 → 5.50.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.
- package/CHANGELOG.md +27 -0
- package/Cascader/styles/index.less +5 -4
- package/DatePicker/styles/index.less +18 -11
- package/DateRangeInput/package.json +7 -0
- package/DateRangePicker/styles/index.less +20 -0
- package/Dropdown/styles/index.less +5 -4
- package/Dropdown/styles/mixin.less +0 -11
- package/InputGroup/styles/index.less +1 -0
- package/Picker/styles/index.less +51 -24
- package/Picker/styles/mixin.less +17 -13
- package/README.md +34 -24
- package/Sidenav/styles/index.less +2 -0
- package/TagInput/styles/index.less +1 -1
- package/cjs/AutoComplete/AutoComplete.js +25 -26
- package/cjs/Calendar/Calendar.d.ts +5 -1
- package/cjs/Calendar/CalendarContainer.d.ts +7 -1
- package/cjs/Calendar/CalendarContainer.js +11 -4
- package/cjs/Calendar/CalendarHeader.js +2 -0
- package/cjs/Calendar/MonthDropdown.js +7 -2
- package/cjs/Calendar/MonthDropdownItem.js +2 -2
- package/cjs/Calendar/Table.js +6 -1
- package/cjs/Calendar/TimeDropdown.js +17 -10
- package/cjs/Calendar/types.d.ts +1 -0
- package/cjs/Cascader/Cascader.js +46 -48
- package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
- package/cjs/CheckPicker/CheckPicker.js +33 -36
- package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
- package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
- package/cjs/CustomProvider/CustomProvider.js +2 -2
- package/cjs/DateInput/DateField.d.ts +9 -31
- package/cjs/DateInput/DateField.js +61 -12
- package/cjs/DateInput/DateInput.d.ts +7 -2
- package/cjs/DateInput/DateInput.js +74 -92
- package/cjs/DateInput/index.d.ts +4 -0
- package/cjs/DateInput/index.js +19 -1
- package/cjs/DateInput/useDateInputState.d.ts +7 -31
- package/cjs/DateInput/useDateInputState.js +39 -15
- package/cjs/DateInput/useIsFocused.d.ts +7 -0
- package/cjs/DateInput/useIsFocused.js +28 -0
- package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
- package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
- package/cjs/DateInput/utils.d.ts +23 -1
- package/cjs/DateInput/utils.js +155 -51
- package/cjs/DatePicker/DatePicker.d.ts +25 -8
- package/cjs/DatePicker/DatePicker.js +208 -241
- package/cjs/DatePicker/Toolbar.js +5 -22
- package/cjs/DatePicker/utils.d.ts +5 -1
- package/cjs/DatePicker/utils.js +17 -1
- package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
- package/cjs/DateRangeInput/DateRangeInput.js +244 -0
- package/cjs/DateRangeInput/index.d.ts +3 -0
- package/cjs/DateRangeInput/index.js +9 -0
- package/cjs/DateRangeInput/utils.d.ts +61 -0
- package/cjs/DateRangeInput/utils.js +146 -0
- package/cjs/DateRangePicker/Calendar.js +24 -23
- package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
- package/cjs/DateRangePicker/DateRangePicker.js +251 -203
- package/cjs/DateRangePicker/types.d.ts +11 -3
- package/cjs/DateRangePicker/utils.d.ts +2 -1
- package/cjs/DateRangePicker/utils.js +7 -5
- package/cjs/FormControl/FormControl.d.ts +11 -1
- package/cjs/FormControl/FormControl.js +6 -5
- package/cjs/Input/Input.d.ts +11 -0
- package/cjs/Input/Input.js +11 -8
- package/cjs/InputPicker/InputPicker.js +62 -63
- package/cjs/MultiCascader/MultiCascader.js +40 -42
- package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
- package/cjs/Overlay/OverlayTrigger.js +5 -0
- package/cjs/Picker/PickerIndicator.d.ts +10 -0
- package/cjs/Picker/PickerIndicator.js +49 -0
- package/cjs/Picker/PickerLabel.d.ts +9 -0
- package/cjs/Picker/PickerLabel.js +23 -0
- package/cjs/Picker/PickerToggle.d.ts +17 -22
- package/cjs/Picker/PickerToggle.js +52 -177
- package/cjs/Picker/index.d.ts +3 -0
- package/cjs/Picker/index.js +10 -1
- package/cjs/Picker/usePickerRef.d.ts +19 -0
- package/cjs/Picker/usePickerRef.js +88 -0
- package/cjs/Picker/utils.d.ts +5 -9
- package/cjs/Picker/utils.js +22 -89
- package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
- package/cjs/SelectPicker/SelectPicker.js +39 -42
- package/cjs/TreePicker/TreePicker.js +72 -75
- package/cjs/index.d.ts +2 -0
- package/cjs/index.js +3 -1
- package/cjs/locales/index.d.ts +2 -2
- package/cjs/utils/constants.d.ts +2 -1
- package/cjs/utils/constants.js +1 -0
- package/cjs/utils/dateUtils.d.ts +0 -1
- package/cjs/utils/dateUtils.js +0 -6
- package/cjs/utils/getStringLength.d.ts +2 -0
- package/cjs/utils/getStringLength.js +18 -0
- package/cjs/utils/index.d.ts +3 -0
- package/cjs/utils/index.js +11 -2
- package/cjs/utils/useCustom.js +1 -1
- package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
- package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
- package/dist/rsuite-no-reset-rtl.css +140 -207
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +140 -207
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +140 -75
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +140 -75
- package/dist/rsuite.js +4833 -258
- 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/AutoComplete/AutoComplete.js +28 -29
- package/esm/Calendar/Calendar.d.ts +5 -1
- package/esm/Calendar/CalendarContainer.d.ts +7 -1
- package/esm/Calendar/CalendarContainer.js +12 -5
- package/esm/Calendar/CalendarHeader.js +2 -0
- package/esm/Calendar/MonthDropdown.js +7 -2
- package/esm/Calendar/MonthDropdownItem.js +2 -2
- package/esm/Calendar/Table.js +6 -1
- package/esm/Calendar/TimeDropdown.js +17 -10
- package/esm/Calendar/types.d.ts +1 -0
- package/esm/Cascader/Cascader.js +49 -51
- package/esm/CheckPicker/CheckPicker.d.ts +2 -2
- package/esm/CheckPicker/CheckPicker.js +36 -39
- package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
- package/esm/CustomProvider/CustomProvider.d.ts +13 -0
- package/esm/CustomProvider/CustomProvider.js +3 -3
- package/esm/DateInput/DateField.d.ts +9 -31
- package/esm/DateInput/DateField.js +61 -12
- package/esm/DateInput/DateInput.d.ts +7 -2
- package/esm/DateInput/DateInput.js +77 -95
- package/esm/DateInput/index.d.ts +4 -0
- package/esm/DateInput/index.js +4 -0
- package/esm/DateInput/useDateInputState.d.ts +7 -31
- package/esm/DateInput/useDateInputState.js +41 -18
- package/esm/DateInput/useIsFocused.d.ts +7 -0
- package/esm/DateInput/useIsFocused.js +22 -0
- package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
- package/esm/DateInput/useKeyboardInputEvent.js +38 -0
- package/esm/DateInput/utils.d.ts +23 -1
- package/esm/DateInput/utils.js +150 -51
- package/esm/DatePicker/DatePicker.d.ts +25 -8
- package/esm/DatePicker/DatePicker.js +211 -244
- package/esm/DatePicker/Toolbar.js +5 -22
- package/esm/DatePicker/utils.d.ts +5 -1
- package/esm/DatePicker/utils.js +16 -1
- package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
- package/esm/DateRangeInput/DateRangeInput.js +237 -0
- package/esm/DateRangeInput/index.d.ts +3 -0
- package/esm/DateRangeInput/index.js +3 -0
- package/esm/DateRangeInput/utils.d.ts +61 -0
- package/esm/DateRangeInput/utils.js +137 -0
- package/esm/DateRangePicker/Calendar.js +25 -23
- package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
- package/esm/DateRangePicker/DateRangePicker.js +253 -205
- package/esm/DateRangePicker/types.d.ts +11 -3
- package/esm/DateRangePicker/utils.d.ts +2 -1
- package/esm/DateRangePicker/utils.js +7 -5
- package/esm/FormControl/FormControl.d.ts +11 -1
- package/esm/FormControl/FormControl.js +4 -3
- package/esm/Input/Input.d.ts +11 -0
- package/esm/Input/Input.js +12 -9
- package/esm/InputPicker/InputPicker.js +64 -65
- package/esm/MultiCascader/MultiCascader.js +43 -45
- package/esm/Overlay/OverlayTrigger.d.ts +3 -0
- package/esm/Overlay/OverlayTrigger.js +5 -0
- package/esm/Picker/PickerIndicator.d.ts +10 -0
- package/esm/Picker/PickerIndicator.js +43 -0
- package/esm/Picker/PickerLabel.d.ts +9 -0
- package/esm/Picker/PickerLabel.js +17 -0
- package/esm/Picker/PickerToggle.d.ts +17 -22
- package/esm/Picker/PickerToggle.js +54 -179
- package/esm/Picker/index.d.ts +3 -0
- package/esm/Picker/index.js +3 -0
- package/esm/Picker/usePickerRef.d.ts +19 -0
- package/esm/Picker/usePickerRef.js +82 -0
- package/esm/Picker/utils.d.ts +5 -9
- package/esm/Picker/utils.js +24 -90
- package/esm/SelectPicker/SelectPicker.d.ts +2 -2
- package/esm/SelectPicker/SelectPicker.js +42 -45
- package/esm/TreePicker/TreePicker.js +75 -78
- package/esm/index.d.ts +2 -0
- package/esm/index.js +1 -0
- package/esm/locales/index.d.ts +2 -2
- package/esm/utils/constants.d.ts +2 -1
- package/esm/utils/constants.js +1 -0
- package/esm/utils/dateUtils.d.ts +0 -1
- package/esm/utils/dateUtils.js +0 -5
- package/esm/utils/getStringLength.d.ts +2 -0
- package/esm/utils/getStringLength.js +13 -0
- package/esm/utils/index.d.ts +3 -0
- package/esm/utils/index.js +4 -1
- package/esm/utils/useCustom.js +2 -2
- package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
- package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
- package/package.json +1 -1
- package/styles/color-modes/dark.less +1 -0
- package/styles/color-modes/high-contrast.less +1 -0
- package/styles/color-modes/light.less +1 -0
- package/styles/mixins/combobox.less +10 -0
- package/styles/normalize.less +230 -231
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import type { Locale } from 'date-fns';
|
|
3
3
|
export declare const patternMap: {
|
|
4
4
|
y: string;
|
|
5
5
|
M: string;
|
|
@@ -22,9 +22,12 @@ export declare class DateField extends Object {
|
|
|
22
22
|
hour: number | null;
|
|
23
23
|
minute: number | null;
|
|
24
24
|
second: number | null;
|
|
25
|
-
meridian: 'AM' | 'PM' | null;
|
|
26
25
|
constructor(format: string, value?: Date | null);
|
|
27
26
|
}
|
|
27
|
+
interface Action {
|
|
28
|
+
type: string;
|
|
29
|
+
value: any;
|
|
30
|
+
}
|
|
28
31
|
export declare const useDateField: (format: string, localize: Locale['localize'], date?: Date | null) => {
|
|
29
32
|
dateField: {
|
|
30
33
|
year: any;
|
|
@@ -38,7 +41,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
38
41
|
hour: number | null;
|
|
39
42
|
minute: number | null;
|
|
40
43
|
second: number | null;
|
|
41
|
-
meridian: 'AM' | 'PM' | null;
|
|
42
44
|
constructor: Function;
|
|
43
45
|
toString(): string;
|
|
44
46
|
toLocaleString(): string;
|
|
@@ -59,7 +61,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
59
61
|
hour: number | null;
|
|
60
62
|
minute: number | null;
|
|
61
63
|
second: number | null;
|
|
62
|
-
meridian: 'AM' | 'PM' | null;
|
|
63
64
|
constructor: Function;
|
|
64
65
|
toString(): string;
|
|
65
66
|
toLocaleString(): string;
|
|
@@ -80,7 +81,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
80
81
|
hour: number | null;
|
|
81
82
|
minute: number | null;
|
|
82
83
|
second: number | null;
|
|
83
|
-
meridian: 'AM' | 'PM' | null;
|
|
84
84
|
constructor: Function;
|
|
85
85
|
toString(): string;
|
|
86
86
|
toLocaleString(): string;
|
|
@@ -101,7 +101,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
101
101
|
day: number | null;
|
|
102
102
|
minute: number | null;
|
|
103
103
|
second: number | null;
|
|
104
|
-
meridian: 'AM' | 'PM' | null;
|
|
105
104
|
constructor: Function;
|
|
106
105
|
toString(): string;
|
|
107
106
|
toLocaleString(): string;
|
|
@@ -122,7 +121,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
122
121
|
day: number | null;
|
|
123
122
|
hour: number | null;
|
|
124
123
|
second: number | null;
|
|
125
|
-
meridian: 'AM' | 'PM' | null;
|
|
126
124
|
constructor: Function;
|
|
127
125
|
toString(): string;
|
|
128
126
|
toLocaleString(): string;
|
|
@@ -143,28 +141,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
143
141
|
day: number | null;
|
|
144
142
|
hour: number | null;
|
|
145
143
|
minute: number | null;
|
|
146
|
-
meridian: 'AM' | 'PM' | null;
|
|
147
|
-
constructor: Function;
|
|
148
|
-
toString(): string;
|
|
149
|
-
toLocaleString(): string;
|
|
150
|
-
valueOf(): Object;
|
|
151
|
-
hasOwnProperty(v: PropertyKey): boolean;
|
|
152
|
-
isPrototypeOf(v: Object): boolean;
|
|
153
|
-
propertyIsEnumerable(v: PropertyKey): boolean;
|
|
154
|
-
should: Chai.Assertion;
|
|
155
|
-
} | {
|
|
156
|
-
meridian: any;
|
|
157
|
-
format: string;
|
|
158
|
-
patternArray: {
|
|
159
|
-
pattern: string;
|
|
160
|
-
key: string;
|
|
161
|
-
}[];
|
|
162
|
-
year: number | null;
|
|
163
|
-
month: number | null;
|
|
164
|
-
day: number | null;
|
|
165
|
-
hour: number | null;
|
|
166
|
-
minute: number | null;
|
|
167
|
-
second: number | null;
|
|
168
144
|
constructor: Function;
|
|
169
145
|
toString(): string;
|
|
170
146
|
toLocaleString(): string;
|
|
@@ -174,7 +150,9 @@ export declare const useDateField: (format: string, localize: Locale['localize']
|
|
|
174
150
|
propertyIsEnumerable(v: PropertyKey): boolean;
|
|
175
151
|
should: Chai.Assertion;
|
|
176
152
|
};
|
|
177
|
-
dispatch: import("react").Dispatch<
|
|
178
|
-
toDate: (type
|
|
153
|
+
dispatch: import("react").Dispatch<Action>;
|
|
154
|
+
toDate: (type?: string, value?: number | null) => Date | null;
|
|
179
155
|
toDateString: () => string;
|
|
156
|
+
isEmptyValue: (type?: string, value?: number | null) => boolean | undefined;
|
|
180
157
|
};
|
|
158
|
+
export {};
|
|
@@ -3,6 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
3
3
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
4
4
|
import _wrapNativeSuper from "@babel/runtime/helpers/esm/wrapNativeSuper";
|
|
5
5
|
import { useReducer } from 'react';
|
|
6
|
+
import isValid from 'date-fns/isValid';
|
|
6
7
|
import { modifyDate } from './utils';
|
|
7
8
|
export var patternMap = {
|
|
8
9
|
y: 'year',
|
|
@@ -27,7 +28,6 @@ export var DateField = /*#__PURE__*/function (_Object) {
|
|
|
27
28
|
_this.hour = null;
|
|
28
29
|
_this.minute = null;
|
|
29
30
|
_this.second = null;
|
|
30
|
-
_this.meridian = null;
|
|
31
31
|
_this.format = format;
|
|
32
32
|
var formatArray = format.match(new RegExp('([y|d|M|H|h|m|s|a])+', 'ig')) || [];
|
|
33
33
|
_this.patternArray = formatArray.map(function (pattern) {
|
|
@@ -36,14 +36,13 @@ export var DateField = /*#__PURE__*/function (_Object) {
|
|
|
36
36
|
key: patternMap[pattern[0]]
|
|
37
37
|
};
|
|
38
38
|
});
|
|
39
|
-
if (value) {
|
|
39
|
+
if (value && isValid(value)) {
|
|
40
40
|
_this.year = value.getFullYear();
|
|
41
41
|
_this.month = value.getMonth() + 1;
|
|
42
42
|
_this.day = value.getDate();
|
|
43
43
|
_this.hour = value.getHours();
|
|
44
44
|
_this.minute = value.getMinutes();
|
|
45
45
|
_this.second = value.getSeconds();
|
|
46
|
-
_this.meridian = value.getHours() > 12 ? 'PM' : 'AM';
|
|
47
46
|
}
|
|
48
47
|
return _this;
|
|
49
48
|
}
|
|
@@ -91,10 +90,8 @@ export var useDateField = function useDateField(format, localize, date) {
|
|
|
91
90
|
return _extends({}, state, {
|
|
92
91
|
second: action.value
|
|
93
92
|
});
|
|
94
|
-
case '
|
|
95
|
-
return
|
|
96
|
-
meridian: action.value
|
|
97
|
-
});
|
|
93
|
+
case 'setNewDate':
|
|
94
|
+
return new DateField(format, action.value);
|
|
98
95
|
default:
|
|
99
96
|
return state;
|
|
100
97
|
}
|
|
@@ -106,6 +103,7 @@ export var useDateField = function useDateField(format, localize, date) {
|
|
|
106
103
|
dateField.patternArray.forEach(function (item) {
|
|
107
104
|
var key = item.key,
|
|
108
105
|
pattern = item.pattern;
|
|
106
|
+
var hour = dateField.hour;
|
|
109
107
|
var value = dateField[key];
|
|
110
108
|
if (value !== null) {
|
|
111
109
|
if (pattern === 'MMM' && typeof value === 'number') {
|
|
@@ -116,8 +114,12 @@ export var useDateField = function useDateField(format, localize, date) {
|
|
|
116
114
|
value = localize === null || localize === void 0 ? void 0 : localize.month(value - 1, {
|
|
117
115
|
width: 'wide'
|
|
118
116
|
});
|
|
119
|
-
} else if (pattern === 'aa'
|
|
120
|
-
|
|
117
|
+
} else if (pattern === 'aa') {
|
|
118
|
+
if (typeof hour === 'number') {
|
|
119
|
+
value = hour > 12 ? 'PM' : 'AM';
|
|
120
|
+
} else {
|
|
121
|
+
value = 'aa';
|
|
122
|
+
}
|
|
121
123
|
} else if (pattern === 'hh' && typeof value === 'number') {
|
|
122
124
|
value = value === 0 ? 12 : value > 12 ? value - 12 : value;
|
|
123
125
|
}
|
|
@@ -129,16 +131,63 @@ export var useDateField = function useDateField(format, localize, date) {
|
|
|
129
131
|
});
|
|
130
132
|
return str;
|
|
131
133
|
};
|
|
134
|
+
|
|
135
|
+
// Check if the field value is valid.
|
|
136
|
+
var validFieldValue = function validFieldValue(type, value) {
|
|
137
|
+
var _format$match;
|
|
138
|
+
var isValid = true;
|
|
139
|
+
(_format$match = format.match(new RegExp('([y|d|M|H|h|m|s])+', 'ig'))) === null || _format$match === void 0 ? void 0 : _format$match.forEach(function (pattern) {
|
|
140
|
+
var key = patternMap[pattern[0]];
|
|
141
|
+
var fieldValue = type === key ? value : dateField[key];
|
|
142
|
+
if (fieldValue === null) {
|
|
143
|
+
isValid = false;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
return isValid;
|
|
148
|
+
};
|
|
149
|
+
var isEmptyValue = function isEmptyValue(type, value) {
|
|
150
|
+
var _format$match2;
|
|
151
|
+
var checkValueArray = (_format$match2 = format.match(new RegExp('([y|d|M|H|h|m|s])+', 'ig'))) === null || _format$match2 === void 0 ? void 0 : _format$match2.map(function (pattern) {
|
|
152
|
+
var key = patternMap[pattern[0]];
|
|
153
|
+
var fieldValue = type === key ? value : dateField[key];
|
|
154
|
+
return fieldValue !== null;
|
|
155
|
+
});
|
|
156
|
+
return checkValueArray === null || checkValueArray === void 0 ? void 0 : checkValueArray.every(function (item) {
|
|
157
|
+
return item === false;
|
|
158
|
+
});
|
|
159
|
+
};
|
|
132
160
|
var toDate = function toDate(type, value) {
|
|
133
|
-
|
|
161
|
+
var year = dateField.year,
|
|
162
|
+
month = dateField.month,
|
|
163
|
+
day = dateField.day,
|
|
164
|
+
hour = dateField.hour,
|
|
165
|
+
minute = dateField.minute,
|
|
166
|
+
second = dateField.second;
|
|
167
|
+
var date = new Date(year || 0, typeof month === 'number' ? month - 1 : 0,
|
|
168
|
+
// The default day is 1 when the value is null, otherwise it becomes the last day of the month.
|
|
169
|
+
day || 1, hour || 0, minute || 0, second || 0);
|
|
170
|
+
if (typeof type === 'undefined' || typeof value === 'undefined') {
|
|
171
|
+
return date;
|
|
172
|
+
}
|
|
173
|
+
if (value === null || !validFieldValue(type, value)) {
|
|
174
|
+
if (isEmptyValue(type, value)) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
134
177
|
return new Date('');
|
|
135
178
|
}
|
|
136
|
-
|
|
179
|
+
if (type === 'meridian' && typeof hour === 'number') {
|
|
180
|
+
var newHour = hour > 12 ? hour - 12 : hour + 12;
|
|
181
|
+
type = 'hour';
|
|
182
|
+
value = newHour;
|
|
183
|
+
}
|
|
184
|
+
return modifyDate(date, type, value);
|
|
137
185
|
};
|
|
138
186
|
return {
|
|
139
187
|
dateField: dateField,
|
|
140
188
|
dispatch: dispatch,
|
|
141
189
|
toDate: toDate,
|
|
142
|
-
toDateString: toDateString
|
|
190
|
+
toDateString: toDateString,
|
|
191
|
+
isEmptyValue: isEmptyValue
|
|
143
192
|
};
|
|
144
193
|
};
|
|
@@ -3,11 +3,16 @@ import { InputProps } from '../Input';
|
|
|
3
3
|
import { FormControlBaseProps } from '../@types/common';
|
|
4
4
|
export interface DateInputProps extends Omit<InputProps, 'value' | 'onChange' | 'defaultValue'>, FormControlBaseProps<Date | null> {
|
|
5
5
|
/**
|
|
6
|
-
* Format of the date when rendered in the input.
|
|
7
|
-
*
|
|
6
|
+
* Format of the date when rendered in the input. Format of the string is based on Unicode Technical Standard.
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
|
|
8
9
|
* @default 'yyyy-MM-dd'
|
|
9
10
|
**/
|
|
10
11
|
format?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The `placeholder` prop defines the text displayed in a form control when the control has no value.
|
|
14
|
+
*/
|
|
15
|
+
placeholder?: string;
|
|
11
16
|
}
|
|
12
17
|
/**
|
|
13
18
|
* The DateInput component lets users select a date with the keyboard.
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
-
import React, { useState,
|
|
4
|
+
import React, { useState, useRef, useMemo } from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
5
6
|
import Input from '../Input';
|
|
6
|
-
import { mergeRefs, useCustom, useControlled,
|
|
7
|
-
import { getInputSelectedState, validateDateTime,
|
|
7
|
+
import { mergeRefs, useCustom, useControlled, useEventCallback } from '../utils';
|
|
8
|
+
import { getInputSelectedState, validateDateTime, isFieldFullValue, useInputSelection } from './utils';
|
|
8
9
|
import useDateInputState from './useDateInputState';
|
|
9
|
-
|
|
10
|
+
import useKeyboardInputEvent from './useKeyboardInputEvent';
|
|
11
|
+
import useIsFocused from './useIsFocused';
|
|
10
12
|
/**
|
|
11
13
|
* The DateInput component lets users select a date with the keyboard.
|
|
12
14
|
* @version 5.58.0
|
|
@@ -17,9 +19,12 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
17
19
|
formatStr = _props$format === void 0 ? 'yyyy-MM-dd' : _props$format,
|
|
18
20
|
valueProp = props.value,
|
|
19
21
|
defaultValue = props.defaultValue,
|
|
22
|
+
placeholder = props.placeholder,
|
|
20
23
|
onChange = props.onChange,
|
|
21
24
|
onKeyDown = props.onKeyDown,
|
|
22
|
-
|
|
25
|
+
onBlur = props.onBlur,
|
|
26
|
+
onFocus = props.onFocus,
|
|
27
|
+
rest = _objectWithoutPropertiesLoose(props, ["format", "value", "defaultValue", "placeholder", "onChange", "onKeyDown", "onBlur", "onFocus"]);
|
|
23
28
|
var inputRef = useRef();
|
|
24
29
|
var _useState = useState({
|
|
25
30
|
selectedPattern: 'y',
|
|
@@ -30,14 +35,14 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
30
35
|
setSelectedState = _useState[1];
|
|
31
36
|
var _useCustom = useCustom('Calendar'),
|
|
32
37
|
locale = _useCustom.locale;
|
|
33
|
-
var
|
|
38
|
+
var dateLocale = locale.dateLocale;
|
|
34
39
|
var _useControlled = useControlled(valueProp, defaultValue),
|
|
35
40
|
value = _useControlled[0],
|
|
36
41
|
setValue = _useControlled[1],
|
|
37
42
|
isControlled = _useControlled[2];
|
|
38
43
|
var _useDateInputState = useDateInputState({
|
|
39
44
|
formatStr: formatStr,
|
|
40
|
-
|
|
45
|
+
locale: dateLocale,
|
|
41
46
|
date: value,
|
|
42
47
|
isControlledDate: isControlled
|
|
43
48
|
}),
|
|
@@ -45,49 +50,36 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
45
50
|
setDateOffset = _useDateInputState.setDateOffset,
|
|
46
51
|
setDateField = _useDateInputState.setDateField,
|
|
47
52
|
getDateField = _useDateInputState.getDateField,
|
|
48
|
-
toDateString = _useDateInputState.toDateString
|
|
53
|
+
toDateString = _useDateInputState.toDateString,
|
|
54
|
+
isEmptyValue = _useDateInputState.isEmptyValue;
|
|
49
55
|
var dateString = toDateString();
|
|
50
56
|
var keyPressOptions = useMemo(function () {
|
|
51
57
|
return {
|
|
52
58
|
formatStr: formatStr,
|
|
53
|
-
localize: localize,
|
|
59
|
+
localize: dateLocale.localize,
|
|
54
60
|
selectedMonth: dateField.month,
|
|
55
61
|
dateString: dateString
|
|
56
62
|
};
|
|
57
|
-
}, [dateField, dateString, formatStr,
|
|
58
|
-
var
|
|
59
|
-
if (selectionStart === void 0) {
|
|
60
|
-
selectionStart = selectedState.selectionStart;
|
|
61
|
-
}
|
|
62
|
-
if (selectionEnd === void 0) {
|
|
63
|
-
selectionEnd = selectedState.selectionEnd;
|
|
64
|
-
}
|
|
65
|
-
var input = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current;
|
|
66
|
-
if (isTestEnvironment) {
|
|
67
|
-
safeSetSelection(input, selectionStart, selectionEnd);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
requestAnimationFrame(function () {
|
|
71
|
-
safeSetSelection(input, selectionStart, selectionEnd);
|
|
72
|
-
});
|
|
73
|
-
}, [selectedState]);
|
|
74
|
-
var handleChange = useCallback(function (value, event) {
|
|
75
|
-
setValue(value);
|
|
63
|
+
}, [dateField, dateString, formatStr, dateLocale]);
|
|
64
|
+
var handleChange = useEventCallback(function (value, event) {
|
|
76
65
|
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
77
|
-
|
|
78
|
-
|
|
66
|
+
setValue(value);
|
|
67
|
+
});
|
|
68
|
+
var setSelectionRange = useInputSelection(inputRef);
|
|
69
|
+
var onSegmentChange = useEventCallback(function (event, nextDirection) {
|
|
79
70
|
var input = event.target;
|
|
80
|
-
var
|
|
71
|
+
var key = event.key;
|
|
72
|
+
var direction = nextDirection || (key === 'ArrowRight' ? 'right' : 'left');
|
|
81
73
|
var state = getInputSelectedState(_extends({}, keyPressOptions, {
|
|
82
74
|
input: input,
|
|
83
75
|
direction: direction
|
|
84
76
|
}));
|
|
85
77
|
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
86
78
|
setSelectedState(state);
|
|
87
|
-
}
|
|
88
|
-
var
|
|
89
|
-
var key = event.key;
|
|
79
|
+
});
|
|
80
|
+
var onSegmentValueChange = useEventCallback(function (event) {
|
|
90
81
|
var input = event.target;
|
|
82
|
+
var key = event.key;
|
|
91
83
|
var offset = key === 'ArrowUp' ? 1 : -1;
|
|
92
84
|
var state = getInputSelectedState(_extends({}, keyPressOptions, {
|
|
93
85
|
input: input,
|
|
@@ -98,31 +90,10 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
98
90
|
return handleChange(date, event);
|
|
99
91
|
});
|
|
100
92
|
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
101
|
-
}
|
|
102
|
-
var
|
|
103
|
-
var patternGroup = getPatternGroups(formatStr, pattern);
|
|
104
|
-
if (value.toString().length === patternGroup.length) {
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
switch (pattern) {
|
|
108
|
-
case 'M':
|
|
109
|
-
return parseInt(value + "0") > 12;
|
|
110
|
-
case 'd':
|
|
111
|
-
return parseInt(value + "0") > 31;
|
|
112
|
-
case 'H':
|
|
113
|
-
return parseInt(value + "0") > 23;
|
|
114
|
-
case 'h':
|
|
115
|
-
return parseInt(value + "0") > 12;
|
|
116
|
-
case 'm':
|
|
117
|
-
case 's':
|
|
118
|
-
return parseInt(value + "0") > 59;
|
|
119
|
-
default:
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
}, [formatStr]);
|
|
123
|
-
var handleChangeFieldValueWithNumericKeys = useCallback(function (event) {
|
|
124
|
-
var key = event.key;
|
|
93
|
+
});
|
|
94
|
+
var onSegmentValueChangeWithNumericKeys = useEventCallback(function (event) {
|
|
125
95
|
var input = event.target;
|
|
96
|
+
var key = event.key;
|
|
126
97
|
var pattern = selectedState.selectedPattern;
|
|
127
98
|
if (!pattern) {
|
|
128
99
|
return;
|
|
@@ -155,61 +126,72 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
155
126
|
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
156
127
|
|
|
157
128
|
// If the field is full value, move the cursor to the next field
|
|
158
|
-
if (isFieldFullValue(newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
159
|
-
|
|
129
|
+
if (isFieldFullValue(formatStr, newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
130
|
+
onSegmentChange(event, 'right');
|
|
160
131
|
}
|
|
161
|
-
}
|
|
162
|
-
var
|
|
132
|
+
});
|
|
133
|
+
var onSegmentValueRemove = useEventCallback(function (event) {
|
|
134
|
+
var input = event.target;
|
|
163
135
|
if (selectedState.selectedPattern) {
|
|
136
|
+
var nextState = getInputSelectedState(_extends({}, keyPressOptions, {
|
|
137
|
+
input: input,
|
|
138
|
+
valueOffset: null
|
|
139
|
+
}));
|
|
140
|
+
setSelectedState(nextState);
|
|
141
|
+
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
164
142
|
setDateField(selectedState.selectedPattern, null, function (date) {
|
|
165
143
|
return handleChange(date, event);
|
|
166
144
|
});
|
|
167
|
-
setSelectionRange();
|
|
168
145
|
}
|
|
169
|
-
}
|
|
170
|
-
var
|
|
171
|
-
var _key$match;
|
|
172
|
-
var key = event.key;
|
|
173
|
-
switch (key) {
|
|
174
|
-
case 'ArrowRight':
|
|
175
|
-
case 'ArrowLeft':
|
|
176
|
-
handleChangeField(event);
|
|
177
|
-
event.preventDefault();
|
|
178
|
-
break;
|
|
179
|
-
case 'ArrowUp':
|
|
180
|
-
case 'ArrowDown':
|
|
181
|
-
handleChangeFieldValue(event);
|
|
182
|
-
event.preventDefault();
|
|
183
|
-
break;
|
|
184
|
-
case 'Backspace':
|
|
185
|
-
handleRemoveFieldValue(event);
|
|
186
|
-
event.preventDefault();
|
|
187
|
-
break;
|
|
188
|
-
case (_key$match = key.match(/\d/)) === null || _key$match === void 0 ? void 0 : _key$match.input:
|
|
189
|
-
handleChangeFieldValueWithNumericKeys(event);
|
|
190
|
-
event.preventDefault();
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
194
|
-
};
|
|
195
|
-
var handleClick = useCallback(function (event) {
|
|
146
|
+
});
|
|
147
|
+
var handleClick = useEventCallback(function (event) {
|
|
196
148
|
var input = event.target;
|
|
197
149
|
var state = getInputSelectedState(_extends({}, keyPressOptions, {
|
|
198
150
|
input: input
|
|
199
151
|
}));
|
|
200
152
|
setSelectedState(state);
|
|
201
153
|
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
202
|
-
}
|
|
154
|
+
});
|
|
155
|
+
var onKeyboardInput = useKeyboardInputEvent({
|
|
156
|
+
onSegmentChange: onSegmentChange,
|
|
157
|
+
onSegmentValueChange: onSegmentValueChange,
|
|
158
|
+
onSegmentValueChangeWithNumericKeys: onSegmentValueChangeWithNumericKeys,
|
|
159
|
+
onSegmentValueRemove: onSegmentValueRemove,
|
|
160
|
+
onKeyDown: onKeyDown
|
|
161
|
+
});
|
|
162
|
+
var _useIsFocused = useIsFocused({
|
|
163
|
+
onBlur: onBlur,
|
|
164
|
+
onFocus: onFocus
|
|
165
|
+
}),
|
|
166
|
+
focused = _useIsFocused[0],
|
|
167
|
+
focusEventProps = _useIsFocused[1];
|
|
168
|
+
var renderedValue = useMemo(function () {
|
|
169
|
+
if (!isEmptyValue()) {
|
|
170
|
+
return dateString;
|
|
171
|
+
}
|
|
172
|
+
return !focused ? '' : dateString;
|
|
173
|
+
}, [dateString, focused, isEmptyValue]);
|
|
203
174
|
return /*#__PURE__*/React.createElement(Input, _extends({
|
|
204
|
-
inputMode:
|
|
175
|
+
inputMode: focused ? 'numeric' : 'text',
|
|
205
176
|
autoComplete: "off",
|
|
206
177
|
autoCorrect: "off",
|
|
207
178
|
spellCheck: false,
|
|
208
179
|
ref: mergeRefs(inputRef, ref),
|
|
209
|
-
onKeyDown:
|
|
180
|
+
onKeyDown: onKeyboardInput,
|
|
210
181
|
onClick: handleClick,
|
|
211
|
-
value:
|
|
212
|
-
|
|
182
|
+
value: renderedValue,
|
|
183
|
+
placeholder: placeholder || formatStr
|
|
184
|
+
}, focusEventProps, rest));
|
|
213
185
|
});
|
|
214
186
|
DateInput.displayName = 'DateInput';
|
|
187
|
+
DateInput.propTypes = {
|
|
188
|
+
defaultValue: PropTypes.instanceOf(Date),
|
|
189
|
+
format: PropTypes.string,
|
|
190
|
+
value: PropTypes.instanceOf(Date),
|
|
191
|
+
placeholder: PropTypes.string,
|
|
192
|
+
onChange: PropTypes.func,
|
|
193
|
+
onKeyDown: PropTypes.func,
|
|
194
|
+
onBlur: PropTypes.func,
|
|
195
|
+
onFocus: PropTypes.func
|
|
196
|
+
};
|
|
215
197
|
export default DateInput;
|
package/esm/DateInput/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import DateInput from './DateInput';
|
|
2
|
+
export { useDateInputState } from './useDateInputState';
|
|
3
|
+
export { useKeyboardInputEvent } from './useKeyboardInputEvent';
|
|
4
|
+
export { useIsFocused } from './useIsFocused';
|
|
5
|
+
export * from './utils';
|
|
2
6
|
export type { DateInputProps } from './DateInput';
|
|
3
7
|
export default DateInput;
|
package/esm/DateInput/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import DateInput from './DateInput';
|
|
3
|
+
export { useDateInputState } from './useDateInputState';
|
|
4
|
+
export { useKeyboardInputEvent } from './useKeyboardInputEvent';
|
|
5
|
+
export { useIsFocused } from './useIsFocused';
|
|
6
|
+
export * from './utils';
|
|
3
7
|
export default DateInput;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { format } from '../utils/dateUtils';
|
|
1
2
|
import type { Locale } from 'date-fns';
|
|
2
3
|
interface DateInputState {
|
|
3
4
|
formatStr: string;
|
|
4
|
-
|
|
5
|
+
formatDate?: typeof format;
|
|
6
|
+
locale: Locale;
|
|
5
7
|
date?: Date | null;
|
|
6
8
|
isControlledDate?: boolean;
|
|
7
9
|
}
|
|
8
|
-
declare function useDateInputState({ formatStr,
|
|
10
|
+
export declare function useDateInputState({ formatStr, locale, date, isControlledDate }: DateInputState): {
|
|
9
11
|
dateField: {
|
|
10
12
|
year: any;
|
|
11
13
|
format: string;
|
|
@@ -18,7 +20,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
18
20
|
hour: number | null;
|
|
19
21
|
minute: number | null;
|
|
20
22
|
second: number | null;
|
|
21
|
-
meridian: "AM" | "PM" | null;
|
|
22
23
|
constructor: Function;
|
|
23
24
|
toString(): string;
|
|
24
25
|
toLocaleString(): string;
|
|
@@ -39,7 +40,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
39
40
|
hour: number | null;
|
|
40
41
|
minute: number | null;
|
|
41
42
|
second: number | null;
|
|
42
|
-
meridian: "AM" | "PM" | null;
|
|
43
43
|
constructor: Function;
|
|
44
44
|
toString(): string;
|
|
45
45
|
toLocaleString(): string;
|
|
@@ -60,7 +60,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
60
60
|
hour: number | null;
|
|
61
61
|
minute: number | null;
|
|
62
62
|
second: number | null;
|
|
63
|
-
meridian: "AM" | "PM" | null;
|
|
64
63
|
constructor: Function;
|
|
65
64
|
toString(): string;
|
|
66
65
|
toLocaleString(): string;
|
|
@@ -81,7 +80,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
81
80
|
day: number | null;
|
|
82
81
|
minute: number | null;
|
|
83
82
|
second: number | null;
|
|
84
|
-
meridian: "AM" | "PM" | null;
|
|
85
83
|
constructor: Function;
|
|
86
84
|
toString(): string;
|
|
87
85
|
toLocaleString(): string;
|
|
@@ -102,7 +100,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
102
100
|
day: number | null;
|
|
103
101
|
hour: number | null;
|
|
104
102
|
second: number | null;
|
|
105
|
-
meridian: "AM" | "PM" | null;
|
|
106
103
|
constructor: Function;
|
|
107
104
|
toString(): string;
|
|
108
105
|
toLocaleString(): string;
|
|
@@ -123,28 +120,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
123
120
|
day: number | null;
|
|
124
121
|
hour: number | null;
|
|
125
122
|
minute: number | null;
|
|
126
|
-
meridian: "AM" | "PM" | null;
|
|
127
|
-
constructor: Function;
|
|
128
|
-
toString(): string;
|
|
129
|
-
toLocaleString(): string;
|
|
130
|
-
valueOf(): Object;
|
|
131
|
-
hasOwnProperty(v: PropertyKey): boolean;
|
|
132
|
-
isPrototypeOf(v: Object): boolean;
|
|
133
|
-
propertyIsEnumerable(v: PropertyKey): boolean;
|
|
134
|
-
should: Chai.Assertion;
|
|
135
|
-
} | {
|
|
136
|
-
meridian: any;
|
|
137
|
-
format: string;
|
|
138
|
-
patternArray: {
|
|
139
|
-
pattern: string;
|
|
140
|
-
key: string;
|
|
141
|
-
}[];
|
|
142
|
-
year: number | null;
|
|
143
|
-
month: number | null;
|
|
144
|
-
day: number | null;
|
|
145
|
-
hour: number | null;
|
|
146
|
-
minute: number | null;
|
|
147
|
-
second: number | null;
|
|
148
123
|
constructor: Function;
|
|
149
124
|
toString(): string;
|
|
150
125
|
toLocaleString(): string;
|
|
@@ -154,12 +129,13 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
154
129
|
propertyIsEnumerable(v: PropertyKey): boolean;
|
|
155
130
|
should: Chai.Assertion;
|
|
156
131
|
};
|
|
157
|
-
setDateOffset: (pattern: string, offset: number, callback?: ((newDate: Date) => void) | undefined) => void;
|
|
158
|
-
setDateField: (pattern: string, value: number | null, callback?: ((newDate: Date) => void) | undefined) => void;
|
|
132
|
+
setDateOffset: (pattern: string, offset: number, callback?: ((newDate: Date | null) => void) | undefined) => void;
|
|
133
|
+
setDateField: (pattern: string, value: number | null, callback?: ((newDate: Date | null) => void) | undefined) => void;
|
|
159
134
|
getDateField: (pattern: string) => {
|
|
160
135
|
name: any;
|
|
161
136
|
value: any;
|
|
162
137
|
};
|
|
163
138
|
toDateString: () => string;
|
|
139
|
+
isEmptyValue: (type?: string | undefined, value?: number | null | undefined) => boolean | undefined;
|
|
164
140
|
};
|
|
165
141
|
export default useDateInputState;
|