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
@@ -5,7 +5,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
6
 
7
7
  exports.__esModule = true;
8
- exports.default = exports.CustomConsumer = exports.CustomContext = void 0;
8
+ exports.default = exports.CustomContext = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -24,9 +24,6 @@ var _utils = require("../utils");
24
24
  var CustomContext = /*#__PURE__*/_react.default.createContext({});
25
25
 
26
26
  exports.CustomContext = CustomContext;
27
- var Consumer = CustomContext.Consumer,
28
- Provider = CustomContext.Provider;
29
- exports.CustomConsumer = Consumer;
30
27
  var themes = ['light', 'dark', 'high-contrast'];
31
28
 
32
29
  var CustomProvider = function CustomProvider(props) {
@@ -64,7 +61,7 @@ var CustomProvider = function CustomProvider(props) {
64
61
  });
65
62
  }
66
63
  }, [classPrefix, theme]);
67
- return /*#__PURE__*/_react.default.createElement(Provider, {
64
+ return /*#__PURE__*/_react.default.createElement(CustomContext.Provider, {
68
65
  value: value
69
66
  }, children, /*#__PURE__*/_react.default.createElement(Portal, null, /*#__PURE__*/_react.default.createElement("div", {
70
67
  className: "rs-toast-provider"
@@ -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;
@@ -10,7 +10,6 @@ exports.default = void 0;
10
10
  var _CustomProvider = _interopRequireWildcard(require("./CustomProvider"));
11
11
 
12
12
  exports.CustomContext = _CustomProvider.CustomContext;
13
- exports.CustomConsumer = _CustomProvider.CustomConsumer;
14
13
 
15
14
  var _FormattedDate = _interopRequireDefault(require("./FormattedDate"));
16
15
 
@@ -31,6 +31,10 @@ var _useCalendarDate2 = _interopRequireDefault(require("../Calendar/useCalendarD
31
31
 
32
32
  var _Toolbar = _interopRequireDefault(require("./Toolbar"));
33
33
 
34
+ var _Stack = _interopRequireDefault(require("../Stack"));
35
+
36
+ var _PredefinedRanges = _interopRequireDefault(require("./PredefinedRanges"));
37
+
34
38
  var _utils = require("../utils");
35
39
 
36
40
  var _Picker = require("../Picker");
@@ -365,6 +369,13 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
365
369
  onToggleMeridian: handleToggleMeridian
366
370
  }));
367
371
 
372
+ var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
373
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
374
+ })) || [];
375
+ var bottomRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
376
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
377
+ })) || [];
378
+
368
379
  var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
369
380
  var left = positionProps.left,
370
381
  top = positionProps.top,
@@ -380,16 +391,27 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
380
391
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
381
392
  style: styles,
382
393
  target: triggerRef
383
- }, calendar, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
394
+ }, /*#__PURE__*/_react.default.createElement(_Stack.default, {
395
+ alignItems: "flex-start"
396
+ }, sideRanges.length > 0 && /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
397
+ direction: "column",
398
+ spacing: 0,
399
+ className: prefix('date-predefined'),
400
+ ranges: sideRanges,
401
+ calendarDate: calendarDate,
402
+ locale: locale,
403
+ disabledShortcut: disabledToolbarHandle,
404
+ onClickShortcut: handleShortcutPageDate
405
+ }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, calendar, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
384
406
  locale: locale,
385
- ranges: ranges,
407
+ ranges: bottomRanges,
386
408
  calendarDate: calendarDate,
387
409
  disabledOkBtn: disabledToolbarHandle,
388
410
  disabledShortcut: disabledToolbarHandle,
389
411
  onClickShortcut: handleShortcutPageDate,
390
412
  onOk: handleOK,
391
413
  hideOkBtn: oneTap
392
- }));
414
+ }))));
393
415
  };
394
416
 
395
417
  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;
@@ -162,27 +162,34 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
162
162
 
163
163
  var selectRangeValueRef = (0, _react.useRef)(null);
164
164
  /**
165
- * Call this function to update the calendar panel rendering benchmark value.
166
- * If params `value` is not passed, it defaults to [new Date(), addMonth(new Date(), 1)].
165
+ * Get the time on the second calendar as the end of the date range.
167
166
  */
168
167
 
169
- var updateCalendarDateRange = (0, _react.useCallback)(function (value, calendarKey) {
170
- var nextValue = value;
171
- var shouldRenderTime = _utils.DateUtils.shouldRenderTime,
172
- getHours = _utils.DateUtils.getHours,
168
+ var getCalendarEndDatetime = (0, _react.useCallback)(function (date) {
169
+ var getHours = _utils.DateUtils.getHours,
173
170
  getMinutes = _utils.DateUtils.getMinutes,
174
171
  getSeconds = _utils.DateUtils.getSeconds,
175
172
  set = _utils.DateUtils.set;
173
+ var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue[1]);
174
+ return set(date, {
175
+ hours: getHours(calendarEndDate),
176
+ minutes: getMinutes(calendarEndDate),
177
+ seconds: getSeconds(calendarEndDate)
178
+ });
179
+ }, [calendarDate, defaultCalendarValue]);
180
+ /**
181
+ * Call this function to update the calendar panel rendering benchmark value.
182
+ * If params `value` is not passed, it defaults to [new Date(), addMonth(new Date(), 1)].
183
+ */
176
184
 
177
- 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) {
178
- var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || defaultCalendarValue[1];
179
- 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.
185
+ var updateCalendarDateRange = (0, _react.useCallback)(function (selectedDate, calendarKey) {
186
+ var nextValue = selectedDate;
187
+ var shouldRenderTime = _utils.DateUtils.shouldRenderTime;
180
188
 
181
- var _endDate = set((0, _dateUtils.addMonths)(_startDate, 1), {
182
- hours: getHours(calendarEndDate),
183
- minutes: getMinutes(calendarEndDate),
184
- seconds: getSeconds(calendarEndDate)
185
- });
189
+ if (shouldRenderTime(formatStr) && calendarKey === undefined && selectedDate !== null && selectedDate !== void 0 && selectedDate.length) {
190
+ var _startDate = selectedDate[0];
191
+
192
+ var _endDate = getCalendarEndDatetime((0, _dateUtils.addMonths)(_startDate, 1));
186
193
 
187
194
  nextValue = [_startDate, _endDate];
188
195
  }
@@ -191,7 +198,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
191
198
  value: nextValue,
192
199
  calendarKey: calendarKey
193
200
  }));
194
- }, [calendarDate, defaultCalendarValue, formatStr]); // if valueProp changed then update selectValue/hoverValue
201
+ }, [getCalendarEndDatetime, formatStr]); // if valueProp changed then update selectValue/hoverValue
195
202
 
196
203
  (0, _react.useEffect)(function () {
197
204
  setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
@@ -355,19 +362,31 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
355
362
  nextSelectDates = hoverRangeValue;
356
363
  selectRangeValueRef.current = hoverRangeValue;
357
364
  }
358
- } // If user have completed the selection, then sort
365
+ }
366
+
367
+ var shouldRenderTime = _utils.DateUtils.shouldRenderTime,
368
+ isAfter = _utils.DateUtils.isAfter;
369
+
370
+ if (nextSelectDates.length === 2) {
371
+ // If user have completed the selection, then sort the selected dates.
372
+ if (isAfter(nextSelectDates[0], nextSelectDates[1])) {
373
+ nextSelectDates.reverse();
374
+ }
359
375
 
376
+ if (shouldRenderTime(formatStr)) {
377
+ nextSelectDates[1] = getCalendarEndDatetime(nextSelectDates[1]);
378
+ }
360
379
 
361
- if (nextSelectDates.length === 2 && _utils.DateUtils.isAfter(nextSelectDates[0], nextSelectDates[1])) {
362
- nextSelectDates.reverse();
380
+ setHoverDateRange(nextSelectDates);
381
+ } else {
382
+ setHoverDateRange([nextSelectDates[0], nextSelectDates[0]]);
363
383
  }
364
384
 
365
- setHoverDateRange(nextSelectDates.length === 2 ? nextSelectDates : [nextSelectDates[0], nextSelectDates[0]]);
366
385
  setSelectedDates(nextSelectDates);
367
386
  updateCalendarDateRange(nextSelectDates);
368
387
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
369
388
  hasDoneSelect.current = !hasDoneSelect.current;
370
- }, [getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
389
+ }, [formatStr, getCalendarEndDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
371
390
  /**
372
391
  * If `selectValue` changed, there will be the following effects.
373
392
  * 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 {
@@ -74,7 +74,7 @@ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
74
74
  });
75
75
  }
76
76
  });
77
- var onMouseOver = (0, _react.useCallback)(function (event) {
77
+ var onMouseEnter = (0, _react.useCallback)(function (event) {
78
78
  if (!open) {
79
79
  dispatch({
80
80
  type: _DisclosureContext.DisclosureActionTypes.Show
@@ -82,7 +82,7 @@ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
82
82
  onToggle === null || onToggle === void 0 ? void 0 : onToggle(true, event);
83
83
  }
84
84
  }, [open, dispatch, onToggle]);
85
- var onMouseOut = (0, _react.useCallback)(function (event) {
85
+ var onMouseLeave = (0, _react.useCallback)(function (event) {
86
86
  if (open) {
87
87
  dispatch({
88
88
  type: _DisclosureContext.DisclosureActionTypes.Hide
@@ -113,13 +113,13 @@ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
113
113
  open: open
114
114
  };
115
115
 
116
- if (trigger.includes('mouseover')) {
117
- renderProps.onMouseOver = onMouseOver;
118
- renderProps.onMouseOut = onMouseOut;
116
+ if (trigger.includes('hover')) {
117
+ renderProps.onMouseEnter = onMouseEnter;
118
+ renderProps.onMouseLeave = onMouseLeave;
119
119
  }
120
120
 
121
121
  return renderProps;
122
- }, [open, trigger, onMouseOver, onMouseOut]);
122
+ }, [open, trigger, onMouseEnter, onMouseLeave]);
123
123
  return /*#__PURE__*/_react.default.createElement(_DisclosureContext.default.Provider, {
124
124
  value: contextValue
125
125
  }, children(renderProps, containerElementRef));
@@ -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,
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
6
 
5
7
  exports.__esModule = true;
@@ -9,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
11
 
10
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
13
 
12
- var _react = _interopRequireDefault(require("react"));
14
+ var _react = _interopRequireWildcard(require("react"));
13
15
 
14
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
17
 
@@ -22,6 +24,8 @@ var _IconButton = _interopRequireDefault(require("../IconButton"));
22
24
  var _Close = _interopRequireDefault(require("@rsuite/icons/Close"));
23
25
 
24
26
  var ModalBody = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
27
+ var _context$getBodyStyle;
28
+
25
29
  var _props$as = props.as,
26
30
  Component = _props$as === void 0 ? 'div' : _props$as,
27
31
  _props$classPrefix = props.classPrefix,
@@ -37,22 +41,19 @@ var ModalBody = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
37
41
  prefix = _useClassNames.prefix;
38
42
 
39
43
  var classes = merge(className, withClassPrefix());
40
- return /*#__PURE__*/_react.default.createElement(_ModalContext.ModalContext.Consumer, null, function (context) {
41
- var _context$getBodyStyle;
42
-
43
- var bodyStyles = context === null || context === void 0 ? void 0 : (_context$getBodyStyle = context.getBodyStyles) === null || _context$getBodyStyle === void 0 ? void 0 : _context$getBodyStyle.call(context);
44
- return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
45
- ref: ref,
46
- style: (0, _extends2.default)({}, bodyStyles, style),
47
- className: classes
48
- }), (context === null || context === void 0 ? void 0 : context.isDrawer) && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
49
- icon: /*#__PURE__*/_react.default.createElement(_Close.default, null),
50
- appearance: "subtle",
51
- size: "sm",
52
- className: prefix('close'),
53
- onClick: context === null || context === void 0 ? void 0 : context.onModalClose
54
- }), children);
55
- });
44
+ var context = (0, _react.useContext)(_ModalContext.ModalContext);
45
+ var bodyStyles = context === null || context === void 0 ? void 0 : (_context$getBodyStyle = context.getBodyStyles) === null || _context$getBodyStyle === void 0 ? void 0 : _context$getBodyStyle.call(context);
46
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
47
+ ref: ref,
48
+ style: (0, _extends2.default)({}, bodyStyles, style),
49
+ className: classes
50
+ }), (context === null || context === void 0 ? void 0 : context.isDrawer) && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
51
+ icon: /*#__PURE__*/_react.default.createElement(_Close.default, null),
52
+ appearance: "subtle",
53
+ size: "sm",
54
+ className: prefix('close'),
55
+ onClick: context === null || context === void 0 ? void 0 : context.onModalClose
56
+ }), children);
56
57
  });
57
58
 
58
59
  ModalBody.displayName = 'ModalBody';
@@ -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
  });
@@ -15,17 +15,17 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
15
15
 
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
 
18
- var _omit2 = _interopRequireDefault(require("lodash/omit"));
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
19
 
20
- var _utils = require("../utils");
20
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
21
21
 
22
- var _propTypes = _interopRequireDefault(require("prop-types"));
22
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
23
23
 
24
24
  var _AngleLeft = _interopRequireDefault(require("@rsuite/icons/legacy/AngleLeft"));
25
25
 
26
26
  var _AngleRight = _interopRequireDefault(require("@rsuite/icons/legacy/AngleRight"));
27
27
 
28
- var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
28
+ var _utils = require("../utils");
29
29
 
30
30
  var _ = require(".");
31
31
 
@@ -68,7 +68,7 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
68
68
  openDirection = _props$openDirection === void 0 ? 'end' : _props$openDirection,
69
69
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children", "openDirection"]);
70
70
 
71
- var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
71
+ var _useCustom = (0, _utils.useCustom)('DropdownMenu'),
72
72
  rtl = _useCustom.rtl;
73
73
 
74
74
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
@@ -94,7 +94,7 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
94
94
  var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
95
95
  return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
96
96
  hideOnClickOutside: true,
97
- trigger: ['click', 'mouseover'],
97
+ trigger: ['click', 'hover'],
98
98
  onToggle: function onToggle(open, event) {
99
99
  return _onToggle === null || _onToggle === void 0 ? void 0 : _onToggle(open, undefined, event);
100
100
  }
@@ -117,12 +117,18 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
117
117
  open: open,
118
118
  disabled: disabled
119
119
  }));
120
+ var dataAttributes = {
121
+ 'data-event-key': eventKey
122
+ };
123
+
124
+ if (!(0, _isNil.default)(eventKey) && typeof eventKey !== 'string') {
125
+ dataAttributes['data-event-key-type'] = typeof eventKey;
126
+ }
127
+
120
128
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
121
129
  ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
122
- className: classes,
123
- "data-event-key": eventKey,
124
- "data-event-key-type": typeof eventKey
125
- }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
130
+ className: classes
131
+ }, dataAttributes, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
126
132
  className: prefix('menu-icon')
127
133
  }), title, /*#__PURE__*/_react.default.createElement(Icon, {
128
134
  className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
@@ -72,11 +72,11 @@ export declare enum OverlayCloseCause {
72
72
  ClickOutside = 0,
73
73
  ImperativeHandle = 1
74
74
  }
75
- export interface OverlayTriggerInstance {
75
+ export interface OverlayTriggerHandle {
76
76
  root: HTMLElement | undefined;
77
77
  updatePosition: () => void;
78
78
  open: (delay?: number) => void;
79
79
  close: (delay?: number) => void;
80
80
  }
81
- declare const OverlayTrigger: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerInstance>>;
81
+ declare const OverlayTrigger: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerHandle>>;
82
82
  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,43 @@ 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,
235
- width: width,
237
+ }, function (_ref2) {
238
+ var height = _ref2.height;
239
+ return /*#__PURE__*/_react.default.createElement(_Windowing.List, (0, _extends2.default)({
240
+ as: _Windowing.VariableSizeList,
241
+ ref: (0, _utils.mergeRefs)(listRef, virtualizedListRef),
236
242
  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
243
+ itemCount: rowCount,
244
+ itemData: filteredItems,
245
+ itemSize: getRowHeight.bind(_this, filteredItems)
246
+ }, listProps), renderItem);
247
+ }) : filteredItems.map(function (item, index) {
248
+ return renderItem({
249
+ index: index,
250
+ item: item
247
251
  });
248
252
  }));
249
253
  });
@@ -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>;
@@ -209,7 +209,10 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
209
209
  }), /*#__PURE__*/_react.default.createElement(_Stack.default, null, label && /*#__PURE__*/_react.default.createElement(_Stack.default.Item, null, /*#__PURE__*/_react.default.createElement("span", {
210
210
  className: prefix('label')
211
211
  }, label)), /*#__PURE__*/_react.default.createElement(_Stack.default.Item, {
212
- grow: 1
212
+ grow: 1,
213
+ style: {
214
+ overflow: 'hidden'
215
+ }
213
216
  }, loading ? /*#__PURE__*/_react.default.createElement(_Loader.default, {
214
217
  style: {
215
218
  display: 'block',
@@ -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' | 'onClose'> {
7
7
  placement?: TypeAttributes.Placement;
8
8
  pickerProps: any;