@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,82 +1,102 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/alert";
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
+ import { cv, merge } from "../utils/style";
11
+ import Avatar from "./Avatar.vue";
10
12
  import Button from "./Button.vue";
13
+ import Icon from "./Icon.vue";
11
14
  const props = defineProps({
12
15
  as: { type: null, required: false },
13
16
  title: { type: String, required: false },
14
17
  description: { type: String, required: false },
15
- icon: { type: String, required: false },
16
- variant: { type: null, required: false, default: "solid" },
18
+ icon: { type: [String, Object], required: false },
19
+ avatar: { type: Object, required: false },
20
+ color: { type: null, required: false },
21
+ variant: { type: null, required: false },
17
22
  orientation: { type: null, required: false, default: "vertical" },
18
23
  actions: { type: Array, required: false },
19
- close: { type: [Object, Boolean], required: false },
20
- closeIcon: { type: String, required: false },
21
- class: { type: null, required: false },
22
- ui: { type: null, required: false }
24
+ close: { type: [Boolean, Object], required: false },
25
+ closeIcon: { type: [String, Object], required: false },
26
+ ui: { type: null, required: false },
27
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
23
28
  });
24
29
  const emit = defineEmits(["update:open"]);
25
30
  const slots = defineSlots();
26
31
  const { t } = useLocale();
27
- const { theme, generateStyle } = useTheme();
28
- const style = computed(() => generateStyle("alert", {
29
- ...props,
30
- title: !!props.title || !!slots.title
31
- }));
32
+ const appConfig = useAppConfig();
33
+ const ui = computed(() => {
34
+ const styler = cv(merge(theme, appConfig.ui.alert));
35
+ return styler({
36
+ ...props,
37
+ title: !!props.title || !!slots.title
38
+ });
39
+ });
32
40
  </script>
33
41
 
34
42
  <template>
35
43
  <Primitive
36
44
  :as="props.as"
37
- :class="style.root({ class: [props.class, props.ui?.root] })"
45
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
38
46
  :data-orientation="props.orientation"
39
47
  data-part="root"
40
48
  >
41
- <slot name="leading">
42
- <span v-if="props.icon" :class="style.icon({ class: [props.icon, props.ui?.icon] })" data-part="icon"></span>
49
+ <slot name="leading" :ui="ui">
50
+ <Avatar
51
+ v-if="props.avatar"
52
+ :size="props.ui?.avatarSize || ui.avatarSize()"
53
+ v-bind="props.avatar"
54
+ :class="ui.avatar({ class: props.ui?.avatar })"
55
+ data-part="avatar"
56
+ />
57
+ <Icon
58
+ v-else-if="props.icon"
59
+ :name="props.icon"
60
+ :class="ui.icon({ class: props.ui?.icon })"
61
+ data-part="icon"
62
+ />
43
63
  </slot>
44
64
 
45
- <div :class="style.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
46
- <div v-if="props.title || slots.title" :class="style.title({ class: props.ui?.title })" data-part="title">
65
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
66
+ <div v-if="props.title || slots.title" :class="ui.title({ class: props.ui?.title })" data-part="title">
47
67
  <slot name="title">
48
68
  {{ props.title }}
49
69
  </slot>
50
70
  </div>
51
- <div v-if="props.description || slots.description" :class="style.description({ class: props.ui?.description })" data-part="description">
71
+ <div v-if="props.description || slots.description" :class="ui.description({ class: props.ui?.description })" data-part="description">
52
72
  <slot name="description">
53
73
  {{ props.description }}
54
74
  </slot>
55
75
  </div>
56
76
 
57
- <div v-if="props.orientation === 'vertical' && props.actions?.length" :class="style.actions({ class: props.ui?.actions })" data-part="actions">
77
+ <div v-if="props.orientation === 'vertical' && (props.actions?.length || slots.actions)" :class="ui.actions({ class: props.ui?.actions })" data-part="actions">
58
78
  <slot name="actions">
59
79
  <Button v-for="(action, index) in props.actions" :key="index" size="xs" v-bind="action" />
60
80
  </slot>
61
81
  </div>
62
82
  </div>
63
83
 
64
- <div v-if="props.orientation === 'horizontal' && props.actions?.length || props.close" :class="style.actions({ class: props.ui?.actions, orientation: 'horizontal' })" data-part="actions">
65
- <template v-if="props.orientation === 'horizontal' && props.actions?.length">
84
+ <div v-if="props.orientation === 'horizontal' && (props.actions?.length || slots.actions) || props.close" :class="ui.actions({ class: props.ui?.actions, orientation: 'horizontal' })" data-part="actions">
85
+ <template v-if="props.orientation === 'horizontal' && (props.actions?.length || slots.actions)">
66
86
  <slot name="actions">
67
87
  <Button v-for="(action, index) in props.actions" :key="index" size="xs" v-bind="action" />
68
88
  </slot>
69
89
  </template>
70
90
 
71
- <slot name="close" :ui="props.ui">
91
+ <slot name="close" :ui="ui">
72
92
  <Button
73
93
  v-if="props.close"
74
- :icon="props.closeIcon || theme.app.icons.close"
75
- size="md"
94
+ :icon="props.closeIcon || appConfig.ui.icons.close"
95
+ color="neutral"
76
96
  variant="link"
77
97
  :aria-label="t('alert.close')"
78
- v-bind="typeof props.close === 'object' ? props.close : void 0"
79
- :class="style.close({ class: props.ui?.close })"
98
+ v-bind="typeof props.close === 'object' ? props.close : {}"
99
+ :class="ui.close({ class: props.ui?.close })"
80
100
  data-part="close"
81
101
  @click="emit('update:open', false)"
82
102
  />
@@ -1,21 +1,10 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps } from 'reka-ui';
3
- import type { alert } from '../theme/index.js';
4
- import type { ButtonProps, ComponentAttrs } from '../types/index.js';
5
- export interface AlertEmits {
6
- 'update:open': [value: boolean];
7
- }
8
- export interface AlertSlots {
9
- leading?: (props?: {}) => any;
10
- title?: (props?: {}) => any;
11
- description?: (props?: {}) => any;
12
- actions?: (props?: {}) => any;
13
- close?: (props: {
14
- ui: ComponentAttrs<typeof alert>['ui'];
15
- }) => any;
16
- }
17
- type AlertVariants = VariantProps<typeof alert>;
18
- export interface AlertProps extends ComponentAttrs<typeof alert> {
3
+ import theme from '#build/ui/alert';
4
+ import type { AvatarProps, ButtonProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface AlertProps extends ComponentBaseProps {
19
8
  /**
20
9
  * The element or component this component should render as.
21
10
  * @default "div"
@@ -23,9 +12,17 @@ export interface AlertProps extends ComponentAttrs<typeof alert> {
23
12
  as?: PrimitiveProps['as'];
24
13
  title?: string;
25
14
  description?: string;
26
- icon?: string;
27
- variant?: AlertVariants['variant'];
28
- orientation?: AlertVariants['orientation'];
15
+ icon?: IconProps['name'];
16
+ avatar?: AvatarProps;
17
+ /** @default "primary" */
18
+ color?: ThemeVariants['color'];
19
+ /** @default "solid" */
20
+ variant?: ThemeVariants['variant'];
21
+ /**
22
+ * The orientation between the content and the actions.
23
+ * @default "vertical"
24
+ */
25
+ orientation?: ThemeVariants['orientation'];
29
26
  /**
30
27
  * Display a list of actions:
31
28
  * - under the title and description when orientation is `vertical`
@@ -36,21 +33,36 @@ export interface AlertProps extends ComponentAttrs<typeof alert> {
36
33
  * Display a close button to dismiss the alert.
37
34
  * @default false
38
35
  */
39
- close?: ButtonProps | boolean;
36
+ close?: boolean | Partial<ButtonProps>;
40
37
  /**
41
38
  * The icon displayed in the close button.
42
39
  * @default app.icons.close
43
40
  */
44
- closeIcon?: string;
41
+ closeIcon?: IconProps['name'];
42
+ ui?: ComponentUIProps<typeof theme>;
43
+ }
44
+ export interface AlertEmits {
45
+ 'update:open': [open: boolean];
46
+ }
47
+ export interface AlertSlots {
48
+ leading: StaticSlot<{
49
+ ui: ComponentStyler<typeof theme>;
50
+ }>;
51
+ title: StaticSlot;
52
+ description: StaticSlot;
53
+ actions: StaticSlot;
54
+ close: StaticSlot<{
55
+ ui: ComponentStyler<typeof theme>;
56
+ }>;
45
57
  }
46
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<AlertProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
47
- "update:open": (value: boolean) => any;
58
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<AlertProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
59
+ "update:open": (open: boolean) => any;
48
60
  }, string, import("vue").PublicProps, Readonly<AlertProps> & Readonly<{
49
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
61
+ "onUpdate:open"?: ((open: boolean) => any) | undefined;
50
62
  }>, {
51
- variant: "solid" | "outline" | "soft" | "soft-outline";
52
63
  orientation: "horizontal" | "vertical";
53
64
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, AlertSlots>;
65
+ declare const _default: typeof __VLS_export;
54
66
  export default _default;
55
67
  type __VLS_WithSlots<T, S> = T & {
56
68
  new (): {
@@ -6,15 +6,15 @@
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { ConfigProvider, TooltipProvider, useForwardProps } from "reka-ui";
8
8
  import { toRef, useId } from "vue";
9
- import { provideLocaleContext, provideThemeExtension, provideUnoConfig } from "../app/injections";
9
+ import { provideLocaleContext } from "../composables/useLocale";
10
+ import { providePortalTarget } from "../composables/usePortal";
10
11
  import OverlayProvider from "./OverlayProvider.vue";
11
12
  import ToastProvider from "./ToastProvider.vue";
12
13
  const props = defineProps({
13
- unoConfig: { type: Object, required: false, default: () => ({}) },
14
- ui: { type: null, required: false, default: () => ({}) },
15
- toaster: { type: Object, required: false },
14
+ toaster: { type: null, required: false },
16
15
  tooltip: { type: Object, required: false },
17
16
  locale: { type: Object, required: false },
17
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: "body" },
18
18
  scrollBody: { type: [Boolean, Object], required: false },
19
19
  nonce: { type: String, required: false }
20
20
  });
@@ -22,20 +22,21 @@ defineSlots();
22
22
  const configProviderProps = useForwardProps(reactivePick(props, "scrollBody"));
23
23
  const tooltipProps = toRef(() => props.tooltip);
24
24
  const toastProviderProps = toRef(() => props.toaster);
25
- provideUnoConfig(() => props.unoConfig);
26
- provideThemeExtension(() => props.ui);
27
25
  const locale = toRef(() => props.locale);
28
26
  provideLocaleContext(locale);
27
+ const portal = toRef(() => props.portal);
28
+ providePortalTarget(portal);
29
29
  </script>
30
30
 
31
31
  <template>
32
- <ConfigProvider :use-id="useId" :dir="locale?.dir" :locale="locale?.code" v-bind="configProviderProps">
32
+ <ConfigProvider :use-id="() => useId()" :dir="locale?.dir" :locale="locale?.code" v-bind="configProviderProps">
33
33
  <TooltipProvider v-bind="tooltipProps">
34
34
  <ToastProvider v-if="props.toaster !== null" v-bind="toastProviderProps">
35
35
  <slot></slot>
36
36
  </ToastProvider>
37
37
  <slot v-else></slot>
38
+
39
+ <OverlayProvider />
38
40
  </TooltipProvider>
39
- <OverlayProvider />
40
41
  </ConfigProvider>
41
42
  </template>
@@ -1,24 +1,26 @@
1
- import type { UserConfig } from '@unocss/core';
2
1
  import type { ConfigProviderProps, TooltipProviderProps } from 'reka-ui';
3
- import type { Messages, ThemeExtension, ToastProviderProps } from '../types/index.js';
4
- import type { Locale } from '../utils/index.js';
5
- export interface AppSlots {
6
- default: (props?: {}) => any;
7
- }
8
- export interface AppProps extends Omit<ConfigProviderProps, 'useId' | 'dir' | 'locale'> {
9
- unoConfig?: UserConfig;
10
- ui?: ThemeExtension;
11
- toaster?: ToastProviderProps;
2
+ import type { Locale, Messages, ToastProviderProps } from '../types';
3
+ import type { MaybeNull, StaticSlot } from '../types/utils';
4
+ export interface AppProps<T extends Messages = Messages> extends Omit<ConfigProviderProps, 'useId' | 'dir' | 'locale'> {
5
+ toaster?: MaybeNull<ToastProviderProps>;
12
6
  tooltip?: TooltipProviderProps;
13
- locale?: Locale<Messages>;
7
+ locale?: Locale<T>;
8
+ portal?: boolean | string | HTMLElement;
14
9
  }
15
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<AppProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<AppProps> & Readonly<{}>, {
16
- ui: ThemeExtension;
17
- unoConfig: UserConfig;
18
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, AppSlots>;
19
- export default _default;
20
- type __VLS_WithSlots<T, S> = T & {
21
- new (): {
22
- $slots: S;
23
- };
10
+ export interface AppSlots {
11
+ default: StaticSlot;
12
+ }
13
+ declare const __VLS_export: <T extends Messages>(__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<{
14
+ props: __VLS_PrettifyLocal<AppProps<T>> & import("vue").PublicProps;
15
+ expose: (exposed: {}) => void;
16
+ attrs: any;
17
+ slots: AppSlots;
18
+ emit: {};
19
+ }>) => import("vue").VNode & {
20
+ __ctx?: Awaited<typeof __VLS_setup>;
24
21
  };
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
24
+ type __VLS_PrettifyLocal<T> = {
25
+ [K in keyof T as K]: T[K];
26
+ } & {};
@@ -1,50 +1,94 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/avatar";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { AvatarFallback, AvatarImage, AvatarRoot } from "reka-ui";
6
+ import { defu } from "defu";
7
+ import { Primitive } from "reka-ui";
7
8
  import { computed, shallowRef, watch } from "vue";
9
+ import ImageComponent from "#build/ui-image-component";
10
+ import { useAppConfig } from "#imports";
8
11
  import { useAvatarGroup } from "../composables/useAvatarGroup";
9
- import { useTheme } from "../composables/useTheme";
12
+ import { cv, merge } from "../utils/style";
13
+ import Chip from "./Chip.vue";
14
+ import Icon from "./Icon.vue";
10
15
  defineOptions({ inheritAttrs: false });
11
16
  const props = defineProps({
12
17
  as: { type: null, required: false },
13
- src: { type: String, required: false, default: "" },
18
+ src: { type: String, required: false },
14
19
  alt: { type: String, required: false },
15
- icon: { type: String, required: false },
20
+ icon: { type: [String, Object], required: false },
16
21
  text: { type: String, required: false },
17
22
  size: { type: null, required: false },
23
+ chip: { type: [Boolean, Object], required: false },
18
24
  style: { type: null, required: false },
19
- class: { type: null, required: false },
20
- ui: { type: null, required: false }
25
+ ui: { type: null, required: false },
26
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
27
+ });
28
+ const as = computed(() => {
29
+ if (typeof props.as === "string" || props.as && "render" in props.as && typeof props.as.render === "function")
30
+ return { root: props.as };
31
+ return defu(props.as, { root: "span" });
21
32
  });
22
- const { size } = useAvatarGroup(props);
23
33
  const fallback = computed(() => props.text || (props.alt || "").split(" ").map((word) => word.charAt(0)).join("").slice(0, 2));
24
- const { generateStyle } = useTheme();
25
- const style = computed(() => generateStyle("avatar", {
26
- ...props,
27
- size: size.value
28
- }));
34
+ const { size } = useAvatarGroup(props);
35
+ const appConfig = useAppConfig();
36
+ const ui = computed(() => {
37
+ const styler = cv(merge(theme, appConfig.ui.avatar));
38
+ return styler({
39
+ ...props,
40
+ size: size.value
41
+ });
42
+ });
43
+ const sizePx = computed(() => ({
44
+ "3xs": 16,
45
+ "2xs": 20,
46
+ "xs": 24,
47
+ "sm": 28,
48
+ "md": 32,
49
+ "lg": 36,
50
+ "xl": 40,
51
+ "2xl": 44,
52
+ "3xl": 48
53
+ })[props.size || "md"]);
29
54
  const error = shallowRef(false);
30
55
  watch(() => props.src, () => {
31
56
  if (error.value)
32
57
  error.value = false;
33
58
  });
59
+ function onError() {
60
+ error.value = true;
61
+ }
34
62
  </script>
35
63
 
36
64
  <template>
37
- <AvatarRoot :as="props.as" :class="style.root({ class: [props.class, props.ui?.root] })" :data-part="$attrs['data-part'] ?? 'root'" :style="props.style">
38
- <AvatarImage
65
+ <component
66
+ :is="props.chip ? Chip : Primitive"
67
+ :as="as.root"
68
+ v-bind="props.chip ? typeof props.chip === 'object' ? { inset: true, ...props.chip } : { inset: true } : {}"
69
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
70
+ data-part="root"
71
+ :style="props.style"
72
+ >
73
+ <component
74
+ :is="as.img || ImageComponent"
75
+ v-if="props.src && !error"
39
76
  :src="props.src"
40
77
  :alt="props.alt"
41
- :class="style.image({ class: props.ui?.image })"
78
+ :width="sizePx"
79
+ :height="sizePx"
80
+ v-bind="$attrs"
81
+ :class="ui.image({ class: props.ui?.image })"
42
82
  data-part="image"
83
+ @error="onError"
43
84
  />
44
85
 
45
- <AvatarFallback as-child>
46
- <span v-if="props.icon" :class="style.icon({ class: [props.icon, props.ui?.icon] })" data-part="icon"></span>
47
- <span v-else :class="style.fallback({ class: props.ui?.fallback })" data-part="fallback">{{ fallback || "\xA0" }}</span>
48
- </AvatarFallback>
49
- </AvatarRoot>
86
+ <slot v-else v-bind="$attrs">
87
+ <Icon v-if="props.icon" :name="props.icon" :class="ui.icon({ class: props.ui?.icon })" data-part="icon" />
88
+ <span v-else :class="ui.fallback({ class: props.ui?.fallback })" data-part="fallback">
89
+ <template v-if="fallback">{{ fallback }}</template>
90
+ <template v-else>&nbsp;</template>
91
+ </span>
92
+ </slot>
93
+ </component>
50
94
  </template>
@@ -1,25 +1,39 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
- import type { AvatarRootProps } from 'reka-ui';
3
- import type { avatar } from '../theme/index.js';
4
- import type { ComponentAttrs } from '../types/index.js';
5
- export interface AvatarSlots {
6
- default?: (props?: {}) => any;
2
+ import type { PrimitiveProps } from 'reka-ui';
3
+ import theme from '#build/ui/avatar';
4
+ import type { ChipProps, ComponentBaseProps, ComponentUIProps, IconProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ interface InnerAs {
8
+ root?: PrimitiveProps['as'];
9
+ img?: PrimitiveProps['as'];
7
10
  }
8
- type AvatarVariants = VariantProps<typeof avatar>;
9
- export interface AvatarProps extends ComponentAttrs<typeof avatar> {
11
+ export interface AvatarProps extends ComponentBaseProps {
10
12
  /**
11
13
  * The element or component this component should render as.
12
14
  * @default "span"
13
15
  */
14
- as?: AvatarRootProps['as'];
16
+ as?: PrimitiveProps['as'] | InnerAs;
15
17
  src?: string;
16
18
  alt?: string;
17
- icon?: string;
19
+ icon?: IconProps['name'];
18
20
  text?: string;
19
- size?: AvatarVariants['size'];
21
+ /** @default "md" */
22
+ size?: ThemeVariants['size'];
23
+ chip?: boolean | ChipProps;
20
24
  style?: string | HTMLElement['style'];
25
+ ui?: ComponentUIProps<typeof theme>;
26
+ }
27
+ export interface AvatarSlots {
28
+ default: StaticSlot;
21
29
  }
22
- declare const _default: import("vue").DefineComponent<AvatarProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<AvatarProps> & Readonly<{}>, {
23
- src: string;
24
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<AvatarProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<AvatarProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
31
+ default?: (props: {}) => any;
32
+ }>;
33
+ declare const _default: typeof __VLS_export;
25
34
  export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };
@@ -1,19 +1,20 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/avatar-group";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { Primitive } from "reka-ui";
7
7
  import { computed } from "vue";
8
- import { provideAvatarGroup } from "../app/injections";
9
- import { useTheme } from "../composables/useTheme";
8
+ import { useAppConfig } from "#imports";
9
+ import { provideAvatarGroup } from "../composables/useAvatarGroup";
10
+ import { cv, merge } from "../utils/style";
10
11
  import Avatar from "./Avatar.vue";
11
12
  const props = defineProps({
12
13
  as: { type: null, required: false },
13
14
  size: { type: null, required: false },
14
15
  max: { type: [Number, String], required: false },
15
- class: { type: null, required: false },
16
- ui: { type: null, required: false }
16
+ ui: { type: null, required: false },
17
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
17
18
  });
18
19
  const slots = defineSlots();
19
20
  const max = computed(() => typeof props.max === "string" ? Number.parseInt(props.max, 10) : props.max);
@@ -43,14 +44,17 @@ const hiddenCount = computed(() => {
43
44
  return 0;
44
45
  return children.value.length - visibleAvatars.value.length;
45
46
  });
46
- const { generateStyle } = useTheme();
47
- const style = computed(() => generateStyle("avatarGroup", props));
47
+ const appConfig = useAppConfig();
48
+ const ui = computed(() => {
49
+ const styler = cv(merge(theme, appConfig.ui.avatarGroup));
50
+ return styler(props);
51
+ });
48
52
  provideAvatarGroup(computed(() => props));
49
53
  </script>
50
54
 
51
55
  <template>
52
- <Primitive :as="props.as" :class="style.root({ class: [props.class, props.ui?.root] })" data-part="root">
53
- <Avatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" :class="style.base({ class: props.ui?.base })" data-part="base" />
54
- <component :is="avatar" v-for="(avatar, index) in visibleAvatars" :key="index" :class="style.base({ class: props.ui?.base })" data-part="base" />
56
+ <Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
57
+ <Avatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" :class="ui.base({ class: props.ui?.base })" data-part="base" />
58
+ <component :is="avatar" v-for="(avatar, index) in visibleAvatars" :key="index" :class="ui.base({ class: props.ui?.base })" data-part="base" />
55
59
  </Primitive>
56
60
  </template>
@@ -1,24 +1,27 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps } from 'reka-ui';
3
- import type { avatarGroup } from '../theme/index.js';
4
- import type { ComponentAttrs } from '../types/index.js';
5
- export interface AvatarGroupSlots {
6
- default?: (props?: {}) => any;
7
- }
8
- type AvatarGroupVariants = VariantProps<typeof avatarGroup>;
9
- export interface AvatarGroupProps extends ComponentAttrs<typeof avatarGroup> {
3
+ import theme from '#build/ui/avatar-group';
4
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface AvatarGroupProps extends ComponentBaseProps {
10
8
  /**
11
9
  * The element or component this component should render as.
12
10
  * @default "div"
13
11
  */
14
12
  as?: PrimitiveProps['as'];
15
- size?: AvatarGroupVariants['size'];
13
+ size?: ThemeVariants['size'];
16
14
  /**
17
15
  * The maximum number of avatars to display.
18
16
  */
19
17
  max?: number | string;
18
+ ui?: ComponentUIProps<typeof theme>;
19
+ }
20
+ export interface AvatarGroupSlots {
21
+ default: StaticSlot;
20
22
  }
21
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<AvatarGroupProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<AvatarGroupProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, AvatarGroupSlots>;
23
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<AvatarGroupProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<AvatarGroupProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, AvatarGroupSlots>;
24
+ declare const _default: typeof __VLS_export;
22
25
  export default _default;
23
26
  type __VLS_WithSlots<T, S> = T & {
24
27
  new (): {