import { memo, useMemo } from "preact/compat"; import { twMerge } from "tailwind-merge"; import type { AnchorHTMLAttributes, ButtonHTMLAttributes, PreactDOMAttributes, } from "preact"; export type ButtonProps = { className?: string; selected?: boolean; theme?: "primary" | "secondary"; } & AnchorHTMLAttributes & ButtonHTMLAttributes & PreactDOMAttributes; const baseClasses = "flex gap-2 items-center px-4 py-2 rounded-2xl border hover:border-black hover:not-disabled:cursor-pointer"; export const themes = { primary: { classes: "", selectedClasses: "", }, secondary: { classes: "", selectedClasses: "", }, }; function Button({ children, className, href, selected = false, theme = "secondary", ...props }: ButtonProps) { const classes = useMemo(() => { return twMerge( baseClasses, themes[theme].classes, selected ? themes[theme].selectedClasses : "", className, ); }, [className, selected, theme]); if (href) { return ( {children} ); } return ( ); } export default memo(Button);