rsuite 5.3.0 → 5.4.3

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 (167) hide show
  1. package/Button/styles/index.less +1 -5
  2. package/CHANGELOG.md +53 -0
  3. package/Drawer/styles/index.less +3 -0
  4. package/Dropdown/styles/index.less +5 -3
  5. package/Dropdown/styles/mixin.less +0 -2
  6. package/Modal/styles/index.less +23 -22
  7. package/Nav/styles/index.less +1 -0
  8. package/Navbar/styles/index.less +27 -8
  9. package/Radio/styles/index.less +6 -0
  10. package/Sidenav/styles/index.less +8 -2
  11. package/Stack/package.json +7 -0
  12. package/Stack/styles/index.less +5 -0
  13. package/TreePicker/styles/index.less +0 -14
  14. package/cjs/@types/common.d.ts +4 -4
  15. package/cjs/Affix/Affix.js +3 -1
  16. package/cjs/AvatarGroup/AvatarGroup.js +9 -4
  17. package/cjs/ButtonGroup/ButtonGroup.js +9 -4
  18. package/cjs/Calendar/Calendar.js +21 -20
  19. package/cjs/Calendar/Header.js +1 -3
  20. package/cjs/Calendar/Table.js +1 -1
  21. package/cjs/Calendar/TableRow.js +12 -7
  22. package/cjs/Calendar/View.js +9 -5
  23. package/cjs/Cascader/utils.d.ts +7 -7
  24. package/cjs/CheckPicker/CheckPicker.d.ts +12 -4
  25. package/cjs/CheckPicker/test/CheckPicker.test.d.ts +1 -0
  26. package/cjs/CheckPicker/test/CheckPicker.test.js +84 -0
  27. package/cjs/CheckTree/index.js +6 -5
  28. package/cjs/Container/Container.js +6 -3
  29. package/cjs/DatePicker/DatePicker.js +4 -2
  30. package/cjs/DateRangePicker/DateRangePicker.js +9 -5
  31. package/cjs/Disclosure/Disclosure.d.ts +8 -5
  32. package/cjs/Disclosure/Disclosure.js +51 -11
  33. package/cjs/Disclosure/DisclosureButton.d.ts +2 -2
  34. package/cjs/Disclosure/DisclosureContext.d.ts +6 -1
  35. package/cjs/Dropdown/Dropdown.js +1 -1
  36. package/cjs/Dropdown/DropdownItem.js +9 -10
  37. package/cjs/Dropdown/DropdownMenu.js +81 -23
  38. package/cjs/Dropdown/DropdownToggle.js +8 -1
  39. package/cjs/FormGroup/FormGroup.js +9 -4
  40. package/cjs/Menu/MenuItem.js +1 -1
  41. package/cjs/Modal/Modal.js +34 -22
  42. package/cjs/MultiCascader/utils.d.ts +3 -3
  43. package/cjs/Nav/Nav.js +10 -12
  44. package/cjs/Nav/NavContext.d.ts +6 -0
  45. package/cjs/Nav/NavContext.js +1 -0
  46. package/cjs/Navbar/index.d.ts +1 -0
  47. package/cjs/Navbar/index.js +4 -3
  48. package/cjs/Overlay/Modal.js +43 -45
  49. package/cjs/Overlay/Overlay.d.ts +1 -1
  50. package/cjs/Overlay/Overlay.js +7 -1
  51. package/cjs/Overlay/OverlayContext.d.ts +6 -0
  52. package/cjs/Overlay/OverlayContext.js +14 -0
  53. package/cjs/Overlay/OverlayTrigger.js +7 -1
  54. package/cjs/Overlay/Position.d.ts +1 -1
  55. package/cjs/PanelGroup/PanelGroup.js +8 -5
  56. package/cjs/Picker/propTypes.d.ts +3 -5
  57. package/cjs/Picker/propTypes.js +4 -3
  58. package/cjs/Picker/utils.d.ts +3 -3
  59. package/cjs/SelectPicker/SelectPicker.d.ts +16 -6
  60. package/cjs/SelectPicker/SelectPicker.js +4 -4
  61. package/cjs/SelectPicker/index.d.ts +1 -1
  62. package/cjs/SelectPicker/test/SelectPicker.test.d.ts +1 -0
  63. package/cjs/SelectPicker/test/SelectPicker.test.js +70 -0
  64. package/cjs/Stack/Stack.d.ts +26 -0
  65. package/cjs/Stack/Stack.js +86 -0
  66. package/cjs/Stack/index.d.ts +3 -0
  67. package/cjs/Stack/index.js +11 -0
  68. package/cjs/Steps/StepItem.js +2 -2
  69. package/cjs/Toggle/Toggle.js +4 -3
  70. package/cjs/Tree/Tree.d.ts +0 -1
  71. package/cjs/Tree/Tree.js +6 -5
  72. package/cjs/Tree/TreeContext.d.ts +0 -1
  73. package/cjs/TreePicker/TreeNode.js +1 -14
  74. package/cjs/TreePicker/TreePicker.js +3 -29
  75. package/cjs/index.d.ts +4 -2
  76. package/cjs/index.js +9 -5
  77. package/cjs/utils/index.d.ts +1 -0
  78. package/cjs/utils/index.js +7 -2
  79. package/cjs/utils/treeUtils.d.ts +5 -5
  80. package/cjs/utils/useMount.d.ts +2 -0
  81. package/cjs/utils/useMount.js +19 -0
  82. package/cjs/utils/usePortal.d.ts +1 -1
  83. package/dist/rsuite-rtl.css +351 -188
  84. package/dist/rsuite-rtl.min.css +1 -1
  85. package/dist/rsuite-rtl.min.css.map +1 -1
  86. package/dist/rsuite.css +351 -188
  87. package/dist/rsuite.js +94 -39
  88. package/dist/rsuite.js.map +1 -1
  89. package/dist/rsuite.min.css +1 -1
  90. package/dist/rsuite.min.css.map +1 -1
  91. package/dist/rsuite.min.js +1 -1
  92. package/dist/rsuite.min.js.map +1 -1
  93. package/esm/@types/common.d.ts +4 -4
  94. package/esm/Affix/Affix.js +4 -2
  95. package/esm/AvatarGroup/AvatarGroup.js +7 -4
  96. package/esm/ButtonGroup/ButtonGroup.js +7 -4
  97. package/esm/Calendar/Calendar.js +22 -21
  98. package/esm/Calendar/Header.js +1 -3
  99. package/esm/Calendar/Table.js +1 -1
  100. package/esm/Calendar/TableRow.js +13 -8
  101. package/esm/Calendar/View.js +10 -6
  102. package/esm/Cascader/utils.d.ts +7 -7
  103. package/esm/CheckPicker/CheckPicker.d.ts +12 -4
  104. package/esm/CheckPicker/test/CheckPicker.test.d.ts +1 -0
  105. package/esm/CheckPicker/test/CheckPicker.test.js +71 -0
  106. package/esm/CheckTree/index.js +7 -6
  107. package/esm/Container/Container.js +7 -4
  108. package/esm/DatePicker/DatePicker.js +4 -2
  109. package/esm/DateRangePicker/DateRangePicker.js +9 -5
  110. package/esm/Disclosure/Disclosure.d.ts +8 -5
  111. package/esm/Disclosure/Disclosure.js +52 -13
  112. package/esm/Disclosure/DisclosureButton.d.ts +2 -2
  113. package/esm/Disclosure/DisclosureContext.d.ts +6 -1
  114. package/esm/Dropdown/Dropdown.js +1 -1
  115. package/esm/Dropdown/DropdownItem.js +9 -9
  116. package/esm/Dropdown/DropdownMenu.js +82 -24
  117. package/esm/Dropdown/DropdownToggle.js +7 -1
  118. package/esm/FormGroup/FormGroup.js +7 -4
  119. package/esm/Menu/MenuItem.js +1 -1
  120. package/esm/Modal/Modal.js +36 -24
  121. package/esm/MultiCascader/utils.d.ts +3 -3
  122. package/esm/Nav/Nav.js +11 -13
  123. package/esm/Nav/NavContext.d.ts +6 -0
  124. package/esm/Nav/NavContext.js +1 -0
  125. package/esm/Navbar/index.d.ts +1 -0
  126. package/esm/Navbar/index.js +1 -0
  127. package/esm/Overlay/Modal.js +44 -46
  128. package/esm/Overlay/Overlay.d.ts +1 -1
  129. package/esm/Overlay/Overlay.js +7 -2
  130. package/esm/Overlay/OverlayContext.d.ts +6 -0
  131. package/esm/Overlay/OverlayContext.js +4 -0
  132. package/esm/Overlay/OverlayTrigger.js +7 -2
  133. package/esm/Overlay/Position.d.ts +1 -1
  134. package/esm/PanelGroup/PanelGroup.js +9 -6
  135. package/esm/Picker/propTypes.d.ts +3 -5
  136. package/esm/Picker/propTypes.js +4 -3
  137. package/esm/Picker/utils.d.ts +3 -3
  138. package/esm/SelectPicker/SelectPicker.d.ts +16 -6
  139. package/esm/SelectPicker/SelectPicker.js +4 -4
  140. package/esm/SelectPicker/index.d.ts +1 -1
  141. package/esm/SelectPicker/test/SelectPicker.test.d.ts +1 -0
  142. package/esm/SelectPicker/test/SelectPicker.test.js +59 -0
  143. package/esm/Stack/Stack.d.ts +26 -0
  144. package/esm/Stack/Stack.js +71 -0
  145. package/esm/Stack/index.d.ts +3 -0
  146. package/esm/Stack/index.js +2 -0
  147. package/esm/Steps/StepItem.js +2 -2
  148. package/esm/Toggle/Toggle.js +4 -3
  149. package/esm/Tree/Tree.d.ts +0 -1
  150. package/esm/Tree/Tree.js +7 -6
  151. package/esm/Tree/TreeContext.d.ts +0 -1
  152. package/esm/TreePicker/TreeNode.js +2 -14
  153. package/esm/TreePicker/TreePicker.js +3 -29
  154. package/esm/index.d.ts +4 -2
  155. package/esm/index.js +2 -1
  156. package/esm/utils/index.d.ts +1 -0
  157. package/esm/utils/index.js +2 -1
  158. package/esm/utils/treeUtils.d.ts +5 -5
  159. package/esm/utils/useMount.d.ts +2 -0
  160. package/esm/utils/useMount.js +13 -0
  161. package/esm/utils/usePortal.d.ts +1 -1
  162. package/package.json +2 -2
  163. package/styles/color-modes/dark.less +1 -0
  164. package/styles/color-modes/high-contrast.less +1 -0
  165. package/styles/color-modes/light.less +1 -0
  166. package/styles/index.less +1 -0
  167. package/styles/mixins/utilities.less +17 -5
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
6
 
5
7
  exports.__esModule = true;
@@ -9,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
11
 
10
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
13
 
12
- var _react = _interopRequireDefault(require("react"));
14
+ var _react = _interopRequireWildcard(require("react"));
13
15
 
14
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
17
 
@@ -33,10 +35,13 @@ var FormGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
33
35
  merge = _useClassNames.merge;
34
36
 
35
37
  var classes = merge(className, withClassPrefix());
36
- return /*#__PURE__*/_react.default.createElement(FormGroupContext.Provider, {
37
- value: {
38
+ var contextValue = (0, _react.useMemo)(function () {
39
+ return {
38
40
  controlId: controlId
39
- }
41
+ };
42
+ }, [controlId]);
43
+ return /*#__PURE__*/_react.default.createElement(FormGroupContext.Provider, {
44
+ value: contextValue
40
45
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
41
46
  ref: ref,
42
47
  className: classes,
@@ -55,7 +55,7 @@ function MenuItem(props) {
55
55
  id: menuitemRef.current.id
56
56
  });
57
57
  }
58
- }, [dispatch]); // Gain/release focus on mouseenter/mouseleave in `menu`
58
+ }, [dispatch, hasFocus]); // Gain/release focus on mouseenter/mouseleave in `menu`
59
59
 
60
60
  var handleMouseMove = (0, _react.useCallback)(function () {
61
61
  if (!(0, _isNil.default)(menuitemRef.current) && !hasFocus) {
@@ -90,6 +90,10 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
90
90
  merge = _useClassNames.merge,
91
91
  prefix = _useClassNames.prefix;
92
92
 
93
+ var _useState = (0, _react.useState)(false),
94
+ shake = _useState[0],
95
+ setShake = _useState[1];
96
+
93
97
  var classes = merge(className, prefix(size, {
94
98
  full: full
95
99
  }));
@@ -116,24 +120,6 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
116
120
  isDrawer: drawer
117
121
  };
118
122
  }, [dialogId, onClose, bodyStyles, drawer]);
119
-
120
- var _useState = (0, _react.useState)(false),
121
- shake = _useState[0],
122
- setShake = _useState[1];
123
-
124
- var handleBackdropClick = (0, _react.useCallback)(function () {
125
- // When the value of `backdrop` is `static`, a jitter animation will be added to the dialog when clicked.
126
- if (backdrop === 'static') {
127
- setShake(true);
128
-
129
- if (!transitionEndListener.current && dialogRef.current) {
130
- //fix: https://github.com/rsuite/rsuite/blob/a93d13c14fb20cc58204babe3331d3c3da3fe1fd/src/Modal/styles/index.less#L59
131
- transitionEndListener.current = (0, _on.default)(dialogRef.current, (0, _getAnimationEnd.default)(), function () {
132
- setShake(false);
133
- });
134
- }
135
- }
136
- }, [backdrop]);
137
123
  var handleExited = (0, _react.useCallback)(function (node) {
138
124
  var _transitionEndListene;
139
125
 
@@ -150,11 +136,37 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
150
136
  onEntering === null || onEntering === void 0 ? void 0 : onEntering(node);
151
137
  onChangeBodyStyles(true);
152
138
  }, [onChangeBodyStyles, onEntering]);
153
- (0, _react.useEffect)(function () {
139
+ var handleBackdropClick = (0, _react.useCallback)(function (e) {
140
+ if (e.target !== e.currentTarget) {
141
+ return;
142
+ } // When the value of `backdrop` is `static`, a jitter animation will be added to the dialog when clicked.
143
+
144
+
145
+ if (backdrop === 'static') {
146
+ setShake(true);
147
+
148
+ if (!transitionEndListener.current && dialogRef.current) {
149
+ //fix: https://github.com/rsuite/rsuite/blob/a93d13c14fb20cc58204babe3331d3c3da3fe1fd/src/Modal/styles/index.less#L59
150
+ transitionEndListener.current = (0, _on.default)(dialogRef.current, (0, _getAnimationEnd.default)(), function () {
151
+ setShake(false);
152
+ });
153
+ }
154
+
155
+ return;
156
+ }
157
+
158
+ onClose === null || onClose === void 0 ? void 0 : onClose(e);
159
+ }, [backdrop, onClose]);
160
+ var handleClick = (0, _react.useCallback)(function (e) {
161
+ if (dialogRef.current && e.target !== dialogRef.current) {
162
+ handleBackdropClick(e);
163
+ }
164
+ }, [handleBackdropClick]);
165
+ (0, _utils.useWillUnmount)(function () {
154
166
  var _transitionEndListene2;
155
167
 
156
168
  (_transitionEndListene2 = transitionEndListener.current) === null || _transitionEndListene2 === void 0 ? void 0 : _transitionEndListene2.off();
157
- }, []);
169
+ });
158
170
  return /*#__PURE__*/_react.default.createElement(_ModalContext.ModalContext.Provider, {
159
171
  value: modalContextValue
160
172
  }, /*#__PURE__*/_react.default.createElement(_Modal.default, (0, _extends2.default)({}, rest, {
@@ -162,7 +174,6 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
162
174
  backdrop: backdrop,
163
175
  open: open,
164
176
  onClose: onClose,
165
- onBackdropClick: handleBackdropClick,
166
177
  className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["wrapper"]))),
167
178
  onEntered: handleEntered,
168
179
  onEntering: handleEntering,
@@ -175,7 +186,8 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
175
186
  transition: animation ? animation : undefined,
176
187
  animationProps: animationProps,
177
188
  dialogTransitionTimeout: animationTimeout,
178
- backdropTransitionTimeout: 150
189
+ backdropTransitionTimeout: 150,
190
+ onClick: backdrop ? handleClick : undefined
179
191
  }), function (transitionProps, transitionRef) {
180
192
  var transitionClassName = transitionProps.className,
181
193
  transitionRest = (0, _objectWithoutPropertiesLoose2.default)(transitionProps, ["className"]);
@@ -39,16 +39,16 @@ export declare const removeAllChildrenValue: <T>(value: T[], item: ItemType, ite
39
39
  */
40
40
  export declare function useFlattenData(data: ItemDataType[], itemKeys: ItemKeys): {
41
41
  addFlattenData: (children: ItemDataType[], parent: ItemDataType) => void;
42
- flattenData: ItemDataType[];
42
+ flattenData: ItemDataType<string | number>[];
43
43
  };
44
44
  /**
45
45
  * A hook for column data
46
46
  * @param flattenData
47
47
  */
48
48
  export declare function useColumnData(flattenData: ItemType[]): {
49
- columnData: ItemDataType[][];
49
+ columnData: ItemDataType<string | number>[][];
50
50
  addColumn: (column: ItemDataType[], index: number) => void;
51
- setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType[][]>>;
51
+ setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[][]>>;
52
52
  enforceUpdateColumnData: (nextData: ItemDataType[]) => void;
53
53
  };
54
54
  /**
package/cjs/Nav/Nav.js CHANGED
@@ -75,13 +75,17 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
75
75
  onSelectFromSidenav = _ref$onSelect === void 0 ? onSelectProp : _ref$onSelect;
76
76
 
77
77
  var activeKey = activeKeyProp !== null && activeKeyProp !== void 0 ? activeKeyProp : activeKeyFromSidenav;
78
+ var contextValue = (0, _react.useMemo)(function () {
79
+ return {
80
+ withinNav: true,
81
+ activeKey: activeKey,
82
+ onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
83
+ };
84
+ }, [activeKey, onSelectFromSidenav, onSelectProp]);
78
85
 
79
86
  if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
80
87
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
81
- value: {
82
- activeKey: activeKey,
83
- onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
84
- }
88
+ value: contextValue
85
89
  }, /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
86
90
  ref: ref,
87
91
  className: classes
@@ -92,10 +96,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
92
96
 
93
97
  if (sidenav) {
94
98
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
95
- value: {
96
- activeKey: activeKey,
97
- onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
98
- }
99
+ value: contextValue
99
100
  }, /*#__PURE__*/_react.default.createElement(_Menubar.default, {
100
101
  vertical: !!sidenav
101
102
  }, function (menubar, ref) {
@@ -108,10 +109,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
108
109
  }
109
110
 
110
111
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
111
- value: {
112
- activeKey: activeKey,
113
- onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
114
- }
112
+ value: contextValue
115
113
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
116
114
  ref: menubarRef,
117
115
  className: classes
@@ -1,5 +1,11 @@
1
1
  import React from 'react';
2
2
  export interface NavContextProps {
3
+ /**
4
+ * Whether component is rendered within a <Nav>
5
+ *
6
+ * FIXME: Bad design. Should use NavContextProps | null to determin whether within a <Nav>
7
+ */
8
+ withinNav: boolean;
3
9
  activeKey: string | null;
4
10
  onSelect?: (eventKey: string | undefined, event: React.SyntheticEvent) => void;
5
11
  }
@@ -10,6 +10,7 @@ var _react = _interopRequireDefault(require("react"));
10
10
  var _noop = _interopRequireDefault(require("lodash/noop"));
11
11
 
12
12
  var NavContext = /*#__PURE__*/_react.default.createContext({
13
+ withinNav: false,
13
14
  activeKey: null,
14
15
  onSelect: _noop.default
15
16
  });
@@ -3,4 +3,5 @@ export type { NavbarProps } from './Navbar';
3
3
  export type { NavbarBodyProps } from './NavbarBody';
4
4
  export type { NavbarHeaderProps } from './NavbarHeader';
5
5
  export type { NavbarBrandProps } from './NavbarBrand';
6
+ export { NavbarContext } from './Navbar';
6
7
  export default Navbar;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
4
 
5
5
  exports.__esModule = true;
6
- exports.default = void 0;
6
+ exports.default = exports.NavbarContext = void 0;
7
7
 
8
- var _Navbar = _interopRequireDefault(require("./Navbar"));
8
+ var _Navbar = _interopRequireWildcard(require("./Navbar"));
9
9
 
10
+ exports.NavbarContext = _Navbar.NavbarContext;
10
11
  var _default = _Navbar.default;
11
12
  exports.default = _default;
@@ -17,8 +17,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
18
  var _classnames = _interopRequireDefault(require("classnames"));
19
19
 
20
- var _canUseDOM = _interopRequireDefault(require("dom-lib/canUseDOM"));
21
-
22
20
  var _contains = _interopRequireDefault(require("dom-lib/contains"));
23
21
 
24
22
  var _getContainer = _interopRequireDefault(require("dom-lib/getContainer"));
@@ -33,6 +31,8 @@ var _utils = require("../Animation/utils");
33
31
 
34
32
  var _utils2 = require("../utils");
35
33
 
34
+ var _OverlayContext = _interopRequireDefault(require("./OverlayContext"));
35
+
36
36
  var manager;
37
37
 
38
38
  function getManager() {
@@ -94,7 +94,6 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
94
94
  open = props.open,
95
95
  _props$autoFocus = props.autoFocus,
96
96
  autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,
97
- onBackdropClick = props.onBackdropClick,
98
97
  onEsc = props.onEsc,
99
98
  onExit = props.onExit,
100
99
  onExiting = props.onExiting,
@@ -104,7 +103,7 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
104
103
  onEntered = props.onEntered,
105
104
  onClose = props.onClose,
106
105
  onOpen = props.onOpen,
107
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "children", "transition", "dialogTransitionTimeout", "style", "className", "container", "animationProps", "containerClassName", "keyboard", "enforceFocus", "backdrop", "backdropTransitionTimeout", "backdropStyle", "backdropClassName", "open", "autoFocus", "onBackdropClick", "onEsc", "onExit", "onExiting", "onExited", "onEnter", "onEntering", "onEntered", "onClose", "onOpen"]);
106
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "children", "transition", "dialogTransitionTimeout", "style", "className", "container", "animationProps", "containerClassName", "keyboard", "enforceFocus", "backdrop", "backdropTransitionTimeout", "backdropStyle", "backdropClassName", "open", "autoFocus", "onEsc", "onExit", "onExiting", "onExited", "onEnter", "onEntering", "onEntered", "onClose", "onOpen"]);
108
107
 
109
108
  var _useState = (0, _react.useState)(!open),
110
109
  exited = _useState[0],
@@ -125,12 +124,12 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
125
124
 
126
125
  var mountModal = open || Transition && !exited;
127
126
  var lastFocus = (0, _react.useRef)(null);
128
- var handleDocumentKeyDown = (0, _react.useCallback)(function (event) {
127
+ var handleDocumentKeyDown = (0, _utils2.useEventCallback)(function (event) {
129
128
  if (keyboard && event.key === _utils2.KEY_VALUES.ESC && modal.isTopModal()) {
130
129
  onEsc === null || onEsc === void 0 ? void 0 : onEsc(event);
131
130
  onClose === null || onClose === void 0 ? void 0 : onClose(event);
132
131
  }
133
- }, [keyboard, modal, onEsc, onClose]);
132
+ });
134
133
  var restoreLastFocus = (0, _react.useCallback)(function () {
135
134
  if (lastFocus.current) {
136
135
  var _lastFocus$current$fo, _lastFocus$current;
@@ -139,32 +138,31 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
139
138
  lastFocus.current = null;
140
139
  }
141
140
  }, []);
142
- var handleEnforceFocus = (0, _react.useCallback)(function () {
143
- if (!enforceFocus || !modal.isTopModal()) {
144
- return;
145
- }
141
+ /**
142
+ * Determines if the currently focused element is inside the dialog,
143
+ * and if not, returns the focus to the dialog.
144
+ *
145
+ */
146
146
 
147
+ var handleFocusDialog = (0, _utils2.useEventCallback)(function (onBeforeFocusCallback) {
147
148
  var currentActiveElement = document.activeElement;
148
149
  var dialog = modal.dialog;
149
150
 
150
- if (dialog && dialog !== currentActiveElement && !(0, _contains.default)(dialog, currentActiveElement)) {
151
+ if (dialog && currentActiveElement && !(0, _contains.default)(dialog, currentActiveElement)) {
152
+ onBeforeFocusCallback === null || onBeforeFocusCallback === void 0 ? void 0 : onBeforeFocusCallback();
151
153
  dialog.focus();
152
154
  }
153
- }, [enforceFocus, modal]);
154
- var handleBackdropClick = (0, _react.useCallback)(function (event) {
155
- if (event.target !== event.currentTarget) {
155
+ });
156
+ var handleEnforceFocus = (0, _utils2.useEventCallback)(function () {
157
+ if (!enforceFocus || !modal.isTopModal()) {
156
158
  return;
157
159
  }
158
160
 
159
- onBackdropClick === null || onBackdropClick === void 0 ? void 0 : onBackdropClick(event);
160
-
161
- if (backdrop === true) {
162
- onClose === null || onClose === void 0 ? void 0 : onClose(event);
163
- }
164
- }, [backdrop, onBackdropClick, onClose]);
161
+ handleFocusDialog();
162
+ });
165
163
  var documentKeyDownListener = (0, _react.useRef)();
166
164
  var documentFocusListener = (0, _react.useRef)();
167
- var handleOpen = (0, _react.useCallback)(function () {
165
+ var handleOpen = (0, _utils2.useEventCallback)(function () {
168
166
  var containerElement = (0, _getContainer.default)(container, document.body);
169
167
  modal.add(containerElement, containerClassName);
170
168
 
@@ -176,19 +174,15 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
176
174
  documentFocusListener.current = (0, _on.default)(document, 'focus', handleEnforceFocus, true);
177
175
  }
178
176
 
179
- if (_canUseDOM.default) {
180
- lastFocus.current = document.activeElement;
181
- }
182
-
183
177
  if (autoFocus) {
184
- var _modal$dialog;
185
-
186
- (_modal$dialog = modal.dialog) === null || _modal$dialog === void 0 ? void 0 : _modal$dialog.focus();
178
+ handleFocusDialog(function () {
179
+ lastFocus.current = document.activeElement;
180
+ });
187
181
  }
188
182
 
189
183
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
190
- }, [autoFocus, container, containerClassName, handleDocumentKeyDown, handleEnforceFocus, modal, onOpen]);
191
- var handleClose = (0, _react.useCallback)(function () {
184
+ });
185
+ var handleClose = (0, _utils2.useEventCallback)(function () {
192
186
  var _documentKeyDownListe, _documentFocusListene;
193
187
 
194
188
  modal.remove();
@@ -197,7 +191,7 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
197
191
  (_documentFocusListene = documentFocusListener.current) === null || _documentFocusListene === void 0 ? void 0 : _documentFocusListene.off();
198
192
  documentFocusListener.current = null;
199
193
  restoreLastFocus();
200
- }, [modal, restoreLastFocus]);
194
+ });
201
195
  (0, _react.useEffect)(function () {
202
196
  if (!open) {
203
197
  return;
@@ -218,17 +212,19 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
218
212
  var handleExited = (0, _react.useCallback)(function () {
219
213
  setExited(true);
220
214
  }, []);
215
+ var contextValue = (0, _react.useMemo)(function () {
216
+ return {
217
+ overlayContainer: function overlayContainer() {
218
+ return modal.dialog;
219
+ }
220
+ };
221
+ }, [modal.dialog]);
221
222
 
222
223
  if (!mountModal) {
223
224
  return null;
224
225
  }
225
226
 
226
227
  var renderBackdrop = function renderBackdrop() {
227
- var backdropPorps = {
228
- style: backdropStyle,
229
- onClick: handleBackdropClick
230
- };
231
-
232
228
  if (Transition) {
233
229
  return /*#__PURE__*/_react.default.createElement(_Fade.default, {
234
230
  transitionAppear: true,
@@ -239,18 +235,19 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
239
235
  rest = (0, _objectWithoutPropertiesLoose2.default)(fadeProps, ["className"]);
240
236
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
241
237
  "aria-hidden": true
242
- }, rest, backdropPorps, {
238
+ }, rest, {
239
+ style: backdropStyle,
243
240
  ref: (0, _utils2.mergeRefs)(modal.setBackdropRef, ref),
244
241
  className: (0, _classnames.default)(backdropClassName, className)
245
242
  }));
246
243
  });
247
244
  }
248
245
 
249
- return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
250
- "aria-hidden": true
251
- }, backdropPorps, {
246
+ return /*#__PURE__*/_react.default.createElement("div", {
247
+ "aria-hidden": true,
248
+ style: backdropStyle,
252
249
  className: backdropClassName
253
- }));
250
+ });
254
251
  };
255
252
 
256
253
  var dialogElement = Transition ? /*#__PURE__*/_react.default.createElement(Transition, (0, _extends2.default)({}, animationProps, {
@@ -265,12 +262,14 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
265
262
  onEntering: onEntering,
266
263
  onEntered: onEntered
267
264
  }), children) : children;
268
- return /*#__PURE__*/_react.default.createElement(Portal, null, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
265
+ return /*#__PURE__*/_react.default.createElement(_OverlayContext.default.Provider, {
266
+ value: contextValue
267
+ }, /*#__PURE__*/_react.default.createElement(Portal, null, backdrop && renderBackdrop(), /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
269
268
  ref: (0, _utils2.mergeRefs)(modal.setDialogRef, ref),
270
269
  style: style,
271
270
  className: className,
272
271
  tabIndex: -1
273
- }), backdrop && renderBackdrop(), dialogElement));
272
+ }), dialogElement)));
274
273
  });
275
274
 
276
275
  var modalPropTypes = {
@@ -297,8 +296,7 @@ Modal.propTypes = (0, _extends2.default)({}, _utils.animationPropTypes, modalPro
297
296
  dialogTransitionTimeout: _propTypes.default.number,
298
297
  backdropTransitionTimeout: _propTypes.default.number,
299
298
  transition: _propTypes.default.any,
300
- onEsc: _propTypes.default.func,
301
- onBackdropClick: _propTypes.default.func
299
+ onEsc: _propTypes.default.func
302
300
  });
303
301
  var _default = Modal;
304
302
  exports.default = _default;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { TypeAttributes, AnimationEventProps } from '../@types/common';
4
4
  export interface OverlayProps extends AnimationEventProps {
5
- container?: HTMLElement | (() => HTMLElement);
5
+ container?: HTMLElement | (() => HTMLElement | null) | null;
6
6
  children: React.ReactElement | ((props: any, ref: any) => React.ReactElement);
7
7
  childrenProps?: React.HTMLAttributes<HTMLElement>;
8
8
  className?: string;
@@ -21,6 +21,8 @@ var _utils = require("../utils");
21
21
 
22
22
  var _Fade = _interopRequireDefault(require("../Animation/Fade"));
23
23
 
24
+ var _OverlayContext = _interopRequireDefault(require("./OverlayContext"));
25
+
24
26
  var overlayPropTypes = {
25
27
  container: _propTypes.default.any,
26
28
  children: _propTypes.default.any,
@@ -44,7 +46,11 @@ var overlayPropTypes = {
44
46
  exports.overlayPropTypes = overlayPropTypes;
45
47
 
46
48
  var Overlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
47
- var container = props.container,
49
+ var _useContext = (0, _react.useContext)(_OverlayContext.default),
50
+ overlayContainer = _useContext.overlayContainer;
51
+
52
+ var _props$container = props.container,
53
+ container = _props$container === void 0 ? overlayContainer : _props$container,
48
54
  containerPadding = props.containerPadding,
49
55
  placement = props.placement,
50
56
  rootClose = props.rootClose,
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface OverlayContextProps {
3
+ overlayContainer?: () => HTMLElement | null;
4
+ }
5
+ declare const OverlayContext: React.Context<OverlayContextProps>;
6
+ export default OverlayContext;
@@ -0,0 +1,14 @@
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 _react = _interopRequireDefault(require("react"));
9
+
10
+ var OverlayContext = /*#__PURE__*/_react.default.createContext({});
11
+
12
+ OverlayContext.displayName = 'OverlayContext';
13
+ var _default = OverlayContext;
14
+ exports.default = _default;
@@ -27,6 +27,8 @@ var _utils = require("../utils");
27
27
 
28
28
  var _isOneOf = _interopRequireDefault(require("../utils/isOneOf"));
29
29
 
30
+ var _OverlayContext = _interopRequireDefault(require("./OverlayContext"));
31
+
30
32
  function mergeEvents(events, props) {
31
33
  if (events === void 0) {
32
34
  events = {};
@@ -66,8 +68,12 @@ function onMouseEventHandler(handler, event, delay) {
66
68
  var defaultTrigger = ['hover', 'focus'];
67
69
 
68
70
  var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
71
+ var _useContext = (0, _react.useContext)(_OverlayContext.default),
72
+ overlayContainer = _useContext.overlayContainer;
73
+
69
74
  var children = props.children,
70
- container = props.container,
75
+ _props$container = props.container,
76
+ container = _props$container === void 0 ? overlayContainer : _props$container,
71
77
  controlId = props.controlId,
72
78
  defaultOpen = props.defaultOpen,
73
79
  _props$trigger = props.trigger,
@@ -8,7 +8,7 @@ export interface PositionChildProps {
8
8
  export interface PositionProps {
9
9
  children: (props: PositionChildProps, ref: any) => React.ReactElement;
10
10
  className?: string;
11
- container?: HTMLElement | (() => HTMLElement);
11
+ container?: HTMLElement | (() => HTMLElement | null) | null;
12
12
  containerPadding?: number;
13
13
  placement?: TypeAttributes.Placement;
14
14
  preventOverflow?: boolean;
@@ -51,16 +51,19 @@ var PanelGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
51
51
  setActiveKey(activeKey);
52
52
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(activeKey, event);
53
53
  }, [onSelect, setActiveKey]);
54
+ var contextValue = (0, _react.useMemo)(function () {
55
+ return {
56
+ accordion: accordion,
57
+ activeKey: activeKey,
58
+ onGroupSelect: handleSelect
59
+ };
60
+ }, [accordion, activeKey, handleSelect]);
54
61
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
55
62
  ref: ref,
56
63
  role: accordion ? 'tablist' : undefined,
57
64
  className: classes
58
65
  }), /*#__PURE__*/_react.default.createElement(PanelGroupContext.Provider, {
59
- value: {
60
- accordion: accordion,
61
- activeKey: activeKey,
62
- onGroupSelect: handleSelect
63
- }
66
+ value: contextValue
64
67
  }, children));
65
68
  });
66
69
 
@@ -9,7 +9,6 @@ export declare const pickerPropTypes: {
9
9
  containerPadding: PropTypes.Requireable<number>;
10
10
  container: PropTypes.Requireable<any>;
11
11
  disabled: PropTypes.Requireable<boolean>;
12
- toggleAs: PropTypes.Requireable<PropTypes.ReactComponentLike>;
13
12
  menuClassName: PropTypes.Requireable<string>;
14
13
  menuStyle: PropTypes.Requireable<object>;
15
14
  placeholder: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -26,7 +25,7 @@ export declare const pickerPropTypes: {
26
25
  onOpen: PropTypes.Requireable<(...args: any[]) => any>;
27
26
  onClose: PropTypes.Requireable<(...args: any[]) => any>;
28
27
  onClean: PropTypes.Requireable<(...args: any[]) => any>;
29
- listProps: PropTypes.Requireable<object>;
28
+ listProps: PropTypes.Requireable<any>;
30
29
  onEnter: PropTypes.Requireable<(...args: any[]) => any>;
31
30
  onEntering: PropTypes.Requireable<(...args: any[]) => any>;
32
31
  onEntered: PropTypes.Requireable<(...args: any[]) => any>;
@@ -35,7 +34,7 @@ export declare const pickerPropTypes: {
35
34
  onExited: PropTypes.Requireable<(...args: any[]) => any>;
36
35
  };
37
36
  export declare const listPickerPropTypes: {
38
- data: PropTypes.Requireable<any[]>;
37
+ data: PropTypes.Validator<any[]>;
39
38
  valueKey: PropTypes.Requireable<string>;
40
39
  labelKey: PropTypes.Requireable<string>;
41
40
  childrenKey: PropTypes.Requireable<string>;
@@ -52,7 +51,6 @@ export declare const listPickerPropTypes: {
52
51
  containerPadding: PropTypes.Requireable<number>;
53
52
  container: PropTypes.Requireable<any>;
54
53
  disabled: PropTypes.Requireable<boolean>;
55
- toggleAs: PropTypes.Requireable<PropTypes.ReactComponentLike>;
56
54
  menuClassName: PropTypes.Requireable<string>;
57
55
  menuStyle: PropTypes.Requireable<object>;
58
56
  placeholder: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -69,7 +67,7 @@ export declare const listPickerPropTypes: {
69
67
  onOpen: PropTypes.Requireable<(...args: any[]) => any>;
70
68
  onClose: PropTypes.Requireable<(...args: any[]) => any>;
71
69
  onClean: PropTypes.Requireable<(...args: any[]) => any>;
72
- listProps: PropTypes.Requireable<object>;
70
+ listProps: PropTypes.Requireable<any>;
73
71
  onEnter: PropTypes.Requireable<(...args: any[]) => any>;
74
72
  onEntering: PropTypes.Requireable<(...args: any[]) => any>;
75
73
  onEntered: PropTypes.Requireable<(...args: any[]) => any>;
@@ -23,7 +23,8 @@ var pickerPropTypes = (0, _extends2.default)({}, _utils2.animationPropTypes, {
23
23
  containerPadding: _propTypes.default.number,
24
24
  container: _propTypes.default.oneOfType([_propTypes.default.any, _propTypes.default.func]),
25
25
  disabled: _propTypes.default.bool,
26
- toggleAs: _propTypes.default.elementType,
26
+ // PropTypes.elementType conflictin with React.ElementType
27
+ // toggleAs: PropTypes.elementType,
27
28
  menuClassName: _propTypes.default.string,
28
29
  menuStyle: _propTypes.default.object,
29
30
  placeholder: _propTypes.default.node,
@@ -41,11 +42,11 @@ var pickerPropTypes = (0, _extends2.default)({}, _utils2.animationPropTypes, {
41
42
  onOpen: _propTypes.default.func,
42
43
  onClose: _propTypes.default.func,
43
44
  onClean: _propTypes.default.func,
44
- listProps: _propTypes.default.object
45
+ listProps: _propTypes.default.any
45
46
  });
46
47
  exports.pickerPropTypes = pickerPropTypes;
47
48
  var listPickerPropTypes = (0, _extends2.default)({}, pickerPropTypes, {
48
- data: _propTypes.default.array,
49
+ data: _propTypes.default.array.isRequired,
49
50
  valueKey: _propTypes.default.string,
50
51
  labelKey: _propTypes.default.string,
51
52
  childrenKey: _propTypes.default.string,
@@ -56,13 +56,13 @@ interface FocusItemValueProps {
56
56
  * @param defaultFocusItemValue
57
57
  * @param props
58
58
  */
59
- export declare const useFocusItemValue: <T extends string | number>(defaultFocusItemValue: T | null | undefined, props: FocusItemValueProps) => {
59
+ export declare const useFocusItemValue: <T>(defaultFocusItemValue: T | null | undefined, props: FocusItemValueProps) => {
60
60
  focusItemValue: T | null | undefined;
61
61
  setFocusItemValue: React.Dispatch<React.SetStateAction<T | null | undefined>>;
62
62
  layer: number;
63
63
  setLayer: React.Dispatch<React.SetStateAction<number>>;
64
- keys: (string | undefined)[];
65
- setKeys: React.Dispatch<React.SetStateAction<(string | undefined)[]>>;
64
+ keys: any[];
65
+ setKeys: React.Dispatch<React.SetStateAction<any[]>>;
66
66
  onKeyDown: (event: any) => void;
67
67
  };
68
68
  interface ToggleKeyDownEventProps {