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'; } }