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,98 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _react = require("react");
9
+ var _omit = _interopRequireDefault(require("lodash/omit"));
10
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
11
+ var _shallowEqual = _interopRequireDefault(require("../../utils/shallowEqual"));
12
+ var _utils = require("../utils");
13
+ var _useForceUpdate = _interopRequireDefault(require("./useForceUpdate"));
14
+ /**
15
+ * Custom hook that flattens a tree data structure into a map of nodes.
16
+ *
17
+ */
18
+ function useFlattenTree(data, options) {
19
+ var value = options.value,
20
+ labelKey = options.labelKey,
21
+ valueKey = options.valueKey,
22
+ childrenKey = options.childrenKey,
23
+ _options$uncheckableI = options.uncheckableItemValues,
24
+ uncheckableItemValues = _options$uncheckableI === void 0 ? [] : _options$uncheckableI,
25
+ cascade = options.cascade,
26
+ multiple = options.multiple,
27
+ callback = options.callback;
28
+ var forceUpdate = (0, _useForceUpdate.default)();
29
+ var flattenedNodes = (0, _react.useRef)({});
30
+ var updateTreeNodeCheckState = (0, _react.useCallback)(function (value) {
31
+ if (value === void 0) {
32
+ value = [];
33
+ }
34
+ // Reset values to false
35
+ Object.keys(flattenedNodes.current).forEach(function (refKey) {
36
+ var node = flattenedNodes.current[refKey];
37
+ if (cascade && !(0, _isNil.default)(node.parent) && !(0, _isNil.default)(node.parent.refKey)) {
38
+ node.check = flattenedNodes.current[node.parent.refKey].check;
39
+ } else {
40
+ node.check = false;
41
+ }
42
+ value.forEach(function (nodeVal) {
43
+ if ((0, _shallowEqual.default)(flattenedNodes.current[refKey][valueKey], nodeVal) && !uncheckableItemValues.some(function (uncheckableValue) {
44
+ return (0, _shallowEqual.default)(nodeVal, uncheckableValue);
45
+ })) {
46
+ flattenedNodes.current[refKey].check = true;
47
+ }
48
+ });
49
+ });
50
+ }, [cascade, uncheckableItemValues, valueKey]);
51
+ var flattenTreeData = (0, _react.useCallback)(function (treeData, parent, layer) {
52
+ if (layer === void 0) {
53
+ layer = 1;
54
+ }
55
+ if (!Array.isArray(treeData) || treeData.length === 0) {
56
+ return [];
57
+ }
58
+ treeData.map(function (node) {
59
+ var _extends2;
60
+ var value = node[valueKey];
61
+ /**
62
+ * because the value of the node's type is string or number,
63
+ * so it can used as the key of the object directly
64
+ * to avoid number value is converted to string. 1 and '1' will be convert to '1'
65
+ * we used `String_` or `Number_` prefix
66
+ */
67
+ var refKey = (0, _utils.formatNodeRefKey)(value);
68
+ node.refKey = refKey;
69
+ flattenedNodes.current[refKey] = (0, _extends3.default)((_extends2 = {
70
+ layer: layer
71
+ }, _extends2[labelKey] = node[labelKey], _extends2[valueKey] = node[valueKey], _extends2.uncheckable = uncheckableItemValues.some(function (value) {
72
+ return (0, _shallowEqual.default)(node[valueKey], value);
73
+ }), _extends2), node);
74
+ if (parent) {
75
+ flattenedNodes.current[refKey].parent = (0, _omit.default)(parent, 'parent', 'children');
76
+ }
77
+ flattenTreeData(node[childrenKey], node, layer + 1);
78
+ });
79
+ callback === null || callback === void 0 ? void 0 : callback(flattenedNodes.current);
80
+ forceUpdate();
81
+ }, [callback, forceUpdate, valueKey, labelKey, uncheckableItemValues, childrenKey]);
82
+ (0, _react.useEffect)(function () {
83
+ // when data is changed, should clear the flattenedNodes, avoid duplicate keys
84
+ flattenedNodes.current = {};
85
+ flattenTreeData(data);
86
+ }, [data]); // eslint-disable-line react-hooks/exhaustive-deps
87
+
88
+ (0, _react.useEffect)(function () {
89
+ if (multiple) {
90
+ updateTreeNodeCheckState(value);
91
+ forceUpdate();
92
+ }
93
+ // eslint-disable-next-line react-hooks/exhaustive-deps
94
+ }, [value]);
95
+ return flattenedNodes.current;
96
+ }
97
+ var _default = useFlattenTree;
98
+ exports.default = _default;
@@ -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;
@@ -0,0 +1,158 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
9
+ var _constants = require("../../utils/constants");
10
+ var _utils = require("../../utils");
11
+ var _Picker = require("../../internals/Picker");
12
+ var _TreeProvider = require("../TreeProvider");
13
+ var _utils2 = require("../utils");
14
+ var _useTreeNodeRefs2 = _interopRequireDefault(require("./useTreeNodeRefs"));
15
+ /**
16
+ * Custom hook that manages the focus behavior of a tree component.
17
+ */
18
+ function useFocusTree(props) {
19
+ var filteredData = props.filteredData,
20
+ searchKeyword = props.searchKeyword,
21
+ flattenedNodes = props.flattenedNodes,
22
+ expandItemValues = props.expandItemValues,
23
+ disabledItemValues = props.disabledItemValues,
24
+ onExpand = props.onExpand,
25
+ onFocused = props.onFocused;
26
+ var _useCustom = (0, _utils.useCustom)(),
27
+ rtl = _useCustom.rtl;
28
+ var _useItemDataKeys = (0, _TreeProvider.useItemDataKeys)(),
29
+ valueKey = _useItemDataKeys.valueKey,
30
+ childrenKey = _useItemDataKeys.childrenKey;
31
+ var _useTreeNodeRefs = (0, _useTreeNodeRefs2.default)(),
32
+ treeNodesRefs = _useTreeNodeRefs.treeNodesRefs,
33
+ saveTreeNodeRef = _useTreeNodeRefs.saveTreeNodeRef;
34
+ var treeViewRef = (0, _react.useRef)(null);
35
+ var _useState = (0, _react.useState)(null),
36
+ focusItemValue = _useState[0],
37
+ setFocusItemValue = _useState[1];
38
+ var register = (0, _TreeProvider.useRegisterTreeMethods)();
39
+ var flattenedNodesRef = (0, _react.useRef)(flattenedNodes);
40
+ var getFocusProps = function getFocusProps(value) {
41
+ var options = {
42
+ disabledItemValues: disabledItemValues,
43
+ valueKey: valueKey,
44
+ childrenKey: childrenKey,
45
+ expandItemValues: expandItemValues
46
+ };
47
+ var focusableItems = (0, _utils2.getFocusableItems)(filteredData, options, (0, _utils2.isSearching)(searchKeyword));
48
+ return {
49
+ focusItemValue: value || focusItemValue,
50
+ valueKey: valueKey,
51
+ focusableItems: focusableItems,
52
+ treeNodesRefs: treeNodesRefs
53
+ };
54
+ };
55
+ var handleFocusItem = (0, _utils.useEventCallback)(function (key) {
56
+ var focusProps = getFocusProps();
57
+ var focusedValue = null;
58
+ if (key === _constants.KEY_VALUES.DOWN) {
59
+ focusedValue = (0, _utils2.focusNextItem)(focusProps);
60
+ } else if (key === _constants.KEY_VALUES.UP) {
61
+ focusedValue = (0, _utils2.focusPreviousItem)(focusProps);
62
+ }
63
+ if (focusedValue) {
64
+ setFocusItemValue(focusedValue);
65
+ onFocused === null || onFocused === void 0 ? void 0 : onFocused(focusedValue);
66
+ }
67
+ });
68
+ var handleLeftArrowEvent = (0, _utils.useEventCallback)(function () {
69
+ if ((0, _isNil.default)(focusItemValue)) {
70
+ return;
71
+ }
72
+ var focusItem = (0, _utils2.getActiveItem)(focusItemValue, flattenedNodes, valueKey);
73
+ var expand = expandItemValues.includes(focusItem === null || focusItem === void 0 ? void 0 : focusItem[valueKey]);
74
+ var onFocusItem = function onFocusItem() {
75
+ var _focusItem$parent, _focusItem$parent2;
76
+ var focusedValue = focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent = focusItem.parent) === null || _focusItem$parent === void 0 ? void 0 : _focusItem$parent[valueKey];
77
+ setFocusItemValue(focusedValue);
78
+ onFocused === null || onFocused === void 0 ? void 0 : onFocused(focusedValue);
79
+ (0, _utils2.focusTreeNode)(focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent2 = focusItem.parent) === null || _focusItem$parent2 === void 0 ? void 0 : _focusItem$parent2.refKey, treeNodesRefs);
80
+ };
81
+ (0, _utils2.handleLeftArrow)({
82
+ focusItem: focusItem,
83
+ expand: expand,
84
+ onExpand: onExpand,
85
+ childrenKey: childrenKey,
86
+ onFocusItem: onFocusItem
87
+ });
88
+ });
89
+ var handleRightArrowEvent = (0, _utils.useEventCallback)(function () {
90
+ if ((0, _isNil.default)(focusItemValue)) {
91
+ return;
92
+ }
93
+ var focusItem = (0, _utils2.getActiveItem)(focusItemValue, flattenedNodes, valueKey);
94
+ var expand = expandItemValues.includes(focusItem === null || focusItem === void 0 ? void 0 : focusItem[valueKey]);
95
+ var onFocusItem = function onFocusItem() {
96
+ return handleFocusItem(_constants.KEY_VALUES.DOWN);
97
+ };
98
+ (0, _utils2.handleRightArrow)({
99
+ focusItem: focusItem,
100
+ expand: expand,
101
+ childrenKey: childrenKey,
102
+ onExpand: onExpand,
103
+ onFocusItem: onFocusItem
104
+ });
105
+ });
106
+ var onTreeKeydown = (0, _utils.useEventCallback)(function (event) {
107
+ (0, _Picker.onMenuKeyDown)(event, {
108
+ down: function down() {
109
+ return handleFocusItem(_constants.KEY_VALUES.DOWN);
110
+ },
111
+ up: function up() {
112
+ return handleFocusItem(_constants.KEY_VALUES.UP);
113
+ },
114
+ left: rtl ? handleRightArrowEvent : handleLeftArrowEvent,
115
+ right: rtl ? handleLeftArrowEvent : handleRightArrowEvent
116
+ });
117
+ });
118
+ var focusTreeFirstNode = (0, _utils.useEventCallback)(function () {
119
+ handleFocusItem(_constants.KEY_VALUES.DOWN);
120
+ });
121
+ var focusTreeActiveNode = (0, _react.useCallback)(function () {
122
+ var refKey = (0, _utils2.focusCurrentItem)({
123
+ container: treeViewRef.current
124
+ });
125
+ if (refKey) {
126
+ var _flattenedNodesRef$cu;
127
+ var node = (_flattenedNodesRef$cu = flattenedNodesRef.current) === null || _flattenedNodesRef$cu === void 0 ? void 0 : _flattenedNodesRef$cu[refKey];
128
+ if (node) {
129
+ setFocusItemValue(node[valueKey]);
130
+ onFocused === null || onFocused === void 0 ? void 0 : onFocused(node[valueKey]);
131
+ }
132
+ }
133
+ }, [onFocused, valueKey]);
134
+ (0, _react.useEffect)(function () {
135
+ var unregister = register === null || register === void 0 ? void 0 : register({
136
+ focusTreeFirstNode: focusTreeFirstNode,
137
+ focusTreeActiveNode: focusTreeActiveNode
138
+ });
139
+ return function () {
140
+ unregister === null || unregister === void 0 ? void 0 : unregister();
141
+ };
142
+ // eslint-disable-next-line react-hooks/exhaustive-deps
143
+ }, []);
144
+ (0, _react.useEffect)(function () {
145
+ flattenedNodesRef.current = flattenedNodes;
146
+ }, [flattenedNodes]);
147
+ return {
148
+ treeViewRef: treeViewRef,
149
+ focusTreeFirstNode: focusTreeFirstNode,
150
+ focusItemValue: focusItemValue,
151
+ treeNodesRefs: treeNodesRefs,
152
+ saveTreeNodeRef: saveTreeNodeRef,
153
+ setFocusItemValue: setFocusItemValue,
154
+ onTreeKeydown: onTreeKeydown
155
+ };
156
+ }
157
+ var _default = useFocusTree;
158
+ exports.default = _default;
@@ -0,0 +1,2 @@
1
+ declare function useForceUpdate(): () => void;
2
+ export default useForceUpdate;
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _react = require("react");
7
+ function useForceUpdate() {
8
+ var _useState = (0, _react.useState)(Object.create(null)),
9
+ dispatch = _useState[1];
10
+ var forceUpdate = (0, _react.useCallback)(function () {
11
+ dispatch(Object.create(null));
12
+ }, [dispatch]);
13
+ return forceUpdate;
14
+ }
15
+ var _default = useForceUpdate;
16
+ exports.default = _default;
@@ -0,0 +1,32 @@
1
+ /// <reference types="react" />
2
+ import { TREE_NODE_DROP_POSITION } from '../../utils';
3
+ import type { DropData } from '../types';
4
+ interface TreeDragProps {
5
+ draggable?: boolean;
6
+ flattenedNodes: Record<string, any>;
7
+ treeNodesRefs: Record<string, any>;
8
+ prefix: (className: string) => string;
9
+ onDragStart?: (nodeData: any, event: React.DragEvent) => void;
10
+ onDragEnter?: (nodeData: any, event: React.DragEvent) => void;
11
+ onDragOver?: (nodeData: any, event: React.DragEvent) => void;
12
+ onDragLeave?: (nodeData: any, event: React.DragEvent) => void;
13
+ onDragEnd?: (nodeData: any, event: React.DragEvent) => void;
14
+ onDrop?: (dropData: DropData<Record<string, any>>, event: React.DragEvent) => void;
15
+ }
16
+ /**
17
+ * Custom hook for handling tree node dragging.
18
+ */
19
+ export default function useTreeDrag<T>(props: TreeDragProps): {
20
+ dragNode: T | null;
21
+ dragOverNodeKey: null;
22
+ dropNodePosition: -1 | TREE_NODE_DROP_POSITION | null;
23
+ dragEvents: {
24
+ onDragStart: (...args: any[]) => any;
25
+ onDragEnter: (...args: any[]) => any;
26
+ onDragOver: (...args: any[]) => any;
27
+ onDragLeave: (...args: any[]) => any;
28
+ onDragEnd: (...args: any[]) => any;
29
+ onDrop: (...args: any[]) => any;
30
+ };
31
+ };
32
+ export {};
@@ -0,0 +1,268 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = useTreeDrag;
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _react = require("react");
9
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
10
+ var _utils = require("../../utils");
11
+ var _utils2 = require("../../internals/utils");
12
+ var _TreeProvider = require("../TreeProvider");
13
+ /**
14
+ * The gap between tree nodes.
15
+ */
16
+ var TREE_NODE_GAP = 4;
17
+
18
+ /**
19
+ * Calculates the drop position of a tree node based on the clientY coordinate of a drag event
20
+ * and the bounding rectangle of the tree node element.
21
+ *
22
+ * @param event - The drag event.
23
+ * @param treeNodeElement - The element representing the tree node.
24
+ * @returns The drop position of the tree node.
25
+ */
26
+ function calDropNodePosition(event, treeNodeElement) {
27
+ var clientY = event.clientY;
28
+ var _treeNodeElement$getB = treeNodeElement.getBoundingClientRect(),
29
+ top = _treeNodeElement$getB.top,
30
+ bottom = _treeNodeElement$getB.bottom;
31
+ var gap = TREE_NODE_GAP;
32
+
33
+ // bottom of node
34
+ if (clientY >= bottom - gap && clientY <= bottom) {
35
+ return _utils.TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM;
36
+ }
37
+
38
+ // top of node
39
+ if (clientY <= top + gap && clientY >= top) {
40
+ return _utils.TREE_NODE_DROP_POSITION.DRAG_OVER_TOP;
41
+ }
42
+ if (clientY >= top + gap && clientY <= bottom - gap) {
43
+ return _utils.TREE_NODE_DROP_POSITION.DRAG_OVER;
44
+ }
45
+ return -1;
46
+ }
47
+
48
+ /**
49
+ * Creates a drag preview element for tree nodes.
50
+ */
51
+ function createDragPreview(name, className) {
52
+ var dragPreview = document.createElement('div');
53
+ dragPreview.id = 'rs-tree-drag-preview';
54
+ dragPreview.dataset.testid = 'drag-preview';
55
+ dragPreview.innerHTML = name;
56
+ dragPreview.classList.add(className);
57
+ document.body.appendChild(dragPreview);
58
+ return dragPreview;
59
+ }
60
+
61
+ /**
62
+ * Removes the drag preview element from the DOM.
63
+ */
64
+ function removeDragPreview() {
65
+ var _dragPreview$parentNo, _dragPreview$parentNo2;
66
+ var dragPreview = document.getElementById('rs-tree-drag-preview');
67
+ 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);
68
+ }
69
+ /**
70
+ * Custom hook for handling tree node dragging.
71
+ */
72
+ function useTreeDrag(props) {
73
+ var _useItemDataKeys = (0, _TreeProvider.useItemDataKeys)(),
74
+ childrenKey = _useItemDataKeys.childrenKey,
75
+ valueKey = _useItemDataKeys.valueKey,
76
+ labelKey = _useItemDataKeys.labelKey;
77
+ var draggable = props.draggable,
78
+ flattenedNodes = props.flattenedNodes,
79
+ treeNodesRefs = props.treeNodesRefs,
80
+ onDragStart = props.onDragStart,
81
+ onDragEnter = props.onDragEnter,
82
+ onDragOver = props.onDragOver,
83
+ onDragLeave = props.onDragLeave,
84
+ onDragEnd = props.onDragEnd,
85
+ onDrop = props.onDrop,
86
+ prefix = props.prefix; // current dragging node
87
+ var dragNode = (0, _react.useRef)(null);
88
+ var _useState = (0, _react.useState)(null),
89
+ dragOverNodeKey = _useState[0],
90
+ setDragOverNodeKey = _useState[1]; // drag node and it's children nodes key
91
+ var _useState2 = (0, _react.useState)([]),
92
+ dragNodeKeys = _useState2[0],
93
+ setDragNodeKeys = _useState2[1];
94
+ var _useState3 = (0, _react.useState)(null),
95
+ dropNodePosition = _useState3[0],
96
+ setDropNodePosition = _useState3[1];
97
+ var setDragNode = (0, _react.useCallback)(function (node) {
98
+ dragNode.current = node;
99
+ }, []);
100
+
101
+ /**
102
+ * Retrieves an array of keys for the nodes in a tree starting from the specified drag node.
103
+ */
104
+ var getDragNodeKeys = (0, _react.useCallback)(function (dragNode) {
105
+ var dragNodeKeys = [dragNode[valueKey]];
106
+ var traverse = function traverse(data) {
107
+ if ((data === null || data === void 0 ? void 0 : data.length) > 0) {
108
+ data.forEach(function (node) {
109
+ dragNodeKeys = dragNodeKeys.concat([node[valueKey]]);
110
+ if (node[childrenKey]) {
111
+ traverse(node[childrenKey]);
112
+ }
113
+ });
114
+ }
115
+ };
116
+ traverse(dragNode[childrenKey]);
117
+ return dragNodeKeys;
118
+ }, [childrenKey, valueKey]);
119
+
120
+ /**
121
+ * Removes the drag node from the data array.
122
+ *
123
+ */
124
+ var removeDragNode = (0, _react.useCallback)(function (data, params) {
125
+ var dragNode = params.dragNode;
126
+ var traverse = function traverse(items, parent) {
127
+ for (var index = 0; index < items.length; index += 1) {
128
+ var item = items[index];
129
+ if ((0, _utils.shallowEqual)(item[valueKey], dragNode[valueKey])) {
130
+ items.splice(index, 1);
131
+ // when children is empty, delete children prop for hidden anchor
132
+ if (items.length === 0 && parent) {
133
+ delete parent.children;
134
+ }
135
+ break;
136
+ }
137
+ if (Array.isArray(item[childrenKey])) {
138
+ traverse(item[childrenKey], item);
139
+ }
140
+ }
141
+ };
142
+ traverse(data);
143
+ }, [childrenKey, valueKey]);
144
+
145
+ /**
146
+ * Creates a function that modifies a tree data structure based on drag and drop parameters.
147
+ */
148
+ var createDragTreeDataFunction = (0, _react.useCallback)(function (params) {
149
+ return function (tree) {
150
+ var data = [].concat(tree);
151
+ var dragNode = params.dragNode,
152
+ dropNode = params.dropNode,
153
+ dropNodePosition = params.dropNodePosition;
154
+ var cloneDragNode = (0, _extends2.default)({}, dragNode);
155
+ removeDragNode(data, params);
156
+ var updateTree = function updateTree(items) {
157
+ for (var index = 0; index < items.length; index += 1) {
158
+ var item = items[index];
159
+ if ((0, _utils.shallowEqual)(item[valueKey], dropNode[valueKey])) {
160
+ // drag to node inside
161
+ if (dropNodePosition === _utils.TREE_NODE_DROP_POSITION.DRAG_OVER) {
162
+ item[childrenKey] = (0, _isNil.default)(item[childrenKey]) ? [] : item[childrenKey];
163
+ item[childrenKey].push(cloneDragNode);
164
+ break;
165
+ } else if (dropNodePosition === _utils.TREE_NODE_DROP_POSITION.DRAG_OVER_TOP) {
166
+ // drag to top of node
167
+ items.splice(index, 0, cloneDragNode);
168
+ break;
169
+ } else if (dropNodePosition === _utils.TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM) {
170
+ // drag to bottom of node
171
+ items.splice(index + 1, 0, cloneDragNode);
172
+ break;
173
+ }
174
+ }
175
+ if (Array.isArray(item[childrenKey]) && item[childrenKey].length > 0) {
176
+ updateTree(item[childrenKey]);
177
+ }
178
+ }
179
+ };
180
+ updateTree(data);
181
+ return [].concat(data);
182
+ };
183
+ }, [childrenKey, removeDragNode, valueKey]);
184
+ var getDropData = (0, _react.useCallback)(function (nodeData) {
185
+ var dragParams = {
186
+ dragNode: dragNode.current,
187
+ dropNode: nodeData,
188
+ dropNodePosition: dropNodePosition
189
+ };
190
+ return (0, _extends2.default)({}, dragParams, {
191
+ createUpdateDataFunction: createDragTreeDataFunction(dragParams)
192
+ });
193
+ }, [createDragTreeDataFunction, dropNodePosition]);
194
+ var handleDragStart = (0, _utils.useEventCallback)(function (nodeData, event) {
195
+ if (draggable) {
196
+ var _event$dataTransfer;
197
+ var dragMoverNode = createDragPreview((0, _utils2.stringifyReactNode)(nodeData[labelKey]), prefix('drag-preview'));
198
+ (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.setDragImage(dragMoverNode, 0, 0);
199
+ setDragNodeKeys(getDragNodeKeys(nodeData));
200
+ setDragNode(flattenedNodes[nodeData.refKey]);
201
+ onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(nodeData, event);
202
+ }
203
+ });
204
+ var handleDragEnter = (0, _utils.useEventCallback)(function (nodeData, event) {
205
+ if (dragNodeKeys.some(function (d) {
206
+ return (0, _utils.shallowEqual)(d, nodeData[valueKey]);
207
+ })) {
208
+ return;
209
+ }
210
+ if (dragNode.current) {
211
+ setDragOverNodeKey(nodeData[valueKey]);
212
+ setDropNodePosition(calDropNodePosition(event, treeNodesRefs[nodeData.refKey]));
213
+ }
214
+ onDragEnter === null || onDragEnter === void 0 ? void 0 : onDragEnter(nodeData, event);
215
+ });
216
+ var handleDragOver = (0, _utils.useEventCallback)(function (nodeData, event) {
217
+ if (dragNodeKeys.some(function (d) {
218
+ return (0, _utils.shallowEqual)(d, nodeData[valueKey]);
219
+ })) {
220
+ event.dataTransfer.dropEffect = 'none';
221
+ return;
222
+ }
223
+ if (dragNode.current && (0, _utils.shallowEqual)(nodeData[valueKey], dragOverNodeKey)) {
224
+ var lastDropNodePosition = calDropNodePosition(event, treeNodesRefs[nodeData.refKey]);
225
+ if (lastDropNodePosition === dropNodePosition) return;
226
+ setDropNodePosition(lastDropNodePosition);
227
+ }
228
+ onDragOver === null || onDragOver === void 0 ? void 0 : onDragOver(nodeData, event);
229
+ });
230
+ var handleDragLeave = (0, _utils.useEventCallback)(function (nodeData, event) {
231
+ onDragLeave === null || onDragLeave === void 0 ? void 0 : onDragLeave(nodeData, event);
232
+ });
233
+ var handleDragEnd = (0, _utils.useEventCallback)(function (nodeData, event) {
234
+ removeDragPreview();
235
+ setDragNode(null);
236
+ setDragNodeKeys([]);
237
+ setDragOverNodeKey(null);
238
+ onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(nodeData, event);
239
+ });
240
+ var handleDrop = (0, _utils.useEventCallback)(function (nodeData, event) {
241
+ if (dragNodeKeys.some(function (d) {
242
+ return (0, _utils.shallowEqual)(d, nodeData[valueKey]);
243
+ })) {
244
+ console.error('Cannot drag a node to itself and its children');
245
+ } else {
246
+ var _dropData = getDropData(nodeData);
247
+ onDrop === null || onDrop === void 0 ? void 0 : onDrop(_dropData, event);
248
+ }
249
+ removeDragPreview();
250
+ setDragNode(null);
251
+ setDragNodeKeys([]);
252
+ setDragOverNodeKey(null);
253
+ });
254
+ var dragEvents = {
255
+ onDragStart: handleDragStart,
256
+ onDragEnter: handleDragEnter,
257
+ onDragOver: handleDragOver,
258
+ onDragLeave: handleDragLeave,
259
+ onDragEnd: handleDragEnd,
260
+ onDrop: handleDrop
261
+ };
262
+ return {
263
+ dragNode: dragNode === null || dragNode === void 0 ? void 0 : dragNode.current,
264
+ dragOverNodeKey: dragOverNodeKey,
265
+ dropNodePosition: dropNodePosition,
266
+ dragEvents: dragEvents
267
+ };
268
+ }
@@ -0,0 +1,29 @@
1
+ import { TREE_NODE_DROP_POSITION } from '../../utils';
2
+ import { DragStatus } from '../TreeNode';
3
+ interface Props {
4
+ value: any;
5
+ disabledItemValues: any[];
6
+ loadingNodeValues: any[];
7
+ focusItemValue: any;
8
+ keyword: string;
9
+ dragNode: any;
10
+ dragOverNodeKey: any;
11
+ dropNodePosition: TREE_NODE_DROP_POSITION | -1 | null;
12
+ }
13
+ declare function useTreeNodeProps(props: Props): (nodeData: any, layer: number, index?: number) => {
14
+ id: string | undefined;
15
+ value: any;
16
+ label: any;
17
+ index: number | undefined;
18
+ layer: number;
19
+ loading: boolean;
20
+ active: boolean;
21
+ focus: boolean;
22
+ visible: any;
23
+ children: any;
24
+ nodeData: any;
25
+ disabled: boolean;
26
+ dragging: boolean;
27
+ dragStatus: DragStatus | undefined;
28
+ };
29
+ export default useTreeNodeProps;