@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,152 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { PrimitiveProps, ToastRootEmits, ToastRootProps } from 'reka-ui';
3
+ import theme from '#build/ui/toast';
4
+ import type { AvatarProps, ButtonProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps, ProgressProps } from '../types';
5
+ import type { StaticSlot, StringOrVNode } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface ToastProps extends ComponentBaseProps, Pick<ToastRootProps, 'defaultOpen' | 'open' | 'type' | 'duration'> {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @default "li"
11
+ */
12
+ as?: PrimitiveProps['as'];
13
+ title?: StringOrVNode;
14
+ description?: StringOrVNode;
15
+ icon?: IconProps['name'];
16
+ avatar?: AvatarProps;
17
+ /** @default "primary" */
18
+ color?: ThemeVariants['color'];
19
+ /** @default "vertical" */
20
+ orientation?: ThemeVariants['orientation'];
21
+ /**
22
+ * Display a list of actions:
23
+ * - under the title and description when orientation is `vertical`
24
+ * - next to the close button when orientation is `horizontal`
25
+ */
26
+ actions?: ButtonProps[];
27
+ /**
28
+ * Display a close button to dismiss the toast.
29
+ * @default true
30
+ */
31
+ close?: boolean | Partial<ButtonProps>;
32
+ /**
33
+ * The icon displayed in the close button.
34
+ * @default app.icons.close
35
+ */
36
+ closeIcon?: IconProps['name'];
37
+ /**
38
+ * Display a progress bar showing the toast's remaining duration.
39
+ * @default true
40
+ */
41
+ progress?: boolean | Pick<ProgressProps, 'color' | 'ui'>;
42
+ ui?: ComponentUIProps<typeof theme>;
43
+ }
44
+ export interface ToastEmits extends ToastRootEmits {
45
+ }
46
+ export interface ToastSlots {
47
+ leading: StaticSlot<{
48
+ ui: ComponentStyler<typeof theme>;
49
+ }>;
50
+ title: StaticSlot;
51
+ description: StaticSlot;
52
+ actions: StaticSlot;
53
+ close: StaticSlot<{
54
+ ui: ComponentStyler<typeof theme>;
55
+ }>;
56
+ }
57
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ToastProps, {
58
+ height: import("vue").ShallowRef<number, number>;
59
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
60
+ pause: () => any;
61
+ "update:open": (value: boolean) => any;
62
+ escapeKeyDown: (event: KeyboardEvent) => any;
63
+ resume: () => any;
64
+ swipeStart: (event: {
65
+ currentTarget: EventTarget & HTMLElement;
66
+ } & Omit<CustomEvent<{
67
+ originalEvent: PointerEvent;
68
+ delta: {
69
+ x: number;
70
+ y: number;
71
+ };
72
+ }>, "currentTarget">) => any;
73
+ swipeMove: (event: {
74
+ currentTarget: EventTarget & HTMLElement;
75
+ } & Omit<CustomEvent<{
76
+ originalEvent: PointerEvent;
77
+ delta: {
78
+ x: number;
79
+ y: number;
80
+ };
81
+ }>, "currentTarget">) => any;
82
+ swipeCancel: (event: {
83
+ currentTarget: EventTarget & HTMLElement;
84
+ } & Omit<CustomEvent<{
85
+ originalEvent: PointerEvent;
86
+ delta: {
87
+ x: number;
88
+ y: number;
89
+ };
90
+ }>, "currentTarget">) => any;
91
+ swipeEnd: (event: {
92
+ currentTarget: EventTarget & HTMLElement;
93
+ } & Omit<CustomEvent<{
94
+ originalEvent: PointerEvent;
95
+ delta: {
96
+ x: number;
97
+ y: number;
98
+ };
99
+ }>, "currentTarget">) => any;
100
+ }, string, import("vue").PublicProps, Readonly<ToastProps> & Readonly<{
101
+ onPause?: (() => any) | undefined;
102
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
103
+ onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
104
+ onResume?: (() => any) | undefined;
105
+ onSwipeStart?: ((event: {
106
+ currentTarget: EventTarget & HTMLElement;
107
+ } & Omit<CustomEvent<{
108
+ originalEvent: PointerEvent;
109
+ delta: {
110
+ x: number;
111
+ y: number;
112
+ };
113
+ }>, "currentTarget">) => any) | undefined;
114
+ onSwipeMove?: ((event: {
115
+ currentTarget: EventTarget & HTMLElement;
116
+ } & Omit<CustomEvent<{
117
+ originalEvent: PointerEvent;
118
+ delta: {
119
+ x: number;
120
+ y: number;
121
+ };
122
+ }>, "currentTarget">) => any) | undefined;
123
+ onSwipeCancel?: ((event: {
124
+ currentTarget: EventTarget & HTMLElement;
125
+ } & Omit<CustomEvent<{
126
+ originalEvent: PointerEvent;
127
+ delta: {
128
+ x: number;
129
+ y: number;
130
+ };
131
+ }>, "currentTarget">) => any) | undefined;
132
+ onSwipeEnd?: ((event: {
133
+ currentTarget: EventTarget & HTMLElement;
134
+ } & Omit<CustomEvent<{
135
+ originalEvent: PointerEvent;
136
+ delta: {
137
+ x: number;
138
+ y: number;
139
+ };
140
+ }>, "currentTarget">) => any) | undefined;
141
+ }>, {
142
+ close: boolean | Partial<ButtonProps>;
143
+ progress: boolean | Pick<ProgressProps, "color" | "ui">;
144
+ orientation: "horizontal" | "vertical";
145
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ToastSlots>;
146
+ declare const _default: typeof __VLS_export;
147
+ export default _default;
148
+ type __VLS_WithSlots<T, S> = T & {
149
+ new (): {
150
+ $slots: S;
151
+ };
152
+ };
@@ -1,143 +1,116 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { ToastProviderProps as RekaToastProviderProps } from 'reka-ui'
4
- import type { toastProvider } from '../theme'
5
- import type { ComponentAttrs, ToastProps } from '../types'
6
-
7
- export interface ToastState extends Omit<ToastProps, 'defaultOpen'> {
8
- id: string | number
9
- onClick?: (toast: ToastState) => void
10
- }
11
-
12
- export interface ToasterSlots {
13
- default?: (props?: {}) => any
14
- }
15
-
16
- type ToasterVariants = VariantProps<typeof toastProvider>
17
-
18
- export interface ToastProviderProps extends ComponentAttrs<typeof toastProvider>, Omit<RekaToastProviderProps, 'swipeDirection'> {
19
- /** @default "bottom-right" */
20
- position?: ToasterVariants['position']
21
- /**
22
- * Expand the toasts to show multiple toasts at once.
23
- * @default true
24
- */
25
- expand?: boolean
26
- /**
27
- * Render the toaster in a portal.
28
- * @default true
29
- */
30
- portal?: boolean
31
- }
1
+ <script>
2
+ import theme from "#build/ui/toast-provider";
32
3
  </script>
33
4
 
34
- <script setup lang="ts">
35
- import { reactivePick } from '@vueuse/core'
36
- import { ToastPortal, ToastProvider, ToastViewport, useForwardProps } from 'reka-ui'
37
- import { computed, ref } from 'vue'
38
- import { useTheme } from '../composables/useTheme'
39
- import { useToast } from '../composables/useToast'
40
- import { omit } from '../utils'
41
- import Toast from './Toast.vue'
42
-
43
- const props = withDefaults(defineProps<ToastProviderProps>(), {
44
- position: 'bottom-right',
45
- expand: true,
46
- portal: true,
47
- duration: 5000,
48
- })
49
- defineSlots<ToasterSlots>()
50
-
51
- const providerProps = useForwardProps(reactivePick(props, 'duration', 'label', 'swipeThreshold'))
52
-
53
- const { toasts, remove } = useToast()
54
-
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { ToastPortal, ToastProvider as RekaToastProvider, ToastViewport, useForwardProps } from "reka-ui";
8
+ import { computed, ref, toRef } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { usePortal } from "../composables/usePortal";
11
+ import { provideToastMax, useToast } from "../composables/useToast";
12
+ import { omit } from "../utils";
13
+ import { cv, merge } from "../utils/style";
14
+ import Toast from "./Toast.vue";
15
+ const props = defineProps({
16
+ position: { type: null, required: false },
17
+ expand: { type: Boolean, required: false, default: true },
18
+ progress: { type: Boolean, required: false, default: true },
19
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
20
+ max: { type: Number, required: false, default: 5 },
21
+ ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
23
+ label: { type: String, required: false },
24
+ duration: { type: Number, required: false, default: 5e3 },
25
+ disableSwipe: { type: Boolean, required: false },
26
+ swipeThreshold: { type: Number, required: false }
27
+ });
28
+ defineSlots();
29
+ const providerProps = useForwardProps(reactivePick(props, "duration", "label", "swipeThreshold"));
30
+ const portalProps = usePortal(toRef(() => props.portal));
31
+ const { toasts, remove } = useToast();
32
+ provideToastMax(toRef(() => props.max));
55
33
  const swipeDirection = computed(() => {
56
34
  switch (props.position) {
57
- case 'top-center':
58
- return 'up'
59
- case 'top-right':
60
- case 'bottom-right':
61
- return 'right'
62
- case 'bottom-center':
63
- return 'down'
64
- case 'top-left':
65
- case 'bottom-left':
66
- return 'left'
35
+ case "top-center":
36
+ return "up";
37
+ case "top-right":
38
+ case "bottom-right":
39
+ return "right";
40
+ case "bottom-center":
41
+ return "down";
42
+ case "top-left":
43
+ case "bottom-left":
44
+ return "left";
67
45
  }
68
-
69
- console.warn(`[ToastProvider] Unknown position "${props.position}"`)
70
-
71
- return 'right'
72
- })
73
-
74
- const { generateStyle } = useTheme()
75
- const style = computed(() => generateStyle('toastProvider', {
76
- ...props,
77
- swipeDirection: swipeDirection.value,
78
- clickable: false,
79
- }))
80
-
81
- function onUpdateOpen(value: boolean, id: string | number) {
46
+ return "right";
47
+ });
48
+ const appConfig = useAppConfig();
49
+ const ui = computed(() => {
50
+ const styler = cv(merge(theme, appConfig.ui.toastProvider));
51
+ return styler({
52
+ ...props,
53
+ swipeDirection: swipeDirection.value
54
+ });
55
+ });
56
+ function onUpdateOpen(value, id) {
82
57
  if (value)
83
- return
84
-
85
- remove(id)
58
+ return;
59
+ remove(id);
86
60
  }
87
-
88
- const hovered = ref(false)
89
- const expanded = computed(() => props.expand || hovered.value)
90
-
91
- const refs = ref<{ height: number }[]>([])
92
-
93
- const height = computed(() => refs.value.reduce((sum, { height }) => sum + height + 16, 0))
94
- const frontHeight = computed(() => refs.value[refs.value.length - 1]?.height || 0)
95
-
96
- function getOffset(index: number) {
97
- return refs.value.slice(index + 1).reduce((acc, { height }) => acc + height + 16, 0)
61
+ const hovered = ref(false);
62
+ const expanded = computed(() => props.expand || hovered.value);
63
+ const refs = ref([]);
64
+ const height = computed(() => refs.value.reduce((acc, { height: height2 }) => acc + height2 + 16, 0));
65
+ const frontHeight = computed(() => refs.value[refs.value.length - 1]?.height || 0);
66
+ function getOffset(index) {
67
+ return refs.value.slice(index + 1).reduce((acc, { height: height2 }) => acc + height2 + 16, 0);
98
68
  }
99
69
  </script>
100
70
 
101
71
  <template>
102
- <ToastProvider :swipe-direction="swipeDirection" v-bind="providerProps">
72
+ <RekaToastProvider :swipe-direction="swipeDirection" v-bind="providerProps">
103
73
  <slot></slot>
104
74
 
105
75
  <Toast
106
76
  v-for="(toast, index) of toasts"
107
77
  :key="toast.id"
108
78
  ref="refs"
109
- v-bind="omit(toast, ['id'])"
79
+ :progress="props.progress"
80
+ v-bind="omit(toast, ['id', 'close'])"
110
81
  :data-expanded="expanded"
111
82
  :data-front="!expanded && index === toasts.length - 1"
112
83
  :style="{
113
- '--index': (index - toasts.length) + toasts.length,
114
- '--before': toasts.length - 1 - index,
115
- '--offset': getOffset(index),
116
- '--scale': expanded ? '1' : 'calc(1 - var(--before) * var(--scale-factor))',
117
- '--translate': expanded ? 'calc(var(--offset) * var(--translate-factor))' : 'calc(var(--before) * var(--gap))',
118
- '--transform': 'translateY(var(--translate)) scale(var(--scale))',
119
- }"
120
- :class="style.base({ clickable: !!(toast.onClick) })"
84
+ '--index': index - toasts.length + toasts.length,
85
+ '--before': toasts.length - 1 - index,
86
+ '--offset': getOffset(index),
87
+ '--scale': expanded ? '1' : 'calc(1 - var(--before) * var(--scale-factor))',
88
+ '--translate': expanded ? 'calc(var(--offset) * var(--translate-factor))' : 'calc(var(--before) * var(--gap))',
89
+ '--transform': 'translateY(var(--translate)) scale(var(--scale))'
90
+ }"
91
+ :class="ui.base({ class: props.ui?.base })"
92
+ data-part="base"
121
93
  @update:open="onUpdateOpen($event, toast.id)"
122
94
  @click="toast.onClick && toast.onClick(toast)"
123
95
  />
124
96
 
125
- <ToastPortal :disabled="!portal">
97
+ <ToastPortal v-bind="portalProps">
126
98
  <ToastViewport
127
99
  :data-expanded="expanded"
128
- :class="style.viewport({ class: [props.class, props.ui?.viewport] })"
100
+ :class="ui.viewport({ class: [props.ui?.viewport, props.class] })"
101
+ data-part="viewport"
129
102
  :style="{
130
- '--scale-factor': '0.05',
131
- '--translate-factor': position?.startsWith('top') ? '1px' : '-1px',
132
- '--gap': position?.startsWith('top') ? '16px' : '-16px',
133
- '--front-height': `${frontHeight}px`,
134
- '--height': `${height}px`,
135
- }"
103
+ '--scale-factor': '0.05',
104
+ '--translate-factor': position?.startsWith('top') ? '1px' : '-1px',
105
+ '--gap': position?.startsWith('top') ? '16px' : '-16px',
106
+ '--front-height': `${frontHeight}px`,
107
+ '--height': `${height}px`
108
+ }"
136
109
  @mouseenter="hovered = true"
137
110
  @mouseleave="hovered = false"
138
111
  />
139
112
  </ToastPortal>
140
- </ToastProvider>
113
+ </RekaToastProvider>
141
114
  </template>
142
115
 
143
116
  <style>
@@ -0,0 +1,51 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { ToastProviderProps as RekaToastProviderProps } from 'reka-ui';
3
+ import theme from '#build/ui/toast-provider';
4
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface ToastProviderProps extends ComponentBaseProps, Omit<RekaToastProviderProps, 'swipeDirection'> {
8
+ /**
9
+ * The position on the screen to display the toasts.
10
+ * @default "bottom-right"
11
+ */
12
+ position?: ThemeVariants['position'];
13
+ /**
14
+ * Expand the toasts to show multiple toasts at once.
15
+ * @default true
16
+ */
17
+ expand?: boolean;
18
+ /**
19
+ * Whether to show the progress bar on all toasts.
20
+ * @default true
21
+ */
22
+ progress?: boolean;
23
+ /**
24
+ * Render the toaster in a portal.
25
+ * @default true
26
+ */
27
+ portal?: boolean | string | HTMLElement;
28
+ /**
29
+ * Maximum number of toasts to display at once.
30
+ * @default 5
31
+ */
32
+ max?: number;
33
+ ui?: ComponentUIProps<typeof theme>;
34
+ }
35
+ export interface ToasterSlots {
36
+ default: StaticSlot;
37
+ }
38
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ToastProviderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ToastProviderProps> & Readonly<{}>, {
39
+ progress: boolean;
40
+ portal: boolean | string | HTMLElement;
41
+ duration: number;
42
+ max: number;
43
+ expand: boolean;
44
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ToasterSlots>;
45
+ declare const _default: typeof __VLS_export;
46
+ export default _default;
47
+ type __VLS_WithSlots<T, S> = T & {
48
+ new (): {
49
+ $slots: S;
50
+ };
51
+ };
@@ -1,67 +1,68 @@
1
- <script lang="ts">
2
- import type { TooltipArrowProps, TooltipContentEmits, TooltipContentProps, TooltipRootEmits, TooltipRootProps } from 'reka-ui'
3
- import type { tooltip } from '../theme'
4
- import type { ComponentAttrs, EmitsToProps } from '../types'
5
-
6
- export interface TooltipEmits extends TooltipRootEmits {}
7
-
8
- export interface TooltipSlots {
9
- default?: (props: { open: boolean }) => any
10
- content?: (props: {}) => any
11
- }
12
-
13
- export interface TooltipProps extends ComponentAttrs<typeof tooltip>, TooltipRootProps {
14
- text?: string
15
- content?: Omit<TooltipContentProps, 'as' | 'asChild'> & Partial<EmitsToProps<TooltipContentEmits>>
16
- arrow?: boolean | Omit<TooltipArrowProps, 'as' | 'asChild'>
17
- /** @default true */
18
- portal?: boolean
19
- }
1
+ <script>
2
+ import theme from "#build/ui/tooltip";
20
3
  </script>
21
4
 
22
- <script lang="ts" setup>
23
- import { reactivePick } from '@vueuse/core'
24
- import { defu } from 'defu'
25
- import { TooltipArrow, TooltipContent, TooltipPortal, TooltipRoot, TooltipTrigger, useForwardPropsEmits } from 'reka-ui'
26
- import { computed, toRef } from 'vue'
27
- import { useTheme } from '../composables/useTheme'
28
-
29
- const props = withDefaults(defineProps<TooltipProps>(), {
30
- portal: true,
31
- })
32
- const emit = defineEmits<TooltipEmits>()
33
- const slots = defineSlots<TooltipSlots>()
34
-
35
- const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultOpen', 'open', 'delayDuration', 'disableHoverableContent', 'disableClosingTrigger', 'disabled', 'ignoreNonKeyboardFocus'), emit)
36
-
37
- const contentDefaults: TooltipContentProps = {
38
- side: 'bottom',
39
- sideOffset: 8,
40
- collisionPadding: 8,
41
- }
42
-
43
- const contentProps = toRef(() => defu(props.content, contentDefaults) as TooltipContentProps)
44
-
45
- const arrowProps = toRef(() => props.arrow as TooltipArrowProps)
46
-
47
- const { generateStyle } = useTheme()
48
- const style = computed(() => generateStyle('tooltip', props))
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { TooltipArrow, TooltipContent, TooltipPortal, TooltipRoot, TooltipTrigger, useForwardPropsEmits } from "reka-ui";
8
+ import { computed, toRef } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { usePortal } from "../composables/usePortal";
11
+ import { cv, merge } from "../utils/style";
12
+ import Kbd from "./Kbd.vue";
13
+ const props = defineProps({
14
+ text: { type: String, required: false },
15
+ kbds: { type: Array, required: false },
16
+ content: { type: Object, required: false },
17
+ arrow: { type: [Boolean, Object], required: false },
18
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
19
+ reference: { type: null, required: false },
20
+ ui: { type: null, required: false },
21
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
22
+ defaultOpen: { type: Boolean, required: false },
23
+ open: { type: Boolean, required: false },
24
+ delayDuration: { type: Number, required: false },
25
+ disableHoverableContent: { type: Boolean, required: false },
26
+ disableClosingTrigger: { type: Boolean, required: false },
27
+ disabled: { type: Boolean, required: false },
28
+ ignoreNonKeyboardFocus: { type: Boolean, required: false }
29
+ });
30
+ const emit = defineEmits(["update:open"]);
31
+ const slots = defineSlots();
32
+ const rootProps = useForwardPropsEmits(reactivePick(props, "defaultOpen", "open", "delayDuration", "disableHoverableContent", "disableClosingTrigger", "ignoreNonKeyboardFocus"), emit);
33
+ const portalProps = usePortal(toRef(() => props.portal));
34
+ const contentProps = toRef(() => ({ side: "bottom", sideOffset: 8, collisionPadding: 8, ...props.content }));
35
+ const arrowProps = toRef(() => props.arrow);
36
+ const appConfig = useAppConfig();
37
+ const ui = computed(() => {
38
+ const styler = cv(merge(theme, appConfig.ui.tooltip));
39
+ return styler(props);
40
+ });
49
41
  </script>
50
42
 
51
43
  <template>
52
- <TooltipRoot v-slot="{ open }" v-bind="rootProps">
53
- <TooltipTrigger v-if="slots.default" as-child :class="props.class">
44
+ <TooltipRoot v-slot="{ open }" v-bind="rootProps" :disabled="!(props.text || props.kbds?.length || !!slots.content) || props.disabled">
45
+ <TooltipTrigger v-if="!!slots.default" as-child :class="props.class">
54
46
  <slot :open="open">
55
47
  </slot>
56
48
  </TooltipTrigger>
57
49
 
58
- <TooltipPortal :disabled="!props.portal">
59
- <TooltipContent v-bind="contentProps" :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })">
60
- <slot name="content">
61
- <span v-if="props.text" :class="style.text({ class: props.ui?.text })">{{ props.text }}</span>
50
+ <TooltipPortal v-bind="portalProps">
51
+ <TooltipContent v-bind="contentProps" :class="ui.content({ class: [props.ui?.content, !slots.default && props.class] })" data-part="content">
52
+ <slot name="content" :ui="ui">
53
+ <span v-if="props.text" :class="ui.text({ class: props.ui?.text })" data-part="text">{{ props.text }}</span>
54
+
55
+ <span v-if="props.kbds?.length" :class="ui.kbds({ class: props.ui?.kbds })" data-part="kbds">
56
+ <Kbd
57
+ v-for="(kbd, index) in props.kbds"
58
+ :key="index"
59
+ :size="props.ui?.kbdsSize || ui.kbdsSize()"
60
+ v-bind="typeof kbd === 'string' ? { value: kbd } : kbd"
61
+ />
62
+ </span>
62
63
  </slot>
63
64
 
64
- <TooltipArrow v-if="props.arrow" v-bind="arrowProps" :class="style.arrow({ class: props.ui?.arrow })" />
65
+ <TooltipArrow v-if="props.arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" data-part="arrow" />
65
66
  </TooltipContent>
66
67
  </TooltipPortal>
67
68
  </TooltipRoot>
@@ -0,0 +1,53 @@
1
+ import type { TooltipArrowProps, TooltipContentEmits, TooltipContentProps, TooltipRootEmits, TooltipRootProps, TooltipTriggerProps } from 'reka-ui';
2
+ import theme from '#build/ui/tooltip';
3
+ import type { ComponentBaseProps, ComponentStyler, ComponentUIProps, KbdProps } from '../types';
4
+ import type { EmitsToProps, StaticSlot } from '../types/utils';
5
+ export interface TooltipProps extends ComponentBaseProps, TooltipRootProps {
6
+ /** The text content of the tooltip. */
7
+ text?: string;
8
+ /** The keyboard keys to display in the tooltip. */
9
+ kbds?: KbdProps['value'][] | KbdProps[];
10
+ /** The content of the tooltip. */
11
+ content?: Omit<TooltipContentProps, 'as' | 'asChild'> & Partial<EmitsToProps<TooltipContentEmits>>;
12
+ /**
13
+ * Display an arrow alongside the tooltip.
14
+ * @default false
15
+ */
16
+ arrow?: boolean | Omit<TooltipArrowProps, 'as' | 'asChild'>;
17
+ /**
18
+ * Render the tooltip in a portal.
19
+ * @default true
20
+ */
21
+ portal?: boolean | string | HTMLElement;
22
+ /**
23
+ * The reference (or anchor) element that is being referred to for positioning.
24
+ *
25
+ * If not provided will use the current component as anchor.
26
+ */
27
+ reference?: TooltipTriggerProps['reference'];
28
+ ui?: ComponentUIProps<typeof theme>;
29
+ }
30
+ export interface TooltipEmits extends TooltipRootEmits {
31
+ }
32
+ export interface TooltipSlots {
33
+ default: StaticSlot<{
34
+ open: boolean;
35
+ }>;
36
+ content: StaticSlot<{
37
+ ui: ComponentStyler<typeof theme>;
38
+ }>;
39
+ }
40
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<TooltipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
41
+ "update:open": (value: boolean) => any;
42
+ }, string, import("vue").PublicProps, Readonly<TooltipProps> & Readonly<{
43
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
44
+ }>, {
45
+ portal: boolean | string | HTMLElement;
46
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, TooltipSlots>;
47
+ declare const _default: typeof __VLS_export;
48
+ export default _default;
49
+ type __VLS_WithSlots<T, S> = T & {
50
+ new (): {
51
+ $slots: S;
52
+ };
53
+ };
@@ -0,0 +1,16 @@
1
+ import type { MaybeRef } from 'vue';
2
+ import type { Nullable } from '../types/utils';
3
+ type Handler = (e?: any) => void;
4
+ export interface ShortcutConfig {
5
+ handler: Handler;
6
+ usingInput?: string | boolean;
7
+ }
8
+ export interface ShortcutsConfig {
9
+ [key: string]: Nullable<ShortcutConfig | Handler | false>;
10
+ }
11
+ export interface ShortcutsOptions {
12
+ chainDelay?: number;
13
+ }
14
+ export declare function extractShortcuts(items: any[] | any[][]): Record<string, Handler>;
15
+ export declare function defineShortcuts(config: MaybeRef<ShortcutsConfig>, options?: ShortcutsOptions): import("@vueuse/core").Fn;
16
+ export {};