import { memo } from 'react'; import { classNames } from '~/utils/classNames'; type IconSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl'; interface BaseIconButtonProps { size?: IconSize; className?: string; iconClassName?: string; disabledClassName?: string; title?: string; disabled?: boolean; onClick?: (event: React.MouseEvent) => void; } type IconButtonWithoutChildrenProps = { icon: string; children?: undefined; } & BaseIconButtonProps; type IconButtonWithChildrenProps = { icon?: undefined; children: string | JSX.Element | JSX.Element[]; } & BaseIconButtonProps; type IconButtonProps = IconButtonWithoutChildrenProps | IconButtonWithChildrenProps; export const IconButton = memo( ({ icon, size = 'xl', className, iconClassName, disabledClassName, disabled = false, title, onClick, children, }: IconButtonProps) => { return ( ); }, ); function getIconSize(size: IconSize) { switch (size) { case 'sm': { return 'text-sm'; } case 'md': { return 'text-base'; } case 'lg': { return 'text-lg'; } case 'xl': { return 'text-xl'; } case 'xxl': { return 'text-2xl'; } default: { return 'text-base'; } } }