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
@@ -59,7 +59,7 @@ var Disclosure = /*#__PURE__*/React.memo(function (props) {
59
59
  });
60
60
  }
61
61
  });
62
- var onMouseOver = useCallback(function (event) {
62
+ var onMouseEnter = useCallback(function (event) {
63
63
  if (!open) {
64
64
  dispatch({
65
65
  type: DisclosureActionTypes.Show
@@ -67,7 +67,7 @@ var Disclosure = /*#__PURE__*/React.memo(function (props) {
67
67
  onToggle === null || onToggle === void 0 ? void 0 : onToggle(true, event);
68
68
  }
69
69
  }, [open, dispatch, onToggle]);
70
- var onMouseOut = useCallback(function (event) {
70
+ var onMouseLeave = useCallback(function (event) {
71
71
  if (open) {
72
72
  dispatch({
73
73
  type: DisclosureActionTypes.Hide
@@ -98,13 +98,13 @@ var Disclosure = /*#__PURE__*/React.memo(function (props) {
98
98
  open: open
99
99
  };
100
100
 
101
- if (trigger.includes('mouseover')) {
102
- renderProps.onMouseOver = onMouseOver;
103
- renderProps.onMouseOut = onMouseOut;
101
+ if (trigger.includes('hover')) {
102
+ renderProps.onMouseEnter = onMouseEnter;
103
+ renderProps.onMouseLeave = onMouseLeave;
104
104
  }
105
105
 
106
106
  return renderProps;
107
- }, [open, trigger, onMouseOver, onMouseOut]);
107
+ }, [open, trigger, onMouseEnter, onMouseLeave]);
108
108
  return /*#__PURE__*/React.createElement(DisclosureContext.Provider, {
109
109
  value: contextValue
110
110
  }, children(renderProps, containerElementRef));
@@ -112,6 +112,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
112
112
  var targetRef = useRef(null);
113
113
  var triggerRef = useRef(null);
114
114
  var inputRef = useRef();
115
+ var listRef = useRef(null);
115
116
 
116
117
  var _useCustom = useCustom(['Picker', 'InputPicker'], overrideLocale),
117
118
  locale = _useCustom.locale;
@@ -403,7 +404,8 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
403
404
  usePublicMethods(ref, {
404
405
  triggerRef: triggerRef,
405
406
  overlayRef: overlayRef,
406
- targetRef: targetRef
407
+ targetRef: targetRef,
408
+ listRef: listRef
407
409
  });
408
410
  /**
409
411
  * Remove the last item, after pressing the back key on the keyboard.
@@ -605,6 +607,7 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
605
607
  var menu = items.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
606
608
  id: id ? id + "-listbox" : undefined,
607
609
  listProps: listProps,
610
+ listRef: listRef,
608
611
  disabledItemValues: disabledItemValues,
609
612
  valueKey: valueKey,
610
613
  labelKey: labelKey,
@@ -1,12 +1,14 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React from 'react';
3
+ import React, { useContext } from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import { useClassNames } from '../utils';
6
6
  import { ModalContext } from './ModalContext';
7
7
  import IconButton from '../IconButton';
8
8
  import Close from '@rsuite/icons/Close';
9
9
  var ModalBody = /*#__PURE__*/React.forwardRef(function (props, ref) {
10
+ var _context$getBodyStyle;
11
+
10
12
  var _props$as = props.as,
11
13
  Component = _props$as === void 0 ? 'div' : _props$as,
12
14
  _props$classPrefix = props.classPrefix,
@@ -22,22 +24,19 @@ var ModalBody = /*#__PURE__*/React.forwardRef(function (props, ref) {
22
24
  prefix = _useClassNames.prefix;
23
25
 
24
26
  var classes = merge(className, withClassPrefix());
25
- return /*#__PURE__*/React.createElement(ModalContext.Consumer, null, function (context) {
26
- var _context$getBodyStyle;
27
-
28
- var bodyStyles = context === null || context === void 0 ? void 0 : (_context$getBodyStyle = context.getBodyStyles) === null || _context$getBodyStyle === void 0 ? void 0 : _context$getBodyStyle.call(context);
29
- return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
30
- ref: ref,
31
- style: _extends({}, bodyStyles, style),
32
- className: classes
33
- }), (context === null || context === void 0 ? void 0 : context.isDrawer) && /*#__PURE__*/React.createElement(IconButton, {
34
- icon: /*#__PURE__*/React.createElement(Close, null),
35
- appearance: "subtle",
36
- size: "sm",
37
- className: prefix('close'),
38
- onClick: context === null || context === void 0 ? void 0 : context.onModalClose
39
- }), children);
40
- });
27
+ var context = useContext(ModalContext);
28
+ var bodyStyles = context === null || context === void 0 ? void 0 : (_context$getBodyStyle = context.getBodyStyles) === null || _context$getBodyStyle === void 0 ? void 0 : _context$getBodyStyle.call(context);
29
+ return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
30
+ ref: ref,
31
+ style: _extends({}, bodyStyles, style),
32
+ className: classes
33
+ }), (context === null || context === void 0 ? void 0 : context.isDrawer) && /*#__PURE__*/React.createElement(IconButton, {
34
+ icon: /*#__PURE__*/React.createElement(Close, null),
35
+ appearance: "subtle",
36
+ size: "sm",
37
+ className: prefix('close'),
38
+ onClick: context === null || context === void 0 ? void 0 : context.onModalClose
39
+ }), children);
41
40
  });
42
41
  ModalBody.displayName = 'ModalBody';
43
42
  ModalBody.propTypes = {
@@ -50,7 +50,10 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
50
50
  prefix = _useClassNames.prefix;
51
51
 
52
52
  var classes = merge(className, prefix('items'));
53
- var rtl = useCustom('DropdownMenu');
53
+
54
+ var _useCustom = useCustom('DropdownMenu'),
55
+ rtl = _useCustom.rtl;
56
+
54
57
  var getCascadePaths = useCallback(function (layer, node) {
55
58
  var paths = [];
56
59
 
@@ -77,7 +80,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
77
80
  }); // Use `value` in keys when If `value` is string or number
78
81
 
79
82
  var onlyKey = typeof value === 'number' || typeof value === 'string' ? value : index;
80
- var Icon = node.loading ? SpinnerIcon : rtl ? AngleRightIcon : AngleLeftIcon;
83
+ var Icon = node.loading ? SpinnerIcon : rtl ? AngleLeftIcon : AngleRightIcon;
81
84
  var active = value.some(function (v) {
82
85
  return v === nodeValue;
83
86
  });
@@ -5,12 +5,12 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
5
5
  var _templateObject, _templateObject2;
6
6
 
7
7
  import React, { useContext } from 'react';
8
- import omit from 'lodash/omit';
9
- import { mergeRefs, useClassNames } from '../utils';
10
8
  import PropTypes from 'prop-types';
9
+ import omit from 'lodash/omit';
10
+ import isNil from 'lodash/isNil';
11
11
  import AngleLeft from '@rsuite/icons/legacy/AngleLeft';
12
12
  import AngleRight from '@rsuite/icons/legacy/AngleRight';
13
- import useCustom from '../utils/useCustom';
13
+ import { mergeRefs, useClassNames, useCustom } from '../utils';
14
14
  import { NavbarContext } from '.';
15
15
  import Disclosure from '../Disclosure';
16
16
  import NavContext from '../Nav/NavContext';
@@ -73,7 +73,7 @@ var NavbarDropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
73
73
  var Icon = rtl ? AngleLeft : AngleRight;
74
74
  return /*#__PURE__*/React.createElement(Disclosure, {
75
75
  hideOnClickOutside: true,
76
- trigger: ['click', 'mouseover'],
76
+ trigger: ['click', 'hover'],
77
77
  onToggle: function onToggle(open, event) {
78
78
  return _onToggle === null || _onToggle === void 0 ? void 0 : _onToggle(open, undefined, event);
79
79
  }
@@ -98,12 +98,18 @@ var NavbarDropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
98
98
  open: open,
99
99
  disabled: disabled
100
100
  }));
101
+ var dataAttributes = {
102
+ 'data-event-key': eventKey
103
+ };
104
+
105
+ if (!isNil(eventKey) && typeof eventKey !== 'string') {
106
+ dataAttributes['data-event-key-type'] = typeof eventKey;
107
+ }
108
+
101
109
  return /*#__PURE__*/React.createElement("div", _extends({
102
110
  ref: mergeRefs(buttonRef, buttonRef),
103
- className: classes,
104
- "data-event-key": eventKey,
105
- "data-event-key-type": typeof eventKey
106
- }, buttonProps), icon && /*#__PURE__*/React.cloneElement(icon, {
111
+ className: classes
112
+ }, dataAttributes, buttonProps), icon && /*#__PURE__*/React.cloneElement(icon, {
107
113
  className: prefix('menu-icon')
108
114
  }), title, /*#__PURE__*/React.createElement(Icon, {
109
115
  className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["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;
@@ -13,9 +13,9 @@ import getPosition from 'dom-lib/getPosition';
13
13
  import scrollTop from 'dom-lib/scrollTop';
14
14
  import getHeight from 'dom-lib/getHeight';
15
15
  import classNames from 'classnames';
16
- import { List, AutoSizer } from './VirtualizedList';
16
+ import { List, AutoSizer, VariableSizeList } from '../Windowing';
17
17
  import shallowEqual from '../utils/shallowEqual';
18
- import { mergeRefs, useClassNames } from '../utils';
18
+ import { mergeRefs, useClassNames, useMount } from '../utils';
19
19
  import DropdownMenuGroup from './DropdownMenuGroup';
20
20
  import { KEY_GROUP, KEY_GROUP_TITLE } from '../utils/getDataGroupBy';
21
21
  var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
@@ -36,6 +36,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
36
36
  labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
37
37
  virtualized = props.virtualized,
38
38
  listProps = props.listProps,
39
+ virtualizedListRef = props.listRef,
39
40
  className = props.className,
40
41
  style = props.style,
41
42
  focusItemValue = props.focusItemValue,
@@ -49,7 +50,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
49
50
  renderMenuItem = props.renderMenuItem,
50
51
  onGroupTitleClick = props.onGroupTitleClick,
51
52
  onSelect = props.onSelect,
52
- rest = _objectWithoutPropertiesLoose(props, ["data", "group", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
53
+ rest = _objectWithoutPropertiesLoose(props, ["data", "group", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
53
54
 
54
55
  var _useClassNames = useClassNames(classPrefix),
55
56
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -59,12 +60,8 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
59
60
  var classes = merge(className, withClassPrefix('items', {
60
61
  grouped: group
61
62
  }));
62
-
63
- var styles = _extends({}, style, {
64
- maxHeight: maxHeight
65
- });
66
-
67
63
  var menuBodyContainerRef = useRef(null);
64
+ var listRef = useRef(null);
68
65
 
69
66
  var _useState = useState([]),
70
67
  foldedGroupKeys = _useState[0],
@@ -86,8 +83,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
86
83
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, item, event, checked);
87
84
  }, [onSelect]);
88
85
 
89
- var getRowHeight = function getRowHeight(list, _ref) {
90
- var index = _ref.index;
86
+ var getRowHeight = function getRowHeight(list, index) {
91
87
  var item = list[index];
92
88
 
93
89
  if (group && item[KEY_GROUP] && index !== 0) {
@@ -125,10 +121,13 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
125
121
  }
126
122
  }, [focusItemValue, menuBodyContainerRef, prefix]);
127
123
 
128
- var renderItem = function renderItem(list, _ref2) {
129
- var index = _ref2.index,
130
- style = _ref2.style;
131
- var item = list[index];
124
+ var renderItem = function renderItem(_ref) {
125
+ var _ref$index = _ref.index,
126
+ index = _ref$index === void 0 ? 0 : _ref$index,
127
+ style = _ref.style,
128
+ data = _ref.data,
129
+ itemData = _ref.item;
130
+ var item = itemData || data[index];
132
131
  var value = item[valueKey];
133
132
  var label = item[labelKey];
134
133
 
@@ -187,40 +186,43 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
187
186
  return key === ((_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[KEY_GROUP_TITLE]);
188
187
  }));
189
188
  }) : data;
190
- var rowCount = filteredItems.length; // Check whether the height of the data exceeds the height of the container.
189
+ var rowCount = filteredItems.length;
190
+ useMount(function () {
191
+ var _listRef$current, _listRef$current$scro;
191
192
 
192
- var useVirtualized = virtualized && rowCount * rowHeight > maxHeight;
193
+ var itemIndex = findIndex(filteredItems, function (item) {
194
+ return item[valueKey] === (activeItemValues === null || activeItemValues === void 0 ? void 0 : activeItemValues[0]);
195
+ });
196
+ (_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);
197
+ });
193
198
  return /*#__PURE__*/React.createElement("div", _extends({
194
- role: !useVirtualized ? 'listbox' : undefined
199
+ role: "listbox"
195
200
  }, rest, {
196
201
  className: classes,
197
202
  ref: mergeRefs(menuBodyContainerRef, ref),
198
- style: styles
199
- }), useVirtualized ? /*#__PURE__*/React.createElement(AutoSizer, {
203
+ style: _extends({}, style, {
204
+ maxHeight: maxHeight
205
+ })
206
+ }), virtualized ? /*#__PURE__*/React.createElement(AutoSizer, {
200
207
  defaultHeight: maxHeight,
201
208
  style: {
202
209
  width: 'auto',
203
210
  height: 'auto'
204
211
  }
205
- }, function (_ref3) {
206
- var height = _ref3.height,
207
- width = _ref3.width;
212
+ }, function (_ref2) {
213
+ var height = _ref2.height;
208
214
  return /*#__PURE__*/React.createElement(List, _extends({
209
- role: "listbox",
210
- containerRole: '',
211
- "aria-readonly": undefined,
212
- width: width,
215
+ as: VariableSizeList,
216
+ ref: mergeRefs(listRef, virtualizedListRef),
213
217
  height: height || maxHeight,
214
- scrollToIndex: findIndex(data, function (item) {
215
- return item[valueKey] === (activeItemValues === null || activeItemValues === void 0 ? void 0 : activeItemValues[0]);
216
- }),
217
- rowCount: rowCount,
218
- rowHeight: getRowHeight.bind(_this, filteredItems),
219
- rowRenderer: renderItem.bind(null, filteredItems)
220
- }, listProps));
221
- }) : filteredItems.map(function (_item, index) {
222
- return renderItem(filteredItems, {
223
- index: index
218
+ itemCount: rowCount,
219
+ itemData: filteredItems,
220
+ itemSize: getRowHeight.bind(_this, filteredItems)
221
+ }, listProps), renderItem);
222
+ }) : filteredItems.map(function (item, index) {
223
+ return renderItem({
224
+ index: index,
225
+ item: item
224
226
  });
225
227
  }));
226
228
  });
@@ -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>;
@@ -186,7 +186,10 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
186
186
  }), /*#__PURE__*/React.createElement(Stack, null, label && /*#__PURE__*/React.createElement(Stack.Item, null, /*#__PURE__*/React.createElement("span", {
187
187
  className: prefix('label')
188
188
  }, label)), /*#__PURE__*/React.createElement(Stack.Item, {
189
- grow: 1
189
+ grow: 1,
190
+ style: {
191
+ overflow: 'hidden'
192
+ }
190
193
  }, loading ? /*#__PURE__*/React.createElement(Loader, {
191
194
  style: {
192
195
  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;
@@ -1,10 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React from 'react';
3
+ import React, { useContext } from 'react';
4
4
  import pick from 'lodash/pick';
5
5
  import OverlayTrigger from '../Overlay/OverlayTrigger';
6
6
  import { placementPolyfill } from '../utils';
7
- import { CustomConsumer } from '../CustomProvider';
7
+ import { CustomContext } from '../CustomProvider';
8
8
  export var omitTriggerPropKeys = ['onEntered', 'onExited', 'onEnter', 'onEntering', 'onExit', 'onExiting', 'open', 'defaultOpen', 'onHide', 'container', 'containerPadding', 'preventOverflow'];
9
9
  export var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly', 'loading']);
10
10
  var PickerToggleTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
@@ -16,15 +16,14 @@ var PickerToggleTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
16
16
  rest = _objectWithoutPropertiesLoose(props, ["pickerProps", "speaker", "placement", "trigger"]);
17
17
 
18
18
  var pickerTriggerProps = pick(pickerProps, pickTriggerPropKeys);
19
- return /*#__PURE__*/React.createElement(CustomConsumer, null, function (context) {
20
- return /*#__PURE__*/React.createElement(OverlayTrigger, _extends({}, rest, pickerTriggerProps, {
21
- disabled: pickerTriggerProps.disabled || pickerTriggerProps.loading,
22
- ref: ref,
23
- trigger: trigger,
24
- placement: placementPolyfill(placement, context === null || context === void 0 ? void 0 : context.rtl),
25
- speaker: speaker
26
- }));
27
- });
19
+ var context = useContext(CustomContext);
20
+ return /*#__PURE__*/React.createElement(OverlayTrigger, _extends({}, rest, pickerTriggerProps, {
21
+ disabled: pickerTriggerProps.disabled || pickerTriggerProps.loading,
22
+ ref: ref,
23
+ trigger: trigger,
24
+ placement: placementPolyfill(placement, context === null || context === void 0 ? void 0 : context.rtl),
25
+ speaker: speaker
26
+ }));
28
27
  });
29
28
  PickerToggleTrigger.displayName = 'PickerToggleTrigger';
30
29
  export default PickerToggleTrigger;
@@ -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
  }>;
@@ -1,14 +1,14 @@
1
1
  import React from 'react';
2
- import { OverlayTriggerInstance } from './PickerToggleTrigger';
2
+ import { OverlayTriggerHandle } from './PickerToggleTrigger';
3
3
  import { TypeAttributes, ItemDataType } from '../@types/common';
4
- import { ListInstance } from './VirtualizedList';
5
- interface NodeKeys {
4
+ import type { ListHandle } from '../Windowing';
5
+ export interface NodeKeys {
6
6
  valueKey: string;
7
7
  childrenKey: string;
8
8
  }
9
9
  export declare function createConcatChildrenFunction<T = any>(node: any, nodeValue?: any, nodeKeys?: NodeKeys): (data: T[], children: T[]) => T[];
10
10
  export declare function shouldDisplay(label: React.ReactNode, searchKeyword: string): boolean;
11
- interface PickerClassNameProps {
11
+ export interface PickerClassNameProps {
12
12
  name?: string;
13
13
  classPrefix: string;
14
14
  className?: string;
@@ -27,7 +27,7 @@ interface PickerClassNameProps {
27
27
  * The className of the assembled Toggle is on the Picker.
28
28
  */
29
29
  export declare function usePickerClassName(props: PickerClassNameProps): [string, string[]];
30
- interface EventsProps {
30
+ export interface EventsProps {
31
31
  down?: React.KeyboardEventHandler;
32
32
  up?: React.KeyboardEventHandler;
33
33
  enter?: React.KeyboardEventHandler;
@@ -42,7 +42,7 @@ interface EventsProps {
42
42
  * @param events Event callback functions
43
43
  */
44
44
  export declare function onMenuKeyDown(event: React.KeyboardEvent, events: EventsProps): void;
45
- interface FocusItemValueProps {
45
+ export interface FocusItemValueProps {
46
46
  target: HTMLElement | null | (() => HTMLElement | null);
47
47
  data?: any[];
48
48
  valueKey?: string;
@@ -65,7 +65,7 @@ export declare const useFocusItemValue: <T>(defaultFocusItemValue: T | null | un
65
65
  setKeys: React.Dispatch<React.SetStateAction<any[]>>;
66
66
  onKeyDown: (event: any) => void;
67
67
  };
68
- interface ToggleKeyDownEventProps {
68
+ export interface ToggleKeyDownEventProps {
69
69
  toggle?: boolean;
70
70
  triggerRef: React.RefObject<any>;
71
71
  targetRef: React.RefObject<any>;
@@ -86,7 +86,7 @@ interface ToggleKeyDownEventProps {
86
86
  * @param props
87
87
  */
88
88
  export declare const useToggleKeyDownEvent: (props: ToggleKeyDownEventProps) => (event: React.KeyboardEvent) => void;
89
- interface SearchProps {
89
+ export interface SearchProps {
90
90
  labelKey: string;
91
91
  data: ItemDataType[];
92
92
  searchBy?: (keyword: any, label: any, item: any) => boolean;
@@ -104,16 +104,15 @@ export declare function useSearch(props: SearchProps): {
104
104
  checkShouldDisplay: (item: ItemDataType, keyword?: string) => boolean;
105
105
  handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
106
106
  };
107
- interface PickerDependentParameters {
108
- triggerRef?: React.RefObject<OverlayTriggerInstance>;
107
+ export interface PickerDependentParameters {
108
+ triggerRef?: React.RefObject<OverlayTriggerHandle>;
109
109
  rootRef?: React.RefObject<HTMLElement>;
110
110
  overlayRef?: React.RefObject<HTMLElement>;
111
111
  targetRef?: React.RefObject<HTMLElement>;
112
- listRef?: React.RefObject<ListInstance>;
112
+ listRef?: React.RefObject<ListHandle>;
113
113
  inline?: boolean;
114
114
  }
115
115
  /**
116
116
  * A hook of the exposed method of Picker
117
117
  */
118
118
  export declare function usePublicMethods(ref: any, parmas: PickerDependentParameters): void;
119
- export {};
@@ -522,6 +522,10 @@ export function usePublicMethods(ref, parmas) {
522
522
  get overlay() {
523
523
  var _overlayRef$current;
524
524
 
525
+ if (!(overlayRef !== null && overlayRef !== void 0 && overlayRef.current)) {
526
+ throw new Error('The overlay is not found. Please confirm whether the picker is open.');
527
+ }
528
+
525
529
  return (_overlayRef$current = overlayRef === null || overlayRef === void 0 ? void 0 : overlayRef.current) !== null && _overlayRef$current !== void 0 ? _overlayRef$current : null;
526
530
  },
527
531
 
@@ -1,7 +1,7 @@
1
1
  import React, { Ref } from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerInstance, PickerToggleProps } from '../Picker';
4
- import { ListProps } from '../Picker/VirtualizedList';
3
+ import { PickerHandle, PickerToggleProps } from '../Picker';
4
+ import { ListProps } from '../Windowing';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
6
  export interface SelectProps<T> {
7
7
  /** Set group condition key in data */
@@ -13,8 +13,7 @@ export interface SelectProps<T> {
13
13
  /** Whether using virtualized list */
14
14
  virtualized?: boolean;
15
15
  /**
16
- * List-related properties in `react-virtualized`
17
- * https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types
16
+ * Virtualized List Props
18
17
  */
19
18
  listProps?: Partial<ListProps>;
20
19
  /** Custom search rules. */
@@ -52,7 +51,7 @@ export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, Pic
52
51
  }
53
52
  export interface SelectPickerComponent {
54
53
  <T>(props: SelectPickerProps<T> & {
55
- ref?: Ref<PickerInstance>;
54
+ ref?: Ref<PickerHandle>;
56
55
  }): JSX.Element | null;
57
56
  displayName?: string;
58
57
  propTypes?: React.WeakValidationMap<SelectPickerProps<any>>;
@@ -74,6 +74,7 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
74
74
  var targetRef = useRef(null);
75
75
  var overlayRef = useRef(null);
76
76
  var searchInputRef = useRef(null);
77
+ var listRef = useRef(null);
77
78
 
78
79
  var _useCustom = useCustom('Picker', overrideLocale),
79
80
  locale = _useCustom.locale;
@@ -193,7 +194,8 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
193
194
  usePublicMethods(ref, {
194
195
  triggerRef: triggerRef,
195
196
  overlayRef: overlayRef,
196
- targetRef: targetRef
197
+ targetRef: targetRef,
198
+ listRef: listRef
197
199
  }); // Find active `MenuItem` by `value`
198
200
 
199
201
  var activeItem = data.find(function (item) {
@@ -246,6 +248,7 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
246
248
  var menu = items.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
247
249
  id: id ? id + "-listbox" : undefined,
248
250
  listProps: listProps,
251
+ listRef: listRef,
249
252
  disabledItemValues: disabledItemValues,
250
253
  valueKey: valueKey,
251
254
  labelKey: labelKey,
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { StandardProps, ItemDataType, RsRefForwardingComponent } from '../@types/common';
3
- import { ListProps } from '../Picker/VirtualizedList';
3
+ import { ListProps } from '../Windowing';
4
4
  /**
5
5
  * Tree Node Drag Type
6
6
  */
@@ -46,10 +46,7 @@ export interface TreeBaseProps<ValueType = string | number, ItemDataType = Recor
46
46
  showIndentLine?: boolean;
47
47
  /** Whether using virtualized list */
48
48
  virtualized?: boolean;
49
- /**
50
- * List-related properties in `react-virtualized`
51
- * https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types
52
- */
49
+ /** Virtualized List props */
53
50
  listProps?: Partial<ListProps>;
54
51
  /** Expand all nodes By default */
55
52
  defaultExpandAll?: boolean;