rsuite 5.12.0 → 5.14.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 (264) hide show
  1. package/Button/styles/index.less +1 -0
  2. package/CHANGELOG.md +49 -0
  3. package/Dropdown/styles/index.less +8 -3
  4. package/Grid/styles/index.less +42 -10
  5. package/Nav/styles/index.less +7 -1
  6. package/Navbar/styles/index.less +6 -1
  7. package/Sidenav/styles/index.less +52 -16
  8. package/Table/styles/index.less +0 -2
  9. package/Tooltip/styles/index.less +4 -4
  10. package/cjs/@types/common.d.ts +6 -0
  11. package/cjs/Cascader/DropdownMenu.js +8 -3
  12. package/cjs/Cascader/utils.d.ts +1 -1
  13. package/cjs/Col/Col.d.ts +25 -5
  14. package/cjs/Col/Col.js +9 -1
  15. package/cjs/CustomProvider/CustomProvider.d.ts +20 -7
  16. package/cjs/CustomProvider/CustomProvider.js +24 -3
  17. package/cjs/Disclosure/Disclosure.d.ts +1 -1
  18. package/cjs/Disclosure/DisclosureContext.d.ts +1 -1
  19. package/cjs/Dropdown/Dropdown.js +26 -110
  20. package/cjs/Dropdown/DropdownItem.js +14 -58
  21. package/cjs/Dropdown/DropdownMenu.js +32 -76
  22. package/cjs/Dropdown/DropdownToggle.js +4 -17
  23. package/cjs/Dropdown/useRenderDropdownItem.d.ts +1 -1
  24. package/cjs/Form/Form.d.ts +8 -8
  25. package/cjs/Form/test/Form.test.d.ts +1 -0
  26. package/cjs/Form/test/Form.test.js +18 -0
  27. package/cjs/Menu/Menu.d.ts +1 -0
  28. package/cjs/Menu/Menu.js +1 -0
  29. package/cjs/Menu/MenuItem.d.ts +1 -0
  30. package/cjs/Menu/MenuItem.js +1 -0
  31. package/cjs/Menu/Menubar.d.ts +3 -0
  32. package/cjs/Menu/Menubar.js +4 -0
  33. package/cjs/Modal/test/Modal.test.d.ts +1 -0
  34. package/cjs/Modal/test/Modal.test.js +14 -0
  35. package/cjs/Modal/utils.d.ts +1 -1
  36. package/cjs/Nav/Nav.d.ts +7 -2
  37. package/cjs/Nav/Nav.js +105 -5
  38. package/cjs/Nav/NavContext.d.ts +2 -8
  39. package/cjs/Nav/NavContext.js +1 -7
  40. package/cjs/Nav/NavDropdown.d.ts +71 -0
  41. package/cjs/Nav/NavDropdown.js +193 -0
  42. package/cjs/Nav/NavDropdownItem.d.ts +39 -0
  43. package/cjs/Nav/NavDropdownItem.js +141 -0
  44. package/cjs/Nav/NavDropdownMenu.d.ts +37 -0
  45. package/cjs/Nav/NavDropdownMenu.js +162 -0
  46. package/cjs/Nav/NavDropdownToggle.d.ts +21 -0
  47. package/cjs/Nav/NavDropdownToggle.js +74 -0
  48. package/cjs/Nav/NavItem.d.ts +2 -0
  49. package/cjs/Nav/NavItem.js +13 -26
  50. package/cjs/Nav/NavMenu.d.ts +38 -0
  51. package/cjs/Nav/NavMenu.js +122 -0
  52. package/cjs/Nav/test/Nav.test.d.ts +1 -0
  53. package/cjs/Nav/test/Nav.test.js +17 -0
  54. package/cjs/Navbar/NavbarDropdown.d.ts +57 -0
  55. package/cjs/Navbar/NavbarDropdown.js +147 -0
  56. package/cjs/Navbar/NavbarDropdownItem.d.ts +41 -0
  57. package/cjs/Navbar/NavbarDropdownItem.js +149 -0
  58. package/cjs/Navbar/NavbarDropdownMenu.d.ts +48 -0
  59. package/cjs/Navbar/NavbarDropdownMenu.js +161 -0
  60. package/cjs/Navbar/NavbarDropdownToggle.d.ts +19 -0
  61. package/cjs/Navbar/NavbarDropdownToggle.js +72 -0
  62. package/cjs/Navbar/NavbarItem.d.ts +5 -2
  63. package/cjs/Navbar/NavbarItem.js +10 -4
  64. package/cjs/Overlay/Modal.d.ts +1 -4
  65. package/cjs/Overlay/Overlay.d.ts +3 -1
  66. package/cjs/Overlay/Overlay.js +6 -2
  67. package/cjs/Overlay/OverlayTrigger.d.ts +8 -4
  68. package/cjs/Overlay/OverlayTrigger.js +32 -4
  69. package/cjs/Overlay/Position.d.ts +3 -1
  70. package/cjs/Overlay/Position.js +12 -4
  71. package/cjs/Overlay/positionUtils.d.ts +11 -4
  72. package/cjs/Overlay/positionUtils.js +48 -2
  73. package/cjs/Panel/Panel.js +9 -6
  74. package/cjs/Picker/utils.d.ts +1 -1
  75. package/cjs/Picker/utils.js +22 -15
  76. package/cjs/Popover/Popover.d.ts +2 -0
  77. package/cjs/Popover/Popover.js +6 -3
  78. package/cjs/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  79. package/cjs/Sidenav/ExpandedSidenavDropdown.js +166 -0
  80. package/cjs/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  81. package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +141 -0
  82. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  83. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +145 -0
  84. package/cjs/Sidenav/Sidenav.d.ts +8 -2
  85. package/cjs/Sidenav/Sidenav.js +1 -2
  86. package/cjs/Sidenav/SidenavDropdown.d.ts +30 -8
  87. package/cjs/Sidenav/SidenavDropdown.js +144 -73
  88. package/cjs/Sidenav/SidenavDropdownItem.d.ts +22 -5
  89. package/cjs/Sidenav/SidenavDropdownItem.js +88 -72
  90. package/cjs/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  91. package/cjs/Sidenav/SidenavDropdownMenu.js +122 -90
  92. package/cjs/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  93. package/cjs/Sidenav/SidenavDropdownToggle.js +73 -0
  94. package/cjs/Sidenav/SidenavItem.d.ts +7 -0
  95. package/cjs/Sidenav/SidenavItem.js +54 -37
  96. package/cjs/Sidenav/SidenavToggle.d.ts +5 -1
  97. package/cjs/Sidenav/SidenavToggle.js +25 -9
  98. package/cjs/Toggle/Toggle.d.ts +1 -1
  99. package/cjs/Tooltip/Tooltip.d.ts +3 -1
  100. package/cjs/Tooltip/Tooltip.js +8 -3
  101. package/cjs/Whisper/Whisper.d.ts +3 -5
  102. package/cjs/Whisper/Whisper.js +6 -1
  103. package/cjs/Whisper/test/Whisper.test.d.ts +1 -0
  104. package/cjs/Whisper/test/Whisper.test.js +23 -0
  105. package/cjs/index.d.ts +3 -3
  106. package/cjs/index.js +3 -2
  107. package/cjs/toaster/ToastContainer.d.ts +1 -0
  108. package/cjs/toaster/ToastContainer.js +4 -1
  109. package/cjs/toaster/index.d.ts +1 -0
  110. package/cjs/toaster/index.js +4 -1
  111. package/cjs/toaster/toaster.d.ts +0 -1
  112. package/cjs/toaster/useToaster.d.ts +12 -0
  113. package/cjs/toaster/useToaster.js +43 -0
  114. package/cjs/utils/constants.d.ts +1 -0
  115. package/cjs/utils/constants.js +3 -1
  116. package/cjs/utils/deprecateComponent.js +4 -6
  117. package/cjs/utils/deprecatePropType.d.ts +1 -5
  118. package/cjs/utils/deprecatePropType.js +7 -14
  119. package/cjs/utils/stringToObject.d.ts +1 -1
  120. package/cjs/utils/tplTransform.d.ts +1 -1
  121. package/cjs/utils/treeUtils.d.ts +3 -3
  122. package/cjs/utils/treeUtils.js +8 -10
  123. package/cjs/utils/useCustom.d.ts +1 -1
  124. package/cjs/utils/useCustom.js +5 -3
  125. package/cjs/utils/useFocus.d.ts +1 -1
  126. package/cjs/utils/useInternalId.d.ts +1 -1
  127. package/cjs/utils/useInternalId.js +2 -2
  128. package/cjs/utils/warnOnce.d.ts +9 -0
  129. package/cjs/utils/warnOnce.js +22 -0
  130. package/dist/rsuite-rtl.css +735 -56
  131. package/dist/rsuite-rtl.min.css +1 -1
  132. package/dist/rsuite-rtl.min.css.map +1 -1
  133. package/dist/rsuite.css +735 -56
  134. package/dist/rsuite.js +363 -121
  135. package/dist/rsuite.js.map +1 -1
  136. package/dist/rsuite.min.css +1 -1
  137. package/dist/rsuite.min.css.map +1 -1
  138. package/dist/rsuite.min.js +1 -1
  139. package/dist/rsuite.min.js.map +1 -1
  140. package/esm/@types/common.d.ts +6 -0
  141. package/esm/Cascader/DropdownMenu.js +8 -3
  142. package/esm/Cascader/utils.d.ts +1 -1
  143. package/esm/Col/Col.d.ts +25 -5
  144. package/esm/Col/Col.js +10 -2
  145. package/esm/CustomProvider/CustomProvider.d.ts +20 -7
  146. package/esm/CustomProvider/CustomProvider.js +22 -3
  147. package/esm/Disclosure/Disclosure.d.ts +1 -1
  148. package/esm/Disclosure/DisclosureContext.d.ts +1 -1
  149. package/esm/Dropdown/Dropdown.js +25 -105
  150. package/esm/Dropdown/DropdownItem.js +13 -55
  151. package/esm/Dropdown/DropdownMenu.js +31 -76
  152. package/esm/Dropdown/DropdownToggle.js +4 -14
  153. package/esm/Dropdown/useRenderDropdownItem.d.ts +1 -1
  154. package/esm/Form/Form.d.ts +8 -8
  155. package/esm/Form/test/Form.test.d.ts +1 -0
  156. package/esm/Form/test/Form.test.js +11 -0
  157. package/esm/Menu/Menu.d.ts +1 -0
  158. package/esm/Menu/Menu.js +1 -0
  159. package/esm/Menu/MenuItem.d.ts +1 -0
  160. package/esm/Menu/MenuItem.js +1 -0
  161. package/esm/Menu/Menubar.d.ts +3 -0
  162. package/esm/Menu/Menubar.js +4 -0
  163. package/esm/Modal/test/Modal.test.d.ts +1 -0
  164. package/esm/Modal/test/Modal.test.js +9 -0
  165. package/esm/Modal/utils.d.ts +1 -1
  166. package/esm/Nav/Nav.d.ts +7 -2
  167. package/esm/Nav/Nav.js +96 -5
  168. package/esm/Nav/NavContext.d.ts +2 -8
  169. package/esm/Nav/NavContext.js +1 -6
  170. package/esm/Nav/NavDropdown.d.ts +71 -0
  171. package/esm/Nav/NavDropdown.js +170 -0
  172. package/esm/Nav/NavDropdownItem.d.ts +39 -0
  173. package/esm/Nav/NavDropdownItem.js +123 -0
  174. package/esm/Nav/NavDropdownMenu.d.ts +37 -0
  175. package/esm/Nav/NavDropdownMenu.js +143 -0
  176. package/esm/Nav/NavDropdownToggle.d.ts +21 -0
  177. package/esm/Nav/NavDropdownToggle.js +57 -0
  178. package/esm/Nav/NavItem.d.ts +2 -0
  179. package/esm/Nav/NavItem.js +13 -21
  180. package/esm/Nav/NavMenu.d.ts +38 -0
  181. package/esm/Nav/NavMenu.js +98 -0
  182. package/esm/Nav/test/Nav.test.d.ts +1 -0
  183. package/esm/Nav/test/Nav.test.js +11 -0
  184. package/esm/Navbar/NavbarDropdown.d.ts +57 -0
  185. package/esm/Navbar/NavbarDropdown.js +124 -0
  186. package/esm/Navbar/NavbarDropdownItem.d.ts +41 -0
  187. package/esm/Navbar/NavbarDropdownItem.js +128 -0
  188. package/esm/Navbar/NavbarDropdownMenu.d.ts +48 -0
  189. package/esm/Navbar/NavbarDropdownMenu.js +140 -0
  190. package/esm/Navbar/NavbarDropdownToggle.d.ts +19 -0
  191. package/esm/Navbar/NavbarDropdownToggle.js +55 -0
  192. package/esm/Navbar/NavbarItem.d.ts +5 -2
  193. package/esm/Navbar/NavbarItem.js +11 -4
  194. package/esm/Overlay/Modal.d.ts +1 -4
  195. package/esm/Overlay/Overlay.d.ts +3 -1
  196. package/esm/Overlay/Overlay.js +6 -2
  197. package/esm/Overlay/OverlayTrigger.d.ts +8 -4
  198. package/esm/Overlay/OverlayTrigger.js +33 -5
  199. package/esm/Overlay/Position.d.ts +3 -1
  200. package/esm/Overlay/Position.js +12 -4
  201. package/esm/Overlay/positionUtils.d.ts +11 -4
  202. package/esm/Overlay/positionUtils.js +46 -2
  203. package/esm/Panel/Panel.js +9 -6
  204. package/esm/Picker/utils.d.ts +1 -1
  205. package/esm/Picker/utils.js +22 -14
  206. package/esm/Popover/Popover.d.ts +2 -0
  207. package/esm/Popover/Popover.js +6 -3
  208. package/esm/Sidenav/ExpandedSidenavDropdown.d.ts +43 -0
  209. package/esm/Sidenav/ExpandedSidenavDropdown.js +140 -0
  210. package/esm/Sidenav/ExpandedSidenavDropdownItem.d.ts +31 -0
  211. package/esm/Sidenav/ExpandedSidenavDropdownItem.js +120 -0
  212. package/esm/Sidenav/ExpandedSidenavDropdownMenu.d.ts +26 -0
  213. package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +121 -0
  214. package/esm/Sidenav/Sidenav.d.ts +8 -2
  215. package/esm/Sidenav/Sidenav.js +1 -2
  216. package/esm/Sidenav/SidenavDropdown.d.ts +30 -8
  217. package/esm/Sidenav/SidenavDropdown.js +145 -75
  218. package/esm/Sidenav/SidenavDropdownItem.d.ts +22 -5
  219. package/esm/Sidenav/SidenavDropdownItem.js +87 -71
  220. package/esm/Sidenav/SidenavDropdownMenu.d.ts +26 -16
  221. package/esm/Sidenav/SidenavDropdownMenu.js +122 -86
  222. package/esm/Sidenav/SidenavDropdownToggle.d.ts +19 -0
  223. package/esm/Sidenav/SidenavDropdownToggle.js +56 -0
  224. package/esm/Sidenav/SidenavItem.d.ts +7 -0
  225. package/esm/Sidenav/SidenavItem.js +53 -38
  226. package/esm/Sidenav/SidenavToggle.d.ts +5 -1
  227. package/esm/Sidenav/SidenavToggle.js +22 -9
  228. package/esm/Toggle/Toggle.d.ts +1 -1
  229. package/esm/Tooltip/Tooltip.d.ts +3 -1
  230. package/esm/Tooltip/Tooltip.js +8 -3
  231. package/esm/Whisper/Whisper.d.ts +3 -5
  232. package/esm/Whisper/Whisper.js +6 -1
  233. package/esm/Whisper/test/Whisper.test.d.ts +1 -0
  234. package/esm/Whisper/test/Whisper.test.js +16 -0
  235. package/esm/index.d.ts +3 -3
  236. package/esm/index.js +1 -1
  237. package/esm/toaster/ToastContainer.d.ts +1 -0
  238. package/esm/toaster/ToastContainer.js +1 -0
  239. package/esm/toaster/index.d.ts +1 -0
  240. package/esm/toaster/index.js +1 -0
  241. package/esm/toaster/toaster.d.ts +0 -1
  242. package/esm/toaster/useToaster.d.ts +12 -0
  243. package/esm/toaster/useToaster.js +34 -0
  244. package/esm/utils/constants.d.ts +1 -0
  245. package/esm/utils/constants.js +1 -0
  246. package/esm/utils/deprecateComponent.js +3 -4
  247. package/esm/utils/deprecatePropType.d.ts +1 -5
  248. package/esm/utils/deprecatePropType.js +3 -13
  249. package/esm/utils/stringToObject.d.ts +1 -1
  250. package/esm/utils/tplTransform.d.ts +1 -1
  251. package/esm/utils/treeUtils.d.ts +3 -3
  252. package/esm/utils/treeUtils.js +8 -10
  253. package/esm/utils/useCustom.d.ts +1 -1
  254. package/esm/utils/useCustom.js +5 -3
  255. package/esm/utils/useFocus.d.ts +1 -1
  256. package/esm/utils/useInternalId.d.ts +1 -1
  257. package/esm/utils/useInternalId.js +2 -2
  258. package/esm/utils/warnOnce.d.ts +9 -0
  259. package/esm/utils/warnOnce.js +18 -0
  260. package/package.json +1 -1
  261. package/styles/color-modes/dark.less +3 -0
  262. package/styles/color-modes/high-contrast.less +3 -0
  263. package/styles/color-modes/light.less +5 -2
  264. package/styles/variables.less +33 -12
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { StandardProps } from '../@types/common';
3
+ import { IconProps } from '@rsuite/icons/lib/Icon';
4
+ export interface NavbarDropdownMenuProps<T = any> extends StandardProps {
5
+ /** Define the title as a submenu */
6
+ title?: React.ReactNode;
7
+ /**
8
+ * The submenu expands from the left and defaults to the right
9
+ * @deprecated Use openDirection="start" instead.
10
+ */
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';
20
+ /**
21
+ * Only used for setting the default expand state when it's a submenu.
22
+ */
23
+ eventKey?: T;
24
+ /** Set the icon */
25
+ icon?: React.ReactElement<IconProps>;
26
+ open?: boolean;
27
+ collapsible?: boolean;
28
+ expanded?: boolean;
29
+ active?: boolean;
30
+ disabled?: boolean;
31
+ activeKey?: T;
32
+ onToggle?: (open: boolean, eventKey?: T | undefined, event?: React.SyntheticEvent) => void;
33
+ }
34
+ /**
35
+ * @private this component is not supposed to be used directly
36
+ * Instead it's rendered by a <Nav.Menu> within a <Navbar>
37
+ *
38
+ * <Navbar>
39
+ * <Nav>
40
+ * <Nav.Menu>
41
+ * <Nav.Menu title="menu"> -> This submenu will render <NavbarDropdownMenu> component
42
+ * </Nav.Menu>
43
+ * </Nav.Menu>
44
+ * </Nav>
45
+ * </Navbar>
46
+ */
47
+ declare const NavbarDropdownMenu: React.ForwardRefExoticComponent<NavbarDropdownMenuProps<any> & Omit<React.HTMLAttributes<HTMLUListElement>, "title" | "onSelect"> & React.RefAttributes<HTMLElement>>;
48
+ export default NavbarDropdownMenu;
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
+ exports.__esModule = true;
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
13
+
14
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
19
+
20
+ var _utils = require("../utils");
21
+
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
24
+ var _AngleLeft = _interopRequireDefault(require("@rsuite/icons/legacy/AngleLeft"));
25
+
26
+ var _AngleRight = _interopRequireDefault(require("@rsuite/icons/legacy/AngleRight"));
27
+
28
+ var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
29
+
30
+ var _ = require(".");
31
+
32
+ var _Disclosure = _interopRequireDefault(require("../Disclosure"));
33
+
34
+ var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
35
+
36
+ var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
37
+
38
+ var _templateObject, _templateObject2;
39
+
40
+ /**
41
+ * @private this component is not supposed to be used directly
42
+ * Instead it's rendered by a <Nav.Menu> within a <Navbar>
43
+ *
44
+ * <Navbar>
45
+ * <Nav>
46
+ * <Nav.Menu>
47
+ * <Nav.Menu title="menu"> -> This submenu will render <NavbarDropdownMenu> component
48
+ * </Nav.Menu>
49
+ * </Nav.Menu>
50
+ * </Nav>
51
+ * </Navbar>
52
+ */
53
+ var NavbarDropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
54
+ var navbar = (0, _react.useContext)(_.NavbarContext);
55
+ var nav = (0, _react.useContext)(_NavContext.default);
56
+
57
+ if (!navbar || !nav) {
58
+ throw new Error('<Navbar.Dropdown.Menu> must be rendered within a <Nav> within a <Navbar> component.');
59
+ }
60
+
61
+ var _onToggle = props.onToggle,
62
+ eventKey = props.eventKey,
63
+ title = props.title,
64
+ _props$classPrefix = props.classPrefix,
65
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-menu' : _props$classPrefix,
66
+ children = props.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"]);
70
+
71
+ var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
72
+ rtl = _useCustom.rtl;
73
+
74
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
75
+ prefix = _useClassNames.prefix;
76
+
77
+ var _useClassNames2 = (0, _utils.useClassNames)('dropdown-menu'),
78
+ withMenuClassPrefix = _useClassNames2.withClassPrefix,
79
+ mergeMenuClassName = _useClassNames2.merge;
80
+
81
+ var _useClassNames3 = (0, _utils.useClassNames)('dropdown-item'),
82
+ mergeItemClassNames = _useClassNames3.merge,
83
+ withItemClassPrefix = _useClassNames3.withClassPrefix,
84
+ prefixItemClassName = _useClassNames3.prefix; // Parent menu exists. This is a submenu.
85
+ // Should render a `menuitem` that controls this submenu.
86
+
87
+
88
+ var _omit = (0, _omit2.default)(rest, ['trigger']),
89
+ icon = _omit.icon,
90
+ className = _omit.className,
91
+ disabled = _omit.disabled,
92
+ menuProps = (0, _objectWithoutPropertiesLoose2.default)(_omit, ["icon", "className", "disabled"]);
93
+
94
+ var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
95
+ return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
96
+ hideOnClickOutside: true,
97
+ trigger: ['click', 'mouseover'],
98
+ onToggle: function onToggle(open, event) {
99
+ return _onToggle === null || _onToggle === void 0 ? void 0 : _onToggle(open, undefined, event);
100
+ }
101
+ }, function (_ref, containerRef) {
102
+ var open = _ref.open,
103
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
104
+ var classes = mergeItemClassNames(className, withItemClassPrefix({
105
+ disabled: disabled,
106
+ open: open,
107
+ submenu: true
108
+ }));
109
+ return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
110
+ ref: (0, _utils.mergeRefs)(ref, containerRef),
111
+ className: classes
112
+ }, props), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (_ref2, buttonRef) {
113
+ var open = _ref2.open,
114
+ buttonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
115
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
116
+ 'with-icon': icon,
117
+ open: open,
118
+ disabled: disabled
119
+ }));
120
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
121
+ ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
122
+ className: classes,
123
+ "data-event-key": eventKey,
124
+ "data-event-key-type": typeof eventKey
125
+ }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
126
+ className: prefix('menu-icon')
127
+ }), title, /*#__PURE__*/_react.default.createElement(Icon, {
128
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
129
+ }));
130
+ }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Content, null, function (_ref3, elementRef) {
131
+ var open = _ref3.open;
132
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
133
+ return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
134
+ ref: elementRef,
135
+ className: menuClassName,
136
+ hidden: !open,
137
+ "data-direction": openDirection
138
+ }, menuProps), children);
139
+ }));
140
+ });
141
+ });
142
+
143
+ NavbarDropdownMenu.displayName = 'Nav.Dropdown.Menu';
144
+ NavbarDropdownMenu.propTypes = {
145
+ active: _propTypes.default.bool,
146
+ activeKey: _propTypes.default.any,
147
+ className: _propTypes.default.string,
148
+ children: _propTypes.default.node,
149
+ icon: _propTypes.default.any,
150
+ classPrefix: _propTypes.default.string,
151
+ pullLeft: (0, _deprecatePropType.default)(_propTypes.default.bool, 'Use openDirection="start" instead.'),
152
+ openDirection: _propTypes.default.oneOf(['start', 'end']),
153
+ title: _propTypes.default.node,
154
+ open: _propTypes.default.bool,
155
+ eventKey: _propTypes.default.any,
156
+ expanded: _propTypes.default.bool,
157
+ collapsible: _propTypes.default.bool,
158
+ onToggle: _propTypes.default.func
159
+ };
160
+ var _default = NavbarDropdownMenu;
161
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import Button from '../Button';
3
+ import { WithAsProps, RsRefForwardingComponent, TypeAttributes } from '../@types/common';
4
+ export interface NavbarDropdownToggleProps extends WithAsProps {
5
+ noCaret?: boolean;
6
+ renderToggle?: (props: WithAsProps, ref: React.Ref<any>) => any;
7
+ placement?: TypeAttributes.Placement8;
8
+ }
9
+ /**
10
+ * @private this component is not supposed to be used directly
11
+ * Instead it's rendered by a <Nav.Menu> call
12
+ *
13
+ * <Nav>
14
+ * <Nav.Menu> -> This will render <NavDropdown> component that renders a <NavDropdownToggle>
15
+ * </Nav.Menu>
16
+ * </Nav>
17
+ */
18
+ declare const NavbarDropdownToggle: RsRefForwardingComponent<typeof Button, NavbarDropdownToggleProps>;
19
+ export default NavbarDropdownToggle;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _ArrowDownLine = _interopRequireDefault(require("@rsuite/icons/ArrowDownLine"));
17
+
18
+ var _utils = require("../utils");
19
+
20
+ var _NavbarItem = _interopRequireDefault(require("./NavbarItem"));
21
+
22
+ /**
23
+ * @private this component is not supposed to be used directly
24
+ * Instead it's rendered by a <Nav.Menu> call
25
+ *
26
+ * <Nav>
27
+ * <Nav.Menu> -> This will render <NavDropdown> component that renders a <NavDropdownToggle>
28
+ * </Nav.Menu>
29
+ * </Nav>
30
+ */
31
+ var NavbarDropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
32
+ var _props$as = props.as,
33
+ Component = _props$as === void 0 ? _NavbarItem.default : _props$as,
34
+ className = props.className,
35
+ _props$classPrefix = props.classPrefix,
36
+ classPrefix = _props$classPrefix === void 0 ? 'navbar-item' : _props$classPrefix,
37
+ renderToggle = props.renderToggle,
38
+ children = props.children,
39
+ noCaret = props.noCaret,
40
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "renderToggle", "children", "noCaret"]);
41
+
42
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
43
+ prefix = _useClassNames.prefix,
44
+ withClassPrefix = _useClassNames.withClassPrefix,
45
+ merge = _useClassNames.merge;
46
+
47
+ var classes = merge(className, withClassPrefix({
48
+ 'no-caret': noCaret
49
+ }));
50
+
51
+ var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
52
+ ref: ref,
53
+ className: classes
54
+ }), children, !noCaret && /*#__PURE__*/_react.default.createElement(_ArrowDownLine.default, {
55
+ className: prefix('caret')
56
+ }));
57
+
58
+ return renderToggle ? renderToggle(rest, ref) : toggle;
59
+ });
60
+
61
+ NavbarDropdownToggle.displayName = 'Navbar.Dropdown.Toggle';
62
+ NavbarDropdownToggle.propTypes = {
63
+ className: _propTypes.default.string,
64
+ children: _propTypes.default.node,
65
+ classPrefix: _propTypes.default.string,
66
+ noCaret: _propTypes.default.bool,
67
+ as: _propTypes.default.elementType,
68
+ renderToggle: _propTypes.default.func,
69
+ placement: _propTypes.default.oneOf(['bottomStart', 'bottomEnd', 'topStart', 'topEnd', 'leftStart', 'rightStart', 'leftEnd', 'rightEnd'])
70
+ };
71
+ var _default = NavbarDropdownToggle;
72
+ exports.default = _default;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from '@rsuite/icons/lib/Icon';
3
3
  import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
4
- export interface NavItemProps<T = string> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
4
+ export interface NavbarItemProps<T = string> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
5
5
  /** Activation status */
6
6
  active?: boolean;
7
7
  /** Disabled status */
@@ -15,5 +15,8 @@ export interface NavItemProps<T = string> extends WithAsProps, Omit<React.HTMLAt
15
15
  /** Select the callback function that the event triggers. */
16
16
  onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
17
17
  }
18
- declare const NavbarItem: RsRefForwardingComponent<'a', NavItemProps>;
18
+ /**
19
+ * @private
20
+ */
21
+ declare const NavbarItem: RsRefForwardingComponent<'a', NavbarItemProps>;
19
22
  export default NavbarItem;
@@ -25,6 +25,9 @@ var _utils = require("../utils");
25
25
 
26
26
  var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
27
27
 
28
+ /**
29
+ * @private
30
+ */
28
31
  var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
32
  var _props$as = props.as,
30
33
  Component = _props$as === void 0 ? _SafeAnchor.default : _props$as,
@@ -41,9 +44,9 @@ var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
41
44
  onSelectProp = props.onSelect,
42
45
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "active", "disabled", "eventKey", "className", "classPrefix", "style", "children", "icon", "onClick", "onSelect"]);
43
46
 
44
- var _useContext = (0, _react.useContext)(_NavContext.default),
45
- activeKey = _useContext.activeKey,
46
- onSelectFromNav = _useContext.onSelect;
47
+ var _ref = (0, _react.useContext)(_NavContext.default),
48
+ activeKey = _ref.activeKey,
49
+ onSelectFromNav = _ref.onSelect;
47
50
 
48
51
  var active = activeProp !== null && activeProp !== void 0 ? activeProp : !(0, _isNil.default)(eventKey) && (0, _utils.shallowEqual)(eventKey, activeKey);
49
52
  var emitSelect = (0, _react.useCallback)(function (event) {
@@ -52,6 +55,7 @@ var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
52
55
  }, [eventKey, onSelectProp, onSelectFromNav]);
53
56
 
54
57
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
58
+ prefix = _useClassNames.prefix,
55
59
  withClassPrefix = _useClassNames.withClassPrefix,
56
60
  merge = _useClassNames.merge;
57
61
 
@@ -72,7 +76,9 @@ var NavbarItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
72
76
  className: classes,
73
77
  onClick: handleClick,
74
78
  style: style
75
- }), icon, children, /*#__PURE__*/_react.default.createElement(_Ripple.default, null));
79
+ }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
80
+ className: prefix('icon')
81
+ }), children, /*#__PURE__*/_react.default.createElement(_Ripple.default, null));
76
82
  });
77
83
 
78
84
  NavbarItem.displayName = 'Navbar.Item';
@@ -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,16 +50,20 @@ 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
- root: HTMLElement;
63
+ root: HTMLElement | undefined;
60
64
  updatePosition: () => void;
61
- open: () => void;
62
- close: () => void;
65
+ open: (delay?: number) => void;
66
+ close: (delay?: number) => void;
63
67
  }
64
- declare const OverlayTrigger: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<unknown>>;
68
+ declare const OverlayTrigger: React.ForwardRefExoticComponent<OverlayTriggerProps & React.RefAttributes<OverlayTriggerInstance>>;
65
69
  export default OverlayTrigger;
@@ -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;