@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
@@ -0,0 +1,33 @@
1
+ import type { PrimitiveProps } from 'reka-ui';
2
+ import type { LinkProps } from '../types';
3
+ import type { MaybeNull } from '../types/utils';
4
+ export interface LinkBaseProps {
5
+ /**
6
+ * The element or component this component should render as.
7
+ * @default "button"
8
+ */
9
+ as?: PrimitiveProps['as'];
10
+ /** @default "button" */
11
+ type?: string;
12
+ disabled?: boolean;
13
+ onClick?: ((e: MouseEvent) => void | Promise<void>) | Array<((e: MouseEvent) => void | Promise<void>)>;
14
+ href?: string;
15
+ navigate?: (e: MouseEvent) => void;
16
+ target?: MaybeNull<LinkProps['target']>;
17
+ rel?: MaybeNull<LinkProps['rel']>;
18
+ active?: boolean;
19
+ isExternal?: boolean;
20
+ }
21
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LinkBaseProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkBaseProps> & Readonly<{}>, {
22
+ type: string;
23
+ as: import("reka-ui").AsTag | import("vue").Component;
24
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
25
+ default?: (props: {}) => any;
26
+ }>;
27
+ declare const _default: typeof __VLS_export;
28
+ export default _default;
29
+ type __VLS_WithSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -1,117 +1,93 @@
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 { modal } from '../theme'
5
- import type { ButtonProps, ComponentAttrs, EmitsToProps } from '../types'
6
-
7
- export interface ModalEmits extends DialogRootEmits {
8
- 'after-leave': []
9
- }
10
-
11
- export interface ModalSlots {
12
- default?: (props: { open: boolean }) => any
13
- content?: any
14
- header?: any
15
- title?: any
16
- description?: any
17
- close?: (props: { ui: ComponentAttrs<typeof modal>['ui'] }) => any
18
- body?: any
19
- footer?: any
20
- }
21
-
22
- type ModalVariants = VariantProps<typeof modal>
23
-
24
- export interface ModalProps extends ComponentAttrs<typeof modal>, DialogRootProps {
25
- title?: string
26
- description?: string
27
- size?: ModalVariants['size']
28
- content?: Omit<DialogContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DialogContentEmits>>
29
- /** @default true */
30
- portal?: boolean
31
- /** @default true */
32
- overlay?: boolean
33
- /** @default true */
34
- transition?: boolean
35
- /**
36
- * When `false`, the modal will not close when clicking outside or pressing escape.
37
- * @default true
38
- */
39
- dismissible?: boolean
40
- /**
41
- * Display a close button to dismiss the modal.
42
- * @default true
43
- */
44
- close?: ButtonProps | boolean
45
- /** @default app.icons.close */
46
- closeIcon?: string
47
- }
1
+ <script>
2
+ import theme from "#build/ui/modal";
48
3
  </script>
49
4
 
50
- <script setup lang="ts">
51
- import { reactivePick } from '@vueuse/core'
52
- import { DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, useForwardPropsEmits, VisuallyHidden } from 'reka-ui'
53
- import { computed, toRef } 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<ModalProps>(), {
59
- modal: true,
60
- portal: true,
61
- overlay: true,
62
- transition: true,
63
- dismissible: true,
64
- close: true,
65
- })
66
- const emit = defineEmits<ModalEmits>()
67
- const slots = defineSlots<ModalSlots>()
68
- const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'modal'), emit)
69
- 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
+ fullscreen: { type: Boolean, required: false },
21
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
22
+ close: { type: [Boolean, Object], required: false, default: true },
23
+ closeIcon: { type: [String, Object], required: false },
24
+ dismissible: { type: Boolean, required: false, default: true },
25
+ ui: { type: null, required: false },
26
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
27
+ open: { type: Boolean, required: false },
28
+ defaultOpen: { type: Boolean, required: false },
29
+ modal: { type: Boolean, required: false, default: true }
30
+ });
31
+ const emit = defineEmits(["after-leave", "after-enter", "close-prevent", "update:open"]);
32
+ const slots = defineSlots();
33
+ const rootProps = useForwardPropsEmits(reactivePick(props, "open", "defaultOpen", "modal"), emit);
34
+ const portalProps = usePortal(toRef(() => props.portal));
35
+ const contentProps = computed(() => ({
70
36
  ...props.content,
71
- ...(slots.content || slots.header || (!props.description && !slots.description)) ? { 'aria-describedby': undefined } : {},
72
- }))
37
+ ...!!slots.content || !!slots.header || !props.description && !slots.description ? { "aria-describedby": void 0 } : {}
38
+ }));
73
39
  const contentEvents = computed(() => {
74
40
  if (props.dismissible)
75
- return {}
76
-
77
- return {
78
- pointerDownOutside: (e: Event) => e.preventDefault(),
79
- interactOutside: (e: Event) => e.preventDefault(),
80
- escapeKeyDown: (e: Event) => e.preventDefault(),
81
- }
82
- })
83
-
84
- const { t } = useLocale()
85
- const { theme, generateStyle } = useTheme()
86
- const style = computed(() => generateStyle('modal', props))
41
+ return {};
42
+ const events = ["pointerDownOutside", "interactOutside", "escapeKeyDown"];
43
+ return events.reduce((acc, curr) => {
44
+ acc[curr] = (e) => {
45
+ e.preventDefault();
46
+ emit("close-prevent");
47
+ };
48
+ return acc;
49
+ }, {});
50
+ });
51
+ const { t } = useLocale();
52
+ const appConfig = useAppConfig();
53
+ const ui = computed(() => {
54
+ const styler = cv(merge(theme, appConfig.ui.modal));
55
+ return styler(props);
56
+ });
87
57
  </script>
88
58
 
89
59
  <template>
90
- <DialogRoot v-slot="{ open }" v-bind="rootProps">
91
- <DialogTrigger
92
- v-if="slots.default"
93
- :class="props.class"
94
- as-child
95
- >
60
+ <DialogRoot v-slot="{ open, close }" v-bind="rootProps">
61
+ <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
96
62
  <slot :open="open"></slot>
97
63
  </DialogTrigger>
98
- <DialogPortal :disabled="!props.portal">
99
- <DialogOverlay v-if="props.overlay" :class="style.overlay({ class: props.ui?.overlay })" />
100
64
 
101
- <DialogContent :class="style.content({ class: props.ui?.content })" v-bind="contentProps" v-on="contentEvents" @after-leave="emit('after-leave')">
102
- <VisuallyHidden v-if="slots.content || slots.header || (!props.title && !slots.title)">
65
+ <DialogPortal v-bind="portalProps">
66
+ <DialogOverlay v-if="props.overlay" :class="ui.overlay({ class: props.ui?.overlay })" data-part="overlay" />
67
+
68
+ <DialogContent
69
+ :class="ui.content({ class: [props.ui?.content, !slots.default && props.class] })"
70
+ v-bind="contentProps"
71
+ data-part="content"
72
+ @after-enter="emit('after-enter')"
73
+ @after-leave="emit('after-leave')"
74
+ v-on="contentEvents"
75
+ >
76
+ <VisuallyHidden v-if="!!slots.content || !!slots.header || !props.title && !slots.title">
103
77
  <DialogTitle />
104
78
  </VisuallyHidden>
105
79
 
106
- <slot name="content">
80
+ <slot name="content" :close="close">
107
81
  <div
108
82
  v-if="slots.header || props.title || slots.title || props.description || slots.description || props.close || slots.close"
109
- :class="style.header({ class: props.ui?.header })"
83
+ :class="ui.header({ class: props.ui?.header })"
84
+ data-part="header"
110
85
  >
111
- <slot name="header">
86
+ <slot name="header" :close="close">
112
87
  <DialogTitle
113
88
  v-if="props.title || slots.title"
114
- :class="style.title({ class: props.ui?.title })"
89
+ :class="ui.title({ class: props.ui?.title })"
90
+ data-part="title"
115
91
  >
116
92
  <slot name="title">
117
93
  {{ props.title }}
@@ -119,20 +95,23 @@ const style = computed(() => generateStyle('modal', props))
119
95
  </DialogTitle>
120
96
 
121
97
  <DialogClose v-if="props.close || slots.close" as-child>
122
- <slot name="close" :ui="props.ui">
98
+ <slot name="close" :close="close" :ui="ui">
123
99
  <Button
124
100
  variant="ghost"
125
- :icon="props.closeIcon || theme.app.icons.close"
101
+ color="neutral"
102
+ :icon="props.closeIcon || appConfig.ui.icons.close"
126
103
  v-bind="typeof props.close === 'boolean' ? {} : props.close"
127
- :class="style.close({ class: props.ui?.close })"
128
104
  :aria-label="t('modal.close')"
105
+ :class="ui.close({ class: props.ui?.close })"
106
+ data-part="close"
129
107
  />
130
108
  </slot>
131
109
  </DialogClose>
132
110
 
133
111
  <DialogDescription
134
112
  v-if="props.description || slots.description"
135
- :class="style.description({ class: props.ui?.description })"
113
+ :class="ui.description({ class: props.ui?.description })"
114
+ data-part="description"
136
115
  >
137
116
  <slot name="description">
138
117
  {{ props.description }}
@@ -141,12 +120,12 @@ const style = computed(() => generateStyle('modal', props))
141
120
  </slot>
142
121
  </div>
143
122
 
144
- <div v-if="slots.body" :class="style.body({ class: props.ui?.body })">
145
- <slot name="body"></slot>
123
+ <div v-if="slots.body" :class="ui.body({ class: props.ui?.body })" data-part="body">
124
+ <slot name="body" :close="close"></slot>
146
125
  </div>
147
126
 
148
- <div v-if="slots.footer" :class="style.footer({ class: props.ui?.footer })">
149
- <slot name="footer"></slot>
127
+ <div v-if="slots.footer" :class="ui.footer({ class: props.ui?.footer })" data-part="footer">
128
+ <slot name="footer" :close="close"></slot>
150
129
  </div>
151
130
  </slot>
152
131
  </DialogContent>
@@ -0,0 +1,96 @@
1
+ import type { DialogContentEmits, DialogContentProps, DialogRootEmits, DialogRootProps } from 'reka-ui';
2
+ import theme from '#build/ui/modal';
3
+ import type { ButtonProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
4
+ import type { EmitsToProps, StaticSlot } from '../types/utils';
5
+ export interface ModalProps extends ComponentBaseProps, DialogRootProps {
6
+ title?: string;
7
+ description?: string;
8
+ /** The content of the modal. */
9
+ content?: Omit<DialogContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DialogContentEmits>>;
10
+ /**
11
+ * Render an overlay behind the modal.
12
+ * @default true
13
+ */
14
+ overlay?: boolean;
15
+ /**
16
+ * Animate the modal when opening or closing.
17
+ * @default true
18
+ */
19
+ transition?: boolean;
20
+ /**
21
+ * When `true`, the modal will take up the full screen.
22
+ * @default false
23
+ */
24
+ fullscreen?: boolean;
25
+ /**
26
+ * Render the modal in a portal.
27
+ * @default true
28
+ */
29
+ portal?: boolean | string | HTMLElement;
30
+ /**
31
+ * Display a close button to dismiss the modal.
32
+ * @default true
33
+ */
34
+ close?: boolean | Partial<ButtonProps>;
35
+ /** @default app.icons.close */
36
+ closeIcon?: IconProps['name'];
37
+ /**
38
+ * When `false`, the modal will not close when clicking outside or pressing escape.
39
+ * @default true
40
+ */
41
+ dismissible?: boolean;
42
+ ui?: ComponentUIProps<typeof theme>;
43
+ }
44
+ export interface ModalEmits extends DialogRootEmits {
45
+ 'after-leave': [];
46
+ 'after-enter': [];
47
+ 'close-prevent': [];
48
+ }
49
+ export interface ModalSlots {
50
+ default: StaticSlot<{
51
+ open: boolean;
52
+ }>;
53
+ content: StaticSlot<{
54
+ close: () => void;
55
+ }>;
56
+ header: StaticSlot<{
57
+ close: () => void;
58
+ }>;
59
+ title: StaticSlot;
60
+ description: StaticSlot;
61
+ close?: StaticSlot<{
62
+ close: () => void;
63
+ ui: ComponentStyler<typeof theme>;
64
+ }>;
65
+ body: StaticSlot<{
66
+ close: () => void;
67
+ }>;
68
+ footer: StaticSlot<{
69
+ close: () => void;
70
+ }>;
71
+ }
72
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ModalProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
73
+ "update:open": (value: boolean) => any;
74
+ "after-leave": () => any;
75
+ "after-enter": () => any;
76
+ "close-prevent": () => any;
77
+ }, string, import("vue").PublicProps, Readonly<ModalProps> & Readonly<{
78
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
79
+ "onAfter-leave"?: (() => any) | undefined;
80
+ "onAfter-enter"?: (() => any) | undefined;
81
+ "onClose-prevent"?: (() => any) | undefined;
82
+ }>, {
83
+ overlay: boolean;
84
+ close: boolean | Partial<ButtonProps>;
85
+ transition: boolean;
86
+ modal: boolean;
87
+ portal: boolean | string | HTMLElement;
88
+ dismissible: boolean;
89
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ModalSlots>;
90
+ declare const _default: typeof __VLS_export;
91
+ export default _default;
92
+ type __VLS_WithSlots<T, S> = T & {
93
+ new (): {
94
+ $slots: S;
95
+ };
96
+ };