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
@@ -2,16 +2,16 @@
2
2
  import { CascaderProps } from './Cascader';
3
3
  import { ItemDataType } from '../@types/common';
4
4
  export declare function getColumnsAndPaths<T extends ItemDataType>(data: T[], value: any, options: any): {
5
- columns: ItemDataType[][];
5
+ columns: ItemDataType<string | number>[][];
6
6
  paths: T[];
7
7
  };
8
8
  export declare function usePaths(props: CascaderProps): {
9
9
  enforceUpdate: (nextValue: any, isAttachChildren?: boolean | undefined) => void;
10
- columnData: ItemDataType[][];
11
- valueToPaths: ItemDataType[];
12
- selectedPaths: ItemDataType[];
13
- setValueToPaths: import("react").Dispatch<import("react").SetStateAction<ItemDataType[]>>;
14
- setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType[][]>>;
15
- setSelectedPaths: import("react").Dispatch<import("react").SetStateAction<ItemDataType[]>>;
10
+ columnData: ItemDataType<string | number>[][];
11
+ valueToPaths: ItemDataType<string | number>[];
12
+ selectedPaths: ItemDataType<string | number>[];
13
+ setValueToPaths: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[]>>;
14
+ setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[][]>>;
15
+ setSelectedPaths: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[]>>;
16
16
  addColumn: (column: ItemDataType[], index: number) => void;
17
17
  };
@@ -1,13 +1,21 @@
1
+ import React, { Ref } from 'react';
1
2
  import { PickerLocale } from '../locales';
2
- import { PickerComponent } from '../Picker';
3
+ import { PickerInstance } from '../Picker';
3
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
4
- import { SelectProps } from '../SelectPicker';
5
+ import type { MultipleSelectProps } from '../SelectPicker';
5
6
  export declare type ValueType = (number | string)[];
6
- export interface CheckPickerProps<T = ValueType> extends FormControlPickerProps<T, PickerLocale, ItemDataType>, SelectProps<T> {
7
+ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerLocale, ItemDataType<T>>, MultipleSelectProps<T> {
7
8
  /** Top the selected option in the options */
8
9
  sticky?: boolean;
9
10
  /** A picker that can be counted */
10
11
  countable?: boolean;
11
12
  }
12
- declare const CheckPicker: PickerComponent<CheckPickerProps>;
13
+ export interface CheckPickerComponent {
14
+ <T>(props: CheckPickerProps<T> & {
15
+ ref?: Ref<PickerInstance>;
16
+ }): JSX.Element | null;
17
+ displayName?: string;
18
+ propTypes?: React.WeakValidationMap<CheckPickerProps<any>>;
19
+ }
20
+ declare const CheckPicker: CheckPickerComponent;
13
21
  export default CheckPicker;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _tsExpect = require("ts-expect");
8
+
9
+ var _CheckPicker = _interopRequireDefault(require("../CheckPicker"));
10
+
11
+ // Infer value and onChange types from data
12
+ var numberValuedData = [{
13
+ label: 'One',
14
+ value: 1
15
+ }];
16
+
17
+ /*#__PURE__*/
18
+ _react.default.createElement(_CheckPicker.default, {
19
+ data: numberValuedData,
20
+ value: [1]
21
+ }); // @ts-expect-error should not accept single value
22
+
23
+
24
+ /*#__PURE__*/
25
+ _react.default.createElement(_CheckPicker.default, {
26
+ data: numberValuedData,
27
+ value: 1
28
+ }); // @ts-expect-error should not accept string value
29
+
30
+
31
+ /*#__PURE__*/
32
+ _react.default.createElement(_CheckPicker.default, {
33
+ data: numberValuedData,
34
+ value: ['1']
35
+ });
36
+
37
+ /*#__PURE__*/
38
+ _react.default.createElement(_CheckPicker.default, {
39
+ data: numberValuedData,
40
+ onChange: function onChange(newValue) {
41
+ (0, _tsExpect.expectType)(newValue);
42
+ }
43
+ });
44
+
45
+ var stringValuedData = [{
46
+ label: 'One',
47
+ value: 'One'
48
+ }];
49
+
50
+ /*#__PURE__*/
51
+ _react.default.createElement(_CheckPicker.default, {
52
+ data: stringValuedData,
53
+ value: ['1']
54
+ }); // @ts-expect-error should not accept single value
55
+
56
+
57
+ /*#__PURE__*/
58
+ _react.default.createElement(_CheckPicker.default, {
59
+ data: numberValuedData,
60
+ value: "1"
61
+ }); // @ts-expect-error should not accept number value
62
+
63
+
64
+ /*#__PURE__*/
65
+ _react.default.createElement(_CheckPicker.default, {
66
+ data: stringValuedData,
67
+ value: [1]
68
+ });
69
+
70
+ /*#__PURE__*/
71
+ _react.default.createElement(_CheckPicker.default, {
72
+ data: stringValuedData,
73
+ onChange: function onChange(newValue) {
74
+ (0, _tsExpect.expectType)(newValue);
75
+ }
76
+ });
77
+
78
+ var pickerRef = /*#__PURE__*/_react.default.createRef();
79
+
80
+ /*#__PURE__*/
81
+ _react.default.createElement(_CheckPicker.default, {
82
+ ref: pickerRef,
83
+ data: []
84
+ });
@@ -16,12 +16,13 @@ var _CheckTreePicker = _interopRequireDefault(require("../CheckTreePicker"));
16
16
  var _TreeContext = _interopRequireDefault(require("../Tree/TreeContext"));
17
17
 
18
18
  var CheckTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
19
- var dragNodeRef = (0, _react.useRef)();
19
+ var contextValue = (0, _react.useMemo)(function () {
20
+ return {
21
+ inline: true
22
+ };
23
+ }, []);
20
24
  return /*#__PURE__*/_react.default.createElement(_TreeContext.default.Provider, {
21
- value: {
22
- inline: true,
23
- dragNodeRef: dragNodeRef
24
- }
25
+ value: contextValue
25
26
  }, /*#__PURE__*/_react.default.createElement(_CheckTreePicker.default, (0, _extends2.default)({
26
27
  ref: ref
27
28
  }, props)));
@@ -41,10 +41,13 @@ var Container = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
41
41
  var classes = merge(className, withClassPrefix({
42
42
  'has-sidebar': hasSidebar
43
43
  }));
44
- return /*#__PURE__*/_react.default.createElement(ContainerContext.Provider, {
45
- value: {
44
+ var contextValue = (0, _react.useMemo)(function () {
45
+ return {
46
46
  setHasSidebar: setHasSidebar
47
- }
47
+ };
48
+ }, [setHasSidebar]);
49
+ return /*#__PURE__*/_react.default.createElement(ContainerContext.Provider, {
50
+ value: contextValue
48
51
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
49
52
  ref: ref,
50
53
  className: classes
@@ -402,6 +402,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
402
402
  top: top
403
403
  };
404
404
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
405
+ role: "dialog",
405
406
  className: classes,
406
407
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
407
408
  style: styles,
@@ -439,7 +440,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
439
440
 
440
441
  return (_renderValue = renderValue === null || renderValue === void 0 ? void 0 : renderValue(value, formatStr)) !== null && _renderValue !== void 0 ? _renderValue : formatDate(value, formatStr);
441
442
  }, [formatStr, formatDate, placeholder, renderValue, value]);
442
- var caretComponent = (0, _react.useMemo)(function () {
443
+ var caretAs = (0, _react.useMemo)(function () {
443
444
  return _utils.DateUtils.shouldOnlyTime(formatStr) ? _ClockO.default : _Calendar.default;
444
445
  }, [formatStr]);
445
446
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
@@ -475,7 +476,8 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
475
476
  active: active,
476
477
  placement: placement,
477
478
  disabled: disabled,
478
- caretComponent: caretComponent
479
+ caretAs: caretAs,
480
+ "aria-haspopup": "dialog"
479
481
  }), renderDate())));
480
482
  });
481
483
 
@@ -211,7 +211,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
211
211
  }
212
212
 
213
213
  return isPlaintext ? '' : placeholder || rangeFormatStr;
214
- }, [character, formatDate, formatStr, placeholder, rangeFormatStr, renderValue, value]);
214
+ }, [character, formatDate, formatStr, placeholder, rangeFormatStr, renderValue]);
215
215
  /**
216
216
  * preset hover range
217
217
  */
@@ -263,7 +263,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
263
263
  if (closeOverlay !== false) {
264
264
  handleCloseDropdown();
265
265
  }
266
- }, [formatStr, handleCloseDropdown, onChange, selectedDates, setValue, value]);
266
+ }, [formatStr, handleCloseDropdown, onChange, setValue, value]);
267
267
  /**
268
268
  * Select the date range. If oneTap is not set, you need to click twice to select the start time and end time.
269
269
  * The MouseMove event is called between the first click and the second click to update the selection state.
@@ -293,7 +293,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
293
293
  } else if (!(0, _isNil.default)(nextHoverDateRange)) {
294
294
  setHoverDateRange(nextHoverDateRange);
295
295
  }
296
- }, [getHoverRangeValue, hoverRange]);
296
+ }, [getHoverRangeValue]);
297
+ /**
298
+ * Callback for selecting a date cell in the calendar grid
299
+ */
300
+
297
301
  var handleSelectDate = (0, _react.useCallback)(function (date, event) {
298
302
  var nextSelectDates = hoverDateRange !== null && hoverDateRange !== void 0 ? hoverDateRange : [];
299
303
  var hoverRangeValue = getHoverRangeValue(date);
@@ -329,7 +333,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
329
333
  nextSelectDates.reverse();
330
334
  }
331
335
 
332
- setHoverDateRange(nextSelectDates.length === 2 ? nextSelectDates : null);
336
+ setHoverDateRange(nextSelectDates.length === 2 ? nextSelectDates : [nextSelectDates[0], nextSelectDates[0]]);
333
337
  setSelectedDates(nextSelectDates);
334
338
  updateCalendarDate(nextSelectDates);
335
339
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
@@ -628,7 +632,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
628
632
  hasValue: hasValue,
629
633
  active: isPickerToggleActive,
630
634
  placement: placement,
631
- caretComponent: _Calendar.default,
635
+ caretAs: _Calendar.default,
632
636
  disabled: disabled
633
637
  }), getDisplayString(value))));
634
638
  });
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import DisclosureButton from './DisclosureButton';
3
3
  import DisclosureContent from './DisclosureContent';
4
- export interface DisclosureRenderProps {
4
+ export declare type DisclosureTrigger = 'click' | 'mouseover';
5
+ export interface DisclosureRenderProps extends Pick<React.HTMLAttributes<HTMLElement>, 'onMouseOver' | 'onMouseOut'> {
5
6
  open: boolean;
6
7
  }
7
8
  export interface DisclosureProps {
@@ -13,10 +14,12 @@ export interface DisclosureProps {
13
14
  hideOnClickOutside?: boolean;
14
15
  /** Callback when disclosure button is being activated to update the open state */
15
16
  onToggle?: (open: boolean, event: React.SyntheticEvent) => void;
17
+ /** What mouse events should disclosure reacts to */
18
+ trigger?: DisclosureTrigger[];
16
19
  }
17
- declare function Disclosure(props: DisclosureProps): JSX.Element;
18
- declare namespace Disclosure {
19
- var Button: typeof DisclosureButton;
20
- var Content: typeof DisclosureContent;
20
+ export interface DisclosureComponent extends React.FC<DisclosureProps> {
21
+ Button: typeof DisclosureButton;
22
+ Content: typeof DisclosureContent;
21
23
  }
24
+ declare const Disclosure: DisclosureComponent;
22
25
  export default Disclosure;
@@ -41,14 +41,17 @@ function disclosureReducer(state, action) {
41
41
  return state;
42
42
  }
43
43
 
44
- function Disclosure(props) {
44
+ var Disclosure = /*#__PURE__*/_react.default.memo(function (props) {
45
45
  var children = props.children,
46
46
  openProp = props.open,
47
47
  _props$defaultOpen = props.defaultOpen,
48
48
  defaultOpen = _props$defaultOpen === void 0 ? false : _props$defaultOpen,
49
49
  _props$hideOnClickOut = props.hideOnClickOutside,
50
50
  hideOnClickOutside = _props$hideOnClickOut === void 0 ? false : _props$hideOnClickOut,
51
- onToggle = props.onToggle;
51
+ onToggle = props.onToggle,
52
+ _props$trigger = props.trigger,
53
+ trigger = _props$trigger === void 0 ? ['click'] : _props$trigger;
54
+ var parentDisclosure = (0, _react.useContext)(_DisclosureContext.default);
52
55
 
53
56
  var _useReducer = (0, _react.useReducer)(disclosureReducer, (0, _extends2.default)({}, initialDisclosureState, {
54
57
  open: defaultOpen
@@ -71,19 +74,56 @@ function Disclosure(props) {
71
74
  });
72
75
  }
73
76
  });
74
- var context = (0, _react.useMemo)(function () {
77
+ var onMouseOver = (0, _react.useCallback)(function (event) {
78
+ if (!open) {
79
+ dispatch({
80
+ type: _DisclosureContext.DisclosureActionTypes.Show
81
+ });
82
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(true, event);
83
+ }
84
+ }, [open, dispatch, onToggle]);
85
+ var onMouseOut = (0, _react.useCallback)(function (event) {
86
+ if (open) {
87
+ dispatch({
88
+ type: _DisclosureContext.DisclosureActionTypes.Hide
89
+ });
90
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(false, event);
91
+ }
92
+ }, [open, dispatch, onToggle]);
93
+ var contextValue = (0, _react.useMemo)(function () {
94
+ var cascadeDispatch = function cascadeDispatch(action) {
95
+ var result = dispatch(action);
96
+
97
+ if ('cascade' in action) {
98
+ parentDisclosure === null || parentDisclosure === void 0 ? void 0 : parentDisclosure[1](action);
99
+ }
100
+
101
+ return result;
102
+ };
103
+
75
104
  return [{
76
105
  open: open
77
- }, dispatch, {
78
- onToggle: onToggle
106
+ }, cascadeDispatch, {
107
+ onToggle: onToggle,
108
+ trigger: trigger
79
109
  }];
80
- }, [open, dispatch, onToggle]);
110
+ }, [parentDisclosure, open, dispatch, onToggle, trigger]);
111
+ var renderProps = (0, _react.useMemo)(function () {
112
+ var renderProps = {
113
+ open: open
114
+ };
115
+
116
+ if (trigger.includes('mouseover')) {
117
+ renderProps.onMouseOver = onMouseOver;
118
+ renderProps.onMouseOut = onMouseOut;
119
+ }
120
+
121
+ return renderProps;
122
+ }, [open, trigger, onMouseOver, onMouseOut]);
81
123
  return /*#__PURE__*/_react.default.createElement(_DisclosureContext.default.Provider, {
82
- value: context
83
- }, children({
84
- open: open
85
- }, containerElementRef));
86
- }
124
+ value: contextValue
125
+ }, children(renderProps, containerElementRef));
126
+ });
87
127
 
88
128
  Disclosure.Button = _DisclosureButton.default;
89
129
  Disclosure.Content = _DisclosureContent.default;
@@ -3,9 +3,9 @@ export interface DisclosureButtonRenderProps {
3
3
  open: boolean;
4
4
  }
5
5
  export interface DisclosureButtonProps {
6
- children: (props: React.ButtonHTMLAttributes<HTMLButtonElement> & DisclosureButtonRenderProps, ref: React.Ref<HTMLButtonElement>) => React.ReactElement<React.HTMLAttributes<HTMLButtonElement>>;
6
+ children: (props: React.HTMLAttributes<HTMLElement> & DisclosureButtonRenderProps, ref: React.Ref<HTMLElement>) => React.ReactElement<React.HTMLAttributes<HTMLElement>>;
7
7
  }
8
- declare function DisclosureButton(props: DisclosureButtonProps): React.ReactElement<React.HTMLAttributes<HTMLButtonElement>, string | React.JSXElementConstructor<any>>;
8
+ declare function DisclosureButton(props: DisclosureButtonProps): React.ReactElement<React.HTMLAttributes<HTMLElement>, string | React.JSXElementConstructor<any>>;
9
9
  declare namespace DisclosureButton {
10
10
  var displayName: string;
11
11
  }
@@ -1,4 +1,5 @@
1
1
  import React, { Dispatch } from 'react';
2
+ import type { DisclosureTrigger } from './Disclosure';
2
3
  export interface DisclosureState {
3
4
  open: boolean;
4
5
  }
@@ -7,12 +8,16 @@ export declare enum DisclosureActionTypes {
7
8
  Hide = 1
8
9
  }
9
10
  export declare type DisclosureAction = {
10
- type: DisclosureActionTypes;
11
+ type: DisclosureActionTypes.Show;
12
+ } | {
13
+ type: DisclosureActionTypes.Hide;
14
+ cascade?: boolean;
11
15
  };
12
16
  export declare type DisclosureContextProps = [
13
17
  DisclosureState,
14
18
  Dispatch<DisclosureAction>,
15
19
  {
20
+ trigger: DisclosureTrigger[];
16
21
  onToggle?: (open: boolean, event: React.SyntheticEvent) => void;
17
22
  }
18
23
  ];
@@ -41,7 +41,7 @@ var _MenuItem = _interopRequireDefault(require("../Menu/MenuItem"));
41
41
 
42
42
  var _kebabCase = _interopRequireDefault(require("lodash/kebabCase"));
43
43
 
44
- var _Navbar = require("../Navbar/Navbar");
44
+ var _Navbar = require("../Navbar");
45
45
 
46
46
  var _Disclosure = _interopRequireDefault(require("../Disclosure/Disclosure"));
47
47
 
@@ -33,8 +33,6 @@ var _SidenavDropdownItem = _interopRequireDefault(require("../Sidenav/SidenavDro
33
33
 
34
34
  var _DisclosureContext = _interopRequireWildcard(require("../Disclosure/DisclosureContext"));
35
35
 
36
- var _SafeAnchor = _interopRequireDefault(require("../SafeAnchor"));
37
-
38
36
  var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
39
37
 
40
38
  var _useInternalId = _interopRequireDefault(require("../utils/useInternalId"));
@@ -87,7 +85,8 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
87
85
 
88
86
  var handleClickNavbarDropdownItem = (0, _react.useCallback)(function (event) {
89
87
  dispatchDisclosure === null || dispatchDisclosure === void 0 ? void 0 : dispatchDisclosure({
90
- type: _DisclosureContext.DisclosureActionTypes.Hide
88
+ type: _DisclosureContext.DisclosureActionTypes.Hide,
89
+ cascade: true
91
90
  });
92
91
  handleSelectItem === null || handleSelectItem === void 0 ? void 0 : handleSelectItem(event);
93
92
  }, [dispatchDisclosure, handleSelectItem]);
@@ -154,16 +153,16 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
154
153
  dataAttributes['data-event-key-type'] = typeof eventKey;
155
154
  }
156
155
 
157
- return /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_SafeAnchor.default, (0, _extends2.default)({
156
+ return renderDropdownItem((0, _extends2.default)({
158
157
  ref: ref,
159
158
  className: classes,
160
- "aria-current": selected || undefined
159
+ 'aria-current': selected || undefined
161
160
  }, dataAttributes, restProps, {
162
- as: Component,
163
- onClick: (0, _utils.createChainedFunction)(handleClickNavbarDropdownItem, restProps.onClick)
164
- }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
165
- className: prefix('menu-icon')
166
- }), children));
161
+ onClick: (0, _utils.createChainedFunction)(handleClickNavbarDropdownItem, restProps.onClick),
162
+ children: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, icon && /*#__PURE__*/_react.default.cloneElement(icon, {
163
+ className: prefix('menu-icon')
164
+ }), children)
165
+ }));
167
166
  }
168
167
 
169
168
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
@@ -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,19 +140,69 @@ 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 // focus: hasFocus
156
+
157
+ }));
158
+ return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
159
+ ref: (0, _utils.mergeRefs)(ref, containerRef),
160
+ className: classes
161
+ }, props), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Button, null, function (_ref2, buttonRef) {
162
+ var open = _ref2.open,
163
+ buttonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["open"]);
164
+ var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), // prefixItemClassName`submenu`,
165
+ withItemClassPrefix({
166
+ 'with-icon': icon,
167
+ open: open,
168
+ // active: selected,
169
+ disabled: disabled // focus: active
170
+
171
+ }));
172
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
173
+ ref: (0, _utils.mergeRefs)(buttonRef, buttonRef),
174
+ className: classes,
175
+ "data-event-key": eventKey,
176
+ "data-event-key-type": typeof eventKey
177
+ }, buttonProps), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
178
+ className: prefix('menu-icon')
179
+ }), title, /*#__PURE__*/_react.default.createElement(Icon, {
180
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
181
+ }));
182
+ }), /*#__PURE__*/_react.default.createElement(_Disclosure.default.Content, null, function (_ref3, elementRef) {
183
+ var open = _ref3.open;
184
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
185
+ return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
186
+ ref: elementRef,
187
+ className: menuClassName,
188
+ hidden: !open
189
+ }, menuProps), children);
190
+ }));
191
+ });
192
+ }
193
+
136
194
  return /*#__PURE__*/_react.default.createElement(_Menu.default, {
137
195
  openMenuOn: ['mouseover', 'click'],
138
- renderMenuButton: function renderMenuButton(_ref, buttonRef) {
139
- var open = _ref.open,
140
- menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
196
+ renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
197
+ var open = _ref4.open,
198
+ menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
141
199
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
142
200
  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`,
201
+ }, function (_ref5, menuitemRef) {
202
+ var selected = _ref5.selected,
203
+ active = _ref5.active,
204
+ menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref5, ["selected", "active"]);
205
+ var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), // prefixItemClassName`submenu`,
148
206
  withItemClassPrefix({
149
207
  'with-icon': icon,
150
208
  open: open,
@@ -160,13 +218,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
160
218
  }, menuitem, (0, _omit2.default)(menuButtonProps, ['role'])), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
161
219
  className: prefix('menu-icon')
162
220
  }), title, /*#__PURE__*/_react.default.createElement(Icon, {
163
- className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
221
+ className: prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
164
222
  }));
165
223
  });
166
224
  },
167
- renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
168
- var open = _ref3.open,
169
- popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["open"]);
225
+ renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
226
+ var open = _ref6.open,
227
+ popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref6, ["open"]);
170
228
  var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
171
229
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
172
230
  ref: popupRef,
@@ -175,9 +233,9 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
175
233
  }, popupProps, menuProps), children);
176
234
  },
177
235
  onToggleMenu: handleToggleSubmenu
178
- }, function (_ref4, menuContainerRef) {
179
- var open = _ref4.open,
180
- menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
236
+ }, function (_ref7, menuContainerRef) {
237
+ var open = _ref7.open,
238
+ menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref7, ["open"]);
181
239
  var classes = mergeItemClassNames(className, withItemClassPrefix({
182
240
  disabled: disabled,
183
241
  open: open,
@@ -23,6 +23,8 @@ var _useToggleCaret = _interopRequireDefault(require("../utils/useToggleCaret"))
23
23
 
24
24
  var _Sidenav = require("../Sidenav/Sidenav");
25
25
 
26
+ var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
27
+
26
28
  var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
27
29
  var _props$as = props.as,
28
30
  Component = _props$as === void 0 ? _Button.default : _props$as,
@@ -38,6 +40,9 @@ var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref
38
40
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "renderToggle", "children", "icon", "noCaret", "placement"]);
39
41
  var sidenav = (0, _react.useContext)(_Sidenav.SidenavContext);
40
42
 
43
+ var _useContext = (0, _react.useContext)(_NavContext.default),
44
+ withinNav = _useContext.withinNav;
45
+
41
46
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
42
47
  prefix = _useClassNames.prefix,
43
48
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -50,7 +55,9 @@ var DropdownToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref
50
55
 
51
56
  var Caret = (0, _useToggleCaret.default)(inSidenav ? 'bottomStart' : placement);
52
57
 
53
- var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
58
+ var toggle = /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
59
+ appearance: withinNav ? 'subtle' : undefined
60
+ }, rest, {
54
61
  ref: ref,
55
62
  className: classes
56
63
  }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {