@byyuurin/ui 0.0.11 → 0.1.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 (289) 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 +48 -39
  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 +80 -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/Chip.vue +35 -32
  30. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  31. package/dist/runtime/components/Collapsible.vue +13 -9
  32. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  33. package/dist/runtime/components/Drawer.vue +80 -70
  34. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  35. package/dist/runtime/components/DropdownMenu.vue +23 -16
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  37. package/dist/runtime/components/DropdownMenuContent.vue +133 -103
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  39. package/dist/runtime/components/FieldGroup.vue +33 -0
  40. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  41. package/dist/runtime/components/Form.vue +172 -88
  42. package/dist/runtime/components/Form.vue.d.ts +69 -44
  43. package/dist/runtime/components/FormField.vue +108 -0
  44. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  45. package/dist/runtime/components/Icon.vue +20 -0
  46. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  47. package/dist/runtime/components/Input.vue +82 -77
  48. package/dist/runtime/components/Input.vue.d.ts +55 -43
  49. package/dist/runtime/components/InputNumber.vue +65 -49
  50. package/dist/runtime/components/InputNumber.vue.d.ts +51 -105
  51. package/dist/runtime/components/Kbd.vue +11 -5
  52. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  53. package/dist/runtime/components/Link.vue +54 -197
  54. package/dist/runtime/components/Link.vue.d.ts +17 -17
  55. package/dist/runtime/components/LinkBase.vue +11 -33
  56. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  57. package/dist/runtime/components/Modal.vue +53 -39
  58. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  59. package/dist/runtime/components/NavigationMenu.vue +336 -0
  60. package/dist/runtime/components/NavigationMenu.vue.d.ts +181 -0
  61. package/dist/runtime/components/OverlayProvider.vue +3 -3
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  63. package/dist/runtime/components/Pagination.vue +39 -47
  64. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  65. package/dist/runtime/components/PinInput.vue +46 -32
  66. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  67. package/dist/runtime/components/Popover.vue +33 -19
  68. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  69. package/dist/runtime/components/Progress.vue +31 -26
  70. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  71. package/dist/runtime/components/RadioGroup.vue +75 -48
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  73. package/dist/runtime/components/ScrollArea.vue +33 -31
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  75. package/dist/runtime/components/Select.vue +166 -76
  76. package/dist/runtime/components/Select.vue.d.ts +206 -65
  77. package/dist/runtime/components/Separator.vue +42 -16
  78. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  79. package/dist/runtime/components/Skeleton.vue +18 -6
  80. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  81. package/dist/runtime/components/Slider.vue +42 -24
  82. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  83. package/dist/runtime/components/Switch.vue +40 -31
  84. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  85. package/dist/runtime/components/Table.vue +279 -51
  86. package/dist/runtime/components/Table.vue.d.ts +151 -65
  87. package/dist/runtime/components/Tabs.vue +70 -23
  88. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  89. package/dist/runtime/components/Textarea.vue +102 -54
  90. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  91. package/dist/runtime/components/Toast.vue +84 -38
  92. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  93. package/dist/runtime/components/ToastProvider.vue +31 -22
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  95. package/dist/runtime/components/Tooltip.vue +33 -21
  96. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  97. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  98. package/dist/runtime/composables/defineShortcuts.js +129 -0
  99. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  100. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  101. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  102. package/dist/runtime/composables/useComponentIcons.js +4 -4
  103. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  104. package/dist/runtime/composables/useFieldGroup.js +14 -0
  105. package/dist/runtime/composables/useFormField.d.ts +62 -0
  106. package/dist/runtime/composables/useFormField.js +99 -0
  107. package/dist/runtime/composables/useKbd.d.ts +3 -2
  108. package/dist/runtime/composables/useKbd.js +3 -2
  109. package/dist/runtime/composables/useLocale.d.ts +68 -5
  110. package/dist/runtime/composables/useLocale.js +11 -11
  111. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  112. package/dist/runtime/composables/useOverlay.js +44 -30
  113. package/dist/runtime/composables/usePortal.d.ts +6 -0
  114. package/dist/runtime/composables/usePortal.js +17 -0
  115. package/dist/runtime/composables/useToast.d.ts +12 -5
  116. package/dist/runtime/composables/useToast.js +12 -7
  117. package/dist/runtime/locale/en.d.ts +30 -1
  118. package/dist/runtime/locale/en.js +2 -1
  119. package/dist/runtime/locale/index.d.ts +2 -2
  120. package/dist/runtime/locale/index.js +1 -1
  121. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  122. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  123. package/dist/runtime/plugins/colors.d.ts +2 -0
  124. package/dist/runtime/plugins/colors.js +50 -0
  125. package/dist/runtime/types/app.config.d.ts +6 -0
  126. package/dist/runtime/types/form.d.ts +58 -17
  127. package/dist/runtime/types/form.js +11 -0
  128. package/dist/runtime/types/index.d.ts +51 -8
  129. package/dist/runtime/types/index.js +45 -2
  130. package/dist/runtime/types/input.d.ts +8 -0
  131. package/dist/runtime/types/locale.d.ts +5 -0
  132. package/dist/runtime/types/style.d.ts +33 -0
  133. package/dist/runtime/types/style.js +0 -0
  134. package/dist/runtime/types/unocss.d.ts +4 -0
  135. package/dist/runtime/types/utils.d.ts +38 -37
  136. package/dist/runtime/utils/form.d.ts +5 -1
  137. package/dist/runtime/utils/form.js +49 -0
  138. package/dist/runtime/utils/index.d.ts +10 -13
  139. package/dist/runtime/utils/index.js +41 -48
  140. package/dist/runtime/utils/link.d.ts +3 -2
  141. package/dist/runtime/utils/link.js +16 -2
  142. package/dist/runtime/utils/locale.d.ts +5 -0
  143. package/dist/runtime/utils/locale.js +10 -0
  144. package/dist/runtime/utils/style.d.ts +94 -0
  145. package/dist/runtime/utils/style.js +37 -0
  146. package/dist/runtime/vue/components/Icon.vue +15 -0
  147. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  148. package/dist/runtime/vue/components/Link.vue +163 -0
  149. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  150. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  151. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  152. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  153. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  154. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  155. package/dist/runtime/vue/plugins/head.js +9 -0
  156. package/dist/runtime/vue/stubs.d.ts +16 -1
  157. package/dist/runtime/vue/stubs.js +32 -1
  158. package/dist/setup.d.mts +13 -0
  159. package/dist/setup.mjs +12 -0
  160. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  161. package/dist/shared/ui.DSyJHSTk.mjs +3787 -0
  162. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  163. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  164. package/dist/types.d.mts +3 -1
  165. package/dist/unocss.d.mts +12 -52
  166. package/dist/unocss.mjs +144 -254
  167. package/dist/unplugin.d.mts +13 -26
  168. package/dist/unplugin.mjs +193 -18
  169. package/dist/vite.d.mts +10 -1
  170. package/dist/vite.mjs +12 -3
  171. package/package.json +154 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.d.ts +0 -13
  174. package/dist/module.mjs.map +0 -1
  175. package/dist/runtime/app/injections.d.ts +0 -9331
  176. package/dist/runtime/app/injections.js +0 -61
  177. package/dist/runtime/components/ButtonGroup.vue +0 -26
  178. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  179. package/dist/runtime/components/FormItem.vue +0 -90
  180. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  181. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  182. package/dist/runtime/composables/useButtonGroup.js +0 -9
  183. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  184. package/dist/runtime/composables/useFormItem.js +0 -64
  185. package/dist/runtime/composables/useTheme.d.ts +0 -9
  186. package/dist/runtime/composables/useTheme.js +0 -23
  187. package/dist/runtime/index.d.ts +0 -44
  188. package/dist/runtime/index.js +0 -44
  189. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  190. package/dist/runtime/theme/accordion.d.ts +0 -50
  191. package/dist/runtime/theme/accordion.js +0 -28
  192. package/dist/runtime/theme/alert.d.ts +0 -119
  193. package/dist/runtime/theme/alert.js +0 -47
  194. package/dist/runtime/theme/app.d.ts +0 -19
  195. package/dist/runtime/theme/app.js +0 -19
  196. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  197. package/dist/runtime/theme/avatar-group.js +0 -32
  198. package/dist/runtime/theme/avatar.d.ts +0 -50
  199. package/dist/runtime/theme/avatar.js +0 -34
  200. package/dist/runtime/theme/badge.d.ts +0 -76
  201. package/dist/runtime/theme/badge.js +0 -92
  202. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  203. package/dist/runtime/theme/breadcrumb.js +0 -44
  204. package/dist/runtime/theme/button-group.d.ts +0 -60
  205. package/dist/runtime/theme/button-group.js +0 -42
  206. package/dist/runtime/theme/button.d.ts +0 -184
  207. package/dist/runtime/theme/button.js +0 -164
  208. package/dist/runtime/theme/calendar.d.ts +0 -58
  209. package/dist/runtime/theme/calendar.js +0 -86
  210. package/dist/runtime/theme/card.d.ts +0 -56
  211. package/dist/runtime/theme/card.js +0 -37
  212. package/dist/runtime/theme/carousel.d.ts +0 -107
  213. package/dist/runtime/theme/carousel.js +0 -43
  214. package/dist/runtime/theme/checkbox.d.ts +0 -82
  215. package/dist/runtime/theme/checkbox.js +0 -54
  216. package/dist/runtime/theme/chip.d.ts +0 -61
  217. package/dist/runtime/theme/chip.js +0 -66
  218. package/dist/runtime/theme/collapsible.d.ts +0 -32
  219. package/dist/runtime/theme/collapsible.js +0 -10
  220. package/dist/runtime/theme/drawer.d.ts +0 -142
  221. package/dist/runtime/theme/drawer.js +0 -113
  222. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  223. package/dist/runtime/theme/dropdown-menu.js +0 -83
  224. package/dist/runtime/theme/form-item.d.ts +0 -70
  225. package/dist/runtime/theme/form-item.js +0 -34
  226. package/dist/runtime/theme/form.d.ts +0 -2
  227. package/dist/runtime/theme/form.js +0 -7
  228. package/dist/runtime/theme/index.d.ts +0 -41
  229. package/dist/runtime/theme/index.js +0 -41
  230. package/dist/runtime/theme/input-number.d.ts +0 -115
  231. package/dist/runtime/theme/input-number.js +0 -95
  232. package/dist/runtime/theme/input.d.ts +0 -172
  233. package/dist/runtime/theme/input.js +0 -151
  234. package/dist/runtime/theme/kbd.d.ts +0 -33
  235. package/dist/runtime/theme/kbd.js +0 -26
  236. package/dist/runtime/theme/link.d.ts +0 -38
  237. package/dist/runtime/theme/link.js +0 -26
  238. package/dist/runtime/theme/modal.d.ts +0 -42
  239. package/dist/runtime/theme/modal.js +0 -55
  240. package/dist/runtime/theme/pagination.d.ts +0 -74
  241. package/dist/runtime/theme/pagination.js +0 -17
  242. package/dist/runtime/theme/pinInput.d.ts +0 -94
  243. package/dist/runtime/theme/pinInput.js +0 -111
  244. package/dist/runtime/theme/popover.d.ts +0 -32
  245. package/dist/runtime/theme/popover.js +0 -13
  246. package/dist/runtime/theme/progress.d.ts +0 -180
  247. package/dist/runtime/theme/progress.js +0 -95
  248. package/dist/runtime/theme/radio-group.d.ts +0 -104
  249. package/dist/runtime/theme/radio-group.js +0 -61
  250. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  251. package/dist/runtime/theme/scroll-area.js +0 -33
  252. package/dist/runtime/theme/select.d.ts +0 -186
  253. package/dist/runtime/theme/select.js +0 -173
  254. package/dist/runtime/theme/separator.d.ts +0 -74
  255. package/dist/runtime/theme/separator.js +0 -53
  256. package/dist/runtime/theme/skeleton.d.ts +0 -2
  257. package/dist/runtime/theme/skeleton.js +0 -7
  258. package/dist/runtime/theme/slider.d.ts +0 -70
  259. package/dist/runtime/theme/slider.js +0 -52
  260. package/dist/runtime/theme/switch.d.ts +0 -116
  261. package/dist/runtime/theme/switch.js +0 -78
  262. package/dist/runtime/theme/table.d.ts +0 -86
  263. package/dist/runtime/theme/table.js +0 -36
  264. package/dist/runtime/theme/tabs.d.ts +0 -129
  265. package/dist/runtime/theme/tabs.js +0 -146
  266. package/dist/runtime/theme/textarea.d.ts +0 -90
  267. package/dist/runtime/theme/textarea.js +0 -116
  268. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  269. package/dist/runtime/theme/toast-provider.js +0 -97
  270. package/dist/runtime/theme/toast.d.ts +0 -83
  271. package/dist/runtime/theme/toast.js +0 -35
  272. package/dist/runtime/theme/tooltip.d.ts +0 -38
  273. package/dist/runtime/theme/tooltip.js +0 -11
  274. package/dist/runtime/types/components.d.ts +0 -42
  275. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  276. package/dist/runtime/utils/extend-theme.js +0 -27
  277. package/dist/runtime/utils/styler.d.ts +0 -4
  278. package/dist/runtime/utils/styler.js +0 -10
  279. package/dist/runtime/utils/translator.d.ts +0 -18
  280. package/dist/runtime/utils/translator.js +0 -8
  281. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  282. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  283. package/dist/unocss.d.ts +0 -52
  284. package/dist/unocss.mjs.map +0 -1
  285. package/dist/unplugin.d.ts +0 -26
  286. package/dist/unplugin.mjs.map +0 -1
  287. package/dist/vite.d.ts +0 -9
  288. package/dist/vite.mjs.map +0 -1
  289. /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 (): {