rsuite 5.56.0 → 5.58.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 (272) hide show
  1. package/Accordion/styles/index.css +30 -0
  2. package/AutoComplete/styles/index.css +0 -137
  3. package/CHANGELOG.md +32 -0
  4. package/CascadeTree/package.json +7 -0
  5. package/CascadeTree/styles/index.css +273 -0
  6. package/CascadeTree/styles/index.less +77 -0
  7. package/CascadeTree/styles/search.less +45 -0
  8. package/Cascader/styles/index.css +187 -329
  9. package/Cascader/styles/index.less +1 -122
  10. package/CheckPicker/styles/index.css +0 -137
  11. package/CheckTree/styles/index.css +0 -137
  12. package/CheckTreePicker/styles/index.css +0 -137
  13. package/DatePicker/styles/index.css +0 -137
  14. package/DateRangePicker/styles/index.css +0 -137
  15. package/Dropdown/styles/index.css +35 -8
  16. package/Dropdown/styles/index.less +24 -13
  17. package/Heading/package.json +7 -0
  18. package/Heading/styles/index.css +42 -0
  19. package/Heading/styles/index.less +41 -0
  20. package/HeadingGroup/package.json +7 -0
  21. package/HeadingGroup/styles/index.css +5 -0
  22. package/HeadingGroup/styles/index.less +3 -0
  23. package/InputPicker/styles/index.css +29 -146
  24. package/InputPicker/styles/index.less +28 -12
  25. package/InputPicker/styles/mixin.less +7 -0
  26. package/MultiCascadeTree/package.json +7 -0
  27. package/MultiCascadeTree/styles/index.css +3564 -0
  28. package/MultiCascadeTree/styles/index.less +37 -0
  29. package/MultiCascader/styles/index.css +72 -206
  30. package/MultiCascader/styles/index.less +11 -31
  31. package/Nav/styles/index.css +35 -8
  32. package/Navbar/styles/index.css +35 -8
  33. package/Pagination/styles/index.css +0 -137
  34. package/Panel/styles/index.css +30 -0
  35. package/Panel/styles/index.less +1 -0
  36. package/Popover/styles/index.css +30 -0
  37. package/Popover/styles/index.less +3 -2
  38. package/SelectPicker/styles/index.css +0 -137
  39. package/Tabs/styles/index.css +35 -8
  40. package/TagInput/styles/index.css +132 -150
  41. package/TagPicker/styles/index.css +132 -150
  42. package/TagPicker/styles/index.less +57 -5
  43. package/TagPicker/styles/mixin.less +21 -0
  44. package/Text/package.json +7 -0
  45. package/Text/styles/index.css +192 -0
  46. package/Text/styles/index.less +117 -0
  47. package/cjs/@types/common.d.ts +12 -14
  48. package/cjs/CascadeTree/CascadeTree.d.ts +16 -0
  49. package/cjs/CascadeTree/CascadeTree.js +174 -0
  50. package/cjs/CascadeTree/SearchView.d.ts +17 -0
  51. package/cjs/CascadeTree/SearchView.js +106 -0
  52. package/cjs/CascadeTree/TreeView.d.ts +20 -0
  53. package/cjs/{Cascader → CascadeTree}/TreeView.js +42 -33
  54. package/cjs/CascadeTree/hooks/index.d.ts +3 -0
  55. package/cjs/CascadeTree/hooks/index.js +12 -0
  56. package/cjs/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  57. package/cjs/CascadeTree/hooks/usePaths.js +42 -0
  58. package/cjs/CascadeTree/hooks/useSearch.d.ts +17 -0
  59. package/cjs/CascadeTree/hooks/useSearch.js +59 -0
  60. package/cjs/CascadeTree/hooks/useSelect.d.ts +23 -0
  61. package/cjs/CascadeTree/hooks/useSelect.js +64 -0
  62. package/cjs/CascadeTree/index.d.ts +4 -0
  63. package/cjs/CascadeTree/index.js +9 -0
  64. package/cjs/CascadeTree/types.d.ts +66 -0
  65. package/cjs/CascadeTree/types.js +2 -0
  66. package/cjs/CascadeTree/utils.d.ts +32 -0
  67. package/cjs/CascadeTree/utils.js +66 -0
  68. package/cjs/Cascader/Cascader.d.ts +57 -26
  69. package/cjs/Cascader/Cascader.js +178 -249
  70. package/cjs/Cascader/useActive.d.ts +15 -0
  71. package/cjs/Cascader/useActive.js +43 -0
  72. package/cjs/CheckPicker/CheckPicker.js +2 -9
  73. package/cjs/CheckTreePicker/CheckTreePicker.js +2 -10
  74. package/cjs/DatePicker/DatePicker.js +5 -5
  75. package/cjs/DateRangePicker/DateRangePicker.js +3 -5
  76. package/cjs/Dropdown/DropdownItem.d.ts +10 -2
  77. package/cjs/Dropdown/DropdownItem.js +12 -3
  78. package/cjs/Heading/Heading.d.ts +16 -0
  79. package/cjs/Heading/Heading.js +44 -0
  80. package/cjs/Heading/index.d.ts +3 -0
  81. package/cjs/Heading/index.js +10 -0
  82. package/cjs/HeadingGroup/HeadingGroup.d.ts +8 -0
  83. package/cjs/HeadingGroup/HeadingGroup.js +17 -0
  84. package/cjs/HeadingGroup/index.d.ts +3 -0
  85. package/cjs/HeadingGroup/index.js +9 -0
  86. package/cjs/InlineEdit/InlineEdit.d.ts +1 -1
  87. package/cjs/InputPicker/InputPicker.js +7 -8
  88. package/cjs/Loader/Loader.js +5 -4
  89. package/cjs/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  90. package/cjs/MultiCascadeTree/MultiCascadeTree.js +131 -0
  91. package/cjs/MultiCascadeTree/SearchView.d.ts +17 -0
  92. package/cjs/MultiCascadeTree/SearchView.js +117 -0
  93. package/cjs/MultiCascadeTree/TreeView.d.ts +22 -0
  94. package/cjs/{MultiCascader → MultiCascadeTree}/TreeView.js +20 -20
  95. package/cjs/MultiCascadeTree/hooks/index.d.ts +5 -0
  96. package/cjs/MultiCascadeTree/hooks/index.js +16 -0
  97. package/cjs/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  98. package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +202 -0
  99. package/cjs/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  100. package/cjs/MultiCascadeTree/hooks/useColumnData.js +52 -0
  101. package/cjs/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  102. package/cjs/MultiCascadeTree/hooks/useFlattenData.js +33 -0
  103. package/cjs/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  104. package/cjs/MultiCascadeTree/hooks/useSearch.js +52 -0
  105. package/cjs/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  106. package/cjs/MultiCascadeTree/hooks/useSelect.js +83 -0
  107. package/cjs/MultiCascadeTree/index.d.ts +4 -0
  108. package/cjs/MultiCascadeTree/index.js +9 -0
  109. package/cjs/MultiCascadeTree/types.d.ts +26 -0
  110. package/cjs/MultiCascadeTree/types.js +2 -0
  111. package/cjs/MultiCascadeTree/utils.d.ts +37 -0
  112. package/cjs/MultiCascadeTree/utils.js +140 -0
  113. package/cjs/MultiCascader/MultiCascader.d.ts +57 -29
  114. package/cjs/MultiCascader/MultiCascader.js +173 -289
  115. package/cjs/Panel/Panel.js +3 -1
  116. package/cjs/Popover/Popover.js +3 -1
  117. package/cjs/SelectPicker/SelectPicker.js +3 -9
  118. package/cjs/Text/Text.d.ts +47 -0
  119. package/cjs/Text/Text.js +72 -0
  120. package/cjs/Text/index.d.ts +3 -0
  121. package/cjs/Text/index.js +10 -0
  122. package/cjs/Tree/Tree.d.ts +4 -4
  123. package/cjs/TreePicker/TreePicker.js +3 -10
  124. package/cjs/index.d.ts +27 -16
  125. package/cjs/index.js +30 -19
  126. package/cjs/internals/Overlay/OverlayTrigger.js +24 -17
  127. package/cjs/internals/Picker/PickerToggle.d.ts +4 -5
  128. package/cjs/internals/Picker/PickerToggleTrigger.d.ts +1 -1
  129. package/cjs/internals/Picker/PickerToggleTrigger.js +1 -1
  130. package/cjs/internals/Picker/hooks/useToggleKeyDownEvent.d.ts +0 -2
  131. package/cjs/internals/Picker/hooks/useToggleKeyDownEvent.js +0 -4
  132. package/cjs/toaster/ToastContainer.d.ts +9 -2
  133. package/cjs/toaster/index.d.ts +0 -1
  134. package/cjs/toaster/index.js +1 -3
  135. package/cjs/useToaster/index.d.ts +2 -0
  136. package/cjs/useToaster/index.js +9 -0
  137. package/cjs/{toaster → useToaster}/useToaster.d.ts +4 -4
  138. package/cjs/{toaster → useToaster}/useToaster.js +4 -4
  139. package/cjs/utils/index.d.ts +1 -0
  140. package/cjs/utils/index.js +5 -2
  141. package/dist/rsuite-no-reset-rtl.css +393 -219
  142. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  143. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  144. package/dist/rsuite-no-reset.css +393 -219
  145. package/dist/rsuite-no-reset.min.css +1 -1
  146. package/dist/rsuite-no-reset.min.css.map +1 -1
  147. package/dist/rsuite-rtl.css +393 -219
  148. package/dist/rsuite-rtl.min.css +1 -1
  149. package/dist/rsuite-rtl.min.css.map +1 -1
  150. package/dist/rsuite.css +393 -219
  151. package/dist/rsuite.js +321 -57
  152. package/dist/rsuite.js.map +1 -1
  153. package/dist/rsuite.min.css +1 -1
  154. package/dist/rsuite.min.css.map +1 -1
  155. package/dist/rsuite.min.js +1 -1
  156. package/dist/rsuite.min.js.map +1 -1
  157. package/esm/@types/common.d.ts +12 -14
  158. package/esm/CascadeTree/CascadeTree.d.ts +16 -0
  159. package/esm/CascadeTree/CascadeTree.js +167 -0
  160. package/esm/CascadeTree/SearchView.d.ts +17 -0
  161. package/esm/CascadeTree/SearchView.js +100 -0
  162. package/esm/CascadeTree/TreeView.d.ts +20 -0
  163. package/esm/{Cascader → CascadeTree}/TreeView.js +42 -33
  164. package/esm/CascadeTree/hooks/index.d.ts +3 -0
  165. package/esm/CascadeTree/hooks/index.js +4 -0
  166. package/esm/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  167. package/esm/CascadeTree/hooks/usePaths.js +36 -0
  168. package/esm/CascadeTree/hooks/useSearch.d.ts +17 -0
  169. package/esm/CascadeTree/hooks/useSearch.js +54 -0
  170. package/esm/CascadeTree/hooks/useSelect.d.ts +23 -0
  171. package/esm/CascadeTree/hooks/useSelect.js +59 -0
  172. package/esm/CascadeTree/index.d.ts +4 -0
  173. package/esm/CascadeTree/index.js +3 -0
  174. package/esm/CascadeTree/types.d.ts +66 -0
  175. package/esm/CascadeTree/types.js +1 -0
  176. package/esm/CascadeTree/utils.d.ts +32 -0
  177. package/esm/CascadeTree/utils.js +61 -0
  178. package/esm/Cascader/Cascader.d.ts +57 -26
  179. package/esm/Cascader/Cascader.js +165 -235
  180. package/esm/Cascader/useActive.d.ts +15 -0
  181. package/esm/Cascader/useActive.js +37 -0
  182. package/esm/CheckPicker/CheckPicker.js +2 -9
  183. package/esm/CheckTreePicker/CheckTreePicker.js +2 -10
  184. package/esm/DatePicker/DatePicker.js +6 -6
  185. package/esm/DateRangePicker/DateRangePicker.js +3 -5
  186. package/esm/Dropdown/DropdownItem.d.ts +10 -2
  187. package/esm/Dropdown/DropdownItem.js +12 -3
  188. package/esm/Heading/Heading.d.ts +16 -0
  189. package/esm/Heading/Heading.js +38 -0
  190. package/esm/Heading/index.d.ts +3 -0
  191. package/esm/Heading/index.js +4 -0
  192. package/esm/HeadingGroup/HeadingGroup.d.ts +8 -0
  193. package/esm/HeadingGroup/HeadingGroup.js +11 -0
  194. package/esm/HeadingGroup/index.d.ts +3 -0
  195. package/esm/HeadingGroup/index.js +3 -0
  196. package/esm/InlineEdit/InlineEdit.d.ts +1 -1
  197. package/esm/InputPicker/InputPicker.js +7 -8
  198. package/esm/Loader/Loader.js +6 -5
  199. package/esm/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  200. package/esm/MultiCascadeTree/MultiCascadeTree.js +125 -0
  201. package/esm/MultiCascadeTree/SearchView.d.ts +17 -0
  202. package/esm/MultiCascadeTree/SearchView.js +111 -0
  203. package/esm/MultiCascadeTree/TreeView.d.ts +22 -0
  204. package/esm/{MultiCascader → MultiCascadeTree}/TreeView.js +20 -20
  205. package/esm/MultiCascadeTree/hooks/index.d.ts +5 -0
  206. package/esm/MultiCascadeTree/hooks/index.js +6 -0
  207. package/esm/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  208. package/esm/MultiCascadeTree/hooks/useCascadeValue.js +197 -0
  209. package/esm/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  210. package/esm/MultiCascadeTree/hooks/useColumnData.js +46 -0
  211. package/esm/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  212. package/esm/MultiCascadeTree/hooks/useFlattenData.js +28 -0
  213. package/esm/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  214. package/esm/MultiCascadeTree/hooks/useSearch.js +47 -0
  215. package/esm/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  216. package/esm/MultiCascadeTree/hooks/useSelect.js +77 -0
  217. package/esm/MultiCascadeTree/index.d.ts +4 -0
  218. package/esm/MultiCascadeTree/index.js +3 -0
  219. package/esm/MultiCascadeTree/types.d.ts +26 -0
  220. package/esm/MultiCascadeTree/types.js +1 -0
  221. package/esm/MultiCascadeTree/utils.d.ts +37 -0
  222. package/esm/MultiCascadeTree/utils.js +130 -0
  223. package/esm/MultiCascader/MultiCascader.d.ts +57 -29
  224. package/esm/MultiCascader/MultiCascader.js +166 -281
  225. package/esm/Panel/Panel.js +3 -1
  226. package/esm/Popover/Popover.js +3 -1
  227. package/esm/SelectPicker/SelectPicker.js +3 -9
  228. package/esm/Text/Text.d.ts +47 -0
  229. package/esm/Text/Text.js +66 -0
  230. package/esm/Text/index.d.ts +3 -0
  231. package/esm/Text/index.js +4 -0
  232. package/esm/Tree/Tree.d.ts +4 -4
  233. package/esm/TreePicker/TreePicker.js +3 -10
  234. package/esm/index.d.ts +27 -16
  235. package/esm/index.js +38 -15
  236. package/esm/internals/Overlay/OverlayTrigger.js +24 -17
  237. package/esm/internals/Picker/PickerToggle.d.ts +4 -5
  238. package/esm/internals/Picker/PickerToggleTrigger.d.ts +1 -1
  239. package/esm/internals/Picker/PickerToggleTrigger.js +1 -1
  240. package/esm/internals/Picker/hooks/useToggleKeyDownEvent.d.ts +0 -2
  241. package/esm/internals/Picker/hooks/useToggleKeyDownEvent.js +0 -4
  242. package/esm/toaster/ToastContainer.d.ts +9 -2
  243. package/esm/toaster/index.d.ts +0 -1
  244. package/esm/toaster/index.js +0 -1
  245. package/esm/useToaster/index.d.ts +2 -0
  246. package/esm/useToaster/index.js +3 -0
  247. package/esm/{toaster → useToaster}/useToaster.d.ts +4 -4
  248. package/esm/{toaster → useToaster}/useToaster.js +4 -4
  249. package/esm/utils/index.d.ts +1 -0
  250. package/esm/utils/index.js +2 -1
  251. package/internals/Picker/styles/index.less +0 -5
  252. package/internals/Picker/styles/mixin.less +0 -73
  253. package/package.json +1 -1
  254. package/styles/color-modes/light.less +7 -0
  255. package/styles/index.less +5 -0
  256. package/useToaster/package.json +7 -0
  257. package/useToaster/styles/index.css +239 -0
  258. package/useToaster/styles/index.less +1 -0
  259. package/cjs/Cascader/DropdownMenu.d.ts +0 -24
  260. package/cjs/Cascader/DropdownMenu.js +0 -175
  261. package/cjs/Cascader/TreeView.d.ts +0 -24
  262. package/cjs/Cascader/utils.js +0 -79
  263. package/cjs/MultiCascader/TreeView.d.ts +0 -25
  264. package/cjs/MultiCascader/utils.d.ts +0 -71
  265. package/cjs/MultiCascader/utils.js +0 -382
  266. package/esm/Cascader/DropdownMenu.d.ts +0 -24
  267. package/esm/Cascader/DropdownMenu.js +0 -168
  268. package/esm/Cascader/TreeView.d.ts +0 -24
  269. package/esm/Cascader/utils.js +0 -74
  270. package/esm/MultiCascader/TreeView.d.ts +0 -25
  271. package/esm/MultiCascader/utils.d.ts +0 -71
  272. package/esm/MultiCascader/utils.js +0 -369
@@ -0,0 +1,111 @@
1
+ 'use client';
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
+ import React from 'react';
5
+ import { useClassNames, useCustom } from '../utils';
6
+ import { getNodeParents } from '../utils/treeUtils';
7
+ import SearchBox from '../internals/SearchBox';
8
+ import Checkbox from '../Checkbox';
9
+ import { isSomeChildChecked } from './utils';
10
+ import { highlightLabel } from '../CascadeTree/utils';
11
+ function SearchView(props) {
12
+ var _props$as = props.as,
13
+ Component = _props$as === void 0 ? 'div' : _props$as,
14
+ _props$classPrefix = props.classPrefix,
15
+ classPrefix = _props$classPrefix === void 0 ? 'cascade-search-view' : _props$classPrefix,
16
+ className = props.className,
17
+ searchKeyword = props.searchKeyword,
18
+ childrenKey = props.childrenKey,
19
+ labelKey = props.labelKey,
20
+ valueKey = props.valueKey,
21
+ value = props.value,
22
+ data = props.data,
23
+ disabledItemValues = props.disabledItemValues,
24
+ inputRef = props.inputRef,
25
+ cascade = props.cascade,
26
+ onSearch = props.onSearch,
27
+ onCheck = props.onCheck,
28
+ rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "searchKeyword", "childrenKey", "labelKey", "valueKey", "value", "data", "disabledItemValues", "inputRef", "cascade", "onSearch", "onCheck"]);
29
+ var _useClassNames = useClassNames(classPrefix),
30
+ merge = _useClassNames.merge,
31
+ prefix = _useClassNames.prefix,
32
+ withClassPrefix = _useClassNames.withClassPrefix,
33
+ rootPrefix = _useClassNames.rootPrefix;
34
+ var classes = merge(className, withClassPrefix());
35
+ var _useCustom = useCustom('Picker'),
36
+ locale = _useCustom.locale;
37
+ var renderSearchRow = function renderSearchRow(item, key) {
38
+ var _extends2;
39
+ var nodes = getNodeParents(item);
40
+ var label = highlightLabel({
41
+ item: item,
42
+ labelKey: labelKey,
43
+ searchKeyword: searchKeyword,
44
+ render: function render(patch, index) {
45
+ return /*#__PURE__*/React.createElement("span", {
46
+ key: index,
47
+ className: prefix('match')
48
+ }, patch);
49
+ }
50
+ });
51
+ nodes.push(_extends({}, item, (_extends2 = {}, _extends2[labelKey] = label, _extends2)));
52
+ var active = value.some(function (value) {
53
+ if (cascade) {
54
+ return nodes.some(function (node) {
55
+ return node[valueKey] === value;
56
+ });
57
+ }
58
+ return item[valueKey] === value;
59
+ });
60
+ var disabled = disabledItemValues.some(function (value) {
61
+ return nodes.some(function (node) {
62
+ return node[valueKey] === value;
63
+ });
64
+ });
65
+ var rowClasses = prefix('row', {
66
+ 'row-disabled': disabled
67
+ });
68
+ var indeterminate = cascade && !active && isSomeChildChecked(item, value, {
69
+ valueKey: valueKey,
70
+ childrenKey: childrenKey
71
+ });
72
+ var handleChange = function handleChange(_value, checked, event) {
73
+ onCheck === null || onCheck === void 0 ? void 0 : onCheck(item, event, checked);
74
+ };
75
+ return /*#__PURE__*/React.createElement("div", {
76
+ role: "treeitem",
77
+ "aria-disabled": disabled,
78
+ key: key,
79
+ className: rowClasses,
80
+ "data-key": item[valueKey]
81
+ }, /*#__PURE__*/React.createElement(Checkbox, {
82
+ disabled: disabled,
83
+ checked: active,
84
+ value: item[valueKey],
85
+ indeterminate: indeterminate,
86
+ onChange: handleChange
87
+ }, /*#__PURE__*/React.createElement("span", {
88
+ className: prefix('col-group')
89
+ }, nodes.map(function (node, index) {
90
+ return /*#__PURE__*/React.createElement("span", {
91
+ key: "col-" + index,
92
+ className: prefix('col')
93
+ }, node[labelKey]);
94
+ }))));
95
+ };
96
+ return /*#__PURE__*/React.createElement(Component, _extends({
97
+ className: classes
98
+ }, rest), /*#__PURE__*/React.createElement(SearchBox, {
99
+ placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
100
+ onChange: onSearch,
101
+ value: searchKeyword,
102
+ inputRef: inputRef
103
+ }), searchKeyword !== '' && /*#__PURE__*/React.createElement("div", {
104
+ className: prefix('panel'),
105
+ "data-layer": 0,
106
+ role: "tree"
107
+ }, data.length ? data.map(renderSearchRow) : /*#__PURE__*/React.createElement("div", {
108
+ className: merge(prefix('none'), rootPrefix('picker-none'))
109
+ }, locale.noResultsText)));
110
+ }
111
+ export default SearchView;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { ItemDataType, WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
+ import type { CascadeColumn } from '../CascadeTree/types';
4
+ export interface TreeViewProps<T = any> extends WithAsProps {
5
+ disabledItemValues?: T[];
6
+ value: T[];
7
+ childrenKey: string;
8
+ valueKey: string;
9
+ labelKey: string;
10
+ columnWidth?: number;
11
+ columnHeight?: number | string;
12
+ cascade?: boolean;
13
+ cascadeData: (readonly ItemDataType<T>[])[];
14
+ cascadePaths?: ItemDataType<T>[];
15
+ uncheckableItemValues: T[];
16
+ renderTreeNode?: (node: React.ReactNode, item: ItemDataType<T>) => React.ReactNode;
17
+ renderColumn?: (childNodes: React.ReactNode, column: CascadeColumn<T>) => React.ReactNode;
18
+ onCheck?: (node: ItemDataType<T>, event: React.SyntheticEvent, checked: boolean) => void;
19
+ onSelect?: (node: ItemDataType<T>, cascadePaths: ItemDataType<T>[], event: React.SyntheticEvent) => void;
20
+ }
21
+ declare const TreeView: RsRefForwardingComponent<'div', TreeViewProps>;
22
+ export default TreeView;
@@ -9,15 +9,11 @@ import { useClassNames, shallowEqual, useCustom, useEventCallback } from '../uti
9
9
  import { ListCheckItem, useCombobox } from '../internals/Picker';
10
10
  import { isSomeParentChecked, isSomeChildChecked } from './utils';
11
11
  var emptyArray = [];
12
-
13
- /**
14
- * TODO: reuse Menu from Cascader for consistent behavior
15
- */
16
12
  var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
17
13
  var _props$as = props.as,
18
14
  Component = _props$as === void 0 ? 'div' : _props$as,
19
15
  _props$classPrefix = props.classPrefix,
20
- classPrefix = _props$classPrefix === void 0 ? 'menu' : _props$classPrefix,
16
+ classPrefix = _props$classPrefix === void 0 ? 'tree' : _props$classPrefix,
21
17
  className = props.className,
22
18
  cascade = props.cascade,
23
19
  _props$cascadeData = props.cascadeData,
@@ -28,10 +24,10 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
28
24
  childrenKey = _props$childrenKey === void 0 ? 'children' : _props$childrenKey,
29
25
  _props$disabledItemVa = props.disabledItemValues,
30
26
  disabledItemValues = _props$disabledItemVa === void 0 ? emptyArray : _props$disabledItemVa,
31
- _props$menuWidth = props.menuWidth,
32
- menuWidth = _props$menuWidth === void 0 ? 156 : _props$menuWidth,
33
- _props$menuHeight = props.menuHeight,
34
- menuHeight = _props$menuHeight === void 0 ? 200 : _props$menuHeight,
27
+ _props$columnWidth = props.columnWidth,
28
+ columnWidth = _props$columnWidth === void 0 ? 156 : _props$columnWidth,
29
+ _props$columnHeight = props.columnHeight,
30
+ columnHeight = _props$columnHeight === void 0 ? 200 : _props$columnHeight,
35
31
  _props$uncheckableIte = props.uncheckableItemValues,
36
32
  uncheckableItemValues = _props$uncheckableIte === void 0 ? emptyArray : _props$uncheckableIte,
37
33
  value = props.value,
@@ -40,11 +36,11 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
40
36
  _props$labelKey = props.labelKey,
41
37
  labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
42
38
  style = props.style,
43
- renderMenuItem = props.renderMenuItem,
44
- renderMenu = props.renderMenu,
39
+ renderTreeNode = props.renderTreeNode,
40
+ renderColumn = props.renderColumn,
45
41
  _onCheck = props.onCheck,
46
42
  onSelect = props.onSelect,
47
- rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "cascade", "cascadeData", "cascadePaths", "childrenKey", "disabledItemValues", "menuWidth", "menuHeight", "uncheckableItemValues", "value", "valueKey", "labelKey", "style", "renderMenuItem", "renderMenu", "onCheck", "onSelect"]);
43
+ rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "cascade", "cascadeData", "cascadePaths", "childrenKey", "disabledItemValues", "columnWidth", "columnHeight", "uncheckableItemValues", "value", "valueKey", "labelKey", "style", "renderTreeNode", "renderColumn", "onCheck", "onSelect"]);
48
44
  var _useClassNames = useClassNames(classPrefix),
49
45
  merge = _useClassNames.merge,
50
46
  prefix = _useClassNames.prefix;
@@ -122,19 +118,19 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
122
118
  },
123
119
  checkable: !uncheckable,
124
120
  labelClickable: false
125
- }, renderMenuItem ? renderMenuItem(label, node) : label, children ? /*#__PURE__*/React.createElement(Icon, {
121
+ }, renderTreeNode ? renderTreeNode(label, node) : label, children ? /*#__PURE__*/React.createElement(Icon, {
126
122
  className: prefix('caret'),
127
123
  spin: node.loading
128
124
  }) : null);
129
125
  };
130
126
  var columnStyles = {
131
- height: menuHeight,
132
- width: menuWidth
127
+ height: columnHeight,
128
+ width: columnWidth
133
129
  };
134
130
  var cascadeNodes = cascadeData.map(function (children, layer) {
135
131
  var uncheckableCount = 0;
136
132
  var onlyKey = layer + "_" + children.length;
137
- var menu = /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (item, index) {
133
+ var childNodes = /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (item, index) {
138
134
  var uncheckable = uncheckableItemValues.some(function (uncheckableValue) {
139
135
  return shallowEqual(uncheckableValue, item[valueKey]);
140
136
  });
@@ -151,7 +147,7 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
151
147
  size: children.length
152
148
  });
153
149
  }));
154
- var parentNode = cascadePaths[layer - 1];
150
+ var parentItem = cascadePaths[layer - 1];
155
151
  var columnClasses = prefix('column', {
156
152
  'column-uncheckable': uncheckableCount === children.length
157
153
  });
@@ -161,14 +157,18 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
161
157
  className: columnClasses,
162
158
  "data-layer": layer,
163
159
  style: columnStyles
164
- }, renderMenu ? renderMenu(children, menu, parentNode, layer) : menu);
160
+ }, renderColumn ? renderColumn(childNodes, {
161
+ items: children,
162
+ parentItem: parentItem,
163
+ layer: layer
164
+ }) : childNodes);
165
165
  });
166
166
  var styles = _extends({}, style, {
167
- width: cascadeData.length * menuWidth
167
+ width: cascadeData.length * columnWidth
168
168
  });
169
169
  return /*#__PURE__*/React.createElement(Component, _extends({
170
170
  role: "tree",
171
- id: id + "-" + popupType,
171
+ id: id ? id + "-" + popupType : undefined,
172
172
  "aria-labelledby": labelId,
173
173
  "aria-multiselectable": multiple
174
174
  }, rest, {
@@ -0,0 +1,5 @@
1
+ export { default as useFlattenData } from './useFlattenData';
2
+ export { default as useSelect } from './useSelect';
3
+ export { default as useColumnData } from './useColumnData';
4
+ export { default as useCascadeValue } from './useCascadeValue';
5
+ export { default as useSearch } from './useSearch';
@@ -0,0 +1,6 @@
1
+ 'use client';
2
+ export { default as useFlattenData } from './useFlattenData';
3
+ export { default as useSelect } from './useSelect';
4
+ export { default as useColumnData } from './useColumnData';
5
+ export { default as useCascadeValue } from './useCascadeValue';
6
+ export { default as useSearch } from './useSearch';
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import { MultiCascadeTreeProps, ItemKeys } from '../types';
3
+ import { type ItemType } from '../utils';
4
+ /**
5
+ * A hook that converts the value into a cascading value
6
+ * @param props
7
+ * @param flattenData
8
+ */
9
+ declare function useCascadeValue<T>(props: Partial<MultiCascadeTreeProps<T>> & ItemKeys, flattenData: ItemType<T>[]): {
10
+ value: T[];
11
+ setValue: import("react").Dispatch<import("react").SetStateAction<T[]>>;
12
+ splitValue: (item: ItemType<T>, checked: boolean, value: T[]) => {
13
+ value: T[];
14
+ removedValue: T[];
15
+ };
16
+ handleCheck: (...args: any[]) => any;
17
+ };
18
+ export default useCascadeValue;
@@ -0,0 +1,197 @@
1
+ 'use client';
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ import uniq from 'lodash/uniq';
4
+ import remove from 'lodash/remove';
5
+ import { useEventCallback } from '../../utils';
6
+ import { getParents, removeAllChildrenValue, getOtherItemValuesByUnselectChild } from '../utils';
7
+
8
+ /**
9
+ * A hook that converts the value into a cascading value
10
+ * @param props
11
+ * @param flattenData
12
+ */
13
+ function useCascadeValue(props, flattenData) {
14
+ var valueKey = props.valueKey,
15
+ childrenKey = props.childrenKey,
16
+ uncheckableItemValues = props.uncheckableItemValues,
17
+ cascade = props.cascade,
18
+ valueProp = props.value,
19
+ onChange = props.onChange,
20
+ onCheck = props.onCheck;
21
+ /**
22
+ * Get the values of all children
23
+ */
24
+ var getChildrenValue = useCallback(function (item) {
25
+ var values = [];
26
+ if (!item[childrenKey]) {
27
+ return values;
28
+ }
29
+ item[childrenKey].forEach(function (n) {
30
+ if (uncheckableItemValues && !uncheckableItemValues.some(function (v) {
31
+ return v === n[valueKey];
32
+ })) {
33
+ values.push(n[valueKey]);
34
+ }
35
+ values = values.concat(getChildrenValue(n));
36
+ });
37
+ return values;
38
+ }, [childrenKey, uncheckableItemValues, valueKey]);
39
+ var splitValue = useCallback(function (item, checked, value) {
40
+ var itemValue = item[valueKey];
41
+ var childrenValue = getChildrenValue(item);
42
+ var parents = getParents(item);
43
+ var nextValue = [].concat(value);
44
+ var removedValue = [];
45
+ if (checked) {
46
+ nextValue.push(itemValue);
47
+
48
+ // Delete all values under the current node
49
+ removedValue = removedValue.concat(removeAllChildrenValue(nextValue, item, {
50
+ valueKey: valueKey,
51
+ childrenKey: childrenKey
52
+ }) || []);
53
+
54
+ // Traverse all ancestor nodes of the current node
55
+ // Then determine whether all the child nodes of these nodes are selected, and then they themselves must be selected
56
+ var _loop = function _loop(i) {
57
+ // Whether the parent node can be selected
58
+ var isCheckableParent = !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
59
+ return v === parents[i][valueKey];
60
+ }));
61
+ if (isCheckableParent) {
62
+ var isCheckAll = parents[i][childrenKey]
63
+ // Filter out options that are marked as not selectable
64
+ .filter(function (n) {
65
+ return !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
66
+ return v === n[valueKey];
67
+ }));
68
+ })
69
+ // Check if all nodes are selected
70
+ .every(function (n) {
71
+ return nextValue.some(function (v) {
72
+ return v === n[valueKey];
73
+ });
74
+ });
75
+ if (isCheckAll) {
76
+ // Add parent node value
77
+ nextValue.push(parents[i][valueKey]);
78
+
79
+ // Delete all values under the parent node
80
+ removedValue = removedValue.concat(removeAllChildrenValue(nextValue, parents[i], {
81
+ valueKey: valueKey,
82
+ childrenKey: childrenKey
83
+ }) || []);
84
+ }
85
+ }
86
+ };
87
+ for (var i = 0; i < parents.length; i++) {
88
+ _loop(i);
89
+ }
90
+ } else {
91
+ var tempValue = childrenValue.concat(parents.map(function (item) {
92
+ return item[valueKey];
93
+ }));
94
+ nextValue = nextValue.concat(getOtherItemValuesByUnselectChild(item, nextValue, {
95
+ valueKey: valueKey,
96
+ childrenKey: childrenKey
97
+ }));
98
+
99
+ // Delete related child and parent nodes
100
+ removedValue = remove(nextValue, function (v) {
101
+ // Delete yourself
102
+ if (v === itemValue) {
103
+ return true;
104
+ }
105
+ return tempValue.some(function (n) {
106
+ return n === v;
107
+ });
108
+ });
109
+ }
110
+ var uniqValue = uniq(nextValue);
111
+ var uniqRemovedValue = uniq(removedValue);
112
+ return {
113
+ value: uniqValue,
114
+ removedValue: uniqRemovedValue
115
+ };
116
+ }, [valueKey, childrenKey, uncheckableItemValues, getChildrenValue]);
117
+ var transformValue = useCallback(function (value) {
118
+ if (value === void 0) {
119
+ value = [];
120
+ }
121
+ if (!cascade) {
122
+ return value;
123
+ }
124
+ var tempRemovedValue = [];
125
+ var nextValue = [];
126
+ var _loop2 = function _loop2(i) {
127
+ // If the value in the current value is already in the deleted list, it will not be processed
128
+ if (tempRemovedValue.some(function (v) {
129
+ return v === value[i];
130
+ })) {
131
+ return "continue";
132
+ }
133
+ var item = flattenData.find(function (v) {
134
+ return v[valueKey] === value[i];
135
+ });
136
+ if (!item) {
137
+ return "continue";
138
+ }
139
+ var sv = splitValue(item, true, value);
140
+ tempRemovedValue = uniq(tempRemovedValue.concat(sv.removedValue));
141
+
142
+ // Get all relevant values
143
+ nextValue = uniq(nextValue.concat(sv.value));
144
+ };
145
+ for (var i = 0; i < value.length; i++) {
146
+ var _ret = _loop2(i);
147
+ if (_ret === "continue") continue;
148
+ }
149
+
150
+ // Finally traverse all nextValue, and delete if its parent node is also nextValue
151
+ return nextValue.filter(function (v) {
152
+ var item = flattenData.find(function (n) {
153
+ return n[valueKey] === v;
154
+ });
155
+ if (item !== null && item !== void 0 && item.parent && nextValue.some(function (v) {
156
+ var _item$parent;
157
+ return v === ((_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[valueKey]);
158
+ })) {
159
+ return false;
160
+ }
161
+ return true;
162
+ });
163
+ }, [cascade, flattenData, splitValue, valueKey]);
164
+ var _useState = useState(transformValue(valueProp) || []),
165
+ value = _useState[0],
166
+ setValue = _useState[1];
167
+ useEffect(function () {
168
+ // Update value when valueProp is updated.
169
+ setValue(transformValue(valueProp) || []);
170
+ }, [transformValue, valueProp]);
171
+ var handleCheck = useEventCallback(function (node, event, checked) {
172
+ var nodeValue = node[valueKey];
173
+ var nextValue = [];
174
+ if (cascade) {
175
+ nextValue = splitValue(node, checked, value).value;
176
+ } else {
177
+ nextValue = [].concat(value);
178
+ if (checked) {
179
+ nextValue.push(nodeValue);
180
+ } else {
181
+ nextValue = nextValue.filter(function (n) {
182
+ return n !== nodeValue;
183
+ });
184
+ }
185
+ }
186
+ setValue(nextValue);
187
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
188
+ onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
189
+ });
190
+ return {
191
+ value: value,
192
+ setValue: setValue,
193
+ splitValue: splitValue,
194
+ handleCheck: handleCheck
195
+ };
196
+ }
197
+ export default useCascadeValue;
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ declare type MayHasParent<T extends Record<string, unknown>> = T & {
3
+ parent?: MayHasParent<T>;
4
+ };
5
+ /**
6
+ * A hook for column data
7
+ * @param flattenData
8
+ */
9
+ declare function useColumnData<T extends MayHasParent<Record<string, unknown>>>(flattenData: T[]): {
10
+ columnData: (readonly T[])[];
11
+ addColumn: (column: T[], index: number) => void;
12
+ removeColumnByIndex: (index: number) => void;
13
+ setColumnData: import("react").Dispatch<import("react").SetStateAction<(readonly T[])[]>>;
14
+ enforceUpdateColumnData: (nextData: T[]) => void;
15
+ };
16
+ export default useColumnData;
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ import { useState } from 'react';
3
+ import slice from 'lodash/slice';
4
+ import { UNSAFE_flattenTree } from '../../utils/treeUtils';
5
+ /**
6
+ * A hook for column data
7
+ * @param flattenData
8
+ */
9
+ function useColumnData(flattenData) {
10
+ // The columns displayed in the cascading panel.
11
+ var _useState = useState([flattenData.filter(function (item) {
12
+ return !item.parent;
13
+ })]),
14
+ columnData = _useState[0],
15
+ setColumnData = _useState[1];
16
+ /**
17
+ * Add a list of options to the cascading panel. Used for lazy loading options.
18
+ * @param column
19
+ * @param index The index of the current column.
20
+ */
21
+ function addColumn(column, index) {
22
+ setColumnData([].concat(slice(columnData, 0, index), [column]));
23
+ }
24
+
25
+ /**
26
+ * Remove subsequent columns of the specified column
27
+ * @param index
28
+ */
29
+ function removeColumnByIndex(index) {
30
+ setColumnData([].concat(slice(columnData, 0, index)));
31
+ }
32
+ function enforceUpdateColumnData(nextData) {
33
+ var nextFlattenData = UNSAFE_flattenTree(nextData);
34
+ setColumnData([nextFlattenData.filter(function (item) {
35
+ return !item.parent;
36
+ })]);
37
+ }
38
+ return {
39
+ columnData: columnData,
40
+ addColumn: addColumn,
41
+ removeColumnByIndex: removeColumnByIndex,
42
+ setColumnData: setColumnData,
43
+ enforceUpdateColumnData: enforceUpdateColumnData
44
+ };
45
+ }
46
+ export default useColumnData;
@@ -0,0 +1,9 @@
1
+ import { ItemKeys } from '../types';
2
+ /**
3
+ * A hook to flatten tree structure data
4
+ */
5
+ declare function useFlattenData<T>(data: T[], itemKeys: ItemKeys): {
6
+ addFlattenData: (children: T[], parent: T) => void;
7
+ flattenData: T[];
8
+ };
9
+ export default useFlattenData;
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import { UNSAFE_flattenTree } from '../../utils/treeUtils';
4
+ import { attachParent } from '../../utils/attachParent';
5
+ /**
6
+ * A hook to flatten tree structure data
7
+ */
8
+ function useFlattenData(data, itemKeys) {
9
+ var childrenKey = itemKeys.childrenKey;
10
+ var _useState = useState(UNSAFE_flattenTree(data, itemKeys.childrenKey)),
11
+ flattenData = _useState[0],
12
+ setFlattenData = _useState[1];
13
+ var addFlattenData = useCallback(function (children, parent) {
14
+ var nodes = children.map(function (child) {
15
+ return attachParent(child, parent);
16
+ });
17
+ parent[childrenKey] = nodes;
18
+ setFlattenData([].concat(flattenData, nodes));
19
+ }, [childrenKey, flattenData]);
20
+ useEffect(function () {
21
+ setFlattenData(UNSAFE_flattenTree(data, itemKeys.childrenKey));
22
+ }, [data, itemKeys.childrenKey]);
23
+ return {
24
+ addFlattenData: addFlattenData,
25
+ flattenData: flattenData
26
+ };
27
+ }
28
+ export default useFlattenData;
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import { ItemDataType } from '../../@types/common';
3
+ interface SearchPanelProps<T> {
4
+ labelKey: string;
5
+ valueKey: string;
6
+ childrenKey: string;
7
+ flattenedData: ItemDataType<T>[];
8
+ uncheckableItemValues?: any[];
9
+ onSearch?: (value: string, event: React.SyntheticEvent) => void;
10
+ }
11
+ declare function useSearch<T>(props: SearchPanelProps<T>): {
12
+ searchKeyword: string;
13
+ setSearchKeyword: import("react").Dispatch<import("react").SetStateAction<string>>;
14
+ items: ItemDataType<T>[];
15
+ handleSearch: (...args: any[]) => any;
16
+ };
17
+ export default useSearch;
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ import { useState } from 'react';
3
+ import { getSafeRegExpString, useEventCallback } from '../../utils';
4
+ function useSearch(props) {
5
+ var _useState = useState(''),
6
+ searchKeyword = _useState[0],
7
+ setSearchKeyword = _useState[1];
8
+ var labelKey = props.labelKey,
9
+ valueKey = props.valueKey,
10
+ flattenedData = props.flattenedData,
11
+ uncheckableItemValues = props.uncheckableItemValues,
12
+ onSearch = props.onSearch;
13
+ var getSearchResult = function getSearchResult() {
14
+ var items = [];
15
+ var result = flattenedData.filter(function (item) {
16
+ if (uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (value) {
17
+ return item[valueKey] === value;
18
+ })) {
19
+ return false;
20
+ }
21
+ if (item[labelKey].match(new RegExp(getSafeRegExpString(searchKeyword), 'i'))) {
22
+ return true;
23
+ }
24
+ return false;
25
+ });
26
+ for (var i = 0; i < result.length; i++) {
27
+ items.push(result[i]);
28
+
29
+ // A maximum of 100 search results are returned.
30
+ if (i === 99) {
31
+ return items;
32
+ }
33
+ }
34
+ return items;
35
+ };
36
+ var handleSearch = useEventCallback(function (value, event) {
37
+ setSearchKeyword(value);
38
+ onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
39
+ });
40
+ return {
41
+ searchKeyword: searchKeyword,
42
+ setSearchKeyword: setSearchKeyword,
43
+ items: getSearchResult(),
44
+ handleSearch: handleSearch
45
+ };
46
+ }
47
+ export default useSearch;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { type ItemDataType } from '../../@types/common';
3
+ export interface UseSelectProps<T> {
4
+ data: ItemDataType<T>[];
5
+ childrenKey: string;
6
+ labelKey: string;
7
+ valueKey: string;
8
+ onSelect?: (node: ItemDataType<T>, cascadePaths: ItemDataType<T>[], event: React.SyntheticEvent) => void;
9
+ getChildren?: (node: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
10
+ }
11
+ declare const useSelect: <T>(props: UseSelectProps<T>) => {
12
+ columnData: (readonly ItemDataType<T>[])[];
13
+ setColumnData: React.Dispatch<React.SetStateAction<(readonly ItemDataType<T>[])[]>>;
14
+ flattenData: ItemDataType<T>[];
15
+ selectedPaths: ItemDataType<T>[] | undefined;
16
+ setSelectedPaths: React.Dispatch<React.SetStateAction<ItemDataType<T>[] | undefined>>;
17
+ handleSelect: (...args: any[]) => any;
18
+ };
19
+ export default useSelect;