import classNames 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 = classNames(className, 'icon-button', { active, disabled, }); return ( ); }; export default IconButton;