rsuite 5.56.0 → 5.57.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 (179) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CascadeTree/package.json +7 -0
  3. package/CascadeTree/styles/index.css +273 -0
  4. package/CascadeTree/styles/index.less +77 -0
  5. package/CascadeTree/styles/search.less +45 -0
  6. package/Cascader/styles/index.css +187 -192
  7. package/Cascader/styles/index.less +1 -122
  8. package/MultiCascadeTree/package.json +7 -0
  9. package/MultiCascadeTree/styles/index.css +3701 -0
  10. package/MultiCascadeTree/styles/index.less +37 -0
  11. package/MultiCascader/styles/index.css +72 -69
  12. package/MultiCascader/styles/index.less +11 -31
  13. package/cjs/@types/common.d.ts +12 -14
  14. package/cjs/CascadeTree/CascadeTree.d.ts +16 -0
  15. package/cjs/CascadeTree/CascadeTree.js +174 -0
  16. package/cjs/CascadeTree/SearchView.d.ts +17 -0
  17. package/cjs/CascadeTree/SearchView.js +106 -0
  18. package/cjs/CascadeTree/TreeView.d.ts +20 -0
  19. package/cjs/{Cascader → CascadeTree}/TreeView.js +42 -33
  20. package/cjs/CascadeTree/hooks/index.d.ts +3 -0
  21. package/cjs/CascadeTree/hooks/index.js +12 -0
  22. package/cjs/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  23. package/cjs/CascadeTree/hooks/usePaths.js +42 -0
  24. package/cjs/CascadeTree/hooks/useSearch.d.ts +17 -0
  25. package/cjs/CascadeTree/hooks/useSearch.js +59 -0
  26. package/cjs/CascadeTree/hooks/useSelect.d.ts +23 -0
  27. package/cjs/CascadeTree/hooks/useSelect.js +64 -0
  28. package/cjs/CascadeTree/index.d.ts +4 -0
  29. package/cjs/CascadeTree/index.js +9 -0
  30. package/cjs/CascadeTree/types.d.ts +66 -0
  31. package/cjs/CascadeTree/types.js +2 -0
  32. package/cjs/CascadeTree/utils.d.ts +32 -0
  33. package/cjs/CascadeTree/utils.js +66 -0
  34. package/cjs/Cascader/Cascader.d.ts +57 -26
  35. package/cjs/Cascader/Cascader.js +180 -247
  36. package/cjs/Cascader/useActive.d.ts +15 -0
  37. package/cjs/Cascader/useActive.js +43 -0
  38. package/cjs/InlineEdit/InlineEdit.d.ts +1 -1
  39. package/cjs/Loader/Loader.js +5 -4
  40. package/cjs/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  41. package/cjs/MultiCascadeTree/MultiCascadeTree.js +131 -0
  42. package/cjs/MultiCascadeTree/SearchView.d.ts +17 -0
  43. package/cjs/MultiCascadeTree/SearchView.js +117 -0
  44. package/cjs/MultiCascadeTree/TreeView.d.ts +22 -0
  45. package/cjs/{MultiCascader → MultiCascadeTree}/TreeView.js +20 -20
  46. package/cjs/MultiCascadeTree/hooks/index.d.ts +5 -0
  47. package/cjs/MultiCascadeTree/hooks/index.js +16 -0
  48. package/cjs/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  49. package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +202 -0
  50. package/cjs/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  51. package/cjs/MultiCascadeTree/hooks/useColumnData.js +52 -0
  52. package/cjs/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  53. package/cjs/MultiCascadeTree/hooks/useFlattenData.js +33 -0
  54. package/cjs/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  55. package/cjs/MultiCascadeTree/hooks/useSearch.js +52 -0
  56. package/cjs/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  57. package/cjs/MultiCascadeTree/hooks/useSelect.js +83 -0
  58. package/cjs/MultiCascadeTree/index.d.ts +4 -0
  59. package/cjs/MultiCascadeTree/index.js +9 -0
  60. package/cjs/MultiCascadeTree/types.d.ts +26 -0
  61. package/cjs/MultiCascadeTree/types.js +2 -0
  62. package/cjs/MultiCascadeTree/utils.d.ts +37 -0
  63. package/cjs/MultiCascadeTree/utils.js +140 -0
  64. package/cjs/MultiCascader/MultiCascader.d.ts +57 -29
  65. package/cjs/MultiCascader/MultiCascader.js +175 -287
  66. package/cjs/Tree/Tree.d.ts +4 -4
  67. package/cjs/index.d.ts +6 -1
  68. package/cjs/index.js +8 -3
  69. package/cjs/internals/Picker/PickerToggle.d.ts +4 -5
  70. package/cjs/toaster/ToastContainer.d.ts +9 -2
  71. package/cjs/toaster/index.d.ts +0 -1
  72. package/cjs/toaster/index.js +1 -3
  73. package/cjs/useToaster/index.d.ts +2 -0
  74. package/cjs/useToaster/index.js +9 -0
  75. package/cjs/{toaster → useToaster}/useToaster.d.ts +4 -4
  76. package/cjs/{toaster → useToaster}/useToaster.js +4 -4
  77. package/cjs/utils/index.d.ts +1 -0
  78. package/cjs/utils/index.js +5 -2
  79. package/dist/rsuite-no-reset-rtl.css +64 -61
  80. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  81. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  82. package/dist/rsuite-no-reset.css +64 -61
  83. package/dist/rsuite-no-reset.min.css +1 -1
  84. package/dist/rsuite-no-reset.min.css.map +1 -1
  85. package/dist/rsuite-rtl.css +64 -61
  86. package/dist/rsuite-rtl.min.css +1 -1
  87. package/dist/rsuite-rtl.min.css.map +1 -1
  88. package/dist/rsuite.css +64 -61
  89. package/dist/rsuite.js +242 -44
  90. package/dist/rsuite.js.map +1 -1
  91. package/dist/rsuite.min.css +1 -1
  92. package/dist/rsuite.min.css.map +1 -1
  93. package/dist/rsuite.min.js +1 -1
  94. package/dist/rsuite.min.js.map +1 -1
  95. package/esm/@types/common.d.ts +12 -14
  96. package/esm/CascadeTree/CascadeTree.d.ts +16 -0
  97. package/esm/CascadeTree/CascadeTree.js +167 -0
  98. package/esm/CascadeTree/SearchView.d.ts +17 -0
  99. package/esm/CascadeTree/SearchView.js +100 -0
  100. package/esm/CascadeTree/TreeView.d.ts +20 -0
  101. package/esm/{Cascader → CascadeTree}/TreeView.js +42 -33
  102. package/esm/CascadeTree/hooks/index.d.ts +3 -0
  103. package/esm/CascadeTree/hooks/index.js +4 -0
  104. package/esm/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  105. package/esm/CascadeTree/hooks/usePaths.js +36 -0
  106. package/esm/CascadeTree/hooks/useSearch.d.ts +17 -0
  107. package/esm/CascadeTree/hooks/useSearch.js +54 -0
  108. package/esm/CascadeTree/hooks/useSelect.d.ts +23 -0
  109. package/esm/CascadeTree/hooks/useSelect.js +59 -0
  110. package/esm/CascadeTree/index.d.ts +4 -0
  111. package/esm/CascadeTree/index.js +3 -0
  112. package/esm/CascadeTree/types.d.ts +66 -0
  113. package/esm/CascadeTree/types.js +1 -0
  114. package/esm/CascadeTree/utils.d.ts +32 -0
  115. package/esm/CascadeTree/utils.js +61 -0
  116. package/esm/Cascader/Cascader.d.ts +57 -26
  117. package/esm/Cascader/Cascader.js +167 -233
  118. package/esm/Cascader/useActive.d.ts +15 -0
  119. package/esm/Cascader/useActive.js +37 -0
  120. package/esm/InlineEdit/InlineEdit.d.ts +1 -1
  121. package/esm/Loader/Loader.js +6 -5
  122. package/esm/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  123. package/esm/MultiCascadeTree/MultiCascadeTree.js +125 -0
  124. package/esm/MultiCascadeTree/SearchView.d.ts +17 -0
  125. package/esm/MultiCascadeTree/SearchView.js +111 -0
  126. package/esm/MultiCascadeTree/TreeView.d.ts +22 -0
  127. package/esm/{MultiCascader → MultiCascadeTree}/TreeView.js +20 -20
  128. package/esm/MultiCascadeTree/hooks/index.d.ts +5 -0
  129. package/esm/MultiCascadeTree/hooks/index.js +6 -0
  130. package/esm/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  131. package/esm/MultiCascadeTree/hooks/useCascadeValue.js +197 -0
  132. package/esm/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  133. package/esm/MultiCascadeTree/hooks/useColumnData.js +46 -0
  134. package/esm/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  135. package/esm/MultiCascadeTree/hooks/useFlattenData.js +28 -0
  136. package/esm/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  137. package/esm/MultiCascadeTree/hooks/useSearch.js +47 -0
  138. package/esm/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  139. package/esm/MultiCascadeTree/hooks/useSelect.js +77 -0
  140. package/esm/MultiCascadeTree/index.d.ts +4 -0
  141. package/esm/MultiCascadeTree/index.js +3 -0
  142. package/esm/MultiCascadeTree/types.d.ts +26 -0
  143. package/esm/MultiCascadeTree/types.js +1 -0
  144. package/esm/MultiCascadeTree/utils.d.ts +37 -0
  145. package/esm/MultiCascadeTree/utils.js +130 -0
  146. package/esm/MultiCascader/MultiCascader.d.ts +57 -29
  147. package/esm/MultiCascader/MultiCascader.js +168 -279
  148. package/esm/Tree/Tree.d.ts +4 -4
  149. package/esm/index.d.ts +6 -1
  150. package/esm/index.js +5 -1
  151. package/esm/internals/Picker/PickerToggle.d.ts +4 -5
  152. package/esm/toaster/ToastContainer.d.ts +9 -2
  153. package/esm/toaster/index.d.ts +0 -1
  154. package/esm/toaster/index.js +0 -1
  155. package/esm/useToaster/index.d.ts +2 -0
  156. package/esm/useToaster/index.js +3 -0
  157. package/esm/{toaster → useToaster}/useToaster.d.ts +4 -4
  158. package/esm/{toaster → useToaster}/useToaster.js +4 -4
  159. package/esm/utils/index.d.ts +1 -0
  160. package/esm/utils/index.js +2 -1
  161. package/package.json +1 -1
  162. package/styles/index.less +2 -0
  163. package/useToaster/package.json +7 -0
  164. package/useToaster/styles/index.css +239 -0
  165. package/useToaster/styles/index.less +1 -0
  166. package/cjs/Cascader/DropdownMenu.d.ts +0 -24
  167. package/cjs/Cascader/DropdownMenu.js +0 -175
  168. package/cjs/Cascader/TreeView.d.ts +0 -24
  169. package/cjs/Cascader/utils.js +0 -79
  170. package/cjs/MultiCascader/TreeView.d.ts +0 -25
  171. package/cjs/MultiCascader/utils.d.ts +0 -71
  172. package/cjs/MultiCascader/utils.js +0 -382
  173. package/esm/Cascader/DropdownMenu.d.ts +0 -24
  174. package/esm/Cascader/DropdownMenu.js +0 -168
  175. package/esm/Cascader/TreeView.d.ts +0 -24
  176. package/esm/Cascader/utils.js +0 -74
  177. package/esm/MultiCascader/TreeView.d.ts +0 -25
  178. package/esm/MultiCascader/utils.d.ts +0 -71
  179. package/esm/MultiCascader/utils.js +0 -369
@@ -1,21 +1,22 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import React, { useState, useCallback } from 'react';
4
+ import React, { useCallback } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import pick from 'lodash/pick';
7
7
  import omit from 'lodash/omit';
8
8
  import isFunction from 'lodash/isFunction';
9
9
  import isNil from 'lodash/isNil';
10
- import TreeView from './TreeView';
11
- import Checkbox from '../Checkbox';
12
- import { useCascadeValue, useColumnData, useFlattenData, isSomeChildChecked } from './utils';
13
- import { getNodeParents, findNodeOfTree } from '../utils/treeUtils';
14
- import { getColumnsAndPaths } from '../Cascader/utils';
15
- import { createChainedFunction, mergeRefs, getSafeRegExpString, useClassNames, useCustom, useUpdateEffect, useControlled, useEventCallback } from '../utils';
10
+ import { findNodeOfTree } from '../utils/treeUtils';
11
+ import { getColumnsAndPaths } from '../CascadeTree/utils';
12
+ import { createChainedFunction, mergeRefs, useClassNames, useCustom, useControlled, useEventCallback } from '../utils';
16
13
  import { PickerToggle, PickerPopup, SelectedElement, PickerToggleTrigger, usePickerClassName, usePickerRef, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../internals/Picker';
17
- import SearchBox from '../internals/SearchBox';
14
+ import { deprecatePropTypeNew } from '../internals/propTypes';
15
+ import { useCascadeValue, useSearch, useSelect } from '../MultiCascadeTree/hooks';
16
+ import TreeView from '../MultiCascadeTree/TreeView';
17
+ import SearchView from '../MultiCascadeTree/SearchView';
18
18
  import { oneOf } from '../internals/propTypes';
19
+ import useActive from '../Cascader/useActive';
19
20
  var emptyArray = [];
20
21
 
21
22
  /**
@@ -26,23 +27,27 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
26
27
  var _selectedPaths;
27
28
  var _props$as = props.as,
28
29
  Component = _props$as === void 0 ? 'div' : _props$as,
29
- _props$data = props.data,
30
- data = _props$data === void 0 ? emptyArray : _props$data,
30
+ _props$appearance = props.appearance,
31
+ appearance = _props$appearance === void 0 ? 'default' : _props$appearance,
31
32
  _props$classPrefix = props.classPrefix,
32
33
  classPrefix = _props$classPrefix === void 0 ? 'picker' : _props$classPrefix,
33
34
  defaultValue = props.defaultValue,
34
- valueProp = props.value,
35
- _props$valueKey = props.valueKey,
36
- valueKey = _props$valueKey === void 0 ? 'value' : _props$valueKey,
37
- _props$labelKey = props.labelKey,
38
- labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
35
+ columnHeight = props.columnHeight,
36
+ columnWidth = props.columnWidth,
39
37
  _props$childrenKey = props.childrenKey,
40
38
  childrenKey = _props$childrenKey === void 0 ? 'children' : _props$childrenKey,
39
+ _props$cleanable = props.cleanable,
40
+ cleanable = _props$cleanable === void 0 ? true : _props$cleanable,
41
+ _props$data = props.data,
42
+ data = _props$data === void 0 ? emptyArray : _props$data,
41
43
  disabled = props.disabled,
42
44
  _props$disabledItemVa = props.disabledItemValues,
43
45
  disabledItemValues = _props$disabledItemVa === void 0 ? emptyArray : _props$disabledItemVa,
44
- _props$cleanable = props.cleanable,
45
- cleanable = _props$cleanable === void 0 ? true : _props$cleanable,
46
+ valueProp = props.value,
47
+ _props$valueKey = props.valueKey,
48
+ valueKey = _props$valueKey === void 0 ? 'value' : _props$valueKey,
49
+ _props$labelKey = props.labelKey,
50
+ labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
46
51
  overrideLocale = props.locale,
47
52
  toggleAs = props.toggleAs,
48
53
  style = props.style,
@@ -50,16 +55,11 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
50
55
  countable = _props$countable === void 0 ? true : _props$countable,
51
56
  _props$cascade = props.cascade,
52
57
  cascade = _props$cascade === void 0 ? true : _props$cascade,
53
- inline = props.inline,
54
58
  placeholder = props.placeholder,
55
59
  _props$placement = props.placement,
56
60
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
57
- _props$appearance = props.appearance,
58
- appearance = _props$appearance === void 0 ? 'default' : _props$appearance,
59
- menuWidth = props.menuWidth,
60
- menuHeight = props.menuHeight,
61
- menuClassName = props.menuClassName,
62
- menuStyle = props.menuStyle,
61
+ popupClassName = props.popupClassName,
62
+ popupStyle = props.popupStyle,
63
63
  _props$searchable = props.searchable,
64
64
  searchable = _props$searchable === void 0 ? true : _props$searchable,
65
65
  _props$uncheckableIte = props.uncheckableItemValues,
@@ -67,11 +67,10 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
67
67
  id = props.id,
68
68
  getChildren = props.getChildren,
69
69
  renderValue = props.renderValue,
70
- renderMenu = props.renderMenu,
71
- renderMenuItem = props.renderMenuItem,
72
70
  renderExtraFooter = props.renderExtraFooter,
73
- onEnter = props.onEnter,
74
- onExit = props.onExit,
71
+ renderColumn = props.renderColumn,
72
+ renderTreeNode = props.renderTreeNode,
73
+ onEntered = props.onEntered,
75
74
  onExited = props.onExited,
76
75
  onClean = props.onClean,
77
76
  onSearch = props.onSearch,
@@ -80,42 +79,13 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
80
79
  onOpen = props.onOpen,
81
80
  onClose = props.onClose,
82
81
  onCheck = props.onCheck,
83
- rest = _objectWithoutPropertiesLoose(props, ["as", "data", "classPrefix", "defaultValue", "value", "valueKey", "labelKey", "childrenKey", "disabled", "disabledItemValues", "cleanable", "locale", "toggleAs", "style", "countable", "cascade", "inline", "placeholder", "placement", "appearance", "menuWidth", "menuHeight", "menuClassName", "menuStyle", "searchable", "uncheckableItemValues", "id", "getChildren", "renderValue", "renderMenu", "renderMenuItem", "renderExtraFooter", "onEnter", "onExit", "onExited", "onClean", "onSearch", "onSelect", "onChange", "onOpen", "onClose", "onCheck"]);
84
- var itemKeys = {
85
- childrenKey: childrenKey,
86
- labelKey: labelKey,
87
- valueKey: valueKey
88
- };
89
- var _useState = useState(false),
90
- active = _useState[0],
91
- setActive = _useState[1];
92
- var _useFlattenData = useFlattenData(data, itemKeys),
93
- flattenData = _useFlattenData.flattenData,
94
- addFlattenData = _useFlattenData.addFlattenData;
95
- var _useControlled = useControlled(valueProp, defaultValue),
96
- controlledValue = _useControlled[0];
97
- var _useCascadeValue = useCascadeValue(_extends({}, itemKeys, {
98
- uncheckableItemValues: uncheckableItemValues,
99
- cascade: cascade,
100
- value: controlledValue
101
- }), flattenData),
102
- value = _useCascadeValue.value,
103
- setValue = _useCascadeValue.setValue,
104
- splitValue = _useCascadeValue.splitValue; // The columns displayed in the cascading panel.
105
- var _useColumnData = useColumnData(flattenData),
106
- columnData = _useColumnData.columnData,
107
- setColumnData = _useColumnData.setColumnData,
108
- addColumn = _useColumnData.addColumn,
109
- removeColumnByIndex = _useColumnData.removeColumnByIndex,
110
- enforceUpdateColumnData = _useColumnData.enforceUpdateColumnData;
111
- useUpdateEffect(function () {
112
- enforceUpdateColumnData(data);
113
- }, [data]);
114
-
115
- // The path after cascading data selection.
116
- var _useState2 = useState(),
117
- selectedPaths = _useState2[0],
118
- setSelectedPaths = _useState2[1];
82
+ DEPRECATED_menuClassName = props.menuClassName,
83
+ DEPRECATED_menuStyle = props.menuStyle,
84
+ DEPRECATED_menuWidth = props.menuWidth,
85
+ DEPRECATED_menuHeight = props.menuHeight,
86
+ DEPRECATED_renderMenu = props.renderMenu,
87
+ DEPRECATED_renderMenuItem = props.renderMenuItem,
88
+ rest = _objectWithoutPropertiesLoose(props, ["as", "appearance", "classPrefix", "defaultValue", "columnHeight", "columnWidth", "childrenKey", "cleanable", "data", "disabled", "disabledItemValues", "value", "valueKey", "labelKey", "locale", "toggleAs", "style", "countable", "cascade", "placeholder", "placement", "popupClassName", "popupStyle", "searchable", "uncheckableItemValues", "id", "getChildren", "renderValue", "renderExtraFooter", "renderColumn", "renderTreeNode", "onEntered", "onExited", "onClean", "onSearch", "onSelect", "onChange", "onOpen", "onClose", "onCheck", "menuClassName", "menuStyle", "menuWidth", "menuHeight", "renderMenu", "renderMenuItem"]);
119
89
  var _usePickerRef = usePickerRef(ref),
120
90
  trigger = _usePickerRef.trigger,
121
91
  root = _usePickerRef.root,
@@ -125,11 +95,67 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
125
95
  var _useCustom = useCustom('Picker', overrideLocale),
126
96
  locale = _useCustom.locale,
127
97
  rtl = _useCustom.rtl;
98
+ var _useClassNames = useClassNames(classPrefix),
99
+ prefix = _useClassNames.prefix,
100
+ merge = _useClassNames.merge;
101
+ var onSelectCallback = useCallback(function (node, cascadePaths, event) {
102
+ var _trigger$current, _trigger$current$upda;
103
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
104
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$upda = _trigger$current.updatePosition) === null || _trigger$current$upda === void 0 ? void 0 : _trigger$current$upda.call(_trigger$current);
105
+ }, [onSelect, trigger]);
106
+ var _useSelect = useSelect({
107
+ data: data,
108
+ childrenKey: childrenKey,
109
+ labelKey: labelKey,
110
+ valueKey: valueKey,
111
+ onSelect: onSelectCallback,
112
+ getChildren: getChildren
113
+ }),
114
+ selectedPaths = _useSelect.selectedPaths,
115
+ flattenData = _useSelect.flattenData,
116
+ columnData = _useSelect.columnData,
117
+ setColumnData = _useSelect.setColumnData,
118
+ setSelectedPaths = _useSelect.setSelectedPaths,
119
+ handleSelect = _useSelect.handleSelect;
120
+ var _useControlled = useControlled(valueProp, defaultValue),
121
+ controlledValue = _useControlled[0];
122
+ var itemKeys = {
123
+ childrenKey: childrenKey,
124
+ labelKey: labelKey,
125
+ valueKey: valueKey
126
+ };
127
+ var cascadeValueProps = _extends({}, itemKeys, {
128
+ uncheckableItemValues: uncheckableItemValues,
129
+ cascade: cascade,
130
+ value: controlledValue,
131
+ onCheck: onCheck,
132
+ onChange: onChange
133
+ });
134
+ var _useCascadeValue = useCascadeValue(cascadeValueProps, flattenData),
135
+ value = _useCascadeValue.value,
136
+ setValue = _useCascadeValue.setValue,
137
+ handleCheck = _useCascadeValue.handleCheck;
128
138
  var selectedItems = flattenData.filter(function (item) {
129
139
  return value.some(function (v) {
130
140
  return v === item[valueKey];
131
141
  });
132
142
  }) || [];
143
+ var onFocusItemCallback = useCallback(function (value) {
144
+ var _getColumnsAndPaths = getColumnsAndPaths(data, flattenData.find(function (item) {
145
+ return item[valueKey] === value;
146
+ }), {
147
+ getParent: function getParent() {
148
+ return undefined;
149
+ },
150
+ getChildren: function getChildren(item) {
151
+ return item[childrenKey];
152
+ }
153
+ }),
154
+ columns = _getColumnsAndPaths.columns,
155
+ path = _getColumnsAndPaths.path;
156
+ setColumnData(columns);
157
+ setSelectedPaths(path);
158
+ }, [childrenKey, data, flattenData, setColumnData, setSelectedPaths, valueKey]);
133
159
 
134
160
  // Used to hover the focuse item when trigger `onKeydown`
135
161
  var _useFocusItemValue = useFocusItemValue(selectedPaths === null || selectedPaths === void 0 ? void 0 : (_selectedPaths = selectedPaths[selectedPaths.length - 1]) === null || _selectedPaths === void 0 ? void 0 : _selectedPaths[valueKey], {
@@ -140,98 +166,44 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
140
166
  target: function target() {
141
167
  return overlay.current;
142
168
  },
143
- callback: useCallback(function (value) {
144
- var _getColumnsAndPaths = getColumnsAndPaths(data, flattenData.find(function (item) {
145
- return item[valueKey] === value;
146
- }), {
147
- getParent: function getParent() {
148
- return undefined;
149
- },
150
- getChildren: function getChildren(item) {
151
- return item[childrenKey];
152
- }
153
- }),
154
- columns = _getColumnsAndPaths.columns,
155
- path = _getColumnsAndPaths.path;
156
- setColumnData(columns);
157
- setSelectedPaths(path);
158
- }, [childrenKey, data, flattenData, setColumnData, valueKey])
169
+ callback: onFocusItemCallback
159
170
  }),
160
171
  focusItemValue = _useFocusItemValue.focusItemValue,
161
172
  setLayer = _useFocusItemValue.setLayer,
162
173
  setKeys = _useFocusItemValue.setKeys,
163
174
  onFocusItem = _useFocusItemValue.onKeyDown;
164
- /**
165
- * 1.Have a value and the value is valid.
166
- * 2.Regardless of whether the value is valid, as long as renderValue is set, it is judged to have a value.
167
- */
168
- var hasValue = selectedItems.length > 0 || Number(valueProp === null || valueProp === void 0 ? void 0 : valueProp.length) > 0 && isFunction(renderValue);
169
- var _useClassNames = useClassNames(classPrefix),
170
- prefix = _useClassNames.prefix,
171
- merge = _useClassNames.merge;
172
- var _useState3 = useState(''),
173
- searchKeyword = _useState3[0],
174
- setSearchKeyword = _useState3[1];
175
- var handleEntered = useEventCallback(function () {
176
- onOpen === null || onOpen === void 0 ? void 0 : onOpen();
177
- setActive(true);
178
- });
179
- var handleExited = useEventCallback(function () {
180
- setActive(false);
181
- setSearchKeyword('');
182
- });
183
- var handleSelect = useEventCallback(function (node, cascadePaths, event) {
184
- var _node$childrenKey, _node$childrenKey2, _trigger$current, _trigger$current$upda;
185
- setSelectedPaths(cascadePaths);
186
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
187
- var columnIndex = cascadePaths.length;
188
-
189
- // Lazy load node's children
190
- if (typeof getChildren === 'function' && ((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) === 0) {
191
- node.loading = true;
192
- var children = getChildren(node);
193
- if (children instanceof Promise) {
194
- children.then(function (data) {
195
- node.loading = false;
196
- node[childrenKey] = data;
197
- if (target.current || inline) {
198
- addFlattenData(data, node);
199
- addColumn(data, columnIndex);
200
- }
201
- });
202
- } else {
203
- node.loading = false;
204
- node[childrenKey] = children;
205
- addFlattenData(children, node);
206
- addColumn(children, columnIndex);
207
- }
208
- } else if ((_node$childrenKey2 = node[childrenKey]) !== null && _node$childrenKey2 !== void 0 && _node$childrenKey2.length) {
209
- addColumn(node[childrenKey], columnIndex);
210
- } else {
211
- // Removes subsequent columns of the current column when the clicked node is a leaf node.
212
- removeColumnByIndex(columnIndex);
213
- }
214
- (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$upda = _trigger$current.updatePosition) === null || _trigger$current$upda === void 0 ? void 0 : _trigger$current$upda.call(_trigger$current);
215
- });
216
- var handleCheck = useEventCallback(function (node, event, checked) {
217
- var nodeValue = node[valueKey];
218
- var nextValue = [];
219
- if (cascade) {
220
- nextValue = splitValue(node, checked, value).value;
221
- } else {
222
- nextValue = [].concat(value);
223
- if (checked) {
224
- nextValue.push(nodeValue);
225
- } else {
226
- nextValue = nextValue.filter(function (n) {
227
- return n !== nodeValue;
228
- });
229
- }
175
+ var onSearchCallback = function onSearchCallback(value, event) {
176
+ if (value) {
177
+ setLayer(0);
178
+ } else if (selectedPaths !== null && selectedPaths !== void 0 && selectedPaths.length) {
179
+ setLayer(selectedPaths.length - 1);
230
180
  }
231
- setValue(nextValue);
232
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
233
- onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
234
- });
181
+ setKeys([]);
182
+ onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
183
+ };
184
+ var _useSearch = useSearch({
185
+ labelKey: labelKey,
186
+ valueKey: valueKey,
187
+ childrenKey: childrenKey,
188
+ flattenedData: flattenData,
189
+ uncheckableItemValues: uncheckableItemValues,
190
+ onSearch: onSearchCallback
191
+ }),
192
+ items = _useSearch.items,
193
+ searchKeyword = _useSearch.searchKeyword,
194
+ setSearchKeyword = _useSearch.setSearchKeyword,
195
+ handleSearch = _useSearch.handleSearch;
196
+ var _useActive = useActive({
197
+ onOpen: onOpen,
198
+ onClose: onClose,
199
+ onEntered: onEntered,
200
+ onExited: onExited,
201
+ target: target,
202
+ setSearchKeyword: setSearchKeyword
203
+ }),
204
+ active = _useActive.active,
205
+ handleEntered = _useActive.handleEntered,
206
+ handleExited = _useActive.handleExited;
235
207
  var handleClean = useEventCallback(function (event) {
236
208
  if (disabled || !target.current) {
237
209
  return;
@@ -262,152 +234,67 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
262
234
  onMenuKeyDown: onFocusItem,
263
235
  onMenuPressEnter: handleMenuPressEnter
264
236
  }, rest));
265
- var handleSearch = useEventCallback(function (value, event) {
266
- setSearchKeyword(value);
267
- onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
268
- if (value) {
269
- setLayer(0);
270
- } else if (selectedPaths !== null && selectedPaths !== void 0 && selectedPaths.length) {
271
- setLayer(selectedPaths.length - 1);
272
- }
273
- setKeys([]);
274
- });
275
- var getSearchResult = function getSearchResult() {
276
- var items = [];
277
- var result = flattenData.filter(function (item) {
278
- if (uncheckableItemValues.some(function (value) {
279
- return item[valueKey] === value;
280
- })) {
281
- return false;
282
- }
283
- if (item[labelKey].match(new RegExp(getSafeRegExpString(searchKeyword), 'i'))) {
284
- return true;
285
- }
286
- return false;
287
- });
288
- for (var i = 0; i < result.length; i++) {
289
- items.push(result[i]);
290
-
291
- // A maximum of 100 search results are returned.
292
- if (i === 99) {
293
- return items;
294
- }
295
- }
296
- return items;
297
- };
298
- var renderSearchRow = function renderSearchRow(item, key) {
299
- var _extends2;
300
- var nodes = getNodeParents(item);
301
- var regx = new RegExp(getSafeRegExpString(searchKeyword), 'ig');
302
- var labelElements = [];
303
- var a = item[labelKey].split(regx);
304
- var b = item[labelKey].match(regx);
305
- for (var i = 0; i < a.length; i++) {
306
- labelElements.push(a[i]);
307
- if (b[i]) {
308
- labelElements.push( /*#__PURE__*/React.createElement("span", {
309
- key: i,
310
- className: prefix('cascader-search-match')
311
- }, b[i]));
312
- }
237
+ var renderCascadeColumn = function renderCascadeColumn(childNodes, column) {
238
+ var items = column.items,
239
+ parentItem = column.parentItem,
240
+ layer = column.layer;
241
+ if (typeof renderColumn === 'function') {
242
+ return renderColumn(childNodes, column);
243
+ } else if (typeof DEPRECATED_renderMenu === 'function') {
244
+ return DEPRECATED_renderMenu(items, childNodes, parentItem, layer);
313
245
  }
314
- nodes.push(_extends({}, item, (_extends2 = {}, _extends2[labelKey] = labelElements, _extends2)));
315
- var active = value.some(function (value) {
316
- if (cascade) {
317
- return nodes.some(function (node) {
318
- return node[valueKey] === value;
319
- });
320
- }
321
- return item[valueKey] === value;
322
- });
323
- var disabled = disabledItemValues.some(function (value) {
324
- return nodes.some(function (node) {
325
- return node[valueKey] === value;
326
- });
327
- });
328
- var itemClasses = prefix('cascader-row', {
329
- 'cascader-row-disabled': disabled,
330
- 'cascader-row-focus': item[valueKey] === focusItemValue
331
- });
332
- return /*#__PURE__*/React.createElement("div", {
333
- role: "treeitem",
334
- "aria-disabled": disabled,
335
- key: key,
336
- className: itemClasses,
337
- "data-key": item[valueKey]
338
- }, /*#__PURE__*/React.createElement(Checkbox, {
339
- disabled: disabled,
340
- checked: active,
341
- value: item[valueKey],
342
- indeterminate: cascade && !active && isSomeChildChecked(item, value, {
343
- valueKey: valueKey,
344
- childrenKey: childrenKey
345
- }),
346
- onChange: function onChange(_value, checked, event) {
347
- handleCheck(item, event, checked);
348
- }
349
- }, /*#__PURE__*/React.createElement("span", {
350
- className: prefix('cascader-cols')
351
- }, nodes.map(function (node, index) {
352
- return /*#__PURE__*/React.createElement("span", {
353
- key: "col-" + index,
354
- className: prefix('cascader-col')
355
- }, node[labelKey]);
356
- }))));
246
+ return childNodes;
357
247
  };
358
- var renderSearchResultPanel = function renderSearchResultPanel() {
359
- if (searchKeyword === '') {
360
- return null;
248
+ var renderCascadeTreeNode = function renderCascadeTreeNode(node, itemData) {
249
+ var render = typeof renderTreeNode === 'function' ? renderTreeNode : DEPRECATED_renderMenuItem;
250
+ if (typeof render === 'function') {
251
+ return render(node, itemData);
361
252
  }
362
- var items = getSearchResult();
363
- return /*#__PURE__*/React.createElement("div", {
364
- className: prefix('cascader-search-panel'),
365
- "data-layer": 0,
366
- role: "tree"
367
- }, items.length ? items.map(renderSearchRow) : /*#__PURE__*/React.createElement("div", {
368
- className: prefix('none')
369
- }, locale.noResultsText));
253
+ return node;
370
254
  };
371
255
  var renderTreeView = function renderTreeView(positionProps, speakerRef) {
372
256
  var _ref = positionProps || {},
373
257
  left = _ref.left,
374
258
  top = _ref.top,
375
259
  className = _ref.className;
376
- var styles = _extends({}, menuStyle, {
260
+ var styles = _extends({}, DEPRECATED_menuStyle, popupStyle, {
377
261
  left: left,
378
262
  top: top
379
263
  });
380
- var classes = merge(className, menuClassName, prefix('cascader-menu', 'multi-cascader-menu', {
381
- inline: inline
382
- }));
264
+ var classes = merge(className, DEPRECATED_menuClassName, popupClassName, prefix('popup-multi-cascader'));
383
265
  return /*#__PURE__*/React.createElement(PickerPopup, {
384
266
  ref: mergeRefs(overlay, speakerRef),
385
267
  className: classes,
386
268
  style: styles,
387
269
  target: trigger,
388
270
  onKeyDown: onPickerKeyDown
389
- }, searchable && /*#__PURE__*/React.createElement(SearchBox, {
390
- placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
391
- onChange: handleSearch,
392
- value: searchKeyword,
393
- inputRef: searchInput
394
- }), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/React.createElement(TreeView, {
271
+ }, searchable && /*#__PURE__*/React.createElement(SearchView, {
272
+ data: items,
273
+ value: value,
274
+ searchKeyword: searchKeyword,
275
+ valueKey: valueKey,
276
+ labelKey: labelKey,
277
+ childrenKey: childrenKey,
278
+ disabledItemValues: disabledItemValues,
279
+ onCheck: handleCheck,
280
+ onSearch: handleSearch
281
+ }), !searchKeyword && /*#__PURE__*/React.createElement(TreeView, {
395
282
  cascade: cascade,
396
- menuWidth: menuWidth,
397
- menuHeight: menuHeight,
283
+ columnWidth: columnWidth !== null && columnWidth !== void 0 ? columnWidth : DEPRECATED_menuWidth,
284
+ columnHeight: columnHeight !== null && columnHeight !== void 0 ? columnHeight : DEPRECATED_menuHeight,
285
+ classPrefix: "cascade-tree",
398
286
  uncheckableItemValues: uncheckableItemValues,
399
287
  disabledItemValues: disabledItemValues,
400
288
  valueKey: valueKey,
401
289
  labelKey: labelKey,
402
290
  childrenKey: childrenKey,
403
- classPrefix: 'picker-cascader-menu',
404
291
  cascadeData: columnData,
405
292
  cascadePaths: selectedPaths,
406
293
  value: value,
407
294
  onSelect: handleSelect,
408
295
  onCheck: handleCheck,
409
- renderMenu: renderMenu,
410
- renderMenuItem: renderMenuItem
296
+ renderColumn: renderCascadeColumn,
297
+ renderTreeNode: renderCascadeTreeNode
411
298
  }), renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
412
299
  };
413
300
  var selectedElement = placeholder;
@@ -423,6 +310,12 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
423
310
  locale: locale
424
311
  });
425
312
  }
313
+
314
+ /**
315
+ * 1.Have a value and the value is valid.
316
+ * 2.Regardless of whether the value is valid, as long as renderValue is set, it is judged to have a value.
317
+ */
318
+ var hasValue = selectedItems.length > 0 || Number(valueProp === null || valueProp === void 0 ? void 0 : valueProp.length) > 0 && isFunction(renderValue);
426
319
  if (hasValue && isFunction(renderValue)) {
427
320
  selectedElement = renderValue(value.length ? value : valueProp !== null && valueProp !== void 0 ? valueProp : [], selectedItems, selectedElement);
428
321
  // If renderValue returns null or undefined, hasValue is false.
@@ -440,9 +333,6 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
440
333
  })),
441
334
  classes = _usePickerClassName[0],
442
335
  usedClassNamePropKeys = _usePickerClassName[1];
443
- if (inline) {
444
- return renderTreeView();
445
- }
446
336
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
447
337
  id: id,
448
338
  popupType: "tree",
@@ -450,9 +340,8 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
450
340
  pickerProps: pick(props, pickTriggerPropKeys),
451
341
  ref: trigger,
452
342
  placement: placement,
453
- onEnter: createChainedFunction(handleEntered, onEnter),
454
- onExited: createChainedFunction(handleExited, onExited),
455
- onExit: createChainedFunction(onClose, onExit),
343
+ onEnter: handleEntered,
344
+ onExited: handleExited,
456
345
  speaker: renderTreeView
457
346
  }, /*#__PURE__*/React.createElement(Component, {
458
347
  className: classes,
@@ -479,16 +368,16 @@ MultiCascader.propTypes = _extends({}, listPickerPropTypes, {
479
368
  locale: PropTypes.any,
480
369
  appearance: oneOf(['default', 'subtle']),
481
370
  cascade: PropTypes.bool,
482
- inline: PropTypes.bool,
483
371
  countable: PropTypes.bool,
484
- menuWidth: PropTypes.number,
485
- menuHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
486
372
  uncheckableItemValues: PropTypes.array,
487
373
  searchable: PropTypes.bool,
488
- renderMenuItem: PropTypes.func,
489
- renderMenu: PropTypes.func,
490
374
  onSearch: PropTypes.func,
491
375
  onSelect: PropTypes.func,
492
- onCheck: PropTypes.func
376
+ onCheck: PropTypes.func,
377
+ inline: deprecatePropTypeNew(PropTypes.bool, 'Use `<MultiCascadeTree>` instead.'),
378
+ renderMenu: deprecatePropTypeNew(PropTypes.func, 'Use "renderColumn" property instead.'),
379
+ renderMenuItem: deprecatePropTypeNew(PropTypes.func, 'Use "renderTreeNode" property instead.'),
380
+ menuWidth: deprecatePropTypeNew(PropTypes.number, 'Use "columnWidth" property instead.'),
381
+ menuHeight: deprecatePropTypeNew(PropTypes.number, 'Use "columnHeight" property instead.')
493
382
  });
494
383
  export default MultiCascader;
@@ -77,11 +77,11 @@ export interface TreeBaseProps<ValueType = string | number, ItemDataType = Recor
77
77
  /** load node children data asynchronously */
78
78
  getChildren?: (activeNode: ItemDataType) => ItemDataType[] | Promise<ItemDataType>;
79
79
  }
80
- export interface TreeProps<ValueType = string | number> extends TreeBaseProps<ValueType, ItemDataType>, TreeDragProps<ItemDataType> {
80
+ export interface TreeProps<T = string | number> extends TreeBaseProps<T, ItemDataType<T>>, TreeDragProps<ItemDataType<T>> {
81
81
  /** Tree Data */
82
- data: ItemDataType[];
82
+ data: ItemDataType<T>[];
83
83
  /** Selected value */
84
- value?: ValueType;
84
+ value?: T;
85
85
  /** Whether using virtualized list */
86
86
  virtualized?: boolean;
87
87
  /** Tree data structure Label property name */
@@ -91,7 +91,7 @@ export interface TreeProps<ValueType = string | number> extends TreeBaseProps<Va
91
91
  /** Tree data structure Children property name */
92
92
  childrenKey?: string;
93
93
  /** Default selected Value */
94
- defaultValue?: ValueType;
94
+ defaultValue?: T;
95
95
  }
96
96
  /**
97
97
  * The `Tree` component is used to display hierarchical data.
package/esm/index.d.ts CHANGED
@@ -32,8 +32,9 @@ export { default as Avatar } from './Avatar';
32
32
  export type { AvatarProps } from './Avatar';
33
33
  export { default as AvatarGroup } from './AvatarGroup';
34
34
  export type { AvatarGroupProps } from './AvatarGroup';
35
- export { default as toaster, useToaster } from './toaster';
35
+ export { default as toaster } from './toaster';
36
36
  export type { Toaster } from './toaster';
37
+ export { default as useToaster } from './useToaster';
37
38
  export { default as Dropdown } from './Dropdown';
38
39
  export type { DropdownProps, DropdownMenuItemProps, DropdownMenuProps } from './Dropdown';
39
40
  export { default as Nav } from './Nav';
@@ -114,6 +115,10 @@ export { default as Tree } from './Tree';
114
115
  export type { TreeProps } from './Tree';
115
116
  export { default as CheckTree } from './CheckTree';
116
117
  export type { CheckTreeProps } from './CheckTree';
118
+ export { default as CascadeTree } from './CascadeTree';
119
+ export type { CascadeTreeProps } from './CascadeTree';
120
+ export { default as MultiCascadeTree } from './MultiCascadeTree';
121
+ export type { MultiCascadeTreeProps } from './MultiCascadeTree';
117
122
  export { default as Panel } from './Panel';
118
123
  export type { PanelProps } from './Panel';
119
124
  export { default as Accordion } from './Accordion';
package/esm/index.js CHANGED
@@ -17,7 +17,9 @@ export { default as Placeholder } from './Placeholder';
17
17
  export { default as Badge } from './Badge';
18
18
  export { default as Avatar } from './Avatar';
19
19
  export { default as AvatarGroup } from './AvatarGroup';
20
- export { default as toaster, useToaster } from './toaster';
20
+ export { default as toaster } from './toaster';
21
+ export { default as useToaster } from './useToaster';
22
+
21
23
  // Nav
22
24
  export { default as Dropdown } from './Dropdown';
23
25
  export { default as Nav } from './Nav';
@@ -61,6 +63,8 @@ export { default as InlineEdit } from './InlineEdit';
61
63
  // Data display
62
64
  export { default as Tree } from './Tree';
63
65
  export { default as CheckTree } from './CheckTree';
66
+ export { default as CascadeTree } from './CascadeTree';
67
+ export { default as MultiCascadeTree } from './MultiCascadeTree';
64
68
  export { default as Panel } from './Panel';
65
69
  export { default as Accordion } from './Accordion';
66
70
  export { default as PanelGroup } from './PanelGroup';