rsuite 5.23.2 → 5.24.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 (70) hide show
  1. package/ButtonToolbar/styles/index.less +0 -4
  2. package/CHANGELOG.md +18 -0
  3. package/Modal/styles/index.less +6 -6
  4. package/Sidenav/styles/index.less +7 -2
  5. package/cjs/AutoComplete/AutoComplete.d.ts +2 -0
  6. package/cjs/AutoComplete/AutoComplete.js +4 -1
  7. package/cjs/AutoComplete/utils.d.ts +3 -2
  8. package/cjs/AutoComplete/utils.js +1 -1
  9. package/cjs/ButtonToolbar/ButtonToolbar.d.ts +2 -1
  10. package/cjs/ButtonToolbar/ButtonToolbar.js +9 -2
  11. package/cjs/Calendar/MonthDropdown.d.ts +1 -0
  12. package/cjs/Calendar/MonthDropdown.js +14 -10
  13. package/cjs/Cascader/Cascader.js +2 -1
  14. package/cjs/Cascader/utils.d.ts +17 -12
  15. package/cjs/Cascader/utils.js +5 -5
  16. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  17. package/cjs/DatePicker/DatePicker.js +17 -1
  18. package/cjs/Dropdown/Dropdown.d.ts +2 -0
  19. package/cjs/Dropdown/Dropdown.js +3 -0
  20. package/cjs/Dropdown/DropdownItem.d.ts +5 -1
  21. package/cjs/Dropdown/DropdownItem.js +7 -7
  22. package/cjs/Dropdown/DropdownSeparator.d.ts +14 -0
  23. package/cjs/Dropdown/DropdownSeparator.js +48 -0
  24. package/cjs/MultiCascader/utils.d.ts +14 -11
  25. package/cjs/Picker/utils.d.ts +15 -13
  26. package/cjs/Sidenav/ExpandedSidenavDropdownMenu.js +3 -2
  27. package/cjs/Stack/Stack.d.ts +4 -0
  28. package/cjs/Stack/Stack.js +10 -8
  29. package/cjs/utils/deprecatePropType.d.ts +9 -0
  30. package/cjs/utils/deprecatePropType.js +27 -0
  31. package/cjs/utils/treeUtils.d.ts +30 -22
  32. package/dist/rsuite-rtl.css +10 -9
  33. package/dist/rsuite-rtl.min.css +1 -1
  34. package/dist/rsuite-rtl.min.css.map +1 -1
  35. package/dist/rsuite.css +10 -9
  36. package/dist/rsuite.js +24 -13
  37. package/dist/rsuite.js.map +1 -1
  38. package/dist/rsuite.min.css +1 -1
  39. package/dist/rsuite.min.css.map +1 -1
  40. package/dist/rsuite.min.js +1 -1
  41. package/dist/rsuite.min.js.map +1 -1
  42. package/esm/AutoComplete/AutoComplete.d.ts +2 -0
  43. package/esm/AutoComplete/AutoComplete.js +4 -1
  44. package/esm/AutoComplete/utils.d.ts +3 -2
  45. package/esm/AutoComplete/utils.js +1 -1
  46. package/esm/ButtonToolbar/ButtonToolbar.d.ts +2 -1
  47. package/esm/ButtonToolbar/ButtonToolbar.js +9 -2
  48. package/esm/Calendar/MonthDropdown.d.ts +1 -0
  49. package/esm/Calendar/MonthDropdown.js +12 -9
  50. package/esm/Cascader/Cascader.js +2 -1
  51. package/esm/Cascader/utils.d.ts +17 -12
  52. package/esm/Cascader/utils.js +5 -5
  53. package/esm/DatePicker/DatePicker.d.ts +5 -1
  54. package/esm/DatePicker/DatePicker.js +16 -1
  55. package/esm/Dropdown/Dropdown.d.ts +2 -0
  56. package/esm/Dropdown/Dropdown.js +2 -0
  57. package/esm/Dropdown/DropdownItem.d.ts +5 -1
  58. package/esm/Dropdown/DropdownItem.js +5 -7
  59. package/esm/Dropdown/DropdownSeparator.d.ts +14 -0
  60. package/esm/Dropdown/DropdownSeparator.js +35 -0
  61. package/esm/MultiCascader/utils.d.ts +14 -11
  62. package/esm/Picker/utils.d.ts +15 -13
  63. package/esm/Sidenav/ExpandedSidenavDropdownMenu.js +3 -2
  64. package/esm/Stack/Stack.d.ts +4 -0
  65. package/esm/Stack/Stack.js +10 -8
  66. package/esm/utils/deprecatePropType.d.ts +9 -0
  67. package/esm/utils/deprecatePropType.js +25 -0
  68. package/esm/utils/treeUtils.d.ts +30 -22
  69. package/package.json +1 -1
  70. package/styles/variables.less +3 -2
@@ -8,8 +8,4 @@
8
8
  .rs-btn-toolbar {
9
9
  // Clear whitespace
10
10
  line-height: 0;
11
-
12
- > :not(:first-child):not(.rs-btn-block) {
13
- margin-left: 10px;
14
- }
15
11
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ # [5.24.0](https://github.com/rsuite/rsuite/compare/v5.23.3...v5.24.0) (2022-12-30)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **AutoComplete:** fix AutoComplete size property not working ([#2990](https://github.com/rsuite/rsuite/issues/2990)) ([add665b](https://github.com/rsuite/rsuite/commit/add665b82b9d2cbd21e07576bf77f74e18991e21))
6
+ - **DatePicker:** fix inconsistency between month selectable state and ok button clickable state ([#2984](https://github.com/rsuite/rsuite/issues/2984)) ([70e6aba](https://github.com/rsuite/rsuite/commit/70e6aba0b7a3216c9f8b59b033826e55bebac1a1))
7
+ - **Sidenav:** fix Sidenav multilevel Nav.Menu arrow icon exception ([#2986](https://github.com/rsuite/rsuite/issues/2986)) ([87f6748](https://github.com/rsuite/rsuite/commit/87f67482b60eae4ed445246fe3e6ac9b0cad0385))
8
+
9
+ ### Features
10
+
11
+ - **Dropdown:** add Dropdown.Separator component ([#2979](https://github.com/rsuite/rsuite/issues/2979)) ([db6fcbb](https://github.com/rsuite/rsuite/commit/db6fcbbd88961e3506f6b2d2146cf43717d1e1db))
12
+
13
+ ## [5.23.3](https://github.com/rsuite/rsuite/compare/v5.23.2...v5.23.3) (2022-12-16)
14
+
15
+ ### Bug Fixes
16
+
17
+ - **Modal:** fix close button alignment and color ([#2973](https://github.com/rsuite/rsuite/issues/2973)) ([b1eb5b4](https://github.com/rsuite/rsuite/commit/b1eb5b406a29788290a704414cc5a19b115690c7))
18
+
1
19
  ## [5.23.2](https://github.com/rsuite/rsuite/compare/v5.23.1...v5.23.2) (2022-12-09)
2
20
 
3
21
  ### Bug Fixes
@@ -3,6 +3,7 @@
3
3
 
4
4
  //
5
5
  // Modals
6
+ // Figma: https://www.figma.com/file/uEq9QBplcKUYZrcWWA3RK2/NXT-UI?node-id=0%3A1348&t=H5h3Dd3AnJVgbAbz-4
6
7
  // --------------------------------------------------
7
8
 
8
9
  // Modal background
@@ -100,17 +101,16 @@
100
101
  padding-right: @line-height-computed;
101
102
 
102
103
  .rs-modal-header-close {
103
- // button width the same to height
104
- @padding-right: 4px;
105
-
106
104
  position: absolute;
107
105
  right: @modal-content-padding;
108
106
  top: @modal-content-padding;
109
107
  font-size: @modal-close-btn-size;
110
- line-height: @modal-close-btn-line-height;
111
108
  color: @modal-close-btn-color;
112
- width: @line-height-computed;
113
- padding: 0 @padding-right;
109
+ padding: 0;
110
+
111
+ &:hover {
112
+ color: @modal-close-btn-hover-color;
113
+ }
114
114
  }
115
115
  }
116
116
 
@@ -76,14 +76,19 @@
76
76
  top: @sidenav-children-padding-vertical;
77
77
  // width: auto;
78
78
  // height: @sidenav-dropdown-toggle-caret-width;
79
- transform: rotate(90deg);
79
+ // transform: rotate(90deg);
80
80
  }
81
81
  }
82
82
 
83
83
  // Expanded submenu toggle icon
84
- .rs-dropdown-item-expand .rs-dropdown-item-toggle-icon {
84
+ .rs-dropdown-item-expand-icon {
85
85
  transform: rotate(270deg);
86
86
  }
87
+
88
+ // Collapse submenu toggle icon
89
+ .rs-dropdown-item-collapse-icon {
90
+ transform: rotate(90deg);
91
+ }
87
92
  }
88
93
 
89
94
  .high-contrast-mode({
@@ -9,6 +9,8 @@ export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormContr
9
9
  placement?: TypeAttributes.Placement;
10
10
  /** When set to false, the Enter key selection function is invalid */
11
11
  selectOnEnter?: boolean;
12
+ /** A component can have different sizes */
13
+ size?: TypeAttributes.Size;
12
14
  /** Open the menu and control it */
13
15
  open?: boolean;
14
16
  /** Placeholder text */
@@ -52,6 +52,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
52
52
  valueProp = props.value,
53
53
  open = props.open,
54
54
  style = props.style,
55
+ size = props.size,
55
56
  menuClassName = props.menuClassName,
56
57
  id = props.id,
57
58
  renderMenu = props.renderMenu,
@@ -65,7 +66,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
65
66
  onFocus = props.onFocus,
66
67
  onBlur = props.onBlur,
67
68
  onMenuFocus = props.onMenuFocus,
68
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "menuAutoWidth", "data", "value", "open", "style", "menuClassName", "id", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
69
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "menuAutoWidth", "data", "value", "open", "style", "size", "menuClassName", "id", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
69
70
  var datalist = (0, _utils3.transformData)(data);
70
71
 
71
72
  var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
@@ -231,6 +232,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
231
232
  id: id,
232
233
  disabled: disabled,
233
234
  value: value,
235
+ size: size,
234
236
  onBlur: handleInputBlur,
235
237
  onFocus: handleInputFocus,
236
238
  onChange: handleChange,
@@ -260,6 +262,7 @@ AutoComplete.propTypes = (0, _extends2.default)({}, _utils2.animationPropTypes,
260
262
  renderMenu: _propTypes.default.func,
261
263
  renderMenuItem: _propTypes.default.func,
262
264
  style: _propTypes.default.object,
265
+ size: _propTypes.default.oneOf(['lg', 'md', 'sm', 'xs']),
263
266
  open: _propTypes.default.bool,
264
267
  selectOnEnter: _propTypes.default.bool,
265
268
  filterBy: _propTypes.default.func
@@ -1,3 +1,4 @@
1
- import { ItemDataType } from '../@types/common';
2
1
  export declare function transformData(data: any[]): any[];
3
- export declare const shouldDisplay: (filterBy: ((value: string, item: ItemDataType) => boolean) | undefined, value: any) => (item: any) => boolean;
2
+ export declare const shouldDisplay: <TItem extends {
3
+ label: string;
4
+ }>(filterBy: ((value: string, item: TItem) => boolean) | undefined, value: string) => (item: TItem) => boolean;
@@ -37,7 +37,7 @@ var shouldDisplay = function shouldDisplay(filterBy, value) {
37
37
  return false;
38
38
  }
39
39
 
40
- var keyword = (value || '').toLocaleLowerCase();
40
+ var keyword = value.toLocaleLowerCase();
41
41
  return ("" + item.label).toLocaleLowerCase().indexOf(keyword) >= 0;
42
42
  };
43
43
  };
@@ -1,4 +1,5 @@
1
1
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
2
+ import Stack from '../Stack';
2
3
  export interface ButtonToolbarProps extends WithAsProps {
3
4
  /**
4
5
  * The ARIA role describing the button toolbar. Generally the default
@@ -7,5 +8,5 @@ export interface ButtonToolbarProps extends WithAsProps {
7
8
  */
8
9
  role?: string;
9
10
  }
10
- declare const ButtonToolbar: RsRefForwardingComponent<'div', ButtonToolbarProps>;
11
+ declare const ButtonToolbar: RsRefForwardingComponent<typeof Stack, ButtonToolbarProps>;
11
12
  export default ButtonToolbar;
@@ -15,22 +15,29 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
16
  var _utils = require("../utils");
17
17
 
18
+ var _Stack = _interopRequireDefault(require("../Stack"));
19
+
18
20
  var ButtonToolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
19
21
  var className = props.className,
20
22
  _props$classPrefix = props.classPrefix,
21
23
  classPrefix = _props$classPrefix === void 0 ? 'btn-toolbar' : _props$classPrefix,
22
24
  _props$as = props.as,
23
- Component = _props$as === void 0 ? 'div' : _props$as,
25
+ Component = _props$as === void 0 ? _Stack.default : _props$as,
24
26
  _props$role = props.role,
25
27
  role = _props$role === void 0 ? 'toolbar' : _props$role,
26
28
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "classPrefix", "as", "role"]);
29
+ var stackProps = Component === _Stack.default ? {
30
+ wrap: true,
31
+ spacing: 10,
32
+ childrenRenderMode: 'clone'
33
+ } : null;
27
34
 
28
35
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
29
36
  withClassPrefix = _useClassNames.withClassPrefix,
30
37
  merge = _useClassNames.merge;
31
38
 
32
39
  var classes = merge(className, withClassPrefix());
33
- return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
40
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, stackProps, rest, {
34
41
  role: role,
35
42
  ref: ref,
36
43
  className: classes
@@ -22,5 +22,6 @@ export interface RowProps {
22
22
  /** Style object to be applied to row (to position it); */
23
23
  style?: React.CSSProperties;
24
24
  }
25
+ export declare function isEveryDateInMonth(year: number, month: number, predicate: (date: Date) => boolean): boolean;
25
26
  declare const MonthDropdown: RsRefForwardingComponent<'div', MonthDropdownProps>;
26
27
  export default MonthDropdown;
@@ -5,6 +5,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
6
 
7
7
  exports.__esModule = true;
8
+ exports.isEveryDateInMonth = isEveryDateInMonth;
8
9
  exports.default = void 0;
9
10
 
10
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
@@ -25,6 +26,18 @@ var _CalendarContext = require("./CalendarContext");
25
26
 
26
27
  var monthMap = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
27
28
 
29
+ function isEveryDateInMonth(year, month, predicate) {
30
+ var days = _utils.DateUtils.getDaysInMonth(new Date(year, month));
31
+
32
+ for (var i = 1; i <= days; i++) {
33
+ if (!predicate(new Date(year, month, i))) {
34
+ return false;
35
+ }
36
+ }
37
+
38
+ return true;
39
+ }
40
+
28
41
  var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
42
  var _props$as = props.as,
30
43
  Component = _props$as === void 0 ? 'div' : _props$as,
@@ -60,16 +73,7 @@ var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
60
73
  }, [limitEndYear, startYear, thisYear]);
61
74
  var isMonthDisabled = (0, _react.useCallback)(function (year, month) {
62
75
  if (disabledMonth) {
63
- var days = _utils.DateUtils.getDaysInMonth(new Date(year, month)); // If all dates in a month are disabled, disable the current month
64
-
65
-
66
- for (var i = 1; i <= days; i++) {
67
- if (!disabledMonth(new Date(year, month, i))) {
68
- return false;
69
- }
70
- }
71
-
72
- return true;
76
+ return isEveryDateInMonth(year, month, disabledMonth);
73
77
  }
74
78
 
75
79
  return false;
@@ -454,7 +454,8 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
454
454
  classPrefix: 'picker-cascader-menu',
455
455
  cascadeData: columnData,
456
456
  cascadePaths: selectedPaths,
457
- activeItemValue: value,
457
+ activeItemValue: value // FIXME make onSelect generic
458
+ ,
458
459
  onSelect: handleSelect,
459
460
  renderMenu: renderMenu,
460
461
  renderMenuItem: renderMenuItem
@@ -1,18 +1,23 @@
1
1
  /// <reference types="react" />
2
- import { CascaderProps } from './Cascader';
3
- import { ItemDataType } from '../@types/common';
4
- export declare function getColumnsAndPaths<T extends ItemDataType>(data: T[], value: any, options: any): {
5
- columns: ItemDataType<string | number>[][];
2
+ export declare function getColumnsAndPaths<T extends Record<string, unknown>>(data: T[], value: any, options: any): {
3
+ columns: T[][];
6
4
  paths: T[];
7
5
  };
8
- export declare function usePaths(props: CascaderProps): {
6
+ declare type UsePathsParams<T> = {
7
+ data: T[];
8
+ valueKey: string;
9
+ childrenKey: string;
10
+ value: unknown;
11
+ };
12
+ export declare function usePaths<T extends Record<string, unknown>>(params: UsePathsParams<T>): {
9
13
  enforceUpdate: (nextValue: any, isAttachChildren?: boolean) => void;
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
- addColumn: (column: ItemDataType[], index: number) => void;
14
+ columnData: T[][];
15
+ valueToPaths: T[];
16
+ selectedPaths: T[];
17
+ setValueToPaths: import("react").Dispatch<import("react").SetStateAction<T[]>>;
18
+ setColumnData: import("react").Dispatch<import("react").SetStateAction<T[][]>>;
19
+ setSelectedPaths: import("react").Dispatch<import("react").SetStateAction<T[]>>;
20
+ addColumn: (column: T[], index: number) => void;
17
21
  romoveColumnByIndex: (index: number) => void;
18
22
  };
23
+ export {};
@@ -86,11 +86,11 @@ function getColumnsAndPaths(data, value, options) {
86
86
  };
87
87
  }
88
88
 
89
- function usePaths(props) {
90
- var data = props.data,
91
- valueKey = props.valueKey,
92
- childrenKey = props.childrenKey,
93
- value = props.value;
89
+ function usePaths(params) {
90
+ var data = params.data,
91
+ valueKey = params.valueKey,
92
+ childrenKey = params.childrenKey,
93
+ value = params.value;
94
94
 
95
95
  var _useMemo = (0, _react.useMemo)(function () {
96
96
  return getColumnsAndPaths(data, value, {
@@ -29,7 +29,11 @@ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, Form
29
29
  showMeridian?: boolean;
30
30
  /** one tap to select */
31
31
  oneTap?: boolean;
32
- /** Disabled date */
32
+ /**
33
+ * Whether to disable a date on the calendar view
34
+ *
35
+ * @returns date should be disabled (not selectable)
36
+ */
33
37
  disabledDate?: (date?: Date) => boolean;
34
38
  /** Disabled hours */
35
39
  disabledHours?: (hour: number, date: Date) => boolean;
@@ -29,6 +29,8 @@ var _CalendarContainer = _interopRequireDefault(require("../Calendar/CalendarCon
29
29
 
30
30
  var _useCalendarDate2 = _interopRequireDefault(require("../Calendar/useCalendarDate"));
31
31
 
32
+ var _MonthDropdown = require("../Calendar/MonthDropdown");
33
+
32
34
  var _Toolbar = _interopRequireDefault(require("./Toolbar"));
33
35
 
34
36
  var _Stack = _interopRequireDefault(require("../Stack"));
@@ -336,6 +338,20 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
336
338
 
337
339
  return allowDate || allowTime;
338
340
  }, [disabledDateProp, props]);
341
+ /**
342
+ * Whether "OK" button is disabled
343
+ *
344
+ * - If format is date, disable ok button if selected date is disabled
345
+ * - If format is month, disable ok button if all dates in the month of selected date are disabled
346
+ */
347
+
348
+ var isOKButtonDisabled = (0, _react.useCallback)(function (selectedDate) {
349
+ if (_utils.DateUtils.shouldRenderMonth(formatStr) && !_utils.DateUtils.shouldRenderDate(formatStr)) {
350
+ return (0, _MonthDropdown.isEveryDateInMonth)(selectedDate.getFullYear(), selectedDate.getMonth(), disabledToolbarHandle);
351
+ }
352
+
353
+ return disabledToolbarHandle(selectedDate);
354
+ }, [disabledToolbarHandle, formatStr]);
339
355
  var calendarProps = (0, _react.useMemo)(function () {
340
356
  return (0, _mapValues.default)((0, _pick.default)(props, _utils.DateUtils.calendarOnlyProps), function (disabledOrHiddenTimeFunc) {
341
357
  return function (next, date) {
@@ -406,7 +422,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
406
422
  locale: locale,
407
423
  ranges: bottomRanges,
408
424
  calendarDate: calendarDate,
409
- disabledOkBtn: disabledToolbarHandle,
425
+ disabledOkBtn: isOKButtonDisabled,
410
426
  disabledShortcut: disabledToolbarHandle,
411
427
  onClickShortcut: handleShortcutPageDate,
412
428
  onOk: handleOK,
@@ -4,6 +4,7 @@ import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types
4
4
  import { IconProps } from '@rsuite/icons/lib/Icon';
5
5
  import DropdownItem from './DropdownItem';
6
6
  import Button from '../Button';
7
+ import DropdownSeparator from './DropdownSeparator';
7
8
  export declare type DropdownTrigger = 'click' | 'hover' | 'contextMenu';
8
9
  export interface DropdownProps<T = any> extends WithAsProps, Omit<React.HTMLAttributes<HTMLElement>, 'onSelect' | 'title'> {
9
10
  /** Define the title as a submenu */
@@ -58,6 +59,7 @@ export interface DropdownComponent extends RsRefForwardingComponent<'div', Dropd
58
59
  } & React.ComponentProps<ToggleAs>, context: any): JSX.Element | null;
59
60
  Item: typeof DropdownItem;
60
61
  Menu: typeof DropdownMenu;
62
+ Separator: typeof DropdownSeparator;
61
63
  }
62
64
  /**
63
65
  * The <Dropdown> API
@@ -43,6 +43,8 @@ var _warnOnce = _interopRequireDefault(require("../utils/warnOnce"));
43
43
 
44
44
  var _Nav = _interopRequireDefault(require("../Nav"));
45
45
 
46
+ var _DropdownSeparator = _interopRequireDefault(require("./DropdownSeparator"));
47
+
46
48
  /**
47
49
  * The <Dropdown> API
48
50
  * When used inside <Sidenav>, renders a <TreeviewRootItem>;
@@ -186,6 +188,7 @@ var Dropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
186
188
 
187
189
  Dropdown.Item = _DropdownItem.default;
188
190
  Dropdown.Menu = _DropdownMenu.default;
191
+ Dropdown.Separator = _DropdownSeparator.default;
189
192
  Dropdown.displayName = 'Dropdown';
190
193
  Dropdown.propTypes = {
191
194
  activeKey: _propTypes.default.any,
@@ -8,7 +8,11 @@ export interface DropdownMenuItemProps<T = any> extends WithAsProps, Omit<React.
8
8
  children?: React.ReactNode;
9
9
  /** You can use a custom element for this component */
10
10
  as?: React.ElementType;
11
- /** Whether to display the divider */
11
+ /**
12
+ * Whether to display the divider
13
+ *
14
+ * @deprecated Use dedicated <Dropdown.Separator> component instead
15
+ */
12
16
  divider?: boolean;
13
17
  /** Disable the current option */
14
18
  disabled?: boolean;
@@ -11,11 +11,13 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
13
 
14
+ var _pick2 = _interopRequireDefault(require("lodash/pick"));
15
+
14
16
  var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
19
 
18
- var _deprecatePropType = _interopRequireDefault(require("../utils/deprecatePropType"));
20
+ var _deprecatePropType = _interopRequireWildcard(require("../utils/deprecatePropType"));
19
21
 
20
22
  var _MenuItem = _interopRequireDefault(require("../Menu/MenuItem"));
21
23
 
@@ -37,6 +39,8 @@ var _warnOnce = _interopRequireDefault(require("../utils/warnOnce"));
37
39
 
38
40
  var _Nav = _interopRequireDefault(require("../Nav"));
39
41
 
42
+ var _DropdownSeparator = _interopRequireDefault(require("./DropdownSeparator"));
43
+
40
44
  /**
41
45
  * The <Dropdown.Item> API
42
46
  * When used inside <Sidenav>, renders a <TreeviewItem>
@@ -106,11 +110,7 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
106
110
  }
107
111
 
108
112
  if (divider) {
109
- return renderDropdownItem((0, _extends2.default)({
110
- ref: ref,
111
- role: 'separator',
112
- className: merge(prefix('divider'), className)
113
- }, restProps));
113
+ return /*#__PURE__*/_react.default.createElement(_DropdownSeparator.default, (0, _pick2.default)(props, ['data-testid']));
114
114
  }
115
115
 
116
116
  if (panel) {
@@ -159,7 +159,7 @@ var DropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
159
159
  DropdownItem.displayName = 'Dropdown.Item';
160
160
  DropdownItem.propTypes = {
161
161
  as: _propTypes.default.elementType,
162
- divider: _propTypes.default.bool,
162
+ divider: (0, _deprecatePropType.deprecatePropTypeNew)(_propTypes.default.bool, 'Use Dropdown.Separator component instead.'),
163
163
  panel: _propTypes.default.bool,
164
164
  trigger: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.oneOf(['click', 'hover'])]),
165
165
  open: (0, _deprecatePropType.default)(_propTypes.default.bool),
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
3
+ export interface DropdownSeparatorProps extends WithAsProps, React.HTMLAttributes<HTMLElement> {
4
+ /** You can use a custom element for this component */
5
+ as?: React.ElementType;
6
+ }
7
+ /**
8
+ * The <Dropdown.Separator> API
9
+ *
10
+ * Renders a non-focusable and non-interactive `separator`
11
+ * Per ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/menu/
12
+ */
13
+ declare const DropdownSeparator: RsRefForwardingComponent<'li', DropdownSeparatorProps>;
14
+ export default DropdownSeparator;
@@ -0,0 +1,48 @@
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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _utils = require("../utils");
17
+
18
+ /**
19
+ * The <Dropdown.Separator> API
20
+ *
21
+ * Renders a non-focusable and non-interactive `separator`
22
+ * Per ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/menu/
23
+ */
24
+ var DropdownSeparator = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
25
+ var _props$classPrefix = props.classPrefix,
26
+ classPrefix = _props$classPrefix === void 0 ? 'dropdown-item-divider' : _props$classPrefix,
27
+ className = props.className,
28
+ _props$as = props.as,
29
+ Component = _props$as === void 0 ? 'li' : _props$as,
30
+ restProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["classPrefix", "className", "as"]);
31
+
32
+ var _useClassNames = (0, _utils.useClassNames)(classPrefix),
33
+ merge = _useClassNames.merge,
34
+ withClassPrefix = _useClassNames.withClassPrefix;
35
+
36
+ return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
37
+ ref: ref,
38
+ role: "separator",
39
+ className: merge(withClassPrefix(), className)
40
+ }, restProps));
41
+ });
42
+
43
+ DropdownSeparator.displayName = 'Dropdown.Separator';
44
+ DropdownSeparator.propTypes = {
45
+ as: _propTypes.default.elementType
46
+ };
47
+ var _default = DropdownSeparator;
48
+ exports.default = _default;
@@ -9,25 +9,28 @@ interface ItemKeys {
9
9
  labelKey: string;
10
10
  childrenKey: string;
11
11
  }
12
+ declare type MayHasParent<T extends Record<string, unknown>> = T & {
13
+ parent?: MayHasParent<T>;
14
+ };
12
15
  /**
13
16
  * Get all parents of a node
14
17
  * @param node
15
18
  */
16
- export declare const getParents: (node: ItemType) => ItemType[];
19
+ export declare const getParents: <T extends Record<string, unknown>>(node: MayHasParent<T>) => MayHasParent<T>[];
17
20
  /**
18
21
  * Check if any child nodes are selected.
19
22
  * @param node
20
23
  * @param value
21
24
  * @param itemKeys
22
25
  */
23
- export declare const isSomeChildChecked: (node: ItemDataType, value: ValueType, itemKeys: Omit<ItemKeys, 'labelKey'>) => any;
26
+ export declare const isSomeChildChecked: <T extends Record<string, unknown>>(node: T, value: ValueType, itemKeys: Omit<ItemKeys, 'labelKey'>) => any;
24
27
  /**
25
28
  * Check if the parent is selected.
26
29
  * @param node
27
30
  * @param value
28
31
  * @param itemKeys
29
32
  */
30
- export declare const isSomeParentChecked: (node: ItemDataType, value: ValueType, itemKeys: Pick<ItemKeys, 'valueKey'>) => any;
33
+ export declare const isSomeParentChecked: <T extends Record<string, unknown>>(node: MayHasParent<T>, value: ValueType, itemKeys: Pick<ItemKeys, 'valueKey'>) => any;
31
34
  export declare const getOtherItemValuesByUnselectChild: <T>(itemNode: ItemType, value: any, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[];
32
35
  /**
33
36
  * Remove the values of all children.
@@ -37,20 +40,20 @@ export declare const removeAllChildrenValue: <T>(value: T[], item: ItemType, ite
37
40
  * A hook to flatten tree structure data
38
41
  * @param data
39
42
  */
40
- export declare function useFlattenData(data: ItemDataType[], itemKeys: ItemKeys): {
41
- addFlattenData: (children: ItemDataType[], parent: ItemDataType) => void;
42
- flattenData: ItemDataType<string | number>[];
43
+ export declare function useFlattenData<T>(data: T[], itemKeys: ItemKeys): {
44
+ addFlattenData: (children: T[], parent: T) => void;
45
+ flattenData: T[];
43
46
  };
44
47
  /**
45
48
  * A hook for column data
46
49
  * @param flattenData
47
50
  */
48
- export declare function useColumnData(flattenData: ItemType[]): {
49
- columnData: ItemDataType<string | number>[][];
50
- addColumn: (column: ItemDataType[], index: number) => void;
51
+ export declare function useColumnData<T extends MayHasParent<Record<string, unknown>>>(flattenData: T[]): {
52
+ columnData: T[][];
53
+ addColumn: (column: T[], index: number) => void;
51
54
  romoveColumnByIndex: (index: number) => void;
52
- setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[][]>>;
53
- enforceUpdateColumnData: (nextData: ItemDataType[]) => void;
55
+ setColumnData: import("react").Dispatch<import("react").SetStateAction<T[][]>>;
56
+ enforceUpdateColumnData: (nextData: T[]) => void;
54
57
  };
55
58
  /**
56
59
  * A hook that converts the value into a cascading value
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { OverlayTriggerHandle } from './PickerToggleTrigger';
3
- import { TypeAttributes, ItemDataType } from '../@types/common';
3
+ import { TypeAttributes } from '../@types/common';
4
4
  import type { ListHandle } from '../Windowing';
5
5
  export interface NodeKeys {
6
6
  valueKey: string;
@@ -86,24 +86,25 @@ export interface ToggleKeyDownEventProps {
86
86
  * @param props
87
87
  */
88
88
  export declare const useToggleKeyDownEvent: (props: ToggleKeyDownEventProps) => (event: React.KeyboardEvent) => void;
89
- export interface SearchProps {
89
+ export interface SearchProps<TItem extends Record<string, unknown>, TLabel> {
90
90
  labelKey: string;
91
- data: ItemDataType[];
92
- searchBy?: (keyword: any, label: any, item: any) => boolean;
93
- callback?: (keyword: string, data: ItemDataType[], event: React.SyntheticEvent) => void;
91
+ data: TItem[];
92
+ searchBy?: (keyword: string, label: TLabel, item: TItem) => boolean;
93
+ callback?: (keyword: string, data: TItem[], event: React.SyntheticEvent) => void;
94
94
  }
95
+ declare type UseSearchResult<TItem extends Record<string, unknown>> = {
96
+ searchKeyword: string;
97
+ filteredData: TItem[];
98
+ updateFilteredData: (nextData: TItem[]) => void;
99
+ setSearchKeyword: (value: string) => void;
100
+ checkShouldDisplay: (item: TItem, keyword?: string) => boolean;
101
+ handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
102
+ };
95
103
  /**
96
104
  * A hook that handles search filter options
97
105
  * @param props
98
106
  */
99
- export declare function useSearch(props: SearchProps): {
100
- searchKeyword: string;
101
- filteredData: import("../CheckTreePicker/utils").TreeNodeType[];
102
- updateFilteredData: (nextData: ItemDataType[]) => void;
103
- setSearchKeyword: React.Dispatch<React.SetStateAction<string>>;
104
- checkShouldDisplay: (item: ItemDataType, keyword?: string) => boolean;
105
- handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
106
- };
107
+ export declare function useSearch<TItem extends Record<string, unknown>, TLabel>(props: SearchProps<TItem, TLabel>): UseSearchResult<TItem>;
107
108
  export interface PickerDependentParameters {
108
109
  triggerRef?: React.RefObject<OverlayTriggerHandle>;
109
110
  rootRef?: React.RefObject<HTMLElement>;
@@ -116,3 +117,4 @@ export interface PickerDependentParameters {
116
117
  * A hook of the exposed method of Picker
117
118
  */
118
119
  export declare function usePublicMethods(ref: any, parmas: PickerDependentParameters): void;
120
+ export {};