Spaces:
Build error
Build error
import type { CSSProperties } from 'react' | |
import React from 'react' | |
import { type VariantProps, cva } from 'class-variance-authority' | |
import Spinner from '../spinner' | |
import classNames from '@/utils/classnames' | |
const buttonVariants = cva( | |
'btn disabled:btn-disabled', | |
{ | |
variants: { | |
variant: { | |
'primary': 'btn-primary', | |
'warning': 'btn-warning', | |
'secondary': 'btn-secondary', | |
'secondary-accent': 'btn-secondary-accent', | |
'ghost': 'btn-ghost', | |
'ghost-accent': 'btn-ghost-accent', | |
'tertiary': 'btn-tertiary', | |
}, | |
size: { | |
small: 'btn-small', | |
medium: 'btn-medium', | |
large: 'btn-large', | |
}, | |
}, | |
defaultVariants: { | |
variant: 'secondary', | |
size: 'medium', | |
}, | |
}, | |
) | |
export type ButtonProps = { | |
destructive?: boolean | |
loading?: boolean | |
styleCss?: CSSProperties | |
} & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof buttonVariants> | |
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | |
({ className, variant, size, destructive, loading, styleCss, children, ...props }, ref) => { | |
return ( | |
<button | |
type='button' | |
className={classNames( | |
buttonVariants({ variant, size, className }), | |
destructive && 'btn-destructive', | |
)} | |
ref={ref} | |
style={styleCss} | |
{...props} | |
> | |
{children} | |
{loading && <Spinner loading={loading} className='!text-white !h-3 !w-3 !border-2 !ml-1' />} | |
</button> | |
) | |
}, | |
) | |
Button.displayName = 'Button' | |
export default Button | |
export { Button, buttonVariants } | |