comicbox/components/Button.tsx

63 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-07-25 17:31:20 +00:00
import {
AnchorHTMLAttributes,
ButtonHTMLAttributes,
DetailedHTMLProps,
} from 'react';
2022-07-27 21:10:23 +00:00
import Link from 'next/link';
import { UrlObject } from 'url';
interface CustomProps {
noDefaultColous?: boolean;
}
2022-07-25 17:31:20 +00:00
export default function Button({
className,
noDefaultColous,
2022-07-25 17:31:20 +00:00
...props
}: DetailedHTMLProps<
ButtonHTMLAttributes<HTMLButtonElement>,
HTMLButtonElement
> &
CustomProps) {
const classes = [className];
classes.push(
'p-2',
'rounded',
'shadow',
'shadow-slate-800',
'transition-colors'
2022-07-25 17:31:20 +00:00
);
if (!noDefaultColous) {
2022-07-26 21:18:54 +00:00
classes.push(
'bg-slate-600',
'text-slate-50',
'hover:bg-slate-500',
'disabled:bg-slate-900',
'disabled:text-slate-200'
);
}
return <button className={classes.join(' ')} {...props} />;
}
type LinkButtonProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {
href: string | UrlObject;
};
2022-08-01 16:20:29 +00:00
export function LinkButton({
className,
children,
href,
...props
}: LinkButtonProps) {
2022-07-25 17:31:20 +00:00
return (
<Link href={href}>
2022-07-27 21:10:23 +00:00
<a
className={'text-blue-200 hover:underline ' + (className || '')}
{...props}
>
2022-07-25 17:31:20 +00:00
{children}
</a>
</Link>
);
}