rsuite 5.0.0-beta.5 → 5.0.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 (194) hide show
  1. package/Animation/styles/index.less +16 -16
  2. package/Animation/styles/mixin.less +2 -2
  3. package/Button/styles/index.less +36 -1
  4. package/Button/styles/mixin.less +7 -1
  5. package/CHANGELOG.md +47 -4
  6. package/Calendar/styles/index.less +7 -1
  7. package/Checkbox/styles/index.less +18 -2
  8. package/DatePicker/styles/index.less +6 -2
  9. package/Drawer/styles/index.less +11 -2
  10. package/Drawer/styles/mixin.less +2 -2
  11. package/Dropdown/styles/index.less +4 -0
  12. package/Form/styles/mixin.less +6 -0
  13. package/InputGroup/styles/index.less +4 -0
  14. package/Message/styles/index.less +16 -0
  15. package/Modal/styles/index.less +3 -2
  16. package/Nav/styles/index.less +18 -2
  17. package/Navbar/styles/index.less +68 -34
  18. package/Notification/styles/index.less +9 -3
  19. package/Pagination/styles/index.less +12 -1
  20. package/Pagination/styles/mixin.less +7 -0
  21. package/Picker/styles/index.less +25 -3
  22. package/Picker/styles/mixin.less +7 -2
  23. package/Popover/styles/index.less +23 -30
  24. package/Popover/styles/mixins.less +72 -0
  25. package/README.md +4 -4
  26. package/Radio/styles/index.less +16 -0
  27. package/RadioGroup/styles/index.less +4 -0
  28. package/Rate/styles/index.less +13 -2
  29. package/Ripple/styles/index.less +8 -4
  30. package/Sidenav/styles/index.less +160 -47
  31. package/Table/styles/index.less +8 -0
  32. package/TagInput/package.json +7 -0
  33. package/TagInput/styles/index.less +13 -0
  34. package/Toggle/styles/index.less +29 -19
  35. package/Tooltip/styles/index.less +32 -38
  36. package/Tooltip/styles/mixins.less +72 -0
  37. package/Uploader/styles/index.less +11 -1
  38. package/cjs/@types/common.d.ts +2 -0
  39. package/cjs/Animation/Bounce.js +10 -4
  40. package/cjs/Animation/Collapse.d.ts +1 -48
  41. package/cjs/Animation/Collapse.js +60 -106
  42. package/cjs/Animation/Fade.js +10 -5
  43. package/cjs/Animation/Slide.js +8 -4
  44. package/cjs/Carousel/Carousel.d.ts +7 -0
  45. package/cjs/Carousel/Carousel.js +24 -11
  46. package/cjs/CheckTree/index.js +14 -5
  47. package/cjs/CheckTreePicker/CheckTreePicker.js +9 -5
  48. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  49. package/cjs/DatePicker/DatePicker.js +2 -13
  50. package/cjs/DateRangePicker/Calendar.d.ts +2 -1
  51. package/cjs/DateRangePicker/Calendar.js +4 -3
  52. package/cjs/DateRangePicker/DateRangePicker.d.ts +1 -1
  53. package/cjs/DateRangePicker/DateRangePicker.js +58 -43
  54. package/cjs/DateRangePicker/utils.d.ts +1 -1
  55. package/cjs/DateRangePicker/utils.js +9 -5
  56. package/cjs/Dropdown/Dropdown.js +31 -18
  57. package/cjs/Dropdown/DropdownContext.d.ts +4 -1
  58. package/cjs/Dropdown/DropdownItem.js +31 -4
  59. package/cjs/Dropdown/DropdownState.d.ts +37 -0
  60. package/cjs/Dropdown/DropdownState.js +66 -0
  61. package/cjs/Dropdown/DropdownToggle.js +3 -6
  62. package/cjs/InputNumber/InputNumber.js +11 -10
  63. package/cjs/InputPicker/InputPicker.d.ts +16 -3
  64. package/cjs/InputPicker/InputPicker.js +85 -44
  65. package/cjs/List/ListItem.d.ts +1 -1
  66. package/cjs/Menu/MenuItem.js +1 -1
  67. package/cjs/MultiCascader/MultiCascader.js +4 -3
  68. package/cjs/Nav/NavItem.js +11 -63
  69. package/cjs/Navbar/NavbarItem.d.ts +19 -0
  70. package/cjs/Navbar/NavbarItem.js +93 -0
  71. package/cjs/Pagination/Pagination.js +1 -1
  72. package/cjs/Picker/PickerToggle.js +2 -2
  73. package/cjs/Picker/utils.d.ts +1 -1
  74. package/cjs/Picker/utils.js +26 -22
  75. package/cjs/Progress/ProgressCircle.js +15 -15
  76. package/cjs/SelectPicker/SelectPicker.d.ts +1 -3
  77. package/cjs/Sidenav/SidenavDropdown.js +6 -1
  78. package/cjs/Sidenav/SidenavItem.js +46 -12
  79. package/cjs/Slider/Slider.js +2 -1
  80. package/cjs/TagInput/index.d.ts +13 -0
  81. package/cjs/TagInput/index.js +58 -0
  82. package/cjs/TagPicker/index.d.ts +10 -2
  83. package/cjs/TagPicker/index.js +25 -6
  84. package/cjs/Tree/Tree.d.ts +0 -2
  85. package/cjs/Tree/Tree.js +13 -4
  86. package/cjs/Tree/TreeContext.d.ts +7 -0
  87. package/cjs/Tree/TreeContext.js +13 -0
  88. package/cjs/TreePicker/TreeNode.js +10 -3
  89. package/cjs/TreePicker/TreePicker.js +22 -10
  90. package/cjs/Uploader/UploadFileItem.d.ts +5 -0
  91. package/cjs/Uploader/UploadFileItem.js +4 -3
  92. package/cjs/Uploader/Uploader.d.ts +8 -3
  93. package/cjs/Uploader/Uploader.js +12 -6
  94. package/cjs/index.d.ts +2 -0
  95. package/cjs/index.js +5 -1
  96. package/cjs/utils/ajaxUpload.d.ts +5 -1
  97. package/cjs/utils/ajaxUpload.js +24 -13
  98. package/cjs/utils/constants.d.ts +1 -0
  99. package/cjs/utils/constants.js +1 -0
  100. package/cjs/utils/dateUtils.d.ts +1 -0
  101. package/cjs/utils/dateUtils.js +5 -1
  102. package/cjs/utils/useInternalId.d.ts +4 -0
  103. package/cjs/utils/useInternalId.js +24 -0
  104. package/cjs/utils/useUniqueId.d.ts +1 -1
  105. package/cjs/utils/useUniqueId.js +1 -1
  106. package/dist/rsuite-rtl.css +1614 -221
  107. package/dist/rsuite-rtl.min.css +1 -1
  108. package/dist/rsuite-rtl.min.css.map +1 -1
  109. package/dist/rsuite.css +1618 -221
  110. package/dist/rsuite.js +288 -288
  111. package/dist/rsuite.min.css +1 -1
  112. package/dist/rsuite.min.css.map +1 -1
  113. package/dist/rsuite.min.js +1 -1
  114. package/dist/rsuite.min.js.map +1 -1
  115. package/esm/@types/common.d.ts +2 -0
  116. package/esm/Animation/Bounce.js +8 -4
  117. package/esm/Animation/Collapse.d.ts +1 -48
  118. package/esm/Animation/Collapse.js +59 -104
  119. package/esm/Animation/Fade.js +8 -4
  120. package/esm/Animation/Slide.js +6 -3
  121. package/esm/Carousel/Carousel.d.ts +7 -0
  122. package/esm/Carousel/Carousel.js +25 -12
  123. package/esm/CheckTree/index.js +11 -5
  124. package/esm/CheckTreePicker/CheckTreePicker.js +8 -6
  125. package/esm/DatePicker/DatePicker.d.ts +5 -1
  126. package/esm/DatePicker/DatePicker.js +2 -13
  127. package/esm/DateRangePicker/Calendar.d.ts +2 -1
  128. package/esm/DateRangePicker/Calendar.js +4 -3
  129. package/esm/DateRangePicker/DateRangePicker.d.ts +1 -1
  130. package/esm/DateRangePicker/DateRangePicker.js +27 -12
  131. package/esm/DateRangePicker/utils.d.ts +1 -1
  132. package/esm/DateRangePicker/utils.js +7 -3
  133. package/esm/Dropdown/Dropdown.js +30 -19
  134. package/esm/Dropdown/DropdownContext.d.ts +4 -1
  135. package/esm/Dropdown/DropdownItem.js +30 -6
  136. package/esm/Dropdown/DropdownState.d.ts +37 -0
  137. package/esm/Dropdown/DropdownState.js +55 -0
  138. package/esm/Dropdown/DropdownToggle.js +3 -6
  139. package/esm/InputNumber/InputNumber.js +11 -10
  140. package/esm/InputPicker/InputPicker.d.ts +16 -3
  141. package/esm/InputPicker/InputPicker.js +84 -45
  142. package/esm/List/ListItem.d.ts +1 -1
  143. package/esm/Menu/MenuItem.js +1 -1
  144. package/esm/MultiCascader/MultiCascader.js +4 -3
  145. package/esm/Nav/NavItem.js +12 -61
  146. package/esm/Navbar/NavbarItem.d.ts +19 -0
  147. package/esm/Navbar/NavbarItem.js +73 -0
  148. package/esm/Pagination/Pagination.js +1 -1
  149. package/esm/Picker/PickerToggle.js +2 -2
  150. package/esm/Picker/utils.d.ts +1 -1
  151. package/esm/Picker/utils.js +26 -22
  152. package/esm/Progress/ProgressCircle.js +15 -15
  153. package/esm/SelectPicker/SelectPicker.d.ts +1 -3
  154. package/esm/Sidenav/SidenavDropdown.js +5 -1
  155. package/esm/Sidenav/SidenavItem.js +47 -13
  156. package/esm/Slider/Slider.js +2 -1
  157. package/esm/TagInput/index.d.ts +13 -0
  158. package/esm/TagInput/index.js +44 -0
  159. package/esm/TagPicker/index.d.ts +10 -2
  160. package/esm/TagPicker/index.js +23 -6
  161. package/esm/Tree/Tree.d.ts +0 -2
  162. package/esm/Tree/Tree.js +10 -4
  163. package/esm/Tree/TreeContext.d.ts +7 -0
  164. package/esm/Tree/TreeContext.js +3 -0
  165. package/esm/TreePicker/TreeNode.js +10 -4
  166. package/esm/TreePicker/TreePicker.js +23 -12
  167. package/esm/Uploader/UploadFileItem.d.ts +5 -0
  168. package/esm/Uploader/UploadFileItem.js +2 -3
  169. package/esm/Uploader/Uploader.d.ts +8 -3
  170. package/esm/Uploader/Uploader.js +12 -6
  171. package/esm/index.d.ts +2 -0
  172. package/esm/index.js +1 -0
  173. package/esm/utils/ajaxUpload.d.ts +5 -1
  174. package/esm/utils/ajaxUpload.js +24 -13
  175. package/esm/utils/constants.d.ts +1 -0
  176. package/esm/utils/constants.js +1 -0
  177. package/esm/utils/dateUtils.d.ts +1 -0
  178. package/esm/utils/dateUtils.js +1 -0
  179. package/esm/utils/useInternalId.d.ts +4 -0
  180. package/esm/utils/useInternalId.js +16 -0
  181. package/esm/utils/useUniqueId.d.ts +1 -1
  182. package/esm/utils/useUniqueId.js +1 -1
  183. package/package.json +4 -9
  184. package/styles/color-modes/dark.less +28 -5
  185. package/styles/color-modes/high-contrast.less +317 -0
  186. package/styles/color-modes/light.less +24 -1
  187. package/styles/color-modes.less +5 -0
  188. package/styles/colors/high-contrast.less +105 -0
  189. package/styles/index.less +1 -0
  190. package/styles/mixins/color-modes.less +6 -0
  191. package/styles/mixins/listbox.less +13 -1
  192. package/styles/mixins/menu.less +7 -0
  193. package/styles/mixins/utilities.less +9 -1
  194. package/styles/variables.less +11 -0
@@ -54,7 +54,6 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
54
54
  defaultValue = props.defaultValue,
55
55
  disabled = props.disabled,
56
56
  formatStr = props.format,
57
- inline = props.inline,
58
57
  isoWeek = props.isoWeek,
59
58
  limitEndYear = props.limitEndYear,
60
59
  overrideLocale = props.locale,
@@ -83,7 +82,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
83
82
  onSelect = props.onSelect,
84
83
  onToggleMonthDropdown = props.onToggleMonthDropdown,
85
84
  onToggleTimeDropdown = props.onToggleTimeDropdown,
86
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "defaultValue", "disabled", "format", "inline", "isoWeek", "limitEndYear", "locale", "menuClassName", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "disabledDate", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown"]);
85
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "locale", "menuClassName", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "disabledDate", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown"]);
87
86
 
88
87
  var _useCustom = (0, _utils.useCustom)('DatePicker', overrideLocale),
89
88
  locale = _useCustom.locale,
@@ -92,8 +91,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
92
91
 
93
92
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
94
93
  merge = _useClassNames.merge,
95
- prefix = _useClassNames.prefix,
96
- withClassPrefix = _useClassNames.withClassPrefix;
94
+ prefix = _useClassNames.prefix;
97
95
 
98
96
  var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
99
97
  value = _useControlled[0],
@@ -434,14 +432,6 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
434
432
  var caretComponent = (0, _react.useMemo)(function () {
435
433
  return _utils.DateUtils.shouldOnlyTime(formatStr) ? _ClockO.default : _Calendar.default;
436
434
  }, [formatStr]);
437
-
438
- if (inline) {
439
- return /*#__PURE__*/_react.default.createElement(Component, {
440
- ref: rootRef,
441
- className: merge(className, withClassPrefix('date-inline'))
442
- }, calendar);
443
- }
444
-
445
435
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
446
436
  trigger: "active",
447
437
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
@@ -490,7 +480,6 @@ DatePicker.propTypes = (0, _extends2.default)({}, _Picker.pickerPropTypes, {
490
480
  hideHours: _propTypes.default.func,
491
481
  hideMinutes: _propTypes.default.func,
492
482
  hideSeconds: _propTypes.default.func,
493
- inline: _propTypes.default.bool,
494
483
  isoWeek: _propTypes.default.bool,
495
484
  limitEndYear: _propTypes.default.number,
496
485
  onChange: _propTypes.default.func,
@@ -13,7 +13,8 @@ export interface CalendarProps extends WithAsProps, Omit<CalendarCoreProps, Omit
13
13
  isoWeek?: boolean;
14
14
  limitEndYear?: number;
15
15
  locale?: DatePickerLocale;
16
- onChangeCalendarDate?: (index: number, nextPageDate: Date) => void;
16
+ onChangeCalendarDate?: (index: number, date: Date) => void;
17
+ onChangeCalendarTime?: (index: number, date: Date) => void;
17
18
  onMouseMove?: (date: Date) => void;
18
19
  onSelect?: (date: Date, event?: React.SyntheticEvent<any>) => void;
19
20
  showOneCalendar?: boolean;
@@ -36,9 +36,10 @@ var Calendar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
36
36
  index = props.index,
37
37
  limitEndYear = props.limitEndYear,
38
38
  onChangeCalendarDate = props.onChangeCalendarDate,
39
+ onChangeCalendarTime = props.onChangeCalendarTime,
39
40
  showOneCalendar = props.showOneCalendar,
40
41
  value = props.value,
41
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "calendarDate", "disabledDate", "index", "limitEndYear", "onChangeCalendarDate", "showOneCalendar", "value"]);
42
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "calendarDate", "disabledDate", "index", "limitEndYear", "onChangeCalendarDate", "onChangeCalendarTime", "showOneCalendar", "value"]);
42
43
 
43
44
  var _useState = (0, _react.useState)(),
44
45
  calendarState = _useState[0],
@@ -55,8 +56,8 @@ var Calendar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
55
56
  setCalendarState(undefined);
56
57
  }, [index, onChangeCalendarDate]);
57
58
  var handleChangePageTime = (0, _react.useCallback)(function (nextPageDate) {
58
- onChangeCalendarDate(index, nextPageDate);
59
- }, [index, onChangeCalendarDate]);
59
+ onChangeCalendarTime(index, nextPageDate);
60
+ }, [index, onChangeCalendarTime]);
60
61
  var toggleMonthDropdown = (0, _react.useCallback)(function () {
61
62
  setCalendarState(calendarState === _Calendar.CalendarState.DROP_MONTH ? undefined : _Calendar.CalendarState.DROP_MONTH);
62
63
  }, [calendarState]);
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { PickerComponent } from '../Picker';
3
2
  import { FormControlBaseProps, PickerBaseProps } from '../@types/common';
3
+ import { PickerComponent } from '../Picker';
4
4
  import { DisabledDateFunction, RangeType, ValueType } from './types';
5
5
  export interface DateRangePickerProps extends PickerBaseProps, FormControlBaseProps<ValueType> {
6
6
  /** Configure shortcut options */
@@ -11,35 +11,35 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
14
- var _react = _interopRequireWildcard(require("react"));
14
+ var _Calendar = _interopRequireDefault(require("@rsuite/icons/legacy/Calendar"));
15
15
 
16
- var _propTypes = _interopRequireDefault(require("prop-types"));
16
+ var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
17
17
 
18
18
  var _omit = _interopRequireDefault(require("lodash/omit"));
19
19
 
20
- var _pick = _interopRequireDefault(require("lodash/pick"));
20
+ var _partial = _interopRequireDefault(require("lodash/partial"));
21
21
 
22
- var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
22
+ var _pick = _interopRequireDefault(require("lodash/pick"));
23
23
 
24
- var _dateUtils = require("../utils/dateUtils");
24
+ var _propTypes = _interopRequireDefault(require("prop-types"));
25
25
 
26
- var disabledDateUtils = _interopRequireWildcard(require("./disabledDateUtils"));
26
+ var _react = _interopRequireWildcard(require("react"));
27
27
 
28
28
  var _CustomProvider = require("../CustomProvider");
29
29
 
30
30
  var _Toolbar = _interopRequireDefault(require("../DatePicker/Toolbar"));
31
31
 
32
- var _Calendar = _interopRequireDefault(require("./Calendar"));
32
+ var _Picker = require("../Picker");
33
33
 
34
- var _utils = require("./utils");
34
+ var _utils = require("../utils");
35
35
 
36
- var _utils2 = require("../utils");
36
+ var _dateUtils = require("../utils/dateUtils");
37
37
 
38
- var _Picker = require("../Picker");
38
+ var _Calendar2 = _interopRequireDefault(require("./Calendar"));
39
39
 
40
- var _partial = _interopRequireDefault(require("lodash/partial"));
40
+ var disabledDateUtils = _interopRequireWildcard(require("./disabledDateUtils"));
41
41
 
42
- var _Calendar2 = _interopRequireDefault(require("@rsuite/icons/legacy/Calendar"));
42
+ var _utils2 = require("./utils");
43
43
 
44
44
  var defaultProps = (0, _extends2.default)({}, _Picker.pickerDefaultProps, {
45
45
  as: 'div',
@@ -94,17 +94,17 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
94
94
  onSelect = props.onSelect,
95
95
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "style", "toggleAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect"]);
96
96
 
97
- var _useClassNames = (0, _utils2.useClassNames)(classPrefix),
97
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
98
98
  merge = _useClassNames.merge,
99
99
  prefix = _useClassNames.prefix;
100
100
 
101
- var _useCustom = (0, _utils2.useCustom)('DateRangePicker', overrideLocale),
101
+ var _useCustom = (0, _utils.useCustom)('DateRangePicker', overrideLocale),
102
102
  locale = _useCustom.locale,
103
103
  formatDate = _useCustom.formatDate;
104
104
 
105
105
  var rangeFormatStr = "" + formatStr + character + formatStr;
106
106
 
107
- var _useControlled = (0, _utils2.useControlled)(valueProp, defaultValue !== null && defaultValue !== void 0 ? defaultValue : []),
107
+ var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue !== null && defaultValue !== void 0 ? defaultValue : []),
108
108
  value = _useControlled[0],
109
109
  setValue = _useControlled[1];
110
110
  /**
@@ -135,7 +135,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
135
135
  setHoverValue = _useState2[1]; // The displayed calendar panel is rendered based on this value.
136
136
 
137
137
 
138
- var _useState3 = (0, _react.useState)((0, _utils.getCalendarDate)({
138
+ var _useState3 = (0, _react.useState)((0, _utils2.getCalendarDate)({
139
139
  value: valueProp !== null && valueProp !== void 0 ? valueProp : defaultCalendarValue
140
140
  })),
141
141
  calendarDate = _useState3[0],
@@ -158,7 +158,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
158
158
  */
159
159
 
160
160
  var updateCalendarDate = (0, _react.useCallback)(function (value) {
161
- setCalendarDate((0, _utils.getCalendarDate)({
161
+ setCalendarDate((0, _utils2.getCalendarDate)({
162
162
  value: value
163
163
  }));
164
164
  }, []); // if valueProp changed then update selectValue/hoverValue
@@ -227,11 +227,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
227
227
  var hoverRangeFunc = hoverRange;
228
228
 
229
229
  if (hoverRange === 'week') {
230
- hoverRangeFunc = (0, _partial.default)(_utils.getWeekHoverRange, isoWeek);
230
+ hoverRangeFunc = (0, _partial.default)(_utils2.getWeekHoverRange, isoWeek);
231
231
  }
232
232
 
233
233
  if (hoverRangeFunc === 'month') {
234
- hoverRangeFunc = _utils.getMonthHoverRange;
234
+ hoverRangeFunc = _utils2.getMonthHoverRange;
235
235
  }
236
236
 
237
237
  if (typeof hoverRangeFunc !== 'function') {
@@ -245,7 +245,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
245
245
  return [];
246
246
  }
247
247
 
248
- if (_utils2.DateUtils.isAfter(hoverValues[0], hoverValues[1])) {
248
+ if (_utils.DateUtils.isAfter(hoverValues[0], hoverValues[1])) {
249
249
  hoverValues.reverse();
250
250
  }
251
251
 
@@ -259,7 +259,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
259
259
  var nextValue = !(0, _isUndefined.default)(nextSelectValue) ? nextSelectValue : selectValue;
260
260
  setSelectValue(nextValue || []);
261
261
 
262
- if (!(0, _dateUtils.isSameDay)(nextValue[0], value[0]) || !(0, _dateUtils.isSameDay)(nextValue[1], value[1])) {
262
+ if (!(0, _utils2.isSameRange)(nextValue, value, formatStr)) {
263
263
  setValue(nextValue);
264
264
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
265
265
  } // `closeOverlay` default value is `true`
@@ -268,7 +268,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
268
268
  if (closeOverlay !== false) {
269
269
  handleCloseDropdown();
270
270
  }
271
- }, [handleCloseDropdown, onChange, selectValue, setSelectValue, setValue, value]);
271
+ }, [formatStr, handleCloseDropdown, onChange, selectValue, setValue, value]);
272
272
  /**
273
273
  * Select the date range. If oneTap is not set, you need to click twice to select the start time and end time.
274
274
  * The MouseMove event is called between the first click and the second click to update the selection state.
@@ -282,7 +282,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
282
282
  if (hoverRange) {
283
283
  var nextHoverValue = [selectRangeValueRef.current[0], hoverRangeValue[1]];
284
284
 
285
- if (_utils2.DateUtils.isBefore(hoverRangeValue[0], selectRangeValueRef.current[0])) {
285
+ if (_utils.DateUtils.isBefore(hoverRangeValue[0], selectRangeValueRef.current[0])) {
286
286
  nextHoverValue[0] = hoverRangeValue[0];
287
287
  nextHoverValue[1] = selectRangeValueRef.current[1];
288
288
  }
@@ -304,7 +304,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
304
304
  var noHoverRangeValid = hoverRangeValue.length !== 2; // in `oneTap` mode
305
305
 
306
306
  if (hasDoneSelect.current && oneTap) {
307
- handleValueUpdate(event, noHoverRangeValid ? [(0, _utils.setTimingMargin)(date), (0, _utils.setTimingMargin)(date, 'right')] : hoverRangeValue);
307
+ handleValueUpdate(event, noHoverRangeValid ? [(0, _utils2.setTimingMargin)(date), (0, _utils2.setTimingMargin)(date, 'right')] : hoverRangeValue);
308
308
  hasDoneSelect.current = false;
309
309
  return;
310
310
  } // no preset hover range can use
@@ -329,7 +329,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
329
329
  } // If user have completed the selection, then sort
330
330
 
331
331
 
332
- if (nextSelectValue.length === 2 && _utils2.DateUtils.isAfter(nextSelectValue[0], nextSelectValue[1])) {
332
+ if (nextSelectValue.length === 2 && _utils.DateUtils.isAfter(nextSelectValue[0], nextSelectValue[1])) {
333
333
  nextSelectValue.reverse();
334
334
  }
335
335
 
@@ -357,6 +357,20 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
357
357
  nextCalendarDate[index] = date;
358
358
  updateCalendarDate(nextCalendarDate);
359
359
  }, [calendarDate, updateCalendarDate]);
360
+ var handleChangeCalendarTime = (0, _react.useCallback)(function (index, date) {
361
+ setSelectValue(function (prev) {
362
+ var next = [].concat(prev);
363
+ var clonedDate = new Date(date.valueOf()); // if next[index] is not empty, only update the time after aligning the year, month and day
364
+
365
+ if (next[index]) {
366
+ clonedDate.setFullYear(next[index].getFullYear(), next[index].getMonth(), next[index].getDate());
367
+ }
368
+
369
+ next[index] = clonedDate;
370
+ return next;
371
+ });
372
+ handleChangeCalendarDate(index, date);
373
+ }, [handleChangeCalendarDate]);
360
374
  /**
361
375
  * Toolbar operation callback function
362
376
  */
@@ -381,7 +395,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
381
395
  var rangeValue = value.split(character); // isMatch('01/11/2020', 'MM/dd/yyyy') ==> true
382
396
  // isMatch('2020-11-01', 'MM/dd/yyyy') ==> false
383
397
 
384
- if (!_utils2.DateUtils.isMatch(rangeValue[0], formatStr) || !_utils2.DateUtils.isMatch(rangeValue[1], formatStr)) {
398
+ if (!_utils.DateUtils.isMatch(rangeValue[0], formatStr) || !_utils.DateUtils.isMatch(rangeValue[1], formatStr)) {
385
399
  setInputState('Error');
386
400
  return;
387
401
  }
@@ -390,12 +404,12 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
390
404
  var endDate = new Date(rangeValue[1]);
391
405
  var selectValue = [startDate, endDate];
392
406
 
393
- if (!_utils2.DateUtils.isValid(startDate) || !_utils2.DateUtils.isValid(endDate)) {
407
+ if (!_utils.DateUtils.isValid(startDate) || !_utils.DateUtils.isValid(endDate)) {
394
408
  setInputState('Error');
395
409
  return;
396
410
  }
397
411
 
398
- if (disabledDate(startDate, selectValue, true, _utils2.DATERANGE_DISABLED_TARGET.CALENDAR)) {
412
+ if (disabledDate(startDate, selectValue, true, _utils.DATERANGE_DISABLED_TARGET.CALENDAR)) {
399
413
  setInputState('Error');
400
414
  return;
401
415
  }
@@ -424,7 +438,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
424
438
  endData = value[1];
425
439
  nextCalendarDate = [_startDate, (0, _dateUtils.isSameMonth)(_startDate, endData) ? (0, _dateUtils.addMonths)(endData, 1) : endData];
426
440
  } else {
427
- nextCalendarDate = (0, _utils.getCalendarDate)({
441
+ nextCalendarDate = (0, _utils2.getCalendarDate)({
428
442
  value: defaultCalendarValue
429
443
  });
430
444
  }
@@ -450,12 +464,12 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
450
464
  var nextSelectValue = [selectStartDate, selectEndDate]; // If the date is between the start and the end
451
465
  // the button is disabled
452
466
 
453
- while (_utils2.DateUtils.isBefore(start, end) || _utils2.DateUtils.isSameDay(start, end)) {
467
+ while (_utils.DateUtils.isBefore(start, end) || _utils.DateUtils.isSameDay(start, end)) {
454
468
  if (disabledDate(start, nextSelectValue, hasDoneSelect.current, type)) {
455
469
  return true;
456
470
  }
457
471
 
458
- start = _utils2.DateUtils.addDays(start, 1);
472
+ start = _utils.DateUtils.addDays(start, 1);
459
473
  }
460
474
 
461
475
  return false;
@@ -468,7 +482,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
468
482
  return true;
469
483
  }
470
484
 
471
- return disabledByBetween(start, end, _utils2.DATERANGE_DISABLED_TARGET.TOOLBAR_BUTTON_OK);
485
+ return disabledByBetween(start, end, _utils.DATERANGE_DISABLED_TARGET.TOOLBAR_BUTTON_OK);
472
486
  }, [disabledByBetween, selectValue]);
473
487
  var disabledShortcutButton = (0, _react.useCallback)(function (value) {
474
488
  if (value === void 0) {
@@ -483,7 +497,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
483
497
  return true;
484
498
  }
485
499
 
486
- return disabledByBetween(start, end, _utils2.DATERANGE_DISABLED_TARGET.TOOLBAR_SHORTCUT);
500
+ return disabledByBetween(start, end, _utils.DATERANGE_DISABLED_TARGET.TOOLBAR_SHORTCUT);
487
501
  }, [disabledByBetween]);
488
502
  var handleDisabledDate = (0, _react.useCallback)(function (date, values, type) {
489
503
  return disabledDate(date, values, hasDoneSelect.current, type);
@@ -519,12 +533,13 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
519
533
  showWeekNumbers: showWeekNumbers,
520
534
  value: selectValue,
521
535
  onChangeCalendarDate: handleChangeCalendarDate,
536
+ onChangeCalendarTime: handleChangeCalendarTime,
522
537
  onMouseMove: handleMouseMove,
523
538
  onSelect: handleSelectValueChange
524
539
  };
525
540
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
526
541
  className: classes,
527
- ref: (0, _utils2.mergeRefs)(overlayRef, speakerRef),
542
+ ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
528
543
  target: triggerRef,
529
544
  style: styles
530
545
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -535,9 +550,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
535
550
  className: prefix('daterange-header')
536
551
  }, getDisplayString(selectValue)), /*#__PURE__*/_react.default.createElement("div", {
537
552
  className: prefix("daterange-calendar-" + (showOneCalendar ? 'single' : 'group'))
538
- }, /*#__PURE__*/_react.default.createElement(_Calendar.default, (0, _extends2.default)({
553
+ }, /*#__PURE__*/_react.default.createElement(_Calendar2.default, (0, _extends2.default)({
539
554
  index: 0
540
- }, panelProps)), !showOneCalendar && /*#__PURE__*/_react.default.createElement(_Calendar.default, (0, _extends2.default)({
555
+ }, panelProps)), !showOneCalendar && /*#__PURE__*/_react.default.createElement(_Calendar2.default, (0, _extends2.default)({
541
556
  index: 1
542
557
  }, panelProps)))), /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
543
558
  locale: locale,
@@ -564,30 +579,30 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
564
579
  pickerProps: (0, _pick.default)(props, _Picker.pickTriggerPropKeys),
565
580
  ref: triggerRef,
566
581
  placement: placement,
567
- onEnter: (0, _utils2.createChainedFunction)(handleEnter, onEnter),
568
- onEntered: (0, _utils2.createChainedFunction)(handleEntered, onEntered),
569
- onExited: (0, _utils2.createChainedFunction)(handleExited, onExited),
582
+ onEnter: (0, _utils.createChainedFunction)(handleEnter, onEnter),
583
+ onEntered: (0, _utils.createChainedFunction)(handleEntered, onEntered),
584
+ onExited: (0, _utils.createChainedFunction)(handleExited, onExited),
570
585
  speaker: renderDropdownMenu
571
586
  }, /*#__PURE__*/_react.default.createElement(Component, {
572
587
  ref: rootRef,
573
588
  className: merge(className, classes, (_merge = {}, _merge[prefix('error')] = inputState === 'Error', _merge)),
574
589
  style: style
575
- }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys, _utils2.DateUtils.calendarOnlyProps)), {
590
+ }, /*#__PURE__*/_react.default.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, (0, _omit.default)(rest, [].concat(_Picker.omitTriggerPropKeys, usedClassNamePropKeys, _utils.DateUtils.calendarOnlyProps)), {
576
591
  as: toggleAs,
577
592
  ref: targetRef,
578
593
  input: true,
579
- inputMask: _utils2.DateUtils.getDateMask(rangeFormatStr),
594
+ inputMask: _utils.DateUtils.getDateMask(rangeFormatStr),
580
595
  inputValue: value ? getDisplayString(value, true) : '',
581
596
  inputPlaceholder: typeof placeholder === 'string' && placeholder ? placeholder : rangeFormatStr,
582
597
  onInputChange: handleInputChange,
583
598
  onInputBlur: handleInputBlur,
584
599
  onKeyDown: onPickerKeyDown,
585
- onClean: (0, _utils2.createChainedFunction)(handleClean, onClean),
600
+ onClean: (0, _utils.createChainedFunction)(handleClean, onClean),
586
601
  cleanable: cleanable && !disabled,
587
602
  hasValue: hasValue,
588
603
  active: isPickerToggleActive,
589
604
  placement: placement,
590
- caretComponent: _Calendar2.default,
605
+ caretComponent: _Calendar.default,
591
606
  disabled: disabled
592
607
  }), getDisplayString())));
593
608
  });
@@ -4,6 +4,6 @@ export declare function getCalendarDate({ value }: {
4
4
  value?: ValueType;
5
5
  }): ValueType;
6
6
  export declare const getDefaultRanges: () => RangeType[];
7
- export declare const isSameValueType: (source: ValueType, dest: ValueType) => boolean;
7
+ export declare const isSameRange: (source: ValueType, dest: ValueType, format: string) => boolean;
8
8
  export declare const getMonthHoverRange: (date: Date) => ValueType;
9
9
  export declare const getWeekHoverRange: (isoWeek: boolean, date: Date) => ValueType;
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.getCalendarDate = getCalendarDate;
5
- exports.getWeekHoverRange = exports.getMonthHoverRange = exports.isSameValueType = exports.getDefaultRanges = exports.setTimingMargin = void 0;
5
+ exports.getWeekHoverRange = exports.getMonthHoverRange = exports.isSameRange = exports.getDefaultRanges = exports.setTimingMargin = void 0;
6
6
 
7
7
  var _utils = require("../utils");
8
8
 
@@ -51,13 +51,17 @@ var getDefaultRanges = function getDefaultRanges() {
51
51
 
52
52
  exports.getDefaultRanges = getDefaultRanges;
53
53
 
54
- var isSameValueType = function isSameValueType(source, dest) {
55
- var _source$, _dest$, _source$2, _dest$2;
54
+ var isSameRange = function isSameRange(source, dest, format) {
55
+ var result = _utils.DateUtils.isSameDay(source === null || source === void 0 ? void 0 : source[0], dest === null || dest === void 0 ? void 0 : dest[0]) && _utils.DateUtils.isSameDay(source === null || source === void 0 ? void 0 : source[1], dest === null || dest === void 0 ? void 0 : dest[1]);
56
56
 
57
- return (source === null || source === void 0 ? void 0 : (_source$ = source[0]) === null || _source$ === void 0 ? void 0 : _source$.valueOf()) === (dest === null || dest === void 0 ? void 0 : (_dest$ = dest[0]) === null || _dest$ === void 0 ? void 0 : _dest$.valueOf()) && (source === null || source === void 0 ? void 0 : (_source$2 = source[1]) === null || _source$2 === void 0 ? void 0 : _source$2.valueOf()) === (dest === null || dest === void 0 ? void 0 : (_dest$2 = dest[1]) === null || _dest$2 === void 0 ? void 0 : _dest$2.valueOf());
57
+ if (_utils.DateUtils.shouldTime(format)) {
58
+ result && (result = _utils.DateUtils.isSameSecond(source === null || source === void 0 ? void 0 : source[0], dest === null || dest === void 0 ? void 0 : dest[0]) && _utils.DateUtils.isSameSecond(source === null || source === void 0 ? void 0 : source[1], dest === null || dest === void 0 ? void 0 : dest[1]));
59
+ }
60
+
61
+ return result;
58
62
  };
59
63
 
60
- exports.isSameValueType = isSameValueType;
64
+ exports.isSameRange = isSameRange;
61
65
 
62
66
  var getMonthHoverRange = function getMonthHoverRange(date) {
63
67
  return [_utils.DateUtils.startOfMonth(date), _utils.DateUtils.endOfMonth(date)];
@@ -17,6 +17,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
18
  var _omit = _interopRequireDefault(require("lodash/omit"));
19
19
 
20
+ var _pick = _interopRequireDefault(require("lodash/pick"));
21
+
20
22
  var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
21
23
 
22
24
  var _utils = require("../utils");
@@ -47,6 +49,8 @@ var _SidenavDropdown = _interopRequireDefault(require("../Sidenav/SidenavDropdow
47
49
 
48
50
  var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
49
51
 
52
+ var _DropdownState = require("./DropdownState");
53
+
50
54
  var defaultProps = {
51
55
  as: 'div',
52
56
  classPrefix: 'dropdown',
@@ -124,14 +128,29 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
124
128
  }, [trigger]);
125
129
  var parentMenu = (0, _react.useContext)(_MenuContext.default);
126
130
  var sidenav = (0, _react.useContext)(_Sidenav.SidenavContext);
127
- var navbar = (0, _react.useContext)(_Navbar.NavbarContext); // Render a disclosure when inside expanded <Sidenav>
131
+ var navbar = (0, _react.useContext)(_Navbar.NavbarContext);
132
+
133
+ var _useReducer = (0, _react.useReducer)(_DropdownState.reducer, _DropdownState.initialState),
134
+ items = _useReducer[0].items,
135
+ dispatch = _useReducer[1];
136
+
137
+ var hasSelectedItem = (0, _react.useMemo)(function () {
138
+ return items.some(function (item) {
139
+ return item.props.selected;
140
+ });
141
+ }, [items]);
142
+ var dropdownContextValue = (0, _react.useMemo)(function () {
143
+ return {
144
+ activeKey: activeKey,
145
+ onSelect: emitSelect,
146
+ hasSelectedItem: hasSelectedItem,
147
+ dispatch: dispatch
148
+ };
149
+ }, [activeKey, emitSelect, hasSelectedItem, dispatch]); // Render a disclosure when inside expanded <Sidenav>
128
150
 
129
151
  if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
130
152
  return /*#__PURE__*/_react.default.createElement(_DropdownContext.default.Provider, {
131
- value: {
132
- activeKey: activeKey,
133
- onSelect: emitSelect
134
- }
153
+ value: dropdownContextValue
135
154
  }, /*#__PURE__*/_react.default.createElement(_SidenavDropdown.default, (0, _extends2.default)({
136
155
  ref: ref
137
156
  }, rest)));
@@ -140,10 +159,7 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
140
159
 
141
160
  if (navbar) {
142
161
  return /*#__PURE__*/_react.default.createElement(_DropdownContext.default.Provider, {
143
- value: {
144
- activeKey: activeKey,
145
- onSelect: emitSelect
146
- }
162
+ value: dropdownContextValue
147
163
  }, /*#__PURE__*/_react.default.createElement(_Disclosure.default, {
148
164
  hideOnClickOutside: true
149
165
  }, function (_ref, containerRef) {
@@ -183,7 +199,7 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
183
199
  className: toggleClassName,
184
200
  placement: placement,
185
201
  disabled: disabled
186
- }, (0, _omit.default)(menuButtonProps, ['open']), toggleProps), title);
202
+ }, (0, _omit.default)(menuButtonProps, ['open']), (0, _omit.default)(toggleProps, ['data-testid'])), title);
187
203
  };
188
204
 
189
205
  if (parentMenu) {
@@ -199,16 +215,13 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
199
215
  className: mergeNavItemClassNames(toggleClassName, withNavItemClassPrefix({
200
216
  focus: active
201
217
  }))
202
- }, menuButtonProps, (0, _omit.default)(menuitemProps, ['onClick']), toggleProps), title);
218
+ }, menuButtonProps, (0, _omit.default)(menuitemProps, ['onClick']), (0, _omit.default)(toggleProps, 'data-testid')), title);
203
219
  });
204
220
  };
205
221
  }
206
222
 
207
223
  return /*#__PURE__*/_react.default.createElement(_DropdownContext.default.Provider, {
208
- value: {
209
- activeKey: activeKey,
210
- onSelect: emitSelect
211
- }
224
+ value: dropdownContextValue
212
225
  }, /*#__PURE__*/_react.default.createElement(_Menu.default, {
213
226
  menuButtonText: title,
214
227
  renderMenuButton: renderMenuButton,
@@ -216,7 +229,7 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
216
229
  renderMenuPopup: function renderMenuPopup(_ref4, popupRef) {
217
230
  var open = _ref4.open,
218
231
  popupProps = (0, _objectWithoutPropertiesLoose2.default)(_ref4, ["open"]);
219
- var menuClassName = mergeMenuClassName(className, withMenuClassPrefix()); // When inside a collapsed <Sidenav>, render a header in menu
232
+ var menuClassName = mergeMenuClassName(className, withMenuClassPrefix({})); // When inside a collapsed <Sidenav>, render a header in menu
220
233
 
221
234
  var showHeader = !!sidenav;
222
235
  return /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
@@ -243,11 +256,11 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
243
256
 
244
257
  var open = _ref5.open,
245
258
  menuContainer = (0, _objectWithoutPropertiesLoose2.default)(_ref5, ["open"]);
246
- var classes = merge(className, withClassPrefix((_withClassPrefix2 = {}, _withClassPrefix2["placement-" + (0, _kebabCase.default)((0, _utils.placementPolyfill)(placement))] = !!placement, _withClassPrefix2.disabled = disabled, _withClassPrefix2.open = open, _withClassPrefix2.submenu = !!parentMenu, _withClassPrefix2)));
259
+ var classes = merge(className, withClassPrefix((_withClassPrefix2 = {}, _withClassPrefix2["placement-" + (0, _kebabCase.default)((0, _utils.placementPolyfill)(placement))] = !!placement, _withClassPrefix2.disabled = disabled, _withClassPrefix2.open = open, _withClassPrefix2.submenu = !!parentMenu, _withClassPrefix2['selected-within'] = hasSelectedItem, _withClassPrefix2)));
247
260
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
248
261
  ref: (0, _utils.mergeRefs)(ref, menuContainerRef),
249
262
  className: classes
250
- }, menuContainer, {
263
+ }, menuContainer, (0, _pick.default)(toggleProps, ['data-testid']), {
251
264
  style: style
252
265
  }));
253
266
  }));
@@ -1,7 +1,10 @@
1
- import React from 'react';
1
+ import React, { Dispatch } from 'react';
2
+ import { DropdownAction } from './DropdownState';
2
3
  export interface DropdownContextProps {
3
4
  activeKey?: string;
4
5
  onSelect: (eventKey: string, event: React.SyntheticEvent) => void;
6
+ hasSelectedItem?: boolean;
7
+ dispatch?: Dispatch<DropdownAction>;
5
8
  }
6
9
  declare const DropdownContext: React.Context<DropdownContextProps>;
7
10
  export default DropdownContext;
@@ -37,6 +37,10 @@ var _SafeAnchor = _interopRequireDefault(require("../SafeAnchor"));
37
37
 
38
38
  var _NavContext = _interopRequireDefault(require("../Nav/NavContext"));
39
39
 
40
+ var _useInternalId = _interopRequireDefault(require("../utils/useInternalId"));
41
+
42
+ var _DropdownState = require("./DropdownState");
43
+
40
44
  var defaultProps = {
41
45
  as: 'li',
42
46
  classPrefix: 'dropdown-item'
@@ -55,6 +59,7 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
55
59
  onSelect = props.onSelect,
56
60
  icon = props.icon,
57
61
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["classPrefix", "className", "active", "eventKey", "onSelect", "icon"]);
62
+ var internalId = (0, _useInternalId.default)('DropdownItem');
58
63
  var nav = (0, _react.useContext)(_NavContext.default);
59
64
  var dropdown = (0, _react.useContext)(_DropdownContext.default);
60
65
 
@@ -82,6 +87,29 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
82
87
  });
83
88
  handleSelectItem === null || handleSelectItem === void 0 ? void 0 : handleSelectItem(event);
84
89
  }, [dispatchDisclosure, handleSelectItem]);
90
+ var selected = activeProp || !(0, _isNil.default)(eventKey) && ((0, _utils.shallowEqual)(dropdown === null || dropdown === void 0 ? void 0 : dropdown.activeKey, eventKey) || (0, _utils.shallowEqual)(nav === null || nav === void 0 ? void 0 : nav.activeKey, eventKey));
91
+ var dispatch = dropdown === null || dropdown === void 0 ? void 0 : dropdown.dispatch;
92
+ (0, _react.useEffect)(function () {
93
+ if (dispatch) {
94
+ dispatch({
95
+ type: _DropdownState.DropdownActionType.RegisterItem,
96
+ payload: {
97
+ id: internalId,
98
+ props: {
99
+ selected: selected
100
+ }
101
+ }
102
+ });
103
+ return function () {
104
+ dispatch({
105
+ type: _DropdownState.DropdownActionType.UnregisterItem,
106
+ payload: {
107
+ id: internalId
108
+ }
109
+ });
110
+ };
111
+ }
112
+ }, [internalId, selected, dispatch]);
85
113
 
86
114
  if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
87
115
  return /*#__PURE__*/_react.default.createElement(_SidenavDropdownItem.default, (0, _extends2.default)({
@@ -89,7 +117,6 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
89
117
  }, props));
90
118
  }
91
119
 
92
- var menuitemSelected = activeProp || !(0, _isNil.default)(eventKey) && ((0, _utils.shallowEqual)(dropdown === null || dropdown === void 0 ? void 0 : dropdown.activeKey, eventKey) || (0, _utils.shallowEqual)(nav === null || nav === void 0 ? void 0 : nav.activeKey, eventKey));
93
120
  var Component = rest.as,
94
121
  divider = rest.divider,
95
122
  panel = rest.panel,
@@ -119,7 +146,7 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
119
146
  disabled: disabled,
120
147
  divider: divider,
121
148
  panel: panel,
122
- active: menuitemSelected
149
+ active: selected
123
150
  }));
124
151
  var dataAttributes = {
125
152
  'data-event-key': eventKey
@@ -132,7 +159,7 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
132
159
  return /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_SafeAnchor.default, (0, _extends2.default)({
133
160
  ref: ref,
134
161
  className: classes,
135
- "aria-current": menuitemSelected || undefined
162
+ "aria-current": selected || undefined
136
163
  }, dataAttributes, restProps, {
137
164
  onClick: (0, _utils.createChainedFunction)(handleClickNavbarDropdownItem, restProps.onClick)
138
165
  }), icon && /*#__PURE__*/_react.default.cloneElement(icon, {
@@ -141,7 +168,7 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
141
168
  }
142
169
 
143
170
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
144
- selected: menuitemSelected,
171
+ selected: selected,
145
172
  disabled: disabled,
146
173
  onActivate: handleSelectItem
147
174
  }, function (_ref2, menuitemRef) {