import { ReactNode, useState } from 'react' interface ButtonProps { children: ReactNode className?: string icon?: ReactNode primary?: boolean style?: { [key: string]: string } onClick?: () => void onDown?: () => void onUp?: () => void onEnter?: () => void onLeave?: () => void } export default function Button(props: ButtonProps) { const { children, className, icon, primary, style, onClick, onDown, onUp, onEnter, onLeave, } = props const [active, setActive] = useState(false) let background = '' if (primary) { background = 'bg-primary hover:bg-black hover:text-white' } if (active) { background = 'bg-black text-white' } if (!primary && !active) { background = 'hover:bg-primary' } return (
{ onDown?.() }} onClick={onClick} onPointerDown={() => { setActive(true) onDown?.() }} onPointerUp={() => { setActive(false) onUp?.() }} onPointerEnter={() => { onEnter?.() }} onPointerLeave={() => { onLeave?.() }} tabIndex={-1} className={[ 'inline-flex space-x-3 py-3 px-5 rounded-md cursor-pointer', background, className, ].join(' ')} style={style} > {icon} {children}
) }