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.
Files changed (146) hide show
  1. package/CHANGELOG.md +22 -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 +34 -24
  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 +215 -245
  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/FormControl/FormControl.js +2 -1
  51. package/cjs/Input/Input.d.ts +11 -0
  52. package/cjs/Input/Input.js +11 -8
  53. package/cjs/MultiCascader/MultiCascader.js +3 -1
  54. package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
  55. package/cjs/Overlay/OverlayTrigger.js +5 -0
  56. package/cjs/Picker/PickerToggle.js +2 -1
  57. package/cjs/Picker/usePickerRef.d.ts +17 -0
  58. package/cjs/Picker/usePickerRef.js +82 -0
  59. package/cjs/index.d.ts +2 -0
  60. package/cjs/index.js +3 -1
  61. package/cjs/locales/index.d.ts +2 -2
  62. package/cjs/useMediaQuery/useMediaQuery.js +2 -2
  63. package/cjs/utils/index.d.ts +2 -0
  64. package/cjs/utils/index.js +8 -2
  65. package/cjs/utils/useCustom.js +1 -1
  66. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  67. package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
  68. package/dist/rsuite-no-reset-rtl.css +51 -141
  69. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  70. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  71. package/dist/rsuite-no-reset.css +51 -141
  72. package/dist/rsuite-no-reset.min.css +1 -1
  73. package/dist/rsuite-no-reset.min.css.map +1 -1
  74. package/dist/rsuite-rtl.css +51 -9
  75. package/dist/rsuite-rtl.min.css +1 -1
  76. package/dist/rsuite-rtl.min.css.map +1 -1
  77. package/dist/rsuite.css +51 -9
  78. package/dist/rsuite.js +4804 -250
  79. package/dist/rsuite.js.map +1 -1
  80. package/dist/rsuite.min.css +1 -1
  81. package/dist/rsuite.min.css.map +1 -1
  82. package/dist/rsuite.min.js +1 -1
  83. package/dist/rsuite.min.js.map +1 -1
  84. package/esm/Calendar/CalendarContainer.d.ts +2 -0
  85. package/esm/Calendar/CalendarContainer.js +12 -5
  86. package/esm/Calendar/CalendarHeader.js +2 -0
  87. package/esm/Calendar/MonthDropdown.js +7 -2
  88. package/esm/Calendar/MonthDropdownItem.js +2 -2
  89. package/esm/Calendar/Table.js +6 -1
  90. package/esm/Calendar/TimeDropdown.js +17 -10
  91. package/esm/Calendar/types.d.ts +1 -0
  92. package/esm/CustomProvider/CustomProvider.d.ts +13 -0
  93. package/esm/CustomProvider/CustomProvider.js +3 -3
  94. package/esm/DateInput/DateField.d.ts +9 -31
  95. package/esm/DateInput/DateField.js +61 -12
  96. package/esm/DateInput/DateInput.d.ts +7 -2
  97. package/esm/DateInput/DateInput.js +77 -95
  98. package/esm/DateInput/index.d.ts +4 -0
  99. package/esm/DateInput/index.js +4 -0
  100. package/esm/DateInput/useDateInputState.d.ts +7 -31
  101. package/esm/DateInput/useDateInputState.js +41 -18
  102. package/esm/DateInput/useIsFocused.d.ts +7 -0
  103. package/esm/DateInput/useIsFocused.js +22 -0
  104. package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
  105. package/esm/DateInput/useKeyboardInputEvent.js +38 -0
  106. package/esm/DateInput/utils.d.ts +23 -1
  107. package/esm/DateInput/utils.js +150 -51
  108. package/esm/DatePicker/DatePicker.d.ts +20 -7
  109. package/esm/DatePicker/DatePicker.js +218 -248
  110. package/esm/DatePicker/PickerIndicator.d.ts +10 -0
  111. package/esm/DatePicker/PickerIndicator.js +42 -0
  112. package/esm/DatePicker/PickerLabel.d.ts +9 -0
  113. package/esm/DatePicker/PickerLabel.js +17 -0
  114. package/esm/DatePicker/Toolbar.js +3 -21
  115. package/esm/DatePicker/utils.d.ts +5 -1
  116. package/esm/DatePicker/utils.js +16 -1
  117. package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
  118. package/esm/DateRangeInput/DateRangeInput.js +237 -0
  119. package/esm/DateRangeInput/index.d.ts +3 -0
  120. package/esm/DateRangeInput/index.js +3 -0
  121. package/esm/DateRangeInput/utils.d.ts +61 -0
  122. package/esm/DateRangeInput/utils.js +137 -0
  123. package/esm/DateRangePicker/DateRangePicker.js +12 -2
  124. package/esm/FormControl/FormControl.js +2 -1
  125. package/esm/Input/Input.d.ts +11 -0
  126. package/esm/Input/Input.js +12 -9
  127. package/esm/MultiCascader/MultiCascader.js +4 -2
  128. package/esm/Overlay/OverlayTrigger.d.ts +3 -0
  129. package/esm/Overlay/OverlayTrigger.js +5 -0
  130. package/esm/Picker/PickerToggle.js +2 -1
  131. package/esm/Picker/usePickerRef.d.ts +17 -0
  132. package/esm/Picker/usePickerRef.js +77 -0
  133. package/esm/index.d.ts +2 -0
  134. package/esm/index.js +1 -0
  135. package/esm/locales/index.d.ts +2 -2
  136. package/esm/useMediaQuery/useMediaQuery.js +2 -2
  137. package/esm/utils/index.d.ts +2 -0
  138. package/esm/utils/index.js +3 -1
  139. package/esm/utils/useCustom.js +2 -2
  140. package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  141. package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
  142. package/package.json +1 -1
  143. package/styles/color-modes/dark.less +1 -0
  144. package/styles/color-modes/high-contrast.less +1 -0
  145. package/styles/color-modes/light.less +1 -0
  146. package/styles/normalize.less +230 -231
@@ -575,6 +575,14 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
575
575
  var panelClasses = prefix('daterange-panel', {
576
576
  'daterange-panel-show-one-calendar': showOneCalendar
577
577
  });
578
+
579
+ /**
580
+ * Set a min-width (528px) when there are two calendars
581
+ * @see https://github.com/rsuite/rsuite/issues/3522
582
+ */
583
+ var panelStyles = {
584
+ minWidth: showOneCalendar ? 'auto' : 528
585
+ };
578
586
  var styles = _extends({}, menuStyle, {
579
587
  left: left,
580
588
  top: top
@@ -611,7 +619,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
611
619
  target: triggerRef,
612
620
  style: styles
613
621
  }, /*#__PURE__*/React.createElement("div", {
614
- className: panelClasses
622
+ className: panelClasses,
623
+ style: panelStyles
615
624
  }, /*#__PURE__*/React.createElement(Stack, {
616
625
  alignItems: "flex-start"
617
626
  }, sideRanges.length > 0 && /*#__PURE__*/React.createElement(PredefinedRanges, {
@@ -626,7 +635,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
626
635
  }), /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
627
636
  className: prefix('daterange-content')
628
637
  }, /*#__PURE__*/React.createElement("div", {
629
- className: prefix('daterange-header')
638
+ className: prefix('daterange-header'),
639
+ "data-testid": "daterange-header"
630
640
  }, getDisplayString(selectedDates)), /*#__PURE__*/React.createElement("div", {
631
641
  className: prefix("daterange-calendar-" + (showOneCalendar ? 'single' : 'group'))
632
642
  }, /*#__PURE__*/React.createElement(DateRangePickerContext.Provider, {
@@ -137,7 +137,8 @@ var FormControl = /*#__PURE__*/React.forwardRef(function (props, ref) {
137
137
  var accepterProps = (_accepterProps = {}, _accepterProps[valueKey] = val === undefined ? defaultValue : val, _accepterProps);
138
138
  return /*#__PURE__*/React.createElement(Component, {
139
139
  className: classes,
140
- ref: ref
140
+ ref: ref,
141
+ "data-testid": "form-control-wrapper"
141
142
  }, /*#__PURE__*/React.createElement(AccepterComponent, _extends({
142
143
  id: controlId,
143
144
  "aria-labelledby": controlId ? controlId + "-control-label" : null,
@@ -13,12 +13,23 @@ export interface InputProps extends WithAsProps, Omit<React.InputHTMLAttributes<
13
13
  size?: TypeAttributes.Size;
14
14
  /** Ref of input element */
15
15
  inputRef?: React.Ref<any>;
16
+ /**
17
+ * The htmlSize attribute defines the width of the <input> element.
18
+ *
19
+ * @see MDN https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/size
20
+ * @version 5.49.0
21
+ */
22
+ htmlSize?: number;
23
+ /**
24
+ * The callback function in which value is changed.
25
+ */
16
26
  onChange?: PrependParameters<React.ChangeEventHandler<HTMLInputElement>, [value: string]>;
17
27
  /** Called on press enter */
18
28
  onPressEnter?: React.KeyboardEventHandler<HTMLInputElement>;
19
29
  }
20
30
  /**
21
31
  * The `<Input>` component is used to get user input in a text field.
32
+ *
22
33
  * @see https://rsuitejs.com/components/input
23
34
  */
24
35
  declare const Input: RsRefForwardingComponent<'input', InputProps>;
@@ -1,7 +1,7 @@
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, { useCallback, useContext } from 'react';
4
+ import React, { useContext } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { FormGroupContext } from '../FormGroup/FormGroup';
7
7
  import { InputGroupContext } from '../InputGroup/InputGroup';
@@ -9,6 +9,7 @@ import Plaintext from '../Plaintext';
9
9
  import { createChainedFunction, TypeChecker, mergeRefs, useClassNames, KEY_VALUES } from '../utils';
10
10
  /**
11
11
  * The `<Input>` component is used to get user input in a text field.
12
+ *
12
13
  * @see https://rsuitejs.com/components/input
13
14
  */
14
15
  var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
@@ -25,6 +26,7 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
25
26
  inputRef = props.inputRef,
26
27
  id = props.id,
27
28
  size = props.size,
29
+ htmlSize = props.htmlSize,
28
30
  plaintext = props.plaintext,
29
31
  readOnly = props.readOnly,
30
32
  onPressEnter = props.onPressEnter,
@@ -32,17 +34,17 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
32
34
  onBlur = props.onBlur,
33
35
  onKeyDown = props.onKeyDown,
34
36
  onChange = props.onChange,
35
- rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "as", "type", "disabled", "value", "defaultValue", "inputRef", "id", "size", "plaintext", "readOnly", "onPressEnter", "onFocus", "onBlur", "onKeyDown", "onChange"]);
36
- var handleKeyDown = useCallback(function (event) {
37
+ rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "as", "type", "disabled", "value", "defaultValue", "inputRef", "id", "size", "htmlSize", "plaintext", "readOnly", "onPressEnter", "onFocus", "onBlur", "onKeyDown", "onChange"]);
38
+ var handleKeyDown = function handleKeyDown(event) {
37
39
  if (event.key === KEY_VALUES.ENTER) {
38
40
  onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(event);
39
41
  }
40
42
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
41
- }, [onPressEnter, onKeyDown]);
42
- var handleChange = useCallback(function (event) {
43
+ };
44
+ var handleChange = function handleChange(event) {
43
45
  var _event$target;
44
46
  onChange === null || onChange === void 0 ? void 0 : onChange((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value, event);
45
- }, [onChange]);
47
+ };
46
48
  var _useClassNames = useClassNames(classPrefix),
47
49
  withClassPrefix = _useClassNames.withClassPrefix,
48
50
  merge = _useClassNames.merge;
@@ -60,9 +62,9 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
60
62
  localeKey: "unfilled"
61
63
  }, typeof value === 'undefined' ? defaultValue : value);
62
64
  }
63
- var operable = !disabled && !readOnly;
65
+ var inputable = !disabled && !readOnly;
64
66
  var eventProps = {};
65
- if (operable) {
67
+ if (inputable) {
66
68
  eventProps.onChange = handleChange;
67
69
  eventProps.onKeyDown = handleKeyDown;
68
70
  eventProps.onFocus = createChainedFunction(onFocus, inputGroupContext === null || inputGroupContext === void 0 ? void 0 : inputGroupContext.onFocus);
@@ -76,7 +78,8 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, ref) {
76
78
  value: value,
77
79
  defaultValue: defaultValue,
78
80
  disabled: disabled,
79
- readOnly: readOnly
81
+ readOnly: readOnly,
82
+ size: htmlSize
80
83
  }));
81
84
  });
82
85
  Input.displayName = 'Input';
@@ -12,7 +12,7 @@ import Checkbox from '../Checkbox';
12
12
  import { useCascadeValue, useColumnData, useFlattenData, isSomeChildChecked } from './utils';
13
13
  import { getNodeParents, findNodeOfTree } from '../utils/treeUtils';
14
14
  import { getColumnsAndPaths } from '../Cascader/utils';
15
- import { createChainedFunction, mergeRefs, getSafeRegExpString, useClassNames, useCustom, useUpdateEffect } from '../utils';
15
+ import { createChainedFunction, mergeRefs, getSafeRegExpString, useClassNames, useCustom, useUpdateEffect, useControlled } from '../utils';
16
16
  import { PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, usePickerClassName, usePublicMethods, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
17
17
  var emptyArray = [];
18
18
 
@@ -90,10 +90,12 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
90
90
  var _useFlattenData = useFlattenData(data, itemKeys),
91
91
  flattenData = _useFlattenData.flattenData,
92
92
  addFlattenData = _useFlattenData.addFlattenData;
93
+ var _useControlled = useControlled(valueProp, defaultValue),
94
+ controlledValue = _useControlled[0];
93
95
  var _useCascadeValue = useCascadeValue(_extends({}, itemKeys, {
94
96
  uncheckableItemValues: uncheckableItemValues,
95
97
  cascade: cascade,
96
- value: valueProp || defaultValue
98
+ value: controlledValue
97
99
  }), flattenData),
98
100
  value = _useCascadeValue.value,
99
101
  setValue = _useCascadeValue.setValue,
@@ -77,6 +77,9 @@ export interface OverlayTriggerHandle {
77
77
  updatePosition: () => void;
78
78
  open: (delay?: number) => void;
79
79
  close: (delay?: number) => void;
80
+ getState: () => {
81
+ open?: boolean;
82
+ };
80
83
  }
81
84
  /**
82
85
  * OverlayTrigger is used to display floating elements on another component.
@@ -165,6 +165,11 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
165
165
  var _overlayRef$current;
166
166
  return (_overlayRef$current = overlayRef.current) === null || _overlayRef$current === void 0 ? void 0 : _overlayRef$current.child;
167
167
  },
168
+ getState: function getState() {
169
+ return {
170
+ open: open
171
+ };
172
+ },
168
173
  open: handleOpen,
169
174
  close: function close(delay) {
170
175
  return handleClose(delay, function () {
@@ -212,7 +212,8 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
212
212
  'read-only': !inputFocused
213
213
  }),
214
214
  placeholder: inputPlaceholder,
215
- render: renderInput
215
+ render: renderInput,
216
+ "data-testid": "picker-toggle-input"
216
217
  }), children ? /*#__PURE__*/React.createElement("span", {
217
218
  className: prefix(hasValue ? 'value' : 'placeholder'),
218
219
  "aria-placeholder": typeof children === 'string' ? children : undefined
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import type { OverlayTriggerHandle } from './PickerToggleTrigger';
3
+ import type { ListHandle } from '../Windowing';
4
+ export interface PickerDependentParameters {
5
+ inline?: boolean;
6
+ }
7
+ /**
8
+ * A hook of the exposed method of Picker
9
+ */
10
+ declare function usePickerRef(ref: any, parmas?: PickerDependentParameters): {
11
+ trigger: import("react").RefObject<OverlayTriggerHandle>;
12
+ root: import("react").RefObject<HTMLElement>;
13
+ overlay: import("react").RefObject<HTMLElement>;
14
+ target: import("react").RefObject<HTMLElement>;
15
+ list: import("react").RefObject<ListHandle>;
16
+ };
17
+ export default usePickerRef;
@@ -0,0 +1,77 @@
1
+ 'use client';
2
+ import { useCallback, useImperativeHandle, useRef } from 'react';
3
+ /**
4
+ * A hook of the exposed method of Picker
5
+ */
6
+ function usePickerRef(ref, parmas) {
7
+ var trigger = useRef(null);
8
+ var root = useRef(null);
9
+ var target = useRef(null);
10
+ var overlay = useRef(null);
11
+ var list = useRef(null);
12
+ var _ref = parmas || {},
13
+ inline = _ref.inline;
14
+ var handleOpen = useCallback(function () {
15
+ var _trigger$current;
16
+ trigger === null || trigger === void 0 ? void 0 : (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : _trigger$current.open();
17
+ }, [trigger]);
18
+ var handleClose = useCallback(function () {
19
+ var _trigger$current2;
20
+ trigger === null || trigger === void 0 ? void 0 : (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : _trigger$current2.close();
21
+ }, [trigger]);
22
+ var handleUpdatePosition = useCallback(function () {
23
+ var _trigger$current3;
24
+ trigger === null || trigger === void 0 ? void 0 : (_trigger$current3 = trigger.current) === null || _trigger$current3 === void 0 ? void 0 : _trigger$current3.updatePosition();
25
+ }, [trigger]);
26
+ useImperativeHandle(ref, function () {
27
+ // Tree and CheckTree
28
+ if (inline) {
29
+ return {
30
+ get root() {
31
+ var _trigger$current$root, _trigger$current4;
32
+ return root !== null && root !== void 0 && root.current ? root === null || root === void 0 ? void 0 : root.current : (_trigger$current$root = trigger === null || trigger === void 0 ? void 0 : (_trigger$current4 = trigger.current) === null || _trigger$current4 === void 0 ? void 0 : _trigger$current4.root) !== null && _trigger$current$root !== void 0 ? _trigger$current$root : null;
33
+ },
34
+ get list() {
35
+ if (!(list !== null && list !== void 0 && list.current)) {
36
+ throw new Error('The list is not found, please set `virtualized` for the component.');
37
+ }
38
+ return list === null || list === void 0 ? void 0 : list.current;
39
+ }
40
+ };
41
+ }
42
+ return {
43
+ get root() {
44
+ var _ref2, _trigger$current5;
45
+ return (_ref2 = (root === null || root === void 0 ? void 0 : root.current) || (trigger === null || trigger === void 0 ? void 0 : (_trigger$current5 = trigger.current) === null || _trigger$current5 === void 0 ? void 0 : _trigger$current5.root)) !== null && _ref2 !== void 0 ? _ref2 : null;
46
+ },
47
+ get overlay() {
48
+ var _overlay$current;
49
+ if (!(overlay !== null && overlay !== void 0 && overlay.current)) {
50
+ throw new Error('The overlay is not found. Please confirm whether the picker is open.');
51
+ }
52
+ return (_overlay$current = overlay === null || overlay === void 0 ? void 0 : overlay.current) !== null && _overlay$current !== void 0 ? _overlay$current : null;
53
+ },
54
+ get target() {
55
+ var _target$current;
56
+ return (_target$current = target === null || target === void 0 ? void 0 : target.current) !== null && _target$current !== void 0 ? _target$current : null;
57
+ },
58
+ get list() {
59
+ if (!(list !== null && list !== void 0 && list.current)) {
60
+ throw new Error("\n The list is not found.\n 1.Please set virtualized for the component.\n 2.Please confirm whether the picker is open.\n ");
61
+ }
62
+ return list === null || list === void 0 ? void 0 : list.current;
63
+ },
64
+ updatePosition: handleUpdatePosition,
65
+ open: handleOpen,
66
+ close: handleClose
67
+ };
68
+ });
69
+ return {
70
+ trigger: trigger,
71
+ root: root,
72
+ overlay: overlay,
73
+ target: target,
74
+ list: list
75
+ };
76
+ }
77
+ export default usePickerRef;
package/esm/index.d.ts CHANGED
@@ -94,6 +94,8 @@ export { default as DateInput } from './DateInput';
94
94
  export type { DateInputProps } from './DateInput';
95
95
  export { default as DatePicker } from './DatePicker';
96
96
  export type { DatePickerProps } from './DatePicker';
97
+ export { default as DateRangeInput } from './DateRangeInput';
98
+ export type { DateRangeInputProps } from './DateRangeInput';
97
99
  export { default as DateRangePicker } from './DateRangePicker';
98
100
  export type { DateRangePickerProps } from './DateRangePicker';
99
101
  export { default as AutoComplete } from './AutoComplete';
package/esm/index.js CHANGED
@@ -50,6 +50,7 @@ export { default as Cascader } from './Cascader';
50
50
  export { default as MultiCascader } from './MultiCascader';
51
51
  export { default as DateInput } from './DateInput';
52
52
  export { default as DatePicker } from './DatePicker';
53
+ export { default as DateRangeInput } from './DateRangeInput';
53
54
  export { default as DateRangePicker } from './DateRangePicker';
54
55
  export { default as AutoComplete } from './AutoComplete';
55
56
  export { default as Uploader } from './Uploader';
@@ -31,8 +31,8 @@ export declare type CalendarLocale = PickKeys<typeof defaultLocale.Calendar>;
31
31
  export declare type PlaintextLocale = PickKeys<typeof defaultLocale.Plaintext>;
32
32
  export declare type PaginationLocale = PickKeys<typeof defaultLocale.Pagination>;
33
33
  export declare type TableLocale = CommonLocale;
34
- export declare type DatePickerLocale = PickKeys<typeof defaultLocale.DatePicker>;
35
- export declare type DateRangePickerLocale = PickKeys<typeof defaultLocale.DateRangePicker>;
34
+ export declare type DatePickerLocale = PickKeys<typeof defaultLocale.DatePicker> & CommonLocale;
35
+ export declare type DateRangePickerLocale = PickKeys<typeof defaultLocale.DateRangePicker> & CommonLocale;
36
36
  export declare type PickerLocale = typeof defaultLocale.Picker & CommonLocale;
37
37
  export declare type InputPickerLocale = PickerLocale & typeof defaultLocale.InputPicker;
38
38
  export declare type UploaderLocale = PickKeys<typeof defaultLocale.Uploader> & CommonLocale;
@@ -2,6 +2,7 @@
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import React, { useEffect, useState, useCallback, useRef } from 'react';
4
4
  import canUseDOM from 'dom-lib/canUseDOM';
5
+ import pick from 'lodash/pick';
5
6
  export var mediaQuerySizeMap = {
6
7
  xs: '(max-width: 575px)',
7
8
  sm: '(min-width: 576px)',
@@ -33,7 +34,7 @@ export function useMediaQueryLegacy(query) {
33
34
  });
34
35
  var _useState = useState(function () {
35
36
  return mediaQueries.map(function (query) {
36
- return matchMedia(query);
37
+ return pick(matchMedia(query), ['matches', 'media']);
37
38
  });
38
39
  }),
39
40
  mediaQueryArray = _useState[0],
@@ -59,7 +60,6 @@ export function useMediaQueryLegacy(query) {
59
60
  query.removeEventListener('change', handleChange);
60
61
  });
61
62
  };
62
- // eslint-disable-next-line react-hooks/exhaustive-deps
63
63
  }, [mediaQueries]);
64
64
  return mediaQueryArray.map(function (query) {
65
65
  return query.matches;
@@ -42,3 +42,5 @@ export { default as useWillUnmount } from './useWillUnmount';
42
42
  export { default as useUpdateEffect } from './useUpdateEffect';
43
43
  export { default as useIsMounted } from './useIsMounted';
44
44
  export { default as useMount } from './useMount';
45
+ export { default as useUniqueId } from './useUniqueId';
46
+ export { default as useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
@@ -45,4 +45,6 @@ export { default as useUpdatedRef } from './useUpdatedRef';
45
45
  export { default as useWillUnmount } from './useWillUnmount';
46
46
  export { default as useUpdateEffect } from './useUpdateEffect';
47
47
  export { default as useIsMounted } from './useIsMounted';
48
- export { default as useMount } from './useMount';
48
+ export { default as useMount } from './useMount';
49
+ export { default as useUniqueId } from './useUniqueId';
50
+ export { default as useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
@@ -3,7 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import { useContext, useCallback } from 'react';
4
4
  import defaultLocale from '../locales/default';
5
5
  import { CustomContext } from '../CustomProvider/CustomProvider';
6
- import { format, parse } from '../utils/dateUtils';
6
+ import { format, parse, isValid } from '../utils/dateUtils';
7
7
  var mergeObject = function mergeObject(list) {
8
8
  return list.reduce(function (a, b) {
9
9
  a = _extends({}, a, b);
@@ -39,7 +39,7 @@ function useCustom(keys, overrideLocale) {
39
39
  }
40
40
  var defaultFormatDate = useCallback(function (date, formatStr) {
41
41
  var _locale$Calendar;
42
- return format(date, formatStr, {
42
+ return format(isValid(date) ? date : new Date(), formatStr, {
43
43
  locale: locale === null || locale === void 0 ? void 0 : (_locale$Calendar = locale.Calendar) === null || _locale$Calendar === void 0 ? void 0 : _locale$Calendar.dateLocale
44
44
  });
45
45
  }, [(_locale$Calendar2 = locale.Calendar) === null || _locale$Calendar2 === void 0 ? void 0 : _locale$Calendar2.dateLocale]);
@@ -0,0 +1,3 @@
1
+ import { useEffect } from 'react';
2
+ declare const useIsomorphicLayoutEffect: typeof useEffect;
3
+ export default useIsomorphicLayoutEffect;
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+ import { useEffect, useLayoutEffect } from 'react';
3
+ var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
4
+ export default useIsomorphicLayoutEffect;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.48.0",
3
+ "version": "5.49.0",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -79,6 +79,7 @@
79
79
  --rs-color-focus-ring: 0 0 0 3px rgb(from var(--rs-gray-500) r g b / 25%);
80
80
  --rs-state-focus-shadow: 0 0 0 3px rgb(from var(--rs-gray-500) r g b / 25%);
81
81
  --rs-state-focus-outline: 3px solid rgb(from var(--rs-gray-500) r g b / 25%);
82
+ --rs-state-error-outline: 3px solid rgb(from var(--rs-color-red) r g b / 25%);
82
83
  --rs-shadow-overlay: 0 4px 4px rgba(0, 0, 0, 0.12), 0 0 10px rgba(0, 0, 0, 0.06);
83
84
 
84
85
  // Button
@@ -80,6 +80,7 @@
80
80
  --rs-state-focus-shadow: 0 0 0 3px var(--rs-gray-900), 0 0 0 5px var(--rs-gray-0);
81
81
  --rs-state-focus-shadow-slim: 0 0 0 2px var(--rs-gray-0);
82
82
  --rs-state-focus-outline: 3px solid rgb(from var(--rs-primary-500) r g b / 25%);
83
+ --rs-state-error-outline: 3px solid rgb(from var(--rs-color-red) r g b / 25%);
83
84
  --rs-shadow-overlay: 0 4px 4px rgba(0, 0, 0, 0.12), 0 0 10px rgba(0, 0, 0, 0.06);
84
85
 
85
86
  // Button
@@ -86,6 +86,7 @@
86
86
  --rs-color-focus-ring: rgb(from var(--rs-primary-500) r g b / 25%);
87
87
  --rs-state-focus-shadow: 0 0 0 3px rgb(from var(--rs-primary-500) r g b / 25%);
88
88
  --rs-state-focus-outline: 3px solid rgb(from var(--rs-primary-500) r g b / 25%);
89
+ --rs-state-error-outline: 3px solid rgb(from var(--rs-color-red) r g b / 25%);
89
90
  --rs-shadow-overlay: 0 4px 4px rgba(0, 0, 0, 0.12), 0 0 10px rgba(0, 0, 0, 0.06);
90
91
 
91
92
  // Button