rsuite 5.55.1 → 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 (223) hide show
  1. package/AutoComplete/styles/index.css +3 -3
  2. package/CHANGELOG.md +33 -0
  3. package/CascadeTree/package.json +7 -0
  4. package/CascadeTree/styles/index.css +273 -0
  5. package/CascadeTree/styles/index.less +77 -0
  6. package/CascadeTree/styles/search.less +45 -0
  7. package/Cascader/styles/index.css +190 -195
  8. package/Cascader/styles/index.less +1 -122
  9. package/CheckPicker/styles/index.css +142 -40
  10. package/CheckPicker/styles/index.less +1 -1
  11. package/CheckTree/styles/index.css +143 -41
  12. package/CheckTreePicker/styles/index.css +143 -41
  13. package/CheckTreePicker/styles/index.less +2 -2
  14. package/Checkbox/styles/index.css +159 -36
  15. package/Checkbox/styles/index.less +32 -13
  16. package/DatePicker/styles/index.css +3 -3
  17. package/DateRangePicker/styles/index.css +3 -3
  18. package/InputPicker/styles/index.css +3 -3
  19. package/MultiCascadeTree/package.json +7 -0
  20. package/MultiCascadeTree/styles/index.css +3701 -0
  21. package/MultiCascadeTree/styles/index.less +37 -0
  22. package/MultiCascader/styles/index.css +213 -108
  23. package/MultiCascader/styles/index.less +11 -31
  24. package/Pagination/styles/index.css +3 -3
  25. package/Radio/styles/index.css +133 -19
  26. package/Radio/styles/index.less +28 -12
  27. package/RadioGroup/styles/index.css +1 -1
  28. package/RadioGroup/styles/index.less +1 -1
  29. package/SelectPicker/styles/index.css +3 -3
  30. package/TagGroup/styles/index.css +1 -1
  31. package/TagGroup/styles/index.less +1 -1
  32. package/TagInput/styles/index.css +141 -39
  33. package/TagPicker/styles/index.css +141 -39
  34. package/cjs/@types/common.d.ts +12 -14
  35. package/cjs/CascadeTree/CascadeTree.d.ts +16 -0
  36. package/cjs/CascadeTree/CascadeTree.js +174 -0
  37. package/cjs/CascadeTree/SearchView.d.ts +17 -0
  38. package/cjs/CascadeTree/SearchView.js +106 -0
  39. package/cjs/CascadeTree/TreeView.d.ts +20 -0
  40. package/cjs/{Cascader → CascadeTree}/TreeView.js +42 -33
  41. package/cjs/CascadeTree/hooks/index.d.ts +3 -0
  42. package/cjs/CascadeTree/hooks/index.js +12 -0
  43. package/cjs/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  44. package/cjs/CascadeTree/hooks/usePaths.js +42 -0
  45. package/cjs/CascadeTree/hooks/useSearch.d.ts +17 -0
  46. package/cjs/CascadeTree/hooks/useSearch.js +59 -0
  47. package/cjs/CascadeTree/hooks/useSelect.d.ts +23 -0
  48. package/cjs/CascadeTree/hooks/useSelect.js +64 -0
  49. package/cjs/CascadeTree/index.d.ts +4 -0
  50. package/cjs/CascadeTree/index.js +9 -0
  51. package/cjs/CascadeTree/types.d.ts +66 -0
  52. package/cjs/CascadeTree/types.js +2 -0
  53. package/cjs/CascadeTree/utils.d.ts +32 -0
  54. package/cjs/CascadeTree/utils.js +66 -0
  55. package/cjs/Cascader/Cascader.d.ts +57 -26
  56. package/cjs/Cascader/Cascader.js +180 -247
  57. package/cjs/Cascader/useActive.d.ts +15 -0
  58. package/cjs/Cascader/useActive.js +43 -0
  59. package/cjs/Checkbox/Checkbox.d.ts +67 -25
  60. package/cjs/Checkbox/Checkbox.js +36 -26
  61. package/cjs/InlineEdit/InlineEdit.d.ts +1 -1
  62. package/cjs/InputPicker/InputPicker.js +2 -2
  63. package/cjs/InputPicker/InputPickerContext.d.ts +1 -1
  64. package/cjs/Loader/Loader.js +5 -4
  65. package/cjs/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  66. package/cjs/MultiCascadeTree/MultiCascadeTree.js +131 -0
  67. package/cjs/MultiCascadeTree/SearchView.d.ts +17 -0
  68. package/cjs/MultiCascadeTree/SearchView.js +117 -0
  69. package/cjs/MultiCascadeTree/TreeView.d.ts +22 -0
  70. package/cjs/{MultiCascader → MultiCascadeTree}/TreeView.js +22 -21
  71. package/cjs/MultiCascadeTree/hooks/index.d.ts +5 -0
  72. package/cjs/MultiCascadeTree/hooks/index.js +16 -0
  73. package/cjs/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  74. package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +202 -0
  75. package/cjs/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  76. package/cjs/MultiCascadeTree/hooks/useColumnData.js +52 -0
  77. package/cjs/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  78. package/cjs/MultiCascadeTree/hooks/useFlattenData.js +33 -0
  79. package/cjs/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  80. package/cjs/MultiCascadeTree/hooks/useSearch.js +52 -0
  81. package/cjs/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  82. package/cjs/MultiCascadeTree/hooks/useSelect.js +83 -0
  83. package/cjs/MultiCascadeTree/index.d.ts +4 -0
  84. package/cjs/MultiCascadeTree/index.js +9 -0
  85. package/cjs/MultiCascadeTree/types.d.ts +26 -0
  86. package/cjs/MultiCascadeTree/types.js +2 -0
  87. package/cjs/MultiCascadeTree/utils.d.ts +37 -0
  88. package/cjs/MultiCascadeTree/utils.js +140 -0
  89. package/cjs/MultiCascader/MultiCascader.d.ts +57 -29
  90. package/cjs/MultiCascader/MultiCascader.js +175 -287
  91. package/cjs/Radio/Radio.d.ts +42 -16
  92. package/cjs/Radio/Radio.js +42 -37
  93. package/cjs/RadioGroup/RadioGroup.d.ts +1 -1
  94. package/cjs/RadioGroup/RadioGroup.js +3 -3
  95. package/cjs/TagPicker/index.js +1 -1
  96. package/cjs/Tree/Tree.d.ts +4 -4
  97. package/cjs/index.d.ts +6 -1
  98. package/cjs/index.js +8 -3
  99. package/cjs/internals/Picker/ListCheckItem.d.ts +2 -11
  100. package/cjs/internals/Picker/ListCheckItem.js +8 -6
  101. package/cjs/internals/Picker/PickerToggle.d.ts +4 -5
  102. package/cjs/toaster/ToastContainer.d.ts +9 -2
  103. package/cjs/toaster/index.d.ts +0 -1
  104. package/cjs/toaster/index.js +1 -3
  105. package/cjs/useToaster/index.d.ts +2 -0
  106. package/cjs/useToaster/index.js +9 -0
  107. package/cjs/{toaster → useToaster}/useToaster.d.ts +4 -4
  108. package/cjs/{toaster → useToaster}/useToaster.js +4 -4
  109. package/cjs/utils/index.d.ts +1 -0
  110. package/cjs/utils/index.js +5 -2
  111. package/dist/rsuite-no-reset-rtl.css +322 -124
  112. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  113. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  114. package/dist/rsuite-no-reset.css +322 -124
  115. package/dist/rsuite-no-reset.min.css +1 -1
  116. package/dist/rsuite-no-reset.min.css.map +1 -1
  117. package/dist/rsuite-rtl.css +322 -124
  118. package/dist/rsuite-rtl.min.css +1 -1
  119. package/dist/rsuite-rtl.min.css.map +1 -1
  120. package/dist/rsuite.css +322 -124
  121. package/dist/rsuite.js +248 -50
  122. package/dist/rsuite.js.map +1 -1
  123. package/dist/rsuite.min.css +1 -1
  124. package/dist/rsuite.min.css.map +1 -1
  125. package/dist/rsuite.min.js +1 -1
  126. package/dist/rsuite.min.js.map +1 -1
  127. package/esm/@types/common.d.ts +12 -14
  128. package/esm/CascadeTree/CascadeTree.d.ts +16 -0
  129. package/esm/CascadeTree/CascadeTree.js +167 -0
  130. package/esm/CascadeTree/SearchView.d.ts +17 -0
  131. package/esm/CascadeTree/SearchView.js +100 -0
  132. package/esm/CascadeTree/TreeView.d.ts +20 -0
  133. package/esm/{Cascader → CascadeTree}/TreeView.js +42 -33
  134. package/esm/CascadeTree/hooks/index.d.ts +3 -0
  135. package/esm/CascadeTree/hooks/index.js +4 -0
  136. package/esm/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  137. package/esm/CascadeTree/hooks/usePaths.js +36 -0
  138. package/esm/CascadeTree/hooks/useSearch.d.ts +17 -0
  139. package/esm/CascadeTree/hooks/useSearch.js +54 -0
  140. package/esm/CascadeTree/hooks/useSelect.d.ts +23 -0
  141. package/esm/CascadeTree/hooks/useSelect.js +59 -0
  142. package/esm/CascadeTree/index.d.ts +4 -0
  143. package/esm/CascadeTree/index.js +3 -0
  144. package/esm/CascadeTree/types.d.ts +66 -0
  145. package/esm/CascadeTree/types.js +1 -0
  146. package/esm/CascadeTree/utils.d.ts +32 -0
  147. package/esm/CascadeTree/utils.js +61 -0
  148. package/esm/Cascader/Cascader.d.ts +57 -26
  149. package/esm/Cascader/Cascader.js +167 -233
  150. package/esm/Cascader/useActive.d.ts +15 -0
  151. package/esm/Cascader/useActive.js +37 -0
  152. package/esm/Checkbox/Checkbox.d.ts +67 -25
  153. package/esm/Checkbox/Checkbox.js +38 -28
  154. package/esm/InlineEdit/InlineEdit.d.ts +1 -1
  155. package/esm/InputPicker/InputPicker.js +2 -2
  156. package/esm/InputPicker/InputPickerContext.d.ts +1 -1
  157. package/esm/Loader/Loader.js +6 -5
  158. package/esm/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  159. package/esm/MultiCascadeTree/MultiCascadeTree.js +125 -0
  160. package/esm/MultiCascadeTree/SearchView.d.ts +17 -0
  161. package/esm/MultiCascadeTree/SearchView.js +111 -0
  162. package/esm/MultiCascadeTree/TreeView.d.ts +22 -0
  163. package/esm/{MultiCascader → MultiCascadeTree}/TreeView.js +22 -21
  164. package/esm/MultiCascadeTree/hooks/index.d.ts +5 -0
  165. package/esm/MultiCascadeTree/hooks/index.js +6 -0
  166. package/esm/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  167. package/esm/MultiCascadeTree/hooks/useCascadeValue.js +197 -0
  168. package/esm/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  169. package/esm/MultiCascadeTree/hooks/useColumnData.js +46 -0
  170. package/esm/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  171. package/esm/MultiCascadeTree/hooks/useFlattenData.js +28 -0
  172. package/esm/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  173. package/esm/MultiCascadeTree/hooks/useSearch.js +47 -0
  174. package/esm/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  175. package/esm/MultiCascadeTree/hooks/useSelect.js +77 -0
  176. package/esm/MultiCascadeTree/index.d.ts +4 -0
  177. package/esm/MultiCascadeTree/index.js +3 -0
  178. package/esm/MultiCascadeTree/types.d.ts +26 -0
  179. package/esm/MultiCascadeTree/types.js +1 -0
  180. package/esm/MultiCascadeTree/utils.d.ts +37 -0
  181. package/esm/MultiCascadeTree/utils.js +130 -0
  182. package/esm/MultiCascader/MultiCascader.d.ts +57 -29
  183. package/esm/MultiCascader/MultiCascader.js +168 -279
  184. package/esm/Radio/Radio.d.ts +42 -16
  185. package/esm/Radio/Radio.js +43 -38
  186. package/esm/RadioGroup/RadioGroup.d.ts +1 -1
  187. package/esm/RadioGroup/RadioGroup.js +5 -5
  188. package/esm/TagPicker/index.js +1 -1
  189. package/esm/Tree/Tree.d.ts +4 -4
  190. package/esm/index.d.ts +6 -1
  191. package/esm/index.js +5 -1
  192. package/esm/internals/Picker/ListCheckItem.d.ts +2 -11
  193. package/esm/internals/Picker/ListCheckItem.js +8 -6
  194. package/esm/internals/Picker/PickerToggle.d.ts +4 -5
  195. package/esm/toaster/ToastContainer.d.ts +9 -2
  196. package/esm/toaster/index.d.ts +0 -1
  197. package/esm/toaster/index.js +0 -1
  198. package/esm/useToaster/index.d.ts +2 -0
  199. package/esm/useToaster/index.js +3 -0
  200. package/esm/{toaster → useToaster}/useToaster.d.ts +4 -4
  201. package/esm/{toaster → useToaster}/useToaster.js +4 -4
  202. package/esm/utils/index.d.ts +1 -0
  203. package/esm/utils/index.js +2 -1
  204. package/internals/Picker/styles/index.less +1 -1
  205. package/package.json +1 -1
  206. package/styles/index.less +2 -0
  207. package/useToaster/package.json +7 -0
  208. package/useToaster/styles/index.css +239 -0
  209. package/useToaster/styles/index.less +1 -0
  210. package/cjs/Cascader/DropdownMenu.d.ts +0 -24
  211. package/cjs/Cascader/DropdownMenu.js +0 -175
  212. package/cjs/Cascader/TreeView.d.ts +0 -24
  213. package/cjs/Cascader/utils.js +0 -79
  214. package/cjs/MultiCascader/TreeView.d.ts +0 -25
  215. package/cjs/MultiCascader/utils.d.ts +0 -71
  216. package/cjs/MultiCascader/utils.js +0 -382
  217. package/esm/Cascader/DropdownMenu.d.ts +0 -24
  218. package/esm/Cascader/DropdownMenu.js +0 -168
  219. package/esm/Cascader/TreeView.d.ts +0 -24
  220. package/esm/Cascader/utils.js +0 -74
  221. package/esm/MultiCascader/TreeView.d.ts +0 -25
  222. package/esm/MultiCascader/utils.d.ts +0 -71
  223. package/esm/MultiCascader/utils.js +0 -369
@@ -0,0 +1,54 @@
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
+ childrenKey = props.childrenKey,
10
+ parentMap = props.parentMap,
11
+ flattenedData = props.flattenedData,
12
+ parentSelectable = props.parentSelectable,
13
+ onSearch = props.onSearch;
14
+ var someKeyword = function someKeyword(item, keyword) {
15
+ if (item[labelKey].match(new RegExp(getSafeRegExpString(keyword || searchKeyword), 'i'))) {
16
+ return true;
17
+ }
18
+ var parent = parentMap.get(item);
19
+ if (parent && someKeyword(parent)) {
20
+ return true;
21
+ }
22
+ return false;
23
+ };
24
+ var getSearchResult = function getSearchResult(keyword) {
25
+ var items = [];
26
+ var result = flattenedData.filter(function (item) {
27
+ if (!parentSelectable && item[childrenKey]) {
28
+ return false;
29
+ }
30
+ return someKeyword(item, keyword);
31
+ });
32
+ for (var i = 0; i < result.length; i++) {
33
+ items.push(result[i]);
34
+
35
+ // A maximum of 100 search results are returned.
36
+ if (i === 99) {
37
+ return items;
38
+ }
39
+ }
40
+ return items;
41
+ };
42
+ var handleSearch = useEventCallback(function (value, event) {
43
+ var items = getSearchResult(value);
44
+ setSearchKeyword(value);
45
+ onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, items, event);
46
+ });
47
+ return {
48
+ searchKeyword: searchKeyword,
49
+ setSearchKeyword: setSearchKeyword,
50
+ items: getSearchResult(),
51
+ handleSearch: handleSearch
52
+ };
53
+ }
54
+ export default useSearch;
@@ -0,0 +1,23 @@
1
+ /// <reference types="react" />
2
+ import { type ItemDataType } from '../../@types/common';
3
+ import { type SelectNode } from '../types';
4
+ export interface UseSelectProps<T> {
5
+ value?: T | null;
6
+ valueKey: string;
7
+ childrenKey: string;
8
+ selectedItem?: ItemDataType<T>;
9
+ childrenMap: any;
10
+ onSelect?: (node: SelectNode<T>, event: React.SyntheticEvent) => void;
11
+ onChange?: (value: T, event: React.SyntheticEvent) => void;
12
+ getChildren?: (node: ItemDataType<T>) => readonly ItemDataType<T>[] | Promise<readonly ItemDataType<T>[]>;
13
+ }
14
+ /**
15
+ * Hook for handling the state after the option is selected
16
+ */
17
+ declare const useSelect: <T>(props: UseSelectProps<T>) => {
18
+ loadingItemsSet: any;
19
+ activeItem: ItemDataType<T> | undefined;
20
+ setActiveItem: import("react").Dispatch<import("react").SetStateAction<ItemDataType<T> | undefined>>;
21
+ handleSelect: (...args: any[]) => any;
22
+ };
23
+ export default useSelect;
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ import { useState } from 'react';
3
+ import { useSet } from 'react-use-set';
4
+ import { useEventCallback, useIsMounted, shallowEqual } from '../../utils';
5
+ /**
6
+ * Hook for handling the state after the option is selected
7
+ */
8
+ var useSelect = function useSelect(props) {
9
+ var value = props.value,
10
+ onSelect = props.onSelect,
11
+ getChildren = props.getChildren,
12
+ valueKey = props.valueKey,
13
+ onChange = props.onChange,
14
+ childrenKey = props.childrenKey,
15
+ selectedItem = props.selectedItem,
16
+ childrenMap = props.childrenMap; // The item that focus is on
17
+ var _useState = useState(selectedItem),
18
+ activeItem = _useState[0],
19
+ setActiveItem = _useState[1];
20
+ var isMounted = useIsMounted();
21
+ var loadingItemsSet = useSet();
22
+ var handleSelect = useEventCallback(function (node, event) {
23
+ var _itemData$childrenKey;
24
+ var itemData = node.itemData,
25
+ isLeafNode = node.isLeafNode;
26
+ setActiveItem(itemData);
27
+
28
+ // Lazy load node's children
29
+ if (typeof getChildren === 'function' && ((_itemData$childrenKey = itemData[childrenKey]) === null || _itemData$childrenKey === void 0 ? void 0 : _itemData$childrenKey.length) === 0 && !childrenMap.has(itemData)) {
30
+ loadingItemsSet.add(itemData);
31
+ var children = getChildren(itemData);
32
+ if (children instanceof Promise) {
33
+ children.then(function (data) {
34
+ if (isMounted()) {
35
+ loadingItemsSet.delete(itemData);
36
+ childrenMap.set(itemData, data);
37
+ }
38
+ });
39
+ } else {
40
+ loadingItemsSet.delete(itemData);
41
+ childrenMap.set(itemData, children);
42
+ }
43
+ }
44
+ if (isLeafNode) {
45
+ var nextValue = itemData[valueKey];
46
+ if (!shallowEqual(value, nextValue)) {
47
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
48
+ }
49
+ }
50
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, event);
51
+ });
52
+ return {
53
+ loadingItemsSet: loadingItemsSet,
54
+ activeItem: activeItem,
55
+ setActiveItem: setActiveItem,
56
+ handleSelect: handleSelect
57
+ };
58
+ };
59
+ export default useSelect;
@@ -0,0 +1,4 @@
1
+ import CascadeTree from './CascadeTree';
2
+ export type { ItemDataType } from '../@types/common';
3
+ export type { CascadeTreeProps } from './types';
4
+ export default CascadeTree;
@@ -0,0 +1,3 @@
1
+ 'use client';
2
+ import CascadeTree from './CascadeTree';
3
+ export default CascadeTree;
@@ -0,0 +1,66 @@
1
+ /// <reference types="react" />
2
+ import { ItemDataType, DataProps, WithAsProps, ToArray } from '../@types/common';
3
+ export interface SelectNode<T> {
4
+ itemData: ItemDataType<T>;
5
+ cascadePaths: ItemDataType<T>[];
6
+ isLeafNode: boolean;
7
+ }
8
+ export interface CascadeColumn<T> {
9
+ items: readonly ItemDataType<T>[];
10
+ parentItem?: ItemDataType<T>;
11
+ layer?: number;
12
+ }
13
+ export interface CascadeTreeProps<T, V = T> extends WithAsProps, DataProps<ItemDataType<T>> {
14
+ /**
15
+ * Initial value
16
+ */
17
+ defaultValue?: V;
18
+ /**
19
+ * Selected value
20
+ */
21
+ value?: V;
22
+ /**
23
+ * Sets the width of the menu
24
+ */
25
+ columnWidth?: number;
26
+ /**
27
+ * Sets the height of the menu
28
+ */
29
+ columnHeight?: number;
30
+ /**
31
+ * Disabled items
32
+ */
33
+ disabledItemValues?: ToArray<NonNullable<T>>;
34
+ /**
35
+ * Whether dispaly search input box
36
+ */
37
+ searchable?: boolean;
38
+ /**
39
+ * Custom render columns
40
+ */
41
+ renderColumn?: (childNodes: React.ReactNode, column: CascadeColumn<T>) => React.ReactNode;
42
+ /**
43
+ * Custom render tree node
44
+ */
45
+ renderTreeNode?: (node: React.ReactNode, itemData: ItemDataType<T>) => React.ReactNode;
46
+ /**
47
+ * Custom render search items
48
+ */
49
+ renderSearchItem?: (node: React.ReactNode, items: ItemDataType<T>[]) => React.ReactNode;
50
+ /**
51
+ * Called when the option is selected
52
+ */
53
+ onSelect?: (value: ItemDataType<T>, selectedPaths: ItemDataType<T>[], event: React.SyntheticEvent) => void;
54
+ /**
55
+ * Called after the value has been changed
56
+ */
57
+ onChange?: (value: V, event: React.SyntheticEvent) => void;
58
+ /**
59
+ * Called when searching
60
+ */
61
+ onSearch?: (value: string, event: React.SyntheticEvent) => void;
62
+ /**
63
+ * Asynchronously load the children of the tree node.
64
+ */
65
+ getChildren?: (childNodes: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
66
+ }
@@ -0,0 +1 @@
1
+ 'use client';
@@ -0,0 +1,32 @@
1
+ /// <reference types="react" />
2
+ import { ItemDataType } from '../@types/common';
3
+ declare type GetColumnsAndPathsOptions<T> = {
4
+ getParent: (item: T) => T | undefined;
5
+ getChildren: (item: T) => readonly T[] | undefined;
6
+ };
7
+ /**
8
+ * Calculate columns to be displayed:
9
+ *
10
+ * - Every ancestor level of activeItem should be displayed
11
+ * - The level that activeItem is at should be displayed
12
+ * - If activeItem is a parent node, its child level should be displayed
13
+ *
14
+ * @param items
15
+ * @param value
16
+ * @param options
17
+ * @returns
18
+ */
19
+ export declare function getColumnsAndPaths<T extends Record<string, unknown>>(items: readonly T[], pathTarget: T | undefined, options: GetColumnsAndPathsOptions<T>): {
20
+ columns: (readonly T[])[];
21
+ path: T[];
22
+ };
23
+ /**
24
+ * Highlight the search keyword in the label
25
+ */
26
+ export declare function highlightLabel<T>(props: {
27
+ item: ItemDataType<T>;
28
+ labelKey: string;
29
+ searchKeyword: string;
30
+ render: (patch: React.ReactNode, index: number) => React.ReactNode;
31
+ }): import("react").ReactNode[];
32
+ export {};
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { getSafeRegExpString } from '../utils';
3
+ /**
4
+ * Calculate columns to be displayed:
5
+ *
6
+ * - Every ancestor level of activeItem should be displayed
7
+ * - The level that activeItem is at should be displayed
8
+ * - If activeItem is a parent node, its child level should be displayed
9
+ *
10
+ * @param items
11
+ * @param value
12
+ * @param options
13
+ * @returns
14
+ */
15
+ export function getColumnsAndPaths(items, pathTarget, options) {
16
+ var getParent = options.getParent,
17
+ getChildren = options.getChildren;
18
+ if (!pathTarget) {
19
+ return {
20
+ columns: [items],
21
+ path: []
22
+ };
23
+ }
24
+ var columns = [];
25
+ var path = [pathTarget];
26
+ var children = getChildren(pathTarget);
27
+ if (children && children.length > 0) {
28
+ columns.unshift(children);
29
+ }
30
+ for (var parent = getParent(pathTarget); !!parent; parent = getParent(parent)) {
31
+ var _getChildren;
32
+ columns.unshift((_getChildren = getChildren(parent)) !== null && _getChildren !== void 0 ? _getChildren : []);
33
+ path.unshift(parent);
34
+ }
35
+ columns.unshift(items);
36
+ return {
37
+ columns: columns,
38
+ path: path
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Highlight the search keyword in the label
44
+ */
45
+ export function highlightLabel(props) {
46
+ var item = props.item,
47
+ searchKeyword = props.searchKeyword,
48
+ labelKey = props.labelKey,
49
+ render = props.render;
50
+ var regx = new RegExp(getSafeRegExpString(searchKeyword), 'ig');
51
+ var labelElements = [];
52
+ var strArr = item[labelKey].split(regx);
53
+ var highStrArr = item[labelKey].match(regx);
54
+ for (var i = 0; i < strArr.length; i++) {
55
+ labelElements.push(strArr[i]);
56
+ if (highStrArr !== null && highStrArr !== void 0 && highStrArr[i]) {
57
+ labelElements.push(render(highStrArr[i], i));
58
+ }
59
+ }
60
+ return labelElements;
61
+ }
@@ -1,35 +1,66 @@
1
1
  import React from 'react';
2
+ import type { CascadeTreeProps } from '../CascadeTree/types';
2
3
  import { PickerLocale } from '../locales';
3
4
  import { PickerHandle, PickerToggleProps } from '../internals/Picker';
4
- import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
- export declare type ValueType = number | string;
6
- export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T | null, PickerLocale, ItemDataType<T>>, Pick<PickerToggleProps, 'label' | 'caretAs' | 'loading'> {
7
- /** Sets the width of the menu */
8
- menuWidth?: number;
9
- /** Sets the height of the menu */
10
- menuHeight?: number | string;
11
- /** Whether dispaly search input box */
12
- searchable?: boolean;
13
- /** The menu is displayed directly when the component is initialized */
5
+ import { ItemDataType, DataItemValue, FormControlPickerProps } from '../@types/common';
6
+ export interface CascaderProps<T = DataItemValue> extends FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, CascadeTreeProps<T>, Pick<PickerToggleProps, 'label' | 'caretAs' | 'loading'> {
7
+ /**
8
+ * The panel is displayed directly when the component is initialized
9
+ * @deprecated Use CascadeTree instead
10
+ * @see CascadeTree https://rsuitejs.com/components/cascade-tree
11
+ */
14
12
  inline?: boolean;
15
- /** When true, make the parent node selectable */
13
+ /**
14
+ * When true, make the parent node selectable
15
+ */
16
16
  parentSelectable?: boolean;
17
- /** Custom render menu */
18
- renderMenu?: (items: readonly ItemDataType[], menu: React.ReactNode, parentNode?: any, layer?: number) => React.ReactNode;
19
- /** Custom render menu items */
20
- renderMenuItem?: (itemLabel: React.ReactNode, item: ItemDataType) => React.ReactNode;
21
- /** Custom render search items */
22
- renderSearchItem?: (itemLabel: React.ReactNode, items: ItemDataType[]) => React.ReactNode;
23
- /** Custom render selected items */
24
- renderValue?: (value: T, selectedPaths: ItemDataType[], selectedElement: React.ReactNode) => React.ReactNode;
25
- /** Called when the option is selected */
26
- onSelect?: (value: ItemDataType, selectedPaths: ItemDataType[], event: React.SyntheticEvent) => void;
27
- /** Called when clean */
17
+ /**
18
+ * Custom popup style
19
+ */
20
+ popupClassName?: string;
21
+ /**
22
+ * Custom popup style
23
+ */
24
+ popupStyle?: React.CSSProperties;
25
+ /**
26
+ * Custom menu class name
27
+ * @deprecated Use popupClassName instead
28
+ */
29
+ menuClassName?: string;
30
+ /**
31
+ * Custom menu style
32
+ * @deprecated Use popupStyle instead
33
+ */
34
+ menuStyle?: React.CSSProperties;
35
+ /**
36
+ * Sets the width of the menu.
37
+ *
38
+ * @deprecated Use columnWidth instead
39
+ */
40
+ menuWidth?: number;
41
+ /**
42
+ * Sets the height of the menu
43
+ * @deprecated Use columnHeight instead
44
+ */
45
+ menuHeight?: number | string;
46
+ /**
47
+ * Custom render menu
48
+ * @deprecated Use renderColumn instead
49
+ */
50
+ renderMenu?: (items: readonly ItemDataType<T>[], menu: React.ReactNode, parentNode?: any, layer?: number) => React.ReactNode;
51
+ /**
52
+ * Custom render menu item
53
+ * @deprecated Use renderTreeNode instead
54
+ */
55
+ renderMenuItem?: (node: React.ReactNode, item: ItemDataType<T>) => React.ReactNode;
56
+ /**
57
+ * Custom render selected items
58
+ */
59
+ renderValue?: (value: T, selectedPaths: ItemDataType<T>[], selectedElement: React.ReactNode) => React.ReactNode;
60
+ /**
61
+ * Called when clean
62
+ */
28
63
  onClean?: (event: React.SyntheticEvent) => void;
29
- /** Called when searching */
30
- onSearch?: (searchKeyword: string, event: React.SyntheticEvent) => void;
31
- /** Asynchronously load the children of the tree node. */
32
- getChildren?: (node: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
33
64
  }
34
65
  export interface CascaderComponent {
35
66
  <T>(props: CascaderProps<T> & {