rsuite 5.48.0 → 5.49.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 +22 -0
- package/Cascader/styles/index.less +1 -0
- package/DatePicker/styles/index.less +18 -11
- package/DateRangeInput/package.json +7 -0
- package/DateRangePicker/styles/index.less +10 -0
- package/InputGroup/styles/index.less +1 -0
- package/Picker/styles/index.less +20 -0
- package/README.md +34 -24
- package/Sidenav/styles/index.less +2 -0
- package/cjs/Calendar/CalendarContainer.d.ts +2 -0
- 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/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 +20 -7
- package/cjs/DatePicker/DatePicker.js +215 -245
- package/cjs/DatePicker/PickerIndicator.d.ts +10 -0
- package/cjs/DatePicker/PickerIndicator.js +48 -0
- package/cjs/DatePicker/PickerLabel.d.ts +9 -0
- package/cjs/DatePicker/PickerLabel.js +23 -0
- package/cjs/DatePicker/Toolbar.js +3 -21
- 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/DateRangePicker.js +12 -2
- package/cjs/FormControl/FormControl.js +2 -1
- package/cjs/Input/Input.d.ts +11 -0
- package/cjs/Input/Input.js +11 -8
- package/cjs/MultiCascader/MultiCascader.js +3 -1
- package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
- package/cjs/Overlay/OverlayTrigger.js +5 -0
- package/cjs/Picker/PickerToggle.js +2 -1
- package/cjs/Picker/usePickerRef.d.ts +17 -0
- package/cjs/Picker/usePickerRef.js +82 -0
- package/cjs/index.d.ts +2 -0
- package/cjs/index.js +3 -1
- package/cjs/locales/index.d.ts +2 -2
- package/cjs/useMediaQuery/useMediaQuery.js +2 -2
- package/cjs/utils/index.d.ts +2 -0
- package/cjs/utils/index.js +8 -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 +51 -141
- 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 +51 -141
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +51 -9
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +51 -9
- package/dist/rsuite.js +4804 -250
- 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/Calendar/CalendarContainer.d.ts +2 -0
- 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/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 +20 -7
- package/esm/DatePicker/DatePicker.js +218 -248
- package/esm/DatePicker/PickerIndicator.d.ts +10 -0
- package/esm/DatePicker/PickerIndicator.js +42 -0
- package/esm/DatePicker/PickerLabel.d.ts +9 -0
- package/esm/DatePicker/PickerLabel.js +17 -0
- package/esm/DatePicker/Toolbar.js +3 -21
- 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/DateRangePicker.js +12 -2
- package/esm/FormControl/FormControl.js +2 -1
- package/esm/Input/Input.d.ts +11 -0
- package/esm/Input/Input.js +12 -9
- package/esm/MultiCascader/MultiCascader.js +4 -2
- package/esm/Overlay/OverlayTrigger.d.ts +3 -0
- package/esm/Overlay/OverlayTrigger.js +5 -0
- package/esm/Picker/PickerToggle.js +2 -1
- package/esm/Picker/usePickerRef.d.ts +17 -0
- package/esm/Picker/usePickerRef.js +77 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.js +1 -0
- package/esm/locales/index.d.ts +2 -2
- package/esm/useMediaQuery/useMediaQuery.js +2 -2
- package/esm/utils/index.d.ts +2 -0
- package/esm/utils/index.js +3 -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/normalize.less +230 -231
|
@@ -6,6 +6,8 @@ import { CalendarState } from './useCalendarState';
|
|
|
6
6
|
export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'onChange' | 'onMouseMove'>, CalendarHeaderProps {
|
|
7
7
|
/** The panel render based on date range */
|
|
8
8
|
dateRange?: Date[];
|
|
9
|
+
/** The Id of the target element that triggers the opening of the calendar */
|
|
10
|
+
targetId?: string;
|
|
9
11
|
/** Date displayed on the current page */
|
|
10
12
|
calendarDate: Date;
|
|
11
13
|
/** Whether to show week numbers */
|
|
@@ -9,7 +9,7 @@ import TimeDropdown from './TimeDropdown';
|
|
|
9
9
|
import CalendarBody from './CalendarBody';
|
|
10
10
|
import CalendarHeader from './CalendarHeader';
|
|
11
11
|
import { useClassNames } from '../utils';
|
|
12
|
-
import { disabledTime, addMonths, shouldRenderDate, shouldRenderTime, shouldRenderMonth, isSameMonth, calendarOnlyProps, omitHideDisabledProps } from '../utils/dateUtils';
|
|
12
|
+
import { disabledTime, addMonths, shouldRenderDate, shouldRenderTime, shouldRenderMonth, isSameMonth, calendarOnlyProps, omitHideDisabledProps, isValid } from '../utils/dateUtils';
|
|
13
13
|
import { CalendarProvider } from './CalendarContext';
|
|
14
14
|
import useCalendarState, { CalendarState } from './useCalendarState';
|
|
15
15
|
import AngleUpIcon from '@rsuite/icons/legacy/AngleUp';
|
|
@@ -28,6 +28,7 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
28
28
|
hoverRangeValue = props.hoverRangeValue,
|
|
29
29
|
_props$isoWeek = props.isoWeek,
|
|
30
30
|
isoWeek = _props$isoWeek === void 0 ? false : _props$isoWeek,
|
|
31
|
+
targetId = props.targetId,
|
|
31
32
|
limitEndYear = props.limitEndYear,
|
|
32
33
|
limitStartYear = props.limitStartYear,
|
|
33
34
|
locale = props.locale,
|
|
@@ -40,7 +41,7 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
40
41
|
onToggleMeridian = props.onToggleMeridian,
|
|
41
42
|
onToggleMonthDropdown = props.onToggleMonthDropdown,
|
|
42
43
|
onToggleTimeDropdown = props.onToggleTimeDropdown,
|
|
43
|
-
|
|
44
|
+
calendarDateProp = props.calendarDate,
|
|
44
45
|
cellClassName = props.cellClassName,
|
|
45
46
|
renderCell = props.renderCell,
|
|
46
47
|
renderTitle = props.renderTitle,
|
|
@@ -48,7 +49,7 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
48
49
|
showMeridian = props.showMeridian,
|
|
49
50
|
showWeekNumbers = props.showWeekNumbers,
|
|
50
51
|
inline = props.inline,
|
|
51
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "isoWeek", "limitEndYear", "limitStartYear", "locale", "onChangeMonth", "onChangeTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "cellClassName", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
|
|
52
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "isoWeek", "targetId", "limitEndYear", "limitStartYear", "locale", "onChangeMonth", "onChangeTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "cellClassName", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
|
|
52
53
|
var _useClassNames = useClassNames(classPrefix),
|
|
53
54
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
54
55
|
merge = _useClassNames.merge,
|
|
@@ -58,6 +59,9 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
58
59
|
reset = _useCalendarState.reset,
|
|
59
60
|
openMonth = _useCalendarState.openMonth,
|
|
60
61
|
openTime = _useCalendarState.openTime;
|
|
62
|
+
var calendarDate = useMemo(function () {
|
|
63
|
+
return isValid(calendarDateProp) ? calendarDateProp : new Date();
|
|
64
|
+
}, [calendarDateProp]);
|
|
61
65
|
var isDisabledDate = useCallback(function (date) {
|
|
62
66
|
var _disabledDate;
|
|
63
67
|
return (_disabledDate = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date)) !== null && _disabledDate !== void 0 ? _disabledDate : false;
|
|
@@ -123,6 +127,7 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
123
127
|
hoverRangeValue: hoverRangeValue,
|
|
124
128
|
inSameMonth: inSameThisMonthDate,
|
|
125
129
|
isoWeek: isoWeek,
|
|
130
|
+
targetId: targetId,
|
|
126
131
|
locale: locale,
|
|
127
132
|
onChangeMonth: handleChangeMonth,
|
|
128
133
|
onChangeTime: onChangeTime,
|
|
@@ -133,10 +138,12 @@ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
133
138
|
showWeekNumbers: showWeekNumbers,
|
|
134
139
|
inline: inline
|
|
135
140
|
};
|
|
136
|
-
}, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, locale, onChangeTime, onMouseMove, onSelect, cellClassName, renderCell, showWeekNumbers]);
|
|
141
|
+
}, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, targetId, locale, onChangeTime, onMouseMove, onSelect, cellClassName, renderCell, showWeekNumbers]);
|
|
137
142
|
return /*#__PURE__*/React.createElement(CalendarProvider, {
|
|
138
143
|
value: contextValue
|
|
139
|
-
}, /*#__PURE__*/React.createElement(Component, _extends({
|
|
144
|
+
}, /*#__PURE__*/React.createElement(Component, _extends({
|
|
145
|
+
"data-testid": "calendar"
|
|
146
|
+
}, omitHideDisabledProps(rest), {
|
|
140
147
|
className: calendarClasses,
|
|
141
148
|
ref: ref
|
|
142
149
|
}), /*#__PURE__*/React.createElement(CalendarHeader, {
|
|
@@ -122,6 +122,7 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
122
122
|
}), hasMonth && monthToolbar, showTime && /*#__PURE__*/React.createElement("div", {
|
|
123
123
|
className: prefix('time-toolbar')
|
|
124
124
|
}, /*#__PURE__*/React.createElement(Button, _extends({}, btnProps, {
|
|
125
|
+
"aria-label": "Select time",
|
|
125
126
|
className: timeTitleClasses,
|
|
126
127
|
onClick: onToggleTimeDropdown,
|
|
127
128
|
disabled: disableSelectTime
|
|
@@ -129,6 +130,7 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
129
130
|
date: date,
|
|
130
131
|
formatStr: getTimeFormat()
|
|
131
132
|
})), showMeridian && /*#__PURE__*/React.createElement(Button, _extends({}, btnProps, {
|
|
133
|
+
"aria-label": "Toggle meridian",
|
|
132
134
|
className: prefix('meridian'),
|
|
133
135
|
onClick: onToggleMeridian,
|
|
134
136
|
disabled: disableSelectTime
|
|
@@ -35,7 +35,8 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
35
35
|
rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "limitStartYear", "limitEndYear", "show", "height", "width", "disabledMonth"]);
|
|
36
36
|
var _useCalendarContext = useCalendarContext(),
|
|
37
37
|
_useCalendarContext$d = _useCalendarContext.date,
|
|
38
|
-
date = _useCalendarContext$d === void 0 ? new Date() : _useCalendarContext$d
|
|
38
|
+
date = _useCalendarContext$d === void 0 ? new Date() : _useCalendarContext$d,
|
|
39
|
+
targetId = _useCalendarContext.targetId;
|
|
39
40
|
var _useClassNames = useClassNames(classPrefix),
|
|
40
41
|
prefix = _useClassNames.prefix,
|
|
41
42
|
merge = _useClassNames.merge,
|
|
@@ -69,6 +70,7 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
69
70
|
return /*#__PURE__*/React.createElement("div", {
|
|
70
71
|
className: rowClassName,
|
|
71
72
|
role: "row",
|
|
73
|
+
"aria-label": "" + year,
|
|
72
74
|
style: style
|
|
73
75
|
}, /*#__PURE__*/React.createElement("div", {
|
|
74
76
|
className: titleClassName,
|
|
@@ -92,7 +94,10 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
92
94
|
var initialItemIndex = DateUtils.getYear(date) - startYear;
|
|
93
95
|
var initialScrollOffset = itemSize * initialItemIndex;
|
|
94
96
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
95
|
-
role: "
|
|
97
|
+
role: "grid",
|
|
98
|
+
"aria-label": "Select month",
|
|
99
|
+
tabIndex: -1,
|
|
100
|
+
id: targetId ? targetId + "-" + classPrefix : undefined
|
|
96
101
|
}, rest, {
|
|
97
102
|
ref: ref,
|
|
98
103
|
className: classes
|
|
@@ -55,8 +55,8 @@ var MonthDropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
55
55
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
56
56
|
key: month,
|
|
57
57
|
role: "gridcell",
|
|
58
|
-
"aria-selected": active
|
|
59
|
-
"aria-disabled": disabled
|
|
58
|
+
"aria-selected": active,
|
|
59
|
+
"aria-disabled": disabled,
|
|
60
60
|
"aria-label": ariaLabel,
|
|
61
61
|
tabIndex: active ? 0 : -1,
|
|
62
62
|
ref: ref,
|
package/esm/Calendar/Table.js
CHANGED
|
@@ -6,6 +6,7 @@ import PropTypes from 'prop-types';
|
|
|
6
6
|
import TableRow from './TableRow';
|
|
7
7
|
import TableHeaderRow from './TableHeaderRow';
|
|
8
8
|
import { useClassNames } from '../utils';
|
|
9
|
+
import { useCalendarContext } from './CalendarContext';
|
|
9
10
|
var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
10
11
|
var _props$as = props.as,
|
|
11
12
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
@@ -19,8 +20,12 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
19
20
|
merge = _useClassNames.merge,
|
|
20
21
|
withClassPrefix = _useClassNames.withClassPrefix;
|
|
21
22
|
var classes = merge(className, withClassPrefix());
|
|
23
|
+
var _useCalendarContext = useCalendarContext(),
|
|
24
|
+
targetId = _useCalendarContext.targetId;
|
|
22
25
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
23
|
-
role: "grid"
|
|
26
|
+
role: "grid",
|
|
27
|
+
tabIndex: -1,
|
|
28
|
+
id: targetId ? targetId + "-" + classPrefix : undefined
|
|
24
29
|
}, rest, {
|
|
25
30
|
ref: ref,
|
|
26
31
|
className: classes
|
|
@@ -90,7 +90,8 @@ var TimeDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
90
90
|
locale = _useCalendarContext.locale,
|
|
91
91
|
format = _useCalendarContext.format,
|
|
92
92
|
date = _useCalendarContext.date,
|
|
93
|
-
onSelect = _useCalendarContext.onChangeTime
|
|
93
|
+
onSelect = _useCalendarContext.onChangeTime,
|
|
94
|
+
targetId = _useCalendarContext.targetId;
|
|
94
95
|
var rowRef = useRef(null);
|
|
95
96
|
useEffect(function () {
|
|
96
97
|
var time = getTime({
|
|
@@ -141,24 +142,26 @@ var TimeDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
141
142
|
});
|
|
142
143
|
items.push( /*#__PURE__*/React.createElement("li", {
|
|
143
144
|
key: i,
|
|
144
|
-
role: "
|
|
145
|
-
}, /*#__PURE__*/React.createElement("a", {
|
|
146
|
-
role: "button",
|
|
147
|
-
className: itemClasses,
|
|
145
|
+
role: "option",
|
|
148
146
|
tabIndex: -1,
|
|
147
|
+
"aria-label": i + " " + type,
|
|
148
|
+
"aria-selected": active === i,
|
|
149
|
+
"aria-disabled": disabled,
|
|
149
150
|
"data-key": type + "-" + i,
|
|
150
151
|
onClick: !disabled ? partial(handleClick, type, i) : undefined
|
|
152
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
153
|
+
className: itemClasses
|
|
151
154
|
}, showMeridian && type === 'hours' && i === 0 ? '12' : i)));
|
|
152
155
|
}
|
|
153
156
|
}
|
|
154
157
|
return /*#__PURE__*/React.createElement("div", {
|
|
155
|
-
className: prefix('column')
|
|
156
|
-
role: "listitem"
|
|
158
|
+
className: prefix('column')
|
|
157
159
|
}, /*#__PURE__*/React.createElement("div", {
|
|
158
160
|
className: prefix('column-title')
|
|
159
161
|
}, locale === null || locale === void 0 ? void 0 : locale[type]), /*#__PURE__*/React.createElement("ul", {
|
|
160
162
|
"data-type": type,
|
|
161
|
-
role: "
|
|
163
|
+
role: "listbox",
|
|
164
|
+
"aria-label": "Select " + type
|
|
162
165
|
}, items));
|
|
163
166
|
};
|
|
164
167
|
var time = getTime({
|
|
@@ -166,9 +169,13 @@ var TimeDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
166
169
|
date: date,
|
|
167
170
|
showMeridian: showMeridian
|
|
168
171
|
});
|
|
169
|
-
var classes = merge(className, rootPrefix(classPrefix)
|
|
172
|
+
var classes = merge(className, rootPrefix(classPrefix), {
|
|
173
|
+
show: show
|
|
174
|
+
});
|
|
170
175
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
171
|
-
role: "
|
|
176
|
+
role: "group",
|
|
177
|
+
tabIndex: -1,
|
|
178
|
+
id: targetId ? targetId + "-" + classPrefix : undefined
|
|
172
179
|
}, DateUtils.omitHideDisabledProps(rest), {
|
|
173
180
|
ref: ref,
|
|
174
181
|
className: classes
|
package/esm/Calendar/types.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface CalendarInnerContextValue {
|
|
|
16
16
|
cellClassName?: (date: Date) => string | undefined;
|
|
17
17
|
showWeekNumbers?: boolean;
|
|
18
18
|
inline?: boolean;
|
|
19
|
+
targetId?: string;
|
|
19
20
|
}
|
|
20
21
|
export interface CalendarContextValue extends CalendarInnerContextValue {
|
|
21
22
|
locale: CalendarLocale;
|
|
@@ -67,6 +67,19 @@ declare const CustomContext: React.Context<CustomProviderProps<{
|
|
|
67
67
|
more: string;
|
|
68
68
|
prev: string;
|
|
69
69
|
next: string;
|
|
70
|
+
/**
|
|
71
|
+
* Return the date parsed from string using the given format string.
|
|
72
|
+
*
|
|
73
|
+
* Example:
|
|
74
|
+
*
|
|
75
|
+
* import parse from 'date-fns/parse';
|
|
76
|
+
* import eo from 'date-fns/locale/eo'
|
|
77
|
+
*
|
|
78
|
+
* function parseDate(date, formatStr) {
|
|
79
|
+
* return parse(date, formatStr, new Date(), { locale: eo });
|
|
80
|
+
* }
|
|
81
|
+
*
|
|
82
|
+
* */
|
|
70
83
|
first: string;
|
|
71
84
|
last: string;
|
|
72
85
|
limit: string;
|
|
@@ -1,11 +1,11 @@
|
|
|
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
|
|
4
|
+
import React from 'react';
|
|
5
5
|
import { getClassNamePrefix, prefix } from '../utils/prefix';
|
|
6
6
|
import { addClass, removeClass, canUseDOM } from '../DOMHelper';
|
|
7
7
|
import ToastContainer, { toastPlacements } from '../toaster/ToastContainer';
|
|
8
|
-
import { usePortal } from '../utils';
|
|
8
|
+
import { usePortal, useIsomorphicLayoutEffect } from '../utils';
|
|
9
9
|
var CustomContext = /*#__PURE__*/React.createContext({});
|
|
10
10
|
var themes = ['light', 'dark', 'high-contrast'];
|
|
11
11
|
|
|
@@ -36,7 +36,7 @@ var CustomProvider = function CustomProvider(props) {
|
|
|
36
36
|
disableRipple: disableRipple
|
|
37
37
|
}, rest);
|
|
38
38
|
}, [classPrefix, theme, disableRipple, rest]);
|
|
39
|
-
|
|
39
|
+
useIsomorphicLayoutEffect(function () {
|
|
40
40
|
if (canUseDOM && theme) {
|
|
41
41
|
addClass(document.body, prefix(classPrefix, "theme-" + theme));
|
|
42
42
|
|
|
@@ -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.
|