@nuxt/ui 3.0.1 → 3.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 (228) hide show
  1. package/.nuxt/ui/accordion.ts +25 -4
  2. package/.nuxt/ui/alert.ts +52 -31
  3. package/.nuxt/ui/avatar-group.ts +24 -3
  4. package/.nuxt/ui/avatar.ts +26 -5
  5. package/.nuxt/ui/badge.ts +56 -35
  6. package/.nuxt/ui/breadcrumb.ts +28 -7
  7. package/.nuxt/ui/button-group.ts +23 -2
  8. package/.nuxt/ui/button.ts +66 -45
  9. package/.nuxt/ui/calendar.ts +39 -18
  10. package/.nuxt/ui/card.ts +28 -7
  11. package/.nuxt/ui/carousel.ts +29 -8
  12. package/.nuxt/ui/checkbox-group.ts +82 -0
  13. package/.nuxt/ui/checkbox.ts +163 -29
  14. package/.nuxt/ui/chip.ts +31 -10
  15. package/.nuxt/ui/collapsible.ts +23 -2
  16. package/.nuxt/ui/color-picker.ts +26 -5
  17. package/.nuxt/ui/command-palette.ts +37 -16
  18. package/.nuxt/ui/container.ts +24 -3
  19. package/.nuxt/ui/context-menu.ts +56 -35
  20. package/.nuxt/ui/drawer.ts +33 -12
  21. package/.nuxt/ui/dropdown-menu.ts +57 -36
  22. package/.nuxt/ui/form-field.ts +29 -8
  23. package/.nuxt/ui/form.ts +23 -2
  24. package/.nuxt/ui/index.ts +1 -0
  25. package/.nuxt/ui/input-menu.ts +65 -44
  26. package/.nuxt/ui/input-number.ts +43 -22
  27. package/.nuxt/ui/input.ts +46 -25
  28. package/.nuxt/ui/kbd.ts +27 -6
  29. package/.nuxt/ui/link.ts +26 -5
  30. package/.nuxt/ui/modal.ts +28 -7
  31. package/.nuxt/ui/navigation-menu.ts +103 -84
  32. package/.nuxt/ui/pagination.ts +23 -2
  33. package/.nuxt/ui/pin-input.ts +43 -22
  34. package/.nuxt/ui/popover.ts +25 -4
  35. package/.nuxt/ui/progress.ts +40 -19
  36. package/.nuxt/ui/radio-group.ts +273 -37
  37. package/.nuxt/ui/select-menu.ts +59 -35
  38. package/.nuxt/ui/select.ts +55 -34
  39. package/.nuxt/ui/separator.ts +31 -10
  40. package/.nuxt/ui/skeleton.ts +24 -3
  41. package/.nuxt/ui/slideover.ts +27 -6
  42. package/.nuxt/ui/slider.ts +39 -18
  43. package/.nuxt/ui/stepper.ts +41 -20
  44. package/.nuxt/ui/switch.ts +44 -23
  45. package/.nuxt/ui/table.ts +38 -17
  46. package/.nuxt/ui/tabs.ts +55 -34
  47. package/.nuxt/ui/textarea.ts +63 -37
  48. package/.nuxt/ui/toast.ts +47 -26
  49. package/.nuxt/ui/toaster.ts +23 -2
  50. package/.nuxt/ui/tooltip.ts +25 -4
  51. package/.nuxt/ui/tree.ts +41 -20
  52. package/.nuxt/ui.css +56 -12
  53. package/README.md +11 -0
  54. package/cli/templates.mjs +18 -17
  55. package/dist/module.d.mts +2 -1
  56. package/dist/module.json +5 -5
  57. package/dist/module.mjs +11 -7
  58. package/dist/runtime/components/Accordion.vue +36 -92
  59. package/dist/runtime/components/Accordion.vue.d.ts +91 -0
  60. package/dist/runtime/components/Alert.vue +37 -100
  61. package/dist/runtime/components/Alert.vue.d.ts +96 -0
  62. package/dist/runtime/components/App.vue +28 -34
  63. package/dist/runtime/components/App.vue.d.ts +24 -0
  64. package/dist/runtime/components/Avatar.vue +47 -78
  65. package/dist/runtime/components/Avatar.vue.d.ts +60 -0
  66. package/dist/runtime/components/AvatarGroup.vue +40 -77
  67. package/dist/runtime/components/AvatarGroup.vue.d.ts +40 -0
  68. package/dist/runtime/components/Badge.vue +33 -62
  69. package/dist/runtime/components/Badge.vue.d.ts +62 -0
  70. package/dist/runtime/components/Breadcrumb.vue +36 -88
  71. package/dist/runtime/components/Breadcrumb.vue.d.ts +82 -0
  72. package/dist/runtime/components/Button.vue +96 -105
  73. package/dist/runtime/components/Button.vue.d.ts +73 -0
  74. package/dist/runtime/components/ButtonGroup.vue +20 -46
  75. package/dist/runtime/components/ButtonGroup.vue.d.ts +55 -0
  76. package/dist/runtime/components/Calendar.vue +73 -127
  77. package/dist/runtime/components/Calendar.vue.d.ts +107 -0
  78. package/dist/runtime/components/Card.vue +18 -40
  79. package/dist/runtime/components/Card.vue.d.ts +38 -0
  80. package/dist/runtime/components/Carousel.vue +112 -230
  81. package/dist/runtime/components/Carousel.vue.d.ts +120 -0
  82. package/dist/runtime/components/Checkbox.vue +52 -93
  83. package/dist/runtime/components/Checkbox.vue.d.ts +76 -0
  84. package/dist/runtime/components/CheckboxGroup.vue +121 -0
  85. package/dist/runtime/components/CheckboxGroup.vue.d.ts +75 -0
  86. package/dist/runtime/components/Chip.vue +26 -69
  87. package/dist/runtime/components/Chip.vue.d.ts +71 -0
  88. package/dist/runtime/components/Collapsible.vue +22 -41
  89. package/dist/runtime/components/Collapsible.vue.d.ts +50 -0
  90. package/dist/runtime/components/ColorPicker.vue +111 -197
  91. package/dist/runtime/components/ColorPicker.vue.d.ts +63 -0
  92. package/dist/runtime/components/CommandPalette.vue +94 -234
  93. package/dist/runtime/components/CommandPalette.vue.d.ts +173 -0
  94. package/dist/runtime/components/Container.vue +15 -28
  95. package/dist/runtime/components/Container.vue.d.ts +27 -0
  96. package/dist/runtime/components/ContextMenu.vue +32 -119
  97. package/dist/runtime/components/ContextMenu.vue.d.ts +127 -0
  98. package/dist/runtime/components/ContextMenuContent.vue +71 -72
  99. package/dist/runtime/components/ContextMenuContent.vue.d.ts +105 -0
  100. package/dist/runtime/components/Drawer.vue +49 -87
  101. package/dist/runtime/components/Drawer.vue.d.ts +88 -0
  102. package/dist/runtime/components/DropdownMenu.vue +37 -129
  103. package/dist/runtime/components/DropdownMenu.vue.d.ts +141 -0
  104. package/dist/runtime/components/DropdownMenuContent.vue +76 -79
  105. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +55 -0
  106. package/dist/runtime/components/Form.vue +135 -219
  107. package/dist/runtime/components/Form.vue.d.ts +66 -0
  108. package/dist/runtime/components/FormField.vue +36 -77
  109. package/dist/runtime/components/FormField.vue.d.ts +70 -0
  110. package/dist/runtime/components/Icon.vue +12 -19
  111. package/dist/runtime/components/Icon.vue.d.ts +17 -0
  112. package/dist/runtime/components/Input.vue +82 -140
  113. package/dist/runtime/components/Input.vue.d.ts +91 -0
  114. package/dist/runtime/components/InputMenu.vue +193 -302
  115. package/dist/runtime/components/InputMenu.vue.d.ts +312 -0
  116. package/dist/runtime/components/InputNumber.vue +71 -133
  117. package/dist/runtime/components/InputNumber.vue.d.ts +193 -0
  118. package/dist/runtime/components/Kbd.vue +20 -46
  119. package/dist/runtime/components/Kbd.vue.d.ts +55 -0
  120. package/dist/runtime/components/Link.vue +98 -173
  121. package/dist/runtime/components/Link.vue.d.ts +124 -0
  122. package/dist/runtime/components/LinkBase.vue +33 -41
  123. package/dist/runtime/components/LinkBase.vue.d.ts +48 -0
  124. package/dist/runtime/components/Modal.vue +53 -116
  125. package/dist/runtime/components/Modal.vue.d.ts +109 -0
  126. package/dist/runtime/components/NavigationMenu.vue +78 -186
  127. package/dist/runtime/components/NavigationMenu.vue.d.ts +159 -0
  128. package/dist/runtime/components/OverlayProvider.vue +14 -18
  129. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
  130. package/dist/runtime/components/Pagination.vue +46 -140
  131. package/dist/runtime/components/Pagination.vue.d.ts +143 -0
  132. package/dist/runtime/components/PinInput.vue +61 -78
  133. package/dist/runtime/components/PinInput.vue.d.ts +68 -0
  134. package/dist/runtime/components/Popover.vue +47 -84
  135. package/dist/runtime/components/Popover.vue.d.ts +80 -0
  136. package/dist/runtime/components/Progress.vue +70 -131
  137. package/dist/runtime/components/Progress.vue.d.ts +97 -0
  138. package/dist/runtime/components/RadioGroup.vue +75 -126
  139. package/dist/runtime/components/RadioGroup.vue.d.ts +88 -0
  140. package/dist/runtime/components/Select.vue +115 -202
  141. package/dist/runtime/components/Select.vue.d.ts +139 -0
  142. package/dist/runtime/components/SelectMenu.vue +167 -281
  143. package/dist/runtime/components/SelectMenu.vue.d.ts +184 -0
  144. package/dist/runtime/components/Separator.vue +29 -71
  145. package/dist/runtime/components/Separator.vue.d.ts +75 -0
  146. package/dist/runtime/components/Skeleton.vue +21 -23
  147. package/dist/runtime/components/Skeleton.vue.d.ts +26 -0
  148. package/dist/runtime/components/Slideover.vue +53 -120
  149. package/dist/runtime/components/Slideover.vue.d.ts +111 -0
  150. package/dist/runtime/components/Slider.vue +46 -84
  151. package/dist/runtime/components/Slider.vue.d.ts +71 -0
  152. package/dist/runtime/components/Stepper.vue +44 -113
  153. package/dist/runtime/components/Stepper.vue.d.ts +89 -0
  154. package/dist/runtime/components/Switch.vue +45 -93
  155. package/dist/runtime/components/Switch.vue.d.ts +73 -0
  156. package/dist/runtime/components/Table.vue +165 -264
  157. package/dist/runtime/components/Table.vue.d.ts +183 -0
  158. package/dist/runtime/components/Tabs.vue +40 -105
  159. package/dist/runtime/components/Tabs.vue.d.ts +104 -0
  160. package/dist/runtime/components/Textarea.vue +113 -158
  161. package/dist/runtime/components/Textarea.vue.d.ts +95 -0
  162. package/dist/runtime/components/Toast.vue +49 -110
  163. package/dist/runtime/components/Toast.vue.d.ts +95 -0
  164. package/dist/runtime/components/Toaster.vue +70 -107
  165. package/dist/runtime/components/Toaster.vue.d.ts +63 -0
  166. package/dist/runtime/components/Tooltip.vue +38 -65
  167. package/dist/runtime/components/Tooltip.vue.d.ts +65 -0
  168. package/dist/runtime/components/Tree.vue +57 -150
  169. package/dist/runtime/components/Tree.vue.d.ts +128 -0
  170. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  171. package/dist/runtime/composables/defineShortcuts.js +0 -1
  172. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  173. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  174. package/dist/runtime/composables/useFormField.d.ts +2 -2
  175. package/dist/runtime/composables/useFormField.js +1 -1
  176. package/dist/runtime/composables/useOverlay.d.ts +16 -8
  177. package/dist/runtime/composables/useOverlay.js +14 -6
  178. package/dist/runtime/composables/usePortal.d.ts +6 -0
  179. package/dist/runtime/composables/usePortal.js +17 -0
  180. package/dist/runtime/index.css +1 -1
  181. package/dist/runtime/inertia/components/Link.vue +146 -0
  182. package/dist/runtime/inertia/components/Link.vue.d.ts +92 -0
  183. package/dist/runtime/inertia/stubs.d.ts +43 -0
  184. package/dist/runtime/inertia/stubs.js +82 -0
  185. package/dist/runtime/locale/bg.d.ts +3 -0
  186. package/dist/runtime/locale/bg.js +54 -0
  187. package/dist/runtime/locale/hy.d.ts +3 -0
  188. package/dist/runtime/locale/hy.js +54 -0
  189. package/dist/runtime/locale/index.d.ts +6 -1
  190. package/dist/runtime/locale/index.js +6 -1
  191. package/dist/runtime/locale/kk.d.ts +3 -0
  192. package/dist/runtime/locale/kk.js +54 -0
  193. package/dist/runtime/locale/tj.d.ts +3 -0
  194. package/dist/runtime/locale/tj.js +54 -0
  195. package/dist/runtime/locale/ug_cn.d.ts +3 -0
  196. package/dist/runtime/locale/ug_cn.js +55 -0
  197. package/dist/runtime/types/form.d.ts +5 -1
  198. package/dist/runtime/types/index.d.ts +2 -0
  199. package/dist/runtime/types/index.js +2 -0
  200. package/dist/runtime/types/utils.d.ts +70 -10
  201. package/dist/runtime/utils/index.d.ts +1 -0
  202. package/dist/runtime/utils/index.js +3 -0
  203. package/dist/runtime/utils/link.d.ts +4 -27
  204. package/dist/runtime/utils/link.js +32 -1
  205. package/dist/runtime/utils/tv.js +2 -2
  206. package/dist/runtime/vue/components/Icon.vue +7 -8
  207. package/dist/runtime/vue/components/Icon.vue.d.ts +14 -0
  208. package/dist/runtime/vue/components/Link.vue +118 -199
  209. package/dist/runtime/vue/components/Link.vue.d.ts +124 -0
  210. package/dist/runtime/vue/stubs.d.ts +5 -0
  211. package/dist/runtime/vue/stubs.js +11 -2
  212. package/dist/shared/{ui.BCaWD5Ek.mjs → ui.D7lOOabO.mjs} +623 -364
  213. package/dist/types.d.mts +5 -1
  214. package/dist/unplugin.d.mts +6 -1
  215. package/dist/unplugin.mjs +25 -4
  216. package/dist/vite.mjs +1 -1
  217. package/package.json +122 -64
  218. package/dist/module.cjs +0 -62
  219. package/dist/module.d.cts +0 -44
  220. package/dist/module.d.ts +0 -44
  221. package/dist/shared/ui.C6uTSFTI.cjs +0 -3555
  222. package/dist/types.d.ts +0 -1
  223. package/dist/unplugin.cjs +0 -232
  224. package/dist/unplugin.d.cts +0 -61
  225. package/dist/unplugin.d.ts +0 -61
  226. package/dist/vite.cjs +0 -23
  227. package/dist/vite.d.cts +0 -15
  228. package/dist/vite.d.ts +0 -15
@@ -1,122 +1,113 @@
1
- <script lang="ts">
2
- import type { VariantProps } from 'tailwind-variants'
3
- import type { AppConfig } from '@nuxt/schema'
4
- import _appConfig from '#build/app.config'
5
- import theme from '#build/ui/button'
6
- import type { LinkProps } from './Link.vue'
7
- import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
- import { tv } from '../utils/tv'
9
- import type { AvatarProps } from '../types'
10
- import type { PartialString } from '../types/utils'
11
-
12
- const appConfigButton = _appConfig as AppConfig & { ui: { button: Partial<typeof theme> } }
13
-
14
- const button = tv({ extend: tv(theme), ...(appConfigButton.ui?.button || {}) })
15
-
16
- type ButtonVariants = VariantProps<typeof button>
17
-
18
- export interface ButtonProps extends UseComponentIconsProps, Omit<LinkProps, 'raw' | 'custom'> {
19
- label?: string
20
- /**
21
- * @defaultValue 'primary'
22
- */
23
- color?: ButtonVariants['color']
24
- activeColor?: ButtonVariants['color']
25
- /**
26
- * @defaultValue 'solid'
27
- */
28
- variant?: ButtonVariants['variant']
29
- activeVariant?: ButtonVariants['variant']
30
- /**
31
- * @defaultValue 'md'
32
- */
33
- size?: ButtonVariants['size']
34
- /** Render the button with equal padding on all sides. */
35
- square?: boolean
36
- /** Render the button full width. */
37
- block?: boolean
38
- /** Set loading state automatically based on the `@click` promise state */
39
- loadingAuto?: boolean
40
- onClick?: ((event: MouseEvent) => void | Promise<void>) | Array<((event: MouseEvent) => void | Promise<void>)>
41
- class?: any
42
- ui?: PartialString<typeof button.slots>
43
- }
44
-
45
- export interface ButtonSlots {
46
- leading(props?: {}): any
47
- default(props?: {}): any
48
- trailing(props?: {}): any
49
- }
1
+ <script>
2
+ import theme from "#build/ui/button";
50
3
  </script>
51
4
 
52
- <script setup lang="ts">
53
- import { type Ref, computed, ref, inject } from 'vue'
54
- import { useForwardProps } from 'reka-ui'
55
- import { useComponentIcons } from '../composables/useComponentIcons'
56
- import { useButtonGroup } from '../composables/useButtonGroup'
57
- import { formLoadingInjectionKey } from '../composables/useFormField'
58
- import { omit } from '../utils'
59
- import { pickLinkProps } from '../utils/link'
60
- import UIcon from './Icon.vue'
61
- import UAvatar from './Avatar.vue'
62
- import ULink from './Link.vue'
63
- import ULinkBase from './LinkBase.vue'
64
-
65
- const props = withDefaults(defineProps<ButtonProps>(), {
66
- active: undefined,
67
- activeClass: '',
68
- inactiveClass: ''
69
- })
70
- const slots = defineSlots<ButtonSlots>()
71
-
72
- const linkProps = useForwardProps(pickLinkProps(props))
73
-
74
- const { orientation, size: buttonSize } = useButtonGroup<ButtonProps>(props)
75
-
76
- const loadingAutoState = ref(false)
77
- const formLoading = inject<Ref<boolean> | undefined>(formLoadingInjectionKey, undefined)
78
-
79
- async function onClickWrapper(event: MouseEvent) {
80
- loadingAutoState.value = true
81
- const callbacks = Array.isArray(props.onClick) ? props.onClick : [props.onClick]
5
+ <script setup>
6
+ import { computed, ref, inject } from "vue";
7
+ import { defu } from "defu";
8
+ import { useForwardProps } from "reka-ui";
9
+ import { useAppConfig } from "#imports";
10
+ import { useComponentIcons } from "../composables/useComponentIcons";
11
+ import { useButtonGroup } from "../composables/useButtonGroup";
12
+ import { formLoadingInjectionKey } from "../composables/useFormField";
13
+ import { omit } from "../utils";
14
+ import { tv } from "../utils/tv";
15
+ import { pickLinkProps } from "../utils/link";
16
+ import UIcon from "./Icon.vue";
17
+ import UAvatar from "./Avatar.vue";
18
+ import ULink from "./Link.vue";
19
+ import ULinkBase from "./LinkBase.vue";
20
+ const props = defineProps({
21
+ label: { type: String, required: false },
22
+ color: { type: null, required: false },
23
+ activeColor: { type: null, required: false },
24
+ variant: { type: null, required: false },
25
+ activeVariant: { type: null, required: false },
26
+ size: { type: null, required: false },
27
+ square: { type: Boolean, required: false },
28
+ block: { type: Boolean, required: false },
29
+ loadingAuto: { type: Boolean, required: false },
30
+ onClick: { type: [Function, Array], required: false },
31
+ class: { type: null, required: false },
32
+ ui: { type: null, required: false },
33
+ icon: { type: String, required: false },
34
+ avatar: { type: Object, required: false },
35
+ leading: { type: Boolean, required: false },
36
+ leadingIcon: { type: String, required: false },
37
+ trailing: { type: Boolean, required: false },
38
+ trailingIcon: { type: String, required: false },
39
+ loading: { type: Boolean, required: false },
40
+ loadingIcon: { type: String, required: false },
41
+ as: { type: null, required: false },
42
+ type: { type: null, required: false },
43
+ disabled: { type: Boolean, required: false },
44
+ active: { type: Boolean, required: false, default: void 0 },
45
+ exact: { type: Boolean, required: false },
46
+ exactQuery: { type: [Boolean, String], required: false },
47
+ exactHash: { type: Boolean, required: false },
48
+ inactiveClass: { type: String, required: false, default: "" },
49
+ to: { type: null, required: false },
50
+ href: { type: null, required: false },
51
+ external: { type: Boolean, required: false },
52
+ target: { type: [String, Object, null], required: false },
53
+ rel: { type: [String, Object, null], required: false },
54
+ noRel: { type: Boolean, required: false },
55
+ prefetchedClass: { type: String, required: false },
56
+ prefetch: { type: Boolean, required: false },
57
+ prefetchOn: { type: [String, Object], required: false },
58
+ noPrefetch: { type: Boolean, required: false },
59
+ activeClass: { type: String, required: false, default: "" },
60
+ exactActiveClass: { type: String, required: false },
61
+ ariaCurrentValue: { type: String, required: false },
62
+ viewTransition: { type: Boolean, required: false },
63
+ replace: { type: Boolean, required: false }
64
+ });
65
+ const slots = defineSlots();
66
+ const appConfig = useAppConfig();
67
+ const { orientation, size: buttonSize } = useButtonGroup(props);
68
+ const linkProps = useForwardProps(pickLinkProps(props));
69
+ const loadingAutoState = ref(false);
70
+ const formLoading = inject(formLoadingInjectionKey, void 0);
71
+ async function onClickWrapper(event) {
72
+ loadingAutoState.value = true;
73
+ const callbacks = Array.isArray(props.onClick) ? props.onClick : [props.onClick];
82
74
  try {
83
- await Promise.all(callbacks.map(fn => fn?.(event)))
75
+ await Promise.all(callbacks.map((fn) => fn?.(event)));
84
76
  } finally {
85
- loadingAutoState.value = false
77
+ loadingAutoState.value = false;
86
78
  }
87
79
  }
88
-
89
80
  const isLoading = computed(() => {
90
- return props.loading || (props.loadingAuto && (loadingAutoState.value || (formLoading?.value && props.type === 'submit')))
91
- })
92
-
81
+ return props.loading || props.loadingAuto && (loadingAutoState.value || formLoading?.value && props.type === "submit");
82
+ });
93
83
  const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(
94
84
  computed(() => ({ ...props, loading: isLoading.value }))
95
- )
96
-
85
+ );
97
86
  const ui = computed(() => tv({
98
- extend: button,
99
- variants: {
100
- active: {
101
- true: {
102
- base: props.activeClass
103
- },
104
- false: {
105
- base: props.inactiveClass
87
+ extend: tv(theme),
88
+ ...defu({
89
+ variants: {
90
+ active: {
91
+ true: {
92
+ base: props.activeClass
93
+ },
94
+ false: {
95
+ base: props.inactiveClass
96
+ }
106
97
  }
107
98
  }
108
- }
99
+ }, appConfig.ui?.button || {})
109
100
  })({
110
101
  color: props.color,
111
102
  variant: props.variant,
112
103
  size: buttonSize.value,
113
104
  loading: isLoading.value,
114
105
  block: props.block,
115
- square: props.square || (!slots.default && !props.label),
106
+ square: props.square || !slots.default && !props.label,
116
107
  leading: isLeading.value,
117
108
  trailing: isTrailing.value,
118
109
  buttonGroup: orientation.value
119
- }))
110
+ }));
120
111
  </script>
121
112
 
122
113
  <template>
@@ -125,22 +116,22 @@ const ui = computed(() => tv({
125
116
  :type="type"
126
117
  :disabled="disabled || isLoading"
127
118
  :class="ui.base({ class: [props.class, props.ui?.base] })"
128
- v-bind="omit(linkProps, ['type', 'disabled'])"
119
+ v-bind="omit(linkProps, ['type', 'disabled', 'onClick'])"
129
120
  custom
130
121
  >
131
122
  <ULinkBase
132
123
  v-bind="slotProps"
133
124
  :class="ui.base({
134
- class: [props.class, props.ui?.base],
135
- active,
136
- ...(active && activeVariant ? { variant: activeVariant } : {}),
137
- ...(active && activeColor ? { color: activeColor } : {})
138
- })"
125
+ class: [props.class, props.ui?.base],
126
+ active,
127
+ ...active && activeVariant ? { variant: activeVariant } : {},
128
+ ...active && activeColor ? { color: activeColor } : {}
129
+ })"
139
130
  @click="onClickWrapper"
140
131
  >
141
132
  <slot name="leading">
142
133
  <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon, active })" />
143
- <UAvatar v-else-if="!!avatar" :size="((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar, active })" />
134
+ <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar, active })" />
144
135
  </slot>
145
136
 
146
137
  <slot>
@@ -0,0 +1,73 @@
1
+ import type { AppConfig } from '@nuxt/schema';
2
+ import theme from '#build/ui/button';
3
+ import type { LinkProps } from './Link.vue';
4
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons';
5
+ import type { ComponentConfig } from '../types/utils';
6
+ type Button = ComponentConfig<typeof theme, AppConfig, 'button'>;
7
+ export interface ButtonProps extends UseComponentIconsProps, Omit<LinkProps, 'raw' | 'custom'> {
8
+ label?: string;
9
+ /**
10
+ * @defaultValue 'primary'
11
+ */
12
+ color?: Button['variants']['color'];
13
+ activeColor?: Button['variants']['color'];
14
+ /**
15
+ * @defaultValue 'solid'
16
+ */
17
+ variant?: Button['variants']['variant'];
18
+ activeVariant?: Button['variants']['variant'];
19
+ /**
20
+ * @defaultValue 'md'
21
+ */
22
+ size?: Button['variants']['size'];
23
+ /** Render the button with equal padding on all sides. */
24
+ square?: boolean;
25
+ /** Render the button full width. */
26
+ block?: boolean;
27
+ /** Set loading state automatically based on the `@click` promise state */
28
+ loadingAuto?: boolean;
29
+ onClick?: ((event: MouseEvent) => void | Promise<void>) | Array<((event: MouseEvent) => void | Promise<void>)>;
30
+ class?: any;
31
+ ui?: Button['slots'];
32
+ }
33
+ export interface ButtonSlots {
34
+ leading(props?: {}): any;
35
+ default(props?: {}): any;
36
+ trailing(props?: {}): any;
37
+ }
38
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ButtonProps>, {
39
+ active: undefined;
40
+ activeClass: string;
41
+ inactiveClass: string;
42
+ }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ButtonProps>, {
43
+ active: undefined;
44
+ activeClass: string;
45
+ inactiveClass: string;
46
+ }>>> & Readonly<{}>, {
47
+ activeClass: string;
48
+ active: boolean;
49
+ inactiveClass: string;
50
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, Readonly<ButtonSlots> & ButtonSlots>;
51
+ export default _default;
52
+ type __VLS_WithDefaults<P, D> = {
53
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
54
+ default: D[K];
55
+ }> : P[K];
56
+ };
57
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
58
+ type __VLS_TypePropsToOption<T> = {
59
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
60
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
61
+ } : {
62
+ type: import('vue').PropType<T[K]>;
63
+ required: true;
64
+ };
65
+ };
66
+ type __VLS_WithTemplateSlots<T, S> = T & {
67
+ new (): {
68
+ $slots: S;
69
+ };
70
+ };
71
+ type __VLS_PrettifyLocal<T> = {
72
+ [K in keyof T]: T[K];
73
+ } & {};
@@ -1,57 +1,31 @@
1
- <script lang="ts">
2
- import type { VariantProps } from 'tailwind-variants'
3
- import type { AppConfig } from '@nuxt/schema'
4
- import _appConfig from '#build/app.config'
5
- import theme from '#build/ui/button-group'
6
- import { tv } from '../utils/tv'
7
-
8
- const appConfigButtonGroup = _appConfig as AppConfig & { ui: { buttonGroup: Partial<typeof theme> } }
9
-
10
- const buttonGroup = tv({ extend: tv(theme), ...(appConfigButtonGroup.ui?.buttonGroup) })
11
-
12
- type ButtonGroupVariants = VariantProps<typeof buttonGroup>
13
-
14
- export interface ButtonGroupProps {
15
- /**
16
- * The element or component this component should render as.
17
- * @defaultValue 'div'
18
- */
19
- as?: any
20
- /**
21
- * @defaultValue 'md'
22
- */
23
- size?: ButtonGroupVariants['size']
24
- /**
25
- * The orientation the buttons are laid out.
26
- * @defaultValue 'horizontal'
27
- */
28
- orientation?: ButtonGroupVariants['orientation']
29
- class?: any
30
- }
31
-
32
- export interface ButtonGroupSlots {
33
- default(props?: {}): any
34
- }
1
+ <script>
2
+ import theme from "#build/ui/button-group";
35
3
  </script>
36
4
 
37
- <script setup lang="ts">
38
- import { provide, computed } from 'vue'
39
- import { Primitive } from 'reka-ui'
40
- import { buttonGroupInjectionKey } from '../composables/useButtonGroup'
41
-
42
- const props = withDefaults(defineProps<ButtonGroupProps>(), {
43
- orientation: 'horizontal'
44
- })
45
- defineSlots<ButtonGroupSlots>()
46
-
5
+ <script setup>
6
+ import { provide, computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
9
+ import { buttonGroupInjectionKey } from "../composables/useButtonGroup";
10
+ import { tv } from "../utils/tv";
11
+ const props = defineProps({
12
+ as: { type: null, required: false },
13
+ size: { type: null, required: false },
14
+ orientation: { type: null, required: false, default: "horizontal" },
15
+ class: { type: null, required: false },
16
+ ui: { type: null, required: false }
17
+ });
18
+ defineSlots();
19
+ const appConfig = useAppConfig();
20
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.buttonGroup || {} }));
47
21
  provide(buttonGroupInjectionKey, computed(() => ({
48
22
  orientation: props.orientation,
49
23
  size: props.size
50
- })))
24
+ })));
51
25
  </script>
52
26
 
53
27
  <template>
54
- <Primitive :as="as" :class="buttonGroup({ orientation, class: props.class })">
28
+ <Primitive :as="as" :class="ui({ orientation, class: props.class })">
55
29
  <slot />
56
30
  </Primitive>
57
31
  </template>
@@ -0,0 +1,55 @@
1
+ import type { AppConfig } from '@nuxt/schema';
2
+ import theme from '#build/ui/button-group';
3
+ import type { ComponentConfig } from '../types/utils';
4
+ type ButtonGroup = ComponentConfig<typeof theme, AppConfig, 'buttonGroup'>;
5
+ export interface ButtonGroupProps {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @defaultValue 'div'
9
+ */
10
+ as?: any;
11
+ /**
12
+ * @defaultValue 'md'
13
+ */
14
+ size?: ButtonGroup['variants']['size'];
15
+ /**
16
+ * The orientation the buttons are laid out.
17
+ * @defaultValue 'horizontal'
18
+ */
19
+ orientation?: ButtonGroup['variants']['orientation'];
20
+ class?: any;
21
+ ui?: ButtonGroup['slots'];
22
+ }
23
+ export interface ButtonGroupSlots {
24
+ default(props?: {}): any;
25
+ }
26
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ButtonGroupProps>, {
27
+ orientation: string;
28
+ }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ButtonGroupProps>, {
29
+ orientation: string;
30
+ }>>> & Readonly<{}>, {
31
+ orientation: ButtonGroup["variants"]["orientation"];
32
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, Readonly<ButtonGroupSlots> & ButtonGroupSlots>;
33
+ export default _default;
34
+ type __VLS_WithDefaults<P, D> = {
35
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
36
+ default: D[K];
37
+ }> : P[K];
38
+ };
39
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
40
+ type __VLS_TypePropsToOption<T> = {
41
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
42
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
43
+ } : {
44
+ type: import('vue').PropType<T[K]>;
45
+ required: true;
46
+ };
47
+ };
48
+ type __VLS_WithTemplateSlots<T, S> = T & {
49
+ new (): {
50
+ $slots: S;
51
+ };
52
+ };
53
+ type __VLS_PrettifyLocal<T> = {
54
+ [K in keyof T]: T[K];
55
+ } & {};