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,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;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Custom hook that manages references to tree nodes. */
3
+ export default function useTreeNodeRefs(): {
4
+ treeNodesRefs: {};
5
+ saveTreeNodeRef: (ref: React.Ref<any>, refKey?: string) => void;
6
+ };
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ import { useRef } from 'react';
3
+ import isNil from 'lodash/isNil';
4
+
5
+ /**
6
+ * Custom hook that manages references to tree nodes. */
7
+ export default function useTreeNodeRefs() {
8
+ var treeNodeRefs = useRef({});
9
+ var saveTreeNodeRef = function saveTreeNodeRef(ref, refKey) {
10
+ if (!isNil(refKey)) {
11
+ treeNodeRefs.current[refKey] = ref;
12
+ }
13
+ };
14
+ return {
15
+ treeNodesRefs: treeNodeRefs.current,
16
+ saveTreeNodeRef: saveTreeNodeRef
17
+ };
18
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ interface TreeSearchProps<T> {
3
+ searchKeyword?: string;
4
+ data: T[];
5
+ searchBy?: (keyword: any, label: any, item: any) => boolean;
6
+ callback?: (keyword: string, data: T[], event: React.SyntheticEvent) => void;
7
+ }
8
+ /**
9
+ * Custom hook for searching and filtering data in a tree structure.
10
+ */
11
+ export default function useTreeSearch<T>(props: TreeSearchProps<T>): {
12
+ keyword: string;
13
+ filteredData: T[];
14
+ setFilteredData: (data: T[], searchKeyword: string) => void;
15
+ setSearchKeyword: React.Dispatch<React.SetStateAction<string>>;
16
+ handleSearch: (searchKeyword: string, event?: React.ChangeEvent) => void;
17
+ };
18
+ export {};
@@ -0,0 +1,69 @@
1
+ 'use client';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import isArray from 'lodash/isArray';
4
+ import { shouldDisplay } from '../../internals/Picker';
5
+ import { useItemDataKeys } from '../TreeProvider';
6
+ /**
7
+ * Custom hook for searching and filtering data in a tree structure.
8
+ */
9
+ export default function useTreeSearch(props) {
10
+ var _useItemDataKeys = useItemDataKeys(),
11
+ labelKey = _useItemDataKeys.labelKey,
12
+ childrenKey = _useItemDataKeys.childrenKey;
13
+ var searchKeyword = props.searchKeyword,
14
+ data = props.data,
15
+ searchBy = props.searchBy,
16
+ callback = props.callback;
17
+ var filterVisibleData = useCallback(function (data, searchKeyword) {
18
+ var setVisible = function setVisible(nodes) {
19
+ return nodes.forEach(function (item) {
20
+ item.visible = searchBy ? searchBy(searchKeyword, item[labelKey], item) : shouldDisplay(item[labelKey], searchKeyword);
21
+ if (isArray(item[childrenKey])) {
22
+ filterVisibleData(item[childrenKey], searchKeyword);
23
+ item[childrenKey].forEach(function (child) {
24
+ if (child.visible) {
25
+ item.visible = child.visible;
26
+ }
27
+ });
28
+ }
29
+ });
30
+ };
31
+ setVisible(data);
32
+ return data;
33
+ }, [childrenKey, labelKey, searchBy]);
34
+
35
+ // Use search keywords to filter options.
36
+ var _useState = useState(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : ''),
37
+ keyword = _useState[0],
38
+ setSearchKeyword = _useState[1];
39
+ var _useState2 = useState(function () {
40
+ return filterVisibleData(data, keyword);
41
+ }),
42
+ filteredData = _useState2[0],
43
+ setFilteredData = _useState2[1];
44
+ var handleSearch = function handleSearch(searchKeyword, event) {
45
+ var filteredData = filterVisibleData(data, searchKeyword);
46
+ setFilteredData(filteredData);
47
+ setSearchKeyword(searchKeyword);
48
+ if (event) {
49
+ callback === null || callback === void 0 ? void 0 : callback(searchKeyword, filteredData, event);
50
+ }
51
+ };
52
+ useEffect(function () {
53
+ handleSearch(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : '');
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ }, [searchKeyword]);
56
+ useEffect(function () {
57
+ setSearchKeyword(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : '');
58
+ }, [searchKeyword, setSearchKeyword]);
59
+ var setVisibleData = useCallback(function (data, searchKeyword) {
60
+ setFilteredData(filterVisibleData(data, searchKeyword));
61
+ }, [filterVisibleData]);
62
+ return {
63
+ keyword: keyword,
64
+ filteredData: filteredData,
65
+ setFilteredData: setVisibleData,
66
+ setSearchKeyword: setSearchKeyword,
67
+ handleSearch: handleSearch
68
+ };
69
+ }