@byyuurin/ui 0.0.11 → 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 +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 +48 -39
  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 +80 -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/Chip.vue +35 -32
  30. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  31. package/dist/runtime/components/Collapsible.vue +13 -9
  32. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  33. package/dist/runtime/components/Drawer.vue +80 -70
  34. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  35. package/dist/runtime/components/DropdownMenu.vue +23 -16
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  37. package/dist/runtime/components/DropdownMenuContent.vue +133 -103
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  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 +172 -88
  42. package/dist/runtime/components/Form.vue.d.ts +69 -44
  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 +82 -77
  48. package/dist/runtime/components/Input.vue.d.ts +55 -43
  49. package/dist/runtime/components/InputNumber.vue +65 -49
  50. package/dist/runtime/components/InputNumber.vue.d.ts +51 -105
  51. package/dist/runtime/components/Kbd.vue +11 -5
  52. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  53. package/dist/runtime/components/Link.vue +54 -197
  54. package/dist/runtime/components/Link.vue.d.ts +17 -17
  55. package/dist/runtime/components/LinkBase.vue +11 -33
  56. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  57. package/dist/runtime/components/Modal.vue +53 -39
  58. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  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 +3 -3
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  63. package/dist/runtime/components/Pagination.vue +39 -47
  64. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  65. package/dist/runtime/components/PinInput.vue +46 -32
  66. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  67. package/dist/runtime/components/Popover.vue +33 -19
  68. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  69. package/dist/runtime/components/Progress.vue +31 -26
  70. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  71. package/dist/runtime/components/RadioGroup.vue +75 -48
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  73. package/dist/runtime/components/ScrollArea.vue +33 -31
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  75. package/dist/runtime/components/Select.vue +166 -76
  76. package/dist/runtime/components/Select.vue.d.ts +206 -65
  77. package/dist/runtime/components/Separator.vue +42 -16
  78. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  79. package/dist/runtime/components/Skeleton.vue +18 -6
  80. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  81. package/dist/runtime/components/Slider.vue +42 -24
  82. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  83. package/dist/runtime/components/Switch.vue +40 -31
  84. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  85. package/dist/runtime/components/Table.vue +279 -51
  86. package/dist/runtime/components/Table.vue.d.ts +151 -65
  87. package/dist/runtime/components/Tabs.vue +70 -23
  88. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  89. package/dist/runtime/components/Textarea.vue +102 -54
  90. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  91. package/dist/runtime/components/Toast.vue +84 -38
  92. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  93. package/dist/runtime/components/ToastProvider.vue +31 -22
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  95. package/dist/runtime/components/Tooltip.vue +33 -21
  96. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  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 +3 -2
  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 -254
  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 +154 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.d.ts +0 -13
  174. package/dist/module.mjs.map +0 -1
  175. package/dist/runtime/app/injections.d.ts +0 -9331
  176. package/dist/runtime/app/injections.js +0 -61
  177. package/dist/runtime/components/ButtonGroup.vue +0 -26
  178. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  179. package/dist/runtime/components/FormItem.vue +0 -90
  180. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  181. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  182. package/dist/runtime/composables/useButtonGroup.js +0 -9
  183. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  184. package/dist/runtime/composables/useFormItem.js +0 -64
  185. package/dist/runtime/composables/useTheme.d.ts +0 -9
  186. package/dist/runtime/composables/useTheme.js +0 -23
  187. package/dist/runtime/index.d.ts +0 -44
  188. package/dist/runtime/index.js +0 -44
  189. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  190. package/dist/runtime/theme/accordion.d.ts +0 -50
  191. package/dist/runtime/theme/accordion.js +0 -28
  192. package/dist/runtime/theme/alert.d.ts +0 -119
  193. package/dist/runtime/theme/alert.js +0 -47
  194. package/dist/runtime/theme/app.d.ts +0 -19
  195. package/dist/runtime/theme/app.js +0 -19
  196. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  197. package/dist/runtime/theme/avatar-group.js +0 -32
  198. package/dist/runtime/theme/avatar.d.ts +0 -50
  199. package/dist/runtime/theme/avatar.js +0 -34
  200. package/dist/runtime/theme/badge.d.ts +0 -76
  201. package/dist/runtime/theme/badge.js +0 -92
  202. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  203. package/dist/runtime/theme/breadcrumb.js +0 -44
  204. package/dist/runtime/theme/button-group.d.ts +0 -60
  205. package/dist/runtime/theme/button-group.js +0 -42
  206. package/dist/runtime/theme/button.d.ts +0 -184
  207. package/dist/runtime/theme/button.js +0 -164
  208. package/dist/runtime/theme/calendar.d.ts +0 -58
  209. package/dist/runtime/theme/calendar.js +0 -86
  210. package/dist/runtime/theme/card.d.ts +0 -56
  211. package/dist/runtime/theme/card.js +0 -37
  212. package/dist/runtime/theme/carousel.d.ts +0 -107
  213. package/dist/runtime/theme/carousel.js +0 -43
  214. package/dist/runtime/theme/checkbox.d.ts +0 -82
  215. package/dist/runtime/theme/checkbox.js +0 -54
  216. package/dist/runtime/theme/chip.d.ts +0 -61
  217. package/dist/runtime/theme/chip.js +0 -66
  218. package/dist/runtime/theme/collapsible.d.ts +0 -32
  219. package/dist/runtime/theme/collapsible.js +0 -10
  220. package/dist/runtime/theme/drawer.d.ts +0 -142
  221. package/dist/runtime/theme/drawer.js +0 -113
  222. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  223. package/dist/runtime/theme/dropdown-menu.js +0 -83
  224. package/dist/runtime/theme/form-item.d.ts +0 -70
  225. package/dist/runtime/theme/form-item.js +0 -34
  226. package/dist/runtime/theme/form.d.ts +0 -2
  227. package/dist/runtime/theme/form.js +0 -7
  228. package/dist/runtime/theme/index.d.ts +0 -41
  229. package/dist/runtime/theme/index.js +0 -41
  230. package/dist/runtime/theme/input-number.d.ts +0 -115
  231. package/dist/runtime/theme/input-number.js +0 -95
  232. package/dist/runtime/theme/input.d.ts +0 -172
  233. package/dist/runtime/theme/input.js +0 -151
  234. package/dist/runtime/theme/kbd.d.ts +0 -33
  235. package/dist/runtime/theme/kbd.js +0 -26
  236. package/dist/runtime/theme/link.d.ts +0 -38
  237. package/dist/runtime/theme/link.js +0 -26
  238. package/dist/runtime/theme/modal.d.ts +0 -42
  239. package/dist/runtime/theme/modal.js +0 -55
  240. package/dist/runtime/theme/pagination.d.ts +0 -74
  241. package/dist/runtime/theme/pagination.js +0 -17
  242. package/dist/runtime/theme/pinInput.d.ts +0 -94
  243. package/dist/runtime/theme/pinInput.js +0 -111
  244. package/dist/runtime/theme/popover.d.ts +0 -32
  245. package/dist/runtime/theme/popover.js +0 -13
  246. package/dist/runtime/theme/progress.d.ts +0 -180
  247. package/dist/runtime/theme/progress.js +0 -95
  248. package/dist/runtime/theme/radio-group.d.ts +0 -104
  249. package/dist/runtime/theme/radio-group.js +0 -61
  250. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  251. package/dist/runtime/theme/scroll-area.js +0 -33
  252. package/dist/runtime/theme/select.d.ts +0 -186
  253. package/dist/runtime/theme/select.js +0 -173
  254. package/dist/runtime/theme/separator.d.ts +0 -74
  255. package/dist/runtime/theme/separator.js +0 -53
  256. package/dist/runtime/theme/skeleton.d.ts +0 -2
  257. package/dist/runtime/theme/skeleton.js +0 -7
  258. package/dist/runtime/theme/slider.d.ts +0 -70
  259. package/dist/runtime/theme/slider.js +0 -52
  260. package/dist/runtime/theme/switch.d.ts +0 -116
  261. package/dist/runtime/theme/switch.js +0 -78
  262. package/dist/runtime/theme/table.d.ts +0 -86
  263. package/dist/runtime/theme/table.js +0 -36
  264. package/dist/runtime/theme/tabs.d.ts +0 -129
  265. package/dist/runtime/theme/tabs.js +0 -146
  266. package/dist/runtime/theme/textarea.d.ts +0 -90
  267. package/dist/runtime/theme/textarea.js +0 -116
  268. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  269. package/dist/runtime/theme/toast-provider.js +0 -97
  270. package/dist/runtime/theme/toast.d.ts +0 -83
  271. package/dist/runtime/theme/toast.js +0 -35
  272. package/dist/runtime/theme/tooltip.d.ts +0 -38
  273. package/dist/runtime/theme/tooltip.js +0 -11
  274. package/dist/runtime/types/components.d.ts +0 -42
  275. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  276. package/dist/runtime/utils/extend-theme.js +0 -27
  277. package/dist/runtime/utils/styler.d.ts +0 -4
  278. package/dist/runtime/utils/styler.js +0 -10
  279. package/dist/runtime/utils/translator.d.ts +0 -18
  280. package/dist/runtime/utils/translator.js +0 -8
  281. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  282. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  283. package/dist/unocss.d.ts +0 -52
  284. package/dist/unocss.mjs.map +0 -1
  285. package/dist/unplugin.d.ts +0 -26
  286. package/dist/unplugin.mjs.map +0 -1
  287. package/dist/vite.d.ts +0 -9
  288. package/dist/vite.mjs.map +0 -1
  289. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,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 (): {
@@ -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 {};
@@ -0,0 +1,129 @@
1
+ import { useActiveElement, useDebounceFn, useEventListener } from "@vueuse/core";
2
+ import { computed, ref, toValue } from "vue";
3
+ import { useKbd } from "./useKbd.js";
4
+ const chainedShortcutRegex = /^[^-]+.*-.*[^-]+$/;
5
+ const combinedShortcutRegex = /^[^_]+.*_.*[^_]+$/;
6
+ const shiftableKeys = /* @__PURE__ */ new Set(["arrowleft", "arrowright", "arrowup", "arrowright", "tab", "escape", "enter", "backspace"]);
7
+ export function extractShortcuts(items) {
8
+ const shortcuts = {};
9
+ function traverse(items2) {
10
+ items2.forEach((item) => {
11
+ if (item.kbds?.length && (item.onSelect || item.onClick)) {
12
+ const shortcutKey = item.kbds.join("_");
13
+ shortcuts[shortcutKey] = item.onSelect || item.onClick;
14
+ }
15
+ if (item.children)
16
+ traverse(item.children.flat());
17
+ if (item.items)
18
+ traverse(item.items.flat());
19
+ });
20
+ }
21
+ traverse(items.flat());
22
+ return shortcuts;
23
+ }
24
+ export function defineShortcuts(config, options = {}) {
25
+ const chainedInputs = ref([]);
26
+ const clearChainedInput = () => {
27
+ chainedInputs.value.splice(0, chainedInputs.value.length);
28
+ };
29
+ const debouncedClearChainedInput = useDebounceFn(clearChainedInput, options.chainDelay ?? 800);
30
+ const { macOS } = useKbd();
31
+ const activeElement = useActiveElement();
32
+ const usingInput = computed(() => {
33
+ const tagName = activeElement.value?.tagName;
34
+ const contentEditable = activeElement.value?.contentEditable;
35
+ const usingInput2 = !!(tagName === "INPUT" || tagName === "TEXTAREA" || contentEditable === "true" || contentEditable === "plaintext-only");
36
+ if (usingInput2)
37
+ return activeElement.value?.name || true;
38
+ return false;
39
+ });
40
+ const shortcuts = computed(() => {
41
+ return Object.entries(toValue(config)).map(([key, shortcutConfig]) => {
42
+ if (!shortcutConfig)
43
+ return null;
44
+ let shortcut;
45
+ if (key.includes("-") && key !== "-" && !key.includes("_") && !key.match(chainedShortcutRegex)?.length)
46
+ console.trace(`[Shortcut] Invalid key: "${key}"`);
47
+ if (key.includes("_") && key !== "_" && !key.match(combinedShortcutRegex)?.length)
48
+ console.trace(`[Shortcut] Invalid key: "${key}"`);
49
+ const chained = key.includes("-") && key !== "-" && !key.includes("_");
50
+ if (chained) {
51
+ shortcut = {
52
+ key: key.toLowerCase(),
53
+ metaKey: false,
54
+ ctrlKey: false,
55
+ shiftKey: false,
56
+ altKey: false
57
+ };
58
+ } else {
59
+ const keySplit = key.toLowerCase().split("_").map((k) => k);
60
+ shortcut = {
61
+ key: keySplit.filter((k) => !["meta", "command", "ctrl", "shift", "alt", "option"].includes(k)).join("_"),
62
+ metaKey: keySplit.includes("meta") || keySplit.includes("command"),
63
+ ctrlKey: keySplit.includes("ctrl"),
64
+ shiftKey: keySplit.includes("shift"),
65
+ altKey: keySplit.includes("alt") || keySplit.includes("option")
66
+ };
67
+ }
68
+ shortcut.chained = chained;
69
+ if (!macOS.value && shortcut.metaKey && !shortcut.ctrlKey) {
70
+ shortcut.metaKey = false;
71
+ shortcut.ctrlKey = true;
72
+ }
73
+ if (typeof shortcutConfig === "function")
74
+ shortcut.handler = shortcutConfig;
75
+ else if (typeof shortcutConfig === "object")
76
+ shortcut = { ...shortcut, handler: shortcutConfig.handler };
77
+ if (!shortcut.handler) {
78
+ console.trace("[Shortcut] Invalid value");
79
+ return null;
80
+ }
81
+ let enabled = true;
82
+ if (!shortcutConfig.usingInput)
83
+ enabled = !usingInput.value;
84
+ else if (typeof shortcutConfig.usingInput === "string")
85
+ enabled = usingInput.value === shortcutConfig.usingInput;
86
+ shortcut.enabled = enabled;
87
+ return shortcut;
88
+ }).filter(Boolean);
89
+ });
90
+ const onKeyDown = (e) => {
91
+ if (!e.key)
92
+ return;
93
+ const alphabetKey = /^[a-z]{1}$/i.test(e.key);
94
+ const shiftableKey = shiftableKeys.has(e.key.toLowerCase());
95
+ let chainedKey;
96
+ chainedInputs.value.push(e.key);
97
+ if (chainedInputs.value.length >= 2) {
98
+ chainedKey = chainedInputs.value.slice(-2).join("-");
99
+ for (const shortcut of shortcuts.value.filter((s) => s.chained)) {
100
+ if (shortcut.key !== chainedKey)
101
+ continue;
102
+ if (shortcut.enabled) {
103
+ e.preventDefault();
104
+ shortcut.handler(e);
105
+ }
106
+ clearChainedInput();
107
+ return;
108
+ }
109
+ }
110
+ for (const shortcut of shortcuts.value.filter((s) => !s.chained)) {
111
+ if (e.key.toLowerCase() !== shortcut.key)
112
+ continue;
113
+ if (e.metaKey !== shortcut.metaKey)
114
+ continue;
115
+ if (e.ctrlKey !== shortcut.ctrlKey)
116
+ continue;
117
+ if ((alphabetKey || shiftableKey) && e.shiftKey !== shortcut.shiftKey)
118
+ continue;
119
+ if (shortcut.enabled) {
120
+ e.preventDefault();
121
+ shortcut.handler(e);
122
+ }
123
+ clearChainedInput();
124
+ return;
125
+ }
126
+ debouncedClearChainedInput();
127
+ };
128
+ return useEventListener("keydown", onKeyDown);
129
+ }
@@ -1,4 +1,9 @@
1
- import type { AvatarProps } from '../types/index.js';
2
- export declare function useAvatarGroup(props?: AvatarProps): {
3
- size: import("vue").ComputedRef<"xs" | "sm" | "md" | "lg" | "xl" | undefined>;
1
+ import type { ComputedRef } from 'vue';
2
+ import type { AvatarGroupProps } from '../types';
3
+ export type AvatarGroupProvideValue = Pick<AvatarGroupProps, 'size'>;
4
+ export declare const InjectionKeyAvatarGroup: import("vue").InjectionKey<ComputedRef<AvatarGroupProvideValue>>, injectAvatarGroup: () => ComputedRef<AvatarGroupProvideValue> | undefined, provideAvatarGroup: (value: ComputedRef<AvatarGroupProvideValue>) => void;
5
+ export declare function useAvatarGroup(props: {
6
+ size: AvatarGroupProps['size'];
7
+ }): {
8
+ size: ComputedRef<"2xl" | "3xs" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "3xl" | undefined>;
4
9
  };
@@ -1,8 +1,15 @@
1
1
  import { computed } from "vue";
2
- import { injectAvatarGroup } from "../app/injections.js";
3
- export function useAvatarGroup(props = {}) {
2
+ import { defineInjection } from "../utils/index.js";
3
+ export const {
4
+ InjectionKey: InjectionKeyAvatarGroup,
5
+ inject: injectAvatarGroup,
6
+ provide: provideAvatarGroup
7
+ } = defineInjection("ui.avatar-group");
8
+ export function useAvatarGroup(props) {
4
9
  const avatarGroup = injectAvatarGroup();
10
+ const size = computed(() => props.size ?? avatarGroup?.value.size);
11
+ provideAvatarGroup(computed(() => ({ size: size.value })));
5
12
  return {
6
- size: computed(() => props.size ?? avatarGroup?.value.size)
13
+ size
7
14
  };
8
15
  }
@@ -1,26 +1,29 @@
1
1
  import { type MaybeRefOrGetter } from 'vue';
2
+ import type { AvatarProps, IconProps } from '../types';
2
3
  export interface UseComponentIconsProps {
3
4
  /** Display an icon based on the `leading` and `trailing` props. */
4
- icon?: string;
5
+ icon?: IconProps['name'];
6
+ /** Display an avatar on the left side. */
7
+ avatar?: AvatarProps;
5
8
  /** When `true`, the icon will be displayed on the left side. */
6
9
  leading?: boolean;
7
10
  /** Display an icon on the left side. */
8
- leadingIcon?: string;
11
+ leadingIcon?: IconProps['name'];
9
12
  /** When `true`, the icon will be displayed on the right side. */
10
13
  trailing?: boolean;
11
14
  /** Display an icon on the right side. */
12
- trailingIcon?: string;
15
+ trailingIcon?: IconProps['name'];
13
16
  /** When `true`, the loading icon will be displayed. */
14
17
  loading?: boolean;
15
18
  /**
16
19
  * The icon when the `loading` prop is `true`.
17
20
  * @default app.icons.loading
18
21
  */
19
- loadingIcon?: string;
22
+ loadingIcon?: IconProps['name'];
20
23
  }
21
24
  export declare function useComponentIcons(componentProps: MaybeRefOrGetter<UseComponentIconsProps>): {
22
25
  isLeading: import("vue").ComputedRef<boolean>;
23
26
  isTrailing: import("vue").ComputedRef<boolean>;
24
- leadingIconName: import("vue").ComputedRef<string | undefined>;
25
- trailingIconName: import("vue").ComputedRef<string | undefined>;
27
+ leadingIconName: import("vue").ComputedRef<any>;
28
+ trailingIconName: import("vue").ComputedRef<any>;
26
29
  };
@@ -1,18 +1,18 @@
1
1
  import { computed, toValue } from "vue";
2
- import { useTheme } from "./useTheme.js";
2
+ import { useAppConfig } from "#imports";
3
3
  export function useComponentIcons(componentProps) {
4
- const { theme } = useTheme();
4
+ const appConfig = useAppConfig();
5
5
  const props = computed(() => toValue(componentProps));
6
6
  const isLeading = computed(() => props.value.icon && props.value.leading || props.value.icon && !props.value.trailing || props.value.loading && !props.value.trailing || !!props.value.leadingIcon);
7
7
  const isTrailing = computed(() => props.value.icon && props.value.trailing || props.value.loading && props.value.trailing || !!props.value.trailingIcon);
8
8
  const leadingIconName = computed(() => {
9
9
  if (props.value.loading)
10
- return props.value.loadingIcon || theme.value.app.icons.loading;
10
+ return props.value.loadingIcon || appConfig.ui.icons.loading;
11
11
  return props.value.leadingIcon || props.value.icon;
12
12
  });
13
13
  const trailingIconName = computed(() => {
14
14
  if (props.value.loading && !isLeading.value)
15
- return props.value.loadingIcon || theme.value.app.icons.loading;
15
+ return props.value.loadingIcon || appConfig.ui.icons.loading;
16
16
  return props.value.trailingIcon || props.value.icon;
17
17
  });
18
18
  return {
@@ -0,0 +1,8 @@
1
+ import type { ComputedRef } from 'vue';
2
+ import type { ButtonProps, FieldGroupProps } from '../types';
3
+ export type FieldGroupProvideValue = Pick<FieldGroupProps, 'size' | 'orientation'>;
4
+ export declare const InjectionKeyFieldGroup: import("vue").InjectionKey<ComputedRef<FieldGroupProvideValue>>, injectFieldGroup: () => ComputedRef<FieldGroupProvideValue> | undefined, provideFieldGroup: (value: ComputedRef<FieldGroupProvideValue>) => void;
5
+ export declare function useFieldGroup(props?: Pick<ButtonProps, 'size'>): {
6
+ size: ComputedRef<"xs" | "sm" | "md" | "lg" | "xl" | undefined>;
7
+ orientation: ComputedRef<"horizontal" | "vertical" | undefined>;
8
+ };
@@ -0,0 +1,14 @@
1
+ import { computed } from "vue";
2
+ import { defineInjection } from "../utils/index.js";
3
+ export const {
4
+ InjectionKey: InjectionKeyFieldGroup,
5
+ inject: injectFieldGroup,
6
+ provide: provideFieldGroup
7
+ } = defineInjection("ui.field-group");
8
+ export function useFieldGroup(props = {}) {
9
+ const fieldGroup = injectFieldGroup();
10
+ return {
11
+ size: computed(() => props.size ?? fieldGroup?.value.size),
12
+ orientation: computed(() => fieldGroup?.value.orientation)
13
+ };
14
+ }