feat(Button): add subtle variant

This commit is contained in:
Benjamin Canac
2024-04-12 17:23:04 +02:00
parent 9a42338da3
commit 1d2e1caaf5
4 changed files with 16 additions and 6 deletions

View File

@@ -2,6 +2,7 @@
import theme from '#build/ui/button'
const sizes = Object.keys(theme.variants.size)
const variants = Object.keys(theme.variants.variant)
</script>
<template>
@@ -40,11 +41,7 @@ const sizes = Object.keys(theme.variants.size)
</UButton>
</div>
<div class="flex items-center gap-2">
<UButton icon="i-heroicons-rocket-launch" label="Button" />
<UButton icon="i-heroicons-rocket-launch" label="Button" variant="outline" />
<UButton icon="i-heroicons-rocket-launch" label="Button" variant="soft" />
<UButton icon="i-heroicons-rocket-launch" label="Button" variant="ghost" />
<UButton icon="i-heroicons-rocket-launch" label="Button" variant="link" />
<UButton v-for="variant in variants" :key="variant" icon="i-heroicons-rocket-launch" label="Button" :variant="(variant as any)" />
</div>
<div class="flex items-center gap-2">
<UButton icon="i-heroicons-rocket-launch" label="Button" color="white" />
@@ -79,7 +76,7 @@ const sizes = Object.keys(theme.variants.size)
<UButton v-for="size in sizes" :key="size" icon="i-heroicons-rocket-launch" :size="(size as any)" />
</div>
<div class="flex items-center gap-2">
<UButton icon="i-heroicons-rocket-launch" trailing-icon="i-heroicons-chevron-down-20-solid" label="Block" loading block />
<UButton icon="i-heroicons-rocket-launch" trailing-icon="i-heroicons-chevron-down-20-solid" label="Block" block />
</div>
<div class="flex items-center gap-2">
<UButton icon="i-heroicons-cloud-arrow-down" label="Button" class="group" :ui="{ leadingIcon: 'group-hover:animate-pulse' }" />

View File

@@ -16,6 +16,7 @@ export default (config: { colors: string[] }) => ({
solid: '',
outline: '',
soft: '',
subtle: '',
ghost: '',
link: ''
},
@@ -87,6 +88,10 @@ export default (config: { colors: string[] }) => ({
color,
variant: 'soft',
class: `text-${color}-500 dark:text-${color}-400 bg-${color}-50 hover:bg-${color}-100 disabled:bg-${color}-50 dark:bg-${color}-950 dark:hover:bg-${color}-900 dark:disabled:bg-${color}-950 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-${color}-500 dark:focus-visible:ring-${color}-400`
})), ...config.colors.map((color: string) => ({
color,
variant: 'subtle',
class: `text-${color}-500 dark:text-${color}-400 ring ring-inset ring-${color}-500/25 dark:ring-${color}-400/25 bg-${color}-500/10 hover:bg-${color}-100 disabled:bg-${color}-50 dark:bg-${color}-400/10 dark:hover:bg-${color}-950 dark:disabled:bg-${color}-400/10 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-${color}-500 dark:focus-visible:ring-${color}-400`
})), ...config.colors.map((color: string) => ({
color,
variant: 'ghost',

View File

@@ -15,6 +15,7 @@ describe('Button', () => {
['with color', { props: { label: 'Button', color: 'red' as const } }],
['with variant outline', { props: { label: 'Button', variant: 'outline' as const } }],
['with variant soft', { props: { label: 'Button', variant: 'soft' as const } }],
['with variant subtle', { props: { label: 'Button', variant: 'subtle' as const } }],
['with variant ghost', { props: { label: 'Button', variant: 'ghost' as const } }],
['with variant link', { props: { label: 'Button', variant: 'link' as const } }],
['with icon', { props: { icon: 'i-heroicons-rocket-launch' } }],

View File

@@ -197,3 +197,10 @@ exports[`Button > renders with variant soft correctly 1`] = `
<!--v-if-->
</button>"
`;
exports[`Button > renders with variant subtle correctly 1`] = `
"<button type="button" class="rounded-md font-medium inline-flex items-center focus:outline-none disabled:cursor-not-allowed disabled:opacity-75 px-2.5 py-1.5 text-sm gap-x-1.5 text-primary-500 dark:text-primary-400 ring ring-inset ring-primary-500/25 dark:ring-primary-400/25 bg-primary-500/10 hover:bg-primary-100 disabled:bg-primary-50 dark:bg-primary-400/10 dark:hover:bg-primary-950 dark:disabled:bg-primary-400/10 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500 dark:focus-visible:ring-primary-400">
<!--v-if--><span class="">Button</span>
<!--v-if-->
</button>"
`;