icon-button.tsx 842 B

12345678910111213141516171819202122232425262728
  1. import classNames from 'classnames'
  2. import MaterialIcon from '@/shared/components/material-icon'
  3. import Button from './button'
  4. import type { IconButtonProps } from '@/features/ui/components/types/icon-button-props'
  5. export default function IconButton({
  6. accessibilityLabel,
  7. icon,
  8. isLoading = false,
  9. size = 'default',
  10. ...props
  11. }: IconButtonProps) {
  12. const iconButtonClassName = `icon-button-${size}`
  13. const iconSizeClassName = size === 'large' ? 'icon-large' : 'icon-small'
  14. const materialIconClassName = classNames(iconSizeClassName, {
  15. 'button-content-hidden': isLoading,
  16. })
  17. return (
  18. <Button className={iconButtonClassName} isLoading={isLoading} {...props}>
  19. <MaterialIcon
  20. accessibilityLabel={accessibilityLabel}
  21. className={materialIconClassName}
  22. type={icon}
  23. />
  24. </Button>
  25. )
  26. }