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

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 (387) hide show
  1. package/.vlaude/last-session-id +1 -0
  2. package/assets/style/global.css +1 -0
  3. package/assets/style/var/Wuxing.css +71 -0
  4. package/assets/style/var.css +23 -0
  5. package/components/base/affix/api.ts +16 -0
  6. package/components/base/affix/index.ts +17 -0
  7. package/components/base/affix/props.d.ts +34 -0
  8. package/components/base/affix/useAffix.ts +124 -0
  9. package/components/base/alert/api.ts +18 -0
  10. package/components/base/alert/index.ts +15 -0
  11. package/components/base/alert/props.d.ts +50 -0
  12. package/components/base/anchor/api.ts +20 -0
  13. package/components/base/anchor/index.ts +18 -0
  14. package/components/base/anchor/props.d.ts +46 -0
  15. package/components/base/anchor/useAnchor.ts +84 -0
  16. package/components/base/autoComplete/api.ts +24 -0
  17. package/components/base/autoComplete/index.ts +17 -0
  18. package/components/base/autoComplete/props.d.ts +75 -0
  19. package/components/base/autoComplete/useAutoComplete.ts +157 -0
  20. package/components/base/avatar/api.ts +17 -0
  21. package/components/base/avatar/avatar.css +61 -0
  22. package/components/base/avatar/index.ts +15 -0
  23. package/components/base/avatar/props.d.ts +37 -0
  24. package/components/base/backTop/api.ts +17 -0
  25. package/components/base/backTop/index.ts +17 -0
  26. package/components/base/backTop/props.d.ts +38 -0
  27. package/components/base/backTop/useBackTop.ts +62 -0
  28. package/components/base/badge/api.ts +22 -0
  29. package/components/base/badge/index.ts +15 -0
  30. package/components/base/badge/props.d.ts +50 -0
  31. package/components/base/button/api.ts +28 -0
  32. package/components/base/button/button.css +34 -0
  33. package/components/base/button/index.ts +17 -0
  34. package/components/base/button/props.d.ts +66 -0
  35. package/components/base/button/useButton.ts +37 -0
  36. package/components/base/card/api.ts +17 -0
  37. package/components/base/card/index.ts +15 -0
  38. package/components/base/card/props.d.ts +37 -0
  39. package/components/base/carousel/api.ts +28 -0
  40. package/components/base/carousel/index.ts +17 -0
  41. package/components/base/carousel/props.d.ts +72 -0
  42. package/components/base/carousel/useCarousel.ts +150 -0
  43. package/components/base/cascader/api.ts +23 -0
  44. package/components/base/cascader/index.ts +18 -0
  45. package/components/base/cascader/props.d.ts +103 -0
  46. package/components/base/cascader/useCascader.ts +335 -0
  47. package/components/base/checkbox/api.ts +24 -0
  48. package/components/base/checkbox/checkbox.css +0 -0
  49. package/components/base/checkbox/index.ts +17 -0
  50. package/components/base/checkbox/props.d.ts +77 -0
  51. package/components/base/checkbox/useCheckbox.ts +43 -0
  52. package/components/base/collapse/api.ts +21 -0
  53. package/components/base/collapse/index.ts +18 -0
  54. package/components/base/collapse/props.d.ts +45 -0
  55. package/components/base/collapse/useCollapse.ts +81 -0
  56. package/components/base/datePicker/__tests__/useDatePicker.test.ts +235 -0
  57. package/components/base/datePicker/api.ts +22 -0
  58. package/components/base/datePicker/index.ts +19 -0
  59. package/components/base/datePicker/props.d.ts +86 -0
  60. package/components/base/datePicker/useDatePicker.ts +375 -0
  61. package/components/base/divider/api.ts +15 -0
  62. package/components/base/divider/divider.css +11 -0
  63. package/components/base/divider/index.ts +15 -0
  64. package/components/base/divider/props.d.ts +30 -0
  65. package/components/base/dropdown/api.ts +33 -0
  66. package/components/base/dropdown/index.ts +18 -0
  67. package/components/base/dropdown/props.d.ts +60 -0
  68. package/components/base/dropdown/useDropdown.ts +124 -0
  69. package/components/base/empty/api.ts +15 -0
  70. package/components/base/empty/index.ts +15 -0
  71. package/components/base/empty/props.d.ts +26 -0
  72. package/components/base/image/__tests__/useImage.test.ts +176 -0
  73. package/components/base/image/api.ts +25 -0
  74. package/components/base/image/index.ts +18 -0
  75. package/components/base/image/props.d.ts +67 -0
  76. package/components/base/image/useImage.ts +119 -0
  77. package/components/base/input/api.ts +23 -0
  78. package/components/base/input/index.ts +17 -0
  79. package/components/base/input/input.css +19 -0
  80. package/components/base/input/props.d.ts +85 -0
  81. package/components/base/input/useInput.ts +63 -0
  82. package/components/base/inputNumber/__tests__/useInputNumber.test.ts +189 -0
  83. package/components/base/inputNumber/api.ts +23 -0
  84. package/components/base/inputNumber/index.ts +17 -0
  85. package/components/base/inputNumber/props.d.ts +78 -0
  86. package/components/base/inputNumber/useInputNumber.ts +182 -0
  87. package/components/base/li/api.ts +15 -0
  88. package/components/base/li/index.ts +15 -0
  89. package/components/base/li/props.d.ts +30 -0
  90. package/components/base/list/api.ts +16 -0
  91. package/components/base/list/index.ts +17 -0
  92. package/components/base/list/props.d.ts +33 -0
  93. package/components/base/list/useList.ts +36 -0
  94. package/components/base/loading/api.ts +17 -0
  95. package/components/base/loading/index.ts +15 -0
  96. package/components/base/loading/props.d.ts +40 -0
  97. package/components/base/popover/api.ts +28 -0
  98. package/components/base/popover/index.ts +17 -0
  99. package/components/base/popover/props.d.ts +73 -0
  100. package/components/base/popover/usePopover.ts +193 -0
  101. package/components/base/progress/api.ts +20 -0
  102. package/components/base/progress/index.ts +17 -0
  103. package/components/base/progress/props.d.ts +68 -0
  104. package/components/base/progress/useProgress.ts +28 -0
  105. package/components/base/radio/api.ts +19 -0
  106. package/components/base/radio/index.ts +19 -0
  107. package/components/base/radio/props.d.ts +59 -0
  108. package/components/base/radio/useRadio.ts +11 -0
  109. package/components/base/rate/api.ts +18 -0
  110. package/components/base/rate/index.ts +17 -0
  111. package/components/base/rate/props.d.ts +49 -0
  112. package/components/base/rate/useRate.ts +76 -0
  113. package/components/base/result/api.ts +20 -0
  114. package/components/base/result/index.ts +15 -0
  115. package/components/base/result/props.d.ts +36 -0
  116. package/components/base/select/api.ts +34 -0
  117. package/components/base/select/index.ts +18 -0
  118. package/components/base/select/props.d.ts +152 -0
  119. package/components/base/select/select.css +7 -0
  120. package/components/base/select/useSelect.ts +281 -0
  121. package/components/base/select/useSelectTools.ts +60 -0
  122. package/components/base/skeleton/api.ts +18 -0
  123. package/components/base/skeleton/index.ts +15 -0
  124. package/components/base/skeleton/props.d.ts +41 -0
  125. package/components/base/slider/api.ts +22 -0
  126. package/components/base/slider/index.ts +17 -0
  127. package/components/base/slider/props.d.ts +79 -0
  128. package/components/base/slider/useSlider.ts +87 -0
  129. package/components/base/space/api.ts +17 -0
  130. package/components/base/space/index.ts +15 -0
  131. package/components/base/space/props.d.ts +39 -0
  132. package/components/base/steps/__tests__/useSteps.test.ts +46 -0
  133. package/components/base/steps/api.ts +30 -0
  134. package/components/base/steps/index.ts +22 -0
  135. package/components/base/steps/props.d.ts +88 -0
  136. package/components/base/steps/useSteps.ts +101 -0
  137. package/components/base/switch/api.ts +22 -0
  138. package/components/base/switch/index.ts +19 -0
  139. package/components/base/switch/props.d.ts +66 -0
  140. package/components/base/switch/useSwitch.tsx +80 -0
  141. package/components/base/tabs/api.ts +23 -0
  142. package/components/base/tabs/index.ts +18 -0
  143. package/components/base/tabs/props.d.ts +41 -0
  144. package/components/base/tabs/useTabs.ts +67 -0
  145. package/components/base/tag/api.ts +17 -0
  146. package/components/base/tag/index.ts +15 -0
  147. package/components/base/tag/props.d.ts +51 -0
  148. package/components/base/timePicker/__tests__/useTimePicker.test.ts +125 -0
  149. package/components/base/timePicker/api.ts +24 -0
  150. package/components/base/timePicker/index.ts +18 -0
  151. package/components/base/timePicker/props.d.ts +86 -0
  152. package/components/base/timePicker/useTimePicker.ts +161 -0
  153. package/components/base/timeline/api.ts +24 -0
  154. package/components/base/timeline/index.ts +16 -0
  155. package/components/base/timeline/props.d.ts +60 -0
  156. package/components/base/tooltip/api.ts +20 -0
  157. package/components/base/tooltip/index.ts +17 -0
  158. package/components/base/tooltip/props.d.ts +40 -0
  159. package/components/base/tooltip/useTooltip.ts +89 -0
  160. package/components/base/transfer/api.ts +18 -0
  161. package/components/base/transfer/index.ts +17 -0
  162. package/components/base/transfer/props.d.ts +63 -0
  163. package/components/base/transfer/useTransfer.ts +208 -0
  164. package/components/base/tree/__tests__/tree.test.ts +223 -0
  165. package/components/base/tree/api.ts +47 -0
  166. package/components/base/tree/index.ts +29 -0
  167. package/components/base/tree/props.d.ts +108 -0
  168. package/components/base/tree/tree.ts +263 -0
  169. package/components/base/tree/useTree.ts +114 -0
  170. package/components/message/confirm/api.ts +21 -0
  171. package/components/message/confirm/index.ts +15 -0
  172. package/components/message/confirm/props.d.ts +69 -0
  173. package/components/message/dialog/api.ts +20 -0
  174. package/components/message/dialog/index.ts +15 -0
  175. package/components/message/dialog/props.d.ts +62 -0
  176. package/components/message/drawer/api.ts +33 -0
  177. package/components/message/drawer/index.ts +15 -0
  178. package/components/message/drawer/props.d.ts +80 -0
  179. package/components/message/message/api.ts +27 -0
  180. package/components/message/message/index.ts +20 -0
  181. package/components/message/message/props.d.ts +54 -0
  182. package/components/message/message/useMessage.ts +61 -0
  183. package/components/message/notification/__tests__/useNotification.test.ts +129 -0
  184. package/components/message/notification/api.ts +23 -0
  185. package/components/message/notification/index.ts +19 -0
  186. package/components/message/notification/props.d.ts +64 -0
  187. package/components/message/notification/useNotification.ts +79 -0
  188. package/components/message/popover/MPopover.tsx +94 -0
  189. package/components/message/popover/api.ts +54 -0
  190. package/components/message/popover/index.ts +17 -0
  191. package/components/message/popover/popover.css +21 -0
  192. package/components/message/popover/props.d.ts +76 -0
  193. package/components/message/popover/usePopover.ts +234 -0
  194. package/components/other/darkMode/api.ts +17 -0
  195. package/components/other/darkMode/index.ts +17 -0
  196. package/components/other/darkMode/props.d.ts +37 -0
  197. package/components/other/darkMode/useDarkMode.ts +129 -0
  198. package/components/template/border/api.ts +18 -0
  199. package/components/template/border/index.ts +15 -0
  200. package/components/template/border/props.d.ts +41 -0
  201. package/components/template/breadcrumb/api.ts +15 -0
  202. package/components/template/breadcrumb/index.ts +15 -0
  203. package/components/template/breadcrumb/props.d.ts +45 -0
  204. package/components/template/descriptions/api.ts +23 -0
  205. package/components/template/descriptions/index.ts +16 -0
  206. package/components/template/descriptions/props.d.ts +54 -0
  207. package/components/template/form/api.ts +23 -0
  208. package/components/template/form/index.ts +20 -0
  209. package/components/template/form/props.d.ts +60 -0
  210. package/components/template/grid/api.ts +20 -0
  211. package/components/template/grid/index.ts +15 -0
  212. package/components/template/grid/props.d.ts +48 -0
  213. package/components/template/menu/__tests__/useMenu.test.ts +157 -0
  214. package/components/template/menu/api.ts +26 -0
  215. package/components/template/menu/index.ts +18 -0
  216. package/components/template/menu/props.d.ts +93 -0
  217. package/components/template/menu/useMenu.ts +155 -0
  218. package/components/template/pagination/__tests__/usePagination.test.ts +138 -0
  219. package/components/template/pagination/api.ts +22 -0
  220. package/components/template/pagination/index.ts +19 -0
  221. package/components/template/pagination/props.d.ts +65 -0
  222. package/components/template/pagination/usePagination.ts +186 -0
  223. package/components/template/table/__tests__/useTable.test.ts +138 -0
  224. package/components/template/table/api.ts +18 -0
  225. package/components/template/table/index.ts +18 -0
  226. package/components/template/table/props.d.ts +36 -0
  227. package/components/template/table/useTable.ts +136 -0
  228. package/components/template/tableColumn/api.ts +17 -0
  229. package/components/template/tableColumn/index.ts +15 -0
  230. package/components/template/tableColumn/props.d.ts +32 -0
  231. package/components/template/virtualList/api.ts +16 -0
  232. package/components/template/virtualList/index.ts +17 -0
  233. package/components/template/virtualList/props.d.ts +25 -0
  234. package/components/template/virtualList/useVirtualList.ts +237 -0
  235. package/components/types/hook.d.ts +24 -0
  236. package/components/types/props.d.ts +57 -0
  237. package/components/types/template.d.ts +59 -0
  238. package/compositions/common/__tests__/useDebounceFn.test.ts +62 -0
  239. package/compositions/common/__tests__/useEventListener.test.ts +98 -0
  240. package/compositions/common/__tests__/usePopover.test.ts +43 -0
  241. package/compositions/common/__tests__/useTeleport.test.ts +32 -0
  242. package/compositions/common/defineCore.ts +55 -0
  243. package/compositions/common/testAnchor.ts +211 -0
  244. package/compositions/common/useComponentSize.ts +17 -0
  245. package/compositions/common/useDebounceFn.ts +27 -0
  246. package/compositions/common/useDrag.ts +65 -0
  247. package/compositions/common/useElementSize.ts +37 -0
  248. package/compositions/common/useEventListener.ts +48 -0
  249. package/compositions/common/useLocale.ts +53 -0
  250. package/compositions/common/usePopover.ts +45 -0
  251. package/compositions/common/useResizeObserver.ts +47 -0
  252. package/compositions/common/useTeleport.ts +24 -0
  253. package/compositions/input/__tests__/useBooleanInput.test.ts +73 -0
  254. package/compositions/input/useBooleanInput.ts +52 -0
  255. package/compositions/modal/__tests__/useModal.test.ts +110 -0
  256. package/compositions/modal/useModal.ts +72 -0
  257. package/compositions/popper/useClickAway.ts +41 -0
  258. package/compositions/popper/usePopper.ts +63 -0
  259. package/compositions/utils/__tests__/filters.test.ts +136 -0
  260. package/compositions/utils/filters.ts +135 -0
  261. package/compositions/virtualList/__tests__/useHeightCache.test.ts +97 -0
  262. package/compositions/virtualList/enums.ts +52 -0
  263. package/compositions/virtualList/useContainerObserver.ts +89 -0
  264. package/compositions/virtualList/useEntries.ts +248 -0
  265. package/compositions/virtualList/useHeightCache.ts +83 -0
  266. package/compositions/virtualList/useSentinelObserver.ts +81 -0
  267. package/dist/components/base/affix/index.d.ts +2 -1
  268. package/dist/components/base/affix/useAffix.d.ts +7 -5
  269. package/dist/components/base/anchor/index.d.ts +2 -1
  270. package/dist/components/base/anchor/useAnchor.d.ts +3 -2
  271. package/dist/components/base/autoComplete/useAutoComplete.d.ts +14 -5
  272. package/dist/components/base/avatar/index.d.ts +1 -0
  273. package/dist/components/base/backTop/index.d.ts +2 -1
  274. package/dist/components/base/backTop/useBackTop.d.ts +2 -2
  275. package/dist/components/base/button/index.d.ts +3 -21
  276. package/dist/components/base/button/useButton.d.ts +5 -2
  277. package/dist/components/base/carousel/useCarousel.d.ts +7 -3
  278. package/dist/components/base/cascader/useCascader.d.ts +25 -12
  279. package/dist/components/base/checkbox/index.d.ts +2 -1
  280. package/dist/components/base/checkbox/useCheckbox.d.ts +5 -3
  281. package/dist/components/base/collapse/index.d.ts +2 -1
  282. package/dist/components/base/collapse/useCollapse.d.ts +4 -3
  283. package/dist/components/base/datePicker/__tests__/useDatePicker.test.d.ts +1 -0
  284. package/dist/components/base/datePicker/index.d.ts +1 -1
  285. package/dist/components/base/datePicker/useDatePicker.d.ts +140 -15
  286. package/dist/components/base/dropdown/index.d.ts +2 -1
  287. package/dist/components/base/dropdown/useDropdown.d.ts +13 -6
  288. package/dist/components/base/image/__tests__/useImage.test.d.ts +1 -0
  289. package/dist/components/base/image/useImage.d.ts +5 -5
  290. package/dist/components/base/input/index.d.ts +2 -1
  291. package/dist/components/base/input/useInput.d.ts +4 -2
  292. package/dist/components/base/inputNumber/__tests__/useInputNumber.test.d.ts +1 -0
  293. package/dist/components/base/inputNumber/index.d.ts +2 -1
  294. package/dist/components/base/inputNumber/useInputNumber.d.ts +4 -3
  295. package/dist/components/base/li/index.d.ts +1 -0
  296. package/dist/components/base/list/index.d.ts +2 -1
  297. package/dist/components/base/list/useList.d.ts +1 -1
  298. package/dist/components/base/popover/index.d.ts +2 -1
  299. package/dist/components/base/popover/usePopover.d.ts +10 -9
  300. package/dist/components/base/progress/index.d.ts +2 -1
  301. package/dist/components/base/progress/useProgress.d.ts +2 -2
  302. package/dist/components/base/rate/index.d.ts +2 -1
  303. package/dist/components/base/rate/useRate.d.ts +3 -2
  304. package/dist/components/base/select/useSelect.d.ts +10 -9
  305. package/dist/components/base/slider/index.d.ts +2 -1
  306. package/dist/components/base/slider/useSlider.d.ts +5 -4
  307. package/dist/components/base/steps/__tests__/useSteps.test.d.ts +1 -0
  308. package/dist/components/base/steps/index.d.ts +1 -1
  309. package/dist/components/base/steps/useSteps.d.ts +5 -5
  310. package/dist/components/base/switch/index.d.ts +2 -1
  311. package/dist/components/base/switch/useSwitch.d.ts +9 -3
  312. package/dist/components/base/tabs/index.d.ts +1 -1
  313. package/dist/components/base/tabs/useTabs.d.ts +4 -3
  314. package/dist/components/base/tag/index.d.ts +1 -0
  315. package/dist/components/base/timePicker/__tests__/useTimePicker.test.d.ts +1 -0
  316. package/dist/components/base/timePicker/useTimePicker.d.ts +14 -6
  317. package/dist/components/base/tooltip/index.d.ts +1 -1
  318. package/dist/components/base/tooltip/useTooltip.d.ts +15 -5
  319. package/dist/components/base/transfer/useTransfer.d.ts +17 -16
  320. package/dist/components/base/tree/__tests__/tree.test.d.ts +1 -0
  321. package/dist/components/base/tree/index.d.ts +1 -1
  322. package/dist/components/base/tree/useTree.d.ts +2 -1
  323. package/dist/components/message/drawer/index.d.ts +2 -2
  324. package/dist/components/message/message/useMessage.d.ts +11 -1
  325. package/dist/components/message/notification/__tests__/useNotification.test.d.ts +1 -0
  326. package/dist/components/message/notification/useNotification.d.ts +17 -1
  327. package/dist/components/message/popover/MPopover.d.ts +6 -1
  328. package/dist/components/message/popover/index.d.ts +1 -1
  329. package/dist/components/message/popover/usePopover.d.ts +7 -7
  330. package/dist/components/other/darkMode/useDarkMode.d.ts +3 -4
  331. package/dist/components/template/menu/__tests__/useMenu.test.d.ts +1 -0
  332. package/dist/components/template/menu/index.d.ts +0 -1
  333. package/dist/components/template/menu/useMenu.d.ts +2 -1
  334. package/dist/components/template/pagination/__tests__/usePagination.test.d.ts +1 -0
  335. package/dist/components/template/pagination/index.d.ts +2 -1
  336. package/dist/components/template/table/__tests__/useTable.test.d.ts +1 -0
  337. package/dist/components/template/virtualList/index.d.ts +0 -1
  338. package/dist/components/template/virtualList/useVirtualList.d.ts +10 -7
  339. package/dist/compositions/common/__tests__/useDebounceFn.test.d.ts +1 -0
  340. package/dist/compositions/common/__tests__/useEventListener.test.d.ts +1 -0
  341. package/dist/compositions/common/__tests__/usePopover.test.d.ts +1 -0
  342. package/dist/compositions/common/__tests__/useTeleport.test.d.ts +1 -0
  343. package/dist/compositions/common/testAnchor.d.ts +40 -0
  344. package/dist/compositions/common/useComponentSize.d.ts +6 -0
  345. package/dist/compositions/common/useDrag.d.ts +1 -1
  346. package/dist/compositions/common/useElementSize.d.ts +2 -2
  347. package/dist/compositions/common/useEventListener.d.ts +2 -2
  348. package/dist/compositions/common/useLocale.d.ts +14 -0
  349. package/dist/compositions/common/useTeleport.d.ts +4 -2
  350. package/dist/compositions/input/__tests__/useBooleanInput.test.d.ts +1 -0
  351. package/dist/compositions/modal/__tests__/useModal.test.d.ts +1 -0
  352. package/dist/compositions/modal/useModal.d.ts +3 -2
  353. package/dist/compositions/popper/useClickAway.d.ts +3 -3
  354. package/dist/compositions/utils/__tests__/filters.test.d.ts +1 -0
  355. package/dist/compositions/virtualList/__tests__/useHeightCache.test.d.ts +1 -0
  356. package/dist/core.js +6697 -4188
  357. package/dist/index.d.ts +2 -0
  358. package/dist/locale/en.d.ts +3 -0
  359. package/dist/locale/index.d.ts +9 -0
  360. package/dist/locale/types.d.ts +222 -0
  361. package/dist/locale/zh.d.ts +3 -0
  362. package/dist/runtime/defineHook.d.ts +1 -1
  363. package/dist/tools/__tests__/empty.test.d.ts +1 -0
  364. package/dist/tools/empty.d.ts +2 -2
  365. package/dist/tools/types.d.ts +1 -1
  366. package/dist/vitest.config.d.ts +10 -0
  367. package/index.css +1 -0
  368. package/index.ts +81 -0
  369. package/locale/.vlaude/last-session-id +1 -0
  370. package/locale/en.ts +187 -0
  371. package/locale/index.ts +29 -0
  372. package/locale/types.ts +214 -0
  373. package/locale/zh.ts +190 -0
  374. package/package.json +23 -17
  375. package/runtime/defineHook.ts +21 -0
  376. package/tools/__tests__/empty.test.ts +91 -0
  377. package/tools/empty.ts +81 -0
  378. package/tools/index.ts +15 -0
  379. package/tools/types.ts +11 -0
  380. package/tsconfig.json +8 -0
  381. package/types/common/common.d.ts +25 -0
  382. package/types/common/model.d.ts +25 -0
  383. package/types/index.d.ts +11 -0
  384. package/types/props.d.ts +13 -0
  385. package/vite.config.build.ts +41 -0
  386. package/vitest.config.ts +17 -0
  387. package/dist/vite.config.build.d.ts +0 -2
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @description drawer api type
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.1.0
6
+ *
7
+ * @name m-drawer
8
+ * @docDescription Headless drawer component.
9
+ * 无样式抽屉组件。
10
+ *
11
+ * 江湖的业务千篇一律,复杂的代码好几百行。
12
+ */
13
+ import type { ModelMask } from '../../../types/common/model.d.ts';
14
+ import type { MTeleportProps } from '../../../types/common/common.d.ts';
15
+
16
+ export declare type DrawerProps = {
17
+ /**
18
+ * @description drawer visible value
19
+ * 抽屉是否显示
20
+ * @type boolean
21
+ * @default false
22
+ */
23
+ visible?: boolean,
24
+ /**
25
+ * @description drawer mask option
26
+ * 抽屉背景配置
27
+ * @type ModelMask
28
+ * @default { show: true, clickClose: true }
29
+ */
30
+ mask?: ModelMask,
31
+ /**
32
+ * @description drawer class
33
+ * 抽屉扩展类名
34
+ * @type string[]
35
+ * @default []
36
+ */
37
+ drawerClass?: string[],
38
+ /**
39
+ * @description drawer direction
40
+ * 抽屉出现方向
41
+ * @type 'top' | 'right' | 'bottom' | 'left'
42
+ * @default 'right'
43
+ */
44
+ direction?: 'top' | 'right' | 'bottom' | 'left',
45
+ /**
46
+ * @description drawer teleport
47
+ * 抽屉传送配置
48
+ * @type MTeleportProps
49
+ * @default { to: 'body' }
50
+ */
51
+ teleport?: MTeleportProps,
52
+ /**
53
+ * @description drawer title
54
+ * 抽屉标题,传入时渲染标题栏
55
+ * @type string
56
+ * @default undefined
57
+ */
58
+ title?: string,
59
+ /**
60
+ * @description drawer width
61
+ * 抽屉宽度,适用于 left / right 方向
62
+ * @type string
63
+ * @default undefined
64
+ */
65
+ width?: string,
66
+ /**
67
+ * @description drawer height
68
+ * 抽屉高度,适用于 top / bottom 方向
69
+ * @type string
70
+ * @default undefined
71
+ */
72
+ height?: string,
73
+ /**
74
+ * @description callback before close, return false or Promise.reject to prevent close
75
+ * 关闭前的回调,返回 false 或 reject 的 Promise 可阻止关闭
76
+ * @type () => boolean | Promise<boolean>
77
+ * @default undefined
78
+ */
79
+ beforeClose?: () => boolean | Promise<boolean>,
80
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @description message runtime 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 { MessageProps, MessageListProps, MessageType, MessageDirectionType } from './props';
11
+
12
+ /**
13
+ * 单条消息组件的运行时 props
14
+ */
15
+ export const messageProps: MCOPO<MessageProps> = {
16
+ content: { type: String, required: true },
17
+ type: { type: String as MPropType<MessageType>, default: 'info' },
18
+ duration: { type: Number, default: 3000 },
19
+ direction: { type: String as MPropType<MessageDirectionType>, default: 'top-right' },
20
+ };
21
+
22
+ /**
23
+ * 消息列表容器的运行时 props
24
+ */
25
+ export const messageListProps: MCOPO<MessageListProps> = {
26
+ direction: { type: String as MPropType<MessageDirectionType>, default: 'top-right' },
27
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @description message core 导出
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { messageProps, messageListProps } from './api';
10
+ import { useMessageQueue } from './useMessage';
11
+
12
+ export const MessageCore = {
13
+ messageProps,
14
+ messageListProps,
15
+ useMessageQueue,
16
+ };
17
+
18
+ export { useMessageQueue } from './useMessage';
19
+ export type { MessageProps, MessageListProps, MessageType, MessageDirectionType } from './props';
20
+ export type { MessageItem } from './useMessage';
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @description message 组件 props 类型定义
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+
10
+ /**
11
+ * 消息类型枚举
12
+ */
13
+ export type MessageType = 'success' | 'warning' | 'info' | 'error';
14
+
15
+ /**
16
+ * 消息出现方位枚举
17
+ */
18
+ export type MessageDirectionType = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center';
19
+
20
+ /**
21
+ * 单条消息 props
22
+ */
23
+ export declare type MessageProps = {
24
+ /**
25
+ * @description 消息类型
26
+ * @default 'info'
27
+ */
28
+ type?: MessageType;
29
+ /**
30
+ * @description 显示时长(毫秒),0 表示不自动关闭
31
+ * @default 3000
32
+ */
33
+ duration?: number;
34
+ /**
35
+ * @description 消息内容
36
+ */
37
+ content: string;
38
+ /**
39
+ * @description 消息出现的方位
40
+ * @default 'top-right'
41
+ */
42
+ direction?: MessageDirectionType;
43
+ };
44
+
45
+ /**
46
+ * 消息列表容器 props
47
+ */
48
+ export declare type MessageListProps = {
49
+ /**
50
+ * @description 消息列表出现的方位
51
+ * @default 'top-right'
52
+ */
53
+ direction?: MessageDirectionType;
54
+ };
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @description message 队列 composable
3
+ * @author 阿怪
4
+ * @date 2026/2/25
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { ref } from 'vue';
10
+ import { MessageType } from './props';
11
+
12
+ /**
13
+ * 消息队列中每一条消息的内部结构
14
+ */
15
+ export interface MessageItem {
16
+ id: number;
17
+ type: MessageType;
18
+ content: string;
19
+ duration: number;
20
+ }
21
+
22
+ /**
23
+ * 消息队列 composable
24
+ * 管理消息的增删与自动关闭定时器
25
+ */
26
+ export function useMessageQueue() {
27
+ const messages = ref<MessageItem[]>([]);
28
+ let nextId = 0;
29
+
30
+ /**
31
+ * 添加一条消息,duration > 0 时自动移除
32
+ */
33
+ const add = (props: { type?: MessageType; content: string; duration?: number }): number => {
34
+ const id = nextId++;
35
+ const item: MessageItem = {
36
+ id,
37
+ type: props.type ?? 'info',
38
+ content: props.content,
39
+ duration: props.duration ?? 3000,
40
+ };
41
+ messages.value.push(item);
42
+
43
+ if (item.duration > 0) {
44
+ setTimeout(() => remove(id), item.duration);
45
+ }
46
+
47
+ return id;
48
+ };
49
+
50
+ /**
51
+ * 按 id 移除一条消息
52
+ */
53
+ const remove = (id: number): void => {
54
+ const idx = messages.value.findIndex(m => m.id === id);
55
+ if (idx !== -1) {
56
+ messages.value.splice(idx, 1);
57
+ }
58
+ };
59
+
60
+ return { messages, add, remove };
61
+ }
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @description useNotificationQueue 测试
3
+ * @author 阿怪
4
+ * @date 2026/3/23
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';
10
+ import { useNotificationQueue } from '../useNotification';
11
+
12
+ beforeEach(() => { vi.useFakeTimers(); });
13
+ afterEach(() => { vi.useRealTimers(); });
14
+
15
+ describe('useNotificationQueue', () => {
16
+ it('初始通知列表为空', () => {
17
+ const { notifications } = useNotificationQueue();
18
+ expect(notifications.value).toHaveLength(0);
19
+ });
20
+
21
+ it('add 添加通知并返回 id', () => {
22
+ const { notifications, add } = useNotificationQueue();
23
+
24
+ const id = add({ title: '测试通知' });
25
+ expect(typeof id).toBe('number');
26
+ expect(notifications.value).toHaveLength(1);
27
+ expect(notifications.value[0].title).toBe('测试通知');
28
+ });
29
+
30
+ it('add 使用默认值', () => {
31
+ const { notifications, add } = useNotificationQueue();
32
+
33
+ add({ title: 'test' });
34
+ const item = notifications.value[0];
35
+
36
+ expect(item.message).toBe('');
37
+ expect(item.type).toBe('info');
38
+ expect(item.duration).toBe(4500);
39
+ expect(item.position).toBe('top-right');
40
+ expect(item.closable).toBe(true);
41
+ });
42
+
43
+ it('add 自定义所有字段', () => {
44
+ const { notifications, add } = useNotificationQueue();
45
+
46
+ add({
47
+ title: '错误',
48
+ message: '操作失败',
49
+ type: 'error',
50
+ duration: 3000,
51
+ position: 'bottom-left',
52
+ closable: false,
53
+ });
54
+
55
+ const item = notifications.value[0];
56
+ expect(item.type).toBe('error');
57
+ expect(item.message).toBe('操作失败');
58
+ expect(item.duration).toBe(3000);
59
+ expect(item.position).toBe('bottom-left');
60
+ expect(item.closable).toBe(false);
61
+ });
62
+
63
+ it('remove 按 id 移除通知', () => {
64
+ const { notifications, add, remove } = useNotificationQueue();
65
+
66
+ const id1 = add({ title: '通知1' });
67
+ const id2 = add({ title: '通知2' });
68
+
69
+ remove(id1);
70
+ expect(notifications.value).toHaveLength(1);
71
+ expect(notifications.value[0].id).toBe(id2);
72
+ });
73
+
74
+ it('remove 不存在的 id 不报错', () => {
75
+ const { notifications, add, remove } = useNotificationQueue();
76
+
77
+ add({ title: '通知' });
78
+ remove(999);
79
+ expect(notifications.value).toHaveLength(1);
80
+ });
81
+
82
+ it('duration > 0 时自动移除', () => {
83
+ const { notifications, add } = useNotificationQueue();
84
+
85
+ add({ title: '自动关闭', duration: 1000 });
86
+ expect(notifications.value).toHaveLength(1);
87
+
88
+ vi.advanceTimersByTime(1000);
89
+ expect(notifications.value).toHaveLength(0);
90
+ });
91
+
92
+ it('duration = 0 时不自动移除', () => {
93
+ const { notifications, add } = useNotificationQueue();
94
+
95
+ add({ title: '手动关闭', duration: 0 });
96
+
97
+ vi.advanceTimersByTime(10000);
98
+ expect(notifications.value).toHaveLength(1);
99
+ });
100
+
101
+ it('多条通知独立管理', () => {
102
+ const { notifications, add } = useNotificationQueue();
103
+
104
+ add({ title: '快速消失', duration: 1000 });
105
+ add({ title: '慢速消失', duration: 5000 });
106
+ add({ title: '不消失', duration: 0 });
107
+
108
+ expect(notifications.value).toHaveLength(3);
109
+
110
+ vi.advanceTimersByTime(1000);
111
+ expect(notifications.value).toHaveLength(2);
112
+
113
+ vi.advanceTimersByTime(4000);
114
+ expect(notifications.value).toHaveLength(1);
115
+ expect(notifications.value[0].title).toBe('不消失');
116
+ });
117
+
118
+ it('id 自增不重复', () => {
119
+ const { add } = useNotificationQueue();
120
+
121
+ const id1 = add({ title: '1' });
122
+ const id2 = add({ title: '2' });
123
+ const id3 = add({ title: '3' });
124
+
125
+ expect(id1).not.toBe(id2);
126
+ expect(id2).not.toBe(id3);
127
+ expect(id3 - id1).toBe(2);
128
+ });
129
+ });
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @description notification runtime props 定义
3
+ * @author 阿怪
4
+ * @date 2026/2/26
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { MCOPO, MPropType } from '../../types/props';
10
+ import { NotificationProps, NotificationType, NotificationPosition } from './props';
11
+
12
+ /**
13
+ * 单条通知运行时 props
14
+ */
15
+ export const notificationProps: MCOPO<NotificationProps> = {
16
+ title: { type: String, required: true },
17
+ message: { type: String, default: '' },
18
+ type: { type: String as MPropType<NotificationType>, default: 'info' },
19
+ duration: { type: Number, default: 4500 },
20
+ position: { type: String as MPropType<NotificationPosition>, default: 'top-right' },
21
+ closable: { type: Boolean, default: true },
22
+ offset: { type: Number, default: 16 },
23
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @description notification core 导出
3
+ * @author 阿怪
4
+ * @date 2026/2/26
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { notificationProps } from './api';
10
+ import { useNotificationQueue } from './useNotification';
11
+
12
+ export const NotificationCore = {
13
+ notificationProps,
14
+ useNotificationQueue,
15
+ };
16
+
17
+ export { useNotificationQueue } from './useNotification';
18
+ export type { NotificationProps, NotificationEvents, NotificationType, NotificationPosition } from './props';
19
+ export type { NotificationItem, NotificationAddOptions } from './useNotification';
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @description notification 组件 props 类型定义
3
+ * @author 阿怪
4
+ * @date 2026/2/26
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+
10
+ /**
11
+ * 通知类型
12
+ */
13
+ export type NotificationType = 'success' | 'warning' | 'error' | 'info';
14
+
15
+ /**
16
+ * 通知显示位置
17
+ */
18
+ export type NotificationPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
19
+
20
+ /**
21
+ * 单条通知 props
22
+ */
23
+ export declare type NotificationProps = {
24
+ /**
25
+ * @description 通知标题
26
+ */
27
+ title: string;
28
+ /**
29
+ * @description 通知正文内容
30
+ */
31
+ message?: string;
32
+ /**
33
+ * @description 通知类型
34
+ * @default 'info'
35
+ */
36
+ type?: NotificationType;
37
+ /**
38
+ * @description 显示时长(毫秒),0 表示不自动关闭
39
+ * @default 4500
40
+ */
41
+ duration?: number;
42
+ /**
43
+ * @description 通知显示位置
44
+ * @default 'top-right'
45
+ */
46
+ position?: NotificationPosition;
47
+ /**
48
+ * @description 是否显示关闭按钮
49
+ * @default true
50
+ */
51
+ closable?: boolean;
52
+ /**
53
+ * @description 与屏幕边缘的偏移量(像素)
54
+ * @default 16
55
+ */
56
+ offset?: number;
57
+ };
58
+
59
+ /**
60
+ * 通知事件类型
61
+ */
62
+ export declare type NotificationEvents = {
63
+ onClose?: () => void;
64
+ };
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @description notification 队列 composable
3
+ * @author 阿怪
4
+ * @date 2026/2/26
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { ref } from 'vue';
10
+ import { NotificationType, NotificationPosition } from './props';
11
+
12
+ /**
13
+ * 通知队列中每一条通知的内部结构
14
+ */
15
+ export interface NotificationItem {
16
+ id: number;
17
+ title: string;
18
+ message: string;
19
+ type: NotificationType;
20
+ duration: number;
21
+ position: NotificationPosition;
22
+ closable: boolean;
23
+ }
24
+
25
+ /**
26
+ * 创建通知时的配置参数
27
+ */
28
+ export interface NotificationAddOptions {
29
+ title: string;
30
+ message?: string;
31
+ type?: NotificationType;
32
+ duration?: number;
33
+ position?: NotificationPosition;
34
+ closable?: boolean;
35
+ }
36
+
37
+ /**
38
+ * 通知队列 composable
39
+ * 管理通知的增删与自动关闭定时器
40
+ */
41
+ export function useNotificationQueue() {
42
+ const notifications = ref<NotificationItem[]>([]);
43
+ let nextId = 0;
44
+
45
+ /**
46
+ * 添加一条通知,duration > 0 时自动移除
47
+ */
48
+ const add = (options: NotificationAddOptions): number => {
49
+ const id = nextId++;
50
+ const item: NotificationItem = {
51
+ id,
52
+ title: options.title,
53
+ message: options.message ?? '',
54
+ type: options.type ?? 'info',
55
+ duration: options.duration ?? 4500,
56
+ position: options.position ?? 'top-right',
57
+ closable: options.closable ?? true,
58
+ };
59
+ notifications.value.push(item);
60
+
61
+ if (item.duration > 0) {
62
+ setTimeout(() => remove(id), item.duration);
63
+ }
64
+
65
+ return id;
66
+ };
67
+
68
+ /**
69
+ * 按 id 移除一条通知
70
+ */
71
+ const remove = (id: number): void => {
72
+ const idx = notifications.value.findIndex(n => n.id === id);
73
+ if (idx !== -1) {
74
+ notifications.value.splice(idx, 1);
75
+ }
76
+ };
77
+
78
+ return { notifications, add, remove };
79
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @description MPopover
3
+ * @author youus
4
+ * @date 2022/4/3 18:07
5
+ * @version v2.0.0-process
6
+ *
7
+ * Hello, humor
8
+ * v2.0.0-process 阿怪 准备重构,搭建模版
9
+ */
10
+ import { defineComponent, ref, watch } from 'vue';
11
+ import { props } from './api';
12
+ import useTeleport from '../../../compositions/common/useTeleport';
13
+ import { usePopover } from './usePopover';
14
+ import './popover.css';
15
+ import { PopoverProps } from './props';
16
+
17
+
18
+ export default defineComponent((_props: PopoverProps, { slots, emit, expose }) => {
19
+ const props = _props as Required<PopoverProps>;
20
+
21
+ if (!slots.content) {
22
+ console.error('MPopover: content is required');
23
+ return () => (<></>);
24
+ }
25
+
26
+ if (!slots.default) {
27
+ console.error('MPopover: trigger is required');
28
+ return () => (<></>);
29
+ }
30
+
31
+
32
+ const placementRef = ref(props.placement);
33
+ const {
34
+ getContent,
35
+ popoverEnter,
36
+ popoverLeave,
37
+ popoverRef, contentRef, arrowRef,
38
+ popperInstance,
39
+ style, arrowStyle,
40
+ } = usePopover(
41
+ { props, value: { placement: placementRef } },
42
+ {
43
+ onShow: () => {
44
+ emit('update:show', true);
45
+ },
46
+ onHide: () => {
47
+ emit('update:show', false);
48
+ },
49
+ },
50
+ );
51
+
52
+ const show = async () => {
53
+ await popperInstance.value?.show();
54
+ };
55
+ const hide = () => {
56
+ popperInstance.value?.hide();
57
+ };
58
+
59
+ expose({ show, hide });
60
+
61
+ watch(() => props.show, () => {
62
+ if (props.show) {show();} else {hide();}
63
+ });
64
+
65
+ const handleClick = async () => {
66
+ if (props.hover) {return;}
67
+ await popperInstance.value?.toggle();
68
+ };
69
+
70
+
71
+ return () => {
72
+ return <div class="m-popover" data-popper-placement={placementRef.value}
73
+ onMouseleave={popoverLeave}>
74
+ <div class="m-popover-default-wrapper"
75
+ ref={popoverRef}
76
+ onMouseenter={popoverEnter}
77
+ onClick={handleClick}>
78
+ {slots.default?.()}
79
+ </div>
80
+ <div class="m-popover-content" ref={contentRef} style={style.value}>
81
+ {getContent(props, () => slots.content?.(), useTeleport)}
82
+ {
83
+ // todo when content not render arrow should not render
84
+ slots.arrow ?
85
+ <div class="m-popover-arrow" ref={arrowRef} style={arrowStyle.value}>{slots.arrow()}</div> : null
86
+ }
87
+ </div>
88
+ </div>;
89
+ };
90
+ }, {
91
+ name: 'MPopover',
92
+ props,
93
+ emits: ['open:popper', 'close:popper', 'update:show'],
94
+ });