rsuite 5.60.1 → 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 (475) 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 +37 -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 +63 -26
  21. package/DatePicker/styles/index.less +1 -0
  22. package/DateRangeInput/styles/index.css +4 -4
  23. package/DateRangePicker/styles/index.css +69 -26
  24. package/DateRangePicker/styles/index.less +3 -0
  25. package/Dropdown/styles/index.css +14 -13
  26. package/Highlight/package.json +7 -0
  27. package/Highlight/styles/index.css +8 -0
  28. package/Highlight/styles/index.less +6 -0
  29. package/IconButton/styles/index.css +11 -10
  30. package/Input/styles/index.css +4 -4
  31. package/InputGroup/styles/index.css +18 -17
  32. package/InputGroup/styles/index.less +1 -1
  33. package/InputNumber/styles/index.css +19 -18
  34. package/InputPicker/styles/index.css +58 -22
  35. package/LICENSE +1 -1
  36. package/MultiCascadeTree/styles/index.css +61 -36
  37. package/MultiCascadeTree/styles/index.less +1 -1
  38. package/MultiCascader/styles/index.css +704 -679
  39. package/MultiCascader/styles/index.less +0 -1
  40. package/Nav/styles/index.css +15 -14
  41. package/Navbar/styles/index.css +14 -13
  42. package/Pagination/styles/index.css +62 -26
  43. package/Panel/styles/index.css +4 -4
  44. package/Placeholder/styles/index.css +2 -3
  45. package/Placeholder/styles/index.less +2 -3
  46. package/README.md +53 -90
  47. package/Radio/styles/index.css +7 -7
  48. package/Radio/styles/index.less +1 -5
  49. package/RangeSlider/styles/index.css +2 -2
  50. package/Rate/styles/index.css +1 -1
  51. package/Rate/styles/index.less +1 -1
  52. package/SelectPicker/styles/index.css +58 -22
  53. package/Slider/styles/index.css +2 -2
  54. package/Slider/styles/index.less +2 -2
  55. package/Steps/styles/index.css +6 -1
  56. package/Steps/styles/index.less +2 -1
  57. package/Tabs/styles/index.css +15 -14
  58. package/TagInput/styles/index.css +59 -27
  59. package/TagPicker/styles/index.css +59 -27
  60. package/Toggle/styles/index.css +16 -8
  61. package/Toggle/styles/index.less +2 -1
  62. package/Tree/styles/indent-line.less +8 -0
  63. package/Tree/styles/index.css +140 -141
  64. package/Tree/styles/index.less +188 -1
  65. package/Tree/styles/toggle.less +36 -0
  66. package/TreePicker/styles/index.css +142 -134
  67. package/TreePicker/styles/index.less +4 -234
  68. package/Uploader/styles/index.css +12 -11
  69. package/cjs/@types/common.d.ts +41 -4
  70. package/cjs/AutoComplete/AutoComplete.js +2 -1
  71. package/cjs/CascadeTree/CascadeTree.js +8 -7
  72. package/cjs/CascadeTree/SearchView.js +7 -14
  73. package/cjs/CascadeTree/hooks/usePaths.js +4 -4
  74. package/cjs/CascadeTree/hooks/useSearch.js +2 -1
  75. package/cjs/CascadeTree/utils.d.ts +0 -11
  76. package/cjs/CascadeTree/utils.js +0 -23
  77. package/cjs/Cascader/Cascader.js +17 -16
  78. package/cjs/CheckPicker/CheckPicker.js +26 -29
  79. package/cjs/CheckTree/CheckTree.d.ts +16 -0
  80. package/cjs/CheckTree/CheckTree.js +112 -0
  81. package/cjs/CheckTree/CheckTreeNode.d.ts +72 -0
  82. package/cjs/CheckTree/CheckTreeNode.js +117 -0
  83. package/cjs/CheckTree/CheckTreeView.d.ts +70 -0
  84. package/cjs/CheckTree/CheckTreeView.js +310 -0
  85. package/cjs/CheckTree/hooks/useTreeCheckState.d.ts +10 -0
  86. package/cjs/CheckTree/hooks/useTreeCheckState.js +93 -0
  87. package/cjs/CheckTree/hooks/useTreeNodeProps.d.ts +22 -0
  88. package/cjs/CheckTree/hooks/useTreeNodeProps.js +59 -0
  89. package/cjs/CheckTree/hooks/useTreeValue.d.ts +5 -0
  90. package/cjs/CheckTree/hooks/useTreeValue.js +21 -0
  91. package/cjs/CheckTree/index.d.ts +2 -14
  92. package/cjs/CheckTree/index.js +2 -23
  93. package/cjs/CheckTree/utils.d.ts +53 -0
  94. package/cjs/{CheckTreePicker → CheckTree}/utils.js +76 -26
  95. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +30 -12
  96. package/cjs/CheckTreePicker/CheckTreePicker.js +153 -603
  97. package/cjs/CheckTreePicker/hooks/useFocusState.d.ts +16 -0
  98. package/cjs/CheckTreePicker/hooks/useFocusState.js +42 -0
  99. package/cjs/DateInput/DateField.js +3 -1
  100. package/cjs/DateInput/DateInput.js +17 -16
  101. package/{esm/DateInput → cjs/DateInput/hooks}/useDateInputState.d.ts +1 -1
  102. package/cjs/DateInput/{useDateInputState.js → hooks/useDateInputState.js} +2 -2
  103. package/cjs/DateInput/hooks/useFieldCursor.d.ts +6 -0
  104. package/cjs/DateInput/hooks/useFieldCursor.js +56 -0
  105. package/cjs/DateInput/hooks/useSelectedState.d.ts +14 -0
  106. package/cjs/DateInput/hooks/useSelectedState.js +23 -0
  107. package/cjs/DateInput/index.d.ts +5 -3
  108. package/cjs/DateInput/index.js +11 -5
  109. package/cjs/DateInput/utils.d.ts +0 -1
  110. package/cjs/DateInput/utils.js +2 -24
  111. package/cjs/DatePicker/DatePicker.d.ts +4 -0
  112. package/cjs/DatePicker/DatePicker.js +20 -5
  113. package/cjs/DatePicker/types.d.ts +0 -4
  114. package/cjs/DateRangeInput/DateRangeInput.js +16 -17
  115. package/cjs/DateRangePicker/DateRangePicker.d.ts +51 -23
  116. package/cjs/DateRangePicker/DateRangePicker.js +71 -51
  117. package/cjs/DateRangePicker/hooks/useDateDisabled.d.ts +16 -0
  118. package/cjs/DateRangePicker/hooks/useDateDisabled.js +31 -0
  119. package/cjs/DateRangePicker/types.d.ts +1 -0
  120. package/cjs/Highlight/Highlight.d.ts +14 -0
  121. package/cjs/Highlight/Highlight.js +58 -0
  122. package/cjs/Highlight/index.d.ts +3 -0
  123. package/cjs/Highlight/index.js +9 -0
  124. package/cjs/Highlight/utils/highlightText.d.ts +5 -0
  125. package/cjs/Highlight/utils/highlightText.js +29 -0
  126. package/cjs/InputPicker/InputPicker.js +37 -41
  127. package/cjs/MultiCascadeTree/SearchView.js +6 -14
  128. package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +15 -1
  129. package/cjs/MultiCascadeTree/hooks/useColumnData.js +2 -2
  130. package/cjs/MultiCascadeTree/hooks/useFlattenData.js +3 -3
  131. package/cjs/MultiCascadeTree/hooks/useSearch.js +2 -1
  132. package/cjs/MultiCascadeTree/utils.d.ts +4 -4
  133. package/cjs/MultiCascadeTree/utils.js +20 -11
  134. package/cjs/MultiCascader/MultiCascader.js +12 -12
  135. package/cjs/SelectPicker/SelectPicker.js +2 -6
  136. package/cjs/Tree/IndentLine.d.ts +3 -0
  137. package/cjs/Tree/IndentLine.js +18 -0
  138. package/cjs/Tree/Tree.d.ts +4 -92
  139. package/cjs/Tree/Tree.js +79 -20
  140. package/cjs/Tree/TreeNode.d.ts +101 -0
  141. package/cjs/Tree/TreeNode.js +147 -0
  142. package/cjs/Tree/TreeNodeToggle.d.ts +9 -0
  143. package/cjs/Tree/TreeNodeToggle.js +56 -0
  144. package/cjs/Tree/TreeProvider.d.ts +52 -0
  145. package/cjs/Tree/TreeProvider.js +84 -0
  146. package/cjs/Tree/TreeView.d.ts +68 -0
  147. package/cjs/Tree/TreeView.js +305 -0
  148. package/cjs/Tree/hooks/useExpandTree.d.ts +60 -0
  149. package/cjs/Tree/hooks/useExpandTree.js +77 -0
  150. package/cjs/Tree/hooks/useFlattenTree.d.ts +42 -0
  151. package/cjs/Tree/hooks/useFlattenTree.js +98 -0
  152. package/cjs/Tree/hooks/useFocusTree.d.ts +24 -0
  153. package/cjs/Tree/hooks/useFocusTree.js +158 -0
  154. package/cjs/Tree/hooks/useForceUpdate.d.ts +2 -0
  155. package/cjs/Tree/hooks/useForceUpdate.js +16 -0
  156. package/cjs/Tree/hooks/useTreeDrag.d.ts +32 -0
  157. package/cjs/Tree/hooks/useTreeDrag.js +268 -0
  158. package/cjs/Tree/hooks/useTreeNodeProps.d.ts +29 -0
  159. package/cjs/Tree/hooks/useTreeNodeProps.js +83 -0
  160. package/cjs/Tree/hooks/useTreeNodeRefs.d.ts +6 -0
  161. package/cjs/Tree/hooks/useTreeNodeRefs.js +22 -0
  162. package/cjs/Tree/hooks/useTreeSearch.d.ts +18 -0
  163. package/cjs/Tree/hooks/useTreeSearch.js +74 -0
  164. package/cjs/Tree/hooks/useTreeWithChildren.d.ts +14 -0
  165. package/cjs/Tree/hooks/useTreeWithChildren.js +64 -0
  166. package/cjs/Tree/hooks/useVirtualizedTreeData.d.ts +7 -0
  167. package/cjs/Tree/hooks/useVirtualizedTreeData.js +82 -0
  168. package/cjs/Tree/types.d.ts +257 -0
  169. package/cjs/Tree/types.js +33 -0
  170. package/cjs/Tree/utils/flattenTree.d.ts +25 -0
  171. package/cjs/Tree/utils/flattenTree.js +95 -0
  172. package/cjs/Tree/utils/focusableTree.d.ts +55 -0
  173. package/cjs/Tree/utils/focusableTree.js +157 -0
  174. package/cjs/Tree/utils/formatNodeRefKey.d.ts +4 -0
  175. package/cjs/Tree/utils/formatNodeRefKey.js +11 -0
  176. package/cjs/Tree/utils/getExpandItemValues.d.ts +11 -0
  177. package/cjs/Tree/utils/getExpandItemValues.js +21 -0
  178. package/cjs/Tree/utils/getNodeParentKeys.d.ts +5 -0
  179. package/cjs/Tree/utils/getNodeParentKeys.js +21 -0
  180. package/cjs/Tree/utils/getTreeActiveNode.d.ts +5 -0
  181. package/cjs/Tree/utils/getTreeActiveNode.js +21 -0
  182. package/cjs/Tree/utils/hasVisibleChildren.d.ts +5 -0
  183. package/cjs/Tree/utils/hasVisibleChildren.js +16 -0
  184. package/cjs/Tree/utils/indentTreeNode.d.ts +3 -0
  185. package/cjs/Tree/utils/indentTreeNode.js +18 -0
  186. package/cjs/Tree/utils/index.d.ts +11 -0
  187. package/cjs/Tree/utils/index.js +35 -0
  188. package/cjs/Tree/utils/isExpand.d.ts +6 -0
  189. package/cjs/Tree/utils/isExpand.js +14 -0
  190. package/cjs/Tree/utils/isSearching.d.ts +1 -0
  191. package/cjs/Tree/utils/isSearching.js +10 -0
  192. package/cjs/Tree/utils/treeKeyboardInteractions.d.ts +21 -0
  193. package/cjs/Tree/utils/treeKeyboardInteractions.js +49 -0
  194. package/cjs/TreePicker/TreePicker.d.ts +27 -21
  195. package/cjs/TreePicker/TreePicker.js +155 -575
  196. package/cjs/TreePicker/hooks/useFocusState.d.ts +20 -0
  197. package/cjs/TreePicker/hooks/useFocusState.js +53 -0
  198. package/cjs/index.d.ts +2 -0
  199. package/cjs/index.js +3 -1
  200. package/cjs/internals/Picker/Listbox.d.ts +40 -10
  201. package/cjs/internals/Picker/Listbox.js +21 -16
  202. package/cjs/internals/Picker/PickerIndicator.d.ts +2 -1
  203. package/cjs/internals/Picker/PickerIndicator.js +7 -3
  204. package/cjs/internals/Picker/hooks/useFocusItemValue.js +4 -4
  205. package/cjs/internals/Picker/hooks/usePickerRef.d.ts +1 -4
  206. package/cjs/internals/Picker/hooks/usePickerRef.js +3 -20
  207. package/cjs/internals/Picker/index.d.ts +0 -1
  208. package/cjs/internals/Picker/index.js +1 -4
  209. package/cjs/internals/Picker/utils.js +12 -12
  210. package/cjs/internals/{Picker → Tree}/TreeView.js +1 -1
  211. package/cjs/internals/Tree/index.d.ts +1 -0
  212. package/cjs/internals/Tree/index.js +8 -0
  213. package/cjs/internals/Tree/utils/filterNodesOfTree.d.ts +5 -0
  214. package/cjs/internals/Tree/utils/filterNodesOfTree.js +31 -0
  215. package/cjs/internals/Tree/utils/findNodeOfTree.d.ts +1 -0
  216. package/cjs/internals/Tree/utils/findNodeOfTree.js +26 -0
  217. package/cjs/internals/Tree/utils/getParentMap.d.ts +15 -0
  218. package/cjs/internals/Tree/utils/getParentMap.js +52 -0
  219. package/cjs/internals/Tree/utils/getPathTowardsItem.d.ts +4 -0
  220. package/cjs/internals/Tree/utils/getPathTowardsItem.js +16 -0
  221. package/cjs/internals/Tree/utils/index.d.ts +4 -0
  222. package/cjs/internals/Tree/utils/index.js +14 -0
  223. package/cjs/internals/Windowing/List.d.ts +1 -0
  224. package/cjs/internals/Windowing/List.js +5 -1
  225. package/cjs/internals/Windowing/index.d.ts +1 -1
  226. package/cjs/internals/Windowing/index.js +4 -2
  227. package/cjs/internals/hooks/index.d.ts +1 -0
  228. package/cjs/internals/hooks/index.js +8 -0
  229. package/cjs/internals/hooks/useFoucsVirtualListItem.d.ts +7 -0
  230. package/cjs/internals/hooks/useFoucsVirtualListItem.js +26 -0
  231. package/cjs/{utils → internals/utils}/getSafeRegExpString.d.ts +1 -1
  232. package/cjs/{utils → internals/utils}/getSafeRegExpString.js +1 -1
  233. package/cjs/internals/utils/index.d.ts +2 -0
  234. package/cjs/internals/utils/index.js +9 -0
  235. package/cjs/internals/utils/stringifyReactNode.d.ts +2 -0
  236. package/cjs/internals/utils/stringifyReactNode.js +17 -0
  237. package/cjs/utils/constants.d.ts +0 -2
  238. package/cjs/utils/constants.js +1 -6
  239. package/cjs/utils/getDataGroupBy.js +3 -3
  240. package/cjs/utils/index.d.ts +0 -3
  241. package/cjs/utils/index.js +1 -10
  242. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +2 -2
  243. package/dist/rsuite-no-reset-rtl.css +301 -302
  244. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  245. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  246. package/dist/rsuite-no-reset.css +303 -306
  247. package/dist/rsuite-no-reset.min.css +1 -1
  248. package/dist/rsuite-no-reset.min.css.map +1 -1
  249. package/dist/rsuite-rtl.css +302 -303
  250. package/dist/rsuite-rtl.min.css +1 -1
  251. package/dist/rsuite-rtl.min.css.map +1 -1
  252. package/dist/rsuite.css +304 -307
  253. package/dist/rsuite.js +657 -140
  254. package/dist/rsuite.js.map +1 -1
  255. package/dist/rsuite.min.css +1 -1
  256. package/dist/rsuite.min.css.map +1 -1
  257. package/dist/rsuite.min.js +1 -1
  258. package/dist/rsuite.min.js.map +1 -1
  259. package/esm/@types/common.d.ts +41 -4
  260. package/esm/AutoComplete/AutoComplete.js +2 -1
  261. package/esm/CascadeTree/CascadeTree.js +2 -1
  262. package/esm/CascadeTree/SearchView.js +6 -13
  263. package/esm/CascadeTree/hooks/usePaths.js +1 -1
  264. package/esm/CascadeTree/hooks/useSearch.js +2 -1
  265. package/esm/CascadeTree/utils.d.ts +0 -11
  266. package/esm/CascadeTree/utils.js +0 -22
  267. package/esm/Cascader/Cascader.js +2 -1
  268. package/esm/CheckPicker/CheckPicker.js +4 -7
  269. package/esm/CheckTree/CheckTree.d.ts +16 -0
  270. package/esm/CheckTree/CheckTree.js +105 -0
  271. package/esm/CheckTree/CheckTreeNode.d.ts +72 -0
  272. package/esm/CheckTree/CheckTreeNode.js +110 -0
  273. package/esm/CheckTree/CheckTreeView.d.ts +70 -0
  274. package/esm/CheckTree/CheckTreeView.js +304 -0
  275. package/esm/CheckTree/hooks/useTreeCheckState.d.ts +10 -0
  276. package/esm/CheckTree/hooks/useTreeCheckState.js +87 -0
  277. package/esm/CheckTree/hooks/useTreeNodeProps.d.ts +22 -0
  278. package/esm/CheckTree/hooks/useTreeNodeProps.js +52 -0
  279. package/esm/CheckTree/hooks/useTreeValue.d.ts +5 -0
  280. package/esm/CheckTree/hooks/useTreeValue.js +16 -0
  281. package/esm/CheckTree/index.d.ts +2 -14
  282. package/esm/CheckTree/index.js +1 -21
  283. package/esm/CheckTree/utils.d.ts +53 -0
  284. package/esm/{CheckTreePicker → CheckTree}/utils.js +72 -22
  285. package/esm/CheckTreePicker/CheckTreePicker.d.ts +30 -12
  286. package/esm/CheckTreePicker/CheckTreePicker.js +156 -607
  287. package/esm/CheckTreePicker/hooks/useFocusState.d.ts +16 -0
  288. package/esm/CheckTreePicker/hooks/useFocusState.js +37 -0
  289. package/esm/DateInput/DateField.js +3 -1
  290. package/esm/DateInput/DateInput.js +19 -18
  291. package/{cjs/DateInput → esm/DateInput/hooks}/useDateInputState.d.ts +1 -1
  292. package/esm/DateInput/{useDateInputState.js → hooks/useDateInputState.js} +2 -2
  293. package/esm/DateInput/hooks/useFieldCursor.d.ts +6 -0
  294. package/esm/DateInput/hooks/useFieldCursor.js +49 -0
  295. package/esm/DateInput/hooks/useSelectedState.d.ts +14 -0
  296. package/esm/DateInput/hooks/useSelectedState.js +17 -0
  297. package/esm/DateInput/index.d.ts +5 -3
  298. package/esm/DateInput/index.js +5 -3
  299. package/esm/DateInput/utils.d.ts +0 -1
  300. package/esm/DateInput/utils.js +2 -23
  301. package/esm/DatePicker/DatePicker.d.ts +4 -0
  302. package/esm/DatePicker/DatePicker.js +20 -5
  303. package/esm/DatePicker/types.d.ts +0 -4
  304. package/esm/DateRangeInput/DateRangeInput.js +17 -18
  305. package/esm/DateRangePicker/DateRangePicker.d.ts +51 -23
  306. package/esm/DateRangePicker/DateRangePicker.js +71 -51
  307. package/esm/DateRangePicker/hooks/useDateDisabled.d.ts +16 -0
  308. package/esm/DateRangePicker/hooks/useDateDisabled.js +26 -0
  309. package/esm/DateRangePicker/types.d.ts +1 -0
  310. package/esm/Highlight/Highlight.d.ts +14 -0
  311. package/esm/Highlight/Highlight.js +52 -0
  312. package/esm/Highlight/index.d.ts +3 -0
  313. package/esm/Highlight/index.js +3 -0
  314. package/esm/Highlight/utils/highlightText.d.ts +5 -0
  315. package/esm/Highlight/utils/highlightText.js +25 -0
  316. package/esm/InputPicker/InputPicker.js +3 -7
  317. package/esm/MultiCascadeTree/SearchView.js +6 -14
  318. package/esm/MultiCascadeTree/hooks/useCascadeValue.js +15 -1
  319. package/esm/MultiCascadeTree/hooks/useColumnData.js +1 -1
  320. package/esm/MultiCascadeTree/hooks/useFlattenData.js +1 -1
  321. package/esm/MultiCascadeTree/hooks/useSearch.js +2 -1
  322. package/esm/MultiCascadeTree/utils.d.ts +4 -4
  323. package/esm/MultiCascadeTree/utils.js +18 -9
  324. package/esm/MultiCascader/MultiCascader.js +1 -1
  325. package/esm/SelectPicker/SelectPicker.js +2 -6
  326. package/esm/Tree/IndentLine.d.ts +3 -0
  327. package/esm/Tree/IndentLine.js +12 -0
  328. package/esm/Tree/Tree.d.ts +4 -92
  329. package/esm/Tree/Tree.js +78 -18
  330. package/esm/Tree/TreeNode.d.ts +101 -0
  331. package/esm/Tree/TreeNode.js +141 -0
  332. package/esm/Tree/TreeNodeToggle.d.ts +9 -0
  333. package/esm/Tree/TreeNodeToggle.js +50 -0
  334. package/esm/Tree/TreeProvider.d.ts +52 -0
  335. package/esm/Tree/TreeProvider.js +74 -0
  336. package/esm/Tree/TreeView.d.ts +68 -0
  337. package/esm/Tree/TreeView.js +299 -0
  338. package/esm/Tree/hooks/useExpandTree.d.ts +60 -0
  339. package/esm/Tree/hooks/useExpandTree.js +70 -0
  340. package/esm/Tree/hooks/useFlattenTree.d.ts +42 -0
  341. package/esm/Tree/hooks/useFlattenTree.js +92 -0
  342. package/esm/Tree/hooks/useFocusTree.d.ts +24 -0
  343. package/esm/Tree/hooks/useFocusTree.js +153 -0
  344. package/esm/Tree/hooks/useForceUpdate.d.ts +2 -0
  345. package/esm/Tree/hooks/useForceUpdate.js +11 -0
  346. package/esm/Tree/hooks/useTreeDrag.d.ts +32 -0
  347. package/esm/Tree/hooks/useTreeDrag.js +264 -0
  348. package/esm/Tree/hooks/useTreeNodeProps.d.ts +29 -0
  349. package/esm/Tree/hooks/useTreeNodeProps.js +76 -0
  350. package/esm/Tree/hooks/useTreeNodeRefs.d.ts +6 -0
  351. package/esm/Tree/hooks/useTreeNodeRefs.js +18 -0
  352. package/esm/Tree/hooks/useTreeSearch.d.ts +18 -0
  353. package/esm/Tree/hooks/useTreeSearch.js +69 -0
  354. package/esm/Tree/hooks/useTreeWithChildren.d.ts +14 -0
  355. package/esm/Tree/hooks/useTreeWithChildren.js +59 -0
  356. package/esm/Tree/hooks/useVirtualizedTreeData.d.ts +7 -0
  357. package/esm/Tree/hooks/useVirtualizedTreeData.js +77 -0
  358. package/esm/Tree/types.d.ts +257 -0
  359. package/esm/Tree/types.js +30 -0
  360. package/esm/Tree/utils/flattenTree.d.ts +25 -0
  361. package/esm/Tree/utils/flattenTree.js +88 -0
  362. package/esm/Tree/utils/focusableTree.d.ts +55 -0
  363. package/esm/Tree/utils/focusableTree.js +146 -0
  364. package/esm/Tree/utils/formatNodeRefKey.d.ts +4 -0
  365. package/esm/Tree/utils/formatNodeRefKey.js +7 -0
  366. package/esm/Tree/utils/getExpandItemValues.d.ts +11 -0
  367. package/esm/Tree/utils/getExpandItemValues.js +17 -0
  368. package/esm/Tree/utils/getNodeParentKeys.d.ts +5 -0
  369. package/esm/Tree/utils/getNodeParentKeys.js +17 -0
  370. package/esm/Tree/utils/getTreeActiveNode.d.ts +5 -0
  371. package/esm/Tree/utils/getTreeActiveNode.js +16 -0
  372. package/esm/Tree/utils/hasVisibleChildren.d.ts +5 -0
  373. package/esm/Tree/utils/hasVisibleChildren.js +12 -0
  374. package/esm/Tree/utils/indentTreeNode.d.ts +3 -0
  375. package/esm/Tree/utils/indentTreeNode.js +14 -0
  376. package/esm/Tree/utils/index.d.ts +11 -0
  377. package/esm/Tree/utils/index.js +14 -0
  378. package/esm/Tree/utils/isExpand.d.ts +6 -0
  379. package/esm/Tree/utils/isExpand.js +11 -0
  380. package/esm/Tree/utils/isSearching.d.ts +1 -0
  381. package/esm/Tree/utils/isSearching.js +5 -0
  382. package/esm/Tree/utils/treeKeyboardInteractions.d.ts +21 -0
  383. package/esm/Tree/utils/treeKeyboardInteractions.js +43 -0
  384. package/esm/TreePicker/TreePicker.d.ts +27 -21
  385. package/esm/TreePicker/TreePicker.js +158 -579
  386. package/esm/TreePicker/hooks/useFocusState.d.ts +20 -0
  387. package/esm/TreePicker/hooks/useFocusState.js +48 -0
  388. package/esm/index.d.ts +2 -0
  389. package/esm/index.js +1 -0
  390. package/esm/internals/Picker/Listbox.d.ts +40 -10
  391. package/esm/internals/Picker/Listbox.js +22 -16
  392. package/esm/internals/Picker/PickerIndicator.d.ts +2 -1
  393. package/esm/internals/Picker/PickerIndicator.js +7 -3
  394. package/esm/internals/Picker/hooks/useFocusItemValue.js +1 -1
  395. package/esm/internals/Picker/hooks/usePickerRef.d.ts +1 -4
  396. package/esm/internals/Picker/hooks/usePickerRef.js +3 -20
  397. package/esm/internals/Picker/index.d.ts +0 -1
  398. package/esm/internals/Picker/index.js +0 -1
  399. package/esm/internals/Picker/utils.js +1 -1
  400. package/esm/internals/{Picker → Tree}/TreeView.js +1 -1
  401. package/esm/internals/Tree/index.d.ts +1 -0
  402. package/esm/internals/Tree/index.js +2 -0
  403. package/esm/internals/Tree/utils/filterNodesOfTree.d.ts +5 -0
  404. package/esm/internals/Tree/utils/filterNodesOfTree.js +26 -0
  405. package/esm/internals/Tree/utils/findNodeOfTree.d.ts +1 -0
  406. package/esm/internals/Tree/utils/findNodeOfTree.js +22 -0
  407. package/esm/internals/Tree/utils/getParentMap.d.ts +15 -0
  408. package/esm/internals/Tree/utils/getParentMap.js +47 -0
  409. package/esm/internals/Tree/utils/getPathTowardsItem.d.ts +4 -0
  410. package/esm/internals/Tree/utils/getPathTowardsItem.js +12 -0
  411. package/esm/internals/Tree/utils/index.d.ts +4 -0
  412. package/esm/internals/Tree/utils/index.js +5 -0
  413. package/esm/internals/Windowing/List.d.ts +1 -0
  414. package/esm/internals/Windowing/List.js +3 -0
  415. package/esm/internals/Windowing/index.d.ts +1 -1
  416. package/esm/internals/Windowing/index.js +1 -1
  417. package/esm/internals/hooks/index.d.ts +1 -0
  418. package/esm/internals/hooks/index.js +2 -0
  419. package/esm/internals/hooks/useFoucsVirtualListItem.d.ts +7 -0
  420. package/esm/internals/hooks/useFoucsVirtualListItem.js +22 -0
  421. package/esm/{utils → internals/utils}/getSafeRegExpString.d.ts +1 -1
  422. package/esm/{utils → internals/utils}/getSafeRegExpString.js +1 -1
  423. package/esm/internals/utils/index.d.ts +2 -0
  424. package/esm/internals/utils/index.js +3 -0
  425. package/esm/internals/utils/stringifyReactNode.d.ts +2 -0
  426. package/esm/internals/utils/stringifyReactNode.js +12 -0
  427. package/esm/utils/constants.d.ts +0 -2
  428. package/esm/utils/constants.js +0 -3
  429. package/esm/utils/getDataGroupBy.js +1 -1
  430. package/esm/utils/index.d.ts +0 -3
  431. package/esm/utils/index.js +0 -3
  432. package/esm/utils/useIsomorphicLayoutEffect.d.ts +2 -2
  433. package/internals/Picker/styles/index.less +27 -1
  434. package/package.json +2 -2
  435. package/styles/color-modes/dark.less +5 -1
  436. package/styles/color-modes/high-contrast.less +8 -2
  437. package/styles/color-modes/light.less +10 -5
  438. package/styles/index.less +1 -0
  439. package/TreePicker/styles/mixin.less +0 -7
  440. package/cjs/CheckTreePicker/CheckTreeNode.d.ts +0 -28
  441. package/cjs/CheckTreePicker/CheckTreeNode.js +0 -140
  442. package/cjs/CheckTreePicker/utils.d.ts +0 -44
  443. package/cjs/Tree/TreeContext.d.ts +0 -6
  444. package/cjs/Tree/TreeContext.js +0 -10
  445. package/cjs/TreePicker/TreeNode.d.ts +0 -36
  446. package/cjs/TreePicker/TreeNode.js +0 -174
  447. package/cjs/utils/appendTooltip.d.ts +0 -10
  448. package/cjs/utils/appendTooltip.js +0 -20
  449. package/cjs/utils/stringToObject.d.ts +0 -2
  450. package/cjs/utils/stringToObject.js +0 -19
  451. package/cjs/utils/treeUtils.d.ts +0 -304
  452. package/cjs/utils/treeUtils.js +0 -1095
  453. package/esm/CheckTreePicker/CheckTreeNode.d.ts +0 -28
  454. package/esm/CheckTreePicker/CheckTreeNode.js +0 -133
  455. package/esm/CheckTreePicker/utils.d.ts +0 -44
  456. package/esm/Tree/TreeContext.d.ts +0 -6
  457. package/esm/Tree/TreeContext.js +0 -4
  458. package/esm/TreePicker/TreeNode.d.ts +0 -36
  459. package/esm/TreePicker/TreeNode.js +0 -167
  460. package/esm/utils/appendTooltip.d.ts +0 -10
  461. package/esm/utils/appendTooltip.js +0 -15
  462. package/esm/utils/stringToObject.d.ts +0 -2
  463. package/esm/utils/stringToObject.js +0 -14
  464. package/esm/utils/treeUtils.d.ts +0 -304
  465. package/esm/utils/treeUtils.js +0 -1043
  466. /package/cjs/DateInput/{useIsFocused.d.ts → hooks/useIsFocused.d.ts} +0 -0
  467. /package/cjs/DateInput/{useIsFocused.js → hooks/useIsFocused.js} +0 -0
  468. /package/cjs/DateInput/{useKeyboardInputEvent.d.ts → hooks/useKeyboardInputEvent.d.ts} +0 -0
  469. /package/cjs/DateInput/{useKeyboardInputEvent.js → hooks/useKeyboardInputEvent.js} +0 -0
  470. /package/cjs/internals/{Picker → Tree}/TreeView.d.ts +0 -0
  471. /package/esm/DateInput/{useIsFocused.d.ts → hooks/useIsFocused.d.ts} +0 -0
  472. /package/esm/DateInput/{useIsFocused.js → hooks/useIsFocused.js} +0 -0
  473. /package/esm/DateInput/{useKeyboardInputEvent.d.ts → hooks/useKeyboardInputEvent.d.ts} +0 -0
  474. /package/esm/DateInput/{useKeyboardInputEvent.js → hooks/useKeyboardInputEvent.js} +0 -0
  475. /package/esm/internals/{Picker → Tree}/TreeView.d.ts +0 -0
@@ -0,0 +1,92 @@
1
+ 'use client';
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import { useCallback, useRef, useEffect } from 'react';
4
+ import omit from 'lodash/omit';
5
+ import isNil from 'lodash/isNil';
6
+ import shallowEqual from '../../utils/shallowEqual';
7
+ import { formatNodeRefKey } from '../utils';
8
+ import useForceUpdate from './useForceUpdate';
9
+ /**
10
+ * Custom hook that flattens a tree data structure into a map of nodes.
11
+ *
12
+ */
13
+ function useFlattenTree(data, options) {
14
+ var value = options.value,
15
+ labelKey = options.labelKey,
16
+ valueKey = options.valueKey,
17
+ childrenKey = options.childrenKey,
18
+ _options$uncheckableI = options.uncheckableItemValues,
19
+ uncheckableItemValues = _options$uncheckableI === void 0 ? [] : _options$uncheckableI,
20
+ cascade = options.cascade,
21
+ multiple = options.multiple,
22
+ callback = options.callback;
23
+ var forceUpdate = useForceUpdate();
24
+ var flattenedNodes = useRef({});
25
+ var updateTreeNodeCheckState = useCallback(function (value) {
26
+ if (value === void 0) {
27
+ value = [];
28
+ }
29
+ // Reset values to false
30
+ Object.keys(flattenedNodes.current).forEach(function (refKey) {
31
+ var node = flattenedNodes.current[refKey];
32
+ if (cascade && !isNil(node.parent) && !isNil(node.parent.refKey)) {
33
+ node.check = flattenedNodes.current[node.parent.refKey].check;
34
+ } else {
35
+ node.check = false;
36
+ }
37
+ value.forEach(function (nodeVal) {
38
+ if (shallowEqual(flattenedNodes.current[refKey][valueKey], nodeVal) && !uncheckableItemValues.some(function (uncheckableValue) {
39
+ return shallowEqual(nodeVal, uncheckableValue);
40
+ })) {
41
+ flattenedNodes.current[refKey].check = true;
42
+ }
43
+ });
44
+ });
45
+ }, [cascade, uncheckableItemValues, valueKey]);
46
+ var flattenTreeData = useCallback(function (treeData, parent, layer) {
47
+ if (layer === void 0) {
48
+ layer = 1;
49
+ }
50
+ if (!Array.isArray(treeData) || treeData.length === 0) {
51
+ return [];
52
+ }
53
+ treeData.map(function (node) {
54
+ var _extends2;
55
+ var value = node[valueKey];
56
+ /**
57
+ * because the value of the node's type is string or number,
58
+ * so it can used as the key of the object directly
59
+ * to avoid number value is converted to string. 1 and '1' will be convert to '1'
60
+ * we used `String_` or `Number_` prefix
61
+ */
62
+ var refKey = formatNodeRefKey(value);
63
+ node.refKey = refKey;
64
+ flattenedNodes.current[refKey] = _extends((_extends2 = {
65
+ layer: layer
66
+ }, _extends2[labelKey] = node[labelKey], _extends2[valueKey] = node[valueKey], _extends2.uncheckable = uncheckableItemValues.some(function (value) {
67
+ return shallowEqual(node[valueKey], value);
68
+ }), _extends2), node);
69
+ if (parent) {
70
+ flattenedNodes.current[refKey].parent = omit(parent, 'parent', 'children');
71
+ }
72
+ flattenTreeData(node[childrenKey], node, layer + 1);
73
+ });
74
+ callback === null || callback === void 0 ? void 0 : callback(flattenedNodes.current);
75
+ forceUpdate();
76
+ }, [callback, forceUpdate, valueKey, labelKey, uncheckableItemValues, childrenKey]);
77
+ useEffect(function () {
78
+ // when data is changed, should clear the flattenedNodes, avoid duplicate keys
79
+ flattenedNodes.current = {};
80
+ flattenTreeData(data);
81
+ }, [data]); // eslint-disable-line react-hooks/exhaustive-deps
82
+
83
+ useEffect(function () {
84
+ if (multiple) {
85
+ updateTreeNodeCheckState(value);
86
+ forceUpdate();
87
+ }
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [value]);
90
+ return flattenedNodes.current;
91
+ }
92
+ export default useFlattenTree;
@@ -0,0 +1,24 @@
1
+ /// <reference types="react" />
2
+ import type { TreeNode } from '../types';
3
+ interface UseFocusTreeProps<T extends TreeNode> {
4
+ filteredData: T[];
5
+ disabledItemValues: any[];
6
+ expandItemValues: any[];
7
+ searchKeyword: string;
8
+ flattenedNodes: any;
9
+ onExpand?: (nodeData: T, expanded: boolean) => void;
10
+ onFocused?: (value: TreeNode['value']) => void;
11
+ }
12
+ /**
13
+ * Custom hook that manages the focus behavior of a tree component.
14
+ */
15
+ declare function useFocusTree(props: UseFocusTreeProps<TreeNode>): {
16
+ treeViewRef: import("react").RefObject<HTMLDivElement>;
17
+ focusTreeFirstNode: (...args: any[]) => any;
18
+ focusItemValue: string | number | null | undefined;
19
+ treeNodesRefs: {};
20
+ saveTreeNodeRef: (ref: import("react").Ref<any>, refKey?: string | undefined) => void;
21
+ setFocusItemValue: import("react").Dispatch<import("react").SetStateAction<string | number | null | undefined>>;
22
+ onTreeKeydown: (...args: any[]) => any;
23
+ };
24
+ export default useFocusTree;
@@ -0,0 +1,153 @@
1
+ 'use client';
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import isNil from 'lodash/isNil';
4
+ import { KEY_VALUES } from '../../utils/constants';
5
+ import { useEventCallback, useCustom } from '../../utils';
6
+ import { onMenuKeyDown } from '../../internals/Picker';
7
+ import { useItemDataKeys } from '../TreeProvider';
8
+ import { isSearching, focusNextItem, getFocusableItems, getActiveItem, focusPreviousItem, focusCurrentItem, focusTreeNode, handleLeftArrow, handleRightArrow } from '../utils';
9
+ import useTreeNodeRefs from './useTreeNodeRefs';
10
+ import { useRegisterTreeMethods } from '../TreeProvider';
11
+ /**
12
+ * Custom hook that manages the focus behavior of a tree component.
13
+ */
14
+ function useFocusTree(props) {
15
+ var filteredData = props.filteredData,
16
+ searchKeyword = props.searchKeyword,
17
+ flattenedNodes = props.flattenedNodes,
18
+ expandItemValues = props.expandItemValues,
19
+ disabledItemValues = props.disabledItemValues,
20
+ onExpand = props.onExpand,
21
+ onFocused = props.onFocused;
22
+ var _useCustom = useCustom(),
23
+ rtl = _useCustom.rtl;
24
+ var _useItemDataKeys = useItemDataKeys(),
25
+ valueKey = _useItemDataKeys.valueKey,
26
+ childrenKey = _useItemDataKeys.childrenKey;
27
+ var _useTreeNodeRefs = useTreeNodeRefs(),
28
+ treeNodesRefs = _useTreeNodeRefs.treeNodesRefs,
29
+ saveTreeNodeRef = _useTreeNodeRefs.saveTreeNodeRef;
30
+ var treeViewRef = useRef(null);
31
+ var _useState = useState(null),
32
+ focusItemValue = _useState[0],
33
+ setFocusItemValue = _useState[1];
34
+ var register = useRegisterTreeMethods();
35
+ var flattenedNodesRef = useRef(flattenedNodes);
36
+ var getFocusProps = function getFocusProps(value) {
37
+ var options = {
38
+ disabledItemValues: disabledItemValues,
39
+ valueKey: valueKey,
40
+ childrenKey: childrenKey,
41
+ expandItemValues: expandItemValues
42
+ };
43
+ var focusableItems = getFocusableItems(filteredData, options, isSearching(searchKeyword));
44
+ return {
45
+ focusItemValue: value || focusItemValue,
46
+ valueKey: valueKey,
47
+ focusableItems: focusableItems,
48
+ treeNodesRefs: treeNodesRefs
49
+ };
50
+ };
51
+ var handleFocusItem = useEventCallback(function (key) {
52
+ var focusProps = getFocusProps();
53
+ var focusedValue = null;
54
+ if (key === KEY_VALUES.DOWN) {
55
+ focusedValue = focusNextItem(focusProps);
56
+ } else if (key === KEY_VALUES.UP) {
57
+ focusedValue = focusPreviousItem(focusProps);
58
+ }
59
+ if (focusedValue) {
60
+ setFocusItemValue(focusedValue);
61
+ onFocused === null || onFocused === void 0 ? void 0 : onFocused(focusedValue);
62
+ }
63
+ });
64
+ var handleLeftArrowEvent = useEventCallback(function () {
65
+ if (isNil(focusItemValue)) {
66
+ return;
67
+ }
68
+ var focusItem = getActiveItem(focusItemValue, flattenedNodes, valueKey);
69
+ var expand = expandItemValues.includes(focusItem === null || focusItem === void 0 ? void 0 : focusItem[valueKey]);
70
+ var onFocusItem = function onFocusItem() {
71
+ var _focusItem$parent, _focusItem$parent2;
72
+ var focusedValue = focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent = focusItem.parent) === null || _focusItem$parent === void 0 ? void 0 : _focusItem$parent[valueKey];
73
+ setFocusItemValue(focusedValue);
74
+ onFocused === null || onFocused === void 0 ? void 0 : onFocused(focusedValue);
75
+ focusTreeNode(focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent2 = focusItem.parent) === null || _focusItem$parent2 === void 0 ? void 0 : _focusItem$parent2.refKey, treeNodesRefs);
76
+ };
77
+ handleLeftArrow({
78
+ focusItem: focusItem,
79
+ expand: expand,
80
+ onExpand: onExpand,
81
+ childrenKey: childrenKey,
82
+ onFocusItem: onFocusItem
83
+ });
84
+ });
85
+ var handleRightArrowEvent = useEventCallback(function () {
86
+ if (isNil(focusItemValue)) {
87
+ return;
88
+ }
89
+ var focusItem = getActiveItem(focusItemValue, flattenedNodes, valueKey);
90
+ var expand = expandItemValues.includes(focusItem === null || focusItem === void 0 ? void 0 : focusItem[valueKey]);
91
+ var onFocusItem = function onFocusItem() {
92
+ return handleFocusItem(KEY_VALUES.DOWN);
93
+ };
94
+ handleRightArrow({
95
+ focusItem: focusItem,
96
+ expand: expand,
97
+ childrenKey: childrenKey,
98
+ onExpand: onExpand,
99
+ onFocusItem: onFocusItem
100
+ });
101
+ });
102
+ var onTreeKeydown = useEventCallback(function (event) {
103
+ onMenuKeyDown(event, {
104
+ down: function down() {
105
+ return handleFocusItem(KEY_VALUES.DOWN);
106
+ },
107
+ up: function up() {
108
+ return handleFocusItem(KEY_VALUES.UP);
109
+ },
110
+ left: rtl ? handleRightArrowEvent : handleLeftArrowEvent,
111
+ right: rtl ? handleLeftArrowEvent : handleRightArrowEvent
112
+ });
113
+ });
114
+ var focusTreeFirstNode = useEventCallback(function () {
115
+ handleFocusItem(KEY_VALUES.DOWN);
116
+ });
117
+ var focusTreeActiveNode = useCallback(function () {
118
+ var refKey = focusCurrentItem({
119
+ container: treeViewRef.current
120
+ });
121
+ if (refKey) {
122
+ var _flattenedNodesRef$cu;
123
+ var node = (_flattenedNodesRef$cu = flattenedNodesRef.current) === null || _flattenedNodesRef$cu === void 0 ? void 0 : _flattenedNodesRef$cu[refKey];
124
+ if (node) {
125
+ setFocusItemValue(node[valueKey]);
126
+ onFocused === null || onFocused === void 0 ? void 0 : onFocused(node[valueKey]);
127
+ }
128
+ }
129
+ }, [onFocused, valueKey]);
130
+ useEffect(function () {
131
+ var unregister = register === null || register === void 0 ? void 0 : register({
132
+ focusTreeFirstNode: focusTreeFirstNode,
133
+ focusTreeActiveNode: focusTreeActiveNode
134
+ });
135
+ return function () {
136
+ unregister === null || unregister === void 0 ? void 0 : unregister();
137
+ };
138
+ // eslint-disable-next-line react-hooks/exhaustive-deps
139
+ }, []);
140
+ useEffect(function () {
141
+ flattenedNodesRef.current = flattenedNodes;
142
+ }, [flattenedNodes]);
143
+ return {
144
+ treeViewRef: treeViewRef,
145
+ focusTreeFirstNode: focusTreeFirstNode,
146
+ focusItemValue: focusItemValue,
147
+ treeNodesRefs: treeNodesRefs,
148
+ saveTreeNodeRef: saveTreeNodeRef,
149
+ setFocusItemValue: setFocusItemValue,
150
+ onTreeKeydown: onTreeKeydown
151
+ };
152
+ }
153
+ export default useFocusTree;
@@ -0,0 +1,2 @@
1
+ declare function useForceUpdate(): () => void;
2
+ export default useForceUpdate;
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { useState, useCallback } from 'react';
3
+ function useForceUpdate() {
4
+ var _useState = useState(Object.create(null)),
5
+ dispatch = _useState[1];
6
+ var forceUpdate = useCallback(function () {
7
+ dispatch(Object.create(null));
8
+ }, [dispatch]);
9
+ return forceUpdate;
10
+ }
11
+ export default useForceUpdate;
@@ -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,264 @@
1
+ 'use client';
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import { useState, useRef, useCallback } from 'react';
4
+ import isNil from 'lodash/isNil';
5
+ import { TREE_NODE_DROP_POSITION, shallowEqual } from '../../utils';
6
+ import { useEventCallback, shallowEqual as equal } from '../../utils';
7
+ import { stringifyReactNode } from '../../internals/utils';
8
+ import { useItemDataKeys } from '../TreeProvider';
9
+ /**
10
+ * The gap between tree nodes.
11
+ */
12
+ var TREE_NODE_GAP = 4;
13
+
14
+ /**
15
+ * Calculates the drop position of a tree node based on the clientY coordinate of a drag event
16
+ * and the bounding rectangle of the tree node element.
17
+ *
18
+ * @param event - The drag event.
19
+ * @param treeNodeElement - The element representing the tree node.
20
+ * @returns The drop position of the tree node.
21
+ */
22
+ function calDropNodePosition(event, treeNodeElement) {
23
+ var clientY = event.clientY;
24
+ var _treeNodeElement$getB = treeNodeElement.getBoundingClientRect(),
25
+ top = _treeNodeElement$getB.top,
26
+ bottom = _treeNodeElement$getB.bottom;
27
+ var gap = TREE_NODE_GAP;
28
+
29
+ // bottom of node
30
+ if (clientY >= bottom - gap && clientY <= bottom) {
31
+ return TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM;
32
+ }
33
+
34
+ // top of node
35
+ if (clientY <= top + gap && clientY >= top) {
36
+ return TREE_NODE_DROP_POSITION.DRAG_OVER_TOP;
37
+ }
38
+ if (clientY >= top + gap && clientY <= bottom - gap) {
39
+ return TREE_NODE_DROP_POSITION.DRAG_OVER;
40
+ }
41
+ return -1;
42
+ }
43
+
44
+ /**
45
+ * Creates a drag preview element for tree nodes.
46
+ */
47
+ function createDragPreview(name, className) {
48
+ var dragPreview = document.createElement('div');
49
+ dragPreview.id = 'rs-tree-drag-preview';
50
+ dragPreview.dataset.testid = 'drag-preview';
51
+ dragPreview.innerHTML = name;
52
+ dragPreview.classList.add(className);
53
+ document.body.appendChild(dragPreview);
54
+ return dragPreview;
55
+ }
56
+
57
+ /**
58
+ * Removes the drag preview element from the DOM.
59
+ */
60
+ function removeDragPreview() {
61
+ var _dragPreview$parentNo, _dragPreview$parentNo2;
62
+ var dragPreview = document.getElementById('rs-tree-drag-preview');
63
+ 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);
64
+ }
65
+ /**
66
+ * Custom hook for handling tree node dragging.
67
+ */
68
+ export default function useTreeDrag(props) {
69
+ var _useItemDataKeys = useItemDataKeys(),
70
+ childrenKey = _useItemDataKeys.childrenKey,
71
+ valueKey = _useItemDataKeys.valueKey,
72
+ labelKey = _useItemDataKeys.labelKey;
73
+ var draggable = props.draggable,
74
+ flattenedNodes = props.flattenedNodes,
75
+ treeNodesRefs = props.treeNodesRefs,
76
+ onDragStart = props.onDragStart,
77
+ onDragEnter = props.onDragEnter,
78
+ onDragOver = props.onDragOver,
79
+ onDragLeave = props.onDragLeave,
80
+ onDragEnd = props.onDragEnd,
81
+ onDrop = props.onDrop,
82
+ prefix = props.prefix; // current dragging node
83
+ var dragNode = useRef(null);
84
+ var _useState = useState(null),
85
+ dragOverNodeKey = _useState[0],
86
+ setDragOverNodeKey = _useState[1]; // drag node and it's children nodes key
87
+ var _useState2 = useState([]),
88
+ dragNodeKeys = _useState2[0],
89
+ setDragNodeKeys = _useState2[1];
90
+ var _useState3 = useState(null),
91
+ dropNodePosition = _useState3[0],
92
+ setDropNodePosition = _useState3[1];
93
+ var setDragNode = useCallback(function (node) {
94
+ dragNode.current = node;
95
+ }, []);
96
+
97
+ /**
98
+ * Retrieves an array of keys for the nodes in a tree starting from the specified drag node.
99
+ */
100
+ var getDragNodeKeys = useCallback(function (dragNode) {
101
+ var dragNodeKeys = [dragNode[valueKey]];
102
+ var traverse = function traverse(data) {
103
+ if ((data === null || data === void 0 ? void 0 : data.length) > 0) {
104
+ data.forEach(function (node) {
105
+ dragNodeKeys = dragNodeKeys.concat([node[valueKey]]);
106
+ if (node[childrenKey]) {
107
+ traverse(node[childrenKey]);
108
+ }
109
+ });
110
+ }
111
+ };
112
+ traverse(dragNode[childrenKey]);
113
+ return dragNodeKeys;
114
+ }, [childrenKey, valueKey]);
115
+
116
+ /**
117
+ * Removes the drag node from the data array.
118
+ *
119
+ */
120
+ var removeDragNode = useCallback(function (data, params) {
121
+ var dragNode = params.dragNode;
122
+ var traverse = function traverse(items, parent) {
123
+ for (var index = 0; index < items.length; index += 1) {
124
+ var item = items[index];
125
+ if (shallowEqual(item[valueKey], dragNode[valueKey])) {
126
+ items.splice(index, 1);
127
+ // when children is empty, delete children prop for hidden anchor
128
+ if (items.length === 0 && parent) {
129
+ delete parent.children;
130
+ }
131
+ break;
132
+ }
133
+ if (Array.isArray(item[childrenKey])) {
134
+ traverse(item[childrenKey], item);
135
+ }
136
+ }
137
+ };
138
+ traverse(data);
139
+ }, [childrenKey, valueKey]);
140
+
141
+ /**
142
+ * Creates a function that modifies a tree data structure based on drag and drop parameters.
143
+ */
144
+ var createDragTreeDataFunction = useCallback(function (params) {
145
+ return function (tree) {
146
+ var data = [].concat(tree);
147
+ var dragNode = params.dragNode,
148
+ dropNode = params.dropNode,
149
+ dropNodePosition = params.dropNodePosition;
150
+ var cloneDragNode = _extends({}, dragNode);
151
+ removeDragNode(data, params);
152
+ var updateTree = function updateTree(items) {
153
+ for (var index = 0; index < items.length; index += 1) {
154
+ var item = items[index];
155
+ if (shallowEqual(item[valueKey], dropNode[valueKey])) {
156
+ // drag to node inside
157
+ if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER) {
158
+ item[childrenKey] = isNil(item[childrenKey]) ? [] : item[childrenKey];
159
+ item[childrenKey].push(cloneDragNode);
160
+ break;
161
+ } else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_TOP) {
162
+ // drag to top of node
163
+ items.splice(index, 0, cloneDragNode);
164
+ break;
165
+ } else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM) {
166
+ // drag to bottom of node
167
+ items.splice(index + 1, 0, cloneDragNode);
168
+ break;
169
+ }
170
+ }
171
+ if (Array.isArray(item[childrenKey]) && item[childrenKey].length > 0) {
172
+ updateTree(item[childrenKey]);
173
+ }
174
+ }
175
+ };
176
+ updateTree(data);
177
+ return [].concat(data);
178
+ };
179
+ }, [childrenKey, removeDragNode, valueKey]);
180
+ var getDropData = useCallback(function (nodeData) {
181
+ var dragParams = {
182
+ dragNode: dragNode.current,
183
+ dropNode: nodeData,
184
+ dropNodePosition: dropNodePosition
185
+ };
186
+ return _extends({}, dragParams, {
187
+ createUpdateDataFunction: createDragTreeDataFunction(dragParams)
188
+ });
189
+ }, [createDragTreeDataFunction, dropNodePosition]);
190
+ var handleDragStart = useEventCallback(function (nodeData, event) {
191
+ if (draggable) {
192
+ var _event$dataTransfer;
193
+ var dragMoverNode = createDragPreview(stringifyReactNode(nodeData[labelKey]), prefix('drag-preview'));
194
+ (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.setDragImage(dragMoverNode, 0, 0);
195
+ setDragNodeKeys(getDragNodeKeys(nodeData));
196
+ setDragNode(flattenedNodes[nodeData.refKey]);
197
+ onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(nodeData, event);
198
+ }
199
+ });
200
+ var handleDragEnter = useEventCallback(function (nodeData, event) {
201
+ if (dragNodeKeys.some(function (d) {
202
+ return equal(d, nodeData[valueKey]);
203
+ })) {
204
+ return;
205
+ }
206
+ if (dragNode.current) {
207
+ setDragOverNodeKey(nodeData[valueKey]);
208
+ setDropNodePosition(calDropNodePosition(event, treeNodesRefs[nodeData.refKey]));
209
+ }
210
+ onDragEnter === null || onDragEnter === void 0 ? void 0 : onDragEnter(nodeData, event);
211
+ });
212
+ var handleDragOver = useEventCallback(function (nodeData, event) {
213
+ if (dragNodeKeys.some(function (d) {
214
+ return equal(d, nodeData[valueKey]);
215
+ })) {
216
+ event.dataTransfer.dropEffect = 'none';
217
+ return;
218
+ }
219
+ if (dragNode.current && equal(nodeData[valueKey], dragOverNodeKey)) {
220
+ var lastDropNodePosition = calDropNodePosition(event, treeNodesRefs[nodeData.refKey]);
221
+ if (lastDropNodePosition === dropNodePosition) return;
222
+ setDropNodePosition(lastDropNodePosition);
223
+ }
224
+ onDragOver === null || onDragOver === void 0 ? void 0 : onDragOver(nodeData, event);
225
+ });
226
+ var handleDragLeave = useEventCallback(function (nodeData, event) {
227
+ onDragLeave === null || onDragLeave === void 0 ? void 0 : onDragLeave(nodeData, event);
228
+ });
229
+ var handleDragEnd = useEventCallback(function (nodeData, event) {
230
+ removeDragPreview();
231
+ setDragNode(null);
232
+ setDragNodeKeys([]);
233
+ setDragOverNodeKey(null);
234
+ onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(nodeData, event);
235
+ });
236
+ var handleDrop = useEventCallback(function (nodeData, event) {
237
+ if (dragNodeKeys.some(function (d) {
238
+ return equal(d, nodeData[valueKey]);
239
+ })) {
240
+ console.error('Cannot drag a node to itself and its children');
241
+ } else {
242
+ var _dropData = getDropData(nodeData);
243
+ onDrop === null || onDrop === void 0 ? void 0 : onDrop(_dropData, event);
244
+ }
245
+ removeDragPreview();
246
+ setDragNode(null);
247
+ setDragNodeKeys([]);
248
+ setDragOverNodeKey(null);
249
+ });
250
+ var dragEvents = {
251
+ onDragStart: handleDragStart,
252
+ onDragEnter: handleDragEnter,
253
+ onDragOver: handleDragOver,
254
+ onDragLeave: handleDragLeave,
255
+ onDragEnd: handleDragEnd,
256
+ onDrop: handleDrop
257
+ };
258
+ return {
259
+ dragNode: dragNode === null || dragNode === void 0 ? void 0 : dragNode.current,
260
+ dragOverNodeKey: dragOverNodeKey,
261
+ dropNodePosition: dropNodePosition,
262
+ dragEvents: dragEvents
263
+ };
264
+ }
@@ -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;
@@ -0,0 +1,76 @@
1
+ 'use client';
2
+ import React, { useCallback } from 'react';
3
+ import { TREE_NODE_DROP_POSITION, shallowEqual as equal } from '../../utils';
4
+ import { useCombobox } from '../../internals/Picker/hooks';
5
+ import { useItemDataKeys } from '../TreeProvider';
6
+ import Highlight from '../../Highlight';
7
+ function useTreeNodeProps(props) {
8
+ var _useItemDataKeys = useItemDataKeys(),
9
+ valueKey = _useItemDataKeys.valueKey,
10
+ labelKey = _useItemDataKeys.labelKey,
11
+ childrenKey = _useItemDataKeys.childrenKey;
12
+ var _useCombobox = useCombobox(),
13
+ id = _useCombobox.id;
14
+ var value = props.value,
15
+ disabledItemValues = props.disabledItemValues,
16
+ loadingNodeValues = props.loadingNodeValues,
17
+ focusItemValue = props.focusItemValue,
18
+ keyword = props.keyword,
19
+ dragNode = props.dragNode,
20
+ dragOverNodeKey = props.dragOverNodeKey,
21
+ dropNodePosition = props.dropNodePosition;
22
+ return useCallback(function (nodeData, layer, index) {
23
+ var DRAG_OVER = TREE_NODE_DROP_POSITION.DRAG_OVER,
24
+ DRAG_OVER_TOP = TREE_NODE_DROP_POSITION.DRAG_OVER_TOP,
25
+ DRAG_OVER_BOTTOM = TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM;
26
+ var visible = nodeData.visible;
27
+ var draggingNode = dragNode !== null && dragNode !== void 0 ? dragNode : {};
28
+ var nodeValue = nodeData[valueKey];
29
+ var nodeLabel = nodeData[labelKey];
30
+ var children = nodeData[childrenKey];
31
+ var label = keyword ? /*#__PURE__*/React.createElement(Highlight, {
32
+ as: "span",
33
+ query: keyword
34
+ }, nodeLabel) : nodeLabel;
35
+ var dragging = equal(nodeValue, draggingNode[valueKey]);
36
+ var dragStatus;
37
+ if (equal(nodeValue, dragOverNodeKey)) {
38
+ switch (dropNodePosition) {
39
+ case DRAG_OVER:
40
+ dragStatus = 'drag-over';
41
+ break;
42
+ case DRAG_OVER_TOP:
43
+ dragStatus = 'drag-over-top';
44
+ break;
45
+ case DRAG_OVER_BOTTOM:
46
+ dragStatus = 'drag-over-bottom';
47
+ break;
48
+ }
49
+ }
50
+ var disabled = disabledItemValues.some(function (disabledItem) {
51
+ return equal(disabledItem, nodeValue);
52
+ });
53
+ var loading = loadingNodeValues.some(function (item) {
54
+ return equal(item, nodeValue);
55
+ });
56
+ var active = equal(nodeValue, value);
57
+ var focus = equal(nodeValue, focusItemValue);
58
+ return {
59
+ id: id ? id + "-opt-" + nodeValue : undefined,
60
+ value: nodeValue,
61
+ label: label,
62
+ index: index,
63
+ layer: layer,
64
+ loading: loading,
65
+ active: active,
66
+ focus: focus,
67
+ visible: visible,
68
+ children: children,
69
+ nodeData: nodeData,
70
+ disabled: disabled,
71
+ dragging: dragging,
72
+ dragStatus: dragStatus
73
+ };
74
+ }, [childrenKey, disabledItemValues, dragNode, dragOverNodeKey, dropNodePosition, focusItemValue, id, keyword, labelKey, loadingNodeValues, value, valueKey]);
75
+ }
76
+ export default useTreeNodeProps;