@guoyg578/k-ui 0.1.0 → 0.1.2

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 (267) hide show
  1. package/README.md +75 -29
  2. package/dist/components/KAffix.vue.d.ts +17 -0
  3. package/dist/components/KAffix.vue.js +7 -0
  4. package/dist/components/KAffix.vue_vue_type_script_setup_true_lang.js +18 -0
  5. package/dist/components/KAlert.vue.d.ts +1 -1
  6. package/dist/components/{KAlert.js → KAlert.vue.js} +2 -2
  7. package/dist/components/KAlert.vue_vue_type_script_setup_true_lang.js +35 -32
  8. package/dist/components/KAnchor.vue.d.ts +14 -0
  9. package/dist/components/KAnchor.vue.js +7 -0
  10. package/dist/components/KAnchor.vue_vue_type_script_setup_true_lang.js +40 -0
  11. package/dist/components/KAutoComplete.vue.d.ts +26 -0
  12. package/dist/components/KAutoComplete.vue.js +8 -0
  13. package/dist/components/KAutoComplete.vue_vue_type_script_setup_true_lang.js +58 -0
  14. package/dist/components/{KAvatar.js → KAvatar.vue.js} +1 -1
  15. package/dist/components/{KAvatarGroup.js → KAvatarGroup.vue.js} +1 -1
  16. package/dist/components/KBackTop.vue.d.ts +24 -0
  17. package/dist/components/KBackTop.vue.js +7 -0
  18. package/dist/components/KBackTop.vue_vue_type_script_setup_true_lang.js +56 -0
  19. package/dist/components/KBadge.vue.d.ts +31 -0
  20. package/dist/components/KBadge.vue.js +7 -0
  21. package/dist/components/KBadge.vue_vue_type_script_setup_true_lang.js +48 -0
  22. package/dist/components/KBreadcrumb.vue.d.ts +30 -1
  23. package/dist/components/{KBreadcrumb.js → KBreadcrumb.vue.js} +2 -2
  24. package/dist/components/KBreadcrumb.vue_vue_type_script_setup_true_lang.js +36 -21
  25. package/dist/components/KButton.vue.d.ts +17 -2
  26. package/dist/components/{KButton.js → KButton.vue.js} +2 -2
  27. package/dist/components/KButton.vue_vue_type_script_setup_true_lang.js +51 -17
  28. package/dist/components/KButtonGroup.vue.d.ts +18 -0
  29. package/dist/components/KButtonGroup.vue.js +6 -0
  30. package/dist/components/KButtonGroup.vue_vue_type_script_setup_true_lang.js +14 -0
  31. package/dist/components/KCalendar.vue.d.ts +33 -0
  32. package/dist/components/KCalendar.vue.js +7 -0
  33. package/dist/components/KCalendar.vue_vue_type_script_setup_true_lang.js +78 -0
  34. package/dist/components/KCard.vue.d.ts +5 -3
  35. package/dist/components/{KCard.js → KCard.vue.js} +2 -2
  36. package/dist/components/KCard.vue_vue_type_script_setup_true_lang.js +2 -2
  37. package/dist/components/{KCarousel.js → KCarousel.vue.js} +1 -1
  38. package/dist/components/KCascader.vue.d.ts +29 -0
  39. package/dist/components/KCascader.vue.js +8 -0
  40. package/dist/components/KCascader.vue_vue_type_script_setup_true_lang.js +114 -0
  41. package/dist/components/{KCheckbox.js → KCheckbox.vue.js} +1 -1
  42. package/dist/components/{KCheckboxGroup.js → KCheckboxGroup.vue.js} +1 -1
  43. package/dist/components/KCode.vue.d.ts +27 -0
  44. package/dist/components/KCode.vue.js +7 -0
  45. package/dist/components/KCode.vue_vue_type_script_setup_true_lang.js +42 -0
  46. package/dist/components/KCollapse.vue.d.ts +25 -0
  47. package/dist/components/KCollapse.vue.js +7 -0
  48. package/dist/components/KCollapse.vue_vue_type_script_setup_true_lang.js +35 -0
  49. package/dist/components/KCollapseItem.vue.d.ts +22 -0
  50. package/dist/components/KCollapseItem.vue.js +7 -0
  51. package/dist/components/KCollapseItem.vue_vue_type_script_setup_true_lang.js +46 -0
  52. package/dist/components/KColorPicker.vue.d.ts +40 -0
  53. package/dist/components/KColorPicker.vue.js +7 -0
  54. package/dist/components/KColorPicker.vue_vue_type_script_setup_true_lang.js +96 -0
  55. package/dist/components/{KCombobox.js → KCombobox.vue.js} +2 -2
  56. package/dist/components/{KCommandPalette.js → KCommandPalette.vue.js} +1 -1
  57. package/dist/components/KConfigProvider.vue.d.ts +26 -0
  58. package/dist/components/KConfigProvider.vue.js +5 -0
  59. package/dist/components/KConfigProvider.vue_vue_type_script_setup_true_lang.js +17 -0
  60. package/dist/components/{KConfirmDialog.js → KConfirmDialog.vue.js} +1 -1
  61. package/dist/components/KCountdown.vue.d.ts +15 -0
  62. package/dist/components/KCountdown.vue.js +7 -0
  63. package/dist/components/KCountdown.vue_vue_type_script_setup_true_lang.js +36 -0
  64. package/dist/components/KDataTable.vue.d.ts +33 -10
  65. package/dist/components/{KDataTable.js → KDataTable.vue.js} +2 -2
  66. package/dist/components/KDataTable.vue_vue_type_script_setup_true_lang.js +128 -30
  67. package/dist/components/{KDatePicker.js → KDatePicker.vue.js} +1 -1
  68. package/dist/components/KDatePicker.vue_vue_type_script_setup_true_lang.js +1 -1
  69. package/dist/components/KDescriptions.vue.d.ts +30 -0
  70. package/dist/components/KDescriptions.vue.js +6 -0
  71. package/dist/components/KDescriptions.vue_vue_type_script_setup_true_lang.js +30 -0
  72. package/dist/components/KDescriptionsItem.vue.d.ts +17 -0
  73. package/dist/components/KDescriptionsItem.vue.js +5 -0
  74. package/dist/components/KDescriptionsItem.vue_vue_type_script_setup_true_lang.js +17 -0
  75. package/dist/components/KDialog.vue.d.ts +1 -0
  76. package/dist/components/{KDialog.js → KDialog.vue.js} +2 -2
  77. package/dist/components/KDialog.vue_vue_type_script_setup_true_lang.js +45 -38
  78. package/dist/components/{KDiff.js → KDiff.vue.js} +1 -1
  79. package/dist/components/KDivider.vue.d.ts +21 -0
  80. package/dist/components/KDivider.vue.js +7 -0
  81. package/dist/components/KDivider.vue_vue_type_script_setup_true_lang.js +33 -0
  82. package/dist/components/KDrawer.vue.d.ts +7 -3
  83. package/dist/components/{KDrawer.js → KDrawer.vue.js} +2 -2
  84. package/dist/components/KDrawer.vue_vue_type_script_setup_true_lang.js +41 -29
  85. package/dist/components/KDropdown.vue.d.ts +8 -5
  86. package/dist/components/{KDropdown.js → KDropdown.vue.js} +2 -2
  87. package/dist/components/KDropdown.vue_vue_type_script_setup_true_lang.js +40 -38
  88. package/dist/components/KDynamicInput.vue.d.ts +33 -0
  89. package/dist/components/KDynamicInput.vue.js +7 -0
  90. package/dist/components/KDynamicInput.vue_vue_type_script_setup_true_lang.js +81 -0
  91. package/dist/components/KDynamicTags.vue.d.ts +20 -0
  92. package/dist/components/KDynamicTags.vue.js +7 -0
  93. package/dist/components/KDynamicTags.vue_vue_type_script_setup_true_lang.js +60 -0
  94. package/dist/components/KEmpty.vue.d.ts +8 -4
  95. package/dist/components/KEmpty.vue_vue_type_script_setup_true_lang.js +17 -14
  96. package/dist/components/KForm.vue.d.ts +12 -6
  97. package/dist/components/{KForm.js → KForm.vue.js} +2 -2
  98. package/dist/components/KForm.vue_vue_type_script_setup_true_lang.js +31 -15
  99. package/dist/components/KFormField.vue.d.ts +3 -2
  100. package/dist/components/{KFormField.js → KFormField.vue.js} +2 -2
  101. package/dist/components/KFormField.vue_vue_type_script_setup_true_lang.js +41 -28
  102. package/dist/components/KGrid.vue.d.ts +29 -0
  103. package/dist/components/KGrid.vue.js +7 -0
  104. package/dist/components/KGrid.vue_vue_type_script_setup_true_lang.js +33 -0
  105. package/dist/components/KGridItem.vue.d.ts +20 -0
  106. package/dist/components/KGridItem.vue.js +7 -0
  107. package/dist/components/KGridItem.vue_vue_type_script_setup_true_lang.js +18 -0
  108. package/dist/components/KIcon.vue.d.ts +22 -0
  109. package/dist/components/KIcon.vue.js +7 -0
  110. package/dist/components/KIcon.vue_vue_type_script_setup_true_lang.js +31 -0
  111. package/dist/components/KImage.vue.d.ts +3 -3
  112. package/dist/components/{KImage.js → KImage.vue.js} +1 -1
  113. package/dist/components/KImage.vue_vue_type_script_setup_true_lang.js +1 -1
  114. package/dist/components/{KImageViewer.js → KImageViewer.vue.js} +1 -1
  115. package/dist/components/KInput.vue.d.ts +11 -5
  116. package/dist/components/{KInput.js → KInput.vue.js} +2 -2
  117. package/dist/components/KInput.vue_vue_type_script_setup_true_lang.js +62 -38
  118. package/dist/components/KInputNumber.vue.d.ts +18 -4
  119. package/dist/components/{KInputNumber.js → KInputNumber.vue.js} +2 -2
  120. package/dist/components/KInputNumber.vue_vue_type_script_setup_true_lang.js +80 -62
  121. package/dist/components/KLayout.vue.d.ts +19 -0
  122. package/dist/components/KLayout.vue.js +7 -0
  123. package/dist/components/KLayout.vue_vue_type_script_setup_true_lang.js +14 -0
  124. package/dist/components/KLayoutContent.vue.d.ts +17 -0
  125. package/dist/components/KLayoutContent.vue.js +7 -0
  126. package/dist/components/KLayoutContent.vue_vue_type_script_setup_true_lang.js +11 -0
  127. package/dist/components/KLayoutHeader.vue.d.ts +19 -0
  128. package/dist/components/KLayoutHeader.vue.js +7 -0
  129. package/dist/components/KLayoutHeader.vue_vue_type_script_setup_true_lang.js +14 -0
  130. package/dist/components/KLayoutSider.vue.d.ts +28 -0
  131. package/dist/components/KLayoutSider.vue.js +7 -0
  132. package/dist/components/KLayoutSider.vue_vue_type_script_setup_true_lang.js +34 -0
  133. package/dist/components/KList.vue.d.ts +24 -0
  134. package/dist/components/KList.vue.js +7 -0
  135. package/dist/components/KList.vue_vue_type_script_setup_true_lang.js +39 -0
  136. package/dist/components/KListItem.vue.d.ts +17 -0
  137. package/dist/components/KListItem.vue.js +7 -0
  138. package/dist/components/KListItem.vue_vue_type_script_setup_true_lang.js +22 -0
  139. package/dist/components/{KLoadingOverlay.js → KLoadingOverlay.vue.js} +1 -1
  140. package/dist/components/KMention.vue.d.ts +27 -0
  141. package/dist/components/KMention.vue.js +8 -0
  142. package/dist/components/KMention.vue_vue_type_script_setup_true_lang.js +73 -0
  143. package/dist/components/KMenu.vue.d.ts +30 -0
  144. package/dist/components/KMenu.vue.js +9 -0
  145. package/dist/components/KMenu.vue_vue_type_script_setup_true_lang.js +134 -0
  146. package/dist/components/KMenuItem.vue.d.ts +10 -0
  147. package/dist/components/KMenuItem.vue.js +7 -0
  148. package/dist/components/KMenuItem.vue_vue_type_script_setup_true_lang.js +58 -0
  149. package/dist/components/KMessage.js +1 -1
  150. package/dist/components/{KMessageContainer.js → KMessageContainer.vue.js} +1 -1
  151. package/dist/components/KNotification.d.ts +36 -0
  152. package/dist/components/KNotification.js +55 -0
  153. package/dist/components/KNotificationContainer.vue.d.ts +20 -0
  154. package/dist/components/KNotificationContainer.vue.js +7 -0
  155. package/dist/components/KNotificationContainer.vue_vue_type_script_setup_true_lang.js +63 -0
  156. package/dist/components/KNotificationProvider.vue.d.ts +13 -0
  157. package/dist/components/KNotificationProvider.vue.js +10 -0
  158. package/dist/components/KNumberAnimation.vue.d.ts +33 -0
  159. package/dist/components/KNumberAnimation.vue.js +7 -0
  160. package/dist/components/KNumberAnimation.vue_vue_type_script_setup_true_lang.js +45 -0
  161. package/dist/components/{KPagination.js → KPagination.vue.js} +1 -1
  162. package/dist/components/KPopconfirm.vue.d.ts +46 -0
  163. package/dist/components/KPopconfirm.vue.js +6 -0
  164. package/dist/components/KPopconfirm.vue_vue_type_script_setup_true_lang.js +81 -0
  165. package/dist/components/KPopover.vue.d.ts +1 -1
  166. package/dist/components/{KPopover.js → KPopover.vue.js} +1 -1
  167. package/dist/components/KProgress.vue.d.ts +3 -2
  168. package/dist/components/{KProgress.js → KProgress.vue.js} +2 -2
  169. package/dist/components/KProgress.vue_vue_type_script_setup_true_lang.js +23 -20
  170. package/dist/components/KRadio.vue.d.ts +4 -2
  171. package/dist/components/{KRadio.js → KRadio.vue.js} +2 -2
  172. package/dist/components/KRadio.vue_vue_type_script_setup_true_lang.js +24 -11
  173. package/dist/components/KRadioGroup.vue.d.ts +3 -0
  174. package/dist/components/{KRadioGroup.js → KRadioGroup.vue.js} +2 -2
  175. package/dist/components/KRadioGroup.vue_vue_type_script_setup_true_lang.js +17 -12
  176. package/dist/components/KRate.vue.d.ts +25 -0
  177. package/dist/components/KRate.vue.js +7 -0
  178. package/dist/components/KRate.vue_vue_type_script_setup_true_lang.js +77 -0
  179. package/dist/components/{KResizablePanel.js → KResizablePanel.vue.js} +1 -1
  180. package/dist/components/{KResult.js → KResult.vue.js} +1 -1
  181. package/dist/components/KSelect.vue.d.ts +10 -3
  182. package/dist/components/{KSelect.js → KSelect.vue.js} +4 -4
  183. package/dist/components/KSelect.vue_vue_type_script_setup_true_lang.js +89 -48
  184. package/dist/components/{KSkeleton.js → KSkeleton.vue.js} +1 -1
  185. package/dist/components/KSlider.vue.d.ts +24 -0
  186. package/dist/components/KSlider.vue.js +7 -0
  187. package/dist/components/KSlider.vue_vue_type_script_setup_true_lang.js +82 -0
  188. package/dist/components/KSpace.vue.d.ts +32 -0
  189. package/dist/components/KSpace.vue.js +7 -0
  190. package/dist/components/KSpace.vue_vue_type_script_setup_true_lang.js +52 -0
  191. package/dist/components/KSpin.vue.d.ts +23 -0
  192. package/dist/components/KSpin.vue.js +7 -0
  193. package/dist/components/KSpin.vue_vue_type_script_setup_true_lang.js +35 -0
  194. package/dist/components/KStatistic.vue.d.ts +23 -0
  195. package/dist/components/KStatistic.vue.js +7 -0
  196. package/dist/components/KStatistic.vue_vue_type_script_setup_true_lang.js +27 -0
  197. package/dist/components/KSteps.vue.d.ts +1 -1
  198. package/dist/components/{KSteps.js → KSteps.vue.js} +1 -1
  199. package/dist/components/KSwitch.vue.d.ts +2 -2
  200. package/dist/components/{KSwitch.js → KSwitch.vue.js} +2 -2
  201. package/dist/components/KSwitch.vue_vue_type_script_setup_true_lang.js +12 -11
  202. package/dist/components/KTabs.vue.d.ts +10 -5
  203. package/dist/components/{KTabs.js → KTabs.vue.js} +2 -2
  204. package/dist/components/KTabs.vue_vue_type_script_setup_true_lang.js +31 -21
  205. package/dist/components/KTag.vue.d.ts +3 -3
  206. package/dist/components/{KTag.js → KTag.vue.js} +2 -2
  207. package/dist/components/KTag.vue_vue_type_script_setup_true_lang.js +14 -13
  208. package/dist/components/KText.vue.d.ts +26 -0
  209. package/dist/components/KText.vue.js +7 -0
  210. package/dist/components/KText.vue_vue_type_script_setup_true_lang.js +31 -0
  211. package/dist/components/KTextarea.vue.d.ts +17 -2
  212. package/dist/components/{KTextarea.js → KTextarea.vue.js} +2 -2
  213. package/dist/components/KTextarea.vue_vue_type_script_setup_true_lang.js +51 -22
  214. package/dist/components/{KThemeToggleButton.js → KThemeToggleButton.vue.js} +1 -1
  215. package/dist/components/KTime.vue.d.ts +14 -0
  216. package/dist/components/KTime.vue.js +7 -0
  217. package/dist/components/KTime.vue_vue_type_script_setup_true_lang.js +56 -0
  218. package/dist/components/KTimePicker.vue.d.ts +19 -0
  219. package/dist/components/KTimePicker.vue.js +8 -0
  220. package/dist/components/KTimePicker.vue_vue_type_script_setup_true_lang.js +116 -0
  221. package/dist/components/KTimeline.vue.d.ts +13 -0
  222. package/dist/components/KTimeline.vue.js +7 -0
  223. package/dist/components/KTimeline.vue_vue_type_script_setup_true_lang.js +10 -0
  224. package/dist/components/KTimelineItem.vue.d.ts +29 -0
  225. package/dist/components/KTimelineItem.vue.js +7 -0
  226. package/dist/components/KTimelineItem.vue_vue_type_script_setup_true_lang.js +37 -0
  227. package/dist/components/{KTooltip.js → KTooltip.vue.js} +1 -1
  228. package/dist/components/KTransfer.vue.d.ts +24 -0
  229. package/dist/components/KTransfer.vue.js +7 -0
  230. package/dist/components/KTransfer.vue_vue_type_script_setup_true_lang.js +114 -0
  231. package/dist/components/{KTreeNode.js → KTreeNode.vue.js} +1 -1
  232. package/dist/components/KTreeSelect.vue.d.ts +22 -0
  233. package/dist/components/KTreeSelect.vue.js +8 -0
  234. package/dist/components/KTreeSelect.vue_vue_type_script_setup_true_lang.js +100 -0
  235. package/dist/components/{KTreeView.js → KTreeView.vue.js} +1 -1
  236. package/dist/components/KTreeView.vue_vue_type_script_setup_true_lang.js +1 -1
  237. package/dist/components/KTypography.vue.d.ts +13 -0
  238. package/dist/components/KTypography.vue.js +7 -0
  239. package/dist/components/KTypography.vue_vue_type_script_setup_true_lang.js +10 -0
  240. package/dist/components/KUpload.vue.d.ts +100 -4
  241. package/dist/components/{KUpload.js → KUpload.vue.js} +2 -2
  242. package/dist/components/KUpload.vue_vue_type_script_setup_true_lang.js +189 -94
  243. package/dist/components/KUploadDragger.vue.d.ts +13 -0
  244. package/dist/components/KUploadDragger.vue.js +7 -0
  245. package/dist/components/KUploadDragger.vue_vue_type_script_setup_true_lang.js +12 -0
  246. package/dist/components/{KVirtualList.js → KVirtualList.vue.js} +1 -1
  247. package/dist/components/KWatermark.vue.d.ts +27 -0
  248. package/dist/components/KWatermark.vue.js +7 -0
  249. package/dist/components/KWatermark.vue_vue_type_script_setup_true_lang.js +28 -0
  250. package/dist/components/form-context.d.ts +7 -3
  251. package/dist/components/list-context.d.ts +6 -0
  252. package/dist/components/list-context.js +4 -0
  253. package/dist/components/menu-context.d.ts +26 -0
  254. package/dist/components/menu-context.js +4 -0
  255. package/dist/components/radio-context.d.ts +6 -0
  256. package/dist/components/radio-context.js +4 -0
  257. package/dist/components/upload-context.d.ts +6 -0
  258. package/dist/components/upload-context.js +4 -0
  259. package/dist/index.d.ts +60 -3
  260. package/dist/index.js +104 -55
  261. package/dist/k-ui.css +1 -1
  262. package/package.json +6 -12
  263. /package/dist/components/{KEmpty.js → KEmpty.vue.js} +0 -0
  264. /package/dist/components/{KGridSkeleton.js → KGridSkeleton.vue.js} +0 -0
  265. /package/dist/components/{KListSkeleton.js → KListSkeleton.vue.js} +0 -0
  266. /package/dist/components/{KRefetchOverlay.js → KRefetchOverlay.vue.js} +0 -0
  267. /package/dist/components/{KSearchBar.js → KSearchBar.vue.js} +0 -0
package/README.md CHANGED
@@ -1,44 +1,46 @@
1
1
  # k-ui
2
2
 
3
- 一套可复用的 Vue 3 组件库(K 前缀),基于 reka-ui(headless)+ Tailwind v4 token。**两种接入:① `pnpm add @guoyg578/k-ui`(推荐);② 整个 `k-ui/` 目录源码拷贝**。两种方式的完整步骤、样式引入(含 Tailwind `@source` 关键步骤)、发布流程见 [INSTALL.md](./INSTALL.md)。
3
+ 一套可复用的 Vue 3 组件库(K 前缀),基于 reka-ui(headless)+ Tailwind v4 设计令牌。
4
4
 
5
- > 📦 **接入到新项目** —— 完整步骤、最小集成示例、排错速查见 [INSTALL.md](./INSTALL.md)。
5
+ ## 安装
6
6
 
7
- ## 组件清单(45+)
7
+ ```bash
8
+ pnpm add @guoyg578/k-ui
9
+ # 必需 peer 依赖
10
+ pnpm add vue reka-ui lucide-vue-next
11
+ # 可选:仅用到 KDatePicker 时
12
+ pnpm add @vuepic/vue-datepicker date-fns
13
+ ```
8
14
 
9
- - **通用 / 输入**:`KButton` · `KInput` · `KTextarea` · `KInputNumber` · `KSearchBar` · `KTag`
10
- - **选择**:`KSelect` · `KCombobox`(可搜索+多选)· `KDatePicker`
11
- - **表单**:`KSwitch` · `KCheckbox`(+`KCheckboxGroup`) · `KRadio`(+`KRadioGroup`) · `KForm` · `KFormField`
12
- - **反馈 / 弹层**:`KConfirmDialog` · `KDialog` · `KDrawer` · `KTooltip` · `KAlert` · `KMessage`(函数式 toast)
13
- - **数据展示**:`KDataTable` · `KPagination` · `KEmpty` · `KLoadingOverlay` · `KRefetchOverlay` · `KProgress` · `KAvatar`(+`KAvatarGroup`)
14
- - **骨架屏**:`KSkeleton` · `KListSkeleton` · `KGridSkeleton`
15
- - **导航**:`KTabs` · `KBreadcrumb`
16
- - **容器**:`KCard` · `KResult` · `KSteps`
17
- - **媒体**:`KImage` · `KImageViewer` · `KUpload`
18
- - **高级**:`KCommandPalette`(Cmd+K)· `KVirtualList` · `KResizablePanel` · `KTreeView` · `KDiff`(LCS 文本对比)
19
- - **主题**:`KThemeToggleButton`(**无状态**,`v-model:mode`,状态由宿主管理)
20
- - **指令**:`v-reveal`(滚动入场)/ `v-spotlight`(鼠标跟随光晕),需 `installDirectives(app)`
15
+ > 需要 **Tailwind v4**:组件大量使用工具类(`bg-ink-200` / `text-brand-500` / `size-4` …),这些类必须由你项目自己的 Tailwind 生成。
21
16
 
22
- 辅助导出:`useConfirm()`、`KMessage`、`installDirectives`、类型 `ConfirmOptions` / `ThemeMode` / `FormRule` / `FormFieldRef` / `TreeNode` / `CmdItem` / `UploadFile` / `MessageOptions`。
17
+ ## 引入样式 ⚠️ 最关键
23
18
 
24
- > 本库由两套同源组件合并而来:重叠组件(KTooltip / KPagination / KEmpty / KGridSkeleton / KListSkeleton / KRefetchOverlay)以 k-ui 原实现为基准。
19
+ 在全局 CSS 入口(即 `@import "tailwindcss"` 所在文件):
25
20
 
26
- ## 依赖(peer dependencies)
21
+ ```css
22
+ @import "tailwindcss";
27
23
 
28
- | 依赖 | 用途 |
29
- |---|---|
30
- | `vue` ^3.5 | 运行时 |
31
- | `reka-ui` ^2 | 大量 headless 组件(Dialog / Select / Tooltip / Tabs …) |
32
- | `lucide-vue-next` ^1 | 图标 |
33
- | **Tailwind v4** | 工具类 + 设计令牌(`tokens.css` / `components.css`) |
34
- | `vue-router` ^4+ | **可选** —— 仅 `KBreadcrumb` 用到 |
35
- | `@vuepic/vue-datepicker` + `date-fns` | **可选** —— 仅 `KDatePicker` 用到(v13 依赖 date-fns 的 zhCN locale) |
24
+ /* 设计令牌 + 组件基础类(含 @theme / @layer,必须交给 Tailwind 处理)*/
25
+ @import "@guoyg578/k-ui/styles/tokens.css";
26
+ @import "@guoyg578/k-ui/styles/components.css";
27
+
28
+ /* 已编译的组件作用域样式(纯 CSS,含弹层 menu / 日期选择器样式)*/
29
+ @import "@guoyg578/k-ui/css";
30
+
31
+ /* ⚠️ Tailwind 扫描 k-ui 产物里出现的工具类,否则颜色/间距全部散架。
32
+ 路径相对本 CSS 文件,按你的目录层级调整到 node_modules。 */
33
+ @source "../../node_modules/@guoyg578/k-ui/dist";
34
+ ```
35
+
36
+ > - Tailwind v4 默认**不扫描 node_modules**,`@source` 那一行必不可少。
37
+ > - 暗色模式:`tokens.css` 自带 `:root[data-theme="dark"]` 覆盖,设 `<html data-theme="dark">` 即生效;不设则保持亮色。
36
38
 
37
39
  ## 快速上手
38
40
 
39
41
  ```vue
40
42
  <script setup lang="ts">
41
- import { KButton, KDialog, KMessage } from './k-ui'
43
+ import { KButton, KDialog, KMessage } from '@guoyg578/k-ui'
42
44
  import { ref } from 'vue'
43
45
  const open = ref(false)
44
46
  </script>
@@ -51,9 +53,53 @@ const open = ref(false)
51
53
  </template>
52
54
  ```
53
55
 
54
- > ⚠️ 组件依赖 `k-ui/styles/tokens.css` + `components.css`,**必须在全局 CSS 引入**,否则样式错乱。详见 [INSTALL.md](./INSTALL.md)。
56
+ - `KConfirmDialog`(配 `useConfirm`):在根组件挂一次 `<KConfirmDialog />`。
57
+ - `v-reveal` / `v-spotlight` 指令:`import { installDirectives } from '@guoyg578/k-ui'` 后 `installDirectives(app)`。
58
+ - `KMessage`(函数式 toast)开箱即用,首次调用自动挂载容器。
59
+
60
+ ## 组件清单(70+,对标 naive-ui 常用组件)
61
+
62
+ - **通用 / 输入**:`KButton`(+`KButtonGroup`) · `KInput` · `KTextarea` · `KInputNumber` · `KSearchBar` · `KTag` · `KText` · `KTime` · `KSpace`
63
+ - **选择**:`KSelect` · `KCombobox`(可搜索+多选)· `KAutoComplete` · `KCascader` · `KTreeSelect` · `KDatePicker` · `KTimePicker`
64
+ - **表单**:`KSwitch` · `KCheckbox`(+`KCheckboxGroup`) · `KRadio`(+`KRadioGroup`,含 `button` 分段态) · `KForm` · `KFormField` · `KRate` · `KDynamicTags` · `KDynamicInput` · `KTransfer` · `KMention`
65
+ - **反馈 / 弹层**:`KConfirmDialog` · `KDialog` · `KDrawer` · `KTooltip` · `KPopover` · `KPopconfirm` · `KDropdown` · `KAlert` · `KMessage`(函数式 toast)· `KNotification`
66
+ - **数据展示**:`KDataTable` · `KPagination` · `KEmpty` · `KLoadingOverlay` · `KRefetchOverlay` · `KProgress` · `KSpin` · `KAvatar`(+`KAvatarGroup`) · `KBadge` · `KStatistic` · `KCollapse`(+`KCollapseItem`) · `KTimeline`(+`KTimelineItem`) · `KList`(+`KListItem`) · `KCalendar` · `KCode` · `KDescriptions`
67
+ - **骨架屏**:`KSkeleton` · `KListSkeleton` · `KGridSkeleton`
68
+ - **布局**:`KLayout`(+`KLayoutHeader` / `KLayoutContent` / `KLayoutSider`) · `KDivider` · `KGrid`(+`KGridItem`)
69
+ - **导航**:`KTabs` · `KBreadcrumb` · `KMenu`(侧边菜单,含子菜单 / 折叠 hover 飞出,**路由无关**,`@select` 驱动导航)
70
+ - **容器**:`KCard` · `KResult` · `KSteps` · `KTypography`(原生 HTML 文章排版)
71
+ - **媒体**:`KImage` · `KImageViewer` · `KCarousel` · `KUpload`(+`KUploadDragger`)
72
+ - **页面辅助**:`KBackTop` · `KAffix` · `KAnchor` · `KWatermark` · `KNumberAnimation` · `KCountdown`
73
+ - **高级**:`KCommandPalette`(Cmd+K)· `KVirtualList` · `KResizablePanel` · `KTreeView` · `KDiff`(LCS 文本对比)
74
+ - **主题**:`KThemeToggleButton`(**无状态**,`v-model:mode`,状态由宿主管理)
75
+ - **指令**:`v-reveal`(滚动入场)/ `v-spotlight`(鼠标跟随光晕),需 `installDirectives(app)`
76
+
77
+ 辅助导出:`useConfirm()`、`KMessage`、`installDirectives`、类型 `ConfirmOptions` / `ThemeMode` / `FormRule` / `FormFieldRef` / `TreeNode` / `CmdItem` / `UploadFile` / `MessageOptions`。
78
+
79
+ ## 依赖(peer dependencies)
80
+
81
+ | 依赖 | 用途 |
82
+ |---|---|
83
+ | `vue` ^3.5 | 运行时 |
84
+ | `reka-ui` ^2 | 大量 headless 组件(Dialog / Select / Tooltip / Tabs …) |
85
+ | `lucide-vue-next` ^1 | 图标 |
86
+ | **Tailwind v4** | 工具类 + 设计令牌(`tokens.css` / `components.css`) |
87
+ | `@vuepic/vue-datepicker` + `date-fns` | **可选** —— 仅 `KDatePicker` 用到(v13 依赖 date-fns 的 zhCN locale) |
88
+
89
+ > 本库**不依赖任何路由库**。`KBreadcrumb` 的链接项渲染为原生 `<a href>`,点击派发 `item-click` 事件,由宿主自行导航(如 `router.push`)。
90
+
91
+ ## 排错速查
92
+
93
+ | 现象 | 原因 | 解决 |
94
+ |---|---|---|
95
+ | 颜色全是默认 / 输入框无边框 / 骨架屏不动 | 漏了引入样式 | 引入 `tokens.css` + `components.css` + `css` |
96
+ | 工具类(`size-4`、`rounded-lg`)不生效 | 缺 `@source`,或项目不是 Tailwind v4 | 加 `@source ".../@guoyg578/k-ui/dist"`,接入 Tailwind v4 |
97
+ | 切换主题按钮点了没反应 | `KThemeToggleButton` 无状态 | 接 `v-model:mode` 并自行应用 `data-theme` |
98
+ | 暗色模式不生效 | 没设 `<html data-theme="dark">` | 自己控制该属性 |
99
+ | `KConfirmDialog` 不弹出 | 没在根组件挂载,或挂了多个 | 全局只挂一个 `<KConfirmDialog />` |
100
+ | 图标不显示 | 没装 `lucide-vue-next` | `pnpm add lucide-vue-next` |
55
101
 
56
102
  ## 备注
57
103
 
58
104
  - 文案中文硬编码(「搜索」「确定」「暂无数据」等),需 i18n 自行替换。
59
- - 源码拷贝交付,无版本号管理;更新时重新拷贝覆盖。
105
+ - CSS 类与设计令牌统一用 `k-` 前缀(`k-input` / `--k-surface` …),与宿主项目自有样式一般不冲突。
@@ -0,0 +1,17 @@
1
+ type __VLS_Props = {
2
+ offsetTop?: number;
3
+ offsetBottom?: number;
4
+ };
5
+ declare var __VLS_1: {};
6
+ type __VLS_Slots = {} & {
7
+ default?: (props: typeof __VLS_1) => any;
8
+ };
9
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
13
+ type __VLS_WithSlots<T, S> = T & {
14
+ new (): {
15
+ $slots: S;
16
+ };
17
+ };
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./KAffix.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region components/KAffix.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-5fdda9dc"]]);
6
+ //#endregion
7
+ export { n as default };
@@ -0,0 +1,18 @@
1
+ import { computed as e, createElementBlock as t, defineComponent as n, normalizeStyle as r, openBlock as i, renderSlot as a } from "vue";
2
+ //#region components/KAffix.vue?vue&type=script&setup=true&lang.ts
3
+ var o = /* @__PURE__ */ n({
4
+ __name: "KAffix",
5
+ props: {
6
+ offsetTop: {},
7
+ offsetBottom: {}
8
+ },
9
+ setup(n) {
10
+ let o = n, s = e(() => o.offsetBottom == null ? { top: `${o.offsetTop ?? 0}px` } : { bottom: `${o.offsetBottom}px` });
11
+ return (e, n) => (i(), t("div", {
12
+ class: "k-affix",
13
+ style: r(s.value)
14
+ }, [a(e.$slots, "default", {}, void 0, !0)], 4));
15
+ }
16
+ });
17
+ //#endregion
18
+ export { o as default };
@@ -26,8 +26,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
26
26
  onClose?: (() => any) | undefined;
27
27
  }>, {
28
28
  type: AlertType;
29
- closable: boolean;
30
29
  variant: "tint" | "outline";
30
+ closable: boolean;
31
31
  icon: boolean;
32
32
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
33
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,7 +1,7 @@
1
1
  import e from "../_virtual/_plugin-vue_export-helper.js";
2
2
  import t from "./KAlert.vue_vue_type_script_setup_true_lang.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  //#region components/KAlert.vue
5
- var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-5a970db1"]]);
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-e5ce1f58"]]);
6
6
  //#endregion
7
7
  export { n as default };
@@ -1,16 +1,16 @@
1
- import { computed as e, createBlock as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, createVNode as o, defineComponent as s, normalizeClass as c, openBlock as l, ref as u, renderSlot as d, resolveDynamicComponent as f, toDisplayString as p, unref as m, watch as h } from "vue";
2
- import { AlertCircle as g, AlertTriangle as _, CheckCircle2 as v, Info as y, X as b } from "lucide-vue-next";
1
+ import { computed as e, createBlock as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, createVNode as o, defineComponent as s, getCurrentInstance as c, normalizeClass as l, openBlock as u, ref as d, renderSlot as f, resolveDynamicComponent as p, toDisplayString as m, unref as h, watch as g } from "vue";
2
+ import { AlertCircle as _, AlertTriangle as v, CheckCircle2 as y, Info as b, X as x } from "lucide-vue-next";
3
3
  //#region components/KAlert.vue?vue&type=script&setup=true&lang.ts
4
- var x = { class: "k-alert__body" }, S = {
4
+ var S = { class: "k-alert__body" }, C = {
5
5
  key: 0,
6
6
  class: "k-alert__title"
7
- }, C = {
7
+ }, w = {
8
8
  key: 1,
9
9
  class: "k-alert__desc"
10
- }, w = {
10
+ }, T = {
11
11
  key: 2,
12
12
  class: "k-alert__actions"
13
- }, T = /* @__PURE__ */ s({
13
+ }, E = /* @__PURE__ */ s({
14
14
  __name: "KAlert",
15
15
  props: {
16
16
  type: { default: "info" },
@@ -28,49 +28,52 @@ var x = { class: "k-alert__body" }, S = {
28
28
  modelValue: { type: Boolean }
29
29
  },
30
30
  emits: ["update:modelValue", "close"],
31
- setup(s, { emit: T }) {
32
- let E = s, D = T, O = u(!0);
33
- h(() => [
34
- E.type,
35
- E.title,
36
- E.description
31
+ setup(s, { emit: E }) {
32
+ let D = s, O = E, k = c(), A = e(() => {
33
+ let e = k?.vnode.props ?? {};
34
+ return "modelValue" in e || "model-value" in e;
35
+ }), j = d(!0);
36
+ g(() => [
37
+ D.type,
38
+ D.title,
39
+ D.description
37
40
  ], () => {
38
- E.modelValue === void 0 && (O.value = !0);
41
+ A.value || (j.value = !0);
39
42
  });
40
- let k = e(() => E.modelValue === void 0 ? O.value : E.modelValue);
41
- function A() {
42
- E.modelValue === void 0 ? O.value = !1 : D("update:modelValue", !1), D("close");
43
+ let M = e(() => A.value ? D.modelValue : j.value);
44
+ function N() {
45
+ A.value ? O("update:modelValue", !1) : j.value = !1, O("close");
43
46
  }
44
- let j = {
45
- info: y,
46
- success: v,
47
- warning: _,
48
- error: g
47
+ let P = {
48
+ info: b,
49
+ success: y,
50
+ warning: v,
51
+ error: _
49
52
  };
50
- return (e, u) => k.value ? (l(), r("div", {
53
+ return (e, c) => M.value ? (u(), r("div", {
51
54
  key: 0,
52
- class: c(["k-alert", [`k-alert--${s.type}`, `k-alert--${s.variant}`]]),
55
+ class: l(["k-alert", [`k-alert--${s.type}`, `k-alert--${s.variant}`]]),
53
56
  role: "alert"
54
57
  }, [
55
- s.icon ? (l(), t(f(j[s.type]), {
58
+ s.icon ? (u(), t(p(P[s.type]), {
56
59
  key: 0,
57
60
  size: 16,
58
61
  class: "k-alert__icon"
59
62
  })) : n("", !0),
60
- i("div", x, [
61
- s.title || e.$slots.title ? (l(), r("div", S, [d(e.$slots, "title", {}, () => [a(p(s.title), 1)], !0)])) : n("", !0),
62
- s.description || e.$slots.default ? (l(), r("div", C, [d(e.$slots, "default", {}, () => [a(p(s.description), 1)], !0)])) : n("", !0),
63
- e.$slots.actions ? (l(), r("div", w, [d(e.$slots, "actions", {}, void 0, !0)])) : n("", !0)
63
+ i("div", S, [
64
+ s.title || e.$slots.title ? (u(), r("div", C, [f(e.$slots, "title", {}, () => [a(m(s.title), 1)], !0)])) : n("", !0),
65
+ s.description || e.$slots.default ? (u(), r("div", w, [f(e.$slots, "default", {}, () => [a(m(s.description), 1)], !0)])) : n("", !0),
66
+ e.$slots.actions ? (u(), r("div", T, [f(e.$slots, "actions", {}, void 0, !0)])) : n("", !0)
64
67
  ]),
65
- s.closable ? (l(), r("button", {
68
+ s.closable ? (u(), r("button", {
66
69
  key: 1,
67
70
  type: "button",
68
71
  class: "k-alert__close",
69
72
  "aria-label": "关闭",
70
- onClick: A
71
- }, [o(m(b), { size: 14 })])) : n("", !0)
73
+ onClick: N
74
+ }, [o(h(x), { size: 14 })])) : n("", !0)
72
75
  ], 2)) : n("", !0);
73
76
  }
74
77
  });
75
78
  //#endregion
76
- export { T as default };
79
+ export { E as default };
@@ -0,0 +1,14 @@
1
+ export interface AnchorItem {
2
+ title: string;
3
+ /** 目标元素选择器,如 '#section-1' */
4
+ href: string;
5
+ }
6
+ type __VLS_Props = {
7
+ items: AnchorItem[];
8
+ offsetTop?: number;
9
+ };
10
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
11
+ offsetTop: number;
12
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./KAnchor.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region components/KAnchor.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-2498e7e0"]]);
6
+ //#endregion
7
+ export { n as default };
@@ -0,0 +1,40 @@
1
+ import { Fragment as e, createElementBlock as t, defineComponent as n, normalizeClass as r, onMounted as i, onUnmounted as a, openBlock as o, ref as s, renderList as c, toDisplayString as l } from "vue";
2
+ //#region components/KAnchor.vue?vue&type=script&setup=true&lang.ts
3
+ var u = { class: "k-anchor" }, d = ["href", "onClick"], f = /* @__PURE__ */ n({
4
+ __name: "KAnchor",
5
+ props: {
6
+ items: {},
7
+ offsetTop: { default: 80 }
8
+ },
9
+ setup(n) {
10
+ let f = n, p = s("");
11
+ function m() {
12
+ let e = "";
13
+ for (let t of f.items) {
14
+ let n = document.querySelector(t.href);
15
+ n && n.getBoundingClientRect().top - f.offsetTop <= 1 && (e = t.href);
16
+ }
17
+ p.value = e || f.items[0]?.href || "";
18
+ }
19
+ function h(e, t) {
20
+ t.preventDefault();
21
+ let n = document.querySelector(e.href);
22
+ if (!n) return;
23
+ let r = n.getBoundingClientRect().top + window.scrollY - f.offsetTop;
24
+ window.scrollTo({
25
+ top: r,
26
+ behavior: "smooth"
27
+ });
28
+ }
29
+ return i(() => {
30
+ window.addEventListener("scroll", m, { passive: !0 }), m();
31
+ }), a(() => window.removeEventListener("scroll", m)), (i, a) => (o(), t("nav", u, [(o(!0), t(e, null, c(n.items, (e) => (o(), t("a", {
32
+ key: e.href,
33
+ href: e.href,
34
+ class: r(["k-anchor__link", { "k-anchor__link--active": p.value === e.href }]),
35
+ onClick: (t) => h(e, t)
36
+ }, l(e.title), 11, d))), 128))]));
37
+ }
38
+ });
39
+ //#endregion
40
+ export { f as default };
@@ -0,0 +1,26 @@
1
+ interface AcOption {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ type __VLS_Props = {
6
+ modelValue?: string;
7
+ options?: (string | AcOption)[];
8
+ placeholder?: string;
9
+ disabled?: boolean;
10
+ /** 是否按输入内容过滤候选 */
11
+ filter?: boolean;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
14
+ select: (v: string) => any;
15
+ "update:modelValue": (v: string) => any;
16
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
17
+ onSelect?: ((v: string) => any) | undefined;
18
+ "onUpdate:modelValue"?: ((v: string) => any) | undefined;
19
+ }>, {
20
+ filter: boolean;
21
+ disabled: boolean;
22
+ modelValue: string;
23
+ options: (string | AcOption)[];
24
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./KAutoComplete.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ /* empty css */
5
+ //#region components/KAutoComplete.vue
6
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-cfefb1e5"]]);
7
+ //#endregion
8
+ export { n as default };
@@ -0,0 +1,58 @@
1
+ import { Fragment as e, computed as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, defineComponent as a, normalizeClass as o, openBlock as s, ref as c, renderList as l, toDisplayString as u, withModifiers as d } from "vue";
2
+ //#region components/KAutoComplete.vue?vue&type=script&setup=true&lang.ts
3
+ var f = { class: "k-ac" }, p = [
4
+ "value",
5
+ "placeholder",
6
+ "disabled"
7
+ ], m = {
8
+ key: 0,
9
+ class: "k-ac__list k-menu-surface"
10
+ }, h = ["onMousedown"], g = /* @__PURE__ */ a({
11
+ __name: "KAutoComplete",
12
+ props: {
13
+ modelValue: { default: "" },
14
+ options: { default: () => [] },
15
+ placeholder: {},
16
+ disabled: {
17
+ type: Boolean,
18
+ default: !1
19
+ },
20
+ filter: {
21
+ type: Boolean,
22
+ default: !0
23
+ }
24
+ },
25
+ emits: ["update:modelValue", "select"],
26
+ setup(a, { emit: g }) {
27
+ let _ = a, v = g, y = c(!1), b = t(() => (_.options ?? []).map((e) => typeof e == "string" ? {
28
+ label: e,
29
+ value: e
30
+ } : e)), x = t(() => {
31
+ if (!_.filter || !_.modelValue) return b.value;
32
+ let e = _.modelValue.toLowerCase();
33
+ return b.value.filter((t) => t.label.toLowerCase().includes(e));
34
+ }), S = t(() => y.value && !_.disabled && x.value.length > 0);
35
+ function C(e) {
36
+ v("update:modelValue", e.target.value);
37
+ }
38
+ function w(e) {
39
+ v("update:modelValue", e.value), v("select", e.value), y.value = !1;
40
+ }
41
+ return (t, c) => (s(), r("div", f, [i("input", {
42
+ class: "k-ac__input",
43
+ value: a.modelValue,
44
+ placeholder: a.placeholder,
45
+ disabled: a.disabled,
46
+ onInput: C,
47
+ onFocus: c[0] ||= (e) => y.value = !0,
48
+ onBlur: c[1] ||= (e) => y.value = !1
49
+ }, null, 40, p), S.value ? (s(), r("div", m, [(s(!0), r(e, null, l(x.value, (e) => (s(), r("button", {
50
+ key: e.value,
51
+ type: "button",
52
+ class: o(["k-ac__item", { "k-ac__item--active": e.value === a.modelValue }]),
53
+ onMousedown: d((t) => w(e), ["prevent"])
54
+ }, u(e.label), 43, h))), 128))])) : n("", !0)]));
55
+ }
56
+ });
57
+ //#endregion
58
+ export { g as default };
@@ -1,6 +1,6 @@
1
1
  import e from "../_virtual/_plugin-vue_export-helper.js";
2
2
  import t from "./KAvatar.vue_vue_type_script_setup_true_lang.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  //#region components/KAvatar.vue
5
5
  var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-14ccf4af"]]);
6
6
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import e from "../_virtual/_plugin-vue_export-helper.js";
2
2
  import t from "./KAvatarGroup.vue_vue_type_script_setup_true_lang.js";
3
- /* empty css */
3
+ /* empty css */
4
4
  //#region components/KAvatarGroup.vue
5
5
  var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-00da4b72"]]);
6
6
  //#endregion
@@ -0,0 +1,24 @@
1
+ type __VLS_Props = {
2
+ visibilityHeight?: number;
3
+ right?: number;
4
+ bottom?: number;
5
+ /** 滚动容器选择器,默认 window */
6
+ target?: string;
7
+ };
8
+ declare var __VLS_13: {};
9
+ type __VLS_Slots = {} & {
10
+ default?: (props: typeof __VLS_13) => any;
11
+ };
12
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
13
+ right: number;
14
+ bottom: number;
15
+ visibilityHeight: number;
16
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
20
+ type __VLS_WithSlots<T, S> = T & {
21
+ new (): {
22
+ $slots: S;
23
+ };
24
+ };
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./KBackTop.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region components/KBackTop.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-b45e5a2b"]]);
6
+ //#endregion
7
+ export { n as default };
@@ -0,0 +1,56 @@
1
+ import { Teleport as e, Transition as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createVNode as a, defineComponent as o, normalizeStyle as s, onMounted as c, onUnmounted as l, openBlock as u, ref as d, renderSlot as f, unref as p, withCtx as m } from "vue";
2
+ import { ChevronUp as h } from "lucide-vue-next";
3
+ //#region components/KBackTop.vue?vue&type=script&setup=true&lang.ts
4
+ var g = /* @__PURE__ */ o({
5
+ __name: "KBackTop",
6
+ props: {
7
+ visibilityHeight: { default: 180 },
8
+ right: { default: 24 },
9
+ bottom: { default: 24 },
10
+ target: {}
11
+ },
12
+ setup(o) {
13
+ let g = o, _ = d(!1);
14
+ function v() {
15
+ if (g.target) {
16
+ let e = document.querySelector(g.target);
17
+ if (e) return e;
18
+ }
19
+ return window;
20
+ }
21
+ function y(e) {
22
+ return e === window ? window.scrollY : e.scrollTop;
23
+ }
24
+ let b;
25
+ function x() {
26
+ _.value = y(b) > g.visibilityHeight;
27
+ }
28
+ function S() {
29
+ b === window ? window.scrollTo({
30
+ top: 0,
31
+ behavior: "smooth"
32
+ }) : b.scrollTo({
33
+ top: 0,
34
+ behavior: "smooth"
35
+ });
36
+ }
37
+ return c(() => {
38
+ b = v(), b.addEventListener("scroll", x, { passive: !0 }), x();
39
+ }), l(() => b?.removeEventListener("scroll", x)), (c, l) => (u(), n(e, { to: "body" }, [a(t, { name: "k-backtop" }, {
40
+ default: m(() => [_.value ? (u(), i("button", {
41
+ key: 0,
42
+ type: "button",
43
+ class: "k-backtop",
44
+ style: s({
45
+ right: `${o.right}px`,
46
+ bottom: `${o.bottom}px`
47
+ }),
48
+ "aria-label": "回到顶部",
49
+ onClick: S
50
+ }, [f(c.$slots, "default", {}, () => [a(p(h), { size: 20 })], !0)], 4)) : r("", !0)]),
51
+ _: 3
52
+ })]));
53
+ }
54
+ });
55
+ //#endregion
56
+ export { g as default };
@@ -0,0 +1,31 @@
1
+ type __VLS_Props = {
2
+ value?: number | string;
3
+ /** 数字封顶,超出显示 max+ */
4
+ max?: number;
5
+ dot?: boolean;
6
+ type?: 'default' | 'success' | 'error' | 'warning' | 'info';
7
+ /** value 为 0 时是否仍显示 */
8
+ showZero?: boolean;
9
+ /** 自定义颜色(覆盖 type) */
10
+ color?: string;
11
+ /** 呼吸脉冲动画 */
12
+ processing?: boolean;
13
+ };
14
+ declare var __VLS_1: {};
15
+ type __VLS_Slots = {} & {
16
+ default?: (props: typeof __VLS_1) => any;
17
+ };
18
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
19
+ type: "default" | "success" | "error" | "warning" | "info";
20
+ dot: boolean;
21
+ showZero: boolean;
22
+ processing: boolean;
23
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./KBadge.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region components/KBadge.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-e337d9fa"]]);
6
+ //#endregion
7
+ export { n as default };