| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 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 Buttonexport { Button, buttonVariants }
 |