rsuite 5.17.0-beta.1 → 5.17.0-beta.2

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 (114) hide show
  1. package/Button/styles/index.less +1 -1
  2. package/CHANGELOG.md +22 -0
  3. package/Calendar/styles/index.less +0 -0
  4. package/DatePicker/styles/index.less +0 -10
  5. package/DateRangePicker/styles/index.less +12 -5
  6. package/FormControl/styles/index.less +0 -0
  7. package/Windowing/package.json +7 -0
  8. package/cjs/Calendar/Header.js +2 -4
  9. package/cjs/Calendar/MonthDropdown.d.ts +1 -0
  10. package/cjs/Calendar/MonthDropdown.js +27 -40
  11. package/cjs/Calendar/useCalendarDate.d.ts +1 -0
  12. package/cjs/Calendar/useCalendarDate.js +7 -1
  13. package/cjs/Cascader/Cascader.d.ts +2 -2
  14. package/cjs/Cascader/DropdownMenu.js +5 -2
  15. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  16. package/cjs/CheckPicker/CheckPicker.js +4 -1
  17. package/cjs/CheckTreePicker/CheckTreePicker.js +31 -31
  18. package/cjs/DatePicker/DatePicker.js +4 -3
  19. package/cjs/DatePicker/PredefinedRanges.d.ts +13 -0
  20. package/cjs/DatePicker/PredefinedRanges.js +79 -0
  21. package/cjs/DatePicker/Toolbar.d.ts +2 -9
  22. package/cjs/DatePicker/Toolbar.js +45 -62
  23. package/cjs/DateRangePicker/DateRangePicker.js +57 -9
  24. package/cjs/DateRangePicker/types.d.ts +2 -1
  25. package/cjs/FormControl/FormControl.js +3 -5
  26. package/cjs/InputPicker/InputPicker.js +4 -1
  27. package/cjs/MultiCascader/DropdownMenu.js +5 -2
  28. package/cjs/Overlay/OverlayTrigger.d.ts +2 -2
  29. package/cjs/Picker/DropdownMenu.d.ts +2 -1
  30. package/cjs/Picker/DropdownMenu.js +39 -33
  31. package/cjs/Picker/PickerOverlay.d.ts +2 -2
  32. package/cjs/Picker/PickerToggleTrigger.d.ts +2 -2
  33. package/cjs/Picker/index.d.ts +3 -3
  34. package/cjs/Picker/types.d.ts +7 -5
  35. package/cjs/Picker/types.js +0 -0
  36. package/cjs/Picker/utils.d.ts +11 -12
  37. package/cjs/Picker/utils.js +4 -0
  38. package/cjs/SelectPicker/SelectPicker.d.ts +4 -5
  39. package/cjs/SelectPicker/SelectPicker.js +4 -1
  40. package/cjs/Tree/Tree.d.ts +2 -5
  41. package/cjs/TreePicker/TreePicker.js +34 -34
  42. package/cjs/TreePicker/test/TreePicker.test.js +14 -0
  43. package/cjs/Whisper/Whisper.d.ts +3 -3
  44. package/cjs/Windowing/AutoSizer.d.ts +25 -0
  45. package/cjs/Windowing/AutoSizer.js +107 -0
  46. package/cjs/Windowing/List.d.ts +45 -0
  47. package/cjs/Windowing/List.js +72 -0
  48. package/cjs/Windowing/index.d.ts +5 -0
  49. package/cjs/Windowing/index.js +19 -0
  50. package/cjs/index.d.ts +1 -0
  51. package/cjs/utils/dateUtils.d.ts +1 -0
  52. package/cjs/utils/dateUtils.js +5 -1
  53. package/cjs/utils/treeUtils.d.ts +2 -2
  54. package/dist/rsuite-rtl.css +10 -18
  55. package/dist/rsuite-rtl.min.css +1 -1
  56. package/dist/rsuite-rtl.min.css.map +1 -1
  57. package/dist/rsuite.css +10 -18
  58. package/dist/rsuite.js +110 -377
  59. package/dist/rsuite.js.map +1 -1
  60. package/dist/rsuite.min.css +1 -1
  61. package/dist/rsuite.min.css.map +1 -1
  62. package/dist/rsuite.min.js +1 -1
  63. package/dist/rsuite.min.js.map +1 -1
  64. package/esm/Calendar/Header.js +2 -4
  65. package/esm/Calendar/MonthDropdown.d.ts +1 -0
  66. package/esm/Calendar/MonthDropdown.js +26 -41
  67. package/esm/Calendar/useCalendarDate.d.ts +1 -0
  68. package/esm/Calendar/useCalendarDate.js +7 -1
  69. package/esm/Cascader/Cascader.d.ts +2 -2
  70. package/esm/Cascader/DropdownMenu.js +5 -2
  71. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  72. package/esm/CheckPicker/CheckPicker.js +4 -1
  73. package/esm/CheckTreePicker/CheckTreePicker.js +31 -30
  74. package/esm/DatePicker/DatePicker.js +4 -3
  75. package/esm/DatePicker/PredefinedRanges.d.ts +13 -0
  76. package/esm/DatePicker/PredefinedRanges.js +62 -0
  77. package/esm/DatePicker/Toolbar.d.ts +2 -9
  78. package/esm/DatePicker/Toolbar.js +45 -61
  79. package/esm/DateRangePicker/DateRangePicker.js +55 -9
  80. package/esm/DateRangePicker/types.d.ts +2 -1
  81. package/esm/FormControl/FormControl.js +3 -5
  82. package/esm/InputPicker/InputPicker.js +4 -1
  83. package/esm/MultiCascader/DropdownMenu.js +5 -2
  84. package/esm/Overlay/OverlayTrigger.d.ts +2 -2
  85. package/esm/Picker/DropdownMenu.d.ts +2 -1
  86. package/esm/Picker/DropdownMenu.js +39 -35
  87. package/esm/Picker/PickerOverlay.d.ts +2 -2
  88. package/esm/Picker/PickerToggleTrigger.d.ts +2 -2
  89. package/esm/Picker/index.d.ts +3 -3
  90. package/esm/Picker/types.d.ts +7 -5
  91. package/esm/Picker/types.js +0 -0
  92. package/esm/Picker/utils.d.ts +11 -12
  93. package/esm/Picker/utils.js +4 -0
  94. package/esm/SelectPicker/SelectPicker.d.ts +4 -5
  95. package/esm/SelectPicker/SelectPicker.js +4 -1
  96. package/esm/Tree/Tree.d.ts +2 -5
  97. package/esm/TreePicker/TreePicker.js +33 -32
  98. package/esm/TreePicker/test/TreePicker.test.js +14 -0
  99. package/esm/Whisper/Whisper.d.ts +3 -3
  100. package/esm/Windowing/AutoSizer.d.ts +25 -0
  101. package/esm/Windowing/AutoSizer.js +92 -0
  102. package/esm/Windowing/List.d.ts +45 -0
  103. package/esm/Windowing/List.js +58 -0
  104. package/esm/Windowing/index.d.ts +5 -0
  105. package/esm/Windowing/index.js +3 -0
  106. package/esm/index.d.ts +1 -0
  107. package/esm/utils/dateUtils.d.ts +1 -0
  108. package/esm/utils/dateUtils.js +1 -0
  109. package/esm/utils/treeUtils.d.ts +2 -2
  110. package/package.json +4 -4
  111. package/cjs/Picker/VirtualizedList.d.ts +0 -37
  112. package/cjs/Picker/VirtualizedList.js +0 -15
  113. package/esm/Picker/VirtualizedList.d.ts +0 -37
  114. package/esm/Picker/VirtualizedList.js +0 -4
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  exports.__esModule = true;
@@ -11,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
9
 
12
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
11
 
14
- var _react = _interopRequireWildcard(require("react"));
12
+ var _react = _interopRequireDefault(require("react"));
15
13
 
16
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
15
 
@@ -19,11 +17,34 @@ var _Button = _interopRequireDefault(require("../Button"));
19
17
 
20
18
  var _utils = require("../utils");
21
19
 
22
- var _utils2 = require("./utils");
20
+ var _PredefinedRanges = _interopRequireDefault(require("./PredefinedRanges"));
21
+
22
+ var _Stack = _interopRequireDefault(require("../Stack"));
23
+
24
+ var SubmitButton = function SubmitButton(_ref) {
25
+ var hide = _ref.hide,
26
+ disabledOkBtn = _ref.disabledOkBtn,
27
+ calendarDate = _ref.calendarDate,
28
+ onOk = _ref.onOk,
29
+ children = _ref.children;
30
+
31
+ if (hide) {
32
+ return null;
33
+ }
23
34
 
35
+ var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
36
+ return /*#__PURE__*/_react.default.createElement(_Button.default, {
37
+ appearance: "primary",
38
+ size: "sm",
39
+ disabled: disabled,
40
+ onClick: disabled ? undefined : onOk
41
+ }, children);
42
+ };
24
43
  /**
25
44
  * Toolbar for DatePicker and DateRangePicker
26
45
  */
46
+
47
+
27
48
  var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
28
49
  var className = props.className,
29
50
  _props$classPrefix = props.classPrefix,
@@ -34,78 +55,40 @@ var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
34
55
  onOk = props.onOk,
35
56
  onClickShortcut = props.onClickShortcut,
36
57
  calendarDate = props.calendarDate,
37
- rangesProp = props.ranges,
58
+ ranges = props.ranges,
38
59
  locale = props.locale,
39
60
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onClickShortcut", "calendarDate", "ranges", "locale"]);
40
61
 
41
- var _useState = (0, _react.useState)((0, _utils2.getRanges)(props)),
42
- ranges = _useState[0],
43
- setRanges = _useState[1];
44
-
45
62
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
46
63
  merge = _useClassNames.merge,
47
64
  prefix = _useClassNames.prefix,
48
65
  withClassPrefix = _useClassNames.withClassPrefix;
49
66
 
50
- (0, _utils.useUpdateEffect)(function () {
51
- setRanges((0, _utils2.getRanges)({
52
- ranges: rangesProp,
53
- calendarDate: calendarDate
54
- }));
55
- }, [calendarDate, rangesProp]);
56
- var hasLocaleKey = (0, _react.useCallback)(function (key) {
57
- return (0, _utils2.getDefaultRanges)(calendarDate).some(function (item) {
58
- return item.label === key;
59
- });
60
- }, [calendarDate]);
61
- var renderOkButton = (0, _react.useCallback)(function () {
62
- if (hideOkBtn) {
63
- return null;
64
- }
65
-
66
- var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
67
- return /*#__PURE__*/_react.default.createElement("div", {
68
- className: prefix('right')
69
- }, /*#__PURE__*/_react.default.createElement(_Button.default, {
70
- appearance: "primary",
71
- size: "sm",
72
- disabled: disabled,
73
- onClick: disabled ? undefined : onOk
74
- }, locale === null || locale === void 0 ? void 0 : locale.ok));
75
- }, [disabledOkBtn, hideOkBtn, locale, onOk, calendarDate, prefix]);
76
-
77
- if (hideOkBtn && ranges.length === 0) {
67
+ if (hideOkBtn && (ranges === null || ranges === void 0 ? void 0 : ranges.length) === 0) {
78
68
  return null;
79
69
  }
80
70
 
81
71
  var classes = merge(className, withClassPrefix());
82
- return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
72
+ return /*#__PURE__*/_react.default.createElement(_Stack.default, (0, _extends2.default)({
83
73
  ref: ref,
84
- className: classes
74
+ className: classes,
75
+ justifyContent: "space-between",
76
+ alignItems: "flex-start"
77
+ }, rest), /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
78
+ className: prefix('ranges'),
79
+ ranges: ranges,
80
+ calendarDate: calendarDate,
81
+ locale: locale,
82
+ disabledShortcut: disabledShortcut,
83
+ onClickShortcut: onClickShortcut
85
84
  }), /*#__PURE__*/_react.default.createElement("div", {
86
- className: prefix('ranges')
87
- }, ranges.map(function (_ref, index) {
88
- var value = _ref.value,
89
- closeOverlay = _ref.closeOverlay,
90
- label = _ref.label;
91
- var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
92
-
93
- var handleClickShortcut = function handleClickShortcut(event) {
94
- if (disabled) {
95
- return;
96
- }
97
-
98
- onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
99
- };
100
-
101
- return /*#__PURE__*/_react.default.createElement(_Button.default, {
102
- appearance: "link",
103
- size: "sm",
104
- key: index,
105
- disabled: disabled,
106
- onClick: handleClickShortcut
107
- }, hasLocaleKey(label) && typeof label === 'string' ? locale === null || locale === void 0 ? void 0 : locale[label] : label);
108
- })), renderOkButton());
85
+ className: prefix('right')
86
+ }, /*#__PURE__*/_react.default.createElement(SubmitButton, {
87
+ disabledOkBtn: disabledOkBtn,
88
+ hide: hideOkBtn,
89
+ calendarDate: calendarDate,
90
+ onOk: onOk
91
+ }, locale === null || locale === void 0 ? void 0 : locale.ok)));
109
92
  });
110
93
 
111
94
  Toolbar.displayName = 'Toolbar';
@@ -29,6 +29,10 @@ var _CustomProvider = require("../CustomProvider");
29
29
 
30
30
  var _Toolbar = _interopRequireDefault(require("../DatePicker/Toolbar"));
31
31
 
32
+ var _PredefinedRanges = _interopRequireDefault(require("../DatePicker/PredefinedRanges"));
33
+
34
+ var _Stack = _interopRequireDefault(require("../Stack"));
35
+
32
36
  var _Picker = require("../Picker");
33
37
 
34
38
  var _utils = require("../utils");
@@ -161,11 +165,31 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
161
165
  */
162
166
 
163
167
  var updateCalendarDateRange = (0, _react.useCallback)(function (value, calendarKey) {
168
+ var nextValue = value;
169
+ var shouldTime = _utils.DateUtils.shouldTime,
170
+ getHours = _utils.DateUtils.getHours,
171
+ getMinutes = _utils.DateUtils.getMinutes,
172
+ getSeconds = _utils.DateUtils.getSeconds,
173
+ set = _utils.DateUtils.set;
174
+
175
+ if (shouldTime(formatStr) && calendarKey === undefined && (value === null || value === void 0 ? void 0 : value.length) === 1 && (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue.length) === 2) {
176
+ var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || defaultCalendarValue[1];
177
+ 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.
178
+
179
+ var _endDate = set((0, _dateUtils.addMonths)(_startDate, 1), {
180
+ hours: getHours(calendarEndDate),
181
+ minutes: getMinutes(calendarEndDate),
182
+ seconds: getSeconds(calendarEndDate)
183
+ });
184
+
185
+ nextValue = [_startDate, _endDate];
186
+ }
187
+
164
188
  setCalendarDate((0, _utils2.getCalendarDate)({
165
- value: value,
189
+ value: nextValue,
166
190
  calendarKey: calendarKey
167
191
  }));
168
- }, []); // if valueProp changed then update selectValue/hoverValue
192
+ }, [calendarDate, defaultCalendarValue, formatStr]); // if valueProp changed then update selectValue/hoverValue
169
193
 
170
194
  (0, _react.useEffect)(function () {
171
195
  setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
@@ -399,10 +423,17 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
399
423
  closeOverlay = false;
400
424
  }
401
425
 
402
- handleValueUpdate(event, value, closeOverlay); // End unfinished selections.
426
+ updateCalendarDateRange(value);
427
+
428
+ if (closeOverlay) {
429
+ handleValueUpdate(event, value, closeOverlay);
430
+ } else {
431
+ setSelectedDates(value !== null && value !== void 0 ? value : []);
432
+ } // End unfinished selections.
433
+
403
434
 
404
435
  hasDoneSelect.current = true;
405
- }, [handleValueUpdate]);
436
+ }, [handleValueUpdate, updateCalendarDateRange]);
406
437
  var handleOK = (0, _react.useCallback)(function (event) {
407
438
  handleValueUpdate(event, selectedDates);
408
439
  onOk === null || onOk === void 0 ? void 0 : onOk(selectedDates, event);
@@ -463,10 +494,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
463
494
  var nextCalendarDate;
464
495
 
465
496
  if (value && value.length) {
466
- var _startDate = value[0],
497
+ var _startDate2 = value[0],
467
498
  endData = value[1];
468
- nextCalendarDate = [_startDate, (0, _dateUtils.isSameMonth)(_startDate, endData) ? (0, _dateUtils.addMonths)(endData, 1) : endData];
499
+ nextCalendarDate = [_startDate2, (0, _dateUtils.isSameMonth)(_startDate2, endData) ? (0, _dateUtils.addMonths)(endData, 1) : endData];
469
500
  } else {
501
+ // Reset the date on the calendar to the default date
470
502
  nextCalendarDate = (0, _utils2.getCalendarDate)({
471
503
  value: defaultCalendarValue !== null && defaultCalendarValue !== void 0 ? defaultCalendarValue : null
472
504
  });
@@ -568,13 +600,27 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
568
600
  renderTitle: renderTitle
569
601
  };
570
602
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
603
+ role: "dialog",
571
604
  className: classes,
572
605
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
573
606
  target: triggerRef,
574
607
  style: styles
575
608
  }, /*#__PURE__*/_react.default.createElement("div", {
576
609
  className: panelClasses
577
- }, /*#__PURE__*/_react.default.createElement("div", {
610
+ }, /*#__PURE__*/_react.default.createElement(_Stack.default, {
611
+ alignItems: "flex-start"
612
+ }, /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
613
+ direction: "column",
614
+ spacing: 0,
615
+ className: prefix('daterange-predefined'),
616
+ ranges: (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
617
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
618
+ })) || [],
619
+ calendarDate: calendarDate,
620
+ locale: locale,
621
+ disabledShortcut: disabledShortcutButton,
622
+ onClickShortcut: handleShortcutPageDate
623
+ }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
578
624
  className: prefix('daterange-content')
579
625
  }, /*#__PURE__*/_react.default.createElement("div", {
580
626
  className: prefix('daterange-header')
@@ -592,8 +638,10 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
592
638
  hideOkBtn: oneTap,
593
639
  onOk: handleOK,
594
640
  onClickShortcut: handleShortcutPageDate,
595
- ranges: ranges
596
- })));
641
+ ranges: ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
642
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
643
+ })
644
+ })))));
597
645
  };
598
646
 
599
647
  var hasValue = !(0, _isNil.default)(value) && value.length > 1;
@@ -4,8 +4,9 @@ export declare type ValueType = [Date?, Date?];
4
4
  export declare type DateRange = [Date, Date];
5
5
  export interface RangeType {
6
6
  label: React.ReactNode;
7
- closeOverlay?: boolean;
8
7
  value: DateRange | ((value?: ValueType) => DateRange);
8
+ closeOverlay?: boolean;
9
+ placement?: 'bottom' | 'left';
9
10
  }
10
11
  export declare type DisabledDateFunction = (
11
12
  /** Date used to determine if disabling is required. */
@@ -58,7 +58,6 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
58
58
  AccepterComponent = _props$accepter === void 0 ? _Input.default : _props$accepter,
59
59
  _props$classPrefix = props.classPrefix,
60
60
  classPrefix = _props$classPrefix === void 0 ? 'form-control' : _props$classPrefix,
61
- className = props.className,
62
61
  checkAsync = props.checkAsync,
63
62
  checkTrigger = props.checkTrigger,
64
63
  _props$errorPlacement = props.errorPlacement,
@@ -78,7 +77,7 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
78
77
  _props$shouldResetWit = props.shouldResetWithUnmount,
79
78
  shouldResetWithUnmount = _props$shouldResetWit === void 0 ? false : _props$shouldResetWit,
80
79
  rule = props.rule,
81
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "accepter", "classPrefix", "className", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount", "rule"]);
80
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "accepter", "classPrefix", "checkAsync", "checkTrigger", "errorPlacement", "errorMessage", "name", "value", "readOnly", "plaintext", "disabled", "onChange", "onBlur", "defaultValue", "shouldResetWithUnmount", "rule"]);
82
81
 
83
82
  var _useContext2 = (0, _react.useContext)(_FormGroup.FormGroupContext),
84
83
  controlId = _useContext2.controlId;
@@ -100,10 +99,9 @@ var FormControl = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
100
99
 
101
100
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
102
101
  withClassPrefix = _useClassNames.withClassPrefix,
103
- prefix = _useClassNames.prefix,
104
- merge = _useClassNames.merge;
102
+ prefix = _useClassNames.prefix;
105
103
 
106
- var classes = merge(className, withClassPrefix('wrapper'));
104
+ var classes = withClassPrefix('wrapper');
107
105
 
108
106
  var handleFieldChange = function handleFieldChange(value, event) {
109
107
  handleFieldCheck(value, trigger === 'change');
@@ -145,6 +145,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
145
145
  var targetRef = (0, _react.useRef)(null);
146
146
  var triggerRef = (0, _react.useRef)(null);
147
147
  var inputRef = (0, _react.useRef)();
148
+ var listRef = (0, _react.useRef)(null);
148
149
 
149
150
  var _useCustom = (0, _utils.useCustom)(['Picker', 'InputPicker'], overrideLocale),
150
151
  locale = _useCustom.locale;
@@ -436,7 +437,8 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
436
437
  (0, _Picker.usePublicMethods)(ref, {
437
438
  triggerRef: triggerRef,
438
439
  overlayRef: overlayRef,
439
- targetRef: targetRef
440
+ targetRef: targetRef,
441
+ listRef: listRef
440
442
  });
441
443
  /**
442
444
  * Remove the last item, after pressing the back key on the keyboard.
@@ -635,6 +637,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
635
637
  var menu = items.length ? /*#__PURE__*/_react.default.createElement(_Picker.DropdownMenu, {
636
638
  id: id ? id + "-listbox" : undefined,
637
639
  listProps: listProps,
640
+ listRef: listRef,
638
641
  disabledItemValues: disabledItemValues,
639
642
  valueKey: valueKey,
640
643
  labelKey: labelKey,
@@ -69,7 +69,10 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
69
69
  prefix = _useClassNames.prefix;
70
70
 
71
71
  var classes = merge(className, prefix('items'));
72
- var rtl = (0, _utils.useCustom)('DropdownMenu');
72
+
73
+ var _useCustom = (0, _utils.useCustom)('DropdownMenu'),
74
+ rtl = _useCustom.rtl;
75
+
73
76
  var getCascadePaths = (0, _react.useCallback)(function (layer, node) {
74
77
  var paths = [];
75
78
 
@@ -96,7 +99,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.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 ? _Spinner.default : rtl ? _AngleRight.default : _AngleLeft.default;
102
+ var Icon = node.loading ? _Spinner.default : rtl ? _AngleLeft.default : _AngleRight.default;
100
103
  var active = value.some(function (v) {
101
104
  return v === nodeValue;
102
105
  });
@@ -63,11 +63,11 @@ export interface OverlayTriggerProps extends StandardProps, AnimationEventProps
63
63
  /** Whether speaker to follow the cursor */
64
64
  followCursor?: boolean;
65
65
  }
66
- export interface OverlayTriggerInstance {
66
+ export interface OverlayTriggerHandle {
67
67
  root: HTMLElement | undefined;
68
68
  updatePosition: () => void;
69
69
  open: (delay?: number) => void;
70
70
  close: (delay?: number) => void;
71
71
  }
72
- declare const OverlayTrigger: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerInstance>>;
72
+ declare const OverlayTrigger: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerHandle>>;
73
73
  export default OverlayTrigger;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { ListProps } from './VirtualizedList';
3
+ import { ListProps, ListHandle } from '../Windowing';
4
4
  import { StandardProps, ItemDataType } from '../@types/common';
5
5
  export interface DropdownMenuProps<Multiple = false> extends StandardProps, Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
6
6
  classPrefix: string;
@@ -20,6 +20,7 @@ export interface DropdownMenuProps<Multiple = false> extends StandardProps, Omit
20
20
  rowGroupHeight?: number;
21
21
  virtualized?: boolean;
22
22
  listProps?: Partial<ListProps>;
23
+ listRef?: React.Ref<ListHandle>;
23
24
  /** Custom selected option */
24
25
  renderMenuItem?: (itemLabel: React.ReactNode, item: any) => React.ReactNode;
25
26
  renderMenuGroup?: (title: React.ReactNode, item: any) => React.ReactNode;
@@ -31,7 +31,7 @@ var _getHeight = _interopRequireDefault(require("dom-lib/getHeight"));
31
31
 
32
32
  var _classnames = _interopRequireDefault(require("classnames"));
33
33
 
34
- var _VirtualizedList = require("./VirtualizedList");
34
+ var _Windowing = require("../Windowing");
35
35
 
36
36
  var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
37
37
 
@@ -61,6 +61,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
61
61
  labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
62
62
  virtualized = props.virtualized,
63
63
  listProps = props.listProps,
64
+ virtualizedListRef = props.listRef,
64
65
  className = props.className,
65
66
  style = props.style,
66
67
  focusItemValue = props.focusItemValue,
@@ -74,7 +75,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
74
75
  renderMenuItem = props.renderMenuItem,
75
76
  onGroupTitleClick = props.onGroupTitleClick,
76
77
  onSelect = props.onSelect,
77
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["data", "group", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
78
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["data", "group", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
78
79
 
79
80
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
80
81
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -84,10 +85,8 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
84
85
  var classes = merge(className, withClassPrefix('items', {
85
86
  grouped: group
86
87
  }));
87
- var styles = (0, _extends2.default)({}, style, {
88
- maxHeight: maxHeight
89
- });
90
88
  var menuBodyContainerRef = (0, _react.useRef)(null);
89
+ var listRef = (0, _react.useRef)(null);
91
90
 
92
91
  var _useState = (0, _react.useState)([]),
93
92
  foldedGroupKeys = _useState[0],
@@ -109,8 +108,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
109
108
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, item, event, checked);
110
109
  }, [onSelect]);
111
110
 
112
- var getRowHeight = function getRowHeight(list, _ref) {
113
- var index = _ref.index;
111
+ var getRowHeight = function getRowHeight(list, index) {
114
112
  var item = list[index];
115
113
 
116
114
  if (group && item[_getDataGroupBy.KEY_GROUP] && index !== 0) {
@@ -148,10 +146,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
148
146
  }
149
147
  }, [focusItemValue, menuBodyContainerRef, prefix]);
150
148
 
151
- var renderItem = function renderItem(list, _ref2) {
152
- var index = _ref2.index,
153
- style = _ref2.style;
154
- var item = list[index];
149
+ var renderItem = function renderItem(_ref) {
150
+ var _ref$index = _ref.index,
151
+ index = _ref$index === void 0 ? 0 : _ref$index,
152
+ style = _ref.style,
153
+ data = _ref.data,
154
+ itemData = _ref.item;
155
+ var item = itemData || data[index];
155
156
  var value = item[valueKey];
156
157
  var label = item[labelKey];
157
158
 
@@ -210,40 +211,45 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
210
211
  return key === ((_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[_getDataGroupBy.KEY_GROUP_TITLE]);
211
212
  }));
212
213
  }) : data;
213
- var rowCount = filteredItems.length; // Check whether the height of the data exceeds the height of the container.
214
+ var rowCount = filteredItems.length;
215
+ (0, _utils.useMount)(function () {
216
+ var _listRef$current, _listRef$current$scro;
214
217
 
215
- var useVirtualized = virtualized && rowCount * rowHeight > maxHeight;
218
+ var itemIndex = (0, _findIndex.default)(filteredItems, function (item) {
219
+ return item[valueKey] === (activeItemValues === null || activeItemValues === void 0 ? void 0 : activeItemValues[0]);
220
+ });
221
+ (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : (_listRef$current$scro = _listRef$current.scrollToItem) === null || _listRef$current$scro === void 0 ? void 0 : _listRef$current$scro.call(_listRef$current, itemIndex);
222
+ });
216
223
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
217
- role: !useVirtualized ? 'listbox' : undefined
224
+ role: "listbox"
218
225
  }, rest, {
219
226
  className: classes,
220
227
  ref: (0, _utils.mergeRefs)(menuBodyContainerRef, ref),
221
- style: styles
222
- }), useVirtualized ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.AutoSizer, {
228
+ style: (0, _extends2.default)({}, style, {
229
+ maxHeight: maxHeight
230
+ })
231
+ }), virtualized ? /*#__PURE__*/_react.default.createElement(_Windowing.AutoSizer, {
223
232
  defaultHeight: maxHeight,
224
233
  style: {
225
234
  width: 'auto',
226
235
  height: 'auto'
227
236
  }
228
- }, function (_ref3) {
229
- var height = _ref3.height,
230
- width = _ref3.width;
231
- return /*#__PURE__*/_react.default.createElement(_VirtualizedList.List, (0, _extends2.default)({
232
- role: "listbox",
233
- containerRole: '',
234
- "aria-readonly": undefined,
237
+ }, function (_ref2) {
238
+ var height = _ref2.height,
239
+ width = _ref2.width;
240
+ return /*#__PURE__*/_react.default.createElement(_Windowing.List, (0, _extends2.default)({
241
+ as: _Windowing.VariableSizeList,
242
+ ref: (0, _utils.mergeRefs)(listRef, virtualizedListRef),
235
243
  width: width,
236
244
  height: height || maxHeight,
237
- scrollToIndex: (0, _findIndex.default)(data, function (item) {
238
- return item[valueKey] === (activeItemValues === null || activeItemValues === void 0 ? void 0 : activeItemValues[0]);
239
- }),
240
- rowCount: rowCount,
241
- rowHeight: getRowHeight.bind(_this, filteredItems),
242
- rowRenderer: renderItem.bind(null, filteredItems)
243
- }, listProps));
244
- }) : filteredItems.map(function (_item, index) {
245
- return renderItem(filteredItems, {
246
- index: index
245
+ itemCount: rowCount,
246
+ itemData: filteredItems,
247
+ itemSize: getRowHeight.bind(_this, filteredItems)
248
+ }, listProps), renderItem);
249
+ }) : filteredItems.map(function (item, index) {
250
+ return renderItem({
251
+ index: index,
252
+ item: item
247
253
  });
248
254
  }));
249
255
  });
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
- import { OverlayTriggerInstance } from '../Picker';
3
+ import { OverlayTriggerHandle } from '../Picker';
4
4
  export interface PickerOverlayProps extends WithAsProps {
5
5
  placement?: string;
6
6
  autoWidth?: boolean;
7
7
  children?: React.ReactNode;
8
- target?: React.RefObject<OverlayTriggerInstance>;
8
+ target?: React.RefObject<OverlayTriggerHandle>;
9
9
  onKeyDown?: (event: React.KeyboardEvent) => void;
10
10
  }
11
11
  declare const PickerOverlay: RsRefForwardingComponent<'div', PickerOverlayProps>;
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { OverlayTriggerInstance, OverlayTriggerProps, OverlayTriggerType } from '../Overlay/OverlayTrigger';
2
+ import { OverlayTriggerHandle, OverlayTriggerProps, OverlayTriggerType } from '../Overlay/OverlayTrigger';
3
3
  import { PositionChildProps } from '../Overlay/Position';
4
4
  import { TypeAttributes, AnimationEventProps } from '../@types/common';
5
- export type { OverlayTriggerInstance, PositionChildProps };
5
+ export type { OverlayTriggerHandle, PositionChildProps };
6
6
  export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onEntering' | 'onExiting'>, Pick<OverlayTriggerProps, 'speaker'> {
7
7
  placement?: TypeAttributes.Placement;
8
8
  pickerProps: any;
@@ -1,6 +1,6 @@
1
- import { pickTriggerPropKeys, omitTriggerPropKeys, OverlayTriggerInstance, PositionChildProps } from './PickerToggleTrigger';
1
+ import { pickTriggerPropKeys, omitTriggerPropKeys, OverlayTriggerHandle, PositionChildProps } from './PickerToggleTrigger';
2
2
  import { PickerToggleProps } from './PickerToggle';
3
- import { PickerInstance, PickerComponent } from './types';
3
+ import { PickerHandle, PickerComponent } from './types';
4
4
  export { default as DropdownMenu } from './DropdownMenu';
5
5
  export { default as DropdownMenuCheckItem } from './DropdownMenuCheckItem';
6
6
  export { default as DropdownMenuGroup } from './DropdownMenuGroup';
@@ -11,6 +11,6 @@ export { default as PickerToggleTrigger } from './PickerToggleTrigger';
11
11
  export { default as SearchBar } from './SearchBar';
12
12
  export { default as SelectedElement } from './SelectedElement';
13
13
  export { pickTriggerPropKeys, omitTriggerPropKeys };
14
- export type { OverlayTriggerInstance, PositionChildProps, PickerInstance, PickerComponent, PickerToggleProps };
14
+ export type { OverlayTriggerHandle, PositionChildProps, PickerHandle, PickerComponent, PickerToggleProps };
15
15
  export * from './utils';
16
16
  export * from './propTypes';
@@ -1,13 +1,15 @@
1
1
  /// <reference types="react" />
2
2
  import { RsRefForwardingComponent } from '../@types/common';
3
- export interface PickerInstance {
4
- root?: Element;
5
- overlay?: Element;
6
- target?: HTMLElement;
3
+ import type { ListHandle } from '../Windowing';
4
+ export interface PickerHandle {
5
+ root: HTMLElement | null;
6
+ list?: ListHandle;
7
+ overlay?: HTMLElement | null;
8
+ target?: HTMLElement | null;
7
9
  updatePosition?: () => void;
8
10
  open?: () => void;
9
11
  close?: () => void;
10
12
  }
11
13
  export declare type PickerComponent<P> = RsRefForwardingComponent<'div', P & {
12
- ref?: React.Ref<PickerInstance>;
14
+ ref?: React.Ref<PickerHandle>;
13
15
  }>;
File without changes