import React, { forwardRef, ButtonHTMLAttributes } from 'react' import { Slot } from '@radix-ui/react-slot' import { cva, type VariantProps } from 'class-variance-authority' import { twMerge } from 'tailwind-merge' import './styles.scss' export const buttonConfig = { variants: { theme: { primary: 'btn--primary', ghost: 'btn--ghost', icon: 'btn--icon', destructive: 'btn--destructive', }, variant: { solid: 'btn--solid', soft: 'btn--soft', outline: 'btn--outline', }, size: { small: 'btn--small', medium: 'btn--medium', large: 'btn--large', }, block: { true: 'btn--block', }, }, defaultVariants: { theme: 'primary' as const, size: 'medium' as const, variant: 'solid' as const, block: false as const, }, } const buttonVariants = cva('btn', buttonConfig) export interface ButtonProps extends ButtonHTMLAttributes, VariantProps { asChild?: boolean } const Button = forwardRef( ( { className, theme, size, variant, block, asChild = false, ...props }, ref ) => { const Comp = asChild ? Slot : 'button' return ( ) } ) export { Button }