rsuite 5.48.1 → 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 +14 -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 +32 -22
- 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 +210 -241
- 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/Input/Input.d.ts +11 -0
- package/cjs/Input/Input.js +11 -8
- package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
- package/cjs/Overlay/OverlayTrigger.js +5 -0
- 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/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 +4800 -246
- 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 +213 -244
- 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/Input/Input.d.ts +11 -0
- package/esm/Input/Input.js +12 -9
- package/esm/Overlay/OverlayTrigger.d.ts +3 -0
- package/esm/Overlay/OverlayTrigger.js +5 -0
- 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/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
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface PickerIndicatorProps {
|
|
3
|
+
loading?: boolean;
|
|
4
|
+
caretAs?: React.ElementType | null;
|
|
5
|
+
onClose?: () => void;
|
|
6
|
+
showCleanButton?: boolean;
|
|
7
|
+
as?: React.ElementType;
|
|
8
|
+
}
|
|
9
|
+
declare const PickerIndicator: ({ loading, caretAs, onClose, showCleanButton, as: Component }: PickerIndicatorProps) => JSX.Element;
|
|
10
|
+
export default PickerIndicator;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _icons = require("@rsuite/icons");
|
|
9
|
+
var _utils = require("../utils");
|
|
10
|
+
var _InputGroup = _interopRequireDefault(require("../InputGroup"));
|
|
11
|
+
var _CloseButton = _interopRequireDefault(require("../CloseButton"));
|
|
12
|
+
var _Loader = _interopRequireDefault(require("../Loader"));
|
|
13
|
+
var PickerIndicator = function PickerIndicator(_ref) {
|
|
14
|
+
var loading = _ref.loading,
|
|
15
|
+
caretAs = _ref.caretAs,
|
|
16
|
+
onClose = _ref.onClose,
|
|
17
|
+
showCleanButton = _ref.showCleanButton,
|
|
18
|
+
_ref$as = _ref.as,
|
|
19
|
+
Component = _ref$as === void 0 ? _InputGroup.default.Addon : _ref$as;
|
|
20
|
+
var _useCustom = (0, _utils.useCustom)(),
|
|
21
|
+
locale = _useCustom.locale;
|
|
22
|
+
var _useClassNames = (0, _utils.useClassNames)('picker'),
|
|
23
|
+
prefix = _useClassNames.prefix;
|
|
24
|
+
var addon = function addon() {
|
|
25
|
+
if (loading) {
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement(_Loader.default, {
|
|
27
|
+
className: prefix('loader'),
|
|
28
|
+
"data-testid": "spinner"
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (showCleanButton) {
|
|
32
|
+
return /*#__PURE__*/_react.default.createElement(_CloseButton.default, {
|
|
33
|
+
className: prefix('clean'),
|
|
34
|
+
tabIndex: -1,
|
|
35
|
+
locale: {
|
|
36
|
+
closeLabel: locale === null || locale === void 0 ? void 0 : locale.clear
|
|
37
|
+
},
|
|
38
|
+
onClick: onClose
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return caretAs && /*#__PURE__*/_react.default.createElement(_icons.Icon, {
|
|
42
|
+
as: caretAs
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement(Component, null, addon());
|
|
46
|
+
};
|
|
47
|
+
var _default = PickerIndicator;
|
|
48
|
+
exports.default = _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface PickerLabelProps {
|
|
3
|
+
id: string;
|
|
4
|
+
className?: string;
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
as?: React.ElementType;
|
|
7
|
+
}
|
|
8
|
+
declare const PickerLabel: ({ children, className, as: Component, ...rest }: PickerLabelProps) => JSX.Element | null;
|
|
9
|
+
export default PickerLabel;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _InputGroup = _interopRequireDefault(require("../InputGroup"));
|
|
11
|
+
var PickerLabel = function PickerLabel(_ref) {
|
|
12
|
+
var children = _ref.children,
|
|
13
|
+
className = _ref.className,
|
|
14
|
+
_ref$as = _ref.as,
|
|
15
|
+
Component = _ref$as === void 0 ? _InputGroup.default.Addon : _ref$as,
|
|
16
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["children", "className", "as"]);
|
|
17
|
+
return children ? /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
|
|
18
|
+
"data-testid": "picker-label",
|
|
19
|
+
className: className
|
|
20
|
+
}, rest), children) : null;
|
|
21
|
+
};
|
|
22
|
+
var _default = PickerLabel;
|
|
23
|
+
exports.default = _default;
|
|
@@ -7,20 +7,15 @@ exports.default = void 0;
|
|
|
7
7
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
8
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
10
|
var _Button = _interopRequireDefault(require("../Button"));
|
|
12
11
|
var _utils = require("../utils");
|
|
13
12
|
var _PredefinedRanges = _interopRequireDefault(require("./PredefinedRanges"));
|
|
14
13
|
var _Stack = _interopRequireDefault(require("../Stack"));
|
|
15
14
|
var SubmitButton = function SubmitButton(_ref) {
|
|
16
|
-
var
|
|
17
|
-
disabledOkBtn = _ref.disabledOkBtn,
|
|
15
|
+
var disabledOkBtn = _ref.disabledOkBtn,
|
|
18
16
|
calendarDate = _ref.calendarDate,
|
|
19
17
|
onOk = _ref.onOk,
|
|
20
18
|
children = _ref.children;
|
|
21
|
-
if (hide) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
19
|
var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
|
|
25
20
|
return /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
26
21
|
appearance: "primary",
|
|
@@ -33,7 +28,7 @@ var SubmitButton = function SubmitButton(_ref) {
|
|
|
33
28
|
/**
|
|
34
29
|
* Toolbar for DatePicker and DateRangePicker
|
|
35
30
|
*/
|
|
36
|
-
var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
31
|
+
var Toolbar = /*#__PURE__*/_react.default.forwardRef(function Toolbar(props, ref) {
|
|
37
32
|
var className = props.className,
|
|
38
33
|
_props$classPrefix = props.classPrefix,
|
|
39
34
|
classPrefix = _props$classPrefix === void 0 ? 'picker-toolbar' : _props$classPrefix,
|
|
@@ -69,24 +64,11 @@ var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
69
64
|
onShortcutClick: onShortcutClick
|
|
70
65
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
71
66
|
className: prefix('right')
|
|
72
|
-
}, /*#__PURE__*/_react.default.createElement(SubmitButton, {
|
|
67
|
+
}, !hideOkBtn && /*#__PURE__*/_react.default.createElement(SubmitButton, {
|
|
73
68
|
disabledOkBtn: disabledOkBtn,
|
|
74
|
-
hide: hideOkBtn,
|
|
75
69
|
calendarDate: calendarDate,
|
|
76
70
|
onOk: onOk
|
|
77
71
|
}, locale === null || locale === void 0 ? void 0 : locale.ok)));
|
|
78
72
|
});
|
|
79
|
-
Toolbar.displayName = 'Toolbar';
|
|
80
|
-
Toolbar.propTypes = {
|
|
81
|
-
ranges: _propTypes.default.array,
|
|
82
|
-
className: _propTypes.default.string,
|
|
83
|
-
classPrefix: _propTypes.default.string,
|
|
84
|
-
calendarDate: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.arrayOf(_propTypes.default.instanceOf(Date))]).isRequired,
|
|
85
|
-
onShortcutClick: _propTypes.default.func,
|
|
86
|
-
onOk: _propTypes.default.func,
|
|
87
|
-
disabledShortcut: _propTypes.default.func,
|
|
88
|
-
disabledOkBtn: _propTypes.default.func,
|
|
89
|
-
hideOkBtn: _propTypes.default.bool
|
|
90
|
-
};
|
|
91
73
|
var _default = Toolbar;
|
|
92
74
|
exports.default = _default;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ToolbarProps } from './Toolbar';
|
|
2
|
-
import { InnerRange } from './types';
|
|
2
|
+
import { InnerRange, RangeType } from './types';
|
|
3
3
|
import { DateRange } from '../DateRangePicker/types';
|
|
4
4
|
export declare function getDefaultRanges<T extends Date | DateRange>(value: T): InnerRange<T>[];
|
|
5
5
|
/**
|
|
@@ -8,3 +8,7 @@ export declare function getDefaultRanges<T extends Date | DateRange>(value: T):
|
|
|
8
8
|
* @param calendarDate
|
|
9
9
|
*/
|
|
10
10
|
export declare const getRanges: <T extends Date | DateRange>({ ranges, calendarDate }: Pick<ToolbarProps<T, T>, "calendarDate" | "ranges">) => InnerRange<T>[];
|
|
11
|
+
export declare function splitRanges(ranges?: RangeType<Date>[]): {
|
|
12
|
+
sideRanges: RangeType<Date>[];
|
|
13
|
+
bottomRanges: RangeType<Date>[];
|
|
14
|
+
};
|
package/cjs/DatePicker/utils.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
5
|
exports.__esModule = true;
|
|
6
6
|
exports.getDefaultRanges = getDefaultRanges;
|
|
7
|
+
exports.splitRanges = splitRanges;
|
|
7
8
|
exports.getRanges = void 0;
|
|
8
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
10
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
@@ -58,4 +59,19 @@ var getRanges = function getRanges(_ref3) {
|
|
|
58
59
|
calendarDate: calendarDate
|
|
59
60
|
}));
|
|
60
61
|
};
|
|
61
|
-
exports.getRanges = getRanges;
|
|
62
|
+
exports.getRanges = getRanges;
|
|
63
|
+
function splitRanges(ranges) {
|
|
64
|
+
// The shortcut option on the left side of the calendar panel
|
|
65
|
+
var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
|
|
66
|
+
return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
|
|
67
|
+
})) || [];
|
|
68
|
+
|
|
69
|
+
// The shortcut option on the bottom of the calendar panel
|
|
70
|
+
var bottomRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
|
|
71
|
+
return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
|
|
72
|
+
})) || [];
|
|
73
|
+
return {
|
|
74
|
+
sideRanges: sideRanges,
|
|
75
|
+
bottomRanges: bottomRanges
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { InputProps } from '../Input';
|
|
3
|
+
import { FormControlBaseProps } from '../@types/common';
|
|
4
|
+
declare type ValueType = [Date | null, Date | null] | null;
|
|
5
|
+
export interface DateRangeInputProps extends Omit<InputProps, 'value' | 'onChange' | 'defaultValue'>, FormControlBaseProps<ValueType> {
|
|
6
|
+
/**
|
|
7
|
+
* The character between the start and end dates.
|
|
8
|
+
* @default ' ~ '
|
|
9
|
+
**/
|
|
10
|
+
character?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Format of the date when rendered in the input. Format of the string is based on Unicode Technical Standard.
|
|
13
|
+
*
|
|
14
|
+
* @see https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
|
|
15
|
+
* @default 'yyyy-MM-dd'
|
|
16
|
+
**/
|
|
17
|
+
format?: string;
|
|
18
|
+
/**
|
|
19
|
+
* The `placeholder` prop defines the text displayed in a form control when the control has no value.
|
|
20
|
+
*/
|
|
21
|
+
placeholder?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The DateRangeInput component lets users select a date with the keyboard.
|
|
25
|
+
* @version 5.59.0
|
|
26
|
+
* @see https://rsuitejs.com/components/date-range-input/
|
|
27
|
+
*/
|
|
28
|
+
declare const DateRangeInput: React.ForwardRefExoticComponent<DateRangeInputProps & React.RefAttributes<unknown>>;
|
|
29
|
+
export default DateRangeInput;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
|
+
exports.__esModule = true;
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
+
var _Input = _interopRequireDefault(require("../Input"));
|
|
13
|
+
var _utils = require("../utils");
|
|
14
|
+
var _DateInput = require("../DateInput");
|
|
15
|
+
var _utils2 = require("./utils");
|
|
16
|
+
/**
|
|
17
|
+
* The DateRangeInput component lets users select a date with the keyboard.
|
|
18
|
+
* @version 5.59.0
|
|
19
|
+
* @see https://rsuitejs.com/components/date-range-input/
|
|
20
|
+
*/
|
|
21
|
+
var DateRangeInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
22
|
+
var className = props.className,
|
|
23
|
+
_props$classPrefix = props.classPrefix,
|
|
24
|
+
classPrefix = _props$classPrefix === void 0 ? 'date-range-input' : _props$classPrefix,
|
|
25
|
+
_props$character = props.character,
|
|
26
|
+
character = _props$character === void 0 ? ' ~ ' : _props$character,
|
|
27
|
+
_props$format = props.format,
|
|
28
|
+
formatStr = _props$format === void 0 ? 'yyyy-MM-dd' : _props$format,
|
|
29
|
+
valueProp = props.value,
|
|
30
|
+
_props$defaultValue = props.defaultValue,
|
|
31
|
+
defaultValue = _props$defaultValue === void 0 ? [] : _props$defaultValue,
|
|
32
|
+
placeholder = props.placeholder,
|
|
33
|
+
onChange = props.onChange,
|
|
34
|
+
onKeyDown = props.onKeyDown,
|
|
35
|
+
onBlur = props.onBlur,
|
|
36
|
+
onFocus = props.onFocus,
|
|
37
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "classPrefix", "character", "format", "value", "defaultValue", "placeholder", "onChange", "onKeyDown", "onBlur", "onFocus"]);
|
|
38
|
+
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
39
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
40
|
+
merge = _useClassNames.merge;
|
|
41
|
+
var classes = merge(className, withClassPrefix());
|
|
42
|
+
var inputRef = (0, _react.useRef)();
|
|
43
|
+
var _useState = (0, _react.useState)({
|
|
44
|
+
selectedPattern: 'y',
|
|
45
|
+
selectionStart: 0,
|
|
46
|
+
selectionEnd: 0
|
|
47
|
+
}),
|
|
48
|
+
selectedState = _useState[0],
|
|
49
|
+
setSelectedState = _useState[1];
|
|
50
|
+
var _useCustom = (0, _utils.useCustom)('Calendar'),
|
|
51
|
+
locale = _useCustom.locale;
|
|
52
|
+
var rangeFormatStr = "" + formatStr + character + formatStr;
|
|
53
|
+
var dateLocale = locale.dateLocale;
|
|
54
|
+
var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
|
|
55
|
+
value = _useControlled[0],
|
|
56
|
+
setValue = _useControlled[1],
|
|
57
|
+
isControlled = _useControlled[2];
|
|
58
|
+
var _useState2 = (0, _react.useState)(_utils2.DateType.Start),
|
|
59
|
+
dateType = _useState2[0],
|
|
60
|
+
setDateType = _useState2[1];
|
|
61
|
+
var dateInputOptions = {
|
|
62
|
+
formatStr: formatStr,
|
|
63
|
+
locale: dateLocale,
|
|
64
|
+
isControlledDate: isControlled
|
|
65
|
+
};
|
|
66
|
+
var startDateState = (0, _DateInput.useDateInputState)((0, _extends2.default)({}, dateInputOptions, {
|
|
67
|
+
date: value === null || value === void 0 ? void 0 : value[0]
|
|
68
|
+
}));
|
|
69
|
+
var endDateState = (0, _DateInput.useDateInputState)((0, _extends2.default)({}, dateInputOptions, {
|
|
70
|
+
date: value === null || value === void 0 ? void 0 : value[1]
|
|
71
|
+
}));
|
|
72
|
+
var getActiveState = function getActiveState(type) {
|
|
73
|
+
if (type === void 0) {
|
|
74
|
+
type = dateType;
|
|
75
|
+
}
|
|
76
|
+
return type === _utils2.DateType.Start ? startDateState : endDateState;
|
|
77
|
+
};
|
|
78
|
+
var _useIsFocused = (0, _DateInput.useIsFocused)({
|
|
79
|
+
onBlur: onBlur,
|
|
80
|
+
onFocus: onFocus
|
|
81
|
+
}),
|
|
82
|
+
focused = _useIsFocused[0],
|
|
83
|
+
focusEventProps = _useIsFocused[1];
|
|
84
|
+
var renderedValue = (0, _react.useMemo)(function () {
|
|
85
|
+
var dateString = startDateState.toDateString() + character + endDateState.toDateString();
|
|
86
|
+
if (!startDateState.isEmptyValue() || !endDateState.isEmptyValue()) {
|
|
87
|
+
return dateString;
|
|
88
|
+
}
|
|
89
|
+
return !focused ? '' : dateString;
|
|
90
|
+
}, [character, endDateState, focused, startDateState]);
|
|
91
|
+
var keyPressOptions = {
|
|
92
|
+
formatStr: formatStr,
|
|
93
|
+
rangeFormatStr: rangeFormatStr,
|
|
94
|
+
localize: dateLocale.localize,
|
|
95
|
+
selectedMonth: getActiveState().dateField.month,
|
|
96
|
+
dateString: renderedValue,
|
|
97
|
+
dateType: dateType,
|
|
98
|
+
character: character
|
|
99
|
+
};
|
|
100
|
+
var setSelectionRange = (0, _DateInput.useInputSelection)(inputRef);
|
|
101
|
+
var handleChange = (0, _utils.useEventCallback)(function (date, event) {
|
|
102
|
+
var nextValue = dateType === _utils2.DateType.Start ? [date, value === null || value === void 0 ? void 0 : value[1]] : [value === null || value === void 0 ? void 0 : value[0], date];
|
|
103
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
104
|
+
setValue(nextValue);
|
|
105
|
+
});
|
|
106
|
+
var onSegmentChange = (0, _utils.useEventCallback)(function (event, nextDirection) {
|
|
107
|
+
var input = event.target;
|
|
108
|
+
var key = event.key;
|
|
109
|
+
var direction = nextDirection || (key === 'ArrowRight' ? 'right' : 'left');
|
|
110
|
+
if (input.selectionEnd === null || input.selectionStart === null) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
var cursorIndex = direction === 'right' ? input.selectionEnd : input.selectionStart;
|
|
114
|
+
var nextDateType = dateType;
|
|
115
|
+
if ((0, _utils2.isSwitchDateType)(renderedValue, character, cursorIndex, direction)) {
|
|
116
|
+
nextDateType = dateType === _utils2.DateType.Start ? _utils2.DateType.End : _utils2.DateType.Start;
|
|
117
|
+
setDateType(nextDateType);
|
|
118
|
+
}
|
|
119
|
+
var state = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
120
|
+
dateType: nextDateType,
|
|
121
|
+
selectedMonth: getActiveState(nextDateType).dateField.month,
|
|
122
|
+
input: input,
|
|
123
|
+
direction: direction
|
|
124
|
+
}));
|
|
125
|
+
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
126
|
+
setSelectedState(state);
|
|
127
|
+
});
|
|
128
|
+
var onSegmentValueChange = (0, _utils.useEventCallback)(function (event) {
|
|
129
|
+
var input = event.target;
|
|
130
|
+
var key = event.key;
|
|
131
|
+
var offset = key === 'ArrowUp' ? 1 : -1;
|
|
132
|
+
var state = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
133
|
+
input: input,
|
|
134
|
+
valueOffset: offset
|
|
135
|
+
}));
|
|
136
|
+
setSelectedState(state);
|
|
137
|
+
getActiveState().setDateOffset(state.selectedPattern, offset, function (date) {
|
|
138
|
+
return handleChange(date, event);
|
|
139
|
+
});
|
|
140
|
+
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
141
|
+
});
|
|
142
|
+
var onSegmentValueChangeWithNumericKeys = (0, _utils.useEventCallback)(function (event) {
|
|
143
|
+
var input = event.target;
|
|
144
|
+
var key = event.key;
|
|
145
|
+
var pattern = selectedState.selectedPattern;
|
|
146
|
+
if (!pattern) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
var field = getActiveState().getDateField(pattern);
|
|
150
|
+
var value = parseInt(key, 10);
|
|
151
|
+
var padValue = parseInt("" + (field.value || '') + key, 10);
|
|
152
|
+
var newValue = value;
|
|
153
|
+
|
|
154
|
+
// Check if the value entered by the user is a valid date
|
|
155
|
+
if ((0, _DateInput.validateDateTime)(field.name, padValue)) {
|
|
156
|
+
newValue = padValue;
|
|
157
|
+
}
|
|
158
|
+
if (pattern === 'M') {
|
|
159
|
+
// Month cannot be less than 1.
|
|
160
|
+
newValue = Math.max(1, newValue);
|
|
161
|
+
}
|
|
162
|
+
getActiveState().setDateField(pattern, newValue, function (date) {
|
|
163
|
+
return handleChange(date, event);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// The currently selected month will be retained as a parameter of getInputSelectedState,
|
|
167
|
+
// but if the user enters a month, the month value will be replaced with the value entered by the user.
|
|
168
|
+
var selectedMonth = pattern === 'M' ? newValue : getActiveState().dateField.month;
|
|
169
|
+
var nextState = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
170
|
+
input: input,
|
|
171
|
+
selectedMonth: selectedMonth
|
|
172
|
+
}));
|
|
173
|
+
setSelectedState(nextState);
|
|
174
|
+
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
175
|
+
|
|
176
|
+
// If the field is full value, move the cursor to the next field
|
|
177
|
+
if ((0, _DateInput.isFieldFullValue)(formatStr, newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
178
|
+
onSegmentChange(event, 'right');
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
var onSegmentValueRemove = (0, _utils.useEventCallback)(function (event) {
|
|
182
|
+
var input = event.target;
|
|
183
|
+
if (selectedState.selectedPattern) {
|
|
184
|
+
var nextState = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
185
|
+
input: input,
|
|
186
|
+
valueOffset: null
|
|
187
|
+
}));
|
|
188
|
+
setSelectedState(nextState);
|
|
189
|
+
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
190
|
+
getActiveState().setDateField(selectedState.selectedPattern, null, function (date) {
|
|
191
|
+
return handleChange(date, event);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
var handleClick = (0, _utils.useEventCallback)(function (event) {
|
|
196
|
+
var input = event.target;
|
|
197
|
+
if (input.selectionStart === null) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
var cursorIndex = input.selectionStart === renderedValue.length ? 0 : input.selectionStart;
|
|
201
|
+
var dateType = (0, _utils2.getDateType)(renderedValue, character, cursorIndex);
|
|
202
|
+
var state = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
203
|
+
dateType: dateType,
|
|
204
|
+
selectedMonth: getActiveState(dateType).dateField.month,
|
|
205
|
+
input: input
|
|
206
|
+
}));
|
|
207
|
+
setDateType(dateType);
|
|
208
|
+
setSelectedState(state);
|
|
209
|
+
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
210
|
+
});
|
|
211
|
+
var onKeyboardInput = (0, _DateInput.useKeyboardInputEvent)({
|
|
212
|
+
onSegmentChange: onSegmentChange,
|
|
213
|
+
onSegmentValueChange: onSegmentValueChange,
|
|
214
|
+
onSegmentValueChangeWithNumericKeys: onSegmentValueChangeWithNumericKeys,
|
|
215
|
+
onSegmentValueRemove: onSegmentValueRemove,
|
|
216
|
+
onKeyDown: onKeyDown
|
|
217
|
+
});
|
|
218
|
+
return /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({
|
|
219
|
+
inputMode: focused ? 'numeric' : 'text',
|
|
220
|
+
autoComplete: "off",
|
|
221
|
+
autoCorrect: "off",
|
|
222
|
+
spellCheck: false,
|
|
223
|
+
className: classes,
|
|
224
|
+
ref: (0, _utils.mergeRefs)(inputRef, ref),
|
|
225
|
+
onKeyDown: onKeyboardInput,
|
|
226
|
+
onClick: handleClick,
|
|
227
|
+
value: renderedValue,
|
|
228
|
+
placeholder: placeholder || rangeFormatStr
|
|
229
|
+
}, focusEventProps, rest));
|
|
230
|
+
});
|
|
231
|
+
DateRangeInput.displayName = 'DateRangeInput';
|
|
232
|
+
DateRangeInput.propTypes = {
|
|
233
|
+
character: _propTypes.default.string,
|
|
234
|
+
className: _propTypes.default.string,
|
|
235
|
+
classPrefix: _propTypes.default.string,
|
|
236
|
+
format: _propTypes.default.string,
|
|
237
|
+
placeholder: _propTypes.default.string,
|
|
238
|
+
onChange: _propTypes.default.func,
|
|
239
|
+
onKeyDown: _propTypes.default.func,
|
|
240
|
+
onFocus: _propTypes.default.func,
|
|
241
|
+
onBlur: _propTypes.default.func
|
|
242
|
+
};
|
|
243
|
+
var _default = DateRangeInput;
|
|
244
|
+
exports.default = _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _DateRangeInput = _interopRequireDefault(require("./DateRangeInput"));
|
|
8
|
+
var _default = _DateRangeInput.default;
|
|
9
|
+
exports.default = _default;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Locale } from 'date-fns';
|
|
2
|
+
export declare enum DateType {
|
|
3
|
+
Start = "Start",
|
|
4
|
+
End = "End"
|
|
5
|
+
}
|
|
6
|
+
interface SelectedStateOptions {
|
|
7
|
+
/**
|
|
8
|
+
* The input element
|
|
9
|
+
*/
|
|
10
|
+
input: HTMLInputElement;
|
|
11
|
+
/**
|
|
12
|
+
* The direction of the arrow key, left or right
|
|
13
|
+
*/
|
|
14
|
+
direction?: 'left' | 'right';
|
|
15
|
+
/**
|
|
16
|
+
* Format of the string is based on Unicode Technical Standard.
|
|
17
|
+
* @see https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
|
|
18
|
+
*/
|
|
19
|
+
formatStr: string;
|
|
20
|
+
/**
|
|
21
|
+
* The format string of the range, which is used to calculate the selection range.
|
|
22
|
+
*/
|
|
23
|
+
rangeFormatStr: string;
|
|
24
|
+
/**
|
|
25
|
+
* The locale object, date-fns locale object
|
|
26
|
+
*/
|
|
27
|
+
localize: Locale['localize'];
|
|
28
|
+
/**
|
|
29
|
+
* The selected month, used to calculate the offset of the character selection range
|
|
30
|
+
*/
|
|
31
|
+
selectedMonth: number | null;
|
|
32
|
+
/**
|
|
33
|
+
* The offset of the value, which is used to calculate the month.
|
|
34
|
+
* This value will be changed when pressing the up and down arrow keys.
|
|
35
|
+
*/
|
|
36
|
+
valueOffset?: number | null;
|
|
37
|
+
/**
|
|
38
|
+
* The date is rendered in string format according to format
|
|
39
|
+
*/
|
|
40
|
+
dateString: string;
|
|
41
|
+
/**
|
|
42
|
+
* The character that separates two dates
|
|
43
|
+
*
|
|
44
|
+
* Only for `DateRangeInput`
|
|
45
|
+
**/
|
|
46
|
+
character: string;
|
|
47
|
+
/**
|
|
48
|
+
* The date type, start or end
|
|
49
|
+
*
|
|
50
|
+
* Only for `DateRangeInput`
|
|
51
|
+
*/
|
|
52
|
+
dateType: DateType;
|
|
53
|
+
}
|
|
54
|
+
export declare function getInputSelectedState(options: SelectedStateOptions): {
|
|
55
|
+
selectionStart: number;
|
|
56
|
+
selectionEnd: number;
|
|
57
|
+
selectedPattern: string;
|
|
58
|
+
};
|
|
59
|
+
export declare function getDateType(dateString: string, character: string, cursorIndex: number): DateType;
|
|
60
|
+
export declare function isSwitchDateType(dateString: string, character: string, cursorIndex: number, direction: 'right' | 'left'): boolean;
|
|
61
|
+
export {};
|