import cn from 'clsx'; 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; } // eslint-disable-next-line react/display-name 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;