@kine-design/core 0.0.1-beta.1 → 0.0.1-beta.10

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 (426) hide show
  1. package/.vlaude/last-session-id +1 -0
  2. package/.vlaude/session-switch.signal +1 -0
  3. package/assets/style/global.css +1 -0
  4. package/assets/style/var/Wuxing.css +71 -0
  5. package/assets/style/var.css +23 -0
  6. package/components/base/affix/api.ts +16 -0
  7. package/components/base/affix/index.ts +17 -0
  8. package/components/base/affix/props.d.ts +34 -0
  9. package/components/base/affix/useAffix.ts +124 -0
  10. package/components/base/alert/api.ts +18 -0
  11. package/components/base/alert/index.ts +15 -0
  12. package/components/base/alert/props.d.ts +50 -0
  13. package/components/base/anchor/api.ts +20 -0
  14. package/components/base/anchor/index.ts +18 -0
  15. package/components/base/anchor/props.d.ts +46 -0
  16. package/components/base/anchor/useAnchor.ts +84 -0
  17. package/components/base/autoComplete/api.ts +24 -0
  18. package/components/base/autoComplete/index.ts +17 -0
  19. package/components/base/autoComplete/props.d.ts +75 -0
  20. package/components/base/autoComplete/useAutoComplete.ts +157 -0
  21. package/components/base/avatar/api.ts +17 -0
  22. package/components/base/avatar/avatar.css +61 -0
  23. package/components/base/avatar/index.ts +15 -0
  24. package/components/base/avatar/props.d.ts +37 -0
  25. package/components/base/backTop/api.ts +17 -0
  26. package/components/base/backTop/index.ts +17 -0
  27. package/components/base/backTop/props.d.ts +38 -0
  28. package/components/base/backTop/useBackTop.ts +62 -0
  29. package/components/base/badge/api.ts +22 -0
  30. package/components/base/badge/index.ts +15 -0
  31. package/components/base/badge/props.d.ts +50 -0
  32. package/components/base/button/api.ts +28 -0
  33. package/components/base/button/button.css +34 -0
  34. package/components/base/button/index.ts +17 -0
  35. package/components/base/button/props.d.ts +66 -0
  36. package/components/base/button/useButton.ts +37 -0
  37. package/components/base/card/api.ts +17 -0
  38. package/components/base/card/index.ts +15 -0
  39. package/components/base/card/props.d.ts +37 -0
  40. package/components/base/carousel/api.ts +28 -0
  41. package/components/base/carousel/index.ts +17 -0
  42. package/components/base/carousel/props.d.ts +72 -0
  43. package/components/base/carousel/useCarousel.ts +150 -0
  44. package/components/base/cascader/api.ts +23 -0
  45. package/components/base/cascader/index.ts +18 -0
  46. package/components/base/cascader/props.d.ts +103 -0
  47. package/components/base/cascader/useCascader.ts +335 -0
  48. package/components/base/checkbox/api.ts +24 -0
  49. package/components/base/checkbox/checkbox.css +0 -0
  50. package/components/base/checkbox/index.ts +17 -0
  51. package/components/base/checkbox/props.d.ts +77 -0
  52. package/components/base/checkbox/useCheckbox.ts +43 -0
  53. package/components/base/collapse/api.ts +21 -0
  54. package/components/base/collapse/index.ts +18 -0
  55. package/components/base/collapse/props.d.ts +45 -0
  56. package/components/base/collapse/useCollapse.ts +81 -0
  57. package/components/base/datePicker/__tests__/useDatePicker.test.ts +244 -0
  58. package/components/base/datePicker/api.ts +22 -0
  59. package/components/base/datePicker/index.ts +19 -0
  60. package/components/base/datePicker/props.d.ts +86 -0
  61. package/components/base/datePicker/useDatePicker.ts +392 -0
  62. package/components/base/divider/api.ts +15 -0
  63. package/components/base/divider/divider.css +11 -0
  64. package/components/base/divider/index.ts +15 -0
  65. package/components/base/divider/props.d.ts +30 -0
  66. package/components/base/dropdown/api.ts +33 -0
  67. package/components/base/dropdown/index.ts +18 -0
  68. package/components/base/dropdown/props.d.ts +60 -0
  69. package/components/base/dropdown/useDropdown.ts +124 -0
  70. package/components/base/empty/api.ts +15 -0
  71. package/components/base/empty/index.ts +15 -0
  72. package/components/base/empty/props.d.ts +26 -0
  73. package/components/base/image/__tests__/useImage.test.ts +176 -0
  74. package/components/base/image/api.ts +25 -0
  75. package/components/base/image/index.ts +18 -0
  76. package/components/base/image/props.d.ts +67 -0
  77. package/components/base/image/useImage.ts +119 -0
  78. package/components/base/input/api.ts +23 -0
  79. package/components/base/input/index.ts +17 -0
  80. package/components/base/input/input.css +19 -0
  81. package/components/base/input/props.d.ts +85 -0
  82. package/components/base/input/useInput.ts +63 -0
  83. package/components/base/inputNumber/__tests__/useInputNumber.test.ts +189 -0
  84. package/components/base/inputNumber/api.ts +23 -0
  85. package/components/base/inputNumber/index.ts +17 -0
  86. package/components/base/inputNumber/props.d.ts +78 -0
  87. package/components/base/inputNumber/useInputNumber.ts +182 -0
  88. package/components/base/li/api.ts +15 -0
  89. package/components/base/li/index.ts +15 -0
  90. package/components/base/li/props.d.ts +30 -0
  91. package/components/base/list/api.ts +16 -0
  92. package/components/base/list/index.ts +17 -0
  93. package/components/base/list/props.d.ts +33 -0
  94. package/components/base/list/useList.ts +36 -0
  95. package/components/base/loading/api.ts +17 -0
  96. package/components/base/loading/index.ts +15 -0
  97. package/components/base/loading/props.d.ts +40 -0
  98. package/components/base/popover/api.ts +28 -0
  99. package/components/base/popover/index.ts +17 -0
  100. package/components/base/popover/props.d.ts +73 -0
  101. package/components/base/popover/usePopover.ts +193 -0
  102. package/components/base/progress/api.ts +20 -0
  103. package/components/base/progress/index.ts +17 -0
  104. package/components/base/progress/props.d.ts +68 -0
  105. package/components/base/progress/useProgress.ts +28 -0
  106. package/components/base/radio/api.ts +19 -0
  107. package/components/base/radio/index.ts +19 -0
  108. package/components/base/radio/props.d.ts +59 -0
  109. package/components/base/radio/useRadio.ts +11 -0
  110. package/components/base/rate/api.ts +18 -0
  111. package/components/base/rate/index.ts +17 -0
  112. package/components/base/rate/props.d.ts +49 -0
  113. package/components/base/rate/useRate.ts +76 -0
  114. package/components/base/result/api.ts +20 -0
  115. package/components/base/result/index.ts +15 -0
  116. package/components/base/result/props.d.ts +36 -0
  117. package/components/base/select/api.ts +34 -0
  118. package/components/base/select/index.ts +18 -0
  119. package/components/base/select/props.d.ts +152 -0
  120. package/components/base/select/select.css +7 -0
  121. package/components/base/select/useSelect.ts +281 -0
  122. package/components/base/select/useSelectTools.ts +60 -0
  123. package/components/base/skeleton/api.ts +18 -0
  124. package/components/base/skeleton/index.ts +15 -0
  125. package/components/base/skeleton/props.d.ts +41 -0
  126. package/components/base/slider/api.ts +22 -0
  127. package/components/base/slider/index.ts +17 -0
  128. package/components/base/slider/props.d.ts +79 -0
  129. package/components/base/slider/useSlider.ts +87 -0
  130. package/components/base/space/api.ts +17 -0
  131. package/components/base/space/index.ts +15 -0
  132. package/components/base/space/props.d.ts +39 -0
  133. package/components/base/steps/__tests__/useSteps.test.ts +46 -0
  134. package/components/base/steps/api.ts +30 -0
  135. package/components/base/steps/index.ts +22 -0
  136. package/components/base/steps/props.d.ts +88 -0
  137. package/components/base/steps/useSteps.ts +101 -0
  138. package/components/base/switch/api.ts +22 -0
  139. package/components/base/switch/index.ts +19 -0
  140. package/components/base/switch/props.d.ts +66 -0
  141. package/components/base/switch/useSwitch.tsx +80 -0
  142. package/components/base/tabs/api.ts +23 -0
  143. package/components/base/tabs/index.ts +18 -0
  144. package/components/base/tabs/props.d.ts +41 -0
  145. package/components/base/tabs/useTabs.ts +67 -0
  146. package/components/base/tag/api.ts +17 -0
  147. package/components/base/tag/index.ts +15 -0
  148. package/components/base/tag/props.d.ts +51 -0
  149. package/components/base/timePicker/__tests__/useTimePicker.test.ts +124 -0
  150. package/components/base/timePicker/api.ts +24 -0
  151. package/components/base/timePicker/index.ts +18 -0
  152. package/components/base/timePicker/props.d.ts +86 -0
  153. package/components/base/timePicker/useTimePicker.ts +161 -0
  154. package/components/base/timeline/api.ts +24 -0
  155. package/components/base/timeline/index.ts +16 -0
  156. package/components/base/timeline/props.d.ts +60 -0
  157. package/components/base/tooltip/api.ts +21 -0
  158. package/components/base/tooltip/index.ts +18 -0
  159. package/components/base/tooltip/props.d.ts +46 -0
  160. package/components/base/tooltip/useTooltip.ts +208 -0
  161. package/components/base/transfer/api.ts +18 -0
  162. package/components/base/transfer/index.ts +17 -0
  163. package/components/base/transfer/props.d.ts +63 -0
  164. package/components/base/transfer/useTransfer.ts +208 -0
  165. package/components/base/tree/__tests__/tree.test.ts +223 -0
  166. package/components/base/tree/api.ts +47 -0
  167. package/components/base/tree/index.ts +29 -0
  168. package/components/base/tree/props.d.ts +108 -0
  169. package/components/base/tree/tree.ts +263 -0
  170. package/components/base/tree/useTree.ts +114 -0
  171. package/components/message/confirm/api.ts +21 -0
  172. package/components/message/confirm/index.ts +15 -0
  173. package/components/message/confirm/props.d.ts +69 -0
  174. package/components/message/dialog/api.ts +20 -0
  175. package/components/message/dialog/index.ts +15 -0
  176. package/components/message/dialog/props.d.ts +62 -0
  177. package/components/message/drawer/api.ts +33 -0
  178. package/components/message/drawer/index.ts +15 -0
  179. package/components/message/drawer/props.d.ts +80 -0
  180. package/components/message/message/api.ts +27 -0
  181. package/components/message/message/index.ts +20 -0
  182. package/components/message/message/props.d.ts +54 -0
  183. package/components/message/message/useMessage.ts +61 -0
  184. package/components/message/notification/__tests__/useNotification.test.ts +129 -0
  185. package/components/message/notification/api.ts +23 -0
  186. package/components/message/notification/index.ts +19 -0
  187. package/components/message/notification/props.d.ts +64 -0
  188. package/components/message/notification/useNotification.ts +79 -0
  189. package/components/message/popover/MPopover.tsx +94 -0
  190. package/components/message/popover/api.ts +54 -0
  191. package/components/message/popover/index.ts +17 -0
  192. package/components/message/popover/popover.css +21 -0
  193. package/components/message/popover/props.d.ts +76 -0
  194. package/components/message/popover/usePopover.ts +234 -0
  195. package/components/other/darkMode/api.ts +17 -0
  196. package/components/other/darkMode/index.ts +17 -0
  197. package/components/other/darkMode/props.d.ts +37 -0
  198. package/components/other/darkMode/useDarkMode.ts +129 -0
  199. package/components/template/border/api.ts +18 -0
  200. package/components/template/border/index.ts +15 -0
  201. package/components/template/border/props.d.ts +41 -0
  202. package/components/template/breadcrumb/api.ts +15 -0
  203. package/components/template/breadcrumb/index.ts +15 -0
  204. package/components/template/breadcrumb/props.d.ts +45 -0
  205. package/components/template/descriptions/api.ts +23 -0
  206. package/components/template/descriptions/index.ts +16 -0
  207. package/components/template/descriptions/props.d.ts +54 -0
  208. package/components/template/form/api.ts +23 -0
  209. package/components/template/form/index.ts +20 -0
  210. package/components/template/form/props.d.ts +60 -0
  211. package/components/template/grid/api.ts +20 -0
  212. package/components/template/grid/index.ts +15 -0
  213. package/components/template/grid/props.d.ts +48 -0
  214. package/components/template/menu/__tests__/useMenu.test.ts +157 -0
  215. package/components/template/menu/api.ts +26 -0
  216. package/components/template/menu/index.ts +18 -0
  217. package/components/template/menu/props.d.ts +93 -0
  218. package/components/template/menu/useMenu.ts +155 -0
  219. package/components/template/pagination/__tests__/usePagination.test.ts +138 -0
  220. package/components/template/pagination/api.ts +22 -0
  221. package/components/template/pagination/index.ts +19 -0
  222. package/components/template/pagination/props.d.ts +65 -0
  223. package/components/template/pagination/usePagination.ts +186 -0
  224. package/components/template/table/__tests__/useTable.test.ts +138 -0
  225. package/components/template/table/api.ts +18 -0
  226. package/components/template/table/index.ts +18 -0
  227. package/components/template/table/props.d.ts +36 -0
  228. package/components/template/table/useTable.ts +136 -0
  229. package/components/template/tableColumn/api.ts +17 -0
  230. package/components/template/tableColumn/index.ts +15 -0
  231. package/components/template/tableColumn/props.d.ts +32 -0
  232. package/components/template/virtualList/api.ts +16 -0
  233. package/components/template/virtualList/index.ts +17 -0
  234. package/components/template/virtualList/props.d.ts +25 -0
  235. package/components/template/virtualList/useVirtualList.ts +237 -0
  236. package/components/types/hook.d.ts +24 -0
  237. package/components/types/props.d.ts +57 -0
  238. package/components/types/template.d.ts +59 -0
  239. package/compositions/commandPalette/index.ts +11 -0
  240. package/compositions/commandPalette/types.ts +29 -0
  241. package/compositions/commandPalette/useCommandPalette.ts +135 -0
  242. package/compositions/common/__tests__/useDebounceFn.test.ts +62 -0
  243. package/compositions/common/__tests__/useEventListener.test.ts +98 -0
  244. package/compositions/common/__tests__/usePopover.test.ts +43 -0
  245. package/compositions/common/__tests__/useTeleport.test.ts +32 -0
  246. package/compositions/common/defineCore.ts +55 -0
  247. package/compositions/common/testAnchor.ts +211 -0
  248. package/compositions/common/useComponentSize.ts +17 -0
  249. package/compositions/common/useDebounceFn.ts +27 -0
  250. package/compositions/common/useDrag.ts +65 -0
  251. package/compositions/common/useElementSize.ts +37 -0
  252. package/compositions/common/useEventListener.ts +48 -0
  253. package/compositions/common/usePopover.ts +45 -0
  254. package/compositions/common/useResizeObserver.ts +47 -0
  255. package/compositions/common/useTeleport.ts +24 -0
  256. package/compositions/contextMenu/index.ts +10 -0
  257. package/compositions/contextMenu/types.ts +21 -0
  258. package/compositions/contextMenu/useContextMenu.ts +101 -0
  259. package/compositions/editor/index.ts +18 -0
  260. package/compositions/editor/types.ts +147 -0
  261. package/compositions/editor/useEditor.ts +224 -0
  262. package/compositions/index.ts +15 -0
  263. package/compositions/input/__tests__/useBooleanInput.test.ts +73 -0
  264. package/compositions/input/useBooleanInput.ts +52 -0
  265. package/compositions/modal/__tests__/useModal.test.ts +110 -0
  266. package/compositions/modal/useModal.ts +72 -0
  267. package/compositions/overlay/index.ts +14 -0
  268. package/compositions/overlay/useOverlayStack.ts +146 -0
  269. package/compositions/peekView/index.ts +10 -0
  270. package/compositions/peekView/usePeekView.ts +99 -0
  271. package/compositions/popper/useClickAway.ts +41 -0
  272. package/compositions/popper/usePopper.ts +63 -0
  273. package/compositions/theme/index.ts +17 -0
  274. package/compositions/theme/presets/compact.ts +117 -0
  275. package/compositions/theme/presets/dark.ts +113 -0
  276. package/compositions/theme/presets/index.ts +11 -0
  277. package/compositions/theme/presets/light.ts +113 -0
  278. package/compositions/theme/types.ts +46 -0
  279. package/compositions/theme/useTheme.ts +269 -0
  280. package/compositions/toast/index.ts +10 -0
  281. package/compositions/toast/useToast.ts +176 -0
  282. package/compositions/tooltip/index.ts +9 -0
  283. package/compositions/tooltip/useTooltip.ts +10 -0
  284. package/compositions/utils/__tests__/filters.test.ts +136 -0
  285. package/compositions/utils/filters.ts +135 -0
  286. package/compositions/virtualList/__tests__/useHeightCache.test.ts +97 -0
  287. package/compositions/virtualList/enums.ts +52 -0
  288. package/compositions/virtualList/useContainerObserver.ts +89 -0
  289. package/compositions/virtualList/useEntries.ts +248 -0
  290. package/compositions/virtualList/useHeightCache.ts +83 -0
  291. package/compositions/virtualList/useSentinelObserver.ts +81 -0
  292. package/dist/components/base/affix/index.d.ts +2 -1
  293. package/dist/components/base/affix/useAffix.d.ts +7 -5
  294. package/dist/components/base/anchor/index.d.ts +2 -1
  295. package/dist/components/base/anchor/useAnchor.d.ts +3 -2
  296. package/dist/components/base/autoComplete/useAutoComplete.d.ts +14 -5
  297. package/dist/components/base/avatar/index.d.ts +1 -0
  298. package/dist/components/base/backTop/index.d.ts +2 -1
  299. package/dist/components/base/backTop/useBackTop.d.ts +2 -2
  300. package/dist/components/base/button/index.d.ts +3 -21
  301. package/dist/components/base/button/useButton.d.ts +5 -2
  302. package/dist/components/base/carousel/useCarousel.d.ts +7 -3
  303. package/dist/components/base/cascader/useCascader.d.ts +25 -12
  304. package/dist/components/base/checkbox/index.d.ts +2 -1
  305. package/dist/components/base/checkbox/useCheckbox.d.ts +5 -3
  306. package/dist/components/base/collapse/index.d.ts +2 -1
  307. package/dist/components/base/collapse/useCollapse.d.ts +4 -3
  308. package/dist/components/base/datePicker/__tests__/useDatePicker.test.d.ts +1 -0
  309. package/dist/components/base/datePicker/useDatePicker.d.ts +140 -8
  310. package/dist/components/base/dropdown/index.d.ts +2 -1
  311. package/dist/components/base/dropdown/useDropdown.d.ts +13 -6
  312. package/dist/components/base/image/__tests__/useImage.test.d.ts +1 -0
  313. package/dist/components/base/image/useImage.d.ts +5 -5
  314. package/dist/components/base/input/index.d.ts +2 -1
  315. package/dist/components/base/input/useInput.d.ts +4 -2
  316. package/dist/components/base/inputNumber/__tests__/useInputNumber.test.d.ts +1 -0
  317. package/dist/components/base/inputNumber/index.d.ts +2 -1
  318. package/dist/components/base/inputNumber/useInputNumber.d.ts +4 -3
  319. package/dist/components/base/li/index.d.ts +1 -0
  320. package/dist/components/base/list/index.d.ts +2 -1
  321. package/dist/components/base/list/useList.d.ts +1 -1
  322. package/dist/components/base/popover/index.d.ts +2 -1
  323. package/dist/components/base/popover/usePopover.d.ts +10 -9
  324. package/dist/components/base/progress/index.d.ts +2 -1
  325. package/dist/components/base/progress/useProgress.d.ts +2 -2
  326. package/dist/components/base/rate/index.d.ts +2 -1
  327. package/dist/components/base/rate/useRate.d.ts +3 -2
  328. package/dist/components/base/select/useSelect.d.ts +10 -9
  329. package/dist/components/base/slider/index.d.ts +2 -1
  330. package/dist/components/base/slider/useSlider.d.ts +5 -4
  331. package/dist/components/base/steps/__tests__/useSteps.test.d.ts +1 -0
  332. package/dist/components/base/steps/index.d.ts +1 -1
  333. package/dist/components/base/steps/useSteps.d.ts +5 -5
  334. package/dist/components/base/switch/index.d.ts +2 -1
  335. package/dist/components/base/switch/useSwitch.d.ts +9 -3
  336. package/dist/components/base/tabs/index.d.ts +1 -1
  337. package/dist/components/base/tabs/useTabs.d.ts +4 -3
  338. package/dist/components/base/tag/index.d.ts +1 -0
  339. package/dist/components/base/timePicker/__tests__/useTimePicker.test.d.ts +1 -0
  340. package/dist/components/base/timePicker/useTimePicker.d.ts +14 -6
  341. package/dist/components/base/tooltip/index.d.ts +2 -1
  342. package/dist/components/base/tooltip/useTooltip.d.ts +24 -11
  343. package/dist/components/base/transfer/useTransfer.d.ts +17 -16
  344. package/dist/components/base/tree/__tests__/tree.test.d.ts +1 -0
  345. package/dist/components/base/tree/index.d.ts +1 -1
  346. package/dist/components/base/tree/useTree.d.ts +2 -1
  347. package/dist/components/message/drawer/index.d.ts +2 -2
  348. package/dist/components/message/message/useMessage.d.ts +11 -1
  349. package/dist/components/message/notification/__tests__/useNotification.test.d.ts +1 -0
  350. package/dist/components/message/notification/useNotification.d.ts +17 -1
  351. package/dist/components/message/popover/MPopover.d.ts +6 -1
  352. package/dist/components/message/popover/index.d.ts +1 -1
  353. package/dist/components/message/popover/usePopover.d.ts +7 -7
  354. package/dist/components/other/darkMode/useDarkMode.d.ts +3 -4
  355. package/dist/components/template/menu/__tests__/useMenu.test.d.ts +1 -0
  356. package/dist/components/template/menu/index.d.ts +0 -1
  357. package/dist/components/template/menu/useMenu.d.ts +2 -1
  358. package/dist/components/template/pagination/__tests__/usePagination.test.d.ts +1 -0
  359. package/dist/components/template/pagination/index.d.ts +2 -1
  360. package/dist/components/template/table/__tests__/useTable.test.d.ts +1 -0
  361. package/dist/components/template/virtualList/index.d.ts +0 -1
  362. package/dist/components/template/virtualList/useVirtualList.d.ts +10 -7
  363. package/dist/compositions/commandPalette/index.d.ts +11 -0
  364. package/dist/compositions/commandPalette/types.d.ts +20 -0
  365. package/dist/compositions/commandPalette/useCommandPalette.d.ts +32 -0
  366. package/dist/compositions/common/__tests__/useDebounceFn.test.d.ts +1 -0
  367. package/dist/compositions/common/__tests__/useEventListener.test.d.ts +1 -0
  368. package/dist/compositions/common/__tests__/usePopover.test.d.ts +1 -0
  369. package/dist/compositions/common/__tests__/useTeleport.test.d.ts +1 -0
  370. package/dist/compositions/common/testAnchor.d.ts +40 -0
  371. package/dist/compositions/common/useComponentSize.d.ts +6 -0
  372. package/dist/compositions/common/useDrag.d.ts +1 -1
  373. package/dist/compositions/common/useElementSize.d.ts +2 -2
  374. package/dist/compositions/common/useEventListener.d.ts +2 -2
  375. package/dist/compositions/common/useTeleport.d.ts +4 -2
  376. package/dist/compositions/contextMenu/index.d.ts +10 -0
  377. package/dist/compositions/contextMenu/types.d.ts +12 -0
  378. package/dist/compositions/contextMenu/useContextMenu.d.ts +52 -0
  379. package/dist/compositions/editor/index.d.ts +10 -0
  380. package/dist/compositions/editor/types.d.ts +132 -0
  381. package/dist/compositions/editor/useEditor.d.ts +13 -0
  382. package/dist/compositions/index.d.ts +15 -0
  383. package/dist/compositions/input/__tests__/useBooleanInput.test.d.ts +1 -0
  384. package/dist/compositions/modal/__tests__/useModal.test.d.ts +1 -0
  385. package/dist/compositions/modal/useModal.d.ts +3 -2
  386. package/dist/compositions/overlay/index.d.ts +10 -0
  387. package/dist/compositions/overlay/useOverlayStack.d.ts +188 -0
  388. package/dist/compositions/peekView/index.d.ts +10 -0
  389. package/dist/compositions/peekView/usePeekView.d.ts +16 -0
  390. package/dist/compositions/popper/useClickAway.d.ts +3 -3
  391. package/dist/compositions/theme/index.d.ts +11 -0
  392. package/dist/compositions/theme/presets/compact.d.ts +6 -0
  393. package/dist/compositions/theme/presets/dark.d.ts +2 -0
  394. package/dist/compositions/theme/presets/index.d.ts +11 -0
  395. package/dist/compositions/theme/presets/light.d.ts +2 -0
  396. package/dist/compositions/theme/types.d.ts +41 -0
  397. package/dist/compositions/theme/useTheme.d.ts +167 -0
  398. package/dist/compositions/toast/index.d.ts +10 -0
  399. package/dist/compositions/toast/useToast.d.ts +71 -0
  400. package/dist/compositions/tooltip/index.d.ts +9 -0
  401. package/dist/compositions/tooltip/useTooltip.d.ts +10 -0
  402. package/dist/compositions/utils/__tests__/filters.test.d.ts +1 -0
  403. package/dist/compositions/virtualList/__tests__/useHeightCache.test.d.ts +1 -0
  404. package/dist/core.js +7050 -4188
  405. package/dist/index.d.ts +1 -0
  406. package/dist/runtime/defineHook.d.ts +1 -1
  407. package/dist/tools/__tests__/empty.test.d.ts +1 -0
  408. package/dist/tools/empty.d.ts +2 -2
  409. package/dist/tools/types.d.ts +1 -1
  410. package/dist/vitest.config.d.ts +10 -0
  411. package/index.css +1 -0
  412. package/index.ts +73 -0
  413. package/package.json +41 -22
  414. package/runtime/defineHook.ts +21 -0
  415. package/tools/__tests__/empty.test.ts +91 -0
  416. package/tools/empty.ts +81 -0
  417. package/tools/index.ts +15 -0
  418. package/tools/types.ts +11 -0
  419. package/tsconfig.json +8 -0
  420. package/types/common/common.d.ts +25 -0
  421. package/types/common/model.d.ts +25 -0
  422. package/types/index.d.ts +11 -0
  423. package/types/props.d.ts +13 -0
  424. package/vite.config.build.ts +41 -0
  425. package/vitest.config.ts +17 -0
  426. package/dist/vite.config.build.d.ts +0 -2
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @description Transfer 组件核心 composable
3
+ * @author 阿怪
4
+ * @date 2026/2/26
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ *
9
+ * 核心逻辑:
10
+ * - 左右数据分割:data 按 modelValue(右侧 key 列表)分为左侧/右侧两列表
11
+ * - 勾选状态:leftChecked / rightChecked 分别维护左右侧勾选集合
12
+ * - 过滤:filterable 模式下各自按搜索词过滤
13
+ * - 穿梭操作:将勾选项从一侧移到另一侧,emit change 事件
14
+ */
15
+ import { computed, ref, toRef } from 'vue';
16
+ import { TransferItem, TransferProps } from './props';
17
+ import { type HookContext } from '../../types/hook';
18
+
19
+ export function useTransfer(props: TransferProps, ctx: HookContext) {
20
+ const dataRef = toRef(() => props.data ?? []);
21
+ const modelValueRef = toRef(() => props.modelValue ?? []);
22
+
23
+ // --- 搜索关键词 ---
24
+ const leftSearch = ref('');
25
+ const rightSearch = ref('');
26
+
27
+ // --- 勾选状态(key 集合) ---
28
+ const leftChecked = ref<Set<string | number>>(new Set());
29
+ const rightChecked = ref<Set<string | number>>(new Set());
30
+
31
+ // --- 左右数据分割 ---
32
+
33
+ /** 右侧数据:key 在 modelValue 中的项 */
34
+ const rightData = computed<TransferItem[]>(() => {
35
+ const rightKeys = new Set(modelValueRef.value);
36
+ return dataRef.value.filter(item => rightKeys.has(item.key));
37
+ });
38
+
39
+ /** 左侧数据:key 不在 modelValue 中的项 */
40
+ const leftData = computed<TransferItem[]>(() => {
41
+ const rightKeys = new Set(modelValueRef.value);
42
+ return dataRef.value.filter(item => !rightKeys.has(item.key));
43
+ });
44
+
45
+ /** 过滤后的左侧列表 */
46
+ const filteredLeftData = computed<TransferItem[]>(() => {
47
+ if (!props.filterable || !leftSearch.value) return leftData.value;
48
+ const q = leftSearch.value.toLowerCase();
49
+ return leftData.value.filter(item => item.label.toLowerCase().includes(q));
50
+ });
51
+
52
+ /** 过滤后的右侧列表 */
53
+ const filteredRightData = computed<TransferItem[]>(() => {
54
+ if (!props.filterable || !rightSearch.value) return rightData.value;
55
+ const q = rightSearch.value.toLowerCase();
56
+ return rightData.value.filter(item => item.label.toLowerCase().includes(q));
57
+ });
58
+
59
+ // --- 全选状态 ---
60
+
61
+ /** 左侧是否全选(仅计算过滤后的可勾选项) */
62
+ const isLeftAllChecked = computed(() => {
63
+ const checkable = filteredLeftData.value.filter(item => !item.disabled);
64
+ return checkable.length > 0 && checkable.every(item => leftChecked.value.has(item.key));
65
+ });
66
+
67
+ /** 左侧是否半选 */
68
+ const isLeftIndeterminate = computed(() => {
69
+ const checkable = filteredLeftData.value.filter(item => !item.disabled);
70
+ const checkedCount = checkable.filter(item => leftChecked.value.has(item.key)).length;
71
+ return checkedCount > 0 && checkedCount < checkable.length;
72
+ });
73
+
74
+ /** 右侧是否全选 */
75
+ const isRightAllChecked = computed(() => {
76
+ const checkable = filteredRightData.value.filter(item => !item.disabled);
77
+ return checkable.length > 0 && checkable.every(item => rightChecked.value.has(item.key));
78
+ });
79
+
80
+ /** 右侧是否半选 */
81
+ const isRightIndeterminate = computed(() => {
82
+ const checkable = filteredRightData.value.filter(item => !item.disabled);
83
+ const checkedCount = checkable.filter(item => rightChecked.value.has(item.key)).length;
84
+ return checkedCount > 0 && checkedCount < checkable.length;
85
+ });
86
+
87
+ // --- 事件处理 ---
88
+
89
+ /** 切换左侧某项的勾选 */
90
+ const toggleLeftCheck = (key: string | number, disabled: boolean) => {
91
+ if (disabled) return;
92
+ const newSet = new Set(leftChecked.value);
93
+ if (newSet.has(key)) {
94
+ newSet.delete(key);
95
+ } else {
96
+ newSet.add(key);
97
+ }
98
+ leftChecked.value = newSet;
99
+ };
100
+
101
+ /** 切换右侧某项的勾选 */
102
+ const toggleRightCheck = (key: string | number, disabled: boolean) => {
103
+ if (disabled) return;
104
+ const newSet = new Set(rightChecked.value);
105
+ if (newSet.has(key)) {
106
+ newSet.delete(key);
107
+ } else {
108
+ newSet.add(key);
109
+ }
110
+ rightChecked.value = newSet;
111
+ };
112
+
113
+ /** 左侧全选 / 取消全选 */
114
+ const toggleLeftAll = () => {
115
+ const checkable = filteredLeftData.value.filter(item => !item.disabled);
116
+ if (isLeftAllChecked.value) {
117
+ // 取消勾选过滤后的项
118
+ const newSet = new Set(leftChecked.value);
119
+ checkable.forEach(item => newSet.delete(item.key));
120
+ leftChecked.value = newSet;
121
+ } else {
122
+ // 全选过滤后的项
123
+ const newSet = new Set(leftChecked.value);
124
+ checkable.forEach(item => newSet.add(item.key));
125
+ leftChecked.value = newSet;
126
+ }
127
+ };
128
+
129
+ /** 右侧全选 / 取消全选 */
130
+ const toggleRightAll = () => {
131
+ const checkable = filteredRightData.value.filter(item => !item.disabled);
132
+ if (isRightAllChecked.value) {
133
+ const newSet = new Set(rightChecked.value);
134
+ checkable.forEach(item => newSet.delete(item.key));
135
+ rightChecked.value = newSet;
136
+ } else {
137
+ const newSet = new Set(rightChecked.value);
138
+ checkable.forEach(item => newSet.add(item.key));
139
+ rightChecked.value = newSet;
140
+ }
141
+ };
142
+
143
+ /** 将左侧勾选项移到右侧(→ 方向) */
144
+ const moveToRight = () => {
145
+ if (!leftChecked.value.size) return;
146
+
147
+ // 要移动的 key 列表
148
+ const movedKeys = [...leftChecked.value];
149
+ // 新的右侧 key 列表 = 原右侧 + 移过来的
150
+ const newModelValue = [...modelValueRef.value, ...movedKeys];
151
+
152
+ ctx.emit('update:modelValue', newModelValue);
153
+ ctx.emit('change', newModelValue, 'right', movedKeys);
154
+
155
+ // 清空左侧勾选
156
+ leftChecked.value = new Set();
157
+ };
158
+
159
+ /** 将右侧勾选项移到左侧(← 方向) */
160
+ const moveToLeft = () => {
161
+ if (!rightChecked.value.size) return;
162
+
163
+ const movedKeys = [...rightChecked.value];
164
+ const movedSet = new Set(movedKeys);
165
+ // 新的右侧 key 列表 = 原右侧中去掉移走的
166
+ const newModelValue = modelValueRef.value.filter(key => !movedSet.has(key));
167
+
168
+ ctx.emit('update:modelValue', newModelValue);
169
+ ctx.emit('change', newModelValue, 'left', movedKeys);
170
+
171
+ // 清空右侧勾选
172
+ rightChecked.value = new Set();
173
+ };
174
+
175
+ /** 左侧是否有勾选项(控制按钮是否可用) */
176
+ const hasLeftChecked = computed(() => leftChecked.value.size > 0);
177
+
178
+ /** 右侧是否有勾选项 */
179
+ const hasRightChecked = computed(() => rightChecked.value.size > 0);
180
+
181
+ return {
182
+ // 搜索
183
+ leftSearch,
184
+ rightSearch,
185
+ // 数据
186
+ leftData,
187
+ rightData,
188
+ filteredLeftData,
189
+ filteredRightData,
190
+ // 勾选状态
191
+ leftChecked,
192
+ rightChecked,
193
+ hasLeftChecked,
194
+ hasRightChecked,
195
+ // 全选
196
+ isLeftAllChecked,
197
+ isLeftIndeterminate,
198
+ isRightAllChecked,
199
+ isRightIndeterminate,
200
+ // 事件
201
+ toggleLeftCheck,
202
+ toggleRightCheck,
203
+ toggleLeftAll,
204
+ toggleRightAll,
205
+ moveToRight,
206
+ moveToLeft,
207
+ };
208
+ }
@@ -0,0 +1,223 @@
1
+ /**
2
+ * @description Tree 类核心测试
3
+ * @author 阿怪
4
+ * @date 2026/3/23
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { describe, expect, it } from 'vitest';
10
+ import Tree, { mergeConfig, DEFAULT_CONFIG } from '../tree';
11
+ import { fixKey } from '../useTree';
12
+
13
+ const SAMPLE_DATA = [
14
+ {
15
+ key: '1', label: '节点 1', children: [
16
+ { key: '1-1', label: '子节点 1-1' },
17
+ { key: '1-2', label: '子节点 1-2', children: [
18
+ { key: '1-2-1', label: '孙节点 1-2-1' },
19
+ ] },
20
+ ],
21
+ },
22
+ { key: '2', label: '节点 2' },
23
+ { key: '3', label: '节点 3', disabled: true },
24
+ ];
25
+
26
+ describe('mergeConfig', () => {
27
+ it('返回默认配置', () => {
28
+ expect(mergeConfig(DEFAULT_CONFIG)).toBe(DEFAULT_CONFIG);
29
+ });
30
+
31
+ it('自定义字段合并', () => {
32
+ const result = mergeConfig({ key: 'id', label: 'name' });
33
+ expect(result.key).toBe('id');
34
+ expect(result.label).toBe('name');
35
+ expect(result.children).toBe('children');
36
+ });
37
+ });
38
+
39
+ describe('fixKey', () => {
40
+ it('为无 key 的节点生成 key', () => {
41
+ const data = [{ label: 'A' }, { label: 'B' }] as any[];
42
+ const result = fixKey(data, 'key') as any[];
43
+ expect(result[0].key).toBe('0');
44
+ expect(result[1].key).toBe('1');
45
+ });
46
+
47
+ it('已有 key 的节点保持不变', () => {
48
+ const data = [{ key: 'existing', label: 'A' }];
49
+ const result = fixKey(data, 'key') as any[];
50
+ expect(result[0].key).toBe('existing');
51
+ });
52
+
53
+ it('递归处理子节点', () => {
54
+ const data = [{ key: 'root', children: [{ label: 'child' }] }] as any[];
55
+ const result = fixKey(data, 'key') as any[];
56
+ expect(result[0].children[0].key).toBe('root0');
57
+ });
58
+
59
+ it('单节点也能处理', () => {
60
+ const data = { label: 'single' } as any;
61
+ const result = fixKey(data, 'key') as any;
62
+ expect(result.key).toBe('0');
63
+ });
64
+ });
65
+
66
+ describe('Tree', () => {
67
+ it('构建树并获取根节点', () => {
68
+ const tree = new Tree({ data: SAMPLE_DATA });
69
+ const roots = tree.getTreeData();
70
+ expect(roots).toHaveLength(3);
71
+ expect(roots[0].isRoot).toBe(true);
72
+ });
73
+
74
+ it('getTreeData 通过 keys 获取节点', () => {
75
+ const tree = new Tree({ data: SAMPLE_DATA });
76
+ const nodes = tree.getTreeData(['1-1', '2']);
77
+ expect(nodes).toHaveLength(2);
78
+ });
79
+
80
+ it('getChildrenKeys 返回直接子节点 key', () => {
81
+ const tree = new Tree({ data: SAMPLE_DATA });
82
+ const root = tree.getTreeData(['1'])[0];
83
+ const keys = tree.getChildrenKeys(root);
84
+ expect(keys).toEqual(['1-1', '1-2']);
85
+ });
86
+
87
+ it('toggleExpand 切换展开状态', () => {
88
+ const tree = new Tree({ data: SAMPLE_DATA });
89
+ const node = tree.getTreeData(['1'])[0];
90
+
91
+ expect(node.expand).toBe(false);
92
+ tree.toggleExpand(node);
93
+ expect(node.expand).toBe(true);
94
+ tree.toggleExpand(node);
95
+ expect(node.expand).toBe(false);
96
+ });
97
+
98
+ it('toggleExpand 指定值', () => {
99
+ const tree = new Tree({ data: SAMPLE_DATA });
100
+ const node = tree.getTreeData(['1'])[0];
101
+
102
+ tree.toggleExpand(node, true);
103
+ expect(node.expand).toBe(true);
104
+ tree.toggleExpand(node, true);
105
+ expect(node.expand).toBe(true);
106
+ });
107
+
108
+ it('defaultExpandAll 展开所有节点', () => {
109
+ const tree = new Tree({ data: SAMPLE_DATA, defaultExpandAll: true });
110
+ const root = tree.getTreeData(['1'])[0];
111
+ expect(root.expand).toBe(true);
112
+ });
113
+
114
+ it('setNodeCheckbox 选中节点', () => {
115
+ const tree = new Tree({ data: SAMPLE_DATA, checkStrictly: true });
116
+ const root = tree.getTreeData(['1'])[0];
117
+
118
+ tree.setNodeCheckbox(root, true);
119
+ expect(root.checked).toBe(true);
120
+ expect(root.indeterminate).toBe(false);
121
+
122
+ // 子节点也被选中(checkStrictly=true 级联)
123
+ const child = tree.getTreeData(['1-1'])[0];
124
+ expect(child.checked).toBe(true);
125
+ });
126
+
127
+ it('setNodeCheckbox checkStrictly=true 向上级联', () => {
128
+ const tree = new Tree({ data: SAMPLE_DATA, checkStrictly: true });
129
+ const child = tree.getTreeData(['1-1'])[0];
130
+
131
+ tree.setNodeCheckbox(child, true);
132
+
133
+ // 父节点应该是半选(只有一个子节点选中)
134
+ const root = tree.getTreeData(['1'])[0];
135
+ expect(root.indeterminate).toBe(true);
136
+ expect(root.checked).toBe(false);
137
+ });
138
+
139
+ it('setNodeCheckbox 全部子节点选中时父节点全选', () => {
140
+ const tree = new Tree({ data: SAMPLE_DATA, checkStrictly: true });
141
+
142
+ tree.setNodeCheckbox(tree.getTreeData(['1-1'])[0], true);
143
+ tree.setNodeCheckbox(tree.getTreeData(['1-2'])[0], true);
144
+
145
+ const root = tree.getTreeData(['1'])[0];
146
+ expect(root.checked).toBe(true);
147
+ expect(root.indeterminate).toBe(false);
148
+ });
149
+
150
+ it('setNodeCheckbox checkStrictly=false 不级联', () => {
151
+ const tree = new Tree({ data: SAMPLE_DATA, checkStrictly: false });
152
+ const root = tree.getTreeData(['1'])[0];
153
+
154
+ tree.setNodeCheckbox(root, true);
155
+ // 子节点不受影响
156
+ const child = tree.getTreeData(['1-1'])[0];
157
+ expect(child.checked).toBe(false);
158
+ });
159
+
160
+ it('disabled 节点不受级联影响', () => {
161
+ const data = [
162
+ {
163
+ key: 'p', children: [
164
+ { key: 'c1' },
165
+ { key: 'c2', disabled: true },
166
+ ],
167
+ },
168
+ ];
169
+ const tree = new Tree({ data, checkStrictly: true });
170
+ const parent = tree.getTreeData(['p'])[0];
171
+
172
+ tree.setNodeCheckbox(parent, true);
173
+ // c1 被选中,c2 因 disabled 不受影响
174
+ expect(tree.getTreeData(['c1'])[0].checked).toBe(true);
175
+ expect(tree.getTreeData(['c2'])[0].checked).toBe(false);
176
+ });
177
+
178
+ it('setCheckedByKeys 批量选中', () => {
179
+ const tree = new Tree({ data: SAMPLE_DATA, checkStrictly: true });
180
+ tree.setCheckedByKeys(['1-1', '2']);
181
+
182
+ expect(tree.getTreeData(['1-1'])[0].checked).toBe(true);
183
+ expect(tree.getTreeData(['2'])[0].checked).toBe(true);
184
+ });
185
+
186
+ it('getKeys 获取选中和展开的 key', () => {
187
+ const tree = new Tree({ data: SAMPLE_DATA, checkStrictly: true, defaultExpandAll: true });
188
+ tree.setNodeCheckbox(tree.getTreeData(['2'])[0], true);
189
+
190
+ const { checkedKeys, expandKeys } = tree.getKeys();
191
+ expect(checkedKeys).toContain('2');
192
+ expect(expandKeys.length).toBeGreaterThan(0);
193
+ });
194
+
195
+ it('单节点数据也能正常构建', () => {
196
+ const tree = new Tree({ data: { key: 'single', label: '单节点' } });
197
+ const roots = tree.getTreeData();
198
+ expect(roots).toHaveLength(1);
199
+ expect(roots[0].isRoot).toBe(true);
200
+ });
201
+
202
+ it('自定义 config 字段映射', () => {
203
+ const data = [{ id: 'a', name: '节点 A', items: [{ id: 'b', name: '子节点 B' }] }] as any[];
204
+ const tree = new Tree({
205
+ data,
206
+ config: { key: 'id', label: 'name', value: 'value', children: 'items' },
207
+ });
208
+ const roots = tree.getTreeData();
209
+ expect(roots).toHaveLength(1);
210
+
211
+ const childKeys = tree.getChildrenKeys(roots[0]);
212
+ expect(childKeys).toEqual(['b']);
213
+ });
214
+
215
+ it('getTreeData 不存在的 key 返回 undefined 元素', () => {
216
+ // cacheMap.get(key) 对不存在的 key 返回 undefined,
217
+ // getNodesByKeys 不做过滤,数组中会包含 undefined
218
+ const tree = new Tree({ data: SAMPLE_DATA });
219
+ const nodes = tree.getTreeData(['nonexistent']);
220
+ expect(nodes).toHaveLength(1);
221
+ expect(nodes[0]).toBeUndefined();
222
+ });
223
+ });
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @description tree 运行时 props 定义
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { MCOPO, MPropType } from '../../types/props';
10
+ import { TreeNodeData, TreeNodeProps, TreeProps } from './props';
11
+ import { DEFAULT_CONFIG } from './tree';
12
+
13
+ /** 默认树配置(对外导出供使用方引用) */
14
+ export const DEFAULT_TREE_CONFIG = DEFAULT_CONFIG;
15
+
16
+ /** MTree 组件的 props 定义 */
17
+ export const props: MCOPO<TreeProps> = {
18
+ data: { type: [Object, Array], default: () => [] },
19
+ config: { type: Object, default: () => DEFAULT_CONFIG },
20
+ checkbox: { type: Boolean, default: false },
21
+ defaultExpandAll: { type: Boolean, default: false },
22
+ checkedKeys: { type: Array, default: () => [] },
23
+ checkStrictly: { type: Boolean, default: true },
24
+ };
25
+
26
+ /** MTreeNode 子组件的 props 定义 */
27
+ export const treeNodeProps: MCOPO<TreeNodeProps> = {
28
+ data: { type: Array, default: () => [] },
29
+ config: { type: Object, default: () => DEFAULT_CONFIG },
30
+ checkbox: { type: Boolean, default: false },
31
+ getNodesByKeys: {
32
+ type: Function as MPropType<(keys: TreeNodeData['key'][]) => TreeNodeData[]>,
33
+ required: true,
34
+ },
35
+ handleCheck: {
36
+ type: Function as MPropType<(node: TreeNodeData, check: boolean) => void>,
37
+ required: true,
38
+ },
39
+ handleExpand: {
40
+ type: Function as MPropType<(node: TreeNodeData, e: MouseEvent) => void>,
41
+ required: true,
42
+ },
43
+ handleItemClick: {
44
+ type: Function as MPropType<(node: TreeNodeData, e: MouseEvent) => void>,
45
+ required: true,
46
+ },
47
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @description tree core 导出
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { props, treeNodeProps } from './api';
10
+ import { useTree } from './useTree';
11
+
12
+ export const TreeCore = {
13
+ props,
14
+ treeNodeProps,
15
+ useTree,
16
+ };
17
+
18
+ export type {
19
+ TreeProps,
20
+ TreeData,
21
+ TreeNodeData,
22
+ TreeConfig,
23
+ TreeStatusKey,
24
+ TreeNodeProps,
25
+ } from './props';
26
+
27
+ export { useTree, fixKey } from './useTree';
28
+ export { default as Tree } from './tree';
29
+ export { DEFAULT_TREE_CONFIG, props as treeProps, treeNodeProps } from './api';
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @description tree 组件类型定义
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.0.0
6
+ *
7
+ * @name m-tree
8
+ * @docDescription Tree component with shuimo-ui style.
9
+ * 水墨组件的树组件。
10
+ * @docUrl https://shuimo.design/tree
11
+ */
12
+
13
+ export declare type TreeProps = {
14
+ /**
15
+ * @description 树数据
16
+ * @type TreeData | TreeData[]
17
+ * @default []
18
+ */
19
+ data?: TreeData | TreeData[];
20
+ /**
21
+ * @description 树配置项,用于字段映射
22
+ * @type TreeConfig
23
+ * @default { key:'key', label:'label', value:'value', children: 'children' }
24
+ */
25
+ config?: TreeConfig;
26
+ /**
27
+ * @description 是否使用 checkbox 模式
28
+ * @type boolean
29
+ * @default false
30
+ */
31
+ checkbox?: boolean;
32
+ /**
33
+ * @description 是否默认展开所有节点
34
+ * @type boolean
35
+ * @default false
36
+ */
37
+ defaultExpandAll?: boolean;
38
+ /**
39
+ * @description 选中的 key 列表(v-model:checkedKeys)
40
+ * @type Array<string|number>
41
+ * @default []
42
+ */
43
+ checkedKeys?: Array<string | number>;
44
+ /**
45
+ * @description 父子节点选中状态是否关联(true 表示关联)
46
+ * @type boolean
47
+ * @default true
48
+ */
49
+ checkStrictly?: boolean;
50
+ };
51
+
52
+ export interface TreeData {
53
+ key: string | number;
54
+ label?: string;
55
+ value?: string | number;
56
+ children?: TreeData[];
57
+ disabled?: boolean;
58
+ [k: string]: unknown;
59
+ }
60
+
61
+ export interface TreeNodeData extends TreeData {
62
+ /** checkbox 选中状态 */
63
+ checked?: boolean;
64
+ /** 半选状态(部分子节点选中) */
65
+ indeterminate?: boolean;
66
+ /** 点击选中状态 */
67
+ selected?: boolean;
68
+ /** 展开状态 */
69
+ expand?: boolean;
70
+ /** 收起状态 */
71
+ close?: boolean;
72
+ /** 子节点列表 */
73
+ children?: TreeNodeData[];
74
+ /** 父节点引用 */
75
+ parent?: TreeNodeData | null;
76
+ /** 是否为根节点 */
77
+ isRoot?: boolean;
78
+ }
79
+
80
+ export type TreeStatusKey = 'checked' | 'selected' | 'expand' | 'close';
81
+
82
+ export interface TreeConfig {
83
+ key: string | number;
84
+ label: string;
85
+ value: string;
86
+ children: string;
87
+ expand?: string;
88
+ }
89
+
90
+ /**
91
+ * MTreeNode 子组件的 props 类型
92
+ */
93
+ export declare type TreeNodeProps = {
94
+ /** 当前层节点数据列表 */
95
+ data?: TreeNodeData[];
96
+ /** 字段映射配置 */
97
+ config?: TreeConfig;
98
+ /** 是否使用 checkbox */
99
+ checkbox?: boolean;
100
+ /** 根据 key 批量获取节点 */
101
+ getNodesByKeys: (keys: (string | number)[]) => TreeNodeData[];
102
+ /** 切换展开/收起 */
103
+ handleExpand: (node: TreeNodeData, e: MouseEvent) => void;
104
+ /** 切换 checkbox 选中 */
105
+ handleCheck: (node: TreeNodeData, checked: boolean) => void;
106
+ /** 节点点击 */
107
+ handleItemClick: (node: TreeNodeData, e: MouseEvent) => void;
108
+ };