rsuite 5.20.0 → 5.22.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 (139) hide show
  1. package/CHANGELOG.md +25 -973
  2. package/CheckTreePicker/styles/index.less +0 -25
  3. package/DatePicker/styles/index.less +11 -0
  4. package/Picker/styles/index.less +0 -10
  5. package/Picker/styles/mixin.less +0 -5
  6. package/README.md +4 -2
  7. package/Table/styles/index.less +12 -7
  8. package/TreePicker/styles/index.less +0 -19
  9. package/Windowing/package.json +7 -0
  10. package/cjs/Calendar/MonthDropdown.d.ts +1 -0
  11. package/cjs/Calendar/MonthDropdown.js +27 -40
  12. package/cjs/Cascader/Cascader.d.ts +2 -2
  13. package/cjs/Cascader/DropdownMenu.js +5 -2
  14. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  15. package/cjs/CheckPicker/CheckPicker.js +4 -1
  16. package/cjs/CheckTreePicker/CheckTreePicker.js +37 -39
  17. package/cjs/CustomProvider/CustomProvider.d.ts +1 -108
  18. package/cjs/CustomProvider/CustomProvider.js +2 -5
  19. package/cjs/CustomProvider/index.d.ts +2 -2
  20. package/cjs/CustomProvider/index.js +0 -1
  21. package/cjs/DatePicker/DatePicker.js +25 -3
  22. package/cjs/DatePicker/types.d.ts +1 -0
  23. package/cjs/DateRangePicker/DateRangePicker.js +39 -20
  24. package/cjs/Disclosure/Disclosure.d.ts +2 -2
  25. package/cjs/Disclosure/Disclosure.js +6 -6
  26. package/cjs/InputPicker/InputPicker.js +4 -1
  27. package/cjs/Modal/ModalBody.js +18 -17
  28. package/cjs/MultiCascader/DropdownMenu.js +5 -2
  29. package/cjs/Navbar/NavbarDropdownMenu.js +16 -10
  30. package/cjs/Overlay/OverlayTrigger.d.ts +2 -2
  31. package/cjs/Picker/DropdownMenu.d.ts +2 -1
  32. package/cjs/Picker/DropdownMenu.js +38 -34
  33. package/cjs/Picker/PickerOverlay.d.ts +2 -2
  34. package/cjs/Picker/PickerToggle.js +4 -1
  35. package/cjs/Picker/PickerToggleTrigger.d.ts +2 -2
  36. package/cjs/Picker/PickerToggleTrigger.js +11 -10
  37. package/cjs/Picker/index.d.ts +3 -3
  38. package/cjs/Picker/types.d.ts +7 -5
  39. package/cjs/Picker/utils.d.ts +11 -12
  40. package/cjs/Picker/utils.js +4 -0
  41. package/cjs/SelectPicker/SelectPicker.d.ts +4 -5
  42. package/cjs/SelectPicker/SelectPicker.js +4 -1
  43. package/cjs/Tree/Tree.d.ts +2 -5
  44. package/cjs/TreePicker/TreePicker.js +35 -37
  45. package/cjs/TreePicker/test/TreePicker.test.js +14 -0
  46. package/cjs/Whisper/Whisper.d.ts +3 -3
  47. package/cjs/Whisper/Whisper.js +11 -10
  48. package/cjs/Windowing/AutoSizer.d.ts +25 -0
  49. package/cjs/Windowing/AutoSizer.js +103 -0
  50. package/cjs/Windowing/List.d.ts +45 -0
  51. package/cjs/Windowing/List.js +72 -0
  52. package/cjs/Windowing/index.d.ts +5 -0
  53. package/cjs/Windowing/index.js +19 -0
  54. package/cjs/index.d.ts +1 -0
  55. package/cjs/toaster/ToastContainer.d.ts +2 -1
  56. package/cjs/toaster/ToastContainer.js +27 -26
  57. package/cjs/toaster/toaster.d.ts +1 -1
  58. package/cjs/toaster/toaster.js +43 -13
  59. package/cjs/toaster/useToaster.d.ts +1 -1
  60. package/cjs/utils/index.d.ts +1 -0
  61. package/cjs/utils/index.js +6 -1
  62. package/cjs/utils/render.d.ts +3 -0
  63. package/cjs/utils/render.js +49 -0
  64. package/cjs/utils/treeUtils.d.ts +2 -2
  65. package/cjs/utils/useUniqueId.js +10 -2
  66. package/dist/rsuite-rtl.css +20 -73
  67. package/dist/rsuite-rtl.min.css +1 -1
  68. package/dist/rsuite-rtl.min.css.map +1 -1
  69. package/dist/rsuite.css +20 -73
  70. package/dist/rsuite.js +118 -377
  71. package/dist/rsuite.js.map +1 -1
  72. package/dist/rsuite.min.css +1 -1
  73. package/dist/rsuite.min.css.map +1 -1
  74. package/dist/rsuite.min.js +1 -1
  75. package/dist/rsuite.min.js.LICENSE.txt +2 -0
  76. package/dist/rsuite.min.js.map +1 -1
  77. package/esm/Calendar/MonthDropdown.d.ts +1 -0
  78. package/esm/Calendar/MonthDropdown.js +26 -41
  79. package/esm/Cascader/Cascader.d.ts +2 -2
  80. package/esm/Cascader/DropdownMenu.js +5 -2
  81. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  82. package/esm/CheckPicker/CheckPicker.js +4 -1
  83. package/esm/CheckTreePicker/CheckTreePicker.js +37 -38
  84. package/esm/CustomProvider/CustomProvider.d.ts +1 -108
  85. package/esm/CustomProvider/CustomProvider.js +2 -4
  86. package/esm/CustomProvider/index.d.ts +2 -2
  87. package/esm/CustomProvider/index.js +2 -2
  88. package/esm/DatePicker/DatePicker.js +22 -3
  89. package/esm/DatePicker/types.d.ts +1 -0
  90. package/esm/DateRangePicker/DateRangePicker.js +39 -20
  91. package/esm/Disclosure/Disclosure.d.ts +2 -2
  92. package/esm/Disclosure/Disclosure.js +6 -6
  93. package/esm/InputPicker/InputPicker.js +4 -1
  94. package/esm/Modal/ModalBody.js +16 -17
  95. package/esm/MultiCascader/DropdownMenu.js +5 -2
  96. package/esm/Navbar/NavbarDropdownMenu.js +14 -8
  97. package/esm/Overlay/OverlayTrigger.d.ts +2 -2
  98. package/esm/Picker/DropdownMenu.d.ts +2 -1
  99. package/esm/Picker/DropdownMenu.js +38 -36
  100. package/esm/Picker/PickerOverlay.d.ts +2 -2
  101. package/esm/Picker/PickerToggle.js +4 -1
  102. package/esm/Picker/PickerToggleTrigger.d.ts +2 -2
  103. package/esm/Picker/PickerToggleTrigger.js +10 -11
  104. package/esm/Picker/index.d.ts +3 -3
  105. package/esm/Picker/types.d.ts +7 -5
  106. package/esm/Picker/utils.d.ts +11 -12
  107. package/esm/Picker/utils.js +4 -0
  108. package/esm/SelectPicker/SelectPicker.d.ts +4 -5
  109. package/esm/SelectPicker/SelectPicker.js +4 -1
  110. package/esm/Tree/Tree.d.ts +2 -5
  111. package/esm/TreePicker/TreePicker.js +34 -35
  112. package/esm/TreePicker/test/TreePicker.test.js +14 -0
  113. package/esm/Whisper/Whisper.d.ts +3 -3
  114. package/esm/Whisper/Whisper.js +10 -11
  115. package/esm/Windowing/AutoSizer.d.ts +25 -0
  116. package/esm/Windowing/AutoSizer.js +88 -0
  117. package/esm/Windowing/List.d.ts +45 -0
  118. package/esm/Windowing/List.js +58 -0
  119. package/esm/Windowing/index.d.ts +5 -0
  120. package/esm/Windowing/index.js +3 -0
  121. package/esm/index.d.ts +1 -0
  122. package/esm/toaster/ToastContainer.d.ts +2 -1
  123. package/esm/toaster/ToastContainer.js +28 -26
  124. package/esm/toaster/toaster.d.ts +1 -1
  125. package/esm/toaster/toaster.js +41 -13
  126. package/esm/toaster/useToaster.d.ts +1 -1
  127. package/esm/utils/index.d.ts +1 -0
  128. package/esm/utils/index.js +1 -0
  129. package/esm/utils/render.d.ts +3 -0
  130. package/esm/utils/render.js +37 -0
  131. package/esm/utils/treeUtils.d.ts +2 -2
  132. package/esm/utils/useUniqueId.js +7 -2
  133. package/package.json +5 -5
  134. package/styles/mixins/listbox.less +0 -5
  135. package/styles/variables.less +1 -0
  136. package/cjs/Picker/VirtualizedList.d.ts +0 -37
  137. package/cjs/Picker/VirtualizedList.js +0 -15
  138. package/esm/Picker/VirtualizedList.d.ts +0 -37
  139. package/esm/Picker/VirtualizedList.js +0 -4
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
3
3
  export interface MonthDropdownProps extends WithAsProps {
4
4
  show?: boolean;
5
+ limitStartYear?: number;
5
6
  limitEndYear?: number;
6
7
  height?: number;
7
8
  width?: number;
@@ -1,35 +1,19 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useCallback } from 'react';
3
+ import React, { useCallback, useMemo } from 'react';
4
4
  import PropTypes from 'prop-types';
5
- import { AutoSizer, List } from '../Picker/VirtualizedList';
5
+ import { AutoSizer, FixedSizeList } from '../Windowing';
6
6
  import { DateUtils, useClassNames } from '../utils';
7
7
  import MonthDropdownItem from './MonthDropdownItem';
8
8
  import { useCalendarContext } from './CalendarContext';
9
9
  var monthMap = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
10
- /**
11
- * Set the row height.
12
- * Add 1px to the first and last lines.
13
- */
14
-
15
- function getRowHeight(count) {
16
- return function (_ref) {
17
- var index = _ref.index;
18
-
19
- if (index === 0 || count - 1 === index) {
20
- return 75 + 1;
21
- }
22
-
23
- return 75;
24
- };
25
- }
26
-
27
10
  var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
28
11
  var _props$as = props.as,
29
12
  Component = _props$as === void 0 ? 'div' : _props$as,
30
13
  className = props.className,
31
14
  _props$classPrefix = props.classPrefix,
32
15
  classPrefix = _props$classPrefix === void 0 ? 'calendar-month-dropdown' : _props$classPrefix,
16
+ limitStartYear = props.limitStartYear,
33
17
  _props$limitEndYear = props.limitEndYear,
34
18
  limitEndYear = _props$limitEndYear === void 0 ? 5 : _props$limitEndYear,
35
19
  show = props.show,
@@ -38,7 +22,7 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
38
22
  _props$width = props.width,
39
23
  defaultWidth = _props$width === void 0 ? 256 : _props$width,
40
24
  disabledMonth = props.disabledMonth,
41
- rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "limitEndYear", "show", "height", "width", "disabledMonth"]);
25
+ rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "limitStartYear", "limitEndYear", "show", "height", "width", "disabledMonth"]);
42
26
 
43
27
  var _useCalendarContext = useCalendarContext(),
44
28
  _useCalendarContext$d = _useCalendarContext.date,
@@ -49,9 +33,12 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
49
33
  merge = _useClassNames.merge,
50
34
  withClassPrefix = _useClassNames.withClassPrefix;
51
35
 
52
- var getRowCount = useCallback(function () {
53
- return DateUtils.getYear(new Date()) + limitEndYear;
54
- }, [limitEndYear]);
36
+ var thisYear = DateUtils.getYear(new Date());
37
+ var startYear = limitStartYear ? thisYear - limitStartYear : 1900;
38
+ var rowCount = useMemo(function () {
39
+ var endYear = thisYear + limitEndYear;
40
+ return endYear - startYear;
41
+ }, [limitEndYear, startYear, thisYear]);
55
42
  var isMonthDisabled = useCallback(function (year, month) {
56
43
  if (disabledMonth) {
57
44
  var days = DateUtils.getDaysInMonth(new Date(year, month)); // If all dates in a month are disabled, disable the current month
@@ -68,26 +55,23 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
68
55
  return false;
69
56
  }, [disabledMonth]);
70
57
 
71
- var rowRenderer = function rowRenderer(_ref2) {
72
- var index = _ref2.index,
73
- key = _ref2.key,
74
- style = _ref2.style;
58
+ var rowRenderer = function rowRenderer(_ref) {
59
+ var index = _ref.index,
60
+ style = _ref.style;
75
61
  var selectedMonth = DateUtils.getMonth(date);
76
62
  var selectedYear = DateUtils.getYear(date);
77
- var year = index + 1;
63
+ var year = startYear + index;
78
64
  var isSelectedYear = year === selectedYear;
79
- var count = getRowCount();
80
65
  var titleClassName = prefix('year', {
81
66
  'year-active': isSelectedYear
82
67
  });
83
68
  var rowClassName = merge(prefix('row'), {
84
69
  'first-row': index === 0,
85
- 'last-row': index === count - 1
70
+ 'last-row': index === rowCount - 1
86
71
  });
87
72
  return /*#__PURE__*/React.createElement("div", {
88
73
  className: rowClassName,
89
74
  role: "row",
90
- key: key,
91
75
  style: style
92
76
  }, /*#__PURE__*/React.createElement("div", {
93
77
  className: titleClassName,
@@ -106,10 +90,12 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
106
90
  })));
107
91
  };
108
92
 
109
- var count = getRowCount();
110
93
  var classes = merge(className, withClassPrefix(), {
111
94
  show: show
112
95
  });
96
+ var itemSize = 75;
97
+ var initialItemIndex = DateUtils.getYear(date) - startYear;
98
+ var initialScrollOffset = itemSize * initialItemIndex;
113
99
  return /*#__PURE__*/React.createElement(Component, _extends({
114
100
  role: "menu"
115
101
  }, rest, {
@@ -122,18 +108,17 @@ var MonthDropdown = /*#__PURE__*/React.forwardRef(function (props, ref) {
122
108
  }, show && /*#__PURE__*/React.createElement(AutoSizer, {
123
109
  defaultHeight: defaultHeight,
124
110
  defaultWidth: defaultWidth
125
- }, function (_ref3) {
126
- var height = _ref3.height,
127
- width = _ref3.width;
128
- return /*#__PURE__*/React.createElement(List, {
111
+ }, function (_ref2) {
112
+ var height = _ref2.height,
113
+ width = _ref2.width;
114
+ return /*#__PURE__*/React.createElement(FixedSizeList, {
129
115
  className: prefix('row-wrapper'),
130
116
  width: width || defaultWidth,
131
117
  height: height || defaultHeight,
132
- rowHeight: getRowHeight(count),
133
- rowCount: count,
134
- scrollToIndex: DateUtils.getYear(date),
135
- rowRenderer: rowRenderer
136
- });
118
+ itemSize: itemSize,
119
+ itemCount: rowCount,
120
+ initialScrollOffset: initialScrollOffset
121
+ }, rowRenderer);
137
122
  }))));
138
123
  });
139
124
  MonthDropdown.displayName = 'MonthDropdown';
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerInstance } from '../Picker';
3
+ import { PickerHandle } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
5
  export declare type ValueType = number | string;
6
6
  export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T | null, PickerLocale, ItemDataType<T>> {
@@ -33,7 +33,7 @@ export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T |
33
33
  }
34
34
  export interface CascaderComponent {
35
35
  <T>(props: CascaderProps<T> & {
36
- ref?: React.Ref<PickerInstance>;
36
+ ref?: React.Ref<PickerHandle>;
37
37
  }): JSX.Element | null;
38
38
  displayName?: string;
39
39
  propTypes?: React.WeakValidationMap<CascaderProps<any>>;
@@ -45,7 +45,10 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
45
45
 
46
46
  var classes = merge(className, prefix('items'));
47
47
  var rootRef = useRef();
48
- var rtl = useCustom('DropdownMenu');
48
+
49
+ var _useCustom = useCustom('DropdownMenu'),
50
+ rtl = _useCustom.rtl;
51
+
49
52
  useEffect(function () {
50
53
  var _rootRef$current;
51
54
 
@@ -96,7 +99,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
96
99
  }); // Use `value` in keys when If `value` is string or number
97
100
 
98
101
  var onlyKey = typeof value === 'number' || typeof value === 'string' ? value : index;
99
- var Icon = node.loading ? SpinnerIcon : rtl ? AngleRightIcon : AngleLeftIcon;
102
+ var Icon = node.loading ? SpinnerIcon : rtl ? AngleLeftIcon : AngleRightIcon;
100
103
  return /*#__PURE__*/React.createElement(DropdownMenuItem, {
101
104
  classPrefix: "picker-cascader-menu-item",
102
105
  as: 'li',
@@ -1,6 +1,6 @@
1
1
  import React, { Ref } from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerInstance, PickerToggleProps } from '../Picker';
3
+ import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
5
  import type { MultipleSelectProps } from '../SelectPicker';
6
6
  export declare type ValueType = (number | string)[];
@@ -12,7 +12,7 @@ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerL
12
12
  }
13
13
  export interface CheckPickerComponent {
14
14
  <T>(props: CheckPickerProps<T> & {
15
- ref?: Ref<PickerInstance>;
15
+ ref?: Ref<PickerHandle>;
16
16
  }): JSX.Element | null;
17
17
  displayName?: string;
18
18
  propTypes?: React.WeakValidationMap<CheckPickerProps<any>>;
@@ -81,6 +81,7 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
81
81
  var targetRef = useRef(null);
82
82
  var overlayRef = useRef(null);
83
83
  var searchInputRef = useRef(null);
84
+ var listRef = useRef(null);
84
85
 
85
86
  var _useCustom = useCustom('Picker', overrideLocale),
86
87
  locale = _useCustom.locale;
@@ -235,7 +236,8 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
235
236
  usePublicMethods(ref, {
236
237
  triggerRef: triggerRef,
237
238
  overlayRef: overlayRef,
238
- targetRef: targetRef
239
+ targetRef: targetRef,
240
+ listRef: listRef
239
241
  });
240
242
  var selectedItems = data.filter(function (item) {
241
243
  return value === null || value === void 0 ? void 0 : value.some(function (val) {
@@ -308,6 +310,7 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
308
310
  var menu = items.length || filteredStickyItems.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
309
311
  id: id ? id + "-listbox" : undefined,
310
312
  listProps: listProps,
313
+ listRef: listRef,
311
314
  disabledItemValues: disabledItemValues,
312
315
  valueKey: valueKey,
313
316
  labelKey: labelKey,
@@ -9,7 +9,7 @@ import _isNil from "lodash/isNil";
9
9
  import React, { useState, useRef, useEffect, useCallback, useContext, useMemo } from 'react';
10
10
  import PropTypes from 'prop-types';
11
11
  import classNames from 'classnames';
12
- import { List, AutoSizer } from '../Picker/VirtualizedList';
12
+ import { List, AutoSizer } from '../Windowing';
13
13
  import CheckTreeNode from './CheckTreeNode';
14
14
  import TreeContext from '../Tree/TreeContext';
15
15
  import { getTreeNodeIndent } from '../utils/treeUtils';
@@ -18,6 +18,11 @@ import { PickerToggle, onMenuKeyDown as _onMenuKeyDown, PickerOverlay, SearchBar
18
18
  import { isEveryChildChecked, isSomeNodeHasChildren, isAllSiblingNodeUncheckable, isEveryFirstLevelNodeUncheckable, getFormattedTree, getDisabledState, getCheckTreePickerDefaultValue, getSelectedItems, isNodeUncheckable } from './utils';
19
19
  import { hasVisibleChildren, getExpandWhenSearching, useTreeSearch, useTreeNodeRefs, getDefaultExpandItemValues, useFlattenTreeData, focusNextItem, getFocusableItems, focusPreviousItem, toggleExpand, getActiveItem, useGetTreeNodeChildren, focusToActiveTreeNode, focusTreeNode, leftArrowHandler, rightArrowHandler, isSearching } from '../utils/treeUtils';
20
20
  var emptyArray = [];
21
+
22
+ var itemSize = function itemSize() {
23
+ return 36;
24
+ };
25
+
21
26
  var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
22
27
  var _props$as = props.as,
23
28
  Component = _props$as === void 0 ? 'div' : _props$as,
@@ -601,36 +606,33 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
601
606
  }, nodeProps));
602
607
  };
603
608
 
604
- var renderVirtualListNode = function renderVirtualListNode(nodes) {
605
- return function (_ref3) {
606
- var key = _ref3.key,
607
- index = _ref3.index,
608
- style = _ref3.style;
609
- var node = nodes[index];
610
- var layer = node.layer,
611
- refKey = node.refKey,
612
- visible = node.visible;
613
- var expand = getExpandWhenSearching(searchKeywordState, expandItemValues.includes(node[valueKey]));
614
-
615
- var nodeProps = _extends({}, getTreeNodeProps(_extends({}, node, {
616
- /**
617
- * spread operator don't copy unenumerable properties
618
- * so we need to copy them manually
619
- */
620
- parent: node.parent,
621
- expand: expand
622
- }), layer), {
623
- hasChildren: node.hasChildren
624
- });
609
+ var renderVirtualListNode = function renderVirtualListNode(_ref3) {
610
+ var index = _ref3.index,
611
+ style = _ref3.style,
612
+ data = _ref3.data;
613
+ var node = data[index];
614
+ var layer = node.layer,
615
+ refKey = node.refKey,
616
+ visible = node.visible;
617
+ var expand = getExpandWhenSearching(searchKeywordState, expandItemValues.includes(node[valueKey]));
625
618
 
626
- return visible && /*#__PURE__*/React.createElement(CheckTreeNode, _extends({
627
- style: style,
628
- key: key,
629
- ref: function ref(_ref4) {
630
- return saveTreeNodeRef(_ref4, refKey);
631
- }
632
- }, nodeProps));
633
- };
619
+ var nodeProps = _extends({}, getTreeNodeProps(_extends({}, node, {
620
+ /**
621
+ * spread operator don't copy unenumerable properties
622
+ * so we need to copy them manually
623
+ */
624
+ parent: node.parent,
625
+ expand: expand
626
+ }), layer), {
627
+ hasChildren: node.hasChildren
628
+ });
629
+
630
+ return visible && /*#__PURE__*/React.createElement(CheckTreeNode, _extends({
631
+ style: style,
632
+ ref: function ref(_ref4) {
633
+ return saveTreeNodeRef(_ref4, refKey);
634
+ }
635
+ }, nodeProps));
634
636
  };
635
637
 
636
638
  var renderCheckTree = function renderCheckTree() {
@@ -669,17 +671,14 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
669
671
  height: 'auto'
670
672
  }
671
673
  }, function (_ref5) {
672
- var height = _ref5.height,
673
- width = _ref5.width;
674
+ var height = _ref5.height;
674
675
  return /*#__PURE__*/React.createElement(List, _extends({
675
676
  ref: listRef,
676
- width: width,
677
677
  height: height,
678
- rowHeight: 36,
679
- rowCount: formattedNodes.length,
680
- rowRenderer: renderVirtualListNode(formattedNodes),
681
- scrollToAlignment: "center"
682
- }, listProps));
678
+ itemSize: itemSize,
679
+ itemCount: formattedNodes.length,
680
+ itemData: formattedNodes
681
+ }, listProps), renderVirtualListNode);
683
682
  }) : formattedNodes));
684
683
  };
685
684
 
@@ -156,113 +156,6 @@ declare const CustomContext: React.Context<CustomProviderProps<{
156
156
  off: string;
157
157
  } | undefined;
158
158
  }>>;
159
- declare const Consumer: React.Consumer<CustomProviderProps<{
160
- common?: {
161
- loading: string;
162
- emptyMessage: string;
163
- } | undefined;
164
- Plaintext?: {
165
- unfilled: string;
166
- notSelected: string;
167
- notUploaded: string;
168
- } | undefined;
169
- Pagination?: {
170
- more: string;
171
- prev: string;
172
- next: string;
173
- first: string;
174
- last: string;
175
- limit: string;
176
- total: string;
177
- skip: string;
178
- } | undefined;
179
- Calendar?: {
180
- sunday: string;
181
- monday: string;
182
- tuesday: string;
183
- wednesday: string;
184
- thursday: string;
185
- friday: string;
186
- saturday: string;
187
- ok: string;
188
- today: string;
189
- yesterday: string;
190
- hours: string;
191
- minutes: string;
192
- seconds: string;
193
- formattedMonthPattern: string;
194
- formattedDayPattern: string;
195
- dateLocale: any;
196
- } | undefined;
197
- DatePicker?: {
198
- sunday: string;
199
- monday: string;
200
- tuesday: string;
201
- wednesday: string;
202
- thursday: string;
203
- friday: string;
204
- saturday: string;
205
- ok: string;
206
- today: string;
207
- yesterday: string;
208
- hours: string;
209
- minutes: string;
210
- seconds: string;
211
- formattedMonthPattern: string;
212
- formattedDayPattern: string;
213
- dateLocale: any;
214
- } | undefined;
215
- DateRangePicker?: {
216
- last7Days: string;
217
- sunday: string;
218
- monday: string;
219
- tuesday: string;
220
- wednesday: string;
221
- thursday: string;
222
- friday: string;
223
- saturday: string;
224
- ok: string;
225
- today: string;
226
- yesterday: string;
227
- hours: string;
228
- minutes: string;
229
- seconds: string;
230
- formattedMonthPattern: string;
231
- formattedDayPattern: string;
232
- dateLocale: any;
233
- } | undefined;
234
- Picker?: {
235
- noResultsText: string;
236
- placeholder: string;
237
- searchPlaceholder: string;
238
- checkAll: string;
239
- } | undefined;
240
- InputPicker?: {
241
- newItem: string;
242
- /**
243
- * A Map of toast containers
244
- */
245
- createOption: string;
246
- } | undefined;
247
- Uploader?: {
248
- inited: string;
249
- progress: string;
250
- error: string;
251
- complete: string;
252
- emptyFile: string;
253
- upload: string;
254
- } | undefined;
255
- CloseButton?: {
256
- closeLabel: string;
257
- } | undefined;
258
- Breadcrumb?: {
259
- expandText: string;
260
- } | undefined;
261
- Toggle?: {
262
- on: string;
263
- off: string;
264
- } | undefined;
265
- }>>;
266
159
  declare const CustomProvider: (props: Omit<CustomProviderProps, 'toasters'>) => JSX.Element;
267
- export { CustomContext, Consumer as CustomConsumer };
160
+ export { CustomContext };
268
161
  export default CustomProvider;
@@ -6,8 +6,6 @@ import { addClass, removeClass, canUseDOM } from '../DOMHelper';
6
6
  import ToastContainer, { toastPlacements } from '../toaster/ToastContainer';
7
7
  import { usePortal } from '../utils';
8
8
  var CustomContext = /*#__PURE__*/React.createContext({});
9
- var Consumer = CustomContext.Consumer,
10
- Provider = CustomContext.Provider;
11
9
  var themes = ['light', 'dark', 'high-contrast'];
12
10
 
13
11
  var CustomProvider = function CustomProvider(props) {
@@ -44,7 +42,7 @@ var CustomProvider = function CustomProvider(props) {
44
42
  });
45
43
  }
46
44
  }, [classPrefix, theme]);
47
- return /*#__PURE__*/React.createElement(Provider, {
45
+ return /*#__PURE__*/React.createElement(CustomContext.Provider, {
48
46
  value: value
49
47
  }, children, /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement("div", {
50
48
  className: "rs-toast-provider"
@@ -59,5 +57,5 @@ var CustomProvider = function CustomProvider(props) {
59
57
  }))));
60
58
  };
61
59
 
62
- export { CustomContext, Consumer as CustomConsumer };
60
+ export { CustomContext };
63
61
  export default CustomProvider;
@@ -1,5 +1,5 @@
1
- import CustomProvider, { CustomContext, CustomConsumer } from './CustomProvider';
1
+ import CustomProvider, { CustomContext } from './CustomProvider';
2
2
  import FormattedDate from './FormattedDate';
3
- export { CustomContext, CustomConsumer, FormattedDate };
3
+ export { CustomContext, FormattedDate };
4
4
  export type { CustomProviderProps } from './CustomProvider';
5
5
  export default CustomProvider;
@@ -1,4 +1,4 @@
1
- import CustomProvider, { CustomContext, CustomConsumer } from './CustomProvider';
1
+ import CustomProvider, { CustomContext } from './CustomProvider';
2
2
  import FormattedDate from './FormattedDate';
3
- export { CustomContext, CustomConsumer, FormattedDate };
3
+ export { CustomContext, FormattedDate };
4
4
  export default CustomProvider;
@@ -10,6 +10,8 @@ import IconClockO from '@rsuite/icons/legacy/ClockO';
10
10
  import CalendarContainer from '../Calendar/CalendarContainer';
11
11
  import useCalendarDate from '../Calendar/useCalendarDate';
12
12
  import Toolbar from './Toolbar';
13
+ import Stack from '../Stack';
14
+ import PredefinedRanges from './PredefinedRanges';
13
15
  import { composeFunctions, createChainedFunction, DateUtils, mergeRefs, useClassNames, useControlled, useCustom } from '../utils';
14
16
  import { PickerOverlay, pickerPropTypes, PickerToggle, PickerToggleTrigger, pickTriggerPropKeys, omitTriggerPropKeys, usePickerClassName, usePublicMethods, useToggleKeyDownEvent } from '../Picker';
15
17
  import { OverlayCloseCause } from '../Overlay/OverlayTrigger';
@@ -334,6 +336,12 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
334
336
  onChangePageTime: handleChangePageTime,
335
337
  onToggleMeridian: handleToggleMeridian
336
338
  }));
339
+ var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
340
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
341
+ })) || [];
342
+ var bottomRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
343
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
344
+ })) || [];
337
345
 
338
346
  var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
339
347
  var left = positionProps.left,
@@ -350,16 +358,27 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
350
358
  ref: mergeRefs(overlayRef, speakerRef),
351
359
  style: styles,
352
360
  target: triggerRef
353
- }, calendar, /*#__PURE__*/React.createElement(Toolbar, {
361
+ }, /*#__PURE__*/React.createElement(Stack, {
362
+ alignItems: "flex-start"
363
+ }, sideRanges.length > 0 && /*#__PURE__*/React.createElement(PredefinedRanges, {
364
+ direction: "column",
365
+ spacing: 0,
366
+ className: prefix('date-predefined'),
367
+ ranges: sideRanges,
368
+ calendarDate: calendarDate,
369
+ locale: locale,
370
+ disabledShortcut: disabledToolbarHandle,
371
+ onClickShortcut: handleShortcutPageDate
372
+ }), /*#__PURE__*/React.createElement(React.Fragment, null, calendar, /*#__PURE__*/React.createElement(Toolbar, {
354
373
  locale: locale,
355
- ranges: ranges,
374
+ ranges: bottomRanges,
356
375
  calendarDate: calendarDate,
357
376
  disabledOkBtn: disabledToolbarHandle,
358
377
  disabledShortcut: disabledToolbarHandle,
359
378
  onClickShortcut: handleShortcutPageDate,
360
379
  onOk: handleOK,
361
380
  hideOkBtn: oneTap
362
- }));
381
+ }))));
363
382
  };
364
383
 
365
384
  var hasValue = !!value;
@@ -4,6 +4,7 @@ export interface RangeType<T> {
4
4
  label: ReactNode;
5
5
  closeOverlay?: boolean;
6
6
  value: T | ((value: T) => T);
7
+ placement?: 'bottom' | 'left';
7
8
  }
8
9
  export interface InnerRange<T> extends Omit<RangeType<T>, 'value'> {
9
10
  value: T;
@@ -134,27 +134,34 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
134
134
 
135
135
  var selectRangeValueRef = useRef(null);
136
136
  /**
137
- * Call this function to update the calendar panel rendering benchmark value.
138
- * If params `value` is not passed, it defaults to [new Date(), addMonth(new Date(), 1)].
137
+ * Get the time on the second calendar as the end of the date range.
139
138
  */
140
139
 
141
- var updateCalendarDateRange = useCallback(function (value, calendarKey) {
142
- var nextValue = value;
143
- var shouldRenderTime = DateUtils.shouldRenderTime,
144
- getHours = DateUtils.getHours,
140
+ var getCalendarEndDatetime = useCallback(function (date) {
141
+ var getHours = DateUtils.getHours,
145
142
  getMinutes = DateUtils.getMinutes,
146
143
  getSeconds = DateUtils.getSeconds,
147
144
  set = DateUtils.set;
145
+ var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue[1]);
146
+ return set(date, {
147
+ hours: getHours(calendarEndDate),
148
+ minutes: getMinutes(calendarEndDate),
149
+ seconds: getSeconds(calendarEndDate)
150
+ });
151
+ }, [calendarDate, defaultCalendarValue]);
152
+ /**
153
+ * Call this function to update the calendar panel rendering benchmark value.
154
+ * If params `value` is not passed, it defaults to [new Date(), addMonth(new Date(), 1)].
155
+ */
148
156
 
149
- if (shouldRenderTime(formatStr) && calendarKey === undefined && (value === null || value === void 0 ? void 0 : value.length) === 1 && (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue.length) === 2) {
150
- var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || defaultCalendarValue[1];
151
- var _startDate = value[0]; // When updating the start date, the time of the end date should keep the time set by the user by default.
157
+ var updateCalendarDateRange = useCallback(function (selectedDate, calendarKey) {
158
+ var nextValue = selectedDate;
159
+ var shouldRenderTime = DateUtils.shouldRenderTime;
152
160
 
153
- var _endDate = set(addMonths(_startDate, 1), {
154
- hours: getHours(calendarEndDate),
155
- minutes: getMinutes(calendarEndDate),
156
- seconds: getSeconds(calendarEndDate)
157
- });
161
+ if (shouldRenderTime(formatStr) && calendarKey === undefined && selectedDate !== null && selectedDate !== void 0 && selectedDate.length) {
162
+ var _startDate = selectedDate[0];
163
+
164
+ var _endDate = getCalendarEndDatetime(addMonths(_startDate, 1));
158
165
 
159
166
  nextValue = [_startDate, _endDate];
160
167
  }
@@ -163,7 +170,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
163
170
  value: nextValue,
164
171
  calendarKey: calendarKey
165
172
  }));
166
- }, [calendarDate, defaultCalendarValue, formatStr]); // if valueProp changed then update selectValue/hoverValue
173
+ }, [getCalendarEndDatetime, formatStr]); // if valueProp changed then update selectValue/hoverValue
167
174
 
168
175
  useEffect(function () {
169
176
  setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
@@ -327,19 +334,31 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
327
334
  nextSelectDates = hoverRangeValue;
328
335
  selectRangeValueRef.current = hoverRangeValue;
329
336
  }
330
- } // If user have completed the selection, then sort
337
+ }
338
+
339
+ var shouldRenderTime = DateUtils.shouldRenderTime,
340
+ isAfter = DateUtils.isAfter;
341
+
342
+ if (nextSelectDates.length === 2) {
343
+ // If user have completed the selection, then sort the selected dates.
344
+ if (isAfter(nextSelectDates[0], nextSelectDates[1])) {
345
+ nextSelectDates.reverse();
346
+ }
331
347
 
348
+ if (shouldRenderTime(formatStr)) {
349
+ nextSelectDates[1] = getCalendarEndDatetime(nextSelectDates[1]);
350
+ }
332
351
 
333
- if (nextSelectDates.length === 2 && DateUtils.isAfter(nextSelectDates[0], nextSelectDates[1])) {
334
- nextSelectDates.reverse();
352
+ setHoverDateRange(nextSelectDates);
353
+ } else {
354
+ setHoverDateRange([nextSelectDates[0], nextSelectDates[0]]);
335
355
  }
336
356
 
337
- setHoverDateRange(nextSelectDates.length === 2 ? nextSelectDates : [nextSelectDates[0], nextSelectDates[0]]);
338
357
  setSelectedDates(nextSelectDates);
339
358
  updateCalendarDateRange(nextSelectDates);
340
359
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
341
360
  hasDoneSelect.current = !hasDoneSelect.current;
342
- }, [getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
361
+ }, [formatStr, getCalendarEndDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
343
362
  /**
344
363
  * If `selectValue` changed, there will be the following effects.
345
364
  * 1. Check if the selection is completed.
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import DisclosureButton from './DisclosureButton';
3
3
  import DisclosureContent from './DisclosureContent';
4
- export declare type DisclosureTrigger = 'click' | 'mouseover';
5
- export interface DisclosureRenderProps extends Pick<React.HTMLAttributes<HTMLElement>, 'onMouseOver' | 'onMouseOut'> {
4
+ export declare type DisclosureTrigger = 'click' | 'hover';
5
+ export interface DisclosureRenderProps extends Pick<React.HTMLAttributes<HTMLElement>, 'onMouseEnter' | 'onMouseLeave'> {
6
6
  open: boolean;
7
7
  }
8
8
  export interface DisclosureProps {