import cx from "clsx";
import { type ButtonHTMLAttributes, forwardRef, type PropsWithChildren } from "react";
import { registerComponent } from "../../registries/components";
export const BUTTON_VARIANTS = [
"primary",
"secondary",
"success",
"danger",
"warning",
"info",
"light",
"dark",
"link",
"outline-primary",
"outline-secondary",
"outline-success",
"outline-danger",
"outline-warning",
"outline-info",
"outline-light",
"outline-dark",
"outline-link"
];
interface BaseButtonProps extends ButtonHTMLAttributes {
tag?: "button" | "a" | "input" | "div";
variant?: (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS] | string;
}
interface HTMLAnchorProps extends BaseButtonProps {
tag: "a";
}
interface HTMLButtonProps extends BaseButtonProps {
tag?: "button";
}
interface HTMLInputProps extends BaseButtonProps {
tag: "input";
}
interface HTMLDivProps extends BaseButtonProps {
tag: "div";
}
export type ButtonProps = HTMLAnchorProps | HTMLButtonProps | HTMLInputProps | HTMLDivProps;
export const Button = forwardRef(({ tag: Tag = "button", variant, className, children, ...props }: PropsWithChildren, ref) => {
return (
!props.disabled && props.onClick?.(evt as any)}
>
{children}
);
});
Button.displayName = "Button";
registerComponent("Button", Button);