@byyuurin/ui 0.0.11 → 0.2.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 (297) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +28 -23
  6. package/dist/runtime/components/Accordion.vue.d.ts +51 -29
  7. package/dist/runtime/components/Alert.vue +47 -27
  8. package/dist/runtime/components/Alert.vue.d.ts +37 -25
  9. package/dist/runtime/components/App.vue +9 -8
  10. package/dist/runtime/components/App.vue.d.ts +22 -20
  11. package/dist/runtime/components/Avatar.vue +65 -21
  12. package/dist/runtime/components/Avatar.vue.d.ts +27 -13
  13. package/dist/runtime/components/AvatarGroup.vue +14 -10
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
  15. package/dist/runtime/components/Badge.vue +64 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +30 -29
  17. package/dist/runtime/components/Breadcrumb.vue +40 -22
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
  19. package/dist/runtime/components/Button.vue +113 -52
  20. package/dist/runtime/components/Button.vue.d.ts +36 -20
  21. package/dist/runtime/components/Calendar.vue +50 -43
  22. package/dist/runtime/components/Calendar.vue.d.ts +58 -31
  23. package/dist/runtime/components/Card.vue +18 -14
  24. package/dist/runtime/components/Card.vue.d.ts +18 -14
  25. package/dist/runtime/components/Carousel.vue +99 -46
  26. package/dist/runtime/components/Carousel.vue.d.ts +46 -25
  27. package/dist/runtime/components/Checkbox.vue +60 -35
  28. package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +89 -0
  31. package/dist/runtime/components/Chip.vue +35 -32
  32. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  33. package/dist/runtime/components/Collapsible.vue +13 -9
  34. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  35. package/dist/runtime/components/Drawer.vue +80 -70
  36. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  37. package/dist/runtime/components/DropdownMenu.vue +23 -16
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  39. package/dist/runtime/components/DropdownMenuContent.vue +136 -106
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  41. package/dist/runtime/components/FieldGroup.vue +33 -0
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  43. package/dist/runtime/components/Form.vue +172 -88
  44. package/dist/runtime/components/Form.vue.d.ts +69 -44
  45. package/dist/runtime/components/FormField.vue +108 -0
  46. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  47. package/dist/runtime/components/Icon.vue +20 -0
  48. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  49. package/dist/runtime/components/Input.vue +84 -79
  50. package/dist/runtime/components/Input.vue.d.ts +55 -43
  51. package/dist/runtime/components/InputNumber.vue +66 -52
  52. package/dist/runtime/components/InputNumber.vue.d.ts +50 -109
  53. package/dist/runtime/components/InputTags.vue +155 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +85 -0
  55. package/dist/runtime/components/Kbd.vue +11 -5
  56. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  57. package/dist/runtime/components/Link.vue +54 -197
  58. package/dist/runtime/components/Link.vue.d.ts +17 -17
  59. package/dist/runtime/components/LinkBase.vue +11 -33
  60. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  61. package/dist/runtime/components/Marquee.vue +38 -0
  62. package/dist/runtime/components/Marquee.vue.d.ts +54 -0
  63. package/dist/runtime/components/Modal.vue +53 -39
  64. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  65. package/dist/runtime/components/NavigationMenu.vue +345 -0
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +216 -0
  67. package/dist/runtime/components/OverlayProvider.vue +3 -3
  68. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  69. package/dist/runtime/components/Pagination.vue +39 -47
  70. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  71. package/dist/runtime/components/PinInput.vue +46 -32
  72. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  73. package/dist/runtime/components/Popover.vue +33 -19
  74. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  75. package/dist/runtime/components/Progress.vue +31 -26
  76. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  77. package/dist/runtime/components/RadioGroup.vue +75 -48
  78. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  79. package/dist/runtime/components/ScrollArea.vue +33 -31
  80. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  81. package/dist/runtime/components/Select.vue +166 -76
  82. package/dist/runtime/components/Select.vue.d.ts +206 -65
  83. package/dist/runtime/components/Separator.vue +42 -16
  84. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  85. package/dist/runtime/components/Skeleton.vue +18 -6
  86. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  87. package/dist/runtime/components/Slider.vue +42 -24
  88. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  89. package/dist/runtime/components/Switch.vue +40 -31
  90. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  91. package/dist/runtime/components/Table.vue +329 -79
  92. package/dist/runtime/components/Table.vue.d.ts +152 -66
  93. package/dist/runtime/components/Tabs.vue +70 -23
  94. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  95. package/dist/runtime/components/Textarea.vue +102 -54
  96. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  97. package/dist/runtime/components/Timeline.vue +102 -0
  98. package/dist/runtime/components/Timeline.vue.d.ts +74 -0
  99. package/dist/runtime/components/Toast.vue +84 -38
  100. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  101. package/dist/runtime/components/ToastProvider.vue +31 -22
  102. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  103. package/dist/runtime/components/Tooltip.vue +33 -21
  104. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  105. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  106. package/dist/runtime/composables/defineShortcuts.js +129 -0
  107. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  108. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  109. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  110. package/dist/runtime/composables/useComponentIcons.js +4 -4
  111. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  112. package/dist/runtime/composables/useFieldGroup.js +14 -0
  113. package/dist/runtime/composables/useFormField.d.ts +62 -0
  114. package/dist/runtime/composables/useFormField.js +99 -0
  115. package/dist/runtime/composables/useKbd.d.ts +3 -2
  116. package/dist/runtime/composables/useKbd.js +3 -2
  117. package/dist/runtime/composables/useLocale.d.ts +68 -5
  118. package/dist/runtime/composables/useLocale.js +11 -11
  119. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  120. package/dist/runtime/composables/useOverlay.js +44 -30
  121. package/dist/runtime/composables/usePortal.d.ts +6 -0
  122. package/dist/runtime/composables/usePortal.js +17 -0
  123. package/dist/runtime/composables/useToast.d.ts +12 -5
  124. package/dist/runtime/composables/useToast.js +12 -7
  125. package/dist/runtime/locale/en.d.ts +30 -1
  126. package/dist/runtime/locale/en.js +2 -1
  127. package/dist/runtime/locale/index.d.ts +2 -2
  128. package/dist/runtime/locale/index.js +1 -1
  129. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  130. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  131. package/dist/runtime/plugins/colors.d.ts +2 -0
  132. package/dist/runtime/plugins/colors.js +50 -0
  133. package/dist/runtime/types/app.config.d.ts +6 -0
  134. package/dist/runtime/types/form.d.ts +58 -17
  135. package/dist/runtime/types/form.js +11 -0
  136. package/dist/runtime/types/index.d.ts +56 -8
  137. package/dist/runtime/types/index.js +49 -1
  138. package/dist/runtime/types/input.d.ts +8 -0
  139. package/dist/runtime/types/locale.d.ts +5 -0
  140. package/dist/runtime/types/style.d.ts +33 -0
  141. package/dist/runtime/types/style.js +0 -0
  142. package/dist/runtime/types/unocss.d.ts +4 -0
  143. package/dist/runtime/types/utils.d.ts +41 -37
  144. package/dist/runtime/utils/form.d.ts +5 -1
  145. package/dist/runtime/utils/form.js +49 -0
  146. package/dist/runtime/utils/index.d.ts +10 -13
  147. package/dist/runtime/utils/index.js +41 -48
  148. package/dist/runtime/utils/link.d.ts +3 -2
  149. package/dist/runtime/utils/link.js +16 -2
  150. package/dist/runtime/utils/locale.d.ts +5 -0
  151. package/dist/runtime/utils/locale.js +10 -0
  152. package/dist/runtime/utils/style.d.ts +94 -0
  153. package/dist/runtime/utils/style.js +37 -0
  154. package/dist/runtime/vue/components/Icon.vue +15 -0
  155. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  156. package/dist/runtime/vue/components/Link.vue +163 -0
  157. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  158. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  159. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  160. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  161. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  162. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  163. package/dist/runtime/vue/plugins/head.js +9 -0
  164. package/dist/runtime/vue/stubs.d.ts +16 -1
  165. package/dist/runtime/vue/stubs.js +32 -1
  166. package/dist/setup.d.mts +13 -0
  167. package/dist/setup.mjs +12 -0
  168. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  169. package/dist/shared/ui.DLOxhmP0.mjs +4242 -0
  170. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  171. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  172. package/dist/types.d.mts +3 -1
  173. package/dist/unocss.d.mts +12 -52
  174. package/dist/unocss.mjs +144 -254
  175. package/dist/unplugin.d.mts +13 -26
  176. package/dist/unplugin.mjs +193 -18
  177. package/dist/vite.d.mts +10 -1
  178. package/dist/vite.mjs +12 -3
  179. package/package.json +154 -87
  180. package/vue-plugin.d.ts +5 -0
  181. package/dist/module.d.ts +0 -13
  182. package/dist/module.mjs.map +0 -1
  183. package/dist/runtime/app/injections.d.ts +0 -9331
  184. package/dist/runtime/app/injections.js +0 -61
  185. package/dist/runtime/components/ButtonGroup.vue +0 -26
  186. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  187. package/dist/runtime/components/FormItem.vue +0 -90
  188. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  189. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  190. package/dist/runtime/composables/useButtonGroup.js +0 -9
  191. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  192. package/dist/runtime/composables/useFormItem.js +0 -64
  193. package/dist/runtime/composables/useTheme.d.ts +0 -9
  194. package/dist/runtime/composables/useTheme.js +0 -23
  195. package/dist/runtime/index.d.ts +0 -44
  196. package/dist/runtime/index.js +0 -44
  197. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  198. package/dist/runtime/theme/accordion.d.ts +0 -50
  199. package/dist/runtime/theme/accordion.js +0 -28
  200. package/dist/runtime/theme/alert.d.ts +0 -119
  201. package/dist/runtime/theme/alert.js +0 -47
  202. package/dist/runtime/theme/app.d.ts +0 -19
  203. package/dist/runtime/theme/app.js +0 -19
  204. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  205. package/dist/runtime/theme/avatar-group.js +0 -32
  206. package/dist/runtime/theme/avatar.d.ts +0 -50
  207. package/dist/runtime/theme/avatar.js +0 -34
  208. package/dist/runtime/theme/badge.d.ts +0 -76
  209. package/dist/runtime/theme/badge.js +0 -92
  210. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  211. package/dist/runtime/theme/breadcrumb.js +0 -44
  212. package/dist/runtime/theme/button-group.d.ts +0 -60
  213. package/dist/runtime/theme/button-group.js +0 -42
  214. package/dist/runtime/theme/button.d.ts +0 -184
  215. package/dist/runtime/theme/button.js +0 -164
  216. package/dist/runtime/theme/calendar.d.ts +0 -58
  217. package/dist/runtime/theme/calendar.js +0 -86
  218. package/dist/runtime/theme/card.d.ts +0 -56
  219. package/dist/runtime/theme/card.js +0 -37
  220. package/dist/runtime/theme/carousel.d.ts +0 -107
  221. package/dist/runtime/theme/carousel.js +0 -43
  222. package/dist/runtime/theme/checkbox.d.ts +0 -82
  223. package/dist/runtime/theme/checkbox.js +0 -54
  224. package/dist/runtime/theme/chip.d.ts +0 -61
  225. package/dist/runtime/theme/chip.js +0 -66
  226. package/dist/runtime/theme/collapsible.d.ts +0 -32
  227. package/dist/runtime/theme/collapsible.js +0 -10
  228. package/dist/runtime/theme/drawer.d.ts +0 -142
  229. package/dist/runtime/theme/drawer.js +0 -113
  230. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  231. package/dist/runtime/theme/dropdown-menu.js +0 -83
  232. package/dist/runtime/theme/form-item.d.ts +0 -70
  233. package/dist/runtime/theme/form-item.js +0 -34
  234. package/dist/runtime/theme/form.d.ts +0 -2
  235. package/dist/runtime/theme/form.js +0 -7
  236. package/dist/runtime/theme/index.d.ts +0 -41
  237. package/dist/runtime/theme/index.js +0 -41
  238. package/dist/runtime/theme/input-number.d.ts +0 -115
  239. package/dist/runtime/theme/input-number.js +0 -95
  240. package/dist/runtime/theme/input.d.ts +0 -172
  241. package/dist/runtime/theme/input.js +0 -151
  242. package/dist/runtime/theme/kbd.d.ts +0 -33
  243. package/dist/runtime/theme/kbd.js +0 -26
  244. package/dist/runtime/theme/link.d.ts +0 -38
  245. package/dist/runtime/theme/link.js +0 -26
  246. package/dist/runtime/theme/modal.d.ts +0 -42
  247. package/dist/runtime/theme/modal.js +0 -55
  248. package/dist/runtime/theme/pagination.d.ts +0 -74
  249. package/dist/runtime/theme/pagination.js +0 -17
  250. package/dist/runtime/theme/pinInput.d.ts +0 -94
  251. package/dist/runtime/theme/pinInput.js +0 -111
  252. package/dist/runtime/theme/popover.d.ts +0 -32
  253. package/dist/runtime/theme/popover.js +0 -13
  254. package/dist/runtime/theme/progress.d.ts +0 -180
  255. package/dist/runtime/theme/progress.js +0 -95
  256. package/dist/runtime/theme/radio-group.d.ts +0 -104
  257. package/dist/runtime/theme/radio-group.js +0 -61
  258. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  259. package/dist/runtime/theme/scroll-area.js +0 -33
  260. package/dist/runtime/theme/select.d.ts +0 -186
  261. package/dist/runtime/theme/select.js +0 -173
  262. package/dist/runtime/theme/separator.d.ts +0 -74
  263. package/dist/runtime/theme/separator.js +0 -53
  264. package/dist/runtime/theme/skeleton.d.ts +0 -2
  265. package/dist/runtime/theme/skeleton.js +0 -7
  266. package/dist/runtime/theme/slider.d.ts +0 -70
  267. package/dist/runtime/theme/slider.js +0 -52
  268. package/dist/runtime/theme/switch.d.ts +0 -116
  269. package/dist/runtime/theme/switch.js +0 -78
  270. package/dist/runtime/theme/table.d.ts +0 -86
  271. package/dist/runtime/theme/table.js +0 -36
  272. package/dist/runtime/theme/tabs.d.ts +0 -129
  273. package/dist/runtime/theme/tabs.js +0 -146
  274. package/dist/runtime/theme/textarea.d.ts +0 -90
  275. package/dist/runtime/theme/textarea.js +0 -116
  276. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  277. package/dist/runtime/theme/toast-provider.js +0 -97
  278. package/dist/runtime/theme/toast.d.ts +0 -83
  279. package/dist/runtime/theme/toast.js +0 -35
  280. package/dist/runtime/theme/tooltip.d.ts +0 -38
  281. package/dist/runtime/theme/tooltip.js +0 -11
  282. package/dist/runtime/types/components.d.ts +0 -42
  283. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  284. package/dist/runtime/utils/extend-theme.js +0 -27
  285. package/dist/runtime/utils/styler.d.ts +0 -4
  286. package/dist/runtime/utils/styler.js +0 -10
  287. package/dist/runtime/utils/translator.d.ts +0 -18
  288. package/dist/runtime/utils/translator.js +0 -8
  289. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  290. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  291. package/dist/unocss.d.ts +0 -52
  292. package/dist/unocss.mjs.map +0 -1
  293. package/dist/unplugin.d.ts +0 -26
  294. package/dist/unplugin.mjs.map +0 -1
  295. package/dist/vite.d.ts +0 -9
  296. package/dist/vite.mjs.map +0 -1
  297. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,25 +1,32 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/toast";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { reactivePick, useElementBounding } from "@vueuse/core";
6
+ import { reactivePick } from "@vueuse/core";
7
7
  import { ToastAction, ToastClose, ToastDescription, ToastRoot, ToastTitle, useForwardPropsEmits } from "reka-ui";
8
- import { computed, ref } from "vue";
8
+ import { computed, nextTick, onMounted, shallowRef } from "vue";
9
+ import { useAppConfig } from "#imports";
9
10
  import { useLocale } from "../composables/useLocale";
10
- import { useTheme } from "../composables/useTheme";
11
+ import { cv, merge } from "../utils/style";
12
+ import Avatar from "./Avatar.vue";
11
13
  import Button from "./Button.vue";
14
+ import Icon from "./Icon.vue";
15
+ import Progress from "./Progress.vue";
12
16
  const props = defineProps({
13
17
  as: { type: null, required: false },
14
- title: { type: String, required: false },
15
- description: { type: String, required: false },
16
- icon: { type: String, required: false },
18
+ title: { type: [String, Object, Function], required: false },
19
+ description: { type: [String, Object, Function], required: false },
20
+ icon: { type: [String, Object], required: false },
21
+ avatar: { type: Object, required: false },
22
+ color: { type: null, required: false },
17
23
  orientation: { type: null, required: false, default: "vertical" },
18
24
  actions: { type: Array, required: false },
19
- close: { type: [Object, Boolean], required: false, default: true },
20
- closeIcon: { type: String, required: false },
21
- class: { type: null, required: false },
25
+ close: { type: [Boolean, Object], required: false, default: true },
26
+ closeIcon: { type: [String, Object], required: false },
27
+ progress: { type: [Boolean, Object], required: false, default: true },
22
28
  ui: { type: null, required: false },
29
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
23
30
  defaultOpen: { type: Boolean, required: false },
24
31
  open: { type: Boolean, required: false },
25
32
  type: { type: String, required: false },
@@ -28,14 +35,24 @@ const props = defineProps({
28
35
  const emit = defineEmits(["escapeKeyDown", "pause", "resume", "swipeStart", "swipeMove", "swipeCancel", "swipeEnd", "update:open"]);
29
36
  const slots = defineSlots();
30
37
  const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultOpen", "open", "duration", "type"), emit);
31
- const el = ref();
32
- const { height } = useElementBounding(() => el.value?.$el.getBoundingClientRect ? el.value.$el : void 0);
33
38
  const { t } = useLocale();
34
- const { theme, generateStyle } = useTheme();
35
- const style = computed(() => generateStyle("toast", {
36
- ...props,
37
- title: !!(props.title || slots.title)
38
- }));
39
+ const appConfig = useAppConfig();
40
+ const ui = computed(() => {
41
+ const styler = cv(merge(theme, appConfig.ui.toast));
42
+ return styler({
43
+ ...props,
44
+ title: !!props.title || !!slots.title
45
+ });
46
+ });
47
+ const el = shallowRef();
48
+ const height = shallowRef(0);
49
+ onMounted(() => {
50
+ if (!el.value)
51
+ return;
52
+ nextTick(() => {
53
+ height.value = el.value?.$el?.getBoundingClientRect()?.height;
54
+ });
55
+ });
39
56
  defineExpose({
40
57
  height
41
58
  });
@@ -44,59 +61,81 @@ defineExpose({
44
61
  <template>
45
62
  <ToastRoot
46
63
  ref="el"
47
- v-slot="{ remaining, duration }"
64
+ v-slot="{ remaining, duration, open }"
48
65
  v-bind="rootProps"
49
- :class="style.root({ class: [props.class, props.ui?.root] })"
66
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
67
+ :data-orientation="props.orientation"
50
68
  data-part="root"
51
69
  :style="{ '--height': height }"
52
70
  >
53
- <slot name="icon">
54
- <span v-if="props.icon" :class="style.icon({ class: [props.icon, props.ui?.icon] })" data-part="icon"></span>
71
+ <slot name="leading" :ui="ui">
72
+ <Avatar
73
+ v-if="props.avatar"
74
+ :size="props.ui?.avatarSize || ui.avatarSize()"
75
+ v-bind="props.avatar"
76
+ :class="ui.avatar({ class: props.ui?.avatar })"
77
+ data-part="avatar"
78
+ />
79
+ <Icon
80
+ v-else-if="props.icon"
81
+ :name="props.icon"
82
+ :class="ui.icon({ class: props.ui?.icon })"
83
+ data-part="icon"
84
+ />
55
85
  </slot>
56
86
 
57
- <div :class="style.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
58
- <ToastTitle v-if="props.title || !!slots.title" :class="style.title({ class: props.ui?.title })" data-part="title">
87
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
88
+ <ToastTitle v-if="props.title || !!slots.title" :class="ui.title({ class: props.ui?.title })" data-part="title">
59
89
  <slot name="title">
60
- {{ props.title }}
90
+ <component :is="props.title()" v-if="typeof props.title === 'function'" />
91
+ <component :is="props.title" v-else-if="typeof props.title === 'object'" />
92
+ <template v-else>
93
+ {{ props.title }}
94
+ </template>
61
95
  </slot>
62
96
  </ToastTitle>
63
- <ToastDescription v-if="props.description || !!slots.description" :class="style.description({ class: props.ui?.description })" data-part="description">
97
+ <ToastDescription v-if="props.description || !!slots.description" :class="ui.description({ class: props.ui?.description })" data-part="description">
64
98
  <slot name="description">
65
- {{ props.description }}
99
+ <component :is="props.description()" v-if="typeof props.description === 'function'" />
100
+ <component :is="props.description" v-else-if="typeof props.description === 'object'" />
101
+ <template v-else>
102
+ {{ props.description }}
103
+ </template>
66
104
  </slot>
67
105
  </ToastDescription>
68
106
 
69
- <div v-if="props.orientation === 'vertical' && actions?.length" :class="style.actions({ class: props.ui?.actions })" data-part="actions">
107
+ <div v-if="props.orientation === 'vertical' && (props.actions?.length || slots.actions)" :class="ui.actions({ class: props.ui?.actions })" data-part="actions">
70
108
  <slot name="actions">
71
109
  <ToastAction v-for="(action, index) in props.actions" :key="index" :alt-text="action.label || 'Action'" as-child @click.stop>
72
- <Button size="xs" v-bind="action" />
110
+ <Button size="xs" :color="props.color" v-bind="action" />
73
111
  </ToastAction>
74
112
  </slot>
75
113
  </div>
76
114
  </div>
77
115
 
78
116
  <div
79
- v-if="props.orientation === 'horizontal' && actions?.length || props.close || slots.close"
80
- :class="style.actions({ class: props.ui?.actions })"
117
+ v-if="props.orientation === 'horizontal' && (props.actions?.length || !!slots.actions) || props.close"
118
+ :class="ui.actions({ class: props.ui?.actions })"
81
119
  data-part="actions"
82
120
  >
83
121
  <template v-if="props.orientation === 'horizontal'">
84
122
  <slot name="actions">
85
123
  <ToastAction v-for="(action, index) in props.actions" :key="index" :alt-text="action.label || 'Action'" as-child @click.stop>
86
- <Button size="xs" v-bind="action" />
124
+ <Button size="xs" :color="props.color" v-bind="action" />
87
125
  </ToastAction>
88
126
  </slot>
89
127
  </template>
90
128
 
91
- <ToastClose v-if="props.close || slots.close" as-child>
92
- <slot name="close" :ui="props.ui">
129
+ <ToastClose v-if="props.close || !!slots.close" as-child>
130
+ <slot name="close" :ui="ui">
93
131
  <Button
94
- :icon="props.closeIcon || theme.app.icons.close"
95
- size="sm"
132
+ v-if="props.close"
133
+ :icon="props.closeIcon || appConfig.ui.icons.close"
134
+ color="neutral"
96
135
  variant="link"
97
136
  :aria-label="t('toast.close')"
98
- v-bind="typeof close === 'object' ? close : void 0"
99
- :class="style.close({ class: props.ui?.close })"
137
+ v-bind="typeof props.close === 'object' ? props.close : {}"
138
+ :class="ui.close({ class: props.ui?.close })"
100
139
  data-part="close"
101
140
  @click.stop
102
141
  />
@@ -104,6 +143,13 @@ defineExpose({
104
143
  </ToastClose>
105
144
  </div>
106
145
 
107
- <div v-if="remaining >= 0 && duration" :class="style.progress({ class: props.ui?.progress })" data-part="progress" :style="{ width: `${remaining / duration * 100}%` }"></div>
146
+ <Progress
147
+ v-if="props.progress && open && remaining >= 0 && duration"
148
+ :model-value="remaining / duration * 100"
149
+ :color="props.color"
150
+ v-bind="typeof props.progress === 'object' ? props.progress : {}"
151
+ size="sm"
152
+ :class="ui.progress({ class: props.ui?.progress })"
153
+ />
108
154
  </ToastRoot>
109
155
  </template>
@@ -1,26 +1,23 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps, ToastRootEmits, ToastRootProps } from 'reka-ui';
3
- import type { toast } from '../theme/index.js';
4
- import type { ButtonProps, ComponentAttrs } from '../types/index.js';
5
- export interface ToastEmits extends ToastRootEmits {
6
- }
7
- export interface ToastSlots {
8
- icon?: (props?: {}) => any;
9
- title?: (props?: {}) => any;
10
- description?: (props?: {}) => any;
11
- actions?: (props?: {}) => any;
12
- close?: (props: {
13
- ui: ComponentAttrs<typeof toast>['ui'];
14
- }) => any;
15
- }
16
- type ToastVariants = VariantProps<typeof toast>;
17
- export interface ToastProps extends ComponentAttrs<typeof toast>, Pick<ToastRootProps, 'defaultOpen' | 'open' | 'type' | 'duration'> {
18
- /** @default "li" */
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
+ */
19
12
  as?: PrimitiveProps['as'];
20
- title?: string;
21
- description?: string;
22
- icon?: string;
23
- orientation?: ToastVariants['orientation'];
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'];
24
21
  /**
25
22
  * Display a list of actions:
26
23
  * - under the title and description when orientation is `vertical`
@@ -31,16 +28,38 @@ export interface ToastProps extends ComponentAttrs<typeof toast>, Pick<ToastRoot
31
28
  * Display a close button to dismiss the toast.
32
29
  * @default true
33
30
  */
34
- close?: ButtonProps | boolean;
35
- /** @default app.icons.close */
36
- closeIcon?: string;
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
+ }>;
37
56
  }
38
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ToastProps, {
57
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ToastProps, {
39
58
  height: import("vue").ShallowRef<number, number>;
40
59
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
60
+ pause: () => any;
41
61
  "update:open": (value: boolean) => any;
42
62
  escapeKeyDown: (event: KeyboardEvent) => any;
43
- pause: () => any;
44
63
  resume: () => any;
45
64
  swipeStart: (event: {
46
65
  currentTarget: EventTarget & HTMLElement;
@@ -79,9 +98,9 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ToastProps
79
98
  };
80
99
  }>, "currentTarget">) => any;
81
100
  }, string, import("vue").PublicProps, Readonly<ToastProps> & Readonly<{
101
+ onPause?: (() => any) | undefined;
82
102
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
83
103
  onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
84
- onPause?: (() => any) | undefined;
85
104
  onResume?: (() => any) | undefined;
86
105
  onSwipeStart?: ((event: {
87
106
  currentTarget: EventTarget & HTMLElement;
@@ -120,9 +139,11 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ToastProps
120
139
  };
121
140
  }>, "currentTarget">) => any) | undefined;
122
141
  }>, {
123
- close: ButtonProps | boolean;
142
+ close: boolean | Partial<ButtonProps>;
143
+ progress: boolean | Pick<ProgressProps, "color" | "ui">;
124
144
  orientation: "horizontal" | "vertical";
125
145
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ToastSlots>;
146
+ declare const _default: typeof __VLS_export;
126
147
  export default _default;
127
148
  type __VLS_WithSlots<T, S> = T & {
128
149
  new (): {
@@ -1,28 +1,35 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/toast-provider";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
- import { ToastPortal, ToastProvider, ToastViewport, useForwardProps } from "reka-ui";
8
- import { computed, ref } from "vue";
9
- import { useTheme } from "../composables/useTheme";
10
- import { useToast } from "../composables/useToast";
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";
11
12
  import { omit } from "../utils";
13
+ import { cv, merge } from "../utils/style";
12
14
  import Toast from "./Toast.vue";
13
15
  const props = defineProps({
14
- position: { type: null, required: false, default: "bottom-right" },
16
+ position: { type: null, required: false },
15
17
  expand: { type: Boolean, required: false, default: true },
16
- portal: { type: Boolean, required: false, default: true },
17
- class: { type: null, required: false },
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 },
18
21
  ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
19
23
  label: { type: String, required: false },
20
24
  duration: { type: Number, required: false, default: 5e3 },
25
+ disableSwipe: { type: Boolean, required: false },
21
26
  swipeThreshold: { type: Number, required: false }
22
27
  });
23
28
  defineSlots();
24
29
  const providerProps = useForwardProps(reactivePick(props, "duration", "label", "swipeThreshold"));
30
+ const portalProps = usePortal(toRef(() => props.portal));
25
31
  const { toasts, remove } = useToast();
32
+ provideToastMax(toRef(() => props.max));
26
33
  const swipeDirection = computed(() => {
27
34
  switch (props.position) {
28
35
  case "top-center":
@@ -36,15 +43,16 @@ const swipeDirection = computed(() => {
36
43
  case "bottom-left":
37
44
  return "left";
38
45
  }
39
- console.warn(`[ToastProvider] Unknown position "${props.position}"`);
40
46
  return "right";
41
47
  });
42
- const { generateStyle } = useTheme();
43
- const style = computed(() => generateStyle("toastProvider", {
44
- ...props,
45
- swipeDirection: swipeDirection.value,
46
- clickable: false
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
+ });
48
56
  function onUpdateOpen(value, id) {
49
57
  if (value)
50
58
  return;
@@ -53,7 +61,7 @@ function onUpdateOpen(value, id) {
53
61
  const hovered = ref(false);
54
62
  const expanded = computed(() => props.expand || hovered.value);
55
63
  const refs = ref([]);
56
- const height = computed(() => refs.value.reduce((sum, { height: height2 }) => sum + height2 + 16, 0));
64
+ const height = computed(() => refs.value.reduce((acc, { height: height2 }) => acc + height2 + 16, 0));
57
65
  const frontHeight = computed(() => refs.value[refs.value.length - 1]?.height || 0);
58
66
  function getOffset(index) {
59
67
  return refs.value.slice(index + 1).reduce((acc, { height: height2 }) => acc + height2 + 16, 0);
@@ -61,14 +69,15 @@ function getOffset(index) {
61
69
  </script>
62
70
 
63
71
  <template>
64
- <ToastProvider :swipe-direction="swipeDirection" v-bind="providerProps">
72
+ <RekaToastProvider :swipe-direction="swipeDirection" v-bind="providerProps">
65
73
  <slot></slot>
66
74
 
67
75
  <Toast
68
76
  v-for="(toast, index) of toasts"
69
77
  :key="toast.id"
70
78
  ref="refs"
71
- v-bind="omit(toast, ['id'])"
79
+ :progress="props.progress"
80
+ v-bind="omit(toast, ['id', 'close'])"
72
81
  :data-expanded="expanded"
73
82
  :data-front="!expanded && index === toasts.length - 1"
74
83
  :style="{
@@ -79,16 +88,16 @@ function getOffset(index) {
79
88
  '--translate': expanded ? 'calc(var(--offset) * var(--translate-factor))' : 'calc(var(--before) * var(--gap))',
80
89
  '--transform': 'translateY(var(--translate)) scale(var(--scale))'
81
90
  }"
82
- :class="style.base({ clickable: !!toast.onClick })"
91
+ :class="ui.base({ class: props.ui?.base })"
83
92
  data-part="base"
84
93
  @update:open="onUpdateOpen($event, toast.id)"
85
94
  @click="toast.onClick && toast.onClick(toast)"
86
95
  />
87
96
 
88
- <ToastPortal :disabled="!portal">
97
+ <ToastPortal v-bind="portalProps">
89
98
  <ToastViewport
90
99
  :data-expanded="expanded"
91
- :class="style.viewport({ class: [props.class, props.ui?.viewport] })"
100
+ :class="ui.viewport({ class: [props.ui?.viewport, props.class] })"
92
101
  data-part="viewport"
93
102
  :style="{
94
103
  '--scale-factor': '0.05',
@@ -101,7 +110,7 @@ function getOffset(index) {
101
110
  @mouseleave="hovered = false"
102
111
  />
103
112
  </ToastPortal>
104
- </ToastProvider>
113
+ </RekaToastProvider>
105
114
  </template>
106
115
 
107
116
  <style>
@@ -1,35 +1,48 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { ToastProviderProps as RekaToastProviderProps } from 'reka-ui';
3
- import type { toastProvider } from '../theme/index.js';
4
- import type { ComponentAttrs, ToastProps } from '../types/index.js';
5
- export interface ToastState extends Omit<ToastProps, 'defaultOpen'> {
6
- id: string | number;
7
- onClick?: (toast: ToastState) => void;
8
- }
9
- export interface ToasterSlots {
10
- default?: (props?: {}) => any;
11
- }
12
- type ToasterVariants = VariantProps<typeof toastProvider>;
13
- export interface ToastProviderProps extends ComponentAttrs<typeof toastProvider>, Omit<RekaToastProviderProps, 'swipeDirection'> {
14
- /** @default "bottom-right" */
15
- position?: ToasterVariants['position'];
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'];
16
13
  /**
17
14
  * Expand the toasts to show multiple toasts at once.
18
15
  * @default true
19
16
  */
20
17
  expand?: boolean;
18
+ /**
19
+ * Whether to show the progress bar on all toasts.
20
+ * @default true
21
+ */
22
+ progress?: boolean;
21
23
  /**
22
24
  * Render the toaster in a portal.
23
25
  * @default true
24
26
  */
25
- portal?: boolean;
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;
26
37
  }
27
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ToastProviderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ToastProviderProps> & Readonly<{}>, {
28
- position: "top-right" | "bottom-right" | "top-left" | "bottom-left" | "top-center" | "bottom-center";
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;
29
41
  duration: number;
42
+ max: number;
30
43
  expand: boolean;
31
- portal: boolean;
32
44
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ToasterSlots>;
45
+ declare const _default: typeof __VLS_export;
33
46
  export default _default;
34
47
  type __VLS_WithSlots<T, S> = T & {
35
48
  new (): {
@@ -1,20 +1,24 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/tooltip";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
- import { defu } from "defu";
8
7
  import { TooltipArrow, TooltipContent, TooltipPortal, TooltipRoot, TooltipTrigger, useForwardPropsEmits } from "reka-ui";
9
8
  import { computed, toRef } from "vue";
10
- import { useTheme } from "../composables/useTheme";
9
+ import { useAppConfig } from "#imports";
10
+ import { usePortal } from "../composables/usePortal";
11
+ import { cv, merge } from "../utils/style";
12
+ import Kbd from "./Kbd.vue";
11
13
  const props = defineProps({
12
14
  text: { type: String, required: false },
15
+ kbds: { type: Array, required: false },
13
16
  content: { type: Object, required: false },
14
17
  arrow: { type: [Boolean, Object], required: false },
15
- portal: { type: Boolean, required: false, default: true },
16
- class: { type: null, required: false },
18
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
19
+ reference: { type: null, required: false },
17
20
  ui: { type: null, required: false },
21
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
18
22
  defaultOpen: { type: Boolean, required: false },
19
23
  open: { type: Boolean, required: false },
20
24
  delayDuration: { type: Number, required: false },
@@ -25,32 +29,40 @@ const props = defineProps({
25
29
  });
26
30
  const emit = defineEmits(["update:open"]);
27
31
  const slots = defineSlots();
28
- const rootProps = useForwardPropsEmits(reactivePick(props, "defaultOpen", "open", "delayDuration", "disableHoverableContent", "disableClosingTrigger", "disabled", "ignoreNonKeyboardFocus"), emit);
29
- const contentDefaults = {
30
- side: "bottom",
31
- sideOffset: 8,
32
- collisionPadding: 8
33
- };
34
- const contentProps = toRef(() => defu(props.content, contentDefaults));
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
35
  const arrowProps = toRef(() => props.arrow);
36
- const { generateStyle } = useTheme();
37
- const style = computed(() => generateStyle("tooltip", props));
36
+ const appConfig = useAppConfig();
37
+ const ui = computed(() => {
38
+ const styler = cv(merge(theme, appConfig.ui.tooltip));
39
+ return styler(props);
40
+ });
38
41
  </script>
39
42
 
40
43
  <template>
41
- <TooltipRoot v-slot="{ open }" v-bind="rootProps">
42
- <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">
43
46
  <slot :open="open">
44
47
  </slot>
45
48
  </TooltipTrigger>
46
49
 
47
- <TooltipPortal :disabled="!props.portal">
48
- <TooltipContent v-bind="contentProps" :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })" data-part="content">
49
- <slot name="content">
50
- <span v-if="props.text" :class="style.text({ class: props.ui?.text })" data-part="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>
51
63
  </slot>
52
64
 
53
- <TooltipArrow v-if="props.arrow" v-bind="arrowProps" :class="style.arrow({ class: props.ui?.arrow })" data-part="arrow" />
65
+ <TooltipArrow v-if="props.arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" data-part="arrow" />
54
66
  </TooltipContent>
55
67
  </TooltipPortal>
56
68
  </TooltipRoot>
@@ -1,28 +1,50 @@
1
- import type { TooltipArrowProps, TooltipContentEmits, TooltipContentProps, TooltipRootEmits, TooltipRootProps } from 'reka-ui';
2
- import type { tooltip } from '../theme/index.js';
3
- import type { ComponentAttrs, EmitsToProps } from '../types/index.js';
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
+ }
4
30
  export interface TooltipEmits extends TooltipRootEmits {
5
31
  }
6
32
  export interface TooltipSlots {
7
- default?: (props: {
33
+ default: StaticSlot<{
8
34
  open: boolean;
9
- }) => any;
10
- content?: (props: {}) => any;
11
- }
12
- export interface TooltipProps extends ComponentAttrs<typeof tooltip>, TooltipRootProps {
13
- text?: string;
14
- content?: Omit<TooltipContentProps, 'as' | 'asChild'> & Partial<EmitsToProps<TooltipContentEmits>>;
15
- arrow?: boolean | Omit<TooltipArrowProps, 'as' | 'asChild'>;
16
- /** @default true */
17
- portal?: boolean;
35
+ }>;
36
+ content: StaticSlot<{
37
+ ui: ComponentStyler<typeof theme>;
38
+ }>;
18
39
  }
19
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<TooltipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
40
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<TooltipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
41
  "update:open": (value: boolean) => any;
21
42
  }, string, import("vue").PublicProps, Readonly<TooltipProps> & Readonly<{
22
43
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
23
44
  }>, {
24
- portal: boolean;
45
+ portal: boolean | string | HTMLElement;
25
46
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, TooltipSlots>;
47
+ declare const _default: typeof __VLS_export;
26
48
  export default _default;
27
49
  type __VLS_WithSlots<T, S> = T & {
28
50
  new (): {