feat: disabled classes separated, now works like a charm
This commit is contained in:
@@ -1,13 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="inline-flex align-center gap-2 flex-wrap">
|
<div class="inline-flex align-center gap-2 flex-wrap">
|
||||||
<Button color="default" disabled>Default</Button>
|
<Button color="default" disabled>Default</Button>
|
||||||
<Button color="alternative" disabled>Alternative</Button>
|
<Button color="default" outline disabled>Default outline</Button>
|
||||||
<Button color="dark" disabled>Dark</Button>
|
<Button gradient="red" disabled>Red gradient</Button>
|
||||||
<Button color="light" disabled>Light</Button>
|
<Button gradient="red-yellow" disabled>Red to yellow gradient</Button>
|
||||||
<Button color="green" disabled>Green</Button>
|
<Button gradient="red-yellow" outline disabled>Red to yellow outline</Button>
|
||||||
<Button color="red" disabled>Red</Button>
|
|
||||||
<Button color="yellow" disabled>Yellow</Button>
|
|
||||||
<Button color="purple" disabled>Purple</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|||||||
@@ -3,72 +3,120 @@ import { computed, useSlots } from 'vue'
|
|||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import type { ButtonDuotoneGradient, ButtonGradient, ButtonMonochromeGradient, ButtonSize, ButtonVariant } from './Button.vue'
|
import type { ButtonDuotoneGradient, ButtonGradient, ButtonMonochromeGradient, ButtonSize, ButtonVariant } from './Button.vue'
|
||||||
|
|
||||||
const buttonColorClasses: Record<ButtonVariant, string> = {
|
|
||||||
default: 'text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800',
|
const buttonColorClasses: { hover: Record<ButtonVariant, string>, default: Record<ButtonVariant, string> } = {
|
||||||
alternative:
|
default: {
|
||||||
'font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700',
|
default: 'text-white bg-blue-700 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg dark:bg-blue-600 focus:outline-none dark:focus:ring-blue-800',
|
||||||
dark: 'text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700',
|
alternative: 'font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600',
|
||||||
light:
|
dark: 'text-white bg-gray-800 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg dark:bg-gray-800 dark:focus:ring-gray-700 dark:border-gray-700',
|
||||||
'text-gray-900 bg-white border border-gray-300 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded-lg dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600 dark:focus:ring-gray-700',
|
light: 'text-gray-900 bg-white border border-gray-300 focus:outline-none focus:ring-4 focus:ring-gray-200 font-medium rounded-lg dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:focus:ring-gray-700',
|
||||||
green: 'focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded-lg dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800',
|
green: 'focus:outline-none text-white bg-green-700 focus:ring-4 focus:ring-green-300 font-medium rounded-lg dark:bg-green-600 dark:focus:ring-green-800',
|
||||||
red: 'focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900',
|
red: 'focus:outline-none text-white bg-red-700 focus:ring-4 focus:ring-red-300 font-medium rounded-lg dark:bg-red-600 dark:focus:ring-red-900',
|
||||||
yellow: 'focus:outline-none text-white bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 font-medium rounded-lg dark:focus:ring-yellow-900',
|
yellow: 'focus:outline-none text-white bg-yellow-400 focus:ring-4 focus:ring-yellow-300 font-medium rounded-lg dark:focus:ring-yellow-900',
|
||||||
purple:
|
purple: 'focus:outline-none text-white bg-purple-700 focus:ring-4 focus:ring-purple-300 font-medium rounded-lg dark:bg-purple-600 dark:focus:ring-purple-900',
|
||||||
'focus:outline-none text-white bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300 font-medium rounded-lg dark:bg-purple-600 dark:hover:bg-purple-700 dark:focus:ring-purple-900',
|
},
|
||||||
|
hover: {
|
||||||
|
default: 'hover:bg-blue-800dark:hover:bg-blue-700',
|
||||||
|
alternative: 'hover:bg-gray-100 hover:text-blue-700 dark:hover:text-white dark:hover:bg-gray-700',
|
||||||
|
dark: 'hover:bg-gray-900 dark:hover:bg-gray-700',
|
||||||
|
light: 'hover:bg-gray-100 dark:hover:border-gray-600',
|
||||||
|
green: 'hover:bg-green-800 dark:hover:bg-green-700',
|
||||||
|
red: 'hover:bg-red-800 dark:hover:bg-red-700',
|
||||||
|
yellow: 'hover:bg-yellow-500',
|
||||||
|
purple: 'hover:bg-purple-800 dark:hover:bg-purple-700',
|
||||||
|
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const buttonOutlineColorClasses: Record<Exclude<ButtonVariant, 'light' | 'alternative'>, string> = {
|
const buttonOutlineColorClasses: {
|
||||||
dark: 'text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:ring-4 focus:outline-none focus:ring-gray-300 font-medium rounded-lg text-sm text-center dark:border-gray-600 dark:text-gray-400 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-800',
|
hover: Record<Exclude<ButtonVariant, 'light' | 'alternative'>, string>,
|
||||||
default:
|
default: Record<Exclude<ButtonVariant, 'light' | 'alternative'>, string>
|
||||||
'text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm text-center dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-600 dark:focus:ring-blue-800',
|
} = {
|
||||||
green:
|
default: {
|
||||||
'text-green-700 hover:text-white border border-green-700 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 font-medium rounded-lg text-sm text-center dark:border-green-500 dark:text-green-500 dark:hover:text-white dark:hover:bg-green-600 dark:focus:ring-green-800',
|
dark: 'text-gray-900 border border-gray-800 focus:ring-4 focus:outline-none focus:ring-gray-300 font-medium rounded-lg text-sm text-center dark:border-gray-600 dark:text-gray-400 dark:focus:ring-gray-800',
|
||||||
purple:
|
default: 'text-blue-700 border border-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm text-center dark:border-blue-500 dark:text-blue-500 dark:focus:ring-blue-800',
|
||||||
'text-purple-700 hover:text-white border border-purple-700 hover:bg-purple-800 focus:ring-4 focus:outline-none focus:ring-purple-300 font-medium rounded-lg text-sm text-center dark:border-purple-400 dark:text-purple-400 dark:hover:text-white dark:hover:bg-purple-500 dark:focus:ring-purple-900',
|
green: 'text-green-700 border border-green-700 focus:ring-4 focus:outline-none focus:ring-green-300 font-medium rounded-lg text-sm text-center dark:border-green-500 dark:text-green-500 dark:focus:ring-green-800',
|
||||||
red: 'text-red-700 hover:text-white border border-red-700 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm text-center dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-600 dark:focus:ring-red-900',
|
purple: 'text-purple-700 border border-purple-700 focus:ring-4 focus:outline-none focus:ring-purple-300 font-medium rounded-lg text-sm text-center dark:border-purple-400 dark:text-purple-400 dark:focus:ring-purple-900',
|
||||||
yellow:
|
red: 'text-red-700 border border-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm text-center dark:border-red-500 dark:text-red-500 dark:focus:ring-red-900',
|
||||||
'text-yellow-400 hover:text-white border border-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:outline-none focus:ring-yellow-300 font-medium rounded-lg text-sm text-center dark:border-yellow-300 dark:text-yellow-300 dark:hover:text-white dark:hover:bg-yellow-400 dark:focus:ring-yellow-900',
|
yellow: 'text-yellow-400 border border-yellow-400 focus:ring-4 focus:outline-none focus:ring-yellow-300 font-medium rounded-lg text-sm text-center dark:border-yellow-300 dark:text-yellow-300 dark:focus:ring-yellow-900',
|
||||||
|
},
|
||||||
|
hover: {
|
||||||
|
dark: 'hover:text-white hover:bg-gray-900 dark:hover:text-white dark:hover:bg-gray-600',
|
||||||
|
default: 'hover:text-white hover:bg-blue-800 dark:hover:text-white dark:hover:bg-blue-600',
|
||||||
|
green: 'hover:text-white hover:bg-green-800 dark:hover:text-white dark:hover:bg-green-600',
|
||||||
|
purple: 'hover:text-white hover:bg-purple-800 dark:hover:text-white dark:hover:bg-purple-500',
|
||||||
|
red: 'hover:text-white hover:bg-red-800 dark:hover:text-white dark:hover:bg-red-600',
|
||||||
|
yellow: 'hover:text-white hover:bg-yellow-500 dark:hover:text-white dark:hover:bg-yellow-400',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const buttonGradientClasses: Record<ButtonGradient, string> = {
|
|
||||||
'cyan-blue': 'text-white bg-gradient-to-r from-cyan-500 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 font-medium rounded-lg',
|
const buttonGradientClasses: { hover: Record<ButtonGradient, string>, default: Record<ButtonGradient, string> } = {
|
||||||
'green-blue': 'text-white bg-gradient-to-br from-green-400 to-blue-600 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-green-200 dark:focus:ring-green-800 font-medium rounded-lg',
|
hover: {
|
||||||
'pink-orange': 'text-white bg-gradient-to-br from-pink-500 to-orange-400 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-pink-200 dark:focus:ring-pink-800 font-medium rounded-lg',
|
'cyan-blue': 'hover:bg-gradient-to-bl',
|
||||||
'purple-blue': 'text-white bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg',
|
'green-blue': 'hover:bg-gradient-to-bl',
|
||||||
'purple-pink':
|
'pink-orange': 'hover:bg-gradient-to-bl',
|
||||||
'text-white bg-gradient-to-r from-purple-500 to-pink-500 hover:bg-gradient-to-l focus:ring-4 focus:outline-none focus:ring-purple-200 dark:focus:ring-purple-800 font-medium rounded-lg',
|
'purple-blue': 'hover:bg-gradient-to-bl',
|
||||||
'red-yellow':
|
'purple-pink': 'hover:bg-gradient-to-l',
|
||||||
'text-gray-900 bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-red-100 dark:focus:ring-red-400 font-medium rounded-lg',
|
'red-yellow': 'hover:bg-gradient-to-bl',
|
||||||
'teal-lime':
|
'teal-lime': 'hover:bg-gradient-to-l hover:from-teal-200 hover:to-lime-200',
|
||||||
'text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 hover:bg-gradient-to-l hover:from-teal-200 hover:to-lime-200 focus:ring-4 focus:outline-none focus:ring-lime-200 dark:focus:ring-teal-700 font-medium rounded-lg',
|
blue: 'hover:bg-gradient-to-br',
|
||||||
blue: 'text-white bg-gradient-to-r from-blue-500 via-blue-600 to-blue-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 rounded-lg',
|
cyan: 'hover:bg-gradient-to-br',
|
||||||
cyan: 'text-white bg-gradient-to-r from-cyan-500 via-cyan-600 to-cyan-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 rounded-lg',
|
green: 'hover:bg-gradient-to-br',
|
||||||
green: 'text-white bg-gradient-to-r from-green-500 via-green-600 to-green-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 rounded-lg',
|
lime: 'hover:bg-gradient-to-br',
|
||||||
lime: 'text-gray-900 bg-gradient-to-r from-lime-500 via-lime-600 to-lime-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-lime-300 dark:focus:ring-lime-800 rounded-lg',
|
pink: 'hover:bg-gradient-to-br',
|
||||||
pink: 'text-white bg-gradient-to-r from-pink-500 via-pink-600 to-pink-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-pink-300 dark:focus:ring-pink-800 rounded-lg',
|
purple: 'hover:bg-gradient-to-br',
|
||||||
purple:
|
red: 'hover:bg-gradient-to-br',
|
||||||
'text-white bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-purple-300 dark:focus:ring-purple-800 rounded-lg',
|
teal: 'hover:bg-gradient-to-br',
|
||||||
red: 'text-white bg-gradient-to-r from-red-500 via-red-600 to-red-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 rounded-lg',
|
},
|
||||||
teal: 'text-white bg-gradient-to-r from-teal-500 via-teal-600 to-teal-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-teal-300 dark:focus:ring-teal-800 rounded-lg',
|
default: {
|
||||||
|
'cyan-blue': 'text-white bg-gradient-to-r from-cyan-500 to-blue-500 focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 font-medium rounded-lg',
|
||||||
|
'green-blue': 'text-white bg-gradient-to-br from-green-400 to-blue-600 focus:ring-4 focus:outline-none focus:ring-green-200 dark:focus:ring-green-800 font-medium rounded-lg',
|
||||||
|
'pink-orange': 'text-white bg-gradient-to-br from-pink-500 to-orange-400 focus:ring-4 focus:outline-none focus:ring-pink-200 dark:focus:ring-pink-800 font-medium rounded-lg',
|
||||||
|
'purple-blue': 'text-white bg-gradient-to-br from-purple-600 to-blue-500 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg',
|
||||||
|
'purple-pink': 'text-white bg-gradient-to-r from-purple-500 to-pink-500 focus:ring-4 focus:outline-none focus:ring-purple-200 dark:focus:ring-purple-800 font-medium rounded-lg',
|
||||||
|
'red-yellow': 'text-gray-900 bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 focus:ring-4 focus:outline-none focus:ring-red-100 dark:focus:ring-red-400 font-medium rounded-lg',
|
||||||
|
'teal-lime': 'text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 focus:ring-4 focus:outline-none focus:ring-lime-200 dark:focus:ring-teal-700 font-medium rounded-lg',
|
||||||
|
blue: 'text-white bg-gradient-to-r from-blue-500 via-blue-600 to-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 rounded-lg',
|
||||||
|
cyan: 'text-white bg-gradient-to-r from-cyan-500 via-cyan-600 to-cyan-700 focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 rounded-lg',
|
||||||
|
green: 'text-white bg-gradient-to-r from-green-500 via-green-600 to-green-700 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 rounded-lg',
|
||||||
|
lime: 'text-gray-900 bg-gradient-to-r from-lime-500 via-lime-600 to-lime-700 focus:ring-4 focus:outline-none focus:ring-lime-300 dark:focus:ring-lime-800 rounded-lg',
|
||||||
|
pink: 'text-white bg-gradient-to-r from-pink-500 via-pink-600 to-pink-700 focus:ring-4 focus:outline-none focus:ring-pink-300 dark:focus:ring-pink-800 rounded-lg',
|
||||||
|
purple: 'text-white bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 focus:ring-4 focus:outline-none focus:ring-purple-300 dark:focus:ring-purple-800 rounded-lg',
|
||||||
|
red: 'text-white bg-gradient-to-r from-red-500 via-red-600 to-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 rounded-lg',
|
||||||
|
teal: 'text-white bg-gradient-to-r from-teal-500 via-teal-600 to-teal-700 focus:ring-4 focus:outline-none focus:ring-teal-300 dark:focus:ring-teal-800 rounded-lg',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const buttonOutlineGradientClasses: Record<ButtonDuotoneGradient, string> = {
|
const buttonOutlineGradientClasses: { hover: Record<ButtonDuotoneGradient, string>, default: Record<ButtonDuotoneGradient, string> } = {
|
||||||
'cyan-blue':
|
default: {
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-cyan-500 to-blue-500 group-hover:from-cyan-500 group-hover:to-blue-500 hover:text-white dark:text-white focus:ring-4 focus:outline-none focus:ring-cyan-200 dark:focus:ring-cyan-800',
|
'cyan-blue':
|
||||||
'green-blue':
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-cyan-500 to-blue-500 dark:text-white focus:ring-4 focus:outline-none focus:ring-cyan-200 dark:focus:ring-cyan-800',
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-green-400 to-blue-600 group-hover:from-green-400 group-hover:to-blue-600 hover:text-white dark:text-white focus:ring-4 focus:outline-none focus:ring-green-200 dark:focus:ring-green-800',
|
'green-blue':
|
||||||
'pink-orange':
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-green-400 to-blue-600 dark:text-white focus:ring-4 focus:outline-none focus:ring-green-200 dark:focus:ring-green-800',
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-pink-500 to-orange-400 group-hover:from-pink-500 group-hover:to-orange-400 hover:text-white dark:text-white focus:ring-4 focus:outline-none focus:ring-pink-200 dark:focus:ring-pink-800',
|
'pink-orange':
|
||||||
'purple-blue':
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-pink-500 to-orange-400 dark:text-white focus:ring-4 focus:outline-none focus:ring-pink-200 dark:focus:ring-pink-800',
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-purple-600 to-blue-500 group-hover:from-purple-600 group-hover:to-blue-500 hover:text-white dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800',
|
'purple-blue':
|
||||||
'purple-pink':
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-purple-600 to-blue-500 dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800',
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-purple-500 to-pink-500 group-hover:from-purple-500 group-hover:to-pink-500 hover:text-white dark:text-white focus:ring-4 focus:outline-none focus:ring-purple-200 dark:focus:ring-purple-800',
|
'purple-pink':
|
||||||
'red-yellow':
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-purple-500 to-pink-500 dark:text-white focus:ring-4 focus:outline-none focus:ring-purple-200 dark:focus:ring-purple-800',
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-red-200 via-red-300 to-yellow-200 group-hover:from-red-200 group-hover:via-red-300 group-hover:to-yellow-200 dark:text-white dark:hover:text-gray-900 focus:ring-4 focus:outline-none focus:ring-red-100 dark:focus:ring-red-400',
|
'red-yellow':
|
||||||
'teal-lime':
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-red-200 via-red-300 to-yellow-200 dark:text-white focus:ring-4 focus:outline-none focus:ring-red-100 dark:focus:ring-red-400',
|
||||||
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-teal-300 to-lime-300 group-hover:from-teal-300 group-hover:to-lime-300 dark:text-white dark:hover:text-gray-900 focus:ring-4 focus:outline-none focus:ring-lime-200 dark:focus:ring-lime-800',
|
'teal-lime':
|
||||||
|
'relative inline-flex items-center justify-center overflow-hidden font-medium text-gray-900 rounded-lg group bg-gradient-to-br from-teal-300 to-lime-300 dark:text-white focus:ring-4 focus:outline-none focus:ring-lime-200 dark:focus:ring-lime-800',
|
||||||
|
},
|
||||||
|
hover: {
|
||||||
|
'cyan-blue': 'group-hover:from-cyan-500 group-hover:to-blue-500 hover:text-white',
|
||||||
|
'green-blue': 'group-hover:from-green-400 group-hover:to-blue-600 hover:text-white',
|
||||||
|
'pink-orange': 'group-hover:from-pink-500 group-hover:to-orange-400 hover:text-white',
|
||||||
|
'purple-blue': 'group-hover:from-purple-600 group-hover:to-blue-500 hover:text-white',
|
||||||
|
'purple-pink': 'group-hover:from-purple-500 group-hover:to-pink-500 hover:text-white',
|
||||||
|
'red-yellow': 'group-hover:from-red-200 group-hover:via-red-300 group-hover:to-yellow-200 dark:hover:text-gray-900',
|
||||||
|
'teal-lime': 'group-hover:from-teal-300 group-hover:to-lime-300 dark:hover:text-gray-900',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const buttonSizeClasses: Record<ButtonSize, string> = {
|
const buttonSizeClasses: Record<ButtonSize, string> = {
|
||||||
xs: 'text-xs px-2 py-1',
|
xs: 'text-xs px-2 py-1',
|
||||||
sm: 'text-sm px-3 py-1.5',
|
sm: 'text-sm px-3 py-1.5',
|
||||||
@@ -108,7 +156,7 @@ export type UseButtonClassesProps = {
|
|||||||
shadow: ButtonMonochromeGradient | '' | null
|
shadow: ButtonMonochromeGradient | '' | null
|
||||||
}
|
}
|
||||||
|
|
||||||
const simpleColors = ['blue', 'green', 'cyan', 'teal', 'lime', 'red', 'pink', 'purple']
|
const simpleGradients = ['blue', 'green', 'cyan', 'teal', 'lime', 'red', 'pink', 'purple']
|
||||||
|
|
||||||
export function useButtonClasses(props: UseButtonClassesProps): { wrapperClasses: Ref<string>, spanClasses: Ref<string> } {
|
export function useButtonClasses(props: UseButtonClassesProps): { wrapperClasses: Ref<string>, spanClasses: Ref<string> } {
|
||||||
const slots = useSlots()
|
const slots = useSlots()
|
||||||
@@ -123,53 +171,73 @@ export function useButtonClasses(props: UseButtonClassesProps): { wrapperClasses
|
|||||||
const isColor = !!props.color
|
const isColor = !!props.color
|
||||||
const isOutline = props.outline
|
const isOutline = props.outline
|
||||||
|
|
||||||
|
let hoverClass = ''
|
||||||
let backgroundClass = ''
|
let backgroundClass = ''
|
||||||
|
|
||||||
if (isGradient && isOutline) {
|
if (isGradient && isOutline) { // GRADIENT AND OUTLINE
|
||||||
if (simpleColors.includes(props.gradient!)) {
|
if (!simpleGradients.includes(props.gradient!)) {
|
||||||
// invalid gradients for outline
|
backgroundClass = buttonOutlineGradientClasses.default[props.gradient as unknown as keyof typeof buttonOutlineGradientClasses.default]
|
||||||
backgroundClass = buttonGradientClasses[props.gradient!]
|
|
||||||
} else {
|
if(!props.disabled)
|
||||||
backgroundClass = buttonOutlineGradientClasses[props.gradient as unknown as keyof typeof buttonOutlineGradientClasses]
|
hoverClass = buttonOutlineGradientClasses.hover[props.gradient as unknown as keyof typeof buttonOutlineGradientClasses.hover]
|
||||||
}
|
} // TODO: log for invalid props or fallback
|
||||||
} else if (isGradient) {
|
|
||||||
backgroundClass = buttonGradientClasses[props.gradient!]
|
|
||||||
} else if (isColor && isOutline) {
|
} else if (isGradient) { // JUST GRADIENT
|
||||||
if (['alternative', 'light'].includes(props.color)) {
|
backgroundClass = buttonGradientClasses.default[props.gradient!]
|
||||||
// invalid colors for outline
|
|
||||||
backgroundClass = buttonColorClasses[props.color]
|
if(!props.disabled)
|
||||||
} else {
|
hoverClass = buttonGradientClasses.hover[props.gradient!]
|
||||||
backgroundClass = buttonOutlineColorClasses[props.color as unknown as keyof typeof buttonOutlineColorClasses]
|
|
||||||
}
|
|
||||||
} else {
|
} else if (isColor && isOutline) { // COLOR AND OUTLINE
|
||||||
backgroundClass = buttonColorClasses[props.color]
|
if (!['alternative', 'light'].includes(props.color)) {
|
||||||
|
backgroundClass = buttonOutlineColorClasses.default[props.color as unknown as keyof typeof buttonOutlineColorClasses.default]
|
||||||
|
|
||||||
|
if(!props.disabled)
|
||||||
|
hoverClass = buttonOutlineColorClasses.hover[props.color as unknown as keyof typeof buttonOutlineColorClasses.hover]
|
||||||
|
} // TODO: log for invalid props or fallback
|
||||||
|
|
||||||
|
|
||||||
|
} else { // JUST COLOR
|
||||||
|
backgroundClass = buttonColorClasses.default[props.color]
|
||||||
|
|
||||||
|
if(!props.disabled)
|
||||||
|
hoverClass = buttonColorClasses.hover[props.color]
|
||||||
}
|
}
|
||||||
|
|
||||||
let shadowClass = ''
|
let shadowClass = ''
|
||||||
if (props.shadow === '') {
|
if (props.shadow === '') {
|
||||||
// if shadow prop passed without value - try to find color for shadow by gradient
|
// if shadow prop passed without value - try to find color for shadow by gradient
|
||||||
if (props.gradient && simpleColors.includes(props.gradient)) {
|
if (props.gradient && simpleGradients.includes(props.gradient)) {
|
||||||
shadowClass = buttonShadowClasses[props.gradient as unknown as keyof typeof buttonShadowClasses]
|
shadowClass = buttonShadowClasses[props.gradient as unknown as keyof typeof buttonShadowClasses]
|
||||||
}
|
}
|
||||||
} else if (typeof props.shadow === 'string') {
|
} else if (typeof props.shadow === 'string') {
|
||||||
// if provided color for shadow - use it
|
// if provided color for shadow - use it
|
||||||
if (simpleColors.includes(props.shadow)) {
|
if (simpleGradients.includes(props.shadow)) {
|
||||||
shadowClass = buttonShadowClasses[props.shadow as unknown as keyof typeof buttonShadowClasses]
|
shadowClass = buttonShadowClasses[props.shadow as unknown as keyof typeof buttonShadowClasses]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return classNames(
|
return classNames(
|
||||||
backgroundClass,
|
backgroundClass,
|
||||||
|
hoverClass,
|
||||||
shadowClass,
|
shadowClass,
|
||||||
props.pill ? '!rounded-full' : '',
|
props.pill ? '!rounded-full' : '',
|
||||||
props.disabled ? 'cursor-not-allowed' : '',
|
props.disabled ? 'cursor-not-allowed opacity-50' : '',
|
||||||
isGradient && isOutline ? 'p-0.5' : sizeClasses.value,
|
isGradient && isOutline ? 'p-0.5' : sizeClasses.value,
|
||||||
(slots.prefix || slots.suffix || props.loading) ? 'inline-flex items-center' : '',
|
(slots.prefix || slots.suffix || props.loading) ? 'inline-flex items-center' : '',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const spanClasses = computed(() => {
|
const spanClasses = computed(() => {
|
||||||
if (!!props.gradient && props.outline) return classNames('relative transition-all ease-in duration-75 bg-white dark:bg-gray-900 rounded-md group-hover:bg-opacity-0', sizeClasses.value)
|
if (!!props.gradient && props.outline) { // ONLY FOR GRADIENT OUTLINE BUTTON
|
||||||
|
return classNames(
|
||||||
|
'relative bg-white dark:bg-gray-900 rounded-md',
|
||||||
|
sizeClasses.value,
|
||||||
|
!props.disabled ? 'group-hover:bg-opacity-0 transition-all ease-in duration-75' : '',
|
||||||
|
)
|
||||||
|
}
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user