rsuite 5.13.0 → 5.15.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 (149) hide show
  1. package/Button/styles/index.less +1 -0
  2. package/CHANGELOG.md +45 -0
  3. package/Dropdown/styles/index.less +8 -3
  4. package/Grid/styles/index.less +42 -10
  5. package/Sidenav/styles/index.less +45 -11
  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 +8 -4
  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/Sidenav/SidenavToggle.d.ts +5 -1
  44. package/cjs/Sidenav/SidenavToggle.js +25 -9
  45. package/cjs/Toggle/Toggle.d.ts +1 -1
  46. package/cjs/Tooltip/Tooltip.d.ts +3 -1
  47. package/cjs/Tooltip/Tooltip.js +8 -3
  48. package/cjs/Whisper/Whisper.d.ts +3 -5
  49. package/cjs/Whisper/Whisper.js +6 -1
  50. package/cjs/Whisper/test/Whisper.test.d.ts +1 -0
  51. package/cjs/Whisper/test/Whisper.test.js +23 -0
  52. package/cjs/index.d.ts +3 -3
  53. package/cjs/index.js +3 -2
  54. package/cjs/toaster/ToastContainer.d.ts +1 -0
  55. package/cjs/toaster/ToastContainer.js +4 -1
  56. package/cjs/toaster/index.d.ts +1 -0
  57. package/cjs/toaster/index.js +4 -1
  58. package/cjs/toaster/toaster.d.ts +0 -1
  59. package/cjs/toaster/useToaster.d.ts +12 -0
  60. package/cjs/toaster/useToaster.js +43 -0
  61. package/cjs/utils/constants.d.ts +1 -0
  62. package/cjs/utils/constants.js +3 -1
  63. package/cjs/utils/stringToObject.d.ts +1 -1
  64. package/cjs/utils/tplTransform.d.ts +1 -1
  65. package/cjs/utils/treeUtils.d.ts +3 -3
  66. package/cjs/utils/treeUtils.js +8 -10
  67. package/cjs/utils/useCustom.d.ts +1 -1
  68. package/cjs/utils/useCustom.js +5 -3
  69. package/cjs/utils/useFocus.d.ts +1 -1
  70. package/dist/rsuite-rtl.css +741 -71
  71. package/dist/rsuite-rtl.min.css +1 -1
  72. package/dist/rsuite-rtl.min.css.map +1 -1
  73. package/dist/rsuite.css +741 -71
  74. package/dist/rsuite.js +92 -103
  75. package/dist/rsuite.js.map +1 -1
  76. package/dist/rsuite.min.css +1 -1
  77. package/dist/rsuite.min.css.map +1 -1
  78. package/dist/rsuite.min.js +1 -1
  79. package/dist/rsuite.min.js.map +1 -1
  80. package/esm/@types/common.d.ts +6 -0
  81. package/esm/Cascader/utils.d.ts +1 -1
  82. package/esm/Col/Col.d.ts +25 -5
  83. package/esm/Col/Col.js +10 -2
  84. package/esm/CustomProvider/CustomProvider.d.ts +20 -7
  85. package/esm/CustomProvider/CustomProvider.js +22 -3
  86. package/esm/Dropdown/useRenderDropdownItem.d.ts +1 -1
  87. package/esm/Form/Form.d.ts +8 -8
  88. package/esm/Form/test/Form.test.d.ts +1 -0
  89. package/esm/Form/test/Form.test.js +11 -0
  90. package/esm/Modal/test/Modal.test.d.ts +1 -0
  91. package/esm/Modal/test/Modal.test.js +9 -0
  92. package/esm/Modal/utils.d.ts +1 -1
  93. package/esm/Nav/NavDropdownMenu.d.ts +12 -1
  94. package/esm/Nav/NavDropdownMenu.js +8 -3
  95. package/esm/Nav/test/Nav.test.d.ts +1 -0
  96. package/esm/Nav/test/Nav.test.js +11 -0
  97. package/esm/Navbar/NavbarDropdownMenu.d.ts +12 -1
  98. package/esm/Navbar/NavbarDropdownMenu.js +8 -3
  99. package/esm/Overlay/Modal.d.ts +1 -4
  100. package/esm/Overlay/Overlay.d.ts +3 -1
  101. package/esm/Overlay/Overlay.js +6 -2
  102. package/esm/Overlay/OverlayTrigger.d.ts +8 -4
  103. package/esm/Overlay/OverlayTrigger.js +33 -5
  104. package/esm/Overlay/Position.d.ts +3 -1
  105. package/esm/Overlay/Position.js +12 -4
  106. package/esm/Overlay/positionUtils.d.ts +11 -4
  107. package/esm/Overlay/positionUtils.js +46 -2
  108. package/esm/Panel/Panel.js +9 -6
  109. package/esm/Picker/utils.d.ts +1 -1
  110. package/esm/Popover/Popover.d.ts +2 -0
  111. package/esm/Popover/Popover.js +6 -3
  112. package/esm/Sidenav/SidenavDropdownToggle.js +2 -1
  113. package/esm/Sidenav/SidenavItem.d.ts +4 -0
  114. package/esm/Sidenav/SidenavItem.js +38 -31
  115. package/esm/Sidenav/SidenavToggle.d.ts +5 -1
  116. package/esm/Sidenav/SidenavToggle.js +22 -9
  117. package/esm/Toggle/Toggle.d.ts +1 -1
  118. package/esm/Tooltip/Tooltip.d.ts +3 -1
  119. package/esm/Tooltip/Tooltip.js +8 -3
  120. package/esm/Whisper/Whisper.d.ts +3 -5
  121. package/esm/Whisper/Whisper.js +6 -1
  122. package/esm/Whisper/test/Whisper.test.d.ts +1 -0
  123. package/esm/Whisper/test/Whisper.test.js +16 -0
  124. package/esm/index.d.ts +3 -3
  125. package/esm/index.js +1 -1
  126. package/esm/toaster/ToastContainer.d.ts +1 -0
  127. package/esm/toaster/ToastContainer.js +1 -0
  128. package/esm/toaster/index.d.ts +1 -0
  129. package/esm/toaster/index.js +1 -0
  130. package/esm/toaster/toaster.d.ts +0 -1
  131. package/esm/toaster/useToaster.d.ts +12 -0
  132. package/esm/toaster/useToaster.js +34 -0
  133. package/esm/utils/constants.d.ts +1 -0
  134. package/esm/utils/constants.js +1 -0
  135. package/esm/utils/stringToObject.d.ts +1 -1
  136. package/esm/utils/tplTransform.d.ts +1 -1
  137. package/esm/utils/treeUtils.d.ts +3 -3
  138. package/esm/utils/treeUtils.js +8 -10
  139. package/esm/utils/useCustom.d.ts +1 -1
  140. package/esm/utils/useCustom.js +5 -3
  141. package/esm/utils/useFocus.d.ts +1 -1
  142. package/package.json +1 -1
  143. package/styles/color-modes/dark.less +223 -181
  144. package/styles/color-modes/high-contrast.less +221 -179
  145. package/styles/color-modes/light.less +47 -5
  146. package/styles/colors/dark.less +91 -91
  147. package/styles/colors/high-contrast.less +91 -91
  148. package/styles/variables.less +35 -12
  149. package/styles/color-modes/common.less +0 -44
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  import _isUndefined from "lodash/isUndefined";
4
- import React, { useRef, useEffect, useImperativeHandle, useCallback, useContext } from 'react';
4
+ import React, { useRef, useEffect, useImperativeHandle, useCallback, useContext, useState } from 'react';
5
5
  import get from 'lodash/get';
6
6
  import isNil from 'lodash/isNil';
7
7
  import contains from 'dom-lib/contains';
@@ -73,12 +73,15 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
73
73
  rootClose = _props$rootClose === void 0 ? true : _props$rootClose,
74
74
  onClick = props.onClick,
75
75
  onMouseOver = props.onMouseOver,
76
+ onMouseMove = props.onMouseMove,
76
77
  onMouseOut = props.onMouseOut,
77
78
  onContextMenu = props.onContextMenu,
78
79
  onFocus = props.onFocus,
79
80
  onBlur = props.onBlur,
80
81
  onClose = props.onClose,
81
- rest = _objectWithoutPropertiesLoose(props, ["children", "container", "controlId", "defaultOpen", "trigger", "disabled", "readOnly", "plaintext", "open", "delay", "delayOpen", "delayClose", "enterable", "placement", "speaker", "rootClose", "onClick", "onMouseOver", "onMouseOut", "onContextMenu", "onFocus", "onBlur", "onClose"]);
82
+ followCursor = props.followCursor,
83
+ onExited = props.onExited,
84
+ rest = _objectWithoutPropertiesLoose(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"]);
82
85
 
83
86
  var _usePortal = usePortal({
84
87
  container: container
@@ -90,7 +93,11 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
90
93
 
91
94
  var _useControlled = useControlled(openProp, defaultOpen),
92
95
  open = _useControlled[0],
93
- setOpen = _useControlled[1]; // Delay the timer to close/open the overlay
96
+ setOpen = _useControlled[1];
97
+
98
+ var _useState = useState(null),
99
+ cursorPosition = _useState[0],
100
+ setCursorPosition = _useState[1]; // Delay the timer to close/open the overlay
94
101
  // When the cursor moves from the trigger to the overlay, the overlay will be closed.
95
102
  // In order to keep the overlay open, a timer is used to delay the closing.
96
103
 
@@ -138,6 +145,9 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
138
145
 
139
146
  setOpen(false);
140
147
  }, [delayClose, setOpen]);
148
+ var handleExited = useCallback(function () {
149
+ setCursorPosition(null);
150
+ }, []);
141
151
  useImperativeHandle(ref, function () {
142
152
  return {
143
153
  get root() {
@@ -235,6 +245,16 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
235
245
  handleCloseWhenLeave();
236
246
  }
237
247
  }, [handleCloseWhenLeave, trigger]);
248
+ var handledMoveOverlay = useCallback(function (event) {
249
+ setCursorPosition(function () {
250
+ return {
251
+ top: event.pageY,
252
+ left: event.pageX,
253
+ clientTop: event.clientX,
254
+ clientLeft: event.clientY
255
+ };
256
+ });
257
+ }, [open]);
238
258
  var preventDefault = useCallback(function (event) {
239
259
  event.preventDefault();
240
260
  }, []);
@@ -244,7 +264,8 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
244
264
  onMouseOver: onMouseOver,
245
265
  onMouseOut: onMouseOut,
246
266
  onFocus: onFocus,
247
- onBlur: onBlur
267
+ onBlur: onBlur,
268
+ onMouseMove: onMouseMove
248
269
  };
249
270
 
250
271
  if (!disabled && !readOnly && !plaintext) {
@@ -282,6 +303,10 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
282
303
  triggerEvents.onFocus = createChainedFunction(handleDelayedOpen, onFocus);
283
304
  triggerEvents.onBlur = createChainedFunction(handleDelayedClose, onBlur);
284
305
  }
306
+
307
+ if (trigger !== 'none') {
308
+ triggerEvents.onMouseMove = createChainedFunction(handledMoveOverlay, onMouseMove);
309
+ }
285
310
  }
286
311
 
287
312
  var renderOverlay = function renderOverlay() {
@@ -289,6 +314,7 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
289
314
  rootClose: rootClose,
290
315
  triggerTarget: triggerRef,
291
316
  onClose: trigger !== 'none' ? createChainedFunction(handleClose, onClose) : undefined,
317
+ onExited: createChainedFunction(followCursor ? handleExited : undefined, onExited),
292
318
  placement: placement,
293
319
  container: container,
294
320
  open: open
@@ -307,7 +333,9 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
307
333
 
308
334
  return /*#__PURE__*/React.createElement(Overlay, _extends({}, overlayProps, {
309
335
  ref: overlayRef,
310
- childrenProps: speakerProps
336
+ childrenProps: speakerProps,
337
+ followCursor: followCursor,
338
+ cursorPosition: cursorPosition
311
339
  }), typeof speaker === 'function' ? function (props, ref) {
312
340
  return speaker(_extends({}, props, {
313
341
  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;
@@ -21,7 +21,9 @@ var usePosition = function usePosition(props, ref) {
21
21
  _props$containerPaddi = props.containerPadding,
22
22
  containerPadding = _props$containerPaddi === void 0 ? 0 : _props$containerPaddi,
23
23
  container = props.container,
24
- triggerTarget = props.triggerTarget;
24
+ triggerTarget = props.triggerTarget,
25
+ followCursor = props.followCursor,
26
+ cursorPosition = props.cursorPosition;
25
27
  var containerRef = useRef(null);
26
28
  var lastTargetRef = useRef(null);
27
29
  var overlayResizeObserver = useRef();
@@ -71,7 +73,7 @@ var usePosition = function usePosition(props, ref) {
71
73
 
72
74
  var overlay = getDOMNode(ref.current);
73
75
  var containerElement = getContainer(typeof container === 'function' ? container() : container !== null && container !== void 0 ? container : null, ownerDocument(ref.current).body);
74
- var posi = utils.calcOverlayPosition(overlay, targetElement, containerElement);
76
+ var posi = utils.calcOverlayPosition(overlay, targetElement, containerElement, followCursor ? cursorPosition : undefined);
75
77
 
76
78
  if (forceUpdateDOM && overlay) {
77
79
  var _overlay$className, _overlay$className$ma;
@@ -93,7 +95,7 @@ var usePosition = function usePosition(props, ref) {
93
95
 
94
96
  containerRef.current = containerElement;
95
97
  lastTargetRef.current = targetElement;
96
- }, [container, ref, triggerTarget, utils]);
98
+ }, [container, ref, triggerTarget, utils, followCursor, cursorPosition]);
97
99
  useEffect(function () {
98
100
  updatePosition(false);
99
101
  var overlay = getDOMNode(ref.current);
@@ -138,7 +140,9 @@ var usePosition = function usePosition(props, ref) {
138
140
 
139
141
  var Position = /*#__PURE__*/React.forwardRef(function (props, ref) {
140
142
  var children = props.children,
141
- className = props.className;
143
+ className = props.className,
144
+ followCursor = props.followCursor,
145
+ cursorPosition = props.cursorPosition;
142
146
  var childRef = React.useRef(null);
143
147
 
144
148
  var _usePosition = usePosition(props, childRef),
@@ -159,6 +163,10 @@ var Position = /*#__PURE__*/React.forwardRef(function (props, ref) {
159
163
  updatePosition: updatePosition
160
164
  };
161
165
  });
166
+ useEffect(function () {
167
+ if (!followCursor || !cursorPosition) return;
168
+ updatePosition();
169
+ }, [followCursor, cursorPosition, updatePosition]);
162
170
 
163
171
  if (typeof children === 'function') {
164
172
  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;
@@ -6,6 +6,8 @@ import getOffset from 'dom-lib/getOffset';
6
6
  import scrollTop from 'dom-lib/scrollTop';
7
7
  import scrollLeft from 'dom-lib/scrollLeft';
8
8
  import _getPosition from 'dom-lib/getPosition';
9
+ import getStyle from 'dom-lib/getStyle';
10
+ import nodeName from 'dom-lib/nodeName';
9
11
  export var AutoPlacement = {
10
12
  left: 'Start',
11
13
  right: 'End',
@@ -130,6 +132,48 @@ export default (function (props) {
130
132
  var offset = container.tagName === 'BODY' ? getOffset(target) : _getPosition(target, container, false);
131
133
  return offset;
132
134
  },
135
+ getCursorOffsetPosition: function getCursorOffsetPosition(target, container, cursorPosition) {
136
+ var left = cursorPosition.left,
137
+ top = cursorPosition.top,
138
+ clientLeft = cursorPosition.clientLeft,
139
+ clientTop = cursorPosition.clientTop;
140
+ var offset = {
141
+ left: left,
142
+ top: top,
143
+ width: 10,
144
+ height: 10
145
+ };
146
+
147
+ if (getStyle(target, 'position') === 'fixed') {
148
+ offset.left = clientLeft;
149
+ offset.top = clientTop;
150
+ return offset;
151
+ }
152
+
153
+ if (container.tagName === 'BODY') {
154
+ return offset;
155
+ }
156
+
157
+ var containerOffset = {
158
+ top: 0,
159
+ left: 0
160
+ };
161
+
162
+ if (nodeName(container) !== 'html') {
163
+ var nextParentOffset = getOffset(container);
164
+
165
+ if (nextParentOffset) {
166
+ containerOffset.top = nextParentOffset.top;
167
+ containerOffset.left = nextParentOffset.left;
168
+ }
169
+ }
170
+
171
+ containerOffset.top += parseInt(getStyle(container, 'borderTopWidth'), 10) - scrollTop(container) || 0;
172
+ containerOffset.left += parseInt(getStyle(container, 'borderLeftWidth'), 10) - scrollLeft(container) || 0;
173
+ offset.left = left - containerOffset.left;
174
+ offset.top = top - containerOffset.top;
175
+ return offset;
176
+ },
133
177
  calcAutoPlacement: function calcAutoPlacement(targetOffset, container, overlay) {
134
178
  var _getContainerDimensio3 = getContainerDimensions(container),
135
179
  width = _getContainerDimensio3.width,
@@ -194,8 +238,8 @@ export default (function (props) {
194
238
  return "" + direction.key + AutoPlacement[align.key];
195
239
  },
196
240
  // Calculate the position of the overlay
197
- calcOverlayPosition: function calcOverlayPosition(overlayNode, target, container) {
198
- var childOffset = this.getPosition(target, container);
241
+ calcOverlayPosition: function calcOverlayPosition(overlayNode, target, container, cursorPosition) {
242
+ var childOffset = cursorPosition ? this.getCursorOffsetPosition(target, container, cursorPosition) : this.getPosition(target, container);
199
243
 
200
244
  var _ref2 = getOffset(overlayNode),
201
245
  overlayHeight = _ref2.height,
@@ -40,23 +40,26 @@ var Panel = /*#__PURE__*/React.forwardRef(function (props, ref) {
40
40
  prefix = _useClassNames.prefix,
41
41
  withClassPrefix = _useClassNames.withClassPrefix;
42
42
 
43
- var _useControlled = useControlled(expandedProp, defaultExpanded),
44
- expandedState = _useControlled[0],
45
- setExpanded = _useControlled[1];
46
-
47
43
  var _ref = useContext(PanelGroupContext) || {},
48
44
  accordion = _ref.accordion,
49
45
  activeKey = _ref.activeKey,
50
46
  onGroupSelect = _ref.onGroupSelect;
51
47
 
48
+ var _useControlled = useControlled(expandedProp, defaultExpanded || typeof activeKey !== 'undefined' && activeKey === eventKey),
49
+ expandedState = _useControlled[0],
50
+ setExpanded = _useControlled[1];
51
+
52
52
  var collapsible = collapsibleProp;
53
53
  var headerRole = headerRoleProp;
54
54
  var expanded = expandedState;
55
55
 
56
56
  if (accordion) {
57
57
  collapsible = true;
58
- headerRole = 'button';
59
- expanded = typeof activeKey !== 'undefined' ? activeKey === eventKey : expanded;
58
+ headerRole = 'button'; // Collapses all inactive panels.
59
+
60
+ if (typeof activeKey !== 'undefined' && activeKey !== eventKey) {
61
+ expanded = false;
62
+ }
60
63
  }
61
64
 
62
65
  var handleSelect = 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;
@@ -18,7 +18,9 @@ var Popover = /*#__PURE__*/React.forwardRef(function (props, ref) {
18
18
  visible = props.visible,
19
19
  className = props.className,
20
20
  full = props.full,
21
- rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "title", "children", "style", "visible", "className", "full"]);
21
+ _props$arrow = props.arrow,
22
+ arrow = _props$arrow === void 0 ? true : _props$arrow,
23
+ rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "title", "children", "style", "visible", "className", "full", "arrow"]);
22
24
 
23
25
  var _useClassNames = useClassNames(classPrefix),
24
26
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -40,7 +42,7 @@ var Popover = /*#__PURE__*/React.forwardRef(function (props, ref) {
40
42
  ref: ref,
41
43
  className: classes,
42
44
  style: styles
43
- }), /*#__PURE__*/React.createElement("div", {
45
+ }), arrow && /*#__PURE__*/React.createElement("div", {
44
46
  className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["arrow"]))),
45
47
  "aria-hidden": true
46
48
  }), title && /*#__PURE__*/React.createElement("h3", {
@@ -58,6 +60,7 @@ Popover.propTypes = {
58
60
  style: PropTypes.object,
59
61
  visible: PropTypes.bool,
60
62
  className: PropTypes.string,
61
- full: PropTypes.bool
63
+ full: PropTypes.bool,
64
+ arrow: PropTypes.bool
62
65
  };
63
66
  export default Popover;
@@ -36,7 +36,8 @@ var SidenavDropdownToggle = /*#__PURE__*/React.forwardRef(function (props, ref)
36
36
  }));
37
37
  var toggle = /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
38
38
  ref: ref,
39
- className: classes
39
+ className: classes,
40
+ tooltip: children
40
41
  }), children, !noCaret && /*#__PURE__*/React.createElement(ArrowDownLineIcon, {
41
42
  className: prefix('caret')
42
43
  }));
@@ -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
@@ -3,13 +3,15 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
3
3
  import React, { useContext, useCallback } from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import isNil from 'lodash/isNil';
6
- import { useClassNames, shallowEqual, mergeRefs, appendTooltip } from '../utils';
6
+ import { useClassNames, shallowEqual, mergeRefs, createChainedFunction } from '../utils';
7
7
  import Ripple from '../Ripple';
8
8
  import SafeAnchor from '../SafeAnchor';
9
9
  import NavContext from '../Nav/NavContext';
10
10
  import MenuItem from '../Menu/MenuItem';
11
11
  import omit from 'lodash/omit';
12
12
  import { SidenavContext } from './Sidenav';
13
+ import Whisper from '../Whisper';
14
+ import Tooltip from '../Tooltip';
13
15
 
14
16
  /**
15
17
  * @private
@@ -24,7 +26,7 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
24
26
  var _props$as = props.as,
25
27
  Component = _props$as === void 0 ? SafeAnchor : _props$as,
26
28
  activeProp = props.active,
27
- _children = props.children,
29
+ children = props.children,
28
30
  className = props.className,
29
31
  disabled = props.disabled,
30
32
  _props$classPrefix = props.classPrefix,
@@ -36,7 +38,9 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
36
38
  onSelect = props.onSelect,
37
39
  divider = props.divider,
38
40
  panel = props.panel,
39
- rest = _objectWithoutPropertiesLoose(props, ["as", "active", "children", "className", "disabled", "classPrefix", "icon", "eventKey", "style", "onClick", "onSelect", "divider", "panel"]);
41
+ _props$tooltip = props.tooltip,
42
+ tooltip = _props$tooltip === void 0 ? children : _props$tooltip,
43
+ rest = _objectWithoutPropertiesLoose(props, ["as", "active", "children", "className", "disabled", "classPrefix", "icon", "eventKey", "style", "onClick", "onSelect", "divider", "panel", "tooltip"]);
40
44
 
41
45
  var _ref = useContext(NavContext),
42
46
  activeKey = _ref.activeKey,
@@ -56,34 +60,37 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
56
60
  }, [disabled, onSelect, onSelectFromNav, eventKey, onClick]);
57
61
 
58
62
  if (!sidenav.expanded) {
59
- return /*#__PURE__*/React.createElement(MenuItem, {
60
- selected: selected,
61
- disabled: disabled,
62
- onActivate: handleClick
63
- }, function (_ref2, menuitemRef) {
64
- var selected = _ref2.selected,
65
- active = _ref2.active,
66
- menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
63
+ return /*#__PURE__*/React.createElement(Whisper, {
64
+ trigger: "hover",
65
+ speaker: /*#__PURE__*/React.createElement(Tooltip, null, tooltip),
66
+ placement: "right"
67
+ }, function (triggerProps, triggerRef) {
68
+ return /*#__PURE__*/React.createElement(MenuItem, {
69
+ selected: selected,
70
+ disabled: disabled,
71
+ onActivate: handleClick
72
+ }, function (_ref2, menuitemRef) {
73
+ var selected = _ref2.selected,
74
+ active = _ref2.active,
75
+ menuitem = _objectWithoutPropertiesLoose(_ref2, ["selected", "active"]);
67
76
 
68
- var classes = merge(className, withClassPrefix({
69
- focus: active,
70
- active: selected,
71
- disabled: disabled
72
- })); // Show tooltip when inside a collapse <Sidenav>
77
+ var classes = merge(className, withClassPrefix({
78
+ focus: active,
79
+ active: selected,
80
+ disabled: disabled
81
+ })); // Show tooltip when inside a collapse <Sidenav>
73
82
 
74
- return appendTooltip({
75
- children: function children(triggerProps, triggerRef) {
76
- return /*#__PURE__*/React.createElement(Component, _extends({
77
- ref: mergeRefs(mergeRefs(ref, menuitemRef), triggerRef),
78
- disabled: Component === SafeAnchor ? disabled : undefined,
79
- className: classes,
80
- "data-event-key": eventKey
81
- }, omit(rest, ['divider', 'panel']), triggerProps, menuitem), icon && /*#__PURE__*/React.cloneElement(icon, {
82
- className: prefix('icon')
83
- }), _children, /*#__PURE__*/React.createElement(Ripple, null));
84
- },
85
- message: _children,
86
- placement: 'right'
83
+ return /*#__PURE__*/React.createElement(Component, _extends({
84
+ ref: mergeRefs(mergeRefs(ref, menuitemRef), triggerRef),
85
+ disabled: Component === SafeAnchor ? disabled : undefined,
86
+ className: classes,
87
+ "data-event-key": eventKey
88
+ }, omit(rest, ['divider', 'panel']), triggerProps, menuitem, {
89
+ onMouseOver: createChainedFunction(menuitem.onMouseOver, triggerProps.onMouseOver),
90
+ onMouseOut: createChainedFunction(menuitem.onMouseOut, triggerProps.onMouseOut)
91
+ }), icon && /*#__PURE__*/React.cloneElement(icon, {
92
+ className: prefix('icon')
93
+ }), children, /*#__PURE__*/React.createElement(Ripple, null));
87
94
  });
88
95
  });
89
96
  }
@@ -103,7 +110,7 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
103
110
  role: "none presentation",
104
111
  style: style,
105
112
  className: merge(className, prefix('panel'))
106
- }, rest), _children);
113
+ }, rest), children);
107
114
  }
108
115
 
109
116
  return /*#__PURE__*/React.createElement(Component, _extends({
@@ -118,7 +125,7 @@ var SidenavItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
118
125
  "data-event-key": eventKey
119
126
  }, rest), icon && /*#__PURE__*/React.cloneElement(icon, {
120
127
  className: prefix('icon')
121
- }), _children, /*#__PURE__*/React.createElement(Ripple, null));
128
+ }), children, /*#__PURE__*/React.createElement(Ripple, null));
122
129
  });
123
130
  SidenavItem.displayName = 'Sidenav.Item';
124
131
  SidenavItem.propTypes = {
@@ -1,7 +1,11 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
3
  export interface SidenavToggleProps extends WithAsProps {
4
- /** Expand then nav */
4
+ /**
5
+ * Expand then nav
6
+ *
7
+ * @deprecated Use <Sidenav expanded> instead.
8
+ */
5
9
  expanded?: boolean;
6
10
  /** Callback function for menu state switching */
7
11
  onToggle?: (expanded: boolean, event: React.MouseEvent) => void;
@@ -1,29 +1,41 @@
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 IconButton from '../IconButton';
6
6
  import { useClassNames } from '../utils';
7
7
  import AngleLeft from '@rsuite/icons/legacy/AngleLeft';
8
8
  import AngleRight from '@rsuite/icons/legacy/AngleRight';
9
+ import deprecatePropType from '../utils/deprecatePropType';
10
+ import { SidenavContext } from './Sidenav';
9
11
  var SidenavToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
12
+ var sidenav = useContext(SidenavContext);
13
+
14
+ if (!sidenav) {
15
+ throw new Error('<Sidenav.Toggle> must be rendered within a <Sidenav>');
16
+ }
17
+
10
18
  var _props$as = props.as,
11
19
  Component = _props$as === void 0 ? 'div' : _props$as,
12
- expanded = props.expanded,
20
+ DEPRECATED_expanded = props.expanded,
13
21
  className = props.className,
14
22
  _props$classPrefix = props.classPrefix,
15
23
  classPrefix = _props$classPrefix === void 0 ? 'sidenav-toggle' : _props$classPrefix,
16
24
  onToggle = props.onToggle,
17
- rest = _objectWithoutPropertiesLoose(props, ["as", "expanded", "className", "classPrefix", "onToggle"]);
25
+ rest = _objectWithoutPropertiesLoose(props, ["as", "expanded", "className", "classPrefix", "onToggle"]); // if `expanded` prop is provided, it takes priority
26
+
27
+
28
+ var expanded = DEPRECATED_expanded !== null && DEPRECATED_expanded !== void 0 ? DEPRECATED_expanded : sidenav.expanded;
18
29
 
19
30
  var _useClassNames = useClassNames(classPrefix),
20
31
  merge = _useClassNames.merge,
21
- withClassPrefix = _useClassNames.withClassPrefix;
32
+ withClassPrefix = _useClassNames.withClassPrefix,
33
+ prefix = _useClassNames.prefix;
22
34
 
23
35
  var classes = merge(className, withClassPrefix({
24
36
  collapsed: !expanded
25
37
  }));
26
- var Icon = expanded ? AngleRight : AngleLeft;
38
+ var Icon = expanded ? AngleLeft : AngleRight;
27
39
 
28
40
  var handleToggle = function handleToggle(event) {
29
41
  onToggle === null || onToggle === void 0 ? void 0 : onToggle(!expanded, event);
@@ -33,16 +45,17 @@ var SidenavToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
33
45
  ref: ref,
34
46
  className: classes
35
47
  }), /*#__PURE__*/React.createElement(IconButton, {
36
- appearance: "default",
37
48
  icon: /*#__PURE__*/React.createElement(Icon, null),
38
- onClick: handleToggle
49
+ className: prefix('button'),
50
+ onClick: handleToggle,
51
+ "aria-label": expanded ? 'Collapse' : 'Expand'
39
52
  }));
40
53
  });
41
- SidenavToggle.displayName = 'SidenavToggle';
54
+ SidenavToggle.displayName = 'Sidenav.Toggle';
42
55
  SidenavToggle.propTypes = {
43
56
  classPrefix: PropTypes.string,
44
57
  className: PropTypes.string,
45
- expanded: PropTypes.bool,
58
+ expanded: deprecatePropType(PropTypes.bool, 'Use <Sidenav expanded> instead.'),
46
59
  onToggle: PropTypes.func
47
60
  };
48
61
  export default SidenavToggle;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { WithAsProps, TypeAttributes, RsRefForwardingComponent } from '../@types/common';
3
3
  import { ToggleLocale } from '../locales';
4
4
  export interface ToggleProps extends WithAsProps {
5
- /** Wheather to disabled toggle */
5
+ /** Whether to disabled toggle */
6
6
  disabled?: boolean;
7
7
  /** Render the control as plain text */
8
8
  plaintext?: boolean;
@@ -3,10 +3,12 @@ import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types
3
3
  export interface TooltipProps extends WithAsProps {
4
4
  /** Dispaly placement */
5
5
  placement?: TypeAttributes.Placement;
6
- /** Wheather visible */
6
+ /** Whether visible */
7
7
  visible?: boolean;
8
8
  /** Primary content */
9
9
  children?: React.ReactNode;
10
+ /** Whether show the arrow indicator */
11
+ arrow?: boolean;
10
12
  }
11
13
  declare const Tooltip: RsRefForwardingComponent<'div', TooltipProps>;
12
14
  export default Tooltip;
@@ -12,13 +12,17 @@ var Tooltip = /*#__PURE__*/React.forwardRef(function (props, ref) {
12
12
  children = props.children,
13
13
  style = props.style,
14
14
  visible = props.visible,
15
- rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "children", "style", "visible"]);
15
+ _props$arrow = props.arrow,
16
+ arrow = _props$arrow === void 0 ? true : _props$arrow,
17
+ rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "children", "style", "visible", "arrow"]);
16
18
 
17
19
  var _useClassNames = useClassNames(classPrefix),
18
20
  merge = _useClassNames.merge,
19
21
  withClassPrefix = _useClassNames.withClassPrefix;
20
22
 
21
- var classes = merge(className, withClassPrefix());
23
+ var classes = merge(className, withClassPrefix({
24
+ arrow: arrow
25
+ }));
22
26
 
23
27
  var styles = _extends({
24
28
  opacity: visible ? 1 : undefined
@@ -38,6 +42,7 @@ Tooltip.propTypes = {
38
42
  classPrefix: PropTypes.string,
39
43
  className: PropTypes.string,
40
44
  style: PropTypes.object,
41
- children: PropTypes.node
45
+ children: PropTypes.node,
46
+ arrow: PropTypes.bool
42
47
  };
43
48
  export default Tooltip;
@@ -1,9 +1,7 @@
1
1
  import React from 'react';
2
+ import { OverlayTriggerInstance } from '../Overlay/OverlayTrigger';
2
3
  import { OverlayTriggerProps } from '../Overlay/OverlayTrigger';
3
4
  export declare type WhisperProps = OverlayTriggerProps;
4
- export interface WhisperInstance extends React.Component<WhisperProps> {
5
- open: (delay?: number) => void;
6
- close: (delay?: number) => void;
7
- }
8
- declare const Whisper: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<unknown>>;
5
+ export declare type WhisperInstance = OverlayTriggerInstance;
6
+ declare const Whisper: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerInstance>>;
9
7
  export default Whisper;