import clsx from 'clsx'; import React from 'react'; import Icon from 'soapbox/components/icon'; interface IIconButton extends Pick, 'className' | 'disabled' | 'onClick' | 'onKeyDown' | 'onKeyPress' | 'onKeyUp' | 'onMouseDown' | 'onMouseEnter' | 'onMouseLeave' | 'tabIndex' | 'title'> { active?: boolean; expanded?: boolean; iconClassName?: string; pressed?: boolean; size?: number; src: string; text?: React.ReactNode; } const IconButton: React.FC = ({ active, className, disabled, expanded, iconClassName, onClick, onKeyDown, onKeyUp, onKeyPress, onMouseDown, onMouseEnter, onMouseLeave, pressed, size = 18, src, tabIndex = 0, text, title, }) => { const handleClick: React.MouseEventHandler = (e) => { e.preventDefault(); if (!disabled && onClick) { onClick(e); } }; const handleMouseDown: React.MouseEventHandler = (e) => { if (!disabled && onMouseDown) { onMouseDown(e); } }; const handleKeyDown: React.KeyboardEventHandler = (e) => { if (!disabled && onKeyDown) { onKeyDown(e); } }; const handleKeyUp: React.KeyboardEventHandler = (e) => { if (!disabled && onKeyUp) { onKeyUp(e); } }; const handleKeyPress: React.KeyboardEventHandler = (e) => { if (onKeyPress && !disabled) { onKeyPress(e); } }; const classes = clsx(className, 'icon-button', { active, disabled, }); return ( ); }; export default IconButton;