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 Button = forwardRef( ( { children, className, leadingIcon, isLoading = false, loadingLabel, trailingIcon, variant = 'primary', ...props }, ref ) => { const { t } = useTranslation() const buttonClassName = classNames('d-inline-grid', className, { 'button-loading': isLoading, }) const loadingSpinnerClassName = props.size === 'lg' ? 'loading-spinner-large' : 'loading-spinner-small' const materialIconClassName = props.size === 'lg' ? 'icon-large' : 'icon-small' const leadingIconComponent = leadingIcon && typeof leadingIcon === 'string' ? ( ) : ( leadingIcon ) const trailingIconComponent = trailingIcon && typeof trailingIcon === 'string' ? ( ) : ( trailingIcon ) return ( {isLoading && ( )} {leadingIconComponent} {children} {trailingIconComponent} ) } ) Button.displayName = 'Button' export default Button