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
@@ -111,12 +111,16 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
111
111
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "style", "appearance", "cleanable", "countable", "searchBy", "toggleAs", "searchKeyword", "showIndentLine", "locale", "cascade", "disabled", "valueKey", "labelKey", "placement", "childrenKey", "placeholder", "value", "defaultValue", "defaultExpandAll", "disabledItemValues", "expandItemValues", "defaultExpandItemValues", "height", "menuMaxHeight", "menuStyle", "searchable", "virtualized", "className", "classPrefix", "menuClassName", "menuAutoWidth", "uncheckableItemValues", "id", "listProps", "renderMenu", "getChildren", "renderExtraFooter", "onEntered", "onChange", "onClean", "onClose", "onExited", "onSearch", "onSelect", "onSelectItem", "onOpen", "onScroll", "onExpand", "renderValue", "renderTreeIcon", "renderTreeNode"]);
112
112
  var _useContext = (0, _react.useContext)(_TreeContext.default),
113
113
  inline = _useContext.inline;
114
- var triggerRef = (0, _react.useRef)(null);
115
- var targetRef = (0, _react.useRef)(null);
116
- var listRef = (0, _react.useRef)(null);
117
- var overlayRef = (0, _react.useRef)(null);
118
- var searchInputRef = (0, _react.useRef)(null);
119
- var treeViewRef = (0, _react.useRef)(null);
114
+ var _usePickerRef = (0, _Picker.usePickerRef)(ref, {
115
+ inline: inline
116
+ }),
117
+ trigger = _usePickerRef.trigger,
118
+ root = _usePickerRef.root,
119
+ target = _usePickerRef.target,
120
+ overlay = _usePickerRef.overlay,
121
+ list = _usePickerRef.list,
122
+ searchInput = _usePickerRef.searchInput,
123
+ treeView = _usePickerRef.treeView;
120
124
  var _useCustom = (0, _utils.useCustom)('Picker', overrideLocale),
121
125
  rtl = _useCustom.rtl,
122
126
  locale = _useCustom.locale;
@@ -197,7 +201,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
197
201
  * get formatted nodes for render tree
198
202
  * @params render - renderNode function. only used when virtualized setting false
199
203
  */
200
- var getFormattedNodes = (0, _react.useCallback)(function (render) {
204
+ var getFormattedNodes = function getFormattedNodes(render) {
201
205
  if (virtualized) {
202
206
  return formatVirtualizedTreeData(flattenNodes, filteredData, expandItemValues, {
203
207
  cascade: cascade,
@@ -212,7 +216,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
212
216
  }).map(function (node) {
213
217
  return render === null || render === void 0 ? void 0 : render(node, 1);
214
218
  });
215
- }, [searchKeywordState, expandItemValues, filteredData, flattenNodes, formatVirtualizedTreeData, virtualized, childrenKey, cascade]);
219
+ };
216
220
  var getTreeNodeProps = function getTreeNodeProps(node, layer) {
217
221
  return {
218
222
  as: Component,
@@ -243,19 +247,19 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
243
247
  onRenderTreeIcon: renderTreeIcon
244
248
  };
245
249
  };
246
- var focusActiveNode = (0, _react.useCallback)(function () {
247
- if (listRef.current) {
250
+ var focusActiveNode = function focusActiveNode() {
251
+ if (list.current) {
248
252
  (0, _treeUtils.focusToActiveTreeNode)({
249
- list: listRef.current,
253
+ list: list.current,
250
254
  valueKey: valueKey,
251
255
  selector: "." + checkTreePrefix('node-active'),
252
256
  activeNode: activeNode,
253
257
  virtualized: virtualized,
254
- container: treeViewRef.current,
258
+ container: treeView.current,
255
259
  formattedNodes: getFormattedNodes()
256
260
  });
257
261
  }
258
- }, [checkTreePrefix, activeNode, getFormattedNodes, valueKey, virtualized]);
262
+ };
259
263
  (0, _react.useEffect)(function () {
260
264
  setValue((0, _utils2.getCheckTreePickerDefaultValue)(value, uncheckableItemValues));
261
265
  }, []); // eslint-disable-line react-hooks/exhaustive-deps
@@ -285,7 +289,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
285
289
  });
286
290
  forceUpdate();
287
291
  }, [cascade, value, uncheckableItemValues, unSerializeList, flattenNodes, forceUpdate]);
288
- var toggleUpChecked = (0, _react.useCallback)(function (nodes, node, checked) {
292
+ var toggleUpChecked = (0, _utils.useEventCallback)(function (nodes, node, checked) {
289
293
  var currentNode = node.refKey ? nodes[node.refKey] : null;
290
294
  if (cascade && currentNode) {
291
295
  if (!checked) {
@@ -304,8 +308,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
304
308
  toggleUpChecked(nodes, currentNode.parent, checked);
305
309
  }
306
310
  }
307
- }, [cascade]);
308
- var toggleDownChecked = (0, _react.useCallback)(function (nodes, node, isChecked) {
311
+ });
312
+ var toggleDownChecked = (0, _utils.useEventCallback)(function (nodes, node, isChecked) {
309
313
  var currentNode = node.refKey ? nodes[node.refKey] : null;
310
314
  if (!currentNode) {
311
315
  return;
@@ -319,8 +323,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
319
323
  toggleDownChecked(nodes, child, isChecked);
320
324
  });
321
325
  }
322
- }, [cascade, childrenKey]);
323
- var toggleChecked = (0, _react.useCallback)(function (node, isChecked) {
326
+ });
327
+ var toggleChecked = (0, _utils.useEventCallback)(function (node, isChecked) {
324
328
  var nodes = (0, _cloneDeep2.default)(flattenNodes);
325
329
  toggleDownChecked(nodes, node, isChecked);
326
330
  node.parent && toggleUpChecked(nodes, node.parent, isChecked);
@@ -329,7 +333,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
329
333
  return values.filter(function (v) {
330
334
  return !uncheckableItemValues.includes(v);
331
335
  });
332
- }, [flattenNodes, uncheckableItemValues, serializeListOnlyParent, toggleDownChecked, toggleUpChecked]);
336
+ });
333
337
 
334
338
  // TODO-Doma
335
339
  // Replace `getKeyParentMap` with `getParentMap`
@@ -340,7 +344,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
340
344
  return node[childrenKey];
341
345
  });
342
346
  }, [childrenKey, data, valueKey]);
343
- var handleSelect = (0, _react.useCallback)(function (node, event) {
347
+ var handleSelect = (0, _utils.useEventCallback)(function (node, event) {
344
348
  var currentNode = node.refKey ? flattenNodes[node.refKey] : null;
345
349
  if (!node || !currentNode) {
346
350
  return;
@@ -363,18 +367,18 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
363
367
  onSelectItem === null || onSelectItem === void 0 ? void 0 : onSelectItem(node, (0, _treeUtils.getPathTowardsItem)(node, function (item) {
364
368
  return itemParentMap.get(item[valueKey]);
365
369
  }));
366
- }, [flattenNodes, toggleChecked, isControlled, valueKey, onChange, onSelect, onSelectItem, unSerializeList, cascade, uncheckableItemValues, setValue, itemParentMap]);
367
- var handleOpen = (0, _react.useCallback)(function () {
368
- var _triggerRef$current, _triggerRef$current$o;
369
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$o = _triggerRef$current.open) === null || _triggerRef$current$o === void 0 ? void 0 : _triggerRef$current$o.call(_triggerRef$current);
370
+ });
371
+ var handleOpen = (0, _utils.useEventCallback)(function () {
372
+ var _trigger$current, _trigger$current$open;
373
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$open = _trigger$current.open) === null || _trigger$current$open === void 0 ? void 0 : _trigger$current$open.call(_trigger$current);
370
374
  setFocusItemValue(activeNode === null || activeNode === void 0 ? void 0 : activeNode[valueKey]);
371
375
  focusActiveNode();
372
376
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
373
377
  setActive(true);
374
- }, [activeNode, focusActiveNode, onOpen, valueKey]);
375
- var handleClose = (0, _react.useCallback)(function () {
376
- var _triggerRef$current2, _triggerRef$current2$, _targetRef$current;
377
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.close) === null || _triggerRef$current2$ === void 0 ? void 0 : _triggerRef$current2$.call(_triggerRef$current2);
378
+ });
379
+ var handleClose = (0, _utils.useEventCallback)(function () {
380
+ var _trigger$current2, _trigger$current2$clo, _target$current;
381
+ (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : (_trigger$current2$clo = _trigger$current2.close) === null || _trigger$current2$clo === void 0 ? void 0 : _trigger$current2$clo.call(_trigger$current2);
378
382
  setSearchKeyword('');
379
383
  onClose === null || onClose === void 0 ? void 0 : onClose();
380
384
  setFocusItemValue(null);
@@ -383,9 +387,9 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
383
387
  /**
384
388
  * when using keyboard toggle picker, should refocus on PickerToggle Component after close picker menu
385
389
  */
386
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : _targetRef$current.focus();
387
- }, [onClose, setSearchKeyword]);
388
- var handleExpand = (0, _react.useCallback)(function (node) {
390
+ (_target$current = target.current) === null || _target$current === void 0 ? void 0 : _target$current.focus();
391
+ });
392
+ var handleExpand = (0, _utils.useEventCallback)(function (node) {
389
393
  var nextExpandItemValues = (0, _treeUtils.toggleExpand)({
390
394
  node: node,
391
395
  isExpand: !node.expand,
@@ -400,16 +404,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
400
404
  if ((0, _isFunction2.default)(getChildren) && !node.expand && Array.isArray(node[childrenKey]) && node[childrenKey].length === 0) {
401
405
  loadChildren(node, getChildren);
402
406
  }
403
- }, [childrenKey, expandItemValues, getChildren, loadChildren, onExpand, setExpandItemValues, valueKey]);
404
- (0, _Picker.usePublicMethods)(ref, {
405
- rootRef: inline ? treeViewRef : undefined,
406
- triggerRef: triggerRef,
407
- overlayRef: overlayRef,
408
- targetRef: targetRef,
409
- listRef: listRef,
410
- inline: inline
411
407
  });
412
- var handleClean = (0, _react.useCallback)(function (event) {
408
+ var handleClean = (0, _utils.useEventCallback)(function (event) {
413
409
  var target = event.target;
414
410
  // exclude searchBar
415
411
  if (target.matches('div[role="searchbox"] > input') || disabled || !cleanable) {
@@ -428,8 +424,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
428
424
  });
429
425
  }
430
426
  onChange === null || onChange === void 0 ? void 0 : onChange([], event);
431
- }, [cascade, cleanable, disabled, flattenNodes, onChange, setValue, unSerializeList, uncheckableItemValues, isControlled]);
432
- var handleFocusItem = (0, _react.useCallback)(function (key) {
427
+ });
428
+ var handleFocusItem = (0, _utils.useEventCallback)(function (key) {
433
429
  var focusableItems = (0, _treeUtils.getFocusableItems)(filteredData, {
434
430
  disabledItemValues: disabledItemValues,
435
431
  valueKey: valueKey,
@@ -454,8 +450,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
454
450
  if (key === _utils.KEY_VALUES.UP) {
455
451
  (0, _treeUtils.focusPreviousItem)(focusProps);
456
452
  }
457
- }, [searchKeywordState, checkTreePrefix, expandItemValues, filteredData, focusItemValue, treeNodesRefs, childrenKey, valueKey, disabledItemValues]);
458
- var handleLeftArrow = (0, _react.useCallback)(function () {
453
+ });
454
+ var handleLeftArrow = (0, _utils.useEventCallback)(function () {
459
455
  if ((0, _isNil2.default)(focusItemValue)) return;
460
456
  var focusItem = (0, _treeUtils.getActiveItem)(focusItemValue, flattenNodes, valueKey);
461
457
  (0, _treeUtils.leftArrowHandler)({
@@ -469,8 +465,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
469
465
  (0, _treeUtils.focusTreeNode)(focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent2 = focusItem.parent) === null || _focusItem$parent2 === void 0 ? void 0 : _focusItem$parent2.refKey, treeNodesRefs, "." + checkTreePrefix('node-label'));
470
466
  }
471
467
  });
472
- }, [checkTreePrefix, expandItemValues, flattenNodes, focusItemValue, handleExpand, treeNodesRefs, valueKey, childrenKey]);
473
- var handleRightArrow = (0, _react.useCallback)(function () {
468
+ });
469
+ var handleRightArrow = (0, _utils.useEventCallback)(function () {
474
470
  if ((0, _isNil2.default)(focusItemValue)) return;
475
471
  var focusItem = (0, _treeUtils.getActiveItem)(focusItemValue, flattenNodes, valueKey);
476
472
  (0, _treeUtils.rightArrowHandler)({
@@ -482,8 +478,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
482
478
  handleFocusItem(_utils.KEY_VALUES.DOWN);
483
479
  }
484
480
  });
485
- }, [focusItemValue, flattenNodes, valueKey, expandItemValues, childrenKey, handleExpand, handleFocusItem]);
486
- var selectActiveItem = (0, _react.useCallback)(function (event) {
481
+ });
482
+ var selectActiveItem = function selectActiveItem(event) {
487
483
  if ((0, _isNil2.default)(focusItemValue)) return;
488
484
  var activeItem = (0, _treeUtils.getActiveItem)(focusItemValue, flattenNodes, valueKey);
489
485
  if (!(0, _utils2.isNodeUncheckable)(activeItem, {
@@ -492,13 +488,13 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
492
488
  }) && activeItem !== null) {
493
489
  handleSelect(activeItem, event);
494
490
  }
495
- }, [flattenNodes, focusItemValue, handleSelect, uncheckableItemValues, valueKey]);
491
+ };
496
492
  var onPickerKeydown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
497
493
  toggle: !focusItemValue || !active,
498
- triggerRef: triggerRef,
499
- targetRef: targetRef,
500
- overlayRef: overlayRef,
501
- searchInputRef: searchInputRef,
494
+ trigger: trigger,
495
+ target: target,
496
+ overlay: overlay,
497
+ searchInput: searchInput,
502
498
  active: active,
503
499
  onExit: handleClean,
504
500
  onClose: handleClose,
@@ -517,8 +513,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
517
513
  });
518
514
  }
519
515
  }, rest));
520
- var handleTreeKeydown = (0, _react.useCallback)(function (event) {
521
- if (!treeViewRef.current) {
516
+ var handleTreeKeydown = (0, _utils.useEventCallback)(function (event) {
517
+ if (!treeView.current) {
522
518
  return;
523
519
  }
524
520
  (0, _Picker.onMenuKeyDown)(event, {
@@ -532,7 +528,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
532
528
  right: rtl ? handleLeftArrow : handleRightArrow,
533
529
  enter: selectActiveItem
534
530
  });
535
- }, [handleFocusItem, handleLeftArrow, handleRightArrow, rtl, selectActiveItem]);
531
+ });
536
532
  var renderNode = function renderNode(node, layer) {
537
533
  var visible = node.visible,
538
534
  refKey = node.refKey; // when searching, all nodes should be expand
@@ -624,7 +620,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
624
620
  }, style) : {};
625
621
  return /*#__PURE__*/_react.default.createElement("div", {
626
622
  id: id ? id + "-listbox" : undefined,
627
- ref: treeViewRef,
623
+ ref: inline ? root : treeView,
628
624
  role: "tree",
629
625
  "aria-multiselectable": true,
630
626
  className: classes,
@@ -642,7 +638,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
642
638
  }, function (_ref5) {
643
639
  var height = _ref5.height;
644
640
  return /*#__PURE__*/_react.default.createElement(_Windowing.List, (0, _extends2.default)({
645
- ref: listRef,
641
+ ref: list,
646
642
  height: height,
647
643
  itemSize: itemSize,
648
644
  itemCount: formattedNodes.length,
@@ -663,14 +659,14 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
663
659
  autoWidth: menuAutoWidth,
664
660
  className: classes,
665
661
  style: mergedMenuStyle,
666
- ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
662
+ ref: (0, _utils.mergeRefs)(overlay, speakerRef),
667
663
  onKeyDown: onPickerKeydown,
668
- target: triggerRef
664
+ target: trigger
669
665
  }, searchable ? /*#__PURE__*/_react.default.createElement(_Picker.SearchBar, {
670
666
  placeholder: locale.searchPlaceholder,
671
667
  onChange: handleSearch,
672
668
  value: searchKeywordState,
673
- inputRef: searchInputRef
669
+ inputRef: searchInput
674
670
  }) : null, renderMenu ? renderMenu(renderCheckTree()) : renderCheckTree(), renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
675
671
  };
676
672
  var selectedItems = (0, _react.useMemo)(function () {
@@ -716,7 +712,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
716
712
  }
717
713
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
718
714
  pickerProps: (0, _pick2.default)(props, _Picker.pickTriggerPropKeys),
719
- ref: triggerRef,
715
+ ref: trigger,
720
716
  placement: placement,
721
717
  onEnter: handleOpen,
722
718
  onEntered: onEntered,
@@ -724,10 +720,11 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
724
720
  speaker: renderDropdownMenu
725
721
  }, /*#__PURE__*/_react.default.createElement(Component, {
726
722
  className: classes,
727
- style: style
723
+ style: style,
724
+ ref: root
728
725
  }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, (0, _omit2.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys)), {
729
726
  id: id,
730
- ref: targetRef,
727
+ ref: target,
731
728
  appearance: appearance,
732
729
  onKeyDown: onPickerKeydown,
733
730
  onClean: (0, _utils.createChainedFunction)(handleClean, onClean),
@@ -67,6 +67,19 @@ declare const CustomContext: React.Context<CustomProviderProps<{
67
67
  more: string;
68
68
  prev: string;
69
69
  next: string;
70
+ /**
71
+ * Return the date parsed from string using the given format string.
72
+ *
73
+ * Example:
74
+ *
75
+ * import parse from 'date-fns/parse';
76
+ * import eo from 'date-fns/locale/eo'
77
+ *
78
+ * function parseDate(date, formatStr) {
79
+ * return parse(date, formatStr, new Date(), { locale: eo });
80
+ * }
81
+ *
82
+ * */
70
83
  first: string;
71
84
  last: string;
72
85
  limit: string;
@@ -7,7 +7,7 @@ exports.__esModule = true;
7
7
  exports.default = exports.CustomContext = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
- var _react = _interopRequireWildcard(require("react"));
10
+ var _react = _interopRequireDefault(require("react"));
11
11
  var _prefix = require("../utils/prefix");
12
12
  var _DOMHelper = require("../DOMHelper");
13
13
  var _ToastContainer = _interopRequireWildcard(require("../toaster/ToastContainer"));
@@ -43,7 +43,7 @@ var CustomProvider = function CustomProvider(props) {
43
43
  disableRipple: disableRipple
44
44
  }, rest);
45
45
  }, [classPrefix, theme, disableRipple, rest]);
46
- (0, _react.useEffect)(function () {
46
+ (0, _utils.useIsomorphicLayoutEffect)(function () {
47
47
  if (_DOMHelper.canUseDOM && theme) {
48
48
  (0, _DOMHelper.addClass)(document.body, (0, _prefix.prefix)(classPrefix, "theme-" + theme));
49
49
 
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { type Locale } from 'date-fns';
2
+ import type { Locale } from 'date-fns';
3
3
  export declare const patternMap: {
4
4
  y: string;
5
5
  M: string;
@@ -22,9 +22,12 @@ export declare class DateField extends Object {
22
22
  hour: number | null;
23
23
  minute: number | null;
24
24
  second: number | null;
25
- meridian: 'AM' | 'PM' | null;
26
25
  constructor(format: string, value?: Date | null);
27
26
  }
27
+ interface Action {
28
+ type: string;
29
+ value: any;
30
+ }
28
31
  export declare const useDateField: (format: string, localize: Locale['localize'], date?: Date | null) => {
29
32
  dateField: {
30
33
  year: any;
@@ -38,7 +41,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
38
41
  hour: number | null;
39
42
  minute: number | null;
40
43
  second: number | null;
41
- meridian: 'AM' | 'PM' | null;
42
44
  constructor: Function;
43
45
  toString(): string;
44
46
  toLocaleString(): string;
@@ -59,7 +61,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
59
61
  hour: number | null;
60
62
  minute: number | null;
61
63
  second: number | null;
62
- meridian: 'AM' | 'PM' | null;
63
64
  constructor: Function;
64
65
  toString(): string;
65
66
  toLocaleString(): string;
@@ -80,7 +81,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
80
81
  hour: number | null;
81
82
  minute: number | null;
82
83
  second: number | null;
83
- meridian: 'AM' | 'PM' | null;
84
84
  constructor: Function;
85
85
  toString(): string;
86
86
  toLocaleString(): string;
@@ -101,7 +101,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
101
101
  day: number | null;
102
102
  minute: number | null;
103
103
  second: number | null;
104
- meridian: 'AM' | 'PM' | null;
105
104
  constructor: Function;
106
105
  toString(): string;
107
106
  toLocaleString(): string;
@@ -122,7 +121,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
122
121
  day: number | null;
123
122
  hour: number | null;
124
123
  second: number | null;
125
- meridian: 'AM' | 'PM' | null;
126
124
  constructor: Function;
127
125
  toString(): string;
128
126
  toLocaleString(): string;
@@ -143,28 +141,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
143
141
  day: number | null;
144
142
  hour: number | null;
145
143
  minute: number | null;
146
- meridian: 'AM' | 'PM' | null;
147
- constructor: Function;
148
- toString(): string;
149
- toLocaleString(): string;
150
- valueOf(): Object;
151
- hasOwnProperty(v: PropertyKey): boolean;
152
- isPrototypeOf(v: Object): boolean;
153
- propertyIsEnumerable(v: PropertyKey): boolean;
154
- should: Chai.Assertion;
155
- } | {
156
- meridian: any;
157
- format: string;
158
- patternArray: {
159
- pattern: string;
160
- key: string;
161
- }[];
162
- year: number | null;
163
- month: number | null;
164
- day: number | null;
165
- hour: number | null;
166
- minute: number | null;
167
- second: number | null;
168
144
  constructor: Function;
169
145
  toString(): string;
170
146
  toLocaleString(): string;
@@ -174,7 +150,9 @@ export declare const useDateField: (format: string, localize: Locale['localize']
174
150
  propertyIsEnumerable(v: PropertyKey): boolean;
175
151
  should: Chai.Assertion;
176
152
  };
177
- dispatch: import("react").Dispatch<any>;
178
- toDate: (type: string, value: number | null) => Date;
153
+ dispatch: import("react").Dispatch<Action>;
154
+ toDate: (type?: string, value?: number | null) => Date | null;
179
155
  toDateString: () => string;
156
+ isEmptyValue: (type?: string, value?: number | null) => boolean | undefined;
180
157
  };
158
+ export {};
@@ -8,6 +8,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
8
8
  var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
9
9
  var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
10
10
  var _react = require("react");
11
+ var _isValid = _interopRequireDefault(require("date-fns/isValid"));
11
12
  var _utils = require("./utils");
12
13
  var patternMap = {
13
14
  y: 'year',
@@ -33,7 +34,6 @@ var DateField = /*#__PURE__*/function (_Object) {
33
34
  _this.hour = null;
34
35
  _this.minute = null;
35
36
  _this.second = null;
36
- _this.meridian = null;
37
37
  _this.format = format;
38
38
  var formatArray = format.match(new RegExp('([y|d|M|H|h|m|s|a])+', 'ig')) || [];
39
39
  _this.patternArray = formatArray.map(function (pattern) {
@@ -42,14 +42,13 @@ var DateField = /*#__PURE__*/function (_Object) {
42
42
  key: patternMap[pattern[0]]
43
43
  };
44
44
  });
45
- if (value) {
45
+ if (value && (0, _isValid.default)(value)) {
46
46
  _this.year = value.getFullYear();
47
47
  _this.month = value.getMonth() + 1;
48
48
  _this.day = value.getDate();
49
49
  _this.hour = value.getHours();
50
50
  _this.minute = value.getMinutes();
51
51
  _this.second = value.getSeconds();
52
- _this.meridian = value.getHours() > 12 ? 'PM' : 'AM';
53
52
  }
54
53
  return _this;
55
54
  }
@@ -97,10 +96,8 @@ var useDateField = function useDateField(format, localize, date) {
97
96
  return (0, _extends2.default)({}, state, {
98
97
  second: action.value
99
98
  });
100
- case 'setMeridian':
101
- return (0, _extends2.default)({}, state, {
102
- meridian: action.value
103
- });
99
+ case 'setNewDate':
100
+ return new DateField(format, action.value);
104
101
  default:
105
102
  return state;
106
103
  }
@@ -112,6 +109,7 @@ var useDateField = function useDateField(format, localize, date) {
112
109
  dateField.patternArray.forEach(function (item) {
113
110
  var key = item.key,
114
111
  pattern = item.pattern;
112
+ var hour = dateField.hour;
115
113
  var value = dateField[key];
116
114
  if (value !== null) {
117
115
  if (pattern === 'MMM' && typeof value === 'number') {
@@ -122,8 +120,12 @@ var useDateField = function useDateField(format, localize, date) {
122
120
  value = localize === null || localize === void 0 ? void 0 : localize.month(value - 1, {
123
121
  width: 'wide'
124
122
  });
125
- } else if (pattern === 'aa' && typeof value === 'number') {
126
- value = value === 0 ? 'AM' : 'PM';
123
+ } else if (pattern === 'aa') {
124
+ if (typeof hour === 'number') {
125
+ value = hour > 12 ? 'PM' : 'AM';
126
+ } else {
127
+ value = 'aa';
128
+ }
127
129
  } else if (pattern === 'hh' && typeof value === 'number') {
128
130
  value = value === 0 ? 12 : value > 12 ? value - 12 : value;
129
131
  }
@@ -135,17 +137,64 @@ var useDateField = function useDateField(format, localize, date) {
135
137
  });
136
138
  return str;
137
139
  };
140
+
141
+ // Check if the field value is valid.
142
+ var validFieldValue = function validFieldValue(type, value) {
143
+ var _format$match;
144
+ var isValid = true;
145
+ (_format$match = format.match(new RegExp('([y|d|M|H|h|m|s])+', 'ig'))) === null || _format$match === void 0 ? void 0 : _format$match.forEach(function (pattern) {
146
+ var key = patternMap[pattern[0]];
147
+ var fieldValue = type === key ? value : dateField[key];
148
+ if (fieldValue === null) {
149
+ isValid = false;
150
+ return;
151
+ }
152
+ });
153
+ return isValid;
154
+ };
155
+ var isEmptyValue = function isEmptyValue(type, value) {
156
+ var _format$match2;
157
+ var checkValueArray = (_format$match2 = format.match(new RegExp('([y|d|M|H|h|m|s])+', 'ig'))) === null || _format$match2 === void 0 ? void 0 : _format$match2.map(function (pattern) {
158
+ var key = patternMap[pattern[0]];
159
+ var fieldValue = type === key ? value : dateField[key];
160
+ return fieldValue !== null;
161
+ });
162
+ return checkValueArray === null || checkValueArray === void 0 ? void 0 : checkValueArray.every(function (item) {
163
+ return item === false;
164
+ });
165
+ };
138
166
  var toDate = function toDate(type, value) {
139
- if (value === null) {
167
+ var year = dateField.year,
168
+ month = dateField.month,
169
+ day = dateField.day,
170
+ hour = dateField.hour,
171
+ minute = dateField.minute,
172
+ second = dateField.second;
173
+ var date = new Date(year || 0, typeof month === 'number' ? month - 1 : 0,
174
+ // The default day is 1 when the value is null, otherwise it becomes the last day of the month.
175
+ day || 1, hour || 0, minute || 0, second || 0);
176
+ if (typeof type === 'undefined' || typeof value === 'undefined') {
177
+ return date;
178
+ }
179
+ if (value === null || !validFieldValue(type, value)) {
180
+ if (isEmptyValue(type, value)) {
181
+ return null;
182
+ }
140
183
  return new Date('');
141
184
  }
142
- return (0, _utils.modifyDate)(new Date(dateField.year, dateField.month ? dateField.month - 1 : 0, dateField.day, dateField.hour, dateField.minute, dateField.second), type, value);
185
+ if (type === 'meridian' && typeof hour === 'number') {
186
+ var newHour = hour > 12 ? hour - 12 : hour + 12;
187
+ type = 'hour';
188
+ value = newHour;
189
+ }
190
+ return (0, _utils.modifyDate)(date, type, value);
143
191
  };
144
192
  return {
145
193
  dateField: dateField,
146
194
  dispatch: dispatch,
147
195
  toDate: toDate,
148
- toDateString: toDateString
196
+ toDateString: toDateString,
197
+ isEmptyValue: isEmptyValue
149
198
  };
150
199
  };
151
200
  exports.useDateField = useDateField;
@@ -3,11 +3,16 @@ import { InputProps } from '../Input';
3
3
  import { FormControlBaseProps } from '../@types/common';
4
4
  export interface DateInputProps extends Omit<InputProps, 'value' | 'onChange' | 'defaultValue'>, FormControlBaseProps<Date | null> {
5
5
  /**
6
- * Format of the date when rendered in the input.
7
- * Format of the string is based on Unicode Technical Standard: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
6
+ * Format of the date when rendered in the input. Format of the string is based on Unicode Technical Standard.
7
+ *
8
+ * @see https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
8
9
  * @default 'yyyy-MM-dd'
9
10
  **/
10
11
  format?: string;
12
+ /**
13
+ * The `placeholder` prop defines the text displayed in a form control when the control has no value.
14
+ */
15
+ placeholder?: string;
11
16
  }
12
17
  /**
13
18
  * The DateInput component lets users select a date with the keyboard.