rsuite 5.4.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/Button/styles/index.less +1 -5
  2. package/CHANGELOG.md +42 -0
  3. package/CheckTreePicker/styles/index.less +48 -47
  4. package/Drawer/styles/index.less +3 -0
  5. package/Dropdown/styles/index.less +3 -19
  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/Picker/styles/mixin.less +3 -2
  10. package/README.md +1 -1
  11. package/Sidenav/styles/index.less +58 -57
  12. package/TreePicker/styles/index.less +3 -3
  13. package/cjs/Affix/Affix.js +3 -1
  14. package/cjs/Calendar/useCalendarDate.d.ts +1 -1
  15. package/cjs/Calendar/useCalendarDate.js +1 -1
  16. package/cjs/Carousel/Carousel.js +7 -1
  17. package/cjs/Cascader/Cascader.js +13 -2
  18. package/cjs/CheckPicker/CheckPicker.d.ts +5 -2
  19. package/cjs/CheckPicker/test/CheckPicker.test.js +8 -0
  20. package/cjs/CheckTreePicker/CheckTreePicker.js +1 -1
  21. package/cjs/CheckTreePicker/utils.js +1 -1
  22. package/cjs/CustomProvider/CustomProvider.d.ts +14 -14
  23. package/cjs/CustomProvider/CustomProvider.js +4 -3
  24. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  25. package/cjs/DatePicker/DatePicker.js +2 -4
  26. package/cjs/Disclosure/Disclosure.d.ts +8 -5
  27. package/cjs/Disclosure/Disclosure.js +49 -9
  28. package/cjs/Disclosure/DisclosureButton.d.ts +2 -2
  29. package/cjs/Disclosure/DisclosureContext.d.ts +6 -1
  30. package/cjs/Dropdown/Dropdown.d.ts +5 -0
  31. package/cjs/Dropdown/Dropdown.js +1 -1
  32. package/cjs/Dropdown/DropdownItem.js +9 -10
  33. package/cjs/Dropdown/DropdownMenu.js +69 -20
  34. package/cjs/Dropdown/test/Dropdown.test.d.ts +1 -0
  35. package/cjs/Dropdown/test/Dropdown.test.js +30 -0
  36. package/cjs/InputNumber/InputNumber.d.ts +1 -1
  37. package/cjs/InputNumber/InputNumber.js +36 -6
  38. package/cjs/InputNumber/test/InputNumber.test.d.ts +1 -0
  39. package/cjs/InputNumber/test/InputNumber.test.js +14 -0
  40. package/cjs/Modal/Modal.js +34 -22
  41. package/cjs/Modal/utils.js +16 -8
  42. package/cjs/MultiCascader/MultiCascader.js +7 -3
  43. package/cjs/Nav/NavItem.js +3 -1
  44. package/cjs/Navbar/index.d.ts +1 -0
  45. package/cjs/Navbar/index.js +4 -3
  46. package/cjs/Overlay/Modal.js +10 -27
  47. package/cjs/Picker/DropdownMenu.js +5 -0
  48. package/cjs/Picker/PickerToggle.js +2 -4
  49. package/cjs/RangeSlider/RangeSlider.d.ts +12 -2
  50. package/cjs/RangeSlider/RangeSlider.js +35 -12
  51. package/cjs/SelectPicker/SelectPicker.d.ts +5 -2
  52. package/cjs/SelectPicker/test/SelectPicker.test.js +8 -0
  53. package/cjs/Uploader/UploadFileItem.d.ts +1 -1
  54. package/cjs/Uploader/UploadFileItem.js +1 -1
  55. package/cjs/Uploader/Uploader.js +3 -0
  56. package/cjs/utils/index.d.ts +1 -0
  57. package/cjs/utils/index.js +7 -2
  58. package/cjs/utils/propTypeChecker.d.ts +2 -6
  59. package/cjs/utils/propTypeChecker.js +7 -59
  60. package/cjs/utils/treeUtils.js +4 -3
  61. package/cjs/utils/useClickOutside.js +6 -2
  62. package/cjs/utils/useMount.d.ts +2 -0
  63. package/cjs/utils/useMount.js +19 -0
  64. package/dist/rsuite-rtl.css +416 -264
  65. package/dist/rsuite-rtl.min.css +1 -1
  66. package/dist/rsuite-rtl.min.css.map +1 -1
  67. package/dist/rsuite.css +416 -264
  68. package/dist/rsuite.js +55 -33
  69. package/dist/rsuite.js.map +1 -1
  70. package/dist/rsuite.min.css +1 -1
  71. package/dist/rsuite.min.css.map +1 -1
  72. package/dist/rsuite.min.js +1 -1
  73. package/dist/rsuite.min.js.map +1 -1
  74. package/esm/Affix/Affix.js +4 -2
  75. package/esm/Calendar/useCalendarDate.d.ts +1 -1
  76. package/esm/Calendar/useCalendarDate.js +1 -1
  77. package/esm/Carousel/Carousel.js +9 -3
  78. package/esm/Cascader/Cascader.js +13 -2
  79. package/esm/CheckPicker/CheckPicker.d.ts +5 -2
  80. package/esm/CheckPicker/test/CheckPicker.test.js +7 -0
  81. package/esm/CheckTreePicker/CheckTreePicker.js +1 -1
  82. package/esm/CheckTreePicker/utils.js +1 -1
  83. package/esm/CustomProvider/CustomProvider.d.ts +14 -14
  84. package/esm/CustomProvider/CustomProvider.js +2 -2
  85. package/esm/DatePicker/DatePicker.d.ts +1 -1
  86. package/esm/DatePicker/DatePicker.js +2 -3
  87. package/esm/Disclosure/Disclosure.d.ts +8 -5
  88. package/esm/Disclosure/Disclosure.js +50 -11
  89. package/esm/Disclosure/DisclosureButton.d.ts +2 -2
  90. package/esm/Disclosure/DisclosureContext.d.ts +6 -1
  91. package/esm/Dropdown/Dropdown.d.ts +5 -0
  92. package/esm/Dropdown/Dropdown.js +1 -1
  93. package/esm/Dropdown/DropdownItem.js +9 -9
  94. package/esm/Dropdown/DropdownMenu.js +69 -20
  95. package/esm/Dropdown/test/Dropdown.test.d.ts +1 -0
  96. package/esm/Dropdown/test/Dropdown.test.js +22 -0
  97. package/esm/InputNumber/InputNumber.d.ts +1 -1
  98. package/esm/InputNumber/InputNumber.js +38 -7
  99. package/esm/InputNumber/test/InputNumber.test.d.ts +1 -0
  100. package/esm/InputNumber/test/InputNumber.test.js +7 -0
  101. package/esm/Modal/Modal.js +36 -24
  102. package/esm/Modal/utils.js +16 -8
  103. package/esm/MultiCascader/MultiCascader.js +7 -3
  104. package/esm/Nav/NavItem.js +3 -1
  105. package/esm/Navbar/index.d.ts +1 -0
  106. package/esm/Navbar/index.js +1 -0
  107. package/esm/Overlay/Modal.js +10 -27
  108. package/esm/Picker/DropdownMenu.js +5 -0
  109. package/esm/Picker/PickerToggle.js +2 -4
  110. package/esm/RangeSlider/RangeSlider.d.ts +12 -2
  111. package/esm/RangeSlider/RangeSlider.js +35 -12
  112. package/esm/SelectPicker/SelectPicker.d.ts +5 -2
  113. package/esm/SelectPicker/test/SelectPicker.test.js +7 -0
  114. package/esm/Uploader/UploadFileItem.d.ts +1 -1
  115. package/esm/Uploader/UploadFileItem.js +1 -1
  116. package/esm/Uploader/Uploader.js +4 -1
  117. package/esm/utils/index.d.ts +1 -0
  118. package/esm/utils/index.js +2 -1
  119. package/esm/utils/propTypeChecker.d.ts +2 -6
  120. package/esm/utils/propTypeChecker.js +7 -59
  121. package/esm/utils/treeUtils.js +6 -3
  122. package/esm/utils/useClickOutside.js +6 -2
  123. package/esm/utils/useMount.d.ts +2 -0
  124. package/esm/utils/useMount.js +13 -0
  125. package/package.json +2 -2
  126. package/styles/color-modes/dark.less +1 -0
  127. package/styles/color-modes/high-contrast.less +1 -0
  128. package/styles/color-modes/light.less +1 -0
  129. package/styles/mixins/utilities.less +17 -5
@@ -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 { ItemDataType, FormControlPickerProps } from '../@types/common';
4
5
  import type { MultipleSelectProps } from '../SelectPicker';
5
6
  export declare type ValueType = (number | string)[];
@@ -10,7 +11,9 @@ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerL
10
11
  countable?: boolean;
11
12
  }
12
13
  export interface CheckPickerComponent {
13
- <T>(props: CheckPickerProps<T>): JSX.Element | null;
14
+ <T>(props: CheckPickerProps<T> & {
15
+ ref?: Ref<PickerInstance>;
16
+ }): JSX.Element | null;
14
17
  displayName?: string;
15
18
  propTypes?: React.WeakValidationMap<CheckPickerProps<any>>;
16
19
  }
@@ -73,4 +73,12 @@ _react.default.createElement(_CheckPicker.default, {
73
73
  onChange: function onChange(newValue) {
74
74
  (0, _tsExpect.expectType)(newValue);
75
75
  }
76
+ });
77
+
78
+ var pickerRef = /*#__PURE__*/_react.default.createRef();
79
+
80
+ /*#__PURE__*/
81
+ _react.default.createElement(_CheckPicker.default, {
82
+ ref: pickerRef,
83
+ data: []
76
84
  });
@@ -645,7 +645,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
645
645
  var renderCheckTree = function renderCheckTree() {
646
646
  var _withCheckTreeClassPr, _merge2;
647
647
 
648
- var classes = withCheckTreeClassPrefix((_withCheckTreeClassPr = {}, _withCheckTreeClassPr[className !== null && className !== void 0 ? className : ''] = inline, _withCheckTreeClassPr['without-children'] = !_utils2.isSomeNodeHasChildren, _withCheckTreeClassPr.virtualized = virtualized, _withCheckTreeClassPr));
648
+ var classes = withCheckTreeClassPrefix((_withCheckTreeClassPr = {}, _withCheckTreeClassPr[className !== null && className !== void 0 ? className : ''] = inline, _withCheckTreeClassPr['without-children'] = !(0, _utils2.isSomeNodeHasChildren)(data, childrenKey), _withCheckTreeClassPr.virtualized = virtualized, _withCheckTreeClassPr));
649
649
  var formattedNodes = getFormattedNodes(renderNode);
650
650
 
651
651
  if (!formattedNodes.some(function (v) {
@@ -62,7 +62,7 @@ function isSomeChildChecked(nodes, parent, childrenKey) {
62
62
 
63
63
  function isSomeNodeHasChildren(data, childrenKey) {
64
64
  return data.some(function (node) {
65
- return node[childrenKey];
65
+ return Array.isArray(node[childrenKey]);
66
66
  });
67
67
  }
68
68
  /**
@@ -72,10 +72,10 @@ declare const CustomContext: React.Context<CustomProviderProps<{
72
72
  saturday: string;
73
73
  ok: string;
74
74
  today: string;
75
- yesterday: string; /** Language configuration */
75
+ yesterday: string;
76
76
  hours: string;
77
77
  minutes: string;
78
- seconds: string;
78
+ seconds: string; /** Support right-to-left */
79
79
  formattedMonthPattern: string;
80
80
  formattedDayPattern: string;
81
81
  dateLocale: any;
@@ -90,10 +90,10 @@ declare const CustomContext: React.Context<CustomProviderProps<{
90
90
  saturday: string;
91
91
  ok: string;
92
92
  today: string;
93
- yesterday: string; /** Language configuration */
93
+ yesterday: string;
94
94
  hours: string;
95
95
  minutes: string;
96
- seconds: string;
96
+ seconds: string; /** Support right-to-left */
97
97
  formattedMonthPattern: string;
98
98
  formattedDayPattern: string;
99
99
  dateLocale: any;
@@ -109,10 +109,10 @@ declare const CustomContext: React.Context<CustomProviderProps<{
109
109
  saturday: string;
110
110
  ok: string;
111
111
  today: string;
112
- yesterday: string; /** Language configuration */
112
+ yesterday: string;
113
113
  hours: string;
114
114
  minutes: string;
115
- seconds: string;
115
+ seconds: string; /** Support right-to-left */
116
116
  formattedMonthPattern: string;
117
117
  formattedDayPattern: string;
118
118
  dateLocale: any;
@@ -120,7 +120,7 @@ declare const CustomContext: React.Context<CustomProviderProps<{
120
120
  Picker?: {
121
121
  noResultsText: string;
122
122
  placeholder: string;
123
- searchPlaceholder: string; /** Supported themes */
123
+ searchPlaceholder: string;
124
124
  checkAll: string;
125
125
  } | undefined;
126
126
  InputPicker?: {
@@ -176,10 +176,10 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
176
176
  saturday: string;
177
177
  ok: string;
178
178
  today: string;
179
- yesterday: string; /** Language configuration */
179
+ yesterday: string;
180
180
  hours: string;
181
181
  minutes: string;
182
- seconds: string;
182
+ seconds: string; /** Support right-to-left */
183
183
  formattedMonthPattern: string;
184
184
  formattedDayPattern: string;
185
185
  dateLocale: any;
@@ -194,10 +194,10 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
194
194
  saturday: string;
195
195
  ok: string;
196
196
  today: string;
197
- yesterday: string; /** Language configuration */
197
+ yesterday: string;
198
198
  hours: string;
199
199
  minutes: string;
200
- seconds: string;
200
+ seconds: string; /** Support right-to-left */
201
201
  formattedMonthPattern: string;
202
202
  formattedDayPattern: string;
203
203
  dateLocale: any;
@@ -213,10 +213,10 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
213
213
  saturday: string;
214
214
  ok: string;
215
215
  today: string;
216
- yesterday: string; /** Language configuration */
216
+ yesterday: string;
217
217
  hours: string;
218
218
  minutes: string;
219
- seconds: string;
219
+ seconds: string; /** Support right-to-left */
220
220
  formattedMonthPattern: string;
221
221
  formattedDayPattern: string;
222
222
  dateLocale: any;
@@ -224,7 +224,7 @@ declare const Consumer: React.Consumer<CustomProviderProps<{
224
224
  Picker?: {
225
225
  noResultsText: string;
226
226
  placeholder: string;
227
- searchPlaceholder: string; /** Supported themes */
227
+ searchPlaceholder: string;
228
228
  checkAll: string;
229
229
  } | undefined;
230
230
  InputPicker?: {
@@ -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 _prefix = require("../utils/prefix");
15
17
 
@@ -37,7 +39,7 @@ var CustomProvider = function CustomProvider(props) {
37
39
  }, rest);
38
40
  }, [classPrefix, theme, rest]);
39
41
 
40
- _react.default.useEffect(function () {
42
+ (0, _react.useEffect)(function () {
41
43
  if (_DOMHelper.canUseDOM && theme) {
42
44
  (0, _DOMHelper.addClass)(document.body, (0, _prefix.prefix)(classPrefix, "theme-" + theme)); // Remove the className that will cause style conflicts
43
45
 
@@ -48,7 +50,6 @@ var CustomProvider = function CustomProvider(props) {
48
50
  });
49
51
  }
50
52
  }, [classPrefix, theme]);
51
-
52
53
  return /*#__PURE__*/_react.default.createElement(Provider, {
53
54
  value: value
54
55
  }, children);
@@ -3,7 +3,7 @@ import { RangeType } from './Toolbar';
3
3
  import { DatePickerLocale } from '../locales';
4
4
  import { FormControlBaseProps, PickerBaseProps, RsRefForwardingComponent } from '../@types/common';
5
5
  export type { RangeType } from './Toolbar';
6
- export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date> {
6
+ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null> {
7
7
  /** Configure shortcut options */
8
8
  ranges?: RangeType<Date>[];
9
9
  /** Calendar panel default presentation date and time */
@@ -15,8 +15,6 @@ var _react = _interopRequireWildcard(require("react"));
15
15
 
16
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
- var _isNil = _interopRequireDefault(require("lodash/isNil"));
19
-
20
18
  var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
21
19
 
22
20
  var _pick = _interopRequireDefault(require("lodash/pick"));
@@ -194,11 +192,11 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
194
192
  closeOverlay = true;
195
193
  }
196
194
 
197
- var nextValue = !(0, _isNil.default)(nextPageDate) ? nextPageDate : calendarDate;
195
+ var nextValue = typeof nextPageDate !== 'undefined' ? nextPageDate : calendarDate;
198
196
  setCalendarDate(nextValue || new Date());
199
197
  setValue(nextValue);
200
198
 
201
- if (nextValue !== value || !_utils.DateUtils.isSameDay(nextValue, value)) {
199
+ if (nextValue !== value) {
202
200
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
203
201
  } // `closeOverlay` default value is `true`
204
202
 
@@ -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
  });
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]);
74
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
124
  value: contextValue
83
- }, children({
84
- open: open
85
- }, containerElementRef));
86
- }
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
  ];
@@ -3,6 +3,7 @@ import DropdownMenu from './DropdownMenu';
3
3
  import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
4
4
  import { IconProps } from '@rsuite/icons/lib/Icon';
5
5
  import DropdownItem from './DropdownItem';
6
+ import Button from '../Button';
6
7
  export declare type DropdownTrigger = 'click' | 'hover' | 'contextMenu';
7
8
  export interface DropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect' | 'title'> {
8
9
  /** Define the title as a submenu */
@@ -48,6 +49,10 @@ export interface DropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttr
48
49
  onSelect?: (eventKey: T | undefined, event: React.SyntheticEvent) => void;
49
50
  }
50
51
  export interface DropdownComponent extends RsRefForwardingComponent<'div', DropdownProps> {
52
+ <ToggleAs extends React.ElementType = typeof Button>(props: DropdownProps & {
53
+ ref?: React.Ref<any>;
54
+ toggleAs?: ToggleAs;
55
+ } & React.ComponentProps<ToggleAs>, context: any): JSX.Element | null;
51
56
  Item: typeof DropdownItem;
52
57
  Menu: typeof DropdownMenu;
53
58
  }
@@ -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;
@@ -135,20 +140,65 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
135
140
  disabled = _omit.disabled,
136
141
  menuProps = (0, _objectWithoutPropertiesLoose2.default)(_omit, ["icon", "className", "disabled"]);
137
142
 
138
- 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
+
139
190
  return /*#__PURE__*/_react.default.createElement(_Menu.default, {
140
191
  openMenuOn: ['mouseover', 'click'],
141
- renderMenuButton: function renderMenuButton(_ref, buttonRef) {
142
- var open = _ref.open,
143
- menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["open"]);
192
+ renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
193
+ var open = _ref4.open,
194
+ menuButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
144
195
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
145
196
  disabled: disabled
146
- }, function (_ref2, menuitemRef) {
147
- var selected = _ref2.selected,
148
- active = _ref2.active,
149
- menuitem = (0, _objectWithoutPropertiesLoose2.default)(_ref2, ["selected", "active"]);
150
- var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["toggle"]))), // prefixItemClassName`submenu`,
151
- 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({
152
202
  'with-icon': icon,
153
203
  open: open,
154
204
  active: selected,
@@ -163,13 +213,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
163
213
  }, menuitem, (0, _omit2.default)(menuButtonProps, ['role'])), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
164
214
  className: prefix('menu-icon')
165
215
  }), title, /*#__PURE__*/_react.default.createElement(Icon, {
166
- className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
216
+ className: prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["toggle-icon"])))
167
217
  }));
168
218
  });
169
219
  },
170
- renderMenuPopup: function renderMenuPopup(_ref3, popupRef) {
171
- var open = _ref3.open,
172
- popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["open"]);
220
+ renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
221
+ var open = _ref6.open,
222
+ popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref6, ["open"]);
173
223
  var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
174
224
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
175
225
  ref: popupRef,
@@ -178,14 +228,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
178
228
  }, popupProps, menuProps), children);
179
229
  },
180
230
  onToggleMenu: handleToggleSubmenu
181
- }, function (_ref4, menuContainerRef) {
182
- var open = _ref4.open,
183
- menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
231
+ }, function (_ref7, menuContainerRef) {
232
+ var open = _ref7.open,
233
+ menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref7, ["open"]);
184
234
  var classes = mergeItemClassNames(className, withItemClassPrefix({
185
235
  disabled: disabled,
186
236
  open: open,
187
- submenu: true // focus: hasFocus
188
-
237
+ submenu: true
189
238
  }));
190
239
  return /*#__PURE__*/_react.default.createElement("li", (0, _extends2.default)({
191
240
  ref: (0, _utils.mergeRefs)(ref, menuContainerRef),
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _Dropdown = _interopRequireDefault(require("../Dropdown"));
8
+
9
+ var ref = /*#__PURE__*/_react.default.createRef(); // Infer `toggleAs` props (defaults to Button)
10
+
11
+
12
+ /*#__PURE__*/
13
+ _react.default.createElement(_Dropdown.default, {
14
+ ref: ref,
15
+ appearance: "subtle",
16
+ size: "sm"
17
+ });
18
+ /* eslint-disable @typescript-eslint/no-unused-vars */
19
+
20
+
21
+ var CustomToggle = function CustomToggle(_props) {
22
+ return null;
23
+ };
24
+
25
+ /*#__PURE__*/
26
+ _react.default.createElement(_Dropdown.default, {
27
+ ref: ref,
28
+ toggleAs: CustomToggle,
29
+ myProp: "myValue"
30
+ });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, TypeAttributes, FormControlBaseProps } from '../@types/common';
3
- export interface InputNumberProps<T = number | string> extends WithAsProps, FormControlBaseProps<T> {
3
+ export interface InputNumberProps<T = number | string> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'size' | 'prefix'>, WithAsProps, FormControlBaseProps<T> {
4
4
  /** Button can have different appearances */
5
5
  buttonAppearance?: TypeAttributes.Appearance;
6
6
  /** An input can show that it is disabled */