rsuite 5.48.1 → 5.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Cascader/styles/index.less +5 -4
  3. package/DatePicker/styles/index.less +18 -11
  4. package/DateRangeInput/package.json +7 -0
  5. package/DateRangePicker/styles/index.less +20 -0
  6. package/Dropdown/styles/index.less +5 -4
  7. package/Dropdown/styles/mixin.less +0 -11
  8. package/InputGroup/styles/index.less +1 -0
  9. package/Picker/styles/index.less +51 -24
  10. package/Picker/styles/mixin.less +17 -13
  11. package/README.md +34 -24
  12. package/Sidenav/styles/index.less +2 -0
  13. package/TagInput/styles/index.less +1 -1
  14. package/cjs/AutoComplete/AutoComplete.js +25 -26
  15. package/cjs/Calendar/Calendar.d.ts +5 -1
  16. package/cjs/Calendar/CalendarContainer.d.ts +7 -1
  17. package/cjs/Calendar/CalendarContainer.js +11 -4
  18. package/cjs/Calendar/CalendarHeader.js +2 -0
  19. package/cjs/Calendar/MonthDropdown.js +7 -2
  20. package/cjs/Calendar/MonthDropdownItem.js +2 -2
  21. package/cjs/Calendar/Table.js +6 -1
  22. package/cjs/Calendar/TimeDropdown.js +17 -10
  23. package/cjs/Calendar/types.d.ts +1 -0
  24. package/cjs/Cascader/Cascader.js +46 -48
  25. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  26. package/cjs/CheckPicker/CheckPicker.js +33 -36
  27. package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
  28. package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
  29. package/cjs/CustomProvider/CustomProvider.js +2 -2
  30. package/cjs/DateInput/DateField.d.ts +9 -31
  31. package/cjs/DateInput/DateField.js +61 -12
  32. package/cjs/DateInput/DateInput.d.ts +7 -2
  33. package/cjs/DateInput/DateInput.js +74 -92
  34. package/cjs/DateInput/index.d.ts +4 -0
  35. package/cjs/DateInput/index.js +19 -1
  36. package/cjs/DateInput/useDateInputState.d.ts +7 -31
  37. package/cjs/DateInput/useDateInputState.js +39 -15
  38. package/cjs/DateInput/useIsFocused.d.ts +7 -0
  39. package/cjs/DateInput/useIsFocused.js +28 -0
  40. package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
  41. package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
  42. package/cjs/DateInput/utils.d.ts +23 -1
  43. package/cjs/DateInput/utils.js +155 -51
  44. package/cjs/DatePicker/DatePicker.d.ts +25 -8
  45. package/cjs/DatePicker/DatePicker.js +208 -241
  46. package/cjs/DatePicker/Toolbar.js +5 -22
  47. package/cjs/DatePicker/utils.d.ts +5 -1
  48. package/cjs/DatePicker/utils.js +17 -1
  49. package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
  50. package/cjs/DateRangeInput/DateRangeInput.js +244 -0
  51. package/cjs/DateRangeInput/index.d.ts +3 -0
  52. package/cjs/DateRangeInput/index.js +9 -0
  53. package/cjs/DateRangeInput/utils.d.ts +61 -0
  54. package/cjs/DateRangeInput/utils.js +146 -0
  55. package/cjs/DateRangePicker/Calendar.js +24 -23
  56. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  57. package/cjs/DateRangePicker/DateRangePicker.js +251 -203
  58. package/cjs/DateRangePicker/types.d.ts +11 -3
  59. package/cjs/DateRangePicker/utils.d.ts +2 -1
  60. package/cjs/DateRangePicker/utils.js +7 -5
  61. package/cjs/FormControl/FormControl.d.ts +11 -1
  62. package/cjs/FormControl/FormControl.js +6 -5
  63. package/cjs/Input/Input.d.ts +11 -0
  64. package/cjs/Input/Input.js +11 -8
  65. package/cjs/InputPicker/InputPicker.js +62 -63
  66. package/cjs/MultiCascader/MultiCascader.js +40 -42
  67. package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
  68. package/cjs/Overlay/OverlayTrigger.js +5 -0
  69. package/cjs/Picker/PickerIndicator.d.ts +10 -0
  70. package/cjs/Picker/PickerIndicator.js +49 -0
  71. package/cjs/Picker/PickerLabel.d.ts +9 -0
  72. package/cjs/Picker/PickerLabel.js +23 -0
  73. package/cjs/Picker/PickerToggle.d.ts +17 -22
  74. package/cjs/Picker/PickerToggle.js +52 -177
  75. package/cjs/Picker/index.d.ts +3 -0
  76. package/cjs/Picker/index.js +10 -1
  77. package/cjs/Picker/usePickerRef.d.ts +19 -0
  78. package/cjs/Picker/usePickerRef.js +88 -0
  79. package/cjs/Picker/utils.d.ts +5 -9
  80. package/cjs/Picker/utils.js +22 -89
  81. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  82. package/cjs/SelectPicker/SelectPicker.js +39 -42
  83. package/cjs/TreePicker/TreePicker.js +72 -75
  84. package/cjs/index.d.ts +2 -0
  85. package/cjs/index.js +3 -1
  86. package/cjs/locales/index.d.ts +2 -2
  87. package/cjs/utils/constants.d.ts +2 -1
  88. package/cjs/utils/constants.js +1 -0
  89. package/cjs/utils/dateUtils.d.ts +0 -1
  90. package/cjs/utils/dateUtils.js +0 -6
  91. package/cjs/utils/getStringLength.d.ts +2 -0
  92. package/cjs/utils/getStringLength.js +18 -0
  93. package/cjs/utils/index.d.ts +3 -0
  94. package/cjs/utils/index.js +11 -2
  95. package/cjs/utils/useCustom.js +1 -1
  96. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  97. package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
  98. package/dist/rsuite-no-reset-rtl.css +140 -207
  99. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  100. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  101. package/dist/rsuite-no-reset.css +140 -207
  102. package/dist/rsuite-no-reset.min.css +1 -1
  103. package/dist/rsuite-no-reset.min.css.map +1 -1
  104. package/dist/rsuite-rtl.css +140 -75
  105. package/dist/rsuite-rtl.min.css +1 -1
  106. package/dist/rsuite-rtl.min.css.map +1 -1
  107. package/dist/rsuite.css +140 -75
  108. package/dist/rsuite.js +4833 -258
  109. package/dist/rsuite.js.map +1 -1
  110. package/dist/rsuite.min.css +1 -1
  111. package/dist/rsuite.min.css.map +1 -1
  112. package/dist/rsuite.min.js +1 -1
  113. package/dist/rsuite.min.js.map +1 -1
  114. package/esm/AutoComplete/AutoComplete.js +28 -29
  115. package/esm/Calendar/Calendar.d.ts +5 -1
  116. package/esm/Calendar/CalendarContainer.d.ts +7 -1
  117. package/esm/Calendar/CalendarContainer.js +12 -5
  118. package/esm/Calendar/CalendarHeader.js +2 -0
  119. package/esm/Calendar/MonthDropdown.js +7 -2
  120. package/esm/Calendar/MonthDropdownItem.js +2 -2
  121. package/esm/Calendar/Table.js +6 -1
  122. package/esm/Calendar/TimeDropdown.js +17 -10
  123. package/esm/Calendar/types.d.ts +1 -0
  124. package/esm/Cascader/Cascader.js +49 -51
  125. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  126. package/esm/CheckPicker/CheckPicker.js +36 -39
  127. package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
  128. package/esm/CustomProvider/CustomProvider.d.ts +13 -0
  129. package/esm/CustomProvider/CustomProvider.js +3 -3
  130. package/esm/DateInput/DateField.d.ts +9 -31
  131. package/esm/DateInput/DateField.js +61 -12
  132. package/esm/DateInput/DateInput.d.ts +7 -2
  133. package/esm/DateInput/DateInput.js +77 -95
  134. package/esm/DateInput/index.d.ts +4 -0
  135. package/esm/DateInput/index.js +4 -0
  136. package/esm/DateInput/useDateInputState.d.ts +7 -31
  137. package/esm/DateInput/useDateInputState.js +41 -18
  138. package/esm/DateInput/useIsFocused.d.ts +7 -0
  139. package/esm/DateInput/useIsFocused.js +22 -0
  140. package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
  141. package/esm/DateInput/useKeyboardInputEvent.js +38 -0
  142. package/esm/DateInput/utils.d.ts +23 -1
  143. package/esm/DateInput/utils.js +150 -51
  144. package/esm/DatePicker/DatePicker.d.ts +25 -8
  145. package/esm/DatePicker/DatePicker.js +211 -244
  146. package/esm/DatePicker/Toolbar.js +5 -22
  147. package/esm/DatePicker/utils.d.ts +5 -1
  148. package/esm/DatePicker/utils.js +16 -1
  149. package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
  150. package/esm/DateRangeInput/DateRangeInput.js +237 -0
  151. package/esm/DateRangeInput/index.d.ts +3 -0
  152. package/esm/DateRangeInput/index.js +3 -0
  153. package/esm/DateRangeInput/utils.d.ts +61 -0
  154. package/esm/DateRangeInput/utils.js +137 -0
  155. package/esm/DateRangePicker/Calendar.js +25 -23
  156. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  157. package/esm/DateRangePicker/DateRangePicker.js +253 -205
  158. package/esm/DateRangePicker/types.d.ts +11 -3
  159. package/esm/DateRangePicker/utils.d.ts +2 -1
  160. package/esm/DateRangePicker/utils.js +7 -5
  161. package/esm/FormControl/FormControl.d.ts +11 -1
  162. package/esm/FormControl/FormControl.js +4 -3
  163. package/esm/Input/Input.d.ts +11 -0
  164. package/esm/Input/Input.js +12 -9
  165. package/esm/InputPicker/InputPicker.js +64 -65
  166. package/esm/MultiCascader/MultiCascader.js +43 -45
  167. package/esm/Overlay/OverlayTrigger.d.ts +3 -0
  168. package/esm/Overlay/OverlayTrigger.js +5 -0
  169. package/esm/Picker/PickerIndicator.d.ts +10 -0
  170. package/esm/Picker/PickerIndicator.js +43 -0
  171. package/esm/Picker/PickerLabel.d.ts +9 -0
  172. package/esm/Picker/PickerLabel.js +17 -0
  173. package/esm/Picker/PickerToggle.d.ts +17 -22
  174. package/esm/Picker/PickerToggle.js +54 -179
  175. package/esm/Picker/index.d.ts +3 -0
  176. package/esm/Picker/index.js +3 -0
  177. package/esm/Picker/usePickerRef.d.ts +19 -0
  178. package/esm/Picker/usePickerRef.js +82 -0
  179. package/esm/Picker/utils.d.ts +5 -9
  180. package/esm/Picker/utils.js +24 -90
  181. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  182. package/esm/SelectPicker/SelectPicker.js +42 -45
  183. package/esm/TreePicker/TreePicker.js +75 -78
  184. package/esm/index.d.ts +2 -0
  185. package/esm/index.js +1 -0
  186. package/esm/locales/index.d.ts +2 -2
  187. package/esm/utils/constants.d.ts +2 -1
  188. package/esm/utils/constants.js +1 -0
  189. package/esm/utils/dateUtils.d.ts +0 -1
  190. package/esm/utils/dateUtils.js +0 -5
  191. package/esm/utils/getStringLength.d.ts +2 -0
  192. package/esm/utils/getStringLength.js +13 -0
  193. package/esm/utils/index.d.ts +3 -0
  194. package/esm/utils/index.js +4 -1
  195. package/esm/utils/useCustom.js +2 -2
  196. package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  197. package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
  198. package/package.json +1 -1
  199. package/styles/color-modes/dark.less +1 -0
  200. package/styles/color-modes/high-contrast.less +1 -0
  201. package/styles/color-modes/light.less +1 -0
  202. package/styles/mixins/combobox.less +10 -0
  203. package/styles/normalize.less +230 -231
@@ -1,19 +1,19 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
5
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
  exports.__esModule = true;
7
7
  exports.default = void 0;
8
+ var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
13
  var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
13
14
  var _pick = _interopRequireDefault(require("lodash/pick"));
14
- var _omit = _interopRequireDefault(require("lodash/omit"));
15
15
  var _delay = _interopRequireDefault(require("lodash/delay"));
16
- var _debounce = _interopRequireDefault(require("lodash/debounce"));
16
+ var _omit = _interopRequireDefault(require("lodash/omit"));
17
17
  var _Calendar = _interopRequireDefault(require("@rsuite/icons/legacy/Calendar"));
18
18
  var _ClockO = _interopRequireDefault(require("@rsuite/icons/legacy/ClockO"));
19
19
  var _CalendarContainer = _interopRequireDefault(require("../Calendar/CalendarContainer"));
@@ -25,15 +25,21 @@ var _PredefinedRanges = _interopRequireDefault(require("./PredefinedRanges"));
25
25
  var _utils = require("../utils");
26
26
  var _dateUtils = require("../utils/dateUtils");
27
27
  var _Picker = require("../Picker");
28
+ var _usePickerRef2 = _interopRequireDefault(require("../Picker/usePickerRef"));
29
+ var _DateInput = _interopRequireDefault(require("../DateInput"));
30
+ var _InputGroup = _interopRequireDefault(require("../InputGroup"));
28
31
  var _OverlayTrigger = require("../Overlay/OverlayTrigger");
29
32
  var _deprecatePropType = require("../utils/deprecatePropType");
30
33
  var _utils2 = require("../Calendar/utils");
34
+ var _utils3 = require("./utils");
35
+ var _templateObject;
31
36
  /**
32
37
  * A date picker allows users to select a date from a calendar.
33
38
  *
34
39
  * @see https://rsuitejs.com/components/date-picker
35
40
  */
36
41
  var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
42
+ var _merge;
37
43
  var _props$as = props.as,
38
44
  Component = _props$as === void 0 ? 'div' : _props$as,
39
45
  className = props.className,
@@ -46,13 +52,18 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
46
52
  editable = _props$editable === void 0 ? true : _props$editable,
47
53
  defaultValue = props.defaultValue,
48
54
  disabled = props.disabled,
55
+ readOnly = props.readOnly,
56
+ plaintext = props.plaintext,
49
57
  _props$format = props.format,
50
58
  formatStr = _props$format === void 0 ? 'yyyy-MM-dd' : _props$format,
59
+ idProp = props.id,
51
60
  isoWeek = props.isoWeek,
52
61
  _props$limitEndYear = props.limitEndYear,
53
62
  limitEndYear = _props$limitEndYear === void 0 ? 1000 : _props$limitEndYear,
54
63
  limitStartYear = props.limitStartYear,
55
64
  overrideLocale = props.locale,
65
+ loading = props.loading,
66
+ label = props.label,
56
67
  menuClassName = props.menuClassName,
57
68
  menuStyle = props.menuStyle,
58
69
  _props$appearance = props.appearance,
@@ -67,7 +78,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
67
78
  showMeridian = props.showMeridian,
68
79
  showWeekNumbers = props.showWeekNumbers,
69
80
  style = props.style,
70
- toggleAs = props.toggleAs,
81
+ size = props.size,
71
82
  caretAsProp = props.caretAs,
72
83
  DEPRECATED_disabledDate = props.disabledDate,
73
84
  DEPRECATED_disabledHours = props.disabledHours,
@@ -77,7 +88,6 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
77
88
  shouldDisableHour = props.shouldDisableHour,
78
89
  shouldDisableMinute = props.shouldDisableMinute,
79
90
  shouldDisableSecond = props.shouldDisableSecond,
80
- renderValue = props.renderValue,
81
91
  onChange = props.onChange,
82
92
  onChangeCalendarDate = props.onChangeCalendarDate,
83
93
  onClean = props.onClean,
@@ -92,11 +102,16 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
92
102
  onToggleMonthDropdown = props.onToggleMonthDropdown,
93
103
  onToggleTimeDropdown = props.onToggleTimeDropdown,
94
104
  onShortcutClick = props.onShortcutClick,
95
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "limitStartYear", "locale", "menuClassName", "menuStyle", "appearance", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "caretAs", "disabledDate", "disabledHours", "disabledMinutes", "disabledSeconds", "shouldDisableDate", "shouldDisableHour", "shouldDisableMinute", "shouldDisableSecond", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown", "onShortcutClick"]);
105
+ restProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "readOnly", "plaintext", "format", "id", "isoWeek", "limitEndYear", "limitStartYear", "locale", "loading", "label", "menuClassName", "menuStyle", "appearance", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "size", "caretAs", "disabledDate", "disabledHours", "disabledMinutes", "disabledSeconds", "shouldDisableDate", "shouldDisableHour", "shouldDisableMinute", "shouldDisableSecond", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown", "onShortcutClick"]);
106
+ var id = (0, _utils.useUniqueId)(classPrefix + "-", idProp);
107
+ var _usePickerRef = (0, _usePickerRef2.default)(ref),
108
+ trigger = _usePickerRef.trigger,
109
+ root = _usePickerRef.root,
110
+ target = _usePickerRef.target,
111
+ overlay = _usePickerRef.overlay;
96
112
  var _useCustom = (0, _utils.useCustom)('DatePicker', overrideLocale),
97
113
  locale = _useCustom.locale,
98
- formatDate = _useCustom.formatDate,
99
- parseDate = _useCustom.parseDate;
114
+ formatDate = _useCustom.formatDate;
100
115
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
101
116
  merge = _useClassNames.merge,
102
117
  prefix = _useClassNames.prefix;
@@ -112,71 +127,72 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
112
127
  setShowMonthDropdown = _useState[1]; // Show only the calendar month panel. formatStr = 'yyyy-MM'
113
128
  var onlyShowMonth = (0, _dateUtils.shouldRenderMonth)(formatStr) && !(0, _dateUtils.shouldRenderDate)(formatStr);
114
129
  var showMonth = onlyShowMonth || showMonthDropdown;
115
- var _useState2 = (0, _react.useState)(),
116
- inputState = _useState2[0],
117
- setInputState = _useState2[1];
118
- var _useState3 = (0, _react.useState)(false),
119
- active = _useState3[0],
120
- setActive = _useState3[1];
121
- var triggerRef = (0, _react.useRef)(null);
122
- var rootRef = (0, _react.useRef)(null);
123
- var targetRef = (0, _react.useRef)(null);
124
- var overlayRef = (0, _react.useRef)(null);
125
- (0, _Picker.usePublicMethods)(ref, {
126
- rootRef: rootRef,
127
- triggerRef: triggerRef,
128
- overlayRef: overlayRef,
129
- targetRef: targetRef
130
- });
130
+ var isDateDisabled = function isDateDisabled(date) {
131
+ if (typeof shouldDisableDate === 'function') {
132
+ return shouldDisableDate(date);
133
+ }
134
+ if (typeof DEPRECATED_disabledDate === 'function') {
135
+ return DEPRECATED_disabledDate(date);
136
+ }
137
+ return false;
138
+ };
139
+ var isErrorValue = function isErrorValue(value) {
140
+ if (!(0, _dateUtils.isValid)(value)) {
141
+ return true;
142
+ } else if (value && isDateDisabled(value)) {
143
+ return true;
144
+ }
145
+ return false;
146
+ };
131
147
 
132
148
  /**
133
149
  * Switch to the callback triggered after the next month.
134
150
  */
135
- var handleMoveForward = (0, _react.useCallback)(function (nextPageDate) {
151
+ var handleMoveForward = (0, _utils.useEventCallback)(function (nextPageDate) {
136
152
  setCalendarDate(nextPageDate);
137
153
  onNextMonth === null || onNextMonth === void 0 ? void 0 : onNextMonth(nextPageDate);
138
154
  onChangeCalendarDate === null || onChangeCalendarDate === void 0 ? void 0 : onChangeCalendarDate(nextPageDate);
139
- }, [onChangeCalendarDate, onNextMonth, setCalendarDate]);
155
+ });
140
156
 
141
157
  /**
142
158
  * Switch to the callback triggered after the previous month.
143
159
  */
144
- var handleMoveBackward = (0, _react.useCallback)(function (nextPageDate) {
160
+ var handleMoveBackward = (0, _utils.useEventCallback)(function (nextPageDate) {
145
161
  setCalendarDate(nextPageDate);
146
162
  onPrevMonth === null || onPrevMonth === void 0 ? void 0 : onPrevMonth(nextPageDate);
147
163
  onChangeCalendarDate === null || onChangeCalendarDate === void 0 ? void 0 : onChangeCalendarDate(nextPageDate);
148
- }, [onChangeCalendarDate, onPrevMonth, setCalendarDate]);
164
+ });
149
165
 
150
166
  /**
151
167
  * The callback triggered when the date changes.
152
168
  */
153
- var handleDateChange = (0, _react.useCallback)(function (nextValue, event) {
169
+ var handleDateChange = (0, _utils.useEventCallback)(function (nextValue, event) {
154
170
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(nextValue, event);
155
171
  onChangeCalendarDate === null || onChangeCalendarDate === void 0 ? void 0 : onChangeCalendarDate(nextValue, event);
156
- }, [onChangeCalendarDate, onSelect]);
172
+ });
157
173
 
158
174
  /**
159
175
  * A callback triggered when the time on the calendar changes.
160
176
  */
161
- var handleChangeTime = (0, _react.useCallback)(function (nextPageTime) {
177
+ var handleChangeTime = (0, _utils.useEventCallback)(function (nextPageTime) {
162
178
  setCalendarDate(nextPageTime);
163
179
  handleDateChange(nextPageTime);
164
- }, [handleDateChange, setCalendarDate]);
165
- var handleClose = (0, _react.useCallback)(function () {
166
- var _triggerRef$current, _triggerRef$current$c;
167
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$c = _triggerRef$current.close) === null || _triggerRef$current$c === void 0 ? void 0 : _triggerRef$current$c.call(_triggerRef$current);
168
- }, []);
180
+ });
181
+ var handleClose = (0, _utils.useEventCallback)(function () {
182
+ var _trigger$current, _trigger$current$clos;
183
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$clos = _trigger$current.close) === null || _trigger$current$clos === void 0 ? void 0 : _trigger$current$clos.call(_trigger$current);
184
+ });
169
185
 
170
186
  /**
171
187
  * The callback triggered when PM/AM is switched.
172
188
  */
173
- var handleToggleMeridian = (0, _react.useCallback)(function () {
189
+ var handleToggleMeridian = (0, _utils.useEventCallback)(function () {
174
190
  var hours = (0, _dateUtils.getHours)(calendarDate);
175
191
  var nextHours = hours >= 12 ? hours - 12 : hours + 12;
176
192
  var nextDate = (0, _dateUtils.setHours)(calendarDate, nextHours);
177
193
  handleChangeTime(nextDate);
178
- }, [calendarDate, handleChangeTime]);
179
- var updateValue = (0, _react.useCallback)(function (event, nextPageDate, closeOverlay) {
194
+ });
195
+ var updateValue = function updateValue(event, nextPageDate, closeOverlay) {
180
196
  if (closeOverlay === void 0) {
181
197
  closeOverlay = true;
182
198
  }
@@ -191,91 +207,80 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
191
207
  if (closeOverlay !== false) {
192
208
  handleClose();
193
209
  }
194
- }, [handleClose, onChange, calendarDate, setCalendarDate, setValue, value]);
210
+ };
195
211
 
196
212
  /**
197
213
  * The callback triggered after the date in the shortcut area is clicked.
198
214
  */
199
- var handleShortcutPageDate = (0, _react.useCallback)(function (range, closeOverlay, event) {
215
+ var handleShortcutPageDate = (0, _utils.useEventCallback)(function (range, closeOverlay, event) {
200
216
  var value = range.value;
201
217
  updateValue(event, value, closeOverlay);
202
218
  handleDateChange(value, event);
203
219
  onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, event);
204
- }, [handleDateChange, onShortcutClick, updateValue]);
220
+ });
205
221
 
206
222
  /**
207
223
  * Get the corresponding container based on date selection and month selection
208
224
  */
209
- var getOverlayContainer = (0, _react.useCallback)(function () {
210
- var _overlayRef$current;
211
- return (_overlayRef$current = overlayRef.current) === null || _overlayRef$current === void 0 ? void 0 : _overlayRef$current.querySelector(showMonth ? '[role="menu"]' : '[role="grid"]');
212
- }, [showMonth]);
225
+ var getOverlayContainer = function getOverlayContainer() {
226
+ return showMonth ? document.getElementById(id + "-calendar-month-dropdown") : document.getElementById(id + "-calendar-table");
227
+ };
213
228
 
214
229
  /**
215
230
  * Check whether the date is focusable
216
231
  */
217
- var checkFocusable = (0, _react.useCallback)(function (date) {
232
+ var checkFocusable = function checkFocusable(date) {
218
233
  var formatStr = showMonth ? locale.formattedMonthPattern : locale.formattedDayPattern;
219
234
  var ariaLabel = (0, _utils2.getAriaLabel)(date, formatStr, formatDate);
220
235
  var container = getOverlayContainer();
221
- var dateElement = container.querySelector("[aria-label=\"" + ariaLabel + "\"]");
222
- if (dateElement !== null && dateElement !== void 0 && dateElement.hasAttribute('aria-disabled')) {
236
+ var dateElement = container === null || container === void 0 ? void 0 : container.querySelector("[aria-label=\"" + ariaLabel + "\"]");
237
+ if ((dateElement === null || dateElement === void 0 ? void 0 : dateElement.getAttribute('aria-disabled')) === 'true') {
223
238
  return false;
224
239
  }
225
240
  return true;
226
- }, [formatDate, getOverlayContainer, locale, showMonth]);
241
+ };
227
242
 
228
243
  /**
229
244
  * Focus on the currently selected date element
230
245
  */
231
- var focusSelectedDate = (0, _react.useCallback)(function () {
246
+ var focusSelectedDate = function focusSelectedDate() {
232
247
  (0, _delay.default)(function () {
233
248
  var container = getOverlayContainer();
234
249
  var selectedElement = container === null || container === void 0 ? void 0 : container.querySelector('[aria-selected="true"]');
235
250
  selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.focus();
236
251
  }, 1);
237
- }, [getOverlayContainer]);
252
+ };
238
253
 
239
254
  /**
240
255
  * Focus on the input element
241
256
  */
242
- var focusTargetButton = (0, _react.useCallback)(function () {
257
+ var focusTargetInput = (0, _utils.useEventCallback)(function () {
243
258
  (0, _delay.default)(function () {
244
- var _targetRef$current, _targetRef$current$qu;
245
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : (_targetRef$current$qu = _targetRef$current.querySelector('input')) === null || _targetRef$current$qu === void 0 ? void 0 : _targetRef$current$qu.focus();
246
- }, 100);
247
- }, []);
259
+ var _target$current;
260
+ return (_target$current = target.current) === null || _target$current === void 0 ? void 0 : _target$current.focus();
261
+ }, 1);
262
+ });
248
263
 
249
264
  /**
250
265
  * The callback triggered after clicking the OK button.
251
266
  */
252
- var handleOK = (0, _react.useCallback)(function (event) {
267
+ var handleOK = (0, _utils.useEventCallback)(function (event) {
253
268
  updateValue(event);
254
269
  onOk === null || onOk === void 0 ? void 0 : onOk(calendarDate, event);
255
- focusTargetButton();
256
- }, [updateValue, onOk, calendarDate, focusTargetButton]);
270
+ focusTargetInput();
271
+ });
257
272
 
258
273
  /**
259
274
  * Callback after clicking the clear button.
260
275
  */
261
- var handleClean = (0, _react.useCallback)(function (event) {
276
+
277
+ var handleClean = (0, _utils.useEventCallback)(function (event) {
262
278
  updateValue(event, null);
263
279
  resetCalendarDate(null);
264
- }, [resetCalendarDate, updateValue]);
265
- var handlePickerToggleKeyDown = (0, _react.useCallback)(function (event) {
266
- var _event$target;
267
- var tagName = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.tagName;
268
- if (tagName === 'INPUT') {
269
- if (event.key === 'ArrowDown') {
270
- event.preventDefault();
271
- focusSelectedDate();
272
- } else if (event.key === 'Enter') {
273
- var _triggerRef$current2, _triggerRef$current2$;
274
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.open) === null || _triggerRef$current2$ === void 0 ? void 0 : _triggerRef$current2$.call(_triggerRef$current2);
275
- }
276
- }
277
- }, [focusSelectedDate]);
278
- var handlePickerOverlayKeyDown = (0, _react.useCallback)(function (event) {
280
+ onClean === null || onClean === void 0 ? void 0 : onClean(event);
281
+ event.stopPropagation();
282
+ });
283
+ var handlePickerOverlayKeyDown = (0, _utils.useEventCallback)(function (event) {
279
284
  var delta = 0;
280
285
  var step = showMonth ? 6 : 7;
281
286
  var changeDateFunc = showMonth ? _dateUtils.addMonths : _dateUtils.addDays;
@@ -301,135 +306,91 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
301
306
  setCalendarDate(nextDate);
302
307
  focusSelectedDate();
303
308
  }
304
- }, [showMonth, calendarDate, checkFocusable, handleOK, setCalendarDate, focusSelectedDate]);
309
+ });
305
310
 
306
311
  /**
307
312
  * The callback triggered after the month selection box is opened or closed.
308
313
  */
309
- var handleToggleMonthDropdown = (0, _react.useCallback)(function (toggle) {
314
+ var handleToggleMonthDropdown = (0, _utils.useEventCallback)(function (toggle) {
310
315
  onToggleMonthDropdown === null || onToggleMonthDropdown === void 0 ? void 0 : onToggleMonthDropdown(toggle);
311
316
  setShowMonthDropdown(toggle);
312
- }, [onToggleMonthDropdown]);
313
-
314
- /**
315
- * Handle keyboard events.
316
- */
317
- var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
318
- triggerRef: triggerRef,
319
- targetRef: targetRef,
320
- overlayRef: overlayRef,
321
- active: active,
322
- onExit: handleClean,
323
- onKeyDown: handlePickerToggleKeyDown
324
- }, rest));
317
+ });
318
+ var handleClick = (0, _utils.useEventCallback)(function () {
319
+ if (editable) {
320
+ return;
321
+ }
322
+ focusSelectedDate();
323
+ });
325
324
 
326
325
  /**
327
326
  * Callback after the date is selected.
328
327
  */
329
- var handleSelect = (0, _react.useCallback)(function (nextValue, event, updatableValue) {
328
+ var handleSelect = (0, _utils.useEventCallback)(function (nextValue, event, updatableValue) {
330
329
  if (updatableValue === void 0) {
331
330
  updatableValue = true;
332
331
  }
333
332
  setCalendarDate(
334
333
  // Determine whether the current value contains time, if not, use calendarDate.
335
- (0, _dateUtils.shouldRenderTime)(formatStr) ? nextValue : (0, _utils.composeFunctions)(function (d) {
336
- return (0, _dateUtils.setHours)(d, (0, _dateUtils.getHours)(calendarDate));
337
- }, function (d) {
338
- return (0, _dateUtils.setMinutes)(d, (0, _dateUtils.getMinutes)(calendarDate));
339
- }, function (d) {
340
- return (0, _dateUtils.setSeconds)(d, (0, _dateUtils.getSeconds)(calendarDate));
341
- })(nextValue));
334
+ (0, _dateUtils.shouldRenderTime)(formatStr) ? nextValue : (0, _dateUtils.copyTime)({
335
+ from: calendarDate,
336
+ to: nextValue
337
+ }));
342
338
  handleDateChange(nextValue);
343
339
  if (oneTap && updatableValue) {
344
340
  updateValue(event, nextValue);
341
+ focusTargetInput();
345
342
  }
346
- }, [setCalendarDate, formatStr, handleDateChange, oneTap, calendarDate, updateValue]);
343
+ });
347
344
 
348
345
  /**
349
346
  * A callback triggered when the date on the calendar changes.
350
347
  */
351
- var handleChangeMonth = (0, _react.useCallback)(function (nextPageDate, event) {
348
+ var handleChangeMonth = (0, _utils.useEventCallback)(function (nextPageDate, event) {
352
349
  setCalendarDate(nextPageDate);
353
350
  handleDateChange(nextPageDate);
354
351
  focusSelectedDate();
355
352
  if (oneTap && onlyShowMonth) {
356
353
  updateValue(event, nextPageDate);
354
+ focusTargetInput();
357
355
  }
358
- }, [focusSelectedDate, handleDateChange, oneTap, onlyShowMonth, setCalendarDate, updateValue]);
359
- var isDateDisabled = (0, _react.useCallback)(function (date) {
360
- if (typeof shouldDisableDate === 'function') {
361
- return shouldDisableDate(date);
362
- }
363
- if (typeof DEPRECATED_disabledDate === 'function') {
364
- return DEPRECATED_disabledDate(date);
365
- }
366
- return false;
367
- }, [DEPRECATED_disabledDate, shouldDisableDate]);
356
+ });
368
357
 
369
358
  /**
370
359
  * Callback after the input box value is changed.
371
360
  */
372
- var handleInputChange = (0, _react.useCallback)(function (value, event) {
373
- setInputState('Typing');
374
-
375
- // isMatch('01/11/2020', 'MM/dd/yyyy') ==> true
376
- // isMatch('2020-11-01', 'MM/dd/yyyy') ==> false
377
- if (!(0, _dateUtils.isMatch)(value, formatStr, {
378
- locale: locale.dateLocale
379
- })) {
380
- setInputState('Error');
381
- return;
382
- }
383
- var date = parseDate(value, formatStr);
384
-
385
- // If only the time is included in the characters, it will default to today.
386
- if ((0, _dateUtils.shouldOnlyRenderTime)(formatStr)) {
387
- date = new Date((0, _dateUtils.format)(new Date(), 'yyyy-MM-dd') + " " + value);
388
- }
389
- if (!(0, _dateUtils.isValid)(date)) {
390
- setInputState('Error');
391
- return;
392
- }
393
- if (isDateDisabled(date)) {
394
- setInputState('Error');
395
- return;
396
- }
397
- handleSelect(date, event, false);
398
- }, [formatStr, locale, parseDate, isDateDisabled, handleSelect]);
399
-
400
- /**
401
- * The callback after the enter key is triggered on the input
402
- */
403
- var handleInputPressEnd = (0, _react.useCallback)(function (event) {
404
- if (inputState === 'Typing') {
405
- updateValue(event, calendarDate);
406
- }
407
- setInputState('Initial');
408
- }, [inputState, calendarDate, updateValue]);
409
- var handleInputBackspace = (0, _react.useCallback)(function (event) {
410
- var value = event.target.value;
411
-
412
- // When the input box is empty, the date is cleared.
413
- if (value === '') {
414
- handleClean(event);
361
+ var handleInputChange = (0, _utils.useEventCallback)(function (value, event) {
362
+ if (!isErrorValue(value)) {
363
+ handleSelect(value, event);
415
364
  }
416
- }, [handleClean]);
417
- var handleEntered = (0, _react.useCallback)(function () {
418
- onOpen === null || onOpen === void 0 ? void 0 : onOpen();
419
- setActive(true);
420
- }, [onOpen]);
421
- var handleExited = (0, _react.useCallback)(function () {
422
- onClose === null || onClose === void 0 ? void 0 : onClose();
423
- setActive(false);
424
- }, [onClose]);
365
+ updateValue(event, value, false);
366
+ });
367
+ var handleInputKeyDown = (0, _utils.useEventCallback)(function (event) {
368
+ (0, _Picker.onMenuKeyDown)(event, {
369
+ esc: handleClose,
370
+ enter: function enter() {
371
+ var _trigger$current2;
372
+ var _ref = ((_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : _trigger$current2.getState()) || {},
373
+ open = _ref.open;
374
+ if (open) {
375
+ if ((0, _dateUtils.isValid)(calendarDate) && !isDateDisabled(calendarDate)) {
376
+ updateValue(event);
377
+ focusTargetInput();
378
+ }
379
+ } else {
380
+ var _trigger$current3;
381
+ (_trigger$current3 = trigger.current) === null || _trigger$current3 === void 0 ? void 0 : _trigger$current3.open();
382
+ }
383
+ }
384
+ });
385
+ });
425
386
 
426
387
  // Check whether the time is within the time range of the shortcut option in the toolbar.
427
- var disabledToolbarHandle = (0, _react.useCallback)(function (date) {
388
+ var disabledToolbarHandle = function disabledToolbarHandle(date) {
428
389
  var _DEPRECATED_disabledD;
429
390
  var allowDate = (_DEPRECATED_disabledD = DEPRECATED_disabledDate === null || DEPRECATED_disabledDate === void 0 ? void 0 : DEPRECATED_disabledDate(date)) !== null && _DEPRECATED_disabledD !== void 0 ? _DEPRECATED_disabledD : false;
430
391
  var allowTime = (0, _dateUtils.disabledTime)(props, date);
431
392
  return allowDate || allowTime;
432
- }, [DEPRECATED_disabledDate, props]);
393
+ };
433
394
 
434
395
  /**
435
396
  * Whether "OK" button is disabled
@@ -437,12 +398,12 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
437
398
  * - If format is date, disable ok button if selected date is disabled
438
399
  * - If format is month, disable ok button if all dates in the month of selected date are disabled
439
400
  */
440
- var isOKButtonDisabled = (0, _react.useCallback)(function (selectedDate) {
401
+ var isOKButtonDisabled = function isOKButtonDisabled(selectedDate) {
441
402
  if ((0, _dateUtils.shouldRenderMonth)(formatStr) && !(0, _dateUtils.shouldRenderDate)(formatStr)) {
442
403
  return (0, _MonthDropdown.isEveryDateInMonth)(selectedDate.getFullYear(), selectedDate.getMonth(), disabledToolbarHandle);
443
404
  }
444
405
  return disabledToolbarHandle(selectedDate);
445
- }, [disabledToolbarHandle, formatStr]);
406
+ };
446
407
  var calendarProps = (0, _react.useMemo)(function () {
447
408
  return (0, _mapValues.default)((0, _pick.default)(props, _dateUtils.calendarOnlyProps), function (disabledOrHiddenTimeFunc) {
448
409
  return function (next, date) {
@@ -451,53 +412,26 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
451
412
  };
452
413
  });
453
414
  }, [props]);
454
- var calendar = /*#__PURE__*/_react.default.createElement(_CalendarContainer.default, (0, _extends2.default)({}, calendarProps, {
455
- locale: locale,
456
- showWeekNumbers: showWeekNumbers,
457
- showMeridian: showMeridian,
458
- disabledDate: isDateDisabled,
459
- disabledHours: shouldDisableHour !== null && shouldDisableHour !== void 0 ? shouldDisableHour : DEPRECATED_disabledHours,
460
- disabledMinutes: shouldDisableMinute !== null && shouldDisableMinute !== void 0 ? shouldDisableMinute : DEPRECATED_disabledMinutes,
461
- disabledSeconds: shouldDisableSecond !== null && shouldDisableSecond !== void 0 ? shouldDisableSecond : DEPRECATED_disabledSeconds,
462
- limitEndYear: limitEndYear,
463
- limitStartYear: limitStartYear,
464
- format: formatStr,
465
- isoWeek: isoWeek,
466
- calendarDate: calendarDate,
467
- onMoveForward: handleMoveForward,
468
- onMoveBackward: handleMoveBackward,
469
- onSelect: handleSelect,
470
- onToggleMonthDropdown: handleToggleMonthDropdown,
471
- onToggleTimeDropdown: onToggleTimeDropdown,
472
- onChangeMonth: handleChangeMonth,
473
- onChangeTime: handleChangeTime,
474
- onToggleMeridian: handleToggleMeridian
475
- }));
476
-
477
- // The shortcut option on the left side of the calendar panel
478
- var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
479
- return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
480
- })) || [];
481
-
482
- // The shortcut option on the bottom of the calendar panel
483
- var bottomRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
484
- return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
485
- })) || [];
415
+ var _splitRanges = (0, _utils3.splitRanges)(ranges),
416
+ sideRanges = _splitRanges.sideRanges,
417
+ bottomRanges = _splitRanges.bottomRanges;
486
418
  var renderCalendarOverlay = function renderCalendarOverlay(positionProps, speakerRef) {
487
419
  var left = positionProps.left,
488
420
  top = positionProps.top,
489
421
  className = positionProps.className;
490
- var classes = merge(menuClassName, className, prefix('date-menu'));
422
+ var classes = merge(menuClassName, className);
491
423
  var styles = (0, _extends2.default)({}, menuStyle, {
492
424
  left: left,
493
425
  top: top
494
426
  });
495
427
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
496
428
  role: "dialog",
429
+ "aria-labelledby": label ? id + "-label" : undefined,
430
+ tabIndex: -1,
497
431
  className: classes,
498
- ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
432
+ ref: (0, _utils.mergeRefs)(overlay, speakerRef),
499
433
  style: styles,
500
- target: triggerRef,
434
+ target: trigger,
501
435
  onKeyDown: handlePickerOverlayKeyDown
502
436
  }, /*#__PURE__*/_react.default.createElement(_Stack.default, {
503
437
  alignItems: "flex-start"
@@ -510,7 +444,29 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
510
444
  locale: locale,
511
445
  disabledShortcut: disabledToolbarHandle,
512
446
  onShortcutClick: handleShortcutPageDate
513
- }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, calendar, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
447
+ }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CalendarContainer.default, (0, _extends2.default)({}, calendarProps, {
448
+ targetId: id,
449
+ locale: locale,
450
+ showWeekNumbers: showWeekNumbers,
451
+ showMeridian: showMeridian,
452
+ disabledDate: isDateDisabled,
453
+ disabledHours: shouldDisableHour !== null && shouldDisableHour !== void 0 ? shouldDisableHour : DEPRECATED_disabledHours,
454
+ disabledMinutes: shouldDisableMinute !== null && shouldDisableMinute !== void 0 ? shouldDisableMinute : DEPRECATED_disabledMinutes,
455
+ disabledSeconds: shouldDisableSecond !== null && shouldDisableSecond !== void 0 ? shouldDisableSecond : DEPRECATED_disabledSeconds,
456
+ limitEndYear: limitEndYear,
457
+ limitStartYear: limitStartYear,
458
+ format: formatStr,
459
+ isoWeek: isoWeek,
460
+ calendarDate: calendarDate,
461
+ onMoveForward: handleMoveForward,
462
+ onMoveBackward: handleMoveBackward,
463
+ onSelect: handleSelect,
464
+ onToggleMonthDropdown: handleToggleMonthDropdown,
465
+ onToggleTimeDropdown: onToggleTimeDropdown,
466
+ onChangeMonth: handleChangeMonth,
467
+ onChangeTime: handleChangeTime,
468
+ onToggleMeridian: handleToggleMeridian
469
+ })), /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
514
470
  locale: locale,
515
471
  ranges: bottomRanges,
516
472
  calendarDate: calendarDate,
@@ -521,7 +477,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
521
477
  hideOkBtn: oneTap
522
478
  }))));
523
479
  };
524
- var hasValue = !!value;
480
+ var hasValue = (0, _dateUtils.isValid)(value);
525
481
  var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends2.default)({}, props, {
526
482
  classPrefix: classPrefix,
527
483
  name: 'date',
@@ -531,62 +487,73 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
531
487
  })),
532
488
  classes = _usePickerClassName[0],
533
489
  usedClassNamePropKeys = _usePickerClassName[1];
534
- var renderDate = (0, _react.useCallback)(function () {
535
- var _renderValue;
536
- if (!value) {
537
- return placeholder || formatStr;
538
- }
539
- return (_renderValue = renderValue === null || renderValue === void 0 ? void 0 : renderValue(value, formatStr)) !== null && _renderValue !== void 0 ? _renderValue : formatDate(value, formatStr);
540
- }, [formatStr, formatDate, placeholder, renderValue, value]);
541
490
  var caretAs = (0, _react.useMemo)(function () {
491
+ if (caretAsProp === null) {
492
+ return null;
493
+ }
542
494
  return caretAsProp || ((0, _dateUtils.shouldOnlyRenderTime)(formatStr) ? _ClockO.default : _Calendar.default);
543
495
  }, [caretAsProp, formatStr]);
544
- var handleTriggerClose = (0, _react.useCallback)(function (cause) {
496
+ var handleTriggerClose = (0, _utils.useEventCallback)(function (cause) {
545
497
  // Unless overlay is closing on user clicking "OK" button,
546
498
  // reset the selected date on calendar panel
547
499
  if (cause !== _OverlayTrigger.OverlayCloseCause.ImperativeHandle) {
548
500
  resetCalendarDate();
549
501
  }
550
502
  setShowMonthDropdown(false);
551
- }, [resetCalendarDate]);
503
+ });
504
+ var showCleanButton = cleanable && hasValue && !readOnly;
505
+ var _partitionHTMLProps = (0, _utils.partitionHTMLProps)(restProps, {
506
+ htmlProps: [],
507
+ includeAria: true
508
+ }),
509
+ ariaProps = _partitionHTMLProps[0],
510
+ rest = _partitionHTMLProps[1];
511
+ var invalidValue = value && isErrorValue(value);
552
512
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
553
513
  trigger: "active",
554
514
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
555
- ref: triggerRef,
515
+ ref: trigger,
556
516
  placement: placement,
557
517
  onClose: handleTriggerClose,
558
- onEntered: (0, _utils.createChainedFunction)(handleEntered, onEntered),
559
- onExited: (0, _utils.createChainedFunction)(handleExited, onExited),
518
+ onEntered: (0, _utils.createChainedFunction)(onOpen, onEntered),
519
+ onExited: (0, _utils.createChainedFunction)(onClose, onExited),
560
520
  speaker: renderCalendarOverlay
561
521
  }, /*#__PURE__*/_react.default.createElement(Component, {
562
- className: merge(className, classes),
522
+ className: merge(className, classes, (_merge = {}, _merge[prefix('error')] = invalidValue, _merge)),
563
523
  style: style,
564
- ref: rootRef
565
- }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys, _dateUtils.calendarOnlyProps)), {
566
- className: prefix({
567
- error: inputState === 'Error'
568
- }),
569
- as: toggleAs,
570
- ref: targetRef,
571
- appearance: appearance,
572
- editable: editable,
573
- inputValue: value ? formatDate(value, formatStr) : '',
574
- inputPlaceholder: typeof placeholder === 'string' && placeholder ? placeholder : formatStr,
575
- inputMask: (0, _dateUtils.getDateMask)(formatStr),
576
- onInputChange: handleInputChange,
577
- onInputBlur: handleInputPressEnd,
578
- onInputPressEnter: handleInputPressEnd,
579
- onInputBackspace: (0, _debounce.default)(handleInputBackspace, 10),
580
- onKeyDown: onPickerKeyDown,
581
- onClean: (0, _utils.createChainedFunction)(handleClean, onClean),
582
- cleanable: cleanable && !disabled,
583
- hasValue: hasValue,
584
- active: active,
585
- placement: placement,
524
+ ref: root
525
+ }, plaintext ? /*#__PURE__*/_react.default.createElement(_DateInput.default, {
526
+ value: value,
527
+ format: formatStr,
528
+ plaintext: plaintext
529
+ }) : /*#__PURE__*/_react.default.createElement(_InputGroup.default, (0, _extends2.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys, _dateUtils.calendarOnlyProps)), {
530
+ inside: true,
531
+ size: size,
532
+ onClick: handleClick
533
+ }), /*#__PURE__*/_react.default.createElement(_Picker.PickerLabel, {
534
+ className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["label"]))),
535
+ id: id + "-label"
536
+ }, label), /*#__PURE__*/_react.default.createElement(_DateInput.default, (0, _extends2.default)({
537
+ "aria-haspopup": "dialog",
538
+ "aria-invalid": invalidValue,
539
+ "aria-labelledby": label ? id + "-label" : undefined
540
+ }, ariaProps, {
541
+ ref: target,
542
+ id: id,
543
+ value: value,
544
+ format: formatStr,
545
+ placeholder: placeholder ? placeholder : formatStr,
586
546
  disabled: disabled,
547
+ onChange: handleInputChange,
548
+ readOnly: readOnly || !editable || loading,
549
+ plaintext: plaintext,
550
+ onKeyDown: handleInputKeyDown
551
+ })), /*#__PURE__*/_react.default.createElement(_Picker.PickerIndicator, {
552
+ loading: loading,
587
553
  caretAs: caretAs,
588
- "aria-haspopup": "dialog"
589
- }), renderDate())));
554
+ onClose: handleClean,
555
+ showCleanButton: showCleanButton
556
+ }))));
590
557
  });
591
558
  DatePicker.displayName = 'DatePicker';
592
559
  DatePicker.propTypes = (0, _extends2.default)({}, _Picker.pickerPropTypes, {