import React from 'react'; import { Button as ReactstrapButton, ButtonProps as ReactstrapButtonProps } from 'reactstrap'; import classNames from 'classnames'; interface ButtonProps extends ReactstrapButtonProps { onHoverStyle?: React.CSSProperties; onActiveStyle?: React.CSSProperties; onFocusStyle?: React.CSSProperties; hoverClassName?: string; activeClassName?: string; focusClassName?: string; } type OutlineButtonProps = Omit; const Button: React.FC = (props: ButtonProps) => { const { style, className, children, active, onFocus, onHoverStyle, onActiveStyle, onFocusStyle, hoverClassName = '', focusClassName = '', activeClassName = '', ...rest } = props; const [hover, setHover] = React.useState(false); const [focus, setFocus] = React.useState(false); const klassNames = classNames(className, { [focusClassName]: focus, [activeClassName]: active, [hoverClassName]: hover, }); return ( ) => { onFocus?.(e); setFocus(!focus); }} onMouseEnter={() => setHover(!hover)} onMouseLeave={() => setHover(!hover)} className={klassNames} style={{ ...style, ...(hover && onHoverStyle), ...(active && onActiveStyle), ...(focus && onFocusStyle), }}> {children} ); }; const OutlineButton: React.FC = (props) => { const { children, className, ...rest } = props; return ( ); }; const FlatButton: React.FC = (props) => { const { style, children, className, ...rest } = props; return ( ); }; const RaisedButton: React.FC = (props) => { const { children, className, ...rest } = props; return ( ); }; const CircleButton: React.FC = (props) => { const { children, className, ...rest } = props; return ( ); }; export { Button, OutlineButton, FlatButton, RaisedButton, CircleButton };