rsuite 5.13.1 → 5.15.1

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 (145) hide show
  1. package/Button/styles/index.less +1 -0
  2. package/CHANGELOG.md +37 -0
  3. package/Dropdown/styles/index.less +8 -3
  4. package/Grid/styles/index.less +42 -10
  5. package/Sidenav/styles/index.less +7 -9
  6. package/Table/styles/index.less +0 -2
  7. package/Tooltip/styles/index.less +4 -4
  8. package/cjs/@types/common.d.ts +6 -0
  9. package/cjs/Cascader/utils.d.ts +1 -1
  10. package/cjs/Col/Col.d.ts +25 -5
  11. package/cjs/Col/Col.js +9 -1
  12. package/cjs/CustomProvider/CustomProvider.d.ts +20 -7
  13. package/cjs/CustomProvider/CustomProvider.js +24 -3
  14. package/cjs/Dropdown/useRenderDropdownItem.d.ts +1 -1
  15. package/cjs/Form/Form.d.ts +8 -8
  16. package/cjs/Form/test/Form.test.d.ts +1 -0
  17. package/cjs/Form/test/Form.test.js +18 -0
  18. package/cjs/Modal/test/Modal.test.d.ts +1 -0
  19. package/cjs/Modal/test/Modal.test.js +14 -0
  20. package/cjs/Modal/utils.d.ts +1 -1
  21. package/cjs/Nav/NavDropdownMenu.d.ts +12 -1
  22. package/cjs/Nav/NavDropdownMenu.js +9 -3
  23. package/cjs/Nav/test/Nav.test.d.ts +1 -0
  24. package/cjs/Nav/test/Nav.test.js +17 -0
  25. package/cjs/Navbar/NavbarDropdownMenu.d.ts +12 -1
  26. package/cjs/Navbar/NavbarDropdownMenu.js +9 -3
  27. package/cjs/Overlay/Modal.d.ts +1 -4
  28. package/cjs/Overlay/Overlay.d.ts +3 -1
  29. package/cjs/Overlay/Overlay.js +6 -2
  30. package/cjs/Overlay/OverlayTrigger.d.ts +4 -0
  31. package/cjs/Overlay/OverlayTrigger.js +32 -4
  32. package/cjs/Overlay/Position.d.ts +3 -1
  33. package/cjs/Overlay/Position.js +12 -4
  34. package/cjs/Overlay/positionUtils.d.ts +11 -4
  35. package/cjs/Overlay/positionUtils.js +48 -2
  36. package/cjs/Panel/Panel.js +9 -6
  37. package/cjs/Picker/utils.d.ts +1 -1
  38. package/cjs/Popover/Popover.d.ts +2 -0
  39. package/cjs/Popover/Popover.js +6 -3
  40. package/cjs/Sidenav/SidenavDropdownToggle.js +2 -1
  41. package/cjs/Sidenav/SidenavItem.d.ts +4 -0
  42. package/cjs/Sidenav/SidenavItem.js +40 -31
  43. package/cjs/Toggle/Toggle.d.ts +1 -1
  44. package/cjs/Tooltip/Tooltip.d.ts +3 -1
  45. package/cjs/Tooltip/Tooltip.js +8 -3
  46. package/cjs/Uploader/Uploader.d.ts +2 -0
  47. package/cjs/Uploader/Uploader.js +6 -2
  48. package/cjs/Whisper/Whisper.js +6 -1
  49. package/cjs/index.d.ts +2 -2
  50. package/cjs/index.js +3 -2
  51. package/cjs/toaster/ToastContainer.d.ts +1 -0
  52. package/cjs/toaster/ToastContainer.js +4 -1
  53. package/cjs/toaster/index.d.ts +1 -0
  54. package/cjs/toaster/index.js +4 -1
  55. package/cjs/toaster/toaster.d.ts +0 -1
  56. package/cjs/toaster/useToaster.d.ts +12 -0
  57. package/cjs/toaster/useToaster.js +43 -0
  58. package/cjs/utils/ajaxUpload.d.ts +1 -0
  59. package/cjs/utils/ajaxUpload.js +3 -1
  60. package/cjs/utils/constants.d.ts +1 -0
  61. package/cjs/utils/constants.js +3 -1
  62. package/cjs/utils/stringToObject.d.ts +1 -1
  63. package/cjs/utils/tplTransform.d.ts +1 -1
  64. package/cjs/utils/treeUtils.d.ts +3 -3
  65. package/cjs/utils/useCustom.d.ts +1 -1
  66. package/cjs/utils/useCustom.js +5 -3
  67. package/cjs/utils/useFocus.d.ts +1 -1
  68. package/dist/rsuite-rtl.css +684 -71
  69. package/dist/rsuite-rtl.min.css +1 -1
  70. package/dist/rsuite-rtl.min.css.map +1 -1
  71. package/dist/rsuite.css +684 -71
  72. package/dist/rsuite.js +92 -103
  73. package/dist/rsuite.js.map +1 -1
  74. package/dist/rsuite.min.css +1 -1
  75. package/dist/rsuite.min.css.map +1 -1
  76. package/dist/rsuite.min.js +1 -1
  77. package/dist/rsuite.min.js.map +1 -1
  78. package/esm/@types/common.d.ts +6 -0
  79. package/esm/Cascader/utils.d.ts +1 -1
  80. package/esm/Col/Col.d.ts +25 -5
  81. package/esm/Col/Col.js +10 -2
  82. package/esm/CustomProvider/CustomProvider.d.ts +20 -7
  83. package/esm/CustomProvider/CustomProvider.js +22 -3
  84. package/esm/Dropdown/useRenderDropdownItem.d.ts +1 -1
  85. package/esm/Form/Form.d.ts +8 -8
  86. package/esm/Form/test/Form.test.d.ts +1 -0
  87. package/esm/Form/test/Form.test.js +11 -0
  88. package/esm/Modal/test/Modal.test.d.ts +1 -0
  89. package/esm/Modal/test/Modal.test.js +9 -0
  90. package/esm/Modal/utils.d.ts +1 -1
  91. package/esm/Nav/NavDropdownMenu.d.ts +12 -1
  92. package/esm/Nav/NavDropdownMenu.js +8 -3
  93. package/esm/Nav/test/Nav.test.d.ts +1 -0
  94. package/esm/Nav/test/Nav.test.js +11 -0
  95. package/esm/Navbar/NavbarDropdownMenu.d.ts +12 -1
  96. package/esm/Navbar/NavbarDropdownMenu.js +8 -3
  97. package/esm/Overlay/Modal.d.ts +1 -4
  98. package/esm/Overlay/Overlay.d.ts +3 -1
  99. package/esm/Overlay/Overlay.js +6 -2
  100. package/esm/Overlay/OverlayTrigger.d.ts +4 -0
  101. package/esm/Overlay/OverlayTrigger.js +33 -5
  102. package/esm/Overlay/Position.d.ts +3 -1
  103. package/esm/Overlay/Position.js +12 -4
  104. package/esm/Overlay/positionUtils.d.ts +11 -4
  105. package/esm/Overlay/positionUtils.js +46 -2
  106. package/esm/Panel/Panel.js +9 -6
  107. package/esm/Picker/utils.d.ts +1 -1
  108. package/esm/Popover/Popover.d.ts +2 -0
  109. package/esm/Popover/Popover.js +6 -3
  110. package/esm/Sidenav/SidenavDropdownToggle.js +2 -1
  111. package/esm/Sidenav/SidenavItem.d.ts +4 -0
  112. package/esm/Sidenav/SidenavItem.js +38 -31
  113. package/esm/Toggle/Toggle.d.ts +1 -1
  114. package/esm/Tooltip/Tooltip.d.ts +3 -1
  115. package/esm/Tooltip/Tooltip.js +8 -3
  116. package/esm/Uploader/Uploader.d.ts +2 -0
  117. package/esm/Uploader/Uploader.js +6 -2
  118. package/esm/Whisper/Whisper.js +6 -1
  119. package/esm/index.d.ts +2 -2
  120. package/esm/index.js +1 -1
  121. package/esm/toaster/ToastContainer.d.ts +1 -0
  122. package/esm/toaster/ToastContainer.js +1 -0
  123. package/esm/toaster/index.d.ts +1 -0
  124. package/esm/toaster/index.js +1 -0
  125. package/esm/toaster/toaster.d.ts +0 -1
  126. package/esm/toaster/useToaster.d.ts +12 -0
  127. package/esm/toaster/useToaster.js +34 -0
  128. package/esm/utils/ajaxUpload.d.ts +1 -0
  129. package/esm/utils/ajaxUpload.js +3 -1
  130. package/esm/utils/constants.d.ts +1 -0
  131. package/esm/utils/constants.js +1 -0
  132. package/esm/utils/stringToObject.d.ts +1 -1
  133. package/esm/utils/tplTransform.d.ts +1 -1
  134. package/esm/utils/treeUtils.d.ts +3 -3
  135. package/esm/utils/useCustom.d.ts +1 -1
  136. package/esm/utils/useCustom.js +5 -3
  137. package/esm/utils/useFocus.d.ts +1 -1
  138. package/package.json +1 -1
  139. package/styles/color-modes/dark.less +223 -184
  140. package/styles/color-modes/high-contrast.less +221 -182
  141. package/styles/color-modes/light.less +44 -5
  142. package/styles/colors/dark.less +91 -91
  143. package/styles/colors/high-contrast.less +91 -91
  144. package/styles/variables.less +33 -12
  145. package/styles/color-modes/common.less +0 -44
@@ -33,6 +33,8 @@ var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
33
33
 
34
34
  var _NavContext = _interopRequireDefault(require("./NavContext"));
35
35
 
36
+ var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
37
+
36
38
  var _templateObject, _templateObject2;
37
39
 
38
40
  /**
@@ -51,7 +53,9 @@ var NavDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, re
51
53
  _props$classPrefix = props.classPrefix,
52
54
  classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
53
55
  children = props.children,
54
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children"]);
56
+ _props$openDirection = props.openDirection,
57
+ openDirection = _props$openDirection === void 0 ? 'end' : _props$openDirection,
58
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children", "openDirection"]);
55
59
 
56
60
  var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
57
61
  rtl = _useCustom.rtl;
@@ -118,7 +122,8 @@ var NavDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, re
118
122
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
119
123
  ref: popupRef,
120
124
  className: menuClassName,
121
- hidden: !open
125
+ hidden: !open,
126
+ "data-direction": openDirection
122
127
  }, popupProps, menuProps), children);
123
128
  },
124
129
  onToggleMenu: handleToggleSubmenu
@@ -144,7 +149,8 @@ NavDropdownMenu.propTypes = {
144
149
  children: _propTypes.default.node,
145
150
  icon: _propTypes.default.any,
146
151
  classPrefix: _propTypes.default.string,
147
- pullLeft: _propTypes.default.bool,
152
+ pullLeft: (0, _deprecatePropType.default)(_propTypes.default.bool, 'Use openDirection="start" instead.'),
153
+ openDirection: _propTypes.default.oneOf(['start', 'end']),
148
154
  title: _propTypes.default.node,
149
155
  open: _propTypes.default.bool,
150
156
  eventKey: _propTypes.default.any,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _Navbar = _interopRequireDefault(require("../../Navbar"));
8
+
9
+ var _Nav = _interopRequireDefault(require("../Nav"));
10
+
11
+ /*#__PURE__*/
12
+ _react.default.createElement(_Navbar.default, null, /*#__PURE__*/_react.default.createElement(_Nav.default, null, /*#__PURE__*/_react.default.createElement(_Nav.default.Menu, {
13
+ title: "Menu"
14
+ }, /*#__PURE__*/_react.default.createElement(_Nav.default.Menu, {
15
+ title: "Submenu",
16
+ openDirection: "start"
17
+ }, /*#__PURE__*/_react.default.createElement(_Nav.default.Item, null, "Submenu item")))));
@@ -4,8 +4,19 @@ import { IconProps } from '@rsuite/icons/lib/Icon';
4
4
  export interface NavbarDropdownMenuProps<T = any> extends StandardProps {
5
5
  /** Define the title as a submenu */
6
6
  title?: React.ReactNode;
7
- /** The submenu expands from the left and defaults to the right */
7
+ /**
8
+ * The submenu expands from the left and defaults to the right
9
+ * @deprecated Use openDirection="start" instead.
10
+ */
8
11
  pullLeft?: boolean;
12
+ /**
13
+ * Direction that the sub-menu open towards
14
+ * - start: towards the head of the reading direction (right by default, left in RTL)
15
+ * - end: towards the end of the reading direction (left by default, right in RTL)
16
+ *
17
+ * @default 'end'
18
+ */
19
+ openDirection?: 'start' | 'end';
9
20
  /**
10
21
  * Only used for setting the default expand state when it's a submenu.
11
22
  */
@@ -33,6 +33,8 @@ var _Disclosure = _interopRequireDefault(require("../Disclosure"));
33
33
 
34
34
  var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
35
35
 
36
+ var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
37
+
36
38
  var _templateObject, _templateObject2;
37
39
 
38
40
  /**
@@ -62,7 +64,9 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
62
64
  _props$classPrefix = props.classPrefix,
63
65
  classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
64
66
  children = props.children,
65
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children"]);
67
+ _props$openDirection = props.openDirection,
68
+ openDirection = _props$openDirection === void 0 ? 'end' : _props$openDirection,
69
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "classPrefix", "children", "openDirection"]);
66
70
 
67
71
  var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
68
72
  rtl = _useCustom.rtl;
@@ -129,7 +133,8 @@ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props,
129
133
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
130
134
  ref: elementRef,
131
135
  className: menuClassName,
132
- hidden: !open
136
+ hidden: !open,
137
+ "data-direction": openDirection
133
138
  }, menuProps), children);
134
139
  }));
135
140
  });
@@ -143,7 +148,8 @@ NavbarDropdownMenu.propTypes = {
143
148
  children: _propTypes.default.node,
144
149
  icon: _propTypes.default.any,
145
150
  classPrefix: _propTypes.default.string,
146
- pullLeft: _propTypes.default.bool,
151
+ pullLeft: (0, _deprecatePropType.default)(_propTypes.default.bool, 'Use openDirection="start" instead.'),
152
+ openDirection: _propTypes.default.oneOf(['start', 'end']),
147
153
  title: _propTypes.default.node,
148
154
  open: _propTypes.default.bool,
149
155
  eventKey: _propTypes.default.any,
@@ -37,9 +37,6 @@ export interface BaseModalProps extends WithAsProps, AnimationEventProps {
37
37
  onOpen?: () => void;
38
38
  /** Called when Modal is closed */
39
39
  onClose?: (event: React.SyntheticEvent) => void;
40
- }
41
- interface ModalProps extends BaseModalProps {
42
- children: (props: any, ref: any) => React.ReactElement;
43
40
  container?: HTMLElement | (() => HTMLElement);
44
41
  containerClassName?: string;
45
42
  backdropTransitionTimeout?: number;
@@ -48,7 +45,7 @@ interface ModalProps extends BaseModalProps {
48
45
  onEsc?: React.KeyboardEventHandler;
49
46
  onBackdropClick?: React.MouseEventHandler;
50
47
  }
51
- declare const Modal: RsRefForwardingComponent<'div', ModalProps>;
48
+ declare const Modal: RsRefForwardingComponent<'div', BaseModalProps>;
52
49
  export declare const modalPropTypes: {
53
50
  as: PropTypes.Requireable<PropTypes.ReactComponentLike>;
54
51
  className: PropTypes.Requireable<string>;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { TypeAttributes, AnimationEventProps } from '../@types/common';
3
+ import { TypeAttributes, AnimationEventProps, CursorPosition } from '../@types/common';
4
4
  export interface OverlayProps extends AnimationEventProps {
5
5
  container?: HTMLElement | (() => HTMLElement | null) | null;
6
6
  children: React.ReactElement | ((props: any, ref: any) => React.ReactElement);
@@ -14,6 +14,8 @@ export interface OverlayProps extends AnimationEventProps {
14
14
  transition?: React.ElementType;
15
15
  triggerTarget?: React.RefObject<any>;
16
16
  onClose?: React.ReactEventHandler;
17
+ followCursor?: boolean;
18
+ cursorPosition?: CursorPosition | null;
17
19
  }
18
20
  export declare const overlayPropTypes: {
19
21
  container: PropTypes.Requireable<any>;
@@ -67,7 +67,9 @@ var Overlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
67
67
  onExiting = props.onExiting,
68
68
  onEnter = props.onEnter,
69
69
  onEntering = props.onEntering,
70
- onEntered = props.onEntered;
70
+ onEntered = props.onEntered,
71
+ followCursor = props.followCursor,
72
+ cursorPosition = props.cursorPosition;
71
73
 
72
74
  var _useState = (0, _react.useState)(!open),
73
75
  exited = _useState[0],
@@ -101,7 +103,9 @@ var Overlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
101
103
  containerPadding: containerPadding,
102
104
  triggerTarget: triggerTarget,
103
105
  placement: placement,
104
- preventOverflow: preventOverflow
106
+ preventOverflow: preventOverflow,
107
+ followCursor: followCursor,
108
+ cursorPosition: cursorPosition
105
109
  };
106
110
 
107
111
  var renderChildWithPosition = function renderChildWithPosition(transitionProps, transitionRef) {
@@ -50,10 +50,14 @@ export interface OverlayTriggerProps extends StandardProps, AnimationEventProps
50
50
  onMouseOut?: React.MouseEventHandler;
51
51
  /** Mouse over callback function */
52
52
  onMouseOver?: React.MouseEventHandler;
53
+ /** Mouse move callback function */
54
+ onMouseMove?: React.MouseEventHandler;
53
55
  /** Callback fired when open component */
54
56
  onOpen?: () => void;
55
57
  /** Callback fired when close component */
56
58
  onClose?: () => void;
59
+ /** Whether speaker to follow the cursor */
60
+ followCursor?: boolean;
57
61
  }
58
62
  export interface OverlayTriggerInstance {
59
63
  root: HTMLElement | undefined;
@@ -93,12 +93,15 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
93
93
  rootClose = _props$rootClose === void 0 ? true : _props$rootClose,
94
94
  onClick = props.onClick,
95
95
  onMouseOver = props.onMouseOver,
96
+ onMouseMove = props.onMouseMove,
96
97
  onMouseOut = props.onMouseOut,
97
98
  onContextMenu = props.onContextMenu,
98
99
  onFocus = props.onFocus,
99
100
  onBlur = props.onBlur,
100
101
  onClose = props.onClose,
101
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["children", "container", "controlId", "defaultOpen", "trigger", "disabled", "readOnly", "plaintext", "open", "delay", "delayOpen", "delayClose", "enterable", "placement", "speaker", "rootClose", "onClick", "onMouseOver", "onMouseOut", "onContextMenu", "onFocus", "onBlur", "onClose"]);
102
+ followCursor = props.followCursor,
103
+ onExited = props.onExited,
104
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["children", "container", "controlId", "defaultOpen", "trigger", "disabled", "readOnly", "plaintext", "open", "delay", "delayOpen", "delayClose", "enterable", "placement", "speaker", "rootClose", "onClick", "onMouseOver", "onMouseMove", "onMouseOut", "onContextMenu", "onFocus", "onBlur", "onClose", "followCursor", "onExited"]);
102
105
 
103
106
  var _usePortal = (0, _utils.usePortal)({
104
107
  container: container
@@ -110,7 +113,11 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
110
113
 
111
114
  var _useControlled = (0, _utils.useControlled)(openProp, defaultOpen),
112
115
  open = _useControlled[0],
113
- setOpen = _useControlled[1]; // Delay the timer to close/open the overlay
116
+ setOpen = _useControlled[1];
117
+
118
+ var _useState = (0, _react.useState)(null),
119
+ cursorPosition = _useState[0],
120
+ setCursorPosition = _useState[1]; // Delay the timer to close/open the overlay
114
121
  // When the cursor moves from the trigger to the overlay, the overlay will be closed.
115
122
  // In order to keep the overlay open, a timer is used to delay the closing.
116
123
 
@@ -158,6 +165,9 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
158
165
 
159
166
  setOpen(false);
160
167
  }, [delayClose, setOpen]);
168
+ var handleExited = (0, _react.useCallback)(function () {
169
+ setCursorPosition(null);
170
+ }, []);
161
171
  (0, _react.useImperativeHandle)(ref, function () {
162
172
  return {
163
173
  get root() {
@@ -255,6 +265,16 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
255
265
  handleCloseWhenLeave();
256
266
  }
257
267
  }, [handleCloseWhenLeave, trigger]);
268
+ var handledMoveOverlay = (0, _react.useCallback)(function (event) {
269
+ setCursorPosition(function () {
270
+ return {
271
+ top: event.pageY,
272
+ left: event.pageX,
273
+ clientTop: event.clientX,
274
+ clientLeft: event.clientY
275
+ };
276
+ });
277
+ }, [open]);
258
278
  var preventDefault = (0, _react.useCallback)(function (event) {
259
279
  event.preventDefault();
260
280
  }, []);
@@ -264,7 +284,8 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
264
284
  onMouseOver: onMouseOver,
265
285
  onMouseOut: onMouseOut,
266
286
  onFocus: onFocus,
267
- onBlur: onBlur
287
+ onBlur: onBlur,
288
+ onMouseMove: onMouseMove
268
289
  };
269
290
 
270
291
  if (!disabled && !readOnly && !plaintext) {
@@ -302,6 +323,10 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
302
323
  triggerEvents.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, onFocus);
303
324
  triggerEvents.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, onBlur);
304
325
  }
326
+
327
+ if (trigger !== 'none') {
328
+ triggerEvents.onMouseMove = (0, _utils.createChainedFunction)(handledMoveOverlay, onMouseMove);
329
+ }
305
330
  }
306
331
 
307
332
  var renderOverlay = function renderOverlay() {
@@ -309,6 +334,7 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
309
334
  rootClose: rootClose,
310
335
  triggerTarget: triggerRef,
311
336
  onClose: trigger !== 'none' ? (0, _utils.createChainedFunction)(handleClose, onClose) : undefined,
337
+ onExited: (0, _utils.createChainedFunction)(followCursor ? handleExited : undefined, onExited),
312
338
  placement: placement,
313
339
  container: container,
314
340
  open: open
@@ -326,7 +352,9 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
326
352
 
327
353
  return /*#__PURE__*/_react.default.createElement(_Overlay.default, (0, _extends2.default)({}, overlayProps, {
328
354
  ref: overlayRef,
329
- childrenProps: speakerProps
355
+ childrenProps: speakerProps,
356
+ followCursor: followCursor,
357
+ cursorPosition: cursorPosition
330
358
  }), typeof speaker === 'function' ? function (props, ref) {
331
359
  return speaker((0, _extends2.default)({}, props, {
332
360
  onClose: handleClose
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { TypeAttributes } from '../@types/common';
2
+ import { CursorPosition, TypeAttributes } from '../@types/common';
3
3
  export interface PositionChildProps {
4
4
  className: string;
5
5
  left?: number;
@@ -13,6 +13,8 @@ export interface PositionProps {
13
13
  placement?: TypeAttributes.Placement;
14
14
  preventOverflow?: boolean;
15
15
  triggerTarget?: React.RefObject<any>;
16
+ followCursor?: boolean;
17
+ cursorPosition?: CursorPosition | null;
16
18
  }
17
19
  export interface PositionInstance {
18
20
  updatePosition?: () => void;
@@ -41,7 +41,9 @@ var usePosition = function usePosition(props, ref) {
41
41
  _props$containerPaddi = props.containerPadding,
42
42
  containerPadding = _props$containerPaddi === void 0 ? 0 : _props$containerPaddi,
43
43
  container = props.container,
44
- triggerTarget = props.triggerTarget;
44
+ triggerTarget = props.triggerTarget,
45
+ followCursor = props.followCursor,
46
+ cursorPosition = props.cursorPosition;
45
47
  var containerRef = (0, _react.useRef)(null);
46
48
  var lastTargetRef = (0, _react.useRef)(null);
47
49
  var overlayResizeObserver = (0, _react.useRef)();
@@ -91,7 +93,7 @@ var usePosition = function usePosition(props, ref) {
91
93
 
92
94
  var overlay = (0, _utils.getDOMNode)(ref.current);
93
95
  var containerElement = (0, _getContainer.default)(typeof container === 'function' ? container() : container !== null && container !== void 0 ? container : null, (0, _ownerDocument.default)(ref.current).body);
94
- var posi = utils.calcOverlayPosition(overlay, targetElement, containerElement);
96
+ var posi = utils.calcOverlayPosition(overlay, targetElement, containerElement, followCursor ? cursorPosition : undefined);
95
97
 
96
98
  if (forceUpdateDOM && overlay) {
97
99
  var _overlay$className, _overlay$className$ma;
@@ -113,7 +115,7 @@ var usePosition = function usePosition(props, ref) {
113
115
 
114
116
  containerRef.current = containerElement;
115
117
  lastTargetRef.current = targetElement;
116
- }, [container, ref, triggerTarget, utils]);
118
+ }, [container, ref, triggerTarget, utils, followCursor, cursorPosition]);
117
119
  (0, _react.useEffect)(function () {
118
120
  updatePosition(false);
119
121
  var overlay = (0, _utils.getDOMNode)(ref.current);
@@ -158,7 +160,9 @@ var usePosition = function usePosition(props, ref) {
158
160
 
159
161
  var Position = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
160
162
  var children = props.children,
161
- className = props.className;
163
+ className = props.className,
164
+ followCursor = props.followCursor,
165
+ cursorPosition = props.cursorPosition;
162
166
 
163
167
  var childRef = _react.default.useRef(null);
164
168
 
@@ -180,6 +184,10 @@ var Position = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
180
184
  updatePosition: updatePosition
181
185
  };
182
186
  });
187
+ (0, _react.useEffect)(function () {
188
+ if (!followCursor || !cursorPosition) return;
189
+ updatePosition();
190
+ }, [followCursor, cursorPosition, updatePosition]);
183
191
 
184
192
  if (typeof children === 'function') {
185
193
  var childProps = {
@@ -1,4 +1,10 @@
1
- import { TypeAttributes } from '../@types/common';
1
+ import { CursorPosition, TypeAttributes } from '../@types/common';
2
+ declare type Offset = {
3
+ top: number;
4
+ left: number;
5
+ width: number;
6
+ height: number;
7
+ };
2
8
  export interface PositionType {
3
9
  positionLeft?: number;
4
10
  positionTop?: number;
@@ -24,13 +30,14 @@ export interface Dimensions {
24
30
  scrollY: number;
25
31
  }
26
32
  declare const _default: (props: UtilProps) => {
27
- getPosition(target: any, container: any): {
33
+ getPosition(target: HTMLElement, container: HTMLElement): {
28
34
  top: number;
29
35
  left: number;
30
36
  height: number;
31
37
  width: number;
32
- } | null;
38
+ } | DOMRect | null;
39
+ getCursorOffsetPosition(target: HTMLElement, container: HTMLElement, cursorPosition: CursorPosition): Offset;
33
40
  calcAutoPlacement(targetOffset: any, container: any, overlay: any): any;
34
- calcOverlayPosition(overlayNode: any, target: any, container: any): PositionType;
41
+ calcOverlayPosition(overlayNode: HTMLElement, target: HTMLElement, container: HTMLElement, cursorPosition?: CursorPosition | null): PositionType;
35
42
  };
36
43
  export default _default;
@@ -21,6 +21,10 @@ var _scrollLeft = _interopRequireDefault(require("dom-lib/scrollLeft"));
21
21
 
22
22
  var _getPosition2 = _interopRequireDefault(require("dom-lib/getPosition"));
23
23
 
24
+ var _getStyle = _interopRequireDefault(require("dom-lib/getStyle"));
25
+
26
+ var _nodeName = _interopRequireDefault(require("dom-lib/nodeName"));
27
+
24
28
  var AutoPlacement = {
25
29
  left: 'Start',
26
30
  right: 'End',
@@ -146,6 +150,48 @@ var _default = function _default(props) {
146
150
  var offset = container.tagName === 'BODY' ? (0, _getOffset.default)(target) : (0, _getPosition2.default)(target, container, false);
147
151
  return offset;
148
152
  },
153
+ getCursorOffsetPosition: function getCursorOffsetPosition(target, container, cursorPosition) {
154
+ var left = cursorPosition.left,
155
+ top = cursorPosition.top,
156
+ clientLeft = cursorPosition.clientLeft,
157
+ clientTop = cursorPosition.clientTop;
158
+ var offset = {
159
+ left: left,
160
+ top: top,
161
+ width: 10,
162
+ height: 10
163
+ };
164
+
165
+ if ((0, _getStyle.default)(target, 'position') === 'fixed') {
166
+ offset.left = clientLeft;
167
+ offset.top = clientTop;
168
+ return offset;
169
+ }
170
+
171
+ if (container.tagName === 'BODY') {
172
+ return offset;
173
+ }
174
+
175
+ var containerOffset = {
176
+ top: 0,
177
+ left: 0
178
+ };
179
+
180
+ if ((0, _nodeName.default)(container) !== 'html') {
181
+ var nextParentOffset = (0, _getOffset.default)(container);
182
+
183
+ if (nextParentOffset) {
184
+ containerOffset.top = nextParentOffset.top;
185
+ containerOffset.left = nextParentOffset.left;
186
+ }
187
+ }
188
+
189
+ containerOffset.top += parseInt((0, _getStyle.default)(container, 'borderTopWidth'), 10) - (0, _scrollTop.default)(container) || 0;
190
+ containerOffset.left += parseInt((0, _getStyle.default)(container, 'borderLeftWidth'), 10) - (0, _scrollLeft.default)(container) || 0;
191
+ offset.left = left - containerOffset.left;
192
+ offset.top = top - containerOffset.top;
193
+ return offset;
194
+ },
149
195
  calcAutoPlacement: function calcAutoPlacement(targetOffset, container, overlay) {
150
196
  var _getContainerDimensio3 = getContainerDimensions(container),
151
197
  width = _getContainerDimensio3.width,
@@ -210,8 +256,8 @@ var _default = function _default(props) {
210
256
  return "" + direction.key + AutoPlacement[align.key];
211
257
  },
212
258
  // Calculate the position of the overlay
213
- calcOverlayPosition: function calcOverlayPosition(overlayNode, target, container) {
214
- var childOffset = this.getPosition(target, container);
259
+ calcOverlayPosition: function calcOverlayPosition(overlayNode, target, container, cursorPosition) {
260
+ var childOffset = cursorPosition ? this.getCursorOffsetPosition(target, container, cursorPosition) : this.getPosition(target, container);
215
261
 
216
262
  var _ref2 = (0, _getOffset.default)(overlayNode),
217
263
  overlayHeight = _ref2.height,
@@ -58,23 +58,26 @@ var Panel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
58
58
  prefix = _useClassNames.prefix,
59
59
  withClassPrefix = _useClassNames.withClassPrefix;
60
60
 
61
- var _useControlled = (0, _utils.useControlled)(expandedProp, defaultExpanded),
62
- expandedState = _useControlled[0],
63
- setExpanded = _useControlled[1];
64
-
65
61
  var _ref = (0, _react.useContext)(_PanelGroup.PanelGroupContext) || {},
66
62
  accordion = _ref.accordion,
67
63
  activeKey = _ref.activeKey,
68
64
  onGroupSelect = _ref.onGroupSelect;
69
65
 
66
+ var _useControlled = (0, _utils.useControlled)(expandedProp, defaultExpanded || typeof activeKey !== 'undefined' && activeKey === eventKey),
67
+ expandedState = _useControlled[0],
68
+ setExpanded = _useControlled[1];
69
+
70
70
  var collapsible = collapsibleProp;
71
71
  var headerRole = headerRoleProp;
72
72
  var expanded = expandedState;
73
73
 
74
74
  if (accordion) {
75
75
  collapsible = true;
76
- headerRole = 'button';
77
- expanded = typeof activeKey !== 'undefined' ? activeKey === eventKey : expanded;
76
+ headerRole = 'button'; // Collapses all inactive panels.
77
+
78
+ if (typeof activeKey !== 'undefined' && activeKey !== eventKey) {
79
+ expanded = false;
80
+ }
78
81
  }
79
82
 
80
83
  var handleSelect = (0, _react.useCallback)(function (event) {
@@ -101,7 +101,7 @@ export declare function useSearch(props: SearchProps): {
101
101
  filteredData: import("../CheckTreePicker/utils").TreeNodeType[];
102
102
  updateFilteredData: (nextData: ItemDataType[]) => void;
103
103
  setSearchKeyword: React.Dispatch<React.SetStateAction<string>>;
104
- checkShouldDisplay: (item: ItemDataType, keyword?: string | undefined) => boolean;
104
+ checkShouldDisplay: (item: ItemDataType, keyword?: string) => boolean;
105
105
  handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
106
106
  };
107
107
  interface PickerDependentParameters {
@@ -7,6 +7,8 @@ export interface PopoverProps extends WithAsProps {
7
7
  visible?: boolean;
8
8
  /** The content full the container */
9
9
  full?: boolean;
10
+ /** Whether show the arrow indicator */
11
+ arrow?: boolean;
10
12
  }
11
13
  declare const Popover: RsRefForwardingComponent<'div', PopoverProps>;
12
14
  export default Popover;
@@ -30,7 +30,9 @@ var Popover = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
30
30
  visible = props.visible,
31
31
  className = props.className,
32
32
  full = props.full,
33
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "title", "children", "style", "visible", "className", "full"]);
33
+ _props$arrow = props.arrow,
34
+ arrow = _props$arrow === void 0 ? true : _props$arrow,
35
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "title", "children", "style", "visible", "className", "full", "arrow"]);
34
36
 
35
37
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
36
38
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -50,7 +52,7 @@ var Popover = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
50
52
  ref: ref,
51
53
  className: classes,
52
54
  style: styles
53
- }), /*#__PURE__*/_react.default.createElement("div", {
55
+ }), arrow && /*#__PURE__*/_react.default.createElement("div", {
54
56
  className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["arrow"]))),
55
57
  "aria-hidden": true
56
58
  }), title && /*#__PURE__*/_react.default.createElement("h3", {
@@ -69,7 +71,8 @@ Popover.propTypes = {
69
71
  style: _propTypes.default.object,
70
72
  visible: _propTypes.default.bool,
71
73
  className: _propTypes.default.string,
72
- full: _propTypes.default.bool
74
+ full: _propTypes.default.bool,
75
+ arrow: _propTypes.default.bool
73
76
  };
74
77
  var _default = Popover;
75
78
  exports.default = _default;
@@ -50,7 +50,8 @@ var SidenavDropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (pro
50
50
 
51
51
  var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
52
52
  ref: ref,
53
- className: classes
53
+ className: classes,
54
+ tooltip: children
54
55
  }), children, !noCaret && /*#__PURE__*/_react.default.createElement(_ArrowDownLine.default, {
55
56
  className: prefix('caret')
56
57
  }));
@@ -14,6 +14,10 @@ export interface SidenavItemProps<T = any> extends WithAsProps, Omit<React.HTMLA
14
14
  onSelect?: (eventKey: T, event: React.MouseEvent) => void;
15
15
  divider?: boolean;
16
16
  panel?: boolean;
17
+ /**
18
+ * Content of the tooltip
19
+ */
20
+ tooltip?: React.ReactNode;
17
21
  }
18
22
  /**
19
23
  * @private