rsuite 5.60.2 → 5.61.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 (438) hide show
  1. package/Accordion/styles/index.css +4 -4
  2. package/AutoComplete/styles/index.css +58 -22
  3. package/Button/styles/index.css +12 -8
  4. package/Button/styles/mixin.less +1 -1
  5. package/CHANGELOG.md +25 -0
  6. package/Calendar/styles/index.css +16 -15
  7. package/CascadeTree/styles/index.css +11 -9
  8. package/CascadeTree/styles/index.less +7 -0
  9. package/CascadeTree/styles/search.less +0 -10
  10. package/Cascader/styles/index.css +60 -31
  11. package/CheckPicker/styles/index.css +59 -27
  12. package/CheckPicker/styles/index.less +3 -3
  13. package/CheckTree/styles/index.css +160 -134
  14. package/CheckTree/styles/index.less +141 -1
  15. package/CheckTreePicker/styles/index.css +170 -126
  16. package/CheckTreePicker/styles/index.less +8 -181
  17. package/Checkbox/styles/index.css +7 -8
  18. package/Checkbox/styles/index.less +1 -5
  19. package/DateInput/styles/index.css +4 -4
  20. package/DatePicker/styles/index.css +62 -26
  21. package/DateRangeInput/styles/index.css +4 -4
  22. package/DateRangePicker/styles/index.css +67 -26
  23. package/DateRangePicker/styles/index.less +2 -0
  24. package/Dropdown/styles/index.css +14 -13
  25. package/Highlight/package.json +7 -0
  26. package/Highlight/styles/index.css +8 -0
  27. package/Highlight/styles/index.less +6 -0
  28. package/IconButton/styles/index.css +11 -10
  29. package/Input/styles/index.css +4 -4
  30. package/InputGroup/styles/index.css +18 -17
  31. package/InputGroup/styles/index.less +1 -1
  32. package/InputNumber/styles/index.css +19 -18
  33. package/InputPicker/styles/index.css +58 -22
  34. package/MultiCascadeTree/styles/index.css +61 -36
  35. package/MultiCascadeTree/styles/index.less +1 -1
  36. package/MultiCascader/styles/index.css +704 -679
  37. package/MultiCascader/styles/index.less +0 -1
  38. package/Nav/styles/index.css +15 -14
  39. package/Navbar/styles/index.css +14 -13
  40. package/Pagination/styles/index.css +62 -26
  41. package/Panel/styles/index.css +4 -4
  42. package/Placeholder/styles/index.css +2 -3
  43. package/Placeholder/styles/index.less +2 -3
  44. package/README.md +21 -39
  45. package/Radio/styles/index.css +7 -7
  46. package/Radio/styles/index.less +1 -5
  47. package/RangeSlider/styles/index.css +1 -1
  48. package/Rate/styles/index.css +1 -1
  49. package/Rate/styles/index.less +1 -1
  50. package/SelectPicker/styles/index.css +58 -22
  51. package/Slider/styles/index.css +1 -1
  52. package/Slider/styles/index.less +1 -1
  53. package/Steps/styles/index.css +6 -1
  54. package/Steps/styles/index.less +2 -1
  55. package/Tabs/styles/index.css +15 -14
  56. package/TagInput/styles/index.css +59 -27
  57. package/TagPicker/styles/index.css +59 -27
  58. package/Toggle/styles/index.css +10 -7
  59. package/Tree/styles/indent-line.less +8 -0
  60. package/Tree/styles/index.css +140 -141
  61. package/Tree/styles/index.less +188 -1
  62. package/Tree/styles/toggle.less +36 -0
  63. package/TreePicker/styles/index.css +142 -134
  64. package/TreePicker/styles/index.less +4 -234
  65. package/Uploader/styles/index.css +12 -11
  66. package/cjs/@types/common.d.ts +41 -4
  67. package/cjs/AutoComplete/AutoComplete.js +2 -1
  68. package/cjs/CascadeTree/CascadeTree.js +8 -7
  69. package/cjs/CascadeTree/SearchView.js +7 -14
  70. package/cjs/CascadeTree/hooks/usePaths.js +4 -4
  71. package/cjs/CascadeTree/hooks/useSearch.js +2 -1
  72. package/cjs/CascadeTree/utils.d.ts +0 -11
  73. package/cjs/CascadeTree/utils.js +0 -23
  74. package/cjs/Cascader/Cascader.js +17 -16
  75. package/cjs/CheckPicker/CheckPicker.js +26 -29
  76. package/cjs/CheckTree/CheckTree.d.ts +16 -0
  77. package/cjs/CheckTree/CheckTree.js +112 -0
  78. package/cjs/CheckTree/CheckTreeNode.d.ts +72 -0
  79. package/cjs/CheckTree/CheckTreeNode.js +117 -0
  80. package/cjs/CheckTree/CheckTreeView.d.ts +70 -0
  81. package/cjs/CheckTree/CheckTreeView.js +310 -0
  82. package/cjs/CheckTree/hooks/useTreeCheckState.d.ts +10 -0
  83. package/cjs/CheckTree/hooks/useTreeCheckState.js +93 -0
  84. package/cjs/CheckTree/hooks/useTreeNodeProps.d.ts +22 -0
  85. package/cjs/CheckTree/hooks/useTreeNodeProps.js +59 -0
  86. package/cjs/CheckTree/hooks/useTreeValue.d.ts +5 -0
  87. package/cjs/CheckTree/hooks/useTreeValue.js +21 -0
  88. package/cjs/CheckTree/index.d.ts +2 -14
  89. package/cjs/CheckTree/index.js +2 -23
  90. package/cjs/CheckTree/utils.d.ts +53 -0
  91. package/cjs/{CheckTreePicker → CheckTree}/utils.js +76 -26
  92. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +30 -12
  93. package/cjs/CheckTreePicker/CheckTreePicker.js +153 -603
  94. package/cjs/CheckTreePicker/hooks/useFocusState.d.ts +16 -0
  95. package/cjs/CheckTreePicker/hooks/useFocusState.js +42 -0
  96. package/cjs/DatePicker/DatePicker.d.ts +4 -0
  97. package/cjs/DatePicker/DatePicker.js +20 -5
  98. package/cjs/DatePicker/types.d.ts +0 -4
  99. package/cjs/DateRangePicker/DateRangePicker.d.ts +51 -23
  100. package/cjs/DateRangePicker/DateRangePicker.js +71 -51
  101. package/cjs/DateRangePicker/hooks/useDateDisabled.d.ts +16 -0
  102. package/cjs/DateRangePicker/hooks/useDateDisabled.js +31 -0
  103. package/cjs/DateRangePicker/types.d.ts +1 -0
  104. package/cjs/Highlight/Highlight.d.ts +14 -0
  105. package/cjs/Highlight/Highlight.js +58 -0
  106. package/cjs/Highlight/index.d.ts +3 -0
  107. package/cjs/Highlight/index.js +9 -0
  108. package/cjs/Highlight/utils/highlightText.d.ts +5 -0
  109. package/cjs/Highlight/utils/highlightText.js +29 -0
  110. package/cjs/InputPicker/InputPicker.js +37 -41
  111. package/cjs/MultiCascadeTree/SearchView.js +6 -14
  112. package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +15 -1
  113. package/cjs/MultiCascadeTree/hooks/useColumnData.js +2 -2
  114. package/cjs/MultiCascadeTree/hooks/useFlattenData.js +3 -3
  115. package/cjs/MultiCascadeTree/hooks/useSearch.js +2 -1
  116. package/cjs/MultiCascadeTree/utils.d.ts +4 -4
  117. package/cjs/MultiCascadeTree/utils.js +20 -11
  118. package/cjs/MultiCascader/MultiCascader.js +12 -12
  119. package/cjs/SelectPicker/SelectPicker.js +2 -6
  120. package/cjs/Tree/IndentLine.d.ts +3 -0
  121. package/cjs/Tree/IndentLine.js +18 -0
  122. package/cjs/Tree/Tree.d.ts +4 -92
  123. package/cjs/Tree/Tree.js +79 -20
  124. package/cjs/Tree/TreeNode.d.ts +101 -0
  125. package/cjs/Tree/TreeNode.js +147 -0
  126. package/cjs/Tree/TreeNodeToggle.d.ts +9 -0
  127. package/cjs/Tree/TreeNodeToggle.js +56 -0
  128. package/cjs/Tree/TreeProvider.d.ts +52 -0
  129. package/cjs/Tree/TreeProvider.js +84 -0
  130. package/cjs/Tree/TreeView.d.ts +68 -0
  131. package/cjs/Tree/TreeView.js +305 -0
  132. package/cjs/Tree/hooks/useExpandTree.d.ts +60 -0
  133. package/cjs/Tree/hooks/useExpandTree.js +77 -0
  134. package/cjs/Tree/hooks/useFlattenTree.d.ts +42 -0
  135. package/cjs/Tree/hooks/useFlattenTree.js +98 -0
  136. package/cjs/Tree/hooks/useFocusTree.d.ts +24 -0
  137. package/cjs/Tree/hooks/useFocusTree.js +158 -0
  138. package/cjs/Tree/hooks/useForceUpdate.d.ts +2 -0
  139. package/cjs/Tree/hooks/useForceUpdate.js +16 -0
  140. package/cjs/Tree/hooks/useTreeDrag.d.ts +32 -0
  141. package/cjs/Tree/hooks/useTreeDrag.js +268 -0
  142. package/cjs/Tree/hooks/useTreeNodeProps.d.ts +29 -0
  143. package/cjs/Tree/hooks/useTreeNodeProps.js +83 -0
  144. package/cjs/Tree/hooks/useTreeNodeRefs.d.ts +6 -0
  145. package/cjs/Tree/hooks/useTreeNodeRefs.js +22 -0
  146. package/cjs/Tree/hooks/useTreeSearch.d.ts +18 -0
  147. package/cjs/Tree/hooks/useTreeSearch.js +74 -0
  148. package/cjs/Tree/hooks/useTreeWithChildren.d.ts +14 -0
  149. package/cjs/Tree/hooks/useTreeWithChildren.js +64 -0
  150. package/cjs/Tree/hooks/useVirtualizedTreeData.d.ts +7 -0
  151. package/cjs/Tree/hooks/useVirtualizedTreeData.js +82 -0
  152. package/cjs/Tree/types.d.ts +257 -0
  153. package/cjs/Tree/types.js +33 -0
  154. package/cjs/Tree/utils/flattenTree.d.ts +25 -0
  155. package/cjs/Tree/utils/flattenTree.js +95 -0
  156. package/cjs/Tree/utils/focusableTree.d.ts +55 -0
  157. package/cjs/Tree/utils/focusableTree.js +157 -0
  158. package/cjs/Tree/utils/formatNodeRefKey.d.ts +4 -0
  159. package/cjs/Tree/utils/formatNodeRefKey.js +11 -0
  160. package/cjs/Tree/utils/getExpandItemValues.d.ts +11 -0
  161. package/cjs/Tree/utils/getExpandItemValues.js +21 -0
  162. package/cjs/Tree/utils/getNodeParentKeys.d.ts +5 -0
  163. package/cjs/Tree/utils/getNodeParentKeys.js +21 -0
  164. package/cjs/Tree/utils/getTreeActiveNode.d.ts +5 -0
  165. package/cjs/Tree/utils/getTreeActiveNode.js +21 -0
  166. package/cjs/Tree/utils/hasVisibleChildren.d.ts +5 -0
  167. package/cjs/Tree/utils/hasVisibleChildren.js +16 -0
  168. package/cjs/Tree/utils/indentTreeNode.d.ts +3 -0
  169. package/cjs/Tree/utils/indentTreeNode.js +18 -0
  170. package/cjs/Tree/utils/index.d.ts +11 -0
  171. package/cjs/Tree/utils/index.js +35 -0
  172. package/cjs/Tree/utils/isExpand.d.ts +6 -0
  173. package/cjs/Tree/utils/isExpand.js +14 -0
  174. package/cjs/Tree/utils/isSearching.d.ts +1 -0
  175. package/cjs/Tree/utils/isSearching.js +10 -0
  176. package/cjs/Tree/utils/treeKeyboardInteractions.d.ts +21 -0
  177. package/cjs/Tree/utils/treeKeyboardInteractions.js +49 -0
  178. package/cjs/TreePicker/TreePicker.d.ts +27 -21
  179. package/cjs/TreePicker/TreePicker.js +155 -575
  180. package/cjs/TreePicker/hooks/useFocusState.d.ts +20 -0
  181. package/cjs/TreePicker/hooks/useFocusState.js +53 -0
  182. package/cjs/index.d.ts +2 -0
  183. package/cjs/index.js +3 -1
  184. package/cjs/internals/Picker/Listbox.d.ts +40 -10
  185. package/cjs/internals/Picker/Listbox.js +21 -16
  186. package/cjs/internals/Picker/PickerIndicator.d.ts +2 -1
  187. package/cjs/internals/Picker/PickerIndicator.js +7 -3
  188. package/cjs/internals/Picker/hooks/useFocusItemValue.js +4 -4
  189. package/cjs/internals/Picker/hooks/usePickerRef.d.ts +1 -4
  190. package/cjs/internals/Picker/hooks/usePickerRef.js +3 -20
  191. package/cjs/internals/Picker/index.d.ts +0 -1
  192. package/cjs/internals/Picker/index.js +1 -4
  193. package/cjs/internals/Picker/utils.js +12 -12
  194. package/cjs/internals/{Picker → Tree}/TreeView.js +1 -1
  195. package/cjs/internals/Tree/index.d.ts +1 -0
  196. package/cjs/internals/Tree/index.js +8 -0
  197. package/cjs/internals/Tree/utils/filterNodesOfTree.d.ts +5 -0
  198. package/cjs/internals/Tree/utils/filterNodesOfTree.js +31 -0
  199. package/cjs/internals/Tree/utils/findNodeOfTree.d.ts +1 -0
  200. package/cjs/internals/Tree/utils/findNodeOfTree.js +26 -0
  201. package/cjs/internals/Tree/utils/getParentMap.d.ts +15 -0
  202. package/cjs/internals/Tree/utils/getParentMap.js +52 -0
  203. package/cjs/internals/Tree/utils/getPathTowardsItem.d.ts +4 -0
  204. package/cjs/internals/Tree/utils/getPathTowardsItem.js +16 -0
  205. package/cjs/internals/Tree/utils/index.d.ts +4 -0
  206. package/cjs/internals/Tree/utils/index.js +14 -0
  207. package/cjs/internals/Windowing/List.d.ts +1 -0
  208. package/cjs/internals/Windowing/List.js +5 -1
  209. package/cjs/internals/Windowing/index.d.ts +1 -1
  210. package/cjs/internals/Windowing/index.js +4 -2
  211. package/cjs/internals/hooks/index.d.ts +1 -0
  212. package/cjs/internals/hooks/index.js +8 -0
  213. package/cjs/internals/hooks/useFoucsVirtualListItem.d.ts +7 -0
  214. package/cjs/internals/hooks/useFoucsVirtualListItem.js +26 -0
  215. package/cjs/{utils → internals/utils}/getSafeRegExpString.d.ts +1 -1
  216. package/cjs/{utils → internals/utils}/getSafeRegExpString.js +1 -1
  217. package/cjs/internals/utils/index.d.ts +2 -0
  218. package/cjs/internals/utils/index.js +9 -0
  219. package/cjs/internals/utils/stringifyReactNode.d.ts +2 -0
  220. package/cjs/internals/utils/stringifyReactNode.js +17 -0
  221. package/cjs/utils/constants.d.ts +0 -2
  222. package/cjs/utils/constants.js +1 -6
  223. package/cjs/utils/getDataGroupBy.js +3 -3
  224. package/cjs/utils/index.d.ts +0 -3
  225. package/cjs/utils/index.js +1 -10
  226. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +2 -2
  227. package/dist/rsuite-no-reset-rtl.css +292 -300
  228. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  229. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  230. package/dist/rsuite-no-reset.css +294 -304
  231. package/dist/rsuite-no-reset.min.css +1 -1
  232. package/dist/rsuite-no-reset.min.css.map +1 -1
  233. package/dist/rsuite-rtl.css +293 -301
  234. package/dist/rsuite-rtl.min.css +1 -1
  235. package/dist/rsuite-rtl.min.css.map +1 -1
  236. package/dist/rsuite.css +295 -305
  237. package/dist/rsuite.js +611 -116
  238. package/dist/rsuite.js.map +1 -1
  239. package/dist/rsuite.min.css +1 -1
  240. package/dist/rsuite.min.css.map +1 -1
  241. package/dist/rsuite.min.js +1 -1
  242. package/dist/rsuite.min.js.map +1 -1
  243. package/esm/@types/common.d.ts +41 -4
  244. package/esm/AutoComplete/AutoComplete.js +2 -1
  245. package/esm/CascadeTree/CascadeTree.js +2 -1
  246. package/esm/CascadeTree/SearchView.js +6 -13
  247. package/esm/CascadeTree/hooks/usePaths.js +1 -1
  248. package/esm/CascadeTree/hooks/useSearch.js +2 -1
  249. package/esm/CascadeTree/utils.d.ts +0 -11
  250. package/esm/CascadeTree/utils.js +0 -22
  251. package/esm/Cascader/Cascader.js +2 -1
  252. package/esm/CheckPicker/CheckPicker.js +4 -7
  253. package/esm/CheckTree/CheckTree.d.ts +16 -0
  254. package/esm/CheckTree/CheckTree.js +105 -0
  255. package/esm/CheckTree/CheckTreeNode.d.ts +72 -0
  256. package/esm/CheckTree/CheckTreeNode.js +110 -0
  257. package/esm/CheckTree/CheckTreeView.d.ts +70 -0
  258. package/esm/CheckTree/CheckTreeView.js +304 -0
  259. package/esm/CheckTree/hooks/useTreeCheckState.d.ts +10 -0
  260. package/esm/CheckTree/hooks/useTreeCheckState.js +87 -0
  261. package/esm/CheckTree/hooks/useTreeNodeProps.d.ts +22 -0
  262. package/esm/CheckTree/hooks/useTreeNodeProps.js +52 -0
  263. package/esm/CheckTree/hooks/useTreeValue.d.ts +5 -0
  264. package/esm/CheckTree/hooks/useTreeValue.js +16 -0
  265. package/esm/CheckTree/index.d.ts +2 -14
  266. package/esm/CheckTree/index.js +1 -21
  267. package/esm/CheckTree/utils.d.ts +53 -0
  268. package/esm/{CheckTreePicker → CheckTree}/utils.js +72 -22
  269. package/esm/CheckTreePicker/CheckTreePicker.d.ts +30 -12
  270. package/esm/CheckTreePicker/CheckTreePicker.js +156 -607
  271. package/esm/CheckTreePicker/hooks/useFocusState.d.ts +16 -0
  272. package/esm/CheckTreePicker/hooks/useFocusState.js +37 -0
  273. package/esm/DatePicker/DatePicker.d.ts +4 -0
  274. package/esm/DatePicker/DatePicker.js +20 -5
  275. package/esm/DatePicker/types.d.ts +0 -4
  276. package/esm/DateRangePicker/DateRangePicker.d.ts +51 -23
  277. package/esm/DateRangePicker/DateRangePicker.js +71 -51
  278. package/esm/DateRangePicker/hooks/useDateDisabled.d.ts +16 -0
  279. package/esm/DateRangePicker/hooks/useDateDisabled.js +26 -0
  280. package/esm/DateRangePicker/types.d.ts +1 -0
  281. package/esm/Highlight/Highlight.d.ts +14 -0
  282. package/esm/Highlight/Highlight.js +52 -0
  283. package/esm/Highlight/index.d.ts +3 -0
  284. package/esm/Highlight/index.js +3 -0
  285. package/esm/Highlight/utils/highlightText.d.ts +5 -0
  286. package/esm/Highlight/utils/highlightText.js +25 -0
  287. package/esm/InputPicker/InputPicker.js +3 -7
  288. package/esm/MultiCascadeTree/SearchView.js +6 -14
  289. package/esm/MultiCascadeTree/hooks/useCascadeValue.js +15 -1
  290. package/esm/MultiCascadeTree/hooks/useColumnData.js +1 -1
  291. package/esm/MultiCascadeTree/hooks/useFlattenData.js +1 -1
  292. package/esm/MultiCascadeTree/hooks/useSearch.js +2 -1
  293. package/esm/MultiCascadeTree/utils.d.ts +4 -4
  294. package/esm/MultiCascadeTree/utils.js +18 -9
  295. package/esm/MultiCascader/MultiCascader.js +1 -1
  296. package/esm/SelectPicker/SelectPicker.js +2 -6
  297. package/esm/Tree/IndentLine.d.ts +3 -0
  298. package/esm/Tree/IndentLine.js +12 -0
  299. package/esm/Tree/Tree.d.ts +4 -92
  300. package/esm/Tree/Tree.js +78 -18
  301. package/esm/Tree/TreeNode.d.ts +101 -0
  302. package/esm/Tree/TreeNode.js +141 -0
  303. package/esm/Tree/TreeNodeToggle.d.ts +9 -0
  304. package/esm/Tree/TreeNodeToggle.js +50 -0
  305. package/esm/Tree/TreeProvider.d.ts +52 -0
  306. package/esm/Tree/TreeProvider.js +74 -0
  307. package/esm/Tree/TreeView.d.ts +68 -0
  308. package/esm/Tree/TreeView.js +299 -0
  309. package/esm/Tree/hooks/useExpandTree.d.ts +60 -0
  310. package/esm/Tree/hooks/useExpandTree.js +70 -0
  311. package/esm/Tree/hooks/useFlattenTree.d.ts +42 -0
  312. package/esm/Tree/hooks/useFlattenTree.js +92 -0
  313. package/esm/Tree/hooks/useFocusTree.d.ts +24 -0
  314. package/esm/Tree/hooks/useFocusTree.js +153 -0
  315. package/esm/Tree/hooks/useForceUpdate.d.ts +2 -0
  316. package/esm/Tree/hooks/useForceUpdate.js +11 -0
  317. package/esm/Tree/hooks/useTreeDrag.d.ts +32 -0
  318. package/esm/Tree/hooks/useTreeDrag.js +264 -0
  319. package/esm/Tree/hooks/useTreeNodeProps.d.ts +29 -0
  320. package/esm/Tree/hooks/useTreeNodeProps.js +76 -0
  321. package/esm/Tree/hooks/useTreeNodeRefs.d.ts +6 -0
  322. package/esm/Tree/hooks/useTreeNodeRefs.js +18 -0
  323. package/esm/Tree/hooks/useTreeSearch.d.ts +18 -0
  324. package/esm/Tree/hooks/useTreeSearch.js +69 -0
  325. package/esm/Tree/hooks/useTreeWithChildren.d.ts +14 -0
  326. package/esm/Tree/hooks/useTreeWithChildren.js +59 -0
  327. package/esm/Tree/hooks/useVirtualizedTreeData.d.ts +7 -0
  328. package/esm/Tree/hooks/useVirtualizedTreeData.js +77 -0
  329. package/esm/Tree/types.d.ts +257 -0
  330. package/esm/Tree/types.js +30 -0
  331. package/esm/Tree/utils/flattenTree.d.ts +25 -0
  332. package/esm/Tree/utils/flattenTree.js +88 -0
  333. package/esm/Tree/utils/focusableTree.d.ts +55 -0
  334. package/esm/Tree/utils/focusableTree.js +146 -0
  335. package/esm/Tree/utils/formatNodeRefKey.d.ts +4 -0
  336. package/esm/Tree/utils/formatNodeRefKey.js +7 -0
  337. package/esm/Tree/utils/getExpandItemValues.d.ts +11 -0
  338. package/esm/Tree/utils/getExpandItemValues.js +17 -0
  339. package/esm/Tree/utils/getNodeParentKeys.d.ts +5 -0
  340. package/esm/Tree/utils/getNodeParentKeys.js +17 -0
  341. package/esm/Tree/utils/getTreeActiveNode.d.ts +5 -0
  342. package/esm/Tree/utils/getTreeActiveNode.js +16 -0
  343. package/esm/Tree/utils/hasVisibleChildren.d.ts +5 -0
  344. package/esm/Tree/utils/hasVisibleChildren.js +12 -0
  345. package/esm/Tree/utils/indentTreeNode.d.ts +3 -0
  346. package/esm/Tree/utils/indentTreeNode.js +14 -0
  347. package/esm/Tree/utils/index.d.ts +11 -0
  348. package/esm/Tree/utils/index.js +14 -0
  349. package/esm/Tree/utils/isExpand.d.ts +6 -0
  350. package/esm/Tree/utils/isExpand.js +11 -0
  351. package/esm/Tree/utils/isSearching.d.ts +1 -0
  352. package/esm/Tree/utils/isSearching.js +5 -0
  353. package/esm/Tree/utils/treeKeyboardInteractions.d.ts +21 -0
  354. package/esm/Tree/utils/treeKeyboardInteractions.js +43 -0
  355. package/esm/TreePicker/TreePicker.d.ts +27 -21
  356. package/esm/TreePicker/TreePicker.js +158 -579
  357. package/esm/TreePicker/hooks/useFocusState.d.ts +20 -0
  358. package/esm/TreePicker/hooks/useFocusState.js +48 -0
  359. package/esm/index.d.ts +2 -0
  360. package/esm/index.js +1 -0
  361. package/esm/internals/Picker/Listbox.d.ts +40 -10
  362. package/esm/internals/Picker/Listbox.js +22 -16
  363. package/esm/internals/Picker/PickerIndicator.d.ts +2 -1
  364. package/esm/internals/Picker/PickerIndicator.js +7 -3
  365. package/esm/internals/Picker/hooks/useFocusItemValue.js +1 -1
  366. package/esm/internals/Picker/hooks/usePickerRef.d.ts +1 -4
  367. package/esm/internals/Picker/hooks/usePickerRef.js +3 -20
  368. package/esm/internals/Picker/index.d.ts +0 -1
  369. package/esm/internals/Picker/index.js +0 -1
  370. package/esm/internals/Picker/utils.js +1 -1
  371. package/esm/internals/{Picker → Tree}/TreeView.js +1 -1
  372. package/esm/internals/Tree/index.d.ts +1 -0
  373. package/esm/internals/Tree/index.js +2 -0
  374. package/esm/internals/Tree/utils/filterNodesOfTree.d.ts +5 -0
  375. package/esm/internals/Tree/utils/filterNodesOfTree.js +26 -0
  376. package/esm/internals/Tree/utils/findNodeOfTree.d.ts +1 -0
  377. package/esm/internals/Tree/utils/findNodeOfTree.js +22 -0
  378. package/esm/internals/Tree/utils/getParentMap.d.ts +15 -0
  379. package/esm/internals/Tree/utils/getParentMap.js +47 -0
  380. package/esm/internals/Tree/utils/getPathTowardsItem.d.ts +4 -0
  381. package/esm/internals/Tree/utils/getPathTowardsItem.js +12 -0
  382. package/esm/internals/Tree/utils/index.d.ts +4 -0
  383. package/esm/internals/Tree/utils/index.js +5 -0
  384. package/esm/internals/Windowing/List.d.ts +1 -0
  385. package/esm/internals/Windowing/List.js +3 -0
  386. package/esm/internals/Windowing/index.d.ts +1 -1
  387. package/esm/internals/Windowing/index.js +1 -1
  388. package/esm/internals/hooks/index.d.ts +1 -0
  389. package/esm/internals/hooks/index.js +2 -0
  390. package/esm/internals/hooks/useFoucsVirtualListItem.d.ts +7 -0
  391. package/esm/internals/hooks/useFoucsVirtualListItem.js +22 -0
  392. package/esm/{utils → internals/utils}/getSafeRegExpString.d.ts +1 -1
  393. package/esm/{utils → internals/utils}/getSafeRegExpString.js +1 -1
  394. package/esm/internals/utils/index.d.ts +2 -0
  395. package/esm/internals/utils/index.js +3 -0
  396. package/esm/internals/utils/stringifyReactNode.d.ts +2 -0
  397. package/esm/internals/utils/stringifyReactNode.js +12 -0
  398. package/esm/utils/constants.d.ts +0 -2
  399. package/esm/utils/constants.js +0 -3
  400. package/esm/utils/getDataGroupBy.js +1 -1
  401. package/esm/utils/index.d.ts +0 -3
  402. package/esm/utils/index.js +0 -3
  403. package/esm/utils/useIsomorphicLayoutEffect.d.ts +2 -2
  404. package/internals/Picker/styles/index.less +27 -1
  405. package/package.json +1 -1
  406. package/styles/color-modes/dark.less +5 -1
  407. package/styles/color-modes/high-contrast.less +8 -2
  408. package/styles/color-modes/light.less +10 -5
  409. package/styles/index.less +1 -0
  410. package/TreePicker/styles/mixin.less +0 -7
  411. package/cjs/CheckTreePicker/CheckTreeNode.d.ts +0 -28
  412. package/cjs/CheckTreePicker/CheckTreeNode.js +0 -140
  413. package/cjs/CheckTreePicker/utils.d.ts +0 -44
  414. package/cjs/Tree/TreeContext.d.ts +0 -6
  415. package/cjs/Tree/TreeContext.js +0 -10
  416. package/cjs/TreePicker/TreeNode.d.ts +0 -36
  417. package/cjs/TreePicker/TreeNode.js +0 -174
  418. package/cjs/utils/appendTooltip.d.ts +0 -10
  419. package/cjs/utils/appendTooltip.js +0 -20
  420. package/cjs/utils/stringToObject.d.ts +0 -2
  421. package/cjs/utils/stringToObject.js +0 -19
  422. package/cjs/utils/treeUtils.d.ts +0 -304
  423. package/cjs/utils/treeUtils.js +0 -1095
  424. package/esm/CheckTreePicker/CheckTreeNode.d.ts +0 -28
  425. package/esm/CheckTreePicker/CheckTreeNode.js +0 -133
  426. package/esm/CheckTreePicker/utils.d.ts +0 -44
  427. package/esm/Tree/TreeContext.d.ts +0 -6
  428. package/esm/Tree/TreeContext.js +0 -4
  429. package/esm/TreePicker/TreeNode.d.ts +0 -36
  430. package/esm/TreePicker/TreeNode.js +0 -167
  431. package/esm/utils/appendTooltip.d.ts +0 -10
  432. package/esm/utils/appendTooltip.js +0 -15
  433. package/esm/utils/stringToObject.d.ts +0 -2
  434. package/esm/utils/stringToObject.js +0 -14
  435. package/esm/utils/treeUtils.d.ts +0 -304
  436. package/esm/utils/treeUtils.js +0 -1043
  437. /package/cjs/internals/{Picker → Tree}/TreeView.d.ts +0 -0
  438. /package/esm/internals/{Picker → Tree}/TreeView.d.ts +0 -0
@@ -0,0 +1,299 @@
1
+ 'use client';
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
+ import React, { useEffect, useMemo } from 'react';
5
+ import isNil from 'lodash/isNil';
6
+ import { List, AutoSizer, defaultItemSize } from '../internals/Windowing';
7
+ import TreeViewNode from './TreeNode';
8
+ import IndentLine from './IndentLine';
9
+ import { getPathTowardsItem, getKeyParentMap } from '../internals/Tree/utils';
10
+ import { useClassNames, useCustom, useEventCallback } from '../utils';
11
+ import { isExpand, hasVisibleChildren, getActiveItem } from './utils';
12
+ import { onMenuKeyDown } from '../internals/Picker';
13
+ import { TreeView as BaseTreeView } from '../internals/Tree';
14
+ import useTreeSearch from './hooks/useTreeSearch';
15
+ import useTreeDrag from './hooks/useTreeDrag';
16
+ import useFocusTree from './hooks/useFocusTree';
17
+ import useVirtualizedTreeData from './hooks/useVirtualizedTreeData';
18
+ import useTreeNodeProps from './hooks/useTreeNodeProps';
19
+ import SearchBox from '../internals/SearchBox';
20
+ import { useItemDataKeys } from './TreeProvider';
21
+
22
+ /**
23
+ * Props for the TreeViewInner component.
24
+ */
25
+ /**
26
+ * Represents the props for the TreeView component.
27
+ */
28
+ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
29
+ var _props$as = props.as,
30
+ Component = _props$as === void 0 ? 'div' : _props$as,
31
+ _props$data = props.data,
32
+ data = _props$data === void 0 ? [] : _props$data,
33
+ style = props.style,
34
+ showIndentLine = props.showIndentLine,
35
+ valueProp = props.value,
36
+ overrideLocale = props.locale,
37
+ _props$height = props.height,
38
+ height = _props$height === void 0 ? 360 : _props$height,
39
+ className = props.className,
40
+ _props$searchable = props.searchable,
41
+ searchable = _props$searchable === void 0 ? false : _props$searchable,
42
+ _props$virtualized = props.virtualized,
43
+ virtualized = _props$virtualized === void 0 ? false : _props$virtualized,
44
+ _props$classPrefix = props.classPrefix,
45
+ classPrefix = _props$classPrefix === void 0 ? 'tree' : _props$classPrefix,
46
+ searchKeyword = props.searchKeyword,
47
+ searchBy = props.searchBy,
48
+ draggable = props.draggable,
49
+ _props$disabledItemVa = props.disabledItemValues,
50
+ disabledItemValues = _props$disabledItemVa === void 0 ? [] : _props$disabledItemVa,
51
+ _props$loadingNodeVal = props.loadingNodeValues,
52
+ loadingNodeValues = _props$loadingNodeVal === void 0 ? [] : _props$loadingNodeVal,
53
+ _props$flattenedNodes = props.flattenedNodes,
54
+ flattenedNodes = _props$flattenedNodes === void 0 ? {} : _props$flattenedNodes,
55
+ listProps = props.listProps,
56
+ listRef = props.listRef,
57
+ searchInputRef = props.searchInputRef,
58
+ _props$expandItemValu = props.expandItemValues,
59
+ expandItemValues = _props$expandItemValu === void 0 ? [] : _props$expandItemValu,
60
+ onSearch = props.onSearch,
61
+ onSelect = props.onSelect,
62
+ onSelectItem = props.onSelectItem,
63
+ onChange = props.onChange,
64
+ onDragEnd = props.onDragEnd,
65
+ onDragStart = props.onDragStart,
66
+ onDragEnter = props.onDragEnter,
67
+ onDragLeave = props.onDragLeave,
68
+ onDragOver = props.onDragOver,
69
+ onDrop = props.onDrop,
70
+ onExpand = props.onExpand,
71
+ onFocusItem = props.onFocusItem,
72
+ onScroll = props.onScroll,
73
+ rest = _objectWithoutPropertiesLoose(props, ["as", "data", "style", "showIndentLine", "value", "locale", "height", "className", "searchable", "virtualized", "classPrefix", "searchKeyword", "searchBy", "draggable", "disabledItemValues", "loadingNodeValues", "flattenedNodes", "listProps", "listRef", "searchInputRef", "expandItemValues", "onSearch", "onSelect", "onSelectItem", "onChange", "onDragEnd", "onDragStart", "onDragEnter", "onDragLeave", "onDragOver", "onDrop", "onExpand", "onFocusItem", "onScroll"]);
74
+ var _useCustom = useCustom('Picker', overrideLocale),
75
+ locale = _useCustom.locale;
76
+ var _useItemDataKeys = useItemDataKeys(),
77
+ valueKey = _useItemDataKeys.valueKey,
78
+ childrenKey = _useItemDataKeys.childrenKey;
79
+ var _useClassNames = useClassNames(classPrefix),
80
+ prefix = _useClassNames.prefix,
81
+ merge = _useClassNames.merge,
82
+ withClassPrefix = _useClassNames.withClassPrefix;
83
+ var handleSearchCallback = useEventCallback(function (value, _data, event) {
84
+ onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
85
+ });
86
+ var _useTreeSearch = useTreeSearch({
87
+ callback: handleSearchCallback,
88
+ searchKeyword: searchKeyword,
89
+ data: data,
90
+ searchBy: searchBy
91
+ }),
92
+ filteredData = _useTreeSearch.filteredData,
93
+ keyword = _useTreeSearch.keyword,
94
+ setFilteredData = _useTreeSearch.setFilteredData,
95
+ handleSearch = _useTreeSearch.handleSearch;
96
+ var transformation = useVirtualizedTreeData(flattenedNodes, filteredData, {
97
+ expandItemValues: expandItemValues,
98
+ searchKeyword: keyword
99
+ });
100
+ var getFormattedNodes = function getFormattedNodes(render) {
101
+ if (virtualized) {
102
+ return transformation().filter(function (n) {
103
+ return n.visible;
104
+ });
105
+ }
106
+ return filteredData.map(function (dataItem, index) {
107
+ return render === null || render === void 0 ? void 0 : render(dataItem, index, 1);
108
+ }).filter(function (n) {
109
+ return n;
110
+ });
111
+ };
112
+ useEffect(function () {
113
+ setFilteredData(data, keyword);
114
+ }, [data, keyword, setFilteredData]);
115
+
116
+ // TODO-Doma
117
+ // Replace `getKeyParentMap` with `getParentMap`
118
+ var itemParentMap = useMemo(function () {
119
+ return getKeyParentMap(data, function (node) {
120
+ return node[valueKey];
121
+ }, function (node) {
122
+ return node[childrenKey];
123
+ });
124
+ }, [childrenKey, data, valueKey]);
125
+ var _useFocusTree = useFocusTree({
126
+ filteredData: filteredData,
127
+ disabledItemValues: disabledItemValues,
128
+ expandItemValues: expandItemValues,
129
+ searchKeyword: keyword,
130
+ flattenedNodes: flattenedNodes,
131
+ onFocused: onFocusItem,
132
+ onExpand: onExpand
133
+ }),
134
+ focusItemValue = _useFocusTree.focusItemValue,
135
+ setFocusItemValue = _useFocusTree.setFocusItemValue,
136
+ onTreeKeydown = _useFocusTree.onTreeKeydown,
137
+ treeNodesRefs = _useFocusTree.treeNodesRefs,
138
+ saveTreeNodeRef = _useFocusTree.saveTreeNodeRef,
139
+ treeViewRef = _useFocusTree.treeViewRef;
140
+ var _useTreeDrag = useTreeDrag({
141
+ flattenedNodes: flattenedNodes,
142
+ treeNodesRefs: treeNodesRefs,
143
+ draggable: draggable,
144
+ onDragStart: onDragStart,
145
+ onDragEnter: onDragEnter,
146
+ onDragOver: onDragOver,
147
+ onDragLeave: onDragLeave,
148
+ onDragEnd: onDragEnd,
149
+ onDrop: onDrop,
150
+ prefix: prefix
151
+ }),
152
+ dragNode = _useTreeDrag.dragNode,
153
+ dragOverNodeKey = _useTreeDrag.dragOverNodeKey,
154
+ dropNodePosition = _useTreeDrag.dropNodePosition,
155
+ dragEvents = _useTreeDrag.dragEvents;
156
+ var getTreeNodeProps = useTreeNodeProps({
157
+ value: valueProp,
158
+ disabledItemValues: disabledItemValues,
159
+ loadingNodeValues: loadingNodeValues,
160
+ focusItemValue: focusItemValue,
161
+ keyword: keyword,
162
+ dragNode: dragNode,
163
+ dragOverNodeKey: dragOverNodeKey,
164
+ dropNodePosition: dropNodePosition
165
+ });
166
+ var handleSelect = useEventCallback(function (nodeData, event) {
167
+ if (!nodeData) {
168
+ return;
169
+ }
170
+ var nextValue = nodeData[valueKey];
171
+ var path = getPathTowardsItem(nodeData, function (item) {
172
+ return itemParentMap.get(item[valueKey]);
173
+ });
174
+ setFocusItemValue(nextValue);
175
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
176
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(nodeData, nextValue, event);
177
+ onSelectItem === null || onSelectItem === void 0 ? void 0 : onSelectItem(nodeData, path);
178
+ });
179
+ var selectActiveItem = useEventCallback(function (event) {
180
+ if (isNil(focusItemValue)) return;
181
+ var activeItem = getActiveItem(focusItemValue, flattenedNodes, valueKey);
182
+ handleSelect(activeItem, event);
183
+ });
184
+ var handleTreeKeyDown = useEventCallback(function (event) {
185
+ onTreeKeydown(event);
186
+ onMenuKeyDown(event, {
187
+ enter: selectActiveItem
188
+ });
189
+ });
190
+ var renderNode = function renderNode(node, index, layer) {
191
+ var visible = node.visible;
192
+ if (!visible) {
193
+ return null;
194
+ }
195
+ var children = node[childrenKey];
196
+ var expanded = isExpand(keyword, expandItemValues.includes(node[valueKey]));
197
+ var hasChildren = keyword ? hasVisibleChildren(node, childrenKey) : Boolean(children);
198
+ var nodeProps = _extends({}, getTreeNodeProps(node, layer, index), dragEvents, {
199
+ expanded: expanded,
200
+ draggable: draggable,
201
+ onExpand: onExpand,
202
+ onSelect: handleSelect,
203
+ hasChildren: hasChildren
204
+ });
205
+ if (hasChildren) {
206
+ var _merge;
207
+ layer += 1;
208
+ var childClassName = merge(prefix('node-children'), (_merge = {}, _merge[prefix('node-expanded')] = expanded, _merge));
209
+ return /*#__PURE__*/React.createElement("div", {
210
+ className: childClassName,
211
+ key: node[valueKey]
212
+ }, /*#__PURE__*/React.createElement(TreeViewNode, _extends({}, nodeProps, {
213
+ ref: function ref(_ref) {
214
+ return saveTreeNodeRef(_ref, node.refKey);
215
+ }
216
+ })), /*#__PURE__*/React.createElement("div", {
217
+ className: prefix('group'),
218
+ role: "group"
219
+ }, children === null || children === void 0 ? void 0 : children.map(function (child, i) {
220
+ return renderNode(child, i, layer);
221
+ }), showIndentLine && /*#__PURE__*/React.createElement(IndentLine, null)));
222
+ }
223
+ return /*#__PURE__*/React.createElement(TreeViewNode, _extends({
224
+ ref: function ref(_ref2) {
225
+ return saveTreeNodeRef(_ref2, node.refKey);
226
+ },
227
+ key: node[valueKey]
228
+ }, nodeProps));
229
+ };
230
+ var renderVirtualListNode = function renderVirtualListNode(_ref3) {
231
+ var index = _ref3.index,
232
+ style = _ref3.style,
233
+ data = _ref3.data;
234
+ var node = data[index];
235
+ var layer = node.layer,
236
+ visible = node.visible,
237
+ hasChildren = node.hasChildren;
238
+ var expanded = isExpand(keyword, expandItemValues.includes(node[valueKey]));
239
+ if (!visible) {
240
+ return null;
241
+ }
242
+ var treeNodeProps = _extends({}, getTreeNodeProps(node, layer), dragEvents, {
243
+ expanded: expanded,
244
+ style: style,
245
+ onExpand: onExpand,
246
+ onSelect: handleSelect,
247
+ hasChildren: hasChildren
248
+ });
249
+ return visible && /*#__PURE__*/React.createElement(TreeViewNode, _extends({
250
+ ref: function ref(_ref4) {
251
+ return saveTreeNodeRef(_ref4, node.refKey);
252
+ }
253
+ }, treeNodeProps));
254
+ };
255
+ var classes = merge(withClassPrefix({
256
+ virtualized: virtualized
257
+ }), className);
258
+ var formattedNodes = getFormattedNodes(renderNode);
259
+ return /*#__PURE__*/React.createElement(Component, {
260
+ ref: ref,
261
+ className: classes,
262
+ style: style
263
+ }, searchable ? /*#__PURE__*/React.createElement(SearchBox, {
264
+ placeholder: locale.searchPlaceholder,
265
+ onChange: handleSearch,
266
+ value: keyword,
267
+ inputRef: searchInputRef
268
+ }) : null, keyword && formattedNodes.length === 0 ? /*#__PURE__*/React.createElement("div", {
269
+ className: prefix('empty')
270
+ }, locale.noResultsText) : null, /*#__PURE__*/React.createElement(BaseTreeView, _extends({}, rest, {
271
+ ref: treeViewRef,
272
+ treeRootClassName: prefix('root'),
273
+ onScroll: onScroll,
274
+ onKeyDown: handleTreeKeyDown,
275
+ className: prefix('view'),
276
+ style: virtualized ? undefined : {
277
+ height: height
278
+ }
279
+ }), virtualized ? /*#__PURE__*/React.createElement(AutoSizer, {
280
+ defaultHeight: height,
281
+ style: {
282
+ width: 'auto',
283
+ height: 'auto'
284
+ },
285
+ className: prefix('virt-auto-sizer')
286
+ }, function (_ref5) {
287
+ var height = _ref5.height;
288
+ return /*#__PURE__*/React.createElement(List, _extends({
289
+ ref: listRef,
290
+ height: height,
291
+ itemSize: defaultItemSize,
292
+ itemCount: formattedNodes.length,
293
+ itemData: formattedNodes,
294
+ className: prefix('virt-list')
295
+ }, listProps), renderVirtualListNode);
296
+ }) : formattedNodes));
297
+ });
298
+ TreeView.displayName = 'TreeView';
299
+ export default TreeView;
@@ -0,0 +1,60 @@
1
+ import type { TreeNode } from '../types';
2
+ interface DefaultExpandItemValuesOptions {
3
+ valueKey: string;
4
+ defaultExpandAll: boolean;
5
+ childrenKey: string;
6
+ defaultExpandItemValues?: any[];
7
+ }
8
+ export declare function getDefaultExpandItemValues<TItem>(data: TItem[], options: DefaultExpandItemValuesOptions): any[];
9
+ interface UseExpandTreeProps<T extends TreeNode> {
10
+ /**
11
+ * Specifies whether all tree nodes should be expanded by default.
12
+ */
13
+ defaultExpandAll: boolean;
14
+ /**
15
+ * The key used to access the value of a tree node.
16
+ */
17
+ valueKey: string;
18
+ /**
19
+ * The key used to access the children of a tree node.
20
+ */
21
+ childrenKey: string;
22
+ /**
23
+ * An array of values that should be expanded by default.
24
+ */
25
+ defaultExpandItemValues: any[];
26
+ /**
27
+ * An optional array of values that control the expanded items.
28
+ */
29
+ controlledExpandItemValues?: any[];
30
+ /**
31
+ * A callback function that is called when the tree is expanded.
32
+ *
33
+ * @param expandItemValues - The expanded item values.
34
+ * @param activeNode - The active tree node.
35
+ * @param concat - A function to concatenate the data and children of a tree node.
36
+ */
37
+ onExpand?: (expandItemValues: T[], activeNode: T, concat: (data: T[], children: T[]) => T[]) => void;
38
+ /**
39
+ * A function that returns the children of a tree node.
40
+ *
41
+ * @param node - The tree node.
42
+ * @returns The children of the tree node.
43
+ */
44
+ getChildren?: (node: T) => T[] | Promise<T[]>;
45
+ /**
46
+ * A function that appends a child to a tree node.
47
+ *
48
+ * @param node - The tree node.
49
+ * @param getChildren - A function that returns the children of a tree node.
50
+ */
51
+ appendChild: (node: T, getChildren: (node: T) => T[] | Promise<T[]>) => void;
52
+ }
53
+ /**
54
+ * Custom hook for managing tree expansion state.
55
+ */
56
+ declare function useExpandTree(data: TreeNode[], props: UseExpandTreeProps<TreeNode>): {
57
+ expandItemValues: any[];
58
+ handleExpandTreeNode: (...args: any[]) => any;
59
+ };
60
+ export default useExpandTree;
@@ -0,0 +1,70 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ import isFunction from 'lodash/isFunction';
4
+ import { useControlled, useEventCallback } from '../../utils';
5
+ import { createConcatChildrenFunction } from '../../internals/Picker';
6
+ import { getExpandItemValues, flattenTree } from '../utils';
7
+ export function getDefaultExpandItemValues(data, options) {
8
+ var valueKey = options.valueKey,
9
+ defaultExpandAll = options.defaultExpandAll,
10
+ childrenKey = options.childrenKey,
11
+ _options$defaultExpan = options.defaultExpandItemValues,
12
+ defaultExpandItemValues = _options$defaultExpan === void 0 ? [] : _options$defaultExpan;
13
+ if (defaultExpandAll) {
14
+ return flattenTree(data, function (item) {
15
+ return item[childrenKey] || [];
16
+ }).filter(function (item) {
17
+ return Array.isArray(item[childrenKey]) && item[childrenKey].length > 0;
18
+ }).map(function (item) {
19
+ return item[valueKey];
20
+ });
21
+ }
22
+ return defaultExpandItemValues;
23
+ }
24
+ /**
25
+ * Custom hook for managing tree expansion state.
26
+ */
27
+ function useExpandTree(data, props) {
28
+ var defaultExpandAll = props.defaultExpandAll,
29
+ valueKey = props.valueKey,
30
+ childrenKey = props.childrenKey,
31
+ defaultExpandItemValues = props.defaultExpandItemValues,
32
+ controlledExpandItemValues = props.controlledExpandItemValues,
33
+ onExpand = props.onExpand,
34
+ getChildren = props.getChildren,
35
+ appendChild = props.appendChild;
36
+ var _useControlled = useControlled(controlledExpandItemValues, getDefaultExpandItemValues(data, {
37
+ defaultExpandAll: defaultExpandAll,
38
+ valueKey: valueKey,
39
+ childrenKey: childrenKey,
40
+ defaultExpandItemValues: defaultExpandItemValues
41
+ })),
42
+ expandItemValues = _useControlled[0],
43
+ setExpandItemValues = _useControlled[1];
44
+ useEffect(function () {
45
+ if (Array.isArray(controlledExpandItemValues)) {
46
+ setExpandItemValues(controlledExpandItemValues);
47
+ }
48
+ }, [controlledExpandItemValues, setExpandItemValues]);
49
+ var handleExpandTreeNode = useEventCallback(function (node, expanded) {
50
+ var nextExpandItemValues = getExpandItemValues({
51
+ node: node,
52
+ isExpand: !expanded,
53
+ expandItemValues: expandItemValues,
54
+ valueKey: valueKey
55
+ });
56
+ setExpandItemValues(nextExpandItemValues);
57
+ onExpand === null || onExpand === void 0 ? void 0 : onExpand(nextExpandItemValues, node, createConcatChildrenFunction(node, node[valueKey], {
58
+ valueKey: valueKey,
59
+ childrenKey: childrenKey
60
+ }));
61
+ if (isFunction(getChildren) && !node.expand && Array.isArray(node[childrenKey]) && node[childrenKey].length === 0) {
62
+ appendChild(node, getChildren);
63
+ }
64
+ });
65
+ return {
66
+ expandItemValues: expandItemValues,
67
+ handleExpandTreeNode: handleExpandTreeNode
68
+ };
69
+ }
70
+ export default useExpandTree;
@@ -0,0 +1,42 @@
1
+ import type { TreeNode, TreeNodeMap } from '../types';
2
+ interface UseFlattenTreeOptions {
3
+ /**
4
+ * The value of the tree.
5
+ */
6
+ value?: any;
7
+ /**
8
+ * Specifies whether the tree supports multiple selection.
9
+ */
10
+ multiple?: boolean;
11
+ /**
12
+ * The key used to access the label property of each tree node.
13
+ */
14
+ labelKey: string;
15
+ /**
16
+ * The key used to access the value property of each tree node.
17
+ */
18
+ valueKey: string;
19
+ /**
20
+ * The key used to access the children property of each tree node.
21
+ */
22
+ childrenKey: string;
23
+ /**
24
+ * Specifies whether the tree should cascade the selection to child nodes.
25
+ */
26
+ cascade?: boolean;
27
+ /**
28
+ * An array of item values that should not be selectable.
29
+ */
30
+ uncheckableItemValues?: any[];
31
+ /**
32
+ * A callback function that will be called when the tree nodes change.
33
+ * It receives a map of the tree nodes.
34
+ */
35
+ callback?: (nodes: TreeNodeMap) => void;
36
+ }
37
+ /**
38
+ * Custom hook that flattens a tree data structure into a map of nodes.
39
+ *
40
+ */
41
+ declare function useFlattenTree(data: TreeNode[], options: UseFlattenTreeOptions): TreeNodeMap;
42
+ export default useFlattenTree;
@@ -0,0 +1,92 @@
1
+ 'use client';
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import { useCallback, useRef, useEffect } from 'react';
4
+ import omit from 'lodash/omit';
5
+ import isNil from 'lodash/isNil';
6
+ import shallowEqual from '../../utils/shallowEqual';
7
+ import { formatNodeRefKey } from '../utils';
8
+ import useForceUpdate from './useForceUpdate';
9
+ /**
10
+ * Custom hook that flattens a tree data structure into a map of nodes.
11
+ *
12
+ */
13
+ function useFlattenTree(data, options) {
14
+ var value = options.value,
15
+ labelKey = options.labelKey,
16
+ valueKey = options.valueKey,
17
+ childrenKey = options.childrenKey,
18
+ _options$uncheckableI = options.uncheckableItemValues,
19
+ uncheckableItemValues = _options$uncheckableI === void 0 ? [] : _options$uncheckableI,
20
+ cascade = options.cascade,
21
+ multiple = options.multiple,
22
+ callback = options.callback;
23
+ var forceUpdate = useForceUpdate();
24
+ var flattenedNodes = useRef({});
25
+ var updateTreeNodeCheckState = useCallback(function (value) {
26
+ if (value === void 0) {
27
+ value = [];
28
+ }
29
+ // Reset values to false
30
+ Object.keys(flattenedNodes.current).forEach(function (refKey) {
31
+ var node = flattenedNodes.current[refKey];
32
+ if (cascade && !isNil(node.parent) && !isNil(node.parent.refKey)) {
33
+ node.check = flattenedNodes.current[node.parent.refKey].check;
34
+ } else {
35
+ node.check = false;
36
+ }
37
+ value.forEach(function (nodeVal) {
38
+ if (shallowEqual(flattenedNodes.current[refKey][valueKey], nodeVal) && !uncheckableItemValues.some(function (uncheckableValue) {
39
+ return shallowEqual(nodeVal, uncheckableValue);
40
+ })) {
41
+ flattenedNodes.current[refKey].check = true;
42
+ }
43
+ });
44
+ });
45
+ }, [cascade, uncheckableItemValues, valueKey]);
46
+ var flattenTreeData = useCallback(function (treeData, parent, layer) {
47
+ if (layer === void 0) {
48
+ layer = 1;
49
+ }
50
+ if (!Array.isArray(treeData) || treeData.length === 0) {
51
+ return [];
52
+ }
53
+ treeData.map(function (node) {
54
+ var _extends2;
55
+ var value = node[valueKey];
56
+ /**
57
+ * because the value of the node's type is string or number,
58
+ * so it can used as the key of the object directly
59
+ * to avoid number value is converted to string. 1 and '1' will be convert to '1'
60
+ * we used `String_` or `Number_` prefix
61
+ */
62
+ var refKey = formatNodeRefKey(value);
63
+ node.refKey = refKey;
64
+ flattenedNodes.current[refKey] = _extends((_extends2 = {
65
+ layer: layer
66
+ }, _extends2[labelKey] = node[labelKey], _extends2[valueKey] = node[valueKey], _extends2.uncheckable = uncheckableItemValues.some(function (value) {
67
+ return shallowEqual(node[valueKey], value);
68
+ }), _extends2), node);
69
+ if (parent) {
70
+ flattenedNodes.current[refKey].parent = omit(parent, 'parent', 'children');
71
+ }
72
+ flattenTreeData(node[childrenKey], node, layer + 1);
73
+ });
74
+ callback === null || callback === void 0 ? void 0 : callback(flattenedNodes.current);
75
+ forceUpdate();
76
+ }, [callback, forceUpdate, valueKey, labelKey, uncheckableItemValues, childrenKey]);
77
+ useEffect(function () {
78
+ // when data is changed, should clear the flattenedNodes, avoid duplicate keys
79
+ flattenedNodes.current = {};
80
+ flattenTreeData(data);
81
+ }, [data]); // eslint-disable-line react-hooks/exhaustive-deps
82
+
83
+ useEffect(function () {
84
+ if (multiple) {
85
+ updateTreeNodeCheckState(value);
86
+ forceUpdate();
87
+ }
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [value]);
90
+ return flattenedNodes.current;
91
+ }
92
+ export default useFlattenTree;
@@ -0,0 +1,24 @@
1
+ /// <reference types="react" />
2
+ import type { TreeNode } from '../types';
3
+ interface UseFocusTreeProps<T extends TreeNode> {
4
+ filteredData: T[];
5
+ disabledItemValues: any[];
6
+ expandItemValues: any[];
7
+ searchKeyword: string;
8
+ flattenedNodes: any;
9
+ onExpand?: (nodeData: T, expanded: boolean) => void;
10
+ onFocused?: (value: TreeNode['value']) => void;
11
+ }
12
+ /**
13
+ * Custom hook that manages the focus behavior of a tree component.
14
+ */
15
+ declare function useFocusTree(props: UseFocusTreeProps<TreeNode>): {
16
+ treeViewRef: import("react").RefObject<HTMLDivElement>;
17
+ focusTreeFirstNode: (...args: any[]) => any;
18
+ focusItemValue: string | number | null | undefined;
19
+ treeNodesRefs: {};
20
+ saveTreeNodeRef: (ref: import("react").Ref<any>, refKey?: string | undefined) => void;
21
+ setFocusItemValue: import("react").Dispatch<import("react").SetStateAction<string | number | null | undefined>>;
22
+ onTreeKeydown: (...args: any[]) => any;
23
+ };
24
+ export default useFocusTree;