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.
Files changed (138) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/Cascader/styles/index.less +1 -0
  3. package/DatePicker/styles/index.less +18 -11
  4. package/DateRangeInput/package.json +7 -0
  5. package/DateRangePicker/styles/index.less +10 -0
  6. package/InputGroup/styles/index.less +1 -0
  7. package/Picker/styles/index.less +20 -0
  8. package/README.md +32 -22
  9. package/Sidenav/styles/index.less +2 -0
  10. package/cjs/Calendar/CalendarContainer.d.ts +2 -0
  11. package/cjs/Calendar/CalendarContainer.js +11 -4
  12. package/cjs/Calendar/CalendarHeader.js +2 -0
  13. package/cjs/Calendar/MonthDropdown.js +7 -2
  14. package/cjs/Calendar/MonthDropdownItem.js +2 -2
  15. package/cjs/Calendar/Table.js +6 -1
  16. package/cjs/Calendar/TimeDropdown.js +17 -10
  17. package/cjs/Calendar/types.d.ts +1 -0
  18. package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
  19. package/cjs/CustomProvider/CustomProvider.js +2 -2
  20. package/cjs/DateInput/DateField.d.ts +9 -31
  21. package/cjs/DateInput/DateField.js +61 -12
  22. package/cjs/DateInput/DateInput.d.ts +7 -2
  23. package/cjs/DateInput/DateInput.js +74 -92
  24. package/cjs/DateInput/index.d.ts +4 -0
  25. package/cjs/DateInput/index.js +19 -1
  26. package/cjs/DateInput/useDateInputState.d.ts +7 -31
  27. package/cjs/DateInput/useDateInputState.js +39 -15
  28. package/cjs/DateInput/useIsFocused.d.ts +7 -0
  29. package/cjs/DateInput/useIsFocused.js +28 -0
  30. package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
  31. package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
  32. package/cjs/DateInput/utils.d.ts +23 -1
  33. package/cjs/DateInput/utils.js +155 -51
  34. package/cjs/DatePicker/DatePicker.d.ts +20 -7
  35. package/cjs/DatePicker/DatePicker.js +210 -241
  36. package/cjs/DatePicker/PickerIndicator.d.ts +10 -0
  37. package/cjs/DatePicker/PickerIndicator.js +48 -0
  38. package/cjs/DatePicker/PickerLabel.d.ts +9 -0
  39. package/cjs/DatePicker/PickerLabel.js +23 -0
  40. package/cjs/DatePicker/Toolbar.js +3 -21
  41. package/cjs/DatePicker/utils.d.ts +5 -1
  42. package/cjs/DatePicker/utils.js +17 -1
  43. package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
  44. package/cjs/DateRangeInput/DateRangeInput.js +244 -0
  45. package/cjs/DateRangeInput/index.d.ts +3 -0
  46. package/cjs/DateRangeInput/index.js +9 -0
  47. package/cjs/DateRangeInput/utils.d.ts +61 -0
  48. package/cjs/DateRangeInput/utils.js +146 -0
  49. package/cjs/DateRangePicker/DateRangePicker.js +12 -2
  50. package/cjs/Input/Input.d.ts +11 -0
  51. package/cjs/Input/Input.js +11 -8
  52. package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
  53. package/cjs/Overlay/OverlayTrigger.js +5 -0
  54. package/cjs/Picker/usePickerRef.d.ts +17 -0
  55. package/cjs/Picker/usePickerRef.js +82 -0
  56. package/cjs/index.d.ts +2 -0
  57. package/cjs/index.js +3 -1
  58. package/cjs/locales/index.d.ts +2 -2
  59. package/cjs/utils/index.d.ts +2 -0
  60. package/cjs/utils/index.js +8 -2
  61. package/cjs/utils/useCustom.js +1 -1
  62. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  63. package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
  64. package/dist/rsuite-no-reset-rtl.css +51 -141
  65. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  66. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  67. package/dist/rsuite-no-reset.css +51 -141
  68. package/dist/rsuite-no-reset.min.css +1 -1
  69. package/dist/rsuite-no-reset.min.css.map +1 -1
  70. package/dist/rsuite-rtl.css +51 -9
  71. package/dist/rsuite-rtl.min.css +1 -1
  72. package/dist/rsuite-rtl.min.css.map +1 -1
  73. package/dist/rsuite.css +51 -9
  74. package/dist/rsuite.js +4800 -246
  75. package/dist/rsuite.js.map +1 -1
  76. package/dist/rsuite.min.css +1 -1
  77. package/dist/rsuite.min.css.map +1 -1
  78. package/dist/rsuite.min.js +1 -1
  79. package/dist/rsuite.min.js.map +1 -1
  80. package/esm/Calendar/CalendarContainer.d.ts +2 -0
  81. package/esm/Calendar/CalendarContainer.js +12 -5
  82. package/esm/Calendar/CalendarHeader.js +2 -0
  83. package/esm/Calendar/MonthDropdown.js +7 -2
  84. package/esm/Calendar/MonthDropdownItem.js +2 -2
  85. package/esm/Calendar/Table.js +6 -1
  86. package/esm/Calendar/TimeDropdown.js +17 -10
  87. package/esm/Calendar/types.d.ts +1 -0
  88. package/esm/CustomProvider/CustomProvider.d.ts +13 -0
  89. package/esm/CustomProvider/CustomProvider.js +3 -3
  90. package/esm/DateInput/DateField.d.ts +9 -31
  91. package/esm/DateInput/DateField.js +61 -12
  92. package/esm/DateInput/DateInput.d.ts +7 -2
  93. package/esm/DateInput/DateInput.js +77 -95
  94. package/esm/DateInput/index.d.ts +4 -0
  95. package/esm/DateInput/index.js +4 -0
  96. package/esm/DateInput/useDateInputState.d.ts +7 -31
  97. package/esm/DateInput/useDateInputState.js +41 -18
  98. package/esm/DateInput/useIsFocused.d.ts +7 -0
  99. package/esm/DateInput/useIsFocused.js +22 -0
  100. package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
  101. package/esm/DateInput/useKeyboardInputEvent.js +38 -0
  102. package/esm/DateInput/utils.d.ts +23 -1
  103. package/esm/DateInput/utils.js +150 -51
  104. package/esm/DatePicker/DatePicker.d.ts +20 -7
  105. package/esm/DatePicker/DatePicker.js +213 -244
  106. package/esm/DatePicker/PickerIndicator.d.ts +10 -0
  107. package/esm/DatePicker/PickerIndicator.js +42 -0
  108. package/esm/DatePicker/PickerLabel.d.ts +9 -0
  109. package/esm/DatePicker/PickerLabel.js +17 -0
  110. package/esm/DatePicker/Toolbar.js +3 -21
  111. package/esm/DatePicker/utils.d.ts +5 -1
  112. package/esm/DatePicker/utils.js +16 -1
  113. package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
  114. package/esm/DateRangeInput/DateRangeInput.js +237 -0
  115. package/esm/DateRangeInput/index.d.ts +3 -0
  116. package/esm/DateRangeInput/index.js +3 -0
  117. package/esm/DateRangeInput/utils.d.ts +61 -0
  118. package/esm/DateRangeInput/utils.js +137 -0
  119. package/esm/DateRangePicker/DateRangePicker.js +12 -2
  120. package/esm/Input/Input.d.ts +11 -0
  121. package/esm/Input/Input.js +12 -9
  122. package/esm/Overlay/OverlayTrigger.d.ts +3 -0
  123. package/esm/Overlay/OverlayTrigger.js +5 -0
  124. package/esm/Picker/usePickerRef.d.ts +17 -0
  125. package/esm/Picker/usePickerRef.js +77 -0
  126. package/esm/index.d.ts +2 -0
  127. package/esm/index.js +1 -0
  128. package/esm/locales/index.d.ts +2 -2
  129. package/esm/utils/index.d.ts +2 -0
  130. package/esm/utils/index.js +3 -1
  131. package/esm/utils/useCustom.js +2 -2
  132. package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  133. package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
  134. package/package.json +1 -1
  135. package/styles/color-modes/dark.less +1 -0
  136. package/styles/color-modes/high-contrast.less +1 -0
  137. package/styles/color-modes/light.less +1 -0
  138. 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 hide = _ref.hide,
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
+ };
@@ -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,3 @@
1
+ import DateRangeInput from './DateRangeInput';
2
+ export type { DateRangeInputProps } from './DateRangeInput';
3
+ export default DateRangeInput;
@@ -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 {};