import cn from 'classnames' import React, { forwardRef, ButtonHTMLAttributes, JSXElementConstructor, useRef, } from 'react' import mergeRefs from 'react-merge-refs' import s from './Button.module.css' import { LoadingDots } from '@components/ui' export interface ButtonProps extends ButtonHTMLAttributes { href?: string className?: string variant?: 'flat' | 'slim' | 'ghost' | 'naked' active?: boolean type?: 'submit' | 'reset' | 'button' Component?: string | JSXElementConstructor width?: string | number loading?: boolean disabled?: boolean } const Button: React.FC = forwardRef((props, buttonRef) => { const { className, variant = 'flat', children, active, width, loading = false, disabled = false, style = {}, Component = 'button', ...rest } = props const ref = useRef(null) const rootClassName = cn( s.root, { [s.ghost]: variant === 'ghost', [s.slim]: variant === 'slim', [s.naked]: variant === 'naked', [s.loading]: loading, [s.disabled]: disabled, }, className ) return ( {children} {loading && ( )} ) }) export default Button