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
@@ -1,1043 +0,0 @@
1
- 'use client';
2
- import _extends from "@babel/runtime/helpers/esm/extends";
3
- import _isEmpty from "lodash/isEmpty";
4
- import _clone from "lodash/clone";
5
- import _isNil from "lodash/isNil";
6
- import _isArray from "lodash/isArray";
7
- import _omit from "lodash/omit";
8
- import _isUndefined from "lodash/isUndefined";
9
- import _intersection from "lodash/intersection";
10
- function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13
- import React, { useRef, useState, useEffect, useCallback } from 'react';
14
- import shallowEqualArray from '../utils/shallowEqualArray';
15
- import { getNodeCheckState } from '../CheckTreePicker/utils';
16
- import { TREE_NODE_DROP_POSITION, shallowEqual } from '../utils';
17
- import { shouldDisplay } from '../internals/Picker';
18
- import reactToString from './reactToString';
19
- import { TREE_NODE_PADDING, TREE_NODE_ROOT_PADDING } from './constants';
20
- import { attachParent } from './attachParent';
21
- // gap of tree node
22
- var TREE_NODE_GAP = 4;
23
-
24
- /**
25
- * according node parentNode expand state decide node whether to show
26
- * @param {*} expandItemValues
27
- * @param {*} parentKeys
28
- */
29
- export function shouldShowNodeByParentExpanded(expandItemValues, parentKeys) {
30
- if (expandItemValues === void 0) {
31
- expandItemValues = [];
32
- }
33
- if (parentKeys === void 0) {
34
- parentKeys = [];
35
- }
36
- var intersectionKeys = _intersection(expandItemValues, parentKeys);
37
- if (intersectionKeys.length === parentKeys.length) {
38
- return true;
39
- }
40
- return false;
41
- }
42
-
43
- /**
44
- * flatten tree structure to array
45
- * @param {*} tree
46
- * @param {*} childrenKey
47
- * @param {*} executor
48
- *
49
- * @deprecated This {@link UNSAFE_flattenTree} function is considered unsafe because it mutates `tree` argument in-place
50
- * Use {@link flattenTree} instead.
51
- */
52
- export function UNSAFE_flattenTree(tree, childrenKey, executor) {
53
- if (childrenKey === void 0) {
54
- childrenKey = 'children';
55
- }
56
- var flattenData = [];
57
- var traverse = function traverse(data, parent) {
58
- if (!_isArray(data)) {
59
- return;
60
- }
61
- data.forEach(function (item, index) {
62
- var node = typeof executor === 'function' ? executor(item, index) : item;
63
- flattenData.push(attachParent(node, parent));
64
- if (item[childrenKey]) {
65
- traverse(item[childrenKey], item);
66
- }
67
- });
68
- };
69
- traverse(tree, null);
70
- return flattenData;
71
- }
72
- export var WalkTreeStrategy;
73
- (function (WalkTreeStrategy) {
74
- WalkTreeStrategy[WalkTreeStrategy["DFS"] = 0] = "DFS";
75
- WalkTreeStrategy[WalkTreeStrategy["BFS"] = 1] = "BFS";
76
- })(WalkTreeStrategy || (WalkTreeStrategy = {}));
77
- export function flattenTree(rootNodes, getChildren, walkStrategy) {
78
- if (walkStrategy === void 0) {
79
- walkStrategy = WalkTreeStrategy.BFS;
80
- }
81
- var result = [];
82
- if (walkStrategy === WalkTreeStrategy.BFS) {
83
- walkTreeBfs(rootNodes, getChildren, function (node) {
84
- return result.push(node);
85
- });
86
- } else if (walkStrategy === WalkTreeStrategy.DFS) {
87
- walkTreeDfs(rootNodes, getChildren, function (node) {
88
- return result.push(node);
89
- });
90
- }
91
- return result;
92
- }
93
- export function walkTreeBfs(rootNodes, getChildren, callback) {
94
- for (var queue = [].concat(rootNodes); queue.length > 0;) {
95
- var _node = queue.shift();
96
- callback(_node);
97
- var children = getChildren(_node);
98
- if (children) {
99
- queue.push.apply(queue, children);
100
- }
101
- }
102
- }
103
- export function walkTreeDfs(rootNodes, getChildren, callback) {
104
- for (var _iterator = _createForOfIteratorHelperLoose(rootNodes), _step; !(_step = _iterator()).done;) {
105
- var _node2 = _step.value;
106
- callback(_node2);
107
- var children = getChildren(_node2);
108
- if (children) {
109
- walkTreeDfs(children, getChildren, callback);
110
- }
111
- }
112
- }
113
-
114
- /**
115
- * get all ancestor nodes of given node
116
- * @param {*} node
117
- */
118
- export function getNodeParents(node, parentKey, valueKey) {
119
- if (parentKey === void 0) {
120
- parentKey = 'parent';
121
- }
122
- var parents = [];
123
- var traverse = function traverse(node) {
124
- if (node !== null && node !== void 0 && node[parentKey]) {
125
- traverse(node[parentKey]);
126
- if (valueKey) {
127
- parents.push(node[parentKey][valueKey]);
128
- } else {
129
- parents.push(node[parentKey]);
130
- }
131
- }
132
- };
133
- traverse(node);
134
- return parents;
135
- }
136
-
137
- /**
138
- * get all parentKeys of given node
139
- * @param nodes
140
- * @param node
141
- * @param valueKey
142
- */
143
- export function getNodeParentKeys(nodes, node, valueKey) {
144
- var parentKeys = [];
145
- var traverse = function traverse(node) {
146
- var _node$parent;
147
- if (node !== null && node !== void 0 && (_node$parent = node.parent) !== null && _node$parent !== void 0 && _node$parent.refKey) {
148
- var _node$parent2;
149
- traverse(nodes[node.parent.refKey]);
150
- parentKeys.push(node === null || node === void 0 ? void 0 : (_node$parent2 = node.parent) === null || _node$parent2 === void 0 ? void 0 : _node$parent2[valueKey]);
151
- }
152
- };
153
- traverse(node);
154
- return parentKeys;
155
- }
156
- export function hasVisibleChildren(node, childrenKey) {
157
- if (!Array.isArray(node[childrenKey])) {
158
- return false;
159
- }
160
- return node[childrenKey].some(function (child) {
161
- return child.visible;
162
- });
163
- }
164
-
165
- /**
166
- * shallow equal array
167
- * @param a
168
- * @param b
169
- */
170
- export function compareArray(a, b) {
171
- return _isArray(a) && _isArray(b) && !shallowEqualArray(a, b);
172
- }
173
- export function getDefaultExpandItemValues(data, props) {
174
- var valueKey = props.valueKey,
175
- defaultExpandAll = props.defaultExpandAll,
176
- childrenKey = props.childrenKey,
177
- _props$defaultExpandI = props.defaultExpandItemValues,
178
- defaultExpandItemValues = _props$defaultExpandI === void 0 ? [] : _props$defaultExpandI;
179
- if (defaultExpandAll) {
180
- return UNSAFE_flattenTree(data, childrenKey).filter(function (item) {
181
- return Array.isArray(item[childrenKey]) && item[childrenKey].length > 0;
182
- }).map(function (item) {
183
- return item[valueKey];
184
- });
185
- }
186
- return defaultExpandItemValues;
187
- }
188
-
189
- /**
190
- * 获取 expandItemValues 的 value
191
- * @param props
192
- */
193
- export function getExpandItemValues(props) {
194
- var expandItemValues = props.expandItemValues,
195
- defaultExpandItemValues = props.defaultExpandItemValues;
196
- if (!_isUndefined(expandItemValues) && Array.isArray(expandItemValues)) {
197
- return expandItemValues;
198
- }
199
- if (!_isUndefined(defaultExpandItemValues) && Array.isArray(defaultExpandItemValues)) {
200
- return defaultExpandItemValues;
201
- }
202
- return [];
203
- }
204
-
205
- /**
206
- * get dragNode and it's children node keys
207
- * @param node
208
- * @param childrenKey
209
- * @param valueKey
210
- */
211
- export function getDragNodeKeys(dragNode, childrenKey, valueKey) {
212
- var dragNodeKeys = [dragNode[valueKey]];
213
- var traverse = function traverse(data) {
214
- if ((data === null || data === void 0 ? void 0 : data.length) > 0) {
215
- data.forEach(function (node) {
216
- dragNodeKeys = dragNodeKeys.concat([node[valueKey]]);
217
- if (node[childrenKey]) {
218
- traverse(node[childrenKey]);
219
- }
220
- });
221
- }
222
- };
223
- traverse(dragNode[childrenKey]);
224
- return dragNodeKeys;
225
- }
226
- export function calDropNodePosition(event, treeNodeElement) {
227
- var clientY = event.clientY;
228
- var _treeNodeElement$getB = treeNodeElement.getBoundingClientRect(),
229
- top = _treeNodeElement$getB.top,
230
- bottom = _treeNodeElement$getB.bottom;
231
- var gap = TREE_NODE_GAP;
232
-
233
- // bottom of node
234
- if (clientY >= bottom - gap && clientY <= bottom) {
235
- return TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM;
236
- }
237
-
238
- // top of node
239
- if (clientY <= top + gap && clientY >= top) {
240
- return TREE_NODE_DROP_POSITION.DRAG_OVER_TOP;
241
- }
242
- if (clientY >= top + gap && clientY <= bottom - gap) {
243
- return TREE_NODE_DROP_POSITION.DRAG_OVER;
244
- }
245
- return -1;
246
- }
247
- export function removeDragNode(data, params, _ref) {
248
- var valueKey = _ref.valueKey,
249
- childrenKey = _ref.childrenKey;
250
- var dragNode = params.dragNode;
251
- var traverse = function traverse(items, parent) {
252
- for (var _index = 0; _index < items.length; _index += 1) {
253
- var _item = items[_index];
254
- if (shallowEqual(_item[valueKey], dragNode[valueKey])) {
255
- items.splice(_index, 1);
256
- // when children is empty, delete children prop for hidden anchor
257
- if (items.length === 0 && parent) {
258
- delete parent.children;
259
- }
260
- break;
261
- }
262
- if (Array.isArray(_item[childrenKey])) {
263
- traverse(_item[childrenKey], _item);
264
- }
265
- }
266
- };
267
- traverse(data);
268
- }
269
- export function createUpdateTreeDataFunction(params, _ref2) {
270
- var valueKey = _ref2.valueKey,
271
- childrenKey = _ref2.childrenKey;
272
- return function (tree) {
273
- var data = [].concat(tree);
274
- var dragNode = params.dragNode,
275
- dropNode = params.dropNode,
276
- dropNodePosition = params.dropNodePosition;
277
- var cloneDragNode = _extends({}, dragNode);
278
- removeDragNode(data, params, {
279
- valueKey: valueKey,
280
- childrenKey: childrenKey
281
- });
282
- var updateTree = function updateTree(items) {
283
- for (var _index2 = 0; _index2 < items.length; _index2 += 1) {
284
- var _item2 = items[_index2];
285
- if (shallowEqual(_item2[valueKey], dropNode[valueKey])) {
286
- // drag to node inside
287
- if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER) {
288
- _item2[childrenKey] = _isNil(_item2[childrenKey]) ? [] : _item2[childrenKey];
289
- _item2[childrenKey].push(cloneDragNode);
290
- break;
291
- } else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_TOP) {
292
- // drag to top of node
293
- items.splice(_index2, 0, cloneDragNode);
294
- break;
295
- } else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM) {
296
- // drag to bottom of node
297
- items.splice(_index2 + 1, 0, cloneDragNode);
298
- break;
299
- }
300
- }
301
- if (Array.isArray(_item2[childrenKey]) && _item2[childrenKey].length > 0) {
302
- updateTree(_item2[childrenKey]);
303
- }
304
- }
305
- };
306
- updateTree(data);
307
- return [].concat(data);
308
- };
309
- }
310
- export function findNodeOfTree(data, check) {
311
- var findNode = function findNode(nodes) {
312
- if (nodes === void 0) {
313
- nodes = [];
314
- }
315
- for (var i = 0; i < nodes.length; i += 1) {
316
- var _item3 = nodes[i];
317
- if (_isArray(_item3.children)) {
318
- var _node3 = findNode(_item3.children);
319
- if (_node3) {
320
- return _node3;
321
- }
322
- }
323
- if (check(_item3)) {
324
- return _item3;
325
- }
326
- }
327
- return undefined;
328
- };
329
- return findNode(data);
330
- }
331
- export function filterNodesOfTree(data, check) {
332
- var findNodes = function findNodes(nodes) {
333
- if (nodes === void 0) {
334
- nodes = [];
335
- }
336
- var nextNodes = [];
337
- for (var i = 0; i < nodes.length; i += 1) {
338
- if (_isArray(nodes[i].children)) {
339
- var nextChildren = findNodes(nodes[i].children);
340
- if (nextChildren.length) {
341
- var _item4 = _clone(nodes[i]);
342
- _item4.children = nextChildren;
343
- nextNodes.push(_item4);
344
- continue;
345
- }
346
- }
347
- if (check(nodes[i])) {
348
- nextNodes.push(nodes[i]);
349
- }
350
- }
351
- return nextNodes;
352
- };
353
- return findNodes(data);
354
- }
355
-
356
- /**
357
- * get all focusable items
358
- * exclude not visible and disabled node
359
- * @param filteredData - filtered tree data
360
- * @param props - TreeProps
361
- * @param isSearching - component is in Searching
362
- * @returns
363
- */
364
- export var getFocusableItems = function getFocusableItems(filteredData, props, isSearching) {
365
- var disabledItemValues = props.disabledItemValues,
366
- valueKey = props.valueKey,
367
- childrenKey = props.childrenKey,
368
- expandItemValues = props.expandItemValues;
369
- var items = [];
370
- var loop = function loop(nodes) {
371
- nodes.forEach(function (node) {
372
- var disabled = disabledItemValues.some(function (disabledItem) {
373
- return shallowEqual(disabledItem, node[valueKey]);
374
- });
375
- if (!disabled && node.visible) {
376
- items.push(node);
377
- }
378
- // always expand when searching
379
- var expand = isSearching ? true : expandItemValues.includes(node[valueKey]);
380
- if (node[childrenKey] && expand) {
381
- loop(node[childrenKey]);
382
- }
383
- });
384
- };
385
- loop(filteredData);
386
- return items;
387
- };
388
-
389
- /**
390
- * return all focusable Item and active Element index
391
- * @param focusItemValue
392
- * @param focusableItems items
393
- */
394
- export var getActiveIndex = function getActiveIndex(focusItemValue, focusItems, valueKey) {
395
- var activeIndex = -1;
396
- focusItems.forEach(function (item, index) {
397
- if (shallowEqual(item[valueKey], focusItemValue)) {
398
- activeIndex = index;
399
- }
400
- });
401
- return activeIndex;
402
- };
403
-
404
- /**
405
- * get current active element and node data
406
- * @param flattenNodes - flattenData
407
- */
408
- export var getActiveItem = function getActiveItem(focusItemValue, flattenNodes, valueKey) {
409
- var nodeData = null;
410
- var activeNode = Object.values(flattenNodes).find(function (node) {
411
- return shallowEqual(node[valueKey], focusItemValue);
412
- });
413
- if (activeNode) {
414
- nodeData = activeNode;
415
- }
416
- return nodeData;
417
- };
418
- export var getElementByDataKey = function getElementByDataKey(dataKey, treeNodesRefs, selector) {
419
- var ele = treeNodesRefs[dataKey];
420
- if (ele instanceof Element) {
421
- return ele.querySelector(selector);
422
- }
423
- return null;
424
- };
425
-
426
- /**
427
- * focus to specify tree node
428
- * @param refKey - target node refKey
429
- * @param treeNodeRefs - all tree node refs object
430
- * @param selector - node css selector
431
- */
432
- export var focusTreeNode = function focusTreeNode(refKey, treeNodeRefs, selector) {
433
- var _node$focus;
434
- var node = getElementByDataKey(refKey, treeNodeRefs, selector);
435
- node === null || node === void 0 ? void 0 : (_node$focus = node.focus) === null || _node$focus === void 0 ? void 0 : _node$focus.call(node);
436
- };
437
- /**
438
- * focus next item with keyboard
439
- * @param param
440
- */
441
- export var focusNextItem = function focusNextItem(_ref3) {
442
- var focusItemValue = _ref3.focusItemValue,
443
- focusableItems = _ref3.focusableItems,
444
- treeNodesRefs = _ref3.treeNodesRefs,
445
- selector = _ref3.selector,
446
- valueKey = _ref3.valueKey,
447
- callback = _ref3.callback;
448
- var activeIndex = getActiveIndex(focusItemValue, focusableItems, valueKey);
449
- if (focusableItems.length === 0) {
450
- return;
451
- }
452
- var nextIndex = activeIndex === focusableItems.length - 1 ? 0 : activeIndex + 1;
453
- var nextFocusItemValue = focusableItems[nextIndex][valueKey];
454
- callback === null || callback === void 0 ? void 0 : callback(nextFocusItemValue);
455
- focusTreeNode(focusableItems[nextIndex].refKey, treeNodesRefs, selector);
456
- };
457
-
458
- /**
459
- * focus prev item with keyboard
460
- * @param param
461
- */
462
- export var focusPreviousItem = function focusPreviousItem(_ref4) {
463
- var focusItemValue = _ref4.focusItemValue,
464
- focusableItems = _ref4.focusableItems,
465
- treeNodesRefs = _ref4.treeNodesRefs,
466
- selector = _ref4.selector,
467
- valueKey = _ref4.valueKey,
468
- callback = _ref4.callback;
469
- var activeIndex = getActiveIndex(focusItemValue, focusableItems, valueKey);
470
- if (focusableItems.length === 0) {
471
- return;
472
- }
473
- var prevIndex = activeIndex === 0 ? focusableItems.length - 1 : activeIndex - 1;
474
- prevIndex = prevIndex >= 0 ? prevIndex : 0;
475
- var prevFocusItemValue = focusableItems[prevIndex][valueKey];
476
- callback === null || callback === void 0 ? void 0 : callback(prevFocusItemValue);
477
- focusTreeNode(focusableItems[prevIndex].refKey, treeNodesRefs, selector);
478
- };
479
- /**
480
- * Left arrow keyboard event handler
481
- * When focus is on an open node, closes the node.
482
- * When focus is on a child node that is also either an end node or a closed node, moves focus to its parent node.
483
- * When focus is on a root node that is also either an end node or a closed node, does nothing.
484
- * @see https://www.w3.org/TR/wai-aria-practices/#TreeView
485
- */
486
- export function leftArrowHandler(_ref5) {
487
- var focusItem = _ref5.focusItem,
488
- expand = _ref5.expand,
489
- onExpand = _ref5.onExpand,
490
- onFocusItem = _ref5.onFocusItem;
491
- if (_isEmpty(focusItem)) {
492
- return;
493
- }
494
- if (expand) {
495
- onExpand(_extends({}, focusItem, {
496
- expand: expand
497
- }));
498
- } else if (focusItem !== null && focusItem !== void 0 && focusItem.parent) {
499
- onFocusItem();
500
- }
501
- }
502
-
503
- /**
504
- * Right arrow keyboard event handler
505
- * When focus is on a closed node, opens the node; focus does not move.
506
- * When focus is on a open node, moves focus to the first child node.
507
- * When focus is on an end node, does nothing.
508
- * @see https://www.w3.org/TR/wai-aria-practices/#TreeView
509
- */
510
- export function rightArrowHandler(_ref6) {
511
- var focusItem = _ref6.focusItem,
512
- expand = _ref6.expand,
513
- childrenKey = _ref6.childrenKey,
514
- onExpand = _ref6.onExpand,
515
- onFocusItem = _ref6.onFocusItem;
516
- if (_isEmpty(focusItem) || !Array.isArray(focusItem[childrenKey])) {
517
- return;
518
- }
519
- if (!expand) {
520
- onExpand(_extends({}, focusItem, {
521
- expand: expand
522
- }));
523
- } else {
524
- onFocusItem();
525
- }
526
- }
527
-
528
- /**
529
- * get scrollIndex in virtualized list
530
- * @param nodes - data
531
- * @param value - activeItem value
532
- * @param valueKey
533
- */
534
- export var getScrollToIndex = function getScrollToIndex(nodes, value, valueKey) {
535
- return nodes.filter(function (n) {
536
- return n.visible;
537
- }).findIndex(function (item) {
538
- return item[valueKey] === value;
539
- });
540
- };
541
-
542
- /**
543
- * when searching, expand state always return true
544
- * @param searchKeyword
545
- * @param expand
546
- */
547
- export function getExpandWhenSearching(searchKeyword, expand) {
548
- return isSearching(searchKeyword) ? true : expand;
549
- }
550
- function getTreeActiveNode(nodes, value, valueKey) {
551
- if (_isUndefined(value)) {
552
- return undefined;
553
- }
554
- for (var refKey in nodes) {
555
- if (shallowEqual(nodes[refKey][valueKey], value)) {
556
- return nodes[refKey];
557
- }
558
- }
559
- }
560
- export { getTreeActiveNode };
561
-
562
- /**
563
- * toggle tree node
564
- * @param param0
565
- */
566
- export function toggleExpand(_ref7) {
567
- var node = _ref7.node,
568
- isExpand = _ref7.isExpand,
569
- expandItemValues = _ref7.expandItemValues,
570
- valueKey = _ref7.valueKey;
571
- var newExpandItemValues = new Set(expandItemValues);
572
- if (isExpand) {
573
- newExpandItemValues.add(node[valueKey]);
574
- } else {
575
- newExpandItemValues.delete(node[valueKey]);
576
- }
577
- return Array.from(newExpandItemValues);
578
- }
579
- export function getTreeNodeTitle(label) {
580
- if (typeof label === 'string') {
581
- return label;
582
- } else if ( /*#__PURE__*/React.isValidElement(label)) {
583
- var _nodes = reactToString(label);
584
- return _nodes.join('');
585
- }
586
- }
587
-
588
- /**
589
- * get all children from flattenNodes object by given parent node
590
- * @param nodes
591
- * @param parent
592
- */
593
- export function getChildrenByFlattenNodes(nodes, parent) {
594
- if (!_isNil(parent.refKey) && _isNil(nodes[parent.refKey])) {
595
- return [];
596
- }
597
- return Object.values(nodes).filter(function (item) {
598
- var _item$parent;
599
- return (item === null || item === void 0 ? void 0 : (_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent.refKey) === parent.refKey && item.refKey && !nodes[item.refKey].uncheckable;
600
- });
601
- }
602
- export function useTreeDrag() {
603
- // current dragging node
604
- var dragNode = useRef(null);
605
- var _useState = useState(null),
606
- dragOverNodeKey = _useState[0],
607
- setDragOverNodeKey = _useState[1]; // drag node and it's children nodes key
608
- var _useState2 = useState([]),
609
- dragNodeKeys = _useState2[0],
610
- setDragNodeKeys = _useState2[1];
611
- var _useState3 = useState(null),
612
- dropNodePosition = _useState3[0],
613
- setDropNodePosition = _useState3[1];
614
- var setDragNode = function setDragNode(node) {
615
- dragNode.current = node;
616
- };
617
- return {
618
- dragNode: dragNode === null || dragNode === void 0 ? void 0 : dragNode.current,
619
- dragOverNodeKey: dragOverNodeKey,
620
- dragNodeKeys: dragNodeKeys,
621
- dropNodePosition: dropNodePosition,
622
- setDragNode: setDragNode,
623
- setDragOverNodeKey: setDragOverNodeKey,
624
- setDragNodeKeys: setDragNodeKeys,
625
- setDropNodePosition: setDropNodePosition
626
- };
627
- }
628
- /**
629
- * hooks for flatten tree structure
630
- * @param param0
631
- */
632
- export function useFlattenTreeData(_ref8) {
633
- var data = _ref8.data,
634
- labelKey = _ref8.labelKey,
635
- valueKey = _ref8.valueKey,
636
- childrenKey = _ref8.childrenKey,
637
- _ref8$uncheckableItem = _ref8.uncheckableItemValues,
638
- uncheckableItemValues = _ref8$uncheckableItem === void 0 ? [] : _ref8$uncheckableItem,
639
- callback = _ref8.callback;
640
- var _useState4 = useState(Object.create(null)),
641
- dispatch = _useState4[1];
642
- var forceUpdate = useCallback(function () {
643
- dispatch(Object.create(null));
644
- }, [dispatch]);
645
- var flattenNodes = useRef({});
646
- var flattenTreeData = useCallback(function (treeData, parent, layer) {
647
- if (layer === void 0) {
648
- layer = 1;
649
- }
650
- if (!Array.isArray(treeData) || treeData.length === 0) {
651
- return [];
652
- }
653
- treeData.map(function (node) {
654
- var _extends2;
655
- var value = node[valueKey];
656
- /**
657
- * because the value of the node's type is string or number,
658
- * so it can used as the key of the object directly
659
- * to avoid number value is converted to string. 1 and '1' will be convert to '1'
660
- * we used `String_` or `Number_` prefix
661
- */
662
- var refKey = getNodeFormattedRefKey(value);
663
- node.refKey = refKey;
664
- flattenNodes.current[refKey] = _extends((_extends2 = {
665
- layer: layer
666
- }, _extends2[labelKey] = node[labelKey], _extends2[valueKey] = node[valueKey], _extends2.uncheckable = uncheckableItemValues.some(function (value) {
667
- return shallowEqual(node[valueKey], value);
668
- }), _extends2), node);
669
- if (parent) {
670
- flattenNodes.current[refKey].parent = _omit(parent, 'parent', 'children');
671
- }
672
- flattenTreeData(node[childrenKey], node, layer + 1);
673
- });
674
- callback === null || callback === void 0 ? void 0 : callback(flattenNodes.current);
675
- }, [childrenKey, valueKey, labelKey, callback, uncheckableItemValues]);
676
- var serializeListOnlyParent = useCallback(function (nodes, key) {
677
- var list = [];
678
- Object.keys(nodes).forEach(function (refKey) {
679
- var currentNode = nodes[refKey];
680
- if (!_isNil(currentNode.parent) && !_isNil(currentNode.parent.refKey)) {
681
- var parentNode = nodes[currentNode.parent.refKey];
682
- if (currentNode[key]) {
683
- if (!(parentNode !== null && parentNode !== void 0 && parentNode.checkAll)) {
684
- list.push(nodes[refKey][valueKey]);
685
- } else if (parentNode !== null && parentNode !== void 0 && parentNode.uncheckable) {
686
- list.push(nodes[refKey][valueKey]);
687
- }
688
- }
689
- } else {
690
- if (currentNode[key]) {
691
- list.push(nodes[refKey][valueKey]);
692
- }
693
- }
694
- });
695
- return list;
696
- }, [valueKey]);
697
-
698
- /**
699
- * using in CheckTreePicker, to unSerializeList check property
700
- */
701
- var unSerializeList = useCallback(function (_ref9) {
702
- var nodes = _ref9.nodes,
703
- key = _ref9.key,
704
- _ref9$value = _ref9.value,
705
- value = _ref9$value === void 0 ? [] : _ref9$value,
706
- cascade = _ref9.cascade,
707
- uncheckableItemValues = _ref9.uncheckableItemValues;
708
- // Reset values to false
709
- Object.keys(nodes).forEach(function (refKey) {
710
- var node = nodes[refKey];
711
- if (cascade && !_isNil(node.parent) && !_isNil(node.parent.refKey)) {
712
- node[key] = nodes[node.parent.refKey][key];
713
- } else {
714
- node[key] = false;
715
- }
716
- value.forEach(function (value) {
717
- if (shallowEqual(nodes[refKey][valueKey], value) && !uncheckableItemValues.some(function (uncheckableValue) {
718
- return shallowEqual(value, uncheckableValue);
719
- })) {
720
- nodes[refKey][key] = true;
721
- }
722
- });
723
- });
724
- }, [valueKey]);
725
- var formatVirtualizedTreeData = function formatVirtualizedTreeData(nodes, data, expandItemValues, options) {
726
- var cascade = options.cascade,
727
- searchKeyword = options.searchKeyword;
728
- return UNSAFE_flattenTree(data, childrenKey, function (node) {
729
- var formatted = {};
730
- var curNode = nodes === null || nodes === void 0 ? void 0 : nodes[node.refKey];
731
- var parentKeys = getNodeParentKeys(nodes, curNode, valueKey);
732
- /**
733
- * When using virtualized,
734
- * if the parent node is collapsed, the child nodes should be hidden
735
- * avoid component height calculation errors
736
- */
737
- var visible = curNode !== null && curNode !== void 0 && curNode.parent ? shouldShowNodeByParentExpanded(expandItemValues, parentKeys) : true;
738
-
739
- /**
740
- * when searching, every node default expand
741
- * the node's visible should follow the original state
742
- */
743
- if (isSearching(searchKeyword)) {
744
- visible = node.visible;
745
- }
746
- if (curNode) {
747
- var checkState = !_isUndefined(cascade) ? getNodeCheckState({
748
- node: curNode,
749
- cascade: cascade,
750
- nodes: nodes,
751
- childrenKey: childrenKey
752
- }) : undefined;
753
- formatted = _extends({}, node, {
754
- check: curNode.check,
755
- uncheckable: curNode.uncheckable,
756
- hasChildren: !!node[childrenKey],
757
- layer: curNode.layer,
758
- parent: curNode.parent,
759
- checkState: checkState,
760
- visible: visible
761
- });
762
- }
763
- return formatted;
764
- });
765
- };
766
- useEffect(function () {
767
- // when data is changed, should clear the flattenNodes, avoid duplicate keys
768
- flattenNodes.current = {};
769
- flattenTreeData(data);
770
- }, [data]); // eslint-disable-line react-hooks/exhaustive-deps
771
-
772
- return {
773
- forceUpdate: forceUpdate,
774
- flattenNodes: flattenNodes.current,
775
- flattenTreeData: flattenTreeData,
776
- serializeListOnlyParent: serializeListOnlyParent,
777
- unSerializeList: unSerializeList,
778
- formatVirtualizedTreeData: formatVirtualizedTreeData
779
- };
780
- }
781
-
782
- /**
783
- * A hook that saving every tree node ref
784
- */
785
- export function useTreeNodeRefs() {
786
- var treeNodeRefs = useRef({});
787
- var saveTreeNodeRef = function saveTreeNodeRef(ref, refKey) {
788
- if (!_isNil(refKey)) {
789
- treeNodeRefs.current[refKey] = ref;
790
- }
791
- };
792
- return {
793
- treeNodesRefs: treeNodeRefs.current,
794
- saveTreeNodeRef: saveTreeNodeRef
795
- };
796
- }
797
- /**
798
- * A hook that handles tree search filter options
799
- * @param props
800
- */
801
- export function useTreeSearch(props) {
802
- var labelKey = props.labelKey,
803
- childrenKey = props.childrenKey,
804
- searchKeyword = props.searchKeyword,
805
- data = props.data,
806
- searchBy = props.searchBy,
807
- callback = props.callback;
808
- var filterVisibleData = useCallback(function (data, searchKeyword) {
809
- var setVisible = function setVisible(nodes) {
810
- return nodes.forEach(function (item) {
811
- item.visible = searchBy ? searchBy(searchKeyword, item[labelKey], item) : shouldDisplay(item[labelKey], searchKeyword);
812
- if (_isArray(item[childrenKey])) {
813
- filterVisibleData(item[childrenKey], searchKeyword);
814
- item[childrenKey].forEach(function (child) {
815
- if (child.visible) {
816
- item.visible = child.visible;
817
- }
818
- });
819
- }
820
- });
821
- };
822
- setVisible(data);
823
- return data;
824
- }, [childrenKey, labelKey, searchBy]);
825
-
826
- // Use search keywords to filter options.
827
- var _useState5 = useState(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : ''),
828
- searchKeywordState = _useState5[0],
829
- setSearchKeyword = _useState5[1];
830
- var _useState6 = useState(function () {
831
- return filterVisibleData(data, searchKeywordState);
832
- }),
833
- filteredData = _useState6[0],
834
- setFilteredData = _useState6[1];
835
- var handleSearch = function handleSearch(searchKeyword, event) {
836
- var filteredData = filterVisibleData(data, searchKeyword);
837
- setFilteredData(filteredData);
838
- setSearchKeyword(searchKeyword);
839
- event && (callback === null || callback === void 0 ? void 0 : callback(searchKeyword, filteredData, event));
840
- };
841
- useEffect(function () {
842
- handleSearch(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : '');
843
- // eslint-disable-next-line react-hooks/exhaustive-deps
844
- }, [searchKeyword]);
845
- var handleSetFilteredData = useCallback(function (data, searchKeyword) {
846
- setFilteredData(filterVisibleData(data, searchKeyword));
847
- }, [filterVisibleData]);
848
- return {
849
- searchKeywordState: searchKeywordState,
850
- filteredData: filteredData,
851
- setFilteredData: handleSetFilteredData,
852
- setSearchKeyword: setSearchKeyword,
853
- handleSearch: handleSearch
854
- };
855
- }
856
- export function useGetTreeNodeChildren(treeData, valueKey, childrenKey) {
857
- var _useState7 = useState([]),
858
- loadingNodeValues = _useState7[0],
859
- setLoadingNodeValues = _useState7[1];
860
- var _useState8 = useState(treeData),
861
- data = _useState8[0],
862
- setData = _useState8[1];
863
- var concatChildren = useCallback(function (treeNode, children) {
864
- var value = treeNode[valueKey];
865
- treeNode = findNodeOfTree(data, function (item) {
866
- return value === item[valueKey];
867
- });
868
- treeNode[childrenKey] = children;
869
- var newData = data.concat([]);
870
- setData(newData);
871
- return newData;
872
- }, [data, valueKey, childrenKey]);
873
- var loadChildren = useCallback(function (node, getChildren) {
874
- setLoadingNodeValues(function (prev) {
875
- return prev.concat(node[valueKey]);
876
- });
877
- var children = getChildren(node);
878
- if (children instanceof Promise) {
879
- children.then(function (res) {
880
- var newData = concatChildren(node, res);
881
- setData(newData);
882
- setLoadingNodeValues(function (prev) {
883
- return prev.filter(function (item) {
884
- return !shallowEqual(item, node[valueKey]);
885
- });
886
- });
887
- });
888
- } else {
889
- setData(concatChildren(node, children));
890
- setLoadingNodeValues(function (prev) {
891
- return prev.filter(function (item) {
892
- return !shallowEqual(item, node[valueKey]);
893
- });
894
- });
895
- }
896
- }, [concatChildren, valueKey]);
897
- return {
898
- data: data,
899
- setData: setData,
900
- loadingNodeValues: loadingNodeValues,
901
- loadChildren: loadChildren
902
- };
903
- }
904
- /**
905
- * Focus to active tree node.
906
- * @param param0
907
- */
908
- export function focusToActiveTreeNode(_ref10) {
909
- var _activeItem$focus;
910
- var list = _ref10.list,
911
- valueKey = _ref10.valueKey,
912
- activeNode = _ref10.activeNode,
913
- virtualized = _ref10.virtualized,
914
- container = _ref10.container,
915
- selector = _ref10.selector,
916
- formattedNodes = _ref10.formattedNodes;
917
- if (!container) return;
918
- if (virtualized && activeNode) {
919
- var _list$scrollToRow;
920
- var scrollIndex = getScrollToIndex(formattedNodes, activeNode === null || activeNode === void 0 ? void 0 : activeNode[valueKey], valueKey);
921
- (_list$scrollToRow = list.scrollToRow) === null || _list$scrollToRow === void 0 ? void 0 : _list$scrollToRow.call(list, scrollIndex);
922
- return;
923
- }
924
- var activeItem = container.querySelector(selector);
925
- if (!activeItem) {
926
- return;
927
- }
928
- activeItem === null || activeItem === void 0 ? void 0 : (_activeItem$focus = activeItem.focus) === null || _activeItem$focus === void 0 ? void 0 : _activeItem$focus.call(activeItem);
929
- }
930
- export function isSearching(searchKeyword) {
931
- return !_isEmpty(searchKeyword);
932
- }
933
- export function getTreeNodeIndent(rtl, layer, absolute) {
934
- var _ref12;
935
- if (absolute === void 0) {
936
- absolute = false;
937
- }
938
- // layer start from 1
939
- var offset = layer * TREE_NODE_PADDING + TREE_NODE_ROOT_PADDING;
940
- if (absolute) {
941
- var _ref11;
942
- return _ref11 = {}, _ref11[rtl ? 'right' : 'left'] = offset, _ref11;
943
- }
944
- return _ref12 = {}, _ref12[rtl ? 'paddingRight' : 'paddingLeft'] = offset, _ref12;
945
- }
946
-
947
- /**
948
- * according to the value type to get the formatted valueKey of the node
949
- * @param value
950
- * @returns
951
- */
952
- export function getNodeFormattedRefKey(value) {
953
- return "" + (typeof value === 'number' ? 'Number_' : 'String_') + value;
954
- }
955
-
956
- /**
957
- * create drag preview when tree node start drag
958
- * @param name
959
- * @param className
960
- * @returns
961
- */
962
- export function createDragPreview(name, className) {
963
- var dragPreview = document.createElement('div');
964
- dragPreview.id = 'rs-tree-drag-preview';
965
- dragPreview.innerHTML = name;
966
- dragPreview.classList.add(className);
967
- document.body.appendChild(dragPreview);
968
- return dragPreview;
969
- }
970
-
971
- /**
972
- * remove drag preview when tree node drop
973
- */
974
- export function removeDragPreview() {
975
- var _dragPreview$parentNo, _dragPreview$parentNo2;
976
- var dragPreview = document.getElementById('rs-tree-drag-preview');
977
- dragPreview === null || dragPreview === void 0 ? void 0 : (_dragPreview$parentNo = dragPreview.parentNode) === null || _dragPreview$parentNo === void 0 ? void 0 : (_dragPreview$parentNo2 = _dragPreview$parentNo.removeChild) === null || _dragPreview$parentNo2 === void 0 ? void 0 : _dragPreview$parentNo2.call(_dragPreview$parentNo, dragPreview);
978
- }
979
- export function stringifyTreeNodeLabel(label) {
980
- if (typeof label === 'string') {
981
- return label;
982
- } else if ( /*#__PURE__*/React.isValidElement(label)) {
983
- var _nodes2 = reactToString(label);
984
- return _nodes2.join('');
985
- }
986
- return '';
987
- }
988
-
989
- /**
990
- * Returns a WeakMap that maps each item in `items` to its parent
991
- * indicated by `getChildren` function
992
- */
993
- export function getParentMap(items, getChildren) {
994
- var map = new WeakMap();
995
- for (var queue = [].concat(items); queue.length > 0;) {
996
- var _item5 = queue.shift();
997
- var children = getChildren(_item5);
998
- if (children) {
999
- for (var _iterator2 = _createForOfIteratorHelperLoose(children), _step2; !(_step2 = _iterator2()).done;) {
1000
- var child = _step2.value;
1001
- map.set(child, _item5);
1002
- queue.push(child);
1003
- }
1004
- }
1005
- }
1006
- return map;
1007
- }
1008
-
1009
- /**
1010
- * Returns a Map that maps each item's "key", indicated by `getKey` function,
1011
- * to its parent indicated by `getChildren` function
1012
- *
1013
- * NOTICE:
1014
- * Using this function is discouraged.
1015
- * Use {@link getParentMap} whenever possible.
1016
- */
1017
- export function getKeyParentMap(items, getKey, getChildren) {
1018
- var map = new Map();
1019
- for (var queue = [].concat(items); queue.length > 0;) {
1020
- var _item6 = queue.shift();
1021
- var children = getChildren(_item6);
1022
- if (children) {
1023
- for (var _iterator3 = _createForOfIteratorHelperLoose(children), _step3; !(_step3 = _iterator3()).done;) {
1024
- var child = _step3.value;
1025
- map.set(getKey(child), _item6);
1026
- queue.push(child);
1027
- }
1028
- }
1029
- }
1030
- return map;
1031
- }
1032
-
1033
- /**
1034
- * Returns an array indicating the hierarchy path from root towards `target` item
1035
- */
1036
- export function getPathTowardsItem(target, getParent) {
1037
- if (!target) return [];
1038
- var path = [target];
1039
- for (var parent = getParent(target); !!parent; parent = getParent(parent)) {
1040
- path.unshift(parent);
1041
- }
1042
- return path;
1043
- }