diff --git a/src/runtime/components/Button.vue b/src/runtime/components/Button.vue index 7a102797..769ae128 100644 --- a/src/runtime/components/Button.vue +++ b/src/runtime/components/Button.vue @@ -4,15 +4,16 @@ import { tv, type VariantProps } from 'tailwind-variants' import type { LinkProps } from '#ui/components/Link.vue' import theme from '#ui/theme/button' -const appButton = tv(theme) +const button = tv(theme) // const appButton = tv({ extend: button, ...(appConfig.ui?.button || {}) }) -type ButtonVariants = VariantProps +type ButtonVariants = VariantProps export interface ButtonProps extends LinkProps { type?: string label?: string color?: ButtonVariants['color'] + variant?: ButtonVariants['variant'] size?: ButtonVariants['size'] icon?: string leading?: boolean @@ -24,16 +25,15 @@ export interface ButtonProps extends LinkProps { square?: boolean block?: boolean disabled?: boolean - padded?: boolean truncate?: boolean class?: any - ui?: Partial + ui?: Partial } export interface ButtonSlots { - leading(props?: { disabled?: boolean; loading?: boolean }): any + leading(props?: { disabled?: boolean; loading?: boolean, ui?: string }): any default(): any - trailing(props?: { disabled?: boolean; loading?: boolean }): any + trailing(props?: { disabled?: boolean; loading?: boolean, ui?: string }): any } @@ -49,20 +49,17 @@ const props = defineProps() const slots = defineSlots() const appConfig = useAppConfig() -const forward = useForwardProps(reactiveOmit(props, 'type', 'label', 'color', 'size', 'icon', 'leading', 'leadingIcon', 'trailing', 'trailingIcon', 'loading', 'loadingIcon', 'square', 'block', 'disabled', 'padded', 'truncate', 'class', 'ui')) +const forward = useForwardProps(reactiveOmit(props, 'type', 'label', 'color', 'variant', 'size', 'icon', 'leading', 'leadingIcon', 'trailing', 'trailingIcon', 'loading', 'loadingIcon', 'square', 'block', 'disabled', 'truncate', 'class', 'ui')) // Computed -const ui = computed(() => tv({ - extend: appButton, - slots: props.ui -})({ +const ui = computed(() => tv({ extend: button, slots: props.ui })({ color: props.color, + variant: props.variant, size: props.size, loading: props.loading, truncate: props.truncate, block: props.block, - padded: props.padded, square: props.square || (!slots.default && !props.label) })) @@ -88,8 +85,26 @@ const trailingIconName = computed(() => {