@byyuurin/ui 0.0.10 → 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 +48 -72
  6. package/dist/runtime/components/Accordion.vue.d.ts +74 -0
  7. package/dist/runtime/components/Alert.vue +65 -83
  8. package/dist/runtime/components/Alert.vue.d.ts +71 -0
  9. package/dist/runtime/components/App.vue +28 -42
  10. package/dist/runtime/components/App.vue.d.ts +26 -0
  11. package/dist/runtime/components/Avatar.vue +82 -58
  12. package/dist/runtime/components/Avatar.vue.d.ts +39 -0
  13. package/dist/runtime/components/AvatarGroup.vue +43 -70
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +30 -0
  15. package/dist/runtime/components/Badge.vue +70 -64
  16. package/dist/runtime/components/Badge.vue.d.ts +45 -0
  17. package/dist/runtime/components/Breadcrumb.vue +56 -76
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +79 -0
  19. package/dist/runtime/components/Button.vue +150 -78
  20. package/dist/runtime/components/Button.vue.d.ts +45 -0
  21. package/dist/runtime/components/Calendar.vue +99 -125
  22. package/dist/runtime/components/Calendar.vue.d.ts +102 -0
  23. package/dist/runtime/components/Card.vue +33 -46
  24. package/dist/runtime/components/Card.vue.d.ts +34 -0
  25. package/dist/runtime/components/Carousel.vue +164 -237
  26. package/dist/runtime/components/Carousel.vue.d.ts +125 -0
  27. package/dist/runtime/components/Checkbox.vue +86 -88
  28. package/dist/runtime/components/Checkbox.vue.d.ts +63 -0
  29. package/dist/runtime/components/Chip.vue +44 -58
  30. package/dist/runtime/components/Chip.vue.d.ts +48 -0
  31. package/dist/runtime/components/Collapsible.vue +29 -33
  32. package/dist/runtime/components/Collapsible.vue.d.ts +34 -0
  33. package/dist/runtime/components/Drawer.vue +110 -150
  34. package/dist/runtime/components/Drawer.vue.d.ts +103 -0
  35. package/dist/runtime/components/DropdownMenu.vue +49 -120
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +140 -0
  37. package/dist/runtime/components/DropdownMenuContent.vue +177 -143
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +51 -0
  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 +245 -275
  42. package/dist/runtime/components/Form.vue.d.ts +103 -0
  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 +125 -156
  48. package/dist/runtime/components/Input.vue.d.ts +76 -0
  49. package/dist/runtime/components/InputNumber.vue +103 -130
  50. package/dist/runtime/components/InputNumber.vue.d.ts +191 -0
  51. package/dist/runtime/components/Kbd.vue +24 -39
  52. package/dist/runtime/components/Kbd.vue.d.ts +34 -0
  53. package/dist/runtime/components/Link.vue +105 -337
  54. package/dist/runtime/components/Link.vue.d.ts +95 -0
  55. package/dist/runtime/components/LinkBase.vue +31 -71
  56. package/dist/runtime/components/LinkBase.vue.d.ts +33 -0
  57. package/dist/runtime/components/Modal.vue +82 -103
  58. package/dist/runtime/components/Modal.vue.d.ts +96 -0
  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 +12 -16
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +3 -0
  63. package/dist/runtime/components/Pagination.vue +65 -139
  64. package/dist/runtime/components/Pagination.vue.d.ts +116 -0
  65. package/dist/runtime/components/PinInput.vue +78 -73
  66. package/dist/runtime/components/PinInput.vue.d.ts +54 -0
  67. package/dist/runtime/components/Popover.vue +60 -75
  68. package/dist/runtime/components/Popover.vue.d.ts +70 -0
  69. package/dist/runtime/components/Progress.vue +79 -126
  70. package/dist/runtime/components/Progress.vue.d.ts +63 -0
  71. package/dist/runtime/components/RadioGroup.vue +109 -140
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +96 -0
  73. package/dist/runtime/components/ScrollArea.vue +50 -48
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +21 -0
  75. package/dist/runtime/components/Select.vue +221 -221
  76. package/dist/runtime/components/Select.vue.d.ts +260 -0
  77. package/dist/runtime/components/Separator.vue +55 -47
  78. package/dist/runtime/components/Separator.vue.d.ts +48 -0
  79. package/dist/runtime/components/Skeleton.vue +25 -22
  80. package/dist/runtime/components/Skeleton.vue.d.ts +19 -0
  81. package/dist/runtime/components/Slider.vue +73 -77
  82. package/dist/runtime/components/Slider.vue.d.ts +52 -0
  83. package/dist/runtime/components/Switch.vue +66 -77
  84. package/dist/runtime/components/Switch.vue.d.ts +58 -0
  85. package/dist/runtime/components/Table.vue +357 -215
  86. package/dist/runtime/components/Table.vue.d.ts +234 -0
  87. package/dist/runtime/components/Tabs.vue +90 -88
  88. package/dist/runtime/components/Tabs.vue.d.ts +97 -0
  89. package/dist/runtime/components/Textarea.vue +147 -146
  90. package/dist/runtime/components/Textarea.vue.d.ts +76 -0
  91. package/dist/runtime/components/Toast.vue +108 -90
  92. package/dist/runtime/components/Toast.vue.d.ts +152 -0
  93. package/dist/runtime/components/ToastProvider.vue +82 -109
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +51 -0
  95. package/dist/runtime/components/Tooltip.vue +54 -53
  96. package/dist/runtime/components/Tooltip.vue.d.ts +53 -0
  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 +5 -6
  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 -253
  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 +156 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.cjs +0 -5
  174. package/dist/module.d.ts +0 -13
  175. package/dist/module.mjs.map +0 -1
  176. package/dist/runtime/app/injections.d.ts +0 -9307
  177. package/dist/runtime/app/injections.js +0 -61
  178. package/dist/runtime/components/ButtonGroup.vue +0 -46
  179. package/dist/runtime/components/FormItem.vue +0 -129
  180. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  181. package/dist/runtime/composables/useButtonGroup.js +0 -9
  182. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  183. package/dist/runtime/composables/useFormItem.js +0 -64
  184. package/dist/runtime/composables/useTheme.d.ts +0 -9
  185. package/dist/runtime/composables/useTheme.js +0 -23
  186. package/dist/runtime/index.d.ts +0 -44
  187. package/dist/runtime/index.js +0 -44
  188. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  189. package/dist/runtime/theme/accordion.d.ts +0 -56
  190. package/dist/runtime/theme/accordion.js +0 -28
  191. package/dist/runtime/theme/alert.d.ts +0 -125
  192. package/dist/runtime/theme/alert.js +0 -47
  193. package/dist/runtime/theme/app.d.ts +0 -19
  194. package/dist/runtime/theme/app.js +0 -19
  195. package/dist/runtime/theme/avatar-group.d.ts +0 -52
  196. package/dist/runtime/theme/avatar-group.js +0 -32
  197. package/dist/runtime/theme/avatar.d.ts +0 -56
  198. package/dist/runtime/theme/avatar.js +0 -34
  199. package/dist/runtime/theme/badge.d.ts +0 -82
  200. package/dist/runtime/theme/badge.js +0 -92
  201. package/dist/runtime/theme/breadcrumb.d.ts +0 -67
  202. package/dist/runtime/theme/breadcrumb.js +0 -44
  203. package/dist/runtime/theme/button-group.d.ts +0 -66
  204. package/dist/runtime/theme/button-group.js +0 -42
  205. package/dist/runtime/theme/button.d.ts +0 -190
  206. package/dist/runtime/theme/button.js +0 -164
  207. package/dist/runtime/theme/calendar.d.ts +0 -56
  208. package/dist/runtime/theme/calendar.js +0 -69
  209. package/dist/runtime/theme/card.d.ts +0 -62
  210. package/dist/runtime/theme/card.js +0 -37
  211. package/dist/runtime/theme/carousel.d.ts +0 -113
  212. package/dist/runtime/theme/carousel.js +0 -43
  213. package/dist/runtime/theme/checkbox.d.ts +0 -88
  214. package/dist/runtime/theme/checkbox.js +0 -54
  215. package/dist/runtime/theme/chip.d.ts +0 -67
  216. package/dist/runtime/theme/chip.js +0 -66
  217. package/dist/runtime/theme/collapsible.d.ts +0 -38
  218. package/dist/runtime/theme/collapsible.js +0 -10
  219. package/dist/runtime/theme/drawer.d.ts +0 -148
  220. package/dist/runtime/theme/drawer.js +0 -113
  221. package/dist/runtime/theme/dropdown-menu.d.ts +0 -71
  222. package/dist/runtime/theme/dropdown-menu.js +0 -83
  223. package/dist/runtime/theme/form-item.d.ts +0 -76
  224. package/dist/runtime/theme/form-item.js +0 -34
  225. package/dist/runtime/theme/form.d.ts +0 -8
  226. package/dist/runtime/theme/form.js +0 -7
  227. package/dist/runtime/theme/index.d.ts +0 -41
  228. package/dist/runtime/theme/index.js +0 -41
  229. package/dist/runtime/theme/input-number.d.ts +0 -121
  230. package/dist/runtime/theme/input-number.js +0 -95
  231. package/dist/runtime/theme/input.d.ts +0 -178
  232. package/dist/runtime/theme/input.js +0 -151
  233. package/dist/runtime/theme/kbd.d.ts +0 -39
  234. package/dist/runtime/theme/kbd.js +0 -26
  235. package/dist/runtime/theme/link.d.ts +0 -44
  236. package/dist/runtime/theme/link.js +0 -26
  237. package/dist/runtime/theme/modal.d.ts +0 -48
  238. package/dist/runtime/theme/modal.js +0 -55
  239. package/dist/runtime/theme/pagination.d.ts +0 -80
  240. package/dist/runtime/theme/pagination.js +0 -17
  241. package/dist/runtime/theme/pinInput.d.ts +0 -100
  242. package/dist/runtime/theme/pinInput.js +0 -111
  243. package/dist/runtime/theme/popover.d.ts +0 -38
  244. package/dist/runtime/theme/popover.js +0 -13
  245. package/dist/runtime/theme/progress.d.ts +0 -186
  246. package/dist/runtime/theme/progress.js +0 -95
  247. package/dist/runtime/theme/radio-group.d.ts +0 -110
  248. package/dist/runtime/theme/radio-group.js +0 -61
  249. package/dist/runtime/theme/scroll-area.d.ts +0 -73
  250. package/dist/runtime/theme/scroll-area.js +0 -33
  251. package/dist/runtime/theme/select.d.ts +0 -192
  252. package/dist/runtime/theme/select.js +0 -173
  253. package/dist/runtime/theme/separator.d.ts +0 -80
  254. package/dist/runtime/theme/separator.js +0 -53
  255. package/dist/runtime/theme/skeleton.d.ts +0 -8
  256. package/dist/runtime/theme/skeleton.js +0 -7
  257. package/dist/runtime/theme/slider.d.ts +0 -76
  258. package/dist/runtime/theme/slider.js +0 -52
  259. package/dist/runtime/theme/switch.d.ts +0 -122
  260. package/dist/runtime/theme/switch.js +0 -78
  261. package/dist/runtime/theme/table.d.ts +0 -92
  262. package/dist/runtime/theme/table.js +0 -36
  263. package/dist/runtime/theme/tabs.d.ts +0 -135
  264. package/dist/runtime/theme/tabs.js +0 -146
  265. package/dist/runtime/theme/textarea.d.ts +0 -96
  266. package/dist/runtime/theme/textarea.js +0 -116
  267. package/dist/runtime/theme/toast-provider.d.ts +0 -122
  268. package/dist/runtime/theme/toast-provider.js +0 -97
  269. package/dist/runtime/theme/toast.d.ts +0 -89
  270. package/dist/runtime/theme/toast.js +0 -35
  271. package/dist/runtime/theme/tooltip.d.ts +0 -44
  272. package/dist/runtime/theme/tooltip.js +0 -11
  273. package/dist/runtime/types/components.d.ts +0 -42
  274. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  275. package/dist/runtime/utils/extend-theme.js +0 -27
  276. package/dist/runtime/utils/styler.d.ts +0 -4
  277. package/dist/runtime/utils/styler.js +0 -10
  278. package/dist/runtime/utils/translator.d.ts +0 -18
  279. package/dist/runtime/utils/translator.js +0 -8
  280. package/dist/shared/ui.3e7fad19.mjs +0 -5
  281. package/dist/shared/ui.3e7fad19.mjs.map +0 -1
  282. package/dist/types.d.ts +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,121 +1,103 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { PrimitiveProps } from 'reka-ui'
4
- import type { alert } from '../theme'
5
- import type { ButtonProps, ComponentAttrs } from '../types'
6
-
7
- export interface AlertEmits {
8
- 'update:open': [value: boolean]
9
- }
10
-
11
- export interface AlertSlots {
12
- leading?: (props?: {}) => any
13
- title?: (props?: {}) => any
14
- description?: (props?: {}) => any
15
- actions?: (props?: {}) => any
16
- close?: (props: { ui: ComponentAttrs<typeof alert>['ui'] }) => any
17
- }
18
-
19
- type AlertVariants = VariantProps<typeof alert>
20
-
21
- export interface AlertProps extends ComponentAttrs<typeof alert> {
22
- /**
23
- * The element or component this component should render as.
24
- * @default "div"
25
- */
26
- as?: PrimitiveProps['as']
27
- title?: string
28
- description?: string
29
- icon?: string
30
- variant?: AlertVariants['variant']
31
- orientation?: AlertVariants['orientation']
32
- /**
33
- * Display a list of actions:
34
- * - under the title and description when orientation is `vertical`
35
- * - next to the close button when orientation is `horizontal`
36
- */
37
- actions?: ButtonProps[]
38
- /**
39
- * Display a close button to dismiss the alert.
40
- * @default false
41
- */
42
- close?: ButtonProps | boolean
43
- /**
44
- * The icon displayed in the close button.
45
- * @default app.icons.close
46
- */
47
- closeIcon?: string
48
- }
1
+ <script>
2
+ import theme from "#build/ui/alert";
49
3
  </script>
50
4
 
51
- <script setup lang="ts">
52
- import { Primitive } from 'reka-ui'
53
- import { computed } from 'vue'
54
- import { useLocale } from '../composables/useLocale'
55
- import { useTheme } from '../composables/useTheme'
56
- import Button from './Button.vue'
57
-
58
- const props = withDefaults(defineProps<AlertProps>(), {
59
- variant: 'solid',
60
- orientation: 'vertical',
61
- })
62
-
63
- const emit = defineEmits<AlertEmits>()
64
- const slots = defineSlots<AlertSlots>()
65
-
66
- const { t } = useLocale()
67
- const { theme, generateStyle } = useTheme()
68
- const style = computed(() => generateStyle('alert', {
69
- ...props,
70
- title: !!props.title || !!slots.title,
71
- }))
5
+ <script setup>
6
+ import { Primitive } from "reka-ui";
7
+ import { computed } from "vue";
8
+ import { useAppConfig } from "#imports";
9
+ import { useLocale } from "../composables/useLocale";
10
+ import { cv, merge } from "../utils/style";
11
+ import Avatar from "./Avatar.vue";
12
+ import Button from "./Button.vue";
13
+ import Icon from "./Icon.vue";
14
+ const props = defineProps({
15
+ as: { type: null, required: false },
16
+ title: { type: String, required: false },
17
+ description: { type: String, required: false },
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 },
22
+ orientation: { type: null, required: false, default: "vertical" },
23
+ actions: { type: Array, 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 }
28
+ });
29
+ const emit = defineEmits(["update:open"]);
30
+ const slots = defineSlots();
31
+ const { t } = useLocale();
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
+ });
72
40
  </script>
73
41
 
74
42
  <template>
75
43
  <Primitive
76
44
  :as="props.as"
45
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
77
46
  :data-orientation="props.orientation"
78
- :class="style.root({ class: [props.class, props.ui?.root] })"
47
+ data-part="root"
79
48
  >
80
- <slot name="leading">
81
- <span v-if="props.icon" :class="style.icon({ class: [props.icon, props.ui?.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
+ />
82
63
  </slot>
83
64
 
84
- <div :class="style.wrapper({ class: props.ui?.wrapper })">
85
- <div v-if="props.title || slots.title" :class="style.title({ class: props.ui?.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">
86
67
  <slot name="title">
87
68
  {{ props.title }}
88
69
  </slot>
89
70
  </div>
90
- <div v-if="props.description || slots.description" :class="style.description({ class: props.ui?.description })">
71
+ <div v-if="props.description || slots.description" :class="ui.description({ class: props.ui?.description })" data-part="description">
91
72
  <slot name="description">
92
73
  {{ props.description }}
93
74
  </slot>
94
75
  </div>
95
76
 
96
- <div v-if="props.orientation === 'vertical' && props.actions?.length" :class="style.actions({ class: props.ui?.actions })">
77
+ <div v-if="props.orientation === 'vertical' && (props.actions?.length || slots.actions)" :class="ui.actions({ class: props.ui?.actions })" data-part="actions">
97
78
  <slot name="actions">
98
79
  <Button v-for="(action, index) in props.actions" :key="index" size="xs" v-bind="action" />
99
80
  </slot>
100
81
  </div>
101
82
  </div>
102
83
 
103
- <div v-if="(props.orientation === 'horizontal' && props.actions?.length) || props.close" :class="style.actions({ class: props.ui?.actions, orientation: 'horizontal' })">
104
- <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)">
105
86
  <slot name="actions">
106
87
  <Button v-for="(action, index) in props.actions" :key="index" size="xs" v-bind="action" />
107
88
  </slot>
108
89
  </template>
109
90
 
110
- <slot name="close" :ui="props.ui">
91
+ <slot name="close" :ui="ui">
111
92
  <Button
112
93
  v-if="props.close"
113
- :icon="props.closeIcon || theme.app.icons.close"
114
- size="md"
94
+ :icon="props.closeIcon || appConfig.ui.icons.close"
95
+ color="neutral"
115
96
  variant="link"
116
97
  :aria-label="t('alert.close')"
117
- v-bind="typeof props.close === 'object' ? props.close : undefined"
118
- :class="style.close({ class: props.ui?.close })"
98
+ v-bind="typeof props.close === 'object' ? props.close : {}"
99
+ :class="ui.close({ class: props.ui?.close })"
100
+ data-part="close"
119
101
  @click="emit('update:open', false)"
120
102
  />
121
103
  </slot>
@@ -0,0 +1,71 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { PrimitiveProps } from 'reka-ui';
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 {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @default "div"
11
+ */
12
+ as?: PrimitiveProps['as'];
13
+ title?: string;
14
+ description?: string;
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'];
26
+ /**
27
+ * Display a list of actions:
28
+ * - under the title and description when orientation is `vertical`
29
+ * - next to the close button when orientation is `horizontal`
30
+ */
31
+ actions?: ButtonProps[];
32
+ /**
33
+ * Display a close button to dismiss the alert.
34
+ * @default false
35
+ */
36
+ close?: boolean | Partial<ButtonProps>;
37
+ /**
38
+ * The icon displayed in the close button.
39
+ * @default app.icons.close
40
+ */
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
+ }>;
57
+ }
58
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<AlertProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
59
+ "update:open": (open: boolean) => any;
60
+ }, string, import("vue").PublicProps, Readonly<AlertProps> & Readonly<{
61
+ "onUpdate:open"?: ((open: boolean) => any) | undefined;
62
+ }>, {
63
+ orientation: "horizontal" | "vertical";
64
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, AlertSlots>;
65
+ declare const _default: typeof __VLS_export;
66
+ export default _default;
67
+ type __VLS_WithSlots<T, S> = T & {
68
+ new (): {
69
+ $slots: S;
70
+ };
71
+ };
@@ -1,56 +1,42 @@
1
- <script lang="ts">
2
- import type { UserConfig } from '@unocss/core'
3
- import type { ConfigProviderProps, TooltipProviderProps } from 'reka-ui'
4
- import type { Messages, ThemeExtension, ToastProviderProps } from '../types'
5
- import type { Locale } from '../utils'
1
+ <script>
6
2
 
7
- export interface AppSlots {
8
- default: (props?: {}) => any
9
- }
10
-
11
- export interface AppProps extends Omit<ConfigProviderProps, 'useId' | 'dir' | 'locale'> {
12
- unoConfig?: UserConfig
13
- ui?: ThemeExtension
14
- toaster?: ToastProviderProps
15
- tooltip?: TooltipProviderProps
16
- locale?: Locale<Messages>
17
- }
18
3
  </script>
19
4
 
20
- <script setup lang="ts">
21
- import { reactivePick } from '@vueuse/core'
22
- import { ConfigProvider, TooltipProvider, useForwardProps } from 'reka-ui'
23
- import { toRef, useId } from 'vue'
24
- import { provideLocaleContext, provideThemeExtension, provideUnoConfig } from '../app/injections'
25
- import OverlayProvider from './OverlayProvider.vue'
26
- import ToastProvider from './ToastProvider.vue'
27
-
28
- const props = withDefaults(defineProps<AppProps>(), {
29
- unoConfig: () => ({}),
30
- ui: () => ({}),
31
- })
32
-
33
- defineSlots<AppSlots>()
34
-
35
- const configProviderProps = useForwardProps(reactivePick(props, 'scrollBody'))
36
- const tooltipProps = toRef(() => props.tooltip)
37
- const toastProviderProps = toRef(() => props.toaster)
38
-
39
- provideUnoConfig(() => props.unoConfig)
40
- provideThemeExtension(() => props.ui)
41
-
42
- const locale = toRef(() => props.locale)
43
- provideLocaleContext(locale)
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { ConfigProvider, TooltipProvider, useForwardProps } from "reka-ui";
8
+ import { toRef, useId } from "vue";
9
+ import { provideLocaleContext } from "../composables/useLocale";
10
+ import { providePortalTarget } from "../composables/usePortal";
11
+ import OverlayProvider from "./OverlayProvider.vue";
12
+ import ToastProvider from "./ToastProvider.vue";
13
+ const props = defineProps({
14
+ toaster: { type: null, required: false },
15
+ tooltip: { type: Object, required: false },
16
+ locale: { type: Object, required: false },
17
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: "body" },
18
+ scrollBody: { type: [Boolean, Object], required: false },
19
+ nonce: { type: String, required: false }
20
+ });
21
+ defineSlots();
22
+ const configProviderProps = useForwardProps(reactivePick(props, "scrollBody"));
23
+ const tooltipProps = toRef(() => props.tooltip);
24
+ const toastProviderProps = toRef(() => props.toaster);
25
+ const locale = toRef(() => props.locale);
26
+ provideLocaleContext(locale);
27
+ const portal = toRef(() => props.portal);
28
+ providePortalTarget(portal);
44
29
  </script>
45
30
 
46
31
  <template>
47
- <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">
48
33
  <TooltipProvider v-bind="tooltipProps">
49
34
  <ToastProvider v-if="props.toaster !== null" v-bind="toastProviderProps">
50
35
  <slot></slot>
51
36
  </ToastProvider>
52
37
  <slot v-else></slot>
38
+
39
+ <OverlayProvider />
53
40
  </TooltipProvider>
54
- <OverlayProvider />
55
41
  </ConfigProvider>
56
42
  </template>
@@ -0,0 +1,26 @@
1
+ import type { ConfigProviderProps, TooltipProviderProps } from 'reka-ui';
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>;
6
+ tooltip?: TooltipProviderProps;
7
+ locale?: Locale<T>;
8
+ portal?: boolean | string | HTMLElement;
9
+ }
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>;
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,70 +1,94 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { AvatarRootProps } from 'reka-ui'
4
- import type { avatar } from '../theme'
5
- import type { ComponentAttrs } from '../types'
6
-
7
- export interface AvatarSlots {
8
- default?: (props?: {}) => any
9
- }
10
-
11
- type AvatarVariants = VariantProps<typeof avatar>
12
-
13
- export interface AvatarProps extends ComponentAttrs<typeof avatar> {
14
- /**
15
- * The element or component this component should render as.
16
- * @default "span"
17
- */
18
- as?: AvatarRootProps['as']
19
- src?: string
20
- alt?: string
21
- icon?: string
22
- text?: string
23
- size?: AvatarVariants['size']
24
- style?: string | HTMLElement['style']
25
- }
1
+ <script>
2
+ import theme from "#build/ui/avatar";
26
3
  </script>
27
4
 
28
- <script setup lang="ts">
29
- import { AvatarFallback, AvatarImage, AvatarRoot } from 'reka-ui'
30
- import { computed, shallowRef, watch } from 'vue'
31
- import { useAvatarGroup } from '../composables/useAvatarGroup'
32
- import { useTheme } from '../composables/useTheme'
33
-
34
- defineOptions({ inheritAttrs: false })
35
-
36
- const props = withDefaults(defineProps<AvatarProps>(), {
37
- src: '',
38
- })
39
-
40
- const { size } = useAvatarGroup(props)
41
- const fallback = computed(() => props.text || (props.alt || '').split(' ').map((word) => word.charAt(0)).join('').slice(0, 2))
42
-
43
- const { generateStyle } = useTheme()
44
- const style = computed(() => generateStyle('avatar', {
45
- ...props,
46
- size: size.value,
47
- }))
48
-
49
- const error = shallowRef(false)
50
-
5
+ <script setup>
6
+ import { defu } from "defu";
7
+ import { Primitive } from "reka-ui";
8
+ import { computed, shallowRef, watch } from "vue";
9
+ import ImageComponent from "#build/ui-image-component";
10
+ import { useAppConfig } from "#imports";
11
+ import { useAvatarGroup } from "../composables/useAvatarGroup";
12
+ import { cv, merge } from "../utils/style";
13
+ import Chip from "./Chip.vue";
14
+ import Icon from "./Icon.vue";
15
+ defineOptions({ inheritAttrs: false });
16
+ const props = defineProps({
17
+ as: { type: null, required: false },
18
+ src: { type: String, required: false },
19
+ alt: { type: String, required: false },
20
+ icon: { type: [String, Object], required: false },
21
+ text: { type: String, required: false },
22
+ size: { type: null, required: false },
23
+ chip: { type: [Boolean, Object], required: false },
24
+ style: { 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" });
32
+ });
33
+ const fallback = computed(() => props.text || (props.alt || "").split(" ").map((word) => word.charAt(0)).join("").slice(0, 2));
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"]);
54
+ const error = shallowRef(false);
51
55
  watch(() => props.src, () => {
52
56
  if (error.value)
53
- error.value = false
54
- })
57
+ error.value = false;
58
+ });
59
+ function onError() {
60
+ error.value = true;
61
+ }
55
62
  </script>
56
63
 
57
64
  <template>
58
- <AvatarRoot :as="props.as" :class="style.root({ class: [props.class, props.ui?.root] })" :style="props.style">
59
- <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"
60
76
  :src="props.src"
61
77
  :alt="props.alt"
62
- :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 })"
82
+ data-part="image"
83
+ @error="onError"
63
84
  />
64
85
 
65
- <AvatarFallback as-child>
66
- <span v-if="props.icon" :class="style.icon({ class: [props.icon, props.ui?.icon] })"></span>
67
- <span v-else :class="style.fallback({ class: props.ui?.fallback })">{{ fallback || '&nbsp;' }}</span>
68
- </AvatarFallback>
69
- </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>
70
94
  </template>
@@ -0,0 +1,39 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
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'];
10
+ }
11
+ export interface AvatarProps extends ComponentBaseProps {
12
+ /**
13
+ * The element or component this component should render as.
14
+ * @default "span"
15
+ */
16
+ as?: PrimitiveProps['as'] | InnerAs;
17
+ src?: string;
18
+ alt?: string;
19
+ icon?: IconProps['name'];
20
+ text?: string;
21
+ /** @default "md" */
22
+ size?: ThemeVariants['size'];
23
+ chip?: boolean | ChipProps;
24
+ style?: string | HTMLElement['style'];
25
+ ui?: ComponentUIProps<typeof theme>;
26
+ }
27
+ export interface AvatarSlots {
28
+ default: StaticSlot;
29
+ }
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;
34
+ export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };