rsuite 5.4.0 → 5.4.4

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 (139) hide show
  1. package/Button/styles/index.less +1 -5
  2. package/CHANGELOG.md +38 -0
  3. package/CheckTreePicker/styles/index.less +1 -1
  4. package/Drawer/styles/index.less +3 -0
  5. package/Dropdown/styles/index.less +6 -22
  6. package/Dropdown/styles/mixin.less +0 -2
  7. package/Modal/styles/index.less +23 -22
  8. package/Navbar/styles/index.less +20 -8
  9. package/README.md +1 -1
  10. package/Sidenav/styles/index.less +8 -2
  11. package/cjs/Affix/Affix.js +3 -1
  12. package/cjs/AvatarGroup/AvatarGroup.js +9 -4
  13. package/cjs/ButtonGroup/ButtonGroup.js +9 -4
  14. package/cjs/Calendar/Calendar.js +21 -20
  15. package/cjs/Calendar/Header.js +1 -3
  16. package/cjs/Calendar/Table.js +1 -1
  17. package/cjs/Calendar/TableRow.js +12 -7
  18. package/cjs/Calendar/View.js +9 -5
  19. package/cjs/Calendar/useCalendarDate.d.ts +1 -1
  20. package/cjs/Calendar/useCalendarDate.js +1 -1
  21. package/cjs/Carousel/Carousel.js +7 -1
  22. package/cjs/Cascader/Cascader.js +13 -2
  23. package/cjs/CheckPicker/CheckPicker.d.ts +5 -2
  24. package/cjs/CheckPicker/test/CheckPicker.test.js +8 -0
  25. package/cjs/CheckTree/index.js +9 -4
  26. package/cjs/CheckTreePicker/CheckTreePicker.js +1 -1
  27. package/cjs/CheckTreePicker/utils.js +1 -1
  28. package/cjs/Container/Container.js +6 -3
  29. package/cjs/CustomProvider/CustomProvider.d.ts +14 -14
  30. package/cjs/CustomProvider/CustomProvider.js +4 -3
  31. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  32. package/cjs/DatePicker/DatePicker.js +5 -5
  33. package/cjs/DateRangePicker/DateRangePicker.js +3 -3
  34. package/cjs/Disclosure/Disclosure.d.ts +8 -5
  35. package/cjs/Disclosure/Disclosure.js +51 -11
  36. package/cjs/Disclosure/DisclosureButton.d.ts +2 -2
  37. package/cjs/Disclosure/DisclosureContext.d.ts +6 -1
  38. package/cjs/Dropdown/Dropdown.js +1 -1
  39. package/cjs/Dropdown/DropdownItem.js +9 -10
  40. package/cjs/Dropdown/DropdownMenu.js +78 -26
  41. package/cjs/FormGroup/FormGroup.js +9 -4
  42. package/cjs/Menu/MenuItem.js +1 -1
  43. package/cjs/Modal/Modal.js +34 -22
  44. package/cjs/Modal/utils.js +16 -8
  45. package/cjs/MultiCascader/MultiCascader.js +6 -3
  46. package/cjs/Nav/Nav.js +10 -15
  47. package/cjs/Nav/NavItem.js +3 -1
  48. package/cjs/Navbar/index.d.ts +1 -0
  49. package/cjs/Navbar/index.js +4 -3
  50. package/cjs/Overlay/Modal.js +18 -32
  51. package/cjs/PanelGroup/PanelGroup.js +8 -5
  52. package/cjs/Picker/DropdownMenu.js +5 -0
  53. package/cjs/Picker/PickerToggle.js +2 -4
  54. package/cjs/SelectPicker/SelectPicker.d.ts +5 -2
  55. package/cjs/SelectPicker/test/SelectPicker.test.js +8 -0
  56. package/cjs/Toggle/Toggle.js +2 -1
  57. package/cjs/Tree/Tree.js +9 -4
  58. package/cjs/Uploader/UploadFileItem.d.ts +1 -1
  59. package/cjs/Uploader/UploadFileItem.js +1 -1
  60. package/cjs/Uploader/Uploader.js +3 -0
  61. package/cjs/utils/index.d.ts +1 -0
  62. package/cjs/utils/index.js +7 -2
  63. package/cjs/utils/propTypeChecker.d.ts +2 -6
  64. package/cjs/utils/propTypeChecker.js +7 -59
  65. package/cjs/utils/useClickOutside.js +6 -2
  66. package/cjs/utils/useMount.d.ts +2 -0
  67. package/cjs/utils/useMount.js +19 -0
  68. package/dist/rsuite-rtl.css +336 -180
  69. package/dist/rsuite-rtl.min.css +1 -1
  70. package/dist/rsuite-rtl.min.css.map +1 -1
  71. package/dist/rsuite.css +336 -180
  72. package/dist/rsuite.js +67 -45
  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/Affix/Affix.js +4 -2
  79. package/esm/AvatarGroup/AvatarGroup.js +7 -4
  80. package/esm/ButtonGroup/ButtonGroup.js +7 -4
  81. package/esm/Calendar/Calendar.js +22 -21
  82. package/esm/Calendar/Header.js +1 -3
  83. package/esm/Calendar/Table.js +1 -1
  84. package/esm/Calendar/TableRow.js +13 -8
  85. package/esm/Calendar/View.js +10 -6
  86. package/esm/Calendar/useCalendarDate.d.ts +1 -1
  87. package/esm/Calendar/useCalendarDate.js +1 -1
  88. package/esm/Carousel/Carousel.js +9 -3
  89. package/esm/Cascader/Cascader.js +13 -2
  90. package/esm/CheckPicker/CheckPicker.d.ts +5 -2
  91. package/esm/CheckPicker/test/CheckPicker.test.js +7 -0
  92. package/esm/CheckTree/index.js +7 -4
  93. package/esm/CheckTreePicker/CheckTreePicker.js +1 -1
  94. package/esm/CheckTreePicker/utils.js +1 -1
  95. package/esm/Container/Container.js +7 -4
  96. package/esm/CustomProvider/CustomProvider.d.ts +14 -14
  97. package/esm/CustomProvider/CustomProvider.js +2 -2
  98. package/esm/DatePicker/DatePicker.d.ts +1 -1
  99. package/esm/DatePicker/DatePicker.js +5 -4
  100. package/esm/DateRangePicker/DateRangePicker.js +3 -3
  101. package/esm/Disclosure/Disclosure.d.ts +8 -5
  102. package/esm/Disclosure/Disclosure.js +52 -13
  103. package/esm/Disclosure/DisclosureButton.d.ts +2 -2
  104. package/esm/Disclosure/DisclosureContext.d.ts +6 -1
  105. package/esm/Dropdown/Dropdown.js +1 -1
  106. package/esm/Dropdown/DropdownItem.js +9 -9
  107. package/esm/Dropdown/DropdownMenu.js +79 -27
  108. package/esm/FormGroup/FormGroup.js +7 -4
  109. package/esm/Menu/MenuItem.js +1 -1
  110. package/esm/Modal/Modal.js +36 -24
  111. package/esm/Modal/utils.js +16 -8
  112. package/esm/MultiCascader/MultiCascader.js +6 -3
  113. package/esm/Nav/Nav.js +11 -16
  114. package/esm/Nav/NavItem.js +3 -1
  115. package/esm/Navbar/index.d.ts +1 -0
  116. package/esm/Navbar/index.js +1 -0
  117. package/esm/Overlay/Modal.js +19 -33
  118. package/esm/PanelGroup/PanelGroup.js +9 -6
  119. package/esm/Picker/DropdownMenu.js +5 -0
  120. package/esm/Picker/PickerToggle.js +2 -4
  121. package/esm/SelectPicker/SelectPicker.d.ts +5 -2
  122. package/esm/SelectPicker/test/SelectPicker.test.js +7 -0
  123. package/esm/Toggle/Toggle.js +2 -1
  124. package/esm/Tree/Tree.js +7 -4
  125. package/esm/Uploader/UploadFileItem.d.ts +1 -1
  126. package/esm/Uploader/UploadFileItem.js +1 -1
  127. package/esm/Uploader/Uploader.js +4 -1
  128. package/esm/utils/index.d.ts +1 -0
  129. package/esm/utils/index.js +2 -1
  130. package/esm/utils/propTypeChecker.d.ts +2 -6
  131. package/esm/utils/propTypeChecker.js +7 -59
  132. package/esm/utils/useClickOutside.js +6 -2
  133. package/esm/utils/useMount.d.ts +2 -0
  134. package/esm/utils/useMount.js +13 -0
  135. package/package.json +2 -2
  136. package/styles/color-modes/dark.less +1 -0
  137. package/styles/color-modes/high-contrast.less +1 -0
  138. package/styles/color-modes/light.less +1 -0
  139. package/styles/mixins/utilities.less +17 -5
@@ -35,11 +35,15 @@ var _useCustom2 = _interopRequireDefault(require("../utils/useCustom"));
35
35
 
36
36
  var _DropdownContext = _interopRequireDefault(require("./DropdownContext"));
37
37
 
38
+ var _Navbar = require("../Navbar");
39
+
38
40
  var _Menubar = _interopRequireDefault(require("../Menu/Menubar"));
39
41
 
40
42
  var _SidenavDropdownMenu = _interopRequireDefault(require("../Sidenav/SidenavDropdownMenu"));
41
43
 
42
- var _templateObject, _templateObject2;
44
+ var _Disclosure = _interopRequireDefault(require("../Disclosure"));
45
+
46
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
43
47
 
44
48
  /**
45
49
  * The <Dropdown.Menu> API
@@ -71,6 +75,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
71
75
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["onToggle", "eventKey", "title", "activeKey", "onSelect", "classPrefix", "children"]);
72
76
  var dropdown = (0, _react.useContext)(_DropdownContext.default);
73
77
  var sidenav = (0, _react.useContext)(_Sidenav.SidenavContext);
78
+ var withinNavbar = Boolean((0, _react.useContext)(_Navbar.NavbarContext));
74
79
 
75
80
  var _useCustom = (0, _useCustom2.default)('DropdownMenu'),
76
81
  rtl = _useCustom.rtl;
@@ -91,17 +96,20 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
91
96
  var _useClassNames3 = (0, _utils.useClassNames)('dropdown-item'),
92
97
  mergeItemClassNames = _useClassNames3.merge,
93
98
  withItemClassPrefix = _useClassNames3.withClassPrefix,
94
- prefixItemClassName = _useClassNames3.prefix; // <Dropdown.Menu> is used outside of <Dropdown>
99
+ prefixItemClassName = _useClassNames3.prefix;
100
+
101
+ var contextValue = (0, _react.useMemo)(function () {
102
+ return {
103
+ activeKey: activeKey,
104
+ onSelect: onSelect
105
+ };
106
+ }, [activeKey, onSelect]); // <Dropdown.Menu> is used outside of <Dropdown>
95
107
  // renders a vertical `menubar`
96
108
 
97
-
98
109
  if (!dropdown) {
99
110
  var classes = merge(props.className, withClassPrefix());
100
111
  return /*#__PURE__*/_react.default.createElement(_DropdownContext.default.Provider, {
101
- value: {
102
- activeKey: activeKey,
103
- onSelect: onSelect
104
- }
112
+ value: contextValue
105
113
  }, /*#__PURE__*/_react.default.createElement(_Menubar.default, {
106
114
  vertical: true,
107
115
  onActivateItem: function onActivateItem(event) {
@@ -132,20 +140,65 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
132
140
  disabled = _omit.disabled,
133
141
  menuProps = (0, _objectWithoutPropertiesLoose2.default)(_omit, ["icon", "className", "disabled"]);
134
142
 
135
- var Icon = rtl ? _AngleLeft.default : _AngleRight.default;
143
+ var Icon = rtl ? _AngleLeft.default : _AngleRight.default; // Renders a disclosure when used within <Navbar>
144
+
145
+ if (withinNavbar) {
146
+ return /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
147
+ hideOnClickOutside: true,
148
+ trigger: ['click', 'mouseover']
149
+ }, function (_ref, containerRef) {
150
+ var open = _ref.open,
151
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
152
+ var classes = mergeItemClassNames(className, withItemClassPrefix({
153
+ disabled: disabled,
154
+ open: open,
155
+ submenu: true
156
+ }));
157
+ return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
158
+ ref: (0, _utils.mergeRefs)(ref, containerRef),
159
+ className: classes
160
+ }, props), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (_ref2, buttonRef) {
161
+ var open = _ref2.open,
162
+ buttonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
163
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
164
+ 'with-icon': icon,
165
+ open: open,
166
+ disabled: disabled
167
+ }));
168
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
169
+ ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
170
+ className: classes,
171
+ "data-event-key": eventKey,
172
+ "data-event-key-type": typeof eventKey
173
+ }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
174
+ className: prefix('menu-icon')
175
+ }), title, /*#__PURE__*/_react.default.createElement(Icon, {
176
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
177
+ }));
178
+ }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Content, null, function (_ref3, elementRef) {
179
+ var open = _ref3.open;
180
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
181
+ return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
182
+ ref: elementRef,
183
+ className: menuClassName,
184
+ hidden: !open
185
+ }, menuProps), children);
186
+ }));
187
+ });
188
+ }
189
+
136
190
  return /*#__PURE__*/_react.default.createElement(_Menu.default, {
137
191
  openMenuOn: ['mouseover', 'click'],
138
- renderMenuButton: function renderMenuButton(_ref, buttonRef) {
139
- var open = _ref.open,
140
- menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
192
+ renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
193
+ var open = _ref4.open,
194
+ menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
141
195
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
142
196
  disabled: disabled
143
- }, function (_ref2, menuitemRef) {
144
- var selected = _ref2.selected,
145
- active = _ref2.active,
146
- menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["selected", "active"]);
147
- var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), // prefixItemClassName`submenu`,
148
- withItemClassPrefix({
197
+ }, function (_ref5, menuitemRef) {
198
+ var selected = _ref5.selected,
199
+ active = _ref5.active,
200
+ menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref5, ["selected", "active"]);
201
+ var classes = mergeItemClassNames(className, prefixItemClassName(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), withItemClassPrefix({
149
202
  'with-icon': icon,
150
203
  open: open,
151
204
  active: selected,
@@ -160,13 +213,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
160
213
  }, menuitem, (0, _omit2.default)(menuButtonProps, ['role'])), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
161
214
  className: prefix('menu-icon')
162
215
  }), title, /*#__PURE__*/_react.default.createElement(Icon, {
163
- className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
216
+ className: prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
164
217
  }));
165
218
  });
166
219
  },
167
- renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
168
- var open = _ref3.open,
169
- popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["open"]);
220
+ renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
221
+ var open = _ref6.open,
222
+ popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref6, ["open"]);
170
223
  var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
171
224
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
172
225
  ref: popupRef,
@@ -175,14 +228,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
175
228
  }, popupProps, menuProps), children);
176
229
  },
177
230
  onToggleMenu: handleToggleSubmenu
178
- }, function (_ref4, menuContainerRef) {
179
- var open = _ref4.open,
180
- menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
231
+ }, function (_ref7, menuContainerRef) {
232
+ var open = _ref7.open,
233
+ menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref7, ["open"]);
181
234
  var classes = mergeItemClassNames(className, withItemClassPrefix({
182
235
  disabled: disabled,
183
236
  open: open,
184
- submenu: true // focus: hasFocus
185
-
237
+ submenu: true
186
238
  }));
187
239
  return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
188
240
  ref: (0, _utils.mergeRefs)(ref, menuContainerRef),
@@ -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"]);
@@ -56,21 +56,29 @@ var useBodyStyles = function useBodyStyles(ref, options) {
56
56
 
57
57
  (_windowResizeListener = windowResizeListener.current) === null || _windowResizeListener === void 0 ? void 0 : (_windowResizeListener2 = _windowResizeListener.off) === null || _windowResizeListener2 === void 0 ? void 0 : _windowResizeListener2.call(_windowResizeListener);
58
58
  (_contentElementResize = contentElementResizeObserver.current) === null || _contentElementResize === void 0 ? void 0 : _contentElementResize.disconnect();
59
+ windowResizeListener.current = null;
60
+ contentElementResizeObserver.current = null;
59
61
  }, []);
60
62
  var onChangeBodyStyles = (0, _react.useCallback)(function (entering) {
61
- if (overflow && !drawer) {
63
+ if (overflow && !drawer && ref.current) {
62
64
  updateBodyStyles(undefined, entering);
63
65
  contentElement.current = ref.current.querySelector("." + prefix('content'));
64
- windowResizeListener.current = (0, _on.default)(window, 'resize', updateBodyStyles);
65
- contentElementResizeObserver.current = new _resizeObserver.ResizeObserver(function () {
66
- return updateBodyStyles();
67
- });
68
- contentElementResizeObserver.current.observe(contentElement.current);
66
+
67
+ if (!windowResizeListener.current) {
68
+ windowResizeListener.current = (0, _on.default)(window, 'resize', updateBodyStyles);
69
+ }
70
+
71
+ if (contentElement.current && !contentElementResizeObserver.current) {
72
+ contentElementResizeObserver.current = new _resizeObserver.ResizeObserver(function () {
73
+ return updateBodyStyles();
74
+ });
75
+ contentElementResizeObserver.current.observe(contentElement.current);
76
+ }
69
77
  }
70
78
  }, [drawer, overflow, prefix, ref, updateBodyStyles]);
71
79
  (0, _react.useEffect)(function () {
72
- onDestroyEvents();
73
- }, [onDestroyEvents]);
80
+ return onDestroyEvents; // eslint-disable-next-line react-hooks/exhaustive-deps
81
+ }, []);
74
82
  return [overflow ? bodyStyles : {}, onChangeBodyStyles, onDestroyEvents];
75
83
  };
76
84
 
@@ -220,8 +220,11 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
220
220
  children.then(function (data) {
221
221
  node.loading = false;
222
222
  node[childrenKey] = data;
223
- addFlattenData(data, node);
224
- addColumn(data, cascadePaths.length);
223
+
224
+ if (targetRef.current) {
225
+ addFlattenData(data, node);
226
+ addColumn(data, cascadePaths.length);
227
+ }
225
228
  });
226
229
  } else {
227
230
  node.loading = false;
@@ -258,7 +261,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
258
261
  onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
259
262
  }, [cascade, onChange, onCheck, setValue, splitValue, value, valueKey]);
260
263
  var handleClean = (0, _react.useCallback)(function (event) {
261
- if (disabled) {
264
+ if (disabled || !targetRef.current) {
262
265
  return;
263
266
  }
264
267
 
package/cjs/Nav/Nav.js CHANGED
@@ -75,14 +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
- withinNav: true,
83
- activeKey: activeKey,
84
- onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
85
- }
88
+ value: contextValue
86
89
  }, /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
87
90
  ref: ref,
88
91
  className: classes
@@ -93,11 +96,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
93
96
 
94
97
  if (sidenav) {
95
98
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
96
- value: {
97
- withinNav: true,
98
- activeKey: activeKey,
99
- onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
100
- }
99
+ value: contextValue
101
100
  }, /*#__PURE__*/_react.default.createElement(_Menubar.default, {
102
101
  vertical: !!sidenav
103
102
  }, function (menubar, ref) {
@@ -110,11 +109,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
110
109
  }
111
110
 
112
111
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
113
- value: {
114
- withinNav: true,
115
- activeKey: activeKey,
116
- onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
117
- }
112
+ value: contextValue
118
113
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
119
114
  ref: menubarRef,
120
115
  className: classes
@@ -104,7 +104,9 @@ var NavItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
104
104
  }
105
105
 
106
106
  if (navbar) {
107
- return /*#__PURE__*/_react.default.createElement(_NavbarItem.default, props);
107
+ return /*#__PURE__*/_react.default.createElement(_NavbarItem.default, (0, _extends2.default)({
108
+ ref: ref
109
+ }, props));
108
110
  }
109
111
 
110
112
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
@@ -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;
@@ -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],
@@ -161,17 +160,6 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
161
160
 
162
161
  handleFocusDialog();
163
162
  });
164
- var handleBackdropClick = (0, _utils2.useEventCallback)(function (event) {
165
- if (event.target !== event.currentTarget) {
166
- return;
167
- }
168
-
169
- onBackdropClick === null || onBackdropClick === void 0 ? void 0 : onBackdropClick(event);
170
-
171
- if (backdrop === true) {
172
- onClose === null || onClose === void 0 ? void 0 : onClose(event);
173
- }
174
- });
175
163
  var documentKeyDownListener = (0, _react.useRef)();
176
164
  var documentFocusListener = (0, _react.useRef)();
177
165
  var handleOpen = (0, _utils2.useEventCallback)(function () {
@@ -224,17 +212,19 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
224
212
  var handleExited = (0, _react.useCallback)(function () {
225
213
  setExited(true);
226
214
  }, []);
215
+ var contextValue = (0, _react.useMemo)(function () {
216
+ return {
217
+ overlayContainer: function overlayContainer() {
218
+ return modal.dialog;
219
+ }
220
+ };
221
+ }, [modal.dialog]);
227
222
 
228
223
  if (!mountModal) {
229
224
  return null;
230
225
  }
231
226
 
232
227
  var renderBackdrop = function renderBackdrop() {
233
- var backdropPorps = {
234
- style: backdropStyle,
235
- onClick: handleBackdropClick
236
- };
237
-
238
228
  if (Transition) {
239
229
  return /*#__PURE__*/_react.default.createElement(_Fade.default, {
240
230
  transitionAppear: true,
@@ -245,18 +235,19 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
245
235
  rest = (0, _objectWithoutPropertiesLoose2.default)(fadeProps, ["className"]);
246
236
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
247
237
  "aria-hidden": true
248
- }, rest, backdropPorps, {
238
+ }, rest, {
239
+ style: backdropStyle,
249
240
  ref: (0, _utils2.mergeRefs)(modal.setBackdropRef, ref),
250
241
  className: (0, _classnames.default)(backdropClassName, className)
251
242
  }));
252
243
  });
253
244
  }
254
245
 
255
- return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
256
- "aria-hidden": true
257
- }, backdropPorps, {
246
+ return /*#__PURE__*/_react.default.createElement("div", {
247
+ "aria-hidden": true,
248
+ style: backdropStyle,
258
249
  className: backdropClassName
259
- }));
250
+ });
260
251
  };
261
252
 
262
253
  var dialogElement = Transition ? /*#__PURE__*/_react.default.createElement(Transition, (0, _extends2.default)({}, animationProps, {
@@ -272,17 +263,13 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
272
263
  onEntered: onEntered
273
264
  }), children) : children;
274
265
  return /*#__PURE__*/_react.default.createElement(_OverlayContext.default.Provider, {
275
- value: {
276
- overlayContainer: function overlayContainer() {
277
- return modal.dialog;
278
- }
279
- }
280
- }, /*#__PURE__*/_react.default.createElement(Portal, null, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
266
+ value: contextValue
267
+ }, /*#__PURE__*/_react.default.createElement(Portal, null, backdrop && renderBackdrop(), /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
281
268
  ref: (0, _utils2.mergeRefs)(modal.setDialogRef, ref),
282
269
  style: style,
283
270
  className: className,
284
271
  tabIndex: -1
285
- }), backdrop && renderBackdrop(), dialogElement)));
272
+ }), dialogElement)));
286
273
  });
287
274
 
288
275
  var modalPropTypes = {
@@ -309,8 +296,7 @@ Modal.propTypes = (0, _extends2.default)({}, _utils.animationPropTypes, modalPro
309
296
  dialogTransitionTimeout: _propTypes.default.number,
310
297
  backdropTransitionTimeout: _propTypes.default.number,
311
298
  transition: _propTypes.default.any,
312
- onEsc: _propTypes.default.func,
313
- onBackdropClick: _propTypes.default.func
299
+ onEsc: _propTypes.default.func
314
300
  });
315
301
  var _default = Modal;
316
302
  exports.default = _default;
@@ -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
 
@@ -122,6 +122,11 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
122
122
 
123
123
  (0, _react.useEffect)(function () {
124
124
  var container = menuBodyContainerRef.current;
125
+
126
+ if (!container) {
127
+ return;
128
+ }
129
+
125
130
  var activeItem = container.querySelector("." + prefix('item-focus'));
126
131
 
127
132
  if (!activeItem) {
@@ -111,11 +111,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
111
111
  }
112
112
  }, [input, onFocus]);
113
113
  var handleBlur = (0, _react.useCallback)(function (event) {
114
- if (document.activeElement !== inputRef.current) {
115
- var _inputRef$current2;
116
-
114
+ if (inputRef.current && document.activeElement !== inputRef.current) {
117
115
  setActive(false);
118
- (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.blur();
116
+ inputRef.current.blur();
119
117
  }
120
118
 
121
119
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
@@ -1,5 +1,6 @@
1
- import React from 'react';
1
+ import React, { Ref } from 'react';
2
2
  import { PickerLocale } from '../locales';
3
+ import { PickerInstance } from '../Picker';
3
4
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
4
5
  import { ListProps } from 'react-virtualized/dist/commonjs/List';
5
6
  export interface SelectProps<T> {
@@ -42,7 +43,9 @@ export interface MultipleSelectProps<T> extends Omit<SelectProps<T>, 'renderValu
42
43
  export interface SelectPickerProps<T> extends FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, SelectProps<T> {
43
44
  }
44
45
  export interface SelectPickerComponent {
45
- <T>(props: SelectPickerProps<T>): JSX.Element | null;
46
+ <T>(props: SelectPickerProps<T> & {
47
+ ref?: Ref<PickerInstance>;
48
+ }): JSX.Element | null;
46
49
  displayName?: string;
47
50
  propTypes?: React.WeakValidationMap<SelectPickerProps<any>>;
48
51
  }
@@ -59,4 +59,12 @@ _react.default.createElement(_SelectPicker.default, {
59
59
  onChange: function onChange(newValue) {
60
60
  (0, _tsExpect.expectType)(newValue);
61
61
  }
62
+ });
63
+
64
+ var pickerRef = /*#__PURE__*/_react.default.createRef();
65
+
66
+ /*#__PURE__*/
67
+ _react.default.createElement(_SelectPicker.default, {
68
+ ref: pickerRef,
69
+ data: []
62
70
  });