83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import { cva } from 'class-variance-authority'
|
|
|
|
import styles from './iconButton.module.css'
|
|
|
|
const variantKeys = {
|
|
theme: {
|
|
Primary: 'Primary',
|
|
Tertiary: 'Tertiary',
|
|
Inverted: 'Inverted',
|
|
Black: 'Black',
|
|
},
|
|
style: {
|
|
Normal: 'Normal',
|
|
Muted: 'Muted',
|
|
Elevated: 'Elevated',
|
|
Faded: 'Faded',
|
|
},
|
|
} as const
|
|
|
|
export const config = {
|
|
variants: {
|
|
theme: {
|
|
[variantKeys.theme.Primary]: styles['theme-primary'],
|
|
[variantKeys.theme.Tertiary]: styles['theme-tertiary'],
|
|
[variantKeys.theme.Inverted]: styles['theme-inverted'],
|
|
[variantKeys.theme.Black]: styles['theme-black'],
|
|
},
|
|
// Some variants cannot be used in combination with certain style variants.
|
|
// The style variant will be applied using the compoundVariants.
|
|
style: {
|
|
[variantKeys.style.Normal]: '',
|
|
[variantKeys.style.Muted]: '',
|
|
[variantKeys.style.Elevated]: '',
|
|
[variantKeys.style.Faded]: '',
|
|
},
|
|
wrapping: {
|
|
true: styles['no-wrapping'],
|
|
false: undefined,
|
|
},
|
|
},
|
|
compoundVariants: [
|
|
// Primary should only use Normal
|
|
{ theme: variantKeys.theme.Primary, className: styles['style-normal'] },
|
|
|
|
// Tertiary should only use Elevated
|
|
{
|
|
theme: variantKeys.theme.Tertiary,
|
|
className: styles['style-elevated'],
|
|
},
|
|
|
|
// Black should only use Muted
|
|
{ theme: variantKeys.theme.Black, className: styles['style-muted'] },
|
|
|
|
// Inverted can use any style variant
|
|
{
|
|
theme: variantKeys.theme.Inverted,
|
|
style: variantKeys.style.Normal,
|
|
className: styles['style-normal'],
|
|
},
|
|
{
|
|
theme: variantKeys.theme.Inverted,
|
|
style: variantKeys.style.Muted,
|
|
className: styles['style-muted'],
|
|
},
|
|
{
|
|
theme: variantKeys.theme.Inverted,
|
|
style: variantKeys.style.Elevated,
|
|
className: styles['style-elevated'],
|
|
},
|
|
{
|
|
theme: variantKeys.theme.Inverted,
|
|
style: variantKeys.style.Faded,
|
|
className: styles['style-faded'],
|
|
},
|
|
],
|
|
defaultVariants: {
|
|
theme: variantKeys.theme.Primary,
|
|
style: variantKeys.style.Normal,
|
|
},
|
|
}
|
|
|
|
export const variants = cva(styles.iconButton, config)
|