diff --git a/playground/pages/button.vue b/playground/pages/button.vue
index 1b90df68..7b31c891 100644
--- a/playground/pages/button.vue
+++ b/playground/pages/button.vue
@@ -14,11 +14,19 @@
Loading
+
+
+ Loading
+
Loading
+
+
+ Loading
+
diff --git a/src/runtime/components/Button.vue b/src/runtime/components/Button.vue
index 028161b5..9e8da0ba 100644
--- a/src/runtime/components/Button.vue
+++ b/src/runtime/components/Button.vue
@@ -52,7 +52,7 @@ const slots = defineSlots()
const appConfig = useAppConfig()
const linkProps = useForwardProps(reactiveOmit(props, 'type', 'label', 'color', 'variant', 'size', 'icon', 'leading', 'leadingIcon', 'trailing', 'trailingIcon', 'loading', 'loadingIcon', 'square', 'block', 'disabled', 'truncate', 'class', 'ui'))
-const isLeading = computed(() => (props.icon && props.leading) || (props.icon && !props.trailing) || (props.loading && !props.trailing) || !!props.leadingIcon)
+const isLeading = computed(() => (props.icon && props.leading) || (props.icon && !props.trailing) || (props.loading && !props.trailing && !props.trailingIcon) || !!props.leadingIcon)
const isTrailing = computed(() => (props.icon && props.trailing) || (props.loading && props.trailing) || !!props.trailingIcon)
// FIXME: Cannot extend multiple times
diff --git a/src/theme/button.ts b/src/theme/button.ts
index 1a2ac4e0..2b74e099 100644
--- a/src/theme/button.ts
+++ b/src/theme/button.ts
@@ -56,11 +56,6 @@ export default (config: { colors: string[] }) => ({
label: 'truncate'
}
},
- loading: {
- true: {
- leadingIcon: 'animate-spin'
- }
- },
block: {
true: {
base: 'w-full',
@@ -75,6 +70,9 @@ export default (config: { colors: string[] }) => ({
},
trailing: {
true: ''
+ },
+ loading: {
+ true: ''
}
},
compoundVariants: [...config.colors.map((color: string) => ({
@@ -149,9 +147,16 @@ export default (config: { colors: string[] }) => ({
size: 'xl',
square: true,
class: 'p-2.5'
+ }, {
+ loading: true,
+ leading: true,
+ class: {
+ leadingIcon: 'animate-spin'
+ }
}, {
loading: true,
leading: false,
+ trailing: true,
class: {
trailingIcon: 'animate-spin'
}