import { forwardRef } from 'react' import { Button as BS5Button, Spinner } from 'react-bootstrap-5' import type { ButtonProps } from '@/features/ui/components/types/button-props' import classNames from 'classnames' import { useTranslation } from 'react-i18next' import MaterialIcon from '@/shared/components/material-icon' const sizeClasses = new Map([ ['small', 'btn-sm'], ['default', ''], ['large', 'btn-lg'], ]) const Button = forwardRef( ( { children, className, leadingIcon, isLoading = false, loadingLabel, size = 'default', trailingIcon, variant = 'primary', ...props }, ref ) => { const { t } = useTranslation() const sizeClass = sizeClasses.get(size) const buttonClassName = classNames('d-inline-grid', sizeClass, className, { 'button-loading': isLoading, }) const loadingSpinnerClassName = size === 'large' ? 'loading-spinner-large' : 'loading-spinner-small' const materialIconClassName = size === 'large' ? 'icon-large' : 'icon-small' return ( {isLoading && ( )} {leadingIcon && ( )} {children} {trailingIcon && ( )} ) } ) Button.displayName = 'Button' export default Button