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
@@ -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 = {
@@ -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;
@@ -71,6 +71,8 @@ export interface UploaderProps extends WithAsProps {
71
71
  draggable?: boolean;
72
72
  /** Custom locale */
73
73
  locale?: UploaderLocale;
74
+ /** The http method of upload request */
75
+ method?: string;
74
76
  /** Allow the queue to be updated. After you select a file, update the checksum function before the upload file queue, and return false to not update */
75
77
  shouldQueueUpdate?: (fileList: FileType[], newFile: FileType[] | FileType) => boolean | Promise<boolean>;
76
78
  /** Allow uploading of files. Check function before file upload, return false without uploading */
@@ -123,6 +123,8 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
123
123
  removable = _props$removable === void 0 ? true : _props$removable,
124
124
  disabledFileItem = props.disabledFileItem,
125
125
  maxPreviewFileSize = props.maxPreviewFileSize,
126
+ _props$method = props.method,
127
+ method = _props$method === void 0 ? 'POST' : _props$method,
126
128
  _props$autoUpload = props.autoUpload,
127
129
  autoUpload = _props$autoUpload === void 0 ? true : _props$autoUpload,
128
130
  action = props.action,
@@ -146,7 +148,7 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
146
148
  onError = props.onError,
147
149
  onProgress = props.onProgress,
148
150
  onReupload = props.onReupload,
149
- rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "listType", "defaultFileList", "fileList", "fileListVisible", "locale", "style", "draggable", "name", "multiple", "disabled", "readOnly", "plaintext", "accept", "children", "toggleAs", "removable", "disabledFileItem", "maxPreviewFileSize", "autoUpload", "action", "headers", "withCredentials", "disableMultipart", "timeout", "data", "onRemove", "onUpload", "shouldUpload", "shouldQueueUpdate", "renderFileInfo", "renderThumbnail", "onPreview", "onChange", "onSuccess", "onError", "onProgress", "onReupload"]);
151
+ rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "listType", "defaultFileList", "fileList", "fileListVisible", "locale", "style", "draggable", "name", "multiple", "disabled", "readOnly", "plaintext", "accept", "children", "toggleAs", "removable", "disabledFileItem", "maxPreviewFileSize", "method", "autoUpload", "action", "headers", "withCredentials", "disableMultipart", "timeout", "data", "onRemove", "onUpload", "shouldUpload", "shouldQueueUpdate", "renderFileInfo", "renderThumbnail", "onPreview", "onChange", "onSuccess", "onError", "onProgress", "onReupload"]);
150
152
 
151
153
  var _useClassNames = useClassNames(classPrefix),
152
154
  merge = _useClassNames.merge,
@@ -253,6 +255,7 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
253
255
  timeout: timeout,
254
256
  headers: headers,
255
257
  data: data,
258
+ method: method,
256
259
  withCredentials: withCredentials,
257
260
  disableMultipart: disableMultipart,
258
261
  file: file.blobFile,
@@ -273,7 +276,7 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
273
276
  }
274
277
 
275
278
  onUpload === null || onUpload === void 0 ? void 0 : onUpload(file, uploadData, xhr);
276
- }, [action, data, handleAjaxUploadError, handleAjaxUploadProgress, handleAjaxUploadSuccess, headers, name, onUpload, timeout, updateFileStatus, withCredentials, disableMultipart]);
279
+ }, [name, timeout, headers, data, method, withCredentials, disableMultipart, action, handleAjaxUploadError, handleAjaxUploadSuccess, handleAjaxUploadProgress, updateFileStatus, onUpload]);
277
280
  var handleAjaxUpload = useCallback(function () {
278
281
  fileList.current.forEach(function (file) {
279
282
  var checkState = shouldUpload === null || shouldUpload === void 0 ? void 0 : shouldUpload(file);
@@ -466,6 +469,7 @@ Uploader.propTypes = {
466
469
  onProgress: PropTypes.func,
467
470
  onRemove: PropTypes.func,
468
471
  maxPreviewFileSize: PropTypes.number,
472
+ method: PropTypes.string,
469
473
  style: PropTypes.object,
470
474
  renderFileInfo: PropTypes.func,
471
475
  renderThumbnail: PropTypes.func,
@@ -36,6 +36,11 @@ Whisper.propTypes = {
36
36
  /**
37
37
  * Prevent floating element overflow
38
38
  */
39
- preventOverflow: PropTypes.bool
39
+ preventOverflow: PropTypes.bool,
40
+
41
+ /**
42
+ * Whether enable speaker follow cursor
43
+ */
44
+ followCursor: PropTypes.bool
40
45
  };
41
46
  export default Whisper;
package/esm/index.d.ts CHANGED
@@ -32,7 +32,7 @@ export { default as Avatar } from './Avatar';
32
32
  export type { AvatarProps } from './Avatar';
33
33
  export { default as AvatarGroup } from './AvatarGroup';
34
34
  export type { AvatarGroupProps } from './AvatarGroup';
35
- export { default as toaster } from './toaster';
35
+ export { default as toaster, useToaster } from './toaster';
36
36
  export type { Toaster } from './toaster';
37
37
  export { default as Dropdown } from './Dropdown';
38
38
  export type { DropdownProps, DropdownMenuItemProps, DropdownMenuProps } from './Dropdown';
@@ -51,7 +51,7 @@ export type { StepsProps, StepItemProps } from './Steps';
51
51
  export { default as Toggle } from './Toggle';
52
52
  export type { ToggleProps } from './Toggle';
53
53
  export { default as Form, useFormClassNames } from './Form';
54
- export type { FormProps, FormGroupProps, FormErrorMessageProps, FormControlLabelProps, FormHelpTextProps, FormControlProps } from './Form';
54
+ export type { FormProps, FormInstance, FormGroupProps, FormErrorMessageProps, FormControlLabelProps, FormHelpTextProps, FormControlProps } from './Form';
55
55
  export { default as Input } from './Input';
56
56
  export type { InputProps } from './Input';
57
57
  export { default as MaskedInput } from './MaskedInput';
package/esm/index.js CHANGED
@@ -16,7 +16,7 @@ export { default as Placeholder } from './Placeholder';
16
16
  export { default as Badge } from './Badge';
17
17
  export { default as Avatar } from './Avatar';
18
18
  export { default as AvatarGroup } from './AvatarGroup';
19
- export { default as toaster } from './toaster';
19
+ export { default as toaster, useToaster } from './toaster';
20
20
  // Nav
21
21
  export { default as Dropdown } from './Dropdown';
22
22
  export { default as Nav } from './Nav';