| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 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  spinnerClassName?: string} & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof buttonVariants>const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(  ({ className, variant, size, destructive, loading, styleCss, children, spinnerClassName, ...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={classNames('!text-white !h-3 !w-3 !border-2 !ml-1', spinnerClassName)} />}      </button>    )  },)Button.displayName = 'Button'export default Buttonexport { Button, buttonVariants }
 |