@byyuurin/ui 0.0.11 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +28 -23
  6. package/dist/runtime/components/Accordion.vue.d.ts +51 -29
  7. package/dist/runtime/components/Alert.vue +47 -27
  8. package/dist/runtime/components/Alert.vue.d.ts +37 -25
  9. package/dist/runtime/components/App.vue +9 -8
  10. package/dist/runtime/components/App.vue.d.ts +22 -20
  11. package/dist/runtime/components/Avatar.vue +65 -21
  12. package/dist/runtime/components/Avatar.vue.d.ts +27 -13
  13. package/dist/runtime/components/AvatarGroup.vue +14 -10
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
  15. package/dist/runtime/components/Badge.vue +64 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +30 -29
  17. package/dist/runtime/components/Breadcrumb.vue +40 -22
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
  19. package/dist/runtime/components/Button.vue +113 -52
  20. package/dist/runtime/components/Button.vue.d.ts +36 -20
  21. package/dist/runtime/components/Calendar.vue +50 -43
  22. package/dist/runtime/components/Calendar.vue.d.ts +58 -31
  23. package/dist/runtime/components/Card.vue +18 -14
  24. package/dist/runtime/components/Card.vue.d.ts +18 -14
  25. package/dist/runtime/components/Carousel.vue +99 -46
  26. package/dist/runtime/components/Carousel.vue.d.ts +46 -25
  27. package/dist/runtime/components/Checkbox.vue +60 -35
  28. package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +89 -0
  31. package/dist/runtime/components/Chip.vue +35 -32
  32. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  33. package/dist/runtime/components/Collapsible.vue +13 -9
  34. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  35. package/dist/runtime/components/Drawer.vue +80 -70
  36. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  37. package/dist/runtime/components/DropdownMenu.vue +23 -16
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  39. package/dist/runtime/components/DropdownMenuContent.vue +136 -106
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  41. package/dist/runtime/components/FieldGroup.vue +33 -0
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  43. package/dist/runtime/components/Form.vue +172 -88
  44. package/dist/runtime/components/Form.vue.d.ts +69 -44
  45. package/dist/runtime/components/FormField.vue +108 -0
  46. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  47. package/dist/runtime/components/Icon.vue +20 -0
  48. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  49. package/dist/runtime/components/Input.vue +84 -79
  50. package/dist/runtime/components/Input.vue.d.ts +55 -43
  51. package/dist/runtime/components/InputNumber.vue +66 -52
  52. package/dist/runtime/components/InputNumber.vue.d.ts +50 -109
  53. package/dist/runtime/components/InputTags.vue +155 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +85 -0
  55. package/dist/runtime/components/Kbd.vue +11 -5
  56. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  57. package/dist/runtime/components/Link.vue +54 -197
  58. package/dist/runtime/components/Link.vue.d.ts +17 -17
  59. package/dist/runtime/components/LinkBase.vue +11 -33
  60. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  61. package/dist/runtime/components/Marquee.vue +38 -0
  62. package/dist/runtime/components/Marquee.vue.d.ts +54 -0
  63. package/dist/runtime/components/Modal.vue +53 -39
  64. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  65. package/dist/runtime/components/NavigationMenu.vue +345 -0
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +216 -0
  67. package/dist/runtime/components/OverlayProvider.vue +3 -3
  68. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  69. package/dist/runtime/components/Pagination.vue +39 -47
  70. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  71. package/dist/runtime/components/PinInput.vue +46 -32
  72. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  73. package/dist/runtime/components/Popover.vue +33 -19
  74. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  75. package/dist/runtime/components/Progress.vue +31 -26
  76. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  77. package/dist/runtime/components/RadioGroup.vue +75 -48
  78. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  79. package/dist/runtime/components/ScrollArea.vue +33 -31
  80. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  81. package/dist/runtime/components/Select.vue +166 -76
  82. package/dist/runtime/components/Select.vue.d.ts +206 -65
  83. package/dist/runtime/components/Separator.vue +42 -16
  84. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  85. package/dist/runtime/components/Skeleton.vue +18 -6
  86. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  87. package/dist/runtime/components/Slider.vue +42 -24
  88. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  89. package/dist/runtime/components/Switch.vue +40 -31
  90. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  91. package/dist/runtime/components/Table.vue +329 -79
  92. package/dist/runtime/components/Table.vue.d.ts +152 -66
  93. package/dist/runtime/components/Tabs.vue +70 -23
  94. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  95. package/dist/runtime/components/Textarea.vue +102 -54
  96. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  97. package/dist/runtime/components/Timeline.vue +102 -0
  98. package/dist/runtime/components/Timeline.vue.d.ts +74 -0
  99. package/dist/runtime/components/Toast.vue +84 -38
  100. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  101. package/dist/runtime/components/ToastProvider.vue +31 -22
  102. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  103. package/dist/runtime/components/Tooltip.vue +33 -21
  104. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  105. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  106. package/dist/runtime/composables/defineShortcuts.js +129 -0
  107. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  108. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  109. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  110. package/dist/runtime/composables/useComponentIcons.js +4 -4
  111. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  112. package/dist/runtime/composables/useFieldGroup.js +14 -0
  113. package/dist/runtime/composables/useFormField.d.ts +62 -0
  114. package/dist/runtime/composables/useFormField.js +99 -0
  115. package/dist/runtime/composables/useKbd.d.ts +3 -2
  116. package/dist/runtime/composables/useKbd.js +3 -2
  117. package/dist/runtime/composables/useLocale.d.ts +68 -5
  118. package/dist/runtime/composables/useLocale.js +11 -11
  119. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  120. package/dist/runtime/composables/useOverlay.js +44 -30
  121. package/dist/runtime/composables/usePortal.d.ts +6 -0
  122. package/dist/runtime/composables/usePortal.js +17 -0
  123. package/dist/runtime/composables/useToast.d.ts +12 -5
  124. package/dist/runtime/composables/useToast.js +12 -7
  125. package/dist/runtime/locale/en.d.ts +30 -1
  126. package/dist/runtime/locale/en.js +2 -1
  127. package/dist/runtime/locale/index.d.ts +2 -2
  128. package/dist/runtime/locale/index.js +1 -1
  129. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  130. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  131. package/dist/runtime/plugins/colors.d.ts +2 -0
  132. package/dist/runtime/plugins/colors.js +50 -0
  133. package/dist/runtime/types/app.config.d.ts +6 -0
  134. package/dist/runtime/types/form.d.ts +58 -17
  135. package/dist/runtime/types/form.js +11 -0
  136. package/dist/runtime/types/index.d.ts +56 -8
  137. package/dist/runtime/types/index.js +49 -1
  138. package/dist/runtime/types/input.d.ts +8 -0
  139. package/dist/runtime/types/locale.d.ts +5 -0
  140. package/dist/runtime/types/style.d.ts +33 -0
  141. package/dist/runtime/types/style.js +0 -0
  142. package/dist/runtime/types/unocss.d.ts +4 -0
  143. package/dist/runtime/types/utils.d.ts +41 -37
  144. package/dist/runtime/utils/form.d.ts +5 -1
  145. package/dist/runtime/utils/form.js +49 -0
  146. package/dist/runtime/utils/index.d.ts +10 -13
  147. package/dist/runtime/utils/index.js +41 -48
  148. package/dist/runtime/utils/link.d.ts +3 -2
  149. package/dist/runtime/utils/link.js +16 -2
  150. package/dist/runtime/utils/locale.d.ts +5 -0
  151. package/dist/runtime/utils/locale.js +10 -0
  152. package/dist/runtime/utils/style.d.ts +94 -0
  153. package/dist/runtime/utils/style.js +37 -0
  154. package/dist/runtime/vue/components/Icon.vue +15 -0
  155. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  156. package/dist/runtime/vue/components/Link.vue +163 -0
  157. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  158. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  159. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  160. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  161. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  162. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  163. package/dist/runtime/vue/plugins/head.js +9 -0
  164. package/dist/runtime/vue/stubs.d.ts +16 -1
  165. package/dist/runtime/vue/stubs.js +32 -1
  166. package/dist/setup.d.mts +13 -0
  167. package/dist/setup.mjs +12 -0
  168. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  169. package/dist/shared/ui.DLOxhmP0.mjs +4242 -0
  170. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  171. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  172. package/dist/types.d.mts +3 -1
  173. package/dist/unocss.d.mts +12 -52
  174. package/dist/unocss.mjs +144 -254
  175. package/dist/unplugin.d.mts +13 -26
  176. package/dist/unplugin.mjs +193 -18
  177. package/dist/vite.d.mts +10 -1
  178. package/dist/vite.mjs +12 -3
  179. package/package.json +154 -87
  180. package/vue-plugin.d.ts +5 -0
  181. package/dist/module.d.ts +0 -13
  182. package/dist/module.mjs.map +0 -1
  183. package/dist/runtime/app/injections.d.ts +0 -9331
  184. package/dist/runtime/app/injections.js +0 -61
  185. package/dist/runtime/components/ButtonGroup.vue +0 -26
  186. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  187. package/dist/runtime/components/FormItem.vue +0 -90
  188. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  189. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  190. package/dist/runtime/composables/useButtonGroup.js +0 -9
  191. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  192. package/dist/runtime/composables/useFormItem.js +0 -64
  193. package/dist/runtime/composables/useTheme.d.ts +0 -9
  194. package/dist/runtime/composables/useTheme.js +0 -23
  195. package/dist/runtime/index.d.ts +0 -44
  196. package/dist/runtime/index.js +0 -44
  197. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  198. package/dist/runtime/theme/accordion.d.ts +0 -50
  199. package/dist/runtime/theme/accordion.js +0 -28
  200. package/dist/runtime/theme/alert.d.ts +0 -119
  201. package/dist/runtime/theme/alert.js +0 -47
  202. package/dist/runtime/theme/app.d.ts +0 -19
  203. package/dist/runtime/theme/app.js +0 -19
  204. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  205. package/dist/runtime/theme/avatar-group.js +0 -32
  206. package/dist/runtime/theme/avatar.d.ts +0 -50
  207. package/dist/runtime/theme/avatar.js +0 -34
  208. package/dist/runtime/theme/badge.d.ts +0 -76
  209. package/dist/runtime/theme/badge.js +0 -92
  210. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  211. package/dist/runtime/theme/breadcrumb.js +0 -44
  212. package/dist/runtime/theme/button-group.d.ts +0 -60
  213. package/dist/runtime/theme/button-group.js +0 -42
  214. package/dist/runtime/theme/button.d.ts +0 -184
  215. package/dist/runtime/theme/button.js +0 -164
  216. package/dist/runtime/theme/calendar.d.ts +0 -58
  217. package/dist/runtime/theme/calendar.js +0 -86
  218. package/dist/runtime/theme/card.d.ts +0 -56
  219. package/dist/runtime/theme/card.js +0 -37
  220. package/dist/runtime/theme/carousel.d.ts +0 -107
  221. package/dist/runtime/theme/carousel.js +0 -43
  222. package/dist/runtime/theme/checkbox.d.ts +0 -82
  223. package/dist/runtime/theme/checkbox.js +0 -54
  224. package/dist/runtime/theme/chip.d.ts +0 -61
  225. package/dist/runtime/theme/chip.js +0 -66
  226. package/dist/runtime/theme/collapsible.d.ts +0 -32
  227. package/dist/runtime/theme/collapsible.js +0 -10
  228. package/dist/runtime/theme/drawer.d.ts +0 -142
  229. package/dist/runtime/theme/drawer.js +0 -113
  230. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  231. package/dist/runtime/theme/dropdown-menu.js +0 -83
  232. package/dist/runtime/theme/form-item.d.ts +0 -70
  233. package/dist/runtime/theme/form-item.js +0 -34
  234. package/dist/runtime/theme/form.d.ts +0 -2
  235. package/dist/runtime/theme/form.js +0 -7
  236. package/dist/runtime/theme/index.d.ts +0 -41
  237. package/dist/runtime/theme/index.js +0 -41
  238. package/dist/runtime/theme/input-number.d.ts +0 -115
  239. package/dist/runtime/theme/input-number.js +0 -95
  240. package/dist/runtime/theme/input.d.ts +0 -172
  241. package/dist/runtime/theme/input.js +0 -151
  242. package/dist/runtime/theme/kbd.d.ts +0 -33
  243. package/dist/runtime/theme/kbd.js +0 -26
  244. package/dist/runtime/theme/link.d.ts +0 -38
  245. package/dist/runtime/theme/link.js +0 -26
  246. package/dist/runtime/theme/modal.d.ts +0 -42
  247. package/dist/runtime/theme/modal.js +0 -55
  248. package/dist/runtime/theme/pagination.d.ts +0 -74
  249. package/dist/runtime/theme/pagination.js +0 -17
  250. package/dist/runtime/theme/pinInput.d.ts +0 -94
  251. package/dist/runtime/theme/pinInput.js +0 -111
  252. package/dist/runtime/theme/popover.d.ts +0 -32
  253. package/dist/runtime/theme/popover.js +0 -13
  254. package/dist/runtime/theme/progress.d.ts +0 -180
  255. package/dist/runtime/theme/progress.js +0 -95
  256. package/dist/runtime/theme/radio-group.d.ts +0 -104
  257. package/dist/runtime/theme/radio-group.js +0 -61
  258. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  259. package/dist/runtime/theme/scroll-area.js +0 -33
  260. package/dist/runtime/theme/select.d.ts +0 -186
  261. package/dist/runtime/theme/select.js +0 -173
  262. package/dist/runtime/theme/separator.d.ts +0 -74
  263. package/dist/runtime/theme/separator.js +0 -53
  264. package/dist/runtime/theme/skeleton.d.ts +0 -2
  265. package/dist/runtime/theme/skeleton.js +0 -7
  266. package/dist/runtime/theme/slider.d.ts +0 -70
  267. package/dist/runtime/theme/slider.js +0 -52
  268. package/dist/runtime/theme/switch.d.ts +0 -116
  269. package/dist/runtime/theme/switch.js +0 -78
  270. package/dist/runtime/theme/table.d.ts +0 -86
  271. package/dist/runtime/theme/table.js +0 -36
  272. package/dist/runtime/theme/tabs.d.ts +0 -129
  273. package/dist/runtime/theme/tabs.js +0 -146
  274. package/dist/runtime/theme/textarea.d.ts +0 -90
  275. package/dist/runtime/theme/textarea.js +0 -116
  276. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  277. package/dist/runtime/theme/toast-provider.js +0 -97
  278. package/dist/runtime/theme/toast.d.ts +0 -83
  279. package/dist/runtime/theme/toast.js +0 -35
  280. package/dist/runtime/theme/tooltip.d.ts +0 -38
  281. package/dist/runtime/theme/tooltip.js +0 -11
  282. package/dist/runtime/types/components.d.ts +0 -42
  283. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  284. package/dist/runtime/utils/extend-theme.js +0 -27
  285. package/dist/runtime/utils/styler.d.ts +0 -4
  286. package/dist/runtime/utils/styler.js +0 -10
  287. package/dist/runtime/utils/translator.d.ts +0 -18
  288. package/dist/runtime/utils/translator.js +0 -8
  289. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  290. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  291. package/dist/unocss.d.ts +0 -52
  292. package/dist/unocss.mjs.map +0 -1
  293. package/dist/unplugin.d.ts +0 -26
  294. package/dist/unplugin.mjs.map +0 -1
  295. package/dist/vite.d.ts +0 -9
  296. package/dist/vite.mjs.map +0 -1
  297. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,46 +1,78 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/badge";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { Primitive, Slot } from "reka-ui";
6
+ import { Primitive } from "reka-ui";
7
7
  import { computed } from "vue";
8
- import { useTheme } from "../composables/useTheme";
9
- defineOptions({
10
- inheritAttrs: false
11
- });
8
+ import { useAppConfig } from "#imports";
9
+ import { useComponentIcons } from "../composables/useComponentIcons";
10
+ import { useFieldGroup } from "../composables/useFieldGroup";
11
+ import { cv, merge } from "../utils/style";
12
+ import Avatar from "./Avatar.vue";
13
+ import Icon from "./Icon.vue";
12
14
  const props = defineProps({
13
- as: { type: null, required: false },
14
- text: { type: [String, Number], required: false },
15
+ as: { type: null, required: false, default: "span" },
16
+ variant: { type: null, required: false },
15
17
  size: { type: null, required: false },
16
- position: { type: null, required: false, default: "top-right" },
17
- show: { type: Boolean, required: false },
18
- inset: { type: Boolean, required: false },
19
- standalone: { type: Boolean, required: false },
20
- class: { type: null, required: false },
21
- ui: { type: null, required: false }
18
+ color: { type: null, required: false },
19
+ square: { type: Boolean, required: false },
20
+ label: { type: [String, Number], required: false },
21
+ ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
23
+ icon: { type: [String, Object], required: false },
24
+ avatar: { type: Object, required: false },
25
+ leading: { type: Boolean, required: false },
26
+ leadingIcon: { type: [String, Object], required: false },
27
+ trailing: { type: Boolean, required: false },
28
+ trailingIcon: { type: [String, Object], required: false }
29
+ });
30
+ const slots = defineSlots();
31
+ const { size, orientation } = useFieldGroup(props);
32
+ const { isLeading, leadingIconName, isTrailing, trailingIconName } = useComponentIcons(props);
33
+ const appConfig = useAppConfig();
34
+ const ui = computed(() => {
35
+ const styler = cv(merge(theme, appConfig.ui.badge));
36
+ return styler({
37
+ ...props,
38
+ size: size.value,
39
+ fieldGroup: orientation.value,
40
+ square: props.square || !slots.default && !props.label
41
+ });
22
42
  });
23
- defineEmits(["update:show"]);
24
- defineSlots();
25
- const show = defineModel("show", { type: Boolean, ...{ default: true } });
26
- const { generateStyle } = useTheme();
27
- const style = computed(() => generateStyle("badge", props));
28
43
  </script>
29
44
 
30
45
  <template>
31
- <Primitive
32
- :as="props.as"
33
- :class="style.root({ class: [props.class, props.ui?.root] })"
34
- :data-part="$attrs['data-part'] ?? 'root'"
35
- >
36
- <Slot v-bind="$attrs">
37
- <slot></slot>
38
- </Slot>
46
+ <Primitive :as="props.as" :class="ui.base({ class: [props.ui?.base, props.class] })" data-part="base">
47
+ <slot name="leading" :ui="ui">
48
+ <Icon
49
+ v-if="isLeading && leadingIconName"
50
+ :name="leadingIconName"
51
+ :class="ui.leadingIcon({ class: props.ui?.leadingIcon })"
52
+ data-part="leadingIcon"
53
+ />
54
+ <Avatar
55
+ v-else-if="props.avatar"
56
+ :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
57
+ v-bind="props.avatar"
58
+ :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })"
59
+ data-part="leadingAvatar"
60
+ />
61
+ </slot>
62
+
63
+ <slot :ui="ui">
64
+ <span v-if="props.label" :class="ui.label({ class: props.ui?.label })" data-part="label">
65
+ {{ props.label }}
66
+ </span>
67
+ </slot>
39
68
 
40
- <span v-if="show" :class="style.base({ class: props.ui?.base })" data-part="base">
41
- <slot name="content">
42
- {{ props.text }}
43
- </slot>
44
- </span>
69
+ <slot name="trailing" :ui="ui">
70
+ <Icon
71
+ v-if="isTrailing && trailingIconName"
72
+ :name="trailingIconName"
73
+ :class="ui.trailingIcon({ class: props.ui?.trailingIcon })"
74
+ data-part="trailingIcon"
75
+ />
76
+ </slot>
45
77
  </Primitive>
46
78
  </template>
@@ -1,41 +1,42 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps } from 'reka-ui';
3
- import type { badge } from '../theme/index.js';
4
- import type { ComponentAttrs } from '../types/index.js';
5
- export interface BadgeEmits {
6
- 'update:show': [payload: boolean];
7
- }
8
- export interface BadgeSlots {
9
- default?: (props?: {}) => any;
10
- content?: (props?: {}) => any;
11
- }
12
- type BadgeVariants = VariantProps<typeof badge>;
13
- export interface BadgeProps extends ComponentAttrs<typeof badge> {
3
+ import theme from '#build/ui/badge';
4
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons';
5
+ import type { ComponentBaseProps, ComponentStyler, ComponentUIProps } from '../types';
6
+ import type { StaticSlot } from '../types/utils';
7
+ type ThemeVariants = VariantProps<typeof theme>;
8
+ export interface BadgeProps extends ComponentBaseProps, Omit<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
14
9
  /**
15
10
  * The element or component this component should render as.
16
11
  * @default "div"
17
12
  */
18
13
  as?: PrimitiveProps['as'];
19
- text?: string | number;
20
- size?: BadgeVariants['size'];
21
- position?: BadgeVariants['position'];
22
- show?: boolean;
23
- /** When `true`, keep the badge inside the component for rounded elements. */
24
- inset?: boolean;
25
- /** When `true`, render the badge relatively to the parent. */
26
- standalone?: boolean;
14
+ /** @default "solid" */
15
+ variant?: ThemeVariants['variant'];
16
+ /** @default "md" */
17
+ size?: ThemeVariants['size'];
18
+ /** @default "primary" */
19
+ color?: ThemeVariants['color'];
20
+ /** Render the badge with equal padding on all sides. */
21
+ square?: boolean;
22
+ label?: string | number;
23
+ ui?: ComponentUIProps<typeof theme>;
24
+ }
25
+ export interface BadgeSlots {
26
+ leading: StaticSlot<{
27
+ ui: ComponentStyler<typeof theme>;
28
+ }>;
29
+ default: StaticSlot<{
30
+ ui: ComponentStyler<typeof theme>;
31
+ }>;
32
+ trailing: StaticSlot<{
33
+ ui: ComponentStyler<typeof theme>;
34
+ }>;
27
35
  }
28
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<BadgeProps & {
29
- show?: boolean;
30
- }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
31
- "update:show": (...args: unknown[]) => any;
32
- }, string, import("vue").PublicProps, Readonly<BadgeProps & {
33
- show?: boolean;
34
- }> & Readonly<{
35
- "onUpdate:show"?: ((...args: unknown[]) => any) | undefined;
36
- }>, {
37
- position: "top-right" | "bottom-right" | "top-left" | "bottom-left";
36
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<BadgeProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<BadgeProps> & Readonly<{}>, {
37
+ as: import("reka-ui").AsTag | import("vue").Component;
38
38
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, BadgeSlots>;
39
+ declare const _default: typeof __VLS_export;
39
40
  export default _default;
40
41
  type __VLS_WithSlots<T, S> = T & {
41
42
  new (): {
@@ -1,63 +1,81 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/breadcrumb";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { Primitive } from "reka-ui";
7
7
  import { computed } from "vue";
8
+ import { useAppConfig } from "#imports";
8
9
  import { useLocale } from "../composables/useLocale";
9
- import { useTheme } from "../composables/useTheme";
10
10
  import { get, pickLinkProps } from "../utils";
11
+ import { cv, merge } from "../utils/style";
12
+ import Avatar from "./Avatar.vue";
13
+ import Icon from "./Icon.vue";
11
14
  import Link from "./Link.vue";
12
15
  import LinkBase from "./LinkBase.vue";
13
16
  const props = defineProps({
14
17
  as: { type: null, required: false, default: "nav" },
15
18
  items: { type: Array, required: false },
16
19
  separatorIcon: { type: String, required: false },
17
- labelKey: { type: String, required: false, default: "label" },
18
- class: { type: null, required: false },
19
- ui: { type: null, required: false }
20
+ labelKey: { type: null, required: false, default: "label" },
21
+ ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
20
23
  });
21
24
  const slots = defineSlots();
22
25
  const { dir } = useLocale();
23
- const { theme, generateStyle } = useTheme();
24
- const separatorIcon = computed(() => props.separatorIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronLeft : theme.value.app.icons.chevronRight));
25
- const style = computed(() => generateStyle("breadcrumb", props));
26
+ const appConfig = useAppConfig();
27
+ const separatorIcon = computed(() => props.separatorIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronLeft : appConfig.ui.icons.chevronRight));
28
+ const ui = computed(() => {
29
+ const styler = cv(merge(theme, appConfig.ui.breadcrumb));
30
+ return styler(props);
31
+ });
26
32
  </script>
27
33
 
28
34
  <template>
29
- <Primitive :as="props.as" aria-label="breadcrumb" :class="style.root({ class: [props.class, props.ui?.root] })" data-part="root">
30
- <ol :class="style.list({ class: props.ui?.list })" data-part="list">
35
+ <Primitive :as="props.as" aria-label="breadcrumb" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
36
+ <ol :class="ui.list({ class: props.ui?.list })" data-part="list">
31
37
  <template v-for="(item, index) in props.items" :key="index">
32
- <li :class="style.item({ class: props.ui?.item })" data-part="item">
38
+ <li :class="ui.item({ class: [props.ui?.item, item.ui?.item] })" data-part="item">
33
39
  <Link v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item)" custom>
34
40
  <LinkBase
35
41
  v-bind="slotProps"
36
42
  as="span"
37
- :aria-current="active && index === items.length - 1 ? 'page' : void 0"
38
- :class="style.link({ class: props.ui?.link, active: index === items.length - 1, disabled: item.disabled, to: !!item.to })"
43
+ :aria-current="(item.active ?? active) && index === items.length - 1 ? 'page' : void 0"
44
+ :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: item.active ?? index === items.length - 1, disabled: item.disabled, to: !!item.to })"
39
45
  data-part="link"
40
46
  >
41
- <slot :name="item.slot || 'item'" :item="item" :index="index">
42
- <slot :name="`${item.slot || 'item'}-leading`" :item="item" :active="index === items.length - 1" :index="index">
43
- <span v-if="item.icon" :class="style.linkLeadingIcon({ class: [item.icon, props.ui?.linkLeadingIcon] })" data-part="link-leading-icon"></span>
47
+ <slot :name="item.slot || 'item'" :item="item" :index="index" :active="item.active ?? index === items.length - 1" :ui="ui">
48
+ <slot :name="`${item.slot || 'item'}-leading`" :item="item" :active="item.active ?? index === items.length - 1" :index="index" :ui="ui">
49
+ <Icon
50
+ v-if="item.icon"
51
+ :name="item.icon"
52
+ :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon], active: item.active ?? index === items.length - 1 })"
53
+ data-part="linkLeadingIcon"
54
+ />
55
+ <Avatar
56
+ v-else-if="item.avatar"
57
+ :size="props.ui?.linkLeadingAvatarSize || ui.linkLeadingAvatarSize()"
58
+ v-bind="item.avatar"
59
+ :class="ui.linkLeadingAvatar({ class: [props.ui?.linkLeadingAvatar, item.ui?.linkLeadingAvatar], active: item.active ?? index === items.length - 1 })"
60
+ data-part="linkLeadingAvatar"
61
+ />
44
62
  </slot>
45
63
 
46
- <span v-if="get(item, props.labelKey) || slots[`${item.slot || 'item'}-label`]" :class="style.linkLabel({ class: props.ui?.linkLabel })" data-part="link-label">
47
- <slot :name="`${item.slot || 'item'}-label`" :item="item" :active="index === items.length - 1" :index="index">
64
+ <span v-if="get(item, props.labelKey) || slots[`${item.slot || 'item'}-label`]" :class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })" data-part="linkLabel">
65
+ <slot :name="`${item.slot || 'item'}-label`" :item="item" :active="item.active ?? index === items.length - 1" :index="index">
48
66
  {{ get(item, props.labelKey) }}
49
67
  </slot>
50
68
  </span>
51
69
 
52
- <slot :name="`${item.slot || 'item'}-trailing`" :item="item" :active="index === items.length - 1" :index="index"></slot>
70
+ <slot :name="`${item.slot || 'item'}-trailing`" :item="item" :active="item.active ?? index === items.length - 1" :index="index"></slot>
53
71
  </slot>
54
72
  </LinkBase>
55
73
  </Link>
56
74
  </li>
57
75
 
58
- <li v-if="index < items.length - 1" role="presentation" aria-hidden="true" :class="style.separator({ class: props.ui?.separator })" data-part="separator">
59
- <slot name="separator">
60
- <span :class="style.separatorIcon({ class: [separatorIcon, props.ui?.separatorIcon] })" data-part="separator-icon"></span>
76
+ <li v-if="index < items.length - 1" role="presentation" aria-hidden="true" :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator] })" data-part="separator">
77
+ <slot name="separator" :ui="ui">
78
+ <Icon :name="separatorIcon" :class="ui.separatorIcon({ class: [props.ui?.separatorIcon, item.ui?.separatorIcon] })" data-part="separatorIcon" />
61
79
  </slot>
62
80
  </li>
63
81
  </template>
@@ -1,25 +1,16 @@
1
1
  import type { PrimitiveProps } from 'reka-ui';
2
- import type { breadcrumb } from '../theme/index.js';
3
- import type { ComponentAttrs, DynamicSlots, LinkProps } from '../types/index.js';
2
+ import theme from '#build/ui/breadcrumb';
3
+ import type { AvatarProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps, LinkProps } from '../types';
4
+ import type { DynamicSlots, GetItemKeys, StaticSlot } from '../types/utils';
4
5
  export interface BreadcrumbItem extends Omit<LinkProps, 'raw' | 'custom'> {
5
6
  label?: string;
6
- icon?: string;
7
+ icon?: IconProps['name'];
8
+ avatar?: AvatarProps;
7
9
  slot?: string;
10
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item' | 'link' | 'linkLeadingIcon' | 'linkLeadingAvatar' | 'linkLabel' | 'separator' | 'separatorIcon'>;
8
11
  [key: string]: any;
9
12
  }
10
- type SlotProps<T extends BreadcrumbItem> = (props: {
11
- item: T;
12
- index: number;
13
- active?: boolean;
14
- }) => any;
15
- export type BreadcrumbSlots<T extends BreadcrumbItem = BreadcrumbItem> = {
16
- 'item'?: SlotProps<T>;
17
- 'item-leading'?: SlotProps<T>;
18
- 'item-label'?: SlotProps<T>;
19
- 'item-trailing'?: SlotProps<T>;
20
- 'separator'?: any;
21
- } & DynamicSlots<T, 'leading' | 'label' | 'trailing', SlotProps<T>>;
22
- export interface BreadcrumbProps<T extends BreadcrumbItem = BreadcrumbItem> extends ComponentAttrs<typeof breadcrumb> {
13
+ export interface BreadcrumbProps<T extends BreadcrumbItem = BreadcrumbItem> extends ComponentBaseProps {
23
14
  /**
24
15
  * The element or component this component should render as.
25
16
  * @default "nav"
@@ -35,18 +26,54 @@ export interface BreadcrumbProps<T extends BreadcrumbItem = BreadcrumbItem> exte
35
26
  * The key used to get the label from the item.
36
27
  * @default "label"
37
28
  */
38
- labelKey?: string;
29
+ labelKey?: GetItemKeys<T>;
30
+ ui?: ComponentUIProps<typeof theme>;
39
31
  }
40
- declare const _default: <T extends BreadcrumbItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
41
- props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, never> & BreadcrumbProps<T> & Partial<{}>> & import("vue").PublicProps;
42
- expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
32
+ export type BreadcrumbSlots<T extends BreadcrumbItem = BreadcrumbItem> = {
33
+ 'item': StaticSlot<{
34
+ item: T;
35
+ index: number;
36
+ active: boolean;
37
+ ui: ComponentStyler<typeof theme>;
38
+ }>;
39
+ 'item-leading': StaticSlot<{
40
+ item: T;
41
+ index: number;
42
+ active: boolean;
43
+ ui: ComponentStyler<typeof theme>;
44
+ }>;
45
+ 'item-label': StaticSlot<{
46
+ item: T;
47
+ index: number;
48
+ active: boolean;
49
+ }>;
50
+ 'item-trailing': StaticSlot<{
51
+ item: T;
52
+ index: number;
53
+ active: boolean;
54
+ }>;
55
+ 'separator': StaticSlot<{
56
+ ui: ComponentStyler<typeof theme>;
57
+ }>;
58
+ } & DynamicSlots<T, 'label' | 'trailing', {
59
+ index: number;
60
+ active: boolean;
61
+ }> & DynamicSlots<T, 'leading', {
62
+ index: number;
63
+ active?: boolean;
64
+ ui: ComponentStyler<typeof theme>;
65
+ }>;
66
+ declare const __VLS_export: <T extends BreadcrumbItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
67
+ props: __VLS_PrettifyLocal<BreadcrumbProps<T>> & import("vue").PublicProps;
68
+ expose: (exposed: {}) => void;
43
69
  attrs: any;
44
70
  slots: BreadcrumbSlots<T>;
45
71
  emit: {};
46
72
  }>) => import("vue").VNode & {
47
73
  __ctx?: Awaited<typeof __VLS_setup>;
48
74
  };
75
+ declare const _default: typeof __VLS_export;
49
76
  export default _default;
50
77
  type __VLS_PrettifyLocal<T> = {
51
- [K in keyof T]: T[K];
78
+ [K in keyof T as K]: T[K];
52
79
  } & {};
@@ -1,42 +1,54 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/button";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { useForwardProps } from "reka-ui";
7
- import { computed } from "vue";
8
- import { useButtonGroup } from "../composables/useButtonGroup";
7
+ import { computed, shallowRef } from "vue";
8
+ import { useAppConfig } from "#imports";
9
9
  import { useComponentIcons } from "../composables/useComponentIcons";
10
- import { useTheme } from "../composables/useTheme";
10
+ import { useFieldGroup } from "../composables/useFieldGroup";
11
+ import { injectFormLoading } from "../composables/useFormField";
11
12
  import { omit, pickLinkProps } from "../utils";
13
+ import { cv, merge } from "../utils/style";
14
+ import Avatar from "./Avatar.vue";
15
+ import Icon from "./Icon.vue";
12
16
  import Link from "./Link.vue";
17
+ import LinkBase from "./LinkBase.vue";
13
18
  const props = defineProps({
14
- icon: { type: String, required: false },
19
+ icon: { type: [String, Object], required: false },
15
20
  label: { type: String, required: false },
16
- variant: { type: null, required: false, default: "solid" },
21
+ variant: { type: null, required: false },
22
+ activeVariant: { type: null, required: false },
17
23
  size: { type: null, required: false },
18
- loading: { type: Boolean, required: false },
19
- active: { type: Boolean, required: false },
20
- disabled: { type: Boolean, required: false },
21
- class: { type: null, required: false },
24
+ color: { type: null, required: false },
25
+ activeColor: { type: null, required: false },
26
+ square: { type: Boolean, required: false },
27
+ block: { type: Boolean, required: false },
28
+ loadingAuto: { type: Boolean, required: false },
29
+ onClick: { type: [Function, Array], required: false },
22
30
  ui: { type: null, required: false },
31
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
32
+ avatar: { type: Object, required: false },
23
33
  leading: { type: Boolean, required: false },
24
- leadingIcon: { type: String, required: false },
34
+ leadingIcon: { type: [String, Object], required: false },
25
35
  trailing: { type: Boolean, required: false },
26
- trailingIcon: { type: String, required: false },
27
- loadingIcon: { type: String, required: false },
36
+ trailingIcon: { type: [String, Object], required: false },
37
+ loading: { type: Boolean, required: false },
38
+ loadingIcon: { type: [String, Object], required: false },
28
39
  as: { type: null, required: false },
29
40
  type: { type: null, required: false },
41
+ disabled: { type: Boolean, required: false },
42
+ active: { type: Boolean, required: false },
30
43
  exact: { type: Boolean, required: false },
31
44
  exactQuery: { type: [Boolean, String], required: false },
32
45
  exactHash: { type: Boolean, required: false },
33
46
  inactiveClass: { type: String, required: false },
34
- disableClass: { type: String, required: false },
35
47
  to: { type: null, required: false },
36
48
  href: { type: null, required: false },
37
49
  external: { type: Boolean, required: false },
38
- target: { type: [String, Object, null], required: false },
39
- rel: { type: [String, Object, null], required: false },
50
+ target: { type: [String, Object], required: false },
51
+ rel: { type: [String, Object], required: false },
40
52
  noRel: { type: Boolean, required: false },
41
53
  prefetchedClass: { type: String, required: false },
42
54
  prefetch: { type: Boolean, required: false },
@@ -49,57 +61,106 @@ const props = defineProps({
49
61
  replace: { type: Boolean, required: false }
50
62
  });
51
63
  const slots = defineSlots();
52
- const { size, orientation } = useButtonGroup(props);
64
+ const linkProps = useForwardProps(pickLinkProps(props));
65
+ const loadingAutoState = shallowRef(false);
66
+ const formLoading = injectFormLoading();
67
+ async function onClickWrapper(event) {
68
+ loadingAutoState.value = true;
69
+ const callbacks = Array.isArray(props.onClick) ? props.onClick : [props.onClick];
70
+ try {
71
+ await Promise.all(callbacks.map((fn) => fn?.(event)));
72
+ } finally {
73
+ loadingAutoState.value = false;
74
+ }
75
+ }
76
+ const isLoading = computed(() => props.loading || props.loadingAuto && (loadingAutoState.value || formLoading?.value && props.type === "submit"));
77
+ const { size, orientation } = useFieldGroup(props);
53
78
  const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(
54
- computed(() => ({ ...props, loading: props.loading }))
79
+ computed(() => ({ ...props, loading: isLoading.value }))
55
80
  );
56
- const linkProps = useForwardProps(pickLinkProps(props));
57
- const { generateStyle } = useTheme();
58
- const style = computed(() => {
59
- return generateStyle("button", {
81
+ const appConfig = useAppConfig();
82
+ const ui = computed(() => {
83
+ const uiConfig = {
84
+ ...appConfig.ui.button,
85
+ variants: {
86
+ ...appConfig.ui.button?.variants,
87
+ active: {
88
+ true: {
89
+ base: [appConfig.ui.button?.variants?.active?.true?.base, props.activeClass].filter(Boolean).join(" ")
90
+ },
91
+ false: {
92
+ base: [appConfig.ui.button?.variants?.active?.false?.base, props.inactiveClass].filter(Boolean).join(" ")
93
+ }
94
+ }
95
+ }
96
+ };
97
+ const styler = cv(merge(theme, uiConfig));
98
+ return styler({
60
99
  ...props,
100
+ loading: isLoading.value,
61
101
  size: size.value,
62
- groupOrientation: orientation.value,
102
+ fieldGroup: orientation.value,
103
+ block: props.block,
104
+ square: props.square || !slots.default && !props.label,
63
105
  leading: isLeading.value,
64
- trailing: isTrailing.value,
65
- class: [
66
- props.class,
67
- props.active ? props.activeClass : props.inactiveClass,
68
- props.disabled ? props.disableClass : void 0
69
- ]
106
+ trailing: isTrailing.value
70
107
  });
71
108
  });
72
109
  </script>
73
110
 
74
111
  <template>
75
112
  <Link
76
- :class="style.base({ class: [props.class, props.ui?.base] })"
113
+ v-slot="{ active, ...slotProps }"
77
114
  :type="props.type"
78
115
  :disabled="props.disabled || props.loading"
79
- v-bind="omit(linkProps, ['type', 'disabled', 'activeClass', 'inactiveClass', 'disableClass'])"
116
+ v-bind="omit(linkProps, ['type', 'disabled', 'onClick'])"
80
117
  data-part="base"
81
- raw
118
+ custom
82
119
  >
83
- <slot name="leading">
84
- <span
85
- v-if="isLeading && leadingIconName"
86
- :class="style.leadingIcon({ class: [leadingIconName, props.ui?.leadingIcon] })"
87
- data-part="leading-icon"
88
- ></span>
89
- </slot>
90
- <span
91
- v-if="props.label || slots.default"
92
- :class="style.label({ class: props.ui?.label })"
93
- data-part="label"
120
+ <LinkBase
121
+ v-bind="slotProps"
122
+ :class="ui.base({
123
+ class: [props.ui?.base, props.class],
124
+ active,
125
+ ...props.active && props.activeVariant ? { variant: props.activeVariant } : {},
126
+ ...props.active && props.activeColor ? { color: props.activeColor } : {}
127
+ })"
128
+ @click="onClickWrapper"
94
129
  >
95
- <slot>{{ label }}</slot>
96
- </span>
97
- <slot name="trailing">
98
- <span
99
- v-if="isTrailing && trailingIconName"
100
- :class="style.trailingIcon({ class: [trailingIconName, props.ui?.trailingIcon] })"
101
- data-part="trailing-icon"
102
- ></span>
103
- </slot>
130
+ <slot name="leading" :ui="ui">
131
+ <Icon
132
+ v-if="isLeading && leadingIconName"
133
+ :name="leadingIconName"
134
+ :class="ui.leadingIcon({ class: props.ui?.leadingIcon, active })"
135
+ data-part="leadingIcon"
136
+ />
137
+ <Avatar
138
+ v-else-if="props.avatar"
139
+ :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
140
+ v-bind="props.avatar"
141
+ :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar, active })"
142
+ data-part="leadingAvatar"
143
+ />
144
+ </slot>
145
+
146
+ <slot :ui="ui">
147
+ <span
148
+ v-if="props.label"
149
+ :class="ui.label({ class: props.ui?.label, active })"
150
+ data-part="label"
151
+ >
152
+ {{ label }}
153
+ </span>
154
+ </slot>
155
+
156
+ <slot name="trailing" :ui="ui">
157
+ <Icon
158
+ v-if="isTrailing && trailingIconName"
159
+ :name="trailingIconName"
160
+ :class="ui.trailingIcon({ class: props.ui?.trailingIcon, active })"
161
+ data-part="trailingIcon"
162
+ />
163
+ </slot>
164
+ </LinkBase>
104
165
  </Link>
105
166
  </template>