zhou20120904's picture
Upload 48 files
a62d4c5 verified
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 (
<div
role="button"
onKeyDown={() => {
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}
<span className="whitespace-nowrap select-none">{children}</span>
</div>
)
}