rsuite 5.3.0 → 5.4.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 (106) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/Dropdown/styles/index.less +1 -0
  3. package/Nav/styles/index.less +1 -0
  4. package/Navbar/styles/index.less +7 -0
  5. package/Radio/styles/index.less +6 -0
  6. package/Stack/package.json +7 -0
  7. package/Stack/styles/index.less +5 -0
  8. package/TreePicker/styles/index.less +0 -14
  9. package/cjs/@types/common.d.ts +4 -4
  10. package/cjs/Cascader/utils.d.ts +7 -7
  11. package/cjs/CheckPicker/CheckPicker.d.ts +9 -4
  12. package/cjs/CheckPicker/test/CheckPicker.test.d.ts +1 -0
  13. package/cjs/CheckPicker/test/CheckPicker.test.js +76 -0
  14. package/cjs/CheckTree/index.js +2 -6
  15. package/cjs/DatePicker/DatePicker.js +2 -2
  16. package/cjs/DateRangePicker/DateRangePicker.js +6 -2
  17. package/cjs/Dropdown/DropdownToggle.js +8 -1
  18. package/cjs/MultiCascader/utils.d.ts +3 -3
  19. package/cjs/Nav/Nav.js +3 -0
  20. package/cjs/Nav/NavContext.d.ts +6 -0
  21. package/cjs/Nav/NavContext.js +1 -0
  22. package/cjs/Overlay/Modal.js +37 -25
  23. package/cjs/Overlay/Overlay.d.ts +1 -1
  24. package/cjs/Overlay/Overlay.js +7 -1
  25. package/cjs/Overlay/OverlayContext.d.ts +6 -0
  26. package/cjs/Overlay/OverlayContext.js +14 -0
  27. package/cjs/Overlay/OverlayTrigger.js +7 -1
  28. package/cjs/Overlay/Position.d.ts +1 -1
  29. package/cjs/Picker/propTypes.d.ts +3 -5
  30. package/cjs/Picker/propTypes.js +4 -3
  31. package/cjs/Picker/utils.d.ts +3 -3
  32. package/cjs/SelectPicker/SelectPicker.d.ts +12 -5
  33. package/cjs/SelectPicker/SelectPicker.js +4 -4
  34. package/cjs/SelectPicker/index.d.ts +1 -1
  35. package/cjs/SelectPicker/test/SelectPicker.test.d.ts +1 -0
  36. package/cjs/SelectPicker/test/SelectPicker.test.js +62 -0
  37. package/cjs/Stack/Stack.d.ts +26 -0
  38. package/cjs/Stack/Stack.js +86 -0
  39. package/cjs/Stack/index.d.ts +3 -0
  40. package/cjs/Stack/index.js +11 -0
  41. package/cjs/Steps/StepItem.js +2 -2
  42. package/cjs/Toggle/Toggle.js +2 -2
  43. package/cjs/Tree/Tree.d.ts +0 -1
  44. package/cjs/Tree/Tree.js +2 -6
  45. package/cjs/Tree/TreeContext.d.ts +0 -1
  46. package/cjs/TreePicker/TreeNode.js +1 -14
  47. package/cjs/TreePicker/TreePicker.js +3 -29
  48. package/cjs/index.d.ts +4 -2
  49. package/cjs/index.js +9 -5
  50. package/cjs/utils/treeUtils.d.ts +5 -5
  51. package/cjs/utils/usePortal.d.ts +1 -1
  52. package/dist/rsuite-rtl.css +20 -16
  53. package/dist/rsuite-rtl.min.css +1 -1
  54. package/dist/rsuite-rtl.min.css.map +1 -1
  55. package/dist/rsuite.css +20 -16
  56. package/dist/rsuite.js +51 -18
  57. package/dist/rsuite.js.map +1 -1
  58. package/dist/rsuite.min.css +1 -1
  59. package/dist/rsuite.min.css.map +1 -1
  60. package/dist/rsuite.min.js +1 -1
  61. package/dist/rsuite.min.js.map +1 -1
  62. package/esm/@types/common.d.ts +4 -4
  63. package/esm/Cascader/utils.d.ts +7 -7
  64. package/esm/CheckPicker/CheckPicker.d.ts +9 -4
  65. package/esm/CheckPicker/test/CheckPicker.test.d.ts +1 -0
  66. package/esm/CheckPicker/test/CheckPicker.test.js +64 -0
  67. package/esm/CheckTree/index.js +2 -4
  68. package/esm/DatePicker/DatePicker.js +2 -2
  69. package/esm/DateRangePicker/DateRangePicker.js +6 -2
  70. package/esm/Dropdown/DropdownToggle.js +7 -1
  71. package/esm/MultiCascader/utils.d.ts +3 -3
  72. package/esm/Nav/Nav.js +3 -0
  73. package/esm/Nav/NavContext.d.ts +6 -0
  74. package/esm/Nav/NavContext.js +1 -0
  75. package/esm/Overlay/Modal.js +37 -25
  76. package/esm/Overlay/Overlay.d.ts +1 -1
  77. package/esm/Overlay/Overlay.js +7 -2
  78. package/esm/Overlay/OverlayContext.d.ts +6 -0
  79. package/esm/Overlay/OverlayContext.js +4 -0
  80. package/esm/Overlay/OverlayTrigger.js +7 -2
  81. package/esm/Overlay/Position.d.ts +1 -1
  82. package/esm/Picker/propTypes.d.ts +3 -5
  83. package/esm/Picker/propTypes.js +4 -3
  84. package/esm/Picker/utils.d.ts +3 -3
  85. package/esm/SelectPicker/SelectPicker.d.ts +12 -5
  86. package/esm/SelectPicker/SelectPicker.js +4 -4
  87. package/esm/SelectPicker/index.d.ts +1 -1
  88. package/esm/SelectPicker/test/SelectPicker.test.d.ts +1 -0
  89. package/esm/SelectPicker/test/SelectPicker.test.js +52 -0
  90. package/esm/Stack/Stack.d.ts +26 -0
  91. package/esm/Stack/Stack.js +71 -0
  92. package/esm/Stack/index.d.ts +3 -0
  93. package/esm/Stack/index.js +2 -0
  94. package/esm/Steps/StepItem.js +2 -2
  95. package/esm/Toggle/Toggle.js +2 -2
  96. package/esm/Tree/Tree.d.ts +0 -1
  97. package/esm/Tree/Tree.js +2 -4
  98. package/esm/Tree/TreeContext.d.ts +0 -1
  99. package/esm/TreePicker/TreeNode.js +2 -14
  100. package/esm/TreePicker/TreePicker.js +3 -29
  101. package/esm/index.d.ts +4 -2
  102. package/esm/index.js +2 -1
  103. package/esm/utils/treeUtils.d.ts +5 -5
  104. package/esm/utils/usePortal.d.ts +1 -1
  105. package/package.json +1 -1
  106. package/styles/index.less +1 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,27 @@
1
+ # [5.4.0](https://github.com/rsuite/rsuite/compare/v5.3.0...v5.4.0) (2021-12-17)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **DatePicker,DateRangePicker:** suppress depreated caretComponent warning ([#2233](https://github.com/rsuite/rsuite/issues/2233)) ([3a79d48](https://github.com/rsuite/rsuite/commit/3a79d486268ff31ad6a620dfc17165c3be259219))
6
+ - **DateRangePicker:** fix selecting ending date not working ([#2217](https://github.com/rsuite/rsuite/issues/2217)) ([2136aa3](https://github.com/rsuite/rsuite/commit/2136aa3327f914a910fb5805b2d11a036e0f6601))
7
+ - **Modal:** fix Modal focus being reset on re-rendering ([#2208](https://github.com/rsuite/rsuite/issues/2208)) ([a931b06](https://github.com/rsuite/rsuite/commit/a931b06942e7fc011ab77e70b105f5790a33e55b))
8
+ - **Nav:** fix incorrect Dropdown button background ([#2227](https://github.com/rsuite/rsuite/issues/2227)) ([421de83](https://github.com/rsuite/rsuite/commit/421de838ed13694254cc6a178d0369e12b666202))
9
+ - **Navbar:** fix icon style in Navbar items ([#2229](https://github.com/rsuite/rsuite/issues/2229)) ([560df61](https://github.com/rsuite/rsuite/commit/560df61a44c0338b153b2c09a50e946c207c684a))
10
+ - **Overlay:** overlay is rendered inside Modal by default ([#2230](https://github.com/rsuite/rsuite/issues/2230)) ([4fac628](https://github.com/rsuite/rsuite/commit/4fac628e23e41db097ec63c2ac348a7345f3ee31))
11
+ - **Radio:** fix unclickable without children ([#2190](https://github.com/rsuite/rsuite/issues/2190)) ([cef5946](https://github.com/rsuite/rsuite/commit/cef59463e281d6aa6b4b9576204d16eed58087c8))
12
+ - **SelectPicker:** fix onChange argument type ([#2193](https://github.com/rsuite/rsuite/issues/2193)) ([db0efa9](https://github.com/rsuite/rsuite/commit/db0efa94ad33de5d02bfd81e926cf622c40ecce7))
13
+ - **Steps:** step item not rendering number ([#2202](https://github.com/rsuite/rsuite/issues/2202)) ([413880b](https://github.com/rsuite/rsuite/commit/413880be99972d8a58d5f0a0c9b6b08017ad33a2))
14
+ - **Toggle:** fix Toggle is still clickable in loading state ([#2219](https://github.com/rsuite/rsuite/issues/2219)) ([e5661fd](https://github.com/rsuite/rsuite/commit/e5661fdb4ef659527ca97c2ea2231b4025e904d3))
15
+ - **Tree:** remove dragNode Element when drag node ([#2185](https://github.com/rsuite/rsuite/issues/2185)) ([#2237](https://github.com/rsuite/rsuite/issues/2237)) ([f6e959f](https://github.com/rsuite/rsuite/commit/f6e959f4aa24f0fa87b5fa1bbc6e1aa775fecd2b))
16
+
17
+ ### Features
18
+
19
+ - **Stack:** add Stack support to the layout ([#2199](https://github.com/rsuite/rsuite/issues/2199)) ([1ac132e](https://github.com/rsuite/rsuite/commit/1ac132e0fc98a6739dee07d9e6281202530d80fa))
20
+
21
+ ### Performance Improvements
22
+
23
+ - **CheckPicker:** infer value and onChange types from data prop ([#2228](https://github.com/rsuite/rsuite/issues/2228)) ([eb4f9a8](https://github.com/rsuite/rsuite/commit/eb4f9a8f4c84cf30b3521532d95f4dc2490d0699))
24
+
1
25
  # [5.3.0](https://github.com/rsuite/rsuite/compare/5.2.4...5.3.0) (2021-12-10)
2
26
 
3
27
  ### Bug Fixes
@@ -1,6 +1,7 @@
1
1
  @import '../../styles/common';
2
2
  @import '../../styles/mixins/menu';
3
3
  @import 'mixin';
4
+ @import '../../Button/styles/index.less';
4
5
 
5
6
  //
6
7
  // Dropdown menus
@@ -1,5 +1,6 @@
1
1
  @import '../../styles/common';
2
2
  @import '../../Ripple/styles/mixins';
3
+ @import '../../Dropdown/styles/index';
3
4
 
4
5
  //
5
6
  // Navs
@@ -59,6 +59,13 @@
59
59
  background-color: transparent;
60
60
  position: relative;
61
61
  overflow: hidden;
62
+ display: flex;
63
+ align-items: center;
64
+
65
+ > .rs-icon {
66
+ font-size: 16px;
67
+ margin-right: 5px;
68
+ }
62
69
  }
63
70
 
64
71
  // Focus style
@@ -30,6 +30,12 @@
30
30
 
31
31
  [type='radio'] {
32
32
  opacity: 0;
33
+ // bring to foreground
34
+ position: absolute;
35
+ z-index: 1;
36
+ width: @radio-width-height;
37
+ height: @radio-width-height;
38
+ cursor: pointer;
33
39
  }
34
40
 
35
41
  &::before,
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "rsuite/Stack",
3
+ "private": true,
4
+ "main": "../cjs/Stack/index.js",
5
+ "module": "../esm/Stack/index.js",
6
+ "types": "../esm/Stack/index.d.ts"
7
+ }
@@ -0,0 +1,5 @@
1
+ @import '../../styles/common';
2
+
3
+ .rs-stack {
4
+ display: flex;
5
+ }
@@ -13,20 +13,6 @@
13
13
  overflow-y: auto;
14
14
  flex: 1 1 auto;
15
15
 
16
- &-drag-node-mover {
17
- position: absolute;
18
- top: -1000px;
19
- color: var(--rs-text-primary);
20
- background-color: var(--rs-bg-overlay);
21
- display: inline-block;
22
- margin: 0;
23
- padding: @picker-tree-node-padding-vertical @picker-tree-node-padding-horizontal;
24
- border-radius: 6px;
25
- box-shadow: 0 1px 8px rgba(0, 0, 0, 0.12);
26
- z-index: 1060;
27
- cursor: move;
28
- }
29
-
30
16
  &.rs-tree-virtualized {
31
17
  overflow: hidden;
32
18
 
@@ -134,12 +134,12 @@ export interface SVGIcon {
134
134
  viewBox: string;
135
135
  id: string;
136
136
  }
137
- export interface ItemDataType extends Record<string, any> {
137
+ export interface ItemDataType<T = number | string> extends Record<string, any> {
138
138
  label?: string | React.ReactNode;
139
- value?: string | number;
139
+ value?: T;
140
140
  groupBy?: string;
141
- parent?: ItemDataType;
142
- children?: ItemDataType[];
141
+ parent?: ItemDataType<T>;
142
+ children?: ItemDataType<T>[];
143
143
  loading?: boolean;
144
144
  }
145
145
  export interface Offset {
@@ -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,18 @@
1
+ import React from 'react';
1
2
  import { PickerLocale } from '../locales';
2
- import { PickerComponent } from '../Picker';
3
3
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
4
- import { SelectProps } from '../SelectPicker';
4
+ import type { MultipleSelectProps } from '../SelectPicker';
5
5
  export declare type ValueType = (number | string)[];
6
- export interface CheckPickerProps<T = ValueType> extends FormControlPickerProps<T, PickerLocale, ItemDataType>, SelectProps<T> {
6
+ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerLocale, ItemDataType<T>>, MultipleSelectProps<T> {
7
7
  /** Top the selected option in the options */
8
8
  sticky?: boolean;
9
9
  /** A picker that can be counted */
10
10
  countable?: boolean;
11
11
  }
12
- declare const CheckPicker: PickerComponent<CheckPickerProps>;
12
+ export interface CheckPickerComponent {
13
+ <T>(props: CheckPickerProps<T>): JSX.Element | null;
14
+ displayName?: string;
15
+ propTypes?: React.WeakValidationMap<CheckPickerProps<any>>;
16
+ }
17
+ declare const CheckPicker: CheckPickerComponent;
13
18
  export default CheckPicker;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,76 @@
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
+ });
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  exports.__esModule = true;
@@ -9,18 +7,16 @@ exports.default = void 0;
9
7
 
10
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
9
 
12
- var _react = _interopRequireWildcard(require("react"));
10
+ var _react = _interopRequireDefault(require("react"));
13
11
 
14
12
  var _CheckTreePicker = _interopRequireDefault(require("../CheckTreePicker"));
15
13
 
16
14
  var _TreeContext = _interopRequireDefault(require("../Tree/TreeContext"));
17
15
 
18
16
  var CheckTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
19
- var dragNodeRef = (0, _react.useRef)();
20
17
  return /*#__PURE__*/_react.default.createElement(_TreeContext.default.Provider, {
21
18
  value: {
22
- inline: true,
23
- dragNodeRef: dragNodeRef
19
+ inline: true
24
20
  }
25
21
  }, /*#__PURE__*/_react.default.createElement(_CheckTreePicker.default, (0, _extends2.default)({
26
22
  ref: ref
@@ -439,7 +439,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
439
439
 
440
440
  return (_renderValue = renderValue === null || renderValue === void 0 ? void 0 : renderValue(value, formatStr)) !== null && _renderValue !== void 0 ? _renderValue : formatDate(value, formatStr);
441
441
  }, [formatStr, formatDate, placeholder, renderValue, value]);
442
- var caretComponent = (0, _react.useMemo)(function () {
442
+ var caretAs = (0, _react.useMemo)(function () {
443
443
  return _utils.DateUtils.shouldOnlyTime(formatStr) ? _ClockO.default : _Calendar.default;
444
444
  }, [formatStr]);
445
445
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerToggleTrigger, {
@@ -475,7 +475,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
475
475
  active: active,
476
476
  placement: placement,
477
477
  disabled: disabled,
478
- caretComponent: caretComponent
478
+ caretAs: caretAs
479
479
  }), renderDate())));
480
480
  });
481
481
 
@@ -294,6 +294,10 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
294
294
  setHoverDateRange(nextHoverDateRange);
295
295
  }
296
296
  }, [getHoverRangeValue, hoverRange]);
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
  });
@@ -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, {
@@ -39,16 +39,16 @@ export declare const removeAllChildrenValue: <T>(value: T[], item: ItemType, ite
39
39
  */
40
40
  export declare function useFlattenData(data: ItemDataType[], itemKeys: ItemKeys): {
41
41
  addFlattenData: (children: ItemDataType[], parent: ItemDataType) => void;
42
- flattenData: ItemDataType[];
42
+ flattenData: ItemDataType<string | number>[];
43
43
  };
44
44
  /**
45
45
  * A hook for column data
46
46
  * @param flattenData
47
47
  */
48
48
  export declare function useColumnData(flattenData: ItemType[]): {
49
- columnData: ItemDataType[][];
49
+ columnData: ItemDataType<string | number>[][];
50
50
  addColumn: (column: ItemDataType[], index: number) => void;
51
- setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType[][]>>;
51
+ setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[][]>>;
52
52
  enforceUpdateColumnData: (nextData: ItemDataType[]) => void;
53
53
  };
54
54
  /**
package/cjs/Nav/Nav.js CHANGED
@@ -79,6 +79,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
79
79
  if (sidenav !== null && sidenav !== void 0 && sidenav.expanded) {
80
80
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
81
81
  value: {
82
+ withinNav: true,
82
83
  activeKey: activeKey,
83
84
  onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
84
85
  }
@@ -93,6 +94,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
93
94
  if (sidenav) {
94
95
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
95
96
  value: {
97
+ withinNav: true,
96
98
  activeKey: activeKey,
97
99
  onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
98
100
  }
@@ -109,6 +111,7 @@ var Nav = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
109
111
 
110
112
  return /*#__PURE__*/_react.default.createElement(_NavContext.default.Provider, {
111
113
  value: {
114
+ withinNav: true,
112
115
  activeKey: activeKey,
113
116
  onSelect: onSelectProp !== null && onSelectProp !== void 0 ? onSelectProp : onSelectFromSidenav
114
117
  }
@@ -1,5 +1,11 @@
1
1
  import React from 'react';
2
2
  export interface NavContextProps {
3
+ /**
4
+ * Whether component is rendered within a <Nav>
5
+ *
6
+ * FIXME: Bad design. Should use NavContextProps | null to determin whether within a <Nav>
7
+ */
8
+ withinNav: boolean;
3
9
  activeKey: string | null;
4
10
  onSelect?: (eventKey: string | undefined, event: React.SyntheticEvent) => void;
5
11
  }
@@ -10,6 +10,7 @@ var _react = _interopRequireDefault(require("react"));
10
10
  var _noop = _interopRequireDefault(require("lodash/noop"));
11
11
 
12
12
  var NavContext = /*#__PURE__*/_react.default.createContext({
13
+ withinNav: false,
13
14
  activeKey: null,
14
15
  onSelect: _noop.default
15
16
  });
@@ -17,8 +17,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
18
  var _classnames = _interopRequireDefault(require("classnames"));
19
19
 
20
- var _canUseDOM = _interopRequireDefault(require("dom-lib/canUseDOM"));
21
-
22
20
  var _contains = _interopRequireDefault(require("dom-lib/contains"));
23
21
 
24
22
  var _getContainer = _interopRequireDefault(require("dom-lib/getContainer"));
@@ -33,6 +31,8 @@ var _utils = require("../Animation/utils");
33
31
 
34
32
  var _utils2 = require("../utils");
35
33
 
34
+ var _OverlayContext = _interopRequireDefault(require("./OverlayContext"));
35
+
36
36
  var manager;
37
37
 
38
38
  function getManager() {
@@ -125,12 +125,12 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
125
125
 
126
126
  var mountModal = open || Transition && !exited;
127
127
  var lastFocus = (0, _react.useRef)(null);
128
- var handleDocumentKeyDown = (0, _react.useCallback)(function (event) {
128
+ var handleDocumentKeyDown = (0, _utils2.useEventCallback)(function (event) {
129
129
  if (keyboard && event.key === _utils2.KEY_VALUES.ESC && modal.isTopModal()) {
130
130
  onEsc === null || onEsc === void 0 ? void 0 : onEsc(event);
131
131
  onClose === null || onClose === void 0 ? void 0 : onClose(event);
132
132
  }
133
- }, [keyboard, modal, onEsc, onClose]);
133
+ });
134
134
  var restoreLastFocus = (0, _react.useCallback)(function () {
135
135
  if (lastFocus.current) {
136
136
  var _lastFocus$current$fo, _lastFocus$current;
@@ -139,19 +139,29 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
139
139
  lastFocus.current = null;
140
140
  }
141
141
  }, []);
142
- var handleEnforceFocus = (0, _react.useCallback)(function () {
143
- if (!enforceFocus || !modal.isTopModal()) {
144
- return;
145
- }
142
+ /**
143
+ * Determines if the currently focused element is inside the dialog,
144
+ * and if not, returns the focus to the dialog.
145
+ *
146
+ */
146
147
 
148
+ var handleFocusDialog = (0, _utils2.useEventCallback)(function (onBeforeFocusCallback) {
147
149
  var currentActiveElement = document.activeElement;
148
150
  var dialog = modal.dialog;
149
151
 
150
- if (dialog && dialog !== currentActiveElement && !(0, _contains.default)(dialog, currentActiveElement)) {
152
+ if (dialog && currentActiveElement && !(0, _contains.default)(dialog, currentActiveElement)) {
153
+ onBeforeFocusCallback === null || onBeforeFocusCallback === void 0 ? void 0 : onBeforeFocusCallback();
151
154
  dialog.focus();
152
155
  }
153
- }, [enforceFocus, modal]);
154
- var handleBackdropClick = (0, _react.useCallback)(function (event) {
156
+ });
157
+ var handleEnforceFocus = (0, _utils2.useEventCallback)(function () {
158
+ if (!enforceFocus || !modal.isTopModal()) {
159
+ return;
160
+ }
161
+
162
+ handleFocusDialog();
163
+ });
164
+ var handleBackdropClick = (0, _utils2.useEventCallback)(function (event) {
155
165
  if (event.target !== event.currentTarget) {
156
166
  return;
157
167
  }
@@ -161,10 +171,10 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
161
171
  if (backdrop === true) {
162
172
  onClose === null || onClose === void 0 ? void 0 : onClose(event);
163
173
  }
164
- }, [backdrop, onBackdropClick, onClose]);
174
+ });
165
175
  var documentKeyDownListener = (0, _react.useRef)();
166
176
  var documentFocusListener = (0, _react.useRef)();
167
- var handleOpen = (0, _react.useCallback)(function () {
177
+ var handleOpen = (0, _utils2.useEventCallback)(function () {
168
178
  var containerElement = (0, _getContainer.default)(container, document.body);
169
179
  modal.add(containerElement, containerClassName);
170
180
 
@@ -176,19 +186,15 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
176
186
  documentFocusListener.current = (0, _on.default)(document, 'focus', handleEnforceFocus, true);
177
187
  }
178
188
 
179
- if (_canUseDOM.default) {
180
- lastFocus.current = document.activeElement;
181
- }
182
-
183
189
  if (autoFocus) {
184
- var _modal$dialog;
185
-
186
- (_modal$dialog = modal.dialog) === null || _modal$dialog === void 0 ? void 0 : _modal$dialog.focus();
190
+ handleFocusDialog(function () {
191
+ lastFocus.current = document.activeElement;
192
+ });
187
193
  }
188
194
 
189
195
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
190
- }, [autoFocus, container, containerClassName, handleDocumentKeyDown, handleEnforceFocus, modal, onOpen]);
191
- var handleClose = (0, _react.useCallback)(function () {
196
+ });
197
+ var handleClose = (0, _utils2.useEventCallback)(function () {
192
198
  var _documentKeyDownListe, _documentFocusListene;
193
199
 
194
200
  modal.remove();
@@ -197,7 +203,7 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
197
203
  (_documentFocusListene = documentFocusListener.current) === null || _documentFocusListene === void 0 ? void 0 : _documentFocusListene.off();
198
204
  documentFocusListener.current = null;
199
205
  restoreLastFocus();
200
- }, [modal, restoreLastFocus]);
206
+ });
201
207
  (0, _react.useEffect)(function () {
202
208
  if (!open) {
203
209
  return;
@@ -265,12 +271,18 @@ var Modal = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
265
271
  onEntering: onEntering,
266
272
  onEntered: onEntered
267
273
  }), children) : children;
268
- return /*#__PURE__*/_react.default.createElement(Portal, null, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
274
+ return /*#__PURE__*/_react.default.createElement(_OverlayContext.default.Provider, {
275
+ value: {
276
+ overlayContainer: function overlayContainer() {
277
+ return modal.dialog;
278
+ }
279
+ }
280
+ }, /*#__PURE__*/_react.default.createElement(Portal, null, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
269
281
  ref: (0, _utils2.mergeRefs)(modal.setDialogRef, ref),
270
282
  style: style,
271
283
  className: className,
272
284
  tabIndex: -1
273
- }), backdrop && renderBackdrop(), dialogElement));
285
+ }), backdrop && renderBackdrop(), dialogElement)));
274
286
  });
275
287
 
276
288
  var modalPropTypes = {
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { TypeAttributes, AnimationEventProps } from '../@types/common';
4
4
  export interface OverlayProps extends AnimationEventProps {
5
- container?: HTMLElement | (() => HTMLElement);
5
+ container?: HTMLElement | (() => HTMLElement | null) | null;
6
6
  children: React.ReactElement | ((props: any, ref: any) => React.ReactElement);
7
7
  childrenProps?: React.HTMLAttributes<HTMLElement>;
8
8
  className?: string;
@@ -21,6 +21,8 @@ var _utils = require("../utils");
21
21
 
22
22
  var _Fade = _interopRequireDefault(require("../Animation/Fade"));
23
23
 
24
+ var _OverlayContext = _interopRequireDefault(require("./OverlayContext"));
25
+
24
26
  var overlayPropTypes = {
25
27
  container: _propTypes.default.any,
26
28
  children: _propTypes.default.any,
@@ -44,7 +46,11 @@ var overlayPropTypes = {
44
46
  exports.overlayPropTypes = overlayPropTypes;
45
47
 
46
48
  var Overlay = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
47
- var container = props.container,
49
+ var _useContext = (0, _react.useContext)(_OverlayContext.default),
50
+ overlayContainer = _useContext.overlayContainer;
51
+
52
+ var _props$container = props.container,
53
+ container = _props$container === void 0 ? overlayContainer : _props$container,
48
54
  containerPadding = props.containerPadding,
49
55
  placement = props.placement,
50
56
  rootClose = props.rootClose,
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface OverlayContextProps {
3
+ overlayContainer?: () => HTMLElement | null;
4
+ }
5
+ declare const OverlayContext: React.Context<OverlayContextProps>;
6
+ export default OverlayContext;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var OverlayContext = /*#__PURE__*/_react.default.createContext({});
11
+
12
+ OverlayContext.displayName = 'OverlayContext';
13
+ var _default = OverlayContext;
14
+ exports.default = _default;
@@ -27,6 +27,8 @@ var _utils = require("../utils");
27
27
 
28
28
  var _isOneOf = _interopRequireDefault(require("../utils/isOneOf"));
29
29
 
30
+ var _OverlayContext = _interopRequireDefault(require("./OverlayContext"));
31
+
30
32
  function mergeEvents(events, props) {
31
33
  if (events === void 0) {
32
34
  events = {};
@@ -66,8 +68,12 @@ function onMouseEventHandler(handler, event, delay) {
66
68
  var defaultTrigger = ['hover', 'focus'];
67
69
 
68
70
  var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
71
+ var _useContext = (0, _react.useContext)(_OverlayContext.default),
72
+ overlayContainer = _useContext.overlayContainer;
73
+
69
74
  var children = props.children,
70
- container = props.container,
75
+ _props$container = props.container,
76
+ container = _props$container === void 0 ? overlayContainer : _props$container,
71
77
  controlId = props.controlId,
72
78
  defaultOpen = props.defaultOpen,
73
79
  _props$trigger = props.trigger,