@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,174 +1,134 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { DialogContentEmits, DialogContentProps, DialogRootEmits, DialogRootProps } from 'reka-ui'
4
- import type { drawer } from '../theme'
5
- import type { ButtonProps, ComponentAttrs, EmitsToProps } from '../types'
6
-
7
- export interface DrawerEmits extends DialogRootEmits {
8
- 'after-leave': []
9
- }
10
-
11
- export interface DrawerSlots {
12
- default?: any
13
- content?: any
14
- header?: any
15
- title?: any
16
- description?: any
17
- close?: (props: { ui: ComponentAttrs<typeof drawer>['ui'] }) => any
18
- body?: any
19
- footer?: any
20
- }
21
-
22
- type DrawerVariants = VariantProps<typeof drawer>
23
-
24
- export interface DrawerProps extends ComponentAttrs<typeof drawer>, DialogRootProps {
25
- title?: string
26
- description?: string
27
- /** The content of the drawer. */
28
- content?: Omit<DialogContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DialogContentEmits>>
29
- /**
30
- * Render an overlay behind the drawer.
31
- * @default true
32
- */
33
- overlay?: boolean
34
- /** @default true */
35
- transition?: boolean
36
- /**
37
- * The direction of the drawer.
38
- * @default "bottom"
39
- */
40
- direction?: DrawerVariants['direction']
41
- /**
42
- * Whether to inset the drawer from the edges.
43
- */
44
- inset?: boolean
45
- /**
46
- * Render the drawer in a portal.
47
- * @default true
48
- */
49
- portal?: boolean
50
- /**
51
- * Display a close button to dismiss the drawer.
52
- * @default true
53
- */
54
- close?: ButtonProps | boolean
55
- /** @default app.icons.close */
56
- closeIcon?: string
57
- /**
58
- * When `false`, the drawer will not close when clicking outside or pressing escape.
59
- * @default true
60
- */
61
- dismissible?: boolean
62
- }
1
+ <script>
2
+ import theme from "#build/ui/drawer";
63
3
  </script>
64
4
 
65
- <script setup lang="ts">
66
- import { reactivePick } from '@vueuse/core'
67
- import { DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, useForwardPropsEmits, VisuallyHidden } from 'reka-ui'
68
- import { computed, toRef } from 'vue'
69
- import { useLocale } from '../composables/useLocale'
70
- import { useTheme } from '../composables/useTheme'
71
- import Button from './Button.vue'
72
-
73
- const props = withDefaults(defineProps<DrawerProps>(), {
74
- direction: 'bottom',
75
- modal: true,
76
- portal: true,
77
- overlay: true,
78
- transition: true,
79
- dismissible: true,
80
- close: true,
81
- })
82
- const emit = defineEmits<DrawerEmits>()
83
- const slots = defineSlots<DrawerSlots>()
84
-
85
- const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'modal'), emit)
86
- const contentProps = toRef(() => ({
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, useForwardPropsEmits, VisuallyHidden } from "reka-ui";
8
+ import { computed, toRef } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useLocale } from "../composables/useLocale";
11
+ import { usePortal } from "../composables/usePortal";
12
+ import { cv, merge } from "../utils/style";
13
+ import Button from "./Button.vue";
14
+ const props = defineProps({
15
+ title: { type: String, required: false },
16
+ description: { type: String, required: false },
17
+ content: { type: Object, required: false },
18
+ overlay: { type: Boolean, required: false, default: true },
19
+ transition: { type: Boolean, required: false, default: true },
20
+ direction: { type: null, required: false, default: "bottom" },
21
+ inset: { type: Boolean, required: false },
22
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
23
+ close: { type: [Boolean, Object], required: false, default: true },
24
+ closeIcon: { type: [String, Object], required: false },
25
+ dismissible: { type: Boolean, required: false, default: true },
26
+ ui: { type: null, required: false },
27
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
28
+ open: { type: Boolean, required: false },
29
+ defaultOpen: { type: Boolean, required: false },
30
+ modal: { type: Boolean, required: false, default: true }
31
+ });
32
+ const emit = defineEmits(["after-leave", "after-enter", "close-prevent", "update:open"]);
33
+ const slots = defineSlots();
34
+ const rootProps = useForwardPropsEmits(reactivePick(props, "open", "defaultOpen", "modal"), emit);
35
+ const portalProps = usePortal(toRef(() => props.portal));
36
+ const contentProps = computed(() => ({
87
37
  ...props.content,
88
- ...(slots.content || slots.header || (!props.description && !slots.description)) ? { 'aria-describedby': undefined } : {},
89
- }))
38
+ ...!!slots.content || !!slots.header || !props.description && !slots.description ? { "aria-describedby": void 0 } : {}
39
+ }));
90
40
  const contentEvents = computed(() => {
91
41
  if (props.dismissible)
92
- return {}
93
-
94
- return {
95
- pointerDownOutside: (e: Event) => e.preventDefault(),
96
- interactOutside: (e: Event) => e.preventDefault(),
97
- escapeKeyDown: (e: Event) => e.preventDefault(),
98
- }
99
- })
100
-
101
- const { t } = useLocale()
102
- const { theme, generateStyle } = useTheme()
103
- const style = computed(() => generateStyle('drawer', props))
42
+ return {};
43
+ const events = ["pointerDownOutside", "interactOutside", "escapeKeyDown"];
44
+ return events.reduce((acc, curr) => {
45
+ acc[curr] = (e) => {
46
+ e.preventDefault();
47
+ emit("close-prevent");
48
+ };
49
+ return acc;
50
+ }, {});
51
+ });
52
+ const { t } = useLocale();
53
+ const appConfig = useAppConfig();
54
+ const ui = computed(() => {
55
+ const styler = cv(merge(theme, appConfig.ui.drawer));
56
+ return styler(props);
57
+ });
104
58
  </script>
105
59
 
106
60
  <template>
107
- <DialogRoot v-slot="{ open }" v-bind="rootProps">
108
- <DialogTrigger v-if="slots.default" as-child :class="props.class">
61
+ <DialogRoot v-slot="{ open, close }" v-bind="rootProps">
62
+ <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
109
63
  <slot :open="open"></slot>
110
64
  </DialogTrigger>
111
65
 
112
- <DialogPortal :disabled="!props.portal">
113
- <DialogOverlay v-if="props.overlay" :class="style.overlay({ class: props.ui?.overlay })" />
66
+ <DialogPortal v-bind="portalProps">
67
+ <DialogOverlay v-if="props.overlay" :class="ui.overlay({ class: props.ui?.overlay })" data-part="overlay" />
114
68
 
115
69
  <DialogContent
116
- :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })"
117
- :data-direction="props.direction"
70
+ :class="ui.content({ class: [props.ui?.content, !slots.default && props.class] })"
118
71
  v-bind="contentProps"
119
- v-on="contentEvents"
72
+ :data-direction="props.direction"
73
+ data-part="content"
74
+ @after-enter="emit('after-enter')"
120
75
  @after-leave="emit('after-leave')"
76
+ v-on="contentEvents"
121
77
  >
122
- <VisuallyHidden v-if="slots.content || slots.header || (!props.title && !slots.title)">
78
+ <VisuallyHidden v-if="!!slots.content || !!slots.header || !props.title && !slots.title">
123
79
  <DialogTitle />
124
80
  </VisuallyHidden>
125
81
 
126
- <slot name="content">
127
- <div :class="style.container({ class: props.ui?.container })">
128
- <div
129
- v-if="slots.header || props.title || slots.title || props.description || slots.description || props.close || slots.close"
130
- :class="style.header({ class: props.ui?.header })"
131
- >
132
- <slot name="header">
133
- <DialogTitle
134
- v-if="props.title || slots.title"
135
- :class="style.title({ class: props.ui?.title })"
136
- >
137
- <slot name="title">
138
- {{ props.title }}
139
- </slot>
140
- </DialogTitle>
141
-
142
- <DialogClose v-if="props.close || slots.close" as-child>
143
- <slot name="close" :ui="props.ui">
144
- <Button
145
- variant="ghost"
146
- :icon="props.closeIcon || theme.app.icons.close"
147
- v-bind="typeof props.close === 'boolean' ? {} : props.close"
148
- :class="style.close({ class: props.ui?.close })"
149
- :aria-label="t('modal.close')"
150
- />
151
- </slot>
152
- </DialogClose>
153
-
154
- <DialogDescription
155
- v-if="props.description || slots.description"
156
- :class="style.description({ class: props.ui?.description })"
157
- >
158
- <slot name="description">
159
- {{ props.description }}
160
- </slot>
161
- </DialogDescription>
162
- </slot>
163
- </div>
82
+ <slot name="content" :close="close">
83
+ <div
84
+ v-if="slots.header || (props.title || !!slots.title) || (props.description || !!slots.description) || (props.close || !!slots.close)"
85
+ :class="ui.header({ class: props.ui?.header })"
86
+ data-part="header"
87
+ >
88
+ <slot name="header" :close="close">
89
+ <DialogTitle
90
+ v-if="props.title || slots.title"
91
+ :class="ui.title({ class: props.ui?.title })"
92
+ data-part="title"
93
+ >
94
+ <slot name="title">
95
+ {{ props.title }}
96
+ </slot>
97
+ </DialogTitle>
98
+
99
+ <DialogClose v-if="props.close || !!slots.close" as-child>
100
+ <slot name="close" :close="close" :ui="ui">
101
+ <Button
102
+ v-if="props.close"
103
+ color="neutral"
104
+ variant="ghost"
105
+ :icon="props.closeIcon || appConfig.ui.icons.close"
106
+ :aria-label="t('modal.close')"
107
+ v-bind="typeof props.close === 'object' ? props.close : {}"
108
+ :class="ui.close({ class: props.ui?.close })"
109
+ data-part="close"
110
+ />
111
+ </slot>
112
+ </DialogClose>
113
+
114
+ <DialogDescription
115
+ v-if="props.description || !!slots.description"
116
+ :class="ui.description({ class: props.ui?.description })"
117
+ data-part="description"
118
+ >
119
+ <slot name="description">
120
+ {{ props.description }}
121
+ </slot>
122
+ </DialogDescription>
123
+ </slot>
124
+ </div>
164
125
 
165
- <div v-if="slots.body" :class="style.body({ class: props.ui?.body })">
166
- <slot name="body"></slot>
167
- </div>
126
+ <div v-if="slots.body" :class="ui.body({ class: props.ui?.body })" data-part="body">
127
+ <slot name="body" :close="close"></slot>
128
+ </div>
168
129
 
169
- <div v-if="slots.footer" :class="style.footer({ class: props.ui?.footer })">
170
- <slot name="footer"></slot>
171
- </div>
130
+ <div v-if="slots.footer" :class="ui.footer({ class: props.ui?.footer })" data-part="footer">
131
+ <slot name="footer" :close="close"></slot>
172
132
  </div>
173
133
  </slot>
174
134
  </DialogContent>
@@ -0,0 +1,103 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { DialogContentEmits, DialogContentProps, DialogRootEmits, DialogRootProps } from 'reka-ui';
3
+ import theme from '#build/ui/drawer';
4
+ import type { ButtonProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
5
+ import type { EmitsToProps, StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface DrawerProps extends ComponentBaseProps, DialogRootProps {
8
+ title?: string;
9
+ description?: string;
10
+ /** The content of the drawer. */
11
+ content?: Omit<DialogContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DialogContentEmits>>;
12
+ /**
13
+ * Render an overlay behind the drawer.
14
+ * @default true
15
+ */
16
+ overlay?: boolean;
17
+ /**
18
+ * Animate the drawer when opening or closing.
19
+ * @default true
20
+ */
21
+ transition?: boolean;
22
+ /**
23
+ * The direction of the drawer.
24
+ * @default "bottom"
25
+ */
26
+ direction?: ThemeVariants['direction'];
27
+ /**
28
+ * Whether to inset the drawer from the edges.
29
+ */
30
+ inset?: boolean;
31
+ /**
32
+ * Render the drawer in a portal.
33
+ * @default true
34
+ */
35
+ portal?: boolean | string | HTMLElement;
36
+ /**
37
+ * Display a close button to dismiss the drawer.
38
+ * @default true
39
+ */
40
+ close?: boolean | Partial<ButtonProps>;
41
+ /** @default app.icons.close */
42
+ closeIcon?: IconProps['name'];
43
+ /**
44
+ * When `false`, the drawer will not close when clicking outside or pressing escape.
45
+ * @default true
46
+ */
47
+ dismissible?: boolean;
48
+ ui?: ComponentUIProps<typeof theme>;
49
+ }
50
+ export interface DrawerEmits extends DialogRootEmits {
51
+ 'after-leave': [];
52
+ 'after-enter': [];
53
+ 'close-prevent': [];
54
+ }
55
+ export interface DrawerSlots {
56
+ default: StaticSlot<{
57
+ open: boolean;
58
+ }>;
59
+ content: StaticSlot<{
60
+ close: () => void;
61
+ }>;
62
+ header: StaticSlot<{
63
+ close: () => void;
64
+ }>;
65
+ title: StaticSlot;
66
+ description: StaticSlot;
67
+ close: StaticSlot<{
68
+ close: () => void;
69
+ ui: ComponentStyler<typeof theme>;
70
+ }>;
71
+ body: StaticSlot<{
72
+ close: () => void;
73
+ }>;
74
+ footer: StaticSlot<{
75
+ close: () => void;
76
+ }>;
77
+ }
78
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<DrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
79
+ "update:open": (value: boolean) => any;
80
+ "after-leave": () => any;
81
+ "after-enter": () => any;
82
+ "close-prevent": () => any;
83
+ }, string, import("vue").PublicProps, Readonly<DrawerProps> & Readonly<{
84
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
85
+ "onAfter-leave"?: (() => any) | undefined;
86
+ "onAfter-enter"?: (() => any) | undefined;
87
+ "onClose-prevent"?: (() => any) | undefined;
88
+ }>, {
89
+ overlay: boolean;
90
+ close: boolean | Partial<ButtonProps>;
91
+ transition: boolean;
92
+ direction: "top" | "right" | "bottom" | "left";
93
+ modal: boolean;
94
+ portal: boolean | string | HTMLElement;
95
+ dismissible: boolean;
96
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
97
+ declare const _default: typeof __VLS_export;
98
+ export default _default;
99
+ type __VLS_WithSlots<T, S> = T & {
100
+ new (): {
101
+ $slots: S;
102
+ };
103
+ };
@@ -1,143 +1,72 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { DropdownMenuArrowProps, DropdownMenuContentEmits, DropdownMenuContentProps, DropdownMenuRootEmits, DropdownMenuRootProps } from 'reka-ui'
4
- import type { dropdownMenu } from '../theme'
5
- import type { ArrayOrNested, AvatarProps, ComponentAttrs, DynamicSlots, EmitsToProps, KbdProps, LinkProps, MergeTypes, NestedItem } from '../types'
6
-
7
- export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom' | 'underline'> {
8
- icon?: string
9
- avatar?: AvatarProps
10
- content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DropdownMenuContentEmits>>
11
- kbds?: Array<string | KbdProps['value']>
12
- /**
13
- * The item type.
14
- * @default 'link'
15
- */
16
- type?: 'label' | 'separator' | 'link' | 'checkbox'
17
- slot?: string
18
- loading?: boolean
19
- disabled?: boolean
20
- checked?: boolean
21
- open?: boolean
22
- defaultOpen?: boolean
23
- children?: ArrayOrNested<DropdownMenuItem>
24
- onSelect?: (e: Event) => void
25
- onUpdateChecked?: (checked: boolean) => void
26
- [key: string]: any
27
- }
28
-
29
- type SlotProps<T extends DropdownMenuItem> = (props: { item: T, active?: boolean, index: number }) => any
30
-
31
- export type DropdownMenuSlots<
32
- T extends ArrayOrNested<DropdownMenuItem> = ArrayOrNested<DropdownMenuItem>,
33
- I extends NestedItem<T> = NestedItem<T>,
34
- > = {
35
- 'default'?: (props: { open: boolean }) => any
36
- 'item'?: SlotProps<I>
37
- 'item-leading'?: SlotProps<I>
38
- 'item-label'?: SlotProps<I>
39
- 'item-trailing'?: SlotProps<I>
40
- } & DynamicSlots<MergeTypes<I>, 'leading' | 'label' | 'trailing', SlotProps<I>>
41
-
42
- export interface DropdownMenuEmits extends DropdownMenuRootEmits {}
43
-
44
- type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
45
-
46
- export interface DropdownMenuProps<
47
- T extends ArrayOrNested<DropdownMenuItem> = ArrayOrNested<DropdownMenuItem>,
48
- > extends ComponentAttrs<typeof dropdownMenu>, Omit<DropdownMenuRootProps, 'dir'> {
49
- /** @default "md" */
50
- size?: DropdownMenuVariants['size']
51
- items?: T
52
- /**
53
- * The icon displayed when an item is checked.
54
- * @default app.icons.check
55
- */
56
- checkedIcon?: string
57
- /**
58
- * The icon displayed when an item is loading.
59
- * @default app.icons.loading
60
- */
61
- loadingIcon?: string
62
- /**
63
- * The icon displayed when the item is an external link.
64
- * Set to `false` to hide the external icon.
65
- * @default app.icons.external
66
- */
67
- externalIcon?: boolean | string
68
- /**
69
- * The content of the menu.
70
- * @default { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
71
- */
72
- content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DropdownMenuContentEmits>>
73
- /**
74
- * Display an arrow alongside the menu.
75
- * @default false
76
- */
77
- arrow?: boolean | Omit<DropdownMenuArrowProps, 'as' | 'asChild'>
78
- /**
79
- * Render the menu in a portal.
80
- * @default true
81
- */
82
- portal?: boolean
83
- /**
84
- * The key used to get the label from the item.
85
- * @default "label"
86
- */
87
- labelKey?: keyof NestedItem<T>
88
- disabled?: boolean
89
- }
1
+ <script>
2
+ import theme from "#build/ui/dropdown-menu";
90
3
  </script>
91
4
 
92
- <script setup lang="ts" generic="T extends ArrayOrNested<DropdownMenuItem>">
93
- import { reactivePick } from '@vueuse/core'
94
- import { DropdownMenuArrow, DropdownMenuRoot, DropdownMenuTrigger, useForwardPropsEmits } from 'reka-ui'
95
- import { computed, toRef } from 'vue'
96
- import { useTheme } from '../composables/useTheme'
97
- import { omit } from '../utils'
98
- import DropdownMenuContent from './DropdownMenuContent.vue'
99
-
100
- const props = withDefaults(defineProps<DropdownMenuProps<T>>(), {
101
- portal: true,
102
- modal: true,
103
- externalIcon: true,
104
- labelKey: 'label',
105
- })
106
- const emit = defineEmits<DropdownMenuEmits>()
107
- const slots = defineSlots<DropdownMenuSlots<T>>()
108
-
109
- const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultOpen', 'open', 'modal'), emit)
110
- const contentProps = toRef(() => ({ side: 'bottom', sideOffset: 8, collisionPadding: 8, ...props.content }) as DropdownMenuContentProps)
111
- const arrowProps = toRef(() => props.arrow as DropdownMenuArrowProps)
112
- const proxySlots = omit(slots, ['default'])
113
-
114
- const { generateStyle } = useTheme()
115
- const style = computed(() => generateStyle('dropdownMenu', props))
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { DropdownMenuArrow, DropdownMenuRoot, DropdownMenuTrigger, useForwardPropsEmits } from "reka-ui";
8
+ import { computed, toRef } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { omit } from "../utils";
11
+ import { cv, merge } from "../utils/style";
12
+ import DropdownMenuContent from "./DropdownMenuContent.vue";
13
+ const props = defineProps({
14
+ size: { type: null, required: false },
15
+ items: { type: null, required: false },
16
+ checkedIcon: { type: [String, Object], required: false },
17
+ loadingIcon: { type: [String, Object], required: false },
18
+ externalIcon: { type: [Boolean, String, Object], required: false, default: true },
19
+ content: { type: Object, required: false },
20
+ arrow: { type: [Boolean, Object], required: false },
21
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
22
+ labelKey: { type: null, required: false, default: "label" },
23
+ descriptionKey: { type: null, required: false, default: "description" },
24
+ disabled: { type: Boolean, required: false },
25
+ ui: { type: null, required: false },
26
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
27
+ defaultOpen: { type: Boolean, required: false },
28
+ open: { type: Boolean, required: false },
29
+ modal: { type: Boolean, required: false, default: true }
30
+ });
31
+ const emit = defineEmits(["update:open"]);
32
+ const slots = defineSlots();
33
+ const rootProps = useForwardPropsEmits(reactivePick(props, "defaultOpen", "open", "modal"), emit);
34
+ const contentProps = toRef(() => ({ side: "bottom", sideOffset: 8, collisionPadding: 8, ...props.content }));
35
+ const arrowProps = toRef(() => props.arrow);
36
+ const getProxySlots = () => omit(slots, ["default"]);
37
+ const appConfig = useAppConfig();
38
+ const ui = computed(() => {
39
+ const styler = cv(merge(theme, appConfig.ui.dropdownMenu));
40
+ return styler(props);
41
+ });
116
42
  </script>
117
43
 
118
44
  <template>
119
45
  <DropdownMenuRoot v-slot="{ open }" v-bind="rootProps">
120
- <DropdownMenuTrigger v-if="slots.default" as-child :class="props.class" :disabled="props.disabled">
46
+ <DropdownMenuTrigger v-if="!!slots.default" as-child :class="props.class" :disabled="props.disabled">
121
47
  <slot :open="open"></slot>
122
48
  </DropdownMenuTrigger>
123
49
 
124
50
  <DropdownMenuContent
125
- :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })"
126
- :ui="props.ui"
127
51
  v-bind="contentProps"
128
52
  :size="props.size"
129
53
  :items="props.items"
130
54
  :portal="props.portal"
131
- :label-key="(props.labelKey as keyof NestedItem<T>)"
55
+ :label-key="props.labelKey"
56
+ :description-key="props.descriptionKey"
132
57
  :checked-icon="props.checkedIcon"
133
58
  :loading-icon="props.loadingIcon"
134
59
  :external-icon="props.externalIcon"
60
+ :ui="ui"
61
+ :ui-override="props.ui"
62
+ :class="ui.content({ class: [props.ui?.content, !slots.default && props.class] })"
63
+ data-part="content"
135
64
  >
136
- <template v-for="(_, name) in proxySlots" #[name]="slotProps">
137
- <slot :name="(name as keyof DropdownMenuSlots<T>)" v-bind="slotProps"></slot>
65
+ <template v-for="(_, name) in getProxySlots()" #[name]="slotProps">
66
+ <slot :name="name" v-bind="slotProps"></slot>
138
67
  </template>
139
68
 
140
- <DropdownMenuArrow v-if="props.arrow" v-bind="arrowProps" :class="style.arrow({ class: props.ui?.arrow })" />
69
+ <DropdownMenuArrow v-if="props.arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" data-part="arrow" />
141
70
  </DropdownMenuContent>
142
71
  </DropdownMenuRoot>
143
72
  </template>