@yoka-ui/ui 1.0.10-test

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 (484) hide show
  1. package/@Docs-yoka/exports.generated.md +92 -0
  2. package/@Docs-yoka/llms.txt +23 -0
  3. package/README.md +291 -0
  4. package/dist/es/Themes/InputTheme/index.d.ts +6 -0
  5. package/dist/es/Themes/InputTheme/index.js +22 -0
  6. package/dist/es/Themes/InputTheme/index.js.map +7 -0
  7. package/dist/es/Themes/TableTheme/index.d.ts +7 -0
  8. package/dist/es/Themes/TableTheme/index.js +31 -0
  9. package/dist/es/Themes/TableTheme/index.js.map +7 -0
  10. package/dist/es/Themes/TableTheme/index.less +46 -0
  11. package/dist/es/assets/image/YKUI-logo.png +0 -0
  12. package/dist/es/assets/less/ant-reset.less +402 -0
  13. package/dist/es/assets/less/index.less +1 -0
  14. package/dist/es/assets/less/variables.less +16 -0
  15. package/dist/es/business/AiChat/MarkdownRender.d.ts +9 -0
  16. package/dist/es/business/AiChat/MarkdownRender.js +72 -0
  17. package/dist/es/business/AiChat/MarkdownRender.js.map +7 -0
  18. package/dist/es/business/AiChat/index.d.ts +16 -0
  19. package/dist/es/business/AiChat/index.js +521 -0
  20. package/dist/es/business/AiChat/index.js.map +7 -0
  21. package/dist/es/business/AiChat/intentRecognizer.d.ts +33 -0
  22. package/dist/es/business/AiChat/intentRecognizer.js +166 -0
  23. package/dist/es/business/AiChat/intentRecognizer.js.map +7 -0
  24. package/dist/es/business/AiChat/navigationManager.d.ts +94 -0
  25. package/dist/es/business/AiChat/navigationManager.js +208 -0
  26. package/dist/es/business/AiChat/navigationManager.js.map +7 -0
  27. package/dist/es/business/AiChat/sse.d.ts +1 -0
  28. package/dist/es/business/AiChat/sse.js +60 -0
  29. package/dist/es/business/AiChat/sse.js.map +7 -0
  30. package/dist/es/business/AiChat/type.d.ts +157 -0
  31. package/dist/es/business/AiChat/type.js +1 -0
  32. package/dist/es/business/AiChat/type.js.map +7 -0
  33. package/dist/es/business/AiChat/useAiChat.d.ts +2 -0
  34. package/dist/es/business/AiChat/useAiChat.js +238 -0
  35. package/dist/es/business/AiChat/useAiChat.js.map +7 -0
  36. package/dist/es/business/AiChat/useTaskWorkflow.d.ts +26 -0
  37. package/dist/es/business/AiChat/useTaskWorkflow.js +230 -0
  38. package/dist/es/business/AiChat/useTaskWorkflow.js.map +7 -0
  39. package/dist/es/business/DrawerPageInfo/index.d.ts +35 -0
  40. package/dist/es/business/DrawerPageInfo/index.js +133 -0
  41. package/dist/es/business/DrawerPageInfo/index.js.map +7 -0
  42. package/dist/es/business/DrawerPageInfo/index.module.less +87 -0
  43. package/dist/es/business/DrawerPageInfo/test.png +0 -0
  44. package/dist/es/business/Editor/index.d.ts +11 -0
  45. package/dist/es/business/Editor/index.js +86 -0
  46. package/dist/es/business/Editor/index.js.map +7 -0
  47. package/dist/es/business/Editor/index.less +31 -0
  48. package/dist/es/business/Empty/empty.png +0 -0
  49. package/dist/es/business/Empty/index.d.ts +19 -0
  50. package/dist/es/business/Empty/index.js +51 -0
  51. package/dist/es/business/Empty/index.js.map +7 -0
  52. package/dist/es/business/ModCommonFilter/assets/images/empty.png +0 -0
  53. package/dist/es/business/ModCommonFilter/components/FilterButton/IconClose.d.ts +13 -0
  54. package/dist/es/business/ModCommonFilter/components/FilterButton/IconClose.js +51 -0
  55. package/dist/es/business/ModCommonFilter/components/FilterButton/IconClose.js.map +7 -0
  56. package/dist/es/business/ModCommonFilter/components/FilterButton/IconXiala.d.ts +13 -0
  57. package/dist/es/business/ModCommonFilter/components/FilterButton/IconXiala.js +51 -0
  58. package/dist/es/business/ModCommonFilter/components/FilterButton/IconXiala.js.map +7 -0
  59. package/dist/es/business/ModCommonFilter/components/FilterButton/index.d.ts +25 -0
  60. package/dist/es/business/ModCommonFilter/components/FilterButton/index.js +30 -0
  61. package/dist/es/business/ModCommonFilter/components/FilterButton/index.js.map +7 -0
  62. package/dist/es/business/ModCommonFilter/components/FilterButton/index.module.less +97 -0
  63. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.d.ts +18 -0
  64. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js +74 -0
  65. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js.map +7 -0
  66. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.d.ts +37 -0
  67. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js +216 -0
  68. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js.map +7 -0
  69. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.d.ts +26 -0
  70. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js +102 -0
  71. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js.map +7 -0
  72. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.d.ts +51 -0
  73. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.js +71 -0
  74. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.js.map +7 -0
  75. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.module.less +260 -0
  76. package/dist/es/business/ModCommonFilter/index.d.ts +53 -0
  77. package/dist/es/business/ModCommonFilter/index.js +129 -0
  78. package/dist/es/business/ModCommonFilter/index.js.map +7 -0
  79. package/dist/es/business/ModCommonFilter/index.module.less +7 -0
  80. package/dist/es/business/ModCommonFilter/typing.d.ts +20 -0
  81. package/dist/es/business/ModCommonFilter/typing.js +1 -0
  82. package/dist/es/business/ModCommonFilter/typing.js.map +7 -0
  83. package/dist/es/business/YkPorjectSelect/icon-product.png +0 -0
  84. package/dist/es/business/YkPorjectSelect/index.d.ts +51 -0
  85. package/dist/es/business/YkPorjectSelect/index.js +260 -0
  86. package/dist/es/business/YkPorjectSelect/index.js.map +7 -0
  87. package/dist/es/business/YkPorjectSelect/index.module.less +334 -0
  88. package/dist/es/business/YkPorjectSelect/product-close.png +0 -0
  89. package/dist/es/components/Clock/index.d.ts +19 -0
  90. package/dist/es/components/Clock/index.js +55 -0
  91. package/dist/es/components/Clock/index.js.map +7 -0
  92. package/dist/es/components/DebounceInput/index.d.ts +16 -0
  93. package/dist/es/components/DebounceInput/index.js +77 -0
  94. package/dist/es/components/DebounceInput/index.js.map +7 -0
  95. package/dist/es/components/DebounceInput/index.module.less +23 -0
  96. package/dist/es/components/MultipleSelect/index.d.ts +23 -0
  97. package/dist/es/components/MultipleSelect/index.js +249 -0
  98. package/dist/es/components/MultipleSelect/index.js.map +7 -0
  99. package/dist/es/components/MultipleSelect/index.module.less +174 -0
  100. package/dist/es/components/NumericInput/index.d.ts +19 -0
  101. package/dist/es/components/NumericInput/index.js +56 -0
  102. package/dist/es/components/NumericInput/index.js.map +7 -0
  103. package/dist/es/components/RefreshButton/index.d.ts +8 -0
  104. package/dist/es/components/RefreshButton/index.js +21 -0
  105. package/dist/es/components/RefreshButton/index.js.map +7 -0
  106. package/dist/es/components/SearchWithHistory/index.d.ts +21 -0
  107. package/dist/es/components/SearchWithHistory/index.js +115 -0
  108. package/dist/es/components/SearchWithHistory/index.js.map +7 -0
  109. package/dist/es/components/SearchWithHistory/index.module.less +64 -0
  110. package/dist/es/components/TextWithInput/index.d.ts +15 -0
  111. package/dist/es/components/TextWithInput/index.js +35 -0
  112. package/dist/es/components/TextWithInput/index.js.map +7 -0
  113. package/dist/es/components/TextWithToolTip/index.d.ts +17 -0
  114. package/dist/es/components/TextWithToolTip/index.js +118 -0
  115. package/dist/es/components/TextWithToolTip/index.js.map +7 -0
  116. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +28 -0
  117. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js +161 -0
  118. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js.map +7 -0
  119. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.less +151 -0
  120. package/dist/es/components/TreeTransfer/index.d.ts +28 -0
  121. package/dist/es/components/TreeTransfer/index.js +210 -0
  122. package/dist/es/components/TreeTransfer/index.js.map +7 -0
  123. package/dist/es/components/TreeTransfer/index.less +69 -0
  124. package/dist/es/components/TreeTransfer/types.d.ts +122 -0
  125. package/dist/es/components/TreeTransfer/types.js +6 -0
  126. package/dist/es/components/TreeTransfer/types.js.map +7 -0
  127. package/dist/es/components/TreeTransfer/utils/index.d.ts +120 -0
  128. package/dist/es/components/TreeTransfer/utils/index.js +195 -0
  129. package/dist/es/components/TreeTransfer/utils/index.js.map +7 -0
  130. package/dist/es/components/YkDateRangePicker/index.d.ts +57 -0
  131. package/dist/es/components/YkDateRangePicker/index.js +261 -0
  132. package/dist/es/components/YkDateRangePicker/index.js.map +7 -0
  133. package/dist/es/components/YkDateRangePicker/index.module.less +281 -0
  134. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +16 -0
  135. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +193 -0
  136. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +7 -0
  137. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +31 -0
  138. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +556 -0
  139. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +7 -0
  140. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +16 -0
  141. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js +55 -0
  142. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +7 -0
  143. package/dist/es/components/YkRangeDateWithVS/index.d.ts +62 -0
  144. package/dist/es/components/YkRangeDateWithVS/index.js +130 -0
  145. package/dist/es/components/YkRangeDateWithVS/index.js.map +7 -0
  146. package/dist/es/components/YkRangeDateWithVS/index.module.less +548 -0
  147. package/dist/es/components/YkRangeDateWithVS/styles.d.ts +2 -0
  148. package/dist/es/components/YkRangeDateWithVS/styles.js +18 -0
  149. package/dist/es/components/YkRangeDateWithVS/styles.js.map +7 -0
  150. package/dist/es/components/YkRangeDateWithVS/typing.d.ts +15 -0
  151. package/dist/es/components/YkRangeTimeWithRecent/constants.d.ts +48 -0
  152. package/dist/es/components/YkRangeTimeWithRecent/constants.js +288 -0
  153. package/dist/es/components/YkRangeTimeWithRecent/constants.js.map +7 -0
  154. package/dist/es/components/YkRangeTimeWithRecent/index.d.ts +26 -0
  155. package/dist/es/components/YkRangeTimeWithRecent/index.js +647 -0
  156. package/dist/es/components/YkRangeTimeWithRecent/index.js.map +7 -0
  157. package/dist/es/components/YkRangeTimeWithRecent/index.module.less +263 -0
  158. package/dist/es/creative/ButtonRadioWithInfo/index.d.ts +17 -0
  159. package/dist/es/creative/ButtonRadioWithInfo/index.js +103 -0
  160. package/dist/es/creative/ButtonRadioWithInfo/index.js.map +7 -0
  161. package/dist/es/creative/ButtonRadioWithInfo/index.less +106 -0
  162. package/dist/es/creative/ButtonWithProgress/index.d.ts +11 -0
  163. package/dist/es/creative/ButtonWithProgress/index.js +79 -0
  164. package/dist/es/creative/ButtonWithProgress/index.js.map +7 -0
  165. package/dist/es/creative/ButtonWithProgress/index.less +66 -0
  166. package/dist/es/global.less +12 -0
  167. package/dist/es/index.d.ts +41 -0
  168. package/dist/es/index.js +85 -0
  169. package/dist/es/index.js.map +7 -0
  170. package/dist/es/layout/FlexGrid/index.d.ts +25 -0
  171. package/dist/es/layout/FlexGrid/index.js +63 -0
  172. package/dist/es/layout/FlexGrid/index.js.map +7 -0
  173. package/dist/es/layout/YkContainer/index.d.ts +27 -0
  174. package/dist/es/layout/YkContainer/index.js +79 -0
  175. package/dist/es/layout/YkContainer/index.js.map +7 -0
  176. package/dist/es/layout/YkDrawer/index.d.ts +22 -0
  177. package/dist/es/layout/YkDrawer/index.js +160 -0
  178. package/dist/es/layout/YkDrawer/index.js.map +7 -0
  179. package/dist/es/layout/YkDrawer/index.module.less +45 -0
  180. package/dist/es/ui/LabelSelect/demo.d.ts +3 -0
  181. package/dist/es/ui/LabelSelect/demo.js +83 -0
  182. package/dist/es/ui/LabelSelect/demo.js.map +7 -0
  183. package/dist/es/ui/LabelSelect/index.d.ts +41 -0
  184. package/dist/es/ui/LabelSelect/index.js +136 -0
  185. package/dist/es/ui/LabelSelect/index.js.map +7 -0
  186. package/dist/es/ui/LogicOperator/index.d.ts +10 -0
  187. package/dist/es/ui/LogicOperator/index.js +12 -0
  188. package/dist/es/ui/LogicOperator/index.js.map +7 -0
  189. package/dist/es/ui/LogicOperator/index.module.less +97 -0
  190. package/dist/es/ui/YkButton/index.d.ts +9 -0
  191. package/dist/es/ui/YkButton/index.js +59 -0
  192. package/dist/es/ui/YkButton/index.js.map +7 -0
  193. package/dist/es/ui/YkCard/index.d.ts +4 -0
  194. package/dist/es/ui/YkCard/index.js +79 -0
  195. package/dist/es/ui/YkCard/index.js.map +7 -0
  196. package/dist/es/ui/YkCard/index.module.less +30 -0
  197. package/dist/es/ui/YkCheckbox/index.d.ts +4 -0
  198. package/dist/es/ui/YkCheckbox/index.js +45 -0
  199. package/dist/es/ui/YkCheckbox/index.js.map +7 -0
  200. package/dist/es/ui/YkCheckbox/index.module.less +22 -0
  201. package/dist/es/ui/YkDescriptions/index.d.ts +4 -0
  202. package/dist/es/ui/YkDescriptions/index.js +41 -0
  203. package/dist/es/ui/YkDescriptions/index.js.map +7 -0
  204. package/dist/es/ui/YkPagination/index.d.ts +4 -0
  205. package/dist/es/ui/YkPagination/index.js +63 -0
  206. package/dist/es/ui/YkPagination/index.js.map +7 -0
  207. package/dist/es/ui/YkPagination/index.module.less +22 -0
  208. package/dist/es/ui/YkRadio/index.d.ts +4 -0
  209. package/dist/es/ui/YkRadio/index.js +51 -0
  210. package/dist/es/ui/YkRadio/index.js.map +7 -0
  211. package/dist/es/ui/YkRadio/index.module.less +22 -0
  212. package/dist/es/ui/YkRadioBtnSpecial/index.d.ts +15 -0
  213. package/dist/es/ui/YkRadioBtnSpecial/index.js +23 -0
  214. package/dist/es/ui/YkRadioBtnSpecial/index.js.map +7 -0
  215. package/dist/es/ui/YkRadioBtnSpecial/index.module.less +112 -0
  216. package/dist/es/ui/YkSegmented/index.d.ts +4 -0
  217. package/dist/es/ui/YkSegmented/index.js +41 -0
  218. package/dist/es/ui/YkSegmented/index.js.map +7 -0
  219. package/dist/es/ui/YkSelect/index.d.ts +7 -0
  220. package/dist/es/ui/YkSelect/index.js +54 -0
  221. package/dist/es/ui/YkSelect/index.js.map +7 -0
  222. package/dist/es/ui/YkSpin/index.d.ts +4 -0
  223. package/dist/es/ui/YkSpin/index.js +41 -0
  224. package/dist/es/ui/YkSpin/index.js.map +7 -0
  225. package/dist/es/ui/YkStatistic/index.d.ts +4 -0
  226. package/dist/es/ui/YkStatistic/index.js +41 -0
  227. package/dist/es/ui/YkStatistic/index.js.map +7 -0
  228. package/dist/es/ui/YkSwitch/index.d.ts +4 -0
  229. package/dist/es/ui/YkSwitch/index.js +51 -0
  230. package/dist/es/ui/YkSwitch/index.js.map +7 -0
  231. package/dist/es/ui/YkTabs/index.d.ts +12 -0
  232. package/dist/es/ui/YkTabs/index.js +75 -0
  233. package/dist/es/ui/YkTabs/index.js.map +7 -0
  234. package/dist/es/ui/YkTabs/index.module.less +11 -0
  235. package/dist/es/ui/YkTooltip/index.d.ts +4 -0
  236. package/dist/es/ui/YkTooltip/index.js +50 -0
  237. package/dist/es/ui/YkTooltip/index.js.map +7 -0
  238. package/dist/es/utils/styleUtils.d.ts +18 -0
  239. package/dist/es/utils/styleUtils.js +57 -0
  240. package/dist/es/utils/styleUtils.js.map +7 -0
  241. package/dist/es/utils/ykStorybookDoc.d.ts +17 -0
  242. package/dist/es/utils/ykStorybookDoc.js +18 -0
  243. package/dist/es/utils/ykStorybookDoc.js.map +7 -0
  244. package/dist/lib/Themes/InputTheme/index.d.ts +6 -0
  245. package/dist/lib/Themes/InputTheme/index.js +52 -0
  246. package/dist/lib/Themes/InputTheme/index.js.map +7 -0
  247. package/dist/lib/Themes/TableTheme/index.d.ts +7 -0
  248. package/dist/lib/Themes/TableTheme/index.js +61 -0
  249. package/dist/lib/Themes/TableTheme/index.js.map +7 -0
  250. package/dist/lib/Themes/TableTheme/index.less +46 -0
  251. package/dist/lib/assets/image/YKUI-logo.png +0 -0
  252. package/dist/lib/assets/less/ant-reset.less +402 -0
  253. package/dist/lib/assets/less/index.less +1 -0
  254. package/dist/lib/assets/less/variables.less +16 -0
  255. package/dist/lib/business/AiChat/MarkdownRender.d.ts +9 -0
  256. package/dist/lib/business/AiChat/MarkdownRender.js +102 -0
  257. package/dist/lib/business/AiChat/MarkdownRender.js.map +7 -0
  258. package/dist/lib/business/AiChat/index.d.ts +16 -0
  259. package/dist/lib/business/AiChat/index.js +514 -0
  260. package/dist/lib/business/AiChat/index.js.map +7 -0
  261. package/dist/lib/business/AiChat/intentRecognizer.d.ts +33 -0
  262. package/dist/lib/business/AiChat/intentRecognizer.js +193 -0
  263. package/dist/lib/business/AiChat/intentRecognizer.js.map +7 -0
  264. package/dist/lib/business/AiChat/navigationManager.d.ts +94 -0
  265. package/dist/lib/business/AiChat/navigationManager.js +214 -0
  266. package/dist/lib/business/AiChat/navigationManager.js.map +7 -0
  267. package/dist/lib/business/AiChat/sse.d.ts +1 -0
  268. package/dist/lib/business/AiChat/sse.js +61 -0
  269. package/dist/lib/business/AiChat/sse.js.map +7 -0
  270. package/dist/lib/business/AiChat/type.d.ts +157 -0
  271. package/dist/lib/business/AiChat/type.js +18 -0
  272. package/dist/lib/business/AiChat/type.js.map +7 -0
  273. package/dist/lib/business/AiChat/useAiChat.d.ts +2 -0
  274. package/dist/lib/business/AiChat/useAiChat.js +222 -0
  275. package/dist/lib/business/AiChat/useAiChat.js.map +7 -0
  276. package/dist/lib/business/AiChat/useTaskWorkflow.d.ts +26 -0
  277. package/dist/lib/business/AiChat/useTaskWorkflow.js +216 -0
  278. package/dist/lib/business/AiChat/useTaskWorkflow.js.map +7 -0
  279. package/dist/lib/business/DrawerPageInfo/index.d.ts +35 -0
  280. package/dist/lib/business/DrawerPageInfo/index.js +163 -0
  281. package/dist/lib/business/DrawerPageInfo/index.js.map +7 -0
  282. package/dist/lib/business/DrawerPageInfo/index.module.less +87 -0
  283. package/dist/lib/business/DrawerPageInfo/test.png +0 -0
  284. package/dist/lib/business/Editor/index.d.ts +11 -0
  285. package/dist/lib/business/Editor/index.js +99 -0
  286. package/dist/lib/business/Editor/index.js.map +7 -0
  287. package/dist/lib/business/Editor/index.less +31 -0
  288. package/dist/lib/business/Empty/empty.png +0 -0
  289. package/dist/lib/business/Empty/index.d.ts +19 -0
  290. package/dist/lib/business/Empty/index.js +65 -0
  291. package/dist/lib/business/Empty/index.js.map +7 -0
  292. package/dist/lib/business/ModCommonFilter/assets/images/empty.png +0 -0
  293. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.d.ts +13 -0
  294. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.js +50 -0
  295. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.js.map +7 -0
  296. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.d.ts +13 -0
  297. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.js +50 -0
  298. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.js.map +7 -0
  299. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.d.ts +25 -0
  300. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.js +60 -0
  301. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.js.map +7 -0
  302. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.module.less +97 -0
  303. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.d.ts +18 -0
  304. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js +69 -0
  305. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js.map +7 -0
  306. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.d.ts +37 -0
  307. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js +211 -0
  308. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js.map +7 -0
  309. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.d.ts +26 -0
  310. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js +97 -0
  311. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js.map +7 -0
  312. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.d.ts +51 -0
  313. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.js +101 -0
  314. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.js.map +7 -0
  315. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.module.less +260 -0
  316. package/dist/lib/business/ModCommonFilter/index.d.ts +53 -0
  317. package/dist/lib/business/ModCommonFilter/index.js +143 -0
  318. package/dist/lib/business/ModCommonFilter/index.js.map +7 -0
  319. package/dist/lib/business/ModCommonFilter/index.module.less +7 -0
  320. package/dist/lib/business/ModCommonFilter/typing.d.ts +20 -0
  321. package/dist/lib/business/ModCommonFilter/typing.js +18 -0
  322. package/dist/lib/business/ModCommonFilter/typing.js.map +7 -0
  323. package/dist/lib/business/YkPorjectSelect/icon-product.png +0 -0
  324. package/dist/lib/business/YkPorjectSelect/index.d.ts +51 -0
  325. package/dist/lib/business/YkPorjectSelect/index.js +235 -0
  326. package/dist/lib/business/YkPorjectSelect/index.js.map +7 -0
  327. package/dist/lib/business/YkPorjectSelect/index.module.less +334 -0
  328. package/dist/lib/business/YkPorjectSelect/product-close.png +0 -0
  329. package/dist/lib/components/Clock/index.d.ts +19 -0
  330. package/dist/lib/components/Clock/index.js +85 -0
  331. package/dist/lib/components/Clock/index.js.map +7 -0
  332. package/dist/lib/components/DebounceInput/index.d.ts +16 -0
  333. package/dist/lib/components/DebounceInput/index.js +107 -0
  334. package/dist/lib/components/DebounceInput/index.js.map +7 -0
  335. package/dist/lib/components/DebounceInput/index.module.less +23 -0
  336. package/dist/lib/components/MultipleSelect/index.d.ts +23 -0
  337. package/dist/lib/components/MultipleSelect/index.js +279 -0
  338. package/dist/lib/components/MultipleSelect/index.js.map +7 -0
  339. package/dist/lib/components/MultipleSelect/index.module.less +174 -0
  340. package/dist/lib/components/NumericInput/index.d.ts +19 -0
  341. package/dist/lib/components/NumericInput/index.js +67 -0
  342. package/dist/lib/components/NumericInput/index.js.map +7 -0
  343. package/dist/lib/components/RefreshButton/index.d.ts +8 -0
  344. package/dist/lib/components/RefreshButton/index.js +51 -0
  345. package/dist/lib/components/RefreshButton/index.js.map +7 -0
  346. package/dist/lib/components/SearchWithHistory/index.d.ts +21 -0
  347. package/dist/lib/components/SearchWithHistory/index.js +145 -0
  348. package/dist/lib/components/SearchWithHistory/index.js.map +7 -0
  349. package/dist/lib/components/SearchWithHistory/index.module.less +64 -0
  350. package/dist/lib/components/TextWithInput/index.d.ts +15 -0
  351. package/dist/lib/components/TextWithInput/index.js +65 -0
  352. package/dist/lib/components/TextWithInput/index.js.map +7 -0
  353. package/dist/lib/components/TextWithToolTip/index.d.ts +17 -0
  354. package/dist/lib/components/TextWithToolTip/index.js +134 -0
  355. package/dist/lib/components/TextWithToolTip/index.js.map +7 -0
  356. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +28 -0
  357. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js +191 -0
  358. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js.map +7 -0
  359. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.less +151 -0
  360. package/dist/lib/components/TreeTransfer/index.d.ts +28 -0
  361. package/dist/lib/components/TreeTransfer/index.js +214 -0
  362. package/dist/lib/components/TreeTransfer/index.js.map +7 -0
  363. package/dist/lib/components/TreeTransfer/index.less +69 -0
  364. package/dist/lib/components/TreeTransfer/types.d.ts +122 -0
  365. package/dist/lib/components/TreeTransfer/types.js +30 -0
  366. package/dist/lib/components/TreeTransfer/types.js.map +7 -0
  367. package/dist/lib/components/TreeTransfer/utils/index.d.ts +120 -0
  368. package/dist/lib/components/TreeTransfer/utils/index.js +208 -0
  369. package/dist/lib/components/TreeTransfer/utils/index.js.map +7 -0
  370. package/dist/lib/components/YkDateRangePicker/index.d.ts +57 -0
  371. package/dist/lib/components/YkDateRangePicker/index.js +282 -0
  372. package/dist/lib/components/YkDateRangePicker/index.js.map +7 -0
  373. package/dist/lib/components/YkDateRangePicker/index.module.less +281 -0
  374. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +16 -0
  375. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +223 -0
  376. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +7 -0
  377. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +31 -0
  378. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +567 -0
  379. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +7 -0
  380. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +16 -0
  381. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js +85 -0
  382. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +7 -0
  383. package/dist/lib/components/YkRangeDateWithVS/index.d.ts +62 -0
  384. package/dist/lib/components/YkRangeDateWithVS/index.js +140 -0
  385. package/dist/lib/components/YkRangeDateWithVS/index.js.map +7 -0
  386. package/dist/lib/components/YkRangeDateWithVS/index.module.less +548 -0
  387. package/dist/lib/components/YkRangeDateWithVS/styles.d.ts +2 -0
  388. package/dist/lib/components/YkRangeDateWithVS/styles.js +48 -0
  389. package/dist/lib/components/YkRangeDateWithVS/styles.js.map +7 -0
  390. package/dist/lib/components/YkRangeDateWithVS/typing.d.ts +15 -0
  391. package/dist/lib/components/YkRangeTimeWithRecent/constants.d.ts +48 -0
  392. package/dist/lib/components/YkRangeTimeWithRecent/constants.js +333 -0
  393. package/dist/lib/components/YkRangeTimeWithRecent/constants.js.map +7 -0
  394. package/dist/lib/components/YkRangeTimeWithRecent/index.d.ts +26 -0
  395. package/dist/lib/components/YkRangeTimeWithRecent/index.js +647 -0
  396. package/dist/lib/components/YkRangeTimeWithRecent/index.js.map +7 -0
  397. package/dist/lib/components/YkRangeTimeWithRecent/index.module.less +263 -0
  398. package/dist/lib/creative/ButtonRadioWithInfo/index.d.ts +17 -0
  399. package/dist/lib/creative/ButtonRadioWithInfo/index.js +102 -0
  400. package/dist/lib/creative/ButtonRadioWithInfo/index.js.map +7 -0
  401. package/dist/lib/creative/ButtonRadioWithInfo/index.less +106 -0
  402. package/dist/lib/creative/ButtonWithProgress/index.d.ts +11 -0
  403. package/dist/lib/creative/ButtonWithProgress/index.js +70 -0
  404. package/dist/lib/creative/ButtonWithProgress/index.js.map +7 -0
  405. package/dist/lib/creative/ButtonWithProgress/index.less +66 -0
  406. package/dist/lib/global.less +12 -0
  407. package/dist/lib/index.d.ts +41 -0
  408. package/dist/lib/index.js +158 -0
  409. package/dist/lib/index.js.map +7 -0
  410. package/dist/lib/layout/FlexGrid/index.d.ts +25 -0
  411. package/dist/lib/layout/FlexGrid/index.js +77 -0
  412. package/dist/lib/layout/FlexGrid/index.js.map +7 -0
  413. package/dist/lib/layout/YkContainer/index.d.ts +27 -0
  414. package/dist/lib/layout/YkContainer/index.js +79 -0
  415. package/dist/lib/layout/YkContainer/index.js.map +7 -0
  416. package/dist/lib/layout/YkDrawer/index.d.ts +22 -0
  417. package/dist/lib/layout/YkDrawer/index.js +152 -0
  418. package/dist/lib/layout/YkDrawer/index.js.map +7 -0
  419. package/dist/lib/layout/YkDrawer/index.module.less +45 -0
  420. package/dist/lib/ui/LabelSelect/demo.d.ts +3 -0
  421. package/dist/lib/ui/LabelSelect/demo.js +113 -0
  422. package/dist/lib/ui/LabelSelect/demo.js.map +7 -0
  423. package/dist/lib/ui/LabelSelect/index.d.ts +41 -0
  424. package/dist/lib/ui/LabelSelect/index.js +124 -0
  425. package/dist/lib/ui/LabelSelect/index.js.map +7 -0
  426. package/dist/lib/ui/LogicOperator/index.d.ts +10 -0
  427. package/dist/lib/ui/LogicOperator/index.js +42 -0
  428. package/dist/lib/ui/LogicOperator/index.js.map +7 -0
  429. package/dist/lib/ui/LogicOperator/index.module.less +97 -0
  430. package/dist/lib/ui/YkButton/index.d.ts +9 -0
  431. package/dist/lib/ui/YkButton/index.js +55 -0
  432. package/dist/lib/ui/YkButton/index.js.map +7 -0
  433. package/dist/lib/ui/YkCard/index.d.ts +4 -0
  434. package/dist/lib/ui/YkCard/index.js +76 -0
  435. package/dist/lib/ui/YkCard/index.js.map +7 -0
  436. package/dist/lib/ui/YkCard/index.module.less +30 -0
  437. package/dist/lib/ui/YkCheckbox/index.d.ts +4 -0
  438. package/dist/lib/ui/YkCheckbox/index.js +42 -0
  439. package/dist/lib/ui/YkCheckbox/index.js.map +7 -0
  440. package/dist/lib/ui/YkCheckbox/index.module.less +22 -0
  441. package/dist/lib/ui/YkDescriptions/index.d.ts +4 -0
  442. package/dist/lib/ui/YkDescriptions/index.js +41 -0
  443. package/dist/lib/ui/YkDescriptions/index.js.map +7 -0
  444. package/dist/lib/ui/YkPagination/index.d.ts +4 -0
  445. package/dist/lib/ui/YkPagination/index.js +60 -0
  446. package/dist/lib/ui/YkPagination/index.js.map +7 -0
  447. package/dist/lib/ui/YkPagination/index.module.less +22 -0
  448. package/dist/lib/ui/YkRadio/index.d.ts +4 -0
  449. package/dist/lib/ui/YkRadio/index.js +51 -0
  450. package/dist/lib/ui/YkRadio/index.js.map +7 -0
  451. package/dist/lib/ui/YkRadio/index.module.less +22 -0
  452. package/dist/lib/ui/YkRadioBtnSpecial/index.d.ts +15 -0
  453. package/dist/lib/ui/YkRadioBtnSpecial/index.js +53 -0
  454. package/dist/lib/ui/YkRadioBtnSpecial/index.js.map +7 -0
  455. package/dist/lib/ui/YkRadioBtnSpecial/index.module.less +112 -0
  456. package/dist/lib/ui/YkSegmented/index.d.ts +4 -0
  457. package/dist/lib/ui/YkSegmented/index.js +41 -0
  458. package/dist/lib/ui/YkSegmented/index.js.map +7 -0
  459. package/dist/lib/ui/YkSelect/index.d.ts +7 -0
  460. package/dist/lib/ui/YkSelect/index.js +54 -0
  461. package/dist/lib/ui/YkSelect/index.js.map +7 -0
  462. package/dist/lib/ui/YkSpin/index.d.ts +4 -0
  463. package/dist/lib/ui/YkSpin/index.js +41 -0
  464. package/dist/lib/ui/YkSpin/index.js.map +7 -0
  465. package/dist/lib/ui/YkStatistic/index.d.ts +4 -0
  466. package/dist/lib/ui/YkStatistic/index.js +41 -0
  467. package/dist/lib/ui/YkStatistic/index.js.map +7 -0
  468. package/dist/lib/ui/YkSwitch/index.d.ts +4 -0
  469. package/dist/lib/ui/YkSwitch/index.js +51 -0
  470. package/dist/lib/ui/YkSwitch/index.js.map +7 -0
  471. package/dist/lib/ui/YkTabs/index.d.ts +12 -0
  472. package/dist/lib/ui/YkTabs/index.js +70 -0
  473. package/dist/lib/ui/YkTabs/index.js.map +7 -0
  474. package/dist/lib/ui/YkTabs/index.module.less +11 -0
  475. package/dist/lib/ui/YkTooltip/index.d.ts +4 -0
  476. package/dist/lib/ui/YkTooltip/index.js +45 -0
  477. package/dist/lib/ui/YkTooltip/index.js.map +7 -0
  478. package/dist/lib/utils/styleUtils.d.ts +18 -0
  479. package/dist/lib/utils/styleUtils.js +84 -0
  480. package/dist/lib/utils/styleUtils.js.map +7 -0
  481. package/dist/lib/utils/ykStorybookDoc.d.ts +17 -0
  482. package/dist/lib/utils/ykStorybookDoc.js +41 -0
  483. package/dist/lib/utils/ykStorybookDoc.js.map +7 -0
  484. package/package.json +147 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * TreeTransfer
3
+ *
4
+ * 树形表格穿梭框组件。支持:
5
+ * - 树形结构展示,父子联动选择(checkStrictly: false)
6
+ * - 前端分页 + 防抖搜索
7
+ * - 左右穿梭操作(含多级树正确迁移)
8
+ * - 自定义列配置和渲染
9
+ * - 完整的 TypeScript 泛型支持
10
+ *
11
+ * @template T - 行数据的自定义业务类型
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <TreeTransfer
16
+ * leftDataSource={leftData}
17
+ * rightDataSource={rightData}
18
+ * leftTitle="待分配"
19
+ * rightTitle="已分配"
20
+ * onChange={({ leftData, rightData }) => { ... }}
21
+ * />
22
+ * ```
23
+ */
24
+ import React from 'react';
25
+ import { TreeTransferProps } from './types';
26
+ import './index.less';
27
+ declare function TreeTransfer<T>({ leftDataSource, rightDataSource, loading, leftTitle, rightTitle, pageSize, columns, customRender, searchFields, searchPlaceholder, onChange, }: TreeTransferProps<T>): React.JSX.Element;
28
+ export default TreeTransfer;
@@ -0,0 +1,214 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/TreeTransfer/index.tsx
30
+ var TreeTransfer_exports = {};
31
+ __export(TreeTransfer_exports, {
32
+ default: () => TreeTransfer_default
33
+ });
34
+ module.exports = __toCommonJS(TreeTransfer_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_antd = require("antd");
37
+ var import_icons = require("@ant-design/icons");
38
+ var import_types = require("./types");
39
+ var import_utils = require("./utils");
40
+ var import_TreeTransferPanel = __toESM(require("./components/TreeTransferPanel"));
41
+ var import_index = require("./index.less");
42
+ function useDebounce(callback, delay) {
43
+ const callbackRef = (0, import_react.useRef)(callback);
44
+ callbackRef.current = callback;
45
+ const timeoutRef = (0, import_react.useRef)();
46
+ return (0, import_react.useCallback)(
47
+ (...args) => {
48
+ clearTimeout(timeoutRef.current);
49
+ timeoutRef.current = setTimeout(() => callbackRef.current(...args), delay);
50
+ },
51
+ [delay]
52
+ // callback 通过 ref 读取,不需要放入 deps
53
+ );
54
+ }
55
+ function TreeTransfer({
56
+ leftDataSource,
57
+ rightDataSource,
58
+ loading = false,
59
+ leftTitle = "待分配项",
60
+ rightTitle = "已分配项",
61
+ pageSize = import_types.DEFAULT_PAGE_SIZE,
62
+ columns,
63
+ customRender,
64
+ searchFields,
65
+ searchPlaceholder,
66
+ onChange
67
+ }) {
68
+ const [leftPanel, setLeftPanel] = (0, import_react.useState)({
69
+ selectedRowKeys: [],
70
+ searchValue: "",
71
+ currentPage: 1,
72
+ totalCount: 0
73
+ });
74
+ const [rightPanel, setRightPanel] = (0, import_react.useState)({
75
+ selectedRowKeys: [],
76
+ searchValue: "",
77
+ currentPage: 1,
78
+ totalCount: 0
79
+ });
80
+ const filteredLeft = (0, import_react.useMemo)(
81
+ () => (0, import_utils.filterData)(leftDataSource, leftPanel.searchValue, searchFields),
82
+ [leftDataSource, leftPanel.searchValue, searchFields]
83
+ );
84
+ const filteredRight = (0, import_react.useMemo)(
85
+ () => (0, import_utils.filterData)(rightDataSource, rightPanel.searchValue, searchFields),
86
+ [rightDataSource, rightPanel.searchValue, searchFields]
87
+ );
88
+ const filteredLeftData = (0, import_react.useMemo)(
89
+ () => (0, import_utils.sliceDataByPage)(filteredLeft, leftPanel.currentPage, pageSize),
90
+ [filteredLeft, leftPanel.currentPage, pageSize]
91
+ );
92
+ const filteredRightData = (0, import_react.useMemo)(
93
+ () => (0, import_utils.sliceDataByPage)(filteredRight, rightPanel.currentPage, pageSize),
94
+ [filteredRight, rightPanel.currentPage, pageSize]
95
+ );
96
+ const filteredLeftTotalCount = (0, import_react.useMemo)(() => (0, import_utils.countParentNodes)(filteredLeft), [filteredLeft]);
97
+ const filteredRightTotalCount = (0, import_react.useMemo)(() => (0, import_utils.countParentNodes)(filteredRight), [filteredRight]);
98
+ (0, import_react.useEffect)(() => {
99
+ setLeftPanel((prev) => ({
100
+ ...prev,
101
+ currentPage: 1,
102
+ totalCount: (0, import_utils.countParentNodes)(leftDataSource)
103
+ }));
104
+ }, [leftDataSource]);
105
+ (0, import_react.useEffect)(() => {
106
+ setRightPanel((prev) => ({
107
+ ...prev,
108
+ currentPage: 1,
109
+ totalCount: (0, import_utils.countParentNodes)(rightDataSource)
110
+ }));
111
+ }, [rightDataSource]);
112
+ const handleLeftSearchChange = useDebounce((value) => {
113
+ setLeftPanel((prev) => ({ ...prev, searchValue: value, currentPage: 1 }));
114
+ }, 300);
115
+ const handleRightSearchChange = useDebounce((value) => {
116
+ setRightPanel((prev) => ({ ...prev, searchValue: value, currentPage: 1 }));
117
+ }, 300);
118
+ const handleLeftPageChange = (0, import_react.useCallback)((page) => {
119
+ setLeftPanel((prev) => ({ ...prev, currentPage: page }));
120
+ }, []);
121
+ const handleRightPageChange = (0, import_react.useCallback)((page) => {
122
+ setRightPanel((prev) => ({ ...prev, currentPage: page }));
123
+ }, []);
124
+ const handleMoveRight = (0, import_react.useCallback)(() => {
125
+ if (leftPanel.selectedRowKeys.length === 0)
126
+ return;
127
+ const selectedSet = new Set(leftPanel.selectedRowKeys.map(String));
128
+ const nodesToAdd = (0, import_utils.extractTopLevelSelectedNodes)(selectedSet, leftDataSource);
129
+ const keysToRemove = new Set((0, import_utils.getAllDescendantKeys)(leftPanel.selectedRowKeys, leftDataSource));
130
+ const newLeftData = (0, import_utils.removeNodesFromTree)(leftDataSource, keysToRemove);
131
+ const newRightData = (0, import_utils.addNodesToTree)(rightDataSource, null, nodesToAdd);
132
+ setLeftPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));
133
+ setRightPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));
134
+ onChange == null ? void 0 : onChange({
135
+ leftSelected: [],
136
+ rightSelected: [],
137
+ leftData: newLeftData,
138
+ rightData: newRightData
139
+ });
140
+ }, [leftPanel.selectedRowKeys, leftDataSource, rightDataSource, onChange]);
141
+ const handleMoveLeft = (0, import_react.useCallback)(() => {
142
+ if (rightPanel.selectedRowKeys.length === 0)
143
+ return;
144
+ const selectedSet = new Set(rightPanel.selectedRowKeys.map(String));
145
+ const nodesToAdd = (0, import_utils.extractTopLevelSelectedNodes)(selectedSet, rightDataSource);
146
+ const keysToRemove = new Set((0, import_utils.getAllDescendantKeys)(rightPanel.selectedRowKeys, rightDataSource));
147
+ const newRightData = (0, import_utils.removeNodesFromTree)(rightDataSource, keysToRemove);
148
+ const newLeftData = (0, import_utils.addNodesToTree)(leftDataSource, null, nodesToAdd);
149
+ setLeftPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));
150
+ setRightPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));
151
+ onChange == null ? void 0 : onChange({
152
+ leftSelected: [],
153
+ rightSelected: [],
154
+ leftData: newLeftData,
155
+ rightData: newRightData
156
+ });
157
+ }, [rightPanel.selectedRowKeys, rightDataSource, leftDataSource, onChange]);
158
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "tree-transfer-wrapper" }, /* @__PURE__ */ import_react.default.createElement(import_antd.Spin, { spinning: loading }, /* @__PURE__ */ import_react.default.createElement("div", { className: "tree-transfer-content" }, /* @__PURE__ */ import_react.default.createElement(
159
+ import_TreeTransferPanel.default,
160
+ {
161
+ dataSource: filteredLeftData,
162
+ selectedRowKeys: leftPanel.selectedRowKeys,
163
+ onRowSelect: (_, keys) => setLeftPanel((prev) => ({ ...prev, selectedRowKeys: keys })),
164
+ searchValue: leftPanel.searchValue,
165
+ setSearchValue: handleLeftSearchChange,
166
+ totalCount: leftPanel.searchValue ? filteredLeftTotalCount : leftPanel.totalCount,
167
+ title: leftTitle,
168
+ showPagination: true,
169
+ currentPage: leftPanel.currentPage,
170
+ pageSize,
171
+ onPageChange: handleLeftPageChange,
172
+ columns,
173
+ customRender,
174
+ searchPlaceholder
175
+ }
176
+ ), /* @__PURE__ */ import_react.default.createElement("div", { className: "tree-transfer-operations" }, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { direction: "vertical", size: 8 }, /* @__PURE__ */ import_react.default.createElement(
177
+ import_antd.Button,
178
+ {
179
+ className: "tree-transfer-operation-btn",
180
+ type: leftPanel.selectedRowKeys.length > 0 ? "primary" : "default",
181
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.RightOutlined, null),
182
+ onClick: handleMoveRight,
183
+ disabled: leftPanel.selectedRowKeys.length === 0
184
+ }
185
+ ), /* @__PURE__ */ import_react.default.createElement(
186
+ import_antd.Button,
187
+ {
188
+ className: "tree-transfer-operation-btn",
189
+ type: rightPanel.selectedRowKeys.length > 0 ? "primary" : "default",
190
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.LeftOutlined, null),
191
+ onClick: handleMoveLeft,
192
+ disabled: rightPanel.selectedRowKeys.length === 0
193
+ }
194
+ ))), /* @__PURE__ */ import_react.default.createElement(
195
+ import_TreeTransferPanel.default,
196
+ {
197
+ dataSource: filteredRightData,
198
+ selectedRowKeys: rightPanel.selectedRowKeys,
199
+ onRowSelect: (_, keys) => setRightPanel((prev) => ({ ...prev, selectedRowKeys: keys })),
200
+ searchValue: rightPanel.searchValue,
201
+ setSearchValue: handleRightSearchChange,
202
+ totalCount: rightPanel.searchValue ? filteredRightTotalCount : rightPanel.totalCount,
203
+ title: rightTitle,
204
+ showPagination: true,
205
+ currentPage: rightPanel.currentPage,
206
+ pageSize,
207
+ onPageChange: handleRightPageChange,
208
+ columns,
209
+ customRender
210
+ }
211
+ ))));
212
+ }
213
+ var TreeTransfer_default = TreeTransfer;
214
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/TreeTransfer/index.tsx"],
4
+ "sourcesContent": ["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n/**\n * TreeTransfer\n *\n * 树形表格穿梭框组件。支持:\n * - 树形结构展示,父子联动选择(checkStrictly: false)\n * - 前端分页 + 防抖搜索\n * - 左右穿梭操作(含多级树正确迁移)\n * - 自定义列配置和渲染\n * - 完整的 TypeScript 泛型支持\n *\n * @template T - 行数据的自定义业务类型\n *\n * @example\n * ```tsx\n * <TreeTransfer\n * leftDataSource={leftData}\n * rightDataSource={rightData}\n * leftTitle=\"待分配\"\n * rightTitle=\"已分配\"\n * onChange={({ leftData, rightData }) => { ... }}\n * />\n * ```\n */\n\nimport React, { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Spin, Button, Space } from 'antd';\nimport { RightOutlined, LeftOutlined } from '@ant-design/icons';\nimport { TreeTransferProps, DEFAULT_PAGE_SIZE } from './types';\nimport {\n sliceDataByPage,\n filterData,\n getAllDescendantKeys,\n removeNodesFromTree,\n addNodesToTree,\n countParentNodes,\n extractTopLevelSelectedNodes,\n} from './utils';\nimport TreeTransferPanel from './components/TreeTransferPanel';\nimport './index.less';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useDebounce\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * 防抖 Hook\n *\n * 修复说明:\n * 原实现将 `callback` 放入 `useCallback` 的 deps,导致每次渲染(callback 为\n * 新引用)都重新创建防抖函数,使 timeout 重置,防抖完全失效。\n * 修复方案:将最新 callback 存入 ref,useCallback 仅依赖 delay,保证\n * 防抖函数引用稳定,timeout 不被意外清除。\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useDebounce<T extends (...args: any[]) => any>(callback: T, delay: number): T {\n // 存储最新 callback,避免 stale closure\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n return useCallback(\n (...args: Parameters<T>) => {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => callbackRef.current(...args), delay);\n },\n [delay], // callback 通过 ref 读取,不需要放入 deps\n ) as T;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TreeTransfer\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * 面板选择/分页状态(不含 dataSource,数据源来自 props + memo 计算)\n */\ninterface PanelState {\n selectedRowKeys: React.Key[];\n searchValue: string;\n currentPage: number;\n totalCount: number;\n}\n\nfunction TreeTransfer<T>({\n leftDataSource,\n rightDataSource,\n loading = false,\n leftTitle = '待分配项',\n rightTitle = '已分配项',\n pageSize = DEFAULT_PAGE_SIZE,\n columns,\n customRender,\n searchFields,\n searchPlaceholder,\n onChange,\n}: TreeTransferProps<T>) {\n // ── 面板状态(选择、搜索、分页) ─────────────────────────────────────────────\n // 注意:dataSource 不存储在 state 中;显示数据通过 memo 从 props 实时计算,\n // 避免 state 与 props 不同步的问题。\n const [leftPanel, setLeftPanel] = useState<PanelState>({\n selectedRowKeys: [],\n searchValue: '',\n currentPage: 1,\n totalCount: 0,\n });\n\n const [rightPanel, setRightPanel] = useState<PanelState>({\n selectedRowKeys: [],\n searchValue: '',\n currentPage: 1,\n totalCount: 0,\n });\n\n // ── 过滤后的完整数据(先 filter,再由 slice 分页) ──────────────────────────\n // 合并 filter + count,避免对同一搜索词调用两次 filterData(原来的问题)。\n\n const filteredLeft = useMemo(\n () => filterData<T>(leftDataSource, leftPanel.searchValue, searchFields),\n [leftDataSource, leftPanel.searchValue, searchFields],\n );\n\n const filteredRight = useMemo(\n () => filterData<T>(rightDataSource, rightPanel.searchValue, searchFields),\n [rightDataSource, rightPanel.searchValue, searchFields],\n );\n\n /** 当前页展示数据(供左侧面板渲染) */\n const filteredLeftData = useMemo(\n () => sliceDataByPage<T>(filteredLeft, leftPanel.currentPage, pageSize),\n [filteredLeft, leftPanel.currentPage, pageSize],\n );\n\n /** 当前页展示数据(供右侧面板渲染) */\n const filteredRightData = useMemo(\n () => sliceDataByPage<T>(filteredRight, rightPanel.currentPage, pageSize),\n [filteredRight, rightPanel.currentPage, pageSize],\n );\n\n /** 搜索后的顶层节点数(用于分页器 total) */\n const filteredLeftTotalCount = useMemo(() => countParentNodes(filteredLeft), [filteredLeft]);\n const filteredRightTotalCount = useMemo(() => countParentNodes(filteredRight), [filteredRight]);\n\n // ── 数据源变化时更新 totalCount,同时重置到第 1 页 ──────────────────────────\n useEffect(() => {\n setLeftPanel((prev) => ({\n ...prev,\n currentPage: 1,\n totalCount: countParentNodes(leftDataSource),\n }));\n }, [leftDataSource]);\n\n useEffect(() => {\n setRightPanel((prev) => ({\n ...prev,\n currentPage: 1,\n totalCount: countParentNodes(rightDataSource),\n }));\n }, [rightDataSource]);\n\n // ── 防抖搜索 ─────────────────────────────────────────────────────────────────\n\n const handleLeftSearchChange = useDebounce((value: string) => {\n setLeftPanel((prev) => ({ ...prev, searchValue: value, currentPage: 1 }));\n }, 300);\n\n const handleRightSearchChange = useDebounce((value: string) => {\n setRightPanel((prev) => ({ ...prev, searchValue: value, currentPage: 1 }));\n }, 300);\n\n // ── 分页 ─────────────────────────────────────────────────────────────────────\n\n const handleLeftPageChange = useCallback((page: number) => {\n setLeftPanel((prev) => ({ ...prev, currentPage: page }));\n }, []);\n\n const handleRightPageChange = useCallback((page: number) => {\n setRightPanel((prev) => ({ ...prev, currentPage: page }));\n }, []);\n\n // ── 穿梭操作 ─────────────────────────────────────────────────────────────────\n\n /**\n * 右移:将左侧选中项移到右侧\n *\n * 修复说明:\n * 原实现通过 `dataSource.filter(item => item.key === key)` 只查根节点,\n * 导致仅选中子节点时 nodesToAdd 为空,数据静默丢失。\n * 修复:使用 `extractTopLevelSelectedNodes` 递归提取选中的顶层节点(含 children)。\n */\n const handleMoveRight = useCallback(() => {\n if (leftPanel.selectedRowKeys.length === 0) return;\n\n const selectedSet = new Set(leftPanel.selectedRowKeys.map(String));\n // 提取选中的顶层节点(子节点随父一起携带)\n const nodesToAdd = extractTopLevelSelectedNodes<T>(selectedSet, leftDataSource);\n // 删除所有相关 key(含后代)\n const keysToRemove = new Set(getAllDescendantKeys(leftPanel.selectedRowKeys, leftDataSource));\n const newLeftData = removeNodesFromTree(leftDataSource, keysToRemove);\n const newRightData = addNodesToTree(rightDataSource, null, nodesToAdd);\n\n setLeftPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));\n setRightPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));\n\n onChange?.({\n leftSelected: [],\n rightSelected: [],\n leftData: newLeftData,\n rightData: newRightData,\n });\n }, [leftPanel.selectedRowKeys, leftDataSource, rightDataSource, onChange]);\n\n /**\n * 左移:将右侧选中项移到左侧\n */\n const handleMoveLeft = useCallback(() => {\n if (rightPanel.selectedRowKeys.length === 0) return;\n\n const selectedSet = new Set(rightPanel.selectedRowKeys.map(String));\n const nodesToAdd = extractTopLevelSelectedNodes<T>(selectedSet, rightDataSource);\n const keysToRemove = new Set(getAllDescendantKeys(rightPanel.selectedRowKeys, rightDataSource));\n const newRightData = removeNodesFromTree(rightDataSource, keysToRemove);\n const newLeftData = addNodesToTree(leftDataSource, null, nodesToAdd);\n\n setLeftPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));\n setRightPanel((prev) => ({ ...prev, currentPage: 1, selectedRowKeys: [] }));\n\n onChange?.({\n leftSelected: [],\n rightSelected: [],\n leftData: newLeftData,\n rightData: newRightData,\n });\n }, [rightPanel.selectedRowKeys, rightDataSource, leftDataSource, onChange]);\n\n // ── 渲染 ─────────────────────────────────────────────────────────────────────\n\n return (\n <div className='tree-transfer-wrapper'>\n <Spin spinning={loading}>\n <div className='tree-transfer-content'>\n {/* 左侧面板 */}\n <TreeTransferPanel<T>\n dataSource={filteredLeftData}\n selectedRowKeys={leftPanel.selectedRowKeys}\n onRowSelect={(_, keys) => setLeftPanel((prev) => ({ ...prev, selectedRowKeys: keys }))}\n searchValue={leftPanel.searchValue}\n setSearchValue={handleLeftSearchChange}\n totalCount={leftPanel.searchValue ? filteredLeftTotalCount : leftPanel.totalCount}\n title={leftTitle}\n showPagination={true}\n currentPage={leftPanel.currentPage}\n pageSize={pageSize}\n onPageChange={handleLeftPageChange}\n columns={columns}\n customRender={customRender}\n searchPlaceholder={searchPlaceholder}\n />\n\n {/* 中间操作按钮 */}\n <div className='tree-transfer-operations'>\n <Space direction='vertical' size={8}>\n <Button\n className='tree-transfer-operation-btn'\n type={leftPanel.selectedRowKeys.length > 0 ? 'primary' : 'default'}\n icon={<RightOutlined />}\n onClick={handleMoveRight}\n disabled={leftPanel.selectedRowKeys.length === 0}\n />\n <Button\n className='tree-transfer-operation-btn'\n type={rightPanel.selectedRowKeys.length > 0 ? 'primary' : 'default'}\n icon={<LeftOutlined />}\n onClick={handleMoveLeft}\n disabled={rightPanel.selectedRowKeys.length === 0}\n />\n </Space>\n </div>\n\n {/* 右侧面板 */}\n <TreeTransferPanel<T>\n dataSource={filteredRightData}\n selectedRowKeys={rightPanel.selectedRowKeys}\n onRowSelect={(_, keys) => setRightPanel((prev) => ({ ...prev, selectedRowKeys: keys }))}\n searchValue={rightPanel.searchValue}\n setSearchValue={handleRightSearchChange}\n totalCount={rightPanel.searchValue ? filteredRightTotalCount : rightPanel.totalCount}\n title={rightTitle}\n showPagination={true}\n currentPage={rightPanel.currentPage}\n pageSize={pageSize}\n onPageChange={handleRightPageChange}\n columns={columns}\n customRender={customRender}\n />\n </div>\n </Spin>\n </div>\n );\n}\n\nexport default TreeTransfer;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "TreeTransferPanel"]
7
+ }
@@ -0,0 +1,69 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ .tree-transfer-wrapper {
20
+ width: 100%;
21
+ height: 100%;
22
+ display: flex;
23
+ flex-direction: column;
24
+
25
+ .ant-spin-nested-loading {
26
+ width: 100%;
27
+ height: 100%;
28
+
29
+ .ant-spin-container {
30
+ width: 100%;
31
+ height: 100%;
32
+ }
33
+ }
34
+
35
+ // 主内容区域
36
+ .tree-transfer-content {
37
+ display: flex;
38
+ align-items: stretch;
39
+ height: 100%;
40
+ }
41
+
42
+ // 中间操作按钮区域
43
+ .tree-transfer-operations {
44
+ display: flex;
45
+ flex-direction: column;
46
+ justify-content: center;
47
+ gap: 8px;
48
+ padding-left: 7px;
49
+ width: 40px;
50
+ flex-shrink: 0;
51
+
52
+ .ant-space {
53
+ .tree-transfer-operation-btn {
54
+ width: 25px;
55
+ height: 25px;
56
+ min-width: 25px;
57
+ padding: 0;
58
+ display: flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+
62
+ .anticon {
63
+ font-size: 12px;
64
+ margin: 0;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,122 @@
1
+ /// <reference types="react" />
2
+ import type { ColumnsType } from 'antd/es/table';
3
+ /**
4
+ * 默认每页显示条数
5
+ */
6
+ export declare const DEFAULT_PAGE_SIZE = 20;
7
+ /**
8
+ * 树形表格行数据基类
9
+ * @template T - 自定义数据类型
10
+ */
11
+ export interface TreeTransferRow<T = any> {
12
+ /** 唯一标识 */
13
+ key: string | number;
14
+ /** 父节点唯一标识 */
15
+ parentKey?: string | number;
16
+ /** 子节点列表 */
17
+ children?: TreeTransferRow<T>[];
18
+ /** 是否为父节点 */
19
+ isParent?: boolean;
20
+ /** 自定义数据 */
21
+ data: T;
22
+ }
23
+ /**
24
+ * 穿梭框面板Props
25
+ */
26
+ export interface TreeTransferPanelProps<T = any> {
27
+ /** 数据源 */
28
+ dataSource: TreeTransferRow<T>[];
29
+ /** 已选中的行keys */
30
+ selectedRowKeys: React.Key[];
31
+ /** 行选择回调 */
32
+ onRowSelect: (selectedRows: TreeTransferRow<T>[], selectedRowKeys: React.Key[]) => void;
33
+ /** 搜索关键词 */
34
+ searchValue: string;
35
+ /** 设置搜索关键词 */
36
+ setSearchValue: (value: string) => void;
37
+ searchPlaceholder?: string;
38
+ /** 总数 */
39
+ totalCount: number;
40
+ /** 面板标题 */
41
+ title: string;
42
+ /** 是否显示分页 */
43
+ showPagination?: boolean;
44
+ /** 当前页码 */
45
+ currentPage?: number;
46
+ /** 每页条数(与父组件 pageSize 保持一致,用于分页器) */
47
+ pageSize?: number;
48
+ /** 分页变化回调 */
49
+ onPageChange?: (page: number) => void;
50
+ /** 自定义列配置,如果不传则使用默认配置 */
51
+ columns?: ColumnsType<TreeTransferRow<T>>;
52
+ /** 自定义渲染函数 */
53
+ customRender?: {
54
+ /** 自定义行单元格渲染 */
55
+ onCell?: (record: TreeTransferRow<T>) => any;
56
+ /** 自定义单元格内容渲染 */
57
+ cellRender?: (text: any, record: TreeTransferRow<T>, index: number) => React.ReactNode;
58
+ };
59
+ }
60
+ /**
61
+ * 穿梭框面板状态
62
+ */
63
+ export interface TreeTransferPanelState {
64
+ /** 当前页数据 */
65
+ dataSource: TreeTransferRow[];
66
+ /** 选中的keys */
67
+ selectedRowKeys: React.Key[];
68
+ /** 搜索关键词 */
69
+ searchValue: string;
70
+ /** 当前页码 */
71
+ currentPage: number;
72
+ /** 总条数 */
73
+ totalCount: number;
74
+ }
75
+ /**
76
+ * 穿梭框主组件Props
77
+ * @template T - 数据类型
78
+ */
79
+ export interface TreeTransferProps<T = any> {
80
+ /** 左侧数据源(完整数据) */
81
+ leftDataSource: TreeTransferRow<T>[];
82
+ /** 右侧数据源(完整数据) */
83
+ rightDataSource: TreeTransferRow<T>[];
84
+ /** 数据加载状态 */
85
+ loading?: boolean;
86
+ /** 左侧面板标题 */
87
+ leftTitle?: string;
88
+ /** 右侧面板标题 */
89
+ rightTitle?: string;
90
+ /** 左侧总数文本(如需自定义) */
91
+ leftCountText?: string;
92
+ /** 右侧总数文本(如需自定义) */
93
+ rightCountText?: string;
94
+ /** 搜索框占位符 */
95
+ searchPlaceholder?: string;
96
+ /** 是否允许跨页选择 */
97
+ crossPageSelection?: boolean;
98
+ /** 每页显示条数 */
99
+ pageSize?: number;
100
+ /** 自定义列配置 */
101
+ columns?: ColumnsType<TreeTransferRow<T>>;
102
+ /** 自定义渲染 */
103
+ customRender?: TreeTransferPanelProps['customRender'];
104
+ /** 搜索字段,支持字段名或自定义函数 */
105
+ searchFields?: (string | ((item: T) => string))[];
106
+ /** 选中项变化回调 */
107
+ onChange?: (params: {
108
+ leftSelected: TreeTransferRow<T>[];
109
+ rightSelected: TreeTransferRow<T>[];
110
+ leftData: TreeTransferRow<T>[];
111
+ rightData: TreeTransferRow<T>[];
112
+ }) => void;
113
+ }
114
+ /**
115
+ * 权限移动数据(用于穿梭操作)
116
+ */
117
+ export interface TransferItem<T = any> {
118
+ /** 所属父节点key */
119
+ parentKey: string | number;
120
+ /** 移动的数据 */
121
+ data: T;
122
+ }
@@ -0,0 +1,30 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/TreeTransfer/types.ts
20
+ var types_exports = {};
21
+ __export(types_exports, {
22
+ DEFAULT_PAGE_SIZE: () => DEFAULT_PAGE_SIZE
23
+ });
24
+ module.exports = __toCommonJS(types_exports);
25
+ var DEFAULT_PAGE_SIZE = 20;
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ DEFAULT_PAGE_SIZE
29
+ });
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/TreeTransfer/types.ts"],
4
+ "sourcesContent": ["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport type { ColumnsType } from 'antd/es/table';\n\n/**\n * 默认每页显示条数\n */\nexport const DEFAULT_PAGE_SIZE = 20;\n\n/**\n * 树形表格行数据基类\n * @template T - 自定义数据类型\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TreeTransferRow<T = any> {\n /** 唯一标识 */\n key: string | number;\n /** 父节点唯一标识 */\n parentKey?: string | number;\n /** 子节点列表 */\n children?: TreeTransferRow<T>[];\n /** 是否为父节点 */\n isParent?: boolean;\n /** 自定义数据 */\n data: T;\n}\n\n/**\n * 穿梭框面板Props\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TreeTransferPanelProps<T = any> {\n /** 数据源 */\n dataSource: TreeTransferRow<T>[];\n /** 已选中的行keys */\n selectedRowKeys: React.Key[];\n /** 行选择回调 */\n onRowSelect: (selectedRows: TreeTransferRow<T>[], selectedRowKeys: React.Key[]) => void;\n /** 搜索关键词 */\n searchValue: string;\n /** 设置搜索关键词 */\n setSearchValue: (value: string) => void;\n searchPlaceholder?: string;\n /** 总数 */\n totalCount: number;\n /** 面板标题 */\n title: string;\n /** 是否显示分页 */\n showPagination?: boolean;\n /** 当前页码 */\n currentPage?: number;\n /** 每页条数(与父组件 pageSize 保持一致,用于分页器) */\n pageSize?: number;\n /** 分页变化回调 */\n onPageChange?: (page: number) => void;\n /** 自定义列配置,如果不传则使用默认配置 */\n columns?: ColumnsType<TreeTransferRow<T>>;\n /** 自定义渲染函数 */\n customRender?: {\n /** 自定义行单元格渲染 */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onCell?: (record: TreeTransferRow<T>) => any;\n /** 自定义单元格内容渲染 */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cellRender?: (text: any, record: TreeTransferRow<T>, index: number) => React.ReactNode;\n };\n}\n\n/**\n * 穿梭框面板状态\n */\nexport interface TreeTransferPanelState {\n /** 当前页数据 */\n dataSource: TreeTransferRow[];\n /** 选中的keys */\n selectedRowKeys: React.Key[];\n /** 搜索关键词 */\n searchValue: string;\n /** 当前页码 */\n currentPage: number;\n /** 总条数 */\n totalCount: number;\n}\n\n/**\n * 穿梭框主组件Props\n * @template T - 数据类型\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TreeTransferProps<T = any> {\n /** 左侧数据源(完整数据) */\n leftDataSource: TreeTransferRow<T>[];\n /** 右侧数据源(完整数据) */\n rightDataSource: TreeTransferRow<T>[];\n /** 数据加载状态 */\n loading?: boolean;\n /** 左侧面板标题 */\n leftTitle?: string;\n /** 右侧面板标题 */\n rightTitle?: string;\n /** 左侧总数文本(如需自定义) */\n leftCountText?: string;\n /** 右侧总数文本(如需自定义) */\n rightCountText?: string;\n /** 搜索框占位符 */\n searchPlaceholder?: string;\n /** 是否允许跨页选择 */\n crossPageSelection?: boolean;\n /** 每页显示条数 */\n pageSize?: number;\n /** 自定义列配置 */\n columns?: ColumnsType<TreeTransferRow<T>>;\n /** 自定义渲染 */\n customRender?: TreeTransferPanelProps['customRender'];\n /** 搜索字段,支持字段名或自定义函数 */\n searchFields?: (string | ((item: T) => string))[];\n /** 选中项变化回调 */\n onChange?: (params: {\n leftSelected: TreeTransferRow<T>[];\n rightSelected: TreeTransferRow<T>[];\n leftData: TreeTransferRow<T>[];\n rightData: TreeTransferRow<T>[];\n }) => void;\n}\n\n/**\n * 权限移动数据(用于穿梭操作)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TransferItem<T = any> {\n /** 所属父节点key */\n parentKey: string | number;\n /** 移动的数据 */\n data: T;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBO,IAAM,oBAAoB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,120 @@
1
+ /// <reference types="react" />
2
+ import { TreeTransferRow } from '../types';
3
+ /**
4
+ * 从平铺的数据构建树形结构
5
+ *
6
+ * @param data - 平铺的数据数组
7
+ * @param options - 配置选项
8
+ * @returns 树形结构数据
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const flatData = [
13
+ * { id: '1', parentId: null, name: '应用1' },
14
+ * { id: '1-1', parentId: '1', name: '权限1' },
15
+ * ];
16
+ *
17
+ * const treeData = buildTreeData(flatData, {
18
+ * keyField: 'id',
19
+ * parentField: 'parentId',
20
+ * });
21
+ * ```
22
+ */
23
+ export declare function buildTreeData<T extends Record<string, any>>(data: T[], options?: {
24
+ /** 唯一键字段名,默认 'id' */
25
+ keyField?: string;
26
+ /** 父键字段名,默认 'parentId' */
27
+ parentField?: string;
28
+ /** 判断是否为父节点的函数,默认:无父键则为父节点 */
29
+ isParent?: (item: T) => boolean;
30
+ }): TreeTransferRow<T>[];
31
+ /**
32
+ * 将树形结构平铺为一维数组(深度优先)
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * const flat = flattenTreeData([{ key: '1', children: [{ key: '1-1' }] }]);
37
+ * // → [{ key: '1' }, { key: '1-1' }]
38
+ * ```
39
+ */
40
+ export declare function flattenTreeData<T = any>(treeData: TreeTransferRow<T>[]): TreeTransferRow<T>[];
41
+ /**
42
+ * 根据页码切片数据(前端分页)
43
+ *
44
+ * @param data - 数据数组
45
+ * @param page - 页码(从 1 开始)
46
+ * @param pageSize - 每页条数
47
+ * @returns 当前页数据
48
+ */
49
+ export declare function sliceDataByPage<T = any>(data: TreeTransferRow<T>[], page: number, pageSize?: number): TreeTransferRow<T>[];
50
+ /**
51
+ * 过滤数据(支持模糊搜索,递归保留有匹配子节点的父节点)
52
+ *
53
+ * @param data - 数据数组
54
+ * @param searchValue - 搜索关键词(空字符串返回全量数据)
55
+ * @param fields - 搜索字段列表,支持字段名或自定义取值函数,默认 ['id', 'name']
56
+ * @returns 过滤后的数据
57
+ */
58
+ export declare function filterData<T = any>(data: TreeTransferRow<T>[], searchValue: string, fields?: (string | ((item: T) => string))[]): TreeTransferRow<T>[];
59
+ /**
60
+ * 获取选中节点及其所有后代节点的 key 集合(用于批量移除)
61
+ *
62
+ * 修复说明:原实现对 3+ 层树只展开 2 层。现改为对每个选中节点
63
+ * 递归收集完整后代链,支持任意深度的树结构。
64
+ *
65
+ * @param selectedKeys - 选中的 keys
66
+ * @param dataSource - 完整数据源
67
+ * @returns 所有相关 key(字符串形式,含选中节点本身)
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * // 选中 'app1'(含 2 级子节点)
72
+ * getAllDescendantKeys(['app1'], dataSource);
73
+ * // → ['app1', 'app1-perm1', 'app1-perm1-sub1', 'app1-perm2', ...]
74
+ * ```
75
+ */
76
+ export declare function getAllDescendantKeys(selectedKeys: React.Key[], dataSource: TreeTransferRow[]): string[];
77
+ /**
78
+ * 计算数据总节点数(包含所有后代)
79
+ */
80
+ export declare function countTotalNodes<T = any>(data: TreeTransferRow<T>[]): number;
81
+ /**
82
+ * 计算顶层节点数(用于分页总数,不含嵌套子节点)
83
+ */
84
+ export declare function countParentNodes<T = any>(data: TreeTransferRow<T>[]): number;
85
+ /**
86
+ * 查找节点及其所有后代节点(按 key 定位)
87
+ */
88
+ export declare function findNodeWithDescendants<T = any>(key: string | number, dataSource: TreeTransferRow<T>[]): TreeTransferRow<T>[];
89
+ /**
90
+ * 从树形数据中移除指定 key 的节点(不可变,返回新数组)
91
+ *
92
+ * @param dataSource - 数据源
93
+ * @param keysToRemove - 要移除的节点 key 集合
94
+ * @returns 过滤后的新数据源
95
+ */
96
+ export declare function removeNodesFromTree<T = any>(dataSource: TreeTransferRow<T>[], keysToRemove: Set<string | number>): TreeTransferRow<T>[];
97
+ /**
98
+ * 向树形数据添加节点
99
+ *
100
+ * @param dataSource - 数据源
101
+ * @param parentKey - 父节点 key;传 null 表示添加到根
102
+ * @param nodes - 要添加的节点列表
103
+ * @returns 新的数据源
104
+ */
105
+ export declare function addNodesToTree<T = any>(dataSource: TreeTransferRow<T>[], parentKey: string | number | null, nodes: TreeTransferRow<T>[]): TreeTransferRow<T>[];
106
+ /**
107
+ * 从树形数据中提取"顶层选中节点"(用于穿梭框移动操作)
108
+ *
109
+ * 行为:遍历树,遇到选中节点时直接收集(含其 children),不再向下递归。
110
+ * 这样可以避免父节点和其已选中的子节点被分别添加两次。
111
+ *
112
+ * 适用场景:AntD Table 的 checkStrictly:false 级联选择中,
113
+ * 选中父节点会自动勾选子节点。move 时只需携带父节点(含 children)。
114
+ * 若仅选了某个子节点,则该子节点会被作为顶层节点添加到目标列表。
115
+ *
116
+ * @param selectedKeys - 选中的 key 集合(字符串)
117
+ * @param dataSource - 数据源(支持嵌套树)
118
+ * @returns 最小集合的顶层选中节点列表
119
+ */
120
+ export declare function extractTopLevelSelectedNodes<T = any>(selectedKeys: Set<string>, dataSource: TreeTransferRow<T>[]): TreeTransferRow<T>[];